diff --git a/src/fsfw/cfdp/tlv/ReservedMessageCreator.cpp b/src/fsfw/cfdp/tlv/ReservedMessageCreator.cpp index a4ce0a99..5eaf72c6 100644 --- a/src/fsfw/cfdp/tlv/ReservedMessageCreator.cpp +++ b/src/fsfw/cfdp/tlv/ReservedMessageCreator.cpp @@ -3,18 +3,32 @@ 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; } + **buffer = TlvType::MSG_TO_USER; + *buffer += 1; + *size += 1; + **buffer = getSerializedSize() - 1; + *size += 1; + *buffer += 1; + std::memcpy(*buffer, MSG_HEADER, 4); + *buffer += 4; + *size += 4; + **buffer = messageType; + *buffer += 1; + *size += 1; + std::memcpy(*buffer, msgData, msgSize); 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; + // 2 bytes type and length, 4 bytes CFDP, 1 byte reserved message type, message data. + return 2 + 5 + msgSize; } ReturnValue_t cfdp::ReservedMessageCreator::deSerialize(const uint8_t **buffer, size_t *size, diff --git a/src/fsfw/cfdp/tlv/ReservedMessageCreator.h b/src/fsfw/cfdp/tlv/ReservedMessageCreator.h index 89878635..363791c8 100644 --- a/src/fsfw/cfdp/tlv/ReservedMessageCreator.h +++ b/src/fsfw/cfdp/tlv/ReservedMessageCreator.h @@ -6,6 +6,8 @@ namespace cfdp { class ReservedMessageCreator : public SerializeIF { public: + static constexpr char MSG_HEADER[] = "cfdp"; + 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;