[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.