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();