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());
}