From 8581f9a6f3959c83a82b0c2d74e3132d8a33cb4f Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 24 Jul 2023 18:01:25 +0200 Subject: [PATCH] start implementing reserved message creator --- .../cfdp/handler/ReservedMessageParser.cpp | 2 +- src/fsfw/cfdp/tlv/CMakeLists.txt | 3 ++- src/fsfw/cfdp/tlv/ReservedMessageCreator.cpp | 23 +++++++++++++++++++ src/fsfw/cfdp/tlv/ReservedMessageCreator.h | 22 ++++++++++++++++++ unittests/cfdp/handler/CMakeLists.txt | 5 ++-- .../cfdp/handler/testReservedMsgParser.cpp | 18 +++++++++++++++ 6 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 src/fsfw/cfdp/tlv/ReservedMessageCreator.cpp create mode 100644 src/fsfw/cfdp/tlv/ReservedMessageCreator.h create mode 100644 unittests/cfdp/handler/testReservedMsgParser.cpp diff --git a/src/fsfw/cfdp/handler/ReservedMessageParser.cpp b/src/fsfw/cfdp/handler/ReservedMessageParser.cpp index e53db173..93254483 100644 --- a/src/fsfw/cfdp/handler/ReservedMessageParser.cpp +++ b/src/fsfw/cfdp/handler/ReservedMessageParser.cpp @@ -14,7 +14,7 @@ cfdp::ReservedMessageParser::ReservedMessageParser(StorageManagerIF& ipcStore, : msgQueue(msgQueue), ipcStore(ipcStore), userDestination(userDestination) {} ReturnValue_t cfdp::ReservedMessageParser::parse(const uint8_t* msgsToUserPtr, - size_t sizeOfMessages) { + size_t sizeOfMessages) { ReturnValue_t result; size_t currentIdx = 0; const uint8_t* currentPtr = msgsToUserPtr; diff --git a/src/fsfw/cfdp/tlv/CMakeLists.txt b/src/fsfw/cfdp/tlv/CMakeLists.txt index 617b1b0f..09adf941 100644 --- a/src/fsfw/cfdp/tlv/CMakeLists.txt +++ b/src/fsfw/cfdp/tlv/CMakeLists.txt @@ -8,4 +8,5 @@ target_sources( StringLv.cpp FlowLabelTlv.cpp MessageToUserTlv.cpp - FaultHandlerOverrideTlv.cpp) + FaultHandlerOverrideTlv.cpp + ReservedMessageCreator.cpp) diff --git a/src/fsfw/cfdp/tlv/ReservedMessageCreator.cpp b/src/fsfw/cfdp/tlv/ReservedMessageCreator.cpp new file mode 100644 index 00000000..a4ce0a99 --- /dev/null +++ b/src/fsfw/cfdp/tlv/ReservedMessageCreator.cpp @@ -0,0 +1,23 @@ +#include "ReservedMessageCreator.h" + +cfdp::ReservedMessageCreator::ReservedMessageCreator(uint8_t messageType, uint8_t *msgData, + size_t msgLen) + : messageType(messageType), msgData(msgData), msgSize(msgLen) {} +ReturnValue_t cfdp::ReservedMessageCreator::serialize( + uint8_t **buffer, size_t *size, size_t maxSize, + SerializeIF::Endianness streamEndianness) const { + if (*size + getSerializedSize() > maxSize) { + return SerializeIF::BUFFER_TOO_SHORT; + } + return returnvalue::OK; +} + +size_t cfdp::ReservedMessageCreator::getSerializedSize() const { + // 3 bytes type and length and value, 4 bytes CFDP, 1 byte reserved message type, message data. + return 3 + 5 + msgSize; +} + +ReturnValue_t cfdp::ReservedMessageCreator::deSerialize(const uint8_t **buffer, size_t *size, + SerializeIF::Endianness streamEndianness) { + return returnvalue::FAILED; +} diff --git a/src/fsfw/cfdp/tlv/ReservedMessageCreator.h b/src/fsfw/cfdp/tlv/ReservedMessageCreator.h new file mode 100644 index 00000000..89878635 --- /dev/null +++ b/src/fsfw/cfdp/tlv/ReservedMessageCreator.h @@ -0,0 +1,22 @@ +#pragma once + +#include "Tlv.h" + +namespace cfdp { + +class ReservedMessageCreator : public SerializeIF { + public: + ReservedMessageCreator(uint8_t messageType, uint8_t *msgData, size_t msgLen); + [[nodiscard]] 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; + + private: + uint8_t messageType; + uint8_t *msgData; + size_t msgSize; +}; + +} // namespace cfdp diff --git a/unittests/cfdp/handler/CMakeLists.txt b/unittests/cfdp/handler/CMakeLists.txt index f70e5dfb..c5da0627 100644 --- a/unittests/cfdp/handler/CMakeLists.txt +++ b/unittests/cfdp/handler/CMakeLists.txt @@ -1,3 +1,4 @@ target_sources( - ${FSFW_TEST_TGT} PRIVATE testDistributor.cpp testDestHandler.cpp - testSourceHandler.cpp testFaultHandler.cpp) + ${FSFW_TEST_TGT} + PRIVATE testDistributor.cpp testDestHandler.cpp testReservedMsgParser.cpp + testSourceHandler.cpp testFaultHandler.cpp) diff --git a/unittests/cfdp/handler/testReservedMsgParser.cpp b/unittests/cfdp/handler/testReservedMsgParser.cpp new file mode 100644 index 00000000..ea038b6a --- /dev/null +++ b/unittests/cfdp/handler/testReservedMsgParser.cpp @@ -0,0 +1,18 @@ +#include + +#include "fsfw/cfdp/handler/ReservedMessageParser.h" +#include "mocks/MessageQueueMock.h" +#include "mocks/StorageManagerMock.h" + +TEST_CASE("Reserved Message Parser", "[cfdp]") { + using namespace cfdp; + using namespace returnvalue; + + MessageQueueId_t destQueueId = 2; + MessageQueueMock msgQueue(destQueueId); + LocalPool::LocalPoolConfig storeCfg = {{10, 32}, {10, 64}, {10, 128}, {10, 1024}}; + StorageManagerMock ipcStore(0, storeCfg); + ReservedMessageParser parser(ipcStore, msgQueue, destQueueId); + + // parser.parse() +}