Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of F401RE-USBHost by
USBHost/USBHostTypes.h@26:78b505e6e49c, 2016-12-28 (annotated)
- Committer:
- Ownasaurus
- Date:
- Wed Dec 28 23:23:00 2016 +0000
- Revision:
- 26:78b505e6e49c
- Parent:
- 12:b91fdea8c0a7
first release for keyboard
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 12:b91fdea8c0a7 | 1 | /* mbed USBHost Library |
va009039 | 12:b91fdea8c0a7 | 2 | * Copyright (c) 2006-2013 ARM Limited |
va009039 | 12:b91fdea8c0a7 | 3 | * |
va009039 | 12:b91fdea8c0a7 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
va009039 | 12:b91fdea8c0a7 | 5 | * you may not use this file except in compliance with the License. |
va009039 | 12:b91fdea8c0a7 | 6 | * You may obtain a copy of the License at |
va009039 | 12:b91fdea8c0a7 | 7 | * |
va009039 | 12:b91fdea8c0a7 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
va009039 | 12:b91fdea8c0a7 | 9 | * |
va009039 | 12:b91fdea8c0a7 | 10 | * Unless required by applicable law or agreed to in writing, software |
va009039 | 12:b91fdea8c0a7 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
va009039 | 12:b91fdea8c0a7 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
va009039 | 12:b91fdea8c0a7 | 13 | * See the License for the specific language governing permissions and |
va009039 | 12:b91fdea8c0a7 | 14 | * limitations under the License. |
va009039 | 12:b91fdea8c0a7 | 15 | */ |
va009039 | 12:b91fdea8c0a7 | 16 | |
va009039 | 12:b91fdea8c0a7 | 17 | #ifndef USB_INC_H |
va009039 | 12:b91fdea8c0a7 | 18 | #define USB_INC_H |
va009039 | 12:b91fdea8c0a7 | 19 | |
va009039 | 12:b91fdea8c0a7 | 20 | #include "mbed.h" |
va009039 | 12:b91fdea8c0a7 | 21 | #include "toolchain.h" |
va009039 | 12:b91fdea8c0a7 | 22 | |
va009039 | 12:b91fdea8c0a7 | 23 | enum USB_TYPE { |
va009039 | 12:b91fdea8c0a7 | 24 | USB_TYPE_OK = 0, |
va009039 | 12:b91fdea8c0a7 | 25 | |
va009039 | 12:b91fdea8c0a7 | 26 | // completion code |
va009039 | 12:b91fdea8c0a7 | 27 | USB_TYPE_CRC_ERROR = 1, |
va009039 | 12:b91fdea8c0a7 | 28 | USB_TYPE_BIT_STUFFING_ERROR = 2, |
va009039 | 12:b91fdea8c0a7 | 29 | USB_TYPE_DATA_TOGGLE_MISMATCH_ERROR = 3, |
va009039 | 12:b91fdea8c0a7 | 30 | USB_TYPE_STALL_ERROR = 4, |
va009039 | 12:b91fdea8c0a7 | 31 | USB_TYPE_DEVICE_NOT_RESPONDING_ERROR = 5, |
va009039 | 12:b91fdea8c0a7 | 32 | USB_TYPE_PID_CHECK_FAILURE_ERROR = 6, |
va009039 | 12:b91fdea8c0a7 | 33 | USB_TYPE_UNEXPECTED_PID_ERROR = 7, |
va009039 | 12:b91fdea8c0a7 | 34 | USB_TYPE_DATA_OVERRUN_ERROR = 8, |
va009039 | 12:b91fdea8c0a7 | 35 | USB_TYPE_DATA_UNDERRUN_ERROR = 9, |
va009039 | 12:b91fdea8c0a7 | 36 | USB_TYPE_RESERVED = 9, |
va009039 | 12:b91fdea8c0a7 | 37 | USB_TYPE_RESERVED_ = 10, |
va009039 | 12:b91fdea8c0a7 | 38 | USB_TYPE_BUFFER_OVERRUN_ERROR = 12, |
va009039 | 12:b91fdea8c0a7 | 39 | USB_TYPE_BUFFER_UNDERRUN_ERROR = 13, |
va009039 | 12:b91fdea8c0a7 | 40 | |
va009039 | 12:b91fdea8c0a7 | 41 | // general usb state |
va009039 | 12:b91fdea8c0a7 | 42 | USB_TYPE_DISCONNECTED = 14, |
va009039 | 12:b91fdea8c0a7 | 43 | USB_TYPE_FREE = 15, |
va009039 | 12:b91fdea8c0a7 | 44 | USB_TYPE_IDLE = 16, |
va009039 | 12:b91fdea8c0a7 | 45 | USB_TYPE_PROCESSING = 17, |
va009039 | 12:b91fdea8c0a7 | 46 | |
va009039 | 12:b91fdea8c0a7 | 47 | USB_TYPE_ERROR = 18, |
va009039 | 12:b91fdea8c0a7 | 48 | }; |
va009039 | 12:b91fdea8c0a7 | 49 | |
va009039 | 12:b91fdea8c0a7 | 50 | |
va009039 | 12:b91fdea8c0a7 | 51 | enum ENDPOINT_DIRECTION { |
va009039 | 12:b91fdea8c0a7 | 52 | OUT = 1, |
va009039 | 12:b91fdea8c0a7 | 53 | IN |
va009039 | 12:b91fdea8c0a7 | 54 | }; |
va009039 | 12:b91fdea8c0a7 | 55 | |
va009039 | 12:b91fdea8c0a7 | 56 | enum ENDPOINT_TYPE { |
va009039 | 12:b91fdea8c0a7 | 57 | CONTROL_ENDPOINT = 0, |
va009039 | 12:b91fdea8c0a7 | 58 | ISOCHRONOUS_ENDPOINT, |
va009039 | 12:b91fdea8c0a7 | 59 | BULK_ENDPOINT, |
va009039 | 12:b91fdea8c0a7 | 60 | INTERRUPT_ENDPOINT |
va009039 | 12:b91fdea8c0a7 | 61 | }; |
va009039 | 12:b91fdea8c0a7 | 62 | |
va009039 | 12:b91fdea8c0a7 | 63 | #define AUDIO_CLASS 0x01 |
va009039 | 12:b91fdea8c0a7 | 64 | #define CDC_CLASS 0x02 |
va009039 | 12:b91fdea8c0a7 | 65 | #define HID_CLASS 0x03 |
va009039 | 12:b91fdea8c0a7 | 66 | #define MSD_CLASS 0x08 |
va009039 | 12:b91fdea8c0a7 | 67 | #define HUB_CLASS 0x09 |
va009039 | 12:b91fdea8c0a7 | 68 | #define SERIAL_CLASS 0x0A |
va009039 | 12:b91fdea8c0a7 | 69 | |
va009039 | 12:b91fdea8c0a7 | 70 | #define DEVICE_DESCRIPTOR (1) |
va009039 | 12:b91fdea8c0a7 | 71 | #define CONFIGURATION_DESCRIPTOR (2) |
va009039 | 12:b91fdea8c0a7 | 72 | #define INTERFACE_DESCRIPTOR (4) |
va009039 | 12:b91fdea8c0a7 | 73 | #define ENDPOINT_DESCRIPTOR (5) |
va009039 | 12:b91fdea8c0a7 | 74 | #define HID_DESCRIPTOR (33) |
va009039 | 12:b91fdea8c0a7 | 75 | |
va009039 | 12:b91fdea8c0a7 | 76 | // ----------- Control RequestType Fields ----------- |
va009039 | 12:b91fdea8c0a7 | 77 | #define USB_DEVICE_TO_HOST 0x80 |
va009039 | 12:b91fdea8c0a7 | 78 | #define USB_HOST_TO_DEVICE 0x00 |
va009039 | 12:b91fdea8c0a7 | 79 | #define USB_REQUEST_TYPE_CLASS 0x20 |
va009039 | 12:b91fdea8c0a7 | 80 | #define USB_REQUEST_TYPE_STANDARD 0x00 |
va009039 | 12:b91fdea8c0a7 | 81 | #define USB_RECIPIENT_DEVICE 0x00 |
va009039 | 12:b91fdea8c0a7 | 82 | #define USB_RECIPIENT_INTERFACE 0x01 |
va009039 | 12:b91fdea8c0a7 | 83 | #define USB_RECIPIENT_ENDPOINT 0x02 |
va009039 | 12:b91fdea8c0a7 | 84 | |
va009039 | 12:b91fdea8c0a7 | 85 | // -------------- USB Standard Requests -------------- |
va009039 | 12:b91fdea8c0a7 | 86 | #define GET_STATUS 0x00 |
va009039 | 12:b91fdea8c0a7 | 87 | #define SET_FEATURE 0x03 |
va009039 | 12:b91fdea8c0a7 | 88 | #define SET_ADDRESS 0x05 |
va009039 | 12:b91fdea8c0a7 | 89 | #define GET_DESCRIPTOR 0x06 |
va009039 | 12:b91fdea8c0a7 | 90 | #define SET_CONFIGURATION 0x09 |
va009039 | 12:b91fdea8c0a7 | 91 | #define SET_INTERFACE 0x0b |
va009039 | 12:b91fdea8c0a7 | 92 | #define CLEAR_FEATURE 0x01 |
va009039 | 12:b91fdea8c0a7 | 93 | |
va009039 | 12:b91fdea8c0a7 | 94 | // -------------- USB Descriptor Length -------------- |
va009039 | 12:b91fdea8c0a7 | 95 | #define DEVICE_DESCRIPTOR_LENGTH 0x12 |
va009039 | 12:b91fdea8c0a7 | 96 | #define CONFIGURATION_DESCRIPTOR_LENGTH 0x09 |
va009039 | 12:b91fdea8c0a7 | 97 | |
va009039 | 12:b91fdea8c0a7 | 98 | // PID |
va009039 | 12:b91fdea8c0a7 | 99 | #define DATA0 0x03 |
va009039 | 12:b91fdea8c0a7 | 100 | #define DATA1 0x0b |
va009039 | 12:b91fdea8c0a7 | 101 | #define ACK 0x02 |
va009039 | 12:b91fdea8c0a7 | 102 | #define STALL 0x0e |
va009039 | 12:b91fdea8c0a7 | 103 | #define NAK 0x0a |
va009039 | 12:b91fdea8c0a7 | 104 | |
va009039 | 12:b91fdea8c0a7 | 105 | #pragma pack(push,1) |
va009039 | 12:b91fdea8c0a7 | 106 | typedef struct { |
va009039 | 12:b91fdea8c0a7 | 107 | uint8_t bLength; |
va009039 | 12:b91fdea8c0a7 | 108 | uint8_t bDescriptorType; |
va009039 | 12:b91fdea8c0a7 | 109 | uint16_t bcdUSB; |
va009039 | 12:b91fdea8c0a7 | 110 | uint8_t bDeviceClass; |
va009039 | 12:b91fdea8c0a7 | 111 | uint8_t bDeviceSubClass; |
va009039 | 12:b91fdea8c0a7 | 112 | uint8_t bDeviceProtocol; |
va009039 | 12:b91fdea8c0a7 | 113 | uint8_t bMaxPacketSize; |
va009039 | 12:b91fdea8c0a7 | 114 | uint16_t idVendor; |
va009039 | 12:b91fdea8c0a7 | 115 | uint16_t idProduct; |
va009039 | 12:b91fdea8c0a7 | 116 | uint16_t bcdDevice; |
va009039 | 12:b91fdea8c0a7 | 117 | uint8_t iManufacturer; |
va009039 | 12:b91fdea8c0a7 | 118 | uint8_t iProduct; |
va009039 | 12:b91fdea8c0a7 | 119 | uint8_t iSerialNumber; |
va009039 | 12:b91fdea8c0a7 | 120 | uint8_t bNumConfigurations; |
va009039 | 12:b91fdea8c0a7 | 121 | } PACKED DeviceDescriptor; |
va009039 | 12:b91fdea8c0a7 | 122 | |
va009039 | 12:b91fdea8c0a7 | 123 | typedef struct { |
va009039 | 12:b91fdea8c0a7 | 124 | uint8_t bLength; |
va009039 | 12:b91fdea8c0a7 | 125 | uint8_t bDescriptorType; |
va009039 | 12:b91fdea8c0a7 | 126 | uint16_t wTotalLength; |
va009039 | 12:b91fdea8c0a7 | 127 | uint8_t bNumInterfaces; |
va009039 | 12:b91fdea8c0a7 | 128 | uint8_t bConfigurationValue; |
va009039 | 12:b91fdea8c0a7 | 129 | uint8_t iConfiguration; |
va009039 | 12:b91fdea8c0a7 | 130 | uint8_t bmAttributes; |
va009039 | 12:b91fdea8c0a7 | 131 | uint8_t bMaxPower; |
va009039 | 12:b91fdea8c0a7 | 132 | } PACKED ConfigurationDescriptor; |
va009039 | 12:b91fdea8c0a7 | 133 | |
va009039 | 12:b91fdea8c0a7 | 134 | typedef struct { |
va009039 | 12:b91fdea8c0a7 | 135 | uint8_t bLength; |
va009039 | 12:b91fdea8c0a7 | 136 | uint8_t bDescriptorType; |
va009039 | 12:b91fdea8c0a7 | 137 | uint8_t bInterfaceNumber; |
va009039 | 12:b91fdea8c0a7 | 138 | uint8_t bAlternateSetting; |
va009039 | 12:b91fdea8c0a7 | 139 | uint8_t bNumEndpoints; |
va009039 | 12:b91fdea8c0a7 | 140 | uint8_t bInterfaceClass; |
va009039 | 12:b91fdea8c0a7 | 141 | uint8_t bInterfaceSubClass; |
va009039 | 12:b91fdea8c0a7 | 142 | uint8_t bInterfaceProtocol; |
va009039 | 12:b91fdea8c0a7 | 143 | uint8_t iInterface; |
va009039 | 12:b91fdea8c0a7 | 144 | } InterfaceDescriptor; |
va009039 | 12:b91fdea8c0a7 | 145 | |
va009039 | 12:b91fdea8c0a7 | 146 | typedef struct { |
va009039 | 12:b91fdea8c0a7 | 147 | uint8_t bLength; |
va009039 | 12:b91fdea8c0a7 | 148 | uint8_t bDescriptorType; |
va009039 | 12:b91fdea8c0a7 | 149 | uint8_t bEndpointAddress; |
va009039 | 12:b91fdea8c0a7 | 150 | uint8_t bmAttributes; |
va009039 | 12:b91fdea8c0a7 | 151 | uint16_t wMaxPacketSize; |
va009039 | 12:b91fdea8c0a7 | 152 | uint8_t bInterval; |
va009039 | 12:b91fdea8c0a7 | 153 | } EndpointDescriptor; |
va009039 | 12:b91fdea8c0a7 | 154 | |
va009039 | 12:b91fdea8c0a7 | 155 | typedef struct { |
va009039 | 12:b91fdea8c0a7 | 156 | uint8_t bDescLength; |
va009039 | 12:b91fdea8c0a7 | 157 | uint8_t bDescriptorType; |
va009039 | 12:b91fdea8c0a7 | 158 | uint8_t bNbrPorts; |
va009039 | 12:b91fdea8c0a7 | 159 | uint16_t wHubCharacteristics; |
va009039 | 12:b91fdea8c0a7 | 160 | uint8_t bPwrOn2PwrGood; |
va009039 | 12:b91fdea8c0a7 | 161 | uint8_t bHubContrCurrent; |
va009039 | 12:b91fdea8c0a7 | 162 | uint8_t DeviceRemovable; |
va009039 | 12:b91fdea8c0a7 | 163 | uint8_t PortPweCtrlMak; |
va009039 | 12:b91fdea8c0a7 | 164 | } HubDescriptor; |
va009039 | 12:b91fdea8c0a7 | 165 | #pragma pack(pop) |
va009039 | 12:b91fdea8c0a7 | 166 | |
va009039 | 12:b91fdea8c0a7 | 167 | #endif |