X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fmain.c;h=fd2517ca86b5e712d976a968cddced3e28a3b19c;hb=504567b5ac92176370b0bfbda1399a1787b073c5;hp=7fe32c5884700ca5c8dc601e17e391f6e2aba6e7;hpb=aeeaea66849f23d8dec42bb64c9a739846a835d9;p=sball diff --git a/src/main.c b/src/main.c index 7fe32c5..fd2517c 100644 --- a/src/main.c +++ b/src/main.c @@ -1,16 +1,67 @@ #include #include +#include +#include +#include +#include +#include #include "sball.h" -static int fd; +#ifdef __FreeBSD__ +#define DEFDEV "/dev/ttyu0" +#elif defined(__sgi__) +#define DEFDEV "/dev/ttyd1" +#else +#define DEFDEV "/dev/ttyS0" +#endif + +static void sighandler(int s); + +static struct sball *sb; +static int quit; int main(int argc, char **argv) { - if(!(fd = sball_open(argv[1] ? argv[1] : "/dev/ttyS0"))) { - fprintf(stderr, "Failed to open spaceball at %s\n", argv[1] ? argv[1] : "/dev/ttyS0"); + int fd; + fd_set rdset; + const char *dev = DEFDEV; + + signal(SIGINT, sighandler); + + if(argv[1]) { + if(strcmp(argv[1], "btest") == 0) { + sball_button_test(); + return 0; + } + dev = argv[1]; + } + + if(!(sb = sball_open(dev))) { + fprintf(stderr, "Failed to open spaceball at %s\n", dev); return 1; } + fd = sball_fd(sb); + + printf("Monitoring device, ctrl-c to quit\n"); + + while(!quit) { + FD_ZERO(&rdset); + FD_SET(fd, &rdset); + + if(select(fd + 1, &rdset, 0, 0, 0) > 0) { + if(FD_ISSET(fd, &rdset)) { + sball_read(sb); + } + } + + } + putchar('\n'); - sball_close(fd); + sball_close(sb); return 0; } + +static void sighandler(int s) +{ + quit = 1; +}