#include <unistd.h> #include <fcntl.h> #include <sys/ioctl.h> #include <stdlib.h> #include <stdio.h> #include "keys.h" #include "program.h" //vendor=0x068e; //CH Products //product=0x00f1; //PRO THROTTLE //vendor=0x068e; //CH Products //product=0x00f4; //COMBATSTICK //vendor=0x068e; //CH Products //product=0x00f2; //PEDALS int keys[]={ KEY_A, KEY_B, KEY_C, KEY_D, KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, }; int bang[MAX_SEQUENCE]={ KEY_B, KEY_B|RELEASEMASK, KEY_A, KEY_A|RELEASEMASK, KEY_N, KEY_N|RELEASEMASK, KEY_G, KEY_G|RELEASEMASK, KEY_LEFTSHIFT, KEY_1, KEY_1|RELEASEMASK, KEY_LEFTSHIFT|RELEASEMASK, SEQUENCE_DONE, }; int main(void) { int fd; int i; char devname[256]; int vendor=0; int product=0; struct program_button_remap map; struct program_axis_remap amap; fd=open("/dev/mapper", O_RDWR); if (fd<0) { perror("Error programming joystick"); return 0; } for (i=0; i<128; i++) { vendor=i; if (ioctl(fd, JOYMAP_VENDOR, &vendor)<0) { //perror("Failed to get vendor ID"); continue; } product=i; if (ioctl(fd, JOYMAP_PRODUCT, &product)<0) { //perror("Failed to get product ID"); continue; } sprintf(devname, " "); devname[0]=i; if (ioctl(fd, JOYMAP_NAME, devname)<0) { //perror("Failed to get product name"); continue; } fprintf(stderr, "%d: Vendor=%x Product=%x [%s]\n", i, vendor, product, devname); } map.program=PROGRAM_BUTTON_REMAP; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f4; //COMBATSTICK map.srcbutton=BTN_JOYSTICK+0; map.device=DEVICE_KBD; map.type=TYPE_BUTTON; map.flags=FLAG_NONE; for (i=0; i<MAX_SEQUENCE; i++) { map.sequence[i]=bang[i]; } write(fd, (char *)&map, sizeof(map)); for (i=1; i<10; i++) { map.program=PROGRAM_BUTTON_REMAP; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f4; //COMBATSTICK map.srcbutton=BTN_JOYSTICK+i; map.device=DEVICE_KBD; map.type=TYPE_BUTTON; map.flags=FLAG_NONE; map.press=keys[i]; map.sequence[1]=SEQUENCE_DONE; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f4; //COMBATSTICK map.srcbutton=BTN_JOYSTICK+i; map.device=DEVICE_KBD; map.type=TYPE_BUTTON; map.flags=FLAG_RELEASE; map.press=keys[i]|RELEASEMASK; map.sequence[1]=SEQUENCE_DONE; write(fd, (char *)&map, sizeof(map)); } amap.program=PROGRAM_AXIS_REMAP; amap.joystick=255; amap.vendor=0x068e; //CH Products amap.product=0x00f1; //PRO THROTTLE amap.srcaxis=ABS_X; amap.device=DEVICE_MOUSE; amap.type=TYPE_AXIS; amap.flags=FLAG_NONE; amap.plus=ABS_X; amap.minus=ABS_X; amap.axis=ABS_X; write(fd, (char *)&amap, sizeof(amap)); amap.program=PROGRAM_AXIS_REMAP; amap.joystick=255; amap.vendor=0x068e; //CH Products amap.product=0x00f1; //PRO THROTTLE amap.srcaxis=ABS_Y; amap.device=DEVICE_MOUSE; amap.type=TYPE_AXIS; amap.flags=FLAG_NONE; amap.plus=ABS_Y; amap.minus=ABS_Y; amap.axis=ABS_Y; write(fd, (char *)&amap, sizeof(amap)); //map four way switch to mouse map.program=PROGRAM_BUTTON_REMAP; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+0; map.device=DEVICE_MOUSE; map.type=TYPE_AXIS; map.flags=FLAG_NONE; map.press=ABS_X; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+2; map.device=DEVICE_MOUSE; map.type=TYPE_AXIS; map.flags=FLAG_INVERT; map.press=ABS_X; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+1; map.device=DEVICE_MOUSE; map.type=TYPE_AXIS; map.flags=FLAG_NONE; map.press=ABS_Y; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=1; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+3; map.device=DEVICE_MOUSE; map.type=TYPE_AXIS; map.flags=FLAG_INVERT; map.press=ABS_Y; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=1; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+7; map.device=DEVICE_MOUSE; map.type=TYPE_AXIS; map.flags=FLAG_INVERT; map.press=ABS_WHEEL; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=1; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+5; map.device=DEVICE_MOUSE; map.type=TYPE_AXIS; map.flags=FLAG_NONE; map.press=ABS_WHEEL; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=1; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+13; map.device=DEVICE_MOUSE; map.type=TYPE_BUTTON; map.flags=FLAG_NONE; map.press=BTN_LEFT; map.sequence[1]=SEQUENCE_DONE; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=1; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+13; map.device=DEVICE_MOUSE; map.type=TYPE_BUTTON; map.flags=FLAG_RELEASE; map.press=BTN_LEFT|RELEASEMASK; map.sequence[1]=SEQUENCE_DONE; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=1; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+15; map.device=DEVICE_MOUSE; map.type=TYPE_BUTTON; map.flags=FLAG_NONE; map.press=BTN_RIGHT; map.sequence[1]=SEQUENCE_DONE; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=1; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+15; map.device=DEVICE_MOUSE; map.type=TYPE_BUTTON; map.flags=FLAG_RELEASE; map.press=BTN_RIGHT|RELEASEMASK; map.sequence[1]=SEQUENCE_DONE; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=1; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+14; map.device=DEVICE_MOUSE; map.type=TYPE_BUTTON; map.flags=FLAG_NONE; map.press=BTN_MIDDLE; map.sequence[1]=SEQUENCE_DONE; write(fd, (char *)&map, sizeof(map)); map.program=PROGRAM_BUTTON_REMAP; map.joystick=1; map.joystick=255; map.vendor=0x068e; //CH Products map.product=0x00f1; //PRO THROTTLE map.srcbutton=BTN_JOYSTICK+14; map.device=DEVICE_MOUSE; map.type=TYPE_BUTTON; map.flags=FLAG_RELEASE; map.press=BTN_MIDDLE|RELEASEMASK; map.sequence[1]=SEQUENCE_DONE; write(fd, (char *)&map, sizeof(map)); ioctl(fd, JOYMAP_MAP); close(fd); }