From 85d0ffed0dab3b7563f3cfd05aa7ccdcfa34e6f3 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 16 Apr 2024 17:40:13 +0200 Subject: [PATCH] implement transitions --- linux/payload/FreshMpsocHandler.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/linux/payload/FreshMpsocHandler.cpp b/linux/payload/FreshMpsocHandler.cpp index e979600f..64134fef 100644 --- a/linux/payload/FreshMpsocHandler.cpp +++ b/linux/payload/FreshMpsocHandler.cpp @@ -53,6 +53,7 @@ void FreshMpsocHandler::performDeviceOperation(uint8_t opCode) { void FreshMpsocHandler::performDefaultDeviceOperation() { handleQueue(); if (transitionActive) { + // TODO: Timeout handling for transitions. if (targetMode == MODE_ON or targetMode == MODE_NORMAL) { handleTransitionToOn(); } else if (targetMode == MODE_OFF) { @@ -276,7 +277,15 @@ ReturnValue_t FreshMpsocHandler::executeAction(ActionId_t actionId, MessageQueue * @overload * @param submode */ -void FreshMpsocHandler::startTransition(Mode_t newMode, Submode_t submode) {} +void FreshMpsocHandler::startTransition(Mode_t newMode, Submode_t submode) { + // OFF commands are always accepted. Otherwise, ignore transition requests. + if (transitionActive && newMode != HasModesIF::MODE_OFF) { + return; + } + targetMode = newMode; + targetSubmode = submode; + transitionActive = true; +} ReturnValue_t FreshMpsocHandler::performDeviceOperationPreQueueHandling(uint8_t opCode) { return returnvalue::OK; @@ -293,6 +302,7 @@ void FreshMpsocHandler::handleTransitionToOn() { } if (startupState == StartupState::DONE) { setMode(MODE_ON); + transitionActive = false; hkReport.setReportingEnabled(true); powerState = PowerState::IDLE; startupState = StartupState::IDLE; @@ -303,6 +313,7 @@ void FreshMpsocHandler::handleTransitionToOff() { if (handleHwShutdown()) { hkReport.setReportingEnabled(false); setMode(MODE_OFF); + transitionActive = false; // commandIsPending = false; // sequenceCount = 0; powerState = PowerState::IDLE;