sensor: Add function to map dbus info to reading field

For sensor's with reading type eventData2, the eventdata2 field is
mapped to the reading field in the get sensor reading command
response.

Change-Id: I9ad85ddb48d6c273a22e476e29ea9bbb34c13e24
Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
diff --git a/sensordatahandler.cpp b/sensordatahandler.cpp
index 231822b..aca81c7 100644
--- a/sensordatahandler.cpp
+++ b/sensordatahandler.cpp
@@ -154,6 +154,42 @@
                               sensorInfo.sensorInterface);
 }
 
+GetSensorResponse eventdata2(const Info& sensorInfo)
+{
+    sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
+    GetSensorResponse response {};
+    auto responseData = reinterpret_cast<GetReadingResponse*>(response.data());
+
+    auto service = ipmi::getService(bus,
+                                    sensorInfo.sensorInterface,
+                                    sensorInfo.sensorPath);
+
+    const auto& interfaceList = sensorInfo.propertyInterfaces;
+
+    for (const auto& interface : interfaceList)
+    {
+        for (const auto& property : interface.second)
+        {
+            auto propValue = ipmi::getDbusProperty(bus,
+                                                   service,
+                                                   sensorInfo.sensorPath,
+                                                   interface.first,
+                                                   property.first);
+
+            for (const auto& value : property.second)
+            {
+                if (propValue == value.second.assert)
+                {
+                    setReading(value.first, responseData);
+                    break;
+                }
+            }
+        }
+    }
+
+    return response;
+}
+
 } //namespace get
 
 namespace set
diff --git a/sensordatahandler.hpp b/sensordatahandler.hpp
index 3a66f48..010772d 100644
--- a/sensordatahandler.hpp
+++ b/sensordatahandler.hpp
@@ -71,6 +71,16 @@
  */
 GetSensorResponse assertion(const Info& sensorInfo);
 
+/**
+ *  @brief Maps the Dbus info to the reading field in the Get sensor reading
+ *         command response.
+ *
+ *  @param[in] sensorInfo - Dbus info related to sensor.
+ *
+ *  @return Response for get sensor reading command.
+ */
+GetSensorResponse eventdata2(const Info& sensorInfo);
+
 } //namespace get
 
 namespace set
diff --git a/sensorhandler.h b/sensorhandler.h
index 576c803..a078693 100644
--- a/sensorhandler.h
+++ b/sensorhandler.h
@@ -499,6 +499,17 @@
     }
 }
 
+/**
+ * @brief Set the reading field in the response.
+ *
+ * @param[in] offset - offset number.
+ * @param[in/out] resp - get sensor reading response.
+ */
+inline void setReading(uint8_t value, ipmi::sensor::GetReadingResponse* resp)
+{
+    resp->reading = value;
+}
+
 } // namespace sensor
 
 } // namespace ipmi