Skip to content
Permalink
Browse files

Date: Thu, 18 Jul 2002 23:51:40 +0200 (MEST)

From: Krister Walfridsson
Subject: [SDL] src/joystick/bsd/SDL_sysjoystick.c patch

The *BSD USB HID joystick code has two serious bugs:

1. If a joystick reports unhandled hid_input usage (for example HUG_RZ or
   HUG_DIAL), then the last handled value will be overwritten with an
   arbitrary value. (Fixed in the patch below by adding a default case.)

2. The current code does only handle logical coordinates in the range 0-255,
   while a big part of available joysticks report -128 - 127. (This is solved
   in the patch below by first center the range around 0, and then stretch
   it to the correct range.)
  • Loading branch information
slouken committed Aug 20, 2002
1 parent 484b4cc commit 816e467c9e0c0b5e2ce0b13cbd80f9384e29727b
Showing with 4 additions and 13 deletions.
  1. +4 −13 src/joystick/bsd/SDL_sysjoystick.c
@@ -332,23 +332,14 @@ SDL_SYS_JoystickUpdate(SDL_Joystick *joy)
case HUG_WHEEL:
naxe = JOYAXE_WHEEL;
goto scaleaxe;
default:
continue;
}
scaleaxe:
v = (Sint32)hid_get_data(REP_BUF_DATA(rep),
&hitem);
if (v != 127) {
if (v < 127) {
v = -(256 - v);
v <<= 7;
v++;
} else {
v++;
v <<= 7;
v--;
}
} else {
v = 0;
}
v -= (hitem.logical_maximum + hitem.logical_minimum + 1)/2;
v *= 32768/((hitem.logical_maximum - hitem.logical_minimum + 1)/2);
if (v != joy->axes[naxe]) {
SDL_PrivateJoystickAxis(joy, naxe, v);
}

0 comments on commit 816e467

Please sign in to comment.