summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Geissler <andrewg@us.ibm.com>2016-12-13 22:01:28 -0600
committerAndrew Geissler <andrewg@us.ibm.com>2017-01-13 15:22:02 -0600
commit2ec3a7e97e19b617f3ffa8d2f9466c019368e077 (patch)
tree89d9ee394ca20d009372001a71fa9051657b58a8
parentdff50ed66b5bd930f0f9777cf52fe28ae0b6667e (diff)
downloadphosphor-state-manager-2ec3a7e97e19b617f3ffa8d2f9466c019368e077.tar.gz
phosphor-state-manager-2ec3a7e97e19b617f3ffa8d2f9466c019368e077.zip
Use pgood signal to keep internal state updated
Change-Id: I35a2e67afc877488ceb1a0e0255b99b9db792201 Signed-off-by: Andrew Geissler <andrewg@us.ibm.com>
-rw-r--r--chassis_state_manager.cpp25
-rw-r--r--chassis_state_manager.hpp42
2 files changed, 66 insertions, 1 deletions
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 @@ namespace server = sdbusplus::xyz::openbmc_project::State::server;
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 @@ class Chassis : public sdbusplus::server::object::object<
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 @@ class Chassis : public sdbusplus::server::object::object<
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
OpenPOWER on IntegriCloud