Add Support to do device bind and unbind based on OCC status

Fixes openbmc/openbmc#1698

Change-Id: Iaa33c3065b0358b62e3ec7e39d4b57c6b9d181e1
Signed-off-by: Vishwanatha Subbanna <vishwa@linux.vnet.ibm.com>
diff --git a/occ_status.hpp b/occ_status.hpp
index 068f83b..5d092b7 100644
--- a/occ_status.hpp
+++ b/occ_status.hpp
@@ -3,6 +3,7 @@
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/object.hpp>
 #include <org/open_power/OCC/Status/server.hpp>
+#include "occ_device.hpp"
 namespace open_power
 {
 namespace occ
@@ -30,11 +31,19 @@
          *  @param[in] path - DBus object path
          */
         Status(sdbusplus::bus::bus& bus, const char* path)
-            : Interface(bus, path)
+            : Interface(bus, path),
+              path(path),
+              device(name + std::to_string((this->path.back() - '0') + 1))
         {
             // Nothing to do here
         }
 
+        /** @brief Since we are overriding the setter-occActive but not the
+         *         getter-occActive, we need to have this using in order to
+         *         allow passthrough usage of the getter-occActive
+         */
+        using Base::Status::occActive;
+
         /** @brief SET OccActive to True or False
          *
          *  @param[in] value - Intended value
@@ -42,6 +51,16 @@
          *  @return          - Updated value of the property
          */
         bool occActive(bool value) override;
+
+    private:
+        /** @brief OCC dbus object path */
+        std::string path;
+
+        /** @brief occ name prefix */
+        std::string name = OCC_NAME;
+
+        /** @brief OCC device object to do bind and unbind */
+        Device device;
 };
 
 } // namespace occ