diff --git a/meson.build b/meson.build index e85bf8330..d01c4af90 100644 --- a/meson.build +++ b/meson.build @@ -474,7 +474,7 @@ configure_file(input : 'tools/libinput-debug-events.man', libinput_list_quirks_sources = [ 'tools/libinput-list-quirks.c' ] libinput_list_quirks = executable('libinput-list-quirks', libinput_list_quirks_sources, - dependencies : [dep_libquirks, dep_libinput], + dependencies : [dep_libquirks, dep_tools_shared, dep_libinput], include_directories : [includes_src, includes_include], install_dir : libinput_tool_path, install : true diff --git a/tools/libinput-list-quirks.c b/tools/libinput-list-quirks.c index 533c4f3ac..050b505b4 100644 --- a/tools/libinput-list-quirks.c +++ b/tools/libinput-list-quirks.c @@ -31,6 +31,7 @@ #include "libinput-util.h" #include "quirks.h" +#include "shared.h" static bool verbose = false; @@ -69,133 +70,6 @@ log_handler(struct libinput *this_is_null, vfprintf(out, buf, args); } -static void -list_device_quirks(struct quirks_context *ctx, struct udev_device *device) -{ - struct quirks *quirks; - enum quirk qlist[] = { - QUIRK_MODEL_ALPS_TOUCHPAD, - QUIRK_MODEL_APPLE_TOUCHPAD, - QUIRK_MODEL_APPLE_MAGICMOUSE, - QUIRK_MODEL_TABLET_NO_TILT, - QUIRK_MODEL_APPLE_TOUCHPAD_ONEBUTTON, - QUIRK_MODEL_TOUCHPAD_VISIBLE_MARKER, - QUIRK_MODEL_CYBORG_RAT, - QUIRK_MODEL_CHROMEBOOK, - QUIRK_MODEL_HP6910_TOUCHPAD, - QUIRK_MODEL_HP8510_TOUCHPAD, - QUIRK_MODEL_HP_PAVILION_DM4_TOUCHPAD, - QUIRK_MODEL_HP_STREAM11_TOUCHPAD, - QUIRK_MODEL_HP_ZBOOK_STUDIO_G3, - QUIRK_MODEL_TABLET_NO_PROXIMITY_OUT, - QUIRK_MODEL_LENOVO_SCROLLPOINT, - QUIRK_MODEL_LENOVO_X230, - QUIRK_MODEL_LENOVO_T450_TOUCHPAD, - QUIRK_MODEL_TABLET_MODE_NO_SUSPEND, - QUIRK_MODEL_LENOVO_CARBON_X1_6TH, - QUIRK_MODEL_TRACKBALL, - QUIRK_MODEL_LOGITECH_MARBLE_MOUSE, - QUIRK_MODEL_BOUNCING_KEYS, - QUIRK_MODEL_SYNAPTICS_SERIAL_TOUCHPAD, - QUIRK_MODEL_SYSTEM76_BONOBO, - QUIRK_MODEL_CLEVO_W740SU, - QUIRK_MODEL_SYSTEM76_GALAGO, - QUIRK_MODEL_SYSTEM76_KUDU, - QUIRK_MODEL_WACOM_TOUCHPAD, - - - QUIRK_ATTR_SIZE_HINT, - QUIRK_ATTR_TOUCH_SIZE_RANGE, - QUIRK_ATTR_PALM_SIZE_THRESHOLD, - QUIRK_ATTR_LID_SWITCH_RELIABILITY, - QUIRK_ATTR_KEYBOARD_INTEGRATION, - QUIRK_ATTR_TPKBCOMBO_LAYOUT, - QUIRK_ATTR_PRESSURE_RANGE, - QUIRK_ATTR_PALM_PRESSURE_THRESHOLD, - QUIRK_ATTR_RESOLUTION_HINT, - QUIRK_ATTR_TRACKPOINT_RANGE, - QUIRK_ATTR_THUMB_PRESSURE_THRESHOLD, - }; - enum quirk *q; - - quirks = quirks_fetch_for_device(ctx, device); - if (!quirks) { - fprintf(stderr, "Device has no quirks defined\n"); - return; - } - - ARRAY_FOR_EACH(qlist, q) { - const char *name; - struct quirk_dimensions dim; - struct quirk_range r; - uint32_t v; - char *s; - - if (!quirks_has_quirk(quirks, *q)) - continue; - - name = quirk_get_name(*q); - - switch (*q) { - case QUIRK_MODEL_ALPS_TOUCHPAD: - case QUIRK_MODEL_APPLE_TOUCHPAD: - case QUIRK_MODEL_APPLE_MAGICMOUSE: - case QUIRK_MODEL_TABLET_NO_TILT: - case QUIRK_MODEL_APPLE_TOUCHPAD_ONEBUTTON: - case QUIRK_MODEL_TOUCHPAD_VISIBLE_MARKER: - case QUIRK_MODEL_CYBORG_RAT: - case QUIRK_MODEL_CHROMEBOOK: - case QUIRK_MODEL_HP6910_TOUCHPAD: - case QUIRK_MODEL_HP8510_TOUCHPAD: - case QUIRK_MODEL_HP_PAVILION_DM4_TOUCHPAD: - case QUIRK_MODEL_HP_STREAM11_TOUCHPAD: - case QUIRK_MODEL_HP_ZBOOK_STUDIO_G3: - case QUIRK_MODEL_TABLET_NO_PROXIMITY_OUT: - case QUIRK_MODEL_LENOVO_SCROLLPOINT: - case QUIRK_MODEL_LENOVO_X230: - case QUIRK_MODEL_LENOVO_T450_TOUCHPAD: - case QUIRK_MODEL_TABLET_MODE_NO_SUSPEND: - case QUIRK_MODEL_LENOVO_CARBON_X1_6TH: - case QUIRK_MODEL_TRACKBALL: - case QUIRK_MODEL_LOGITECH_MARBLE_MOUSE: - case QUIRK_MODEL_BOUNCING_KEYS: - case QUIRK_MODEL_SYNAPTICS_SERIAL_TOUCHPAD: - case QUIRK_MODEL_SYSTEM76_BONOBO: - case QUIRK_MODEL_CLEVO_W740SU: - case QUIRK_MODEL_SYSTEM76_GALAGO: - case QUIRK_MODEL_SYSTEM76_KUDU: - case QUIRK_MODEL_WACOM_TOUCHPAD: - printf("%s=1\n", name); - break; - case QUIRK_ATTR_SIZE_HINT: - case QUIRK_ATTR_RESOLUTION_HINT: - quirks_get_dimensions(quirks, *q, &dim); - printf("%s=%ldx%ld\n", name, dim.x, dim.y); - break; - case QUIRK_ATTR_TOUCH_SIZE_RANGE: - case QUIRK_ATTR_PRESSURE_RANGE: - quirks_get_range(quirks, *q, &r); - printf("%s=%d:%d\n", name, r.upper, r.lower); - break; - case QUIRK_ATTR_PALM_SIZE_THRESHOLD: - case QUIRK_ATTR_PALM_PRESSURE_THRESHOLD: - case QUIRK_ATTR_TRACKPOINT_RANGE: - case QUIRK_ATTR_THUMB_PRESSURE_THRESHOLD: - quirks_get_uint32(quirks, *q, &v); - printf("%s=%u\n", name, v); - break; - case QUIRK_ATTR_LID_SWITCH_RELIABILITY: - case QUIRK_ATTR_KEYBOARD_INTEGRATION: - case QUIRK_ATTR_TPKBCOMBO_LAYOUT: - quirks_get_string(quirks, *q, &s); - printf("%s=%s\n", name, s); - break; - } - } - - quirks_unref(quirks); -} - static void usage(void) { @@ -207,6 +81,12 @@ usage(void) " Validate the database\n"); } +static void +simple_printf(void *userdata, const char *val) +{ + printf("%s\n", val); +} + int main(int argc, char **argv) { @@ -305,7 +185,7 @@ main(int argc, char **argv) device = udev_device_new_from_devnum(udev, 'c', st.st_rdev); } if (device) { - list_device_quirks(quirks, device); + tools_list_device_quirks(quirks, device, simple_printf, NULL); rc = 0; } else { usage(); diff --git a/tools/shared.c b/tools/shared.c index d3fb62942..f2ed1fd09 100644 --- a/tools/shared.c +++ b/tools/shared.c @@ -527,3 +527,138 @@ tools_exec_command(const char *prefix, int real_argc, char **real_argv) return EXIT_FAILURE; } + +void +tools_list_device_quirks(struct quirks_context *ctx, + struct udev_device *device, + void (*callback)(void *data, const char *str), + void *userdata) +{ + char buf[256]; + + struct quirks *quirks; + enum quirk qlist[] = { + QUIRK_MODEL_ALPS_TOUCHPAD, + QUIRK_MODEL_APPLE_TOUCHPAD, + QUIRK_MODEL_APPLE_MAGICMOUSE, + QUIRK_MODEL_TABLET_NO_TILT, + QUIRK_MODEL_APPLE_TOUCHPAD_ONEBUTTON, + QUIRK_MODEL_TOUCHPAD_VISIBLE_MARKER, + QUIRK_MODEL_CYBORG_RAT, + QUIRK_MODEL_CHROMEBOOK, + QUIRK_MODEL_HP6910_TOUCHPAD, + QUIRK_MODEL_HP8510_TOUCHPAD, + QUIRK_MODEL_HP_PAVILION_DM4_TOUCHPAD, + QUIRK_MODEL_HP_STREAM11_TOUCHPAD, + QUIRK_MODEL_HP_ZBOOK_STUDIO_G3, + QUIRK_MODEL_TABLET_NO_PROXIMITY_OUT, + QUIRK_MODEL_LENOVO_SCROLLPOINT, + QUIRK_MODEL_LENOVO_X230, + QUIRK_MODEL_LENOVO_T450_TOUCHPAD, + QUIRK_MODEL_TABLET_MODE_NO_SUSPEND, + QUIRK_MODEL_LENOVO_CARBON_X1_6TH, + QUIRK_MODEL_TRACKBALL, + QUIRK_MODEL_LOGITECH_MARBLE_MOUSE, + QUIRK_MODEL_BOUNCING_KEYS, + QUIRK_MODEL_SYNAPTICS_SERIAL_TOUCHPAD, + QUIRK_MODEL_SYSTEM76_BONOBO, + QUIRK_MODEL_CLEVO_W740SU, + QUIRK_MODEL_SYSTEM76_GALAGO, + QUIRK_MODEL_SYSTEM76_KUDU, + QUIRK_MODEL_WACOM_TOUCHPAD, + + + QUIRK_ATTR_SIZE_HINT, + QUIRK_ATTR_TOUCH_SIZE_RANGE, + QUIRK_ATTR_PALM_SIZE_THRESHOLD, + QUIRK_ATTR_LID_SWITCH_RELIABILITY, + QUIRK_ATTR_KEYBOARD_INTEGRATION, + QUIRK_ATTR_TPKBCOMBO_LAYOUT, + QUIRK_ATTR_PRESSURE_RANGE, + QUIRK_ATTR_PALM_PRESSURE_THRESHOLD, + QUIRK_ATTR_RESOLUTION_HINT, + QUIRK_ATTR_TRACKPOINT_RANGE, + QUIRK_ATTR_THUMB_PRESSURE_THRESHOLD, + }; + enum quirk *q; + + quirks = quirks_fetch_for_device(ctx, device); + if (!quirks) + return; + + ARRAY_FOR_EACH(qlist, q) { + const char *name; + struct quirk_dimensions dim; + struct quirk_range r; + uint32_t v; + char *s; + + if (!quirks_has_quirk(quirks, *q)) + continue; + + name = quirk_get_name(*q); + + switch (*q) { + case QUIRK_MODEL_ALPS_TOUCHPAD: + case QUIRK_MODEL_APPLE_TOUCHPAD: + case QUIRK_MODEL_APPLE_MAGICMOUSE: + case QUIRK_MODEL_TABLET_NO_TILT: + case QUIRK_MODEL_APPLE_TOUCHPAD_ONEBUTTON: + case QUIRK_MODEL_TOUCHPAD_VISIBLE_MARKER: + case QUIRK_MODEL_CYBORG_RAT: + case QUIRK_MODEL_CHROMEBOOK: + case QUIRK_MODEL_HP6910_TOUCHPAD: + case QUIRK_MODEL_HP8510_TOUCHPAD: + case QUIRK_MODEL_HP_PAVILION_DM4_TOUCHPAD: + case QUIRK_MODEL_HP_STREAM11_TOUCHPAD: + case QUIRK_MODEL_HP_ZBOOK_STUDIO_G3: + case QUIRK_MODEL_TABLET_NO_PROXIMITY_OUT: + case QUIRK_MODEL_LENOVO_SCROLLPOINT: + case QUIRK_MODEL_LENOVO_X230: + case QUIRK_MODEL_LENOVO_T450_TOUCHPAD: + case QUIRK_MODEL_TABLET_MODE_NO_SUSPEND: + case QUIRK_MODEL_LENOVO_CARBON_X1_6TH: + case QUIRK_MODEL_TRACKBALL: + case QUIRK_MODEL_LOGITECH_MARBLE_MOUSE: + case QUIRK_MODEL_BOUNCING_KEYS: + case QUIRK_MODEL_SYNAPTICS_SERIAL_TOUCHPAD: + case QUIRK_MODEL_SYSTEM76_BONOBO: + case QUIRK_MODEL_CLEVO_W740SU: + case QUIRK_MODEL_SYSTEM76_GALAGO: + case QUIRK_MODEL_SYSTEM76_KUDU: + case QUIRK_MODEL_WACOM_TOUCHPAD: + snprintf(buf, sizeof(buf), "%s=1", name); + callback(userdata, buf); + break; + case QUIRK_ATTR_SIZE_HINT: + case QUIRK_ATTR_RESOLUTION_HINT: + quirks_get_dimensions(quirks, *q, &dim); + snprintf(buf, sizeof(buf), "%s=%ldx%ld", name, dim.x, dim.y); + callback(userdata, buf); + break; + case QUIRK_ATTR_TOUCH_SIZE_RANGE: + case QUIRK_ATTR_PRESSURE_RANGE: + quirks_get_range(quirks, *q, &r); + snprintf(buf, sizeof(buf), "%s=%d:%d", name, r.upper, r.lower); + callback(userdata, buf); + break; + case QUIRK_ATTR_PALM_SIZE_THRESHOLD: + case QUIRK_ATTR_PALM_PRESSURE_THRESHOLD: + case QUIRK_ATTR_TRACKPOINT_RANGE: + case QUIRK_ATTR_THUMB_PRESSURE_THRESHOLD: + quirks_get_uint32(quirks, *q, &v); + snprintf(buf, sizeof(buf), "%s=%u", name, v); + callback(userdata, buf); + break; + case QUIRK_ATTR_LID_SWITCH_RELIABILITY: + case QUIRK_ATTR_KEYBOARD_INTEGRATION: + case QUIRK_ATTR_TPKBCOMBO_LAYOUT: + quirks_get_string(quirks, *q, &s); + snprintf(buf, sizeof(buf), "%s=%s", name, s); + callback(userdata, buf); + break; + } + } + + quirks_unref(quirks); +} diff --git a/tools/shared.h b/tools/shared.h index 0a9c1e645..e30bc39ff 100644 --- a/tools/shared.h +++ b/tools/shared.h @@ -26,6 +26,7 @@ #include +#include #include enum configuration_options { @@ -112,4 +113,10 @@ int tools_exec_command(const char *prefix, int argc, char **argv); bool find_touchpad_device(char *path, size_t path_len); bool is_touchpad_device(const char *devnode); +void +tools_list_device_quirks(struct quirks_context *ctx, + struct udev_device *device, + void (*callback)(void *userdata, const char *str), + void *userdata); + #endif