sysfs: Integrate class into Physical and tests

Change-Id: I7d5ad19df5ef1258a4e669ea3243b7411f371d9c
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
diff --git a/physical.hpp b/physical.hpp
index 47ad7d5..c8ef4fd 100644
--- a/physical.hpp
+++ b/physical.hpp
@@ -1,50 +1,22 @@
 #pragma once
 
+#include "sysfs.hpp"
+
 #include <fstream>
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/object.hpp>
 #include <string>
 #include <xyz/openbmc_project/Led/Physical/server.hpp>
+
 namespace phosphor
 {
 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";
+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";
+constexpr auto DEASSERT = 0;
 
 /** @class Physical
  *  @brief Responsible for applying actions on a particular physical LED
@@ -70,12 +42,12 @@
      * @param[in] ledPath   - sysfs path where this LED is exported
      */
     Physical(sdbusplus::bus::bus& bus, const std::string& objPath,
-             const std::string& ledPath) :
+             SysfsLed& led) :
 
         sdbusplus::server::object::object<
             sdbusplus::xyz::openbmc_project::Led::server::Physical>(
             bus, objPath.c_str(), true),
-        path(ledPath)
+        led(led)
     {
         // Suppose this is getting launched as part of BMC reboot, then we
         // need to save what the micro-controller currently has.
@@ -93,28 +65,15 @@
     Action state(Action value) override;
 
   private:
-    /** @brief File system location where this LED is exposed
-     *   Typically /sys/class/leds/<Led-Name>
+    /** @brief Associated LED implementation
      */
-    std::string path;
+    SysfsLed& led;
 
     /** @brief Frequency range that the LED can operate on.
      *  Will be removed when frequency is put into interface
      */
     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 None
@@ -143,46 +102,6 @@
      *  @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