From c30e74c4dc90960f935401fe403c833eac3bb7fd Mon Sep 17 00:00:00 2001 From: wangjue Date: Wed, 6 Nov 2024 15:18:08 +0800 Subject: [PATCH] Control uidLed in uid button handler Signed-off-by: wangjue --- src/power_control.cpp | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/power_control.cpp b/src/power_control.cpp index bfb55ef..8d462be 100644 --- a/src/power_control.cpp +++ b/src/power_control.cpp @@ -118,6 +118,13 @@ static std::string buttonDbusName = "xyz.openbmc_project.Chassis.Buttons"; static std::string nmiDbusName = "xyz.openbmc_project.Control.Host.NMI"; static std::string rstCauseDbusName = "xyz.openbmc_project.Control.Host.RestartCause"; +constexpr const char* uidLedPath = "/xyz/openbmc_project/led/groups/uid_btn"; +constexpr const char* ledIface = "xyz.openbmc_project.Led.Group"; +constexpr const char* ledAssertProp = "Asserted"; +constexpr const char* ledManagerBusname = + "xyz.openbmc_project.LED.GroupManager"; +static bool uidLastState = false; + static std::shared_ptr hostIface; static std::shared_ptr chassisIface; #ifdef CHASSIS_SYSTEM_RESET @@ -580,7 +587,7 @@ static void powerStateLog(const PowerState state) auto method = bus.new_method_call(selService, selPath, selInterface, selMethod); - method.append("SEL Entry"); + method.append("SEL Entry"); if (stateStr == "xyz.openbmc_project.State.Chassis.PowerState.On") { @@ -845,7 +852,7 @@ static void powerButtonPressLog() // LOG_INFO, "REDFISH_MESSAGE_ID=%s", // "OpenBMC.0.1.PowerButtonPressed", NULL); powerStateLog(PowerState::powerButtonPressed); - + } static void resetButtonPressLog() @@ -2416,9 +2423,30 @@ static void nmiButtonHandler(bool state) } } +static void setUidLed() +{ + conn->async_method_call( + [&uidLastState](const boost::system::error_code ec) { + if (ec) + { + std::cerr << "Cannot set uidLed to " + << std::boolalpha + << !uidLastState << "\n"; + } + + uidLastState = !uidLastState; + }, + ledManagerBusname, uidLedPath, + "org.freedesktop.DBus.Properties", "Set", ledIface, + ledAssertProp, std::variant(!uidLastState)); +} + static void idButtonHandler(bool state) { idButtonIface->set_property("ButtonPressed", !state); + if(!state) { + setUidLed(); + } } static void pltRstHandler(bool pltRst) -- 2.34.1