xref: /openbmc/openpower-hw-diags/attn/attn_main.cpp (revision c7aacfaf677a9ac4acfcec7306e6090b291eb875)
1 #include <attn/attn_monitor.hpp>
2 
3 namespace attn
4 {
5 
6 /**
7  * @brief Attention handler application main()
8  */
attnDaemon(Config * i_config)9 int attnDaemon(Config* i_config)
10 {
11     int rc = 0;                 // assume success
12 
13     gpiod_line* line;           // gpio line to monitor
14 
15     boost::asio::io_context io; // async io monitoring service
16 
17     // GPIO line configuration (falling edge, active low)
18     struct gpiod_line_request_config config{
19         "attention", GPIOD_LINE_REQUEST_EVENT_FALLING_EDGE, 0};
20 
21     // get handle to attention GPIO line
22     line = gpiod_line_find("checkstop");
23 
24     if (nullptr == line)
25     {
26         rc = 1; // error
27     }
28     else
29     {
30         // Creating a vector of one gpio to monitor
31         std::vector<std::unique_ptr<attn::AttnMonitor>> gpios;
32         gpios.push_back(
33             std::make_unique<attn::AttnMonitor>(line, config, io, i_config));
34 
35         io.run(); // start GPIO monitor
36 
37         // done with line, manually close chip (per gpiod api comments)
38         gpiod_line_close_chip(line);
39     }
40 
41     return rc;
42 }
43 
44 } // namespace attn
45