Read proc temps and dimm temps

This commit uses openpower-occ-control to monitor the temperature and
power sensors, and create sensors on D-BUS. In the loop, read the
sensor values every 1 seconds.

Tested:
I use virtual data to get sensor values:
busctl tree org.open_power.OCC.Control
|-/org
| `-/org/open_power
|   `-/org/open_power/control
|     |-/org/open_power/control/occ0
|     `-/org/open_power/control/occ1
`-/xyz
  `-/xyz/openbmc_project
    `-/xyz/openbmc_project/sensors
      |-/xyz/openbmc_project/sensors/power
      | |-/xyz/openbmc_project/sensors/power/p0_mem_2_power
      | |-/xyz/openbmc_project/sensors/power/p0_mem_power
      | |-/xyz/openbmc_project/sensors/power/p0_power
      | |-/xyz/openbmc_project/sensors/power/p1_mem_power
      | |-/xyz/openbmc_project/sensors/power/p1_power
      | |-/xyz/openbmc_project/sensors/power/p2_mem_power
      | |-/xyz/openbmc_project/sensors/power/p2_power
      | |-/xyz/openbmc_project/sensors/power/p3_mem_power
      | |-/xyz/openbmc_project/sensors/power/p3_power
      | `-/xyz/openbmc_project/sensors/power/total_power
      `-/xyz/openbmc_project/sensors/temperature
        |-/xyz/openbmc_project/sensors/temperature/dimm5_dram_temp
        |-/xyz/openbmc_project/sensors/temperature/dimm9_dram_temp
        |-/xyz/openbmc_project/sensors/temperature/proc0_core2_temp
        |-/xyz/openbmc_project/sensors/temperature/proc0_core3_temp
        |-/xyz/openbmc_project/sensors/temperature/proc1_core2_temp
        |-/xyz/openbmc_project/sensors/temperature/proc1_core3_temp
        |-/xyz/openbmc_project/sensors/temperature/vrm_vdd0_temp
        `-/xyz/openbmc_project/sensors/temperature/vrm_vdd1_temp

busctl introspect org.open_power.OCC.Control
/xyz/openbmc_project/sensors/temperature/proc0_core3_temp
NAME                                TYPE      SIGNATURE RESULT/VALUE
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         0
.MinValue                           property  d         0
.Unit                               property  s         "xyz.openbmc...
.Value                              property  d         49
xyz.openbmc_project.State.Decorator.OperationalStatus interface -  -
.Functional                         property  b  true

busctl introspect org.open_power.OCC.Control
/xyz/openbmc_project/sensors/power/total_power
NAME                                TYPE      SIGNATURE RESULT/VALUE
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
.Set                                method    ssv       -
.PropertiesChanged                  signal    sa{sv}as  -
xyz.openbmc_project.Sensor.Value    interface -         -
.MaxValue                           property  d         0
.MinValue                           property  d         0
.Unit                               property  s         "xyz.openbmc...
.Value                              property  d         83
xyz.openbmc_project.State.Decorator.OperationalStatus interface -  -
.Functional                         property  b  true

Signed-off-by: Chicago Duan <duanzhijia01@inspur.com>
Change-Id: Iff30ab51745dab500fa19aa4c35b07e0052ac665
diff --git a/occ_manager.hpp b/occ_manager.hpp
index ece7fb7..e6e8cbb 100644
--- a/occ_manager.hpp
+++ b/occ_manager.hpp
@@ -24,8 +24,21 @@
 namespace occ
 {
 
+#ifdef READ_OCC_SENSORS
+enum occFruType
+{
+    processorCore = 0,
+    internalMemCtlr = 1,
+    dimm = 2,
+    memCtrlAndDimm = 3,
+    VRMVdd = 6,
+    PMIC = 7,
+    memCtlrExSensor = 8
+};
+#endif
+
 /** @brief Default time, in seconds, between OCC poll commands */
-constexpr unsigned int defaultPollingInterval = 10;
+constexpr unsigned int defaultPollingInterval = 1;
 
 /** @class Manager
  *  @brief Builds and manages OCC objects
@@ -178,6 +191,68 @@
      * OCC. The poll timer will then be restarted.
      * */
     void pollerTimerExpired();
+
+#ifdef READ_OCC_SENSORS
+    /**
+     * @brief Gets the occ sensor values.
+     * @param[in] id - Id of the OCC.
+     * @param[in] masterOcc - Is this OCC the master OCC.
+     * */
+    void getSensorValues(uint32_t id, bool masterOcc);
+
+    /**
+     * @brief Trigger OCC driver to read the temperature sensors.
+     * @param[in] path - path of the OCC sensors.
+     * @param[in] id - Id of the OCC.
+     * */
+    void readTempSensors(const fs::path& path, uint32_t id);
+
+    /**
+     * @brief Trigger OCC driver to read the power sensors.
+     * @param[in] path - path of the OCC sensors.
+     * @param[in] id - Id of the OCC.
+     * */
+    void readPowerSensors(const fs::path& path, uint32_t id);
+
+    /**
+     * @brief Set all sensor values of this OCC to NaN.
+     * @param[in] id - Id of the OCC.
+     * */
+    void setSensorValueToNaN(uint32_t id);
+
+    /** @brief Store the existing OCC sensors on D-BUS */
+    std::map<std::string, uint32_t> existingSensors;
+
+    /** @brief Get FunctionID from the `powerX_label` file.
+     *  @param[in] value - the value of the `powerX_label` file.
+     *  @returns FunctionID of the power sensors.
+     */
+    std::optional<std::string>
+        getPowerLabelFunctionID(const std::string& value);
+
+    /** @brief The power sensor names map */
+    const std::map<std::string, std::string> powerSensorName = {
+        {"system", "total_power"}, {"1", "p0_mem_power"},
+        {"2", "p1_mem_power"},     {"3", "p2_mem_power"},
+        {"4", "p3_mem_power"},     {"5", "p0_power"},
+        {"6", "p1_power"},         {"7", "p2_power"},
+        {"8", "p3_power"},         {"9", "p0_cache_power"},
+        {"10", "p1_cache_power"},  {"11", "p2_cache_power"},
+        {"12", "p3_cache_power"},  {"13", "io_a_power"},
+        {"14", "io_b_power"},      {"15", "io_c_power"},
+        {"16", "fans_a_power"},    {"17", "fans_b_power"},
+        {"18", "storage_a_power"}, {"19", "storage_b_power"},
+        {"23", "mem_cache_power"}, {"25", "p0_mem_0_power"},
+        {"26", "p0_mem_1_power"},  {"27", "p0_mem_2_power"}};
+
+    /** @brief The dimm temperature sensor names map */
+    const std::map<uint32_t, std::string> dimmTempSensorName = {
+        {internalMemCtlr, "_intmb_temp"},
+        {dimm, "_dram_temp"},
+        {memCtrlAndDimm, "_dram_extmb_temp"},
+        {PMIC, "_pmic_temp"},
+        {memCtlrExSensor, "_extmb_temp"}};
+#endif
 };
 
 } // namespace occ