From b54f8e77380706476b2a6ae605518e8a841446ee Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 8 May 2024 10:03:32 +0200 Subject: [PATCH 1/4] some fixes for MPSoC --- linux/payload/FreshMpsocHandler.cpp | 9 +++++++-- linux/payload/PlocMpsocSpecialComHelper.cpp | 3 ++- tmtc | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/linux/payload/FreshMpsocHandler.cpp b/linux/payload/FreshMpsocHandler.cpp index e0bf75e4..299c1540 100644 --- a/linux/payload/FreshMpsocHandler.cpp +++ b/linux/payload/FreshMpsocHandler.cpp @@ -86,7 +86,7 @@ void FreshMpsocHandler::performDefaultDeviceOperation() { // We checked the action queue beforehand, so action commands should always be performed // before normal commands. - if (mode == MODE_NORMAL and not activeCmdInfo.pending) { + if (mode == MODE_NORMAL and not activeCmdInfo.pending and not specialComHelperExecuting) { ReturnValue_t result = commandTcGetHkReport(); if (result == returnvalue::OK) { commandInitHandling(mpsoc::TC_GET_HK_REPORT, MessageQueueIF::NO_QUEUE); @@ -763,7 +763,7 @@ ReturnValue_t FreshMpsocHandler::commandTcSimplexStreamFile(const uint8_t* comma } ReturnValue_t FreshMpsocHandler::commandTcSplitFile(const uint8_t* commandData, - size_t commandDataLen) { + size_t commandDataLen) { mpsoc::TcSplitFile tcSplitFile(spParams, commandSequenceCount); ReturnValue_t result = tcSplitFile.setPayload(commandData, commandDataLen); if (result != returnvalue::OK) { @@ -803,6 +803,11 @@ ReturnValue_t FreshMpsocHandler::commandTcModeSnapshot() { ReturnValue_t FreshMpsocHandler::finishAndSendTc(DeviceCommandId_t cmdId, mpsoc::TcBase& tcBase, uint32_t cmdCountdownMs) { + // Emit warning but still send command. + if (specialComHelperExecuting) { + sif::warning << "PLOC MPSoC: Sending command even though special COM helper is executing" + << std::endl; + } ReturnValue_t result = tcBase.finishPacket(); if (result != returnvalue::OK) { return result; diff --git a/linux/payload/PlocMpsocSpecialComHelper.cpp b/linux/payload/PlocMpsocSpecialComHelper.cpp index c3a70cd6..a81f8fd6 100644 --- a/linux/payload/PlocMpsocSpecialComHelper.cpp +++ b/linux/payload/PlocMpsocSpecialComHelper.cpp @@ -179,7 +179,8 @@ ReturnValue_t PlocMpsocSpecialComHelper::performFlashWrite() { ReturnValue_t PlocMpsocSpecialComHelper::performFlashRead() { std::error_code e; - std::ofstream ofile(flashReadAndWrite.obcFile, std::ios::trunc | std::ios::binary); + std::ofstream ofile(flashReadAndWrite.obcFile, + std::ios::trunc | std::ios::binary | std::ios::app); if (ofile.bad()) { return returnvalue::FAILED; } diff --git a/tmtc b/tmtc index 9a06c64d..5cf76c07 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 9a06c64dfac3f4283c2d5af72a9c095f4726480b +Subproject commit 5cf76c07e98494e7e2532c25dbff7753cb675cf5 From 4559d24c62ce1144f1261f3ccd9c16b14062f523 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 8 May 2024 10:04:34 +0200 Subject: [PATCH 2/4] changelog --- CHANGELOG.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dbfe23d..95a48432 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,7 +16,14 @@ will consitute of a breaking change warranting a new major release: # [unreleased] -# [v8.0.0] +# [v8.0.1] 2024-05-08 + +## Fixed + +- MPSoC normal mode: Do not command periodically while a special COM operation is ongoing. +- Possible fix for file read algorithm. + +# [v8.0.0] 2024-05-06 - `eive-tmtc` v7.0.0 From 73279a0bf31898b41d36629d2d3491227b229cc9 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 8 May 2024 10:54:24 +0200 Subject: [PATCH 3/4] minor fix for periodic HK generation --- linux/payload/FreshMpsocHandler.cpp | 8 +++++++- tmtc | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/linux/payload/FreshMpsocHandler.cpp b/linux/payload/FreshMpsocHandler.cpp index 299c1540..62db5aa2 100644 --- a/linux/payload/FreshMpsocHandler.cpp +++ b/linux/payload/FreshMpsocHandler.cpp @@ -337,6 +337,10 @@ void FreshMpsocHandler::startTransition(Mode_t newMode, Submode_t submode) { } else if ((newMode == MODE_ON or newMode == MODE_NORMAL) && ((mode == MODE_OFF) or (mode == MODE_UNDEFINED))) { transitionState = TransitionState::TO_ON; + } else if (mode == MODE_ON && newMode == MODE_NORMAL) { + hkReport.setReportingEnabled(true); + } else if (mode == MODE_NORMAL && newMode == MODE_ON) { + hkReport.setReportingEnabled(false); } else if (newMode == MODE_OFF) { transitionState = TransitionState::TO_OFF; } @@ -372,7 +376,9 @@ void FreshMpsocHandler::handleTransitionToOn() { if (startupState == StartupState::DONE) { setMode(targetMode, targetSubmode); transitionState = TransitionState::NONE; - hkReport.setReportingEnabled(true); + if (targetMode == MODE_NORMAL) { + hkReport.setReportingEnabled(true); + } powerState = PowerState::IDLE; startupState = StartupState::IDLE; } diff --git a/tmtc b/tmtc index 5cf76c07..dccbf89d 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 5cf76c07e98494e7e2532c25dbff7753cb675cf5 +Subproject commit dccbf89da1e2b441a8fc3edc247550ca5dfbd68b From 0b3c92888639d40d9371ee4dfe043ffae4140db2 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 8 May 2024 11:11:21 +0200 Subject: [PATCH 4/4] combining those is acutally problematic.. --- linux/payload/PlocMpsocSpecialComHelper.cpp | 9 ++++++--- tmtc | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/linux/payload/PlocMpsocSpecialComHelper.cpp b/linux/payload/PlocMpsocSpecialComHelper.cpp index a81f8fd6..0af2c3d5 100644 --- a/linux/payload/PlocMpsocSpecialComHelper.cpp +++ b/linux/payload/PlocMpsocSpecialComHelper.cpp @@ -179,9 +179,12 @@ ReturnValue_t PlocMpsocSpecialComHelper::performFlashWrite() { ReturnValue_t PlocMpsocSpecialComHelper::performFlashRead() { std::error_code e; - std::ofstream ofile(flashReadAndWrite.obcFile, - std::ios::trunc | std::ios::binary | std::ios::app); - if (ofile.bad()) { + if (std::filesystem::exists(flashReadAndWrite.obcFile)) { + // Truncate the file first. + std::ofstream ofile(flashReadAndWrite.obcFile, std::ios::binary | std::ios::trunc); + } + std::ofstream ofile(flashReadAndWrite.obcFile, std::ios::binary | std::ios::app); + if (ofile.bad() or not ofile.is_open()) { return returnvalue::FAILED; } ReturnValue_t result = flashfopen(mpsoc::FileAccessModes::READ); diff --git a/tmtc b/tmtc index dccbf89d..067a0160 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit dccbf89da1e2b441a8fc3edc247550ca5dfbd68b +Subproject commit 067a0160405bcf53659072749eddbb7ad7f1d41c