summaryrefslogtreecommitdiffstats
path: root/physical.hpp
diff options
context:
space:
mode:
authorVishwanatha Subbanna <vishwa@linux.vnet.ibm.com>2016-11-30 15:52:15 +0530
committerVishwanatha Subbanna <vishwa@linux.vnet.ibm.com>2016-12-19 12:20:45 +0530
commit61675c3265166cecb0f8f5c2c4f80a78d3412c25 (patch)
treeb6d77694e29e97db5e6726829c1c8eb6f1fbaee5 /physical.hpp
parent75b5510f573390e0725fd424b1799f1fdb3baa1a (diff)
downloadphosphor-led-sysfs-61675c3265166cecb0f8f5c2c4f80a78d3412c25.tar.gz
phosphor-led-sysfs-61675c3265166cecb0f8f5c2c4f80a78d3412c25.zip
Add methods to trigger action on LED
Implements the ON, OFF and BLINK operations on a given LED. Change-Id: I74b5ac01d8e76961999a2673d52d73296f5603d7 Signed-off-by: Vishwanatha Subbanna <vishwa@linux.vnet.ibm.com>
Diffstat (limited to 'physical.hpp')
-rw-r--r--physical.hpp118
1 files changed, 114 insertions, 4 deletions
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 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";
+
+/** @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 @@ class Physical : public sdbusplus::server::object::object<
*/
std::string path;
+ /** @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
+ */
+ 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(void);
+ void driveLED(Action current, Action request);
- /** @brief reads sysfs and then setsup the parameteres accordingly
+ /** @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.
*
- * @return Status or exception thrown
+ * @param[in] filename - Name of file to be written
+ * @param[in] data - Data to be written to
+ * @return - None
*/
- void setInitialState(void);
+ 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
OpenPOWER on IntegriCloud