All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Henrik Rydberg" <rydberg@euromail.se>
To: Daniel Kurtz <djkurtz@chromium.org>
Cc: Chung-yih Wang <cywang@chromium.org>,
	Alessandro Rubini <rubini@ipvvis.unipv.it>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] CHROMIUM: Input: synaptics - filter out the events with low z values
Date: Wed, 22 Feb 2012 16:24:25 +0100	[thread overview]
Message-ID: <20120222152425.GA29436@polaris.bitmath.org> (raw)
In-Reply-To: <CAGS+omB0GCQHOjrb_T6h7DzHrH2sp4Xqb5av6JC-ttJ8HZ5BcQ@mail.gmail.com>

> > I see the problem. However, ignoring it will just move the problem
> > forward to another bug report, will it not?  Hysteresis is a slam dunk
> > here.  In addition, since the low-pressure state is bound to be
> > transitional (soon to be followed by a real num_fingers==1 package),
> > simply skipping such packages might be a better option.
> 
> In practice, we don't actually see the profile sensor pad sending one
> low-z finger, and one high-z finger.  In the case where one finger is
> solidly on the pad, and another finger is hovering, lifting, or
> alighting, the pad sends 2 high-z fingers, with one of them having a
> completely wrong x or y coordinate.

Urgh.

> The two reported z-values are
> nearly, but not exactly, identical.  I can't think of good fix for
> this, other than adding finger tracking and filtering out via
> 'moved-too-far-too-fast', where possible, and I'd prefer that this be
> handled in userspace.

It sounds like the z value in the second packet carries zero
information. If that were true, the fact that the patch is effective
suggests the semi-mt slot reporting could follow BTN_TOUCH, more or
less.  In doing so, you would also obtain hysteresis automatically.

> The 1-low-z && 1-high-z case that we are
> discussing here isn't actually ever triggered; either both fingers are
> high-z, or neither are.

I suspect it depends a bit on the values of low-z and hi-z,
respectively? Otherwise, there really is no information in that extra
packet.

> The real usefulness of this patch is filtering out the 1-low-z-finger
> and 2-low-z fingers cases.
> 
> As for the hypothetical 1-finger-hi, 1-finger-low case, which I asked
> Chung-yih to add because it seemed like a good idea in theory...
> 
> Yes, I think you have a good point.  Thanks to evdev's stateful
> nature, simply skipping the (1-strong,1-weak) packet might actually
> work better than forcing num_fingers == 0.
> 
> For cases where a second finger is temporarily reporting low-z because
> it is arriving or leaving, evdev would just lock the (1 or 2 initial)
> fingers in their current position until the transition is over, and
> then start reporting the new number of fingers at their new positions.
> 
> For cases where there is one high-z finger, and a hovering thumb or
> palm triggers 2-finger reporting temporarily (without ever going above
> the threshold), the original finger will get frozen in its current
> position until the hovering finger is no longer detected, and then
> snap to its new position.  This might cause strange sudden jumps, but
> that seems unavoidable.

A lot of things seem unavoidable with this hardware. :-)

> I'm not sure hysteresis is a "slam dunk"...  in fact, I don't see how
> it would help much.  But, it is hard to argue against adding the
> functionality, since the hysteresis window can be made arbitrarily
> small.  Perhaps if you are inclined, you can elaborate on why you
> think it is important.

The most striking effect is the ability to better retain a
drag. Although the statement was made in light of possible
(1-strong,1-weak) packets, it should help in the 2-weak case too.

Thanks,
Henrik
--
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

WARNING: multiple messages have this Message-ID (diff)
From: "Henrik Rydberg" <rydberg@euromail.se>
To: Daniel Kurtz <djkurtz@chromium.org>
Cc: Chung-yih Wang <cywang@chromium.org>,
	Alessandro Rubini <rubini@cvml.unipv.it>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] CHROMIUM: Input: synaptics - filter out the events with low z values
Date: Wed, 22 Feb 2012 16:24:25 +0100	[thread overview]
Message-ID: <20120222152425.GA29436@polaris.bitmath.org> (raw)
In-Reply-To: <CAGS+omB0GCQHOjrb_T6h7DzHrH2sp4Xqb5av6JC-ttJ8HZ5BcQ@mail.gmail.com>

