1 #pragma once 2 3 #include <gpiod.h> 4 5 #include <attn/attn_config.hpp> 6 #include <boost/asio/io_service.hpp> 7 #include <boost/asio/posix/stream_descriptor.hpp> 8 9 namespace attn 10 { 11 12 /** 13 * @brief Responsible for monitoring attention GPIO state change 14 */ 15 class AttnMonitor 16 { 17 public: 18 AttnMonitor() = delete; 19 ~AttnMonitor() = default; 20 21 /** @brief Constructs AttnMonitor object. 22 * 23 * The AttnMonitor constructor will create a new object and start 24 * the objects associated GPIO listener. 25 * 26 * @param line GPIO line handle 27 * @param config configuration of line 28 * @param io io service 29 * @param i_attnConfig poiner to attention handler configuration object 30 */ 31 AttnMonitor(gpiod_line* line, gpiod_line_request_config& config, 32 boost::asio::io_service& io, Config* i_attnConfig) : 33 iv_gpioLine(line), 34 iv_gpioConfig(config), iv_gpioEventDescriptor(io), 35 iv_config(i_attnConfig) 36 { 37 38 requestGPIOEvent(); // registers the event handler 39 } 40 41 // delete copy constructor 42 AttnMonitor(const AttnMonitor&) = delete; 43 44 // delete assignment operator 45 AttnMonitor& operator=(const AttnMonitor&) = delete; 46 47 // delere move copy consructor 48 AttnMonitor(AttnMonitor&&) = delete; 49 50 // delete move assignment operator 51 AttnMonitor& operator=(AttnMonitor&&) = delete; 52 53 private: // instance variables 54 /** @brief gpiod handle to gpio line */ 55 gpiod_line* iv_gpioLine; 56 57 /** @brief gpiod line config data */ 58 gpiod_line_request_config iv_gpioConfig; 59 60 /** @brief GPIO event descriptor */ 61 boost::asio::posix::stream_descriptor iv_gpioEventDescriptor; 62 63 /** @brief attention handler configuration object pointer */ 64 Config* iv_config; 65 66 private: // class methods 67 /** @brief schedule a gpio event handler */ 68 void scheduleGPIOEvent(); 69 70 /** @brief handle the GPIO event */ 71 void handleGPIOEvent(); 72 73 /** @brief register for a gpio event */ 74 void requestGPIOEvent(); 75 }; 76 77 } // namespace attn 78