4
#include <linux/joystick.h>
8
void print_data(int aval[], int bval[], int axes, int btns) {
10
for (i=0; i<btns; i++) {
11
printf("%2d |", bval[i]);
13
for (i=0; i<axes; i++) {
14
printf(" %5d |", aval[i]);
20
void print_data_hdr(int aval[], int bval[], int axes, int btns) {
22
printf("js0: axes=%d, buttons=%d\n", axes, btns);
23
for (i=0; i<btns; i++) {
26
for (i=0; i<axes; i++) {
27
printf(" a%02d |", i, aval[i]);
30
for (i=0; i<btns; i++) {
33
for (i=0; i<axes; i++) {
39
int main(int argc, char *argv[]) {
49
unsigned char axes, btns;
51
struct js_corr cor[64];
53
fd=open(argv[1], O_RDONLY|O_NONBLOCK);
55
fd=open("/dev/input/js0", O_RDONLY|O_NONBLOCK);
57
perror("Failed to open device");
60
ioctl(fd, JSIOCGAXES, &axes);
61
ioctl(fd, JSIOCGBUTTONS, &btns);
62
for (i=0; i<64; i++) {
63
cor[i].type=JS_CORR_NONE;
66
cor[i].coef[2]=65536*64;
67
cor[i].coef[3]=65536*64;
70
ioctl(fd, JSIOCSCORR, cor);
71
while (read(fd, &ev, sizeof(ev))==sizeof(ev)) {
72
if (ev.type&JS_EVENT_BUTTON)
73
bval[ev.number]=ev.value;
74
if (ev.type&JS_EVENT_AXIS) {
75
aval[ev.number]=ev.value;
76
if (ev.value<min[ev.number])
77
min[ev.number]=ev.value;
78
if (ev.value>max[ev.number])
79
max[ev.number]=ev.value;
85
while (read(fd, &ev, sizeof(ev))==sizeof(ev)) {
86
if (ev.type&JS_EVENT_BUTTON)
87
bval[ev.number]=ev.value;
88
if (ev.type&JS_EVENT_AXIS) {
89
aval[ev.number]=ev.value;
90
if (ev.value<min[ev.number])
91
min[ev.number]=ev.value;
92
if (ev.value>max[ev.number])
93
max[ev.number]=ev.value;
100
for (i=0; i<axes; i++) {
101
cor[i].type=JS_CORR_BROKEN;
104
cor[i].coef[2]=32768*16384/128;
105
cor[i].coef[3]=32768*16384/128;
106
if ((min[i]==max[i])&&(max[i]==0)) {
107
//assume a switching hat
110
cor[i].coef[2]=32768*16384/1;
111
cor[i].coef[3]=32768*16384/1;
114
ioctl(fd, JSIOCSCORR, cor);