Enabling multitouch in input-evdev

Peter Hutterer peter.hutterer at who-t.net
Mon Jan 18 22:49:08 PST 2010


On Mon, Jan 18, 2010 at 01:02:54PM +0100, Benjamin Tissoires wrote:
> Peter Hutterer wrote:
> >First of all, thanks for your efforts here. I really appreciate that you
> >pushed it that far and I'm sorry about the delay in my comments.
> >
> >On Fri, Jan 08, 2010 at 12:55:21PM +0100, Benjamin Tissoires wrote:
> >>First, I try to dynamically create/detroy such subdevices. However,
> >>it infers very often freezes in the Xserver due to some mallocs. So
> >>the idea to solve this problem is to staticaly allocate the
> >>subdevices.
> >
> >Do you have any logs or other data on where these freezes occured? they'd be
> >useful for others as well since chances are someone is going to run into
> >this deadlock.
> >
> Sorry, when this freezes occurs I only had backtracks from the
> driver (a xmalloc) and not the other threads (I forgot to check
> them). I add this to my todo list.

Right, as Julien said you can't malloc in evdev. Any path that's hit during
ReadInput cannot malloc anything.

> >The evdev driver is first and foremost a generic mouse driver. Which means
> >that devices that provide x and y are the most important to work, regardless
> >of relative or absolute. The need for x/y is also implied by the core
> >protocol. However, there's no reason that you couldn't fake up x/y
> >and simply leave it as a mute axis. IMO the kernel should not report axes
> >that don't exist.
> >The axis mapping evdev is a convention not a rule, so you could just
> >reshuffle the axis checking to cater for the multitouch situation.
> >That goes for the rest of the driver too, if something seems wrong to cater
> >for a new situation then the driver can be rewritten to suit this.
> >
> As I had to rewrite the patch to keep all the events in one device,
> I will have to play with axes... and tackle this issue.

right, you could have an 0/1 axis for this type of things, that's about the
best approach. there's also the chance of using a button but that's more
likely to be misinterpreted.
the correct approach is that you only send those axes with a value, thus
explicitly specifying the on/off. This is possible with XI2 but the input
driver APIs aren't in place for that (no need so far).

> One last question I forgot to ask:
> Do we need to dynamically change the number of touch that can be detected ?
> I.e. do we need to have only 10 touches (as in Windows I think) or
> do we let the choice to the user (the toolkit) if the device can
> handle more ?

same again, you can change the number of axes in XI2, it's just that the
input driver APIs are missing that feature so far.
 
Cheers,
  Peter


More information about the xorg-devel mailing list