diff options
| author | Andrew Geissler <andrewg@us.ibm.com> | 2016-12-13 22:01:28 -0600 |
|---|---|---|
| committer | Andrew Geissler <andrewg@us.ibm.com> | 2017-01-13 15:22:02 -0600 |
| commit | 2ec3a7e97e19b617f3ffa8d2f9466c019368e077 (patch) | |
| tree | 89d9ee394ca20d009372001a71fa9051657b58a8 | |
| parent | dff50ed66b5bd930f0f9777cf52fe28ae0b6667e (diff) | |
| download | phosphor-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.cpp | 25 | ||||
| -rw-r--r-- | chassis_state_manager.hpp | 42 |
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 |

