[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