pseq: Implement power interface in control app
Have the power control application be an implementer of the power
interface. Override methods and emit signals as appropriate.
Signed-off-by: Jim Wright <jlwright@us.ibm.com>
Change-Id: I96109d3278001c2fe9fd78f69ce69fe83c542ead
diff --git a/phosphor-power-sequencer/src/power_control.hpp b/phosphor-power-sequencer/src/power_control.hpp
index c7c7951..248431a 100644
--- a/phosphor-power-sequencer/src/power_control.hpp
+++ b/phosphor-power-sequencer/src/power_control.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include "power_interface.hpp"
+
#include <sdbusplus/bus.hpp>
#include <sdbusplus/message.hpp>
#include <sdbusplus/server/object.hpp>
@@ -11,12 +13,14 @@
namespace phosphor::power::sequencer
{
+using PowerObject = sdbusplus::server::object::object<PowerInterface>;
+
/**
* @class PowerControl
* This class implements GPIO control of power on / off, and monitoring of the
* chassis power good.
*/
-class PowerControl
+class PowerControl : public PowerObject
{
public:
PowerControl() = delete;
@@ -33,6 +37,21 @@
*/
PowerControl(sdbusplus::bus::bus& bus, const sdeventplus::Event& event);
+ /** @copydoc PowerInterface::getPgood() */
+ int getPgood() const override;
+
+ /** @copydoc PowerInterface::getPgoodTimeout() */
+ int getPgoodTimeout() const override;
+
+ /** @copydoc PowerInterface::getState() */
+ int getState() const override;
+
+ /** @copydoc PowerInterface::setPgoodTimeout() */
+ void setPgoodTimeout(int timeout) override;
+
+ /** @copydoc PowerInterface::setState() */
+ void setState(int state) override;
+
private:
/**
* The D-Bus bus object
@@ -40,9 +59,31 @@
sdbusplus::bus::bus& bus;
/**
- * Event to loop on
+ * Power good
*/
- sdeventplus::Event eventLoop;
+ int pgood{0};
+
+ /**
+ * Power good timeout constant
+ */
+ static constexpr std::chrono::seconds pgoodTimeout{
+ std::chrono::seconds(10)};
+
+ /**
+ * Poll interval constant
+ */
+ static constexpr std::chrono::milliseconds pollInterval{
+ std::chrono::milliseconds(3000)};
+
+ /**
+ * Power state
+ */
+ int state{0};
+
+ /**
+ * Power good timeout
+ */
+ std::chrono::seconds timeout{pgoodTimeout};
/**
* Timer to poll the pgood
@@ -50,11 +91,6 @@
sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic> timer;
/**
- * Poll interval constant
- */
- static constexpr int pollInterval{3000}; // Milliseconds
-
- /**
* Polling method for monitoring the system power good
*/
void pollPgood();