eive-obsw/mission/system/objects/Stack5VHandler.cpp

66 lines
1.7 KiB
C++
Raw Normal View History

2022-12-21 14:11:31 +01:00
#include "Stack5VHandler.h"
2022-12-21 14:34:07 +01:00
Stack5VHandler::Stack5VHandler(PowerSwitchIF& switcher) : switcher(switcher) {
stackLock = MutexFactory::instance()->createMutex();
}
2022-12-21 14:11:31 +01:00
2022-12-21 14:34:07 +01:00
ReturnValue_t Stack5VHandler::deviceToOn(StackCommander commander) {
MutexGuard mg(stackLock);
if (switchIsOn) {
if (commander == StackCommander::PL_PCDU) {
plPcduIsOn = true;
} else {
radSensorIsOn = true;
}
2022-12-21 14:34:07 +01:00
return returnvalue::OK;
}
if (handlerState == HandlerState::SWITCH_PENDING) {
return BUSY;
2022-12-21 14:34:07 +01:00
}
return switcher.sendSwitchCommand(stackSwitch, PowerSwitchIF::SWITCH_ON);
}
2022-12-21 14:11:31 +01:00
2022-12-21 14:34:07 +01:00
ReturnValue_t Stack5VHandler::deviceToOff(StackCommander commander) {
MutexGuard mg(stackLock);
2022-12-21 14:43:12 +01:00
if (not switchIsOn) {
if (commander == StackCommander::PL_PCDU) {
plPcduIsOn = false;
} else {
radSensorIsOn = false;
}
2022-12-21 14:34:07 +01:00
return returnvalue::OK;
}
if (handlerState == HandlerState::SWITCH_PENDING) {
return BUSY;
}
if ((commander == StackCommander::PL_PCDU and radSensorIsOn) or
(commander == StackCommander::RAD_SENSOR and plPcduIsOn)) {
return returnvalue::OK;
2022-12-21 14:34:07 +01:00
}
2022-12-21 14:34:07 +01:00
return switcher.sendSwitchCommand(stackSwitch, PowerSwitchIF::SWITCH_OFF);
}
2022-12-21 14:11:31 +01:00
2022-12-21 14:34:07 +01:00
bool Stack5VHandler::isSwitchOn() {
MutexGuard mg(stackLock);
if (switcher.getSwitchState(stackSwitch) == PowerSwitchIF::SWITCH_ON) {
2022-12-21 14:43:12 +01:00
if (not switchIsOn) {
if (handlerState == HandlerState::SWITCH_PENDING) {
handlerState = HandlerState::IDLE;
}
switchIsOn = true;
}
2022-12-21 14:34:07 +01:00
return true;
2022-12-21 14:43:12 +01:00
} else {
if (switchIsOn) {
if (handlerState == HandlerState::SWITCH_PENDING) {
handlerState = HandlerState::IDLE;
}
switchIsOn = false;
}
radSensorIsOn = false;
plPcduIsOn = false;
2022-12-21 14:34:07 +01:00
}
return false;
}