[BRLTTY] screen driver in brlapi
Tage Johansson
frans.tage at gmail.com
Mon Nov 12 00:40:08 EST 2018
The code works now!
The problem was that I have to reinitialize the pollfd-struct for every
call to poll.
How ever, I have still one question.
Revents is allways set to 10. Wich means that both the POLLPRI and
POLLERR flags are set.
Why is the POLLERR flag set? Is there still a problem with my code?
Thae code follows:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/poll.h>
#include <stdint.h>
#include <string.h>
#include <errno.h>
int main () {
int vcsa = open("/dev/vcsa", O_RDONLY);
if (vcsa == -1) {
printf("OpenError: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
uint8_t header[4];
for(int i = 0; i < 30; i++) {
struct pollfd fd = {
.fd = vcsa,
.events = POLLPRI
};
if (pread(vcsa, header, sizeof(header), 0) == -1) {
printf("PreadError: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
int ret = poll(&fd, 1, -1);
if(ret == -1) {
printf("PollError: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
else if (ret == 0) {
printf("PollError: poll timed out unexpectedly.\n");
exit(EXIT_FAILURE);
}
else if (ret != 1) {
printf("PollError: bad return value from poll %d\n", ret);
exit(EXIT_FAILURE);
}
printf("%d header: %d, %d, %d, %d\n", fd.revents, header[0],
header[1], header[2], header[3]);
}
printf("\nPOLLPRI = %d POLLERR = %d\n", POLLPRI, POLLERR);
exit(EXIT_SUCCESS);
}
Thanks in advance,
Tage
More information about the BRLTTY
mailing list