diff --git a/src/fsfw/subsystem/modes/ModeDefinitions.h b/src/fsfw/subsystem/modes/ModeDefinitions.h index ffeace5a..70a66fa6 100644 --- a/src/fsfw/subsystem/modes/ModeDefinitions.h +++ b/src/fsfw/subsystem/modes/ModeDefinitions.h @@ -21,6 +21,7 @@ class ModeListEntry : public SerialLinkedListAdapter, SerializeElement value2 = 0; SerializeElement value3 = 0; SerializeElement value4 = 0; + SerializeElement value5 = 0; ModeListEntry(const ModeListEntry& other) : SerialLinkedListAdapter(), LinkedElement(this) { @@ -28,6 +29,7 @@ class ModeListEntry : public SerialLinkedListAdapter, value2.entry = other.value2.entry; value3.entry = other.value3.entry; value4.entry = other.value4.entry; + value5.entry = other.value5.entry; setLinks(); } @@ -36,6 +38,7 @@ class ModeListEntry : public SerialLinkedListAdapter, this->value2.entry = other.value2.entry; this->value3.entry = other.value3.entry; this->value4.entry = other.value4.entry; + this->value5.entry = other.value5.entry; return *this; } @@ -44,6 +47,7 @@ class ModeListEntry : public SerialLinkedListAdapter, value1.setNext(&value2); value2.setNext(&value3); value3.setNext(&value4); + value4.setNext(&value5); } // for Sequences @@ -80,7 +84,7 @@ class ModeListEntry : public SerialLinkedListAdapter, bool submodesAllowed = (value4.entry & mode::SpecialSubmodeFlags::ALLOWED_MASK) == mode::SpecialSubmodeFlags::ALLOWED_MASK; if (submodesAllowed and mask != nullptr) { - *mask = value3.entry; + *mask = value5.entry; } return submodesAllowed; } @@ -109,14 +113,14 @@ class ModeListEntry : public SerialLinkedListAdapter, */ void enableSubmodeAllowed(uint8_t mask) { value4.entry |= mode::SpecialSubmodeFlags::ALLOWED_MASK; - value3.entry = mask; + value5.entry = mask; } /** * Enforce the equality of submodes for mode checks. This is the default. */ void disableSubmodeAllowed() { value4.entry &= ~mode::SpecialSubmodeFlags::ALLOWED_MASK; - value3.entry = 0; + value5.entry = 0; } }; diff --git a/unittests/subsystem/testModeDef.cpp b/unittests/subsystem/testModeDef.cpp index e5a4e733..758b3301 100644 --- a/unittests/subsystem/testModeDef.cpp +++ b/unittests/subsystem/testModeDef.cpp @@ -16,73 +16,19 @@ TEST_CASE("Mode Definitions", "[mode]") { CHECK(entry.submodesAllowed(&mask) == false); } - SECTION("Inherit submode") { - entry.enableInheritSubmode(); - CHECK(entry.inheritSubmode() == true); - entry.disableInheritSubmode(); - CHECK(entry.inheritSubmode() == false); - } - SECTION("Allowed submode mask") { entry.allowAllSubmodes(); uint8_t mask; CHECK(entry.submodesAllowed(&mask) == true); CHECK(mask == 0xff); - entry.enableSubmodeAllowed(0x32); - CHECK(entry.submodesAllowed(&mask) == true); - CHECK(mask == 0x32); - entry.disableSubmodeAllowed(); - CHECK(entry.submodesAllowed(&mask) == false); } - SECTION("Serialization nominal") { - std::array buf{}; - entry.setObject(0x1f2f3f4f); - entry.setMode(HasModesIF::MODE_ON); - entry.setSubmode(2); - uint8_t* serPtr = buf.data(); - size_t serLen = 0; - REQUIRE(entry.serialize(&serPtr, &serLen, buf.size(), SerializeIF::Endianness::NETWORK) == - returnvalue::OK); - CHECK(buf[0] == 0x1f); - CHECK(buf[1] == 0x2f); - CHECK(buf[2] == 0x3f); - CHECK(buf[3] == 0x4f); - CHECK(buf[4] == 0); - CHECK(buf[5] == 0); - CHECK(buf[6] == 0); - CHECK(buf[7] == HasModesIF::MODE_ON); - CHECK(buf[8] == 2); - CHECK(buf[9] == 0); - } - - SECTION("Serialization inherit submode") { + SECTION("Serialization") { std::array buf{}; entry.setObject(0x1f2f3f4f); entry.setMode(HasModesIF::MODE_ON); entry.setSubmode(2); entry.enableInheritSubmode(); - uint8_t* serPtr = buf.data(); - size_t serLen = 0; - REQUIRE(entry.serialize(&serPtr, &serLen, buf.size(), SerializeIF::Endianness::NETWORK) == - returnvalue::OK); - CHECK(buf[0] == 0x1f); - CHECK(buf[1] == 0x2f); - CHECK(buf[2] == 0x3f); - CHECK(buf[3] == 0x4f); - CHECK(buf[4] == 0); - CHECK(buf[5] == 0); - CHECK(buf[6] == 0); - CHECK(buf[7] == HasModesIF::MODE_ON); - CHECK(buf[8] == 2); - CHECK(buf[9] == mode::SpecialSubmodeFlags::INHERIT); - } - - SECTION("Serialization submode mask") { - std::array buf{}; - entry.setObject(0x1f2f3f4f); - entry.setMode(HasModesIF::MODE_ON); - entry.setSubmode(2); entry.enableSubmodeAllowed(0x1f); uint8_t* serPtr = buf.data(); size_t serLen = 0; @@ -96,7 +42,8 @@ TEST_CASE("Mode Definitions", "[mode]") { CHECK(buf[5] == 0); CHECK(buf[6] == 0); CHECK(buf[7] == HasModesIF::MODE_ON); - CHECK(buf[8] == 0x1f); - CHECK(buf[9] == mode::SpecialSubmodeFlags::ALLOWED_MASK); + CHECK(buf[8] == 2); + CHECK(buf[9] == (mode::SpecialSubmodeFlags::ALLOWED_MASK | mode::SpecialSubmodeFlags::INHERIT)); + CHECK(buf[10] == 0x1f); } }