Add SensorPurpose for total_power sensor
Change will allow users to find the total system/chassis power sensor by
querying the SensorPurpose for TotalPower.
The total_power chassis association is being removed, since the
SensorPurpose will be used in its place.
Tested on Rainier.
'''
$ busctl call xyz.openbmc_project.ObjectMapper /xyz/openbmc_project/object_mapper xyz.openbmc_project.ObjectMapper GetSubTree sias "/" 0 1 "xyz.openbmc_project.Sensor.Purpose"
a{sa{sas}} 1 "/xyz/openbmc_project/sensors/power/total_power" 1 "org.open_power.OCC.Control" 6 "org.freedesktop.DBus.Introspectable" "org.freedesktop.DBus.Peer" "org.freedesktop.DBus.Properties" "xyz.openbmc_project.Sensor.Purpose" "xyz.openbmc_project.Sensor.Value" "xyz.openbmc_project.State.Decorator.OperationalStatus"
$ busctl -l introspect org.open_power.OCC.Control /xyz/openbmc_project/sensors/power/total_power
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
org.freedesktop.DBus.Introspectable interface - - -
.Introspect method - s -
org.freedesktop.DBus.Peer interface - - -
.GetMachineId method - s -
.Ping method - - -
org.freedesktop.DBus.Properties interface - - -
.Get method ss v -
.GetAll method s a{sv} -
.Set method ssv - -
.PropertiesChanged signal sa{sv}as - -
xyz.openbmc_project.Association.Definitions interface - - -
.Associations property a(sss) 1 "chassis" "all_sensors" "/xyz/openbmc_project/inventory/system/chassis" emits-change writable
B
xyz.openbmc_project.Sensor.Purpose interface - - -
.Purpose property as 1 "xyz.openbmc_project.Sensor.Purpose.SensorPurpose.TotalPower" emits-change
xyz.openbmc_project.Sensor.Value interface - - -
.MaxValue property d inf emits-change writable
.MinValue property d -inf emits-change writable
.Unit property s "xyz.openbmc_project.Sensor.Value.Unit.Watts" emits-change writable
.Value property d 419 emits-change writable
xyz.openbmc_project.State.Decorator.OperationalStatus interface - - -
.Functional property b true emits-change writable
'''
Change-Id: I414c01e81cbb965d9ab68bafa06565d997abbe0f
Signed-off-by: Chris Cain <cjcain@us.ibm.com>
diff --git a/occ_dbus.hpp b/occ_dbus.hpp
index 595cf5f..1446a45 100644
--- a/occ_dbus.hpp
+++ b/occ_dbus.hpp
@@ -1,6 +1,7 @@
#pragma once
#include <xyz/openbmc_project/Association/Definitions/server.hpp>
+#include <xyz/openbmc_project/Sensor/Purpose/server.hpp>
#include <xyz/openbmc_project/Sensor/Value/server.hpp>
#include <xyz/openbmc_project/State/Decorator/OperationalStatus/server.hpp>
@@ -18,6 +19,8 @@
using OperationalStatusIntf =
sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::State::
Decorator::server::OperationalStatus>;
+using PurposeIntf = sdbusplus::server::object_t<
+ sdbusplus::xyz::openbmc_project::Sensor::server::Purpose>;
// Note: Not using object<> so the PropertiesVariant ctor is available.
using AssociationIntf =
@@ -159,8 +162,18 @@
*/
bool hasDvfsTemp(const std::string& path) const;
+ /** @brief Set the purpose of the Sensor
+ *
+ * @param[in] path - The object path
+ * @param[in] value - The value of the Purpose property
+ *
+ * @return true or false
+ */
+ bool setPurpose(const std::string& path, const std::string& value);
+
private:
std::map<ObjectPath, std::unique_ptr<SensorIntf>> sensors;
+ std::map<ObjectPath, std::unique_ptr<PurposeIntf>> purposes;
std::map<ObjectPath, std::unique_ptr<OperationalStatusIntf>>
operationalStatus;