Combine attn handler and openpower hwdiags

The main binary is now openpower-hw-diags. This application will take a
command line option --daemon to load it as a daemon. As a daemon it will
register the attention handler portion of application as the attention
gpio event handler. If the application is not loaded as a daemon it will
operate as a stand alone application which accepts command line options
for requesting hardware analyses and diagnostics operations.

Change-Id: I6210b744cb320873d74a0757928f904ca6296846
Signed-off-by: Ben Tyner <ben.tyner@ibm.com>
diff --git a/attn/attn_main.cpp b/attn/attn_main.cpp
index c0e2451..492531b 100644
--- a/attn/attn_main.cpp
+++ b/attn/attn_main.cpp
@@ -1,66 +1,19 @@
-#include <libpdbg.h>
+#include <../attn/attn_monitor.hpp>
 
-#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)
+namespace attn
 {
-    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 argc, char* argv[])
+int attnDaemon(bool i_breakpoints)
 {
-    int rc = 0; // return code
+    int rc = 0; // assume success
 
     gpiod_line* line; // gpio line to monitor
 
     boost::asio::io_service io; // async io monitoring service
 
-    // initialize pdbg targets
-    pdbg_targets_init(nullptr);
-
     // GPIO line configuration (falling edge, active low)
     struct gpiod_line_request_config config
     {
@@ -76,16 +29,15 @@
     }
     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, bp_enable));
+        gpios.push_back(std::make_unique<attn::AttnMonitor>(line, config, io,
+                                                            i_breakpoints));
 
         io.run(); // start GPIO monitor
     }
 
     return rc;
 }
+
+} // namespace attn