fsfw/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.cpp

43 lines
1.5 KiB
C++
Raw Normal View History

2022-06-13 16:20:37 +02:00
#include "TcPacketSerializer.h"
2022-06-13 16:13:15 +02:00
#include <cstring>
2022-06-13 16:20:37 +02:00
TcPacketSerializer::TcPacketSerializer(uint8_t* store, size_t maxSize, PusConfig& cfg)
2022-06-13 16:13:15 +02:00
: TcPacketPus(nullptr), store(store), maxSize(maxSize), cfg(cfg) {}
2022-06-13 16:20:37 +02:00
ReturnValue_t TcPacketSerializer::serialize(uint8_t** buffer, size_t* size, size_t maxSize,
2022-06-13 16:13:15 +02:00
Endianness streamEndianness) const {
if (*size + getSerializedSize() > maxSize) {
return BUFFER_TOO_SHORT;
}
std::memcpy(*buffer, store, getSerializedSize());
*buffer += getSerializedSize();
*size += getSerializedSize();
return RETURN_OK;
}
2022-06-13 16:20:37 +02:00
size_t TcPacketSerializer::getSerializedSize() const { return TC_PACKET_MIN_SIZE + cfg.appDataLen; }
2022-06-13 16:13:15 +02:00
2022-06-13 16:20:37 +02:00
ReturnValue_t TcPacketSerializer::initialize() {
2022-06-13 16:13:15 +02:00
if (getSerializedSize() > maxSize) {
return SerializeIF::BUFFER_TOO_SHORT;
}
ReturnValue_t result = setData(store, maxSize);
if (result != RETURN_OK) {
return result;
}
2022-06-13 16:20:37 +02:00
initializeTcPacket(cfg.apid, cfg.sequenceCount, cfg.ack, cfg.service, cfg.subservice,
2022-06-13 16:45:09 +02:00
PusConfig::PUS_VERSION, cfg.sourceId);
2022-06-13 16:13:15 +02:00
if (cfg.appData != nullptr and cfg.appDataLen > 0) {
std::memcpy(&tcData->appData, cfg.appData, cfg.appDataLen);
}
setPacketDataLength(calculateFullPacketLength(cfg.appDataLen) - sizeof(CCSDSPrimaryHeader) - 1);
setErrorControl();
return RETURN_OK;
}
2022-06-13 16:20:37 +02:00
ReturnValue_t TcPacketSerializer::deSerialize(const uint8_t** buffer, size_t* size,
2022-06-13 16:13:15 +02:00
Endianness streamEndianness) {
return RETURN_FAILED;
}