From 66704dc5716821209cb29b0ef9532814b01df3dc Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 24 Jul 2023 11:57:33 +0200 Subject: [PATCH] getting tricky again.. --- src/fsfw/cfdp/definitions.h | 14 ++++++++++++++ src/fsfw/cfdp/handler/MsgToUserParser.cpp | 15 +++++++++++++++ src/fsfw/cfdp/handler/MsgToUserParser.h | 17 ++++++++++++++++- src/fsfw/cfdp/tlv/MessageToUserTlv.cpp | 11 +++++++++++ src/fsfw/cfdp/tlv/MessageToUserTlv.h | 2 ++ 5 files changed, 58 insertions(+), 1 deletion(-) diff --git a/src/fsfw/cfdp/definitions.h b/src/fsfw/cfdp/definitions.h index 3faa8294..34b8d774 100644 --- a/src/fsfw/cfdp/definitions.h +++ b/src/fsfw/cfdp/definitions.h @@ -143,6 +143,20 @@ enum RecordContinuationState { CONTAINS_START_AND_END = 0b11 }; +enum class ProxyOpMessageType : uint8_t { + PUT_REQUEST = 0x00, + MSG_TO_USR = 0x01, + FS_REQUEST = 0x02, + FAULT_HANDLER_OVERRIDE = 0x03, + TRANSMISSION_MODE = 0x04, + FLOW_LABEL = 0x05, + SEG_CTRL = 0x06, + PUT_RESPONSE = 0x07, + FS_RESPONSE = 0x08, + PUT_CANCEL = 0x09, + CLOSURE = 0x0b +}; + } // namespace cfdp #endif /* FSFW_SRC_FSFW_CFDP_PDU_DEFINITIONS_H_ */ diff --git a/src/fsfw/cfdp/handler/MsgToUserParser.cpp b/src/fsfw/cfdp/handler/MsgToUserParser.cpp index 6477a37a..c5efe91d 100644 --- a/src/fsfw/cfdp/handler/MsgToUserParser.cpp +++ b/src/fsfw/cfdp/handler/MsgToUserParser.cpp @@ -1 +1,16 @@ #include "MsgToUserParser.h" + +#include "fsfw/cfdp/tlv/MessageToUserTlv.h" +#include "fsfw/ipc/QueueFactory.h" + +cfdp::MsgsToUserParser::MsgsToUserParser(StorageManagerIF& ipcStore, uint32_t messageQueueDepth) + : ipcStore(ipcStore) { + messageQueue = QueueFactory::instance()->createMessageQueue(messageQueueDepth); +} +ReturnValue_t cfdp::MsgsToUserParser::parseMsgs(const uint8_t* msgsToUserPtr, + size_t sizeOfMessages) { + size_t currentIdx = 0; + while (currentIdx < sizeOfMessages) { + } + return 0; +} diff --git a/src/fsfw/cfdp/handler/MsgToUserParser.h b/src/fsfw/cfdp/handler/MsgToUserParser.h index ca7ac9cd..a5448df2 100644 --- a/src/fsfw/cfdp/handler/MsgToUserParser.h +++ b/src/fsfw/cfdp/handler/MsgToUserParser.h @@ -1,9 +1,24 @@ #pragma once +#include "fsfw/ipc/MessageQueueIF.h" +#include "fsfw/storagemanager/StorageManagerIF.h" + namespace cfdp { +/** + * This class parses messages to user for special CFDP messages and converts them to appropriate + * CFDP requests sent via the IPC store where applicable. It also provides an API to retrieve + * custom messages which are not special CFDP messages from a provided bytestream. + */ class MsgsToUserParser { + public: + MsgsToUserParser(StorageManagerIF& ipcStore, uint32_t queueDepth); + ReturnValue_t parseMsgs(const uint8_t* msgsToUserPtr, size_t sizeOfMessages); + + private: + MessageQueueIF* messageQueue; + StorageManagerIF& ipcStore; }; -} +} // namespace cfdp diff --git a/src/fsfw/cfdp/tlv/MessageToUserTlv.cpp b/src/fsfw/cfdp/tlv/MessageToUserTlv.cpp index 884dff38..ef3ae8f2 100644 --- a/src/fsfw/cfdp/tlv/MessageToUserTlv.cpp +++ b/src/fsfw/cfdp/tlv/MessageToUserTlv.cpp @@ -10,3 +10,14 @@ MessageToUserTlv::MessageToUserTlv(const std::vector& data) MessageToUserTlv::MessageToUserTlv(const uint8_t* value, size_t size) : Tlv(cfdp::TlvType::MSG_TO_USER, value, size) {} + +bool MessageToUserTlv::isReservedCfdpMessage(uint8_t& messageType) const { + if (cfdp::Tlv::getLengthField() < 5) { + return false; + } + if (std::strcmp(reinterpret_cast(getValue()), "cfdp") == 0) { + messageType = getValue()[4]; + return true; + } + return false; +} diff --git a/src/fsfw/cfdp/tlv/MessageToUserTlv.h b/src/fsfw/cfdp/tlv/MessageToUserTlv.h index 0f393a72..64b80d61 100644 --- a/src/fsfw/cfdp/tlv/MessageToUserTlv.h +++ b/src/fsfw/cfdp/tlv/MessageToUserTlv.h @@ -12,6 +12,8 @@ class MessageToUserTlv : public cfdp::Tlv { MessageToUserTlv(const uint8_t* value, size_t size); explicit MessageToUserTlv(const std::vector& data); + bool isReservedCfdpMessage(uint8_t& messageType) const; + private: };