Add overriding methods for the base interface definition

Defines the functions that override the default setter for
the led state property.

Change-Id: Ic3a8d43cc783003c43f53df8f7e90d7fc4d6715a
Signed-off-by: Vishwanatha Subbanna <vishwa@linux.vnet.ibm.com>
diff --git a/physical.hpp b/physical.hpp
index f0b4048..0eac97b 100644
--- a/physical.hpp
+++ b/physical.hpp
@@ -20,10 +20,13 @@
         ~Physical() = default;
         Physical(const Physical&) = delete;
         Physical& operator=(const Physical&) = delete;
-        Physical(Physical&&) = delete;
-        Physical& operator=(Physical&&) = delete;
+        Physical(Physical&&) = default;
+        Physical& operator=(Physical&&) = default;
 
-        /** @brief Constructs LED object
+        /** @brief Constructs LED object. Argument 'true' says that we hold off
+         *   from sending the signals since we need to do some house keeping and
+         *   only when we finish that, we are considered active and can then
+         *   broadcast the signal.
          *
          * @param[in] bus       - system dbus handler
          * @param[in] objPath   - The Dbus path that hosts physical LED
@@ -35,18 +38,43 @@
 
             sdbusplus::server::object::object<
                 sdbusplus::xyz::openbmc_project::Led::server::Physical>(
-                        bus, objPath.c_str()),
+                        bus, objPath.c_str(), true),
             path(ledPath)
         {
-                // Nothing to do here
+            // Suppose this is getting launched as part of BMC reboot, then we
+            // need to save what the micro-controller currently has.
+            setInitialState();
+
+            // We are now ready.
+            emit_object_added();
         }
 
+        /** @brief Overloaded State Property Setter function
+         *
+         *  @param[in] value   -  One of OFF / ON / BLINK
+         *  @return            -  Success or exception thrown
+         */
+        Action state(Action value) override;
+
     private:
         /** @brief File system location where this LED is exposed
          *   Typically /sys/class/leds/<Led-Name>
          */
         std::string path;
+
+        /** @brief Applies the user triggered action on the LED
+         *   by writing to sysfs
+         *
+         *  @return None
+         */
+        void driveLED(void);
+
+        /** @brief reads sysfs and then setsup the parameteres accordingly
+         *
+         *  @return Status or exception thrown
+         */
+        void setInitialState(void);
 };
 
 } // namespace led
-} // namespace phosphor
+}