From 32016d18e1b4ddeb8390ee2032e51582a9bca58c Mon Sep 17 00:00:00 2001 From: Andrew Geissler Date: Tue, 20 Jun 2017 15:46:52 -0500 Subject: Register callbacks for pcap property changes Change-Id: I39b38a931ffdf260d9ee45f02cdd31e9e884b04d Signed-off-by: Andrew Geissler --- powercap.hpp | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 powercap.hpp (limited to 'powercap.hpp') diff --git a/powercap.hpp b/powercap.hpp new file mode 100644 index 0000000..878822b --- /dev/null +++ b/powercap.hpp @@ -0,0 +1,78 @@ +#pragma once + +#include +#include +#include "occ_status.hpp" +#include "config.h" + +namespace open_power +{ +namespace occ +{ +namespace powercap +{ + +namespace sdbusRule = sdbusplus::bus::match::rules; + +/** @class PowerCap + * @brief Monitors for changes to the power cap and notifies occ + * + * The customer power cap is provided to the OCC by host TMGT when the occ + * first goes active or is reset. This code is responsible for sending + * the power cap to the OCC if the cap is changed while the occ is active. + */ + +class PowerCap +{ +public: + /** @brief PowerCap object to inform occ of changes to cap + * + * This object will monitor for changes to the power cap setting and + * power cap enable properties. If a change is detected, and the occ + * is active, then this object will notify the OCC of the change. + * + * @param[in] bus - The Dbus bus object + * @param[in] occStatus - The occ status object + */ + PowerCap(sdbusplus::bus::bus &bus, + Status &occStatus) : + bus(bus), + occStatus(occStatus), + pcapMatch( + bus, + sdbusRule::member("PropertiesChanged") + + sdbusRule::path( + "/xyz/openbmc_project/control/host0/power_cap") + + sdbusRule::argN(0, "xyz.openbmc_project.Control.Power.Cap") + + sdbusRule::interface("org.freedesktop.DBus.Properties"), + std::bind(std::mem_fn(&PowerCap::pcapChanged), + this, std::placeholders::_1)) + {}; + +private: + + /** @brief Callback for pcap setting changes + * + * Process change and inform OCC + * + * @param[in] msg - Data associated with pcap change signal + * + */ + void pcapChanged(sdbusplus::message::message& msg); + + /** @brief Reference to sdbus **/ + sdbusplus::bus::bus& bus; + + /* @brief OCC Status object */ + Status &occStatus; + + /** @brief Used to subscribe to dbus pcap propety changes **/ + sdbusplus::bus::match_t pcapMatch; + + }; + +} // namespace open_power + +} // namespace occ + +}// namespace powercap -- cgit v1.2.1