|  | 
|  | 1 | +#include <stdio.h> | 
|  | 2 | +#include <stdlib.h> | 
|  | 3 | +#include <string.h> | 
|  | 4 | +#include <signal.h> | 
|  | 5 | +#include <errno.h> | 
|  | 6 | +#include <unistd.h> | 
|  | 7 | +#include <sys/select.h> | 
|  | 8 | +#include "spnavdev.h" | 
|  | 9 | + | 
|  | 10 | +#ifdef __FreeBSD__ | 
|  | 11 | +#define DEFDEV	"/dev/ttyu0" | 
|  | 12 | +#elif defined(__sgi__) | 
|  | 13 | +#define DEFDEV	"/dev/ttyd1" | 
|  | 14 | +#else | 
|  | 15 | +#define DEFDEV	"/dev/ttyS0" | 
|  | 16 | +#endif | 
|  | 17 | + | 
|  | 18 | +static void sighandler(int s); | 
|  | 19 | + | 
|  | 20 | +static struct spndev *dev; | 
|  | 21 | +static int quit; | 
|  | 22 | + | 
|  | 23 | +int main(int argc, char **argv) | 
|  | 24 | +{ | 
|  | 25 | +	int fd; | 
|  | 26 | +	fd_set rdset; | 
|  | 27 | +	union spndev_event ev; | 
|  | 28 | +	const char *s; | 
|  | 29 | + | 
|  | 30 | +	signal(SIGINT, sighandler); | 
|  | 31 | + | 
|  | 32 | +	if(!(dev = spndev_open(argv[1]))) { | 
|  | 33 | +		fprintf(stderr, "Failed to open 6dof device %s\n", argv[1] ? argv[1] : ""); | 
|  | 34 | +		return 1; | 
|  | 35 | +	} | 
|  | 36 | +	fd = spndev_fd(dev); | 
|  | 37 | + | 
|  | 38 | +	printf("Monitoring device, ctrl-c to quit\n"); | 
|  | 39 | + | 
|  | 40 | +	while(!quit) { | 
|  | 41 | +		FD_ZERO(&rdset); | 
|  | 42 | +		FD_SET(fd, &rdset); | 
|  | 43 | + | 
|  | 44 | +		if(select(fd + 1, &rdset, 0, 0, 0) > 0) { | 
|  | 45 | +			if(FD_ISSET(fd, &rdset)) { | 
|  | 46 | +				if(spndev_process(dev, &ev)) { | 
|  | 47 | +					switch(ev.type) { | 
|  | 48 | +					case SPNDEV_MOTION: | 
|  | 49 | +						printf("motion: T[%+6d %+6d %+6d]  R[%+6d %+6d %+6d]\n", | 
|  | 50 | +								ev.mot.v[0], ev.mot.v[1], ev.mot.v[2], ev.mot.v[3], | 
|  | 51 | +								ev.mot.v[4], ev.mot.v[5]); | 
|  | 52 | +						break; | 
|  | 53 | + | 
|  | 54 | +					case SPNDEV_BUTTON: | 
|  | 55 | +						if((s = spndev_button_name(dev, ev.bn.num))) { | 
|  | 56 | +							printf("button %d (%s) ", ev.bn.num, s); | 
|  | 57 | +						} else { | 
|  | 58 | +							printf("button %d ", ev.bn.num); | 
|  | 59 | +						} | 
|  | 60 | +						puts(ev.bn.press ? "pressed" : "released"); | 
|  | 61 | +						break; | 
|  | 62 | + | 
|  | 63 | +					default: | 
|  | 64 | +						break; | 
|  | 65 | +					} | 
|  | 66 | +				} | 
|  | 67 | +			} | 
|  | 68 | +		} | 
|  | 69 | + | 
|  | 70 | +	} | 
|  | 71 | + | 
|  | 72 | +	spndev_close(dev); | 
|  | 73 | +	return 0; | 
|  | 74 | +} | 
|  | 75 | + | 
|  | 76 | +static void sighandler(int s) | 
|  | 77 | +{ | 
|  | 78 | +	quit = 1; | 
|  | 79 | +} | 
0 commit comments