[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [RFC] kbdif: add multi-touch support
On Tue, 3 Jan 2017, Oleksandr Andrushchenko wrote: > From: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@xxxxxxxx> > > Signed-off-by: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@xxxxxxxx> > --- > xen/include/public/io/kbdif.h | 64 > +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 64 insertions(+) > > diff --git a/xen/include/public/io/kbdif.h b/xen/include/public/io/kbdif.h > index 2d2aebd..ad94b53 100644 > --- a/xen/include/public/io/kbdif.h > +++ b/xen/include/public/io/kbdif.h > @@ -45,6 +45,19 @@ > */ > #define XENKBD_TYPE_POS 4 > > +/* > + * Multi-touch event > + * Capable backend sets feature-multi-touch in xenstore. > + * Frontend requests feature by setting request-multi-touch in xenstore. > + * Frontend supports up to XENKBD_MT_NUM_DEV virtual multi-touch input > devices, > + * configured by the backend in xenstore under mt-%d folder, %d being > + * a sequential number of the virtual input device: > + * o num-contacts - number of simultaneous touches supported > + * o width - width of the touch area in pixels > + * o height - height of the touch area in pixels Please write down the max width and height supported by the protocol, keeping in mind that motion events below use int32_t for coordinates. Are there any benefits of this compared to just setting up multiple kbd connections, one per multi-touch device? The only benefit I can think of is saving few pages. > + */ > +#define XENKBD_TYPE_MTOUCH 5 > struct xenkbd_motion > { > uint8_t type; /* XENKBD_TYPE_MOTION */ > @@ -68,6 +81,56 @@ struct xenkbd_position > int32_t rel_z; /* relative Z motion (wheel) */ > }; > > +/* number of simultaneously supported multi-touch virtual input devices */ > +#define XENKBD_MT_NUM_DEV 4 If it turns out that supporting multiple devices per connection is a good idea, then I suggest that the max number of devices is a backend property on xenstore. > +/* Sent when a new touch is made: touch is assigned a unique contact > + * ID, sent with this and consequent events related to this touch. > + * Contact ID will be reused after XENKBD_MT_EV_UP event. Will be reused or can be reused? Please provide an example of a Contact ID lifecycle. What is the max Contact ID? > + */ > +#define XENKBD_MT_EV_DOWN 0 > +/* Touch point has been released */ > +#define XENKBD_MT_EV_UP 1 > +/* Touch point has changed its coordinate(s) */ > +#define XENKBD_MT_EV_MOTION 2 > +/* Input synchronization event: shows end of a set of events > + * which logically belong together. > + */ > +#define XENKBD_MT_EV_SYN 3 > +/* Touch point has changed its shape. Shape is approximated by an ellipse > + * through the major and minor axis lengths: major is the longer diameter > + * of the ellipse and minor is the shorter one. Center of the ellipse is > + * reported via XENKBD_MT_EV_DOWN/XENKBD_MT_EV_MOTION events. > + */ > +#define XENKBD_MT_EV_SHAPE 4 > +/* Touch point's shape has changed its orientation: calculated as a clockwise > + * angle between the major axis of the ellipse and positive Y axis in > degrees, > + * [-180; +180]. > + */ > +#define XENKBD_MT_EV_ORIENT 5 > + > +struct xenkbd_mtouch { > + uint8_t type; /* XENKBD_TYPE_MTOUCH */ > + uint8_t dev_idx; /* index of the multi-touch device */ > + uint8_t event_type; /* XENKBD_MT_EV_??? */ > + uint8_t reserved; /* reserved for the future use */ > + int32_t contact_id; /* contact ID, [0; num-contacts - 1] */ > + union { > + /* XENKBD_MT_EV_DOWN/XENKBD_MT_EV_MOTION */ > + struct { > + int32_t abs_x; /* absolute X position, pixels */ > + int32_t abs_y; /* absolute Y position, pixels */ > + } pos; > + /* XENKBD_MT_EV_SHAPE */ > + struct { > + uint32_t major; /* length of the major axis, pixels */ > + uint32_t minor; /* length of the minor axis, pixels */ > + } shape; > + /* XENKBD_MT_EV_ORIENT */ > + uint16_t orientation; /* clockwise angle of the major axis */ > + } u; > +}; Need a binary representation. > #define XENKBD_IN_EVENT_SIZE 40 > > union xenkbd_in_event > @@ -76,6 +139,7 @@ union xenkbd_in_event > struct xenkbd_motion motion; > struct xenkbd_key key; > struct xenkbd_position pos; > + struct xenkbd_mtouch mtouch; > char pad[XENKBD_IN_EVENT_SIZE]; > }; > > -- > 2.7.4 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |