The tool ID on wacom tablets is what really defines the tool, so one can differ between say an Intuos Grip Pen, Art Pen or Classic Pen. They're all BTN_TOOL_PEN in the kernel driver.
Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> --- src/evdev-tablet.c | 8 ++++++++ src/evdev-tablet.h | 1 + src/libinput-private.h | 1 + src/libinput.c | 6 ++++++ src/libinput.h | 20 ++++++++++++++++++++ src/libinput.sym | 1 + 6 files changed, 37 insertions(+) diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c index 013038b..479d680 100644 --- a/src/evdev-tablet.c +++ b/src/evdev-tablet.c @@ -62,6 +62,11 @@ tablet_process_absolute(struct tablet_dispatch *tablet, set_bit(tablet->changed_axes, axis); tablet_set_status(tablet, TABLET_AXES_UPDATED); break; + /* tool_id is the identifier for the tool we can use in libwacom + * to identify it (if we have one anyway) */ + case ABS_MISC: + tablet->current_tool_id = e->value; + break; default: log_info(device->base.seat->libinput, "Unhandled ABS event code %#x\n", e->code); @@ -324,6 +329,7 @@ tablet_process_misc(struct tablet_dispatch *tablet, static struct libinput_tool * tablet_get_tool(struct tablet_dispatch *tablet, enum libinput_tool_type type, + uint32_t tool_id, uint32_t serial) { struct libinput_tool *tool = NULL, *t; @@ -362,6 +368,7 @@ tablet_get_tool(struct tablet_dispatch *tablet, *tool = (struct libinput_tool) { .type = type, .serial = serial, + .tool_id = tool_id, .refcount = 1, }; @@ -499,6 +506,7 @@ tablet_flush(struct tablet_dispatch *tablet, struct libinput_tool *tool = tablet_get_tool(tablet, tablet->current_tool_type, + tablet->current_tool_id, tablet->current_tool_serial); if (tablet_has_status(tablet, TABLET_TOOL_LEAVING_PROXIMITY)) { diff --git a/src/evdev-tablet.h b/src/evdev-tablet.h index eee6904..6226d63 100644 --- a/src/evdev-tablet.h +++ b/src/evdev-tablet.h @@ -59,6 +59,7 @@ struct tablet_dispatch { struct button_state prev_button_state; enum libinput_tool_type current_tool_type; + uint32_t current_tool_id; uint32_t current_tool_serial; }; diff --git a/src/libinput-private.h b/src/libinput-private.h index f6c4dcc..b2dc406 100644 --- a/src/libinput-private.h +++ b/src/libinput-private.h @@ -188,6 +188,7 @@ struct libinput_device { struct libinput_tool { struct list link; uint32_t serial; + uint32_t tool_id; enum libinput_tool_type type; unsigned char axis_caps[NCHARS(LIBINPUT_TABLET_AXIS_MAX + 1)]; int refcount; diff --git a/src/libinput.c b/src/libinput.c index 1abd163..b165c59 100644 --- a/src/libinput.c +++ b/src/libinput.c @@ -663,6 +663,12 @@ libinput_tool_get_type(struct libinput_tool *tool) } LIBINPUT_EXPORT uint32_t +libinput_tool_get_tool_id(struct libinput_tool *tool) +{ + return tool->tool_id; +} + +LIBINPUT_EXPORT uint32_t libinput_tool_get_serial(struct libinput_tool *tool) { return tool->serial; diff --git a/src/libinput.h b/src/libinput.h index 984e8e3..f746671 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -1193,6 +1193,8 @@ libinput_event_tablet_get_time(struct libinput_event_tablet *event); * * @param tool The libinput tool * @return The tool type for this tool object + * + * @see libinput_tool_get_tool_id */ enum libinput_tool_type libinput_tool_get_type(struct libinput_tool *tool); @@ -1200,6 +1202,24 @@ libinput_tool_get_type(struct libinput_tool *tool); /** * @ingroup event_tablet * + * Return the tool ID for a tool object. If nonzero, this number identifies + * the specific type of the tool with more precision than the type returned in + * libinput_tool_get_type(). Not all tablets support a tool ID. + * + * Tablets known to support tool IDs include the Wacom Intuos 3, 4, 5, Wacom + * Cintiq and Wacom Intuos Pro series. + * + * @param tool The libinput tool + * @return The tool ID for this tool object or 0 if none is provided + * + * @see libinput_tool_get_type + */ +uint32_t +libinput_tool_get_tool_id(struct libinput_tool *tool); + +/** + * @ingroup event_tablet + * * Increment the ref count of tool by one * * @param tool The tool to increment the ref count of diff --git a/src/libinput.sym b/src/libinput.sym index e4b76c6..dbd4d0f 100644 --- a/src/libinput.sym +++ b/src/libinput.sym @@ -153,6 +153,7 @@ LIBINPUT_0.12.0 { libinput_event_tablet_get_x_transformed; libinput_event_tablet_get_y_transformed; libinput_tool_get_serial; + libinput_tool_get_tool_id; libinput_tool_get_type; libinput_tool_get_user_data; libinput_tool_has_axis; -- 2.1.0 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel