Thread (13 messages) 13 messages, 4 authors, 2012-03-20

Re: Mixed "pen" and multitouch input devices

flat view

From: Thorsten Wissmann <hidden>
Date: 2012-03-16 01:52:27
Subsystem: the rest · Maintainer: Linus Torvalds

On Thu, Mar 15, 2012 at 11:29:37AM -0700, Chase Douglas wrote:
On 03/15/2012 10:56 AM, Thorsten Wissmann wrote:
quoted
On Thu, Mar 15, 2012 at 12:27:22PM -0500, Chris Bagwell wrote:
quoted
If you want to work with other unmodified user land apps (perhaps
xf86-input-evdev for touches) then its probably easiest to split pen
and touch to separate input devices.  drivers/input/tablet/wacom_wac.c
shows some examples of that approach but that driver doesn't have to
work to hard to split in to 2 input devices because the USB device
already puts the events on separate USB  interfaces.
OK. We want the device to work with the xf86-input-evdev driver. So we
will split it into two devices.
Or you could teach evdev to know how to handle mixed devices :). I think
that's the "better" approach over all, but it's up to you.
Thanks! We didn't thought about this. It turned out that the problem
isn't caused by the usage of both BTN_TOOL_PEN and BTN_TOOL_FINGER.

It turned out xf86-input-evdev really discards all non-multitouch events
(especially ABS_X and ABS_Y) events in EvdevProcessAbsoluteMotionEvent()
in evdev.c, if the device is configured as a multitouch device. So there
is a quick fix (or only workaround?), which processes ABS_X and ABS_Y
events even if it is a multitouch device:
diff --git a/src/evdev.c b/src/evdev.c
index d540b87..b857b83 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -832,7 +832,7 @@ EvdevProcessAbsoluteMotionEvent(InputInfoPtr pInfo,
struct input_event *ev)
     if (ev->code >= ABS_MT_SLOT) {
         EvdevProcessTouchEvent(pInfo, ev);
         pEvdev->abs_queued = 1;
-    } else if (!pEvdev->mt_mask) {
+    } else if (!pEvdev->mt_mask || ev->code == ABS_X || ev->code ==
ABS_Y) {
         map = pEvdev->axis_map[ev->code];
         valuator_mask_set(pEvdev->vals, map, value);
         pEvdev->abs_queued = 1;

This patch already is submitted to the xorg bugtracker and can be found
at [1].

The only remaining question is: Does it break other drivers?

    Max and Thorsten

[1] https://bugs.freedesktop.org/show_bug.cgi?id=47382
-- 
1.7.9.3



Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help