summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Schemas/Parameter.xsd2
-rw-r--r--parameter/Android.mk3
-rw-r--r--parameter/EnumParameterType.cpp82
-rw-r--r--parameter/EnumParameterType.h14
-rw-r--r--parameter/EnumValuePair.cpp75
-rw-r--r--parameter/EnumValuePair.h56
-rw-r--r--parameter/ParameterMgr.cpp8
-rw-r--r--parameter/SystemClass.cpp2
-rw-r--r--xmlserializer/XmlComposer.cpp2
9 files changed, 190 insertions, 54 deletions
diff --git a/Schemas/Parameter.xsd b/Schemas/Parameter.xsd
index 098ee26..81f87c8 100644
--- a/Schemas/Parameter.xsd
+++ b/Schemas/Parameter.xsd
@@ -63,7 +63,7 @@
<xs:sequence>
<xs:element name="ValuePair" maxOccurs="unbounded">
<xs:complexType>
- <xs:attribute name="Literal" type="xs:NMTOKEN" use="required"/>
+ <xs:attribute name="Literal" type="xs:string" use="required"/>
<xs:attribute name="Numerical" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
diff --git a/parameter/Android.mk b/parameter/Android.mk
index eab9430..90e9ada 100644
--- a/parameter/Android.mk
+++ b/parameter/Android.mk
@@ -92,7 +92,8 @@ LOCAL_SRC_FILES:= \
ParameterHandle.cpp \
ParameterAdaptation.cpp \
LinearParameterAdaptation.cpp \
- RuleParser.cpp
+ RuleParser.cpp \
+ EnumValuePair.cpp
LOCAL_MODULE:= libparameter
diff --git a/parameter/EnumParameterType.cpp b/parameter/EnumParameterType.cpp
index 87cefcd..60c937c 100644
--- a/parameter/EnumParameterType.cpp
+++ b/parameter/EnumParameterType.cpp
@@ -35,6 +35,7 @@
#include <ctype.h>
#include <assert.h>
#include "ParameterAccessContext.h"
+#include "EnumValuePair.h"
#define base CParameterType
@@ -47,6 +48,11 @@ string CEnumParameterType::getKind() const
return "EnumParameter";
}
+bool CEnumParameterType::childrenAreDynamic() const
+{
+ return true;
+}
+
// Element properties
void CEnumParameterType::showProperties(string& strResult) const
{
@@ -55,14 +61,17 @@ void CEnumParameterType::showProperties(string& strResult) const
strResult += "Value Pairs:\n";
// Show all value pairs
- ValuePairListIterator it;
+ uint32_t uiChild;
+ uint32_t uiNbChildren = getNbChildren();
+
+ for (uiChild = 0; uiChild < uiNbChildren; uiChild++) {
- for (it = _valuePairList.begin(); it != _valuePairList.end(); ++it) {
+ const CEnumValuePair* pValuePair = static_cast<const CEnumValuePair*>(getChild(uiChild));
strResult += "\tLiteral: \"";
- strResult += it->_strLiteral;
+ strResult += pValuePair->getName();
strResult += "\", Numerical: ";
- strResult += toString(it->_iNumerical);
+ strResult += pValuePair->getNumericalAsString();
strResult += "\n";
}
}
@@ -75,26 +84,8 @@ bool CEnumParameterType::fromXml(const CXmlElement& xmlElement, CXmlSerializingC
// Size
setSize(uiSizeInBits / 8);
- // Get value pairs
- CXmlElement::CChildIterator it(xmlElement);
-
- CXmlElement xmlValuePairElement;
-
- while (it.next(xmlValuePairElement)) {
-
- _valuePairList.push_back(SValuePair(xmlValuePairElement.getAttributeString("Literal"), xmlValuePairElement.getAttributeSignedInteger("Numerical")));
- }
-
- // Check value pair list
- if (_valuePairList.empty()) {
-
- serializingContext.setError("No Value pairs provided for element " + xmlElement.getPath());
-
- return false;
- }
-
- // Don't dig
- return true;
+ // Base
+ return base::fromXml(xmlElement, serializingContext);
}
// Conversion (tuning)
@@ -214,10 +205,13 @@ bool CEnumParameterType::fromBlackboard(int32_t& iUserValue, uint32_t uiValue, C
// Default value handling (simulation only)
uint32_t CEnumParameterType::getDefaultValue() const
{
- assert(!_valuePairList.empty());
+ if (!getNbChildren()) {
+
+ return 0;
+ }
- // Return first item
- return _valuePairList.front()._iNumerical;
+ // Return first available numerical
+ return static_cast<const CEnumValuePair*>(getChild(0))->getNumerical();
}
// Check string is a number
@@ -231,47 +225,59 @@ bool CEnumParameterType::isNumber(const string& strValue)
// Literal - numerical conversions
bool CEnumParameterType::getLiteral(int32_t iNumerical, string& strLiteral) const
{
- ValuePairListIterator it;
+ uint32_t uiChild;
+ uint32_t uiNbChildren = getNbChildren();
- for (it = _valuePairList.begin(); it != _valuePairList.end(); ++it) {
+ for (uiChild = 0; uiChild < uiNbChildren; uiChild++) {
- if (it->_iNumerical == iNumerical) {
+ const CEnumValuePair* pValuePair = static_cast<const CEnumValuePair*>(getChild(uiChild));
- strLiteral = it->_strLiteral;
+ if (pValuePair->getNumerical() == iNumerical) {
+
+ strLiteral = pValuePair->getName();
return true;
}
}
+
return false;
}
bool CEnumParameterType::getNumerical(const string& strLiteral, int32_t& iNumerical) const
{
- ValuePairListIterator it;
+ uint32_t uiChild;
+ uint32_t uiNbChildren = getNbChildren();
+
+ for (uiChild = 0; uiChild < uiNbChildren; uiChild++) {
- for (it = _valuePairList.begin(); it != _valuePairList.end(); ++it) {
+ const CEnumValuePair* pValuePair = static_cast<const CEnumValuePair*>(getChild(uiChild));
- if (it->_strLiteral == strLiteral) {
+ if (pValuePair->getName() == strLiteral) {
- iNumerical = it->_iNumerical;
+ iNumerical = pValuePair->getNumerical();
return true;
}
}
+
return false;
}
// Numerical validity
bool CEnumParameterType::isValid(int32_t iNumerical) const
{
- ValuePairListIterator it;
+ uint32_t uiChild;
+ uint32_t uiNbChildren = getNbChildren();
+
+ for (uiChild = 0; uiChild < uiNbChildren; uiChild++) {
- for (it = _valuePairList.begin(); it != _valuePairList.end(); ++it) {
+ const CEnumValuePair* pValuePair = static_cast<const CEnumValuePair*>(getChild(uiChild));
- if (it->_iNumerical == iNumerical) {
+ if (pValuePair->getNumerical() == iNumerical) {
return true;
}
}
+
return false;
}
diff --git a/parameter/EnumParameterType.h b/parameter/EnumParameterType.h
index 9ef6343..a195fea 100644
--- a/parameter/EnumParameterType.h
+++ b/parameter/EnumParameterType.h
@@ -36,15 +36,6 @@
class CEnumParameterType : public CParameterType
{
- // Value pairs
- struct SValuePair
- {
- SValuePair(const string& strLiteral, int32_t iNumerical) : _strLiteral(strLiteral), _iNumerical(iNumerical) {}
-
- string _strLiteral;
- int32_t _iNumerical;
- };
- typedef list<SValuePair>::const_iterator ValuePairListIterator;
public:
CEnumParameterType(const string& strName);
@@ -68,6 +59,8 @@ public:
// CElement
virtual string getKind() const;
private:
+ // Returns true if children dynamic creation is to be dealt with
+ virtual bool childrenAreDynamic() const;
// Check string is a number
static bool isNumber(const string& strValue);
@@ -77,7 +70,4 @@ private:
// Numerical validity
bool isValid(int32_t iNumerical) const;
-
- // Value pairs
- list<SValuePair> _valuePairList;
};
diff --git a/parameter/EnumValuePair.cpp b/parameter/EnumValuePair.cpp
new file mode 100644
index 0000000..789d8f9
--- /dev/null
+++ b/parameter/EnumValuePair.cpp
@@ -0,0 +1,75 @@
+/* <auto_header>
+ * <FILENAME>
+ *
+ * INTEL CONFIDENTIAL
+ * Copyright © 2011 Intel
+ * Corporation All Rights Reserved.
+ *
+ * The source code contained or described herein and all documents related to
+ * the source code ("Material") are owned by Intel Corporation or its suppliers
+ * or licensors. Title to the Material remains with Intel Corporation or its
+ * suppliers and licensors. The Material contains trade secrets and proprietary
+ * and confidential information of Intel or its suppliers and licensors. The
+ * Material is protected by worldwide copyright and trade secret laws and
+ * treaty provisions. No part of the Material may be used, copied, reproduced,
+ * modified, published, uploaded, posted, transmitted, distributed, or
+ * disclosed in any way without Intel’s prior express written permission.
+ *
+ * No license under any patent, copyright, trade secret or other intellectual
+ * property right is granted to or conferred upon you by disclosure or delivery
+ * of the Materials, either expressly, by implication, inducement, estoppel or
+ * otherwise. Any license under such intellectual property rights must be
+ * express and approved by Intel in writing.
+ *
+ * AUTHOR: Patrick Benavoli (patrickx.benavoli@intel.com)
+ * CREATED: 2011-06-01
+ * UPDATED: 2011-07-27
+ *
+ *
+ * </auto_header>
+ */
+#include "EnumValuePair.h"
+
+#define base CElement
+
+CEnumValuePair::CEnumValuePair() : _iNumerical(0)
+{
+}
+
+// CElement
+string CEnumValuePair::getKind() const
+{
+ return "ValuePair";
+}
+
+// Numerical
+int32_t CEnumValuePair::getNumerical() const
+{
+ return _iNumerical;
+}
+
+string CEnumValuePair::getNumericalAsString() const
+{
+ return toString(_iNumerical);
+}
+
+// From IXmlSink
+bool CEnumValuePair::fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext)
+{
+ // Literal
+ setName(xmlElement.getAttributeString("Literal"));
+
+ // Numerical
+ _iNumerical = xmlElement.getAttributeSignedInteger("Numerical");
+
+ // Base
+ return base::fromXml(xmlElement, serializingContext);
+}
+
+// Content dumping
+void CEnumValuePair::logValue(string& strValue, CErrorContext& errorContext) const
+{
+ (void)errorContext;
+ // Convert value
+ strValue = getNumericalAsString();
+}
diff --git a/parameter/EnumValuePair.h b/parameter/EnumValuePair.h
new file mode 100644
index 0000000..717fc72
--- /dev/null
+++ b/parameter/EnumValuePair.h
@@ -0,0 +1,56 @@
+/* <auto_header>
+ * <FILENAME>
+ *
+ * INTEL CONFIDENTIAL
+ * Copyright © 2011 Intel
+ * Corporation All Rights Reserved.
+ *
+ * The source code contained or described herein and all documents related to
+ * the source code ("Material") are owned by Intel Corporation or its suppliers
+ * or licensors. Title to the Material remains with Intel Corporation or its
+ * suppliers and licensors. The Material contains trade secrets and proprietary
+ * and confidential information of Intel or its suppliers and licensors. The
+ * Material is protected by worldwide copyright and trade secret laws and
+ * treaty provisions. No part of the Material may be used, copied, reproduced,
+ * modified, published, uploaded, posted, transmitted, distributed, or
+ * disclosed in any way without Intel’s prior express written permission.
+ *
+ * No license under any patent, copyright, trade secret or other intellectual
+ * property right is granted to or conferred upon you by disclosure or delivery
+ * of the Materials, either expressly, by implication, inducement, estoppel or
+ * otherwise. Any license under such intellectual property rights must be
+ * express and approved by Intel in writing.
+ *
+ * AUTHOR: Patrick Benavoli (patrickx.benavoli@intel.com)
+ * CREATED: 2011-06-01
+ * UPDATED: 2011-07-27
+ *
+ *
+ * </auto_header>
+ */
+#pragma once
+
+#include "Element.h"
+
+class CEnumValuePair : public CElement
+{
+public:
+ CEnumValuePair();
+
+ // Numerical
+ int32_t getNumerical() const;
+ string getNumericalAsString() const;
+
+ // From IXmlSink
+ virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
+
+ // CElement
+ virtual string getKind() const;
+protected:
+ // Content dumping
+ virtual void logValue(string& strValue, CErrorContext& errorContext) const;
+private:
+ // Numerical
+ int32_t _iNumerical;
+};
+
diff --git a/parameter/ParameterMgr.cpp b/parameter/ParameterMgr.cpp
index 9a180fa..6ef37bb 100644
--- a/parameter/ParameterMgr.cpp
+++ b/parameter/ParameterMgr.cpp
@@ -77,6 +77,7 @@
#include <assert.h>
#include "ParameterHandle.h"
#include "LinearParameterAdaptation.h"
+#include "EnumValuePair.h"
#define base CElement
@@ -1302,6 +1303,12 @@ bool CParameterMgr::accessValue(const string& strPath, string& strValue, bool bS
// Define context
CParameterAccessContext parameterAccessContext(strError, _pMainParameterBlackboard, _bValueSpaceIsRaw, _bOutputRawFormatIsHex);
+ // Auto Sync
+ if (bSet) {
+
+ parameterAccessContext.setAutoSync(_bAutoSyncOn);
+ }
+
// Do the get
return getConstSystemClass()->accessValue(pathNavigator, strValue, bSet, parameterAccessContext);
}
@@ -1752,6 +1759,7 @@ void CParameterMgr::feedElementLibraries()
pParameterCreationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CIntegerParameterType>("IntegerParameter"));
pParameterCreationLibrary->addElementBuilder(new TElementBuilderTemplate<CLinearParameterAdaptation>("LinearAdaptation"));
pParameterCreationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CEnumParameterType>("EnumParameter"));
+ pParameterCreationLibrary->addElementBuilder(new TElementBuilderTemplate<CEnumValuePair>("ValuePair"));
pParameterCreationLibrary->addElementBuilder(new TNamedElementBuilderTemplate<CFixedPointParameterType>("FixedPointParameter"));
pParameterCreationLibrary->addElementBuilder(new TKindElementBuilderTemplate<CXmlFileIncluderElement>("SubsystemInclude"));
diff --git a/parameter/SystemClass.cpp b/parameter/SystemClass.cpp
index 532473a..6409c9b 100644
--- a/parameter/SystemClass.cpp
+++ b/parameter/SystemClass.cpp
@@ -208,7 +208,7 @@ bool CSystemClass::loadPlugins(list<string>& lstrPluginFiles, string& strError)
if (!lib_handle) {
// Failed
- log("Plugin load failed, proceeding on with remaining ones");
+ log("Plugin load failed: %s, proceeding on with remaining ones", dlerror());
// Next plugin
++it;
diff --git a/xmlserializer/XmlComposer.cpp b/xmlserializer/XmlComposer.cpp
index ff607dd..ebbcf1b 100644
--- a/xmlserializer/XmlComposer.cpp
+++ b/xmlserializer/XmlComposer.cpp
@@ -31,7 +31,7 @@
#include "XmlComposer.h"
#include <libxml/parser.h>
#include <libxml/tree.h>
-#include <time.h>
+#include <sys/time.h>
#define base CXmlSerializer