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
> @@