From 4dc6398fd5b1f3599f3961c4a34dfe0994eb42a4 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 17 Jul 2023 15:11:51 +0200 Subject: [PATCH] continue source FSM --- src/fsfw/cfdp/handler/SourceHandler.cpp | 42 ++++++++++++++++++++++--- src/fsfw/cfdp/handler/SourceHandler.h | 3 ++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/fsfw/cfdp/handler/SourceHandler.cpp b/src/fsfw/cfdp/handler/SourceHandler.cpp index 85dfcef9..a3c92b3b 100644 --- a/src/fsfw/cfdp/handler/SourceHandler.cpp +++ b/src/fsfw/cfdp/handler/SourceHandler.cpp @@ -14,6 +14,7 @@ cfdp::SourceHandler::SourceHandler(SourceHandlerParams params, FsfwParams fsfwPa fsfwParams(fsfwParams) {} void cfdp::SourceHandler::fsmNacked() { + ReturnValue_t result; if (step == TransactionStep::IDLE) { step = TransactionStep::TRANSACTION_START; } @@ -22,26 +23,41 @@ void cfdp::SourceHandler::fsmNacked() { step = TransactionStep::CRC_PROCEDURE; } if (step == TransactionStep::CRC_PROCEDURE) { - ReturnValue_t result = checksumGeneration(); + result = checksumGeneration(); if (result != OK) { // TODO: Some error handling } step = TransactionStep::SENDING_METADATA; } if (step == TransactionStep::SENDING_METADATA) { - // TODO: Prepare and send metadata PDU + result = prepareAndSendMetadataPdu(); + if (result != OK) { + // TODO: Error handling + } } if (step == TransactionStep::SENDING_FILE_DATA) { - // TODO: Prepare and send file data PDUs + result = prepareNextFileDataPdu(); + if (result != OK) { + // TODO: Error handling + } } if (step == TransactionStep::SENDING_EOF) { - // TODO: Send EOF PDU + result = prepareEofPdu(); + if (result != OK) { + // TODO: Error handling + } } if (step == TransactionStep::WAIT_FOR_FINISH) { // TODO: In case this is a request with closure, wait for finish. + // Done, issue notice of completion + step = TransactionStep::NOTICE_OF_COMPLETION; } if (step == TransactionStep::NOTICE_OF_COMPLETION) { // TODO: Notice of completion + // We are done, go back to idle state. + // TODO: Possible reset state? + step = TransactionStep::IDLE; + state = CfdpState::IDLE; } } void cfdp::SourceHandler::stateMachine() { @@ -110,3 +126,21 @@ ReturnValue_t cfdp::SourceHandler::putRequest(PutRequestFull& putRequest, Remote currentRemoteCfg = cfg; return OK; } + +ReturnValue_t cfdp::SourceHandler::prepareAndSendMetadataPdu() { + // TODO: Implement + // Advance FSM if everythings works + step = TransactionStep::SENDING_FILE_DATA; + return OK; +} +ReturnValue_t cfdp::SourceHandler::prepareNextFileDataPdu() { + // TODO: Implement + // Advance FSM after all file data PDUs were sent + step = TransactionStep::SENDING_EOF; + return OK; +} +ReturnValue_t cfdp::SourceHandler::prepareEofPdu() { + // TODO: Implement + step = TransactionStep::WAIT_FOR_FINISH; + return OK; +} diff --git a/src/fsfw/cfdp/handler/SourceHandler.h b/src/fsfw/cfdp/handler/SourceHandler.h index 4f15c39e..36949aac 100644 --- a/src/fsfw/cfdp/handler/SourceHandler.h +++ b/src/fsfw/cfdp/handler/SourceHandler.h @@ -67,6 +67,9 @@ class SourceHandler { void fsmNacked(); ReturnValue_t checksumGeneration(); + ReturnValue_t prepareAndSendMetadataPdu(); + ReturnValue_t prepareNextFileDataPdu(); + ReturnValue_t prepareEofPdu(); }; } // namespace cfdp