diff options
-rw-r--r-- | .clang-format | 99 | ||||
-rw-r--r-- | argument.cpp | 25 | ||||
-rw-r--r-- | argument.hpp | 75 | ||||
-rw-r--r-- | controller.cpp | 16 | ||||
-rw-r--r-- | physical.cpp | 23 | ||||
-rw-r--r-- | physical.hpp | 261 |
6 files changed, 301 insertions, 198 deletions
diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..ea71ad6 --- /dev/null +++ b/.clang-format @@ -0,0 +1,99 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlinesLeft: false +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: true +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: true + AfterControlStatement: true + AfterEnum: true + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: true + AfterStruct: true + AfterUnion: true + BeforeCatch: true + BeforeElse: true + IndentBraces: false +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: AfterColon +ColumnLimit: 80 +CommentPragmas: '^ IWYU pragma:' +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +PointerAlignment: Left +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +IncludeBlocks: Regroup +IncludeCategories: + - Regex: '^[<"](gtest|gmock)' + Priority: 5 + - Regex: '^"config.h"' + Priority: -1 + - Regex: '^".*\.hpp"' + Priority: 1 + - Regex: '^<.*\.h>' + Priority: 2 + - Regex: '^<.*' + Priority: 3 + - Regex: '.*' + Priority: 4 +IndentCaseLabels: true +IndentWidth: 4 +IndentWrappedFunctionNames: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +ReflowComments: true +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 4 +UseTab: Never +... + diff --git a/argument.cpp b/argument.cpp index b70a0dd..fd0c50d 100644 --- a/argument.cpp +++ b/argument.cpp @@ -14,11 +14,12 @@ * limitations under the License. */ -#include <iostream> -#include <iterator> +#include "argument.hpp" + #include <algorithm> #include <cassert> -#include "argument.hpp" +#include <iostream> +#include <iterator> namespace phosphor { @@ -29,17 +30,17 @@ const std::string ArgumentParser::true_string = "true"; const std::string ArgumentParser::empty_string = ""; const char* ArgumentParser::optionstr = "p:?h"; -const option ArgumentParser::options[] = -{ - { "path", required_argument, nullptr, 'p' }, - { "help", no_argument, nullptr, 'h' }, - { 0, 0, 0, 0}, +const option ArgumentParser::options[] = { + {"path", required_argument, nullptr, 'p'}, + {"help", no_argument, nullptr, 'h'}, + {0, 0, 0, 0}, }; ArgumentParser::ArgumentParser(int argc, char** argv) { int option = 0; - while(-1 != (option = getopt_long(argc, argv, optionstr, options, nullptr))) + while (-1 != + (option = getopt_long(argc, argv, optionstr, options, nullptr))) { if ((option == '?') || (option == 'h')) { @@ -48,7 +49,8 @@ ArgumentParser::ArgumentParser(int argc, char** argv) } auto i = &options[0]; - while ((i->val != option) && (i->val != 0)) ++i; + while ((i->val != option) && (i->val != 0)) + ++i; if (i->val) arguments[i->name] = (i->has_arg ? optarg : true_string); @@ -74,8 +76,7 @@ void ArgumentParser::usage(char** argv) std::cerr << "Options:" << std::endl; std::cerr << " --help Print this menu" << std::endl; std::cerr << " --path=<path> absolute path of LED in sysfs; like"; - std::cerr << " /sys/class/leds/<name>" - << std::endl; + std::cerr << " /sys/class/leds/<name>" << std::endl; } } // namespace led } // namespace phosphor diff --git a/argument.hpp b/argument.hpp index 9c91615..81876da 100644 --- a/argument.hpp +++ b/argument.hpp @@ -1,6 +1,7 @@ #ifndef __ARGUMENT_H #define __ARGUMENT_H #include <getopt.h> + #include <map> #include <string> @@ -13,43 +14,43 @@ namespace led */ class ArgumentParser { - public: - ArgumentParser() = delete; - ~ArgumentParser() = default; - ArgumentParser(const ArgumentParser&) = delete; - ArgumentParser& operator=(const ArgumentParser&) = delete; - ArgumentParser(ArgumentParser&&) = default; - ArgumentParser& operator=(ArgumentParser&&) = default; - - /** @brief Constructs Argument object - * - * @param argc - the main function's argc passed as is - * @param argv - the main function's argv passed as is - * @return Object constructed - */ - ArgumentParser(int argc, char** argv); - - /** @brief Given a option, returns its argument(optarg) */ - const std::string& operator[](const std::string& opt); - - /** @brief Displays usage */ - static void usage(char** argv); - - /** @brief Set to 'true' when an option is passed */ - static const std::string true_string; - - /** @brief Set to '' when an option is not passed */ - static const std::string empty_string; - - private: - /** @brief Option to argument mapping */ - std::map<const std::string, std::string> arguments; - - /** @brief Array of struct options as needed by getopt_long */ - static const option options[]; - - /** @brief optstring as needed by getopt_long */ - static const char* optionstr; + public: + ArgumentParser() = delete; + ~ArgumentParser() = default; + ArgumentParser(const ArgumentParser&) = delete; + ArgumentParser& operator=(const ArgumentParser&) = delete; + ArgumentParser(ArgumentParser&&) = default; + ArgumentParser& operator=(ArgumentParser&&) = default; + + /** @brief Constructs Argument object + * + * @param argc - the main function's argc passed as is + * @param argv - the main function's argv passed as is + * @return Object constructed + */ + ArgumentParser(int argc, char** argv); + + /** @brief Given a option, returns its argument(optarg) */ + const std::string& operator[](const std::string& opt); + + /** @brief Displays usage */ + static void usage(char** argv); + + /** @brief Set to 'true' when an option is passed */ + static const std::string true_string; + + /** @brief Set to '' when an option is not passed */ + static const std::string empty_string; + + private: + /** @brief Option to argument mapping */ + std::map<const std::string, std::string> arguments; + + /** @brief Array of struct options as needed by getopt_long */ + static const option options[]; + + /** @brief optstring as needed by getopt_long */ + static const char* optionstr; }; } // namespace led diff --git a/controller.cpp b/controller.cpp index f0ba4c2..f945034 100644 --- a/controller.cpp +++ b/controller.cpp @@ -14,12 +14,14 @@ * limitations under the License. */ -#include <iostream> -#include <string> -#include <algorithm> +#include "config.h" + #include "argument.hpp" #include "physical.hpp" -#include "config.h" + +#include <algorithm> +#include <iostream> +#include <string> static void ExitWithError(const char* err, char** argv) { @@ -68,8 +70,8 @@ int main(int argc, char** argv) std::replace(name.begin(), name.end(), '-', '_'); // Unique bus name representing a single LED. - auto busName = std::string(BUSNAME) + '.' + name; - auto objPath = std::string(OBJPATH) + '/' + name; + auto busName = std::string(BUSNAME) + '.' + name; + auto objPath = std::string(OBJPATH) + '/' + name; // Get a handle to system dbus. auto bus = std::move(sdbusplus::bus::new_default()); @@ -85,7 +87,7 @@ int main(int argc, char** argv) bus.request_name(busName.c_str()); /** @brief Wait for client requests */ - while(true) + while (true) { // Handle dbus message / signals discarding unhandled bus.process_discard(); diff --git a/physical.cpp b/physical.cpp index 38c69b0..e7ca582 100644 --- a/physical.cpp +++ b/physical.cpp @@ -14,9 +14,10 @@ * limitations under the License. */ +#include "physical.hpp" + #include <iostream> #include <string> -#include "physical.hpp" namespace phosphor { namespace led @@ -27,7 +28,7 @@ void Physical::setInitialState() { // Control files in /sys/class/leds/<led-name> brightCtrl = path + BRIGHTNESS; - blinkCtrl = path + BLINKCTRL; + blinkCtrl = path + BLINKCTRL; delayOnCtrl = path + DELAYON; delayOffCtrl = path + DELAYOFF; @@ -66,14 +67,14 @@ void Physical::setInitialState() if (brightness == std::string(ASSERT)) { // LED is in Solid ON - sdbusplus::xyz::openbmc_project::Led::server - ::Physical::state(Action::On); + sdbusplus::xyz::openbmc_project::Led::server ::Physical::state( + Action::On); } else { // LED is in OFF state - sdbusplus::xyz::openbmc_project::Led::server - ::Physical::state(Action::Off); + sdbusplus::xyz::openbmc_project::Led::server ::Physical::state( + Action::Off); } } return; @@ -83,12 +84,12 @@ void Physical::setInitialState() auto Physical::state(Action value) -> Action { // Obtain current operation - auto current = sdbusplus::xyz::openbmc_project::Led::server - ::Physical::state(); + auto current = + sdbusplus::xyz::openbmc_project::Led::server ::Physical::state(); // Update requested operation into base class - auto requested = sdbusplus::xyz::openbmc_project::Led::server - ::Physical::state(value); + auto requested = + sdbusplus::xyz::openbmc_project::Led::server ::Physical::state(value); // Apply the action. driveLED(current, requested); @@ -112,7 +113,7 @@ void Physical::driveLED(Action current, Action request) } // Transition TO Stable states. - if(request == Action::On || request == Action::Off) + if (request == Action::On || request == Action::Off) { return stableStateOperation(request); } diff --git a/physical.hpp b/physical.hpp index 36fbedc..47ad7d5 100644 --- a/physical.hpp +++ b/physical.hpp @@ -1,9 +1,9 @@ #pragma once -#include <string> #include <fstream> #include <sdbusplus/bus.hpp> #include <sdbusplus/server/object.hpp> +#include <string> #include <xyz/openbmc_project/Led/Physical/server.hpp> namespace phosphor { @@ -50,141 +50,140 @@ constexpr auto DELAYOFF = "/delay_off"; * @brief Responsible for applying actions on a particular physical LED */ class Physical : public sdbusplus::server::object::object< - sdbusplus::xyz::openbmc_project::Led::server::Physical> + sdbusplus::xyz::openbmc_project::Led::server::Physical> { - public: - Physical() = delete; - ~Physical() = default; - Physical(const Physical&) = delete; - Physical& operator=(const Physical&) = delete; - Physical(Physical&&) = delete; - Physical& operator=(Physical&&) = delete; - - /** @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 - * @param[in] ledPath - sysfs path where this LED is exported - */ - Physical(sdbusplus::bus::bus& bus, - const std::string& objPath, - const std::string& ledPath) : - - sdbusplus::server::object::object< - sdbusplus::xyz::openbmc_project::Led::server::Physical>( - bus, objPath.c_str(), true), - path(ledPath) + public: + Physical() = delete; + ~Physical() = default; + Physical(const Physical&) = delete; + Physical& operator=(const Physical&) = delete; + Physical(Physical&&) = delete; + Physical& operator=(Physical&&) = delete; + + /** @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 + * @param[in] ledPath - sysfs path where this LED is exported + */ + Physical(sdbusplus::bus::bus& bus, const std::string& objPath, + const std::string& ledPath) : + + sdbusplus::server::object::object< + sdbusplus::xyz::openbmc_project::Led::server::Physical>( + bus, objPath.c_str(), true), + path(ledPath) + { + // 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 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(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)) { - // 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(); + std::ofstream file(fileName, std::ios::out); + file << data; + file.close(); } - - /** @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 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(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) + 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)) { - T data = T(); - if(std::ifstream(fileName)) - { - std::ifstream file(fileName, std::ios::in); - file >> data; - file.close(); - } - return data; + std::ifstream file(fileName, std::ios::in); + file >> data; + file.close(); } + return data; + } }; } // namespace led -} +} // namespace phosphor |