#include "power_status_monitor.hpp" #include "phosphor-logging/lg2.hpp" #include "utils.hpp" #include #include namespace power { const static constexpr char* busname = "xyz.openbmc_project.State.Host"; const static constexpr char* interface = "xyz.openbmc_project.State.Host"; const static constexpr char* path = "/xyz/openbmc_project/state/host0"; const static constexpr char* property = "CurrentHostState"; bool PowerStatusMonitor::isPowerOn() { if (!powerMatch) { throw std::runtime_error("Power Match Not Created"); } return powerStatusOn; } void PowerStatusMonitor::handlePowerMatch(sdbusplus::message_t& message) { lg2::debug("power match triggered"); std::string objectName; std::flat_map> values; message.read(objectName, values); auto findState = values.find(power::property); if (findState != values.end()) { powerStatusOn = std::get(findState->second).ends_with("Running"); } } void PowerStatusMonitor::setupPowerMatch( const std::shared_ptr& conn) { powerMatch = std::make_unique( static_cast(*conn), "type='signal',interface='" + std::string(em_utils::properties::interface) + "',path='" + std::string(power::path) + "',arg0='" + std::string(power::interface) + "'", std::bind_front(&PowerStatusMonitor::handlePowerMatch, this)); conn->async_method_call( [this](boost::system::error_code ec, const std::variant& state) { if (ec) { return; } powerStatusOn = std::get(state).ends_with("Running"); }, power::busname, power::path, em_utils::properties::interface, em_utils::properties::get, power::interface, power::property); } } // namespace power