diff --git a/physical.hpp b/physical.hpp
index 0eac97b..c24d3f2 100644
--- a/physical.hpp
+++ b/physical.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include <string>
+#include <fstream>
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/object.hpp>
 #include "xyz/openbmc_project/Led/Physical/server.hpp"
@@ -8,6 +9,42 @@
 {
 namespace led
 {
+/** @brief Acts as input and output file for the current LED power state.
+ *   Write "0" to trigger a LED OFF operation.
+ *   Write "255" to trigger a LED ON operation.
+ *   To know the current power state of the LED, a read on this
+ *   would give either 0 or 255 indicating if the LED is currently
+ *   Off / On AT THAT moment.
+ *   Example: /sys/class/leds/myled/brightness
+ */
+constexpr auto BRIGHTNESS = "/brightness";
+
+/** @brief Assert LED by writing 255 */
+constexpr auto ASSERT = "255";
+
+/** @brief De-assert by writing "0" */
+constexpr auto DEASSERT = "0";
+
+/** @brief Write "timer" to this file telling the driver that
+ *   the intended operation is BLINK. When the value "timer" is written to
+ *   the file, 2 more files get auto generated and are named "delay_on" and
+ *   "delay_off"
+ *   To move away from blinking, write "none"
+ *   Example:  /sys/class/leds/myled/trigger
+ */
+constexpr auto BLINKCTRL = "/trigger";
+
+/** @brief write number of milliseconds that the LED needs to be ON
+ *   while blinking. Default is 500 by the driver.
+ *   Example:  /sys/class/leds/myled/delay_on
+ */
+constexpr auto DELAYON = "/delay_on";
+
+/** @brief Write number of milliseconds that the LED needs to be OFF
+ *   while blinking. Default is 500 by the driver.
+ *   Example:  /sys/class/leds/myled/delay_off
+ */
+constexpr auto DELAYOFF = "/delay_off";
 
 /** @class Physical
  *  @brief Responsible for applying actions on a particular physical LED
@@ -62,18 +99,91 @@
          */
         std::string path;
 
-        /** @brief Applies the user triggered action on the LED
-         *   by writing to sysfs
-         *
-         *  @return None
+        /** @brief Frequency range that the LED can operate on.
+         *  Will be removed when frequency is put into interface
          */
-        void driveLED(void);
+        uint32_t frequency;
+
+        /** @brief Brightness described above */
+        std::string brightCtrl;
+
+        /** @brief BlinkCtrl described above */
+        std::string blinkCtrl;
+
+        /** @brief delay_on described above */
+        std::string delayOnCtrl;
+
+        /** @brief delay_ff described above */
+        std::string delayOffCtrl;
 
         /** @brief reads sysfs and then setsup the parameteres accordingly
          *
-         *  @return Status or exception thrown
+         *  @return None
          */
-        void setInitialState(void);
+        void setInitialState();
+
+        /** @brief Applies the user triggered action on the LED
+         *   by writing to sysfs
+         *
+         *  @param [in] current - Current state of LED
+         *  @param [in] request - Requested state
+         *
+         *  @return None
+         */
+        void driveLED(Action current, Action request);
+
+        /** @brief Sets the LED to either ON or OFF state
+         *
+         *  @param [in] action - Requested action. Could be OFF or ON
+         *  @return None
+         */
+        void stableStateOperation(Action action);
+
+        /** @brief Sets the LED to BLINKING
+         *
+         *  @return None
+         */
+        void blinkOperation();
+
+        /** @brief Generic file writer.
+         *   There are files like "brightness", "trigger" , "delay_on" and
+         *   "delay_off" that will tell what the LED driver needs to do.
+         *
+         *  @param[in] filename - Name of file to be written
+         *  @param[in] data     - Data to be written to
+         *  @return             - None
+         */
+        template <typename T>
+        auto write(const std::string& fileName, T&& data)
+        {
+            if(std::ifstream(fileName))
+            {
+                std::ofstream file(fileName, std::ios::out);
+                file << data;
+                file.close();
+            }
+            return;
+        }
+
+        /** @brief Generic file reader.
+         *   There are files like "brightness", "trigger" , "delay_on" and
+         *   "delay_off" that will tell what the LED driver needs to do.
+         *
+         *  @param[in] filename - Name of file to be read
+         *  @return             - File content
+         */
+        template <typename T>
+        T read(const std::string& fileName)
+        {
+            T data = T();
+            if(std::ifstream(fileName))
+            {
+                std::ifstream file(fileName, std::ios::in);
+                file >> data;
+                file.close();
+            }
+            return data;
+        }
 };
 
 } // namespace led
