2022-07-18 10:42:56 +02:00
|
|
|
#include "SpacePacketCreator.h"
|
|
|
|
|
|
|
|
#include "fsfw/serialize/SerializeAdapter.h"
|
|
|
|
|
2022-07-19 18:13:25 +02:00
|
|
|
SpacePacketCreator::SpacePacketCreator(SpacePacketParams ¶ms_) : params(params_) {
|
2022-07-18 16:07:26 +02:00
|
|
|
checkFieldValidity();
|
2022-07-18 10:53:55 +02:00
|
|
|
}
|
|
|
|
|
2022-07-19 18:13:25 +02:00
|
|
|
uint16_t SpacePacketCreator::getPacketId() const { return params.packetId.raw(); }
|
|
|
|
uint16_t SpacePacketCreator::getPacketSeqCtrl() const { return params.packetSeqCtrl.raw(); }
|
|
|
|
uint16_t SpacePacketCreator::getPacketDataLen() const { return params.dataLen; }
|
2022-07-18 10:42:56 +02:00
|
|
|
|
|
|
|
ReturnValue_t SpacePacketCreator::serialize(uint8_t **buffer, size_t *size, size_t maxSize,
|
|
|
|
SerializeIF::Endianness streamEndianness) const {
|
2022-07-18 16:07:26 +02:00
|
|
|
if (not isValid()) {
|
|
|
|
return HasReturnvaluesIF::RETURN_FAILED;
|
|
|
|
}
|
2022-07-19 18:13:25 +02:00
|
|
|
uint16_t packetIdAndVersion =
|
|
|
|
(static_cast<uint16_t>(params.version) << 13) | params.packetId.raw();
|
2022-07-18 10:42:56 +02:00
|
|
|
ReturnValue_t result =
|
|
|
|
SerializeAdapter::serialize(&packetIdAndVersion, buffer, size, maxSize, streamEndianness);
|
|
|
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
|
|
|
return result;
|
|
|
|
}
|
2022-07-19 18:13:25 +02:00
|
|
|
uint16_t pscRaw = params.packetSeqCtrl.raw();
|
2022-07-18 16:07:26 +02:00
|
|
|
result = SerializeAdapter::serialize(&pscRaw, buffer, size, maxSize, streamEndianness);
|
2022-07-18 10:42:56 +02:00
|
|
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
|
|
|
return result;
|
|
|
|
}
|
2022-07-19 18:13:25 +02:00
|
|
|
return SerializeAdapter::serialize(¶ms.dataLen, buffer, size, maxSize, streamEndianness);
|
2022-07-18 10:42:56 +02:00
|
|
|
}
|
|
|
|
|
2022-07-18 16:07:26 +02:00
|
|
|
size_t SpacePacketCreator::getSerializedSize() const { return 6; }
|
|
|
|
|
2022-07-18 10:42:56 +02:00
|
|
|
ReturnValue_t SpacePacketCreator::deSerialize(const uint8_t **buffer, size_t *size,
|
|
|
|
SerializeIF::Endianness streamEndianness) {
|
|
|
|
return HasReturnvaluesIF::RETURN_FAILED;
|
|
|
|
}
|
2022-07-18 14:05:43 +02:00
|
|
|
bool SpacePacketCreator::isValid() const { return valid; }
|
2022-07-18 16:07:26 +02:00
|
|
|
|
|
|
|
ReturnValue_t SpacePacketCreator::serialize(uint8_t **buffer, size_t *size, size_t maxSize) const {
|
|
|
|
return serialize(buffer, size, maxSize, SerializeIF::Endianness::NETWORK);
|
|
|
|
}
|
|
|
|
void SpacePacketCreator::setApid(uint16_t apid) {
|
|
|
|
if (apid < ccsds::LIMIT_APID) {
|
2022-07-19 18:13:25 +02:00
|
|
|
params.packetId.apid = apid;
|
2022-07-18 16:07:26 +02:00
|
|
|
}
|
|
|
|
checkFieldValidity();
|
|
|
|
}
|
|
|
|
|
|
|
|
void SpacePacketCreator::setSeqCount(uint16_t seqCount) {
|
|
|
|
if (seqCount < ccsds::LIMIT_SEQUENCE_COUNT) {
|
2022-07-19 18:13:25 +02:00
|
|
|
params.packetSeqCtrl.seqCount = seqCount;
|
2022-07-18 16:07:26 +02:00
|
|
|
}
|
|
|
|
checkFieldValidity();
|
|
|
|
}
|
2022-07-19 18:13:25 +02:00
|
|
|
void SpacePacketCreator::setSeqFlags(ccsds::SequenceFlags flags) {
|
|
|
|
params.packetSeqCtrl.seqFlags = flags;
|
|
|
|
}
|
|
|
|
void SpacePacketCreator::setDataLen(uint16_t dataLen_) { params.dataLen = dataLen_; }
|
2022-07-18 16:07:26 +02:00
|
|
|
void SpacePacketCreator::checkFieldValidity() {
|
|
|
|
valid = true;
|
2022-07-19 18:13:25 +02:00
|
|
|
if (params.packetId.apid > ccsds::LIMIT_APID or
|
|
|
|
params.packetSeqCtrl.seqCount > ccsds::LIMIT_SEQUENCE_COUNT) {
|
2022-07-18 16:07:26 +02:00
|
|
|
valid = false;
|
|
|
|
}
|
|
|
|
}
|