diff mbox

[2/2] skip all blobs that are not touches

Message ID 1499626491-22592-2-git-send-email-floe@butterbrot.org (mailing list archive)
State New, archived
Headers show

Commit Message

Florian Echtler July 9, 2017, 6:54 p.m. UTC
The SUR40 labels all reported blobs as touch, token, or generic blob.
Previously, all blobs were reported as touch regardless of type, causing
lots of false positives. Present patch fixes this.

Signed-off-by: Martin Kaltenbrunner <modin@yuri.at>
Signed-off-by: Florian Echtler <floe@butterbrot.org>
---
 drivers/input/touchscreen/sur40.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Dmitry Torokhov July 9, 2017, 9:41 p.m. UTC | #1
On Sun, Jul 09, 2017 at 08:54:51PM +0200, Florian Echtler wrote:
> The SUR40 labels all reported blobs as touch, token, or generic blob.
> Previously, all blobs were reported as touch regardless of type, causing
> lots of false positives. Present patch fixes this.
> 
> Signed-off-by: Martin Kaltenbrunner <modin@yuri.at>
> Signed-off-by: Florian Echtler <floe@butterbrot.org>
> ---
>  drivers/input/touchscreen/sur40.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
> index 12bdee9..fbd4010 100644
> --- a/drivers/input/touchscreen/sur40.c
> +++ b/drivers/input/touchscreen/sur40.c
> @@ -309,6 +309,8 @@ static void sur40_report_blob(struct sur40_blob *blob, struct input_dev *input)
>  	int slotnum = input_mt_get_slot_by_key(input, blob->blob_id);
>  	if (slotnum < 0 || slotnum >= MAX_CONTACTS)
>  		return;
> +	if (blob->type != SUR40_TOUCH)
> +		return;

I think we should be checking blob type before trying to get slot
number.

>  
>  	input_mt_slot(input, slotnum);
>  	input_mt_report_slot_state(input, MT_TOOL_FINGER, 1);
> -- 
> 2.7.4
> 

Thanks.
Florian Echtler July 10, 2017, 7:11 a.m. UTC | #2
Good point, I'll send an updated patch ASAP.

Related question: we first attempted to label non-touch objects as MT_TOOL_PALM,
but it looks like userspace (Xorg in particular) doesn't actually distinguish
between MT_TOOL_* types; is that correct?

Best, Florian

On 09.07.2017 23:41, Dmitry Torokhov wrote:
> On Sun, Jul 09, 2017 at 08:54:51PM +0200, Florian Echtler wrote:
>> The SUR40 labels all reported blobs as touch, token, or generic blob.
>> Previously, all blobs were reported as touch regardless of type, causing
>> lots of false positives. Present patch fixes this.
>>
>> Signed-off-by: Martin Kaltenbrunner <modin@yuri.at>
>> Signed-off-by: Florian Echtler <floe@butterbrot.org>
>> ---
>>  drivers/input/touchscreen/sur40.c | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
>> index 12bdee9..fbd4010 100644
>> --- a/drivers/input/touchscreen/sur40.c
>> +++ b/drivers/input/touchscreen/sur40.c
>> @@ -309,6 +309,8 @@ static void sur40_report_blob(struct sur40_blob *blob, struct input_dev *input)
>>  	int slotnum = input_mt_get_slot_by_key(input, blob->blob_id);
>>  	if (slotnum < 0 || slotnum >= MAX_CONTACTS)
>>  		return;
>> +	if (blob->type != SUR40_TOUCH)
>> +		return;
> 
> I think we should be checking blob type before trying to get slot
> number.
> 
>>  
>>  	input_mt_slot(input, slotnum);
>>  	input_mt_report_slot_state(input, MT_TOOL_FINGER, 1);
>> -- 
>> 2.7.4
>>
> 
> Thanks.
>
Dmitry Torokhov July 10, 2017, 6:11 p.m. UTC | #3
On Mon, Jul 10, 2017 at 09:11:53AM +0200, Florian Echtler wrote:
> Good point, I'll send an updated patch ASAP.
> 
> Related question: we first attempted to label non-touch objects as MT_TOOL_PALM,
> but it looks like userspace (Xorg in particular) doesn't actually distinguish
> between MT_TOOL_* types; is that correct?

It really should, but I think Peter never got around implementing this.

Also, I think it is a good idea to set touch major to max in this case.
I believe that that will help clients that do no understand MT_TOOL_PALM
to still do palm rejection.

Peter?

