On Thu, Aug 24, 2017 at 11:48 PM, Peter Hutterer <peter.hutte...@who-t.net> wrote: > Devices tagged as accelerometers may also be other devices like tablet pads. > Only ignore pure accelerometer devices but disable the accelerometer axes for > devices that have multiple types. > > https://bugs.freedesktop.org/show_bug.cgi?id=102100 > > Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> > --- > meson.build | 1 + > src/evdev.c | 20 +++- > test/litest-device-wacom-mobilestudio-pro-pad.c | 126 > ++++++++++++++++++++++++ > test/litest.c | 2 + > test/litest.h | 1 + > 5 files changed, 149 insertions(+), 1 deletion(-) > create mode 100644 test/litest-device-wacom-mobilestudio-pro-pad.c > > diff --git a/meson.build b/meson.build > index fe102086..ea5ae0b3 100644 > --- a/meson.build > +++ b/meson.build > @@ -584,6 +584,7 @@ if get_option('tests') > 'test/litest-device-wacom-intuos5-pen.c', > 'test/litest-device-wacom-isdv4-e6-pen.c', > 'test/litest-device-wacom-isdv4-e6-finger.c', > + 'test/litest-device-wacom-mobilestudio-pro-pad.c', > 'test/litest-device-waltop-tablet.c', > 'test/litest-device-wheel-only.c', > 'test/litest-device-xen-virtual-pointer.c', > diff --git a/src/evdev.c b/src/evdev.c > index 9c90733f..1e76801b 100644 > --- a/src/evdev.c > +++ b/src/evdev.c > @@ -2748,6 +2748,20 @@ evdev_extract_abs_axes(struct evdev_device *device) > device->is_mt = 1; > } > > +static void > +evdev_disable_accelerometer_axes(struct evdev_device *device) > +{ > + struct libevdev *evdev = device->evdev; > + > + libevdev_disable_event_code(evdev, EV_ABS, ABS_X); > + libevdev_disable_event_code(evdev, EV_ABS, ABS_Y); > + libevdev_disable_event_code(evdev, EV_ABS, ABS_Z); > + > + libevdev_disable_event_code(evdev, EV_ABS, REL_X); > + libevdev_disable_event_code(evdev, EV_ABS, REL_Y); > + libevdev_disable_event_code(evdev, EV_ABS, REL_Z); > +} > + > static struct evdev_dispatch * > evdev_configure_device(struct evdev_device *device) > { > @@ -2779,10 +2793,14 @@ evdev_configure_device(struct evdev_device *device) > udev_tags & EVDEV_UDEV_TAG_TRACKBALL ? " Trackball" : "", > udev_tags & EVDEV_UDEV_TAG_SWITCH ? " Switch" : ""); > > - if (udev_tags & EVDEV_UDEV_TAG_ACCELEROMETER) { > + /* Ignore pure accelerometers, but accept devices that are > + * accelerometers with other axes */ > + if (udev_tags == (EVDEV_UDEV_TAG_INPUT|EVDEV_UDEV_TAG_ACCELEROMETER)) > { > evdev_log_info(device, > "device is an accelerometer, ignoring\n"); > return NULL; > + } else if (udev_tags & EVDEV_UDEV_TAG_ACCELEROMETER) { > + evdev_disable_accelerometer_axes(device); > } > > /* libwacom *adds* TABLET, TOUCHPAD but leaves JOYSTICK in place, so > diff --git a/test/litest-device-wacom-mobilestudio-pro-pad.c > b/test/litest-device-wacom-mobilestudio-pro-pad.c > new file mode 100644 > index 00000000..9e6a4593 > --- /dev/null > +++ b/test/litest-device-wacom-mobilestudio-pro-pad.c > @@ -0,0 +1,126 @@ > +/* > + * Copyright © 2017 Red Hat, Inc. > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > + * copy of this software and associated documentation files (the "Software"), > + * to deal in the Software without restriction, including without limitation > + * the rights to use, copy, modify, merge, publish, distribute, sublicense, > + * and/or sell copies of the Software, and to permit persons to whom the > + * Software is furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice (including the next > + * paragraph) shall be included in all copies or substantial portions of the > + * Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER > + * DEALINGS IN THE SOFTWARE. > + */ > + > +#include "config.h" > + > +#include "litest.h" > +#include "litest-int.h" > + > +static void litest_wacom_mobilestudio_pad_setup(void) > +{ > + struct litest_device *d = > litest_create_device(LITEST_WACOM_MOBILESTUDIO_PRO_16_PAD); > + litest_set_current_device(d); > +} > + > +static struct input_event down[] = { > + { .type = -1, .code = -1 }, > +}; > + > +static struct input_event move[] = { > + { .type = -1, .code = -1 }, > +}; > + > +static struct input_event ring_start[] = { > + { .type = EV_ABS, .code = ABS_WHEEL, .value = LITEST_AUTO_ASSIGN }, > + { .type = EV_ABS, .code = ABS_MISC, .value = 15 }, > + { .type = EV_SYN, .code = SYN_REPORT, .value = 0 }, > + { .type = -1, .code = -1 }, > +} ; > + > +static struct input_event ring_change[] = { > + { .type = EV_ABS, .code = ABS_WHEEL, .value = LITEST_AUTO_ASSIGN }, > + { .type = EV_SYN, .code = SYN_REPORT, .value = 0 }, > + { .type = -1, .code = -1 }, > +} ; > + > +static struct input_event ring_end[] = { > + { .type = EV_ABS, .code = ABS_WHEEL, .value = 0 }, > + { .type = EV_ABS, .code = ABS_MISC, .value = 0 }, > + { .type = EV_SYN, .code = SYN_REPORT, .value = 0 }, > + { .type = -1, .code = -1 }, > +} ; > + > +static struct litest_device_interface interface = { > + .touch_down_events = down, > + .touch_move_events = move, > + .pad_ring_start_events = ring_start, > + .pad_ring_change_events = ring_change, > + .pad_ring_end_events = ring_end, > +}; > +static struct input_absinfo absinfo[] = { > + { ABS_X, -2048, 2048, 0, 0, 0 }, > + { ABS_Y, -2048, 2048, 0, 0, 0 }, > + { ABS_Z, -2048, 2048, 0, 0, 0 }, > + { ABS_WHEEL, 0, 71, 0, 0, 0 },
ABS_WHEEL range for this device is 0..35 (sorry for being so dense in the bug report...). Aside from that minor nitpick, looks good and does the trick :) Reviewed-by: Jason Gerecke <jason.gere...@wacom.com> Jason --- Now instead of four in the eights place / you’ve got three, ‘Cause you added one / (That is to say, eight) to the two, / But you can’t take seven from three, / So you look at the sixty-fours.... > + { ABS_MISC, 0, 0, 0, 0, 0 }, > + { .value = -1 }, > +}; > + > +static struct input_id input_id = { > + .bustype = 0x3, > + .vendor = 0x56a, > + .product = 0x34e, > + .version = 0x110, > +}; > + > +static int events[] = { > + EV_KEY, BTN_0, > + EV_KEY, BTN_1, > + EV_KEY, BTN_2, > + EV_KEY, BTN_3, > + EV_KEY, BTN_4, > + EV_KEY, BTN_5, > + EV_KEY, BTN_6, > + EV_KEY, BTN_7, > + EV_KEY, BTN_8, > + EV_KEY, BTN_SOUTH, > + EV_KEY, BTN_EAST, > + EV_KEY, BTN_C, > + EV_KEY, BTN_STYLUS, > + INPUT_PROP_MAX, INPUT_PROP_ACCELEROMETER, > + -1, -1, > +}; > + > +static const char udev_rule[] = > +"ACTION==\"remove\", GOTO=\"pad_end\"\n" > +"KERNEL!=\"event*\", GOTO=\"pad_end\"\n" > +"\n" > +"ATTRS{name}==\"litest Wacom MobileStudio Pro 16 Pad*\",\\\n" > +" ENV{ID_INPUT_TABLET}=\"1\",\\\n" > +" ENV{ID_INPUT_TABLET_PAD}=\"1\"\\\n" > +"\n" > +"LABEL=\"pad_end\""; > + > +struct litest_test_device litest_wacom_mobilestudio_13hdt_pad_device = { > + .type = LITEST_WACOM_MOBILESTUDIO_PRO_16_PAD, > + .features = LITEST_TABLET_PAD | LITEST_RING, > + .shortname = "wacom-mobilestudio-pro16-pad", > + .setup = litest_wacom_mobilestudio_pad_setup, > + .interface = &interface, > + > + .name = "Wacom MobileStudio Pro 16 Pad", > + .id = &input_id, > + .events = events, > + .absinfo = absinfo, > + .udev_rule = udev_rule, > +}; > diff --git a/test/litest.c b/test/litest.c > index cbc0c511..d832adc4 100644 > --- a/test/litest.c > +++ b/test/litest.c > @@ -416,6 +416,7 @@ extern struct litest_test_device > litest_lid_switch_surface3_device; > extern struct litest_test_device litest_appletouch_device; > extern struct litest_test_device litest_gpio_keys_device; > extern struct litest_test_device litest_ignored_mouse_device; > +extern struct litest_test_device litest_wacom_mobilestudio_13hdt_pad_device; > > struct litest_test_device* devices[] = { > &litest_synaptics_clickpad_device, > @@ -483,6 +484,7 @@ struct litest_test_device* devices[] = { > &litest_appletouch_device, > &litest_gpio_keys_device, > &litest_ignored_mouse_device, > + &litest_wacom_mobilestudio_13hdt_pad_device, > NULL, > }; > > diff --git a/test/litest.h b/test/litest.h > index 150381ec..f33c05fa 100644 > --- a/test/litest.h > +++ b/test/litest.h > @@ -236,6 +236,7 @@ enum litest_device_type { > LITEST_APPLETOUCH, > LITEST_GPIO_KEYS, > LITEST_IGNORED_MOUSE, > + LITEST_WACOM_MOBILESTUDIO_PRO_16_PAD, > }; > > enum litest_device_feature { > -- > 2.13.5 > _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel