On Mon, Sep 06, 2010 at 07:42:30PM -0500, ch...@cnpbagwell.com wrote:
> From: Chris Bagwell <ch...@cnpbagwell.com>
> 
> Initial changes to support Bamboo Touch input device
> reporting values using a touchpad-like event interface
> and MT events for multitouch.  This change is backwards
> compatible with original "serial #" style multiplexing of data.
> 
> This change allows touchpad to function; including basic
> 1 finger gestures such as tap-to-click.
> 
> Tablet buttons do not work yet because they need to be
> rerouted to PAD device.  MT events do not work because
> at least the second finger needs to be rerouted to
> channel #2.
> 
> Signed-off-by: Chris Bagwell <ch...@cnpbagwell.com>
> ---
>  src/wcmUSB.c |   57 +++++++++++++++++++++++++++++++++++++++++++++------------
>  1 files changed, 45 insertions(+), 12 deletions(-)
> 
> diff --git a/src/wcmUSB.c b/src/wcmUSB.c
> index 72adb0b..8f97c73 100644
> --- a/src/wcmUSB.c
> +++ b/src/wcmUSB.c
> @@ -684,6 +684,18 @@ int usbWcmGetRanges(InputInfoPtr pInfo)
>       if (ioctl(pInfo->fd, EVIOCGABS(ABS_DISTANCE), &absinfo) == 0)
>               common->wcmMaxDist = absinfo.maximum;
>  
> +     if ((common->tablet_id >= 0xd0) && (common->tablet_id <= 0xd3))
> +     {
> +             /* Multitouch (MT) version of Bamboo driver does not
> +              * use serial # multiplexing scheme for touchpad.
> +              * Set wcmProtocolLevel to 0 to indicate no 
> +              * serial #/channel support.
> +              */
> +             if (ISBITSET(common->wcmKeys, BTN_TOOL_DOUBLETAP) &&
> +                 !ISBITSET(common->wcmKeys, BTN_TOOL_TRIPLETAP))
> +                     common->wcmProtocolLevel = 0;
> +     }
> +
>       return Success;
>  }
>  
> @@ -723,7 +735,13 @@ static int usbChooseChannel(WacomCommonPtr common)
>       wcmUSBData* private = common->private;
>       int serial = private->wcmLastToolSerial;
>  
> -     if (common->wcmProtocolLevel == 4)
> +     if (common->wcmProtocolLevel == 0)

I'm not a big fan of this. Can we add a PROTOCOL_BAMBOO define for this to
make the code a bit more obvious to read? And some comments above the
define what this is for?

btw, since you're probably quite familiar with the old-style and the
new-style kernel drivers would you mind writing up some of the caveats on
the wiki? there are some gems for which documentation would be quite useful
(e.g. usage of BTN_TOOL_DOUBLETAP)

patch otherwise looks good, thanks.

Cheers,
  Peter

> +     {
> +             /* Input devices without protocols default to 1st channel. */
> +             channel = 0;
> +             serial = 1;
> +     }
> +     else if (common->wcmProtocolLevel == 4)
>       {
>               /* Protocol 4 doesn't support tool serial numbers.
>                * However, we pass finger index into serial
> @@ -995,17 +1013,6 @@ static void usbParseKeyEvent(WacomCommonPtr common,
>        * that map to different channels can be in proximity at same
>        * time with no confusion.
>        *
> -      * TODO: Input devices that do not use Wacom's single device
> -      * channel multiplexing scheme will report BTN_TOUCH for same 
> -      * meaning we use BTN_TOOL_* and also report tablet button presses
> -      * with no BTN_TOOL_FINGER.  As long as these devices do not
> -      * have operlapping button reports (see BTN_STYLUS2 and 
> -      * BTN_RIGHT as example) then a simple solution may be to treat
> -      * BTN_TOUCH as BTN_TOOL_DOUBLETAP for touchpads and
> -      * BTN_TOOL_PEN for tablets.  Since touchpads can
> -      * send BTN_TOOL_DOUBLETAP for different reason then below case 
> -      * statement would need to account for that.
> -      *
>        * Remaining part of case state (after BTN_TOOL_*) handle normal
>        * button presses.
>        */
> @@ -1051,6 +1058,10 @@ static void usbParseKeyEvent(WacomCommonPtr common,
>                       break;
>  
>               case BTN_TOOL_FINGER:
> +                     /* If a real finger report, ignore. */
> +                     if (common->wcmProtocolLevel == 0)
> +                             break;
> +
>                       DBG(6, common, 
>                           "USB Pad detected %x (value=%d)\n",
>                           event->code, event->value);
> @@ -1059,7 +1070,25 @@ static void usbParseKeyEvent(WacomCommonPtr common,
>                       ds->proximity = (event->value != 0);
>                       break;
>  
> +             case BTN_TOUCH:
> +                     /* Treat BTN_TOUCH same as BTN_TOOL_DOUBLETAP
> +                      * for touchpads.
> +                      * TODO: Tablets that do not use wacom style
> +                      * multiplexing over a single input device
> +                      * also can report BTN_TOUCH same as
> +                      * BTN_TOOL_PEN would be used.  We should
> +                      * allow for that case as well.
> +                      */ 
> +                     if (common->wcmProtocolLevel != 0)
> +                             break;
> +
> +                     /* fall through */
>               case BTN_TOOL_DOUBLETAP:
> +                     /* If a real double tap report, ignore. */
> +                     if (common->wcmProtocolLevel == 0 &&
> +                         event->code == BTN_TOOL_DOUBLETAP)
> +                             break;
> +
>                       DBG(6, common, 
>                           "USB Touch detected %x (value=%d)\n",
>                           event->code, event->value);
> @@ -1085,6 +1114,10 @@ static void usbParseKeyEvent(WacomCommonPtr common,
>                       break;
>  
>               case BTN_TOOL_TRIPLETAP:
> +                     /* If a real triple tap report, ignore. */
> +                     if (common->wcmProtocolLevel == 0)
> +                             break;
> +
>                       DBG(6, common, 
>                           "USB Touch second finger detected %x (value=%d)\n",
>                           event->code, event->value);
> -- 
> 1.7.2.2
 
 

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel

Reply via email to