From a8bcb9c8cd3f5501dc5fc1c34b9d919a0bc84d67 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 14 Apr 2026 10:09:16 +0200 Subject: [PATCH] add keep alive PDU serializer --- scripts/auto-formatter.sh | 4 ++-- src/fsfw/cfdp/handler/DestHandler.cpp | 19 ++++++++++++++++++- src/fsfw/cfdp/handler/DestHandler.h | 2 ++ src/fsfw/cfdp/pdu/KeepAlivePduCreator.h | 1 + src/fsfw/health/HealthTable.cpp | 4 +--- src/fsfw/subsystem/SubsystemBase.h | 2 +- 6 files changed, 25 insertions(+), 7 deletions(-) diff --git a/scripts/auto-formatter.sh b/scripts/auto-formatter.sh index f7507c55..ee4170f6 100755 --- a/scripts/auto-formatter.sh +++ b/scripts/auto-formatter.sh @@ -18,12 +18,12 @@ else echo "No ${cmake_fmt} tool found, not formatting CMake files" fi -cpp_format="clang-format" +cpp_format="clang-format-19" file_selectors="-iname *.h -o -iname *.cpp -o -iname *.c -o -iname *.tpp" if command -v ${cpp_format} &> /dev/null; then for dir in ${folder_list[@]}; do echo "Auto-formatting ${dir} recursively" - find ${dir} ${file_selectors} | xargs clang-format --style=file -i + find ${dir} ${file_selectors} | xargs ${cpp_format} --style=file -i done else echo "No ${cpp_format} tool found, not formatting C++/C files" diff --git a/src/fsfw/cfdp/handler/DestHandler.cpp b/src/fsfw/cfdp/handler/DestHandler.cpp index 4fdc10e4..974bc335 100644 --- a/src/fsfw/cfdp/handler/DestHandler.cpp +++ b/src/fsfw/cfdp/handler/DestHandler.cpp @@ -9,7 +9,9 @@ #include "fsfw/cfdp/pdu/FileDataReader.h" #include "fsfw/cfdp/pdu/FinishedPduCreator.h" #include "fsfw/cfdp/pdu/HeaderReader.h" +#include "fsfw/cfdp/pdu/KeepAlivePduCreator.h" #include "fsfw/objectmanager.h" +#include "fsfw/returnvalues/returnvalue.h" #include "fsfw/tmtcservices/TmTcMessage.h" using namespace returnvalue; @@ -450,6 +452,19 @@ ReturnValue_t cfdp::DestHandler::noticeOfCompletion() { return OK; } +ReturnValue_t cfdp::DestHandler::sendKeepAlivePdu() { + Fss progress(transactionParams.progress); + KeepAlivePduCreator keepAlivePdu(transactionParams.pduConf, progress); + size_t serLen = 0; + ReturnValue_t result = + keepAlivePdu.serialize(pduBuf.data(), serLen, keepAlivePdu.getSerializedSize()); + if (result != OK) { + return result; + } + return pduSender.sendPdu(PduType::FILE_DIRECTIVE, FileDirective::KEEP_ALIVE, pduBuf.data(), + serLen); +} + ReturnValue_t cfdp::DestHandler::sendFinishedPdu() { FinishedInfo info(transactionParams.conditionCode, transactionParams.deliveryCode, transactionParams.deliveryStatus); @@ -496,6 +511,8 @@ const cfdp::TransactionId& cfdp::DestHandler::getTransactionId() const { return transactionParams.transactionId; } +uint64_t cfdp::DestHandler::getProgress() const { return transactionParams.progress; } + void cfdp::DestHandler::checkAndHandleError(ReturnValue_t result, uint8_t& errorIdx) { if (result != OK and errorIdx < 3) { fsmRes.errorCodes[errorIdx] = result; @@ -509,4 +526,4 @@ void cfdp::DestHandler::setEventReporter(EventReportingProxyIF& reporter) { const cfdp::DestHandlerParams& cfdp::DestHandler::getDestHandlerParams() const { return destParams; -} \ No newline at end of file +} diff --git a/src/fsfw/cfdp/handler/DestHandler.h b/src/fsfw/cfdp/handler/DestHandler.h index 8e483df7..84a989c4 100644 --- a/src/fsfw/cfdp/handler/DestHandler.h +++ b/src/fsfw/cfdp/handler/DestHandler.h @@ -101,6 +101,8 @@ class DestHandler { [[nodiscard]] CfdpState getCfdpState() const; [[nodiscard]] TransactionStep getTransactionStep() const; + [[nodiscard]] uint64_t getProgress() const; + ReturnValue_t sendKeepAlivePdu(); [[nodiscard]] const TransactionId& getTransactionId() const; [[nodiscard]] const DestHandlerParams& getDestHandlerParams() const; diff --git a/src/fsfw/cfdp/pdu/KeepAlivePduCreator.h b/src/fsfw/cfdp/pdu/KeepAlivePduCreator.h index 97ce6095..09d6efda 100644 --- a/src/fsfw/cfdp/pdu/KeepAlivePduCreator.h +++ b/src/fsfw/cfdp/pdu/KeepAlivePduCreator.h @@ -14,6 +14,7 @@ class KeepAlivePduCreator : public FileDirectiveCreator { ReturnValue_t serialize(uint8_t** buffer, size_t* size, size_t maxSize, Endianness streamEndianness) const override; + using FileDirectiveCreator::serialize; private: cfdp::Fss& progress; diff --git a/src/fsfw/health/HealthTable.cpp b/src/fsfw/health/HealthTable.cpp index 46544c4a..a7b9b542 100644 --- a/src/fsfw/health/HealthTable.cpp +++ b/src/fsfw/health/HealthTable.cpp @@ -113,6 +113,4 @@ ReturnValue_t HealthTable::iterate(HealthEntry* value, bool reset) { return result; } -MutexIF* HealthTable::getMutex() { - return mutex; -} +MutexIF* HealthTable::getMutex() { return mutex; } diff --git a/src/fsfw/subsystem/SubsystemBase.h b/src/fsfw/subsystem/SubsystemBase.h index e8a2f72d..8e574909 100644 --- a/src/fsfw/subsystem/SubsystemBase.h +++ b/src/fsfw/subsystem/SubsystemBase.h @@ -114,7 +114,7 @@ class SubsystemBase : public SystemObject, * Still, we have a default for all child implementations which do not use submode inheritance */ virtual void executeTable(HybridIterator tableIter, - Submode_t targetSubmode = SUBMODE_NONE); + Submode_t targetSubmode = SUBMODE_NONE); ReturnValue_t updateChildMode(MessageQueueId_t queue, Mode_t mode, Submode_t submode); ReturnValue_t updateChildModeByObjId(object_id_t objectId, Mode_t mode, Submode_t submode); -- 2.43.0