Перейти к содержанию
    

работа с библиотекой libgpiod в buildroot на плате MangoPi / T113-s3

Играюсь с библиотекой 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]

Что я делаю неправильно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

попробуйте через функции: gpiod_chip_get_line, gpiod_line_request_rising_edge_events, gpiod_line_event_wait, gpiod_line_event_read

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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);

теперь все работает..

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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' - может об этом можно где то почитать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если работает gpiomon почему нельзя посмотреть исходники ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите в сторону <linux/gpio.h> - userspace ABI for the GPIO character devices

Зачем вам лишняя зависимость в вашем приложении от очередной библиотеки. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...