[PATCHv2] evdev: handle touchscreens without BTN_TOUCH

Peter Hutterer peter.hutterer at who-t.net
Tue May 24 01:02:06 PDT 2011


On Tue, May 24, 2011 at 09:44:05AM +0200, Peter Korsgaard wrote:
> Some touchscreens (like the Lumio crystaltouch in single touch mode) send
> BTN_LEFT rather than BTN_TOUCH:

merged, thanks.

one more thing for the future. for patches not to the xserver, please put
the component in as [PATCH evdev]. this way git strips them out and we
don't have every evdev commit starting with "evdev: ".

Cheers,
  Peter
 
> Input driver version is 1.0.1
> Input device ID: bus 0x3 vendor 0x202e product 0x5 version 0x111
> Input device name: "LUMIO Inc LUMIO CrystalTouch ver 1.1C"
> Supported events:
>   Event type 0 (Sync)
>   Event type 1 (Key)
>     Event code 272 (LeftBtn)
>     Event code 273 (RightBtn)
>     Event code 274 (MiddleBtn)
>   Event type 2 (Relative)
>     Event code 9 (Misc)
>   Event type 3 (Absolute)
>     Event code 0 (X)
>       Value    650
>       Min        0
>       Max     4095
>     Event code 1 (Y)
>       Value   3221
>       Min        0
>       Max     4095
>   Event type 4 (Misc)
>     Event code 4 (ScanCode)
> Testing ... (interrupt to exit)
> Event: time 1305882024.934011, type 4 (Misc), code 4 (ScanCode), value 90001
> Event: time 1305882024.934017, type 1 (Key), code 272 (LeftBtn), value 1
> Event: time 1305882024.934029, type 3 (Absolute), code 0 (X), value 270
> Event: time 1305882024.934034, type 3 (Absolute), code 1 (Y), value 1513
> Event: time 1305882024.934039, type 2 (Relative), code 9 (Misc), value 1
> 
> This causes evdev to handle these device as a mouse rather than a
> touchscreen, which naturally doesn't work very well. We already internally
> translate BTN_TOUCH as BTN_LEFT, so accept this kind of devices as
> touchscreens by checking for devices with BTN_LEFT, absolute X/Y and NO
> relative X/Y axes.
> 
> Signed-off-by: Peter Korsgaard <jacmet at sunsite.dk>
> ---
> Changes since v1:
> - Add as seperate check with explicit checks for no rel X/Y & BTN_LEFT to not 
>   interfere with existing logic / not have issues with funky keyboards
> 
>  src/evdev.c |    6 ++++++
>  1 files changed, 6 insertions(+), 0 deletions(-)
> 
> diff --git a/src/evdev.c b/src/evdev.c
> index b1a822b..4c05019 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -1692,6 +1692,12 @@ EvdevProbe(InputInfoPtr pInfo)
>                      pEvdev->flags |= EVDEV_TOUCHSCREEN;
>                      pEvdev->flags |= EVDEV_BUTTON_EVENTS;
>                  }
> +            } else if (!(TestBit(REL_X, pEvdev->rel_bitmask) &&
> +                         TestBit(REL_Y, pEvdev->rel_bitmask)) && has_lmr) {
> +                    /* some touchscreens use BTN_LEFT rather than BTN_TOUCH */
> +                    xf86IDrvMsg(pInfo, X_PROBED, "Found absolute touchscreen\n");
> +                    pEvdev->flags |= EVDEV_TOUCHSCREEN;
> +                    pEvdev->flags |= EVDEV_BUTTON_EVENTS;
>              }
>          }
>      }
> -- 
> 1.7.5.1
> 


More information about the xorg-devel mailing list