diff options
Diffstat (limited to 'lib/usbhost/USB_Host_Shield_2.0/usb_ch9.h')
-rw-r--r-- | lib/usbhost/USB_Host_Shield_2.0/usb_ch9.h | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/lib/usbhost/USB_Host_Shield_2.0/usb_ch9.h b/lib/usbhost/USB_Host_Shield_2.0/usb_ch9.h new file mode 100644 index 000000000..18f2d3e2e --- /dev/null +++ b/lib/usbhost/USB_Host_Shield_2.0/usb_ch9.h | |||
@@ -0,0 +1,166 @@ | |||
1 | /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved. | ||
2 | |||
3 | This software may be distributed and modified under the terms of the GNU | ||
4 | General Public License version 2 (GPL2) as published by the Free Software | ||
5 | Foundation and appearing in the file GPL2.TXT included in the packaging of | ||
6 | this file. Please note that GPL2 Section 2[b] requires that all works based | ||
7 | on this software must also be made publicly available under the terms of | ||
8 | the GPL2 ("Copyleft"). | ||
9 | |||
10 | Contact information | ||
11 | ------------------- | ||
12 | |||
13 | Circuits At Home, LTD | ||
14 | Web : http://www.circuitsathome.com | ||
15 | e-mail : support@circuitsathome.com | ||
16 | */ | ||
17 | |||
18 | #if !defined(_usb_h_) || defined(_ch9_h_) | ||
19 | #error "Never include usb_ch9.h directly; include Usb.h instead" | ||
20 | #else | ||
21 | |||
22 | /* USB chapter 9 structures */ | ||
23 | #define _ch9_h_ | ||
24 | |||
25 | /* Misc.USB constants */ | ||
26 | #define DEV_DESCR_LEN 18 //device descriptor length | ||
27 | #define CONF_DESCR_LEN 9 //configuration descriptor length | ||
28 | #define INTR_DESCR_LEN 9 //interface descriptor length | ||
29 | #define EP_DESCR_LEN 7 //endpoint descriptor length | ||
30 | |||
31 | /* Standard Device Requests */ | ||
32 | |||
33 | #define USB_REQUEST_GET_STATUS 0 // Standard Device Request - GET STATUS | ||
34 | #define USB_REQUEST_CLEAR_FEATURE 1 // Standard Device Request - CLEAR FEATURE | ||
35 | #define USB_REQUEST_SET_FEATURE 3 // Standard Device Request - SET FEATURE | ||
36 | #define USB_REQUEST_SET_ADDRESS 5 // Standard Device Request - SET ADDRESS | ||
37 | #define USB_REQUEST_GET_DESCRIPTOR 6 // Standard Device Request - GET DESCRIPTOR | ||
38 | #define USB_REQUEST_SET_DESCRIPTOR 7 // Standard Device Request - SET DESCRIPTOR | ||
39 | #define USB_REQUEST_GET_CONFIGURATION 8 // Standard Device Request - GET CONFIGURATION | ||
40 | #define USB_REQUEST_SET_CONFIGURATION 9 // Standard Device Request - SET CONFIGURATION | ||
41 | #define USB_REQUEST_GET_INTERFACE 10 // Standard Device Request - GET INTERFACE | ||
42 | #define USB_REQUEST_SET_INTERFACE 11 // Standard Device Request - SET INTERFACE | ||
43 | #define USB_REQUEST_SYNCH_FRAME 12 // Standard Device Request - SYNCH FRAME | ||
44 | |||
45 | #define USB_FEATURE_ENDPOINT_HALT 0 // CLEAR/SET FEATURE - Endpoint Halt | ||
46 | #define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // CLEAR/SET FEATURE - Device remote wake-up | ||
47 | #define USB_FEATURE_TEST_MODE 2 // CLEAR/SET FEATURE - Test mode | ||
48 | |||
49 | /* Setup Data Constants */ | ||
50 | |||
51 | #define USB_SETUP_HOST_TO_DEVICE 0x00 // Device Request bmRequestType transfer direction - host to device transfer | ||
52 | #define USB_SETUP_DEVICE_TO_HOST 0x80 // Device Request bmRequestType transfer direction - device to host transfer | ||
53 | #define USB_SETUP_TYPE_STANDARD 0x00 // Device Request bmRequestType type - standard | ||
54 | #define USB_SETUP_TYPE_CLASS 0x20 // Device Request bmRequestType type - class | ||
55 | #define USB_SETUP_TYPE_VENDOR 0x40 // Device Request bmRequestType type - vendor | ||
56 | #define USB_SETUP_RECIPIENT_DEVICE 0x00 // Device Request bmRequestType recipient - device | ||
57 | #define USB_SETUP_RECIPIENT_INTERFACE 0x01 // Device Request bmRequestType recipient - interface | ||
58 | #define USB_SETUP_RECIPIENT_ENDPOINT 0x02 // Device Request bmRequestType recipient - endpoint | ||
59 | #define USB_SETUP_RECIPIENT_OTHER 0x03 // Device Request bmRequestType recipient - other | ||
60 | |||
61 | /* USB descriptors */ | ||
62 | |||
63 | #define USB_DESCRIPTOR_DEVICE 0x01 // bDescriptorType for a Device Descriptor. | ||
64 | #define USB_DESCRIPTOR_CONFIGURATION 0x02 // bDescriptorType for a Configuration Descriptor. | ||
65 | #define USB_DESCRIPTOR_STRING 0x03 // bDescriptorType for a String Descriptor. | ||
66 | #define USB_DESCRIPTOR_INTERFACE 0x04 // bDescriptorType for an Interface Descriptor. | ||
67 | #define USB_DESCRIPTOR_ENDPOINT 0x05 // bDescriptorType for an Endpoint Descriptor. | ||
68 | #define USB_DESCRIPTOR_DEVICE_QUALIFIER 0x06 // bDescriptorType for a Device Qualifier. | ||
69 | #define USB_DESCRIPTOR_OTHER_SPEED 0x07 // bDescriptorType for a Other Speed Configuration. | ||
70 | #define USB_DESCRIPTOR_INTERFACE_POWER 0x08 // bDescriptorType for Interface Power. | ||
71 | #define USB_DESCRIPTOR_OTG 0x09 // bDescriptorType for an OTG Descriptor. | ||
72 | |||
73 | #define HID_DESCRIPTOR_HID 0x21 | ||
74 | |||
75 | |||
76 | |||
77 | /* OTG SET FEATURE Constants */ | ||
78 | #define OTG_FEATURE_B_HNP_ENABLE 3 // SET FEATURE OTG - Enable B device to perform HNP | ||
79 | #define OTG_FEATURE_A_HNP_SUPPORT 4 // SET FEATURE OTG - A device supports HNP | ||
80 | #define OTG_FEATURE_A_ALT_HNP_SUPPORT 5 // SET FEATURE OTG - Another port on the A device supports HNP | ||
81 | |||
82 | /* USB Endpoint Transfer Types */ | ||
83 | #define USB_TRANSFER_TYPE_CONTROL 0x00 // Endpoint is a control endpoint. | ||
84 | #define USB_TRANSFER_TYPE_ISOCHRONOUS 0x01 // Endpoint is an isochronous endpoint. | ||
85 | #define USB_TRANSFER_TYPE_BULK 0x02 // Endpoint is a bulk endpoint. | ||
86 | #define USB_TRANSFER_TYPE_INTERRUPT 0x03 // Endpoint is an interrupt endpoint. | ||
87 | #define bmUSB_TRANSFER_TYPE 0x03 // bit mask to separate transfer type from ISO attributes | ||
88 | |||
89 | |||
90 | /* Standard Feature Selectors for CLEAR_FEATURE Requests */ | ||
91 | #define USB_FEATURE_ENDPOINT_STALL 0 // Endpoint recipient | ||
92 | #define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // Device recipient | ||
93 | #define USB_FEATURE_TEST_MODE 2 // Device recipient | ||
94 | |||
95 | /* descriptor data structures */ | ||
96 | |||
97 | /* Device descriptor structure */ | ||
98 | typedef struct { | ||
99 | uint8_t bLength; // Length of this descriptor. | ||
100 | uint8_t bDescriptorType; // DEVICE descriptor type (USB_DESCRIPTOR_DEVICE). | ||
101 | uint16_t bcdUSB; // USB Spec Release Number (BCD). | ||
102 | uint8_t bDeviceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific. | ||
103 | uint8_t bDeviceSubClass; // Subclass code (assigned by the USB-IF). | ||
104 | uint8_t bDeviceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific. | ||
105 | uint8_t bMaxPacketSize0; // Maximum packet size for endpoint 0. | ||
106 | uint16_t idVendor; // Vendor ID (assigned by the USB-IF). | ||
107 | uint16_t idProduct; // Product ID (assigned by the manufacturer). | ||
108 | uint16_t bcdDevice; // Device release number (BCD). | ||
109 | uint8_t iManufacturer; // Index of String Descriptor describing the manufacturer. | ||
110 | uint8_t iProduct; // Index of String Descriptor describing the product. | ||
111 | uint8_t iSerialNumber; // Index of String Descriptor with the device's serial number. | ||
112 | uint8_t bNumConfigurations; // Number of possible configurations. | ||
113 | } __attribute__((packed)) USB_DEVICE_DESCRIPTOR; | ||
114 | |||
115 | /* Configuration descriptor structure */ | ||
116 | typedef struct { | ||
117 | uint8_t bLength; // Length of this descriptor. | ||
118 | uint8_t bDescriptorType; // CONFIGURATION descriptor type (USB_DESCRIPTOR_CONFIGURATION). | ||
119 | uint16_t wTotalLength; // Total length of all descriptors for this configuration. | ||
120 | uint8_t bNumInterfaces; // Number of interfaces in this configuration. | ||
121 | uint8_t bConfigurationValue; // Value of this configuration (1 based). | ||
122 | uint8_t iConfiguration; // Index of String Descriptor describing the configuration. | ||
123 | uint8_t bmAttributes; // Configuration characteristics. | ||
124 | uint8_t bMaxPower; // Maximum power consumed by this configuration. | ||
125 | } __attribute__((packed)) USB_CONFIGURATION_DESCRIPTOR; | ||
126 | |||
127 | /* Interface descriptor structure */ | ||
128 | typedef struct { | ||
129 | uint8_t bLength; // Length of this descriptor. | ||
130 | uint8_t bDescriptorType; // INTERFACE descriptor type (USB_DESCRIPTOR_INTERFACE). | ||
131 | uint8_t bInterfaceNumber; // Number of this interface (0 based). | ||
132 | uint8_t bAlternateSetting; // Value of this alternate interface setting. | ||
133 | uint8_t bNumEndpoints; // Number of endpoints in this interface. | ||
134 | uint8_t bInterfaceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific. | ||
135 | uint8_t bInterfaceSubClass; // Subclass code (assigned by the USB-IF). | ||
136 | uint8_t bInterfaceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific. | ||
137 | uint8_t iInterface; // Index of String Descriptor describing the interface. | ||
138 | } __attribute__((packed)) USB_INTERFACE_DESCRIPTOR; | ||
139 | |||
140 | /* Endpoint descriptor structure */ | ||
141 | typedef struct { | ||
142 | uint8_t bLength; // Length of this descriptor. | ||
143 | uint8_t bDescriptorType; // ENDPOINT descriptor type (USB_DESCRIPTOR_ENDPOINT). | ||
144 | uint8_t bEndpointAddress; // Endpoint address. Bit 7 indicates direction (0=OUT, 1=IN). | ||
145 | uint8_t bmAttributes; // Endpoint transfer type. | ||
146 | uint16_t wMaxPacketSize; // Maximum packet size. | ||
147 | uint8_t bInterval; // Polling interval in frames. | ||
148 | } __attribute__((packed)) USB_ENDPOINT_DESCRIPTOR; | ||
149 | |||
150 | /* HID descriptor */ | ||
151 | typedef struct { | ||
152 | uint8_t bLength; | ||
153 | uint8_t bDescriptorType; | ||
154 | uint16_t bcdHID; // HID class specification release | ||
155 | uint8_t bCountryCode; | ||
156 | uint8_t bNumDescriptors; // Number of additional class specific descriptors | ||
157 | uint8_t bDescrType; // Type of class descriptor | ||
158 | uint16_t wDescriptorLength; // Total size of the Report descriptor | ||
159 | } __attribute__((packed)) USB_HID_DESCRIPTOR; | ||
160 | |||
161 | typedef struct { | ||
162 | uint8_t bDescrType; // Type of class descriptor | ||
163 | uint16_t wDescriptorLength; // Total size of the Report descriptor | ||
164 | } __attribute__((packed)) HID_CLASS_DESCRIPTOR_LEN_AND_TYPE; | ||
165 | |||
166 | #endif // _ch9_h_ | ||