From efd12544df8e9b4a48ecbb8dba421e6440fa47b3 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 13 Jun 2022 16:13:15 +0200 Subject: [PATCH 1/4] this should get the job done --- src/fsfw/tmtcpacket/pus/tc/CMakeLists.txt | 5 +- src/fsfw/tmtcpacket/pus/tc/TcPacketPus.cpp | 12 ----- src/fsfw/tmtcpacket/pus/tc/TcPacketPus.h | 23 ++++----- src/fsfw/tmtcpacket/pus/tc/TcPacketPusBase.h | 2 +- .../tmtcpacket/pus/tc/TcPacketPusIntoBuf.cpp | 47 +++++++++++++++++++ .../tmtcpacket/pus/tc/TcPacketPusIntoBuf.h | 38 +++++++++++++++ 6 files changed, 101 insertions(+), 26 deletions(-) create mode 100644 src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.cpp create mode 100644 src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.h diff --git a/src/fsfw/tmtcpacket/pus/tc/CMakeLists.txt b/src/fsfw/tmtcpacket/pus/tc/CMakeLists.txt index 09c63bfd..161c308b 100644 --- a/src/fsfw/tmtcpacket/pus/tc/CMakeLists.txt +++ b/src/fsfw/tmtcpacket/pus/tc/CMakeLists.txt @@ -1,3 +1,4 @@ target_sources( - ${LIB_FSFW_NAME} PRIVATE TcPacketPusBase.cpp TcPacketPus.cpp - TcPacketStoredBase.cpp TcPacketStoredPus.cpp) + ${LIB_FSFW_NAME} + PRIVATE TcPacketPusBase.cpp TcPacketPus.cpp TcPacketStoredBase.cpp + TcPacketStoredPus.cpp TcPacketPusIntoBuf.cpp) diff --git a/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.cpp b/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.cpp index a38b24c0..f5ebe38c 100644 --- a/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.cpp +++ b/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.cpp @@ -97,15 +97,3 @@ ReturnValue_t TcPacketPus::setData(uint8_t *dataPtr, size_t maxSize, void *args) tcData = reinterpret_cast(const_cast(dataPtr)); return HasReturnvaluesIF::RETURN_OK; } - -void TcPacketPus::setApplicationData(const uint8_t *data, size_t len, bool updateSpLenField) { - if(data == nullptr) { - len = 0; - } - if(data != nullptr) { - std::memcpy(&tcData->appData, data, len); - } - if(updateSpLenField) { - setPacketDataLength(calculateFullPacketLength(len) - sizeof(CCSDSPrimaryHeader) - 1); - } -} diff --git a/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.h b/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.h index 543f1030..206477ed 100644 --- a/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.h +++ b/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.h @@ -49,16 +49,6 @@ class TcPacketPus : public TcPacketPusBase { */ TcPacketPus(const uint8_t* setData); - /** - * Initializes the Tc Packet header. - * @param apid APID used. - * @param sequenceCount Sequence Count in the primary header. - * @param ack Which acknowledeges are expected from the receiver. - * @param service PUS Service - * @param subservice PUS Subservice - */ - void initializeTcPacket(uint16_t apid, uint16_t sequenceCount, uint8_t ack, uint8_t service, - uint8_t subservice, pus::PusVersion pusVersion, uint16_t sourceId = 0); /** * Set the application data field by copying the provided data to the application data field. * This function can also update the space packet length @@ -68,7 +58,7 @@ class TcPacketPus : public TcPacketPusBase { * @param len * @param updateSpLenField */ - void setApplicationData(const uint8_t* data, size_t len, bool updateSpLenField); + void setApplicationData(const uint8_t* data, size_t len, bool updateSpLenField); // Base class overrides uint8_t getSecondaryHeaderFlag() const override; @@ -86,6 +76,17 @@ class TcPacketPus : public TcPacketPusBase { protected: ReturnValue_t setData(uint8_t* dataPtr, size_t maxSize, void* args = nullptr) override; + /** + * Initializes the Tc Packet header. + * @param apid APID used. + * @param sequenceCount Sequence Count in the primary header. + * @param ack Which acknowledeges are expected from the receiver. + * @param service PUS Service + * @param subservice PUS Subservice + */ + void initializeTcPacket(uint16_t apid, uint16_t sequenceCount, uint8_t ack, uint8_t service, + uint8_t subservice, pus::PusVersion pusVersion, uint16_t sourceId = 0); + /** * A pointer to a structure which defines the data structure of * the packet's data. diff --git a/src/fsfw/tmtcpacket/pus/tc/TcPacketPusBase.h b/src/fsfw/tmtcpacket/pus/tc/TcPacketPusBase.h index 9f1d07ed..075524bb 100644 --- a/src/fsfw/tmtcpacket/pus/tc/TcPacketPusBase.h +++ b/src/fsfw/tmtcpacket/pus/tc/TcPacketPusBase.h @@ -22,7 +22,7 @@ class TcPacketPusBase : public SpacePacketBase, virtual public RedirectableDataP friend class TcPacketStoredBase; public: - enum AckField { + enum AckField : uint8_t { //! No acknowledgements are expected. ACK_NONE = 0b0000, //! Acknowledgements on acceptance are expected. diff --git a/src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.cpp b/src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.cpp new file mode 100644 index 00000000..6ef46f48 --- /dev/null +++ b/src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.cpp @@ -0,0 +1,47 @@ +#include "TcPacketPusIntoBuf.h" + +#include + +TcPacketPusIntoBuf::TcPacketPusIntoBuf(uint8_t* store, size_t maxSize, PusConfig& cfg) + : TcPacketPus(nullptr), store(store), maxSize(maxSize), cfg(cfg) {} + +ReturnValue_t TcPacketPusIntoBuf::serialize(uint8_t** buffer, size_t* size, size_t maxSize, + Endianness streamEndianness) const { + if (*size + getSerializedSize() > maxSize) { + return BUFFER_TOO_SHORT; + } + std::memcpy(*buffer, store, getSerializedSize()); + *buffer += getSerializedSize(); + *size += getSerializedSize(); + return RETURN_OK; +} + +size_t TcPacketPusIntoBuf::getSerializedSize() const { return TC_PACKET_MIN_SIZE + cfg.appDataLen; } + +ReturnValue_t TcPacketPusIntoBuf::initialize() { + if (getSerializedSize() > maxSize) { + return SerializeIF::BUFFER_TOO_SHORT; + } + ReturnValue_t result = setData(store, maxSize); + if (result != RETURN_OK) { + return result; + } +#if FSFW_USE_PUS_C_TELECOMMANDS == 1 + pus::PusVersion pusVersion = pus::PusVersion::PUS_C_VERSION; +#else + pus::PusVersion pusVersion = pus::PusVersion::PUS_A_VERSION; +#endif + initializeTcPacket(cfg.apid, cfg.sequenceCount, cfg.ack, cfg.service, cfg.subservice, pusVersion, + cfg.sourceId); + if (cfg.appData != nullptr and cfg.appDataLen > 0) { + std::memcpy(&tcData->appData, cfg.appData, cfg.appDataLen); + } + setPacketDataLength(calculateFullPacketLength(cfg.appDataLen) - sizeof(CCSDSPrimaryHeader) - 1); + setErrorControl(); + return RETURN_OK; +} + +ReturnValue_t TcPacketPusIntoBuf::deSerialize(const uint8_t** buffer, size_t* size, + Endianness streamEndianness) { + return RETURN_FAILED; +} diff --git a/src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.h b/src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.h new file mode 100644 index 00000000..92b98d12 --- /dev/null +++ b/src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.h @@ -0,0 +1,38 @@ +#ifndef FSFW_SRC_FSFW_TMTCPACKET_PUS_TC_TCPACKETPUSINTOBUF_H_ +#define FSFW_SRC_FSFW_TMTCPACKET_PUS_TC_TCPACKETPUSINTOBUF_H_ + +#include + +#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; + uint8_t ack = TcPacketPus::ACK_ALL; +}; + +class TcPacketPusIntoBuf : public TcPacketPus, public SerializeIF, public HasReturnvaluesIF { + public: + TcPacketPusIntoBuf(uint8_t* data, size_t size, 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_ */ From c00cb1680d72205cae6ed7d20130aba95f6cae48 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 13 Jun 2022 16:14:30 +0200 Subject: [PATCH 2/4] removed unneeded function --- src/fsfw/tmtcpacket/pus/tc/TcPacketPus.h | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.h b/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.h index 206477ed..47173dad 100644 --- a/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.h +++ b/src/fsfw/tmtcpacket/pus/tc/TcPacketPus.h @@ -49,17 +49,6 @@ class TcPacketPus : public TcPacketPusBase { */ TcPacketPus(const uint8_t* setData); - /** - * Set the application data field by copying the provided data to the application data field. - * This function can also update the space packet length - * field. To only update the SP length field with empty application data, simply pass 0 as - * length of nullptr as data. - * @param data - * @param len - * @param updateSpLenField - */ - void setApplicationData(const uint8_t* data, size_t len, bool updateSpLenField); - // Base class overrides uint8_t getSecondaryHeaderFlag() const override; uint8_t getPusVersionNumber() const override; From 15d69e64f31a834755343f61b4e8c943723ff699 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 13 Jun 2022 16:20:37 +0200 Subject: [PATCH 3/4] renamed new class, small tweak --- src/fsfw/tmtcpacket/pus/tc/CMakeLists.txt | 2 +- ...tPusIntoBuf.cpp => TcPacketSerializer.cpp} | 21 +++++++------------ ...acketPusIntoBuf.h => TcPacketSerializer.h} | 5 +++-- 3 files changed, 12 insertions(+), 16 deletions(-) rename src/fsfw/tmtcpacket/pus/tc/{TcPacketPusIntoBuf.cpp => TcPacketSerializer.cpp} (65%) rename src/fsfw/tmtcpacket/pus/tc/{TcPacketPusIntoBuf.h => TcPacketSerializer.h} (83%) diff --git a/src/fsfw/tmtcpacket/pus/tc/CMakeLists.txt b/src/fsfw/tmtcpacket/pus/tc/CMakeLists.txt index 161c308b..ad413c02 100644 --- a/src/fsfw/tmtcpacket/pus/tc/CMakeLists.txt +++ b/src/fsfw/tmtcpacket/pus/tc/CMakeLists.txt @@ -1,4 +1,4 @@ target_sources( ${LIB_FSFW_NAME} PRIVATE TcPacketPusBase.cpp TcPacketPus.cpp TcPacketStoredBase.cpp - TcPacketStoredPus.cpp TcPacketPusIntoBuf.cpp) + TcPacketStoredPus.cpp TcPacketSerializer.cpp) diff --git a/src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.cpp b/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.cpp similarity index 65% rename from src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.cpp rename to src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.cpp index 6ef46f48..28e8271f 100644 --- a/src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.cpp +++ b/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.cpp @@ -1,11 +1,11 @@ -#include "TcPacketPusIntoBuf.h" +#include "TcPacketSerializer.h" #include -TcPacketPusIntoBuf::TcPacketPusIntoBuf(uint8_t* store, size_t maxSize, PusConfig& cfg) +TcPacketSerializer::TcPacketSerializer(uint8_t* store, size_t maxSize, PusConfig& cfg) : TcPacketPus(nullptr), store(store), maxSize(maxSize), cfg(cfg) {} -ReturnValue_t TcPacketPusIntoBuf::serialize(uint8_t** buffer, size_t* size, size_t maxSize, +ReturnValue_t TcPacketSerializer::serialize(uint8_t** buffer, size_t* size, size_t maxSize, Endianness streamEndianness) const { if (*size + getSerializedSize() > maxSize) { return BUFFER_TOO_SHORT; @@ -16,9 +16,9 @@ ReturnValue_t TcPacketPusIntoBuf::serialize(uint8_t** buffer, size_t* size, size return RETURN_OK; } -size_t TcPacketPusIntoBuf::getSerializedSize() const { return TC_PACKET_MIN_SIZE + cfg.appDataLen; } +size_t TcPacketSerializer::getSerializedSize() const { return TC_PACKET_MIN_SIZE + cfg.appDataLen; } -ReturnValue_t TcPacketPusIntoBuf::initialize() { +ReturnValue_t TcPacketSerializer::initialize() { if (getSerializedSize() > maxSize) { return SerializeIF::BUFFER_TOO_SHORT; } @@ -26,13 +26,8 @@ ReturnValue_t TcPacketPusIntoBuf::initialize() { if (result != RETURN_OK) { return result; } -#if FSFW_USE_PUS_C_TELECOMMANDS == 1 - pus::PusVersion pusVersion = pus::PusVersion::PUS_C_VERSION; -#else - pus::PusVersion pusVersion = pus::PusVersion::PUS_A_VERSION; -#endif - initializeTcPacket(cfg.apid, cfg.sequenceCount, cfg.ack, cfg.service, cfg.subservice, pusVersion, - cfg.sourceId); + initializeTcPacket(cfg.apid, cfg.sequenceCount, cfg.ack, cfg.service, cfg.subservice, + cfg.pusVersion, cfg.sourceId); if (cfg.appData != nullptr and cfg.appDataLen > 0) { std::memcpy(&tcData->appData, cfg.appData, cfg.appDataLen); } @@ -41,7 +36,7 @@ ReturnValue_t TcPacketPusIntoBuf::initialize() { return RETURN_OK; } -ReturnValue_t TcPacketPusIntoBuf::deSerialize(const uint8_t** buffer, size_t* size, +ReturnValue_t TcPacketSerializer::deSerialize(const uint8_t** buffer, size_t* size, Endianness streamEndianness) { return RETURN_FAILED; } diff --git a/src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.h b/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.h similarity index 83% rename from src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.h rename to src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.h index 92b98d12..dcc5ef1f 100644 --- a/src/fsfw/tmtcpacket/pus/tc/TcPacketPusIntoBuf.h +++ b/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.h @@ -14,12 +14,13 @@ struct PusConfig { uint16_t sourceId = 0; uint8_t* appData = nullptr; size_t appDataLen = 0; + pus::PusVersion pusVersion = pus::PusVersion::PUS_C_VERSION; uint8_t ack = TcPacketPus::ACK_ALL; }; -class TcPacketPusIntoBuf : public TcPacketPus, public SerializeIF, public HasReturnvaluesIF { +class TcPacketSerializer : public TcPacketPus, public SerializeIF, public HasReturnvaluesIF { public: - TcPacketPusIntoBuf(uint8_t* data, size_t size, PusConfig& cfg); + TcPacketSerializer(uint8_t* data, size_t size, PusConfig& cfg); ReturnValue_t initialize(); From eb46f0c4732b6e832952491d6b695b966033fac2 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 13 Jun 2022 16:45:09 +0200 Subject: [PATCH 4/4] pus version in config is constexpr now --- src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.cpp | 2 +- src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.h | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.cpp b/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.cpp index 28e8271f..cc280d2b 100644 --- a/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.cpp +++ b/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.cpp @@ -27,7 +27,7 @@ ReturnValue_t TcPacketSerializer::initialize() { return result; } initializeTcPacket(cfg.apid, cfg.sequenceCount, cfg.ack, cfg.service, cfg.subservice, - cfg.pusVersion, cfg.sourceId); + PusConfig::PUS_VERSION, cfg.sourceId); if (cfg.appData != nullptr and cfg.appDataLen > 0) { std::memcpy(&tcData->appData, cfg.appData, cfg.appDataLen); } diff --git a/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.h b/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.h index dcc5ef1f..9abb37b1 100644 --- a/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.h +++ b/src/fsfw/tmtcpacket/pus/tc/TcPacketSerializer.h @@ -14,13 +14,17 @@ struct PusConfig { uint16_t sourceId = 0; uint8_t* appData = nullptr; size_t appDataLen = 0; - pus::PusVersion pusVersion = pus::PusVersion::PUS_C_VERSION; +#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* data, size_t size, PusConfig& cfg); + TcPacketSerializer(uint8_t* store, size_t maxSize, PusConfig& cfg); ReturnValue_t initialize();