summaryrefslogtreecommitdiff
path: root/tools/ptraccel-debug.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2015-07-31 12:29:23 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2015-08-12 14:06:00 +1000
commite1849b3e58a3ddcb1b8e288e4d9dc2ab89fac9cf (patch)
tree7e3dc195264289ab0fffebaab8e7c3c816b3f33f /tools/ptraccel-debug.c
parent4c1c572b19dec80b5d08125272f2f635ada2bd57 (diff)
downloadlibinput-e1849b3e58a3ddcb1b8e288e4d9dc2ab89fac9cf.tar.gz
tools: allow filter-switching in ptraccel-debug
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Jonas Ã…dahl <jadahl@gmail.com>
Diffstat (limited to 'tools/ptraccel-debug.c')
-rw-r--r--tools/ptraccel-debug.c43
1 files changed, 36 insertions, 7 deletions
diff --git a/tools/ptraccel-debug.c b/tools/ptraccel-debug.c
index 077da59d..aa887fec 100644
--- a/tools/ptraccel-debug.c
+++ b/tools/ptraccel-debug.c
@@ -138,7 +138,7 @@ print_ptraccel_sequence(struct motion_filter *filter,
}
static void
-print_accel_func(struct motion_filter *filter)
+print_accel_func(struct motion_filter *filter, accel_profile_func_t profile)
{
double vel;
@@ -148,10 +148,7 @@ print_accel_func(struct motion_filter *filter)
printf("# set style data lines\n");
printf("# plot \"gnuplot.data\" using 1:2\n");
for (vel = 0.0; vel < 0.003; vel += 0.0000001) {
- double result = pointer_accel_profile_linear(filter,
- NULL,
- vel,
- 0 /* time */);
+ double result = profile(filter, NULL, vel, 0 /* time */);
printf("%.8f\t%.4f\n", vel, result);
}
}
@@ -171,6 +168,12 @@ usage(void)
"--steps=<double> ... in motion and delta modes only. Increase dx by step each round\n"
"--speed=<double> ... accel speed [-1, 1], default 0\n"
"--dpi=<int> ... device resolution in DPI (default: 1000)\n"
+ "--filter=<linear|low-dpi|touchpad|x230|trackpoint> \n"
+ " linear ... the default motion filter\n"
+ " low-dpi ... low-dpi filter, use --dpi with this argument\n"
+ " touchpad ... the touchpad motion filter\n"
+ " x230 ... custom filter for the Lenovo x230 touchpad\n"
+ " trackpoint... trackpoint motion filter\n"
"\n"
"If extra arguments are present and mode is not given, mode defaults to 'sequence'\n"
"and the arguments are interpreted as sequence of delta x coordinates\n"
@@ -195,6 +198,8 @@ main(int argc, char **argv)
double custom_deltas[1024];
double speed = 0.0;
int dpi = 1000;
+ const char *filter_type = "linear";
+ accel_profile_func_t profile = NULL;
enum {
OPT_MODE = 1,
@@ -203,6 +208,7 @@ main(int argc, char **argv)
OPT_STEP,
OPT_SPEED,
OPT_DPI,
+ OPT_FILTER,
};
while (1) {
@@ -215,6 +221,7 @@ main(int argc, char **argv)
{"step", 1, 0, OPT_STEP },
{"speed", 1, 0, OPT_SPEED },
{"dpi", 1, 0, OPT_DPI },
+ {"filter", 1, 0, OPT_FILTER},
{0, 0, 0, 0}
};
@@ -265,6 +272,9 @@ main(int argc, char **argv)
case OPT_DPI:
dpi = strtod(optarg, NULL);
break;
+ case OPT_FILTER:
+ filter_type = optarg;
+ break;
default:
usage();
exit(1);
@@ -272,7 +282,26 @@ main(int argc, char **argv)
}
}
- filter = create_pointer_accelerator_filter_linear(dpi);
+ if (streq(filter_type, "linear")) {
+ filter = create_pointer_accelerator_filter_linear(dpi);
+ profile = pointer_accel_profile_linear;
+ } else if (streq(filter_type, "low-dpi")) {
+ filter = create_pointer_accelerator_filter_linear_low_dpi(dpi);
+ profile = pointer_accel_profile_linear_low_dpi;
+ } else if (streq(filter_type, "touchpad")) {
+ filter = create_pointer_accelerator_filter_touchpad(dpi);
+ profile = touchpad_accel_profile_linear;
+ } else if (streq(filter_type, "x230")) {
+ filter = create_pointer_accelerator_filter_lenovo_x230(dpi);
+ profile = touchpad_lenovo_x230_accel_profile;
+ } else if (streq(filter_type, "trackpoint")) {
+ filter = create_pointer_accelerator_filter_trackpoint(dpi);
+ profile = trackpoint_accel_profile;
+ } else {
+ fprintf(stderr, "Invalid filter type %s\n", filter_type);
+ return 1;
+ }
+
assert(filter != NULL);
filter_set_speed(filter, speed);
@@ -296,7 +325,7 @@ main(int argc, char **argv)
}
if (print_accel)
- print_accel_func(filter);
+ print_accel_func(filter, profile);
else if (print_delta)
print_ptraccel_deltas(filter, step);
else if (print_motion)