diff options
Diffstat (limited to 'parameter/BitwiseAreaConfiguration.cpp')
-rw-r--r-- | parameter/BitwiseAreaConfiguration.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/parameter/BitwiseAreaConfiguration.cpp b/parameter/BitwiseAreaConfiguration.cpp new file mode 100644 index 0000000..d3ea463 --- /dev/null +++ b/parameter/BitwiseAreaConfiguration.cpp @@ -0,0 +1,59 @@ +#include "BitwiseAreaConfiguration.h" +#include "BitParameter.h" +#include "Subsystem.h" + +#define base CAreaConfiguration + +CBitwiseAreaConfiguration::CBitwiseAreaConfiguration(const CConfigurableElement *pConfigurableElement, const CSyncerSet *pSyncerSet) + : base(pConfigurableElement, pSyncerSet, static_cast<const CBitParameter*>(pConfigurableElement)->getBelongingBlockSize()), + _bBigEndian(pConfigurableElement->getBelongingSubsystem()->isBigEndian()) +{ +} + +// Blackboard copies +void CBitwiseAreaConfiguration::copyTo(CParameterBlackboard* pToBlackboard, uint32_t uiOffset) const +{ + // Beware this code works on little endian architectures only! + const CBitParameter* pBitParameter = static_cast<const CBitParameter*>(_pConfigurableElement); + + uint32_t uiSrcData = 0; + uint32_t uiDstData = 0; + + /// Read/modify/write + + // Read dst blackboard + pToBlackboard->readInteger(&uiDstData, pBitParameter->getBelongingBlockSize(), uiOffset, _bBigEndian); + + // Read src blackboard + _blackboard.readInteger(&uiSrcData, pBitParameter->getBelongingBlockSize(), 0, _bBigEndian); + + // Convert + uiDstData = pBitParameter->merge(uiDstData, uiSrcData); + + // Write dst blackboard + pToBlackboard->writeInteger(&uiDstData, pBitParameter->getBelongingBlockSize(), uiOffset, _bBigEndian); +} + +void CBitwiseAreaConfiguration::copyFrom(const CParameterBlackboard* pFromBlackboard, uint32_t uiOffset) +{ + // Beware this code works on little endian architectures only! + const CBitParameter* pBitParameter = static_cast<const CBitParameter*>(_pConfigurableElement); + + uint32_t uiSrcData = 0; + uint32_t uiDstData = 0; + + /// Read/modify/write + + // Read dst blackboard + _blackboard.readInteger(&uiDstData, pBitParameter->getBelongingBlockSize(), 0, _bBigEndian); + + // Read src blackboard + pFromBlackboard->readInteger(&uiSrcData, pBitParameter->getBelongingBlockSize(), uiOffset, _bBigEndian); + + // Convert + uiDstData = pBitParameter->merge(uiDstData, uiSrcData); + + // Write dst blackboard + _blackboard.writeInteger(&uiDstData, pBitParameter->getBelongingBlockSize(), 0, _bBigEndian); +} + |