summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Benavoli <patrickx.benavoli@intel.com>2011-08-31 11:23:24 +0200
committerDavid Wagner <david.wagner@intel.com>2014-02-10 17:14:54 +0100
commit1387bda01b089d8e8df06339d9c15d53b3de6725 (patch)
treec8dd258fdff344e629433f89976ca573ff828c31
parent2ecf900ad8c30ce9f8e81f57977a1a80a6f6d8af (diff)
downloadexternal_parameter-framework-1387bda01b089d8e8df06339d9c15d53b3de6725.zip
external_parameter-framework-1387bda01b089d8e8df06339d9c15d53b3de6725.tar.gz
external_parameter-framework-1387bda01b089d8e8df06339d9c15d53b3de6725.tar.bz2
Min/max value computation; Tuning lock handling
BZ: 7466 - Min/max values are now correctly computed. They concern integer and fixed point parameters - tuning mode lock issue solved: created an AutoLock class for safe lock handling - added configuration files for a demo on Ubuntu environment - had AMIXER subsystem plugin compliant for derivation - LPE library: add carriage return on logs - removed obsolete files - some cosmetics Change-Id: Ife7a4799fd48dd4a1ca25dae666c4e453815881e Orig-Change-Id: I72fc5c1ff6abf638b43266a75bc00e21ad412349 Signed-off-by: Patrick Benavoli <patrickx.benavoli@intel.com> Reviewed-on: http://android.intel.com:8080/16880 Reviewed-by: Mahe, Erwan <erwan.mahe@intel.com> Tested-by: Barthes, FabienX <fabienx.barthes@intel.com> Reviewed-by: buildbot <buildbot@intel.com> Tested-by: buildbot <buildbot@intel.com>
-rw-r--r--parameter/Android.mk4
-rw-r--r--parameter/AutoLock.cpp (renamed from parameter/SelectionCriterionDefinition.cpp)23
-rw-r--r--parameter/AutoLock.h (renamed from parameter/SelectionCriterionDefinition.h)23
-rw-r--r--parameter/Component.cpp2
-rw-r--r--parameter/Component.h4
-rw-r--r--parameter/Element.cpp2
-rw-r--r--parameter/FixedPointParameterType.cpp31
-rw-r--r--parameter/FixedPointParameterType.h2
-rw-r--r--parameter/IntegerParameterType.cpp15
-rw-r--r--parameter/ParameterMgr.cpp81
-rw-r--r--parameter/ParameterType.cpp37
-rw-r--r--parameter/ParameterType.h6
-rw-r--r--parameter/SystemClass.cpp2
-rw-r--r--parameter/buildlog.txt1
-rwxr-xr-xparameter/parameter4
-rw-r--r--remote-processor/Message.cpp2
16 files changed, 131 insertions, 108 deletions
diff --git a/parameter/Android.mk b/parameter/Android.mk
index 3e430ce..86bdb35 100644
--- a/parameter/Android.mk
+++ b/parameter/Android.mk
@@ -24,7 +24,6 @@ LOCAL_SRC_FILES:= \
SelectionCriteriaDefinition.cpp \
SelectionCriterionType.cpp \
ElementLibrary.cpp \
- SelectionCriterionDefinition.cpp \
SubsystemElementBuilder.cpp \
SubsystemLibrary.cpp \
SelectionCriterion.cpp \
@@ -83,7 +82,8 @@ LOCAL_SRC_FILES:= \
MappingContext.cpp \
SubsystemObject.cpp \
SubsystemObjectCreator.cpp \
- BaseParameter.cpp
+ BaseParameter.cpp \
+ AutoLock.cpp
LOCAL_MODULE:= libparameter
diff --git a/parameter/SelectionCriterionDefinition.cpp b/parameter/AutoLock.cpp
index 58c5485..d9f4f34 100644
--- a/parameter/SelectionCriterionDefinition.cpp
+++ b/parameter/AutoLock.cpp
@@ -1,10 +1,10 @@
/* <auto_header>
* <FILENAME>
- *
+ *
* INTEL CONFIDENTIAL
- * Copyright © 2011 Intel
+ * 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
@@ -14,27 +14,28 @@
* 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 "SelectionCriterionDefinition.h"
+#include "AutoLock.h"
-CSelectionCriterionDefinition::CSelectionCriterionDefinition(const string& strName) : CElement(strName)
+CAutoLock::CAutoLock(pthread_mutex_t* pMutex) : _pMutex(pMutex)
{
+ pthread_mutex_lock(_pMutex);
}
-string CSelectionCriterionDefinition::getKind() const
+CAutoLock::~CAutoLock()
{
- return "SelectionCriterionDefinition";
+ pthread_mutex_unlock(_pMutex);
}
diff --git a/parameter/SelectionCriterionDefinition.h b/parameter/AutoLock.h
index 4532010..4ff0ef4 100644
--- a/parameter/SelectionCriterionDefinition.h
+++ b/parameter/AutoLock.h
@@ -1,10 +1,10 @@
/* <auto_header>
* <FILENAME>
- *
+ *
* INTEL CONFIDENTIAL
- * Copyright © 2011 Intel
+ * 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
@@ -14,30 +14,31 @@
* 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"
+#include <pthread.h>
-class CSelectionCriterionDefinition : public CElement
+class CAutoLock
{
public:
- CSelectionCriterionDefinition(const string& strName);
+ CAutoLock(pthread_mutex_t* pMutex);
+ ~CAutoLock();
- virtual string getKind() const;
private:
+ pthread_mutex_t* _pMutex;
};
diff --git a/parameter/Component.cpp b/parameter/Component.cpp
index 66c9893..318c2ec 100644
--- a/parameter/Component.cpp
+++ b/parameter/Component.cpp
@@ -32,7 +32,7 @@
#include "ComponentLibrary.h"
#include "Mapper.h"
-#define base CParameterBlock
+#define base CInstanceConfigurableElement
CComponent::CComponent(const string& strName, const CTypeElement* pTypeElement) : base(strName, pTypeElement)
{
diff --git a/parameter/Component.h b/parameter/Component.h
index d43e6e8..e868f62 100644
--- a/parameter/Component.h
+++ b/parameter/Component.h
@@ -30,9 +30,9 @@
*/
#pragma once
-#include "ParameterBlock.h"
+#include "InstanceConfigurableElement.h"
-class CComponent : public CParameterBlock
+class CComponent : public CInstanceConfigurableElement
{
public:
CComponent(const string& strName, const CTypeElement* pTypeElement);
diff --git a/parameter/Element.cpp b/parameter/Element.cpp
index 915bc65..50c0774 100644
--- a/parameter/Element.cpp
+++ b/parameter/Element.cpp
@@ -689,7 +689,7 @@ void CElement::appendTitle(string& strTo, const string& strTitle)
while (uiLength--) {
- strTo += "─";
+ strTo += "=";
}
strTo += "\n";
}
diff --git a/parameter/FixedPointParameterType.cpp b/parameter/FixedPointParameterType.cpp
index fb986c5..5b90f13 100644
--- a/parameter/FixedPointParameterType.cpp
+++ b/parameter/FixedPointParameterType.cpp
@@ -130,7 +130,7 @@ bool CFixedPointParameterType::asInteger(const string& strValue, uint32_t& uiVal
if (bValueProvidedAsHexa) {
- if (!isEncodable(iData)) {
+ if (!isEncodable(iData, getUtilSizeInBits())) {
// Illegal value provided
parameterAccessContext.setError(getOutOfRangeError(strValue, parameterAccessContext.valueSpaceIsRaw(), true));
@@ -149,8 +149,9 @@ bool CFixedPointParameterType::asInteger(const string& strValue, uint32_t& uiVal
// Do the conversion
iData = (int32_t)(dData * (1UL << _uiFractional) + 0.5F - (double)(dData < 0));
}
+
// Check integrity
- if (!isConsistent(iData, true)) {
+ if (!isConsistent(iData)) {
// Illegal value provided
parameterAccessContext.setError(getOutOfRangeError(strValue, parameterAccessContext.valueSpaceIsRaw(), bValueProvidedAsHexa));
@@ -168,7 +169,7 @@ void CFixedPointParameterType::asString(const uint32_t& uiValue, string& strValu
int32_t iData = uiValue;
// Check consistency
- assert(isEncodable(iData));
+ assert(isEncodable(iData, getUtilSizeInBits()));
// Sign extend
signExtend(iData);
@@ -207,8 +208,8 @@ uint32_t CFixedPointParameterType::getUtilSizeInBits() const
string CFixedPointParameterType::getOutOfRangeError(const string& strValue, bool bRawValueSpace, bool bHexaValue) const
{
// Min/Max computation
- int32_t iMin = ((int32_t)1 << 31) >> (32 - getUtilSizeInBits());
- int32_t iMax = -iMin - 1;
+ int32_t iMax = (1L << (getUtilSizeInBits() - 1)) - 1;
+ int32_t iMin = -iMax - 1;
ostringstream strStream;
@@ -223,7 +224,9 @@ string CFixedPointParameterType::getOutOfRangeError(const string& strValue, bool
if (bHexaValue) {
+ // Format Min
strStream << "0x" << hex << uppercase << setw(getSize()*2) << setfill('0') << makeEncodable(iMin);
+ // Format Max
strStream << ", 0x" << hex << uppercase << setw(getSize()*2) << setfill('0') << makeEncodable(iMax);
} else {
@@ -237,3 +240,21 @@ string CFixedPointParameterType::getOutOfRangeError(const string& strValue, bool
return strStream.str();
}
+
+// Check data is consistent with available range, with respect to its sign
+bool CFixedPointParameterType::isConsistent(uint32_t uiData) const
+{
+ uint32_t uiShift = 32 - getUtilSizeInBits();
+
+ if (uiShift) {
+
+ // Negative value?
+ bool bIsValueExpectedNegative = (uiData & (1 << (uiShift - 1))) != 0;
+
+ // Check high bits are clean
+ return bIsValueExpectedNegative ? !(~uiData >> uiShift) : !(uiData >> uiShift);
+ }
+
+ return true;
+}
+
diff --git a/parameter/FixedPointParameterType.h b/parameter/FixedPointParameterType.h
index 78b0b7e..d4e13d4 100644
--- a/parameter/FixedPointParameterType.h
+++ b/parameter/FixedPointParameterType.h
@@ -58,6 +58,8 @@ private:
uint32_t getUtilSizeInBits() const;
// Out of range error
string getOutOfRangeError(const string& strValue, bool bRawValueSpace, bool bHexaValue) const;
+ // Check data is consistent with available range, with respect to its sign
+ bool isConsistent(uint32_t uiData) const;
// Integral part in Q notation
uint32_t _uiIntegral;
diff --git a/parameter/IntegerParameterType.cpp b/parameter/IntegerParameterType.cpp
index 1f20c93..f3e447e 100644
--- a/parameter/IntegerParameterType.cpp
+++ b/parameter/IntegerParameterType.cpp
@@ -74,21 +74,30 @@ bool CIntegerParameterType::fromXml(const CXmlElement& xmlElement, CXmlSerializi
// Size
setSize(xmlElement.getAttributeInteger("Size") / 8);
+ // Size in bits
+ uint32_t uiUtilSizeInBits = getSize() << 3;
+
// Min / Max
if (_bSigned) {
+
+ // Signed means we have one less util bit
+ uiUtilSizeInBits--;
+
if (xmlElement.hasAttribute("Min")) {
_uiMin = (uint32_t)xmlElement.getAttributeSignedInteger("Min");
} else {
- _uiMin = 1UL << 31;
+ _uiMin = 1UL << uiUtilSizeInBits;
+
+ signExtend((int32_t&)_uiMin);
}
if (xmlElement.hasAttribute("Max")) {
_uiMax = (uint32_t)xmlElement.getAttributeSignedInteger("Max");
} else {
- _uiMax = (1UL << 31) - 1;
+ _uiMax = (1UL << uiUtilSizeInBits) - 1;
}
} else {
if (xmlElement.hasAttribute("Min")) {
@@ -103,7 +112,7 @@ bool CIntegerParameterType::fromXml(const CXmlElement& xmlElement, CXmlSerializi
_uiMax = xmlElement.getAttributeInteger("Max");
} else {
- _uiMax = (uint32_t)-1;
+ _uiMax = (uint32_t)((1UL << uiUtilSizeInBits) - 1);
}
}
diff --git a/parameter/ParameterMgr.cpp b/parameter/ParameterMgr.cpp
index b27a1b5..87f6662 100644
--- a/parameter/ParameterMgr.cpp
+++ b/parameter/ParameterMgr.cpp
@@ -39,7 +39,6 @@
#include "KindElementBuilderTemplate.h"
#include "ElementBuilderTemplate.h"
#include "SelectionCriterionType.h"
-#include "SelectionCriterionDefinition.h"
#include "SubsystemElementBuilder.h"
#include "SelectionCriteria.h"
#include "ComponentType.h"
@@ -71,6 +70,7 @@
#include "SelectionCriterionRule.h"
#include "SimulatedBackSynchronizer.h"
#include "HardwareBackSynchronizer.h"
+#include "AutoLock.h"
#include <strings.h>
#include <dlfcn.h>
#include <assert.h>
@@ -120,7 +120,7 @@ const CParameterMgr::SRemoteCommandParserItem CParameterMgr::gaRemoteCommandPars
{ "getAutoSync", &CParameterMgr::getAutoSyncCommmandProcess, 0, "", "Show Auto Sync state" },
{ "sync", &CParameterMgr::syncCommmandProcess, 0, "", "Synchronize current settings to hardware while in Tuning Mode and Auto Sync off" },
/// Criteria
- { "listCriteria", &CParameterMgr::listCriteriaCommmandProcess, 0, "", "List available selection criteria" },
+ { "listCriteria", &CParameterMgr::listCriteriaCommmandProcess, 0, "", "List selection criteria" },
/// Domains
{ "listDomains", &CParameterMgr::listDomainsCommmandProcess, 0, "", "List configurable domains" },
{ "createDomain", &CParameterMgr::createDomainCommmandProcess, 1, "<domain>", "Create new configurable domain" },
@@ -143,9 +143,9 @@ const CParameterMgr::SRemoteCommandParserItem CParameterMgr::gaRemoteCommandPars
{ "dumpElement", &CParameterMgr::dumpElementCommmandProcess, 1, "<elem path>", "Dump structure and content of element at given path" },
{ "getElementSize", &CParameterMgr::getElementSizeCommmandProcess, 1, "<elem path>", "Show size of element at given path" },
{ "showProperties", &CParameterMgr::showPropertiesCommmandProcess, 1, "<elem path>", "Show properties of element at given path" },
- { "getParameter", &CParameterMgr::getParameterCommmandProcess, 1, "<param ath>", "Get value for parameter at given path" },
+ { "getParameter", &CParameterMgr::getParameterCommmandProcess, 1, "<param path>", "Get value for parameter at given path" },
{ "setParameter", &CParameterMgr::setParameterCommmandProcess, 2, "<param path> <value>", "Set value for parameter at given path" },
- { "listBelongingDomains", &CParameterMgr::listBelongingDomainsCommmandProcess, 1, "<elem path>", "List domain(s) element at given path is contained in" },
+ { "listBelongingDomains", &CParameterMgr::listBelongingDomainsCommmandProcess, 1, "<elem path>", "List domain(s) element at given path belongs to" },
{ "listAssociatedDomains", &CParameterMgr::listAssociatedDomainsCommmandProcess, 1, "<elem path>", "List domain(s) element at given path is associated to" },
/// Browse
{ "listAssociatedElements", &CParameterMgr::listAssociatedElementsCommmandProcess, 0, "", "List element sub-trees associated to at least one configurable domain" },
@@ -273,16 +273,41 @@ bool CParameterMgr::load(string& strError)
return false;
}
- // All is loaded, we're ready to observe selection criteria events
- getSelectionCriteria()->setObserver(this);
+ // Back synchronization for areas in parameter blackboard not covered by any domain
+ CBackSynchronizer* pBackSynchronizer = createBackSynchronizer(strError);
+
+ log("Main blackboard back synchronization");
+
+ // Back-synchronize
+ if (!pBackSynchronizer->sync()) {
+ // Get rid of back synchronizer
+ delete pBackSynchronizer;
- // Load and start Remote processor server if appropriate
- if (!handleRemoteProcessingInterface(strError)) {
+ strError = "Main blackboard back synchronization failed: " + strError;
return false;
}
+ // Get rif of back synchronizer
+ delete pBackSynchronizer;
- return true;
+ // We're done loading the settings and back synchronizing
+ CConfigurableDomains* pConfigurableDomains = getConfigurableDomains();
+
+ // We need to ensure all domains are valid
+ pConfigurableDomains->validate(_pMainParameterBlackboard);
+
+ // Ensure application of currently selected configurations
+ // Force-apply configurations
+ if (!pConfigurableDomains->apply(_pMainParameterBlackboard, true, strError)) {
+
+ return false;
+ }
+
+ // All is loaded, we're ready to observe selection criteria change events
+ getSelectionCriteria()->setObserver(this);
+
+ // Start remote processor server if appropriate
+ return handleRemoteProcessingInterface(strError);
}
bool CParameterMgr::loadFrameworkConfiguration(string& strError)
@@ -456,30 +481,7 @@ bool CParameterMgr::loadSettings(string& strError)
return false;
}
- // Back synchronization for areas in parameter blackboard no covered by any domain
- CBackSynchronizer* pBackSynchronizer = createBackSynchronizer(strError);
-
- log("Main blackboard back synchronization");
-
- // Back-synchronize
- if (!pBackSynchronizer->sync()) {
- // Get rif of back synchronizer
- delete pBackSynchronizer;
-
- strError = "Main blackboard back synchronization failed: " + strError;
-
- return false;
- }
- // Get rif of back synchronizer
- delete pBackSynchronizer;
-
- // We're done loading the settings
- // We need to ensure all domains are valid
- pConfigurableDomains->validate(_pMainParameterBlackboard);
-
- // Ensure application of currently selected configurations
- // Force-apply configuration(s)
- return pConfigurableDomains->apply(_pMainParameterBlackboard, true, strError);
+ return true;
}
// XML parsing
@@ -556,7 +558,7 @@ void CParameterMgr::selectionCriterionChanged(const CSelectionCriterion* pSelect
CAutoLog autoLog(this, "Selection criterion changed event: " + pSelectionCriterion->getFormattedDescription(false));
// Lock state
- pthread_mutex_lock(&_tuningModeMutex);
+ CAutoLock autoLock(&_tuningModeMutex);
if (!_bTuningModeIsOn) {
@@ -568,8 +570,6 @@ void CParameterMgr::selectionCriterionChanged(const CSelectionCriterion* pSelect
log("Failed to apply configurations!");
}
}
- // Unlock state
- pthread_mutex_unlock(&_tuningModeMutex);
}
// Command processing
@@ -1267,13 +1267,13 @@ bool CParameterMgr::setTuningMode(bool bOn, string& strError)
return false;
}
// Lock state
- pthread_mutex_lock(&_tuningModeMutex);
+ CAutoLock autoLock(&_tuningModeMutex);
// Warn domains about exiting tuning mode
if (!bOn && _bTuningModeIsOn) {
// Ensure application of currently selected configurations
- // Force-apply configuration(s)
+ // Force-apply configurations
if (!getConfigurableDomains()->apply(_pMainParameterBlackboard, true, strError)) {
return false;
@@ -1285,9 +1285,6 @@ bool CParameterMgr::setTuningMode(bool bOn, string& strError)
// Store
_bTuningModeIsOn = bOn;
- // Unlock state
- pthread_mutex_unlock(&_tuningModeMutex);
-
return true;
}
@@ -1331,7 +1328,7 @@ bool CParameterMgr::setAutoSync(bool bAutoSyncOn, string& strError)
if (bAutoSyncOn && !_bAutoSyncOn) {
// Ensure application of currently selected configurations
- // Force-apply configuration(s)
+ // Force-apply configurations
if (!getConfigurableDomains()->apply(_pMainParameterBlackboard, true, strError)) {
return false;
diff --git a/parameter/ParameterType.cpp b/parameter/ParameterType.cpp
index 53d10e6..0d3dac5 100644
--- a/parameter/ParameterType.cpp
+++ b/parameter/ParameterType.cpp
@@ -125,21 +125,28 @@ void CParameterType::signExtend(int32_t& iData) const
// Check data has no bit set outside available range
bool CParameterType::isEncodable(uint32_t uiData) const
{
- uint32_t uiSizeInBits = _uiSize << 3;
- uint32_t uiShift = 32 - uiSizeInBits;
+ return isEncodable(uiData, _uiSize << 3);
+}
- if (uiShift) {
+// Check data has no bit set outside available range
+bool CParameterType::isEncodable(uint32_t uiData, uint32_t uiSizeInBits) const
+{
+ if (uiSizeInBits == 32) {
- // Check high bits are clean
- return !(uiData >> uiShift);
+ return true;
}
- return true;
+ // Check high bits are clean
+ return !(uiData >> uiSizeInBits);
}
// Remove all bits set outside available range
uint32_t CParameterType::makeEncodable(uint32_t uiData) const
{
+ if (_uiSize == sizeof(uint32_t)) {
+
+ return uiData;
+ }
uint32_t uiSizeInBits = _uiSize << 3;
uint32_t uiMask = (1 << uiSizeInBits) - 1;
@@ -147,21 +154,3 @@ uint32_t CParameterType::makeEncodable(uint32_t uiData) const
return uiData & uiMask;
}
-// Check data is consistent with available range, with respect to its sign
-bool CParameterType::isConsistent(uint32_t uiData, bool bSigned) const
-{
- uint32_t uiSizeInBits = _uiSize << 3;
- uint32_t uiShift = 32 - uiSizeInBits;
-
- if (uiShift) {
-
- // Negative value?
- bool bIsValueExpectedNegative = bSigned && (uiData & (1 << (uiShift - 1))) != 0;
-
- // Check high bits are clean
- return bIsValueExpectedNegative ? !(~uiData >> uiShift) : !(uiData >> uiShift);
- }
-
- return true;
-}
-
diff --git a/parameter/ParameterType.h b/parameter/ParameterType.h
index 88ee0ea..980afba 100644
--- a/parameter/ParameterType.h
+++ b/parameter/ParameterType.h
@@ -70,12 +70,12 @@ protected:
void setSize(uint32_t uiSize);
// Sign extension
void signExtend(int32_t& iData) const;
- // Check data has no bit set outside available range
+ // Check data has no bit set outside available range (based on byte size)
bool isEncodable(uint32_t uiData) const;
+ // Check data has no bit set outside available range
+ bool isEncodable(uint32_t uiData, uint32_t uiSizeInBits) const;
// Remove all bits set outside available range
uint32_t makeEncodable(uint32_t uiData) const;
- // Check data is consistent with available range, with respect to its sign
- bool isConsistent(uint32_t uiData, bool bSigned) const;
private:
// Instantiation
diff --git a/parameter/SystemClass.cpp b/parameter/SystemClass.cpp
index 62b6538..2314c4f 100644
--- a/parameter/SystemClass.cpp
+++ b/parameter/SystemClass.cpp
@@ -80,6 +80,8 @@ bool CSystemClass::loadSubsystems(string& strError, const vector<string>& astrPl
// No plugin found?
strError = "No subsystem plugin found";
+
+ return false;
}
// Actually load plugins
diff --git a/parameter/buildlog.txt b/parameter/buildlog.txt
new file mode 100644
index 0000000..df695c2
--- /dev/null
+++ b/parameter/buildlog.txt
@@ -0,0 +1 @@
+make: *** No rule to make target `mfld_cdk'. Stop.
diff --git a/parameter/parameter b/parameter/parameter
index 6d8ad82..ae592e2 100755
--- a/parameter/parameter
+++ b/parameter/parameter
@@ -1,2 +1,2 @@
-#!/bin/sh
-./remote-process localhost 5000 $*
+#!/system/bin/sh
+remote-process localhost 5000 $*
diff --git a/remote-processor/Message.cpp b/remote-processor/Message.cpp
index 5679501..4454b1c 100644
--- a/remote-processor/Message.cpp
+++ b/remote-processor/Message.cpp
@@ -236,7 +236,7 @@ bool CMessage::serialize(CSocket* pSocket, bool bOut)
// Checksum
uint8_t CMessage::computeChecksum() const
{
- uint8_t uiChecksum = (_ucMsgId & 0xFF) + (_ucMsgId >> 8);
+ uint8_t uiChecksum = _ucMsgId;
uint32_t uiIndex;