* Mixed "pen" and multitouch input devices
@ 2012-03-15 15:52 Thorsten Wissmann
2012-03-15 17:27 ` Chris Bagwell
0 siblings, 1 reply; 13+ messages in thread
From: Thorsten Wissmann @ 2012-03-15 15:52 UTC (permalink / raw)
To: Henrik Rydberg, linux-input; +Cc: Maximilian Krüger
Hi,
we are working on already existing multitouch driver for a Promethean
ActivBoard, which supports both multiple fingers and pens. The pens
behave Wacom-like, i.e. the device actually can tell a cursor position
without a button action.
Because of the (up to 4) fingers, we use the input_mt_* functions. Is it
possible to just update the cursor position without a button action? (As
it is can be done with plain input_* functions?) Or do we have to create
two input devices? (one with multitouch input_mt_* and one for the pens?)
Information about our context: We took the partial working and GPL
licensed driver code out of /usr/src/ of [3] and enabled the multitouch
parts of it.
Thorsten
[1] http://git.cs.fau.de/?p=re06huxa/promethean-activboard
[2] git clone git://git.cs.fau.de/re06huxa/promethean-activboard/
[3] http://activsoftware.co.uk/linux/repos/debian/pool/oss/a/activdriver/activdriver_5.7.23-2~debian~squeeze_amd64.deb
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-15 15:52 Mixed "pen" and multitouch input devices Thorsten Wissmann
@ 2012-03-15 17:27 ` Chris Bagwell
2012-03-15 17:56 ` Thorsten Wissmann
0 siblings, 1 reply; 13+ messages in thread
From: Chris Bagwell @ 2012-03-15 17:27 UTC (permalink / raw)
To: Thorsten Wissmann; +Cc: Henrik Rydberg, linux-input, Maximilian Krüger
2012/3/15 Thorsten Wissmann <re06huxa@stud.informatik.uni-erlangen.de>:
> Hi,
>
> we are working on already existing multitouch driver for a Promethean
> ActivBoard, which supports both multiple fingers and pens. The pens
> behave Wacom-like, i.e. the device actually can tell a cursor position
> without a button action.
>
> Because of the (up to 4) fingers, we use the input_mt_* functions. Is it
> possible to just update the cursor position without a button action? (As
> it is can be done with plain input_* functions?) Or do we have to create
> two input devices? (one with multitouch input_mt_* and one for the pens?)
>
> Information about our context: We took the partial working and GPL
> licensed driver code out of /usr/src/ of [3] and enabled the multitouch
> parts of it.
>
I'm not quite sure what you mean by updating cursor position without a
button action. By button action, do you mean BTN_TOOL_*? It is true
you need to set correct BTN_TOOL_* before updating any X/Y coordinates
so user land knows that X/Y maps to.
Its also true that sharing ABS_X/Y events between both a BTN_TOOL_PEN
and a BTN_TOOL_FINGER will confuse most user land apps (they think
only touchpads can declare BTN_TOOL_FINGER's but this is a
touchscreen) and it also has bad side affects to the kernel's MT
pointer emulation functions.
You can look at kernel drivers/input/touchscreen/wacom_w8001.c for an
example touchscreen that supports pen and at least 2 MT touches on a
single /dev/input device (because HW packets come over single serial
interface). It does not declare a BTN_TOOL_FINGER nor use pointer
emulation to overcome issues I mentioned and xf86-input-wacom
understands how to handle this device.
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.
Chris
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-15 17:27 ` Chris Bagwell
@ 2012-03-15 17:56 ` Thorsten Wissmann
2012-03-15 18:29 ` Chase Douglas
0 siblings, 1 reply; 13+ messages in thread
From: Thorsten Wissmann @ 2012-03-15 17:56 UTC (permalink / raw)
To: Chris Bagwell
Cc: Henrik Rydberg, linux-input, Maximilian Krüger, i4passt
Thank You for your quick answer!
On Thu, Mar 15, 2012 at 12:27:22PM -0500, Chris Bagwell wrote:
> 2012/3/15 Thorsten Wissmann <re06huxa@stud.informatik.uni-erlangen.de>:
> > we are working on already existing multitouch driver for a Promethean
> > ActivBoard, which supports both multiple fingers and pens. The pens
> > behave Wacom-like, i.e. the device actually can tell a cursor position
> > without a button action.
> >
> > Because of the (up to 4) fingers, we use the input_mt_* functions. Is it
> > possible to just update the cursor position without a button action? (As
> > it is can be done with plain input_* functions?) Or do we have to create
> > two input devices? (one with multitouch input_mt_* and one for the pens?)
>
> I'm not quite sure what you mean by updating cursor position without a
> button action. By button action, do you mean BTN_TOOL_*? It is true
> you need to set correct BTN_TOOL_* before updating any X/Y coordinates
> so user land knows that X/Y maps to.
With "updating cursor position without a button action" we meant
something like moving a "normal" mouse without pressing any button.
(Which generates just mouse motion events for X applications)
> Its also true that sharing ABS_X/Y events between both a BTN_TOOL_PEN
> and a BTN_TOOL_FINGER will confuse most user land apps (they think
> only touchpads can declare BTN_TOOL_FINGER's but this is a
> touchscreen) and it also has bad side affects to the kernel's MT
> pointer emulation functions.
>
> You can look at kernel drivers/input/touchscreen/wacom_w8001.c for an
> example touchscreen that supports pen and at least 2 MT touches on a
> single /dev/input device (because HW packets come over single serial
> interface). It does not declare a BTN_TOOL_FINGER nor use pointer
> emulation to overcome issues I mentioned and xf86-input-wacom
> understands how to handle this device.
>
> 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.
Thorsten
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-15 17:56 ` Thorsten Wissmann
@ 2012-03-15 18:29 ` Chase Douglas
2012-03-16 1:52 ` Thorsten Wissmann
0 siblings, 1 reply; 13+ messages in thread
From: Chase Douglas @ 2012-03-15 18:29 UTC (permalink / raw)
To: Thorsten Wissmann
Cc: Chris Bagwell, Henrik Rydberg, linux-input,
Maximilian Krüger, i4passt
On 03/15/2012 10:56 AM, Thorsten Wissmann wrote:
> On Thu, Mar 15, 2012 at 12:27:22PM -0500, Chris Bagwell wrote:
>> Its also true that sharing ABS_X/Y events between both a BTN_TOOL_PEN
>> and a BTN_TOOL_FINGER will confuse most user land apps (they think
>> only touchpads can declare BTN_TOOL_FINGER's but this is a
>> touchscreen) and it also has bad side affects to the kernel's MT
>> pointer emulation functions.
>>
>> You can look at kernel drivers/input/touchscreen/wacom_w8001.c for an
>> example touchscreen that supports pen and at least 2 MT touches on a
>> single /dev/input device (because HW packets come over single serial
>> interface). It does not declare a BTN_TOOL_FINGER nor use pointer
>> emulation to overcome issues I mentioned and xf86-input-wacom
>> understands how to handle this device.
>>
>> 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.
-- Chase
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-15 18:29 ` Chase Douglas
@ 2012-03-16 1:52 ` Thorsten Wissmann
2012-03-16 2:03 ` Chase Douglas
0 siblings, 1 reply; 13+ messages in thread
From: Thorsten Wissmann @ 2012-03-16 1:52 UTC (permalink / raw)
To: Chase Douglas
Cc: Chris Bagwell, Henrik Rydberg, linux-input,
Maximilian Krüger, i4passt
On Thu, Mar 15, 2012 at 11:29:37AM -0700, Chase Douglas wrote:
> On 03/15/2012 10:56 AM, Thorsten Wissmann wrote:
> > On Thu, Mar 15, 2012 at 12:27:22PM -0500, Chris Bagwell wrote:
> >> 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
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-16 1:52 ` Thorsten Wissmann
@ 2012-03-16 2:03 ` Chase Douglas
2012-03-16 2:44 ` Thorsten Wissmann
2012-03-16 2:57 ` Chris Bagwell
0 siblings, 2 replies; 13+ messages in thread
From: Chase Douglas @ 2012-03-16 2:03 UTC (permalink / raw)
To: Thorsten Wissmann
Cc: Chris Bagwell, Henrik Rydberg, linux-input,
Maximilian Krüger, i4passt
On 03/15/2012 06:52 PM, Thorsten Wissmann wrote:
> On Thu, Mar 15, 2012 at 11:29:37AM -0700, Chase Douglas wrote:
>> On 03/15/2012 10:56 AM, Thorsten Wissmann wrote:
>>> On Thu, Mar 15, 2012 at 12:27:22PM -0500, Chris Bagwell wrote:
>>>> 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
Great!
I haven't fully thought about it enough to give a reviewed-by, but it
seems sane.
I suggest sending the patch to xorg-devel@lists.x.org. That's where most
patch reviews are handled. You will likely get faster results there.
-- Chase
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-16 2:03 ` Chase Douglas
@ 2012-03-16 2:44 ` Thorsten Wissmann
2012-03-16 2:57 ` Chris Bagwell
1 sibling, 0 replies; 13+ messages in thread
From: Thorsten Wissmann @ 2012-03-16 2:44 UTC (permalink / raw)
To: Chase Douglas
Cc: Chris Bagwell, Henrik Rydberg, linux-input,
Maximilian Krüger, i4passt
On Thu, Mar 15, 2012 at 07:03:12PM -0700, Chase Douglas wrote:
> On 03/15/2012 06:52 PM, Thorsten Wissmann wrote:
> > 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?
> >
> > [1] https://bugs.freedesktop.org/show_bug.cgi?id=47382
>
> Great!
>
> I haven't fully thought about it enough to give a reviewed-by, but it
> seems sane.
>
> I suggest sending the patch to xorg-devel@lists.x.org. That's where most
> patch reviews are handled. You will likely get faster results there.
I have sent it to xorg-devel@lists.x.org. (I haven't noticed it, because
only the web-bugtracker is noted in the README)
Thank you very much
Max
Thorsten
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-16 2:03 ` Chase Douglas
2012-03-16 2:44 ` Thorsten Wissmann
@ 2012-03-16 2:57 ` Chris Bagwell
2012-03-16 17:33 ` Thorsten Wissmann
1 sibling, 1 reply; 13+ messages in thread
From: Chris Bagwell @ 2012-03-16 2:57 UTC (permalink / raw)
To: Chase Douglas
Cc: Thorsten Wissmann, Henrik Rydberg, linux-input,
Maximilian Krüger, i4passt
On Thu, Mar 15, 2012 at 9:03 PM, Chase Douglas <chasedouglas@gmail.com> wrote:
> On 03/15/2012 06:52 PM, Thorsten Wissmann wrote:
>> On Thu, Mar 15, 2012 at 11:29:37AM -0700, Chase Douglas wrote:
>>> On 03/15/2012 10:56 AM, Thorsten Wissmann wrote:
>>>> On Thu, Mar 15, 2012 at 12:27:22PM -0500, Chris Bagwell wrote:
>>>>> 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
>
> Great!
>
> I haven't fully thought about it enough to give a reviewed-by, but it
> seems sane.
>
> I suggest sending the patch to xorg-devel@lists.x.org. That's where most
> patch reviews are handled. You will likely get faster results there.
>
> -- Chase
Yep, agree thats also a great way to go.
One thing I might suggest is to include with patch your thinking on
how a pen+multitouch device should send events to help in review of
the patch. Just the basics. For example, from above patch I have an
assumption that your sending ABS_X/Y only for PEN events and
ABS_MT_POSITION_X/Y only for touch events; but then again I'm not 100%
sure of that .
If ABS_X/Y is only for PEN events, then pEvdev->in_proximity in
xf86-input-evdev may be a less restrictive check to allow even
BTN_STYLUS and ABS_X/Y events to be processed.
Chris
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-16 2:57 ` Chris Bagwell
@ 2012-03-16 17:33 ` Thorsten Wissmann
2012-03-16 20:27 ` Chase Douglas
0 siblings, 1 reply; 13+ messages in thread
From: Thorsten Wissmann @ 2012-03-16 17:33 UTC (permalink / raw)
To: Chris Bagwell
Cc: Chase Douglas, Henrik Rydberg, linux-input,
Maximilian Krüger, i4passt
On Thu, Mar 15, 2012 at 09:57:30PM -0500, Chris Bagwell wrote:
> On Thu, Mar 15, 2012 at 9:03 PM, Chase Douglas <chasedouglas@gmail.com> wrote:
> > On 03/15/2012 06:52 PM, Thorsten Wissmann wrote:
> >> 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?
> >>
> >> [1] https://bugs.freedesktop.org/show_bug.cgi?id=47382
> >
> > Great!
> >
> > I haven't fully thought about it enough to give a reviewed-by, but it
> > seems sane.
> >
> > I suggest sending the patch to xorg-devel@lists.x.org. That's where most
> > patch reviews are handled. You will likely get faster results there.
>
> Yep, agree thats also a great way to go.
Thanks!
> One thing I might suggest is to include with patch your thinking on
> how a pen+multitouch device should send events to help in review of
> the patch. Just the basics. For example, from above patch I have an
> assumption that your sending ABS_X/Y only for PEN events and
> ABS_MT_POSITION_X/Y only for touch events; but then again I'm not 100%
> sure of that.
That's correct. In our case, it's ABS_X/Y for pen, ABS_MT_* for fingers
(normal touches). But maybe other devices behave different. So we should
send something like this as an addition to the patch on the x.org list?
# finger touch
ABS_MT_SLOT 0
ABS_MT_TRACKING_ID 42
ABS_MT_POSITION_X finger_x
ABS_MT_POSITION_Y finger_y
SYN_MT_REPORT
SYN_REPORT
# finger release
ABS_MT_SLOT 0
ABS_MT_TRACKING_ID -1
SYN_REPORT
# pen motion
ABS_X pen_x
ABS_Y pen_y
SYN_REPORT
> If ABS_X/Y is only for PEN events, then pEvdev->in_proximity in
> xf86-input-evdev may be a less restrictive check to allow even
> BTN_STYLUS and ABS_X/Y events to be processed.
The actual event source (if PEN or STYLUS or ...) shouldn't matter. (Or
I just don't get your point)
Thorsten
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-16 17:33 ` Thorsten Wissmann
@ 2012-03-16 20:27 ` Chase Douglas
2012-03-19 6:39 ` Henrik Rydberg
0 siblings, 1 reply; 13+ messages in thread
From: Chase Douglas @ 2012-03-16 20:27 UTC (permalink / raw)
To: Thorsten Wissmann
Cc: Chris Bagwell, Henrik Rydberg, linux-input,
Maximilian Krüger, i4passt
On 03/16/2012 10:33 AM, Thorsten Wissmann wrote:
> On Thu, Mar 15, 2012 at 09:57:30PM -0500, Chris Bagwell wrote:
>> On Thu, Mar 15, 2012 at 9:03 PM, Chase Douglas <chasedouglas@gmail.com> wrote:
>>> On 03/15/2012 06:52 PM, Thorsten Wissmann wrote:
>>>> 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?
>>>>
>>>> [1] https://bugs.freedesktop.org/show_bug.cgi?id=47382
>>>
>>> Great!
>>>
>>> I haven't fully thought about it enough to give a reviewed-by, but it
>>> seems sane.
>>>
>>> I suggest sending the patch to xorg-devel@lists.x.org. That's where most
>>> patch reviews are handled. You will likely get faster results there.
>>
>> Yep, agree thats also a great way to go.
>
> Thanks!
>
>> One thing I might suggest is to include with patch your thinking on
>> how a pen+multitouch device should send events to help in review of
>> the patch. Just the basics. For example, from above patch I have an
>> assumption that your sending ABS_X/Y only for PEN events and
>> ABS_MT_POSITION_X/Y only for touch events; but then again I'm not 100%
>> sure of that.
>
> That's correct. In our case, it's ABS_X/Y for pen, ABS_MT_* for fingers
> (normal touches). But maybe other devices behave different. So we should
> send something like this as an addition to the patch on the x.org list?
>
> # finger touch
> ABS_MT_SLOT 0
> ABS_MT_TRACKING_ID 42
> ABS_MT_POSITION_X finger_x
> ABS_MT_POSITION_Y finger_y
> SYN_MT_REPORT
> SYN_REPORT
> # finger release
> ABS_MT_SLOT 0
> ABS_MT_TRACKING_ID -1
> SYN_REPORT
> # pen motion
> ABS_X pen_x
> ABS_Y pen_y
> SYN_REPORT
The proper way to send events through evdev when there are two different
"tools" (pen and touch) is to use BTN_TOOL_*. In your example above, it
would be:
# finger touch (Note lack of tool, it's assumed to be finger)
ABS_MT_SLOT 0
ABS_MT_TRACKING_ID 42
ABS_MT_POSITION_X finger_x
ABS_MT_POSITION_Y finger_y
SYN_MT_REPORT
ABS_X finger_x
ABS_Y finger_y
SYN_REPORT
# finger release
ABS_MT_SLOT 0
ABS_MT_TRACKING_ID -1
SYN_REPORT
# pen motion
BTN_TOOL_PEN 1
ABS_X pen_x
ABS_Y pen_y
SYN_REPORT
# finger touch begin
ABS_MT_SLOT 0
ABS_MT_TRACKING_ID 42
ABS_MT_POSITION_X finger_x
ABS_MT_POSITION_Y finger_y
SYN_MT_REPORT
BTN_TOOL_PEN 0
ABS_X finger_x
ABS_Y finger_y
SYN_REPORT
etc.
Then, xf86-input-evdev ignores ABS_{X,Y} events when there is no
BTN_TOOL_* active.
-- Chase
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-16 20:27 ` Chase Douglas
@ 2012-03-19 6:39 ` Henrik Rydberg
2012-03-19 15:32 ` Chase Douglas
0 siblings, 1 reply; 13+ messages in thread
From: Henrik Rydberg @ 2012-03-19 6:39 UTC (permalink / raw)
To: Chase Douglas
Cc: Thorsten Wissmann, Chris Bagwell, linux-input,
Maximilian Krüger, i4passt
> The proper way to send events through evdev when there are two different
> "tools" (pen and touch) is to use BTN_TOOL_*. In your example above, it
> would be:
>
> # finger touch (Note lack of tool, it's assumed to be finger)
> ABS_MT_SLOT 0
> ABS_MT_TRACKING_ID 42
> ABS_MT_POSITION_X finger_x
> ABS_MT_POSITION_Y finger_y
> SYN_MT_REPORT
> ABS_X finger_x
> ABS_Y finger_y
> SYN_REPORT
> # finger release
> ABS_MT_SLOT 0
> ABS_MT_TRACKING_ID -1
> SYN_REPORT
> # pen motion
> BTN_TOOL_PEN 1
> ABS_X pen_x
> ABS_Y pen_y
> SYN_REPORT
> # finger touch begin
> ABS_MT_SLOT 0
> ABS_MT_TRACKING_ID 42
> ABS_MT_POSITION_X finger_x
> ABS_MT_POSITION_Y finger_y
> SYN_MT_REPORT
> BTN_TOOL_PEN 0
> ABS_X finger_x
> ABS_Y finger_y
> SYN_REPORT
> etc.
>
> Then, xf86-input-evdev ignores ABS_{X,Y} events when there is no
> BTN_TOOL_* active.
On the subject how pen and touch could work going forward, the MT
protocol is prepared to deal with tool type per slot. It makes a lot
of sense to move away from the above example, towards a fully parallel
representation of pen and touch data. Today's multitouch interfaces
are really tremendously restrictive; I am looking forward to the day
when one does not need to worry about touching or resting on a surface
in order to operate it.
In short, why not make xf86-input-evdev aware of MT_TOOL_TYPE?
Thanks,
Henrik
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-19 6:39 ` Henrik Rydberg
@ 2012-03-19 15:32 ` Chase Douglas
2012-03-20 1:04 ` Chris Bagwell
0 siblings, 1 reply; 13+ messages in thread
From: Chase Douglas @ 2012-03-19 15:32 UTC (permalink / raw)
To: Henrik Rydberg
Cc: Thorsten Wissmann, Chris Bagwell, linux-input,
Maximilian Krüger, i4passt
On 03/18/2012 11:39 PM, Henrik Rydberg wrote:
>> The proper way to send events through evdev when there are two different
>> "tools" (pen and touch) is to use BTN_TOOL_*. In your example above, it
>> would be:
>>
>> # finger touch (Note lack of tool, it's assumed to be finger)
>> ABS_MT_SLOT 0
>> ABS_MT_TRACKING_ID 42
>> ABS_MT_POSITION_X finger_x
>> ABS_MT_POSITION_Y finger_y
>> SYN_MT_REPORT
>> ABS_X finger_x
>> ABS_Y finger_y
>> SYN_REPORT
>> # finger release
>> ABS_MT_SLOT 0
>> ABS_MT_TRACKING_ID -1
>> SYN_REPORT
>> # pen motion
>> BTN_TOOL_PEN 1
>> ABS_X pen_x
>> ABS_Y pen_y
>> SYN_REPORT
>> # finger touch begin
>> ABS_MT_SLOT 0
>> ABS_MT_TRACKING_ID 42
>> ABS_MT_POSITION_X finger_x
>> ABS_MT_POSITION_Y finger_y
>> SYN_MT_REPORT
>> BTN_TOOL_PEN 0
>> ABS_X finger_x
>> ABS_Y finger_y
>> SYN_REPORT
>> etc.
>>
>> Then, xf86-input-evdev ignores ABS_{X,Y} events when there is no
>> BTN_TOOL_* active.
>
> On the subject how pen and touch could work going forward, the MT
> protocol is prepared to deal with tool type per slot. It makes a lot
> of sense to move away from the above example, towards a fully parallel
> representation of pen and touch data. Today's multitouch interfaces
> are really tremendously restrictive; I am looking forward to the day
> when one does not need to worry about touching or resting on a surface
> in order to operate it.
>
> In short, why not make xf86-input-evdev aware of MT_TOOL_TYPE?
There's no reason it can't be made aware. The question is whether you
want to create separate X input devices, or annotate events with the
tool type. No one has really bothered looking into it outside of wacom
devices, but my understanding is that wacom is a big special cased
situation due to historical reasons anyway.
If we merely annotate events by setting valuator values, that's a
trivial change that may even be already supported out of the box.
Splitting the evdev device into multiple X input devices is also
possible, since xf86-input-wacom does it, but would require a large
refactoring of xf86-input-evdev.
-- Chase
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: Mixed "pen" and multitouch input devices
2012-03-19 15:32 ` Chase Douglas
@ 2012-03-20 1:04 ` Chris Bagwell
0 siblings, 0 replies; 13+ messages in thread
From: Chris Bagwell @ 2012-03-20 1:04 UTC (permalink / raw)
To: Chase Douglas
Cc: Henrik Rydberg, Thorsten Wissmann, linux-input,
Maximilian Krüger, i4passt
2012/3/19 Chase Douglas <chasedouglas@gmail.com>:
> On 03/18/2012 11:39 PM, Henrik Rydberg wrote:
>>> The proper way to send events through evdev when there are two different
>>> "tools" (pen and touch) is to use BTN_TOOL_*. In your example above, it
>>> would be:
>>>
>>> # finger touch (Note lack of tool, it's assumed to be finger)
>>> ABS_MT_SLOT 0
>>> ABS_MT_TRACKING_ID 42
>>> ABS_MT_POSITION_X finger_x
>>> ABS_MT_POSITION_Y finger_y
>>> SYN_MT_REPORT
>>> ABS_X finger_x
>>> ABS_Y finger_y
>>> SYN_REPORT
>>> # finger release
>>> ABS_MT_SLOT 0
>>> ABS_MT_TRACKING_ID -1
>>> SYN_REPORT
>>> # pen motion
>>> BTN_TOOL_PEN 1
>>> ABS_X pen_x
>>> ABS_Y pen_y
>>> SYN_REPORT
>>> # finger touch begin
>>> ABS_MT_SLOT 0
>>> ABS_MT_TRACKING_ID 42
>>> ABS_MT_POSITION_X finger_x
>>> ABS_MT_POSITION_Y finger_y
>>> SYN_MT_REPORT
>>> BTN_TOOL_PEN 0
>>> ABS_X finger_x
>>> ABS_Y finger_y
>>> SYN_REPORT
>>> etc.
>>>
>>> Then, xf86-input-evdev ignores ABS_{X,Y} events when there is no
>>> BTN_TOOL_* active.
>>
>> On the subject how pen and touch could work going forward, the MT
>> protocol is prepared to deal with tool type per slot. It makes a lot
>> of sense to move away from the above example, towards a fully parallel
>> representation of pen and touch data. Today's multitouch interfaces
>> are really tremendously restrictive; I am looking forward to the day
>> when one does not need to worry about touching or resting on a surface
>> in order to operate it.
>>
>> In short, why not make xf86-input-evdev aware of MT_TOOL_TYPE?
>
> There's no reason it can't be made aware. The question is whether you
> want to create separate X input devices, or annotate events with the
> tool type. No one has really bothered looking into it outside of wacom
> devices, but my understanding is that wacom is a big special cased
> situation due to historical reasons anyway.
>
> If we merely annotate events by setting valuator values, that's a
> trivial change that may even be already supported out of the box.
> Splitting the evdev device into multiple X input devices is also
> possible, since xf86-input-wacom does it, but would require a large
> refactoring of xf86-input-evdev.
>
FWIW, non-wacom pen+touch devices should work with current
xf86-input-wacom if they use above events. You will get split devices
as long as you modify xorg.conf.d to route this input. MT events will
be treated roughly like xf86-input-synaptics would treat DOUBLETAP
though (internal 1 and 2 finger gesture support only).
My plan is to take your xf86-input-evdev/synaptics X Input 2.2 work
and merge it into xf86-input-wacom soon to benefit from those
improvements. In addition to Wacom MT hardware, I try to occasionally
test xf86-input-wacom with a hid-multitouch touchscreen to verify it
isn't needlessly wacom specific.
Having said that, I think its good to improve multi-tool support in
xf86-input-evdev in parallel to the multi-touch improvements. In
addition, xf86-input-evdev would be a much better base to start
experimenting with annotating events.
Chris
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2012-03-20 1:04 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-15 15:52 Mixed "pen" and multitouch input devices Thorsten Wissmann
2012-03-15 17:27 ` Chris Bagwell
2012-03-15 17:56 ` Thorsten Wissmann
2012-03-15 18:29 ` Chase Douglas
2012-03-16 1:52 ` Thorsten Wissmann
2012-03-16 2:03 ` Chase Douglas
2012-03-16 2:44 ` Thorsten Wissmann
2012-03-16 2:57 ` Chris Bagwell
2012-03-16 17:33 ` Thorsten Wissmann
2012-03-16 20:27 ` Chase Douglas
2012-03-19 6:39 ` Henrik Rydberg
2012-03-19 15:32 ` Chase Douglas
2012-03-20 1:04 ` Chris Bagwell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).