#ifndef POWERSWITCHER_H_ #define POWERSWITCHER_H_ #include "PowerSwitchIF.h" #include "../returnvalues/HasReturnvaluesIF.h" #include "../timemanager/Countdown.h" class PowerSwitcher : public HasReturnvaluesIF { public: enum State_t { WAIT_OFF, WAIT_ON, SWITCH_IS_OFF, SWITCH_IS_ON, }; State_t state; 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( uint8_t setSwitch1, uint8_t setSwitch2 = NO_SWITCH, State_t setStartState = SWITCH_IS_OFF ); ReturnValue_t initialize(object_id_t powerSwitchId); void turnOn(); void turnOff(); void doStateMachine(); State_t getState(); ReturnValue_t checkSwitchState(); uint32_t getSwitchDelay(); uint8_t getFirstSwitch() const; uint8_t getSecondSwitch() const; private: uint8_t firstSwitch; uint8_t secondSwitch; PowerSwitchIF* power; static const uint8_t NO_SWITCH = 0xFF; enum SwitchReturn_t { ONE_SWITCH = 1, TWO_SWITCHES = 2 }; ReturnValue_t getStateOfSwitches(); void commandSwitches( ReturnValue_t onOff ); SwitchReturn_t howManySwitches(); }; #endif /* POWERSWITCHER_H_ */