Skip to content

Commit

Permalink
tools: move printing device quirks to the shared tools lib
Browse files Browse the repository at this point in the history
This way we can re-use this from libinput-record instead of having to
duplicate all this. Since the two tools use different printfs, just make the
actual printing a simple callback.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
  • Loading branch information
whot committed Jun 26, 2018
1 parent 7623336 commit 07e93f0
Show file tree
Hide file tree
Showing 4 changed files with 151 additions and 129 deletions.
2 changes: 1 addition & 1 deletion meson.build
Expand Up @@ -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
Expand Down
136 changes: 8 additions & 128 deletions tools/libinput-list-quirks.c
Expand Up @@ -31,6 +31,7 @@

#include "libinput-util.h"
#include "quirks.h"
#include "shared.h"

static bool verbose = false;

Expand Down Expand Up @@ -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)
{
Expand All @@ -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)
{
Expand Down Expand Up @@ -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();
Expand Down
135 changes: 135 additions & 0 deletions tools/shared.c
Expand Up @@ -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);
}
7 changes: 7 additions & 0 deletions tools/shared.h
Expand Up @@ -26,6 +26,7 @@

#include <stdbool.h>

#include <quirks.h>
#include <libinput.h>

enum configuration_options {
Expand Down Expand Up @@ -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

0 comments on commit 07e93f0

Please sign in to comment.