poll () возвращает оба, POLLPRI и POLLERR
Я начал заниматься программированием на C с Linux и встроенными системами (аппаратное обеспечение маршрутизатора и openwrt). Я получил прерывания на GPIO, используя опросы ... почти.
Я могу использовать poll (), и если я нажму кнопку, чтобы вызвать прерывание, poll () вернется со значением> 0. Пока все хорошо. Теперь я пытаюсь использовать poll () для нескольких GPIO одновременно, и поэтому хочу проанализировать недостатки каждого потенциального источника прерываний. Несмотря на то, что прерывание, кажется, работает, я получаю POLLPRI & POLLERR обратно, и я не понимаю, почему. Уменьшение структуры pollfd до 1 записи ничего не меняет.
char value;
int fd_btn1 = open("/sys/class/gpio/gpio14/value", O_RDONLY);
int fd_left = open("/sys/class/gpio/gpio12/value", O_RDONLY);
int fd_right = open("/sys/class/gpio/gpio13/value", O_RDONLY);
struct pollfd fds[3];
fds[0].fd = fd_btn1;
fds[1].fd = fd_left;
fds[2].fd = fd_right;
fds[0].events = POLLPRI;
fds[1].events = POLLPRI;
fds[2].events = POLLPRI;
read(fd_btn1, &value, 1);
read(fd_left, &value, 1);
read(fd_right, &value, 1);
ret = poll(fds, 1, 10000);
//debugging purpose
printf("ret: %i - revents[0]: %i", ret, fds[0].revents);
Если кнопка была нажата (сработало прерывание): ret = 1d, revents = 10d
В случае, если ничего не было нажато, оба 0d