On Wed, Jun 10, 2015 at 04:09:11PM +0200, Andreas Pokorny wrote: > Adds a device with various touch related axes and respective device features > to litest. And additional routines to simulate pressure orientation and > touch major/minor changes.
fwiw, plesae sign off your patches for libinput. > --- > test/Makefile.am | 1 + > test/litest-touch-screen.c | 100 > +++++++++++++++++++++++++++++++++++++++++++++ > test/litest.c | 43 +++++++++++++++++++ > test/litest.h | 16 ++++++++ > 4 files changed, 160 insertions(+) > create mode 100644 test/litest-touch-screen.c > > diff --git a/test/Makefile.am b/test/Makefile.am > index fc05ff6..ebc8eee 100644 > --- a/test/Makefile.am > +++ b/test/Makefile.am > @@ -31,6 +31,7 @@ liblitest_la_SOURCES = \ > litest-synaptics-t440.c \ > litest-synaptics-x1-carbon-3rd.c \ > litest-trackpoint.c \ > + litest-touch-screen.c \ > litest-wacom-touch.c \ > litest-wacom-intuos-finger.c \ > litest-wheel-only.c \ > diff --git a/test/litest-touch-screen.c b/test/litest-touch-screen.c > new file mode 100644 > index 0000000..fd35e5f > --- /dev/null > +++ b/test/litest-touch-screen.c > @@ -0,0 +1,100 @@ > +/* > + * Copyright © 2015 Canonical, Ltd. > + * > + * Permission to use, copy, modify, distribute, and sell this software and > its > + * documentation for any purpose is hereby granted without fee, provided that > + * the above copyright notice appear in all copies and that both that > copyright > + * notice and this permission notice appear in supporting documentation, and > + * that the name of the copyright holders not be used in advertising or > + * publicity pertaining to distribution of the software without specific, > + * written prior permission. The copyright holders make no representations > + * about the suitability of this software for any purpose. It is provided > "as > + * is" without express or implied warranty. > + * > + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS > SOFTWARE, > + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO > + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR > + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF > USE, > + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER > + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR > PERFORMANCE > + * OF THIS SOFTWARE. > + */ > + > +#if HAVE_CONFIG_H > +#include "config.h" > +#endif > + > +#include "litest.h" > +#include "litest-int.h" > + > +static void litest_generic_mt_setup(void) > +{ > + struct litest_device *d = > litest_create_device(LITEST_GENERIC_MULTITOUCH_SCREEN); > + litest_set_current_device(d); > +} > + > +static struct input_event down[] = { > + { .type = EV_ABS, .code = ABS_MT_SLOT, .value = LITEST_AUTO_ASSIGN }, > + { .type = EV_ABS, .code = ABS_MT_TRACKING_ID, .value = > LITEST_AUTO_ASSIGN }, > + { .type = EV_ABS, .code = ABS_MT_POSITION_X, .value = > LITEST_AUTO_ASSIGN }, > + { .type = EV_ABS, .code = ABS_MT_POSITION_Y, .value = > LITEST_AUTO_ASSIGN }, > + { .type = EV_ABS, .code = ABS_MT_PRESSURE, .value = 30 }, > + { .type = EV_ABS, .code = ABS_MT_TOUCH_MAJOR, .value = 15 }, > + { .type = EV_ABS, .code = ABS_MT_TOUCH_MINOR, .value = 5 }, > + { .type = EV_ABS, .code = ABS_MT_ORIENTATION, .value = 64 }, > + { .type = EV_SYN, .code = SYN_REPORT, .value = 0 }, > + { .type = -1, .code = -1 }, > +}; > + > +static struct input_event move[] = { > + { .type = EV_ABS, .code = ABS_MT_SLOT, .value = LITEST_AUTO_ASSIGN }, > + { .type = EV_ABS, .code = ABS_MT_POSITION_X, .value = > LITEST_AUTO_ASSIGN }, > + { .type = EV_ABS, .code = ABS_MT_POSITION_Y, .value = > LITEST_AUTO_ASSIGN }, > + { .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, > +}; > + > +static struct input_absinfo absinfo[] = { > + { ABS_X, 0, 1500, 0, 0, 0 }, > + { ABS_Y, 0, 2500, 0, 0, 0 }, out of interest: is his from a real touchscreen? no resolution? > + { ABS_MT_SLOT, 0, 9, 0, 0, 0 }, > + { ABS_MT_POSITION_X, 0, 1500, 0, 0, 0 }, > + { ABS_MT_POSITION_Y, 0, 2500, 0, 0, 0 }, > + { ABS_MT_ORIENTATION, -256, 255, 0, 0, 0 }, > + { ABS_MT_TOUCH_MAJOR, 0, 255, 1, 0, 0 }, > + { ABS_MT_TOUCH_MINOR, 0, 255, 1, 0, 0 }, > + { ABS_MT_PRESSURE, 0, 255, 0, 0, 0 }, > + { ABS_MT_TRACKING_ID, 0, 65535, 0, 0, 0 }, > + { .value = -1 }, > +}; > + > +static struct input_id input_id = { > + .bustype = 0x1, > + .vendor = 0x0, > + .product = 0x25, > +}; > + > +static int events[] = { > + EV_KEY, BTN_TOUCH, > + INPUT_PROP_MAX, INPUT_PROP_DIRECT, > + -1, -1 > +}; > + > +struct litest_test_device litest_generic_multitouch_screen_device = { > + .type = LITEST_GENERIC_MULTITOUCH_SCREEN, > + .features = LITEST_TOUCH| LITEST_ELLIPSE_ORIENTATION | LITEST_PRESSURE| space missing before the last | > + LITEST_ELLIPSE_SIZE , > + .shortname = "generic-mt", > + .setup = litest_generic_mt_setup, > + .interface = &interface, > + > + .name = "generic-mt", > + .id = &input_id, > + .events = events, > + .absinfo = absinfo, > +}; > diff --git a/test/litest.c b/test/litest.c > index 0e2cb96..e6d70cd 100644 > --- a/test/litest.c > +++ b/test/litest.c > @@ -344,6 +344,7 @@ extern struct litest_test_device > litest_mouse_roccat_device; > extern struct litest_test_device litest_ms_surface_cover_device; > extern struct litest_test_device litest_logitech_trackball_device; > extern struct litest_test_device litest_atmel_hover_device; > +extern struct litest_test_device litest_generic_multitouch_screen_device; > > struct litest_test_device* devices[] = { > &litest_synaptics_clickpad_device, > @@ -369,6 +370,7 @@ struct litest_test_device* devices[] = { > &litest_ms_surface_cover_device, > &litest_logitech_trackball_device, > &litest_atmel_hover_device, > + &litest_generic_multitouch_screen_device, > NULL, > }; > > @@ -1304,6 +1306,47 @@ litest_touch_move(struct litest_device *d, unsigned > int slot, > litest_slot_move(d, slot, x, y, true); > } > > + > +static void > +change_touch_point_property(struct litest_device *d, unsigned int slot, > + unsigned int code, double value) separate lines per arg if the args don't fit on a single line. > +{ > + struct input_event *ev; > + struct input_event property_change[] = { > + { .type = EV_ABS, .code = ABS_MT_SLOT, .value = slot }, > + { .type = EV_ABS, .code = code , .value = value}, > + { .type = EV_SYN, .code = SYN_REPORT, .value = 0 } > + }; > + > + ARRAY_FOR_EACH(property_change, ev) > + litest_event(d, ev->type, ev->code, ev->value); > +} > + > +void > +litest_touch_pressure(struct litest_device *d, unsigned int slot, > + double pressure) > +{ > + change_touch_point_property(d, slot, ABS_MT_PRESSURE, pressure); > +} > + > +void > +litest_touch_orientation(struct litest_device *d, unsigned int slot, > + double orientation) > +{ > + change_touch_point_property(d, slot, ABS_MT_ORIENTATION, orientation); > +} > + > +void > +litest_touch_major(struct litest_device *d, unsigned int slot, double > touch_major) > +{ > + change_touch_point_property(d, slot, ABS_MT_TOUCH_MAJOR, touch_major); > +} > + > +void > +litest_touch_minor(struct litest_device *d, unsigned int slot, double > touch_minor) > +{ > + change_touch_point_property(d, slot, ABS_MT_TOUCH_MINOR, touch_minor); > +} > void > litest_touch_move_to(struct litest_device *d, > unsigned int slot, > diff --git a/test/litest.h b/test/litest.h > index 1476f4a..3a08b6a 100644 > --- a/test/litest.h > +++ b/test/litest.h > @@ -135,6 +135,7 @@ enum litest_device_type { > LITEST_MOUSE_ROCCAT = -22, > LITEST_LOGITECH_TRACKBALL = -23, > LITEST_ATMEL_HOVER = -24, > + LITEST_GENERIC_MULTITOUCH_SCREEN= -25, > }; > > enum litest_device_feature { > @@ -156,6 +157,9 @@ enum litest_device_feature { > LITEST_ABSOLUTE = 1 << 13, > LITEST_PROTOCOL_A = 1 << 14, > LITEST_HOVER = 1 << 15, > + LITEST_PRESSURE = 1 << 16, > + LITEST_ELLIPSE_ORIENTATION = 1 << 17, > + LITEST_ELLIPSE_SIZE = 1 << 18, do we need two different flags for this? how many devices have major/minor but not orientation? > }; > > struct litest_device { > @@ -302,6 +306,18 @@ void litest_touch_move_two_touches(struct litest_device > *d, > double x1, double y1, > double dx, double dy, > int steps, int sleep_ms); > +void litest_touch_pressure(struct litest_device *d, > + unsigned int slot, > + double pressure); > +void litest_touch_orientation(struct litest_device *d, > + unsigned int slot, > + double orientation); > +void litest_touch_major(struct litest_device *d, > + unsigned int slot, > + double touch_major); > +void litest_touch_minor(struct litest_device *d, > + unsigned int slot, > + double touch_minor); > void litest_hover_start(struct litest_device *d, > unsigned int slot, > double x, I'm wondering if this is the best approach here, it would quickly become unwieldly. Can we use the same approach as in the tablet-support branch, where we supply an array with axes to override? Cheers, Peter _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel