From 816e467c9e0c0b5e2ce0b13cbd80f9384e29727b Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 20 Aug 2002 06:08:42 +0000 Subject: [PATCH] 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.) --- src/joystick/bsd/SDL_sysjoystick.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/joystick/bsd/SDL_sysjoystick.c b/src/joystick/bsd/SDL_sysjoystick.c index 4a974cd5c..3e2ab2db7 100644 --- a/src/joystick/bsd/SDL_sysjoystick.c +++ b/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); }