#include "ImtqAssembly.h" #include using namespace returnvalue; ImtqAssembly::ImtqAssembly(object_id_t objectId) : AssemblyBase(objectId) {} ReturnValue_t ImtqAssembly::commandChildren(Mode_t mode, Submode_t submode) { commandTable[0].setMode(mode); commandTable[0].setSubmode(submode); if (recoveryState == RECOVERY_IDLE) { ReturnValue_t result = checkAndHandleHealthState(mode, submode); if (result == NEED_TO_CHANGE_HEALTH) { return OK; } } HybridIterator iter(commandTable.begin(), commandTable.end()); executeTable(iter); return returnvalue::OK; } ReturnValue_t ImtqAssembly::checkChildrenStateOn(Mode_t wantedMode, Submode_t wantedSubmode) { if (childrenMap[objects::IMTQ_HANDLER].mode != wantedMode) { return NOT_ENOUGH_CHILDREN_IN_CORRECT_STATE; } return returnvalue::OK; } ReturnValue_t ImtqAssembly::isModeCombinationValid(Mode_t mode, Submode_t submode) { if (mode == MODE_ON or mode == DeviceHandlerIF::MODE_NORMAL or mode == MODE_OFF) { return returnvalue::OK; } return returnvalue::FAILED; } ReturnValue_t ImtqAssembly::checkAndHandleHealthState(Mode_t deviceMode, Submode_t deviceSubmode) { HealthState health = healthHelper.healthTable->getHealth(objects::SYRLINKS_HANDLER); if (health == FAULTY or health == PERMANENT_FAULTY) { overwriteDeviceHealth(objects::SYRLINKS_HANDLER, health); return NEED_TO_CHANGE_HEALTH; } else if (health == EXTERNAL_CONTROL) { modeHelper.setForced(true); } return OK; }