Update overall VPD collection status

This commit adds code to use xyz.openbmc_project.Common.Progress
interface instead of the com.ibm.VPD.Manager to update overall VPD
collection status of the system.

Output:
```
Collection status updates when FRUs VPD gets collected

root@p11bmc:~# busctl get-property com.ibm.VPD.Manager /com/ibm/VPD/Manager xyz.openbmc_project.Common.Progress Status
s "xyz.openbmc_project.Common.Progress.OperationStatus.NotStarted"

root@p11bmc:~# busctl get-property com.ibm.VPD.Manager /com/ibm/VPD/Manager xyz.openbmc_project.Common.Progress Status
s "xyz.openbmc_project.Common.Progress.OperationStatus.InProgress"

root@p11bmc:~# busctl get-property com.ibm.VPD.Manager /com/ibm/VPD/Manager xyz.openbmc_project.Common.Progress Status
s "xyz.openbmc_project.Common.Progress.OperationStatus.Completed"

```

Change-Id: I8fc12e5c3ee89092405b6a270cf3eaafa70d41d2
Signed-off-by: Anupama B R <anupama.b.r1@ibm.com>
diff --git a/vpd-manager/include/manager.hpp b/vpd-manager/include/manager.hpp
index 88e328b..c43f52f 100644
--- a/vpd-manager/include/manager.hpp
+++ b/vpd-manager/include/manager.hpp
@@ -33,11 +33,14 @@
      *
      * @param[in] ioCon - IO context.
      * @param[in] iFace - interface to implement.
+     * @param[in] progressiFace - Interface to track collection progress.
      * @param[in] connection - Dbus Connection.
      */
-    Manager(const std::shared_ptr<boost::asio::io_context>& ioCon,
-            const std::shared_ptr<sdbusplus::asio::dbus_interface>& iFace,
-            const std::shared_ptr<sdbusplus::asio::connection>& asioConnection);
+    Manager(
+        const std::shared_ptr<boost::asio::io_context>& ioCon,
+        const std::shared_ptr<sdbusplus::asio::dbus_interface>& iFace,
+        const std::shared_ptr<sdbusplus::asio::dbus_interface>& progressiFace,
+        const std::shared_ptr<sdbusplus::asio::connection>& asioConnection);
 
     /**
      * @brief Destructor.
@@ -250,6 +253,9 @@
     // Shared pointer to Dbus interface class.
     const std::shared_ptr<sdbusplus::asio::dbus_interface>& m_interface;
 
+    // Shared pointer to collection progress interface class.
+    const std::shared_ptr<sdbusplus::asio::dbus_interface>& m_progressInterface;
+
     // Shared pointer to bus connection.
     const std::shared_ptr<sdbusplus::asio::connection>& m_asioConnection;
 
@@ -260,7 +266,7 @@
     std::shared_ptr<GpioMonitor> m_gpioMonitor;
 
     // Variable to hold current collection status
-    std::string m_vpdCollectionStatus = "NotStarted";
+    std::string m_vpdCollectionStatus{constants::vpdCollectionNotStarted};
 
     // Shared pointer to backup and restore class
     std::shared_ptr<BackupAndRestore> m_backupAndRestoreObj;
diff --git a/vpd-manager/oem-handler/ibm_handler.cpp b/vpd-manager/oem-handler/ibm_handler.cpp
index 4b077f5..316184c 100644
--- a/vpd-manager/oem-handler/ibm_handler.cpp
+++ b/vpd-manager/oem-handler/ibm_handler.cpp
@@ -16,11 +16,12 @@
     std::shared_ptr<Worker>& o_worker,
     std::shared_ptr<BackupAndRestore>& o_backupAndRestoreObj,
     const std::shared_ptr<sdbusplus::asio::dbus_interface>& i_iFace,
+    const std::shared_ptr<sdbusplus::asio::dbus_interface>& i_progressiFace,
     const std::shared_ptr<boost::asio::io_context>& i_ioCon,
     const std::shared_ptr<sdbusplus::asio::connection>& i_asioConnection) :
     m_worker(o_worker), m_backupAndRestoreObj(o_backupAndRestoreObj),
-    m_interface(i_iFace), m_ioContext(i_ioCon),
-    m_asioConnection(i_asioConnection)
+    m_interface(i_iFace), m_progressInterface(i_progressiFace),
+    m_ioContext(i_ioCon), m_asioConnection(i_asioConnection)
 {
     if (dbusUtility::isChassisPowerOn())
     {
@@ -109,8 +110,8 @@
 
                 // Triggering FRU VPD collection. Setting status to "In
                 // Progress".
-                m_interface->set_property("CollectionStatus",
-                                          std::string("InProgress"));
+                m_progressInterface->set_property(
+                    "Status", std::string(constants::vpdCollectionInProgress));
                 m_worker->collectFrusFromJson();
             }
         });
@@ -164,8 +165,8 @@
             ConfigurePowerVsSystem();
 
             std::cout << "m_worker->isSystemVPDOnDBus() completed" << std::endl;
-            m_interface->set_property("CollectionStatus",
-                                      std::string("Completed"));
+            m_progressInterface->set_property(
+                "Status", std::string(constants::vpdCollectionCompleted));
 
             if (m_backupAndRestoreObj)
             {
@@ -545,7 +546,8 @@
 void IbmHandler::collectAllFruVpd()
 {
     // Setting status to "InProgress", before trigeering VPD collection.
-    m_interface->set_property("CollectionStatus", std::string("InProgress"));
+    m_progressInterface->set_property(
+        "Status", std::string(constants::vpdCollectionInProgress));
     m_worker->collectFrusFromJson();
     SetTimerToDetectVpdCollectionStatus();
 }
diff --git a/vpd-manager/oem-handler/ibm_handler.hpp b/vpd-manager/oem-handler/ibm_handler.hpp
index 74429a2..e2bf3da 100644
--- a/vpd-manager/oem-handler/ibm_handler.hpp
+++ b/vpd-manager/oem-handler/ibm_handler.hpp
@@ -34,6 +34,7 @@
      * @param[in] o_backupAndRestoreObj - Ref to back up and restore class
      * object.
      * @param[in] i_iFace - interface to implement.
+     * @param[in] i_progressiFace - Interface to track collection progress.
      * @param[in] i_ioCon - IO context.
      * @param[in] i_asioConnection - Dbus Connection.
      */
