From 470f589bde405c39f5a7fbf191b11b8b48058128 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 4 Sep 2023 11:01:55 +0200 Subject: [PATCH] need to rework this fsm.. but works now --- src/fsfw/cfdp/handler/DestHandler.cpp | 11 +++++++++-- src/fsfw/cfdp/handler/DestHandler.h | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/fsfw/cfdp/handler/DestHandler.cpp b/src/fsfw/cfdp/handler/DestHandler.cpp index 65a62663..d9c8793d 100644 --- a/src/fsfw/cfdp/handler/DestHandler.cpp +++ b/src/fsfw/cfdp/handler/DestHandler.cpp @@ -302,9 +302,11 @@ ReturnValue_t cfdp::DestHandler::startTransaction(const MetadataPduReader& reade transactionParams.destName[destNameSize] = '\0'; } + transactionParams.metadataOnly = true; // If both dest name size and source name size are 0, we are dealing with a metadata only PDU, // so there is no need to create a file or truncate an existing file if (destNameSize > 0 and sourceNameSize > 0) { + transactionParams.metadataOnly = false; FilesystemParams fparams(transactionParams.destName.data()); // handling to allow only specifying target directory. Example: // Source path /test/hello.txt, dest path /tmp -> dest path /tmp/hello.txt @@ -341,12 +343,18 @@ ReturnValue_t cfdp::DestHandler::startTransaction(const MetadataPduReader& reade #endif return FAILED; } - fsmRes.step = TransactionStep::TRANSACTION_START; if (reader.getTransmissionMode() == TransmissionMode::UNACKNOWLEDGED) { fsmRes.state = CfdpState::BUSY_CLASS_1_NACKED; } else if (reader.getTransmissionMode() == TransmissionMode::ACKNOWLEDGED) { fsmRes.state = CfdpState::BUSY_CLASS_2_ACKED; } + if (transactionParams.metadataOnly) { + fsmRes.step = TransactionStep::TRANSFER_COMPLETION; + } else { + // Kind of ugly, make FSM working on packet per packet basis.. + fsmRes.step = TransactionStep::TRANSACTION_START; + fsmRes.step = TransactionStep::RECEIVING_FILE_DATA_PDUS; + } auto& info = reader.getGenericInfo(); transactionParams.checksumType = info.getChecksumType(); transactionParams.closureRequested = info.isClosureRequested(); @@ -355,7 +363,6 @@ ReturnValue_t cfdp::DestHandler::startTransaction(const MetadataPduReader& reade transactionParams.transactionId.entityId = transactionParams.pduConf.sourceId; transactionParams.transactionId.seqNum = transactionParams.pduConf.seqNum; transactionParams.fileSize = info.getFileSize(); - fsmRes.step = TransactionStep::RECEIVING_FILE_DATA_PDUS; MetadataRecvdParams params(transactionParams.transactionId, transactionParams.pduConf.sourceId, transactionParams.fileSize); params.destFileName = transactionParams.destName.data(); diff --git a/src/fsfw/cfdp/handler/DestHandler.h b/src/fsfw/cfdp/handler/DestHandler.h index de1104c8..370cb274 100644 --- a/src/fsfw/cfdp/handler/DestHandler.h +++ b/src/fsfw/cfdp/handler/DestHandler.h @@ -125,11 +125,13 @@ class DestHandler { crc = 0; progress = 0; remoteCfg = nullptr; + metadataOnly = false; closureRequested = false; vfsErrorCount = 0; checksumType = ChecksumType::NULL_CHECKSUM; } + bool metadataOnly = false; ChecksumType checksumType = ChecksumType::NULL_CHECKSUM; bool closureRequested = false; uint16_t vfsErrorCount = 0;