Событие библиотеки gpiod и запрос ввода той же строки gpio не работают
Я попробовал вызвать gpiod_line_request_rising_edge_events () и gpiod_line_request_input () для одной и той же строки gpio в двух разных приложениях, но он вернул -1.
Я использовал приведенный ниже код, если я сначала вызываю Application-1, тогда gpiod_line_request_rising_edge_events терпит неудачу с -1. и если я сначала вызываю Application-2, тогда gpiod_line_request_inputgets терпит неудачу с -1.
// Приложение-1
#include <stdio.h>
#include <gpiod.h>
int main()
{
char tBuffer[64] = {0,};
int gpio_num = 64, ret;
static struct gpiod_chip *gs_gpiod_chip = NULL;
struct gpiod_line *gs_gpiod_line = NULL;
unsigned int tgpio_chip = gpio_num / 32;
unsigned int tgpio_line = gpio_num % 32;
sprintf(tBuffer, "/dev/gpiochip%d", tgpio_chip);
gs_gpiod_chip = gpiod_chip_open(tBuffer);
if(!gs_gpiod_chip)
{
printf("Error gpiod_chip_open\n");
return -1;
}
gs_gpiod_line = gpiod_chip_get_line(gs_gpiod_chip, tgpio_line);
if(!gs_gpiod_line)
{
printf("Error gs_gpiod_line\n");
return -1;
}
ret = gpiod_line_request_input(gs_gpiod_line, "gpio-test");
if(ret == -1)
{
printf("Error gpiod_line_request_input\n");
return -1;
}
while(1);
gpiod_chip_close(gs_gpiod_chip);
printf("success\n");
return 0;
}
// Приложение-2
#include <stdio.h>
#include <gpiod.h>
int main()
{
char tBuffer[64] = {0,};
int gpio_num = 64, ret;
static struct gpiod_chip *gs_gpiod_chip = NULL;
struct gpiod_line *gs_gpiod_line = NULL;
unsigned int tgpio_chip = gpio_num / 32;
unsigned int tgpio_line = gpio_num % 32;
sprintf(tBuffer, "/dev/gpiochip%d", tgpio_chip);
gs_gpiod_chip = gpiod_chip_open(tBuffer);
if(!gs_gpiod_chip)
{
printf("Error gpiod_chip_open\n");
return -1;
}
gs_gpiod_line = gpiod_chip_get_line(gs_gpiod_chip, tgpio_line);
if(!gs_gpiod_line)
{
printf("Error gs_gpiod_line\n");
return -1;
}
ret = gpiod_line_request_rising_edge_events(gs_gpiod_line, "DICnt-TEST");
if(ret == -1)
{
printf("Error gpiod_line_request_rising_edge_events\n");
return -1;
}
while(1);
gpiod_chip_close(gs_gpiod_chip);
printf("success\n");
return 0;
}
Есть ли у нас возможность заставить его работать или любое другое альтернативное решение с библиотекой libgpiod.
Спасибо.
1 ответ
GPIO uAPI и
Если вам действительно необходимо разделить состояние линии или граничные события между двумя процессами, вам нужно, чтобы один процесс захватывал их и предоставлял их другому.