1*0205f3b3SBen Tyner #include <../attn/attn_monitor.hpp>
2ef320154SBen Tyner 
3*0205f3b3SBen Tyner namespace attn
4970fd4fbSBen Tyner {
5970fd4fbSBen Tyner 
6ef320154SBen Tyner /**
7ef320154SBen Tyner  * @brief Attention handler application main()
8ef320154SBen Tyner  */
9*0205f3b3SBen Tyner int attnDaemon(bool i_breakpoints)
10ef320154SBen Tyner {
11*0205f3b3SBen Tyner     int rc = 0; // assume success
12ef320154SBen Tyner 
1373ac368aSBen Tyner     gpiod_line* line; // gpio line to monitor
1473ac368aSBen Tyner 
1573ac368aSBen Tyner     boost::asio::io_service io; // async io monitoring service
1673ac368aSBen Tyner 
1773ac368aSBen Tyner     // GPIO line configuration (falling edge, active low)
1873ac368aSBen Tyner     struct gpiod_line_request_config config
1973ac368aSBen Tyner     {
2073ac368aSBen Tyner         "attention", GPIOD_LINE_REQUEST_EVENT_FALLING_EDGE, 0
2173ac368aSBen Tyner     };
2273ac368aSBen Tyner 
2373ac368aSBen Tyner     // get handle to attention GPIO line
2473ac368aSBen Tyner     line = gpiod_line_get("gpiochip0", 74);
2573ac368aSBen Tyner 
2673ac368aSBen Tyner     if (nullptr == line)
2773ac368aSBen Tyner     {
2873ac368aSBen Tyner         rc = 1; // error
2973ac368aSBen Tyner     }
3073ac368aSBen Tyner     else
3173ac368aSBen Tyner     {
3273ac368aSBen Tyner         // Creating a vector of one gpio to monitor
3373ac368aSBen Tyner         std::vector<std::unique_ptr<attn::AttnMonitor>> gpios;
34*0205f3b3SBen Tyner         gpios.push_back(std::make_unique<attn::AttnMonitor>(line, config, io,
35*0205f3b3SBen Tyner                                                             i_breakpoints));
3673ac368aSBen Tyner 
3773ac368aSBen Tyner         io.run(); // start GPIO monitor
3873ac368aSBen Tyner     }
3973ac368aSBen Tyner 
40ef320154SBen Tyner     return rc;
41ef320154SBen Tyner }
42*0205f3b3SBen Tyner 
43*0205f3b3SBen Tyner } // namespace attn
44