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