summaryrefslogtreecommitdiffstats
path: root/parameter/SubsystemObject.cpp
diff options
context:
space:
mode:
authorGuillaume Denneulin <guillaume.denneulin@intel.com>2012-12-20 17:53:29 +0100
committerDavid Wagner <david.wagner@intel.com>2014-02-12 17:03:31 +0100
commitf2fd15a331fd3b5b63f0dc6f492651330adcedf9 (patch)
tree4176f855bf77467ed7d1519490bdce022bd1ea4d /parameter/SubsystemObject.cpp
parentace81f873b910493ab884dc5a6a38ba6ec3d56d3 (diff)
downloadexternal_parameter-framework-f2fd15a331fd3b5b63f0dc6f492651330adcedf9.zip
external_parameter-framework-f2fd15a331fd3b5b63f0dc6f492651330adcedf9.tar.gz
external_parameter-framework-f2fd15a331fd3b5b63f0dc6f492651330adcedf9.tar.bz2
PFW: Add resync mechanism if a subsystem needs resync
BZ: 76267 In the case of a hw subsystems reset, it's possible that its parameter managed by the PFW may not be aligned with the PFW blackboard. A re-synchronization mechanism is implemented to ensure that the subsystem is re-synchronized on the next configurations application. Change-Id: I032150955d25a7020cf494e69456897b4c157916 Signed-off-by: Guillaume Denneulin <guillaume.denneulin@intel.com> Reviewed-on: http://android.intel.com:8080/83015 Reviewed-by: Rocard, KevinX <kevinx.rocard@intel.com> Reviewed-by: Centelles, Sylvain <sylvain.centelles@intel.com> Tested-by: Dixon, CharlesX <charlesx.dixon@intel.com> Reviewed-by: cactus <cactus@intel.com> Tested-by: cactus <cactus@intel.com>
Diffstat (limited to 'parameter/SubsystemObject.cpp')
-rw-r--r--parameter/SubsystemObject.cpp47
1 files changed, 33 insertions, 14 deletions
diff --git a/parameter/SubsystemObject.cpp b/parameter/SubsystemObject.cpp
index 8c5c5e4..15bba6c 100644
--- a/parameter/SubsystemObject.cpp
+++ b/parameter/SubsystemObject.cpp
@@ -23,8 +23,10 @@
* UPDATED: 2011-07-27
*/
#include "SubsystemObject.h"
+#include "Subsystem.h"
#include "InstanceConfigurableElement.h"
#include "ParameterBlackboard.h"
+#include "ParameterAccessContext.h"
#include "MappingContext.h"
#include <assert.h>
#include <stdlib.h>
@@ -74,6 +76,18 @@ string CSubsystemObject::asString(uint32_t uiValue)
return ostr.str();
}
+// Default back synchronization
+void CSubsystemObject::setDefaultValues(CParameterBlackboard& parameterBlackboard) const
+{
+ string strError;
+
+ // Create access context
+ CParameterAccessContext parameterAccessContext(strError, &parameterBlackboard, false);
+
+ // Just implement back synchronization with default values
+ _pInstanceConfigurableElement->setDefaultValues(parameterAccessContext);
+}
+
// Synchronization
bool CSubsystemObject::sync(CParameterBlackboard& parameterBlackboard, bool bBack, string& strError)
{
@@ -86,29 +100,34 @@ bool CSubsystemObject::sync(CParameterBlackboard& parameterBlackboard, bool bBac
return true;
#endif
- // Synchronize to/from HW
- if (bBack) {
+ // Retrieve subsystem
+ const CSubsystem* pSubsystem = _pInstanceConfigurableElement->getBelongingSubsystem();
- // Read from HW
- if (!accessHW(true, strError)) {
+ // Get it's health insdicator
+ bool bIsSubsystemAlive = pSubsystem->isAlive();
- strError = "Unable to back synchronize configurable element " + _pInstanceConfigurableElement->getPath() + ": " + strError;
- log_warning(strError);
+ // Check subsystem health
+ if (!bIsSubsystemAlive) {
- return false;
- }
+ strError = "Susbsystem not alive";
+ }
- } else {
+ // Synchronize to/from HW
+ if (!bIsSubsystemAlive || !accessHW(bBack, strError)) {
+
+ strError = string("Unable to ") + (bBack ? "back" : "forward") + " synchronize configurable element " +
+ _pInstanceConfigurableElement->getPath() + ": " + strError;
- // Send to HW
- if (!accessHW(false, strError)) {
+ log_warning(strError);
- strError = "Unable to synchronize configurable element " + _pInstanceConfigurableElement->getPath() + ": " + strError;
- log_warning(strError);
+ // Fall back to parameter default initialization
+ if (bBack) {
- return false;
+ setDefaultValues(parameterBlackboard);
}
+ return false;
}
+
return true;
}