Hi all,

First, I understand that a similar version of the patch was already
applied to a more recent version of linuxwacom.

[EMAIL PROTECTED] wrote:
> The changes in wcmCommon.c are either syntax change (casting fs to a
> point)
Well, this one is critical. As written before the patch is applied, the
WacomFilterState structure is copied before the filtering happens, and
never copied back into the WacomChannel structure. Actually in -O2
build, a good portion of the code is optimized out (because, in fact, it
does nothing).
> or wrong (ABS(dsOrig->rotation - dsNew->rotation) > suppress and (1800
> - ABS(dsNew->rotation - dsOrig->rotation)) > suppress can never be
> true the same time).  So, I don't see a reason to apply them.
Oh, they can be true at the same time. Take for example the case
dsOrig->rotation==0, dsNew->rotation==20 (and suppress==10). Actually at
least one of them is always true if suppress<900, so as the code is
written right now, it always exits at this point (without suppressing).
The first condition is for the general case, but gives false positives
when close to the origin, that the second condition removes.
>  
> The only real change that affects suppress is the one in xf86Wacom.h:
>  
> +#define MAX_SUPPRESS 20          /* max value of suppress */
>
> From our experience on other platforms (Windows, Mac...), a suppress
> value larger than 6 will reduce the data accuracy that causes other
> issues.  This is why we didn't let anyone to use a suppress larger
> than 6.  And, I think, this is why some people feel suppress doesn't
> work since they tried a value larger than 6.
>  
> Anyway, I've changed 6 to 20 as the patch suggested.  But, I recommend
> that a suppress larger than 6 will not be used unless you either know
> what you are doing or you will not complain about losing too much data :).
I understand. Although it was related to hardware problems (a nasty KVM
switch), 6 was definitely not enough, and 20 was barely enough (and,
it's true, it was losing too much precision). The thing is, when you
give it a value too big, you end up with the default value of 2...

Thanks,
Antoine
>  
> Ping
>  
> On 9/14/06, *Ron* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:
>
>
>     Hi Antoine, Ping, All,
>
>     I'm cc'ing the linux-wacom list for attention and comment:
>     Is this already fixed in the 0.7.5-2 release, or is it news?
>
>     best,
>     Ron
>
>
>     On Sun, Sep 10, 2006 at 03:37:07PM -0700, Antoine Labour wrote:
>     > It looks like currently, (as of version 0.7.4.1-4), the
>     > filtering/suppress code in wacom-tools (in particular the xorg
>     input
>     > driver) doesn't work at all (for various reasons). Please find in
>     > attachment a patch that fixes at least some of the problems.
>     >
>     > Thanks,
>     > Antoine
>
>     > diff -ur wacom-tools-0.7.4.1 /linuxwacom/src/wcmCommon.c
>     wacom-tools-0.7.4.1-new/linuxwacom/src/wcmCommon.c
>     > --- wacom-tools-0.7.4.1/linuxwacom/src/wcmCommon.c    2006-03-13
>     17:17:41.000000000 -0800
>     > +++
>     wacom-tools-0.7.4.1-new/linuxwacom/src/wcmCommon.c        2006-09-10
>     14:59: 56.000000000 -0700
>     > @@ -667,7 +667,7 @@
>     >       if (ABS(dsOrig->pressure - dsNew->pressure) > suppress)
>     return 0;
>     >       if (ABS(dsOrig->throttle - dsNew->throttle) > suppress)
>     return 0;
>     >
>     > -     if (ABS(dsOrig->rotation - dsNew->rotation) > suppress ||
>     > +     if (ABS(dsOrig->rotation - dsNew->rotation) > suppress &&
>     >               (1800 - ABS(dsNew->rotation - dsOrig->rotation)) >
>     suppress)
>     >               return 0;
>     >
>     > @@ -738,7 +738,7 @@
>     >       WacomDeviceState* pLast;
>     >       WacomDeviceState ds;
>     >       WacomChannelPtr pChannel;
>     > -     WacomFilterState fs;
>     > +     WacomFilterState *fs;
>     >       int i;
>     >
>     >       /* tool on the tablet when driver starts */
>     > @@ -783,35 +783,35 @@
>     >               return; /* discard */
>     >       }
>     >  #endif
>     > -     fs = pChannel->rawFilter;
>     > -     if (!fs.npoints && ds.proximity)
>     > +     fs = &pChannel->rawFilter;
>     > +     if (!fs->npoints && ds.proximity)
>     >       {
>     >               DBG(11, ErrorF("initialize Channel data.\n"));
>     >               /* store channel device state for later use */
>     >               for (i=MAX_SAMPLES - 1; i>=0; i--)
>     >               {
>     > -                     fs.x[i]= ds.x;
>     > -                     fs.y[i]= ds.y;
>     > +                     fs->x[i]= ds.x;
>     > +                     fs->y[i]= ds.y;
>     >               }
>     > -             ++fs.npoints;
>     > +             ++fs->npoints;
>     >       } else  {
>     >               /* Filter raw data, fix hardware defects, perform
>     error correction */
>     >               for (i=MAX_SAMPLES - 1; i>0; i--)
>     >               {
>     > -                     fs.x[i]= fs.x[i-1];
>     > -                     fs.y[i]= fs.y[i-1];
>     > +                     fs->x[i]= fs->x[i-1];
>     > +                     fs->y[i]= fs->y[i-1];
>     >               }
>     > -             fs.x[0] = ds.x;
>     > -             fs.y[0] = ds.y;
>     > +             fs->x[0] = ds.x;
>     > +             fs->y[0] = ds.y;
>     >               if (HANDLE_TILT(common) && (ds.device_type ==
>     STYLUS_ID || ds.device_type == ERASER_ID))
>     >               {
>     >                       for (i=MAX_SAMPLES - 1; i>0; i--)
>     >                       {
>     > -                             fs.tiltx[i]= fs.tiltx[i-1];
>     > -                             fs.tilty[i]= fs.tilty[i-1];
>     > +                             fs->tiltx[i]= fs->tiltx[i-1];
>     > +                             fs->tilty[i]= fs->tilty[i-1];
>     >                       }
>     > -                     fs.tiltx[0] = ds.tiltx;
>     > -                     fs.tilty[0] = ds.tilty;
>     > +                     fs->tiltx[0] = ds.tiltx;
>     > +                     fs->tilty[0] = ds.tilty;
>     >               }
>     >               if (RAW_FILTERING(common) &&
>     common->wcmModel->FilterRaw)
>     >               {
>     > diff -ur wacom-tools-0.7.4.1/linuxwacom/src/xf86Wacom.h
>     wacom-tools-0.7.4.1-new /linuxwacom/src/xf86Wacom.h
>     > --- wacom-tools-0.7.4.1/linuxwacom/src/xf86Wacom.h    2006-05-05
>     10:25:01.000000000 -0700
>     > +++
>     wacom-tools-0.7.4.1-new/linuxwacom/src/xf86Wacom.h        2006-09-10
>     15:03:42.000000000 -0700
>     > @@ -115,7 +115,7 @@
>     >  #define DEFAULT_SPEED 1.0       /* default relative cursor speed */
>     >  #define MAX_ACCEL 7             /* number of acceleration levels */
>     >  #define DEFAULT_SUPPRESS 2      /* default suppress */
>     > -#define MAX_SUPPRESS 6          /* max value of suppress */
>     > +#define MAX_SUPPRESS 20          /* max value of suppress */
>     >  #define BUFFER_SIZE 256         /* size of reception buffer */
>     >  #define XI_STYLUS "STYLUS"      /* X device name for the stylus */
>     >  #define XI_CURSOR "CURSOR"      /* X device name for the cursor */
>     > @@ -341,10 +341,10 @@
>     >  struct _WacomFilterState
>     >  {
>     >          int npoints;
>     > -        int x[3];
>     > -        int y[3];
>     > -        int tiltx[3];
>     > -        int tilty[3];
>     > +        int x[MAX_SAMPLES];
>     > +        int y[MAX_SAMPLES];
>     > +        int tiltx[MAX_SAMPLES];
>     > +        int tilty[MAX_SAMPLES];
>     >          int statex;
>     >          int statey;
>     >  };
>


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Linuxwacom-discuss mailing list
Linuxwacom-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-discuss

Reply via email to