93 lines
2.9 KiB
C++
93 lines
2.9 KiB
C++
#ifndef FSFW_HOUSEKEEPING_HOUSEKEEPINGPACKETUPDATE_H_
|
|
#define FSFW_HOUSEKEEPING_HOUSEKEEPINGPACKETUPDATE_H_
|
|
|
|
#include "../serialize/SerialBufferAdapter.h"
|
|
#include "../serialize/SerialLinkedListAdapter.h"
|
|
#include "../datapoollocal/LocalPoolDataSetBase.h"
|
|
|
|
/**
|
|
* @brief This helper class will be used to serialize and deserialize
|
|
* update housekeeping packets into the store.
|
|
*/
|
|
class HousekeepingPacketUpdate: public SerializeIF {
|
|
public:
|
|
/**
|
|
* Update packet constructor for datasets
|
|
* @param timeStamp
|
|
* @param timeStampSize
|
|
* @param hkData
|
|
* @param hkDataSize
|
|
*/
|
|
HousekeepingPacketUpdate(uint8_t* timeStamp, size_t timeStampSize,
|
|
LocalPoolDataSetBase* dataSetPtr):
|
|
timeStamp(timeStamp), timeStampSize(timeStampSize),
|
|
updateData(dataSetPtr) {};
|
|
|
|
/**
|
|
* Update packet constructor for pool variables.
|
|
* @param timeStamp
|
|
* @param timeStampSize
|
|
* @param dataSetPtr
|
|
*/
|
|
HousekeepingPacketUpdate(uint8_t* timeStamp, size_t timeStampSize,
|
|
LocalPoolObjectBase* dataSetPtr):
|
|
timeStamp(timeStamp), timeStampSize(timeStampSize),
|
|
updateData(dataSetPtr) {};
|
|
|
|
virtual ReturnValue_t serialize(uint8_t **buffer, size_t *size,
|
|
size_t maxSize, Endianness streamEndianness) const {
|
|
if(timeStamp != nullptr) {
|
|
/* Endianness will always be MACHINE, so we can simply use memcpy
|
|
here. */
|
|
std::memcpy(*buffer, timeStamp, timeStampSize);
|
|
*size += timeStampSize;
|
|
*buffer += timeStampSize;
|
|
}
|
|
if(updateData == nullptr) {
|
|
return HasReturnvaluesIF::RETURN_FAILED;
|
|
}
|
|
|
|
return updateData->serialize(buffer, size, maxSize, streamEndianness);
|
|
}
|
|
|
|
virtual size_t getSerializedSize() const {
|
|
if(updateData == nullptr) {
|
|
return 0;
|
|
}
|
|
return timeStampSize + updateData->getSerializedSize();
|
|
}
|
|
|
|
virtual ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
|
|
SerializeIF::Endianness streamEndianness) override {
|
|
if(*size < timeStampSize) {
|
|
return SerializeIF::STREAM_TOO_SHORT;
|
|
}
|
|
|
|
if(timeStamp != nullptr) {
|
|
/* Endianness will always be MACHINE, so we can simply use memcpy
|
|
here. */
|
|
std::memcpy(timeStamp, *buffer, timeStampSize);
|
|
*size -= timeStampSize;
|
|
*buffer += timeStampSize;
|
|
}
|
|
|
|
if(updateData == nullptr) {
|
|
return HasReturnvaluesIF::RETURN_FAILED;
|
|
}
|
|
if(*size < updateData->getSerializedSize()) {
|
|
return SerializeIF::STREAM_TOO_SHORT;
|
|
}
|
|
|
|
return updateData->deSerialize(buffer, size, streamEndianness);
|
|
}
|
|
|
|
private:
|
|
uint8_t* timeStamp = nullptr;
|
|
size_t timeStampSize = 0;
|
|
|
|
SerializeIF* updateData = nullptr;
|
|
};
|
|
|
|
|
|
#endif /* FSFW_HOUSEKEEPING_HOUSEKEEPINGPACKETUPDATE_H_ */
|