poll () devuelve ambos, POLLPRI y POLLERR

Comencé a ingresar en la programación en C con Linux y sistemas integrados (hardware de enrutador y openwrt). Tengo interrupciones en GPIO habilitadas, usando encuestas ... casi.

Puedo usar poll () y si presiono el botón para activar la interrupción, poll () regresa con un valor> 0. Hasta ahora todo bien. Ahora trato de usar poll () en varios GPIO simultáneamente y, por lo tanto, quiero analizar las reverencias de cada fuente potencial de interrupción. A pesar de que la interrupción parece funcionar, recupero POLLPRI & POLLERR y no entiendo por qué. Reducir la estructura pollfd a 1 entrada no cambia nada.

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

En caso de presionar el botón (interrupción activada): ret = 1d, revents = 10d

En caso de que no se presione nada, ambos son 0d

Respuestas a la pregunta(1)

Su respuesta a la pregunta