diff --git a/src/fsfw/cfdp/CfdpMessage.cpp b/src/fsfw/cfdp/CfdpMessage.cpp index ea4e2c98..f5bff8fd 100644 --- a/src/fsfw/cfdp/CfdpMessage.cpp +++ b/src/fsfw/cfdp/CfdpMessage.cpp @@ -4,8 +4,9 @@ CfdpMessage::CfdpMessage() = default; CfdpMessage::~CfdpMessage() = default; -void CfdpMessage::setCommand(CommandMessage *message, store_address_t cfdpPacket) { - message->setParameter(cfdpPacket.raw); +void CfdpMessage::setPutRequest(CommandMessage *message, store_address_t putRequest) { + message->setCommand(PUT_REQUEST); + message->setParameter(putRequest.raw); } store_address_t CfdpMessage::getStoreId(const CommandMessage *message) { diff --git a/src/fsfw/cfdp/CfdpMessage.h b/src/fsfw/cfdp/CfdpMessage.h index a3ee9421..b75902eb 100644 --- a/src/fsfw/cfdp/CfdpMessage.h +++ b/src/fsfw/cfdp/CfdpMessage.h @@ -11,9 +11,11 @@ class CfdpMessage { public: static const uint8_t MESSAGE_ID = messagetypes::CFDP; + static const Command_t PUT_REQUEST = MAKE_COMMAND_ID(1); + static const Command_t CANCEL_REQUEST = MAKE_COMMAND_ID(1); virtual ~CfdpMessage(); - static void setCommand(CommandMessage* message, store_address_t cfdpPacket); + static void setPutRequest(CommandMessage* message, store_address_t putRequest); static store_address_t getStoreId(const CommandMessage* message); diff --git a/src/fsfw/cfdp/handler/PutRequest.cpp b/src/fsfw/cfdp/handler/PutRequest.cpp index 9c8677cd..fa84592e 100644 --- a/src/fsfw/cfdp/handler/PutRequest.cpp +++ b/src/fsfw/cfdp/handler/PutRequest.cpp @@ -11,7 +11,7 @@ ReturnValue_t cfdp::PutRequest::serialize(uint8_t **buffer, size_t *size, size_t if (result != OK) { return result; } - if (*size + 1 > maxSize) { + if (*size + getSerializedSize() > maxSize) { return SerializeIF::BUFFER_TOO_SHORT; } **buffer = metadataOnly; @@ -26,9 +26,6 @@ ReturnValue_t cfdp::PutRequest::serialize(uint8_t **buffer, size_t *size, size_t if (result != OK) { return result; } - if (*size + sourceNameSize > maxSize) { - return SerializeIF::BUFFER_TOO_SHORT; - } std::memcpy(*buffer, sourceName, sourceNameSize); *buffer += sourceNameSize; *size += sourceNameSize; @@ -36,9 +33,6 @@ ReturnValue_t cfdp::PutRequest::serialize(uint8_t **buffer, size_t *size, size_t if (result != OK) { return result; } - if (*size + destNameSize > maxSize) { - return SerializeIF::BUFFER_TOO_SHORT; - } std::memcpy(*buffer, destName, destNameSize); *buffer += destNameSize; *size += destNameSize; @@ -62,9 +56,6 @@ ReturnValue_t cfdp::PutRequest::serialize(uint8_t **buffer, size_t *size, size_t if (result != OK) { return result; } - if (*size + msgsToUsersTotalSize > maxSize) { - return SerializeIF::BUFFER_TOO_SHORT; - } std::memcpy(*buffer, messagesToUserStartPtr, msgsToUsersTotalSize); *buffer += msgsToUsersTotalSize; *size += msgsToUsersTotalSize; @@ -78,9 +69,6 @@ ReturnValue_t cfdp::PutRequest::serialize(uint8_t **buffer, size_t *size, size_t if (result != OK) { return result; } - if (*size + fsRequestsTotalSize > maxSize) { - return SerializeIF::BUFFER_TOO_SHORT; - } std::memcpy(*buffer, fsRequest, fsRequestsTotalSize); *buffer += fsRequestsTotalSize; *size += fsRequestsTotalSize; @@ -91,4 +79,12 @@ ReturnValue_t cfdp::PutRequest::deSerialize(const uint8_t **buffer, size_t *size SerializeIF::Endianness streamEndianness) { return OK; } -size_t cfdp::PutRequest::getSerializedSize() const { return 0; } +size_t cfdp::PutRequest::getSerializedSize() const { + size_t baseSize = destId.getSerializedSize() + 1; + if (!metadataOnly) { + baseSize += sizeof(sourceNameSize) + sourceNameSize + sizeof(destNameSize) + destNameSize + 2; + } + baseSize += sizeof(msgsToUsersTotalSize) + sizeof(numOfMsgsToUser) + msgsToUsersTotalSize + + sizeof(fsRequestsTotalSize) + sizeof(numOfFsRequests) + fsRequestsTotalSize; + return baseSize; +}