API to update IM value on system planar

This commit implements code to update IM value on system planar
EEPROM path.

Change-Id: Ib4e8570d1ad5c86dd4573aca9882031282342a88
Signed-off-by: Rekha Aparna <vrekhaaparna@ibm.com>
diff --git a/vpd-manager/src/single_fab.cpp b/vpd-manager/src/single_fab.cpp
index 24556d0..c198841 100644
--- a/vpd-manager/src/single_fab.cpp
+++ b/vpd-manager/src/single_fab.cpp
@@ -3,8 +3,10 @@
 #include "single_fab.hpp"
 
 #include "constants.hpp"
+#include "parser.hpp"
 #include "types.hpp"
 
+#include <nlohmann/json.hpp>
 #include <utility/json_utility.hpp>
 
 namespace vpd
@@ -41,12 +43,7 @@
         return l_imData.str();
     }
     catch (const std::exception& l_ex)
-    {
-        logging::logMessage(
-            "Error while getting IM value from PIM persisted file: " +
-            std::string(pimPersistVsbpPath) +
-            ", reason: " + std::string(l_ex.what()));
-    }
+    {}
 
     return std::string();
 }
@@ -85,4 +82,33 @@
 
     return std::string();
 }
+
+bool SingleFab::setImOnPlanar(const std::string& i_imValue) const noexcept
+{
+    try
+    {
+        types::BinaryVector l_imValue;
+        const std::string l_systemPlanarEepromPath = SYSTEM_VPD_FILE_PATH;
+
+        // Convert string to vector of bytes
+        for (auto l_value : i_imValue | std::views::chunk(2))
+        {
+            std::string l_byteString(l_value.begin(), l_value.end());
+            l_imValue.push_back(
+                static_cast<uint8_t>(std::stoi(l_byteString, nullptr, 16)));
+        }
+
+        std::shared_ptr<Parser> l_parserObj = std::make_shared<Parser>(
+            l_systemPlanarEepromPath, nlohmann::json{});
+
+        int l_bytes_updated = l_parserObj->updateVpdKeywordOnHardware(
+            std::make_tuple(constants::recVSBP, constants::kwdIM, l_imValue));
+
+        return l_bytes_updated > 0 ? true : false;
+    }
+    catch (const std::exception& l_ex)
+    {
+        return false;
+    }
+}
 } // namespace vpd