root / hw / usb-desc.h @ 7aff0f21
History | View | Annotate | Download (3.1 kB)
1 | 37fb59d3 | Gerd Hoffmann | #ifndef QEMU_HW_USB_DESC_H
|
---|---|---|---|
2 | 37fb59d3 | Gerd Hoffmann | #define QEMU_HW_USB_DESC_H
|
3 | 37fb59d3 | Gerd Hoffmann | |
4 | 37fb59d3 | Gerd Hoffmann | #include <inttypes.h> |
5 | 37fb59d3 | Gerd Hoffmann | |
6 | 37fb59d3 | Gerd Hoffmann | struct USBDescID {
|
7 | 37fb59d3 | Gerd Hoffmann | uint16_t idVendor; |
8 | 37fb59d3 | Gerd Hoffmann | uint16_t idProduct; |
9 | 37fb59d3 | Gerd Hoffmann | uint16_t bcdDevice; |
10 | 37fb59d3 | Gerd Hoffmann | uint8_t iManufacturer; |
11 | 37fb59d3 | Gerd Hoffmann | uint8_t iProduct; |
12 | 37fb59d3 | Gerd Hoffmann | uint8_t iSerialNumber; |
13 | 37fb59d3 | Gerd Hoffmann | }; |
14 | 37fb59d3 | Gerd Hoffmann | |
15 | 37fb59d3 | Gerd Hoffmann | struct USBDescDevice {
|
16 | 37fb59d3 | Gerd Hoffmann | uint16_t bcdUSB; |
17 | 37fb59d3 | Gerd Hoffmann | uint8_t bDeviceClass; |
18 | 37fb59d3 | Gerd Hoffmann | uint8_t bDeviceSubClass; |
19 | 37fb59d3 | Gerd Hoffmann | uint8_t bDeviceProtocol; |
20 | 37fb59d3 | Gerd Hoffmann | uint8_t bMaxPacketSize0; |
21 | 37fb59d3 | Gerd Hoffmann | uint8_t bNumConfigurations; |
22 | 37fb59d3 | Gerd Hoffmann | |
23 | 37fb59d3 | Gerd Hoffmann | const USBDescConfig *confs;
|
24 | 37fb59d3 | Gerd Hoffmann | }; |
25 | 37fb59d3 | Gerd Hoffmann | |
26 | 37fb59d3 | Gerd Hoffmann | struct USBDescConfig {
|
27 | 37fb59d3 | Gerd Hoffmann | uint8_t bNumInterfaces; |
28 | 37fb59d3 | Gerd Hoffmann | uint8_t bConfigurationValue; |
29 | 37fb59d3 | Gerd Hoffmann | uint8_t iConfiguration; |
30 | 37fb59d3 | Gerd Hoffmann | uint8_t bmAttributes; |
31 | 37fb59d3 | Gerd Hoffmann | uint8_t bMaxPower; |
32 | 37fb59d3 | Gerd Hoffmann | |
33 | 37fb59d3 | Gerd Hoffmann | uint8_t nif; |
34 | 37fb59d3 | Gerd Hoffmann | const USBDescIface *ifs;
|
35 | 37fb59d3 | Gerd Hoffmann | }; |
36 | 37fb59d3 | Gerd Hoffmann | |
37 | 37fb59d3 | Gerd Hoffmann | struct USBDescIface {
|
38 | 37fb59d3 | Gerd Hoffmann | uint8_t bInterfaceNumber; |
39 | 37fb59d3 | Gerd Hoffmann | uint8_t bAlternateSetting; |
40 | 37fb59d3 | Gerd Hoffmann | uint8_t bNumEndpoints; |
41 | 37fb59d3 | Gerd Hoffmann | uint8_t bInterfaceClass; |
42 | 37fb59d3 | Gerd Hoffmann | uint8_t bInterfaceSubClass; |
43 | 37fb59d3 | Gerd Hoffmann | uint8_t bInterfaceProtocol; |
44 | 37fb59d3 | Gerd Hoffmann | uint8_t iInterface; |
45 | 37fb59d3 | Gerd Hoffmann | |
46 | 37fb59d3 | Gerd Hoffmann | uint8_t ndesc; |
47 | 37fb59d3 | Gerd Hoffmann | USBDescOther *descs; |
48 | 37fb59d3 | Gerd Hoffmann | USBDescEndpoint *eps; |
49 | 37fb59d3 | Gerd Hoffmann | }; |
50 | 37fb59d3 | Gerd Hoffmann | |
51 | 37fb59d3 | Gerd Hoffmann | struct USBDescEndpoint {
|
52 | 37fb59d3 | Gerd Hoffmann | uint8_t bEndpointAddress; |
53 | 37fb59d3 | Gerd Hoffmann | uint8_t bmAttributes; |
54 | 37fb59d3 | Gerd Hoffmann | uint16_t wMaxPacketSize; |
55 | 37fb59d3 | Gerd Hoffmann | uint8_t bInterval; |
56 | 37fb59d3 | Gerd Hoffmann | }; |
57 | 37fb59d3 | Gerd Hoffmann | |
58 | 37fb59d3 | Gerd Hoffmann | struct USBDescOther {
|
59 | 37fb59d3 | Gerd Hoffmann | uint8_t length; |
60 | 37fb59d3 | Gerd Hoffmann | uint8_t *data; |
61 | 37fb59d3 | Gerd Hoffmann | }; |
62 | 37fb59d3 | Gerd Hoffmann | |
63 | 37fb59d3 | Gerd Hoffmann | typedef const char *USBDescStrings[256]; |
64 | 37fb59d3 | Gerd Hoffmann | |
65 | 37fb59d3 | Gerd Hoffmann | struct USBDesc {
|
66 | 37fb59d3 | Gerd Hoffmann | USBDescID id; |
67 | 37fb59d3 | Gerd Hoffmann | const USBDescDevice *full;
|
68 | 37fb59d3 | Gerd Hoffmann | const USBDescDevice *high;
|
69 | 37fb59d3 | Gerd Hoffmann | const char* const *str; |
70 | 37fb59d3 | Gerd Hoffmann | }; |
71 | 37fb59d3 | Gerd Hoffmann | |
72 | 37fb59d3 | Gerd Hoffmann | /* generate usb packages from structs */
|
73 | 37fb59d3 | Gerd Hoffmann | int usb_desc_device(const USBDescID *id, const USBDescDevice *dev, |
74 | 37fb59d3 | Gerd Hoffmann | uint8_t *dest, size_t len); |
75 | 25620cba | Gerd Hoffmann | int usb_desc_device_qualifier(const USBDescDevice *dev, |
76 | 25620cba | Gerd Hoffmann | uint8_t *dest, size_t len); |
77 | 37fb59d3 | Gerd Hoffmann | int usb_desc_config(const USBDescConfig *conf, uint8_t *dest, size_t len); |
78 | 37fb59d3 | Gerd Hoffmann | int usb_desc_iface(const USBDescIface *iface, uint8_t *dest, size_t len); |
79 | 37fb59d3 | Gerd Hoffmann | int usb_desc_endpoint(const USBDescEndpoint *ep, uint8_t *dest, size_t len); |
80 | 37fb59d3 | Gerd Hoffmann | int usb_desc_other(const USBDescOther *desc, uint8_t *dest, size_t len); |
81 | 37fb59d3 | Gerd Hoffmann | |
82 | 37fb59d3 | Gerd Hoffmann | /* control message emulation helpers */
|
83 | a980a065 | Gerd Hoffmann | void usb_desc_init(USBDevice *dev);
|
84 | 32d41919 | Gerd Hoffmann | void usb_desc_attach(USBDevice *dev);
|
85 | 132a3f55 | Gerd Hoffmann | void usb_desc_set_string(USBDevice *dev, uint8_t index, const char *str); |
86 | 132a3f55 | Gerd Hoffmann | const char *usb_desc_get_string(USBDevice *dev, uint8_t index); |
87 | 132a3f55 | Gerd Hoffmann | int usb_desc_string(USBDevice *dev, int index, uint8_t *dest, size_t len); |
88 | 37fb59d3 | Gerd Hoffmann | int usb_desc_get_descriptor(USBDevice *dev, int value, uint8_t *dest, size_t len); |
89 | 37fb59d3 | Gerd Hoffmann | int usb_desc_handle_control(USBDevice *dev, int request, int value, |
90 | 37fb59d3 | Gerd Hoffmann | int index, int length, uint8_t *data); |
91 | 37fb59d3 | Gerd Hoffmann | |
92 | 37fb59d3 | Gerd Hoffmann | #endif /* QEMU_HW_USB_DESC_H */ |