From: Dmitry Tunin <hanipouspilot@gmail.com>
To: linux-input@vger.kernel.org
Cc: Mathias Gottschlag <mgottschlag@gmail.com>
Subject: Re: [PATCH v2] psmouse - focaltech pass finger width to userspace
Date: Sun, 19 Apr 2015 15:00:29 +0300 [thread overview]
Message-ID: <553398DD.70102@gmail.com> (raw)
In-Reply-To: <553282D4.2020501@gmail.com>
> 18.04.2015 16:35, Dmitry Tunin пишет:
>> Focaltech touchpads report finger width in packet[5] of absolute packet.
>> Range for width in raw format is 0x10 - 0x70. Second half-byte is always 0.
>> 0xff is reported, when a large contact area is detected.
>> This can be handled in userspace.
>>
>> Signed-off-by: Dmitry Tunin <hanipouspilot@gmail.com>
>> ---
>> drivers/input/mouse/focaltech.c | 9 +++++++++
>> 1 file changed, 9 insertions(+)
>>
>> diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
>> index 23d2594..25e4bb3 100644
>> --- a/drivers/input/mouse/focaltech.c
>> +++ b/drivers/input/mouse/focaltech.c
>> @@ -90,6 +90,12 @@ struct focaltech_finger_state {
>> */
>> unsigned int x;
>> unsigned int y;
>> +
>> + /*
>> + * Finger width 0-7 and 15 for 'latching'
>> + * 15 value stays until the finger is released
>> + */
>> + unsigned int width;
>> };
>>
>> /*
>> @@ -137,6 +143,7 @@ static void focaltech_report_state(struct psmouse *psmouse)
>> input_report_abs(dev, ABS_MT_POSITION_X, clamped_x);
>> input_report_abs(dev, ABS_MT_POSITION_Y,
>> priv->y_max - clamped_y);
>> + input_report_abs(dev, ABS_TOOL_WIDTH, finger->width);
>> }
>> }
>> input_mt_report_pointer_emulation(dev, true);
>> @@ -187,6 +194,7 @@ static void focaltech_process_abs_packet(struct psmouse *psmouse,
>>
>> state->fingers[finger].x = ((packet[1] & 0xf) << 8) | packet[2];
>> state->fingers[finger].y = (packet[3] << 8) | packet[4];
>> + state->fingers[finger].width = packet[5] >> 4;
>> state->fingers[finger].valid = true;
>> }
>>
>> @@ -331,6 +339,7 @@ static void focaltech_set_input_params(struct psmouse *psmouse)
>> __set_bit(EV_ABS, dev->evbit);
>> input_set_abs_params(dev, ABS_MT_POSITION_X, 0, priv->x_max, 0, 0);
>> input_set_abs_params(dev, ABS_MT_POSITION_Y, 0, priv->y_max, 0, 0);
>> + input_set_abs_params(dev, ABS_TOOL_WIDTH, 0, 15, 0, 0);
>> input_mt_init_slots(dev, 5, INPUT_MT_POINTER);
>> __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
>> }
>>
> After some testing I discovered that this looking quite harmless patch leads to a regression.
> At least on a weak laptop X200MA with xorg-synaptics.
>
> If I scroll with two fingers and then lift them and put them down again, the scrolled text jerks further.
> I think it is because of limited bandwidth of PS/2. When I increase amount of data, it starts behaving worse.
> Relative packets do not report finger width either way, so we do not need to report it each time.
> If general idea is approved, then it can be done another way, so finger width information is sent, when it is really
> appropriate.
>
Userspace was confused by this patch. When reported type 0x3 'untouch' packet with width reported, xorg-synaptics just ignored that packet.
That's why scrolling was 'continued' with new co-ordinates. That appeared as a cursor jump.
This is fixed in v 3. I had to use finger count to make sure that width is reported only for absolute packets that contain
this info.
It is possible to make a separate 'report_abs_state()' and call it in case absolute packet is processed. But the result should be same.
Number of active fingers is reported by touch packets either way.
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
prev parent reply other threads:[~2015-04-19 12:00 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-18 13:35 [PATCH v2] psmouse - focaltech pass finger width to userspace Dmitry Tunin
2015-04-18 16:14 ` Dmitry Tunin
2015-04-19 12:00 ` Dmitry Tunin [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=553398DD.70102@gmail.com \
--to=hanipouspilot@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=mgottschlag@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.