Register callbacks for pcap property changes
Change-Id: I39b38a931ffdf260d9ee45f02cdd31e9e884b04d
Signed-off-by: Andrew Geissler <andrewg@us.ibm.com>
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 <sdbusplus/bus.hpp>
+#include <sdbusplus/bus/match.hpp>
+#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