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