Re: [PATCH 4/5] input: wacom: Add support for the Bamboo Touch trackpad (rev4)

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

 



On Wed, Oct 13, 2010 at 11:21 AM, Henrik Rydberg <rydberg@xxxxxxxxxxx> wrote:
>
>>> +static int wacom_bpt_irq(struct wacom_wac *wacom, size_t len)
>
>>> +{
>>> +       static int trkid;
>>> +       struct input_dev *input = wacom->input;
>>> +       unsigned char *data = wacom->data;
>>> +       int sp = 0, sx = 0, sy = 0, count = 0;
>>> +       int i;
>>> +
>>> +       if (len != WACOM_PKGLEN_BBTOUCH)
>>> +               return 0;
>>> +
>>> +       for (i = 0; i < 2; i++) {
>>> +               int p = data[9 * i + 2];
>>> +               input_mt_slot(input, i);
>>> +               if (p) {
>>> +                       int x = get_unaligned_be16(&data[9 * i + 3]) & 0x7ff;
>>> +                       int y = get_unaligned_be16(&data[9 * i + 5]) & 0x7ff;
>>> +                       input_report_abs(input, ABS_MT_PRESSURE, p);
>>> +                       input_report_abs(input, ABS_MT_POSITION_X, x);
>>> +                       input_report_abs(input, ABS_MT_POSITION_Y, y);
>>> +                       if (wacom->id[i] < 0)
>>> +                               wacom->id[i] = trkid++ & MAX_TRACKING_ID;
>>
>> Why do we need an arbitrary MAX_TRACKING_ID when the device can tell
>> us how many IDs we can have and it tracks the individual fingers for
>> us? In this case, there are only two ID/fingers and the ID can be
>> retrieved from the raw data. I must be missing something in the
>> defintion of MAX_TRACKING_ID.
>
> In the language of ABS_MT, there is a distinction between slot and id. The slot
> is the handle used to communicate a unique touch. The id is the identifier of
> that touch. The device tells us how many slots we have. The range of ids is in
> principle infinite. In practice, it is set to a large number.

Sorry to bring this topic back again. I was under the impression that
I was the only one who didn't get the spec clear. The discussion at
yesterday's UDS session made me feel I am not alone (good or bad :).
Let me try it again to see if I can get it right this time.

>From the "Multi-touch (MT) Protocol" under Documentation/input, we see
the following:

"The slot protocol requires the use of the ABS_MT_TRACKING_ID, either
provided by the hardware or computed from the raw data".

That means if the hardware provides the tracking ID, we use it.
Otherwise we lose that specific information reported from the
hardware.

For the Bamboo case, the tracking ID happens to be the same as the
slot ID we use. But, there are devices, as far as I know, report up to
10 fingers/touches. So, there would be 10 slots to report the data.
But, the tracking ID we get from the devices is 0 to 255. So, slot 5
could have a tracking ID of 123 now and 9 when tuch 123 is up and
touch 5 is down.

> To answer a possible follow-up question: from the tracking id, you can tell if a
> contact is present, if it is new, and if it is older than another contact.

The new and old attribute can be tracked by a time stamp in the
userland. Kernel driver doesn't need to worry about it. Maybe I am
missing an use case in the kernel?

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