blob: 6512f7c166c8a79b008eb5fda3ac2083c393042e [file] [log] [blame]
Kevin Rocard93250d12012-07-19 17:48:30 +02001/*
Patrick Benavoli68a91282011-08-31 11:23:23 +02002 * INTEL CONFIDENTIAL
3 * Copyright © 2011 Intel
4 * Corporation All Rights Reserved.
5 *
6 * The source code contained or described herein and all documents related to
7 * the source code ("Material") are owned by Intel Corporation or its suppliers
8 * or licensors. Title to the Material remains with Intel Corporation or its
9 * suppliers and licensors. The Material contains trade secrets and proprietary
10 * and confidential information of Intel or its suppliers and licensors. The
11 * Material is protected by worldwide copyright and trade secret laws and
12 * treaty provisions. No part of the Material may be used, copied, reproduced,
13 * modified, published, uploaded, posted, transmitted, distributed, or
14 * disclosed in any way without Intel’s prior express written permission.
15 *
16 * No license under any patent, copyright, trade secret or other intellectual
17 * property right is granted to or conferred upon you by disclosure or delivery
18 * of the Materials, either expressly, by implication, inducement, estoppel or
19 * otherwise. Any license under such intellectual property rights must be
20 * express and approved by Intel in writing.
21 *
Patrick Benavoli68a91282011-08-31 11:23:23 +020022 * CREATED: 2011-06-01
23 * UPDATED: 2011-07-27
Patrick Benavoli68a91282011-08-31 11:23:23 +020024 */
25#include "ParameterBlackboard.h"
26#include <string.h>
27#include <assert.h>
28
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020029CParameterBlackboard::CParameterBlackboard() : _pucData(NULL), _uiSize(0)
Patrick Benavoli68a91282011-08-31 11:23:23 +020030{
31}
32
33CParameterBlackboard::~CParameterBlackboard()
34{
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020035 delete [] _pucData;
Patrick Benavoli68a91282011-08-31 11:23:23 +020036}
37
38// Size
39void CParameterBlackboard::setSize(uint32_t uiSize)
40{
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020041 if (_pucData) {
Patrick Benavoli68a91282011-08-31 11:23:23 +020042
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020043 delete [] _pucData;
Patrick Benavoli68a91282011-08-31 11:23:23 +020044 }
45
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020046 _pucData = new uint8_t[uiSize];
Patrick Benavoli68a91282011-08-31 11:23:23 +020047
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020048 memset(_pucData, 0, uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +020049
50 _uiSize = uiSize;
51}
52
53uint32_t CParameterBlackboard::getSize() const
54{
55 return _uiSize;
56}
57
58// Single parameter access
Patrick Benavoli1352ae52011-10-21 16:48:04 +020059void CParameterBlackboard::writeInteger(const void* pvSrcData, uint32_t uiSize, uint32_t uiOffset, bool bBigEndian)
Patrick Benavoli68a91282011-08-31 11:23:23 +020060{
61 assert(uiSize + uiOffset <= _uiSize);
62
63 if (!bBigEndian) {
64
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020065 memcpy(_pucData + uiOffset, pvSrcData, uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +020066 } else {
67
68 uint32_t uiIndex;
69 const uint8_t* puiSrcData = (const uint8_t*)pvSrcData;
70
71 for (uiIndex = 0; uiIndex < uiSize; uiIndex++) {
72
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020073 _pucData[uiIndex + uiOffset] = puiSrcData[uiSize - uiIndex - 1];
Patrick Benavoli68a91282011-08-31 11:23:23 +020074 }
75 }
76}
77
Patrick Benavoli1352ae52011-10-21 16:48:04 +020078void CParameterBlackboard::readInteger(void* pvDstData, uint32_t uiSize, uint32_t uiOffset, bool bBigEndian) const
Patrick Benavoli68a91282011-08-31 11:23:23 +020079{
80 assert(uiSize + uiOffset <= _uiSize);
81
82 if (!bBigEndian) {
83
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020084 memcpy(pvDstData, _pucData + uiOffset, uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +020085 } else {
86
87 uint32_t uiIndex;
88 uint8_t* puiDstData = (uint8_t*)pvDstData;
89
90 for (uiIndex = 0; uiIndex < uiSize; uiIndex++) {
91
Patrick Benavoli6ba361d2011-08-31 11:23:24 +020092 puiDstData[uiSize - uiIndex - 1] = _pucData[uiIndex + uiOffset];
Patrick Benavoli68a91282011-08-31 11:23:23 +020093 }
94 }
95}
96
Patrick Benavoli1352ae52011-10-21 16:48:04 +020097void CParameterBlackboard::writeString(const char* pcSrcData, uint32_t uiOffset)
98{
99 strcpy((char*)_pucData + uiOffset, pcSrcData);
100}
101
102void CParameterBlackboard::readString(char* pcDstData, uint32_t uiOffset) const
103{
104 strcpy(pcDstData, (const char*)_pucData + uiOffset);
105}
106
Patrick Benavoli68a91282011-08-31 11:23:23 +0200107// Access from/to subsystems
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200108uint8_t* CParameterBlackboard::getLocation(uint32_t uiOffset)
Patrick Benavoli68a91282011-08-31 11:23:23 +0200109{
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200110 return _pucData + uiOffset;
Patrick Benavoli68a91282011-08-31 11:23:23 +0200111}
112
113// Configuration handling
114void CParameterBlackboard::restoreFrom(const CParameterBlackboard* pFromBlackboard, uint32_t uiOffset)
115{
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200116 memcpy(_pucData + uiOffset, pFromBlackboard->_pucData, pFromBlackboard->_uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +0200117}
118
119void CParameterBlackboard::saveTo(CParameterBlackboard* pToBlackboard, uint32_t uiOffset) const
120{
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200121 memcpy(pToBlackboard->_pucData, _pucData + uiOffset, pToBlackboard->_uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +0200122}
123
124// Serialization
125void CParameterBlackboard::serialize(CBinaryStream& binaryStream)
126{
127 if (binaryStream.isOut()) {
128
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200129 binaryStream.write(_pucData, _uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +0200130 } else {
131
Patrick Benavoli6ba361d2011-08-31 11:23:24 +0200132 binaryStream.read(_pucData, _uiSize);
Patrick Benavoli68a91282011-08-31 11:23:23 +0200133 }
134}