1 #pragma once 2 3 #include <gpiod.h> 4 5 #include <attn/attn_config.hpp> 6 #include <boost/asio/io_context.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 */ AttnMonitor(gpiod_line * line,gpiod_line_request_config & config,boost::asio::io_context & io,Config * i_attnConfig)31 AttnMonitor(gpiod_line* line, gpiod_line_request_config& config, 32 boost::asio::io_context& io, Config* i_attnConfig) : 33 iv_gpioLine(line), iv_gpioConfig(config), iv_gpioEventDescriptor(io), 34 iv_config(i_attnConfig) 35 { 36 requestGPIOEvent(); // registers the event handler 37 } 38 39 // delete copy constructor 40 AttnMonitor(const AttnMonitor&) = delete; 41 42 // delete assignment operator 43 AttnMonitor& operator=(const AttnMonitor&) = delete; 44 45 // delere move copy consructor 46 AttnMonitor(AttnMonitor&&) = delete; 47 48 // delete move assignment operator 49 AttnMonitor& operator=(AttnMonitor&&) = delete; 50 51 private: // instance variables 52 /** @brief gpiod handle to gpio line */ 53 gpiod_line* iv_gpioLine; 54 55 /** @brief gpiod line config data */ 56 gpiod_line_request_config iv_gpioConfig; 57 58 /** @brief GPIO event descriptor */ 59 boost::asio::posix::stream_descriptor iv_gpioEventDescriptor; 60 61 /** @brief attention handler configuration object pointer */ 62 Config* iv_config; 63 64 private: // class methods 65 /** @brief schedule a gpio event handler */ 66 void scheduleGPIOEvent(); 67 68 /** @brief handle the GPIO event */ 69 void handleGPIOEvent(); 70 71 /** @brief register for a gpio event */ 72 void requestGPIOEvent(); 73 }; 74 75 } // namespace attn 76