diff options
-rw-r--r-- | src/accelerometers.c | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/src/accelerometers.c b/src/accelerometers.c index 61118fc..3d8c968 100644 --- a/src/accelerometers.c +++ b/src/accelerometers.c @@ -32,6 +32,7 @@ #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> +#include <sys/select.h> #include <fcntl.h> #include "types.h" @@ -66,7 +67,7 @@ AccelHandle *accelerometer_open() { accel->type = ACCEL_UNKNOWN; /* Determine accelerometer type */ - 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"); @@ -80,15 +81,43 @@ AccelHandle *accelerometer_open() { } +double utils_highresms() { + + struct timeval tv; + suseconds_t us; + time_t sec; + + gettimeofday(&tv, NULL); + us = tv.tv_usec; + sec = tv.tv_sec; + + return ((double)us+1000000.0*sec)/1000.0; + +} + void accelerometer_update_freerunner(AccelHandle *accel) { struct input_event ev; size_t rval; + 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; + 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; + } + + } else { + return; /* No data */ } if ( ev.type == EV_REL ) { |