2022-07-20 11:43:16 +02:00
|
|
|
#include "SpacePacketReader.h"
|
2021-07-13 20:22:54 +02:00
|
|
|
|
2022-07-19 18:13:25 +02:00
|
|
|
#include "fsfw/serialize/SerializeIF.h"
|
2022-02-02 10:29:30 +01:00
|
|
|
#include "fsfw/serviceinterface/ServiceInterface.h"
|
|
|
|
|
2022-07-19 18:13:25 +02:00
|
|
|
SpacePacketReader::SpacePacketReader(const uint8_t* setAddress, size_t maxSize_) {
|
|
|
|
setInternalFields(setAddress, maxSize_);
|
|
|
|
}
|
|
|
|
|
2022-07-21 11:34:11 +02:00
|
|
|
ReturnValue_t SpacePacketReader::checkSize() const {
|
2022-07-21 14:40:00 +02:00
|
|
|
if (isNull()) {
|
2022-08-16 01:08:26 +02:00
|
|
|
return returnvalue::FAILED;
|
2022-07-21 14:40:00 +02:00
|
|
|
}
|
2022-07-21 11:34:11 +02:00
|
|
|
if (getFullPacketLen() > bufSize) {
|
2022-07-19 18:13:25 +02:00
|
|
|
return SerializeIF::STREAM_TOO_SHORT;
|
|
|
|
}
|
2022-08-16 01:08:26 +02:00
|
|
|
return returnvalue::OK;
|
2016-06-15 23:48:41 +02:00
|
|
|
}
|
|
|
|
|
2022-07-18 10:42:56 +02:00
|
|
|
SpacePacketReader::~SpacePacketReader() = default;
|
2021-09-27 11:05:26 +02:00
|
|
|
|
2022-07-20 11:43:16 +02:00
|
|
|
inline uint16_t SpacePacketReader::getPacketIdRaw() const { return ccsds::getPacketId(*spHeader); }
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-07-19 18:13:25 +02:00
|
|
|
const uint8_t* SpacePacketReader::getPacketData() { return packetDataField; }
|
2018-07-12 16:29:32 +02:00
|
|
|
|
2022-07-21 11:34:11 +02:00
|
|
|
ReturnValue_t SpacePacketReader::setData(uint8_t* data, size_t maxSize_, void* args) {
|
|
|
|
return setInternalFields(data, maxSize_);
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
2022-07-19 18:13:25 +02:00
|
|
|
|
2022-07-20 11:43:16 +02:00
|
|
|
uint16_t SpacePacketReader::getPacketSeqCtrlRaw() const {
|
|
|
|
return ccsds::getPacketSeqCtrl(*spHeader);
|
2022-07-18 10:20:26 +02:00
|
|
|
}
|
|
|
|
|
2022-07-20 11:43:16 +02:00
|
|
|
uint16_t SpacePacketReader::getPacketDataLen() const { return ccsds::getPacketLen(*spHeader); }
|
2022-07-21 11:34:11 +02:00
|
|
|
|
|
|
|
ReturnValue_t SpacePacketReader::setInternalFields(const uint8_t* data, size_t maxSize_) {
|
|
|
|
bufSize = maxSize_;
|
2022-08-01 17:16:37 +02:00
|
|
|
if (maxSize_ < ccsds::HEADER_LEN) {
|
|
|
|
return SerializeIF::STREAM_TOO_SHORT;
|
|
|
|
}
|
2022-07-20 11:43:16 +02:00
|
|
|
spHeader = reinterpret_cast<const ccsds::PrimaryHeader*>(data);
|
2022-08-01 17:16:37 +02:00
|
|
|
if (maxSize_ > ccsds::HEADER_LEN) {
|
2022-07-21 14:40:00 +02:00
|
|
|
packetDataField = data + ccsds::HEADER_LEN;
|
|
|
|
}
|
2022-07-21 11:34:11 +02:00
|
|
|
return checkSize();
|
2022-07-18 10:20:26 +02:00
|
|
|
}
|
2022-07-21 11:34:11 +02:00
|
|
|
|
2022-07-27 17:00:43 +02:00
|
|
|
const uint8_t* SpacePacketReader::getFullData() const {
|
2022-07-19 18:13:25 +02:00
|
|
|
return reinterpret_cast<const uint8_t*>(spHeader);
|
2022-07-21 11:34:11 +02:00
|
|
|
}
|
|
|
|
size_t SpacePacketReader::getBufSize() const { return bufSize; }
|
|
|
|
|
|
|
|
bool SpacePacketReader::isNull() const { return spHeader == nullptr; }
|
|
|
|
|
|
|
|
ReturnValue_t SpacePacketReader::setReadOnlyData(const uint8_t* data, size_t maxSize) {
|
|
|
|
return setData(const_cast<uint8_t*>(data), maxSize, nullptr);
|
|
|
|
}
|