fsfw/src/fsfw/power/PowerSwitcher.h

47 lines
1.4 KiB
C
Raw Normal View History

2020-12-03 18:29:28 +01:00
#ifndef FSFW_POWER_POWERSWITCHER_H_
#define FSFW_POWER_POWERSWITCHER_H_
#include "../objectmanager/SystemObjectIF.h"
2022-08-16 12:48:22 +02:00
#include "../returnvalues/returnvalue.h"
2020-08-13 20:53:35 +02:00
#include "../timemanager/Countdown.h"
2022-02-02 10:29:30 +01:00
#include "PowerSwitchIF.h"
2022-08-15 20:28:16 +02:00
class PowerSwitcher {
2022-02-02 10:29:30 +01:00
public:
enum State_t {
WAIT_OFF,
WAIT_ON,
SWITCH_IS_OFF,
SWITCH_IS_ON,
};
2022-03-28 12:48:15 +02:00
2022-02-02 10:29:30 +01:00
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);
2022-04-01 16:40:13 +02:00
PowerSwitcher(PowerSwitchIF* switcher, power::Switch_t setSwitch1,
power::Switch_t setSwitch2 = power::NO_SWITCH,
2022-02-02 10:29:30 +01:00
State_t setStartState = SWITCH_IS_OFF);
2022-03-28 12:48:15 +02:00
void turnOn(bool checkCurrentState = true);
void turnOff(bool checkCurrentState = true);
bool active();
2022-02-02 10:29:30 +01:00
void doStateMachine();
State_t getState();
ReturnValue_t checkSwitchState();
uint32_t getSwitchDelay();
2022-03-28 12:48:15 +02:00
power::Switch_t getFirstSwitch() const;
power::Switch_t getSecondSwitch() const;
2022-02-02 10:29:30 +01:00
private:
PowerSwitchIF* power = nullptr;
2022-03-28 12:48:15 +02:00
State_t state;
power::Switch_t firstSwitch = power::NO_SWITCH;
power::Switch_t secondSwitch = power::NO_SWITCH;
2022-02-02 10:29:30 +01:00
enum SwitchReturn_t { ONE_SWITCH = 1, TWO_SWITCHES = 2 };
ReturnValue_t getStateOfSwitches();
void commandSwitches(ReturnValue_t onOff);
SwitchReturn_t howManySwitches();
};
2020-12-03 18:29:28 +01:00
#endif /* FSFW_POWER_POWERSWITCHER_H_ */