From af58c414fc40f6151ecb3df3803f9820290e5399 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 7 Mar 2023 16:29:10 +0100 Subject: [PATCH] bugfix in submode check logic --- src/fsfw/subsystem/SubsystemBase.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/fsfw/subsystem/SubsystemBase.cpp b/src/fsfw/subsystem/SubsystemBase.cpp index 560cb769..a876ae33 100644 --- a/src/fsfw/subsystem/SubsystemBase.cpp +++ b/src/fsfw/subsystem/SubsystemBase.cpp @@ -25,13 +25,18 @@ ReturnValue_t SubsystemBase::checkStateAgainstTable(HybridIterator::iterator childIter; auto checkSubmode = [&]() { + uint8_t mask; + bool submodesAllowedMask = tableIter.value->submodesAllowed(&mask); + uint8_t submodeToCheckAgainst = tableIter.value->getSubmode(); if (tableIter.value->inheritSubmode()) { - if (childIter->second.submode != targetSubmode) { + submodeToCheckAgainst = targetSubmode; + } + if (not submodesAllowedMask) { + if (childIter->second.submode != submodeToCheckAgainst) { return returnvalue::FAILED; } } - uint8_t mask; - if (tableIter.value->submodesAllowed(&mask)) { + if (submodesAllowedMask) { if ((childIter->second.submode | mask) != mask) { return returnvalue::FAILED; }