#ifndef MISSION_SYSTEM_OBJECTS_STACK5VHANDLER_H_ #define MISSION_SYSTEM_OBJECTS_STACK5VHANDLER_H_ #include #include enum class StackCommander { RAD_SENSOR = 0, PL_PCDU = 1 }; enum class HandlerState { SWITCH_PENDING, IDLE }; class Stack5VHandler { public: //! [EXPORT] : [SKIP] static constexpr ReturnValue_t BUSY = returnvalue::makeCode(1, 0); Stack5VHandler(PowerSwitchIF& switcher); ReturnValue_t deviceToOn(StackCommander commander, bool updateStates); ReturnValue_t deviceToOff(StackCommander commander, bool updateStates); bool isSwitchOn(); void update(); private: static constexpr MutexIF::TimeoutType LOCK_TYPE = MutexIF::TimeoutType::WAITING; static constexpr uint32_t LOCK_TIMEOUT = 20; MutexIF* stackLock; static constexpr char LOCK_CTX[] = "Stack5VHandler"; PowerSwitchIF& switcher; bool switchIsOn = false; bool targetState = false; HandlerState handlerState = HandlerState::IDLE; bool radSensorIsOn = false; bool plPcduIsOn = false; power::Switches stackSwitch = power::Switches::P60_DOCK_5V_STACK; bool updateInternalStates(); }; #endif /* MISSION_SYSTEM_OBJECTS_STACK5VHANDLER_H_ */