48 lines
1.7 KiB
C++
48 lines
1.7 KiB
C++
#include "TcPacketPusIntoBuf.h"
|
|
|
|
#include <cstring>
|
|
|
|
TcPacketPusIntoBuf::TcPacketPusIntoBuf(uint8_t* store, size_t maxSize, PusConfig& cfg)
|
|
: TcPacketPus(nullptr), store(store), maxSize(maxSize), cfg(cfg) {}
|
|
|
|
ReturnValue_t TcPacketPusIntoBuf::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 TcPacketPusIntoBuf::getSerializedSize() const { return TC_PACKET_MIN_SIZE + cfg.appDataLen; }
|
|
|
|
ReturnValue_t TcPacketPusIntoBuf::initialize() {
|
|
if (getSerializedSize() > maxSize) {
|
|
return SerializeIF::BUFFER_TOO_SHORT;
|
|
}
|
|
ReturnValue_t result = setData(store, maxSize);
|
|
if (result != RETURN_OK) {
|
|
return result;
|
|
}
|
|
#if FSFW_USE_PUS_C_TELECOMMANDS == 1
|
|
pus::PusVersion pusVersion = pus::PusVersion::PUS_C_VERSION;
|
|
#else
|
|
pus::PusVersion pusVersion = pus::PusVersion::PUS_A_VERSION;
|
|
#endif
|
|
initializeTcPacket(cfg.apid, cfg.sequenceCount, cfg.ack, cfg.service, cfg.subservice, pusVersion,
|
|
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 TcPacketPusIntoBuf::deSerialize(const uint8_t** buffer, size_t* size,
|
|
Endianness streamEndianness) {
|
|
return RETURN_FAILED;
|
|
}
|