Skip to content

Commit

Permalink
hw/usb: Regroup USB HID protocol values
Browse files Browse the repository at this point in the history
Group some HID values that are used pretty much everywhere when
dealing with HID devices.

Signed-off-by: César Belley <cesar.belley@lse.epita.fr>
Message-id: 20200812094135.20550-2-cesar.belley@lse.epita.fr
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
  • Loading branch information
Agnoctopus authored and kraxel committed Aug 31, 2020
1 parent 10b2d90 commit 84b6c23
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 28 deletions.
26 changes: 7 additions & 19 deletions hw/usb/dev-hid.c
Expand Up @@ -32,21 +32,9 @@
#include "qemu/module.h"
#include "qemu/timer.h"
#include "hw/input/hid.h"
#include "hw/usb/hid.h"
#include "hw/qdev-properties.h"

/* HID interface requests */
#define GET_REPORT 0xa101
#define GET_IDLE 0xa102
#define GET_PROTOCOL 0xa103
#define SET_REPORT 0x2109
#define SET_IDLE 0x210a
#define SET_PROTOCOL 0x210b

/* HID descriptor types */
#define USB_DT_HID 0x21
#define USB_DT_REPORT 0x22
#define USB_DT_PHY 0x23

typedef struct USBHIDState {
USBDevice dev;
USBEndpoint *intr;
Expand Down Expand Up @@ -618,38 +606,38 @@ static void usb_hid_handle_control(USBDevice *dev, USBPacket *p,
goto fail;
}
break;
case GET_REPORT:
case HID_GET_REPORT:
if (hs->kind == HID_MOUSE || hs->kind == HID_TABLET) {
p->actual_length = hid_pointer_poll(hs, data, length);
} else if (hs->kind == HID_KEYBOARD) {
p->actual_length = hid_keyboard_poll(hs, data, length);
}
break;
case SET_REPORT:
case HID_SET_REPORT:
if (hs->kind == HID_KEYBOARD) {
p->actual_length = hid_keyboard_write(hs, data, length);
} else {
goto fail;
}
break;
case GET_PROTOCOL:
case HID_GET_PROTOCOL:
if (hs->kind != HID_KEYBOARD && hs->kind != HID_MOUSE) {
goto fail;
}
data[0] = hs->protocol;
p->actual_length = 1;
break;
case SET_PROTOCOL:
case HID_SET_PROTOCOL:
if (hs->kind != HID_KEYBOARD && hs->kind != HID_MOUSE) {
goto fail;
}
hs->protocol = value;
break;
case GET_IDLE:
case HID_GET_IDLE:
data[0] = hs->idle;
p->actual_length = 1;
break;
case SET_IDLE:
case HID_SET_IDLE:
hs->idle = (uint8_t) (value >> 8);
hid_set_next_idle(hs);
if (hs->kind == HID_MOUSE || hs->kind == HID_TABLET) {
Expand Down
12 changes: 3 additions & 9 deletions hw/usb/dev-wacom.c
Expand Up @@ -29,6 +29,7 @@
#include "qemu/osdep.h"
#include "ui/console.h"
#include "hw/usb.h"
#include "hw/usb/hid.h"
#include "migration/vmstate.h"
#include "qemu/module.h"
#include "desc.h"
Expand All @@ -37,13 +38,6 @@
#define WACOM_GET_REPORT 0x2101
#define WACOM_SET_REPORT 0x2109

/* HID interface requests */
#define HID_GET_REPORT 0xa101
#define HID_GET_IDLE 0xa102
#define HID_GET_PROTOCOL 0xa103
#define HID_SET_IDLE 0x210a
#define HID_SET_PROTOCOL 0x210b

typedef struct USBWacomState {
USBDevice dev;
USBEndpoint *intr;
Expand Down Expand Up @@ -86,11 +80,11 @@ static const USBDescIface desc_iface_wacom = {
/* HID descriptor */
.data = (uint8_t[]) {
0x09, /* u8 bLength */
0x21, /* u8 bDescriptorType */
USB_DT_HID, /* u8 bDescriptorType */
0x01, 0x10, /* u16 HID_class */
0x00, /* u8 country_code */
0x01, /* u8 num_descriptors */
0x22, /* u8 type: Report */
USB_DT_REPORT, /* u8 type: Report */
0x6e, 0, /* u16 len */
},
},
Expand Down
17 changes: 17 additions & 0 deletions include/hw/usb/hid.h
@@ -0,0 +1,17 @@
#ifndef HW_USB_HID_H
#define HW_USB_HID_H

/* HID interface requests */
#define HID_GET_REPORT 0xa101
#define HID_GET_IDLE 0xa102
#define HID_GET_PROTOCOL 0xa103
#define HID_SET_REPORT 0x2109
#define HID_SET_IDLE 0x210a
#define HID_SET_PROTOCOL 0x210b

/* HID descriptor types */
#define USB_DT_HID 0x21
#define USB_DT_REPORT 0x22
#define USB_DT_PHY 0x23

#endif

0 comments on commit 84b6c23

Please sign in to comment.