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.cpp b/phosphor-power-sequencer/src/power_control.cpp
index d5810b1..0ce46b8 100644
--- a/phosphor-power-sequencer/src/power_control.cpp
+++ b/phosphor-power-sequencer/src/power_control.cpp
@@ -18,6 +18,8 @@
#include "types.hpp"
+#include <fmt/format.h>
+
#include <phosphor-logging/log.hpp>
#include <sdbusplus/bus.hpp>
#include <sdeventplus/event.hpp>
@@ -33,16 +35,54 @@
PowerControl::PowerControl(sdbusplus::bus::bus& bus,
const sdeventplus::Event& event) :
- bus{bus},
- eventLoop{event}, timer{event, std::bind(&PowerControl::pollPgood, this),
- std::chrono::milliseconds(pollInterval)}
+ PowerObject{bus, POWER_OBJ_PATH, true},
+ bus{bus}, timer{event, std::bind(&PowerControl::pollPgood, this),
+ pollInterval}
{
// Obtain dbus service name
bus.request_name(POWER_IFACE);
}
+int PowerControl::getPgood() const
+{
+ return pgood;
+}
+
+int PowerControl::getPgoodTimeout() const
+{
+ return timeout.count();
+}
+
+int PowerControl::getState() const
+{
+ return state;
+}
+
void PowerControl::pollPgood()
{
}
+void PowerControl::setPgoodTimeout(int t)
+{
+ if (timeout.count() != t)
+ {
+ timeout = std::chrono::seconds(t);
+ emitPropertyChangedSignal("pgood_timeout");
+ }
+}
+
+void PowerControl::setState(int s)
+{
+ if (state == s)
+ {
+ log<level::INFO>(
+ fmt::format("Power already at requested state: {}", state).c_str());
+ return;
+ }
+
+ log<level::INFO>(fmt::format("setState: {}", s).c_str());
+ state = s;
+ emitPropertyChangedSignal("state");
+}
+
} // namespace phosphor::power::sequencer