[PATCH libinput] tablet: add hwdb entries to ignore Wacom Cintiq offsets

Hans de Goede hdegoede at redhat.com
Tue Feb 16 08:28:38 UTC 2016


Hi,

On 16-02-16 06:47, Peter Hutterer wrote:
> Wacom Cintiqs and some DTK/DTU devices have a sensor larger than the
> underlying display. Clamp any data outside the screen area to the screen area.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
>   src/evdev-tablet.c                     | 27 +++++++++++++++++--------
>   src/evdev.c                            |  1 +
>   src/evdev.h                            |  1 +
>   test/tablet.c                          |  8 ++++----
>   udev/90-libinput-model-quirks.hwdb     | 36 ++++++++++++++++++++++++++++++++++
>   udev/90-libinput-model-quirks.rules.in |  4 ++++
>   6 files changed, 65 insertions(+), 12 deletions(-)
>
> diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c
> index 1e5c2cd..50ecf25 100644
> --- a/src/evdev-tablet.c
> +++ b/src/evdev-tablet.c
> @@ -244,9 +244,9 @@ adjust_tilt(const struct input_absinfo *absinfo)
>   }
>
>   static inline int32_t
> -invert_axis(const struct input_absinfo *absinfo)
> +invert_axis(const struct input_absinfo *absinfo, int value)
>   {
> -	return absinfo->maximum - (absinfo->value - absinfo->minimum);
> +	return absinfo->maximum - (value - absinfo->minimum);
>   }
>
>   static void
> @@ -292,6 +292,18 @@ normalize_wheel(struct tablet_dispatch *tablet,
>   	return value * device->scroll.wheel_click_angle;
>   }
>
> +static inline int
> +tablet_get_ranged_value(struct evdev_device *device,
> +			const struct input_absinfo *abs)
> +{
> +	int value = abs->value;
> +
> +	if (device->model_flags & EVDEV_MODEL_WACOM_SENSOR_OFFSET)
> +		value = max(min(value, abs->maximum), abs->minimum);
> +
> +	return value;
> +}
> +
>   static inline void
>   tablet_handle_xy(struct tablet_dispatch *tablet,
>   		 struct evdev_device *device,
> @@ -305,26 +317,25 @@ tablet_handle_xy(struct tablet_dispatch *tablet,
>
>   	if (bit_is_set(tablet->changed_axes, LIBINPUT_TABLET_TOOL_AXIS_X)) {
>   		absinfo = libevdev_get_abs_info(device->evdev, ABS_X);
> +		value = tablet_get_ranged_value(device, absinfo);
>
>   		if (device->left_handed.enabled)
> -			value = invert_axis(absinfo);
> -		else
> -			value = absinfo->value;
> +			value = invert_axis(absinfo, value);
>
>   		if (!tablet_has_status(tablet,
>   				       TABLET_TOOL_ENTERING_PROXIMITY))
>   			delta.x = value - tablet->axes.point.x;
>   		tablet->axes.point.x = value;
> +
>   	}
>   	point.x = tablet->axes.point.x;

This seems like an extra empty line accidentally got added. Otherwise this
patch looks good to me:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans


>
>   	if (bit_is_set(tablet->changed_axes, LIBINPUT_TABLET_TOOL_AXIS_Y)) {
>   		absinfo = libevdev_get_abs_info(device->evdev, ABS_Y);
> +		value = tablet_get_ranged_value(device, absinfo);
>
>   		if (device->left_handed.enabled)
> -			value = invert_axis(absinfo);
> -		else
> -			value = absinfo->value;
> +			value = invert_axis(absinfo, value);
>
>   		if (!tablet_has_status(tablet,
>   				       TABLET_TOOL_ENTERING_PROXIMITY))
> diff --git a/src/evdev.c b/src/evdev.c
> index 51768fe..ccfd7e4 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -1680,6 +1680,7 @@ evdev_read_model_flags(struct evdev_device *device)
>   		{ "LIBINPUT_MODEL_CYBORG_RAT", EVDEV_MODEL_CYBORG_RAT },
>   		{ "LIBINPUT_MODEL_CYAPA", EVDEV_MODEL_CYAPA },
>   		{ "LIBINPUT_MODEL_ALPS_RUSHMORE", EVDEV_MODEL_ALPS_RUSHMORE },
> +		{ "LIBINPUT_MODEL_WACOM_SENSOR_OFFSET", EVDEV_MODEL_WACOM_SENSOR_OFFSET },
>   		{ NULL, EVDEV_MODEL_DEFAULT },
>   	};
>   	const struct model_map *m = model_map;
> diff --git a/src/evdev.h b/src/evdev.h
> index 482712b..80f1606 100644
> --- a/src/evdev.h
> +++ b/src/evdev.h
> @@ -113,6 +113,7 @@ enum evdev_device_model {
>   	EVDEV_MODEL_CYBORG_RAT = (1 << 14),
>   	EVDEV_MODEL_CYAPA = (1 << 15),
>   	EVDEV_MODEL_ALPS_RUSHMORE = (1 << 16),
> +	EVDEV_MODEL_WACOM_SENSOR_OFFSET = (1 << 17),
>   };
>
>   struct mt_slot {
> diff --git a/test/tablet.c b/test/tablet.c
> index c5dc892..b1f7160 100644
> --- a/test/tablet.c
> +++ b/test/tablet.c
> @@ -1682,12 +1682,12 @@ START_TEST(motion_outside_bounds)
>   	tablet_event = litest_is_tablet_event(event,
>   					      LIBINPUT_EVENT_TABLET_TOOL_AXIS);
>   	val = libinput_event_tablet_tool_get_x(tablet_event);
> -	ck_assert_double_lt(val, 0.0);
> +	ck_assert_double_eq(val, 0.0);
>   	val = libinput_event_tablet_tool_get_y(tablet_event);
>   	ck_assert_double_gt(val, 0.0);
>
>   	val = libinput_event_tablet_tool_get_x_transformed(tablet_event, 100);
> -	ck_assert_double_lt(val, 0.0);
> +	ck_assert_double_eq(val, 0.0);
>
>   	libinput_event_destroy(event);
>
> @@ -1703,10 +1703,10 @@ START_TEST(motion_outside_bounds)
>   	val = libinput_event_tablet_tool_get_x(tablet_event);
>   	ck_assert_double_gt(val, 0.0);
>   	val = libinput_event_tablet_tool_get_y(tablet_event);
> -	ck_assert_double_lt(val, 0.0);
> +	ck_assert_double_eq(val, 0.0);
>
>   	val = libinput_event_tablet_tool_get_y_transformed(tablet_event, 100);
> -	ck_assert_double_lt(val, 0.0);
> +	ck_assert_double_eq(val, 0.0);
>
>   	libinput_event_destroy(event);
>   }
> diff --git a/udev/90-libinput-model-quirks.hwdb b/udev/90-libinput-model-quirks.hwdb
> index eb2859e..07fb23f 100644
> --- a/udev/90-libinput-model-quirks.hwdb
> +++ b/udev/90-libinput-model-quirks.hwdb
> @@ -131,3 +131,39 @@ libinput:name:SynPS/2 Synaptics TouchPad:dmi:*svnSystem76*pvrkudp1*
>   ##########################################
>   libinput:touchpad:input:b0003v056Ap*
>    LIBINPUT_MODEL_WACOM_TOUCHPAD=1
> +
> +# DTK2241
> +libinput:tablet:input:b0003v056Ap0057*
> +# DTK2242
> +libinput:tablet:input:b0003v056Ap0059*
> +# Cintiq 22HDT
> +libinput:tablet:input:b0003v056Ap005B*
> +# Cintiq 21UX2
> +libinput:tablet:input:b0003v056Ap00CC*
> +# Cintiq 24HD
> +libinput:tablet:input:b0003v056Ap00F4*
> +# Cintiq 24HDT
> +libinput:tablet:input:b0003v056Ap00F8*
> +# Cintiq 22HD
> +libinput:tablet:input:b0003v056Ap00FA*
> +# DTU1031
> +libinput:tablet:input:b0003v056Ap00FB*
> +# Cintiq 13HD
> +libinput:tablet:input:b0003v056Ap0304*
> +# ISDv4 307
> +libinput:tablet:input:b0003v056Ap0307*
> +# ISDv4 30A
> +libinput:tablet:input:b0003v056Ap030A*
> +# ISDv4 325
> +libinput:tablet:input:b0003v056Ap0325*
> +# Cintiq 27QHD
> +libinput:tablet:input:b0003v056Ap032A*
> +# Cintiq 27QHDT
> +libinput:tablet:input:b0003v056Ap032B*
> +# DTU1031X
> +libinput:tablet:input:b0003v056Ap032F*
> +# Cintiq 13HDT
> +libinput:tablet:input:b0003v056Ap0333*
> +# DTU1141
> +libinput:tablet:input:b0003v056Ap0336*
> + LIBINPUT_MODEL_WACOM_SENSOR_OFFSET=1
> diff --git a/udev/90-libinput-model-quirks.rules.in b/udev/90-libinput-model-quirks.rules.in
> index 8bff192..4e96bb3 100644
> --- a/udev/90-libinput-model-quirks.rules.in
> +++ b/udev/90-libinput-model-quirks.rules.in
> @@ -33,6 +33,10 @@ ENV{ID_INPUT_TOUCHPAD}=="1", \
>   ENV{ID_INPUT_MOUSE}=="1", \
>     IMPORT{builtin}="hwdb --subsystem=input --lookup-prefix=libinput:mouse:"
>
> +# libinput:tablet:<modalias>
> +ENV{ID_INPUT_TABLET}=="1", \
> +  IMPORT{builtin}="hwdb --subsystem=input --lookup-prefix=libinput:tablet:"
> +
>   # libinput:name:<name>:dmi:<dmi string>
>   KERNELS=="input*", \
>     IMPORT{builtin}="hwdb 'libinput:name:$attr{name}:$attr{[dmi/id]modalias}'"
>


More information about the wayland-devel mailing list