diff options
author | Kuiying Wang <kuiying.wang@intel.com> | 2018-06-05 13:16:56 +0300 |
---|---|---|
committer | Kuiying Wang <kuiying.wang@intel.com> | 2018-06-07 13:03:04 +0300 |
commit | d68245ebf1f0072333bbdcade2124b2c2ec5e756 (patch) | |
tree | 053ac9e0297205a57584bd5eada8481e59f57696 /services | |
parent | 51e53cc5e11e74b4b07eadf2190fc25669b84625 (diff) | |
download | provingground-d68245ebf1f0072333bbdcade2124b2c2ec5e756.tar.xz |
Enable reset button.
handle reset button pressed signal and call reboot target.
Change-Id: I02de566997a8471774d3ae976fb658e88fd1086b
Signed-off-by: Kuiying Wang <kuiying.wang@intel.com>
Diffstat (limited to 'services')
-rw-r--r-- | services/chassis/ChassisControl/inc/ChassisControl.hpp | 35 | ||||
-rw-r--r-- | services/chassis/ChassisControl/src/ChassisControl.cpp | 32 |
2 files changed, 45 insertions, 22 deletions
diff --git a/services/chassis/ChassisControl/inc/ChassisControl.hpp b/services/chassis/ChassisControl/inc/ChassisControl.hpp index 7f6ab8f..f88708d 100644 --- a/services/chassis/ChassisControl/inc/ChassisControl.hpp +++ b/services/chassis/ChassisControl/inc/ChassisControl.hpp @@ -7,6 +7,9 @@ constexpr auto POWER_BUTTON_PATH = "/xyz/openbmc_project/Chassis/Buttons/Power0"; constexpr auto POWER_BUTTON_INTF = "xyz.openbmc_project.Chassis.Buttons.Power"; +constexpr auto RESET_BUTTON_PATH = + "/xyz/openbmc_project/Chassis/Buttons/Reset0"; +constexpr auto RESET_BUTTON_INTF = "xyz.openbmc_project.Chassis.Buttons.Reset"; const static int32_t POWER_OFF = 0; const static int32_t POWER_ON = 1; @@ -31,8 +34,34 @@ struct ChassisControl sdbusRule::type::signal() + sdbusRule::member("Pressed") + sdbusRule::path(POWER_BUTTON_PATH) + sdbusRule::interface(POWER_BUTTON_INTF), - std::bind(std::mem_fn(&ChassisControl::powerButtonPressed), this, - std::placeholders::_1)) { + [this](sdbusplus::message::message &msg) { + phosphor::logging::log<phosphor::logging::level::INFO>( + "powerButtonPressed callback function is called..."); + int32_t state = -1; + state = this->getPowerState(); + if (POWER_ON == state) { + this->powerOff(); + } else if (POWER_OFF == state) { + this->powerOn(); + } else { + phosphor::logging::log<phosphor::logging::level::ERR>( + "UNKNOWN power state"); + } + return; + } + ), + resetButtonPressedSignal( + bus, + sdbusRule::type::signal() + sdbusRule::member("Pressed") + + sdbusRule::path(RESET_BUTTON_PATH) + + sdbusRule::interface(RESET_BUTTON_INTF), + [this](sdbusplus::message::message &msg) { + phosphor::logging::log<phosphor::logging::level::INFO>( + "resetButtonPressed callback function is called..."); + this->reboot(); + return; + } + ){ phosphor::logging::log<phosphor::logging::level::DEBUG>( "ChassisControl is created."); } @@ -49,5 +78,5 @@ private: sdbusplus::bus::bus &mBus; sdbusplus::bus::match_t powerButtonPressedSignal; - void powerButtonPressed(sdbusplus::message::message &m); + sdbusplus::bus::match_t resetButtonPressedSignal; }; diff --git a/services/chassis/ChassisControl/src/ChassisControl.cpp b/services/chassis/ChassisControl/src/ChassisControl.cpp index d90d81f..e902786 100644 --- a/services/chassis/ChassisControl/src/ChassisControl.cpp +++ b/services/chassis/ChassisControl/src/ChassisControl.cpp @@ -33,6 +33,8 @@ constexpr auto POWER_CONTROL_OBJ_PATH = "/xyz/openbmc_project/Chassis/Control/Power0"; constexpr auto POWER_CONTROL_INTERFACE = "xyz.openbmc_project.Chassis.Control.Power"; +constexpr auto HOST_STATE_REBOOT_TGT = "obmc-host-reboot@0.target"; + int32_t ChassisControl::powerOn() { auto method = mBus.new_method_call(SYSTEMD_SERVICE, SYSTEMD_OBJ_PATH, @@ -67,8 +69,17 @@ int32_t ChassisControl::softPowerOff() { return 0; } int32_t ChassisControl::reboot() { - // TODO - return 0; + auto method = mBus.new_method_call(SYSTEMD_SERVICE, SYSTEMD_OBJ_PATH, + SYSTEMD_INTERFACE, "StartUnit"); + method.append(HOST_STATE_REBOOT_TGT, "replace"); + auto response = mBus.call(method); + if (response.is_method_error()) { + phosphor::logging::log<phosphor::logging::level::ERR>( + "ERROR: Failed to run obmc-host-reboot@0.target"); + return -1; + } + + return 0; } int32_t ChassisControl::softReboot() { // TODO @@ -94,20 +105,3 @@ int32_t ChassisControl::getPowerState() { return state; } -void ChassisControl::powerButtonPressed(sdbusplus::message::message &msg) { - - phosphor::logging::log<phosphor::logging::level::INFO>( - "powerButtonPressed callback function is called..."); - int32_t state = -1; - state = getPowerState(); - if (POWER_ON == state) { - powerOff(); - } else if (POWER_OFF == state) { - powerOn(); - } else { - phosphor::logging::log<phosphor::logging::level::ERR>( - "UNKNOWN power state"); - } - - return; -} |