The label field for temperature sensors is decimal

It turns out that the OCC driver displays the value of the
tempX_label file as a decimal as opposed to the hex format we just
speculated it would be.

For example, a 0xC0000001 value will read as 3221225473.

Change the code to read that as a uint32_t and then extract that type
and instance fields directly from it.

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I64db4670cf8a48030cca041fad8892de6188f89e
diff --git a/configure.ac b/configure.ac
index 32a6ecc..96b23f0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -140,12 +140,12 @@
 AC_DEFINE_UNQUOTED([OCC_MASTER_NAME], ["$OCC_MASTER_NAME"], [The OCC master object name])
 
 AC_ARG_VAR(OCC_CPU_TEMP_SENSOR_TYPE, [The CPU temp sensor type])
-AS_IF([test "x$OCC_CPU_TEMP_SENSOR_TYPE" == "x"], [OCC_CPU_TEMP_SENSOR_TYPE="C0"])
-AC_DEFINE_UNQUOTED([OCC_CPU_TEMP_SENSOR_TYPE], ["$OCC_CPU_TEMP_SENSOR_TYPE"], [The CPU temp sensor type])
+AS_IF([test "x$OCC_CPU_TEMP_SENSOR_TYPE" == "x"], [OCC_CPU_TEMP_SENSOR_TYPE=0xC0])
+AC_DEFINE_UNQUOTED([OCC_CPU_TEMP_SENSOR_TYPE], [$OCC_CPU_TEMP_SENSOR_TYPE], [The CPU temp sensor type])
 
 AC_ARG_VAR(OCC_DIMM_TEMP_SENSOR_TYPE, [The dimm temp sensor type])
-AS_IF([test "x$OCC_DIMM_TEMP_SENSOR_TYPE" == "x"], [OCC_DIMM_TEMP_SENSOR_TYPE="D0"])
-AC_DEFINE_UNQUOTED([OCC_DIMM_TEMP_SENSOR_TYPE], ["$OCC_DIMM_TEMP_SENSOR_TYPE"], [The dimm temp sensor type])
+AS_IF([test "x$OCC_DIMM_TEMP_SENSOR_TYPE" == "x"], [OCC_DIMM_TEMP_SENSOR_TYPE=0xD0])
+AC_DEFINE_UNQUOTED([OCC_DIMM_TEMP_SENSOR_TYPE], [$OCC_DIMM_TEMP_SENSOR_TYPE], [The dimm temp sensor type])
 
 AC_ARG_VAR(OCC_HWMON_PATH, [The OCC hwmon path])
 AC_ARG_VAR(DEV_PATH, [The device path])
diff --git a/occ_manager.cpp b/occ_manager.cpp
index 4b5df04..a6d18ac 100644
--- a/occ_manager.cpp
+++ b/occ_manager.cpp
@@ -220,7 +220,7 @@
 
             continue;
         }
-        std::string labelValue;
+        uint32_t labelValue{0};
         fileOpen >> labelValue;
         fileOpen.close();
 
@@ -250,13 +250,8 @@
         }
         else
         {
-            auto sensorTypeID =
-                open_power::occ::utils::checkLabelValue(labelValue);
-            if (sensorTypeID == std::nullopt)
-            {
-                continue;
-            }
-            auto& [type, instanceID] = *sensorTypeID;
+            uint16_t type = (labelValue & 0xFF000000) >> 24;
+            uint16_t instanceID = labelValue & 0x0000FFFF;
 
             if (type == OCC_DIMM_TEMP_SENSOR_TYPE)
             {
diff --git a/test/utest.cpp b/test/utest.cpp
index ff75a60..704c5c6 100644
--- a/test/utest.cpp
+++ b/test/utest.cpp
@@ -68,17 +68,3 @@
 
     EXPECT_STREQ(parsed.c_str(), "bar");
 }
-
-TEST(VerifyLabelValue, checkLabelValue)
-{
-    const std::string value = "D0000002";
-
-    auto labelValue = checkLabelValue(value);
-    EXPECT_NE(labelValue, std::nullopt);
-
-    std::string reType = "D0";
-    uint16_t reID = 2;
-    auto& [type, instanceID] = *labelValue;
-    EXPECT_EQ(type, reType);
-    EXPECT_EQ(instanceID, reID);
-}
diff --git a/utils.cpp b/utils.cpp
index b1fd8b6..9a412a3 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -75,40 +75,6 @@
     return value;
 }
 
-std::optional<LABELVALUE> checkLabelValue(const std::string& value)
-{
-    // The ID 0xD0000002 is only 4 bytes long, but when converted to a string it
-    // is 8 characters long
-    // eg: Dimm2, the lable file is `D0000002` so value
-    // length = 2 byte(type) + 2 byte(reserve) + 4 byte(instace ID)
-    size_t valueLen = value.length();
-    size_t typeLen = 2;
-    size_t reserveLen = 2;
-    size_t instanceIDLen = 4;
-    if (valueLen != typeLen + reserveLen + instanceIDLen)
-    {
-        return std::nullopt;
-    }
-
-    size_t offset = 0;
-    std::string type = value.substr(offset, typeLen);
-    offset += typeLen;
-    std::string reserve = value.substr(offset, reserveLen);
-    offset += reserveLen;
-
-    if ("00" != reserve)
-    {
-        return std::nullopt;
-    }
-
-    const char* start = value.data() + offset;
-    uint16_t instanceID = static_cast<uint16_t>(std::strtol(start, NULL, 16));
-
-    LABELVALUE labelValue{type, instanceID};
-
-    return std::make_optional(std::move(labelValue));
-}
-
 } // namespace utils
 } // namespace occ
 } // namespace open_power
diff --git a/utils.hpp b/utils.hpp
index 6254ed7..b1da8c0 100644
--- a/utils.hpp
+++ b/utils.hpp
@@ -12,8 +12,6 @@
 namespace utils
 {
 
-using LABELVALUE = std::tuple<std::string, uint16_t>;
-
 constexpr auto MAPPER_BUSNAME = "xyz.openbmc_project.ObjectMapper";
 constexpr auto MAPPER_OBJ_PATH = "/xyz/openbmc_project/object_mapper";
 constexpr auto MAPPER_IFACE = "xyz.openbmc_project.ObjectMapper";
@@ -55,15 +53,6 @@
                                 const std::string& interface,
                                 const std::string& propertyName);
 
-/**
- * @brief Check the value of the `tempX_label` file
- *
- * @param[in] value  -  the value of the `tempX_label` file
- *
- * @return              Sensors type and Sensors ID
- */
-std::optional<LABELVALUE> checkLabelValue(const std::string& value);
-
 } // namespace utils
 } // namespace occ
 } // namespace open_power