Publish BMC position on DBus

For RBMC prototype systems, the BMC position needs to be determined
because some services run only on the active BMC.

This commit adds a stub API to detect whether the system is an RBMC
prototype. If it is, the BMC position is published on DBus based on
Motherboard VPD EEPROM access.

Change-Id: I38b9f6b5d1ba4e840ad98208c7983fc650d0735b
Signed-off-by: Anupama B R <anupama.b.r1@ibm.com>
diff --git a/vpd-manager/oem-handler/ibm_handler.cpp b/vpd-manager/oem-handler/ibm_handler.cpp
index ed6da47..fdd4e5a 100644
--- a/vpd-manager/oem-handler/ibm_handler.cpp
+++ b/vpd-manager/oem-handler/ibm_handler.cpp
@@ -413,6 +413,22 @@
             m_sysCfgJsonObj = m_worker->getSysCfgJsonObj();
         }
 
+        // Update BMC postion for RBMC prototype system
+        // Ignore BMC position update in case of any error
+        uint16_t l_errCode = 0;
+        if (isRbmcProtoTypeSystem(l_errCode) && l_errCode == 0)
+        {
+            size_t l_rbmcPosition = constants::VALUE_1;
+            if (isMotherboardEepromAccessible())
+            {
+                l_rbmcPosition = constants::VALUE_0;
+            }
+
+            (void)l_rbmcPosition;
+            // ToDo: Create Object interface map for position property and
+            // publish it on DBus.
+        }
+
         // Enable all mux which are used for connecting to the i2c on the
         // pcie slots for pcie cards. These are not enabled by kernel due to
         // an issue seen with Castello cards, where the i2c line hangs on a
@@ -446,4 +462,24 @@
     m_worker->collectFrusFromJson();
     SetTimerToDetectVpdCollectionStatus();
 }
+
+bool IbmHandler::isRbmcProtoTypeSystem(
+    [[maybe_unused]] uint16_t& o_errCode) const noexcept
+{
+    // TODO:
+    // Parse the system VPD from EEPROM.
+    // Check the IM keyword value. If the IM value indicates an RBMC prototype
+    // system, return true otherwise false.
+    // In case of any error or IM value not found in the map, set error code and
+    // return false.
+
+    return false;
+}
+
+bool IbmHandler::isMotherboardEepromAccessible() const noexcept
+{
+    // TODO: Check whether the motherboard EEPROM is accessible.
+
+    return false;
+}
 } // namespace vpd