bool CParameter::doAccess(type& value, bool bSet, CParameterAccessContext& parameterAccessContext) const { if (bSet) { // set value if (!doSet(value, getOffset() - parameterAccessContext.getBaseOffset(), parameterAccessContext)) { appendParameterPathToError(parameterAccessContext); return false; } // Synchronize if (!sync(parameterAccessContext)){ appendParameterPathToError(parameterAccessContext); return false; } } else { // get value if (!doGet(value, getOffset() - parameterAccessContext.getBaseOffset(), parameterAccessContext)) { appendParameterPathToError(parameterAccessContext); return false; } } return true; }
// Used for simulation and virtual subsystems void CParameter::setDefaultValues(CParameterAccessContext& parameterAccessContext) const { // Get default value from type uint32_t uiDefaultValue = static_cast<const CParameterType*>(getTypeElement())->getDefaultValue(); // Write blackboard CParameterBlackboard* pBlackboard = parameterAccessContext.getParameterBlackboard(); // Beware this code works on little endian architectures only! pBlackboard->writeInteger(&uiDefaultValue, getSize(), getOffset() - parameterAccessContext.getBaseOffset(), parameterAccessContext.isBigEndianSubsystem()); }