fsfw/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.h

44 lines
1.3 KiB
C++

#ifndef FSFW_SRC_FSFW_TMTCPACKET_PUS_TC_TCPACKETPUSINTOBUF_H_
#define FSFW_SRC_FSFW_TMTCPACKET_PUS_TC_TCPACKETPUSINTOBUF_H_
#include <cstdint>
#include "TcPacketPus.h"
#include "fsfw/serialize/SerializeIF.h"
struct PusConfig {
uint16_t apid = 0;
uint8_t service = 0;
uint8_t subservice = 0;
uint16_t sequenceCount = 0;
uint16_t sourceId = 0;
uint8_t* appData = nullptr;
size_t appDataLen = 0;
#if FSFW_USE_PUS_C_TELECOMMANDS == 1
static constexpr pus::PusVersion PUS_VERSION = pus::PusVersion::PUS_C_VERSION;
#else
static constexpr pus::PusVersion PUS_VERSION = pus::PusVersion::PUS_A_VERSION;
#endif
uint8_t ack = TcPacketPus::ACK_ALL;
};
class TcPacketSerializer : public TcPacketPus, public SerializeIF, public HasReturnvaluesIF {
public:
TcPacketSerializer(uint8_t* store, size_t maxSize, PusConfig& cfg);
ReturnValue_t initialize();
ReturnValue_t serialize(uint8_t** buffer, size_t* size, size_t maxSize,
Endianness streamEndianness) const override;
size_t getSerializedSize() const override;
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
Endianness streamEndianness) override;
private:
uint8_t* store;
size_t maxSize;
PusConfig& cfg;
};
#endif /* FSFW_SRC_FSFW_TMTCPACKET_PUS_TC_TCPACKETPUSINTOBUF_H_ */