From c5fce104c22dae327714559562383b3e85bb7df1 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 28 Nov 2008 00:08:39 +0000 Subject: Restore select() usage for Freerunner accelerometers --- src/accelerometers.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/accelerometers.c b/src/accelerometers.c index a285574..14921c6 100644 --- a/src/accelerometers.c +++ b/src/accelerometers.c @@ -77,7 +77,7 @@ AccelHandle *accelerometer_open() { return accel; } - accel->fd = open("/dev/input/event3", O_RDONLY, O_NONBLOCK); + accel->fd = open("/dev/input/event3", O_RDONLY, 0); if ( accel->fd != -1 ) { accel->type = ACCEL_FREERUNNER; printf("Neo Freerunner detected\n"); @@ -139,10 +139,22 @@ int accelerometer_moo_freerunner(AccelHandle *accel) { fd_set fds; struct timeval t; - rval = read(accel->fd, &ev, sizeof(ev)); - if ( rval != sizeof(ev) ) { - fprintf(stderr, "Couldn't read accelerometer data"); - return 0; + FD_ZERO(&fds); + FD_SET(accel->fd, &fds); + t.tv_sec = 0; + t.tv_usec = 0; + select(1+accel->fd, &fds, NULL, NULL, &t); + + if ( FD_ISSET(accel->fd, &fds) ) { + + rval = read(accel->fd, &ev, sizeof(ev)); + if ( rval != sizeof(ev) ) { + fprintf(stderr, "Couldn't read accelerometer data"); + return 0; + } + + } else { + return 0; /* No data */ } if ( ev.type == EV_REL ) { -- cgit v1.2.3