Add command line interface to attention handler

Allows configuring attention handler before starting attention
GPIO monitor.

Signed-off-by: Ben Tyner <ben.tyner@ibm.com>
Change-Id: I7a8d91703c14ce6d8eb3efddb135f11bf6baf06e
diff --git a/attn/attn_main.cpp b/attn/attn_main.cpp
index e4766f0..c0e2451 100644
--- a/attn/attn_main.cpp
+++ b/attn/attn_main.cpp
@@ -3,15 +3,54 @@
 #include <attn_handler.hpp>
 #include <attn_monitor.hpp>
 
+#include <algorithm>
+
+/*
+ * @brief Search the command line arguments for an option
+ *
+ * @param i_begin   command line args vector begin
+ * @param i_end     command line args vector end
+ * @param i_option  configuration option to look for
+ *
+ * @return true = option found on command line
+ */
+bool getCliOption(char** i_begin, char** i_end, const std::string& i_option)
+{
+    return (i_end != std::find(i_begin, i_end, i_option));
+}
+
+/*
+ * @brief Search the command line arguments for a setting value
+ *
+ * @param i_begin   command line args vector begin
+ * @param i_end     command line args vectory end
+ * @param i_setting configuration setting to look for
+ *
+ * @return value of the setting or 0 if setting not found or value not given
+ */
+char* getCliSetting(char** i_begin, char** i_end, const std::string& i_setting)
+{
+    char** value = std::find(i_begin, i_end, i_setting);
+    if (value != i_end && ++value != i_end)
+    {
+        return *value;
+    }
+    return 0; // nullptr
+}
+
 /**
  * @brief Attention handler application main()
  *
  * This is the main interface to the Attention handler application, it will
  * initialize the libgpd targets and start a gpio mointor.
  *
+ * Command line arguments:
+ *
+ *  breakpoints - enables breakpoint special attn handling
+ *
  * @return 0 = success
  */
-int main()
+int main(int argc, char* argv[])
 {
     int rc = 0; // return code
 
@@ -37,9 +76,13 @@
     }
     else
     {
+        // Check command line args for breakpoint handling enable option
+        bool bp_enable = getCliOption(argv, argv + argc, "-breakpoints");
+
         // Creating a vector of one gpio to monitor
         std::vector<std::unique_ptr<attn::AttnMonitor>> gpios;
-        gpios.push_back(std::make_unique<attn::AttnMonitor>(line, config, io));
+        gpios.push_back(
+            std::make_unique<attn::AttnMonitor>(line, config, io, bp_enable));
 
         io.run(); // start GPIO monitor
     }