[PATCH] hw: dev-wacom: Support wacom tablet emulation in linux qemu

Michael Trimarchi posted 1 patch 3 years, 9 months ago
Test docker-quick@centos7 failed
Test docker-mingw@fedora failed
Test checkpatch failed
Test FreeBSD failed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20200812152149.260163-1-michael@amarulasolutions.com
Maintainers: Gerd Hoffmann <kraxel@redhat.com>
hw/usb/dev-wacom.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 70 insertions(+)
[PATCH] hw: dev-wacom: Support wacom tablet emulation in linux qemu
Posted by Michael Trimarchi 3 years, 9 months ago
Linux need to fill up the hid descriptor in order to let
the driver be emulated. This patch was tested on top of
qemu 4.2.0 and recent linux kernel.

modprobe wacom.ko
evtest tool

Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
---
 hw/usb/dev-wacom.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/hw/usb/dev-wacom.c b/hw/usb/dev-wacom.c
index 8aba44b8bc..fe95699672 100644
--- a/hw/usb/dev-wacom.c
+++ b/hw/usb/dev-wacom.c
@@ -259,6 +259,64 @@ static void usb_wacom_handle_reset(USBDevice *dev)
     s->mode = WACOM_MODE_HID;
 }
 
+static const uint8_t qemu_wacom_hid_report_descriptor[] = {
+	0x05, 0x01,
+	0x09, 0x02,
+	0xa1, 0x01,
+	0x85, 0x01,
+	0x09, 0x01,
+	0xa1, 0x00,
+	0x05, 0x09,
+	0x19, 0x01,
+	0x29, 0x03,
+	0x15, 0x00,
+	0x25, 0x01,
+	0x95, 0x03,
+	0x75, 0x01,
+	0x81, 0x02,
+	0x95, 0x01,
+	0x75, 0x05,
+	0x81, 0x01,
+	0x05, 0x01,
+	0x09, 0x30,
+	0x09, 0x31,
+	0x09, 0x38,
+	0x15, 0x81,
+	0x25, 0x7f,
+	0x75, 0x08,
+	0x95, 0x03,
+	0x81, 0x06,
+	0x95, 0x03,
+	0x81, 0x01,
+	0xc0, 0xc0,
+	0x05, 0x0d,
+	0x09, 0x01,
+	0xa1, 0x01,
+	0x85, 0x02,
+	0xa1, 0x00,
+	0x06, 0x00,
+	0xff, 0x09,
+	0x01, 0x15,
+	0x00, 0x26,
+	0xff, 0x00,
+	0x75, 0x08,
+	0x95, 0x07,
+	0x81, 0x02,
+	0xc0, 0x09,
+	0x01, 0x85,
+	0x63, 0x95,
+	0x07, 0x81,
+	0x02, 0x09,
+	0x01, 0x85,
+	0x02, 0x95,
+	0x01, 0xb1,
+	0x02, 0x09,
+	0x01, 0x85,
+	0x03, 0x95,
+	0x01, 0xb1,
+	0x02, 0xc0,
+};
+
 static void usb_wacom_handle_control(USBDevice *dev, USBPacket *p,
                int request, int value, int index, int length, uint8_t *data)
 {
@@ -271,6 +329,18 @@ static void usb_wacom_handle_control(USBDevice *dev, USBPacket *p,
     }
 
     switch (request) {
+    case InterfaceRequest | USB_REQ_GET_DESCRIPTOR:
+        switch (value >> 8) {
+        case 0x22:
+                memcpy(data, qemu_wacom_hid_report_descriptor,
+                       sizeof(qemu_wacom_hid_report_descriptor));
+                p->actual_length = sizeof(qemu_wacom_hid_report_descriptor);
+            break;
+        default:
+            goto fail;
+        }
+        break;
+
     case WACOM_SET_REPORT:
         if (s->mouse_grabbed) {
             qemu_remove_mouse_event_handler(s->eh_entry);
-- 
2.25.1


Re: [PATCH] hw: dev-wacom: Support wacom tablet emulation in linux qemu
Posted by Gerd Hoffmann 3 years, 9 months ago
On Wed, Aug 12, 2020 at 05:21:49PM +0200, Michael Trimarchi wrote:
> Linux need to fill up the hid descriptor in order to let
> the driver be emulated. This patch was tested on top of
> qemu 4.2.0 and recent linux kernel.
> 
> modprobe wacom.ko
> evtest tool
> 
> Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
> ---
>  hw/usb/dev-wacom.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 70 insertions(+)
> 
> diff --git a/hw/usb/dev-wacom.c b/hw/usb/dev-wacom.c
> index 8aba44b8bc..fe95699672 100644
> --- a/hw/usb/dev-wacom.c
> +++ b/hw/usb/dev-wacom.c
> @@ -259,6 +259,64 @@ static void usb_wacom_handle_reset(USBDevice *dev)
>      s->mode = WACOM_MODE_HID;
>  }
>  
> +static const uint8_t qemu_wacom_hid_report_descriptor[] = {
> +	0x05, 0x01,
> +	0x09, 0x02,

Where does this come from?  Created from scratch?  Copied from real
wacom tablet?  Any chance this can get descriptive comments like the
other report descriptors (see dev-hid.c)?

thanks,
  Gerd


Re: [PATCH] hw: dev-wacom: Support wacom tablet emulation in linux qemu
Posted by Michael Nazzareno Trimarchi 3 years, 9 months ago
Hi Gerd

On Mon, Aug 17, 2020 at 8:47 AM Gerd Hoffmann <kraxel@redhat.com> wrote:
>
> On Wed, Aug 12, 2020 at 05:21:49PM +0200, Michael Trimarchi wrote:
> > Linux need to fill up the hid descriptor in order to let
> > the driver be emulated. This patch was tested on top of
> > qemu 4.2.0 and recent linux kernel.
> >
> > modprobe wacom.ko
> > evtest tool
> >
> > Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
> > ---
> >  hw/usb/dev-wacom.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 70 insertions(+)
> >
> > diff --git a/hw/usb/dev-wacom.c b/hw/usb/dev-wacom.c
> > index 8aba44b8bc..fe95699672 100644
> > --- a/hw/usb/dev-wacom.c
> > +++ b/hw/usb/dev-wacom.c
> > @@ -259,6 +259,64 @@ static void usb_wacom_handle_reset(USBDevice *dev)
> >      s->mode = WACOM_MODE_HID;
> >  }
> >
> > +static const uint8_t qemu_wacom_hid_report_descriptor[] = {
> > +     0x05, 0x01,
> > +     0x09, 0x02,
>
> Where does this come from?  Created from scratch?  Copied from real

No, there are dump of several descriptor on github. I will put in the
commit message

> wacom tablet?  Any chance this can get descriptive comments like the
> other report descriptors (see dev-hid.c)?

Yes, no problem. I will study a bit more. How was working before?

Michael

>
> thanks,
>   Gerd
>


-- 
Michael Nazzareno Trimarchi
Amarula Solutions BV
COO Co-Founder
Cruquiuskade 47 Amsterdam 1018 AM NL
T. +31(0)851119172
M. +39(0)3479132170
[`as] https://www.amarulasolutions.com

Re: [PATCH] hw: dev-wacom: Support wacom tablet emulation in linux qemu
Posted by Gerd Hoffmann 3 years, 9 months ago
  Hi,

> > > +static const uint8_t qemu_wacom_hid_report_descriptor[] = {
> > > +     0x05, 0x01,
> > > +     0x09, 0x02,
> >
> > Where does this come from?  Created from scratch?  Copied from real
> 
> No, there are dump of several descriptor on github. I will put in the
> commit message

A comment with a link would be good too.

> > wacom tablet?  Any chance this can get descriptive comments like the
> > other report descriptors (see dev-hid.c)?
> 
> Yes, no problem. I will study a bit more. How was working before?

I suspect in the past the linux driver simply checked the device id and
went with that without fetching the report descriptor.

Also note qemu has a generic tablet (-device usb-tablet), so there are
probably very few users using the wacom emulation.  Possibly it is
broken for quite a while already but nobody noticed ...

take care,
  Gerd


Re: [PATCH] hw: dev-wacom: Support wacom tablet emulation in linux qemu
Posted by Michael Nazzareno Trimarchi 3 years, 9 months ago
Hi Gerd

Have another small question. Do you know how force show cursor working
in this case?

Michael

On Mon, Aug 17, 2020 at 9:28 AM Gerd Hoffmann <kraxel@redhat.com> wrote:
>
>   Hi,
>
> > > > +static const uint8_t qemu_wacom_hid_report_descriptor[] = {
> > > > +     0x05, 0x01,
> > > > +     0x09, 0x02,
> > >
> > > Where does this come from?  Created from scratch?  Copied from real
> >
> > No, there are dump of several descriptor on github. I will put in the
> > commit message
>
> A comment with a link would be good too.
>
> > > wacom tablet?  Any chance this can get descriptive comments like the
> > > other report descriptors (see dev-hid.c)?
> >
> > Yes, no problem. I will study a bit more. How was working before?
>
> I suspect in the past the linux driver simply checked the device id and
> went with that without fetching the report descriptor.
>
> Also note qemu has a generic tablet (-device usb-tablet), so there are
> probably very few users using the wacom emulation.  Possibly it is
> broken for quite a while already but nobody noticed ...
>
> take care,
>   Gerd
>


-- 
Michael Nazzareno Trimarchi
Amarula Solutions BV
COO Co-Founder
Cruquiuskade 47 Amsterdam 1018 AM NL
T. +31(0)851119172
M. +39(0)3479132170
[`as] https://www.amarulasolutions.com

Re: [PATCH] hw: dev-wacom: Support wacom tablet emulation in linux qemu
Posted by Gerd Hoffmann 3 years, 9 months ago
On Mon, Aug 17, 2020 at 06:42:02PM +0200, Michael Nazzareno Trimarchi wrote:
> Hi Gerd
> 
> Have another small question. Do you know how force show cursor working
> in this case?

Which display and which vga do you use?

take care,
  Gerd


Re: [PATCH] hw: dev-wacom: Support wacom tablet emulation in linux qemu
Posted by Michael Nazzareno Trimarchi 3 years, 9 months ago
Hi

On Tue, Aug 18, 2020 at 8:02 AM Gerd Hoffmann <kraxel@redhat.com> wrote:
>
> On Mon, Aug 17, 2020 at 06:42:02PM +0200, Michael Nazzareno Trimarchi wrote:
> > Hi Gerd
> >
> > Have another small question. Do you know how force show cursor working
> > in this case?
>
> Which display and which vga do you use?

/usr/bin/qemu-system-i386 -M pc \
-enable-kvm -cpu host \
-m 1024 \
-vga std \
-global VGA.vgamem_mb=4 \
-kernel out/w_and_h_emulator/images/bzImage \
-drive file=out/w_and_h_emulator/images/rootfs.ext2,if=virtio,format=raw \
-append "root=/dev/vda console=" \
-net nic,model=virtio \
-net user,hostfwd=tcp::22222-:22,hostfwd=tcp::10000-:10000,hostfwd=tcp::10001-:10001
\
-usb -device usb-wacom-tablet \
-usb -device usb-host,vendorid=0x04d8,productid=0x000a -show-cursor

But I need to use the framebuffer. So what happens for instance in
software like ts_calibrate you can not see the cursor

Michael
>
> take care,
>   Gerd
>


-- 
Michael Nazzareno Trimarchi
Amarula Solutions BV
COO Co-Founder
Cruquiuskade 47 Amsterdam 1018 AM NL
T. +31(0)851119172
M. +39(0)3479132170
[`as] https://www.amarulasolutions.com

Re: [PATCH] hw: dev-wacom: Support wacom tablet emulation in linux qemu
Posted by Gerd Hoffmann 3 years, 9 months ago
  Hi,

> > > Have another small question. Do you know how force show cursor working
> > > in this case?
> >
> > Which display and which vga do you use?
> 
> -vga std \

So stdvga (has no hardware cursor support).

display not specified, so it is the default.
i.e. gtk or sdl depending on what configure finds.

> But I need to use the framebuffer. So what happens for instance in
> software like ts_calibrate you can not see the cursor

Does -vga virtio work better?

take care,
  Gerd


Re: [PATCH] hw: dev-wacom: Support wacom tablet emulation in linux qemu
Posted by Michael Nazzareno Trimarchi 3 years, 9 months ago
Hi


On Wed, Aug 19, 2020 at 7:52 AM Gerd Hoffmann <kraxel@redhat.com> wrote:
>
>   Hi,
>
> > > > Have another small question. Do you know how force show cursor working
> > > > in this case?
> > >
> > > Which display and which vga do you use?
> >
> > -vga std \
>
> So stdvga (has no hardware cursor support).
>
> display not specified, so it is the default.
> i.e. gtk or sdl depending on what configure finds.
>
> > But I need to use the framebuffer. So what happens for instance in
> > software like ts_calibrate you can not see the cursor
>
> Does -vga virtio work better?

pen("/dev/fb0", O_RDWR|O_LARGEFILE)    = 5
ioctl(5, FBIOGET_FSCREENINFO, 0x8055e40) = 0
ioctl(5, FBIOGET_VSCREENINFO, 0x8055da0) = 0
mmap2(NULL, 0, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = -1 EINVAL
(Invalid argument)
write(2, "mmap framebuffer", 16mmap framebuffer)        = 16
write(2, ": ", 2: )                       = 2
write(2, "Invalid argument", 16Invalid argument)        = 16
write(2, "\n", 1
)                       = 1

Michael

>
> take care,
>   Gerd
>


--
Michael Nazzareno Trimarchi
Amarula Solutions BV
COO Co-Founder
Cruquiuskade 47 Amsterdam 1018 AM NL
T. +31(0)851119172
M. +39(0)3479132170
[`as] https://www.amarulasolutions.com