All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pete Zaitcev <zaitcev@redhat.com>
To: Dmitry Torokhov <dtor@insightbb.com>
Cc: linux-kernel@vger.kernel.org,
	linux-input@atrey.karlin.mff.cuni.cz, zaitcev@redhat.com
Subject: Re: Fix sudden warps in mousedev
Date: Sun, 25 Mar 2007 11:19:30 -0700	[thread overview]
Message-ID: <20070325111930.f6428509.zaitcev@redhat.com> (raw)
In-Reply-To: <200703250134.03416.dtor@insightbb.com>

On Sun, 25 Mar 2007 01:34:02 -0400, Dmitry Torokhov <dtor@insightbb.com> wrote:

> > +                * Without this, a touchpad may report an unchanged position,
> > +                * then a sync. The input_event() eats the position report, but
> > +                * lets the sync through. We increment pkt_count and leave 
> > +                * a stale position in the ring. If a future reference to fx(2)
> > +                * hits the stale position, a large dx is reported, and the
> > +                * pointer warps across the screen.
> > +                */
> > +               dev = mousedev->handle.dev;
> > +               fx(0) = dev->abs[ABS_X];
> > +               fy(0) = dev->abs[ABS_Y];
> 
> I do not like input hanlders poking into input devices... Can't we just
> reset pkt_count at the beginning of the touch to get rid of stale data?

The pkt_count is zero at the moment of assignment above.

Please look at the included trace again:

> > Event: time 1174703243.305535, type 1 (Key), code 330 (Touch), value 1
> >           <---- touch!=0 now, we're on
> > Event: time 1174703243.305538, type 3 (Absolute), code 24 (Pressure), value 31
> > Event: time 1174703243.305541, -------------- Report Sync ------------
> >           <---- We increment the pkt_count, leaving value of 3687 in old_y
> > Event: time 1174703243.342452, type 3 (Absolute), code 0 (X), value 4747
> > Event: time 1174703243.342455, type 3 (Absolute), code 1 (Y), value 1988
> >           <----- Later to be fy(1), not used for warping purposes :-)
> > Event: time 1174703243.342459, -------------- Report Sync ------------
> > Event: time 1174703243.356225, type 3 (Absolute), code 0 (X), value 4749
> > Event: time 1174703243.356237, type 3 (Absolute), code 1 (Y), value 1987
> >           <----- warp here, by the difference of 3687 and 1987, plus
> >                  some small frac_dy value. Easily jumps half the screen.
> > Event: time 1174703243.356246, -------------- Report Sync ------------

The assignment happens at .305535. The pkt_count is zero, and fy(0) contains
stale data (ovewritten by the assignment). The touchpad reports a position
next with input_report_abs(). If the position were different, we'd receive
an event between .305535 and .305538 and it would be stored in fy(0).

However, if position is the same, as in this case, input_report eats it.
At .305541 we increment pkt_count. The fy(0) location becomes fy(1) at
this point. Without the assignment it contains the stale position.

I can explore alternatives, but for now using dev->abs[] seems to be most
expedient.

-- Pete

  reply	other threads:[~2007-03-25 18:21 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-24  7:16 Fix sudden warps in mousedev Pete Zaitcev
2007-03-24  7:16 ` Pete Zaitcev
2007-03-25  5:34 ` Dmitry Torokhov
2007-03-25 18:19   ` Pete Zaitcev [this message]
2007-03-26  3:19     ` Dmitry Torokhov
2007-03-26 19:17       ` Pete Zaitcev
2007-03-26 19:30         ` Dmitry Torokhov
2007-03-26 21:42           ` Pete Zaitcev
2007-03-27  1:14             ` Dmitry Torokhov
2007-03-27 15:14               ` Chuck Ebbert
2007-03-27 15:46                 ` Dmitry Torokhov
2007-03-27 16:04                   ` Chuck Ebbert
2007-03-27 16:19                     ` Dmitry Torokhov
2007-03-28 20:51                       ` Matt Keenan
2007-04-11 21:51               ` Peter Osterlund

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=20070325111930.f6428509.zaitcev@redhat.com \
    --to=zaitcev@redhat.com \
    --cc=dtor@insightbb.com \
    --cc=linux-input@atrey.karlin.mff.cuni.cz \
    --cc=linux-kernel@vger.kernel.org \
    /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.