#include "SyrlinksAssembly.h" #include using namespace returnvalue; SyrlinksAssembly::SyrlinksAssembly(object_id_t objectId) : AssemblyBase(objectId) {} ReturnValue_t SyrlinksAssembly::commandChildren(Mode_t mode, Submode_t submode) { commandTable[0].setMode(mode); commandTable[0].setSubmode(submode); HybridIterator iter(commandTable.begin(), commandTable.end()); if (recoveryState == RECOVERY_IDLE) { ReturnValue_t result = checkAndHandleHealthState(mode, submode); if (result == NEED_TO_CHANGE_HEALTH) { return OK; } } executeTable(iter); return returnvalue::OK; } ReturnValue_t SyrlinksAssembly::checkChildrenStateOn(Mode_t wantedMode, Submode_t wantedSubmode) { if (childrenMap[objects::SYRLINKS_HANDLER].mode != wantedMode) { return NOT_ENOUGH_CHILDREN_IN_CORRECT_STATE; } return returnvalue::OK; } ReturnValue_t SyrlinksAssembly::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 SyrlinksAssembly::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; }