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