1 #pragma once 2 3 #include <sdbusplus/bus.hpp> 4 #include <sdbusplus/message.hpp> 5 #include <sdbusplus/server/object.hpp> 6 #include <sdeventplus/event.hpp> 7 #include <sdeventplus/utility/timer.hpp> 8 9 #include <chrono> 10 11 namespace phosphor::power::sequencer 12 { 13 14 /** 15 * @class PowerControl 16 * This class implements GPIO control of power on / off, and monitoring of the 17 * chassis power good. 18 */ 19 class PowerControl 20 { 21 public: 22 PowerControl() = delete; 23 PowerControl(const PowerControl&) = delete; 24 PowerControl& operator=(const PowerControl&) = delete; 25 PowerControl(PowerControl&&) = delete; 26 PowerControl& operator=(PowerControl&&) = delete; 27 ~PowerControl() = default; 28 29 /** 30 * Creates a controller object for power on and off. 31 * @param[in] bus D-Bus bus object 32 * @param[in] event event object 33 */ 34 PowerControl(sdbusplus::bus::bus& bus, const sdeventplus::Event& event); 35 36 private: 37 /** 38 * The D-Bus bus object 39 */ 40 sdbusplus::bus::bus& bus; 41 42 /** 43 * Event to loop on 44 */ 45 sdeventplus::Event eventLoop; 46 47 /** 48 * Timer to poll the pgood 49 */ 50 sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic> timer; 51 52 /** 53 * Poll interval constant 54 */ 55 static constexpr int pollInterval{3000}; // Milliseconds 56 57 /** 58 * Polling method for monitoring the system power good 59 */ 60 void pollPgood(); 61 }; 62 63 } // namespace phosphor::power::sequencer 64