On Wed, Jan 21, 2015 at 12:25:39PM +0100, Michael Schellenberger Costa wrote: > Hi, > > is there an acutal reason, why joysticks and/or gamepads are ignored > inside libinput. Is it just, that they are not yet implemented, or are > there some real reasons? > > If the answer is that nobody has yet written the code, would someone > of the more knowledgeable persons on the list be willing to help me a > little (most likely a lot) to put some code together?
couple of reasons: right now we only have pointer, keyboard and touch interfaces from libinput, so devices that don't fall into that category are simply ignored. That applies to graphics tablets but there's ongoing work in getting those sorted. we also don't have wayland protocol for anything but P, K, T interfaces, again tablet is being worked on. so in short, if libinput could handle joysticks/gamepads we couldn't pass this data on without having the wayland stack in place too. X is somewhat the same story here, you usually don't want your joystick controlling your pointer so having joystick support is of limited use. joysticks are a lot more varied than the above listed devices and it's hard to find some unifying factor. even gamepads, though they look the same have a lot of details that make them different, take the button numbering and naming for example. David Herrmann has done some work on that in the kernel code but the differences remain. Joysticks are even worse in that regard. This makes it hard to have a generic interface for them, especially given that every app has different requirements (and even what constitutes a joystick in the first place). Finally, the main reason though is that there doesn't seem to be a need for it. SDL for example accesses evdev device nodes directly and parses the protocol. We discussed adding support for it at XDC 2014 but the consensus was essentially: not unless we have real use-cases and someone* asks us to do it. Cheers, Peter * i.e. one of the big toolkits > Am 21.01.2015 um 12:04 schrieb Hans de Goede: > > After switching my main workstation over to using > > xf86-input-libinput, I noticed that the multi-media keys like > > play/pause on my keyboard no longer worked. > > > > It turns out that the second hid interface on my keyboard which has > > the multimedia-keys, also declares having: BTN_BASE6 and BTN_MODE > > which both fell into the range we were using to test for something > > being a joystick. > > > > The commit makes our joystick test mode strict, restoring > > functionality of the multi-media keys on the keyboard in question. > > > > Signed-off-by: Hans de Goede <[email protected]> --- src/evdev.c > > | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 > > deletions(-) > > > > diff --git a/src/evdev.c b/src/evdev.c index 6edacba..b2bb2aa > > 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -1324,7 +1324,7 @@ > > evdev_configure_device(struct evdev_device *device) struct libevdev > > *evdev = device->evdev; const struct input_absinfo *absinfo; int > > has_abs, has_rel, has_mt; - int has_button, has_keyboard, > > has_touch; + int has_button, has_keyboard, has_touch, > > has_joy_button; struct mt_slot *slots; int num_slots; int > > active_slot; @@ -1336,17 +1336,24 @@ evdev_configure_device(struct > > evdev_device *device) has_abs = 0; has_mt = 0; has_button = 0; + > > has_joy_button = 0; has_keyboard = 0; has_touch = 0; > > > > - for (i = BTN_JOYSTICK; i < BTN_DIGI; i++) { - > > if (libevdev_has_event_code(evdev, EV_KEY, i)) { - > > log_info(libinput, - "input device > > '%s', %s is a joystick, ignoring\n", - > > device->devname, devnode); - return -1; - > > } - } + for (i = BTN_JOYSTICK; i <= BTN_PINKIE; i++) + > > if > > (libevdev_has_event_code(evdev, EV_KEY, i)) + > > has_joy_button = > > 1; + + for (i = BTN_GAMEPAD; i <= BTN_TR2; i++) + if > > (libevdev_has_event_code(evdev, EV_KEY, i)) + > > has_joy_button = > > 1; + + if (has_joy_button) { + log_info(libinput, + > > "input > > device '%s', %s is a joystick, ignoring\n", + > > device->devname, > > devnode); + return -1; + } > > > > if (libevdev_has_event_type(evdev, EV_ABS)) { > > > > > > _______________________________________________ > wayland-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/wayland-devel > _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
