[PATCH 09/15] Add four new motion filters
Peter Hutterer
peter.hutterer at who-t.net
Tue Jun 14 14:13:00 PDT 2011
On Tue, Jun 14, 2011 at 05:00:05PM +0100, Daniel Stone wrote:
> Hi,
>
> On Tue, Jun 14, 2011 at 03:22:25PM +1000, Peter Hutterer wrote:
> > On Thu, Jun 09, 2011 at 08:57:30PM +0100, Daniel Stone wrote:
> > > Attempt to decrease the possibility of errant motion as much as possible
> > > by adding three new configurable filters, disabled by default:
> > > - Synaptics Max Jerk: maximum change in acceleration before the
> > > packet is declared errant (xorg.conf MaxJerk)
> > > - Synaptics Max Accel: maximum acceleration the pointer can have
> > > before being declared errant (xorg.conf MaxAccel)
> > > - Synaptics Max Error: maximum error from a best-fit prediction of
> > > the next position before being declared errant (xorg.conf MaxError)
> > > - Synaptics Max Distance: maximum distance a finger can move in a
> > > single report before being declared errant (xorg.conf MaxDistance)
> > >
> >
> > woo! more configuration options! :)
>
> Yeah, I felt a bit bad about that.
>
> > > +/* FLOAT */
> > > +#define SYNAPTICS_PROP_MAX_DISTANCE "Synaptics Max Distance"
> > > +
> > > +/* FLOAT */
> > > +#define SYNAPTICS_PROP_MAX_JERK "Synaptics Max Jerk"
> > > +
> > > +/* FLOAT */
> > > +#define SYNAPTICS_PROP_MAX_ACCEL "Synaptics Max Accel"
> > > +
> > > +/* FLOAT */
> > > +#define SYNAPTICS_PROP_MAX_ERROR "Synaptics Max Error"
> >
> > any reason these 4 couldn't be accumulated? they are related enough to
> > justify it, imo.
> >
> > "Synaptics Acceleration Filters" or something more appropriate
>
> What, have a single sledgehammer on/off switch? I can definitely see the
> argument, but we're yet to find a useful algorithm that generates values
> useful on all hardware, which is partly due to not having tested on a
> massively broad range of devices.
sorry, I meant one property with 4 values in it rather than 4 different
properties. So the functionality stays the same in the driver.
Cheers,
Peter
>
> > > @@ -1801,6 +1806,33 @@ static void regress(SynapticsPrivate *priv, const struct SynapticsHwState *hw,
> > > double yb1n = 0, xb1n = 0, b1d = 0, xb1, yb1;
> > > double dista, distb, distc, vela, velb, velc, acca, accb, jerk;
> > >
> > > + if (pars->max_distance &&
> > for consistency with the checks a few lines below, this should state > 0 as well
>
> Fixed, thanks.
>
> > > + hypot(hw->x - HIST(0).x, hw->y - HIST(0).y) > pars->max_distance)
> > > + goto filtered;
> > > +
> > > + if (pars->max_accel > 0 || pars->max_jerk > 0) {
> > > + if (priv->count_packet_finger < 3) {
> > > + *dx = 0;
> > > + *dy = 0;
> > > + return;
> > > + }
> > > +
> >
> > for the poor buggers that may have to debug this one day, a comment on
> > what's actually done here would be awesome. I've spent too much time on
> > wikipedia's math sites lately, trying to figure out what a piece of code was
> > supposed to do.
>
> Ha. I've added some more comments now.
>
> Cheers,
> Daniel
More information about the xorg-devel
mailing list