Hi, I've been testing X52 joystick with FGLinuxEventInput.cxx on liunx and found that button event names for joysticks/gamepad are very suspicious, and we need to consider some other means of naming button events.
The problem is that a joystick (, mouse or gamepad) button can have wrong event name if a device has more than 16 buttons. This is because Linux hid driver (drivers/hid/hid-input.c) assumes that a device has 16 buttons at most. e.g. If a joystick has more than 16 buttons, a button event name for button-#16 or higher are mistakenly assigned to ones in game pads, digitizer, or others. This is the excerpt from hid-input.c ( hidinput_configure_usage) that shows how Linux driver converts HID usage to a code of hid event written to /dev/input/js* case HID_UP_BUTTON: code = ((usage->hid - 1) & 0xf); // Note: assuming #buttons <= 16. switch (field->application) { case HID_GD_MOUSE: case HID_GD_POINTER: code += 0x110; break; case HID_GD_JOYSTICK: code += 0x120; break; case HID_GD_GAMEPAD: code += 0x130; break; default: switch (field->physical) { case HID_GD_MOUSE: case HID_GD_POINTER: code += 0x110; break; case HID_GD_JOYSTICK: code += 0x120; break; case HID_GD_GAMEPAD: code += 0x130; break; default: code += 0x100; } } map_key(code); break; As a matter of fact, event names for X52 buttons are assigned as follows in FGLinuxEventInput.cxx: #00 button-trigger: type=1, code=288 (trigger) #01 button-thumb: type=1, code=289 (FIRE button on stick) #02 button-thumb2: type=1, code=290 (A button on stick) #03 button-top: type=1, code=291 (B button on stick) #04 button-top2: type=1, code=292 (C button on stick) #05 button-pinkie: type=1, code=293 (pinkie button) #06 button-base: type=1, code=294 (D button on throttle) #07 button-base2: type=1, code=295 (E button on throttle) #08 button-base3: type=1, code=296 (T1) #09 button-base4: type=1, code=297 (T2) #10 button-base5: type=1, code=298 (T3) #11 button-base6: type=1, code=299 (T4) #12 button-300: type=1, code=300 (T5) #13 button-301: type=1, code=301 (T6) #14 button-302: type=1, code=302 (strong press of trigger) #15 button-dead: type=1, code=303 (top hat up) // buttons below are mistakenly assigned to GamePad buttons #16 button-a: type=1, code=304 (top hat right) #17 button-b: type=1, code=305 (top hat down) #18 button-c: type=1, code=306 (top hat left) #19 button-x: type=1, code=307 (hat up on throttle) #20 button-y: type=1, code=308 (hat right on throttle) #21 button-z: type=1, code=309 (hat down on throttle) #22 button-tl: type=1, code=310 (hat left on throttle) #23 button-tr: type=1, code=311 (mode1 on stick) #24 button-tl2: type=1, code=312 (mode2 on stick) #25 button-tr2: type=1, code=313 (mode3 on stick) #26 button-select: type=1, code=314 (Function button on throttle) #27 button-start: type=1, code=315 (Start button on throttle) #28 button-mode: type=1, code=316 (RESET button on throttle) #29 button-thumbl: type=1, code=317 (i button on throttle) #30 button-thumbr: type=1, code=318 (mouse button on throttle) #31 button-319: type=1, code=319 (wheel button on throttle) // undefined in input.h // buttons below are mistakenly assigned to Digitizer buttons #32 button-pen: type=1, code=320 (wheel down on throttle) #33 button-rubber: type=1, code=321 (wheel up on throttle) This shows that button #16 or higher have wrong event names that are not compatible with Mac or Windows. # button-dead for top-hat up button is also weird. I don't know why linux driver assumes the button number is less than 16, but this is a big problem. I guess it is safer to use button-0, button-1, ... button-N for button event names so the names stays the same on different OSs. maybe we need to pull out some info using ioctl to find the first hid event code for a given device (e.g. 228 for joystick). Best, Tat ------------------------------------------------------------------------------ Come build with us! The BlackBerry® Developer Conference in SF, CA is the only developer event you need to attend this year. Jumpstart your developing skills, take BlackBerry mobile applications to market and stay ahead of the curve. Join us from November 9-12, 2009. Register now! http://p.sf.net/sfu/devconf _______________________________________________ Flightgear-devel mailing list Flightgear-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/flightgear-devel