libnx  v4.2.2
usb.h
Go to the documentation of this file.
1 /**
2  * @file usb.h
3  * @brief Common USB (usb:*) service IPC header.
4  * @author SciresM, yellows8
5  * @copyright libnx Authors
6  */
7 #pragma once
8 #include "../types.h"
9 
10 /// Names starting with "libusb" were changed to "usb" to avoid collision with actual libusb if it's ever used.
11 
12 /// Imported from libusb with changed names.
13 /* Descriptor sizes per descriptor type */
14 #define USB_DT_INTERFACE_SIZE 9
15 #define USB_DT_ENDPOINT_SIZE 7
16 #define USB_DT_DEVICE_SIZE 0x12
17 #define USB_DT_SS_ENDPOINT_COMPANION_SIZE 6
18 
19 #define USB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */
20 #define USB_ENDPOINT_DIR_MASK 0x80
21 
22 #define USB_TRANSFER_TYPE_MASK 0x03 /* in bmAttributes */
23 
24 /// Imported from libusb, with some adjustments.
26  uint8_t bLength;
27  uint8_t bDescriptorType; ///< Must match USB_DT_ENDPOINT.
28  uint8_t bEndpointAddress; ///< Should be one of the usb_endpoint_direction values, the endpoint-number is automatically allocated.
29  uint8_t bmAttributes;
30  uint16_t wMaxPacketSize;
31  uint8_t bInterval;
32 } PACKED;
33 
34 /// Imported from libusb, with some adjustments.
36  uint8_t bLength;
37  uint8_t bDescriptorType; ///< Must match USB_DT_INTERFACE.
38  uint8_t bInterfaceNumber; ///< See also USBDS_DEFAULT_InterfaceNumber.
39  uint8_t bAlternateSetting; ///< Must match 0.
40  uint8_t bNumEndpoints;
41  uint8_t bInterfaceClass;
42  uint8_t bInterfaceSubClass;
43  uint8_t bInterfaceProtocol;
44  uint8_t iInterface; ///< Ignored.
45 };
46 
47 /// Imported from libusb, with some adjustments.
49  uint8_t bLength;
50  uint8_t bDescriptorType; ///< Must match USB_DT_Device.
51  uint16_t bcdUSB;
52  uint8_t bDeviceClass;
53  uint8_t bDeviceSubClass;
54  uint8_t bDeviceProtocol;
55  uint8_t bMaxPacketSize0;
56  uint16_t idVendor;
57  uint16_t idProduct;
58  uint16_t bcdDevice;
59  uint8_t iManufacturer;
60  uint8_t iProduct;
61  uint8_t iSerialNumber;
62  uint8_t bNumConfigurations;
63 };
64 
65 /// Imported from libusb, with some adjustments.
67  uint8_t bLength;
68  uint8_t bDescriptorType;
69  uint16_t wTotalLength;
70  uint8_t bNumInterfaces;
71  uint8_t bConfigurationValue;
72  uint8_t iConfiguration;
73  uint8_t bmAttributes;
74  uint8_t MaxPower;
75 } PACKED;
76 
77 /// Imported from libusb, with some adjustments.
79  uint8_t bLength;
80  uint8_t bDescriptorType; ///< Must match USB_DT_SS_ENDPOINT_COMPANION.
81  uint8_t bMaxBurst;
82  uint8_t bmAttributes;
83  uint16_t wBytesPerInterval;
84 };
85 
86 /// Imported from libusb, with some adjustments.
88  uint8_t bLength;
89  uint8_t bDescriptorType; ///< Must match USB_DT_STRING.
90  uint16_t wData[0x40];
91 };
92 
93 /// Imported from libusb, with changed names.
95  USB_CLASS_PER_INTERFACE = 0,
96  USB_CLASS_AUDIO = 1,
97  USB_CLASS_COMM = 2,
98  USB_CLASS_HID = 3,
99  USB_CLASS_PHYSICAL = 5,
100  USB_CLASS_PRINTER = 7,
101  USB_CLASS_PTP = 6, /* legacy name from libusb-0.1 usb.h */
102  USB_CLASS_IMAGE = 6,
103  USB_CLASS_MASS_STORAGE = 8,
104  USB_CLASS_HUB = 9,
105  USB_CLASS_DATA = 10,
106  USB_CLASS_SMART_CARD = 0x0b,
107  USB_CLASS_CONTENT_SECURITY = 0x0d,
108  USB_CLASS_VIDEO = 0x0e,
109  USB_CLASS_PERSONAL_HEALTHCARE = 0x0f,
110  USB_CLASS_DIAGNOSTIC_DEVICE = 0xdc,
111  USB_CLASS_WIRELESS = 0xe0,
112  USB_CLASS_APPLICATION = 0xfe,
113  USB_CLASS_VENDOR_SPEC = 0xff
114 };
115 
116 /// Imported from libusb, with changed names.
118  USB_DT_DEVICE = 0x01,
119  USB_DT_CONFIG = 0x02,
120  USB_DT_STRING = 0x03,
121  USB_DT_INTERFACE = 0x04,
122  USB_DT_ENDPOINT = 0x05,
123  USB_DT_BOS = 0x0f,
124  USB_DT_DEVICE_CAPABILITY = 0x10,
125  USB_DT_HID = 0x21,
126  USB_DT_REPORT = 0x22,
127  USB_DT_PHYSICAL = 0x23,
128  USB_DT_HUB = 0x29,
129  USB_DT_SUPERSPEED_HUB = 0x2a,
130  USB_DT_SS_ENDPOINT_COMPANION = 0x30
131 };
132 
133 /// Imported from libusb, with changed names.
135  USB_ENDPOINT_IN = 0x80,
136  USB_ENDPOINT_OUT = 0x00
137 };
138 
139 /// Imported from libusb, with changed names.
141  USB_TRANSFER_TYPE_CONTROL = 0,
142  USB_TRANSFER_TYPE_ISOCHRONOUS = 1,
143  USB_TRANSFER_TYPE_BULK = 2,
144  USB_TRANSFER_TYPE_INTERRUPT = 3,
145  USB_TRANSFER_TYPE_BULK_STREAM = 4,
146 };
147 
148 /// Imported from libusb, with changed names.
150  /** Request status of the specific recipient */
152 
153  /** Clear or disable a specific feature */
155 
156  /* 0x02 is reserved */
157 
158  /** Set or enable a specific feature */
160 
161  /* 0x04 is reserved */
162 
163  /** Set device address for all future accesses */
165 
166  /** Get the specified descriptor */
168 
169  /** Used to update existing descriptors or add new descriptors */
171 
172  /** Get the current device configuration value */
174 
175  /** Set device configuration */
177 
178  /** Return the selected alternate setting for the specified interface */
180 
181  /** Select an alternate interface for the specified interface */
183 
184  /** Set then report an endpoint's synchronization frame */
186 
187  /** Sets both the U1 and U2 Exit Latency */
189 
190  /** Delay from the time a host transmits a packet to the time it is
191  * received by the device. */
193 };
194 
195 /// Imported from libusb, with changed names.
197  USB_ISO_SYNC_TYPE_NONE = 0,
198  USB_ISO_SYNC_TYPE_ASYNC = 1,
199  USB_ISO_SYNC_TYPE_ADAPTIVE = 2,
200  USB_ISO_SYNC_TYPE_SYNC = 3
201 };
202 
203 /// Imported from libusb, with changed names.
205  USB_ISO_USAGE_TYPE_DATA = 0,
206  USB_ISO_USAGE_TYPE_FEEDBACK = 1,
207  USB_ISO_USAGE_TYPE_IMPLICIT = 2,
208 };
209 
210 /// USB Device States, per USB 2.0 spec
211 typedef enum {
212  UsbState_Detached = 0, ///< Device is not attached to USB.
213  UsbState_Attached = 1, ///< Device is attached, but is not powered.
214  UsbState_Powered = 2, ///< Device is attached and powered, but has not been reset.
215  UsbState_Default = 3, ///< Device is attached, powered, and has been reset, but does not have an address.
216  UsbState_Address = 4, ///< Device is attached, powered, has been reset, has an address, but is not configured.
217  UsbState_Configured = 5, ///< Device is attached, powered, has been reset, has an address, configured, and may be used.
218  UsbState_Suspended = 6, ///< Device is attached and powered, but has not seen bus activity for 3ms. Device is suspended and cannot be used.
219 } UsbState;
220 
USB_REQUEST_GET_STATUS
@ USB_REQUEST_GET_STATUS
Request status of the specific recipient.
Definition: usb.h:151
USB_REQUEST_SYNCH_FRAME
@ USB_REQUEST_SYNCH_FRAME
Set then report an endpoint's synchronization frame.
Definition: usb.h:185
USB_REQUEST_GET_INTERFACE
@ USB_REQUEST_GET_INTERFACE
Return the selected alternate setting for the specified interface.
Definition: usb.h:179
USB_REQUEST_CLEAR_FEATURE
@ USB_REQUEST_CLEAR_FEATURE
Clear or disable a specific feature.
Definition: usb.h:154
usb_descriptor_type
usb_descriptor_type
Imported from libusb, with changed names.
Definition: usb.h:117
USB_REQUEST_SET_SEL
@ USB_REQUEST_SET_SEL
Sets both the U1 and U2 Exit Latency.
Definition: usb.h:188
USB_REQUEST_SET_DESCRIPTOR
@ USB_REQUEST_SET_DESCRIPTOR
Used to update existing descriptors or add new descriptors.
Definition: usb.h:170
USB_REQUEST_GET_CONFIGURATION
@ USB_REQUEST_GET_CONFIGURATION
Get the current device configuration value.
Definition: usb.h:173
usb_endpoint_descriptor
Imported from libusb, with some adjustments.
Definition: usb.h:25
usb_interface_descriptor::bAlternateSetting
uint8_t bAlternateSetting
Must match 0.
Definition: usb.h:39
usb_standard_request
usb_standard_request
Imported from libusb, with changed names.
Definition: usb.h:149
USB_REQUEST_SET_FEATURE
@ USB_REQUEST_SET_FEATURE
Set or enable a specific feature.
Definition: usb.h:159
usb_endpoint_descriptor::bDescriptorType
uint8_t bDescriptorType
Must match USB_DT_ENDPOINT.
Definition: usb.h:27
USB_REQUEST_SET_ADDRESS
@ USB_REQUEST_SET_ADDRESS
Set device address for all future accesses.
Definition: usb.h:164
usb_interface_descriptor
Imported from libusb, with some adjustments.
Definition: usb.h:35
UsbState_Default
@ UsbState_Default
Device is attached, powered, and has been reset, but does not have an address.
Definition: usb.h:215
usb_class_code
usb_class_code
Imported from libusb, with changed names.
Definition: usb.h:94
usb_device_descriptor
Imported from libusb, with some adjustments.
Definition: usb.h:48
usb_ss_endpoint_companion_descriptor::bDescriptorType
uint8_t bDescriptorType
Must match USB_DT_SS_ENDPOINT_COMPANION.
Definition: usb.h:80
USB_SET_ISOCH_DELAY
@ USB_SET_ISOCH_DELAY
Delay from the time a host transmits a packet to the time it is received by the device.
Definition: usb.h:192
UsbState_Attached
@ UsbState_Attached
Device is attached, but is not powered.
Definition: usb.h:213
usb_interface_descriptor::bInterfaceNumber
uint8_t bInterfaceNumber
See also USBDS_DEFAULT_InterfaceNumber.
Definition: usb.h:38
UsbState_Powered
@ UsbState_Powered
Device is attached and powered, but has not been reset.
Definition: usb.h:214
UsbState_Suspended
@ UsbState_Suspended
Device is attached and powered, but has not seen bus activity for 3ms. Device is suspended and cannot...
Definition: usb.h:218
UsbState_Address
@ UsbState_Address
Device is attached, powered, has been reset, has an address, but is not configured.
Definition: usb.h:216
usb_string_descriptor::bDescriptorType
uint8_t bDescriptorType
Must match USB_DT_STRING.
Definition: usb.h:89
USB_REQUEST_GET_DESCRIPTOR
@ USB_REQUEST_GET_DESCRIPTOR
Get the specified descriptor.
Definition: usb.h:167
UsbState
UsbState
USB Device States, per USB 2.0 spec.
Definition: usb.h:211
usb_iso_sync_type
usb_iso_sync_type
Imported from libusb, with changed names.
Definition: usb.h:196
usb_interface_descriptor::iInterface
uint8_t iInterface
Ignored.
Definition: usb.h:44
usb_endpoint_descriptor::bEndpointAddress
uint8_t bEndpointAddress
Should be one of the usb_endpoint_direction values, the endpoint-number is automatically allocated.
Definition: usb.h:28
PACKED
#define PACKED
Packs a struct so that it won't include padding bytes.
Definition: types.h:63
usb_interface_descriptor::bDescriptorType
uint8_t bDescriptorType
Must match USB_DT_INTERFACE.
Definition: usb.h:37
usb_device_descriptor::bDescriptorType
uint8_t bDescriptorType
Must match USB_DT_Device.
Definition: usb.h:50
usb_endpoint_direction
usb_endpoint_direction
Imported from libusb, with changed names.
Definition: usb.h:134
usb_transfer_type
usb_transfer_type
Imported from libusb, with changed names.
Definition: usb.h:140
USB_REQUEST_SET_CONFIGURATION
@ USB_REQUEST_SET_CONFIGURATION
Set device configuration.
Definition: usb.h:176
usb_iso_usage_type
usb_iso_usage_type
Imported from libusb, with changed names.
Definition: usb.h:204
UsbState_Detached
@ UsbState_Detached
Device is not attached to USB.
Definition: usb.h:212
UsbState_Configured
@ UsbState_Configured
Device is attached, powered, has been reset, has an address, configured, and may be used.
Definition: usb.h:217
usb_string_descriptor
Imported from libusb, with some adjustments.
Definition: usb.h:87
usb_ss_endpoint_companion_descriptor
Imported from libusb, with some adjustments.
Definition: usb.h:78
USB_REQUEST_SET_INTERFACE
@ USB_REQUEST_SET_INTERFACE
Select an alternate interface for the specified interface.
Definition: usb.h:182
usb_config_descriptor
Imported from libusb, with some adjustments.
Definition: usb.h:66