[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v1 2/2] xen/kbdif: add multi-touch support



On Fri, 20 Jan 2017, Oleksandr Andrushchenko wrote:
> On 01/20/2017 07:52 PM, Stefano Stabellini wrote:
> > On Fri, 20 Jan 2017, Oleksandr Andrushchenko wrote:
> > > On 01/20/2017 12:22 AM, Stefano Stabellini wrote:
> > > > On Thu, 19 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 | 216
> > > > > ++++++++++++++++++++++++++++++++++++++++++
> > > > >    1 file changed, 216 insertions(+)
> > > > > 
> > > > > diff --git a/xen/include/public/io/kbdif.h
> > > > > b/xen/include/public/io/kbdif.h
> > > > > index c00faa3af5d2..8d8ba9af1cb1 100644
> > > > > --- a/xen/include/public/io/kbdif.h
> > > > > +++ b/xen/include/public/io/kbdif.h
> > > > > @@ -57,6 +57,12 @@
> > > > >     *      Backends, which support reporting of absolute coordinates
> > > > > for
> > > > > pointer
> > > > >     *      device should set this to 1.
> > > > >     *
> > > > > + * feature-multi-touch
> > > > > + *      Values:         <uint>
> > > > > + *
> > > > > + *      Backends, which support reporting of multi-touch events
> > > > > + *      should set this to 1.
> > > > > + *
> > > > >     *------------------------- Pointer Device Parameters
> > > > > ------------------------
> > > > >     *
> > > > >     * width
> > > > > @@ -87,6 +93,11 @@
> > > > >     *      Request backend to report absolute pointer coordinates
> > > > >     *      (XENKBD_TYPE_POS) instead of relative ones
> > > > > (XENKBD_TYPE_MOTION).
> > > > >     *
> > > > > + * request-multi-touch
> > > > > + *      Values:         <uint>
> > > > > + *
> > > > > + *      Request backend to report multi-touch events.
> > > > > + *
> > > > >     *----------------------- Request Transport Parameters
> > > > > -----------------------
> > > > >     *
> > > > >     * event-channel
> > > > > @@ -106,6 +117,30 @@
> > > > >     *
> > > > >     *      OBSOLETE, not recommended for use.
> > > > >     *      PFN of the shared page.
> > > > > + *
> > > > > + *----------------------- Multi-touch Device Parameters
> > > > > -----------------------
> > > > > + *
> > > > > + * Every multi-touch input device uses a dedicated event
> > > > > frontend/backend
> > > > > + * connection configured via XenStore properties under
> > > > > + * XENKBD_PATH_MTOUCH folder.
> > > > This sentence doesn't seem to match the rest of the patch:
> > > lets break it into smaller parts
> > > > it looks
> > > > like multi-touch devices use the same ring and evtchn used by the
> > > > pointer and keyboard.
> > > *Every* multi-touch input device uses a *dedicated* event frontend/backend
> > > *connection*
> > > So, it is clearly stated that there is a dedicated/separate connection
> > > (which consists of a ring and corresponding event channel: here we have
> > > already discussed this part:
> > > http://marc.info/?l=xen-devel&m=148412731428686):
> > > 
> > > > > > > + * Every multi-touch input device uses a dedicated event ring and
> > > > > > > is
> > > > > > For clarity I would say "Every multi-touch input device uses a
> > > > > > dedicated
> > > > > > frontend/backend connection". That includes a ring, an event
> > > > > > channel,
> > > > > > and xenstore entries.
> > > 
> > > > Also, it is not clear whether multiple multitouch devices are supported
> > > > with a single frontend/backend connection (as you described in
> > > > http://marc.info/?l=xen-devel&m=148412731428686) or not. Please clarify.
> > > Same as above:
> > > 
> > > *Every* multi-touch input device uses a *dedicated* event frontend/backend
> > > *connection*
> > > 
> > > > If only one device is supported, do we need a XENKBD_PATH_MTOUCH folder?
> > > > 
> > > For consistency and simplicity: at
> > > http://marc.info/?l=xen-devel&m=148412731428686 I have an example of how
> > > XenStore entries look like. If you define multiple mtouch devices then
> > > you'll
> > > iterate over folder contents, e.g.
> > > 
> > > /local/domain/11/device/vkbd/0/mtouch/0/width = "3200"
> > > /local/domain/11/device/vkbd/0/mtouch/1/width = "6400"
> > > 
> > > So, you'll have something like for (i = 0; i < num_mtouch_devices; i++) {
> > > process(i); } If you have a single mtouch device nothing changes. Thus, I
> > > see
> > > no reason in making any difference for single or multiple-devices.
> > All right. I got confused because I read first the other email where you
> > still suggested to use the other approach. Sorry. The wording is clear
> > enough.
> No problem, glad we are on the same page now
> > Aside from clarity, XENKBD_PATH_MTOUCH is important to distinguish the
> > width and height parameters of the mtouch device from the ones of the
> > pointers device, is that right?
> Exactly. Also for ring-ref and event-channel

Sorry, now I am confused again :-S
There are no ring-ref and event-channel under mtouch, are there? So, why
would XENKBD_PATH_MTOUCH help distinguish them?


> > This patch is OK as is.
> > 
> > Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> > 
> Thank you,
> can I also put this "Reviewed-by" into the patch?

Sure, unless there was a misunderstanding.


> Anyways, I have to wait for some other comments if any
> and publish another version of the series with
> comments addressed ("the" in the previous patch)
> > > > > The values below are per emulated multi-touch
> > > > > + * input device:
> > > > > + *
> > > > > + * num-contacts
> > > > > + *      Values:         <uint>
> > > > > + *
> > > > > + *      Number of simultaneous touches reported.
> > > > > + *
> > > > > + * width
> > > > > + *      Values:         <uint>
> > > > > + *
> > > > > + *      Width of the touch area to be used by the frontend
> > > > > + *      while reporting input events, pixels, [0; UINT32_MAX].
> > > > > + *
> > > > > + * height
> > > > > + *      Values:         <uint>
> > > > > + *
> > > > > + *      Height of the touch area to be used by the frontend
> > > > > + *      while reporting input events, pixels, [0; UINT32_MAX].
> > > > >     */
> > > > >      /*
> > > > > @@ -116,6 +151,16 @@
> > > > >    #define XENKBD_TYPE_RESERVED           2
> > > > >    #define XENKBD_TYPE_KEY                3
> > > > >    #define XENKBD_TYPE_POS                4
> > > > > +#define XENKBD_TYPE_MTOUCH             5
> > > > > +
> > > > > +/* Multi-touch event sub-codes */
> > > > > +
> > > > > +#define XENKBD_MT_EV_DOWN              0
> > > > > +#define XENKBD_MT_EV_UP                1
> > > > > +#define XENKBD_MT_EV_MOTION            2
> > > > > +#define XENKBD_MT_EV_SYN               3
> > > > > +#define XENKBD_MT_EV_SHAPE             4
> > > > > +#define XENKBD_MT_EV_ORIENT            5
> > > > >      /*
> > > > >     * CONSTANTS, XENSTORE FIELD AND PATH NAME STRINGS, HELPERS.
> > > > > @@ -124,11 +169,17 @@
> > > > >    #define XENKBD_DRIVER_NAME             "vkbd"
> > > > >      #define XENKBD_FIELD_FEAT_ABS_POINTER  "feature-abs-pointer"
> > > > > +#define XENKBD_FIELD_FEAT_MTOUCH       "feature-multi-touch"
> > > > >    #define XENKBD_FIELD_REQ_ABS_POINTER   "request-abs-pointer"
> > > > > +#define XENKBD_FIELD_REQ_MTOUCH        "request-multi-touch"
> > > > >    #define XENKBD_FIELD_RING_GREF         "page-gref"
> > > > >    #define XENKBD_FIELD_EVT_CHANNEL       "event-channel"
> > > > >    #define XENKBD_FIELD_WIDTH             "width"
> > > > >    #define XENKBD_FIELD_HEIGHT            "height"
> > > > > +#define XENKBD_FIELD_NUM_CONTACTS      "num-contacts"
> > > > > +
> > > > > +/* Path entries */
> > > > > +#define XENKBD_PATH_MTOUCH             "mtouch"
> > > > >      /* OBSOLETE, not recommended for use */
> > > > >    #define XENKBD_FIELD_RING_REF          "page-ref"
> > > > > @@ -248,6 +299,170 @@ struct xenkbd_position
> > > > >        int32_t rel_z;
> > > > >    };
> > > > >    +/*
> > > > > + * Multi-touch event and its sub-types
> > > > > + *
> > > > > + * All multi-touch event packets have common header:
> > > > > + *
> > > > > + *         0                1                 2               3
> > > > > octet
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |  _TYPE_MTOUCH  |   event_type   |   contact_id   |    reserved
> > > > > |
> > > > > 4
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 8
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > + * event_type - unt8_t, multi-touch event sub-type, XENKBD_MT_EV_???
> > > > > + * contact_id - unt8_t, ID of the contact
> > > > If multiple devices are supported, don't we need a per multitouch device
> > > > ID to identify the source?
> > > > 
> > > Again, *Every* multi-touch input device uses a *dedicated* event
> > > frontend/backend *connection* Thus, events are passed w/o indices via
> > > dedicated channels
> > > > > + * Touch interactions can consist of one or more contacts.
> > > > > + * For each contact, a series of events is generated, starting
> > > > > + * with a down event, followed by zero or more motion events,
> > > > > + * and ending with an up event. Events relating to the same
> > > > > + * contact point can be identified by the ID of the sequence: contact
> > > > > ID.
> > > > > + * Contact ID may be reused after XENKBD_MT_EV_UP event and
> > > > > + * is in the [0; XENKBD_FIELD_NUM_CONTACTS - 1] range.
> > > > > + *
> > > > > + * For further information please refer to documentation on Wayland
> > > > > [1],
> > > > > + * Linux [2] and Windows [3] multi-touch support.
> > > > > + *
> > > > > + * [1]
> > > > > https://cgit.freedesktop.org/wayland/wayland/tree/protocol/wayland.xml
> > > > > + * [2]
> > > > > https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt
> > > > > + * [3]
> > > > > https://msdn.microsoft.com/en-us/library/jj151564(v=vs.85).aspx
> > > > > + *
> > > > > + *
> > > > > + * Multi-touch down event - sent when a new touch is made: touch is
> > > > > assigned
> > > > > + * a unique contact ID, sent with this and consequent events related
> > > > > + * to this touch.
> > > > > + *         0                1                 2               3
> > > > > octet
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |  _TYPE_MTOUCH  |   _MT_EV_DOWN  |   contact_id   |    reserved
> > > > > |
> > > > > 4
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 8
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                               abs_x
> > > > > |
> > > > > 12
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                               abs_y
> > > > > |
> > > > > 16
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 20
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 40
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > + * abs_x - int32_t, absolute X position, in pixels
> > > > > + * abs_y - int32_t, absolute Y position, in pixels
> > > > > + *
> > > > > + * Multi-touch contact release event
> > > > > + *         0                1                 2               3
> > > > > octet
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |  _TYPE_MTOUCH  |  _MT_EV_UP     |   contact_id   |    reserved
> > > > > |
> > > > > 4
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 8
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 40
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > + * Multi-touch motion event
> > > > > + *         0                1                 2               3
> > > > > octet
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |  _TYPE_MTOUCH  |  _MT_EV_MOTION |   contact_id   |    reserved
> > > > > |
> > > > > 4
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 8
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                               abs_x
> > > > > |
> > > > > 12
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                               abs_y
> > > > > |
> > > > > 16
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 20
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 40
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > + * abs_x - int32_t, absolute X position, in pixels,
> > > > > + * abs_y - int32_t, absolute Y position, in pixels,
> > > > > + *
> > > > > + * Multi-touch input synchronization event - shows end of a set of
> > > > > events
> > > > > + * which logically belong together.
> > > > > + *         0                1                 2               3
> > > > > octet
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |  _TYPE_MTOUCH  |  _MT_EV_SYN    |   contact_id   |    reserved
> > > > > |
> > > > > 4
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 8
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 40
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > + * Multi-touch shape event - touch point's shape 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.
> > > > > + *         0                1                 2               3
> > > > > octet
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |  _TYPE_MTOUCH  |  _MT_EV_SHAPE  |   contact_id   |    reserved
> > > > > |
> > > > > 4
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 8
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                               major
> > > > > |
> > > > > 12
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                               minor
> > > > > |
> > > > > 16
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 20
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 40
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > + * major - unt32_t, length of the major axis, pixels
> > > > > + * minor - unt32_t, length of the minor axis, pixels
> > > > > + *
> > > > > + * Multi-touch orientation event - 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].
> > > > > + *         0                1                 2               3
> > > > > octet
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |  _TYPE_MTOUCH  |  _MT_EV_ORIENT |   contact_id   |    reserved
> > > > > |
> > > > > 4
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 8
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |           orientation           |            reserved
> > > > > |
> > > > > 12
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 16
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + * |                             reserved
> > > > > |
> > > > > 40
> > > > > + *
> > > > > +----------------+----------------+----------------+----------------+
> > > > > + *
> > > > > + * orientation - int16_t, clockwise angle of the major axis
> > > > > + */
> > > > > +
> > > > > +struct xenkbd_mtouch {
> > > > > +    uint8_t type;             /* XENKBD_TYPE_MTOUCH */
> > > > > +    uint8_t event_type;       /* XENKBD_MT_EV_??? */
> > > > > +    uint8_t contact_id;
> > > > > +    uint8_t reserved[5];      /* reserved for the future use */
> > > > > +    union {
> > > > > +        struct {
> > > > > +            int32_t abs_x;    /* absolute X position, pixels */
> > > > > +            int32_t abs_y;    /* absolute Y position, pixels */
> > > > > +        } pos;
> > > > > +        struct {
> > > > > +            uint32_t major;   /* length of the major axis, pixels */
> > > > > +            uint32_t minor;   /* length of the minor axis, pixels */
> > > > > +        } shape;
> > > > > +        int16_t orientation;  /* clockwise angle of the major axis */
> > > > > +    } u;
> > > > > +};
> > > > > +
> > > > >    #define XENKBD_IN_EVENT_SIZE 40
> > > > >      union xenkbd_in_event
> > > > > @@ -256,6 +471,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®.