qemu-devel
[Top][All Lists]
Advanced

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

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


From: Michael Trimarchi
Subject: [PATCH] hw: dev-wacom: Support wacom tablet emulation in linux qemu
Date: Wed, 12 Aug 2020 17:21:49 +0200

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




reply via email to

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