On Tue, Aug 12, 2014 at 11:49:37AM -0700, Jason Gerecke wrote:
> On Tue, Aug 5, 2014 at 9:51 PM, Peter Hutterer <peter.hutte...@who-t.net> 
> wrote:
> > On Thu, Jul 24, 2014 at 12:04:02PM -0700, Jason Gerecke wrote:
> >> Currently pointer arbitration is taken care of through the use of
> >> a 'wcomPenInProx' variable in the WacomCommonRec. If two devices
> >> share a 'common' variable, the commonDispatchDevice function will
> >> ensure that touches do not move the pointer while the pen is in
> >> proximity.
> >>
> >> This patch adds support for cross-device pointer arbitration to
> >> prevent other touches known to the driver from moving the pointer.
> >> This is achieved with the introduction of a 'WACOM_DRIVER' structure
> >> that is shared by all tools. Inside this structure is an 'active'
> >> variable that keeps track of the last tool which was actively
> >> controlling the pointer. When an event from any tool comes in, the
> >> driver will attempt to determine if it should be filtered or not.
> >> In some cases, the new device will be allowed to take control of
> >> the pointer, and become the new active device.
> >>
> >> Note that arbitration occurs *after* we store the device state
> >> to pChannel->valid.state. The code in wcmTouchFilter.c assumes
> >> that states are not missing, and can become desynchronized from
> >> reality if (for example) a finger were to go out of prox without
> >> a corresponding state update.
> >>
> >> Signed-off-by: Jason Gerecke <killert...@gmail.com>
> >> ---
> >>  src/wcmCommon.c     | 69 
> >> ++++++++++++++++++++++++++++++++++++-----------------
> >>  src/xf86WacomDefs.h |  8 ++++++-
> >>  2 files changed, 54 insertions(+), 23 deletions(-)
> >>
> >> diff --git a/src/wcmCommon.c b/src/wcmCommon.c
> >> index 5bcd755..4e7098a 100644
> >> --- a/src/wcmCommon.c
> >> +++ b/src/wcmCommon.c
> >> @@ -28,6 +28,11 @@
> >>  #include <xkbsrv.h>
> >>  #include <xf86_OSproc.h>
> >>
> >> +
> >> +struct _WacomDriverRec WACOM_DRIVER = {
> >> +     .active = NULL,
> >> +};
> >
> > just to make sure: you're intending to block events from other, unrelated
> > devices if multiple tablets are connected? say, block touch from an I5 while
> > a pen is active on a cintiq.
> >
> That's correct. At the moment the X driver can only do arbitration if
> the devices share the same USB ID. This isn't always sufficient, and
> we rely on the kernel to work out the trickier cases. This isn't as
> clever as the kernel's arbitration logic, but its brute-force approach
> can actually work out well for tablet PC users... If an xorg.conf.d
> rule is added to route all touchscreens to xf86-input-wacom,
> arbitration will (finally) occur between the pen and touch even if
> they're from different manufacturers. I'd like to know what your
> thoughts are on that...

for the X driver, there isn't much we can do without some extra amount of
effort. I guess we could improve this with finer-grained arbitration based
on device types, e.g. skip this arbitration if the two devices in question
are two Intuos tablets.

what does worry me though is that the driver has no idea of the use of the
device. In the (quite rare) case of an MPX setup, you've now pretty much
blocked the devices from working simultaneously but independently - which is
rather the point of MPX, even though I'm not aware of a current setup that
makes use of this. The same would be true if the device is set floating but
that too is seen in the wild about as often as a yeti.
 
I don't have a good solution here, short of another option that's going to
be quite hard to work out properly. The tablet-pc case is more likely to
happen than the MPX setup and we don't have a way in the driver to handle
the latter anyway, so I'm giving this a i-wish-life-was-simpler 
Acked-by: Peter Hutterer <peter.hutte...@who-t.net>.

Cheers,
   Peter


------------------------------------------------------------------------------
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to