Re: [PATCH] input: wacom: Use touch size for ABS_MT_TOUCH_MAJOR

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Mar 9, 2012 at 5:26 PM, Jason Gerecke <killertofu@xxxxxxxxx> wrote:
> On Fri, Mar 9, 2012 at 2:30 PM, Chris Bagwell <chris@xxxxxxxxxxxxxx> wrote:
>> On Wed, Mar 7, 2012 at 7:39 PM, Jason Gerecke <killertofu@xxxxxxxxx> wrote:
>>> 3rd-gen Bamboo devices report both "amplitude" and "size" data
>>> in their touch packets. This patch changes the source for
>>> ABS_MT_TOUCH_MAJOR to be the latter rather than the former.
>>> ---
>>>  drivers/input/tablet/wacom_wac.c |    2 +-
>>>  1 files changed, 1 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
>>> index d0b0fc4..5daf11d 100644
>>> --- a/drivers/input/tablet/wacom_wac.c
>>> +++ b/drivers/input/tablet/wacom_wac.c
>>> @@ -916,7 +916,7 @@ static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
>>>        if (touch) {
>>>                int x = (data[2] << 4) | (data[4] >> 4);
>>>                int y = (data[3] << 4) | (data[4] & 0x0f);
>>> -               int w = data[6];
>>> +               int w = data[5];
>>>
>>>                input_report_abs(input, ABS_MT_POSITION_X, x);
>>>                input_report_abs(input, ABS_MT_POSITION_Y, y);
>>> --
>>> 1.7.9.1
>>>
>>
>> I found time to test this patch and used "mtview" so I could get some
>> visual feedback.
>>
>> The lines because extremely thin with this change.  Part of reason I
>> quickly traced to we are setting range as 0-255 but I couldn't get
>> data[5] to go above a value of 18.  So I changed range to 0-16 and it
>> works better but the lines still never gets very thick (this could
>> well be that mtview doesn't scale values and prefers 0-255.  I didn't
>> look).
> Looks like its a combination of two problems, one mine one mtview's...
>
> I did some reading, and the MT protocol docs specify that
> ABS_MT_TOUCH_MAJOR are in terms of surface units. That means a value
> of e.g. "20" should represent a touch that spans 20 units of X. The
> touch sensor has a resolution of ~0.1mm, which would imply the touch
> was only 2 mm wide... There's going to have to be a correction factor
> to transform the value to something more appropriate.
>
> As for mtview, it looks like it doesn't scale the major/minor axis
> values based on the output size. At the very least it should scale
> everything by roughly (output_max_x / sensor_max_x) so that a touch
> taking up e.g. 10% of the tablet would take up 10% of the output.

I see now that I got lucky that I had a 0-255 value available and
didn't look into what I needed to report close enough.

>
>>
>> Amplitude feels better to me using test apps but your in a better
>> position to say if we should really change this.  Please adjust
>> declared range though if you still think we should change this.
>>
>> Chris
>
> My main reasons for switching away from amplitude were that amplitude
> is a very crude number (I think I can get three or four unique values
> out of it), and that the tablet reports a size already. Worst case --
> assuming a correction factor isn't sufficient to get data[5] working
> as MAJOR -- we should at least send data[5] through PRESSURE (which
> the MT docs state may be used instead of MAJOR/MINOR if the units are
> arbitrary).
>

I've not found time to dig deeply to this (to compute real scale
value) but I'll offer this.  I compared behaviour of original data[6]
to this:

int w = (data[5] > 31) ? 255 : data[5] << 3;

and with mtview the size change is much more responsive and
consistent.  So I'm on board with changing to data[5] in some form.

Chris
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux