phosphor-gpio-monitor: Replace Argument class with CLI11
Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: Id750beb9f8b8f8ec0c611c58b9a0ef86d92750f4
diff --git a/mainapp.cpp b/mainapp.cpp
index 7a3300f..2496a89 100644
--- a/mainapp.cpp
+++ b/mainapp.cpp
@@ -14,59 +14,51 @@
* limitations under the License.
*/
-#include "argument.hpp"
#include "monitor.hpp"
#include <systemd/sd-event.h>
+#include <CLI/CLI.hpp>
#include <phosphor-logging/lg2.hpp>
#include <iostream>
#include <string>
-static void exitWithError(const char* err, char** argv)
-{
- phosphor::gpio::ArgumentParser::usage(argv);
- std::cerr << "ERROR: " << err << "\n";
- exit(EXIT_FAILURE);
-}
-
int main(int argc, char** argv)
{
+ CLI::App app{"Monitor GPIO line for requested state change"};
+
// Read arguments.
- auto options = phosphor::gpio::ArgumentParser(argc, argv);
+ std::string path{};
+ std::string key{};
+ std::string polarity{};
+ std::string target{};
+ bool continueRun = false;
- // Parse out path argument.
- auto path = (options)["path"];
- if (path == phosphor::gpio::ArgumentParser::emptyString)
+ /* Add an input option */
+ app.add_option("-p,--path", path,
+ "Path of input device. Ex: /dev/input/event2")
+ ->required();
+ app.add_option("-k,--key", key, "Input GPIO key number")->required();
+ app.add_option("-r,--polarity", polarity,
+ "Asertion polarity to look for. This is 0 / 1")
+ ->required();
+ app.add_option("-t,--target", target,
+ "Systemd unit to be called on GPIO state change")
+ ->required();
+ app.add_option("-c,--continue", continueRun,
+ "PWhether or not to continue after key pressed");
+
+ /* Parse input parameter */
+ try
{
- exitWithError("path not specified.", argv);
+ app.parse(argc, argv);
}
-
- // Parse out key number that we are interested in
- // Its integer mapping to the GPIO key configured by the kernel
- auto key = (options)["key"];
- if (key == phosphor::gpio::ArgumentParser::emptyString)
+ catch (const CLI::Error& e)
{
- exitWithError("Key not specified.", argv);
+ return app.exit(e);
}
- // Parse out assertion polarity interested in
- // Its either 1 or 0 for press / release
- auto polarity = (options)["polarity"];
- if (polarity == phosphor::gpio::ArgumentParser::emptyString)
- {
- exitWithError("Polarity not specified.", argv);
- }
-
- // Parse out target argument. It is fine if the caller does not
- // pass this if they are not interested in calling into any target
- // on meeting a condition.
- auto target = (options)["target"];
-
- bool continueRun =
- (options["continue"] == phosphor::gpio::ArgumentParser::trueString);
-
sd_event* event = nullptr;
auto r = sd_event_default(&event);
if (r < 0)
@@ -90,7 +82,7 @@
if (r < 0)
{
lg2::error("Failure in processing request: {RC}", "RC", r);
- break;
+ return r;
}
}