From: "François Revol" <revol@free.fr>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] [RFC] usb-wacom
Date: Thu, 14 Aug 2008 04:21:55 +0200 CEST [thread overview]
Message-ID: <216579131-BeMail@laptop> (raw)
In-Reply-To: <48A392C1.2050107@codemonkey.ws>
[-- Attachment #1: Type: text/plain, Size: 2809 bytes --]
> Can you please send the patch to the mailing list attached as a
> text/plain attachment or inlined. Then we can review and possibly
> commit it.
Sorry, not used to this ml.
Here it is.
Btw, you top-posted ;)
François.
> François Revol wrote:
> > Hi there.
> > We use QEMU a lot to debug Haiku, http://haiku-os.org/
> > I also wrote a little php script that use it to demo images online,
> > serving a VNC java applet to connect to it with VNC.
> > http://dev.haiku-os.org/browser/haiku/trunk/3rdparty/mmu_man/onlinedemo/haiku.php
> > > > It's a bit like what live.OSZoo does, but simpler.
> >
> > To accomodate the VNC setup, I tried to use the usb tablet
> > emulation.
> > It turns out Haiku has a driver for Wacom tablets:
> >
> > http://dev.haiku-os.org/browser/haiku/trunk/src/add-ons/kernel/drivers/input/wacom
> > > > http://dev.haiku-os.org/browser/haiku/trunk/src/add-ons/input_server/devices/wacom
> > > >
> > However, it didn't really work very well with qemu's usb-wacom
> > code.
> >
> > First, mouse stayed in the top-left corner... Seems coords were set
> > to
> > 0,0 when no button is pressed, which is wrong, most tablets
> > actually
> > sense the stylus even when it's not yet touching the surface.
> >
> > Also, coords were wrong.
> > Our driver takes the pos from the hardware, and scales them from
> > model-
> > dependant hardcoded max values:
> > http://dev.haiku-os.org/browser/haiku/trunk/src/add-ons/input_server/devices/wacom/TabletDevice.cpp#L115
> > > > down to [0.0f, 1.0f], which represents the whole screen.
> > Since QEMU reports absolute mouse position scaled from screen size
> > to
> > INT16_MAX this didn't really work.
> > Now, I'm not sure those max values are correct for all Penpartner
> > devices, or if they were calibrated on a specific item.
> > Best would be to actually read them from the HID descriptor, but
> > QEMU
> > doesn't provide one, and I read some penpartner tablets actually
> > have
> > wrong descriptors anyway.
> >
> > Finaly, I fixed button handling according to our driver, not sure
> > all
> > drivers handle them the same. pressure indicates left button, and a
> > flag tells about right one. I mapped middle button to the eraser to
> > at
> > least be useful in tablet-aware software though I'm not sure it's
> > the
> > best way.
> >
> > And... oh well seems we don't need to tell we have a contact, the
> > driver assumes it always for penpartner so it seems correct.
> >
> > I left debug macro I used just in case.
> >
> > http://revolf.free.fr/beos/patches/qemu-usb-wacom-for-haiku.diff.txt
> > > >
> > Now at least it works perfectly with our driver, appart from high
> > cpu
> > usage but that's surely be fixed by polling less often.
> >
> > Comments ?
[-- Attachment #2: qemu-usb-wacom-for-haiku.diff.txt --]
[-- Type: text/plain, Size: 1567 bytes --]
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;
}
next prev parent reply other threads:[~2008-08-14 2:20 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-14 0:07 [Qemu-devel] [PATCH] [RFC] usb-wacom François Revol
2008-08-14 2:04 ` Anthony Liguori
2008-08-14 2:21 ` François Revol [this message]
2008-08-14 10:23 ` Jamie Lokier
2008-08-14 12:04 ` François Revol
2008-08-14 12:26 ` Jamie Lokier
2008-08-14 12:44 ` François Revol
2008-08-14 11:52 ` andrzej zaborowski
2008-08-14 12:17 ` François Revol
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=216579131-BeMail@laptop \
--to=revol@free.fr \
--cc=qemu-devel@nongnu.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.