Ubuntu as a gaming platform: input devices support

Registered by David Planella on 2012-10-02

Input devices (joysticks and gamepads), low-latency input and full button support for gaming mice and keyboards must work extremely well in Ubuntu

Blueprint information

Status:
Not started
Approver:
Jason Warner
Priority:
Medium
Drafter:
Bryce Harrington
Direction:
Needs approval
Assignee:
Bryce Harrington
Definition:
Pending Approval
Series goal:
Accepted for raring
Implementation:
Unknown
Milestone target:
None

Related branches

Sprints

Whiteboard

devices with high numbers of axes, we don't have a multiplexor so don't have a way for those to autoconfigure. For devices with small numbers of buttons and axes, assuming they're mapped reasonably they should "just work".

Two separate joysticks won't work, but two that are part of the same physical device might.

We have a few multiplexors in Ubuntu. It's possible to do it in the kernel driver.
Gamepads that don't use gyroscope controls should be straightforward to get quirked.
The joystick driver provides a more complete set of mappings than evdev and is what games focus on currently. However, evdev is the more standard solution for input on linux these days and so should have the additional joystick support added to it. libsdl exposes this same functionality but doesn't use either of these drivers.

xbox and ps3 type controllers are widely used. These should "just work", modulo unusual features like sliders.

jscal is a command line calibration tool. Idea would be to run this via a udev hook when device is first plugged in, store the calibration data, and then re-calibrate it as needed. Could include a GUI with a button to clear calibration and re-calibrate.

* Need to enumerate the axes required
* Need to support the full number of buttons

First Priority target: game controllers meant to plug into xbox/ps3 as standard controllers

Do games use straight kernel interface or XInput? Currently they listen directly to kernel. On Windows, joysticks are system settings.

Short term solution is to use a framework like sdl. Later when a proper evdev interface is available, sdl could be ported to use that.

(?)

Work Items

Work items:
[bryce] Need to evaluate various upstream multiplexer projects for more advanced joysticks: POSTPONED
[persia] Evaluate automatic joystick calibration upon plugging in a game controller (code around the jscal command line interface?): POSTPONED
[bryce] Investigate current experience of ps3/xbox style game controllers: POSTPONED
[persia] Spec out blueprint for EVDEV migration (with cnd): POSTPONED