mueller_merge_mohr_serialize #11
@ -85,7 +85,7 @@ ReturnValue_t ActionHelper::reportData(MessageQueueId_t reportTo,
|
|||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = data->serialize(&dataPtr, &size, maxSize, true);
|
result = data->serialize(&dataPtr, &size, maxSize, SerializeIF::Endianness::BIG);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
ipcStore->deleteData(storeAddress);
|
ipcStore->deleteData(storeAddress);
|
||||||
return result;
|
return result;
|
||||||
|
@ -27,7 +27,8 @@ ReturnValue_t CommandActionHelper::commandAction(object_id_t commandTo,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
result = data->serialize(&storePointer, &size, maxSize, true);
|
result = data->serialize(&storePointer, &size, maxSize,
|
||||||
|
SerializeIF::Endianness::BIG);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -88,7 +89,8 @@ ReturnValue_t CommandActionHelper::handleReply(CommandMessage* reply) {
|
|||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
case ActionMessage::COMPLETION_FAILED:
|
case ActionMessage::COMPLETION_FAILED:
|
||||||
commandCount--;
|
commandCount--;
|
||||||
owner->completionFailedReceived(ActionMessage::getActionId(reply), ActionMessage::getReturnCode(reply));
|
owner->completionFailedReceived(ActionMessage::getActionId(reply),
|
||||||
|
ActionMessage::getReturnCode(reply));
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
case ActionMessage::STEP_SUCCESS:
|
case ActionMessage::STEP_SUCCESS:
|
||||||
owner->stepSuccessfulReceived(ActionMessage::getActionId(reply),
|
owner->stepSuccessfulReceived(ActionMessage::getActionId(reply),
|
||||||
@ -96,11 +98,13 @@ ReturnValue_t CommandActionHelper::handleReply(CommandMessage* reply) {
|
|||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
case ActionMessage::STEP_FAILED:
|
case ActionMessage::STEP_FAILED:
|
||||||
commandCount--;
|
commandCount--;
|
||||||
owner->stepFailedReceived(ActionMessage::getActionId(reply), ActionMessage::getStep(reply),
|
owner->stepFailedReceived(ActionMessage::getActionId(reply),
|
||||||
|
ActionMessage::getStep(reply),
|
||||||
ActionMessage::getReturnCode(reply));
|
ActionMessage::getReturnCode(reply));
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
case ActionMessage::DATA_REPLY:
|
case ActionMessage::DATA_REPLY:
|
||||||
extractDataForOwner(ActionMessage::getActionId(reply), ActionMessage::getStoreId(reply));
|
extractDataForOwner(ActionMessage::getActionId(reply),
|
||||||
|
ActionMessage::getStoreId(reply));
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
default:
|
default:
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
|
@ -164,6 +164,7 @@ public:
|
|||||||
return theMap.maxSize();
|
return theMap.maxSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool full() {
|
bool full() {
|
||||||
if(_size == theMap.maxSize()) {
|
if(_size == theMap.maxSize()) {
|
||||||
return true;
|
return true;
|
||||||
@ -174,15 +175,15 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = SerializeAdapter<uint32_t>::serialize(&this->_size,
|
ReturnValue_t result = SerializeAdapter::serialize(&this->_size,
|
||||||
buffer, size, max_size, bigEndian);
|
buffer, size, maxSize, streamEndianness);
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < this->_size)) {
|
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < this->_size)) {
|
||||||
result = SerializeAdapter<key_t>::serialize(&theMap[i].first, buffer,
|
result = SerializeAdapter::serialize(&theMap[i].first, buffer,
|
||||||
size, max_size, bigEndian);
|
size, maxSize, streamEndianness);
|
||||||
result = SerializeAdapter<T>::serialize(&theMap[i].second, buffer, size,
|
result = SerializeAdapter::serialize(&theMap[i].second, buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -193,27 +194,27 @@ public:
|
|||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
|
|
||||||
for (i = 0; i < _size; ++i) {
|
for (i = 0; i < _size; ++i) {
|
||||||
printSize += SerializeAdapter<key_t>::getSerializedSize(
|
printSize += SerializeAdapter::getSerializedSize(
|
||||||
&theMap[i].first);
|
&theMap[i].first);
|
||||||
printSize += SerializeAdapter<T>::getSerializedSize(&theMap[i].second);
|
printSize += SerializeAdapter::getSerializedSize(&theMap[i].second);
|
||||||
}
|
}
|
||||||
|
|
||||||
return printSize;
|
return printSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
ReturnValue_t result = SerializeAdapter<uint32_t>::deSerialize(&this->_size,
|
ReturnValue_t result = SerializeAdapter::deSerialize(&this->_size,
|
||||||
buffer, size, bigEndian);
|
buffer, size, streamEndianness);
|
||||||
if (this->_size > theMap.maxSize()) {
|
if (this->_size > theMap.maxSize()) {
|
||||||
return SerializeIF::TOO_MANY_ELEMENTS;
|
return SerializeIF::TOO_MANY_ELEMENTS;
|
||||||
}
|
}
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < this->_size)) {
|
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < this->_size)) {
|
||||||
result = SerializeAdapter<key_t>::deSerialize(&theMap[i].first, buffer,
|
result = SerializeAdapter::deSerialize(&theMap[i].first, buffer,
|
||||||
size, bigEndian);
|
size, streamEndianness);
|
||||||
result = SerializeAdapter<T>::deSerialize(&theMap[i].second, buffer, size,
|
result = SerializeAdapter::deSerialize(&theMap[i].second, buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -75,50 +75,50 @@ public:
|
|||||||
return this->storedPackets;
|
return this->storedPackets;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t serialize(uint8_t** buffer, uint32_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const uint32_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = AutoSerializeAdapter::serialize(&blockStartAddress,buffer,size,max_size,bigEndian);
|
ReturnValue_t result = SerializeAdapter::serialize(&blockStartAddress,buffer,size,maxSize,streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = indexType.serialize(buffer,size,max_size,bigEndian);
|
result = indexType.serialize(buffer,size,maxSize,streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::serialize(&this->size,buffer,size,max_size,bigEndian);
|
result = SerializeAdapter::serialize(&this->size,buffer,size,maxSize,streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::serialize(&this->storedPackets,buffer,size,max_size,bigEndian);
|
result = SerializeAdapter::serialize(&this->storedPackets,buffer,size,maxSize,streamEndianness);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t deSerialize(const uint8_t** buffer, int32_t* size,
|
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian){
|
Endianness streamEndianness){
|
||||||
ReturnValue_t result = AutoSerializeAdapter::deSerialize(&blockStartAddress,buffer,size,bigEndian);
|
ReturnValue_t result = SerializeAdapter::deSerialize(&blockStartAddress,buffer,size,streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = indexType.deSerialize(buffer,size,bigEndian);
|
result = indexType.deSerialize(buffer,size,streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::deSerialize(&this->size,buffer,size,bigEndian);
|
result = SerializeAdapter::deSerialize(&this->size,buffer,size,streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::deSerialize(&this->storedPackets,buffer,size,bigEndian);
|
result = SerializeAdapter::deSerialize(&this->storedPackets,buffer,size,streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t getSerializedSize() const {
|
size_t getSerializedSize() const {
|
||||||
uint32_t size = AutoSerializeAdapter::getSerializedSize(&blockStartAddress);
|
uint32_t size = SerializeAdapter::getSerializedSize(&blockStartAddress);
|
||||||
size += indexType.getSerializedSize();
|
size += indexType.getSerializedSize();
|
||||||
size += AutoSerializeAdapter::getSerializedSize(&this->size);
|
size += SerializeAdapter::getSerializedSize(&this->size);
|
||||||
size += AutoSerializeAdapter::getSerializedSize(&this->storedPackets);
|
size += SerializeAdapter::getSerializedSize(&this->storedPackets);
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -509,37 +509,37 @@ public:
|
|||||||
* Parameters according to HasSerializeIF
|
* Parameters according to HasSerializeIF
|
||||||
* @param buffer
|
* @param buffer
|
||||||
* @param size
|
* @param size
|
||||||
* @param max_size
|
* @param maxSize
|
||||||
* @param bigEndian
|
* @param streamEndianness
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
ReturnValue_t serialize(uint8_t** buffer, uint32_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const uint32_t max_size, bool bigEndian) const{
|
size_t maxSize, Endianness streamEndianness) const{
|
||||||
uint8_t* crcBuffer = *buffer;
|
uint8_t* crcBuffer = *buffer;
|
||||||
uint32_t oldSize = *size;
|
uint32_t oldSize = *size;
|
||||||
if(additionalInfo!=NULL){
|
if(additionalInfo!=NULL){
|
||||||
additionalInfo->serialize(buffer,size,max_size,bigEndian);
|
additionalInfo->serialize(buffer,size,maxSize,streamEndianness);
|
||||||
}
|
}
|
||||||
ReturnValue_t result = currentWriteBlock->serialize(buffer,size,max_size,bigEndian);
|
ReturnValue_t result = currentWriteBlock->serialize(buffer,size,maxSize,streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::serialize(&this->size,buffer,size,max_size,bigEndian);
|
result = SerializeAdapter::serialize(&this->size,buffer,size,maxSize,streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < this->size)) {
|
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < this->size)) {
|
||||||
result = SerializeAdapter<Index<T> >::serialize(&this->entries[i], buffer, size,
|
result = SerializeAdapter::serialize(&this->entries[i], buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
uint16_t crc = Calculate_CRC(crcBuffer,(*size-oldSize));
|
uint16_t crc = Calculate_CRC(crcBuffer,(*size-oldSize));
|
||||||
result = AutoSerializeAdapter::serialize(&crc,buffer,size,max_size,bigEndian);
|
result = SerializeAdapter::serialize(&crc,buffer,size,maxSize,streamEndianness);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -555,10 +555,10 @@ public:
|
|||||||
size += additionalInfo->getSerializedSize();
|
size += additionalInfo->getSerializedSize();
|
||||||
}
|
}
|
||||||
size += currentWriteBlock->getSerializedSize();
|
size += currentWriteBlock->getSerializedSize();
|
||||||
size += AutoSerializeAdapter::getSerializedSize(&this->size);
|
size += SerializeAdapter::getSerializedSize(&this->size);
|
||||||
size += (this->entries[0].getSerializedSize()) * this->size;
|
size += (this->entries[0].getSerializedSize()) * this->size;
|
||||||
uint16_t crc = 0;
|
uint16_t crc = 0;
|
||||||
size += AutoSerializeAdapter::getSerializedSize(&crc);
|
size += SerializeAdapter::getSerializedSize(&crc);
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -566,28 +566,28 @@ public:
|
|||||||
* CRC Has to be checked before!
|
* CRC Has to be checked before!
|
||||||
* @param buffer
|
* @param buffer
|
||||||
* @param size
|
* @param size
|
||||||
* @param bigEndian
|
* @param streamEndianness
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ReturnValue_t deSerialize(const uint8_t** buffer, int32_t* size,
|
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian){
|
Endianness streamEndianness){
|
||||||
|
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||||
if(additionalInfo!=NULL){
|
if(additionalInfo!=NULL){
|
||||||
result = additionalInfo->deSerialize(buffer,size,bigEndian);
|
result = additionalInfo->deSerialize(buffer,size,streamEndianness);
|
||||||
}
|
}
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Index<T> tempIndex;
|
Index<T> tempIndex;
|
||||||
result = tempIndex.deSerialize(buffer,size,bigEndian);
|
result = tempIndex.deSerialize(buffer,size,streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
uint32_t tempSize = 0;
|
uint32_t tempSize = 0;
|
||||||
result = AutoSerializeAdapter::deSerialize(&tempSize,buffer,size,bigEndian);
|
result = SerializeAdapter::deSerialize(&tempSize,buffer,size,streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -596,9 +596,9 @@ public:
|
|||||||
}
|
}
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < this->size)) {
|
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < this->size)) {
|
||||||
result = SerializeAdapter<Index<T> >::deSerialize(
|
result = SerializeAdapter::deSerialize(
|
||||||
&this->entries[i], buffer, size,
|
&this->entries[i], buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK){
|
if(result != HasReturnvaluesIF::RETURN_OK){
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
#include <framework/datapool/DataSetBase.h>
|
#include <framework/datapool/DataSetBase.h>
|
||||||
#include <framework/serviceinterface/ServiceInterfaceStream.h>
|
#include <framework/serviceinterface/ServiceInterfaceStream.h>
|
||||||
|
|
||||||
DataSetBase::DataSetBase() {
|
DataSetBase::DataSetBase(PoolVariableIF** registeredVariablesArray,
|
||||||
for (uint8_t count = 0; count < DATA_SET_MAX_SIZE; count++) {
|
const size_t maxFillCount):
|
||||||
|
registeredVariables(registeredVariablesArray),
|
||||||
|
maxFillCount(maxFillCount) {
|
||||||
|
for (uint8_t count = 0; count < maxFillCount; count++) {
|
||||||
registeredVariables[count] = nullptr;
|
registeredVariables[count] = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -21,7 +24,7 @@ ReturnValue_t DataSetBase::registerVariable(
|
|||||||
"Pool variable is nullptr." << std::endl;
|
"Pool variable is nullptr." << std::endl;
|
||||||
return DataSetIF::POOL_VAR_NULL;
|
return DataSetIF::POOL_VAR_NULL;
|
||||||
}
|
}
|
||||||
if (fillCount >= DATA_SET_MAX_SIZE) {
|
if (fillCount >= maxFillCount) {
|
||||||
sif::error << "DataSet::registerVariable: "
|
sif::error << "DataSet::registerVariable: "
|
||||||
"DataSet is full." << std::endl;
|
"DataSet is full." << std::endl;
|
||||||
return DataSetIF::DATA_SET_FULL;
|
return DataSetIF::DATA_SET_FULL;
|
||||||
@ -131,11 +134,11 @@ ReturnValue_t DataSetBase::unlockDataPool() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t DataSetBase::serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t DataSetBase::serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t maxSize, bool bigEndian) const {
|
const size_t maxSize, SerializeIF::Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_FAILED;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_FAILED;
|
||||||
for (uint16_t count = 0; count < fillCount; count++) {
|
for (uint16_t count = 0; count < fillCount; count++) {
|
||||||
result = registeredVariables[count]->serialize(buffer, size, maxSize,
|
result = registeredVariables[count]->serialize(buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -144,11 +147,11 @@ ReturnValue_t DataSetBase::serialize(uint8_t** buffer, size_t* size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t DataSetBase::deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t DataSetBase::deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
SerializeIF::Endianness streamEndianness) {
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_FAILED;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_FAILED;
|
||||||
for (uint16_t count = 0; count < fillCount; count++) {
|
for (uint16_t count = 0; count < fillCount; count++) {
|
||||||
result = registeredVariables[count]->deSerialize(buffer, size,
|
result = registeredVariables[count]->deSerialize(buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,8 @@ public:
|
|||||||
* supply a pointer to this dataset to PoolVariable
|
* supply a pointer to this dataset to PoolVariable
|
||||||
* initializations to register pool variables.
|
* initializations to register pool variables.
|
||||||
*/
|
*/
|
||||||
DataSetBase();
|
DataSetBase(PoolVariableIF** registeredVariablesArray,
|
||||||
|
const size_t maxFillCount);
|
||||||
virtual~ DataSetBase();
|
virtual~ DataSetBase();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -105,15 +106,11 @@ public:
|
|||||||
|
|
||||||
/* SerializeIF implementations */
|
/* SerializeIF implementations */
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t maxSize, bool bigEndian) const override;
|
const size_t maxSize,
|
||||||
|
SerializeIF::Endianness streamEndianness) const override;
|
||||||
virtual size_t getSerializedSize() const override;
|
virtual size_t getSerializedSize() const override;
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) override;
|
SerializeIF::Endianness streamEndianness) override;
|
||||||
|
|
||||||
// SHOULDDO we could use a linked list of datapool variables
|
|
||||||
//!< This definition sets the maximum number of variables to
|
|
||||||
//! register in one DataSet.
|
|
||||||
static const uint8_t DATA_SET_MAX_SIZE = 63;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
@ -137,8 +134,11 @@ protected:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This array represents all pool variables registered in this set.
|
* @brief This array represents all pool variables registered in this set.
|
||||||
|
* Child classes can use a static or dynamic container to create
|
||||||
|
* an array of registered variables and assign the first entry here.
|
||||||
*/
|
*/
|
||||||
PoolVariableIF* registeredVariables[DATA_SET_MAX_SIZE] = { };
|
PoolVariableIF** registeredVariables = nullptr;
|
||||||
|
const size_t maxFillCount = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ReturnValue_t readVariable(uint16_t count);
|
ReturnValue_t readVariable(uint16_t count);
|
||||||
|
@ -24,8 +24,9 @@ PoolRawAccessHelper::~PoolRawAccessHelper() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PoolRawAccessHelper::serialize(uint8_t **buffer, size_t *size,
|
ReturnValue_t PoolRawAccessHelper::serialize(uint8_t **buffer, size_t *size,
|
||||||
const size_t max_size, bool bigEndian) {
|
const size_t max_size, SerializeIF::Endianness streamEndianness) {
|
||||||
SerializationArgs serializationArgs = {buffer, size, max_size, bigEndian};
|
SerializationArgs serializationArgs = {buffer, size, max_size,
|
||||||
|
streamEndianness};
|
||||||
ReturnValue_t result = RETURN_OK;
|
ReturnValue_t result = RETURN_OK;
|
||||||
size_t remainingParametersSize = numberOfParameters * 4;
|
size_t remainingParametersSize = numberOfParameters * 4;
|
||||||
for(uint8_t count=0; count < numberOfParameters; count++) {
|
for(uint8_t count=0; count < numberOfParameters; count++) {
|
||||||
@ -44,9 +45,10 @@ ReturnValue_t PoolRawAccessHelper::serialize(uint8_t **buffer, size_t *size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PoolRawAccessHelper::serializeWithValidityMask(uint8_t ** buffer,
|
ReturnValue_t PoolRawAccessHelper::serializeWithValidityMask(uint8_t ** buffer,
|
||||||
size_t * size, const size_t max_size, bool bigEndian) {
|
size_t * size, const size_t max_size,
|
||||||
|
SerializeIF::Endianness streamEndianness) {
|
||||||
ReturnValue_t result = RETURN_OK;
|
ReturnValue_t result = RETURN_OK;
|
||||||
SerializationArgs argStruct = {buffer, size, max_size, bigEndian};
|
SerializationArgs argStruct = {buffer, size, max_size, streamEndianness};
|
||||||
size_t remainingParametersSize = numberOfParameters * 4;
|
size_t remainingParametersSize = numberOfParameters * 4;
|
||||||
uint8_t validityMaskSize = ceil((float)numberOfParameters/8.0);
|
uint8_t validityMaskSize = ceil((float)numberOfParameters/8.0);
|
||||||
uint8_t validityMask[validityMaskSize];
|
uint8_t validityMask[validityMaskSize];
|
||||||
@ -76,8 +78,8 @@ ReturnValue_t PoolRawAccessHelper::serializeCurrentPoolEntryIntoBuffer(
|
|||||||
bool withValidMask, uint8_t * validityMask) {
|
bool withValidMask, uint8_t * validityMask) {
|
||||||
uint32_t currentPoolId;
|
uint32_t currentPoolId;
|
||||||
// Deserialize current pool ID from pool ID buffer
|
// Deserialize current pool ID from pool ID buffer
|
||||||
ReturnValue_t result = AutoSerializeAdapter::deSerialize(¤tPoolId,
|
ReturnValue_t result = SerializeAdapter::deSerialize(¤tPoolId,
|
||||||
&poolIdBuffer,remainingParameters, false);
|
&poolIdBuffer,remainingParameters, SerializeIF::Endianness::MACHINE);
|
||||||
if(result != RETURN_OK) {
|
if(result != RETURN_OK) {
|
||||||
sif::debug << std::hex << "PoolRawAccessHelper: Error deSeralizing "
|
sif::debug << std::hex << "PoolRawAccessHelper: Error deSeralizing "
|
||||||
"pool IDs" << std::dec << std::endl;
|
"pool IDs" << std::dec << std::endl;
|
||||||
@ -137,7 +139,7 @@ ReturnValue_t PoolRawAccessHelper::handlePoolEntrySerialization(
|
|||||||
}
|
}
|
||||||
|
|
||||||
result = currentDataSet.serialize(argStruct.buffer, argStruct.size,
|
result = currentDataSet.serialize(argStruct.buffer, argStruct.size,
|
||||||
argStruct.max_size, argStruct.bigEndian);
|
argStruct.max_size, argStruct.streamEndianness);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
sif::debug << "Pool Raw Access Helper: Error serializing pool data with "
|
sif::debug << "Pool Raw Access Helper: Error serializing pool data with "
|
||||||
"ID 0x" << std::hex << currentPoolId << " into send buffer "
|
"ID 0x" << std::hex << currentPoolId << " into send buffer "
|
||||||
|
@ -43,7 +43,7 @@ public:
|
|||||||
* @c RETURN_FAILED on failure
|
* @c RETURN_FAILED on failure
|
||||||
*/
|
*/
|
||||||
ReturnValue_t serialize(uint8_t ** buffer, size_t * size,
|
ReturnValue_t serialize(uint8_t ** buffer, size_t * size,
|
||||||
const size_t max_size, bool bigEndian);
|
const size_t max_size, SerializeIF::Endianness streamEndianness);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serializes data pool entries into provided buffer with the validity mask buffer
|
* Serializes data pool entries into provided buffer with the validity mask buffer
|
||||||
@ -56,7 +56,7 @@ public:
|
|||||||
* @c RETURN_FAILED on failure
|
* @c RETURN_FAILED on failure
|
||||||
*/
|
*/
|
||||||
ReturnValue_t serializeWithValidityMask(uint8_t ** buffer, size_t * size,
|
ReturnValue_t serializeWithValidityMask(uint8_t ** buffer, size_t * size,
|
||||||
const size_t max_size, bool bigEndian);
|
const size_t max_size, SerializeIF::Endianness streamEndianness);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -71,7 +71,7 @@ private:
|
|||||||
uint8_t ** buffer;
|
uint8_t ** buffer;
|
||||||
size_t * size;
|
size_t * size;
|
||||||
const size_t max_size;
|
const size_t max_size;
|
||||||
bool bigEndian;
|
SerializeIF::Endianness streamEndianness;
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* Helper function to serialize single pool entries
|
* Helper function to serialize single pool entries
|
||||||
|
@ -261,7 +261,7 @@ ReturnValue_t DataPoolAdmin::handleParameterCommand(CommandMessage* command) {
|
|||||||
//identical to ParameterHelper::sendParameter()
|
//identical to ParameterHelper::sendParameter()
|
||||||
ReturnValue_t DataPoolAdmin::sendParameter(MessageQueueId_t to, uint32_t id,
|
ReturnValue_t DataPoolAdmin::sendParameter(MessageQueueId_t to, uint32_t id,
|
||||||
const DataPoolParameterWrapper* wrapper) {
|
const DataPoolParameterWrapper* wrapper) {
|
||||||
uint32_t serializedSize = wrapper->getSerializedSize();
|
size_t serializedSize = wrapper->getSerializedSize();
|
||||||
|
|
||||||
uint8_t *storeElement;
|
uint8_t *storeElement;
|
||||||
store_address_t address;
|
store_address_t address;
|
||||||
@ -275,7 +275,7 @@ ReturnValue_t DataPoolAdmin::sendParameter(MessageQueueId_t to, uint32_t id,
|
|||||||
size_t storeElementSize = 0;
|
size_t storeElementSize = 0;
|
||||||
|
|
||||||
result = wrapper->serialize(&storeElement, &storeElementSize,
|
result = wrapper->serialize(&storeElement, &storeElementSize,
|
||||||
serializedSize, true);
|
serializedSize, SerializeIF::Endianness::BIG);
|
||||||
|
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
storage->deleteData(address);
|
storage->deleteData(address);
|
||||||
|
@ -34,22 +34,22 @@ ReturnValue_t DataPoolParameterWrapper::set(uint8_t domainId,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t DataPoolParameterWrapper::serialize(uint8_t** buffer,
|
ReturnValue_t DataPoolParameterWrapper::serialize(uint8_t** buffer,
|
||||||
size_t* size, const size_t max_size, bool bigEndian) const {
|
size_t* size, size_t maxSize, Endianness streamEndianness) const {
|
||||||
ReturnValue_t result;
|
ReturnValue_t result;
|
||||||
|
|
||||||
result = SerializeAdapter<Type>::serialize(&type, buffer, size, max_size,
|
result = SerializeAdapter::serialize(&type, buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = SerializeAdapter<uint8_t>::serialize(&columns, buffer, size,
|
result = SerializeAdapter::serialize(&columns, buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<uint8_t>::serialize(&rows, buffer, size, max_size,
|
result = SerializeAdapter::serialize(&rows, buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -58,7 +58,7 @@ ReturnValue_t DataPoolParameterWrapper::serialize(uint8_t** buffer,
|
|||||||
GlobDataSet mySet;
|
GlobDataSet mySet;
|
||||||
PoolRawAccess raw(poolId, index, &mySet,PoolVariableIF::VAR_READ);
|
PoolRawAccess raw(poolId, index, &mySet,PoolVariableIF::VAR_READ);
|
||||||
mySet.read();
|
mySet.read();
|
||||||
result = raw.serialize(buffer,size,max_size,bigEndian);
|
result = raw.serialize(buffer,size,maxSize,streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK){
|
if (result != HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -68,7 +68,7 @@ ReturnValue_t DataPoolParameterWrapper::serialize(uint8_t** buffer,
|
|||||||
|
|
||||||
//same as ParameterWrapper
|
//same as ParameterWrapper
|
||||||
size_t DataPoolParameterWrapper::getSerializedSize() const {
|
size_t DataPoolParameterWrapper::getSerializedSize() const {
|
||||||
uint32_t serializedSize = 0;
|
size_t serializedSize = 0;
|
||||||
serializedSize += type.getSerializedSize();
|
serializedSize += type.getSerializedSize();
|
||||||
serializedSize += sizeof(rows);
|
serializedSize += sizeof(rows);
|
||||||
serializedSize += sizeof(columns);
|
serializedSize += sizeof(columns);
|
||||||
@ -78,7 +78,7 @@ size_t DataPoolParameterWrapper::getSerializedSize() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t DataPoolParameterWrapper::deSerialize(const uint8_t** buffer,
|
ReturnValue_t DataPoolParameterWrapper::deSerialize(const uint8_t** buffer,
|
||||||
size_t* size, bool bigEndian) {
|
size_t* size, Endianness streamEndianness) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,12 +12,12 @@ public:
|
|||||||
ReturnValue_t set(uint8_t domainId, uint16_t parameterId);
|
ReturnValue_t set(uint8_t domainId, uint16_t parameterId);
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const;
|
size_t maxSize, Endianness streamEndianness) const override;
|
||||||
|
|
||||||
virtual size_t getSerializedSize() const;
|
virtual size_t getSerializedSize() const override;
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian);
|
Endianness streamEndianness) override;
|
||||||
|
|
||||||
ReturnValue_t copyFrom(const ParameterWrapper *from,
|
ReturnValue_t copyFrom(const ParameterWrapper *from,
|
||||||
uint16_t startWritingAtIndex);
|
uint16_t startWritingAtIndex);
|
||||||
|
@ -2,7 +2,9 @@
|
|||||||
#include <framework/datapoolglob/GlobalDataSet.h>
|
#include <framework/datapoolglob/GlobalDataSet.h>
|
||||||
#include <framework/serviceinterface/ServiceInterfaceStream.h>
|
#include <framework/serviceinterface/ServiceInterfaceStream.h>
|
||||||
|
|
||||||
GlobDataSet::GlobDataSet(): DataSetBase() {}
|
GlobDataSet::GlobDataSet(): DataSetBase(
|
||||||
|
reinterpret_cast<PoolVariableIF**>(®isteredVariables),
|
||||||
|
DATA_SET_MAX_SIZE) {}
|
||||||
|
|
||||||
// Don't do anything with your variables, they are dead already!
|
// Don't do anything with your variables, they are dead already!
|
||||||
// (Destructor is already called)
|
// (Destructor is already called)
|
||||||
|
@ -61,6 +61,10 @@ public:
|
|||||||
*/
|
*/
|
||||||
void setEntriesValid(bool valid);
|
void setEntriesValid(bool valid);
|
||||||
|
|
||||||
|
//!< This definition sets the maximum number of variables to
|
||||||
|
//! register in one DataSet.
|
||||||
|
static const uint8_t DATA_SET_MAX_SIZE = 63;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* If the valid state of a dataset is always relevant to the whole
|
* If the valid state of a dataset is always relevant to the whole
|
||||||
@ -85,6 +89,8 @@ private:
|
|||||||
|
|
||||||
void handleAlreadyReadDatasetCommit();
|
void handleAlreadyReadDatasetCommit();
|
||||||
ReturnValue_t handleUnreadDatasetCommit();
|
ReturnValue_t handleUnreadDatasetCommit();
|
||||||
|
|
||||||
|
PoolVariableIF* registeredVariables[DATA_SET_MAX_SIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* DATASET_H_ */
|
#endif /* DATASET_H_ */
|
||||||
|
@ -181,18 +181,20 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const override {
|
const size_t max_size,
|
||||||
return SerializeAdapter<T>::serialize(&value, buffer, size, max_size,
|
SerializeIF::Endianness streamEndianness) const override {
|
||||||
bigEndian);
|
return SerializeAdapter::serialize(&value, buffer, size, max_size,
|
||||||
|
streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual size_t getSerializedSize() const {
|
virtual size_t getSerializedSize() const {
|
||||||
return SerializeAdapter<T>::getSerializedSize(&value);
|
return SerializeAdapter::getSerializedSize(&value);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
SerializeIF::Endianness streamEndianness) {
|
||||||
return SerializeAdapter<T>::deSerialize(&value, buffer, size, bigEndian);
|
return SerializeAdapter::deSerialize(&value, buffer, size,
|
||||||
|
streamEndianness);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -109,10 +109,10 @@ public:
|
|||||||
const T &operator [](int i) const {return value[i];}
|
const T &operator [](int i) const {return value[i];}
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const override;
|
size_t max_size, Endianness streamEndianness) const override;
|
||||||
virtual size_t getSerializedSize() const override;
|
virtual size_t getSerializedSize() const override;
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) override;
|
Endianness streamEndianness) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This is a call to read the array's values
|
* @brief This is a call to read the array's values
|
||||||
|
@ -79,12 +79,13 @@ inline ReturnValue_t GlobPoolVector<T, vectorSize>::commitWithoutLock() {
|
|||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline ReturnValue_t GlobPoolVector<T, vectorSize>::serialize(uint8_t** buffer,
|
inline ReturnValue_t GlobPoolVector<T, vectorSize>::serialize(uint8_t** buffer,
|
||||||
size_t* size, const size_t max_size, bool bigEndian) const {
|
size_t* size, size_t max_size,
|
||||||
|
SerializeIF::Endianness streamEndianness) const {
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
ReturnValue_t result;
|
ReturnValue_t result;
|
||||||
for (i = 0; i < vectorSize; i++) {
|
for (i = 0; i < vectorSize; i++) {
|
||||||
result = SerializeAdapter<T>::serialize(&(value[i]), buffer, size,
|
result = SerializeAdapter::serialize(&(value[i]), buffer, size,
|
||||||
max_size, bigEndian);
|
max_size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -94,17 +95,18 @@ inline ReturnValue_t GlobPoolVector<T, vectorSize>::serialize(uint8_t** buffer,
|
|||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline size_t GlobPoolVector<T, vectorSize>::getSerializedSize() const {
|
inline size_t GlobPoolVector<T, vectorSize>::getSerializedSize() const {
|
||||||
return vectorSize * SerializeAdapter<T>::getSerializedSize(value);
|
return vectorSize * SerializeAdapter::getSerializedSize(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline ReturnValue_t GlobPoolVector<T, vectorSize>::deSerialize(
|
inline ReturnValue_t GlobPoolVector<T, vectorSize>::deSerialize(
|
||||||
const uint8_t** buffer, size_t* size, bool bigEndian) {
|
const uint8_t** buffer, size_t* size,
|
||||||
|
SerializeIF::Endianness streamEndianness) {
|
||||||
uint16_t i;
|
uint16_t i;
|
||||||
ReturnValue_t result;
|
ReturnValue_t result;
|
||||||
for (i = 0; i < vectorSize; i++) {
|
for (i = 0; i < vectorSize; i++) {
|
||||||
result = SerializeAdapter<T>::deSerialize(&(value[i]), buffer, size,
|
result = SerializeAdapter::deSerialize(&(value[i]), buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@ class PIDReader: public PoolVariableIF {
|
|||||||
protected:
|
protected:
|
||||||
uint32_t parameterId;
|
uint32_t parameterId;
|
||||||
uint8_t valid;
|
uint8_t valid;
|
||||||
|
|
||||||
ReturnValue_t readWithoutLock() {
|
ReturnValue_t readWithoutLock() {
|
||||||
uint8_t arrayIndex = GlobalDataPool::PIDToArrayIndex(parameterId);
|
uint8_t arrayIndex = GlobalDataPool::PIDToArrayIndex(parameterId);
|
||||||
PoolEntry<T> *read_out = glob::dataPool.getData<T>(
|
PoolEntry<T> *read_out = glob::dataPool.getData<T>(
|
||||||
@ -48,7 +47,8 @@ protected:
|
|||||||
* Empty ctor for List initialization
|
* Empty ctor for List initialization
|
||||||
*/
|
*/
|
||||||
PIDReader() :
|
PIDReader() :
|
||||||
parameterId(PoolVariableIF::NO_PARAMETER), valid(PoolVariableIF::INVALID), value(0) {
|
parameterId(PoolVariableIF::NO_PARAMETER), valid(
|
||||||
|
PoolVariableIF::INVALID), value(0) {
|
||||||
|
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
@ -69,8 +69,8 @@ public:
|
|||||||
* written back to the data pool, otherwise not.
|
* written back to the data pool, otherwise not.
|
||||||
*/
|
*/
|
||||||
PIDReader(uint32_t setParameterId, DataSetIF *dataSet) :
|
PIDReader(uint32_t setParameterId, DataSetIF *dataSet) :
|
||||||
parameterId(setParameterId), valid(
|
parameterId(setParameterId), valid(PoolVariableIF::INVALID), value(
|
||||||
PoolVariableIF::INVALID), value(0) {
|
0) {
|
||||||
if (dataSet != NULL) {
|
if (dataSet != NULL) {
|
||||||
dataSet->registerVariable(this);
|
dataSet->registerVariable(this);
|
||||||
}
|
}
|
||||||
@ -145,18 +145,19 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t **buffer, size_t *size,
|
virtual ReturnValue_t serialize(uint8_t **buffer, size_t *size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const override {
|
||||||
return SerializeAdapter<T>::serialize(&value, buffer, size, max_size,
|
return SerializeAdapter::serialize(&value, buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual size_t getSerializedSize() const {
|
virtual size_t getSerializedSize() const override {
|
||||||
return SerializeAdapter<T>::getSerializedSize(&value);
|
return SerializeAdapter::getSerializedSize(&value);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
virtual ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) override {
|
||||||
return SerializeAdapter<T>::deSerialize(&value, buffer, size, bigEndian);
|
return SerializeAdapter::deSerialize(&value, buffer, size,
|
||||||
|
streamEndianness);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -145,9 +145,11 @@ ReturnValue_t PoolRawAccess::getEntryEndianSafe(uint8_t* buffer,
|
|||||||
|
|
||||||
|
|
||||||
ReturnValue_t PoolRawAccess::serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t PoolRawAccess::serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
if (typeSize + *size <= max_size) {
|
//TODO integer overflow
|
||||||
if (bigEndian) {
|
if (typeSize + *size <= maxSize) {
|
||||||
|
#warning use endian swapper
|
||||||
|
if (1) {
|
||||||
#ifndef BYTE_ORDER_SYSTEM
|
#ifndef BYTE_ORDER_SYSTEM
|
||||||
#error BYTE_ORDER_SYSTEM not defined
|
#error BYTE_ORDER_SYSTEM not defined
|
||||||
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
||||||
@ -231,11 +233,11 @@ size_t PoolRawAccess::getSerializedSize() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PoolRawAccess::deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t PoolRawAccess::deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
// TODO: Needs to be tested!!!
|
|
||||||
if (*size >= typeSize) {
|
if (*size >= typeSize) {
|
||||||
*size -= typeSize;
|
*size -= typeSize;
|
||||||
if (bigEndian) {
|
if (1) {
|
||||||
#ifndef BYTE_ORDER_SYSTEM
|
#ifndef BYTE_ORDER_SYSTEM
|
||||||
#error BYTE_ORDER_SYSTEM not defined
|
#error BYTE_ORDER_SYSTEM not defined
|
||||||
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
||||||
@ -245,14 +247,12 @@ ReturnValue_t PoolRawAccess::deSerialize(const uint8_t** buffer, size_t* size,
|
|||||||
#elif BYTE_ORDER_SYSTEM == BIG_ENDIAN
|
#elif BYTE_ORDER_SYSTEM == BIG_ENDIAN
|
||||||
memcpy(value, *buffer, typeSize);
|
memcpy(value, *buffer, typeSize);
|
||||||
#endif
|
#endif
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
memcpy(value, *buffer, typeSize);
|
memcpy(value, *buffer, typeSize);
|
||||||
}
|
}
|
||||||
*buffer += typeSize;
|
*buffer += typeSize;
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return SerializeIF::STREAM_TOO_SHORT;
|
return SerializeIF::STREAM_TOO_SHORT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,12 @@ public:
|
|||||||
* - @c SerializeIF::BUFFER_TOO_SHORT if range check failed
|
* - @c SerializeIF::BUFFER_TOO_SHORT if range check failed
|
||||||
*/
|
*/
|
||||||
ReturnValue_t serialize(uint8_t **buffer, size_t *size,
|
ReturnValue_t serialize(uint8_t **buffer, size_t *size,
|
||||||
const size_t max_size, bool bigEndian) const;
|
size_t maxSize, Endianness streamEndianness) const override;
|
||||||
|
|
||||||
|
size_t getSerializedSize() const override;
|
||||||
|
|
||||||
|
ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
||||||
|
Endianness streamEndianness) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* With this method, the content can be set from a big endian buffer safely.
|
* With this method, the content can be set from a big endian buffer safely.
|
||||||
@ -130,11 +135,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
uint16_t getSizeTillEnd() const;
|
uint16_t getSizeTillEnd() const;
|
||||||
|
|
||||||
size_t getSerializedSize() const;
|
|
||||||
|
|
||||||
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
|
||||||
bool bigEndian);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This is a call to read the value from the global data pool.
|
* @brief This is a call to read the value from the global data pool.
|
||||||
* @details
|
* @details
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include <framework/datapoollocal/LocalDataPoolManager.h>
|
#include <framework/datapoollocal/LocalDataPoolManager.h>
|
||||||
#include <framework/datapoollocal/LocalDataSet.h>
|
#include <framework/datapoollocal/LocalDataSet.h>
|
||||||
|
#include <framework/housekeeping/AcceptsHkPacketsIF.h>
|
||||||
#include <framework/ipc/MutexFactory.h>
|
#include <framework/ipc/MutexFactory.h>
|
||||||
#include <framework/ipc/MutexHelper.h>
|
#include <framework/ipc/MutexHelper.h>
|
||||||
#include <framework/ipc/QueueFactory.h>
|
#include <framework/ipc/QueueFactory.h>
|
||||||
@ -7,7 +8,7 @@
|
|||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
LocalDataPoolManager::LocalDataPoolManager(OwnsLocalDataPoolIF* owner,
|
LocalDataPoolManager::LocalDataPoolManager(OwnsLocalDataPoolIF* owner,
|
||||||
uint32_t replyQueueDepth, bool appendValidityBuffer):
|
MessageQueueIF* queueToUse, bool appendValidityBuffer):
|
||||||
appendValidityBuffer(appendValidityBuffer) {
|
appendValidityBuffer(appendValidityBuffer) {
|
||||||
if(owner == nullptr) {
|
if(owner == nullptr) {
|
||||||
sif::error << "HkManager: Invalid supplied owner!" << std::endl;
|
sif::error << "HkManager: Invalid supplied owner!" << std::endl;
|
||||||
@ -24,16 +25,45 @@ LocalDataPoolManager::LocalDataPoolManager(OwnsLocalDataPoolIF* owner,
|
|||||||
sif::error << "LocalDataPoolManager::LocalDataPoolManager: "
|
sif::error << "LocalDataPoolManager::LocalDataPoolManager: "
|
||||||
"Could not set IPC store." << std::endl;
|
"Could not set IPC store." << std::endl;
|
||||||
}
|
}
|
||||||
hkQueue = QueueFactory::instance()->createMessageQueue(replyQueueDepth,
|
hkQueue = queueToUse;
|
||||||
HousekeepingMessage::HK_MESSAGE_SIZE);
|
}
|
||||||
|
|
||||||
|
ReturnValue_t LocalDataPoolManager::initialize(MessageQueueIF* queueToUse,
|
||||||
|
object_id_t hkDestination) {
|
||||||
|
if(queueToUse == nullptr) {
|
||||||
|
sif::error << "LocalDataPoolManager::initialize: Supplied queue "
|
||||||
|
"invalid!" << std::endl;
|
||||||
|
}
|
||||||
|
hkQueue = queueToUse;
|
||||||
|
|
||||||
|
if(hkDestination == objects::NO_OBJECT) {
|
||||||
|
return initializeHousekeepingPoolEntriesOnce();
|
||||||
|
}
|
||||||
|
|
||||||
|
AcceptsHkPacketsIF* hkReceiver =
|
||||||
|
objectManager->get<AcceptsHkPacketsIF>(hkDestination);
|
||||||
|
if(hkReceiver != nullptr) {
|
||||||
|
setHkPacketDestination(hkReceiver->getHkQueue());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sif::warning << "LocalDataPoolManager::initialize: Could not retrieve"
|
||||||
|
" queue ID from HK destination object ID. " << std::flush;
|
||||||
|
sif::warning << "Make sure it exists and the object impements "
|
||||||
|
"AcceptsHkPacketsIF!" << std::endl;
|
||||||
|
}
|
||||||
|
return initializeHousekeepingPoolEntriesOnce();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalDataPoolManager::setHkPacketDestination(
|
||||||
|
MessageQueueId_t hkDestination) {
|
||||||
|
this->hkDestination = hkDestination;
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalDataPoolManager::~LocalDataPoolManager() {}
|
LocalDataPoolManager::~LocalDataPoolManager() {}
|
||||||
|
|
||||||
ReturnValue_t LocalDataPoolManager::initializeHousekeepingPoolEntriesOnce() {
|
ReturnValue_t LocalDataPoolManager::initializeHousekeepingPoolEntriesOnce() {
|
||||||
if(not mapInitialized) {
|
if(not mapInitialized) {
|
||||||
ReturnValue_t result =
|
ReturnValue_t result = owner->initializePoolEntries(localDpMap);
|
||||||
owner->initializePoolEntries(localDpMap);
|
|
||||||
if(result == HasReturnvaluesIF::RETURN_OK) {
|
if(result == HasReturnvaluesIF::RETURN_OK) {
|
||||||
mapInitialized = true;
|
mapInitialized = true;
|
||||||
}
|
}
|
||||||
@ -80,16 +110,12 @@ MutexIF* LocalDataPoolManager::getMutexHandle() {
|
|||||||
return mutex;
|
return mutex;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocalDataPoolManager::setHkPacketDestination(
|
|
||||||
MessageQueueId_t destinationQueueId) {
|
|
||||||
this->currentHkPacketDestination = destinationQueueId;
|
|
||||||
}
|
|
||||||
|
|
||||||
const OwnsLocalDataPoolIF* LocalDataPoolManager::getOwner() const {
|
const OwnsLocalDataPoolIF* LocalDataPoolManager::getOwner() const {
|
||||||
return owner;
|
return owner;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t LocalDataPoolManager::generateHousekeepingPacket(sid_t sid) {
|
ReturnValue_t LocalDataPoolManager::generateHousekeepingPacket(sid_t sid,
|
||||||
|
MessageQueueId_t sendTo) {
|
||||||
LocalDataSet* dataSetToSerialize = dynamic_cast<LocalDataSet*>(
|
LocalDataSet* dataSetToSerialize = dynamic_cast<LocalDataSet*>(
|
||||||
owner->getDataSetHandle(sid));
|
owner->getDataSetHandle(sid));
|
||||||
if(dataSetToSerialize == nullptr) {
|
if(dataSetToSerialize == nullptr) {
|
||||||
@ -108,14 +134,21 @@ ReturnValue_t LocalDataPoolManager::generateHousekeepingPacket(sid_t sid) {
|
|||||||
CommandMessage hkMessage;
|
CommandMessage hkMessage;
|
||||||
HousekeepingMessage::setHkReportMessage(&hkMessage, sid, storeId);
|
HousekeepingMessage::setHkReportMessage(&hkMessage, sid, storeId);
|
||||||
if(hkQueue == nullptr) {
|
if(hkQueue == nullptr) {
|
||||||
return QUEUE_NOT_SET;
|
return QUEUE_OR_DESTINATION_NOT_SET;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(currentHkPacketDestination != MessageQueueIF::NO_QUEUE) {
|
if(sendTo != MessageQueueIF::NO_QUEUE) {
|
||||||
result = hkQueue->sendMessage(currentHkPacketDestination, &hkMessage);
|
result = hkQueue->sendMessage(sendTo, &hkMessage);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result = hkQueue->sendToDefault(&hkMessage);
|
if(hkDestination == MessageQueueIF::NO_QUEUE) {
|
||||||
|
sif::warning << "LocalDataPoolManager::generateHousekeepingPacket:"
|
||||||
|
" Destination is not set properly!" << std::endl;
|
||||||
|
return QUEUE_OR_DESTINATION_NOT_SET;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
result = hkQueue->sendMessage(hkDestination, &hkMessage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -141,7 +174,7 @@ ReturnValue_t LocalDataPoolManager::generateSetStructurePacket(sid_t sid) {
|
|||||||
}
|
}
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
result = dataSet->serializeLocalPoolIds(&storePtr, &size,
|
result = dataSet->serializeLocalPoolIds(&storePtr, &size,
|
||||||
expectedSize, false);
|
expectedSize, SerializeIF::Endianness::BIG);
|
||||||
if(expectedSize != size) {
|
if(expectedSize != size) {
|
||||||
sif::error << "HousekeepingManager::generateSetStructurePacket: "
|
sif::error << "HousekeepingManager::generateSetStructurePacket: "
|
||||||
"Expected size is not equal to serialized size" << std::endl;
|
"Expected size is not equal to serialized size" << std::endl;
|
||||||
@ -149,6 +182,9 @@ ReturnValue_t LocalDataPoolManager::generateSetStructurePacket(sid_t sid) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LocalDataPoolManager::setMinimalSamplingFrequency(float frequencySeconds) {
|
||||||
|
}
|
||||||
|
|
||||||
ReturnValue_t LocalDataPoolManager::serializeHkPacketIntoStore(
|
ReturnValue_t LocalDataPoolManager::serializeHkPacketIntoStore(
|
||||||
store_address_t *storeId, LocalDataSet* dataSet) {
|
store_address_t *storeId, LocalDataSet* dataSet) {
|
||||||
size_t hkSize = dataSet->getSerializedSize();
|
size_t hkSize = dataSet->getSerializedSize();
|
||||||
@ -163,10 +199,11 @@ ReturnValue_t LocalDataPoolManager::serializeHkPacketIntoStore(
|
|||||||
|
|
||||||
if(appendValidityBuffer) {
|
if(appendValidityBuffer) {
|
||||||
result = dataSet->serializeWithValidityBuffer(&storePtr,
|
result = dataSet->serializeWithValidityBuffer(&storePtr,
|
||||||
&size, hkSize, false);
|
&size, hkSize, SerializeIF::Endianness::MACHINE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result = dataSet->serialize(&storePtr, &size, hkSize, false);
|
result = dataSet->serialize(&storePtr, &size, hkSize,
|
||||||
|
SerializeIF::Endianness::MACHINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
@ -177,4 +214,3 @@ ReturnValue_t LocalDataPoolManager::serializeHkPacketIntoStore(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,18 +44,45 @@ public:
|
|||||||
static constexpr ReturnValue_t POOL_ENTRY_NOT_FOUND = MAKE_RETURN_CODE(0x0);
|
static constexpr ReturnValue_t POOL_ENTRY_NOT_FOUND = MAKE_RETURN_CODE(0x0);
|
||||||
static constexpr ReturnValue_t POOL_ENTRY_TYPE_CONFLICT = MAKE_RETURN_CODE(0x1);
|
static constexpr ReturnValue_t POOL_ENTRY_TYPE_CONFLICT = MAKE_RETURN_CODE(0x1);
|
||||||
|
|
||||||
static constexpr ReturnValue_t QUEUE_NOT_SET = MAKE_RETURN_CODE(0x2);
|
static constexpr ReturnValue_t QUEUE_OR_DESTINATION_NOT_SET = MAKE_RETURN_CODE(0x2);
|
||||||
//static constexpr ReturnValue_t SET_NOT_FOUND = MAKE_RETURN_CODE(0x3);
|
//static constexpr ReturnValue_t SET_NOT_FOUND = MAKE_RETURN_CODE(0x3);
|
||||||
|
|
||||||
LocalDataPoolManager(OwnsLocalDataPoolIF* owner,
|
/**
|
||||||
uint32_t replyQueueDepth = 20, bool appendValidityBuffer = true);
|
* This constructor is used by a class which wants to implement
|
||||||
|
* a personal local data pool. The queueToUse can be supplied if it
|
||||||
|
* is already known.
|
||||||
|
*
|
||||||
|
* initialize() has to be called in any case before using the object!
|
||||||
|
* @param owner
|
||||||
|
* @param queueToUse
|
||||||
|
* @param appendValidityBuffer
|
||||||
|
*/
|
||||||
|
LocalDataPoolManager(OwnsLocalDataPoolIF* owner, MessageQueueIF* queueToUse,
|
||||||
|
bool appendValidityBuffer = true);
|
||||||
|
/**
|
||||||
|
* Initializes the map by calling the map initialization function of the
|
||||||
|
* owner abd assigns the queue to use.
|
||||||
|
* @param queueToUse
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
ReturnValue_t initialize(MessageQueueIF* queueToUse,
|
||||||
|
object_id_t hkDestination);
|
||||||
|
/**
|
||||||
|
* This function is used to set the default HK packet destination.
|
||||||
|
* This destination will usually only be set once.
|
||||||
|
* @param hkDestination
|
||||||
|
*/
|
||||||
|
void setHkPacketDestination(MessageQueueId_t hkDestination);
|
||||||
|
|
||||||
virtual~ LocalDataPoolManager();
|
virtual~ LocalDataPoolManager();
|
||||||
|
|
||||||
/* Copying forbidden */
|
/**
|
||||||
LocalDataPoolManager(const LocalDataPoolManager &) = delete;
|
* Generate a housekeeping packet with a given SID.
|
||||||
LocalDataPoolManager operator=(const LocalDataPoolManager&) = delete;
|
* @param sid
|
||||||
|
* @return
|
||||||
ReturnValue_t generateHousekeepingPacket(sid_t sid);
|
*/
|
||||||
|
ReturnValue_t generateHousekeepingPacket(sid_t sid, MessageQueueId_t sendTo
|
||||||
|
= MessageQueueIF::NO_QUEUE);
|
||||||
ReturnValue_t generateSetStructurePacket(sid_t sid);
|
ReturnValue_t generateSetStructurePacket(sid_t sid);
|
||||||
|
|
||||||
ReturnValue_t handleHousekeepingMessage(CommandMessage* message);
|
ReturnValue_t handleHousekeepingMessage(CommandMessage* message);
|
||||||
@ -68,40 +95,43 @@ public:
|
|||||||
*/
|
*/
|
||||||
ReturnValue_t initializeHousekeepingPoolEntriesOnce();
|
ReturnValue_t initializeHousekeepingPoolEntriesOnce();
|
||||||
|
|
||||||
//! Set the queue for HK packets, which are sent unrequested.
|
|
||||||
void setHkPacketDestination(MessageQueueId_t destinationQueueId);
|
|
||||||
|
|
||||||
const OwnsLocalDataPoolIF* getOwner() const;
|
const OwnsLocalDataPoolIF* getOwner() const;
|
||||||
|
|
||||||
ReturnValue_t printPoolEntry(lp_id_t localPoolId);
|
ReturnValue_t printPoolEntry(lp_id_t localPoolId);
|
||||||
|
|
||||||
|
/* Copying forbidden */
|
||||||
|
LocalDataPoolManager(const LocalDataPoolManager &) = delete;
|
||||||
|
LocalDataPoolManager operator=(const LocalDataPoolManager&) = delete;
|
||||||
private:
|
private:
|
||||||
//! This is the map holding the actual data. Should only be initialized
|
/** This is the map holding the actual data. Should only be initialized
|
||||||
//! once !
|
* once ! */
|
||||||
bool mapInitialized = false;
|
bool mapInitialized = false;
|
||||||
//! This specifies whether a validity buffer is appended at the end
|
/** This specifies whether a validity buffer is appended at the end
|
||||||
//! of generated housekeeping packets.
|
* of generated housekeeping packets. */
|
||||||
bool appendValidityBuffer = true;
|
bool appendValidityBuffer = true;
|
||||||
|
|
||||||
LocalDataPool localDpMap;
|
LocalDataPool localDpMap;
|
||||||
|
|
||||||
//! Every housekeeping data manager has a mutex to protect access
|
/** Every housekeeping data manager has a mutex to protect access
|
||||||
//! to it's data pool.
|
* to it's data pool. */
|
||||||
MutexIF * mutex = nullptr;
|
MutexIF * mutex = nullptr;
|
||||||
|
/** The class which actually owns the manager (and its datapool). */
|
||||||
//! The class which actually owns the manager (and its datapool).
|
|
||||||
OwnsLocalDataPoolIF* owner = nullptr;
|
OwnsLocalDataPoolIF* owner = nullptr;
|
||||||
|
/**
|
||||||
//! Queue used for communication, for example commands.
|
* @brief Queue used for communication, for example commands.
|
||||||
//! Is also used to send messages.
|
* Is also used to send messages. Can be set either in the constructor
|
||||||
|
* or in the initialize() function.
|
||||||
|
*/
|
||||||
MessageQueueIF* hkQueue = nullptr;
|
MessageQueueIF* hkQueue = nullptr;
|
||||||
|
|
||||||
//! HK replies will always be a reply to the commander, but HK packet
|
/**
|
||||||
//! can be sent to another destination by specifying this message queue
|
* HK replies will always be a reply to the commander, but HK packet
|
||||||
//! ID, for example to a dedicated housekeeping service implementation.
|
* can be sent to another destination by specifying this message queue
|
||||||
MessageQueueId_t currentHkPacketDestination = MessageQueueIF::NO_QUEUE;
|
* ID, for example to a dedicated housekeeping service implementation.
|
||||||
|
*/
|
||||||
|
MessageQueueId_t hkDestination = MessageQueueIF::NO_QUEUE;
|
||||||
|
|
||||||
//! Global IPC store is used to store all packets.
|
/** Global IPC store is used to store all packets. */
|
||||||
StorageManagerIF* ipcStore = nullptr;
|
StorageManagerIF* ipcStore = nullptr;
|
||||||
/**
|
/**
|
||||||
* Get the pointer to the mutex. Can be used to lock the data pool
|
* Get the pointer to the mutex. Can be used to lock the data pool
|
||||||
|
@ -5,20 +5,30 @@
|
|||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
LocalDataSet::LocalDataSet(OwnsLocalDataPoolIF *hkOwner): DataSetBase() {
|
LocalDataSet::LocalDataSet(OwnsLocalDataPoolIF *hkOwner,
|
||||||
|
const size_t maxNumberOfVariables):
|
||||||
|
DataSetBase(poolVarList.data(), maxNumberOfVariables) {
|
||||||
|
poolVarList.reserve(maxNumberOfVariables);
|
||||||
|
poolVarList.resize(maxNumberOfVariables);
|
||||||
if(hkOwner == nullptr) {
|
if(hkOwner == nullptr) {
|
||||||
sif::error << "LocalDataSet::LocalDataSet: Owner can't be nullptr!"
|
sif::error << "LocalDataSet::LocalDataSet: Owner can't be nullptr!"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
hkManager = hkOwner->getHkManagerHandle();
|
hkManager = hkOwner->getHkManagerHandle();
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalDataSet::LocalDataSet(object_id_t ownerId): DataSetBase() {
|
LocalDataSet::LocalDataSet(object_id_t ownerId,
|
||||||
|
const size_t maxNumberOfVariables):
|
||||||
|
DataSetBase(poolVarList.data(), maxNumberOfVariables) {
|
||||||
|
poolVarList.reserve(maxNumberOfVariables);
|
||||||
|
poolVarList.resize(maxNumberOfVariables);
|
||||||
OwnsLocalDataPoolIF* hkOwner = objectManager->get<OwnsLocalDataPoolIF>(
|
OwnsLocalDataPoolIF* hkOwner = objectManager->get<OwnsLocalDataPoolIF>(
|
||||||
ownerId);
|
ownerId);
|
||||||
if(hkOwner == nullptr) {
|
if(hkOwner == nullptr) {
|
||||||
sif::error << "LocalDataSet::LocalDataSet: Owner can't be nullptr!"
|
sif::error << "LocalDataSet::LocalDataSet: Owner can't be nullptr!"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
hkManager = hkOwner->getHkManagerHandle();
|
hkManager = hkOwner->getHkManagerHandle();
|
||||||
}
|
}
|
||||||
@ -32,7 +42,8 @@ ReturnValue_t LocalDataSet::lockDataPool(uint32_t timeoutMs) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t LocalDataSet::serializeWithValidityBuffer(uint8_t **buffer,
|
ReturnValue_t LocalDataSet::serializeWithValidityBuffer(uint8_t **buffer,
|
||||||
size_t *size, const size_t maxSize, bool bigEndian) const {
|
size_t *size, size_t maxSize,
|
||||||
|
SerializeIF::Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_FAILED;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_FAILED;
|
||||||
uint8_t validityMaskSize = std::ceil(static_cast<float>(fillCount)/8.0);
|
uint8_t validityMaskSize = std::ceil(static_cast<float>(fillCount)/8.0);
|
||||||
uint8_t validityMask[validityMaskSize];
|
uint8_t validityMask[validityMaskSize];
|
||||||
@ -52,7 +63,7 @@ ReturnValue_t LocalDataSet::serializeWithValidityBuffer(uint8_t **buffer,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
result = registeredVariables[count]->serialize(buffer, size, maxSize,
|
result = registeredVariables[count]->serialize(buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -69,11 +80,12 @@ ReturnValue_t LocalDataSet::unlockDataPool() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t LocalDataSet::serializeLocalPoolIds(uint8_t** buffer,
|
ReturnValue_t LocalDataSet::serializeLocalPoolIds(uint8_t** buffer,
|
||||||
size_t* size, const size_t maxSize, bool bigEndian) const {
|
size_t* size, size_t maxSize,
|
||||||
|
SerializeIF::Endianness streamEndianness) const {
|
||||||
for (uint16_t count = 0; count < fillCount; count++) {
|
for (uint16_t count = 0; count < fillCount; count++) {
|
||||||
lp_id_t currentPoolId = registeredVariables[count]->getDataPoolId();
|
lp_id_t currentPoolId = registeredVariables[count]->getDataPoolId();
|
||||||
auto result = AutoSerializeAdapter::serialize(¤tPoolId, buffer,
|
auto result = SerializeAdapter::serialize(¤tPoolId, buffer,
|
||||||
size, maxSize, bigEndian);
|
size, maxSize, streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
sif::warning << "LocalDataSet::serializeLocalPoolIds: Serialization"
|
sif::warning << "LocalDataSet::serializeLocalPoolIds: Serialization"
|
||||||
" error!" << std::endl;
|
" error!" << std::endl;
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
#include <framework/datapoollocal/OwnsLocalDataPoolIF.h>
|
#include <framework/datapoollocal/OwnsLocalDataPoolIF.h>
|
||||||
#include <framework/serialize/SerializeIF.h>
|
#include <framework/serialize/SerializeIF.h>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class LocalDataPoolManager;
|
class LocalDataPoolManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,7 +37,8 @@ public:
|
|||||||
* The constructor simply sets the fill_count to zero and sets
|
* The constructor simply sets the fill_count to zero and sets
|
||||||
* the state to "uninitialized".
|
* the state to "uninitialized".
|
||||||
*/
|
*/
|
||||||
LocalDataSet(OwnsLocalDataPoolIF* hkOwner);
|
LocalDataSet(OwnsLocalDataPoolIF *hkOwner,
|
||||||
|
const size_t maxNumberOfVariables);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Constructor for users of local pool data. The passed pool
|
* @brief Constructor for users of local pool data. The passed pool
|
||||||
@ -43,7 +46,8 @@ public:
|
|||||||
* The constructor simply sets the fill_count to zero and sets
|
* The constructor simply sets the fill_count to zero and sets
|
||||||
* the state to "uninitialized".
|
* the state to "uninitialized".
|
||||||
*/
|
*/
|
||||||
LocalDataSet(object_id_t ownerId);
|
LocalDataSet(object_id_t ownerId,
|
||||||
|
const size_t maxNumberOfVariables);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The destructor automatically manages writing the valid
|
* @brief The destructor automatically manages writing the valid
|
||||||
@ -68,10 +72,12 @@ public:
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
ReturnValue_t serializeWithValidityBuffer(uint8_t** buffer,
|
ReturnValue_t serializeWithValidityBuffer(uint8_t** buffer,
|
||||||
size_t* size, const size_t maxSize, bool bigEndian) const;
|
size_t* size, size_t maxSize,
|
||||||
|
SerializeIF::Endianness streamEndianness) const;
|
||||||
|
|
||||||
ReturnValue_t serializeLocalPoolIds(uint8_t** buffer,
|
ReturnValue_t serializeLocalPoolIds(uint8_t** buffer,
|
||||||
size_t* size, const size_t maxSize, bool bigEndian) const;
|
size_t* size, size_t maxSize,
|
||||||
|
SerializeIF::Endianness streamEndianness) const;
|
||||||
protected:
|
protected:
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
@ -102,6 +108,8 @@ private:
|
|||||||
* (most significant bit) to 7 (least significant bit)
|
* (most significant bit) to 7 (least significant bit)
|
||||||
*/
|
*/
|
||||||
void bitSetter(uint8_t* byte, uint8_t position) const;
|
void bitSetter(uint8_t* byte, uint8_t position) const;
|
||||||
|
|
||||||
|
std::vector<PoolVariableIF*> poolVarList;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FRAMEWORK_DATAPOOLLOCAL_LOCALDATASET_H_ */
|
#endif /* FRAMEWORK_DATAPOOLLOCAL_LOCALDATASET_H_ */
|
||||||
|
@ -84,11 +84,11 @@ public:
|
|||||||
void setValid(bool validity) override;
|
void setValid(bool validity) override;
|
||||||
uint8_t getValid() const;
|
uint8_t getValid() const;
|
||||||
|
|
||||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size, size_t maxSize,
|
||||||
const size_t max_size, bool bigEndian) const override;
|
SerializeIF::Endianness streamEndianness) const override;
|
||||||
virtual size_t getSerializedSize() const override;
|
virtual size_t getSerializedSize() const override;
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) override;
|
SerializeIF::Endianness streamEndianness) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This is a call to read the array's values
|
* @brief This is a call to read the array's values
|
||||||
|
@ -133,20 +133,20 @@ inline uint8_t LocalPoolVar<T>::getValid() const {
|
|||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline ReturnValue_t LocalPoolVar<T>::serialize(uint8_t** buffer, size_t* size,
|
inline ReturnValue_t LocalPoolVar<T>::serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
const size_t max_size, SerializeIF::Endianness streamEndianness) const {
|
||||||
return AutoSerializeAdapter::serialize(&value,
|
return SerializeAdapter::serialize(&value,
|
||||||
buffer, size ,max_size, bigEndian);
|
buffer, size ,max_size, streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline size_t LocalPoolVar<T>::getSerializedSize() const {
|
inline size_t LocalPoolVar<T>::getSerializedSize() const {
|
||||||
return AutoSerializeAdapter::getSerializedSize(&value);
|
return SerializeAdapter::getSerializedSize(&value);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline ReturnValue_t LocalPoolVar<T>::deSerialize(const uint8_t** buffer,
|
inline ReturnValue_t LocalPoolVar<T>::deSerialize(const uint8_t** buffer,
|
||||||
size_t* size, bool bigEndian) {
|
size_t* size, SerializeIF::Endianness streamEndianness) {
|
||||||
return AutoSerializeAdapter::deSerialize(&value, buffer, size, bigEndian);
|
return SerializeAdapter::deSerialize(&value, buffer, size, streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -114,10 +114,11 @@ public:
|
|||||||
const T &operator [](int i) const;
|
const T &operator [](int i) const;
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const override;
|
const size_t maxSize,
|
||||||
|
SerializeIF::Endianness streamEndiannes) const override;
|
||||||
virtual size_t getSerializedSize() const override;
|
virtual size_t getSerializedSize() const override;
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) override;
|
SerializeIF::Endianness streamEndianness) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This is a call to read the array's values
|
* @brief This is a call to read the array's values
|
||||||
|
@ -125,11 +125,12 @@ inline const T& LocalPoolVector<T, vectorSize>::operator [](int i) const {
|
|||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline ReturnValue_t LocalPoolVector<T, vectorSize>::serialize(uint8_t** buffer,
|
inline ReturnValue_t LocalPoolVector<T, vectorSize>::serialize(uint8_t** buffer,
|
||||||
size_t* size, const size_t max_size, bool bigEndian) const {
|
size_t* size, size_t maxSize,
|
||||||
|
SerializeIF::Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_FAILED;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_FAILED;
|
||||||
for (uint16_t i = 0; i < vectorSize; i++) {
|
for (uint16_t i = 0; i < vectorSize; i++) {
|
||||||
result = SerializeAdapter<T>::serialize(&(value[i]), buffer, size,
|
result = SerializeAdapter::serialize(&(value[i]), buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -139,16 +140,17 @@ inline ReturnValue_t LocalPoolVector<T, vectorSize>::serialize(uint8_t** buffer,
|
|||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline size_t LocalPoolVector<T, vectorSize>::getSerializedSize() const {
|
inline size_t LocalPoolVector<T, vectorSize>::getSerializedSize() const {
|
||||||
return vectorSize * SerializeAdapter<T>::getSerializedSize(value);
|
return vectorSize * SerializeAdapter::getSerializedSize(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, uint16_t vectorSize>
|
template<typename T, uint16_t vectorSize>
|
||||||
inline ReturnValue_t LocalPoolVector<T, vectorSize>::deSerialize(
|
inline ReturnValue_t LocalPoolVector<T, vectorSize>::deSerialize(
|
||||||
const uint8_t** buffer, size_t* size, bool bigEndian) {
|
const uint8_t** buffer, size_t* size,
|
||||||
|
SerializeIF::Endianness streamEndianness) {
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_FAILED;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_FAILED;
|
||||||
for (uint16_t i = 0; i < vectorSize; i++) {
|
for (uint16_t i = 0; i < vectorSize; i++) {
|
||||||
result = SerializeAdapter<T>::deSerialize(&(value[i]), buffer, size,
|
result = SerializeAdapter::deSerialize(&(value[i]), buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
6
datapoollocal/StaticLocalDataSet.cpp
Normal file
6
datapoollocal/StaticLocalDataSet.cpp
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#include <framework/datapoollocal/StaticLocalDataSet.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
11
datapoollocal/StaticLocalDataSet.h
Normal file
11
datapoollocal/StaticLocalDataSet.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef FRAMEWORK_DATAPOOLLOCAL_STATICLOCALDATASET_H_
|
||||||
|
#define FRAMEWORK_DATAPOOLLOCAL_STATICLOCALDATASET_H_
|
||||||
|
#include <framework/datapool/DataSetBase.h>
|
||||||
|
|
||||||
|
|
||||||
|
class StaticLocalDataSet: public DataSetBase {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* FRAMEWORK_DATAPOOLLOCAL_STATICLOCALDATASET_H_ */
|
@ -1,15 +1,12 @@
|
|||||||
/**
|
#ifndef FRAMEWORK_DEVICEHANDLERS_ACCEPTSDEVICERESPONSESIF_H_
|
||||||
* @file AcceptsDeviceResponsesIF.h
|
#define FRAMEWORK_DEVICEHANDLERS_ACCEPTSDEVICERESPONSESIF_H_
|
||||||
* @brief This file defines the AcceptsDeviceResponsesIF class.
|
|
||||||
* @date 15.05.2013
|
|
||||||
* @author baetz
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef ACCEPTSDEVICERESPONSESIF_H_
|
|
||||||
#define ACCEPTSDEVICERESPONSESIF_H_
|
|
||||||
|
|
||||||
#include <framework/ipc/MessageQueueSenderIF.h>
|
#include <framework/ipc/MessageQueueSenderIF.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This interface is used by the device handler to send a device response
|
||||||
|
* to the queue ID, which is returned in the implemented abstract method.
|
||||||
|
*/
|
||||||
class AcceptsDeviceResponsesIF {
|
class AcceptsDeviceResponsesIF {
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
@ -19,4 +16,4 @@ public:
|
|||||||
virtual MessageQueueId_t getDeviceQueue() = 0;
|
virtual MessageQueueId_t getDeviceQueue() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* ACCEPTSDEVICERESPONSESIF_H_ */
|
#endif /* FRAMEWORK_DEVICEHANDLERS_ACCEPTSDEVICERESPONSESIF_H_ */
|
||||||
|
@ -5,10 +5,11 @@
|
|||||||
ChildHandlerBase::ChildHandlerBase(object_id_t setObjectId,
|
ChildHandlerBase::ChildHandlerBase(object_id_t setObjectId,
|
||||||
object_id_t deviceCommunication, CookieIF * cookie,
|
object_id_t deviceCommunication, CookieIF * cookie,
|
||||||
uint32_t maxDeviceReplyLen, uint8_t setDeviceSwitch,
|
uint32_t maxDeviceReplyLen, uint8_t setDeviceSwitch,
|
||||||
uint32_t thermalStatePoolId, uint32_t thermalRequestPoolId,
|
object_id_t hkDestination, uint32_t thermalStatePoolId,
|
||||||
uint32_t parent, FailureIsolationBase* customFdir, size_t cmdQueueSize) :
|
uint32_t thermalRequestPoolId, uint32_t parent,
|
||||||
|
FailureIsolationBase* customFdir, size_t cmdQueueSize) :
|
||||||
DeviceHandlerBase(setObjectId, deviceCommunication, cookie,
|
DeviceHandlerBase(setObjectId, deviceCommunication, cookie,
|
||||||
setDeviceSwitch, thermalStatePoolId,
|
hkDestination, setDeviceSwitch, thermalStatePoolId,
|
||||||
thermalRequestPoolId, (customFdir == NULL? &childHandlerFdir : customFdir),
|
thermalRequestPoolId, (customFdir == NULL? &childHandlerFdir : customFdir),
|
||||||
cmdQueueSize),
|
cmdQueueSize),
|
||||||
parentId(parent), childHandlerFdir(setObjectId) {
|
parentId(parent), childHandlerFdir(setObjectId) {
|
||||||
|
@ -8,9 +8,9 @@ class ChildHandlerBase: public DeviceHandlerBase {
|
|||||||
public:
|
public:
|
||||||
ChildHandlerBase(object_id_t setObjectId, object_id_t deviceCommunication,
|
ChildHandlerBase(object_id_t setObjectId, object_id_t deviceCommunication,
|
||||||
CookieIF * cookie, uint32_t maxDeviceReplyLen, uint8_t setDeviceSwitch,
|
CookieIF * cookie, uint32_t maxDeviceReplyLen, uint8_t setDeviceSwitch,
|
||||||
uint32_t thermalStatePoolId, uint32_t thermalRequestPoolId,
|
object_id_t hkDestination, uint32_t thermalStatePoolId,
|
||||||
uint32_t parent, FailureIsolationBase* customFdir = nullptr,
|
uint32_t thermalRequestPoolId, uint32_t parent,
|
||||||
size_t cmdQueueSize = 20);
|
FailureIsolationBase* customFdir = nullptr, size_t cmdQueueSize = 20);
|
||||||
virtual ~ChildHandlerBase();
|
virtual ~ChildHandlerBase();
|
||||||
|
|
||||||
virtual ReturnValue_t initialize();
|
virtual ReturnValue_t initialize();
|
||||||
|
@ -22,21 +22,21 @@ object_id_t DeviceHandlerBase::defaultFDIRParentId = 0;
|
|||||||
|
|
||||||
DeviceHandlerBase::DeviceHandlerBase(object_id_t setObjectId,
|
DeviceHandlerBase::DeviceHandlerBase(object_id_t setObjectId,
|
||||||
object_id_t deviceCommunication, CookieIF * comCookie,
|
object_id_t deviceCommunication, CookieIF * comCookie,
|
||||||
uint8_t setDeviceSwitch, uint32_t thermalStatePoolId,
|
uint8_t setDeviceSwitch, object_id_t hkDestination,
|
||||||
uint32_t thermalRequestPoolId, FailureIsolationBase* fdirInstance,
|
uint32_t thermalStatePoolId, uint32_t thermalRequestPoolId,
|
||||||
size_t cmdQueueSize) :
|
FailureIsolationBase* fdirInstance, size_t cmdQueueSize) :
|
||||||
SystemObject(setObjectId), mode(MODE_OFF), submode(SUBMODE_NONE),
|
SystemObject(setObjectId), mode(MODE_OFF), submode(SUBMODE_NONE),
|
||||||
wiretappingMode(OFF), storedRawData(StorageManagerIF::INVALID_ADDRESS),
|
wiretappingMode(OFF), storedRawData(StorageManagerIF::INVALID_ADDRESS),
|
||||||
deviceCommunicationId(deviceCommunication), comCookie(comCookie),
|
deviceCommunicationId(deviceCommunication), comCookie(comCookie),
|
||||||
healthHelper(this,setObjectId), modeHelper(this), parameterHelper(this),
|
healthHelper(this,setObjectId), modeHelper(this), parameterHelper(this),
|
||||||
actionHelper(this, nullptr), hkManager(this),
|
actionHelper(this, nullptr), hkManager(this, nullptr),
|
||||||
deviceThermalStatePoolId(thermalStatePoolId),
|
deviceThermalStatePoolId(thermalStatePoolId),
|
||||||
deviceThermalRequestPoolId(thermalRequestPoolId),
|
deviceThermalRequestPoolId(thermalRequestPoolId),
|
||||||
childTransitionFailure(RETURN_OK), fdirInstance(fdirInstance),
|
childTransitionFailure(RETURN_OK), fdirInstance(fdirInstance),
|
||||||
hkSwitcher(this), defaultFDIRUsed(fdirInstance == nullptr),
|
hkSwitcher(this), defaultFDIRUsed(fdirInstance == nullptr),
|
||||||
switchOffWasReported(false), childTransitionDelay(5000),
|
switchOffWasReported(false), hkDestination(hkDestination),
|
||||||
transitionSourceMode(_MODE_POWER_DOWN), transitionSourceSubMode(
|
childTransitionDelay(5000), transitionSourceMode(_MODE_POWER_DOWN),
|
||||||
SUBMODE_NONE), deviceSwitch(setDeviceSwitch) {
|
transitionSourceSubMode(SUBMODE_NONE), deviceSwitch(setDeviceSwitch) {
|
||||||
commandQueue = QueueFactory::instance()->createMessageQueue(cmdQueueSize,
|
commandQueue = QueueFactory::instance()->createMessageQueue(cmdQueueSize,
|
||||||
MessageQueueMessage::MAX_MESSAGE_SIZE);
|
MessageQueueMessage::MAX_MESSAGE_SIZE);
|
||||||
insertInCommandMap(RAW_COMMAND_ID);
|
insertInCommandMap(RAW_COMMAND_ID);
|
||||||
@ -173,7 +173,7 @@ ReturnValue_t DeviceHandlerBase::initialize() {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = hkManager.initializeHousekeepingPoolEntriesOnce();
|
result = hkManager.initialize(commandQueue, hkDestination);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -315,6 +315,12 @@ void DeviceHandlerBase::doStateMachine() {
|
|||||||
case _MODE_WAIT_OFF: {
|
case _MODE_WAIT_OFF: {
|
||||||
uint32_t currentUptime;
|
uint32_t currentUptime;
|
||||||
Clock::getUptime(¤tUptime);
|
Clock::getUptime(¤tUptime);
|
||||||
|
|
||||||
|
if(powerSwitcher == nullptr) {
|
||||||
|
setMode(MODE_OFF);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (currentUptime - timeoutStart >= powerSwitcher->getSwitchDelayMs()) {
|
if (currentUptime - timeoutStart >= powerSwitcher->getSwitchDelayMs()) {
|
||||||
triggerEvent(MODE_TRANSITION_FAILED, PowerSwitchIF::SWITCH_TIMEOUT,
|
triggerEvent(MODE_TRANSITION_FAILED, PowerSwitchIF::SWITCH_TIMEOUT,
|
||||||
0);
|
0);
|
||||||
@ -696,19 +702,23 @@ void DeviceHandlerBase::handleReply(const uint8_t* receivedData,
|
|||||||
|
|
||||||
if (info->delayCycles != 0) {
|
if (info->delayCycles != 0) {
|
||||||
|
|
||||||
if (info->periodic != 0) {
|
if (info->periodic != false) {
|
||||||
info->delayCycles = info->maxDelayCycles;
|
info->delayCycles = info->maxDelayCycles;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
info->delayCycles = 0;
|
info->delayCycles = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = interpretDeviceReply(foundId, receivedData);
|
result = interpretDeviceReply(foundId, receivedData);
|
||||||
|
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
// Report failed interpretation to FDIR.
|
// Report failed interpretation to FDIR.
|
||||||
replyRawReplyIfnotWiretapped(receivedData, foundLen);
|
replyRawReplyIfnotWiretapped(receivedData, foundLen);
|
||||||
triggerEvent(DEVICE_INTERPRETING_REPLY_FAILED, result, foundId);
|
triggerEvent(DEVICE_INTERPRETING_REPLY_FAILED, result, foundId);
|
||||||
}
|
}
|
||||||
replyToReply(iter, result);
|
replyToReply(iter, result);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
// Other completion failure messages are created by timeout.
|
// Other completion failure messages are created by timeout.
|
||||||
// Powering down the device might take some time during which periodic
|
// Powering down the device might take some time during which periodic
|
||||||
// replies may still come in.
|
// replies may still come in.
|
||||||
|
@ -107,6 +107,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
DeviceHandlerBase(object_id_t setObjectId, object_id_t deviceCommunication,
|
DeviceHandlerBase(object_id_t setObjectId, object_id_t deviceCommunication,
|
||||||
CookieIF * comCookie, uint8_t setDeviceSwitch,
|
CookieIF * comCookie, uint8_t setDeviceSwitch,
|
||||||
|
object_id_t hkDestination = objects::NO_OBJECT,
|
||||||
uint32_t thermalStatePoolId = PoolVariableIF::NO_PARAMETER,
|
uint32_t thermalStatePoolId = PoolVariableIF::NO_PARAMETER,
|
||||||
uint32_t thermalRequestPoolId = PoolVariableIF::NO_PARAMETER,
|
uint32_t thermalRequestPoolId = PoolVariableIF::NO_PARAMETER,
|
||||||
FailureIsolationBase* fdirInstance = nullptr,
|
FailureIsolationBase* fdirInstance = nullptr,
|
||||||
@ -652,11 +653,13 @@ protected:
|
|||||||
size_t replyLen = 0; //!< Expected size of the reply.
|
size_t replyLen = 0; //!< Expected size of the reply.
|
||||||
//! if this is !=0, the delayCycles will not be reset to 0 but to
|
//! if this is !=0, the delayCycles will not be reset to 0 but to
|
||||||
//! maxDelayCycles
|
//! maxDelayCycles
|
||||||
bool periodic;
|
bool periodic = false;
|
||||||
//! The dataset used to access housekeeping data related to the
|
//! The dataset used to access housekeeping data related to the
|
||||||
//! respective device reply. Will point to a dataset held by
|
//! respective device reply. Will point to a dataset held by
|
||||||
//! the child handler (if one is specified)
|
//! the child handler (if one is specified)
|
||||||
DataSetIF* dataSet;
|
DataSetIF* dataSet = nullptr;
|
||||||
|
float collectionInterval = 0.0;
|
||||||
|
uint32_t intervalCounter = 0;
|
||||||
//! The command that expects this reply.
|
//! The command that expects this reply.
|
||||||
DeviceCommandMap::iterator command;
|
DeviceCommandMap::iterator command;
|
||||||
};
|
};
|
||||||
@ -1035,8 +1038,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Info about the #cookie
|
* @brief Info about the #cookie
|
||||||
*
|
|
||||||
* Used to track the state of the communication
|
* Used to track the state of the communication
|
||||||
*/
|
*/
|
||||||
CookieInfo cookieInfo;
|
CookieInfo cookieInfo;
|
||||||
@ -1044,9 +1046,11 @@ private:
|
|||||||
/** the object used to set power switches */
|
/** the object used to set power switches */
|
||||||
PowerSwitchIF *powerSwitcher = nullptr;
|
PowerSwitchIF *powerSwitcher = nullptr;
|
||||||
|
|
||||||
|
/** Cached for initialize() */
|
||||||
|
object_id_t hkDestination = objects::NO_OBJECT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used for timing out mode transitions.
|
* @brief Used for timing out mode transitions.
|
||||||
*
|
|
||||||
* Set when setMode() is called.
|
* Set when setMode() is called.
|
||||||
*/
|
*/
|
||||||
uint32_t timeoutStart = 0;
|
uint32_t timeoutStart = 0;
|
||||||
@ -1057,11 +1061,12 @@ private:
|
|||||||
uint32_t childTransitionDelay;
|
uint32_t childTransitionDelay;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The mode the current transition originated from
|
* @brief The mode the current transition originated from
|
||||||
*
|
*
|
||||||
* This is private so the child can not change it and fuck up the timeouts
|
* This is private so the child can not change it and fuck up the timeouts
|
||||||
*
|
*
|
||||||
* IMPORTANT: This is not valid during _MODE_SHUT_DOWN and _MODE_START_UP!! (it is _MODE_POWER_DOWN during this modes)
|
* IMPORTANT: This is not valid during _MODE_SHUT_DOWN and _MODE_START_UP!!
|
||||||
|
* (it is _MODE_POWER_DOWN during this modes)
|
||||||
*
|
*
|
||||||
* is element of [MODE_ON, MODE_NORMAL, MODE_RAW]
|
* is element of [MODE_ON, MODE_NORMAL, MODE_RAW]
|
||||||
*/
|
*/
|
||||||
|
@ -12,18 +12,18 @@ DeviceTmReportingWrapper::~DeviceTmReportingWrapper() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t DeviceTmReportingWrapper::serialize(uint8_t** buffer,
|
ReturnValue_t DeviceTmReportingWrapper::serialize(uint8_t** buffer,
|
||||||
size_t* size, const size_t max_size, bool bigEndian) const {
|
size_t* size, size_t maxSize, Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = SerializeAdapter<object_id_t>::serialize(&objectId,
|
ReturnValue_t result = SerializeAdapter::serialize(&objectId,
|
||||||
buffer, size, max_size, bigEndian);
|
buffer, size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<ActionId_t>::serialize(&actionId, buffer,
|
result = SerializeAdapter::serialize(&actionId, buffer,
|
||||||
size, max_size, bigEndian);
|
size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return data->serialize(buffer, size, max_size, bigEndian);
|
return data->serialize(buffer, size, maxSize, streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t DeviceTmReportingWrapper::getSerializedSize() const {
|
size_t DeviceTmReportingWrapper::getSerializedSize() const {
|
||||||
@ -31,16 +31,16 @@ size_t DeviceTmReportingWrapper::getSerializedSize() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t DeviceTmReportingWrapper::deSerialize(const uint8_t** buffer,
|
ReturnValue_t DeviceTmReportingWrapper::deSerialize(const uint8_t** buffer,
|
||||||
size_t* size, bool bigEndian) {
|
size_t* size, Endianness streamEndianness) {
|
||||||
ReturnValue_t result = SerializeAdapter<object_id_t>::deSerialize(&objectId,
|
ReturnValue_t result = SerializeAdapter::deSerialize(&objectId,
|
||||||
buffer, size, bigEndian);
|
buffer, size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<ActionId_t>::deSerialize(&actionId, buffer,
|
result = SerializeAdapter::deSerialize(&actionId, buffer,
|
||||||
size, bigEndian);
|
size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return data->deSerialize(buffer, size, bigEndian);
|
return data->deSerialize(buffer, size, streamEndianness);
|
||||||
}
|
}
|
||||||
|
@ -12,12 +12,12 @@ public:
|
|||||||
virtual ~DeviceTmReportingWrapper();
|
virtual ~DeviceTmReportingWrapper();
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const;
|
size_t maxSize, Endianness streamEndianness) const override;
|
||||||
|
|
||||||
virtual size_t getSerializedSize() const;
|
virtual size_t getSerializedSize() const override;
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian);
|
Endianness streamEndianness) override;
|
||||||
private:
|
private:
|
||||||
object_id_t objectId;
|
object_id_t objectId;
|
||||||
ActionId_t actionId;
|
ActionId_t actionId;
|
||||||
|
@ -12,15 +12,15 @@ public:
|
|||||||
EventRangeMatcherBase(T from, T till, bool inverted) : rangeMatcher(from, till, inverted) { }
|
EventRangeMatcherBase(T from, T till, bool inverted) : rangeMatcher(from, till, inverted) { }
|
||||||
virtual ~EventRangeMatcherBase() { }
|
virtual ~EventRangeMatcherBase() { }
|
||||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
return rangeMatcher.serialize(buffer, size, max_size, bigEndian);
|
return rangeMatcher.serialize(buffer, size, maxSize, streamEndianness);
|
||||||
}
|
}
|
||||||
size_t getSerializedSize() const {
|
size_t getSerializedSize() const {
|
||||||
return rangeMatcher.getSerializedSize();
|
return rangeMatcher.getSerializedSize();
|
||||||
}
|
}
|
||||||
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
return rangeMatcher.deSerialize(buffer, size, bigEndian);
|
return rangeMatcher.deSerialize(buffer, size, streamEndianness);
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
RangeMatcher<T> rangeMatcher;
|
RangeMatcher<T> rangeMatcher;
|
||||||
|
@ -59,7 +59,7 @@ uint8_t Type::getSize() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t Type::serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t Type::serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
uint8_t ptc;
|
uint8_t ptc;
|
||||||
uint8_t pfc;
|
uint8_t pfc;
|
||||||
ReturnValue_t result = getPtcPfc(&ptc, &pfc);
|
ReturnValue_t result = getPtcPfc(&ptc, &pfc);
|
||||||
@ -67,14 +67,14 @@ ReturnValue_t Type::serialize(uint8_t** buffer, size_t* size,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = SerializeAdapter<uint8_t>::serialize(&ptc, buffer, size, max_size,
|
result = SerializeAdapter::serialize(&ptc, buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = SerializeAdapter<uint8_t>::serialize(&pfc, buffer, size, max_size,
|
result = SerializeAdapter::serialize(&pfc, buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
@ -82,21 +82,21 @@ ReturnValue_t Type::serialize(uint8_t** buffer, size_t* size,
|
|||||||
|
|
||||||
size_t Type::getSerializedSize() const {
|
size_t Type::getSerializedSize() const {
|
||||||
uint8_t dontcare = 0;
|
uint8_t dontcare = 0;
|
||||||
return 2 * SerializeAdapter<uint8_t>::getSerializedSize(&dontcare);
|
return 2 * SerializeAdapter::getSerializedSize(&dontcare);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t Type::deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t Type::deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
uint8_t ptc;
|
uint8_t ptc;
|
||||||
uint8_t pfc;
|
uint8_t pfc;
|
||||||
ReturnValue_t result = SerializeAdapter<uint8_t>::deSerialize(&ptc, buffer,
|
ReturnValue_t result = SerializeAdapter::deSerialize(&ptc, buffer,
|
||||||
size, bigEndian);
|
size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = SerializeAdapter<uint8_t>::deSerialize(&pfc, buffer, size,
|
result = SerializeAdapter::deSerialize(&pfc, buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -43,12 +43,12 @@ public:
|
|||||||
static ActualType_t getActualType(uint8_t ptc, uint8_t pfc);
|
static ActualType_t getActualType(uint8_t ptc, uint8_t pfc);
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t **buffer, size_t *size,
|
virtual ReturnValue_t serialize(uint8_t **buffer, size_t *size,
|
||||||
const size_t max_size, bool bigEndian) const;
|
size_t maxSize, Endianness streamEndianness) const override;
|
||||||
|
|
||||||
virtual size_t getSerializedSize() const;
|
virtual size_t getSerializedSize() const override;
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
virtual ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
||||||
bool bigEndian);
|
Endianness streamEndianness) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ActualType_t actualType;
|
ActualType_t actualType;
|
||||||
|
@ -1,104 +0,0 @@
|
|||||||
#include <framework/globalfunctions/conversion.h>
|
|
||||||
#include <framework/osal/Endiness.h>
|
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//SHOULDDO: This shall be optimized (later)!
|
|
||||||
void convertToByteStream( uint16_t value, uint8_t* buffer, uint32_t* size ) {
|
|
||||||
buffer[0] = (value & 0xFF00) >> 8;
|
|
||||||
buffer[1] = (value & 0x00FF);
|
|
||||||
*size += 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
void convertToByteStream( uint32_t value, uint8_t* buffer, uint32_t* size ) {
|
|
||||||
buffer[0] = (value & 0xFF000000) >> 24;
|
|
||||||
buffer[1] = (value & 0x00FF0000) >> 16;
|
|
||||||
buffer[2] = (value & 0x0000FF00) >> 8;
|
|
||||||
buffer[3] = (value & 0x000000FF);
|
|
||||||
*size +=4;
|
|
||||||
}
|
|
||||||
|
|
||||||
void convertToByteStream( int16_t value, uint8_t* buffer, uint32_t* size ) {
|
|
||||||
buffer[0] = (value & 0xFF00) >> 8;
|
|
||||||
buffer[1] = (value & 0x00FF);
|
|
||||||
*size += 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
void convertToByteStream( int32_t value, uint8_t* buffer, uint32_t* size ) {
|
|
||||||
buffer[0] = (value & 0xFF000000) >> 24;
|
|
||||||
buffer[1] = (value & 0x00FF0000) >> 16;
|
|
||||||
buffer[2] = (value & 0x0000FF00) >> 8;
|
|
||||||
buffer[3] = (value & 0x000000FF);
|
|
||||||
*size += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
//void convertToByteStream( uint64_t value, uint8_t* buffer, uint32_t* size ) {
|
|
||||||
// buffer[0] = (value & 0xFF00000000000000) >> 56;
|
|
||||||
// buffer[1] = (value & 0x00FF000000000000) >> 48;
|
|
||||||
// buffer[2] = (value & 0x0000FF0000000000) >> 40;
|
|
||||||
// buffer[3] = (value & 0x000000FF00000000) >> 32;
|
|
||||||
// buffer[4] = (value & 0x00000000FF000000) >> 24;
|
|
||||||
// buffer[5] = (value & 0x0000000000FF0000) >> 16;
|
|
||||||
// buffer[6] = (value & 0x000000000000FF00) >> 8;
|
|
||||||
// buffer[7] = (value & 0x00000000000000FF);
|
|
||||||
// *size+=8;
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//void convertToByteStream( int64_t value, uint8_t* buffer, uint32_t* size ) {
|
|
||||||
// buffer[0] = (value & 0xFF00000000000000) >> 56;
|
|
||||||
// buffer[1] = (value & 0x00FF000000000000) >> 48;
|
|
||||||
// buffer[2] = (value & 0x0000FF0000000000) >> 40;
|
|
||||||
// buffer[3] = (value & 0x000000FF00000000) >> 32;
|
|
||||||
// buffer[4] = (value & 0x00000000FF000000) >> 24;
|
|
||||||
// buffer[5] = (value & 0x0000000000FF0000) >> 16;
|
|
||||||
// buffer[6] = (value & 0x000000000000FF00) >> 8;
|
|
||||||
// buffer[7] = (value & 0x00000000000000FF);
|
|
||||||
// *size+=8;
|
|
||||||
//}
|
|
||||||
|
|
||||||
void convertToByteStream( float in_value, uint8_t* buffer, uint32_t* size ) {
|
|
||||||
#ifndef BYTE_ORDER_SYSTEM
|
|
||||||
#error BYTE_ORDER_SYSTEM not defined
|
|
||||||
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
|
||||||
union float_union {
|
|
||||||
float value;
|
|
||||||
uint8_t chars[4];
|
|
||||||
};
|
|
||||||
float_union temp;
|
|
||||||
temp.value = in_value;
|
|
||||||
buffer[0] = temp.chars[3];
|
|
||||||
buffer[1] = temp.chars[2];
|
|
||||||
buffer[2] = temp.chars[1];
|
|
||||||
buffer[3] = temp.chars[0];
|
|
||||||
*size += 4;
|
|
||||||
#elif BYTE_ORDER_SYSTEM == BIG_ENDIAN
|
|
||||||
memcpy(buffer, &in_value, sizeof(in_value));
|
|
||||||
*size += sizeof(in_value);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void convertToByteStream( double in_value, uint8_t* buffer, uint32_t* size ) {
|
|
||||||
#ifndef BYTE_ORDER_SYSTEM
|
|
||||||
#error BYTE_ORDER_SYSTEM not defined
|
|
||||||
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
|
||||||
union double_union {
|
|
||||||
double value;
|
|
||||||
uint8_t chars[8];
|
|
||||||
};
|
|
||||||
double_union temp;
|
|
||||||
temp.value = in_value;
|
|
||||||
buffer[0] = temp.chars[7];
|
|
||||||
buffer[1] = temp.chars[6];
|
|
||||||
buffer[2] = temp.chars[5];
|
|
||||||
buffer[3] = temp.chars[4];
|
|
||||||
buffer[4] = temp.chars[3];
|
|
||||||
buffer[5] = temp.chars[2];
|
|
||||||
buffer[6] = temp.chars[1];
|
|
||||||
buffer[7] = temp.chars[0];
|
|
||||||
*size += 8;
|
|
||||||
#elif BYTE_ORDER_SYSTEM == BIG_ENDIAN
|
|
||||||
memcpy(buffer, &in_value, sizeof(in_value));
|
|
||||||
*size += sizeof(in_value);
|
|
||||||
#endif
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
#ifndef CONVERSION_H_
|
|
||||||
#define CONVERSION_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
|
|
||||||
void convertToByteStream( uint16_t value, uint8_t* buffer, uint32_t* size );
|
|
||||||
|
|
||||||
void convertToByteStream( uint32_t value, uint8_t* buffer, uint32_t* size );
|
|
||||||
|
|
||||||
void convertToByteStream( int16_t value, uint8_t* buffer, uint32_t* size );
|
|
||||||
|
|
||||||
void convertToByteStream( int32_t value, uint8_t* buffer, uint32_t* size );
|
|
||||||
|
|
||||||
//void convertToByteStream( uint64_t value, uint8_t* buffer, uint32_t* size );
|
|
||||||
//
|
|
||||||
//void convertToByteStream( int64_t value, uint8_t* buffer, uint32_t* size );
|
|
||||||
|
|
||||||
void convertToByteStream( float value, uint8_t* buffer, uint32_t* size );
|
|
||||||
|
|
||||||
void convertToByteStream( double value, uint8_t* buffer, uint32_t* size );
|
|
||||||
|
|
||||||
#endif /* CONVERSION_H_ */
|
|
@ -46,37 +46,37 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, SerializeIF::Endianness streamEndianness) const override {
|
||||||
iterator iter = this->begin();
|
iterator iter = this->begin();
|
||||||
uint8_t count = this->countRight(iter);
|
uint8_t count = this->countRight(iter);
|
||||||
ReturnValue_t result = SerializeAdapter<uint8_t>::serialize(&count,
|
ReturnValue_t result = SerializeAdapter::serialize(&count,
|
||||||
buffer, size, max_size, bigEndian);
|
buffer, size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (iter == this->end()) {
|
if (iter == this->end()) {
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
result = iter->serialize(buffer, size, max_size, bigEndian);
|
result = iter->serialize(buffer, size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (maxDepth > 0) {
|
if (maxDepth > 0) {
|
||||||
MatchTree<T> temp(iter.left(), maxDepth - 1);
|
MatchTree<T> temp(iter.left(), maxDepth - 1);
|
||||||
result = temp.serialize(buffer, size, max_size, bigEndian);
|
result = temp.serialize(buffer, size, maxSize, streamEndianness);
|
||||||
}
|
}
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
iter = iter.right();
|
iter = iter.right();
|
||||||
while (iter != this->end()) {
|
while (iter != this->end()) {
|
||||||
result = iter->serialize(buffer, size, max_size, bigEndian);
|
result = iter->serialize(buffer, size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (maxDepth > 0) {
|
if (maxDepth > 0) {
|
||||||
MatchTree<T> temp(iter.left(), maxDepth - 1);
|
MatchTree<T> temp(iter.left(), maxDepth - 1);
|
||||||
result = temp.serialize(buffer, size, max_size, bigEndian);
|
result = temp.serialize(buffer, size, maxSize, streamEndianness);
|
||||||
}
|
}
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
@ -86,7 +86,7 @@ public:
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t getSerializedSize() const {
|
size_t getSerializedSize() const override {
|
||||||
//Analogous to serialize!
|
//Analogous to serialize!
|
||||||
uint32_t size = 1; //One for count
|
uint32_t size = 1; //One for count
|
||||||
iterator iter = this->begin();
|
iterator iter = this->begin();
|
||||||
@ -116,7 +116,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
SerializeIF::Endianness streamEndianness) override {
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
#include <framework/globalfunctions/matching/SerializeableMatcherIF.h>
|
#include <framework/globalfunctions/matching/SerializeableMatcherIF.h>
|
||||||
#include <framework/serialize/SerializeAdapter.h>
|
#include <framework/serialize/SerializeAdapter.h>
|
||||||
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class RangeMatcher: public SerializeableMatcherIF<T> {
|
class RangeMatcher: public SerializeableMatcherIF<T> {
|
||||||
public:
|
public:
|
||||||
@ -27,40 +26,40 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t **buffer, size_t *size, size_t maxSize,
|
||||||
const size_t max_size, bool bigEndian) const {
|
SerializeIF::Endianness streamEndianness) const override {
|
||||||
ReturnValue_t result = SerializeAdapter<T>::serialize(&lowerBound,
|
ReturnValue_t result = SerializeAdapter::serialize(&lowerBound, buffer,
|
||||||
buffer, size, max_size, bigEndian);
|
size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<T>::serialize(&upperBound, buffer, size,
|
result = SerializeAdapter::serialize(&upperBound, buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return SerializeAdapter<bool>::serialize(&inverted, buffer, size,
|
return SerializeAdapter::serialize(&inverted, buffer, size, maxSize,
|
||||||
max_size, bigEndian);
|
streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t getSerializedSize() const {
|
size_t getSerializedSize() const override {
|
||||||
return sizeof(lowerBound) + sizeof(upperBound) + sizeof(bool);
|
return sizeof(lowerBound) + sizeof(upperBound) + sizeof(bool);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
||||||
bool bigEndian) {
|
SerializeIF::Endianness streamEndianness) override {
|
||||||
ReturnValue_t result = SerializeAdapter<T>::deSerialize(&lowerBound,
|
ReturnValue_t result = SerializeAdapter::deSerialize(&lowerBound,
|
||||||
buffer, size, bigEndian);
|
buffer, size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<T>::deSerialize(&upperBound, buffer,
|
result = SerializeAdapter::deSerialize(&upperBound, buffer, size,
|
||||||
size, bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return SerializeAdapter<bool>::deSerialize(&inverted, buffer,
|
return SerializeAdapter::deSerialize(&inverted, buffer, size,
|
||||||
size, bigEndian);
|
streamEndianness);
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
bool doMatch(T input) {
|
bool doMatch(T input) {
|
||||||
|
@ -63,21 +63,21 @@ bool HealthTable::hasHealth(object_id_t object) {
|
|||||||
return exits;
|
return exits;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HealthTable::printAll(uint8_t* pointer, uint32_t maxSize) {
|
void HealthTable::printAll(uint8_t* pointer, size_t maxSize) {
|
||||||
mutex->lockMutex(MutexIF::BLOCKING);
|
mutex->lockMutex(MutexIF::BLOCKING);
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
uint16_t count = healthMap.size();
|
uint16_t count = healthMap.size();
|
||||||
ReturnValue_t result = SerializeAdapter<uint16_t>::serialize(&count,
|
ReturnValue_t result = SerializeAdapter::serialize(&count,
|
||||||
&pointer, &size, maxSize, true);
|
&pointer, &size, maxSize, SerializeIF::Endianness::BIG);
|
||||||
HealthMap::iterator iter;
|
HealthMap::iterator iter;
|
||||||
for (iter = healthMap.begin();
|
for (iter = healthMap.begin();
|
||||||
iter != healthMap.end() && result == HasReturnvaluesIF::RETURN_OK;
|
iter != healthMap.end() && result == HasReturnvaluesIF::RETURN_OK;
|
||||||
++iter) {
|
++iter) {
|
||||||
result = SerializeAdapter<object_id_t>::serialize(&iter->first,
|
result = SerializeAdapter::serialize(&iter->first,
|
||||||
&pointer, &size, maxSize, true);
|
&pointer, &size, maxSize, SerializeIF::Endianness::BIG);
|
||||||
uint8_t health = iter->second;
|
uint8_t health = iter->second;
|
||||||
result = SerializeAdapter<uint8_t>::serialize(&health, &pointer, &size,
|
result = SerializeAdapter::serialize(&health, &pointer, &size,
|
||||||
maxSize, true);
|
maxSize, SerializeIF::Endianness::BIG);
|
||||||
}
|
}
|
||||||
mutex->unlockMutex();
|
mutex->unlockMutex();
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ public:
|
|||||||
virtual HasHealthIF::HealthState getHealth(object_id_t);
|
virtual HasHealthIF::HealthState getHealth(object_id_t);
|
||||||
|
|
||||||
virtual uint32_t getPrintSize();
|
virtual uint32_t getPrintSize();
|
||||||
virtual void printAll(uint8_t *pointer, uint32_t maxSize);
|
virtual void printAll(uint8_t *pointer, size_t maxSize);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
MutexIF* mutex;
|
MutexIF* mutex;
|
||||||
|
@ -19,7 +19,7 @@ public:
|
|||||||
HasHealthIF::HealthState initilialState = HasHealthIF::HEALTHY) = 0;
|
HasHealthIF::HealthState initilialState = HasHealthIF::HEALTHY) = 0;
|
||||||
|
|
||||||
virtual uint32_t getPrintSize() = 0;
|
virtual uint32_t getPrintSize() = 0;
|
||||||
virtual void printAll(uint8_t *pointer, uint32_t maxSize) = 0;
|
virtual void printAll(uint8_t *pointer, size_t maxSize) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ReturnValue_t iterate(std::pair<object_id_t,HasHealthIF::HealthState> *value, bool reset = false) = 0;
|
virtual ReturnValue_t iterate(std::pair<object_id_t,HasHealthIF::HealthState> *value, bool reset = false) = 0;
|
||||||
|
11
housekeeping/AcceptsHkPacketsIF.h
Normal file
11
housekeeping/AcceptsHkPacketsIF.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef FRAMEWORK_HOUSEKEEPING_ACCEPTSHKPACKETSIF_H_
|
||||||
|
#define FRAMEWORK_HOUSEKEEPING_ACCEPTSHKPACKETSIF_H_
|
||||||
|
#include <framework/ipc/MessageQueueMessageIF.h>
|
||||||
|
|
||||||
|
class AcceptsHkPacketsIF {
|
||||||
|
public:
|
||||||
|
virtual~ AcceptsHkPacketsIF() {};
|
||||||
|
virtual MessageQueueId_t getHkQueue() const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* FRAMEWORK_HOUSEKEEPING_ACCEPTSHKPACKETSIF_H_ */
|
@ -44,7 +44,7 @@ void MemoryHelper::completeLoad(ReturnValue_t errorCode,
|
|||||||
memcpy(copyHere, dataToCopy, size);
|
memcpy(copyHere, dataToCopy, size);
|
||||||
break;
|
break;
|
||||||
case HasMemoryIF::POINTS_TO_VARIABLE:
|
case HasMemoryIF::POINTS_TO_VARIABLE:
|
||||||
EndianSwapper::swap(copyHere, dataToCopy, size);
|
EndianConverter::convertBigEndian(copyHere, dataToCopy, size);
|
||||||
break;
|
break;
|
||||||
case HasMemoryIF::ACTIVITY_COMPLETED:
|
case HasMemoryIF::ACTIVITY_COMPLETED:
|
||||||
case RETURN_OK:
|
case RETURN_OK:
|
||||||
@ -77,7 +77,7 @@ void MemoryHelper::completeDump(ReturnValue_t errorCode,
|
|||||||
case HasMemoryIF::POINTS_TO_VARIABLE:
|
case HasMemoryIF::POINTS_TO_VARIABLE:
|
||||||
//"data" must be valid pointer!
|
//"data" must be valid pointer!
|
||||||
if (errorCode == HasMemoryIF::POINTS_TO_VARIABLE) {
|
if (errorCode == HasMemoryIF::POINTS_TO_VARIABLE) {
|
||||||
EndianSwapper::swap(reservedSpaceInIPC, dataToCopy, size);
|
EndianConverter::convertBigEndian(reservedSpaceInIPC, dataToCopy, size);
|
||||||
} else {
|
} else {
|
||||||
memcpy(reservedSpaceInIPC, dataToCopy, size);
|
memcpy(reservedSpaceInIPC, dataToCopy, size);
|
||||||
}
|
}
|
||||||
@ -127,7 +127,7 @@ void MemoryHelper::swapMatrixCopy(uint8_t* out, const uint8_t *in,
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (totalSize > 0){
|
while (totalSize > 0){
|
||||||
EndianSwapper::swap(out,in,datatypeSize);
|
EndianConverter::convertBigEndian(out,in,datatypeSize);
|
||||||
out += datatypeSize;
|
out += datatypeSize;
|
||||||
in += datatypeSize;
|
in += datatypeSize;
|
||||||
totalSize -= datatypeSize;
|
totalSize -= datatypeSize;
|
||||||
|
@ -27,7 +27,7 @@ ReturnValue_t LimitViolationReporter::sendLimitViolationReport(const SerializeIF
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
result = data->serialize(&dataTarget, &size, maxSize, true);
|
result = data->serialize(&dataTarget, &size, maxSize, SerializeIF::Endianness::BIG);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -89,15 +89,15 @@ void CpuUsage::clear() {
|
|||||||
threadData.clear();
|
threadData.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t CpuUsage::serialize(uint8_t** buffer, uint32_t* size,
|
ReturnValue_t CpuUsage::serialize(uint8_t** buffer, size_t* size,
|
||||||
const uint32_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = SerializeAdapter<float>::serialize(
|
ReturnValue_t result = SerializeAdapter::serialize(
|
||||||
&timeSinceLastReset, buffer, size, max_size, bigEndian);
|
&timeSinceLastReset, buffer, size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return SerialArrayListAdapter<ThreadData>::serialize(&threadData, buffer,
|
return SerialArrayListAdapter<ThreadData>::serialize(&threadData, buffer,
|
||||||
size, max_size, bigEndian);
|
size, maxSize, streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t CpuUsage::getSerializedSize() const {
|
uint32_t CpuUsage::getSerializedSize() const {
|
||||||
@ -109,37 +109,37 @@ uint32_t CpuUsage::getSerializedSize() const {
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t CpuUsage::deSerialize(const uint8_t** buffer, int32_t* size,
|
ReturnValue_t CpuUsage::deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
ReturnValue_t result = SerializeAdapter<float>::deSerialize(
|
ReturnValue_t result = SerializeAdapter::deSerialize(
|
||||||
&timeSinceLastReset, buffer, size, bigEndian);
|
&timeSinceLastReset, buffer, size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return SerialArrayListAdapter<ThreadData>::deSerialize(&threadData, buffer,
|
return SerialArrayListAdapter<ThreadData>::deSerialize(&threadData, buffer,
|
||||||
size, bigEndian);
|
size, streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t CpuUsage::ThreadData::serialize(uint8_t** buffer, uint32_t* size,
|
ReturnValue_t CpuUsage::ThreadData::serialize(uint8_t** buffer, size_t* size,
|
||||||
const uint32_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = SerializeAdapter<uint32_t>::serialize(&id, buffer,
|
ReturnValue_t result = SerializeAdapter::serialize(&id, buffer,
|
||||||
size, max_size, bigEndian);
|
size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
if (*size + MAX_LENGTH_OF_THREAD_NAME > max_size) {
|
if (*size + MAX_LENGTH_OF_THREAD_NAME > maxSize) {
|
||||||
return BUFFER_TOO_SHORT;
|
return BUFFER_TOO_SHORT;
|
||||||
}
|
}
|
||||||
memcpy(*buffer, name, MAX_LENGTH_OF_THREAD_NAME);
|
memcpy(*buffer, name, MAX_LENGTH_OF_THREAD_NAME);
|
||||||
*size += MAX_LENGTH_OF_THREAD_NAME;
|
*size += MAX_LENGTH_OF_THREAD_NAME;
|
||||||
*buffer += MAX_LENGTH_OF_THREAD_NAME;
|
*buffer += MAX_LENGTH_OF_THREAD_NAME;
|
||||||
result = SerializeAdapter<float>::serialize(&timeRunning,
|
result = SerializeAdapter::serialize(&timeRunning,
|
||||||
buffer, size, max_size, bigEndian);
|
buffer, size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<float>::serialize(&percentUsage,
|
result = SerializeAdapter::serialize(&percentUsage,
|
||||||
buffer, size, max_size, bigEndian);
|
buffer, size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -158,9 +158,9 @@ uint32_t CpuUsage::ThreadData::getSerializedSize() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t CpuUsage::ThreadData::deSerialize(const uint8_t** buffer,
|
ReturnValue_t CpuUsage::ThreadData::deSerialize(const uint8_t** buffer,
|
||||||
int32_t* size, bool bigEndian) {
|
int32_t* size, Endianness streamEndianness) {
|
||||||
ReturnValue_t result = SerializeAdapter<uint32_t>::deSerialize(&id, buffer,
|
ReturnValue_t result = SerializeAdapter::deSerialize(&id, buffer,
|
||||||
size, bigEndian);
|
size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -169,13 +169,13 @@ ReturnValue_t CpuUsage::ThreadData::deSerialize(const uint8_t** buffer,
|
|||||||
}
|
}
|
||||||
memcpy(name, *buffer, MAX_LENGTH_OF_THREAD_NAME);
|
memcpy(name, *buffer, MAX_LENGTH_OF_THREAD_NAME);
|
||||||
*buffer -= MAX_LENGTH_OF_THREAD_NAME;
|
*buffer -= MAX_LENGTH_OF_THREAD_NAME;
|
||||||
result = SerializeAdapter<float>::deSerialize(&timeRunning,
|
result = SerializeAdapter::deSerialize(&timeRunning,
|
||||||
buffer, size, bigEndian);
|
buffer, size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<float>::deSerialize(&percentUsage,
|
result = SerializeAdapter::deSerialize(&percentUsage,
|
||||||
buffer, size, bigEndian);
|
buffer, size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -18,13 +18,13 @@ public:
|
|||||||
float timeRunning;
|
float timeRunning;
|
||||||
float percentUsage;
|
float percentUsage;
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, uint32_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const uint32_t max_size, bool bigEndian) const;
|
size_t maxSize, Endianness streamEndianness) const override;
|
||||||
|
|
||||||
virtual uint32_t getSerializedSize() const;
|
virtual size_t getSerializedSize() const override;
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, int32_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian);
|
Endianness streamEndianness) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
CpuUsage();
|
CpuUsage();
|
||||||
@ -41,13 +41,13 @@ public:
|
|||||||
|
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, uint32_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const uint32_t max_size, bool bigEndian) const;
|
size_t maxSize, Endianness streamEndianness) const override;
|
||||||
|
|
||||||
virtual uint32_t getSerializedSize() const;
|
virtual size_t getSerializedSize() const override;
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, int32_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian);
|
Endianness streamEndianness) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CPUUSAGE_H_ */
|
#endif /* CPUUSAGE_H_ */
|
||||||
|
@ -81,7 +81,7 @@ ReturnValue_t ParameterHelper::handleParameterMessage(CommandMessage *message) {
|
|||||||
|
|
||||||
ReturnValue_t ParameterHelper::sendParameter(MessageQueueId_t to, uint32_t id,
|
ReturnValue_t ParameterHelper::sendParameter(MessageQueueId_t to, uint32_t id,
|
||||||
const ParameterWrapper* description) {
|
const ParameterWrapper* description) {
|
||||||
uint32_t serializedSize = description->getSerializedSize();
|
size_t serializedSize = description->getSerializedSize();
|
||||||
|
|
||||||
uint8_t *storeElement;
|
uint8_t *storeElement;
|
||||||
store_address_t address;
|
store_address_t address;
|
||||||
@ -95,7 +95,7 @@ ReturnValue_t ParameterHelper::sendParameter(MessageQueueId_t to, uint32_t id,
|
|||||||
size_t storeElementSize = 0;
|
size_t storeElementSize = 0;
|
||||||
|
|
||||||
result = description->serialize(&storeElement, &storeElementSize,
|
result = description->serialize(&storeElement, &storeElementSize,
|
||||||
serializedSize, true);
|
serializedSize, SerializeIF::Endianness::BIG);
|
||||||
|
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
storage->deleteData(address);
|
storage->deleteData(address);
|
||||||
|
@ -21,22 +21,22 @@ ParameterWrapper::~ParameterWrapper() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t ParameterWrapper::serialize(uint8_t **buffer, size_t *size,
|
ReturnValue_t ParameterWrapper::serialize(uint8_t **buffer, size_t *size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
ReturnValue_t result;
|
ReturnValue_t result;
|
||||||
|
|
||||||
result = SerializeAdapter<Type>::serialize(&type, buffer, size, max_size,
|
result = SerializeAdapter::serialize(&type, buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = SerializeAdapter<uint8_t>::serialize(&columns, buffer, size,
|
result = SerializeAdapter::serialize(&columns, buffer, size, maxSize,
|
||||||
max_size, bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<uint8_t>::serialize(&rows, buffer, size, max_size,
|
result = SerializeAdapter::serialize(&rows, buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -47,28 +47,33 @@ ReturnValue_t ParameterWrapper::serialize(uint8_t** buffer, size_t* size,
|
|||||||
}
|
}
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case Type::UINT8_T:
|
case Type::UINT8_T:
|
||||||
result = serializeData<uint8_t>(buffer, size, max_size, bigEndian);
|
result = serializeData<uint8_t>(buffer, size, maxSize,
|
||||||
|
streamEndianness);
|
||||||
break;
|
break;
|
||||||
case Type::INT8_T:
|
case Type::INT8_T:
|
||||||
result = serializeData<int8_t>(buffer, size, max_size, bigEndian);
|
result = serializeData<int8_t>(buffer, size, maxSize, streamEndianness);
|
||||||
break;
|
break;
|
||||||
case Type::UINT16_T:
|
case Type::UINT16_T:
|
||||||
result = serializeData<uint16_t>(buffer, size, max_size, bigEndian);
|
result = serializeData<uint16_t>(buffer, size, maxSize,
|
||||||
|
streamEndianness);
|
||||||
break;
|
break;
|
||||||
case Type::INT16_T:
|
case Type::INT16_T:
|
||||||
result = serializeData<int16_t>(buffer, size, max_size, bigEndian);
|
result = serializeData<int16_t>(buffer, size, maxSize,
|
||||||
|
streamEndianness);
|
||||||
break;
|
break;
|
||||||
case Type::UINT32_T:
|
case Type::UINT32_T:
|
||||||
result = serializeData<uint32_t>(buffer, size, max_size, bigEndian);
|
result = serializeData<uint32_t>(buffer, size, maxSize,
|
||||||
|
streamEndianness);
|
||||||
break;
|
break;
|
||||||
case Type::INT32_T:
|
case Type::INT32_T:
|
||||||
result = serializeData<int32_t>(buffer, size, max_size, bigEndian);
|
result = serializeData<int32_t>(buffer, size, maxSize,
|
||||||
|
streamEndianness);
|
||||||
break;
|
break;
|
||||||
case Type::FLOAT:
|
case Type::FLOAT:
|
||||||
result = serializeData<float>(buffer, size, max_size, bigEndian);
|
result = serializeData<float>(buffer, size, maxSize, streamEndianness);
|
||||||
break;
|
break;
|
||||||
case Type::DOUBLE:
|
case Type::DOUBLE:
|
||||||
result = serializeData<double>(buffer, size, max_size, bigEndian);
|
result = serializeData<double>(buffer, size, maxSize, streamEndianness);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
result = UNKNOW_DATATYPE;
|
result = UNKNOW_DATATYPE;
|
||||||
@ -89,13 +94,13 @@ size_t ParameterWrapper::getSerializedSize() const {
|
|||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
ReturnValue_t ParameterWrapper::serializeData(uint8_t **buffer, size_t *size,
|
ReturnValue_t ParameterWrapper::serializeData(uint8_t **buffer, size_t *size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
const T *element = (const T*) readonlyData;
|
const T *element = (const T*) readonlyData;
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||||
uint16_t dataSize = columns * rows;
|
uint16_t dataSize = columns * rows;
|
||||||
while (dataSize != 0) {
|
while (dataSize != 0) {
|
||||||
result = SerializeAdapter<T>::serialize(element, buffer, size, max_size,
|
result = SerializeAdapter::serialize(element, buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -123,9 +128,9 @@ ReturnValue_t ParameterWrapper::deSerializeData(uint8_t startingRow,
|
|||||||
+ (((startingRow + fromRow) * columns) + startingColumn);
|
+ (((startingRow + fromRow) * columns) + startingColumn);
|
||||||
|
|
||||||
for (uint8_t fromColumn = 0; fromColumn < fromColumns; fromColumn++) {
|
for (uint8_t fromColumn = 0; fromColumn < fromColumns; fromColumn++) {
|
||||||
result = SerializeAdapter<T>::deSerialize(
|
result = SerializeAdapter::deSerialize(
|
||||||
dataWithDataType + fromColumn, &fromAsStream, &streamSize,
|
dataWithDataType + fromColumn, &fromAsStream, &streamSize,
|
||||||
true);
|
SerializeIF::Endianness::BIG);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -136,13 +141,15 @@ ReturnValue_t ParameterWrapper::deSerializeData(uint8_t startingRow,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ReturnValue_t ParameterWrapper::deSerialize(const uint8_t **buffer,
|
ReturnValue_t ParameterWrapper::deSerialize(const uint8_t **buffer,
|
||||||
size_t* size, bool bigEndian) {
|
size_t *size, Endianness streamEndianness) {
|
||||||
return deSerialize(buffer, size, bigEndian, 0);
|
return deSerialize(buffer, size, streamEndianness, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t ParameterWrapper::deSerialize(const uint8_t **buffer,
|
ReturnValue_t ParameterWrapper::deSerialize(const uint8_t **buffer,
|
||||||
size_t* size, bool bigEndian, uint16_t startWritingAtIndex) {
|
size_t *size, Endianness streamEndianness,
|
||||||
|
uint16_t startWritingAtIndex) {
|
||||||
ParameterWrapper streamDescription;
|
ParameterWrapper streamDescription;
|
||||||
|
|
||||||
ReturnValue_t result = streamDescription.set(*buffer, *size, buffer, size);
|
ReturnValue_t result = streamDescription.set(*buffer, *size, buffer, size);
|
||||||
@ -155,21 +162,19 @@ ReturnValue_t ParameterWrapper::deSerialize(const uint8_t** buffer,
|
|||||||
|
|
||||||
ReturnValue_t ParameterWrapper::set(const uint8_t *stream, size_t streamSize,
|
ReturnValue_t ParameterWrapper::set(const uint8_t *stream, size_t streamSize,
|
||||||
const uint8_t **remainingStream, size_t *remainingSize) {
|
const uint8_t **remainingStream, size_t *remainingSize) {
|
||||||
// TODO: Replaced ssize_t for remainingSize and streamSize
|
ReturnValue_t result = SerializeAdapter::deSerialize(&type, &stream,
|
||||||
// is the logic here correct?
|
&streamSize, SerializeIF::Endianness::BIG);
|
||||||
ReturnValue_t result = SerializeAdapter<Type>::deSerialize(&type, &stream,
|
|
||||||
&streamSize, true);
|
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = SerializeAdapter<uint8_t>::deSerialize(&columns, &stream,
|
result = SerializeAdapter::deSerialize(&columns, &stream, &streamSize,
|
||||||
&streamSize, true);
|
SerializeIF::Endianness::BIG);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<uint8_t>::deSerialize(&rows, &stream, &streamSize,
|
result = SerializeAdapter::deSerialize(&rows, &stream, &streamSize,
|
||||||
true);
|
SerializeIF::Endianness::BIG);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -26,15 +26,15 @@ public:
|
|||||||
virtual ~ParameterWrapper();
|
virtual ~ParameterWrapper();
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const;
|
size_t maxSize, Endianness streamEndianness) const override;
|
||||||
|
|
||||||
virtual size_t getSerializedSize() const;
|
virtual size_t getSerializedSize() const override;
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian);
|
Endianness streamEndianness) override;
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian, uint16_t startWritingAtIndex = 0);
|
Endianness streamEndianness, uint16_t startWritingAtIndex = 0);
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
ReturnValue_t getElement(T *value, uint8_t row = 0, uint8_t column = 0) const {
|
ReturnValue_t getElement(T *value, uint8_t row = 0, uint8_t column = 0) const {
|
||||||
@ -54,7 +54,7 @@ public:
|
|||||||
const uint8_t *streamWithtype = (const uint8_t *) readonlyData;
|
const uint8_t *streamWithtype = (const uint8_t *) readonlyData;
|
||||||
streamWithtype += (row * columns + column) * type.getSize();
|
streamWithtype += (row * columns + column) * type.getSize();
|
||||||
int32_t size = type.getSize();
|
int32_t size = type.getSize();
|
||||||
return SerializeAdapter<T>::deSerialize(value, &streamWithtype,
|
return SerializeAdapter::deSerialize(value, &streamWithtype,
|
||||||
&size, true);
|
&size, true);
|
||||||
} else {
|
} else {
|
||||||
const T *dataWithType = (const T *) readonlyData;
|
const T *dataWithType = (const T *) readonlyData;
|
||||||
@ -129,7 +129,7 @@ private:
|
|||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
ReturnValue_t serializeData(uint8_t** buffer, size_t* size,
|
ReturnValue_t serializeData(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const;
|
size_t maxSize, Endianness streamEndianness) const;
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
ReturnValue_t deSerializeData(uint8_t startingRow, uint8_t startingColumn,
|
ReturnValue_t deSerializeData(uint8_t startingRow, uint8_t startingColumn,
|
||||||
|
@ -87,11 +87,11 @@ ReturnValue_t Fuse::check() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t Fuse::serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t Fuse::serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = RETURN_FAILED;
|
ReturnValue_t result = RETURN_FAILED;
|
||||||
for (DeviceList::const_iterator iter = devices.begin();
|
for (DeviceList::const_iterator iter = devices.begin();
|
||||||
iter != devices.end(); iter++) {
|
iter != devices.end(); iter++) {
|
||||||
result = (*iter)->serialize(buffer, size, max_size, bigEndian);
|
result = (*iter)->serialize(buffer, size, maxSize, streamEndianness);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -99,8 +99,8 @@ ReturnValue_t Fuse::serialize(uint8_t** buffer, size_t* size,
|
|||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t Fuse::getSerializedSize() const {
|
size_t Fuse::getSerializedSize() const {
|
||||||
size_t size = 0;
|
uint32_t size = 0;
|
||||||
for (DeviceList::const_iterator iter = devices.begin();
|
for (DeviceList::const_iterator iter = devices.begin();
|
||||||
iter != devices.end(); iter++) {
|
iter != devices.end(); iter++) {
|
||||||
size += (*iter)->getSerializedSize();
|
size += (*iter)->getSerializedSize();
|
||||||
@ -109,11 +109,11 @@ uint32_t Fuse::getSerializedSize() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t Fuse::deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t Fuse::deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
ReturnValue_t result = RETURN_FAILED;
|
ReturnValue_t result = RETURN_FAILED;
|
||||||
for (DeviceList::iterator iter = devices.begin(); iter != devices.end();
|
for (DeviceList::iterator iter = devices.begin(); iter != devices.end();
|
||||||
iter++) {
|
iter++) {
|
||||||
result = (*iter)->deSerialize(buffer, size, bigEndian);
|
result = (*iter)->deSerialize(buffer, size, streamEndianness);
|
||||||
if (result != RETURN_OK) {
|
if (result != RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
11
power/Fuse.h
11
power/Fuse.h
@ -19,7 +19,8 @@ void setStaticFrameworkObjectIds();
|
|||||||
class Fuse: public SystemObject,
|
class Fuse: public SystemObject,
|
||||||
public HasHealthIF,
|
public HasHealthIF,
|
||||||
public HasReturnvaluesIF,
|
public HasReturnvaluesIF,
|
||||||
public ReceivesParameterMessagesIF {
|
public ReceivesParameterMessagesIF,
|
||||||
|
public SerializeIF {
|
||||||
friend void (Factory::setStaticFrameworkObjectIds)();
|
friend void (Factory::setStaticFrameworkObjectIds)();
|
||||||
private:
|
private:
|
||||||
static constexpr float RESIDUAL_POWER = 0.005 * 28.5; //!< This is the upper limit of residual power lost by fuses and switches. Worst case is Fuse and one of two switches on. See PCDU ICD 1.9 p29 bottom
|
static constexpr float RESIDUAL_POWER = 0.005 * 28.5; //!< This is the upper limit of residual power lost by fuses and switches. Worst case is Fuse and one of two switches on. See PCDU ICD 1.9 p29 bottom
|
||||||
@ -50,11 +51,11 @@ public:
|
|||||||
uint8_t getFuseId() const;
|
uint8_t getFuseId() const;
|
||||||
ReturnValue_t initialize();
|
ReturnValue_t initialize();
|
||||||
DeviceList devices;
|
DeviceList devices;
|
||||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t **buffer, size_t *size, size_t maxSize,
|
||||||
const size_t max_size, bool bigEndian) const;
|
SerializeIF::Endianness streamEndianness) const override;
|
||||||
uint32_t getSerializedSize() const;
|
size_t getSerializedSize() const override;
|
||||||
ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
||||||
bool bigEndian);
|
SerializeIF::Endianness streamEndianness) override;
|
||||||
void setAllMonitorsToUnchecked();
|
void setAllMonitorsToUnchecked();
|
||||||
ReturnValue_t performOperation(uint8_t opCode);
|
ReturnValue_t performOperation(uint8_t opCode);
|
||||||
MessageQueueId_t getCommandQueue() const;
|
MessageQueueId_t getCommandQueue() const;
|
||||||
|
@ -18,14 +18,14 @@ PowerComponent::PowerComponent(object_id_t setId, uint8_t moduleId, float min, f
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PowerComponent::serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t PowerComponent::serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = SerializeAdapter<float>::serialize(&min, buffer,
|
ReturnValue_t result = SerializeAdapter::serialize(&min, buffer,
|
||||||
size, max_size, bigEndian);
|
size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return SerializeAdapter<float>::serialize(&max, buffer, size, max_size,
|
return SerializeAdapter::serialize(&max, buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t PowerComponent::getSerializedSize() const {
|
size_t PowerComponent::getSerializedSize() const {
|
||||||
@ -57,13 +57,13 @@ float PowerComponent::getMax() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PowerComponent::deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t PowerComponent::deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
ReturnValue_t result = SerializeAdapter<float>::deSerialize(&min, buffer,
|
ReturnValue_t result = SerializeAdapter::deSerialize(&min, buffer,
|
||||||
size, bigEndian);
|
size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return SerializeAdapter<float>::deSerialize(&max, buffer, size, bigEndian);
|
return SerializeAdapter::deSerialize(&max, buffer, size, streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PowerComponent::getParameter(uint8_t domainId,
|
ReturnValue_t PowerComponent::getParameter(uint8_t domainId,
|
||||||
|
@ -20,12 +20,12 @@ public:
|
|||||||
float getMax();
|
float getMax();
|
||||||
|
|
||||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const;
|
size_t maxSize, Endianness streamEndianness) const override;
|
||||||
|
|
||||||
size_t getSerializedSize() const;
|
size_t getSerializedSize() const override;
|
||||||
|
|
||||||
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian);
|
Endianness streamEndianness) override;
|
||||||
|
|
||||||
ReturnValue_t getParameter(uint8_t domainId, uint16_t parameterId,
|
ReturnValue_t getParameter(uint8_t domainId, uint16_t parameterId,
|
||||||
ParameterWrapper *parameterWrapper,
|
ParameterWrapper *parameterWrapper,
|
||||||
|
@ -12,8 +12,7 @@ typedef uint16_t ReturnValue_t;
|
|||||||
class HasReturnvaluesIF {
|
class HasReturnvaluesIF {
|
||||||
public:
|
public:
|
||||||
static const ReturnValue_t RETURN_OK = 0;
|
static const ReturnValue_t RETURN_OK = 0;
|
||||||
//! This will be the all-ones value irrespective of used unsigned datatype.
|
static const ReturnValue_t RETURN_FAILED = 1;
|
||||||
static const ReturnValue_t RETURN_FAILED = -1;
|
|
||||||
virtual ~HasReturnvaluesIF() {}
|
virtual ~HasReturnvaluesIF() {}
|
||||||
|
|
||||||
static ReturnValue_t makeReturnCode(uint8_t interfaceId, uint8_t number) {
|
static ReturnValue_t makeReturnCode(uint8_t interfaceId, uint8_t number) {
|
||||||
@ -21,4 +20,4 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* HASRETURNVALUESIF_H_ */
|
#endif /* FRAMEWORK_RETURNVALUES_HASRETURNVALUESIF_H_ */
|
||||||
|
@ -5,13 +5,9 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
/**
|
class EndianConverter {
|
||||||
* @brief Can be used to swap endianness of data
|
|
||||||
* into big endian
|
|
||||||
*/
|
|
||||||
class EndianSwapper {
|
|
||||||
private:
|
private:
|
||||||
EndianSwapper() {};
|
EndianConverter() {};
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Swap the endianness of a variable with arbitrary type
|
* Swap the endianness of a variable with arbitrary type
|
||||||
@ -20,7 +16,7 @@ public:
|
|||||||
* @return Variable with swapped endianness
|
* @return Variable with swapped endianness
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static T swap(T in) {
|
static T convertBigEndian(T in) {
|
||||||
#ifndef BYTE_ORDER_SYSTEM
|
#ifndef BYTE_ORDER_SYSTEM
|
||||||
#error BYTE_ORDER_SYSTEM not defined
|
#error BYTE_ORDER_SYSTEM not defined
|
||||||
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
||||||
@ -38,13 +34,8 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static void convertBigEndian(uint8_t *out, const uint8_t *in,
|
||||||
* Swap the endianness of a buffer.
|
uint32_t size) {
|
||||||
* @param out
|
|
||||||
* @param in
|
|
||||||
* @param size
|
|
||||||
*/
|
|
||||||
static void swap(uint8_t* out, const uint8_t* in, size_t size) {
|
|
||||||
#ifndef BYTE_ORDER_SYSTEM
|
#ifndef BYTE_ORDER_SYSTEM
|
||||||
#error BYTE_ORDER_SYSTEM not defined
|
#error BYTE_ORDER_SYSTEM not defined
|
||||||
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
||||||
@ -58,30 +49,36 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Swap endianness of buffer entries
|
|
||||||
* Template argument specifies buffer type. The number of entries
|
|
||||||
* (not the buffer size!) must be supplied
|
|
||||||
* @param out
|
|
||||||
* @param in
|
|
||||||
* @param size Number of buffer entries (not size of buffer in bytes!)
|
|
||||||
*/
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static void swap(T * out, const T * in, uint32_t entries) {
|
static T convertLittleEndian(T in) {
|
||||||
#ifndef BYTE_ORDER_SYSTEM
|
#ifndef BYTE_ORDER_SYSTEM
|
||||||
#error BYTE_ORDER_SYSTEM not defined
|
#error BYTE_ORDER_SYSTEM not defined
|
||||||
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
#elif BYTE_ORDER_SYSTEM == BIG_ENDIAN
|
||||||
const uint8_t * in_buffer = reinterpret_cast<const uint8_t *>(in);
|
T tmp;
|
||||||
uint8_t * out_buffer = reinterpret_cast<uint8_t *>(out);
|
uint8_t *pointerOut = (uint8_t *) &tmp;
|
||||||
for (uint8_t count = 0; count < entries; count++) {
|
uint8_t *pointerIn = (uint8_t *) ∈
|
||||||
for(uint8_t i = 0; i < sizeof(T);i++) {
|
for (uint8_t count = 0; count < sizeof(T); count++) {
|
||||||
out_buffer[sizeof(T)* (count + 1) - i - 1] =
|
pointerOut[sizeof(T) - count - 1] = pointerIn[count];
|
||||||
in_buffer[count * sizeof(T) + i];
|
|
||||||
}
|
}
|
||||||
|
return tmp;
|
||||||
|
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
||||||
|
return in;
|
||||||
|
#else
|
||||||
|
#error Unknown Byte Order
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
static void convertLittleEndian(uint8_t *out, const uint8_t *in,
|
||||||
|
uint32_t size) {
|
||||||
|
#ifndef BYTE_ORDER_SYSTEM
|
||||||
|
#error BYTE_ORDER_SYSTEM not defined
|
||||||
|
#elif BYTE_ORDER_SYSTEM == BIG_ENDIAN
|
||||||
|
for (uint8_t count = 0; count < size; count++) {
|
||||||
|
out[size - count - 1] = in[count];
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
#elif BYTE_ORDER_SYSTEM == BIG_ENDIAN
|
#elif BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
||||||
memcpy(out, in, size*sizeof(T));
|
memcpy(out, in, size);
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -22,26 +22,24 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const override {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
return serialize(adaptee, buffer, size, max_size, bigEndian);
|
return serialize(adaptee, buffer, size, maxSize, streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ReturnValue_t serialize(const ArrayList<T, count_t>* list,
|
static ReturnValue_t serialize(const ArrayList<T, count_t>* list, uint8_t** buffer, size_t* size,
|
||||||
uint8_t** buffer, size_t* size, const size_t max_size,
|
size_t maxSize, Endianness streamEndianness) {
|
||||||
bool bigEndian) {
|
ReturnValue_t result = SerializeAdapter::serialize(&list->size,
|
||||||
// Serialize length field first
|
buffer, size, maxSize, streamEndianness);
|
||||||
ReturnValue_t result = SerializeAdapter<count_t>::serialize(&list->size,
|
|
||||||
buffer, size, max_size, bigEndian);
|
|
||||||
count_t i = 0;
|
count_t i = 0;
|
||||||
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < list->size)) {
|
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < list->size)) {
|
||||||
result = SerializeAdapter<T>::serialize(&list->entries[i], buffer, size,
|
result = SerializeAdapter::serialize(&list->entries[i], buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual size_t getSerializedSize() const override {
|
virtual size_t getSerializedSize() const {
|
||||||
return getSerializedSize(adaptee);
|
return getSerializedSize(adaptee);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,34 +48,31 @@ public:
|
|||||||
count_t i = 0;
|
count_t i = 0;
|
||||||
|
|
||||||
for (i = 0; i < list->size; ++i) {
|
for (i = 0; i < list->size; ++i) {
|
||||||
printSize += SerializeAdapter<T>::getSerializedSize(&list->entries[i]);
|
printSize += SerializeAdapter::getSerializedSize(&list->entries[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return printSize;
|
return printSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) override {
|
Endianness streamEndianness) {
|
||||||
return deSerialize(adaptee, buffer, size, bigEndian);
|
return deSerialize(adaptee, buffer, size, streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ReturnValue_t deSerialize(ArrayList<T, count_t>* list,
|
static ReturnValue_t deSerialize(ArrayList<T, count_t>* list, const uint8_t** buffer, size_t* size,
|
||||||
const uint8_t** buffer, size_t* size, bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
count_t tempSize = 0;
|
count_t tempSize = 0;
|
||||||
ReturnValue_t result = SerializeAdapter<count_t>::deSerialize(&tempSize,
|
ReturnValue_t result = SerializeAdapter::deSerialize(&tempSize,
|
||||||
buffer, size, bigEndian);
|
buffer, size, streamEndianness);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
if (tempSize > list->maxSize()) {
|
if (tempSize > list->maxSize()) {
|
||||||
return SerializeIF::TOO_MANY_ELEMENTS;
|
return SerializeIF::TOO_MANY_ELEMENTS;
|
||||||
}
|
}
|
||||||
list->size = tempSize;
|
list->size = tempSize;
|
||||||
count_t i = 0;
|
count_t i = 0;
|
||||||
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < list->size)) {
|
while ((result == HasReturnvaluesIF::RETURN_OK) && (i < list->size)) {
|
||||||
result = SerializeAdapter<T>::deSerialize(
|
result = SerializeAdapter::deSerialize(
|
||||||
&list->front()[i], buffer, size,
|
&list->front()[i], buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -20,54 +20,54 @@ template<typename count_t>
|
|||||||
SerialBufferAdapter<count_t>::~SerialBufferAdapter() {
|
SerialBufferAdapter<count_t>::~SerialBufferAdapter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename count_t>
|
template<typename T>
|
||||||
ReturnValue_t SerialBufferAdapter<count_t>::serialize(uint8_t** buffer_,
|
ReturnValue_t SerialBufferAdapter<T>::serialize(uint8_t** buffer, size_t* size,
|
||||||
size_t* size_, const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
uint32_t serializedLength = bufferLength;
|
uint32_t serializedLength = bufferLength;
|
||||||
if (serializeLength) {
|
if (serializeLength) {
|
||||||
serializedLength += AutoSerializeAdapter::getSerializedSize(
|
serializedLength += SerializeAdapter::getSerializedSize(
|
||||||
&bufferLength);
|
&bufferLength);
|
||||||
}
|
}
|
||||||
if (*size_ + serializedLength > max_size) {
|
if (*size + serializedLength > maxSize) {
|
||||||
return BUFFER_TOO_SHORT;
|
return BUFFER_TOO_SHORT;
|
||||||
} else {
|
} else {
|
||||||
if (serializeLength) {
|
if (serializeLength) {
|
||||||
AutoSerializeAdapter::serialize(&bufferLength, buffer_, size_,
|
SerializeAdapter::serialize(&bufferLength, buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
}
|
}
|
||||||
if (constBuffer != nullptr) {
|
if (constBuffer != nullptr) {
|
||||||
memcpy(*buffer_, this->constBuffer, bufferLength);
|
memcpy(*buffer, this->constBuffer, bufferLength);
|
||||||
}
|
}
|
||||||
else if (buffer != nullptr) {
|
else if (buffer != nullptr) {
|
||||||
// This will propably be never reached, constBuffer should always be
|
// This will propably be never reached, constBuffer should always be
|
||||||
// set if non-const buffer is set.
|
// set if non-const buffer is set.
|
||||||
memcpy(*buffer_, this->buffer, bufferLength);
|
memcpy(*buffer, this->buffer, bufferLength);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
*size_ += bufferLength;
|
*size += bufferLength;
|
||||||
(*buffer_) += bufferLength;
|
(*buffer) += bufferLength;
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename count_t>
|
template<typename T>
|
||||||
size_t SerialBufferAdapter<count_t>::getSerializedSize() const {
|
size_t SerialBufferAdapter<T>::getSerializedSize() const {
|
||||||
if (serializeLength) {
|
if (serializeLength) {
|
||||||
return bufferLength + AutoSerializeAdapter::getSerializedSize(&bufferLength);
|
return bufferLength + SerializeAdapter::getSerializedSize(&bufferLength);
|
||||||
} else {
|
} else {
|
||||||
return bufferLength;
|
return bufferLength;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename count_t>
|
template<typename T>
|
||||||
ReturnValue_t SerialBufferAdapter<count_t>::deSerialize(const uint8_t** buffer,
|
ReturnValue_t SerialBufferAdapter<T>::deSerialize(const uint8_t** buffer,
|
||||||
size_t* size, bool bigEndian) {
|
size_t* size, Endianness streamEndianness) {
|
||||||
//TODO Ignores Endian flag!
|
//TODO Ignores Endian flag!
|
||||||
if (buffer != nullptr) {
|
if (buffer != NULL) {
|
||||||
if(serializeLength){
|
if(serializeLength){
|
||||||
count_t serializedSize = AutoSerializeAdapter::getSerializedSize(
|
T serializedSize = SerializeAdapter::getSerializedSize(
|
||||||
&bufferLength);
|
&bufferLength);
|
||||||
if(bufferLength + serializedSize <= *size) {
|
if(bufferLength + serializedSize <= *size) {
|
||||||
*buffer += serializedSize;
|
*buffer += serializedSize;
|
||||||
|
@ -45,10 +45,10 @@ public:
|
|||||||
|
|
||||||
virtual ~SerialBufferAdapter();
|
virtual ~SerialBufferAdapter();
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer_, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const override;
|
size_t maxSize, Endianness streamEndianness) const override;
|
||||||
|
|
||||||
virtual size_t getSerializedSize() const;
|
virtual size_t getSerializedSize() const override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function deserializes a buffer into the member buffer.
|
* @brief This function deserializes a buffer into the member buffer.
|
||||||
@ -63,7 +63,7 @@ public:
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) override;
|
Endianness streamEndianness) override;
|
||||||
|
|
||||||
uint8_t * getBuffer();
|
uint8_t * getBuffer();
|
||||||
const uint8_t * getConstBuffer();
|
const uint8_t * getConstBuffer();
|
||||||
|
@ -39,32 +39,25 @@ public:
|
|||||||
*/
|
*/
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
SerialFixedArrayListAdapter(Args... args) :
|
SerialFixedArrayListAdapter(Args... args) :
|
||||||
FixedArrayList<BUFFER_TYPE, MAX_SIZE, count_t>(std::forward<Args>(args)...)
|
FixedArrayList<BUFFER_TYPE, MAX_SIZE, count_t>(
|
||||||
{}
|
std::forward<Args>(args)...){}
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const override {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
return SerialArrayListAdapter<BUFFER_TYPE, count_t>::serialize(this,
|
return SerialArrayListAdapter<BUFFER_TYPE, count_t>::serialize(this,
|
||||||
buffer, size, max_size, bigEndian);
|
buffer, size, maxSize, streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t getSerializedSize() const {
|
size_t getSerializedSize() const {
|
||||||
return SerialArrayListAdapter<BUFFER_TYPE, count_t>::
|
return SerialArrayListAdapter<BUFFER_TYPE, count_t>::getSerializedSize(this);
|
||||||
getSerializedSize(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) override {
|
Endianness streamEndianness) {
|
||||||
return SerialArrayListAdapter<BUFFER_TYPE, count_t>::deSerialize(this,
|
return SerialArrayListAdapter<BUFFER_TYPE, count_t>::deSerialize(this,
|
||||||
buffer, size, bigEndian);
|
buffer, size, streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
void swapArrayListEndianness() {
|
|
||||||
SerialArrayListAdapter<BUFFER_TYPE, count_t>::
|
|
||||||
swapArrayListEndianness(this);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* SERIALFIXEDARRAYLISTADAPTER_H_ */
|
#endif /* SERIALFIXEDARRAYLISTADAPTER_H_ */
|
||||||
|
@ -67,44 +67,32 @@ public:
|
|||||||
SinglyLinkedList<T>(), printCount(printCount) {
|
SinglyLinkedList<T>(), printCount(printCount) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Serialize object implementing this adapter into the supplied buffer
|
|
||||||
* and calculate the serialized size
|
|
||||||
* @param buffer [out] Object is serialized into this buffer.
|
|
||||||
* Note that the buffer pointer *buffer is incremented automatically
|
|
||||||
* inside the respective serialize functions
|
|
||||||
* @param size [out] Calculated serialized size. Don't forget to set to 0.
|
|
||||||
* @param max_size
|
|
||||||
* @param bigEndian Specify endianness
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const override{
|
size_t maxSize, Endianness streamEndianness) const override {
|
||||||
if (printCount) {
|
if (printCount) {
|
||||||
count_t mySize = SinglyLinkedList<T>::getSize();
|
count_t mySize = SinglyLinkedList<T>::getSize();
|
||||||
ReturnValue_t result = SerializeAdapter<count_t>::serialize(&mySize,
|
ReturnValue_t result = SerializeAdapter::serialize(&mySize,
|
||||||
buffer, size, max_size, bigEndian);
|
buffer, size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return serialize(SinglyLinkedList<T>::start, buffer, size, max_size,
|
return serialize(SinglyLinkedList<T>::start, buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ReturnValue_t serialize(const LinkedElement<T>* element,
|
static ReturnValue_t serialize(const LinkedElement<T>* element,
|
||||||
uint8_t** buffer, size_t* size, const size_t max_size,
|
uint8_t** buffer, size_t* size, size_t maxSize,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||||
while ((result == HasReturnvaluesIF::RETURN_OK) && (element != NULL)) {
|
while ((result == HasReturnvaluesIF::RETURN_OK) && (element != NULL)) {
|
||||||
result = element->value->serialize(buffer, size, max_size,
|
result = element->value->serialize(buffer, size, maxSize,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
element = element->getNext();
|
element = element->getNext();
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
virtual size_t getSerializedSize() const override {
|
virtual size_t getSerializedSize() const override {
|
||||||
if (printCount) {
|
if (printCount) {
|
||||||
return SerialLinkedListAdapter<T>::getSerializedSize()
|
return SerialLinkedListAdapter<T>::getSerializedSize()
|
||||||
@ -114,8 +102,8 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t getSerializedSize(const LinkedElement<T> *element) {
|
static size_t getSerializedSize(const LinkedElement<T> *element) {
|
||||||
uint32_t size = 0;
|
size_t size = 0;
|
||||||
while (element != NULL) {
|
while (element != NULL) {
|
||||||
size += element->value->getSerializedSize();
|
size += element->value->getSerializedSize();
|
||||||
element = element->getNext();
|
element = element->getNext();
|
||||||
@ -124,24 +112,16 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Deserialize supplied buffer with supplied size into object
|
|
||||||
* implementing this adapter.
|
|
||||||
* @param buffer
|
|
||||||
* @param size Decremented in respective deSerialize functions automatically
|
|
||||||
* @param bigEndian Specify endianness
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) override {
|
Endianness streamEndianness) override {
|
||||||
return deSerialize(SinglyLinkedList<T>::start, buffer, size, bigEndian);
|
return deSerialize(SinglyLinkedList<T>::start, buffer, size, streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ReturnValue_t deSerialize(LinkedElement<T>* element,
|
static ReturnValue_t deSerialize(LinkedElement<T>* element,
|
||||||
const uint8_t** buffer, size_t* size, bool bigEndian) {
|
const uint8_t** buffer, size_t* size, Endianness streamEndianness) {
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||||
while ((result == HasReturnvaluesIF::RETURN_OK) && (element != NULL)) {
|
while ((result == HasReturnvaluesIF::RETURN_OK) && (element != NULL)) {
|
||||||
result = element->value->deSerialize(buffer, size, bigEndian);
|
result = element->value->deSerialize(buffer, size, streamEndianness);
|
||||||
element = element->getNext();
|
element = element->getNext();
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -2,8 +2,9 @@
|
|||||||
#define SERIALIZEADAPTER_H_
|
#define SERIALIZEADAPTER_H_
|
||||||
|
|
||||||
#include <framework/returnvalues/HasReturnvaluesIF.h>
|
#include <framework/returnvalues/HasReturnvaluesIF.h>
|
||||||
|
#include <framework/serialize/EndianSwapper.h>
|
||||||
|
#include <framework/container/IsDerivedFrom.h>
|
||||||
#include <framework/serialize/SerializeIF.h>
|
#include <framework/serialize/SerializeIF.h>
|
||||||
#include <framework/serialize/SerializeAdapterInternal.h>
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,61 +63,113 @@
|
|||||||
* @ingroup serialize
|
* @ingroup serialize
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// No type specification necessary here.
|
class SerializeAdapter {
|
||||||
class AutoSerializeAdapter {
|
|
||||||
public:
|
public:
|
||||||
/**
|
|
||||||
* Serialize object into buffer.
|
|
||||||
* @tparam T Type of object.
|
|
||||||
* @param object Object to serialize
|
|
||||||
* @param buffer
|
|
||||||
* Serialize into this buffer, pointer to pointer has to be passed,
|
|
||||||
* *buffer will be incremented automatically.
|
|
||||||
* @param size [out]
|
|
||||||
* Update passed size value, will be incremented by serialized size
|
|
||||||
* @param max_size
|
|
||||||
* Maximum size for range checking
|
|
||||||
* @param bigEndian
|
|
||||||
* Set to true if host-to-network conversion or vice-versa is needed
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static ReturnValue_t serialize(const T *object, uint8_t **buffer,
|
static ReturnValue_t serialize(const T *object, uint8_t **buffer,
|
||||||
size_t* size, const size_t max_size, bool bigEndian) {
|
size_t *size, size_t maxSize, SerializeIF::Endianness streamEndianness) {
|
||||||
SerializeAdapter_<T, IsDerivedFrom<T, SerializeIF>::Is> adapter;
|
InternalSerializeAdapter<T, IsDerivedFrom<T, SerializeIF>::Is> adapter;
|
||||||
return adapter.serialize(object, buffer, size, max_size, bigEndian);
|
return adapter.serialize(object, buffer, size, maxSize,
|
||||||
|
streamEndianness);
|
||||||
}
|
}
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static size_t getSerializedSize(const T* object) {
|
static uint32_t getSerializedSize(const T *object) {
|
||||||
SerializeAdapter_<T, IsDerivedFrom<T, SerializeIF>::Is> adapter;
|
InternalSerializeAdapter<T, IsDerivedFrom<T, SerializeIF>::Is> adapter;
|
||||||
return adapter.getSerializedSize(object);
|
return adapter.getSerializedSize(object);
|
||||||
}
|
}
|
||||||
template<typename T>
|
template<typename T>
|
||||||
static ReturnValue_t deSerialize(T *object, const uint8_t **buffer,
|
static ReturnValue_t deSerialize(T *object, const uint8_t **buffer,
|
||||||
size_t* size, bool bigEndian) {
|
size_t *size, SerializeIF::Endianness streamEndianness) {
|
||||||
SerializeAdapter_<T, IsDerivedFrom<T, SerializeIF>::Is> adapter;
|
InternalSerializeAdapter<T, IsDerivedFrom<T, SerializeIF>::Is> adapter;
|
||||||
return adapter.deSerialize(object, buffer, size, bigEndian);
|
return adapter.deSerialize(object, buffer, size, streamEndianness);
|
||||||
}
|
}
|
||||||
|
private:
|
||||||
|
template<typename T, int>
|
||||||
|
class InternalSerializeAdapter {
|
||||||
|
public:
|
||||||
|
static ReturnValue_t serialize(const T *object, uint8_t **buffer,
|
||||||
|
size_t *size, size_t max_size, SerializeIF::Endianness streamEndianness) {
|
||||||
|
size_t ignoredSize = 0;
|
||||||
|
if (size == NULL) {
|
||||||
|
size = &ignoredSize;
|
||||||
|
}
|
||||||
|
//TODO check integer overflow of *size
|
||||||
|
if (sizeof(T) + *size <= max_size) {
|
||||||
|
T tmp;
|
||||||
|
switch (streamEndianness) {
|
||||||
|
case SerializeIF::Endianness::BIG:
|
||||||
|
tmp = EndianConverter::convertBigEndian<T>(*object);
|
||||||
|
break;
|
||||||
|
case SerializeIF::Endianness::LITTLE:
|
||||||
|
tmp = EndianConverter::convertLittleEndian<T>(*object);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case SerializeIF::Endianness::MACHINE:
|
||||||
|
tmp = *object;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
memcpy(*buffer, &tmp, sizeof(T));
|
||||||
|
*size += sizeof(T);
|
||||||
|
(*buffer) += sizeof(T);
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
} else {
|
||||||
|
return SerializeIF::BUFFER_TOO_SHORT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t deSerialize(T *object, const uint8_t **buffer,
|
||||||
|
size_t *size, SerializeIF::Endianness streamEndianness) {
|
||||||
|
T tmp;
|
||||||
|
if (*size >= sizeof(T)) {
|
||||||
|
*size -= sizeof(T);
|
||||||
|
memcpy(&tmp, *buffer, sizeof(T));
|
||||||
|
switch (streamEndianness) {
|
||||||
|
case SerializeIF::Endianness::BIG:
|
||||||
|
*object = EndianConverter::convertBigEndian<T>(tmp);
|
||||||
|
break;
|
||||||
|
case SerializeIF::Endianness::LITTLE:
|
||||||
|
*object = EndianConverter::convertLittleEndian<T>(tmp);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case SerializeIF::Endianness::MACHINE:
|
||||||
|
*object = tmp;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
*buffer += sizeof(T);
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
} else {
|
||||||
|
return SerializeIF::STREAM_TOO_SHORT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t getSerializedSize(const T *object) {
|
||||||
|
return sizeof(T);
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
class SerializeAdapter {
|
class InternalSerializeAdapter<T, 1> {
|
||||||
public:
|
public:
|
||||||
static ReturnValue_t serialize(const T* object, uint8_t** buffer,
|
ReturnValue_t serialize(const T *object, uint8_t **buffer,
|
||||||
size_t* size, const size_t max_size, bool bigEndian) {
|
size_t *size, size_t max_size,
|
||||||
SerializeAdapter_<T, IsDerivedFrom<T, SerializeIF>::Is> adapter;
|
SerializeIF::Endianness streamEndianness) const {
|
||||||
return adapter.serialize(object, buffer, size, max_size, bigEndian);
|
size_t ignoredSize = 0;
|
||||||
|
if (size == NULL) {
|
||||||
|
size = &ignoredSize;
|
||||||
}
|
}
|
||||||
static uint32_t getSerializedSize(const T* object) {
|
return object->serialize(buffer, size, max_size, streamEndianness);
|
||||||
SerializeAdapter_<T, IsDerivedFrom<T, SerializeIF>::Is> adapter;
|
}
|
||||||
return adapter.getSerializedSize(object);
|
uint32_t getSerializedSize(const T *object) const {
|
||||||
|
return object->getSerializedSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
static ReturnValue_t deSerialize(T* object, const uint8_t** buffer,
|
ReturnValue_t deSerialize(T *object, const uint8_t **buffer,
|
||||||
size_t* size, bool bigEndian) {
|
size_t *size, SerializeIF::Endianness streamEndianness) {
|
||||||
SerializeAdapter_<T, IsDerivedFrom<T, SerializeIF>::Is> adapter;
|
return object->deSerialize(buffer, size, streamEndianness);
|
||||||
return adapter.deSerialize(object, buffer, size, bigEndian);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* SERIALIZEADAPTER_H_ */
|
#endif /* SERIALIZEADAPTER_H_ */
|
||||||
|
@ -1,118 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file SerializeAdapterInternal.h
|
|
||||||
*
|
|
||||||
* @date 13.04.2020
|
|
||||||
* @author R. Mueller
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FRAMEWORK_SERIALIZE_SERIALIZEADAPTERINTERNAL_H_
|
|
||||||
#define FRAMEWORK_SERIALIZE_SERIALIZEADAPTERINTERNAL_H_
|
|
||||||
#include <framework/returnvalues/HasReturnvaluesIF.h>
|
|
||||||
#include <framework/container/IsDerivedFrom.h>
|
|
||||||
#include <framework/serialize/EndianSwapper.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This template specialization will be chosen for fundamental types or
|
|
||||||
* anything else not implementing SerializeIF, based on partial
|
|
||||||
* template specialization.
|
|
||||||
* @tparam T
|
|
||||||
* @tparam
|
|
||||||
*/
|
|
||||||
template<typename T, int>
|
|
||||||
class SerializeAdapter_ {
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param object
|
|
||||||
* @param buffer
|
|
||||||
* @param size
|
|
||||||
* @param max_size
|
|
||||||
* @param bigEndian
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
static ReturnValue_t serialize(const T* object, uint8_t** buffer,
|
|
||||||
size_t* size, const size_t max_size, bool bigEndian) {
|
|
||||||
// function eventuelly serializes structs here.
|
|
||||||
// does this work on every architecture?
|
|
||||||
// static_assert(std::is_fundamental<T>::value);
|
|
||||||
size_t ignoredSize = 0;
|
|
||||||
if (size == nullptr) {
|
|
||||||
size = &ignoredSize;
|
|
||||||
}
|
|
||||||
if (sizeof(T) + *size <= max_size) {
|
|
||||||
T tmp;
|
|
||||||
if (bigEndian) {
|
|
||||||
tmp = EndianSwapper::swap<T>(*object);
|
|
||||||
} else {
|
|
||||||
tmp = *object;
|
|
||||||
}
|
|
||||||
memcpy(*buffer, &tmp, sizeof(T));
|
|
||||||
*size += sizeof(T);
|
|
||||||
(*buffer) += sizeof(T);
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
} else {
|
|
||||||
return SerializeIF::BUFFER_TOO_SHORT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Deserialize buffer into object
|
|
||||||
* @param object [out] Object to be deserialized with buffer data
|
|
||||||
* @param buffer contains the data. Non-Const pointer to non-const
|
|
||||||
* pointer to const data.
|
|
||||||
* @param size Size to deSerialize. wil be decremented by sizeof(T)
|
|
||||||
* @param bigEndian Specify endianness
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
ReturnValue_t deSerialize(T* object, const uint8_t** buffer, size_t* size,
|
|
||||||
bool bigEndian) {
|
|
||||||
T tmp;
|
|
||||||
if (*size >= sizeof(T)) {
|
|
||||||
*size -= sizeof(T);
|
|
||||||
memcpy(&tmp, *buffer, sizeof(T));
|
|
||||||
if (bigEndian) {
|
|
||||||
*object = EndianSwapper::swap<T>(tmp);
|
|
||||||
} else {
|
|
||||||
*object = tmp;
|
|
||||||
}
|
|
||||||
*buffer += sizeof(T);
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
} else {
|
|
||||||
return SerializeIF::STREAM_TOO_SHORT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t getSerializedSize(const T * object) {
|
|
||||||
return sizeof(T);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This template specialization will be chosen for class derived from
|
|
||||||
* SerializeIF, based on partial template specialization.
|
|
||||||
* @tparam T
|
|
||||||
* @tparam
|
|
||||||
*/
|
|
||||||
template<typename T>
|
|
||||||
class SerializeAdapter_<T, true> {
|
|
||||||
public:
|
|
||||||
ReturnValue_t serialize(const T* object, uint8_t** buffer, size_t* size,
|
|
||||||
const size_t max_size, bool bigEndian) const {
|
|
||||||
size_t ignoredSize = 0;
|
|
||||||
if (size == NULL) {
|
|
||||||
size = &ignoredSize;
|
|
||||||
}
|
|
||||||
return object->serialize(buffer, size, max_size, bigEndian);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t getSerializedSize(const T* object) const {
|
|
||||||
return object->getSerializedSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
ReturnValue_t deSerialize(T* object, const uint8_t** buffer, size_t* size,
|
|
||||||
bool bigEndian) {
|
|
||||||
return object->deSerialize(buffer, size, bigEndian);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* FRAMEWORK_SERIALIZE_SERIALIZEADAPTERINTERNAL_H_ */
|
|
@ -19,32 +19,29 @@
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
class SerializeElement: public SerializeIF, public LinkedElement<SerializeIF> {
|
class SerializeElement: public SerializeIF, public LinkedElement<SerializeIF> {
|
||||||
public:
|
public:
|
||||||
/**
|
|
||||||
* Arguments are forwarded to the element datatype constructor
|
|
||||||
* @param args
|
|
||||||
*/
|
|
||||||
template<typename ... Args>
|
template<typename ... Args>
|
||||||
SerializeElement(Args ... args) :
|
SerializeElement(Args ... args) :
|
||||||
LinkedElement<SerializeIF>(this),
|
LinkedElement<SerializeIF>(this), entry(std::forward<Args>(args)...) {
|
||||||
entry(std::forward<Args>(args)...) {}
|
|
||||||
|
|
||||||
SerializeElement() : LinkedElement<SerializeIF>(this) {}
|
|
||||||
|
|
||||||
|
}
|
||||||
|
SerializeElement() :
|
||||||
|
LinkedElement<SerializeIF>(this) {
|
||||||
|
}
|
||||||
T entry;
|
T entry;
|
||||||
|
ReturnValue_t serialize(uint8_t **buffer, size_t *size, size_t maxSize,
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
Endianness streamEndianness) const override {
|
||||||
const size_t max_size, bool bigEndian) const override {
|
return SerializeAdapter::serialize(&entry, buffer, size, maxSize,
|
||||||
return SerializeAdapter<T>::serialize(&entry, buffer, size,
|
streamEndianness);
|
||||||
max_size, bigEndian);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t getSerializedSize() const {
|
size_t getSerializedSize() const override {
|
||||||
return SerializeAdapter<T>::getSerializedSize(&entry);
|
return SerializeAdapter::getSerializedSize(&entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
virtual ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
||||||
bool bigEndian) override {
|
Endianness streamEndianness) override {
|
||||||
return SerializeAdapter<T>::deSerialize(&entry, buffer, size, bigEndian);
|
return SerializeAdapter::deSerialize(&entry, buffer, size,
|
||||||
|
streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
operator T() {
|
operator T() {
|
||||||
@ -60,6 +57,4 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* SERIALIZEELEMENT_H_ */
|
#endif /* SERIALIZEELEMENT_H_ */
|
||||||
|
@ -33,6 +33,10 @@
|
|||||||
*/
|
*/
|
||||||
class SerializeIF {
|
class SerializeIF {
|
||||||
public:
|
public:
|
||||||
|
enum class Endianness : uint8_t {
|
||||||
|
BIG, LITTLE, MACHINE
|
||||||
|
};
|
||||||
|
|
||||||
static const uint8_t INTERFACE_ID = CLASS_ID::SERIALIZE_IF;
|
static const uint8_t INTERFACE_ID = CLASS_ID::SERIALIZE_IF;
|
||||||
static const ReturnValue_t BUFFER_TOO_SHORT = MAKE_RETURN_CODE(1);
|
static const ReturnValue_t BUFFER_TOO_SHORT = MAKE_RETURN_CODE(1);
|
||||||
static const ReturnValue_t STREAM_TOO_SHORT = MAKE_RETURN_CODE(2);
|
static const ReturnValue_t STREAM_TOO_SHORT = MAKE_RETURN_CODE(2);
|
||||||
@ -42,12 +46,12 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t **buffer, size_t *size,
|
virtual ReturnValue_t serialize(uint8_t **buffer, size_t *size,
|
||||||
const size_t max_size, bool bigEndian) const = 0;
|
size_t maxSize, Endianness streamEndianness) const = 0;
|
||||||
|
|
||||||
virtual size_t getSerializedSize() const = 0;
|
virtual size_t getSerializedSize() const = 0;
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
virtual ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size,
|
||||||
bool bigEndian) = 0;
|
Endianness streamEndianness) = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -75,7 +75,8 @@ void Subsystem::performChildOperation() {
|
|||||||
if (isInTransition) {
|
if (isInTransition) {
|
||||||
if (commandsOutstanding <= 0) { //all children of the current table were commanded and replied
|
if (commandsOutstanding <= 0) { //all children of the current table were commanded and replied
|
||||||
if (currentSequenceIterator.value == NULL) { //we're through with this sequence
|
if (currentSequenceIterator.value == NULL) { //we're through with this sequence
|
||||||
if (checkStateAgainstTable(currentTargetTable, targetSubmode) == RETURN_OK) {
|
if (checkStateAgainstTable(currentTargetTable, targetSubmode)
|
||||||
|
== RETURN_OK) {
|
||||||
setMode(targetMode, targetSubmode);
|
setMode(targetMode, targetSubmode);
|
||||||
isInTransition = false;
|
isInTransition = false;
|
||||||
return;
|
return;
|
||||||
@ -86,7 +87,8 @@ void Subsystem::performChildOperation() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (currentSequenceIterator->checkSuccess()) {
|
if (currentSequenceIterator->checkSuccess()) {
|
||||||
if (checkStateAgainstTable(getCurrentTable(), targetSubmode) != RETURN_OK) {
|
if (checkStateAgainstTable(getCurrentTable(), targetSubmode)
|
||||||
|
!= RETURN_OK) {
|
||||||
transitionFailed(TABLE_CHECK_FAILED,
|
transitionFailed(TABLE_CHECK_FAILED,
|
||||||
currentSequenceIterator->getTableId());
|
currentSequenceIterator->getTableId());
|
||||||
return;
|
return;
|
||||||
@ -117,7 +119,8 @@ void Subsystem::performChildOperation() {
|
|||||||
childrenChangedHealth = false;
|
childrenChangedHealth = false;
|
||||||
startTransition(mode, submode);
|
startTransition(mode, submode);
|
||||||
} else if (childrenChangedMode) {
|
} else if (childrenChangedMode) {
|
||||||
if (checkStateAgainstTable(currentTargetTable, submode) != RETURN_OK) {
|
if (checkStateAgainstTable(currentTargetTable, submode)
|
||||||
|
!= RETURN_OK) {
|
||||||
triggerEvent(CANT_KEEP_MODE, mode, submode);
|
triggerEvent(CANT_KEEP_MODE, mode, submode);
|
||||||
cantKeepMode();
|
cantKeepMode();
|
||||||
}
|
}
|
||||||
@ -169,11 +172,12 @@ ReturnValue_t Subsystem::handleCommandMessage(CommandMessage* message) {
|
|||||||
if (result == RETURN_OK) {
|
if (result == RETURN_OK) {
|
||||||
Mode_t fallbackId;
|
Mode_t fallbackId;
|
||||||
size_t size = sizeRead;
|
size_t size = sizeRead;
|
||||||
result = SerializeAdapter<Mode_t>::deSerialize(&fallbackId,
|
result = SerializeAdapter::deSerialize(&fallbackId, &pointer, &size,
|
||||||
&pointer, &size, true);
|
SerializeIF::Endianness::BIG);
|
||||||
if (result == RETURN_OK) {
|
if (result == RETURN_OK) {
|
||||||
result = SerialArrayListAdapter<ModeListEntry>::deSerialize(
|
result = SerialArrayListAdapter<ModeListEntry>::deSerialize(
|
||||||
&sequence, &pointer, &size, true);
|
&sequence, &pointer, &size,
|
||||||
|
SerializeIF::Endianness::BIG);
|
||||||
if (result == RETURN_OK) {
|
if (result == RETURN_OK) {
|
||||||
result = addSequence(&sequence,
|
result = addSequence(&sequence,
|
||||||
ModeSequenceMessage::getSequenceId(message),
|
ModeSequenceMessage::getSequenceId(message),
|
||||||
@ -195,7 +199,7 @@ ReturnValue_t Subsystem::handleCommandMessage(CommandMessage* message) {
|
|||||||
if (result == RETURN_OK) {
|
if (result == RETURN_OK) {
|
||||||
size_t size = sizeRead;
|
size_t size = sizeRead;
|
||||||
result = SerialArrayListAdapter<ModeListEntry>::deSerialize(&table,
|
result = SerialArrayListAdapter<ModeListEntry>::deSerialize(&table,
|
||||||
&pointer, &size, true);
|
&pointer, &size, SerializeIF::Endianness::BIG);
|
||||||
if (result == RETURN_OK) {
|
if (result == RETURN_OK) {
|
||||||
result = addTable(&table,
|
result = addTable(&table,
|
||||||
ModeSequenceMessage::getSequenceId(message));
|
ModeSequenceMessage::getSequenceId(message));
|
||||||
@ -615,7 +619,8 @@ void Subsystem::sendSerializablesAsCommandMessage(Command_t command,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (uint8_t i = 0; i < count; i++) {
|
for (uint8_t i = 0; i < count; i++) {
|
||||||
elements[i]->serialize(&storeBuffer, &size, maxSize, true);
|
elements[i]->serialize(&storeBuffer, &size, maxSize,
|
||||||
|
SerializeIF::Endianness::BIG);
|
||||||
}
|
}
|
||||||
CommandMessage reply;
|
CommandMessage reply;
|
||||||
ModeSequenceMessage::setModeSequenceMessage(&reply, command, address);
|
ModeSequenceMessage::setModeSequenceMessage(&reply, command, address);
|
||||||
|
@ -19,31 +19,31 @@ public:
|
|||||||
uint8_t value4;
|
uint8_t value4;
|
||||||
|
|
||||||
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
|
|
||||||
ReturnValue_t result;
|
ReturnValue_t result;
|
||||||
|
|
||||||
result = SerializeAdapter<uint32_t>::serialize(&value1, buffer, size,
|
result = SerializeAdapter::serialize(&value1, buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
|
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<uint32_t>::serialize(&value2, buffer, size,
|
result = SerializeAdapter::serialize(&value2, buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
|
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<uint8_t>::serialize(&value3, buffer, size,
|
result = SerializeAdapter::serialize(&value3, buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
|
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = SerializeAdapter<uint8_t>::serialize(&value4, buffer, size,
|
result = SerializeAdapter::serialize(&value4, buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
@ -54,29 +54,29 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
ReturnValue_t result;
|
ReturnValue_t result;
|
||||||
|
|
||||||
result = SerializeAdapter<uint32_t>::deSerialize(&value1, buffer, size,
|
result = SerializeAdapter::deSerialize(&value1, buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
|
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<uint32_t>::deSerialize(&value2, buffer, size,
|
result = SerializeAdapter::deSerialize(&value2, buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
|
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<uint8_t>::deSerialize(&value3, buffer, size,
|
result = SerializeAdapter::deSerialize(&value3, buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
|
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = SerializeAdapter<uint8_t>::deSerialize(&value4, buffer, size,
|
result = SerializeAdapter::deSerialize(&value4, buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -45,14 +45,14 @@ ReturnValue_t ThermalComponent::setLimits(const uint8_t* data, size_t size) {
|
|||||||
return MonitoringIF::INVALID_SIZE;
|
return MonitoringIF::INVALID_SIZE;
|
||||||
}
|
}
|
||||||
size_t readSize = size;
|
size_t readSize = size;
|
||||||
SerializeAdapter<float>::deSerialize(&nopParameters.lowerNopLimit, &data,
|
SerializeAdapter::deSerialize(&nopParameters.lowerNopLimit, &data,
|
||||||
&readSize, true);
|
&readSize, SerializeIF::Endianness::BIG);
|
||||||
SerializeAdapter<float>::deSerialize(¶meters.lowerOpLimit, &data,
|
SerializeAdapter::deSerialize(¶meters.lowerOpLimit, &data,
|
||||||
&readSize, true);
|
&readSize, SerializeIF::Endianness::BIG);
|
||||||
SerializeAdapter<float>::deSerialize(¶meters.upperOpLimit, &data,
|
SerializeAdapter::deSerialize(¶meters.upperOpLimit, &data,
|
||||||
&readSize, true);
|
&readSize, SerializeIF::Endianness::BIG);
|
||||||
SerializeAdapter<float>::deSerialize(&nopParameters.upperNopLimit, &data,
|
SerializeAdapter::deSerialize(&nopParameters.upperNopLimit, &data,
|
||||||
&readSize, true);
|
&readSize, SerializeIF::Endianness::BIG);
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,14 +33,14 @@ public:
|
|||||||
uint16_t apid;
|
uint16_t apid;
|
||||||
uint16_t ssc;
|
uint16_t ssc;
|
||||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = SerializeAdapter<uint16_t>::serialize(&apid,
|
ReturnValue_t result = SerializeAdapter::serialize(&apid,
|
||||||
buffer, size, max_size, bigEndian);
|
buffer, size, maxSize, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return SerializeAdapter<uint16_t>::serialize(&ssc, buffer, size,
|
return SerializeAdapter::serialize(&ssc, buffer, size,
|
||||||
max_size, bigEndian);
|
maxSize, streamEndianness);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,14 +49,14 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
ReturnValue_t result = SerializeAdapter<uint16_t>::deSerialize(&apid,
|
ReturnValue_t result = SerializeAdapter::deSerialize(&apid,
|
||||||
buffer, size, bigEndian);
|
buffer, size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
return SerializeAdapter<uint16_t>::deSerialize(&ssc, buffer, size,
|
return SerializeAdapter::deSerialize(&ssc, buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -219,38 +219,38 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
ReturnValue_t result = AutoSerializeAdapter::serialize(&apid,buffer,size,max_size,bigEndian);
|
ReturnValue_t result = SerializeAdapter::serialize(&apid,buffer,size,maxSize,streamEndianness);
|
||||||
if(result!=HasReturnvaluesIF::RETURN_OK){
|
if(result!=HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::serialize(&sourceSequenceCount,buffer,size,max_size,bigEndian);
|
result = SerializeAdapter::serialize(&sourceSequenceCount,buffer,size,maxSize,streamEndianness);
|
||||||
if(result!=HasReturnvaluesIF::RETURN_OK){
|
if(result!=HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::serialize(&serviceType,buffer,size,max_size,bigEndian);
|
result = SerializeAdapter::serialize(&serviceType,buffer,size,maxSize,streamEndianness);
|
||||||
if(result!=HasReturnvaluesIF::RETURN_OK){
|
if(result!=HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::serialize(&serviceSubtype,buffer,size,max_size,bigEndian);
|
result = SerializeAdapter::serialize(&serviceSubtype,buffer,size,maxSize,streamEndianness);
|
||||||
if(result!=HasReturnvaluesIF::RETURN_OK){
|
if(result!=HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::serialize(&subCounter,buffer,size,max_size,bigEndian);
|
result = SerializeAdapter::serialize(&subCounter,buffer,size,maxSize,streamEndianness);
|
||||||
if(result!=HasReturnvaluesIF::RETURN_OK){
|
if(result!=HasReturnvaluesIF::RETURN_OK){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
|
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
|
||||||
return adapter.serialize(buffer,size,max_size,bigEndian);
|
return adapter.serialize(buffer,size,maxSize,streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t getSerializedSize() const {
|
size_t getSerializedSize() const {
|
||||||
uint32_t size = 0;
|
uint32_t size = 0;
|
||||||
size += AutoSerializeAdapter::getSerializedSize(&apid);
|
size += SerializeAdapter::getSerializedSize(&apid);
|
||||||
size += AutoSerializeAdapter::getSerializedSize(&sourceSequenceCount);
|
size += SerializeAdapter::getSerializedSize(&sourceSequenceCount);
|
||||||
size += AutoSerializeAdapter::getSerializedSize(&serviceType);
|
size += SerializeAdapter::getSerializedSize(&serviceType);
|
||||||
size += AutoSerializeAdapter::getSerializedSize(&serviceSubtype);
|
size += SerializeAdapter::getSerializedSize(&serviceSubtype);
|
||||||
size += AutoSerializeAdapter::getSerializedSize(&subCounter);
|
size += SerializeAdapter::getSerializedSize(&subCounter);
|
||||||
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
|
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
|
||||||
size += adapter.getSerializedSize();
|
size += adapter.getSerializedSize();
|
||||||
return size;
|
return size;
|
||||||
@ -258,34 +258,34 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
ReturnValue_t result = AutoSerializeAdapter::deSerialize(&apid, buffer,
|
ReturnValue_t result = SerializeAdapter::deSerialize(&apid, buffer,
|
||||||
size, bigEndian);
|
size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::deSerialize(&sourceSequenceCount, buffer,
|
result = SerializeAdapter::deSerialize(&sourceSequenceCount, buffer,
|
||||||
size, bigEndian);
|
size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::deSerialize(&serviceType, buffer, size,
|
result = SerializeAdapter::deSerialize(&serviceType, buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::deSerialize(&serviceSubtype, buffer,
|
result = SerializeAdapter::deSerialize(&serviceSubtype, buffer,
|
||||||
size, bigEndian);
|
size, streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result = AutoSerializeAdapter::deSerialize(&subCounter, buffer, size,
|
result = SerializeAdapter::deSerialize(&subCounter, buffer, size,
|
||||||
bigEndian);
|
streamEndianness);
|
||||||
if (result != HasReturnvaluesIF::RETURN_OK) {
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
|
SerialBufferAdapter<uint8_t> adapter(rawTimestamp,sizeof(rawTimestamp));
|
||||||
return adapter.deSerialize(buffer,size,bigEndian);
|
return adapter.deSerialize(buffer,size,streamEndianness);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -23,17 +23,15 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
return SerializeAdapter<uint16_t>::serialize(&apid, buffer,
|
return SerializeAdapter::serialize(&apid, buffer, size, maxSize, streamEndianness);
|
||||||
size, max_size, bigEndian);
|
|
||||||
}
|
}
|
||||||
size_t getSerializedSize() const {
|
size_t getSerializedSize() const {
|
||||||
return SerializeAdapter<uint16_t>::getSerializedSize(&apid);
|
return SerializeAdapter::getSerializedSize(&apid);
|
||||||
}
|
}
|
||||||
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
return SerializeAdapter<uint16_t>::deSerialize(&apid, buffer,
|
return SerializeAdapter::deSerialize(&apid, buffer, size, streamEndianness);
|
||||||
size, bigEndian);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -23,17 +23,15 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
return SerializeAdapter<uint8_t>::serialize(&service, buffer,
|
return SerializeAdapter::serialize(&service, buffer, size, maxSize, streamEndianness);
|
||||||
size, max_size, bigEndian);
|
|
||||||
}
|
}
|
||||||
size_t getSerializedSize() const {
|
size_t getSerializedSize() const {
|
||||||
return SerializeAdapter<uint8_t>::getSerializedSize(&service);
|
return SerializeAdapter::getSerializedSize(&service);
|
||||||
}
|
}
|
||||||
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
return SerializeAdapter<uint8_t>::deSerialize(&service, buffer,
|
return SerializeAdapter::deSerialize(&service, buffer, size, streamEndianness);
|
||||||
size, bigEndian);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -21,17 +21,15 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
ReturnValue_t serialize(uint8_t** buffer, size_t* size,
|
||||||
const size_t max_size, bool bigEndian) const {
|
size_t maxSize, Endianness streamEndianness) const {
|
||||||
return SerializeAdapter<uint8_t>::serialize(&subService, buffer, size,
|
return SerializeAdapter::serialize(&subService, buffer, size, maxSize, streamEndianness);
|
||||||
max_size, bigEndian);
|
|
||||||
}
|
}
|
||||||
size_t getSerializedSize() const {
|
size_t getSerializedSize() const {
|
||||||
return SerializeAdapter<uint8_t>::getSerializedSize(&subService);
|
return SerializeAdapter::getSerializedSize(&subService);
|
||||||
}
|
}
|
||||||
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
||||||
bool bigEndian) {
|
Endianness streamEndianness) {
|
||||||
return SerializeAdapter<uint8_t>::deSerialize(&subService, buffer,
|
return SerializeAdapter::deSerialize(&subService, buffer, size, streamEndianness);
|
||||||
size, bigEndian);
|
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
uint8_t subService;
|
uint8_t subService;
|
||||||
|
@ -60,10 +60,12 @@ TmPacketStored::TmPacketStored(uint16_t apid, uint8_t service,
|
|||||||
uint8_t *putDataHere = getSourceData();
|
uint8_t *putDataHere = getSourceData();
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
if (header != NULL) {
|
if (header != NULL) {
|
||||||
header->serialize(&putDataHere, &size, sourceDataSize, true);
|
header->serialize(&putDataHere, &size, sourceDataSize,
|
||||||
|
SerializeIF::Endianness::BIG);
|
||||||
}
|
}
|
||||||
if (content != NULL) {
|
if (content != NULL) {
|
||||||
content->serialize(&putDataHere, &size, sourceDataSize, true);
|
content->serialize(&putDataHere, &size, sourceDataSize,
|
||||||
|
SerializeIF::Endianness::BIG);
|
||||||
}
|
}
|
||||||
setPacketDataLength(
|
setPacketDataLength(
|
||||||
sourceDataSize + sizeof(PUSTmDataFieldHeader) + CRC_SIZE - 1);
|
sourceDataSize + sizeof(PUSTmDataFieldHeader) + CRC_SIZE - 1);
|
||||||
|
@ -268,8 +268,8 @@ ReturnValue_t CommandingServiceBase::sendTmPacket(uint8_t subservice,
|
|||||||
uint8_t buffer[sizeof(object_id_t)];
|
uint8_t buffer[sizeof(object_id_t)];
|
||||||
uint8_t* pBuffer = buffer;
|
uint8_t* pBuffer = buffer;
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
SerializeAdapter<object_id_t>::serialize(&objectId, &pBuffer, &size,
|
SerializeAdapter::serialize(&objectId, &pBuffer, &size,
|
||||||
sizeof(object_id_t), true);
|
sizeof(object_id_t), SerializeIF::Endianness::BIG);
|
||||||
TmPacketStored tmPacketStored(this->apid, this->service, subservice,
|
TmPacketStored tmPacketStored(this->apid, this->service, subservice,
|
||||||
this->tmPacketCounter, data, dataLen, buffer, size);
|
this->tmPacketCounter, data, dataLen, buffer, size);
|
||||||
ReturnValue_t result = tmPacketStored.sendPacket(
|
ReturnValue_t result = tmPacketStored.sendPacket(
|
||||||
|
@ -89,7 +89,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual MessageQueueId_t getCommandQueue();
|
virtual MessageQueueId_t getCommandQueue();
|
||||||
|
|
||||||
virtual ReturnValue_t initialize();
|
virtual ReturnValue_t initialize() override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of ExecutableObjectIF function
|
* Implementation of ExecutableObjectIF function
|
||||||
|
@ -108,13 +108,13 @@ PusSuccessReport::PusSuccessReport(uint16_t setPacketId,
|
|||||||
uint16_t setSequenceControl, uint8_t setStep) :
|
uint16_t setSequenceControl, uint8_t setStep) :
|
||||||
reportSize(0), pBuffer(reportBuffer) {
|
reportSize(0), pBuffer(reportBuffer) {
|
||||||
//Serialization won't fail, because we know the necessary max-size of the buffer.
|
//Serialization won't fail, because we know the necessary max-size of the buffer.
|
||||||
SerializeAdapter<uint16_t>::serialize(&setPacketId, &pBuffer, &reportSize,
|
SerializeAdapter::serialize(&setPacketId, &pBuffer, &reportSize,
|
||||||
sizeof(reportBuffer), true);
|
sizeof(reportBuffer), SerializeIF::Endianness::BIG);
|
||||||
SerializeAdapter<uint16_t>::serialize(&setSequenceControl, &pBuffer,
|
SerializeAdapter::serialize(&setSequenceControl, &pBuffer, &reportSize,
|
||||||
&reportSize, sizeof(reportBuffer), true);
|
sizeof(reportBuffer), SerializeIF::Endianness::BIG);
|
||||||
if (setStep != 0) {
|
if (setStep != 0) {
|
||||||
SerializeAdapter<uint8_t>::serialize(&setStep, &pBuffer, &reportSize,
|
SerializeAdapter::serialize(&setStep, &pBuffer, &reportSize,
|
||||||
sizeof(reportBuffer), true);
|
sizeof(reportBuffer), SerializeIF::Endianness::BIG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,26 +135,26 @@ PusFailureReport::PusFailureReport(uint16_t setPacketId,
|
|||||||
uint8_t setStep, uint32_t parameter1, uint32_t parameter2) :
|
uint8_t setStep, uint32_t parameter1, uint32_t parameter2) :
|
||||||
reportSize(0), pBuffer(reportBuffer) {
|
reportSize(0), pBuffer(reportBuffer) {
|
||||||
//Serialization won't fail, because we know the necessary max-size of the buffer.
|
//Serialization won't fail, because we know the necessary max-size of the buffer.
|
||||||
SerializeAdapter<uint16_t>::serialize(&setPacketId, &pBuffer, &reportSize,
|
SerializeAdapter::serialize(&setPacketId, &pBuffer, &reportSize,
|
||||||
sizeof(reportBuffer), true);
|
sizeof(reportBuffer), SerializeIF::Endianness::BIG);
|
||||||
SerializeAdapter<uint16_t>::serialize(&setSequenceControl, &pBuffer,
|
SerializeAdapter::serialize(&setSequenceControl, &pBuffer, &reportSize,
|
||||||
&reportSize, sizeof(reportBuffer), true);
|
sizeof(reportBuffer), SerializeIF::Endianness::BIG);
|
||||||
if (setStep != 0) {
|
if (setStep != 0) {
|
||||||
SerializeAdapter<uint8_t>::serialize(&setStep, &pBuffer, &reportSize,
|
SerializeAdapter::serialize(&setStep, &pBuffer, &reportSize,
|
||||||
sizeof(reportBuffer), true);
|
sizeof(reportBuffer), SerializeIF::Endianness::BIG);
|
||||||
}
|
}
|
||||||
SerializeAdapter<ReturnValue_t>::serialize(&setErrorCode, &pBuffer,
|
SerializeAdapter::serialize(&setErrorCode, &pBuffer, &reportSize,
|
||||||
&reportSize, sizeof(reportBuffer), true);
|
sizeof(reportBuffer), SerializeIF::Endianness::BIG);
|
||||||
SerializeAdapter<uint32_t>::serialize(¶meter1, &pBuffer, &reportSize,
|
SerializeAdapter::serialize(¶meter1, &pBuffer, &reportSize,
|
||||||
sizeof(reportBuffer), true);
|
sizeof(reportBuffer), SerializeIF::Endianness::BIG);
|
||||||
SerializeAdapter<uint32_t>::serialize(¶meter2, &pBuffer, &reportSize,
|
SerializeAdapter::serialize(¶meter2, &pBuffer, &reportSize,
|
||||||
sizeof(reportBuffer), true);
|
sizeof(reportBuffer), SerializeIF::Endianness::BIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
PusFailureReport::~PusFailureReport() {
|
PusFailureReport::~PusFailureReport() {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t PusFailureReport::getSize() {
|
size_t PusFailureReport::getSize() {
|
||||||
return reportSize;
|
return reportSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ public:
|
|||||||
ReturnValue_t setErrorCode, uint8_t setStep = 0,
|
ReturnValue_t setErrorCode, uint8_t setStep = 0,
|
||||||
uint32_t parameter1 = 0, uint32_t parameter2 = 0);
|
uint32_t parameter1 = 0, uint32_t parameter2 = 0);
|
||||||
~PusFailureReport();
|
~PusFailureReport();
|
||||||
uint32_t getSize();
|
size_t getSize();
|
||||||
uint8_t* getReport();
|
uint8_t* getReport();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user