diff options
author | Vishwanatha Subbanna <vishwa@linux.vnet.ibm.com> | 2016-11-30 15:52:15 +0530 |
---|---|---|
committer | Vishwanatha Subbanna <vishwa@linux.vnet.ibm.com> | 2016-12-19 12:20:45 +0530 |
commit | 61675c3265166cecb0f8f5c2c4f80a78d3412c25 (patch) | |
tree | b6d77694e29e97db5e6726829c1c8eb6f1fbaee5 /physical.hpp | |
parent | 75b5510f573390e0725fd424b1799f1fdb3baa1a (diff) | |
download | phosphor-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.hpp | 118 |
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 |