nanorobot 5 24 апреля Опубликовано 24 апреля · Жалоба Играюсь с библиотекой libgpiod в biuldroot. Версия библиотеки 1.6.3. Установлена в процессе сборки buildroot (выбрана соответствующая опция в menucofig). Функции загружаются из динамической библиотеки /usr/lib/libgpio.so. Простейшие функции установить/сбросить выход, опросить состояние входа - все работают, воросов нет. Не получается заставить работать функции связанные с эвентами, например gpiod_ctxless_event_monitor и gpiod_ctxless_event_monitor_ext. Как правило, либо завершаются с ошибкой (возвращают минус 1), либо вообще ничего не происходит. Пример вызова: int event_handle_cb(int n, unsigned int a, const struct timespec * ts, void *p) { printf("ctxless_event_handler"); } int event_poll_cb(unsigned int n, struct gpiod_ctxless_event_poll_fd * fd, const struct timespec * ts, void * p) { printf("ctxless_event_poll"); } static void * thread_3_func (void * param) { (void)param; static int count; struct timespec ts = { 1, 0 }; do{ int result = gpiod_ctxless_event_monitor_ext_f("/dev/gpiochip0", GPIOD_CTXLESS_EVENT_BOTH_EDGES, 132, 0, CONSUMER, &ts, event_poll_cb, event_handle_cb, NULL, 0); if(0 == result)printf("count = %u", count++); } while(1);} gpiod_ctxless_event_monitor_ext_f - это мой указатель на соответствующую функцию в библиотеке libgpio.so. В качестве входа использована gpio PE4 (номер 132 в gpiochip0), к ней подключена кнопка... из командной строки все работает root@MangoPI_MQ-Dual:~$ gpiomon gpiochip0 132 event: RISING EDGE offset: 132 timestamp: [ 11559.685259011] event: FALLING EDGE offset: 132 timestamp: [ 11559.816642886] event: RISING EDGE offset: 132 timestamp: [ 11559.908819095] event: FALLING EDGE offset: 132 timestamp: [ 11559.996188178] Что я делаю неправильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 3 24 апреля Опубликовано 24 апреля · Жалоба попробуйте через функции: gpiod_chip_get_line, gpiod_line_request_rising_edge_events, gpiod_line_event_wait, gpiod_line_event_read Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 5 25 апреля Опубликовано 25 апреля · Жалоба 15 hours ago, gridinp said: попробуйте через функции: gpiod_chip_get_line, gpiod_line_request_rising_edge_events, gpiod_line_event_wait, gpiod_line_event_read Ранее пробовал эти функции, тоже неуспешно. Сейчас разобрался - требовалось разрешить события для линии 132 (line_button) struct gpiod_line_request_config conf = {CONSUMER, GPIOD_LINE_REQUEST_EVENT_BOTH_EDGES, GPIOD_LINE_REQUEST_FLAG_BIAS_PULL_DOWN}; gpiod_line_request_f(line_button, &conf, 0); теперь все работает.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nanorobot 5 27 апреля Опубликовано 27 апреля · Жалоба On 4/25/2024 at 7:40 AM, nanorobot said: Ранее пробовал эти функции, тоже неуспешно. Сейчас разобрался - требовалось разрешить события для линии 132 (line_button) struct gpiod_line_request_config conf = {CONSUMER, GPIOD_LINE_REQUEST_EVENT_BOTH_EDGES, GPIOD_LINE_REQUEST_FLAG_BIAS_PULL_DOWN}; gpiod_line_request_f(line_button, &conf, 0); теперь все работает.. Но gpiod_ctxless_event_monitor и gpiod_ctxless_event_monitor_ext запустить так и не удалось, как ни пытался, всегда возвращают минус 1, - они рабочие в принципе? Может быть нужна более свежая версия библиотеки?. Они мне интересны тем, что, видимо потенцально дают возможность повесить callback-и на события GPIO, без опроса их в треде. Если имели положительный опыт использования, поделитесь пожалуйста. Еще такой вопрос интересует: есть ли какая то целесообразность в использовани параметра 'consumer' - может об этом можно где то почитать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 27 апреля Опубликовано 27 апреля · Жалоба Если работает gpiomon почему нельзя посмотреть исходники ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergiy_83 0 16 мая Опубликовано 16 мая · Жалоба Посмотрите в сторону <linux/gpio.h> - userspace ABI for the GPIO character devices Зачем вам лишняя зависимость в вашем приложении от очередной библиотеки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться