gpiod - программный асинхронный мониторинг в C++
Я рассматриваю возможность использования интерфейса gpiod на встроенном устройстве Linux с инфраструктурой C++. Проблема в том, что я не встречал примера асинхронного мониторинга ввода с помощью gpiod. В идеале это должно быть что-то вроде gpiomon, но без блокировки.
Я использовал asio (в частности, asio::async_read) с файловыми дескрипторами (fd), чтобы выполнить это, но он выглядит несовместимым с gpiod (связанный вопрос ).
Кроме того, похоже, что смешивание файловых дескрипторов с gpiod является грязным, поскольку строки gpiod назначают внутри собственный fd, который, насколько я вижу, не отображается.
Любые указатели будут оценены.
С уважением,
1 ответ
Помимо блокировки чтения и ожидания по времени, он предоставляет запрос строки, поэтому у вас есть возможность использовать его с любым механизмом асинхронного опроса, подходящим для вашего приложения.
Вlibgpiod v2
это черезgpiod::line_request::fd()
- ссылкаgpiodcxx/line-request.hpp
(входит в состав).
Дляlibgpiod v1
это черезgpiod::line::event_get_fd()
- ссылкаgpiod.hpp
.
Соответствующий вопрос относится к GPIO.sysfs
файловые дескрипторы — старый устаревший API GPIO.libgpiod
использует новый API символьного устройства и возвращаемыйfd
подходят дляpoll()
инж.