On 01/13/2011 04:19 AM, Gerd Hoffmann wrote:
  Hi,

Just throwing a quick writeup into the ring to kickstart the design discussion ;)

cheers,
  Gerd
#ifndef __QEMU_PVTABLET__
#define __QEMU_PVTABLET__ 1

/*
  * qemu patavirtual tablet interface
  */

#include<inttypes.h>

/* our virtio-serial channel */
#define QEMU_PVTABLET_NAME "org.qemu.pvtablet.0"

enum qemu_pvtablet_buttons {
     QEMU_PVTABLET_BTN_LEFT,
     QEMU_PVTABLET_BTN_RIGHT,
     QEMU_PVTABLET_BTN_MIDDLE,
     /*
      * we can handle up to 32 buttons although
      * not every has a individual name;)
      */
};

/* send button down+up events */
typedef struct qemu_pvtablet_button {
     uint32_t button;
     uint32_t mask;
} qemu_pvtablet_button;

/* send pointer move events */
typedef struct qemu_pvtablet_position {
     uint32_t pos_x;  /* range: 0 ->  0xffff */
     uint32_t pos_y;  /* range: 0 ->  0xffff */
} qemu_pvtablet_position;


Let's add feature negotiation and not hardcode the resolution.

typedef enum qemu_pvtablet_features {
    /* None yet */
};

/* host->guest, sent before any other events */
typedef struct qemu_pvtablet_init {
    uint32_t res_x;   /* x axis resolution */
    uint32_t res_y;   /* y axis resolution */
    uint32_t features;  /* qemu_pvtablet_features */
} qemu_pvtablet_init;

/* 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 */
};


enum qemu_pvtablet_type {
     QEMU_PVTABLET_MSG_MOVE,     /* qemu_pvtablet_position */
     QEMU_PVTABLET_MSG_BTN_DOWN, /* qemu_pvtablet_button */
     QEMU_PVTABLET_MSG_BTN_UP,   /* qemu_pvtablet_button */
       QEMU_PVTABLET_MSG_INIT,   /* qemu_pvtable_init */
       QEMU_PVTABLE_MSG_ACK, /* qemu_pvtable_ack */

Regards,

Anthony Liguori

};

typedef struct qemu_pvtablet_message {
     uint32_t size;            /* whole message size */
     uint32_t type;            /* qemu_pvtablet_type */
     uint64_t tv_secs;
     uint64_t tv_usecs;
     union {
         qemu_pvtablet_position position;
         qemu_pvtablet_button   button;
         qemu_pvtablet_display  display;
     } m;
} qemu_pvtablet_message;



#endif /* __QEMU_PVTABLET__ */


Reply via email to