USB Host Shield 2.0
Loading...
Searching...
No Matches
usb_ch9.h
Go to the documentation of this file.
1/* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
2
3This program is free software; you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation; either version 2 of the License, or
6(at your option) any later version.
7
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12
13You should have received a copy of the GNU General Public License
14along with this program; if not, write to the Free Software
15Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
17Contact information
18-------------------
19
20Circuits At Home, LTD
21Web : http://www.circuitsathome.com
22e-mail : support@circuitsathome.com
23 */
24
25#if !defined(_usb_h_) || defined(_ch9_h_)
26#error "Never include usb_ch9.h directly; include Usb.h instead"
27#else
28
29/* USB chapter 9 structures */
30#define _ch9_h_
31
32/* Misc.USB constants */
33#define DEV_DESCR_LEN 18 //device descriptor length
34#define CONF_DESCR_LEN 9 //configuration descriptor length
35#define INTR_DESCR_LEN 9 //interface descriptor length
36#define EP_DESCR_LEN 7 //endpoint descriptor length
37
38/* Standard Device Requests */
39
40#define USB_REQUEST_GET_STATUS 0 // Standard Device Request - GET STATUS
41#define USB_REQUEST_CLEAR_FEATURE 1 // Standard Device Request - CLEAR FEATURE
42#define USB_REQUEST_SET_FEATURE 3 // Standard Device Request - SET FEATURE
43#define USB_REQUEST_SET_ADDRESS 5 // Standard Device Request - SET ADDRESS
44#define USB_REQUEST_GET_DESCRIPTOR 6 // Standard Device Request - GET DESCRIPTOR
45#define USB_REQUEST_SET_DESCRIPTOR 7 // Standard Device Request - SET DESCRIPTOR
46#define USB_REQUEST_GET_CONFIGURATION 8 // Standard Device Request - GET CONFIGURATION
47#define USB_REQUEST_SET_CONFIGURATION 9 // Standard Device Request - SET CONFIGURATION
48#define USB_REQUEST_GET_INTERFACE 10 // Standard Device Request - GET INTERFACE
49#define USB_REQUEST_SET_INTERFACE 11 // Standard Device Request - SET INTERFACE
50#define USB_REQUEST_SYNCH_FRAME 12 // Standard Device Request - SYNCH FRAME
51
52#define USB_FEATURE_ENDPOINT_HALT 0 // CLEAR/SET FEATURE - Endpoint Halt
53#define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // CLEAR/SET FEATURE - Device remote wake-up
54#define USB_FEATURE_TEST_MODE 2 // CLEAR/SET FEATURE - Test mode
55
56/* Setup Data Constants */
57
58#define USB_SETUP_HOST_TO_DEVICE 0x00 // Device Request bmRequestType transfer direction - host to device transfer
59#define USB_SETUP_DEVICE_TO_HOST 0x80 // Device Request bmRequestType transfer direction - device to host transfer
60#define USB_SETUP_TYPE_STANDARD 0x00 // Device Request bmRequestType type - standard
61#define USB_SETUP_TYPE_CLASS 0x20 // Device Request bmRequestType type - class
62#define USB_SETUP_TYPE_VENDOR 0x40 // Device Request bmRequestType type - vendor
63#define USB_SETUP_RECIPIENT_DEVICE 0x00 // Device Request bmRequestType recipient - device
64#define USB_SETUP_RECIPIENT_INTERFACE 0x01 // Device Request bmRequestType recipient - interface
65#define USB_SETUP_RECIPIENT_ENDPOINT 0x02 // Device Request bmRequestType recipient - endpoint
66#define USB_SETUP_RECIPIENT_OTHER 0x03 // Device Request bmRequestType recipient - other
67
68/* USB descriptors */
69
70#define USB_DESCRIPTOR_DEVICE 0x01 // bDescriptorType for a Device Descriptor.
71#define USB_DESCRIPTOR_CONFIGURATION 0x02 // bDescriptorType for a Configuration Descriptor.
72#define USB_DESCRIPTOR_STRING 0x03 // bDescriptorType for a String Descriptor.
73#define USB_DESCRIPTOR_INTERFACE 0x04 // bDescriptorType for an Interface Descriptor.
74#define USB_DESCRIPTOR_ENDPOINT 0x05 // bDescriptorType for an Endpoint Descriptor.
75#define USB_DESCRIPTOR_DEVICE_QUALIFIER 0x06 // bDescriptorType for a Device Qualifier.
76#define USB_DESCRIPTOR_OTHER_SPEED 0x07 // bDescriptorType for a Other Speed Configuration.
77#define USB_DESCRIPTOR_INTERFACE_POWER 0x08 // bDescriptorType for Interface Power.
78#define USB_DESCRIPTOR_OTG 0x09 // bDescriptorType for an OTG Descriptor.
79
80#define HID_DESCRIPTOR_HID 0x21
81
82
83
84/* OTG SET FEATURE Constants */
85#define OTG_FEATURE_B_HNP_ENABLE 3 // SET FEATURE OTG - Enable B device to perform HNP
86#define OTG_FEATURE_A_HNP_SUPPORT 4 // SET FEATURE OTG - A device supports HNP
87#define OTG_FEATURE_A_ALT_HNP_SUPPORT 5 // SET FEATURE OTG - Another port on the A device supports HNP
88
89/* USB Endpoint Transfer Types */
90#define USB_TRANSFER_TYPE_CONTROL 0x00 // Endpoint is a control endpoint.
91#define USB_TRANSFER_TYPE_ISOCHRONOUS 0x01 // Endpoint is an isochronous endpoint.
92#define USB_TRANSFER_TYPE_BULK 0x02 // Endpoint is a bulk endpoint.
93#define USB_TRANSFER_TYPE_INTERRUPT 0x03 // Endpoint is an interrupt endpoint.
94#define bmUSB_TRANSFER_TYPE 0x03 // bit mask to separate transfer type from ISO attributes
95
96
97/* Standard Feature Selectors for CLEAR_FEATURE Requests */
98#define USB_FEATURE_ENDPOINT_STALL 0 // Endpoint recipient
99#define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // Device recipient
100#define USB_FEATURE_TEST_MODE 2 // Device recipient
101
102/* descriptor data structures */
103
104/* Device descriptor structure */
105typedef struct {
106 uint8_t bLength; // Length of this descriptor.
107 uint8_t bDescriptorType; // DEVICE descriptor type (USB_DESCRIPTOR_DEVICE).
108 uint16_t bcdUSB; // USB Spec Release Number (BCD).
109 uint8_t bDeviceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific.
110 uint8_t bDeviceSubClass; // Subclass code (assigned by the USB-IF).
111 uint8_t bDeviceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific.
112 uint8_t bMaxPacketSize0; // Maximum packet size for endpoint 0.
113 uint16_t idVendor; // Vendor ID (assigned by the USB-IF).
114 uint16_t idProduct; // Product ID (assigned by the manufacturer).
115 uint16_t bcdDevice; // Device release number (BCD).
116 uint8_t iManufacturer; // Index of String Descriptor describing the manufacturer.
117 uint8_t iProduct; // Index of String Descriptor describing the product.
118 uint8_t iSerialNumber; // Index of String Descriptor with the device's serial number.
119 uint8_t bNumConfigurations; // Number of possible configurations.
121
122/* Configuration descriptor structure */
123typedef struct {
124 uint8_t bLength; // Length of this descriptor.
125 uint8_t bDescriptorType; // CONFIGURATION descriptor type (USB_DESCRIPTOR_CONFIGURATION).
126 uint16_t wTotalLength; // Total length of all descriptors for this configuration.
127 uint8_t bNumInterfaces; // Number of interfaces in this configuration.
128 uint8_t bConfigurationValue; // Value of this configuration (1 based).
129 uint8_t iConfiguration; // Index of String Descriptor describing the configuration.
130 uint8_t bmAttributes; // Configuration characteristics.
131 uint8_t bMaxPower; // Maximum power consumed by this configuration.
133
134/* Interface descriptor structure */
135typedef struct {
136 uint8_t bLength; // Length of this descriptor.
137 uint8_t bDescriptorType; // INTERFACE descriptor type (USB_DESCRIPTOR_INTERFACE).
138 uint8_t bInterfaceNumber; // Number of this interface (0 based).
139 uint8_t bAlternateSetting; // Value of this alternate interface setting.
140 uint8_t bNumEndpoints; // Number of endpoints in this interface.
141 uint8_t bInterfaceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific.
142 uint8_t bInterfaceSubClass; // Subclass code (assigned by the USB-IF).
143 uint8_t bInterfaceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific.
144 uint8_t iInterface; // Index of String Descriptor describing the interface.
146
147/* Endpoint descriptor structure */
148typedef struct {
149 uint8_t bLength; // Length of this descriptor.
150 uint8_t bDescriptorType; // ENDPOINT descriptor type (USB_DESCRIPTOR_ENDPOINT).
151 uint8_t bEndpointAddress; // Endpoint address. Bit 7 indicates direction (0=OUT, 1=IN).
152 uint8_t bmAttributes; // Endpoint transfer type.
153 uint16_t wMaxPacketSize; // Maximum packet size.
154 uint8_t bInterval; // Polling interval in frames.
156
157/* HID descriptor */
158typedef struct {
161 uint16_t bcdHID; // HID class specification release
163 uint8_t bNumDescriptors; // Number of additional class specific descriptors
164 uint8_t bDescrType; // Type of class descriptor
165 uint16_t wDescriptorLength; // Total size of the Report descriptor
167
168typedef struct {
169 uint8_t bDescrType; // Type of class descriptor
170 uint16_t wDescriptorLength; // Total size of the Report descriptor
172
173#endif // _ch9_h_
uint8_t bMaxPacketSize0
Definition usb_ch9.h:112
uint8_t bDescriptorType
Definition usb_ch9.h:107
uint8_t bNumConfigurations
Definition usb_ch9.h:119
uint8_t bDeviceSubClass
Definition usb_ch9.h:110
uint8_t bDeviceProtocol
Definition usb_ch9.h:111
uint8_t bNumDescriptors
Definition usb_ch9.h:163
uint16_t wDescriptorLength
Definition usb_ch9.h:165
uint8_t bCountryCode
Definition usb_ch9.h:162
uint8_t bDescriptorType
Definition usb_ch9.h:160
uint8_t bDescrType
Definition usb_ch9.h:164
uint16_t bcdHID
Definition usb_ch9.h:161