From 2374dea493611ed356c1769442a2ba14bbc61045 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Thu, 9 Mar 2023 20:44:55 +0100 Subject: [PATCH] return whether file was swapped --- mission/tmtc/PersistentTmStore.cpp | 4 +++- mission/tmtc/PersistentTmStore.h | 2 +- mission/tmtc/TmStoreTaskBase.cpp | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/mission/tmtc/PersistentTmStore.cpp b/mission/tmtc/PersistentTmStore.cpp index c95ca9b9..abf7d159 100644 --- a/mission/tmtc/PersistentTmStore.cpp +++ b/mission/tmtc/PersistentTmStore.cpp @@ -222,7 +222,7 @@ ReturnValue_t PersistentTmStore::loadNextDumpFile() { return returnvalue::OK; } -ReturnValue_t PersistentTmStore::dumpNextPacket(DirectTmSinkIF& tmSink, size_t& dumpedLen) { +ReturnValue_t PersistentTmStore::dumpNextPacket(DirectTmSinkIF& tmSink, size_t& dumpedLen, bool& fileHasSwapped) { if (state == State::IDLE) { return returnvalue::FAILED; } @@ -239,6 +239,7 @@ ReturnValue_t PersistentTmStore::dumpNextPacket(DirectTmSinkIF& tmSink, size_t& dumpParams.currentSize += reader.getFullPacketLen(); dumpedLen = reader.getFullPacketLen(); if (dumpParams.currentSize >= dumpParams.fileSize) { + fileHasSwapped = true; return loadNextDumpFile(); } } else { @@ -248,6 +249,7 @@ ReturnValue_t PersistentTmStore::dumpNextPacket(DirectTmSinkIF& tmSink, size_t& // restore the file dump, but for now do not trust the file. dumpedLen = 0; std::remove(dumpParams.dirEntry.path().c_str()); + fileHasSwapped = true; return loadNextDumpFile(); } return returnvalue::OK; diff --git a/mission/tmtc/PersistentTmStore.h b/mission/tmtc/PersistentTmStore.h index e5d7111d..3274a64c 100644 --- a/mission/tmtc/PersistentTmStore.h +++ b/mission/tmtc/PersistentTmStore.h @@ -66,7 +66,7 @@ class PersistentTmStore : public TmStoreFrontendSimpleIF, public SystemObject { void deleteUpTo(uint32_t unixSeconds); ReturnValue_t startDumpFrom(uint32_t fromUnixSeconds); ReturnValue_t startDumpFromUpTo(uint32_t fromUnixSeconds, uint32_t upToUnixSeconds); - ReturnValue_t dumpNextPacket(DirectTmSinkIF& tmSink, size_t& dumpedLen); + ReturnValue_t dumpNextPacket(DirectTmSinkIF& tmSink, size_t& dumpedLen, bool& fileHasSwapped); ReturnValue_t storePacket(PusTmReader& reader); diff --git a/mission/tmtc/TmStoreTaskBase.cpp b/mission/tmtc/TmStoreTaskBase.cpp index 325dc77c..c0809d90 100644 --- a/mission/tmtc/TmStoreTaskBase.cpp +++ b/mission/tmtc/TmStoreTaskBase.cpp @@ -23,9 +23,11 @@ bool TmStoreTaskBase::handleOneStore(PersistentTmStoreWithTmQueue& store) { // Dump TMs when applicable if (store.getState() == PersistentTmStore::State::DUMPING) { size_t dumpedLen; + bool fileHasSwapped; // TODO: Maybe do a bit of a delay every 100-200 packets? + // TODO: We could continously dump until a file swap during active downlink.. // TODO: handle returnvalue? - result = store.dumpNextPacket(channel, dumpedLen); + result = store.dumpNextPacket(channel, dumpedLen, fileHasSwapped); if (result == returnvalue::OK) { dumpsPerformed = true; }