#include "StrAssembly.h" #include #include "mission/acs/str/strHelpers.h" StrAssembly::StrAssembly(object_id_t objectId) : AssemblyBase(objectId) { ModeListEntry entry; entry.setObject(objects::STAR_TRACKER); entry.setMode(MODE_OFF); entry.setSubmode(SUBMODE_NONE); commandTable.insert(entry); } ReturnValue_t StrAssembly::commandChildren(Mode_t mode, Submode_t submode) { // To ensure consistent state. commandTable[0].setMode(MODE_OFF); commandTable[0].setSubmode(submode); if (healthHelper.healthTable->getHealth(objects::STAR_TRACKER) != FAULTY) { commandTable[0].setMode(mode); commandTable[0].setSubmode(submode); } HybridIterator iter(commandTable.begin(), commandTable.end()); executeTable(iter); return returnvalue::OK; } ReturnValue_t StrAssembly::checkChildrenStateOn(Mode_t wantedMode, Submode_t wantedSubmode) { if (childrenMap[objects::STAR_TRACKER].mode != wantedMode) { return NOT_ENOUGH_CHILDREN_IN_CORRECT_STATE; } return returnvalue::OK; } ReturnValue_t StrAssembly::isModeCombinationValid(Mode_t mode, Submode_t submode) { if ((mode == DeviceHandlerIF::MODE_NORMAL or mode == MODE_OFF) and submode != SUBMODE_NONE) { return HasModesIF::INVALID_SUBMODE; } if (mode == MODE_ON and (submode != startracker::SUBMODE_BOOTLOADER and submode != startracker::SUBMODE_FIRMWARE)) { return HasModesIF::INVALID_SUBMODE; } return returnvalue::OK; }