Use pgood signal to keep internal state updated
Change-Id: I35a2e67afc877488ceb1a0e0255b99b9db792201
Signed-off-by: Andrew Geissler <andrewg@us.ibm.com>
diff --git a/chassis_state_manager.cpp b/chassis_state_manager.cpp
index 91a35d0..a2b6dbf 100644
--- a/chassis_state_manager.cpp
+++ b/chassis_state_manager.cpp
@@ -13,6 +13,31 @@
using namespace phosphor::logging;
+/* TODO:Issue 774 - Use systemd target signals to control chassis state */
+int Chassis::handlePgoodOn(sd_bus_message* /*msg*/, void* usrData,
+ sd_bus_error* retError)
+{
+ log<level::INFO>("Pgood has turned on",
+ entry("CHASSIS_CURRENT_POWER_STATE=%s",
+ convertForMessage(PowerState::On).c_str()));
+ auto chassisInst = static_cast<Chassis*>(usrData);
+ chassisInst->currentPowerState(PowerState::On);
+
+ return 0;
+}
+
+int Chassis::handlePgoodOff(sd_bus_message* /*msg*/, void* usrData,
+ sd_bus_error* retError)
+{
+ log<level::INFO>("Pgood has turned off",
+ entry("CHASSIS_CURRENT_POWER_STATE=%s",
+ convertForMessage(PowerState::Off).c_str()));
+ auto chassisInst = static_cast<Chassis*>(usrData);
+ chassisInst->currentPowerState(PowerState::Off);
+
+ return 0;
+}
+
// TODO - Will be rewritten once sdbusplus client bindings are in place
// and persistent storage design is in place and sdbusplus
// has read property function
diff --git a/chassis_state_manager.hpp b/chassis_state_manager.hpp
index af3445d..16456bf 100644
--- a/chassis_state_manager.hpp
+++ b/chassis_state_manager.hpp
@@ -35,7 +35,15 @@
sdbusplus::server::object::object<
sdbusplus::xyz::openbmc_project::State::server::Chassis>(
bus, objPath, true),
- bus(bus)
+ bus(bus),
+ pgoodOn(bus,
+ "type='signal',member='PowerGood'",
+ Chassis::handlePgoodOn,
+ this),
+ pgoodOff(bus,
+ "type='signal',member='PowerLost'",
+ Chassis::handlePgoodOff,
+ this)
{
determineInitialState();
@@ -53,8 +61,40 @@
PowerState currentPowerState(PowerState value) override;
private:
+ /** @brief Callback function for pgood going to on state
+ *
+ * Update chassis object state to reflect pgood going to on state
+ *
+ * @param[in] msg - Data associated with subscribed signal
+ * @param[in] userData - Pointer to this object instance
+ * @param[in] retError - Return error data
+ *
+ */
+ static int handlePgoodOn(sd_bus_message* msg,
+ void* userData,
+ sd_bus_error* retError);
+
+ /** @brief Callback function for pgood going to off state
+ *
+ * Update chassis object state to reflect pgood going to off state
+ *
+ * @param[in] msg - Data associated with subscribed signal
+ * @param[in] userData - Pointer to this object instance
+ * @param[in] retError - Return error data
+ *
+ */
+ static int handlePgoodOff(sd_bus_message* msg,
+ void* userData,
+ sd_bus_error* retError);
+
/** @brief Persistent sdbusplus DBus connection. */
sdbusplus::bus::bus& bus;
+
+ /** @brief Used to subscribe to dbus pgood on state changes */
+ sdbusplus::server::match::match pgoodOn;
+
+ /** @brief Used to subscribe to dbus pgood off state changes */
+ sdbusplus::server::match::match pgoodOff;
};
} // namespace manager