Package: joy2key Version: 1.6.1 Tags: patch I own a gamepad, for which the axis belonging to the steering cross only report values -1,0,1 so the threshold has to be set to 0, which works when using the build-in calibrate function. The problem is, that when trying to specify this via the commandline, this is not accepted, because the values are tested as truth value and 0 evaluates to false ...
To fix this I created an additional array, holding just the information, whether the threshold for this axis was defined. To allow manual calibration, I introduced "x" as placeholder in the threshold commandline, meaning: "This threshold is not supplied", which was prior to this work indicated by passing 0 as value. Please see the attached patch Thanks Matthias -- Matthias Bläsing (GPG-Schlüsselkennung: A71B4BD5) ICQ: 84617206 AIM: linuxfun81 MSN: [EMAIL PROTECTED]
--- joy2key-1.6.1.orig/joy2key.c 2006-12-26 05:46:25.000000000 +0100
+++ joy2key-1.6.1/joy2key.c 2006-12-26 05:55:53.000000000 +0100
@@ -96,6 +96,7 @@
button_actions[256],
axis_actions[256][2],
axis_threshold[256][2], /* 0 = low (down); 1 = hi (up) */
+ axis_threshold_defined[256], /* 1 == defined */
axis_act_counter=0,
button_act_counter=0,
thresh_counter=0,
@@ -160,6 +161,7 @@
JOY2KEY_VERSION, __DATE__, __TIME__);
memset(axis_threshold, 0, sizeof(axis_threshold));
+ memset(axis_threshold_defined, 0, sizeof(axis_threshold_defined));
memset(axis_actions, 0, sizeof(axis_actions));
memset(button_actions, 0, sizeof(button_actions));
memset(button_repeat_flags, 0, sizeof(button_repeat_flags));
@@ -250,7 +252,7 @@
for(i=0; i<numaxes; i++)
{
- if(!(axis_threshold[i][0] | axis_threshold[i][1]))
+ if(! axis_threshold_defined[i])
calibrate(i);
}
@@ -557,6 +559,8 @@
puts("Not enough arguments to -thresh");
exit(1);
}
+ if(argv[i][0] != 'x' && argv[i+1][1] != 'x')
+ axis_threshold_defined[thresh_counter] = 1;
axis_threshold[thresh_counter][0]=atoi(argv[i]);
axis_threshold[thresh_counter++][1]=atoi(argv[++i]);
}
@@ -718,6 +722,7 @@
printf("\nUsing deadzone of %i%%\n", deadzone);
axis_threshold[num][0]=joymid+((axis_threshold[num][0] - joymid) * (deadzone/100.0));
axis_threshold[num][1]=joymid+((axis_threshold[num][1] - joymid) * (deadzone/100.0));
+ axis_threshold_defined[num] = 1;
puts("Calibrations set at:");
printf("Axis %i low threshold set at %i\n", num, axis_threshold[num][0]);
printf("Axis %i high threshold set at %i\n", num, axis_threshold[num][1]);
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil

