# HG changeset patch # User Sam Lantinga # Date 1029823722 0 # Node ID 1d36f593078a5519bd58b91c6b051bd2e99e89e7 # Parent a888b3ae31fff02a5292345df18a8fa7fe329008 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.) diff -r a888b3ae31ff -r 1d36f593078a src/joystick/bsd/SDL_sysjoystick.c --- a/src/joystick/bsd/SDL_sysjoystick.c Tue Aug 20 06:01:20 2002 +0000 +++ b/src/joystick/bsd/SDL_sysjoystick.c Tue Aug 20 06:08:42 2002 +0000 @@ -332,23 +332,14 @@ 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); }