slackbuilds/system/joystick/joystick.diff

230 lines
5.5 KiB
Diff

Only in joystick-20051019: debian
Only in /home/kajla/usr/src/joystick/: .svn
diff -ur joystick-20051019/utils/jscal.c /home/kajla/usr/src/joystick/utils/jscal.c
--- joystick-20051019/utils/jscal.c 2004-10-19 09:51:52.000000000 +0200
+++ /home/kajla/usr/src/joystick/utils/jscal.c 2007-09-26 12:56:33.000000000 +0200
@@ -61,6 +61,8 @@
int fd;
struct js_corr corr[MAX_AXES];
+__u8 axmap[ABS_MAX + 1];
+__u16 buttonmap[(KEY_MAX - BTN_MISC + 1)];
char axes, buttons, fuzz;
int version;
struct correction_data corda[MAX_AXES];
@@ -163,6 +165,12 @@
puts(" -V --version Prints the version numbers");
puts(" -p --print-correction Prints the current settings as a jscal");
puts(" command line");
+ puts(" -q --print-mappings Print the current axis and button");
+ puts(" mappings as a jscal command line");
+ puts(" -u <n_of_axes,axmap1,axmap2,...,");
+ puts(" n_of_buttons,btnmap1,btnmap2,");
+ puts(" ...> --set-mappings Sets axis and button mappings to the");
+ puts(" specified values");
putchar('\n');
}
@@ -316,6 +324,42 @@
(version >> 8) & 0xff, version & 0xff);
}
+void print_mappings(char *devicename)
+{
+ int i;
+
+ if (ioctl(fd, JSIOCGAXES, &axes)) {
+ perror("jscal: error getting axes");
+ exit(1);
+ }
+ if (ioctl(fd, JSIOCGBUTTONS, &buttons)) {
+ perror("jscal: error getting buttons");
+ exit(1);
+ }
+ if (ioctl(fd, JSIOCGAXMAP, &axmap)) {
+ perror("jscal: error getting axis map");
+ exit(1);
+ }
+ if (ioctl(fd, JSIOCGBTNMAP, &buttonmap)) {
+ perror("jscal: error getting button map");
+ exit(1);
+ }
+
+ printf("jscal -u %d", axes);
+ for (i = 0; i < axes; i++)
+ {
+ printf( ",%d", axmap[i]);
+ }
+
+ printf(",%d", buttons);
+ for (i = 0; i < buttons; i++)
+ {
+ printf( ",%d", buttonmap[i]);
+ }
+
+ printf(" %s\n",devicename);
+}
+
void print_settings(char *devicename)
{
int i,j;
@@ -342,6 +386,107 @@
printf(" %s\n",devicename);
}
+// n axes n buttons
+// 10,0,1,2,5,6,16,17,40,41,42:13,288,289,290,291,292,293,294,295,296,297,298,299,300
+void set_mappings(char *p)
+{
+ int i;
+ int axes_on_cl = 0;
+ int btns_on_cl = 0;
+ int axis_mapping = 0;
+ int btn_mapping = 0;
+
+ if (ioctl(fd, JSIOCGAXES, &axes)) {
+ perror("jscal: error getting axes");
+ exit(1);
+ }
+ if (ioctl(fd, JSIOCGBUTTONS, &buttons)) {
+ perror("jscal: error getting buttons");
+ exit(1);
+ }
+
+ if (axes > MAX_AXES) axes = MAX_AXES;
+
+ if (!p) {
+ fprintf(stderr, "jscal: missing argument for --set-mappings\n");
+ exit(1);
+ }
+
+ //axes
+ sscanf(p, "%d", &axes_on_cl);
+ p = strstr(p, ",");
+
+ if (axes_on_cl != axes) {
+ fprintf(stderr, "jscal: joystick has %d axes and not %d as specified on command line\n",
+ axes, axes_on_cl);
+ exit(1);
+ }
+
+
+ for (i = 0; i < axes; i++)
+ {
+ if (!p) {
+ fprintf(stderr, "jscal: missing mapping for axis %d\n", i);
+ exit(1);
+ }
+ sscanf(++p, "%d", &axis_mapping);
+ p = strstr(p, ",");
+
+
+ if (axis_mapping > ABS_MAX + 1) {
+ fprintf(stderr, "jscal: invalid axis mapping for axis %d (max is %d)\n", i, ABS_MAX + 1);
+ exit(1);
+ }
+ axmap[i] = axis_mapping;
+ }
+
+ //buttons
+ sscanf(++p, "%d", &btns_on_cl);
+ p = strstr(p, ",");
+
+ if (btns_on_cl != buttons) {
+ fprintf(stderr, "jscal: joystick has %d buttons and not %d as specified on command line\n",
+ buttons, btns_on_cl);
+ exit(1);
+ }
+
+
+ for (i = 0; i < buttons; i++)
+ {
+ if (!p) {
+ fprintf(stderr, "jscal: missing mapping for button %d\n", i);
+ exit(1);
+ }
+ sscanf(++p, "%d", &btn_mapping);
+ p = strstr(p, ",");
+
+
+ if (btn_mapping > KEY_MAX) {
+ fprintf(stderr, "jscal: invalid button mapping for button %d (max is %d)\n", i, KEY_MAX);
+ exit(1);
+ }
+ if (btn_mapping < BTN_MISC) {
+ fprintf(stderr, "jscal: invalid button mapping for button %d (min is %d)\n", i, BTN_MISC);
+ exit(1);
+ }
+ buttonmap[i] = btn_mapping;
+ }
+
+ if (p) {
+ fprintf(stderr, "jscal: too many values\n");
+ exit(1);
+ }
+
+ if (ioctl(fd, JSIOCSAXMAP, &axmap)) {
+ perror("jscal: error setting axis map");
+ exit(1);
+ }
+ if (ioctl(fd, JSIOCSBTNMAP, &buttonmap)) {
+ perror("jscal: error setting button map");
+ exit(1);
+ }
+}
+
void set_correction(char *p)
{
int i,j;
@@ -461,14 +606,18 @@
char *parameter = NULL;
int t;
+ // /usr/include/getopt.h
static struct option long_options[] =
{
{"calibrate", no_argument, NULL, 'c'},
{"help", no_argument, NULL, 'h'},
{"set-correction", required_argument, NULL, 's'},
+ {"set-mappings", required_argument, NULL, 'u'},
{"test-center", no_argument, NULL, 't'},
{"version", no_argument, NULL, 'V'},
- {"print-correction", no_argument, NULL, 'p'}
+ {"print-correction", no_argument, NULL, 'p'},
+ {"print-mappings", no_argument, NULL, 'q'},
+ {NULL, no_argument, NULL, 0 }
};
if (argc == 1) {
@@ -477,10 +626,12 @@
}
do {
- t = getopt_long(argc, argv, "chps:vVt", long_options, &option_index);
+ t = getopt_long(argc, argv, "chpqu:s:vVt", long_options, &option_index);
switch (t) {
case 'p':
+ case 'q':
case 's':
+ case 'u':
case 'c':
case 't':
case 'V':
@@ -540,9 +691,15 @@
case 'p':
print_settings(argv[argc -1]);
break;
+ case 'q':
+ print_mappings(argv[argc -1]);
+ break;
case 's':
set_correction(parameter);
break;
+ case 'u':
+ set_mappings(parameter);
+ break;
case 't':
test_center();
break;
Only in /home/kajla/usr/src/joystick/utils: .svn