USB_Host_Shield_2.0
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
usb_ch9.h
Go to the documentation of this file.
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 /* USB chapter 9 structures */
18 #ifndef _ch9_h_
19 #define _ch9_h_
20 
21 #include <inttypes.h>
22 
23 /* Misc.USB constants */
24 #define DEV_DESCR_LEN 18 //device descriptor length
25 #define CONF_DESCR_LEN 9 //configuration descriptor length
26 #define INTR_DESCR_LEN 9 //interface descriptor length
27 #define EP_DESCR_LEN 7 //endpoint descriptor length
28 
29 /* Standard Device Requests */
30 
31 #define USB_REQUEST_GET_STATUS 0 // Standard Device Request - GET STATUS
32 #define USB_REQUEST_CLEAR_FEATURE 1 // Standard Device Request - CLEAR FEATURE
33 #define USB_REQUEST_SET_FEATURE 3 // Standard Device Request - SET FEATURE
34 #define USB_REQUEST_SET_ADDRESS 5 // Standard Device Request - SET ADDRESS
35 #define USB_REQUEST_GET_DESCRIPTOR 6 // Standard Device Request - GET DESCRIPTOR
36 #define USB_REQUEST_SET_DESCRIPTOR 7 // Standard Device Request - SET DESCRIPTOR
37 #define USB_REQUEST_GET_CONFIGURATION 8 // Standard Device Request - GET CONFIGURATION
38 #define USB_REQUEST_SET_CONFIGURATION 9 // Standard Device Request - SET CONFIGURATION
39 #define USB_REQUEST_GET_INTERFACE 10 // Standard Device Request - GET INTERFACE
40 #define USB_REQUEST_SET_INTERFACE 11 // Standard Device Request - SET INTERFACE
41 #define USB_REQUEST_SYNCH_FRAME 12 // Standard Device Request - SYNCH FRAME
42 
43 #define USB_FEATURE_ENDPOINT_HALT 0 // CLEAR/SET FEATURE - Endpoint Halt
44 #define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // CLEAR/SET FEATURE - Device remote wake-up
45 #define USB_FEATURE_TEST_MODE 2 // CLEAR/SET FEATURE - Test mode
46 
47 /* Setup Data Constants */
48 
49 #define USB_SETUP_HOST_TO_DEVICE 0x00 // Device Request bmRequestType transfer direction - host to device transfer
50 #define USB_SETUP_DEVICE_TO_HOST 0x80 // Device Request bmRequestType transfer direction - device to host transfer
51 #define USB_SETUP_TYPE_STANDARD 0x00 // Device Request bmRequestType type - standard
52 #define USB_SETUP_TYPE_CLASS 0x20 // Device Request bmRequestType type - class
53 #define USB_SETUP_TYPE_VENDOR 0x40 // Device Request bmRequestType type - vendor
54 #define USB_SETUP_RECIPIENT_DEVICE 0x00 // Device Request bmRequestType recipient - device
55 #define USB_SETUP_RECIPIENT_INTERFACE 0x01 // Device Request bmRequestType recipient - interface
56 #define USB_SETUP_RECIPIENT_ENDPOINT 0x02 // Device Request bmRequestType recipient - endpoint
57 #define USB_SETUP_RECIPIENT_OTHER 0x03 // Device Request bmRequestType recipient - other
58 
59 /* USB descriptors */
60 
61 #define USB_DESCRIPTOR_DEVICE 0x01 // bDescriptorType for a Device Descriptor.
62 #define USB_DESCRIPTOR_CONFIGURATION 0x02 // bDescriptorType for a Configuration Descriptor.
63 #define USB_DESCRIPTOR_STRING 0x03 // bDescriptorType for a String Descriptor.
64 #define USB_DESCRIPTOR_INTERFACE 0x04 // bDescriptorType for an Interface Descriptor.
65 #define USB_DESCRIPTOR_ENDPOINT 0x05 // bDescriptorType for an Endpoint Descriptor.
66 #define USB_DESCRIPTOR_DEVICE_QUALIFIER 0x06 // bDescriptorType for a Device Qualifier.
67 #define USB_DESCRIPTOR_OTHER_SPEED 0x07 // bDescriptorType for a Other Speed Configuration.
68 #define USB_DESCRIPTOR_INTERFACE_POWER 0x08 // bDescriptorType for Interface Power.
69 #define USB_DESCRIPTOR_OTG 0x09 // bDescriptorType for an OTG Descriptor.
70 
71 #define HID_DESCRIPTOR_HID 0x21
72 
73 
74 
75 /* OTG SET FEATURE Constants */
76 #define OTG_FEATURE_B_HNP_ENABLE 3 // SET FEATURE OTG - Enable B device to perform HNP
77 #define OTG_FEATURE_A_HNP_SUPPORT 4 // SET FEATURE OTG - A device supports HNP
78 #define OTG_FEATURE_A_ALT_HNP_SUPPORT 5 // SET FEATURE OTG - Another port on the A device supports HNP
79 
80 /* USB Endpoint Transfer Types */
81 #define USB_TRANSFER_TYPE_CONTROL 0x00 // Endpoint is a control endpoint.
82 #define USB_TRANSFER_TYPE_ISOCHRONOUS 0x01 // Endpoint is an isochronous endpoint.
83 #define USB_TRANSFER_TYPE_BULK 0x02 // Endpoint is a bulk endpoint.
84 #define USB_TRANSFER_TYPE_INTERRUPT 0x03 // Endpoint is an interrupt endpoint.
85 #define bmUSB_TRANSFER_TYPE 0x03 // bit mask to separate transfer type from ISO attributes
86 
87 
88 /* Standard Feature Selectors for CLEAR_FEATURE Requests */
89 #define USB_FEATURE_ENDPOINT_STALL 0 // Endpoint recipient
90 #define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // Device recipient
91 #define USB_FEATURE_TEST_MODE 2 // Device recipient
92 
93 /* descriptor data structures */
94 
95 /* Device descriptor structure */
96 typedef struct {
97  uint8_t bLength; // Length of this descriptor.
98  uint8_t bDescriptorType; // DEVICE descriptor type (USB_DESCRIPTOR_DEVICE).
99  uint16_t bcdUSB; // USB Spec Release Number (BCD).
100  uint8_t bDeviceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific.
101  uint8_t bDeviceSubClass; // Subclass code (assigned by the USB-IF).
102  uint8_t bDeviceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific.
103  uint8_t bMaxPacketSize0; // Maximum packet size for endpoint 0.
104  uint16_t idVendor; // Vendor ID (assigned by the USB-IF).
105  uint16_t idProduct; // Product ID (assigned by the manufacturer).
106  uint16_t bcdDevice; // Device release number (BCD).
107  uint8_t iManufacturer; // Index of String Descriptor describing the manufacturer.
108  uint8_t iProduct; // Index of String Descriptor describing the product.
109  uint8_t iSerialNumber; // Index of String Descriptor with the device's serial number.
110  uint8_t bNumConfigurations; // Number of possible configurations.
112 
113 /* Configuration descriptor structure */
114 typedef struct
115 {
116  uint8_t bLength; // Length of this descriptor.
117  uint8_t bDescriptorType; // CONFIGURATION descriptor type (USB_DESCRIPTOR_CONFIGURATION).
118  uint16_t wTotalLength; // Total length of all descriptors for this configuration.
119  uint8_t bNumInterfaces; // Number of interfaces in this configuration.
120  uint8_t bConfigurationValue; // Value of this configuration (1 based).
121  uint8_t iConfiguration; // Index of String Descriptor describing the configuration.
122  uint8_t bmAttributes; // Configuration characteristics.
123  uint8_t bMaxPower; // Maximum power consumed by this configuration.
125 
126 /* Interface descriptor structure */
127 typedef struct
128 {
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.
139 
140 /* Endpoint descriptor structure */
141 typedef struct
142 {
143  uint8_t bLength; // Length of this descriptor.
144  uint8_t bDescriptorType; // ENDPOINT descriptor type (USB_DESCRIPTOR_ENDPOINT).
145  uint8_t bEndpointAddress; // Endpoint address. Bit 7 indicates direction (0=OUT, 1=IN).
146  uint8_t bmAttributes; // Endpoint transfer type.
147  uint16_t wMaxPacketSize; // Maximum packet size.
148  uint8_t bInterval; // Polling interval in frames.
150 
151 
152 /* HID descriptor */
153 typedef struct
154 {
155  uint8_t bLength;
156  uint8_t bDescriptorType;
157  uint16_t bcdHID; // HID class specification release
158  uint8_t bCountryCode;
159  uint8_t bNumDescriptors; // Number of additional class specific descriptors
160  uint8_t bDescrType; // Type of class descriptor
161  uint16_t wDescriptorLength; // Total size of the Report descriptor
163 
164 typedef struct
165 {
166  uint8_t bDescrType; // Type of class descriptor
167  uint16_t wDescriptorLength; // Total size of the Report descriptor
169 
170 #endif // _ch9_h_