> 
> Best, Florian
> 
> On 09.07.2017 23:41, Dmitry Torokhov wrote:
> > On Sun, Jul 09, 2017 at 08:54:51PM +0200, Florian Echtler wrote:
> >> The SUR40 labels all reported blobs as touch, token, or generic blob.
> >> Previously, all blobs were reported as touch regardless of type, causing
> >> lots of false positives. Present patch fixes this.
> >>
> >> Signed-off-by: Martin Kaltenbrunner <modin@yuri.at>
> >> Signed-off-by: Florian Echtler <floe@butterbrot.org>
> >> ---
> >>  drivers/input/touchscreen/sur40.c | 2 ++
> >>  1 file changed, 2 insertions(+)
> >>
> >> diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
> >> index 12bdee9..fbd4010 100644
> >> --- a/drivers/input/touchscreen/sur40.c
> >> +++ b/drivers/input/touchscreen/sur40.c
> >> @@ -309,6 +309,8 @@ static void sur40_report_blob(struct sur40_blob *blob, struct input_dev *input)
> >>  	int slotnum = input_mt_get_slot_by_key(input, blob->blob_id);
> >>  	if (slotnum < 0 || slotnum >= MAX_CONTACTS)
> >>  		return;
> >> +	if (blob->type != SUR40_TOUCH)
> >> +		return;
> > 
> > I think we should be checking blob type before trying to get slot
> > number.
> > 
> >>  
> >>  	input_mt_slot(input, slotnum);
> >>  	input_mt_report_slot_state(input, MT_TOOL_FINGER, 1);
> >> -- 
> >> 2.7.4
> >>
> > 
> > Thanks.
> > 
> 
> 
> -- 
> SENT FROM MY DEC VT50 TERMINAL
>
Florian Echtler July 14, 2017, 7:54 a.m. UTC | #4
On Mon, 10 Jul 2017, Dmitry Torokhov wrote:
> On Mon, Jul 10, 2017 at 09:11:53AM +0200, Florian Echtler wrote:
>>
>> Related question: we first attempted to label non-touch objects as MT_TOOL_PALM,
>> but it looks like userspace (Xorg in particular) doesn't actually distinguish
>> between MT_TOOL_* types; is that correct?
>
> It really should, but I think Peter never got around implementing this.
>
> Also, I think it is a good idea to set touch major to max in this case.
> I believe that that will help clients that do no understand MT_TOOL_PALM
> to still do palm rejection.
>
> Peter?

Would you consider merging v2 of the patch regardless of the Xorg 
situation? Right now, it's a useful bugfix in any case, and we can deal 
with how to represent blobs/palms/tokens later on.

Best, Florian
Peter Hutterer July 14, 2017, 8:24 a.m. UTC | #5
On Fri, Jul 14, 2017 at 09:54:03AM +0200, Florian Echtler wrote:
> On Mon, 10 Jul 2017, Dmitry Torokhov wrote:
> > On Mon, Jul 10, 2017 at 09:11:53AM +0200, Florian Echtler wrote:
> > > 
> > > Related question: we first attempted to label non-touch objects as MT_TOOL_PALM,
> > > but it looks like userspace (Xorg in particular) doesn't actually distinguish
> > > between MT_TOOL_* types; is that correct?
> > 
> > It really should, but I think Peter never got around implementing this.
> > 
> > Also, I think it is a good idea to set touch major to max in this case.
> > I believe that that will help clients that do no understand MT_TOOL_PALM
> > to still do palm rejection.
> > 
> > Peter?
> 
> Would you consider merging v2 of the patch regardless of the Xorg situation?
> Right now, it's a useful bugfix in any case, and we can deal with how to
> represent blobs/palms/tokens later on.

sorry about the delay, bit chaotic here. libinput 1.8 was released a week or
so ago and it supports MT_TOOL_PALM, so consider userspace ready for that. I
also have patches to use major/minor for palm detection where appropriate
which will hit git master (my) tonight.

That's the libinput situation sorted I think, don't expect synaptics to
catch up with that though (unless someone ends up writing the patches).

Cheers,
   Peter
--
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
Florian Echtler July 14, 2017, 9:28 a.m. UTC | #6
On 14.07.2017 10:24, Peter Hutterer wrote:
> On Fri, Jul 14, 2017 at 09:54:03AM +0200, Florian Echtler wrote:
>> On Mon, 10 Jul 2017, Dmitry Torokhov wrote:
>>> On Mon, Jul 10, 2017 at 09:11:53AM +0200, Florian Echtler wrote:
>>>>
>>>> Related question: we first attempted to label non-touch objects as MT_TOOL_PALM,
>>>> but it looks like userspace (Xorg in particular) doesn't actually distinguish
>>>> between MT_TOOL_* types; is that correct?
>>>
>>> It really should, but I think Peter never got around implementing this.
>>>
>>> Also, I think it is a good idea to set touch major to max in this case.
>>> I believe that that will help clients that do no understand MT_TOOL_PALM
>>> to still do palm rejection.
>>>
>>> Peter?
>>
>> Would you consider merging v2 of the patch regardless of the Xorg situation?
>> Right now, it's a useful bugfix in any case, and we can deal with how to
>> represent blobs/palms/tokens later on.
> 
> sorry about the delay, bit chaotic here. libinput 1.8 was released a week or
> so ago and it supports MT_TOOL_PALM, so consider userspace ready for that. I
> also have patches to use major/minor for palm detection where appropriate
> which will hit git master (my) tonight.

