Add a level of indirection when naming the DBUS objects
The current design ignores the itemX_label sysfs attribute, if the
environment variable is populated with the MODE_itemX="label", then
fetch the label from itemX_label file.The actual label for the dbus
object is fetched from the environment variable LABEL_item<label>.
Resolves openbmc/openbmc#1633
Change-Id: I0d4baaa91073dd5db75ac62277d78ad9b3065e64
Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
diff --git a/mainloop.cpp b/mainloop.cpp
index 1da6b69..5976307 100644
--- a/mainloop.cpp
+++ b/mainloop.cpp
@@ -212,13 +212,34 @@
for (auto& i : *sensors)
{
- // Get sensor configuration from the environment.
+ std::string label;
- // Ignore inputs without a label.
- auto label = getEnv("LABEL", i.first);
- if (label.empty())
+ /*
+ * Check if the value of the MODE_<item><X> env variable for the sensor
+ * is "label", then read the sensor number from the <item><X>_label
+ * file. The name of the DBUS object would be the value of the env
+ * variable LABEL_<item><sensorNum>. If the MODE_<item><X> env variable
+ * does'nt exist, then the name of DBUS object is the value of the env
+ * variable LABEL_<item><X>.
+ */
+ auto mode = getEnv("MODE", i.first);
+ if (!mode.compare(hwmon::entry::label))
{
- continue;
+ label = getIndirectLabelEnv(
+ "LABEL", _hwmonRoot + '/' + _instance + '/', i.first);
+ if (label.empty())
+ {
+ continue;
+ }
+ }
+ else
+ {
+ // Ignore inputs without a label.
+ label = getEnv("LABEL", i.first);
+ if (label.empty())
+ {
+ continue;
+ }
}
Attributes attrs;