> > I see the problem. However, ignoring it will just move the problem
> > forward to another bug report, will it not?  Hysteresis is a slam dunk
> > here.  In addition, since the low-pressure state is bound to be
> > transitional (soon to be followed by a real num_fingers==1 package),
> > simply skipping such packages might be a better option.
> 
> In practice, we don't actually see the profile sensor pad sending one
> low-z finger, and one high-z finger.  In the case where one finger is
> solidly on the pad, and another finger is hovering, lifting, or
> alighting, the pad sends 2 high-z fingers, with one of them having a
> completely wrong x or y coordinate.

Urgh.

> The two reported z-values are
> nearly, but not exactly, identical.  I can't think of good fix for
> this, other than adding finger tracking and filtering out via
> 'moved-too-far-too-fast', where possible, and I'd prefer that this be
> handled in userspace.

It sounds like the z value in the second packet carries zero
information. If that were true, the fact that the patch is effective
suggests the semi-mt slot reporting could follow BTN_TOUCH, more or
less.  In doing so, you would also obtain hysteresis automatically.

> The 1-low-z && 1-high-z case that we are
> discussing here isn't actually ever triggered; either both fingers are
> high-z, or neither are.

I suspect it depends a bit on the values of low-z and hi-z,
respectively? Otherwise, there really is no information in that extra
packet.

> The real usefulness of this patch is filtering out the 1-low-z-finger
> and 2-low-z fingers cases.
> 
> As for the hypothetical 1-finger-hi, 1-finger-low case, which I asked
> Chung-yih to add because it seemed like a good idea in theory...
> 
> Yes, I think you have a good point.  Thanks to evdev's stateful
> nature, simply skipping the (1-strong,1-weak) packet might actually
> work better than forcing num_fingers == 0.
> 
> For cases where a second finger is temporarily reporting low-z because
> it is arriving or leaving, evdev would just lock the (1 or 2 initial)
> fingers in their current position until the transition is over, and
> then start reporting the new number of fingers at their new positions.
> 
> For cases where there is one high-z finger, and a hovering thumb or
> palm triggers 2-finger reporting temporarily (without ever going above
> the threshold), the original finger will get frozen in its current
> position until the hovering finger is no longer detected, and then
> snap to its new position.  This might cause strange sudden jumps, but
> that seems unavoidable.

A lot of things seem unavoidable with this hardware. :-)

> I'm not sure hysteresis is a "slam dunk"...  in fact, I don't see how
> it would help much.  But, it is hard to argue against adding the
> functionality, since the hysteresis window can be made arbitrarily
> small.  Perhaps if you are inclined, you can elaborate on why you
> think it is important.

The most striking effect is the ability to better retain a
drag. Although the statement was made in light of possible
(1-strong,1-weak) packets, it should help in the 2-weak case too.

Thanks,
Henrik

  reply	other threads:[~2012-02-22 15:24 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-22  7:41 [PATCH] CHROMIUM: Input: synaptics - filter out the events with low z values Chung-yih Wang
2012-02-22  7:41 ` Chung-yih Wang
2012-02-22  8:38 ` Henrik Rydberg
2012-02-22  8:38   ` Henrik Rydberg
2012-02-22 10:26   ` Daniel Kurtz
2012-02-22 10:26     ` Daniel Kurtz
2012-02-22 11:04     ` Henrik Rydberg
2012-02-22 11:04       ` Henrik Rydberg
2012-02-22 13:12       ` Daniel Kurtz
2012-02-22 13:12         ` Daniel Kurtz
2012-02-22 15:24         ` Henrik Rydberg [this message]
2012-02-22 15:24           ` Henrik Rydberg
2012-02-24  8:27           ` Dmitry Torokhov
2012-02-24  8:27             ` Dmitry Torokhov
2012-02-24  9:08             ` Henrik Rydberg
2012-02-24  9:08               ` Henrik Rydberg
2012-02-24  9:14               ` Dmitry Torokhov
2012-02-24  9:14                 ` Dmitry Torokhov
2012-02-24  9:16                 ` Dmitry Torokhov
2012-02-24  9:16                   ` Dmitry Torokhov
2012-02-24  9:23                   ` Henrik Rydberg
2012-02-24  9:23                     ` Henrik Rydberg
  -- strict thread matches above, loose matches on Subject: below --
2012-02-21 15:07 Chung-yih Wang
2012-02-21 15:07 ` Chung-yih Wang
2012-02-21 16:35 ` Daniel Kurtz
2012-02-21 16:35   ` Daniel Kurtz

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=20120222152425.GA29436@polaris.bitmath.org \
    --to=rydberg@euromail.se \
    --cc=cywang@chromium.org \
    --cc=djkurtz@chromium.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rubini@ipvvis.unipv.it \
    /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.