fsfw/src/fsfw/tmtcpacket/pus/tm/PusTmCreator.h

82 lines
3.0 KiB
C
Raw Normal View History

2022-07-19 18:13:25 +02:00
#ifndef FSFW_TMTCPACKET_TMPACKETCREATOR_H
#define FSFW_TMTCPACKET_TMPACKETCREATOR_H
2022-07-20 22:21:15 +02:00
#include "PusTmIF.h"
#include "fsfw/tmtcpacket/ccsds/SpacePacketCreator.h"
2022-07-22 17:09:44 +02:00
#include "fsfw/tmtcpacket/pus/CustomUserDataIF.h"
2022-07-19 18:13:25 +02:00
2022-07-20 22:21:15 +02:00
struct PusTmSecHeader {
2022-07-22 16:06:31 +02:00
PusTmSecHeader() = default;
PusTmSecHeader(uint8_t service, uint8_t subservice, TimeStamperIF* timeStamper)
: service(service), subservice(subservice), timeStamper(timeStamper) {}
uint8_t service = 0;
uint8_t subservice = 0;
TimeStamperIF* timeStamper = nullptr;
uint8_t pusVersion = ecss::PusVersion::PUS_C;
uint8_t scTimeRefStatus = 0;
uint16_t messageTypeCounter = 0;
uint16_t destId = 0;
2022-07-19 18:13:25 +02:00
};
2022-07-20 22:21:15 +02:00
struct PusTmParams {
2022-07-22 16:06:31 +02:00
PusTmParams() = default;
explicit PusTmParams(PusTmSecHeader secHeader) : secHeader(secHeader){};
PusTmParams(PusTmSecHeader secHeader, ecss::DataWrapper dataWrapper)
: secHeader(secHeader), dataWrapper(dataWrapper) {}
PusTmParams(uint8_t service, uint8_t subservice, TimeStamperIF* timeStamper)
: secHeader(service, subservice, timeStamper) {}
PusTmParams(uint8_t service, uint8_t subservice, TimeStamperIF* timeStamper,
ecss::DataWrapper dataWrapper_)
: PusTmParams(service, subservice, timeStamper) {
dataWrapper = dataWrapper_;
}
2022-07-20 22:21:15 +02:00
PusTmSecHeader secHeader;
2022-07-22 16:06:31 +02:00
ecss::DataWrapper dataWrapper{};
2022-07-20 22:21:15 +02:00
};
class TimeStamperIF;
2022-07-22 17:09:44 +02:00
class PusTmCreator : public SerializeIF, public PusTmIF, public CustomUserDataIF {
2022-07-19 18:13:25 +02:00
public:
2022-07-20 22:21:15 +02:00
PusTmCreator();
2022-07-22 16:06:31 +02:00
PusTmCreator(SpacePacketParams initSpParams, PusTmParams initPusParams);
2022-07-19 18:13:25 +02:00
~PusTmCreator() override = default;
void setTimeStamper(TimeStamperIF& timeStamper);
2022-07-20 22:21:15 +02:00
SpacePacketParams& getSpParams();
void setApid(uint16_t apid);
2022-07-22 16:41:32 +02:00
void setDestId(uint16_t destId);
void setService(uint8_t service);
void setSubservice(uint8_t subservice);
2022-07-22 16:41:32 +02:00
void setMessageTypeCounter(uint16_t messageTypeCounter);
2022-07-20 22:21:15 +02:00
PusTmParams& getParams();
void updateSpLengthField();
2022-07-20 11:43:16 +02:00
[[nodiscard]] uint16_t getPacketIdRaw() const override;
[[nodiscard]] uint16_t getPacketSeqCtrlRaw() const override;
2022-07-19 18:13:25 +02:00
[[nodiscard]] uint16_t getPacketDataLen() const override;
[[nodiscard]] uint8_t getPusVersion() const override;
[[nodiscard]] uint8_t getService() const override;
[[nodiscard]] uint8_t getSubService() const override;
2022-07-20 22:21:15 +02:00
uint8_t getScTimeRefStatus() override;
uint16_t getMessageTypeCounter() override;
uint16_t getDestId() override;
ReturnValue_t serialize(uint8_t** buffer, size_t* size, size_t maxSize,
Endianness streamEndianness) const override;
[[nodiscard]] size_t getSerializedSize() const override;
ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size,
Endianness streamEndianness) override;
2022-07-22 16:06:31 +02:00
[[nodiscard]] TimeStamperIF* getTimestamper() const;
2022-07-22 17:09:44 +02:00
ReturnValue_t setRawUserData(const uint8_t* data, size_t len) override;
2022-07-25 11:26:45 +02:00
ReturnValue_t setSerializableUserData(SerializeIF& serializable) override;
2022-07-19 18:13:25 +02:00
private:
2022-07-22 16:06:31 +02:00
void setup();
2022-07-20 22:21:15 +02:00
PusTmParams pusParams{};
2022-07-27 11:26:47 +02:00
bool calculateCrcOnSerialization = true;
2022-07-20 22:21:15 +02:00
SpacePacketCreator spCreator;
2022-07-19 18:13:25 +02:00
};
#endif // FSFW_TMTCPACKET_TMPACKETCREATOR_H