qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Gentlemen we have absolute movement! was:Absolute USB-HID d


From: Brad Campbell
Subject: [Qemu-devel] Gentlemen we have absolute movement! was:Absolute USB-HID device musings (was Re: VNC Terminal Server)
Date: Mon, 10 Apr 2006 00:27:12 +0400
User-agent: Thunderbird 1.6a1 (X11/20060214)

Brad Campbell wrote:
Lonnie Mendez wrote:

  Please see the patch posted yesterday to this mailing list:

http://gnome.dnsalias.net/patches/qemu-hidmousexp.patch

Ta for that.. not sure how I missed it.
Now to try and get it to work..


Ok.. 1st cut.. it's not great, and it's not hooked up to anything at the moment (the mouse just tootles around the screen on a timer) BUT! we have absolute movement.

The *stunning* news is it's resolution independent.. 640x480 - 800x600 - 
1024x768
0,0 is top left and 7fff.7fff is bottom right.. no client scaling required..

Think I've figured out the Z axis thing also.. and we are good for relative 
movement on that still
(The Z axis below is way wrong, but I think I have figured it out)

static const uint8_t qemu_mouse_hid_report_descriptor[] = {
        0x05, 0x01, /* Usage Page Generic Desktop */
        0x09, 0x01, /* Usage Mouse */
        0xA1, 0x01, /* Collection Application */
        0x09, 0x01, /* Usage Pointer */
        0xA1, 0x00, /* Collection Physical */
        0x05, 0x09, /* Usage Page Button */
        0x19, 0x01, /* Usage Minimum Button 1 */
        0x29, 0x03, /* Usage Maximum Button 3 */
        0x15, 0x00, /* Logical Minimum 0 */
        0x25, 0x01, /* Logical Maximum 1 */
        0x95, 0x03, /* Report Count 3 */
        0x75, 0x01, /* Report Size 1 */
        0x81, 0x02, /* Input (Data, Var, Abs) */
        0x95, 0x01, /* Report Count 1 */
        0x75, 0x05, /* Report Size 5 */
        0x81, 0x01, /* Input (Cnst, Var, Abs) */
        0x05, 0x01, /* Usage Page Generic Desktop */
        0x09, 0x30, /* Usage X */
        0x09, 0x31, /* Usage Y */
        0x15, 0x00, /* Logical Minimum 0 */
        0x27, 0xFF, 0xFF, 0x00, 0x00, /* Logical Maximum 0xffff */
        0x75, 0x10, /* Report Size 32 */
        0x95, 0x02, /* Report Count 2 */
        0x81, 0x02, /* Input (Data, Var, Abs) */
//      0x09, 0x32, /* Usage Z */
//      0x15, 0x81, /* Logical Minimum -127 */
//      0x25, 0x7F, /* Logical Maximum 127 */
//      0x75, 0x08, /* Report Size 8 */
//      0x95, 0x01, /* Report Count 1 */
        0xC0,       /* End Collection */
        0xC0,       /* End Collection */
};
#endif

static int usb_mouse_poll(USBMouseState *s, uint8_t *buf, int len)
{
    int dx, dy, dz, b, l, aa, bb, cc, dd;

    dx = int_clamp(s->dx, -128, 127);
    dy = int_clamp(s->dy, -128, 127);
    dz = int_clamp(s->dz, -128, 127);

    s->dx -= dx;
    s->dy -= dy;
    s->dz -= dz;
    b = 0;
    if (s->buttons_state & MOUSE_EVENT_LBUTTON)
        b |= 0x01;
    if (s->buttons_state & MOUSE_EVENT_RBUTTON)
        b |= 0x02;
    if (s->buttons_state & MOUSE_EVENT_MBUTTON)
        b |= 0x04;

    buf[0] = b;
    buf[1] = s->X & 0xff;
    buf[2] = s->X >> 8;
    buf[3] = s->Y & 0xff;
    buf[4] = s->Y >> 8;
    aa=buf[1];
    bb=buf[2];
    cc=buf[3];
    dd=buf[4];
    l = 5;

    return l;
}

--
"Human beings, who are almost unique in having the ability
to learn from the experience of others, are also remarkable
for their apparent disinclination to do so." -- Douglas Adams




reply via email to

[Prev in Thread] Current Thread [Next in Thread]