@@ -41,6 +42,7 @@
         std::shared_ptr<Worker>& o_worker,
         std::shared_ptr<BackupAndRestore>& o_backupAndRestoreObj,
         const std::shared_ptr<sdbusplus::asio::dbus_interface>& i_iFace,
+        const std::shared_ptr<sdbusplus::asio::dbus_interface>& i_progressiFace,
         const std::shared_ptr<boost::asio::io_context>& i_ioCon,
         const std::shared_ptr<sdbusplus::asio::connection>& i_asioConnection);
 
@@ -166,6 +168,9 @@
     // Shared pointer to Dbus interface class.
     const std::shared_ptr<sdbusplus::asio::dbus_interface>& m_interface;
 
+    // Shared pointer to Dbus collection progress interface class.
+    const std::shared_ptr<sdbusplus::asio::dbus_interface>& m_progressInterface;
+
     // Shared pointer to asio context object.
     const std::shared_ptr<boost::asio::io_context>& m_ioContext;
 
diff --git a/vpd-manager/src/manager.cpp b/vpd-manager/src/manager.cpp
index 54147d3..d7b512d 100644
--- a/vpd-manager/src/manager.cpp
+++ b/vpd-manager/src/manager.cpp
@@ -23,8 +23,10 @@
 Manager::Manager(
     const std::shared_ptr<boost::asio::io_context>& ioCon,
     const std::shared_ptr<sdbusplus::asio::dbus_interface>& iFace,
+    const std::shared_ptr<sdbusplus::asio::dbus_interface>& progressiFace,
     const std::shared_ptr<sdbusplus::asio::connection>& asioConnection) :
