fsfw/src/fsfw/tmtcpacket/SpacePacketReader.cpp

41 lines
1.4 KiB
C++
Raw Normal View History

2022-07-18 10:42:56 +02:00
#include "fsfw/tmtcpacket/SpacePacketReader.h"
2021-07-13 20:22:54 +02:00
2020-10-28 02:20:12 +01:00
#include <cstring>
2022-02-02 10:29:30 +01:00
#include "fsfw/serviceinterface/ServiceInterface.h"
2022-07-18 10:42:56 +02:00
SpacePacketReader::SpacePacketReader(const uint8_t* setAddress) {
2022-02-02 10:29:30 +01:00
this->data = reinterpret_cast<SpacePacketPointer*>(const_cast<uint8_t*>(setAddress));
}
2022-07-18 10:42:56 +02:00
SpacePacketReader::~SpacePacketReader() = default;
2022-07-18 10:42:56 +02:00
inline uint16_t SpacePacketReader::getPacketId() const {
2022-07-18 10:20:26 +02:00
return ((this->data->header.packetIdHAndVersion) << 8) + this->data->header.packetIdL;
}
2022-07-18 10:42:56 +02:00
size_t SpacePacketReader::getFullSize() {
2022-02-02 10:29:30 +01:00
// +1 is done because size in packet data length field is: size of data field -1
2022-07-18 10:20:26 +02:00
return this->getPacketDataLen() + sizeof(this->data->header) + 1;
}
2022-07-18 10:42:56 +02:00
uint8_t* SpacePacketReader::getWholeData() { return reinterpret_cast<uint8_t*>(this->data); }
2022-07-18 10:42:56 +02:00
uint8_t* SpacePacketReader::getPacketData() { return &(data->packet_data); }
2022-07-18 10:42:56 +02:00
ReturnValue_t SpacePacketReader::setData(uint8_t* pData, size_t maxSize, void* args) {
2022-02-02 10:29:30 +01:00
if (maxSize < 6) {
return HasReturnvaluesIF::RETURN_FAILED;
}
this->data = reinterpret_cast<SpacePacketPointer*>(const_cast<uint8_t*>(pData));
return HasReturnvaluesIF::RETURN_OK;
}
2022-07-18 10:42:56 +02:00
uint16_t SpacePacketReader::getPacketSeqCtrl() const {
2022-07-18 10:20:26 +02:00
return ((this->data->header.packetSeqCtrlH & 0b00111111) << 8) +
this->data->header.packetSeqCtrlL;
}
2022-07-18 10:42:56 +02:00
uint16_t SpacePacketReader::getPacketDataLen() const {
2022-07-18 10:20:26 +02:00
return ((this->data->header.packetLenH) << 8) + this->data->header.packetLenL;
}