rtu: implement modbus sensor read

Read the modbus device config from the Entity Manager configuration and
create the sensor interfaces for related sensor register config.

Tested:
Added new Unit test named test_sensors -
```
> meson test -t 10 -C builddir/ --print-errorlogs --wrapper="valgrind --error-exitcode=1" test_sensors
ninja: Entering directory `/host/repos/Modbus/phosphor-modbus/builddir'
[2/2] Linking target tests/test_sensors
1/1 test_sensors        OK              13.98s

Ok:                1
Fail:              0
```

Tested on Qemu using Mock Modbus Device -
```
root@ventura:~# busctl tree xyz.openbmc_project.ModbusRTU
└─ /xyz
  └─ /xyz/openbmc_project
    ├─ /xyz/openbmc_project/inventory_source
    │ ├─ /xyz/openbmc_project/inventory_source/Heat_Exchanger_12_DevTTYUSB0
    │ ├─ /xyz/openbmc_project/inventory_source/Heat_Exchanger_12_DevTTYUSB1
    │ ├─ /xyz/openbmc_project/inventory_source/Reservoir_Pumping_Unit_12_DevTTYUSB0
    │ └─ /xyz/openbmc_project/inventory_source/Reservoir_Pumping_Unit_12_DevTTYUSB1
    └─ /xyz/openbmc_project/sensors
      └─ /xyz/openbmc_project/sensors/temperature
        ├─ /xyz/openbmc_project/sensors/temperature/Reservoir_Pumping_Unit_12_DevTTYUSB0_RPU_Coolant_Inlet_Temp_C
        ├─ /xyz/openbmc_project/sensors/temperature/Reservoir_Pumping_Unit_12_DevTTYUSB0_RPU_Coolant_Outlet_Temp_C
        ├─ /xyz/openbmc_project/sensors/temperature/Reservoir_Pumping_Unit_12_DevTTYUSB1_RPU_Coolant_Inlet_Temp_C
        └─ /xyz/openbmc_project/sensors/temperature/Reservoir_Pumping_Unit_12_DevTTYUSB1_RPU_Coolant_Outlet_Temp_C

busctl introspect xyz.openbmc_project.ModbusRTU /xyz/openbmc_project/sensors/temperature/Reservoir_Pumping_Unit_12_DevTTYUSB1_RPU_Coolant_Outlet_Temp_C
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.Sensor.Value    interface -         -                                        -
.MaxValue                           property  d         nan                                      emits-change writable
.MinValue                           property  d         nan                                      emits-change writable
.Unit                               property  s         "xyz.openbmc_project.Sensor.Value.Unit.… emits-change writable
.Value                              property  d         1670.6                                   emits-change writable
```

Change-Id: I1368e8df5999b5cee9ac19d185ee110a9ecc3021
Signed-off-by: Jagpal Singh Gill <paligill@gmail.com>
diff --git a/rtu/device_manager.hpp b/rtu/device_manager.hpp
index 68daa64..75fe75b 100644
--- a/rtu/device_manager.hpp
+++ b/rtu/device_manager.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "common/entity_manager_interface.hpp"
+#include "device/base_device.hpp"
 #include "inventory/modbus_inventory.hpp"
 #include "port/base_port.hpp"
 
@@ -11,6 +12,8 @@
 
 namespace InventoryIntf = phosphor::modbus::rtu::inventory;
 namespace PortIntf = phosphor::modbus::rtu::port;
+namespace ModbusIntf = phosphor::modbus::rtu;
+namespace DeviceIntf = phosphor::modbus::rtu::device;
 
 class DeviceManager
 {
@@ -26,13 +29,30 @@
   private:
     using inventory_device_map_t =
         std::unordered_map<std::string, std::unique_ptr<InventoryIntf::Device>>;
+
     using port_map_t =
         std::unordered_map<std::string, std::unique_ptr<PortIntf::BasePort>>;
 
+    using device_map_t =
+        std::unordered_map<std::string,
+                           std::unique_ptr<DeviceIntf::BaseDevice>>;
+
     auto processConfigAdded(const sdbusplus::message::object_path& objectPath,
                             const std::string& interfaceName)
         -> sdbusplus::async::task<>;
 
+    auto processPortAdded(const sdbusplus::message::object_path& objectPath,
+                          const std::string& interfaceName)
+        -> sdbusplus::async::task<>;
+
+    auto processInventoryAdded(
+        const sdbusplus::message::object_path& objectPath)
+        -> sdbusplus::async::task<>;
+
+    auto processDeviceAdded(const sdbusplus::message::object_path& objectPath,
+                            const std::string& interfaceName)
+        -> sdbusplus::async::task<>;
+
     auto processConfigRemoved(const sdbusplus::message::object_path& objectPath,
                               const std::string& interfaceName)
         -> sdbusplus::async::task<>;
@@ -41,6 +61,7 @@
     entity_manager::EntityManagerInterface entityManager;
     inventory_device_map_t inventoryDevices;
     port_map_t ports;
+    device_map_t devices; // Modbus devices
 };
 
 } // namespace phosphor::modbus::rtu