fsfw/src/fsfw/power/PowerSwitcher.h

47 lines
1.4 KiB
C++

#ifndef FSFW_POWER_POWERSWITCHER_H_
#define FSFW_POWER_POWERSWITCHER_H_
#include "../objectmanager/SystemObjectIF.h"
#include "../returnvalues/returnvalue.h"
#include "../timemanager/Countdown.h"
#include "PowerSwitchIF.h"
class PowerSwitcher {
public:
enum State_t {
WAIT_OFF,
WAIT_ON,
SWITCH_IS_OFF,
SWITCH_IS_ON,
};
static const uint8_t INTERFACE_ID = CLASS_ID::POWER_SWITCHER;
static const ReturnValue_t IN_POWER_TRANSITION = MAKE_RETURN_CODE(1);
static const ReturnValue_t SWITCH_STATE_MISMATCH = MAKE_RETURN_CODE(2);
PowerSwitcher(PowerSwitchIF* switcher, power::Switch_t setSwitch1,
power::Switch_t setSwitch2 = power::NO_SWITCH,
State_t setStartState = SWITCH_IS_OFF);
void turnOn(bool checkCurrentState = true);
void turnOff(bool checkCurrentState = true);
bool active();
void doStateMachine();
State_t getState();
ReturnValue_t checkSwitchState();
uint32_t getSwitchDelay();
power::Switch_t getFirstSwitch() const;
power::Switch_t getSecondSwitch() const;
private:
PowerSwitchIF* power = nullptr;
State_t state;
power::Switch_t firstSwitch = power::NO_SWITCH;
power::Switch_t secondSwitch = power::NO_SWITCH;
enum SwitchReturn_t { ONE_SWITCH = 1, TWO_SWITCHES = 2 };
ReturnValue_t getStateOfSwitches();
void commandSwitches(ReturnValue_t onOff);
SwitchReturn_t howManySwitches();
};
#endif /* FSFW_POWER_POWERSWITCHER_H_ */