From: Gerd Hoffmann <kraxel@redhat.com>
To: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
spice-devel <spice-devel@lists.freedesktop.org>
Subject: [Qemu-devel] paravirtual tablet v3
Date: Fri, 14 Jan 2011 17:35:53 +0100 [thread overview]
Message-ID: <4D307B69.1030801@redhat.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 56 bytes --]
Hi,
Now v3 featuring multitouch ;)
cheers,
Gerd
[-- Attachment #2: pvtablet.h --]
[-- Type: text/x-chdr, Size: 3820 bytes --]
#ifndef __QEMU_PVTABLET__
#define __QEMU_PVTABLET__ 1
/*
* qemu patavirtual tablet interface
*/
#include <inttypes.h>
/*
* our virtio-serial channel name(s)
*/
#define QEMU_PVTABLET_FORMAT "org.qemu.pvtablet.%d"
enum qemu_pvtablet_type {
QEMU_PVTABLET_MSG_INIT,
QEMU_PVTABLET_MSG_ACK,
QEMU_PVTABLET_MSG_POSITION,
QEMU_PVTABLET_MSG_BTN_DOWN,
QEMU_PVTABLET_MSG_BTN_UP,
QEMU_PVTABLET_MSG_SYNC,
};
typedef enum qemu_pvtablet_features {
/* none yet */
};
typedef enum qemu_pvtablet_buttons {
QEMU_PVTABLET_BTN_LEFT,
QEMU_PVTABLET_BTN_RIGHT,
QEMU_PVTABLET_BTN_MIDDLE,
QEMU_PVTABLET_BTN_SCROLL_UP,
QEMU_PVTABLET_BTN_SCROLL_DOWN,
/*
* we can handle up to 32 buttons although
* not every has a individual name ;)
*/
};
#define QEMU_PVTABLET_BTN_MASK_LEFT (1<<QEMU_PVTABLET_BTN_LEFT)
#define QEMU_PVTABLET_BTN_MASK_RIGHT (1<<QEMU_PVTABLET_BTN_RIGHT)
#define QEMU_PVTABLET_BTN_MASK_MIDDLE (1<<QEMU_PVTABLET_BTN_MIDDLE)
#define QEMU_PVTABLET_BTN_MASK_SCROLL_UP (1<<QEMU_PVTABLET_BTN_SCROLL_UP)
#define QEMU_PVTABLET_BTN_MASK_SCROLL_DOWN (1<<QEMU_PVTABLET_BTN_SCROLL_DOWN)
/*
* QEMU_PVTABLET_MSG_INIT, host -> guest
* First message. Sent before any other event.
*/
typedef struct qemu_pvtablet_init {
uint32_t features; /* qemu_pvtablet_features */
uint32_t res_x; /* x axis resolution */
uint32_t res_y; /* y axis resolution */
uint32_t buttons_mask; /* mouse buttons available */
uint32_t max_pressure; /* 0 == no pressure supported */
uint32_t max_points; /* 1 == no multitouch */
uint8_t have_point_ids;
} qemu_pvtablet_init;
/*
* QEMU_PVTABLET_MSG_ACK, guest -> host
* Sent after pvtablet_init. Host will not send
* additional messages until this is received.
*/
typedef struct qemu_pvtablet_ack {
uint32_t features; /* qemu_pvtable_features */
};
/*
* QEMU_PVTABLET_MSG_BTN_{DOWN,UP}, host -> guest
* Send button press+release events.
*/
typedef struct qemu_pvtablet_button {
uint32_t button; /* which button was pressed/released */
uint32_t mask; /* which buttons are currently pressed */
} qemu_pvtablet_button;
/*
* QEMU_PVTABLET_MSG_POSITION, host -> guest
* Send pointer/finger move events.
*
* Multitouch devices without point id support send one message per
* touch point in each message group in unspecified order.
*
* Multitouch devices with point id support send messages only for
* touch points which did change. IDs are added by just using them
* for the first time. IDs are invalidated by using them in a "lift"
* message (aka pressure == 0).
*/
typedef struct qemu_pvtablet_position {
uint32_t pos_x;
uint32_t pos_y;
uint32_t pressure;
uint32_t point_id;
} qemu_pvtablet_position;
/*
* QEMU_PVTABLET_MSG_SYNC, host -> guest
* Marks the end of a message group which belongs together
* and carries the time stamp for all those events.
*
* The timestamp is specified in nanoseconds. Timebase is undefined.
* This is supposed to be used to figure how much time passed between
* two events, to decide whenever two mouse clicks should be
* interpreted as double click or not and simliar stuff.
*/
typedef struct qemu_pvtablet_sync {
uint64_t timestamp;
};
typedef struct qemu_pvtablet_header {
uint32_t size; /* whole message size */
uint32_t type; /* qemu_pvtablet_type */
} qemu_pvtablet_header;
typedef union qemu_pvtablet_payload {
qemu_pvtablet_init init;
qemu_pvtablet_ack ack;
qemu_pvtablet_position position;
qemu_pvtablet_button button;
};
typedef struct qemu_pvtablet_message {
qemu_pvtablet_header hdr;
qemu_pvtablet_payload data;
} qemu_pvtablet_message;
#endif /* __QEMU_PVTABLET__ */
next reply other threads:[~2011-01-14 16:35 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-14 16:35 Gerd Hoffmann [this message]
2011-01-14 20:48 ` [Qemu-devel] paravirtual tablet v3 Anthony Liguori
2011-01-17 8:19 ` Gerd Hoffmann
2011-01-17 15:02 ` Anthony Liguori
2011-01-18 13:46 ` Gerd Hoffmann
2011-01-18 15:20 ` Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D307B69.1030801@redhat.com \
--to=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=spice-devel@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.