Re: [Linuxwacom-devel] [PATCH 1/1] Use kernel-reported tilt range and resolution

2012-03-23 Thread Nikolai Kondrashov
On 03/23/2012 07:00 PM, Chris Bagwell wrote:
> On Thu, Mar 22, 2012 at 2:37 PM, Nikolai Kondrashov  wrote:
>> +   /* Center the reported range on zero */
>> +   /* FIXME remove once kernel is fixed */
>> +   common->wcmTiltXOff = - (absinfo.minimum + absinfo.maximum) 
>> / 2;
>
> Why is this a FIXME?  It seems reasonable to center to zero here.  For
> example, there is no intention to "fix" Wacom kernel drivers, are
> there?

Well, I intended to "fix" them, actually. The thing is, the existing range
wacom drivers use is not straightforward and contradicts HID specification.

I was hoping to make a patch for the kernel drivers, so, after a while (at
your discretion), this centering could be dropped.

> If their driver is updated to send min/max (or are they already?), then
> this logic is still needed for them to continue working as expected.

Judging from the code, it seems wacom kernel drivers send meaningful min/max
values already. However, I was hoping some of linuxwacom developers could
verify this.

> I'd resolve first (if anything to resolve) and delete FIXME before submitting.

Resolving kernel first creates a window where the X driver won't work.

> I've no other comments other than I hope a Intuos user can test patch first.

Can you point me to one, so I could ask directly?

Thanks!

Sincerely,
Nick

--
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
___
Linuxwacom-devel mailing list
Linuxwacom-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxwacom-devel


Re: [Linuxwacom-devel] [PATCH 1/1] Use kernel-reported tilt range and resolution

2012-03-23 Thread Chris Bagwell
On Thu, Mar 22, 2012 at 2:37 PM, Nikolai Kondrashov  wrote:
> Use tilt range and, optionally, resolution reported by the kernel for event
> devices.
>
> Temporarily center the range on zero until kernel is fixed to do this.
>
> Use resolution, if present, to determine the physical range and clamp/extend
> it to 60 degrees either way as expected by applications, otherwise assume it
> corresponds to this range.
>
> This is needed to handle non-Wacom tablets reporting zero-centered tilt and
> having physical range greater than 60 degrees.
> ---
>
> This is in continuation of the "Tilt value meaning" thread:
> http://sf.net/mailarchive/forum.php?thread_name=4F5F6C72.8080906%40gmail.com&forum_name=linuxwacom-devel
>
> This is needed to support Waltop Sirius Battery Free Tablet patches:
> http://thread.gmane.org/gmane.linux.kernel.input/24153
>
>  src/wcmCommon.c     |    8 -
>  src/wcmFilter.c     |   16 +-
>  src/wcmISDV4.c      |   12 +++-
>  src/wcmUSB.c        |   74 +-
>  src/xf86Wacom.c     |    8 +++---
>  src/xf86WacomDefs.h |   11 ++-
>  6 files changed, 109 insertions(+), 20 deletions(-)
>
> diff --git a/src/wcmCommon.c b/src/wcmCommon.c
> index 7199105..1d66209 100644
> --- a/src/wcmCommon.c
> +++ b/src/wcmCommon.c
> @@ -1466,8 +1466,12 @@ WacomCommonPtr wcmNewCommon(void)
>        common->wcmMaxTouchY = 1024;       /* max touch Y value */
>        common->wcmMaxStripX = 4096;       /* Max fingerstrip X */
>        common->wcmMaxStripY = 4096;       /* Max fingerstrip Y */
> -       common->wcmMaxtiltX = 128;         /* Max tilt in X directory */
> -       common->wcmMaxtiltY = 128;         /* Max tilt in Y directory */
> +       common->wcmTiltXOff = -64;         /* Tilt offset in X direction */
> +       common->wcmTiltXMin = -64;         /* Min tilt in X direction */
> +       common->wcmTiltXMax = 64;          /* Max tilt in X direction */
> +       common->wcmTiltYOff = -64;         /* Tilt offset in Y direction */
> +       common->wcmTiltYMin = -64;         /* Min tilt in Y direction */
> +       common->wcmTiltYMax = 64;          /* Max tilt in Y direction */
>        common->wcmCursorProxoutDistDefault = PROXOUT_INTUOS_DISTANCE;
>                        /* default to Intuos */
>        common->wcmSuppress = DEFAULT_SUPPRESS;
> diff --git a/src/wcmFilter.c b/src/wcmFilter.c
> index 47e958a..3802857 100644
> --- a/src/wcmFilter.c
> +++ b/src/wcmFilter.c
> @@ -298,16 +298,16 @@ int wcmFilterCoord(WacomCommonPtr common, 
> WacomChannelPtr pChannel,
>                                    ds->device_type == ERASER_ID))
>        {
>                ds->tiltx = tx / common->wcmRawSample;
> -               if (ds->tiltx > common->wcmMaxtiltX/2-1)
> -                       ds->tiltx = common->wcmMaxtiltX/2-1;
> -               else if (ds->tiltx < -common->wcmMaxtiltX/2)
> -                       ds->tiltx = -common->wcmMaxtiltX/2;
> +               if (ds->tiltx > common->wcmTiltXMax)
> +                       ds->tiltx = common->wcmTiltXMax;
> +               else if (ds->tiltx < common->wcmTiltXMin)
> +                       ds->tiltx = common->wcmTiltXMin;
>
>                ds->tilty = ty / common->wcmRawSample;
> -               if (ds->tilty > common->wcmMaxtiltY/2-1)
> -                       ds->tilty = common->wcmMaxtiltY/2-1;
> -               else if (ds->tilty < -common->wcmMaxtiltY/2)
> -                       ds->tilty = -common->wcmMaxtiltY/2;
> +               if (ds->tilty > common->wcmTiltYMax)
> +                       ds->tilty = common->wcmTiltYMax;
> +               else if (ds->tilty < common->wcmTiltYMin)
> +                       ds->tilty = common->wcmTiltYMin;
>        }
>
>        return 0; /* lookin' good */
> diff --git a/src/wcmISDV4.c b/src/wcmISDV4.c
> index 892fbff..5aa68c5 100644
> --- a/src/wcmISDV4.c
> +++ b/src/wcmISDV4.c
> @@ -405,8 +405,16 @@ static int isdv4GetRanges(InputInfoPtr pInfo)
>                common->wcmMaxY = reply.y_max;
>                if (reply.tilt_x_max && reply.tilt_y_max)
>                {
> -                       common->wcmMaxtiltX = reply.tilt_x_max;
> -                       common->wcmMaxtiltY = reply.tilt_y_max;
> +                       common->wcmTiltXOff = -reply.tilt_x_max/2;
> +                       common->wcmTiltXMin = 0 + common->wcmTiltXOff;
> +                       common->wcmTiltXMax = reply.tilt_x_max +
> +                                             common->wcmTiltXOff;
> +
> +                       common->wcmTiltYOff = -reply.tilt_y_max/2;
> +                       common->wcmTiltYMin = 0 + common->wcmTiltYOff;
> +                       common->wcmTiltYMax = reply.tilt_y_max +
> +                                             common->wcmTiltYOff;
> +
>                        common->wcmFlags |= TILT_ENABLED_FLAG;
>                }
>
> diff --git a/src/wcmUSB.c b/src/wcmUSB.c
> index d41ced6..1d2e58a 100644
> --- a/src/wcmUSB.c
> +++ b/src/wcmUSB.c
> @@