]> git.friedersdorff.com Git - max/tmk_keyboard.git/blob - tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/usb_ch9.h
lufa: usb-usb: Use LUFA startup instead of cusotom
[max/tmk_keyboard.git] / tmk_core / protocol / usb_hid / USB_Host_Shield_2.0 / usb_ch9.h
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_