[BRLTTY] screen driver in brlapi
Tage Johansson
frans.tage at gmail.com
Wed Nov 7 00:33:10 EST 2018
Hi again
I've now rewritten my code, but it still returns instantly.
#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("Error: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
struct pollfd fd = {
.fd = vcsa,
.events = POLLIN
};
uint8_t header[4];
for(int i = 0; i < 30; i++) {
if (read(vcsa, header, sizeof(header)) == -1) {
printf("Error: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
if (lseek(vcsa, 0, SEEK_SET) == -1) {
printf("Error: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
if(poll(&fd, 1, -1) == -1) {
printf("Error: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
printf("%d header: %d, %d, %d, %d\n", fd.revents, header[0],
header[1], header[2], header[3]);
}
printf("\nPOLLIN = %d POLLERR = %d\n", POLLIN, POLLERR);
return 0;
}
I ran the program as root. The output looks like this:
9 header: 37, 100, 0, 35
1 header: 37, 100, 0, 35
1 header: 37, 100, 0, 35
1 header: 37, 100, 0, 35
...
POLLERR = 8 POLLIN = 1
So the first call to poll indicates some error because the "POLLERR" bit
is set. Subsiquent calls are fine because they only sets the POLLIN bit.
But the real problem is that poll still returns instantly and doesn't
wait for any changes to occur.
Thanks in advance,
Tage
More information about the BRLTTY
mailing list