Index: hw/usb-wacom.c =================================================================== --- hw/usb-wacom.c (révision 5002) +++ hw/usb-wacom.c (copie de travail) @@ -29,6 +29,16 @@ #include "console.h" #include "usb.h" +/* debug usb-wacom */ +//#define DEBUG_USB_WACOM + +#ifdef DEBUG_USB_WACOM +#define DPRINTF(fmt, args...) \ +do { printf("usb-wacom: " fmt , ##args); } while (0) +#else +#define DPRINTF(fmt, args...) +#endif + /* Interface requests */ #define WACOM_GET_REPORT 0x2101 #define WACOM_SET_REPORT 0x2109 @@ -132,8 +142,8 @@ { USBWacomState *s = opaque; - s->x = x; - s->y = y; + s->x = (x * 5040 / 0x7FFF); + s->y = (y * 3780 / 0x7FFF); s->dz += dz; s->buttons_state = buttons_state; } @@ -199,26 +209,22 @@ if (s->buttons_state & MOUSE_EVENT_LBUTTON) b |= 0x01; if (s->buttons_state & MOUSE_EVENT_RBUTTON) - b |= 0x02; + b |= 0x40; if (s->buttons_state & MOUSE_EVENT_MBUTTON) - b |= 0x04; + b |= 0x20; /* eraser */ if (len < 7) return 0; buf[0] = s->mode; - buf[5] = 0x00; - if (b) { - buf[1] = s->x & 0xff; - buf[2] = s->x >> 8; - buf[3] = s->y & 0xff; - buf[4] = s->y >> 8; + buf[5] = 0x00 | (b & 0xf0); + buf[1] = s->x & 0xff; + buf[2] = s->x >> 8; + buf[3] = s->y & 0xff; + buf[4] = s->y >> 8; + if (b & 0x3f) { buf[6] = 0; } else { - buf[1] = 0; - buf[2] = 0; - buf[3] = 0; - buf[4] = 0; buf[6] = (unsigned char) -127; }