Nevermind :-) Just to clarify, I can now set MT_TOOL_PALM on generic blob
objects, and they will still be available in userspace "on request", but will
not be considered as touch points?

Do you know how "legacy" xserver-xorg-input-evdev will handle this case?

And final question: the SUR40 also is able to identify specific patterns as
tokens (so-called "bytetags", see
https://github.com/floe/surface-2.0/blob/master/bytetag/bytetag.pdf ). What
would be a sensible way to expose these to userspace, too? Add another
MT_TOOL_TOKEN type?

Thanks & best regards, Florian
Peter Hutterer July 14, 2017, 10:13 p.m. UTC | #7
On 14/07/2017 19:28 , Florian Echtler wrote:
> On 14.07.2017 10:24, Peter Hutterer wrote:
>> On Fri, Jul 14, 2017 at 09:54:03AM +0200, Florian Echtler wrote:
>>> On Mon, 10 Jul 2017, Dmitry Torokhov wrote:
>>>> On Mon, Jul 10, 2017 at 09:11:53AM +0200, Florian Echtler wrote:
>>>>>
>>>>> Related question: we first attempted to label non-touch objects as MT_TOOL_PALM,
>>>>> but it looks like userspace (Xorg in particular) doesn't actually distinguish
>>>>> between MT_TOOL_* types; is that correct?
>>>>
>>>> It really should, but I think Peter never got around implementing this.
>>>>
>>>> Also, I think it is a good idea to set touch major to max in this case.
>>>> I believe that that will help clients that do no understand MT_TOOL_PALM
>>>> to still do palm rejection.
>>>>
>>>> Peter?
>>>
>>> Would you consider merging v2 of the patch regardless of the Xorg situation?
>>> Right now, it's a useful bugfix in any case, and we can deal with how to
>>> represent blobs/palms/tokens later on.
>>
>> sorry about the delay, bit chaotic here. libinput 1.8 was released a week or
>> so ago and it supports MT_TOOL_PALM, so consider userspace ready for that. I
>> also have patches to use major/minor for palm detection where appropriate
>> which will hit git master (my) tonight.
>
> Nevermind :-) Just to clarify, I can now set MT_TOOL_PALM on generic blob
> objects, and they will still be available in userspace "on request", but will
> not be considered as touch points?
>
> Do you know how "legacy" xserver-xorg-input-evdev will handle this case?

sorry, I just went back to read the whole thread and realised this is a 
touchscreen, not a touchpad. Short answer: we don't have tool type 
handling in touchscreens because no-one asked for it yet. I can probably 
get this done by the end of next week. File a bug against libinput and 
assign it to me please.

That's for libinput. evdev is in maintenance mode, it may be possible to 
add that bit but it largely depends on when the tool type is set. If 
it's set in the first event already that's trivial to add (I think).

> And final question: the SUR40 also is able to identify specific patterns as
> tokens (so-called "bytetags", see
> https://github.com/floe/surface-2.0/blob/master/bytetag/bytetag.pdf ). What
> would be a sensible way to expose these to userspace, too? Add another
> MT_TOOL_TOKEN type?

You'd have to add one for each token here, but that may not be too bad, 
beyond adding a lot of #defines. The tool type is the value field, so we 
have 32 bits before we run out. 64 tokens won't make a dent there. Maybe 
use MT_TOKEN_MIN and MT_TOKEN_MAX to keep the defines in check, though 
I'd recommend considering more specific naming and lots of documentation 
to detail what the tokens stand for. And consider whether we want to use 
something overly specific, userspace won't be happy if we have thirty 
different vendor-specific token ranges.

Cheers,
   Peter

--
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
diff mbox

Patch

diff --git a/drivers/input/touchscreen/sur40.c b/drivers/input/touchscreen/sur40.c
index 12bdee9..fbd4010 100644
--- a/drivers/input/touchscreen/sur40.c
+++ b/drivers/input/touchscreen/sur40.c
@@ -309,6 +309,8 @@  static void sur40_report_blob(struct sur40_blob *blob, struct input_dev *input)
 	int slotnum = input_mt_get_slot_by_key(input, blob->blob_id);
 	if (slotnum < 0 || slotnum >= MAX_CONTACTS)
 		return;
+	if (blob->type != SUR40_TOUCH)
+		return;
 
 	input_mt_slot(input, slotnum);
 	input_mt_report_slot_state(input, MT_TOOL_FINGER, 1);