-    m_ioContext(ioCon), m_interface(iFace), m_asioConnection(asioConnection)
+    m_ioContext(ioCon), m_interface(iFace), m_progressInterface(progressiFace),
+    m_asioConnection(asioConnection)
 {
 #ifdef IBM_SYSTEM
     if (!dbusUtility::isChassisPowerOn())
@@ -126,13 +128,13 @@
         });
 
         // Indicates FRU VPD collection for the system has not started.
-        iFace->register_property_rw<std::string>(
-            "CollectionStatus", sdbusplus::vtable::property_::emits_change,
+        progressiFace->register_property_rw<std::string>(
+            "Status", sdbusplus::vtable::property_::emits_change,
             [this](const std::string& l_currStatus, const auto&) {
                 if (m_vpdCollectionStatus != l_currStatus)
                 {
                     m_vpdCollectionStatus = l_currStatus;
-                    m_interface->signal_property("CollectionStatus");
+                    m_interface->signal_property("Status");
                 }
                 return true;
             },
@@ -141,11 +143,12 @@
         // If required, instantiate OEM specific handler here.
 #ifdef IBM_SYSTEM
         m_ibmHandler = std::make_shared<IbmHandler>(
-            m_worker, m_backupAndRestoreObj, m_interface, m_ioContext,
-            m_asioConnection);
+            m_worker, m_backupAndRestoreObj, m_interface, m_progressInterface,
+            m_ioContext, m_asioConnection);
 #else
         m_worker = std::make_shared<Worker>(INVENTORY_JSON_DEFAULT);
-        m_interface->set_property("CollectionStatus", std::string("Completed"));
+        m_progressInterface->set_property(
+            "Status", std::string(constants::vpdCollectionCompleted));
 #endif
     }
     catch (const std::exception& e)
@@ -347,7 +350,7 @@
 void Manager::collectSingleFruVpd(
     const sdbusplus::message::object_path& i_dbusObjPath)
 {
-    if (m_vpdCollectionStatus != "Completed")
+    if (m_vpdCollectionStatus != constants::vpdCollectionCompleted)
     {
         logging::logMessage(
             "Currently VPD CollectionStatus is not completed. Cannot perform single FRU VPD collection for " +
@@ -650,12 +653,12 @@
     try
     {
         types::SeverityType l_severityType;
-        if (m_vpdCollectionStatus == "NotStarted")
+        if (m_vpdCollectionStatus == constants::vpdCollectionNotStarted)
         {
             l_severityType = types::SeverityType::Informational;
         }
-        else if (m_vpdCollectionStatus == "Completed" ||
-                 m_vpdCollectionStatus == "Failed")
+        else if (m_vpdCollectionStatus == constants::vpdCollectionCompleted ||
+                 m_vpdCollectionStatus == constants::vpdCollectionFailed)
         {
             l_severityType = types::SeverityType::Warning;
         }
diff --git a/vpd-manager/src/manager_main.cpp b/vpd-manager/src/manager_main.cpp
index 2e05a18..ab1d374 100644
--- a/vpd-manager/src/manager_main.cpp
+++ b/vpd-manager/src/manager_main.cpp
@@ -1,6 +1,7 @@
 #include "config.h"
 
 #include "bios_handler.hpp"
+#include "constants.hpp"
 #include "event_logger.hpp"
 #include "exceptions.hpp"
 #include "logger.hpp"
@@ -27,8 +28,12 @@
         std::shared_ptr<sdbusplus::asio::dbus_interface> interface =
             server.add_interface(OBJPATH, IFACE);
 
-        auto vpdManager =
-            std::make_shared<vpd::Manager>(io_con, interface, connection);
+        std::shared_ptr<sdbusplus::asio::dbus_interface> progressInf =
+            server.add_interface(OBJPATH,
+                                 vpd::constants::vpdCollectionInterface);
+
+        auto vpdManager = std::make_shared<vpd::Manager>(
+            io_con, interface, progressInf, connection);
 
         // TODO: Take this under conditional compilation for IBM
         auto biosHandler =
@@ -36,6 +41,7 @@
                 connection, vpdManager);
 
         interface->initialize();
+        progressInf->initialize();
 
         vpd::logging::logMessage("Start VPD-Manager event loop");