Multitouch

Revision 6 as of 2010-03-11 18:09:02

Clear message

We'd like to ensure that Lucid works with the current generation of touch screens.

The intended stack would be (upside down):

  • kernel driver (mine or others)
  • /dev/input/eventX
  • X.org evdev driver (the one patched by Benjamin, for instance)

  • X.org MPX/XInput2 API
  • multitouchd daemon
  • Qt or GTK+ or other

The current status of the above stack is "multi-pointer only", that is multi-touch without any gesture recognition. There have been debates as to where to put gesture recognition in the stack. Very few people have worked on multitouch gestures.

Multitouch in X is currently limited by the lack of multitouch events in the protocol. Benjamin's patch is a way around it to get multitouch-like features through a multipointer system. Upstream (Peter Hutterer) has indicated a preference to seeing this done via a single-pointer, because then clients would need to deal with a single touch event, instead of one event for each finger. But there are pros and cons to each approach and it's not clear there is yet a consensus about this. See discussion on xorg-devel@ for more background.

Benjamin's patch makes some simplifying assumptions that may not address the full spectrum of possible multi-touch use cases. For instance, multi-user collaboration using inputs from multiple hands going to multiple windows that support both multi-pointer and multi-touch awareness. It is likely some significant API redesign beyond Benjamin's proposed patch would be needed to address all possible cases. Thus, clients which implement support on top of Benjamin's patch would likely need reimplementation for what eventually is officially adopted by upstream.

Kernel

Multitouch support first appears in any form in v2.6.30 bringing finger tracking to the events protocol. There does not appear to be any actual drivers supporting it at that point. In v2.6.31 the n-trig driver seems to have been converted over to expose multi-touch support (with appropriate firmware only). In v2.6.32 and v2.6.33 the support is apparently unchanged, limited to n-trig. A number of drivers appear to be merging in v2.6.34-rc1 as do a number of fixes for the existing n-trig driver.

The v2.6.34-rc1 HID drivers seems to support multitouch for the following devices:

Manufacturer

USB IDs

Driver

3M 1968

0x0596, 0x0500

hid-3m-pct.c

Asus T91MT

0x0486, 0x0185

hid-mosart.c

N-Trig Touch Screen

0x1b96, 0x0001

hid-ntrig.c

Quanta Optical Touch

0x0408, 0x3000

hid-quanta.c

Quanta Pixart Optical Touch

0x0408, 0x3001

hid-quanta.c

Stantum MTP

0x1f87, 0x0002

hid-stantum.c

It seems that to have any sort of support for multitouch at the kernel level we would need to backport the drivers from at least v2.6.34-rc1 to even get n-trig support in a workable state. We would need access to H/W to test the drivers.

We need to evaluate these drivers for backport and then put them into a PPA kernel for testing.

Tasks Xorg

Tasks Kernel

See the blueprint whiteboard.