tools: allow filter-switching in ptraccel-debug
authorPeter Hutterer <peter.hutterer@who-t.net>
Fri, 31 Jul 2015 02:29:23 +0000 (12:29 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 12 Aug 2015 04:06:00 +0000 (14:06 +1000)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ã…dahl <jadahl@gmail.com>
tools/ptraccel-debug.c

index 077da59d503749a6537d0886a4a2645e0bed776f..aa887fecf908231a2f7cbce499dd3d2044226916 100644 (file)
@@ -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)