43 lines
1.5 KiB
C++
43 lines
1.5 KiB
C++
#include "TcPacketSerializer.h"
|
|
|
|
#include <cstring>
|
|
|
|
TcPacketSerializer::TcPacketSerializer(uint8_t* store, size_t maxSize, PusConfig& cfg)
|
|
: TcPacketPus(nullptr), store(store), maxSize(maxSize), cfg(cfg) {}
|
|
|
|
ReturnValue_t TcPacketSerializer::serialize(uint8_t** buffer, size_t* size, size_t maxSize,
|
|
Endianness streamEndianness) const {
|
|
if (*size + getSerializedSize() > maxSize) {
|
|
return BUFFER_TOO_SHORT;
|
|
}
|
|
std::memcpy(*buffer, store, getSerializedSize());
|
|
*buffer += getSerializedSize();
|
|
*size += getSerializedSize();
|
|
return RETURN_OK;
|
|
}
|
|
|
|
size_t TcPacketSerializer::getSerializedSize() const { return TC_PACKET_MIN_SIZE + cfg.appDataLen; }
|
|
|
|
ReturnValue_t TcPacketSerializer::initialize() {
|
|
if (getSerializedSize() > maxSize) {
|
|
return SerializeIF::BUFFER_TOO_SHORT;
|
|
}
|
|
ReturnValue_t result = setData(store, maxSize);
|
|
if (result != RETURN_OK) {
|
|
return result;
|
|
}
|
|
initializeTcPacket(cfg.apid, cfg.sequenceCount, cfg.ack, cfg.service, cfg.subservice,
|
|
PusConfig::PUS_VERSION, cfg.sourceId);
|
|
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;
|
|
}
|
|
|
|
ReturnValue_t TcPacketSerializer::deSerialize(const uint8_t** buffer, size_t* size,
|
|
Endianness streamEndianness) {
|
|
return RETURN_FAILED;
|
|
}
|