うおーるぼっとをWiiリモコンでコントロールする新しいプログラムです。 以前のものより、Wiiリモコンが早く繋がる様になりました。 It is a program which controls A with the Wii remote. ※ A Bluetooth dongle and a Wii remote control are needed.
Dependencies: USBHost mbed FATFileSystem mbed-rtos
USBHost/USBHost/USBHostTypes.h@0:fccb789424fc, 2013-06-10 (annotated)
- Committer:
- jksoft
- Date:
- Mon Jun 10 16:01:50 2013 +0000
- Revision:
- 0:fccb789424fc
1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jksoft | 0:fccb789424fc | 1 | /* mbed USBHost Library |
jksoft | 0:fccb789424fc | 2 | * Copyright (c) 2006-2013 ARM Limited |
jksoft | 0:fccb789424fc | 3 | * |
jksoft | 0:fccb789424fc | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
jksoft | 0:fccb789424fc | 5 | * you may not use this file except in compliance with the License. |
jksoft | 0:fccb789424fc | 6 | * You may obtain a copy of the License at |
jksoft | 0:fccb789424fc | 7 | * |
jksoft | 0:fccb789424fc | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
jksoft | 0:fccb789424fc | 9 | * |
jksoft | 0:fccb789424fc | 10 | * Unless required by applicable law or agreed to in writing, software |
jksoft | 0:fccb789424fc | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
jksoft | 0:fccb789424fc | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
jksoft | 0:fccb789424fc | 13 | * See the License for the specific language governing permissions and |
jksoft | 0:fccb789424fc | 14 | * limitations under the License. |
jksoft | 0:fccb789424fc | 15 | */ |
jksoft | 0:fccb789424fc | 16 | |
jksoft | 0:fccb789424fc | 17 | #ifndef USB_INC_H |
jksoft | 0:fccb789424fc | 18 | #define USB_INC_H |
jksoft | 0:fccb789424fc | 19 | |
jksoft | 0:fccb789424fc | 20 | #include "mbed.h" |
jksoft | 0:fccb789424fc | 21 | |
jksoft | 0:fccb789424fc | 22 | enum USB_TYPE { |
jksoft | 0:fccb789424fc | 23 | USB_TYPE_OK = 0, |
jksoft | 0:fccb789424fc | 24 | |
jksoft | 0:fccb789424fc | 25 | // completion code |
jksoft | 0:fccb789424fc | 26 | USB_TYPE_CRC_ERROR = 1, |
jksoft | 0:fccb789424fc | 27 | USB_TYPE_BIT_STUFFING_ERROR = 2, |
jksoft | 0:fccb789424fc | 28 | USB_TYPE_DATA_TOGGLE_MISMATCH_ERROR = 3, |
jksoft | 0:fccb789424fc | 29 | USB_TYPE_STALL_ERROR = 4, |
jksoft | 0:fccb789424fc | 30 | USB_TYPE_DEVICE_NOT_RESPONDING_ERROR = 5, |
jksoft | 0:fccb789424fc | 31 | USB_TYPE_PID_CHECK_FAILURE_ERROR = 6, |
jksoft | 0:fccb789424fc | 32 | USB_TYPE_UNEXPECTED_PID_ERROR = 7, |
jksoft | 0:fccb789424fc | 33 | USB_TYPE_DATA_OVERRUN_ERROR = 8, |
jksoft | 0:fccb789424fc | 34 | USB_TYPE_DATA_UNDERRUN_ERROR = 9, |
jksoft | 0:fccb789424fc | 35 | USB_TYPE_RESERVED = 9, |
jksoft | 0:fccb789424fc | 36 | USB_TYPE_RESERVED_ = 10, |
jksoft | 0:fccb789424fc | 37 | USB_TYPE_BUFFER_OVERRUN_ERROR = 12, |
jksoft | 0:fccb789424fc | 38 | USB_TYPE_BUFFER_UNDERRUN_ERROR = 13, |
jksoft | 0:fccb789424fc | 39 | |
jksoft | 0:fccb789424fc | 40 | // general usb state |
jksoft | 0:fccb789424fc | 41 | USB_TYPE_DISCONNECTED = 14, |
jksoft | 0:fccb789424fc | 42 | USB_TYPE_FREE = 15, |
jksoft | 0:fccb789424fc | 43 | USB_TYPE_IDLE = 16, |
jksoft | 0:fccb789424fc | 44 | USB_TYPE_PROCESSING = 17, |
jksoft | 0:fccb789424fc | 45 | |
jksoft | 0:fccb789424fc | 46 | USB_TYPE_ERROR = 18, |
jksoft | 0:fccb789424fc | 47 | }; |
jksoft | 0:fccb789424fc | 48 | |
jksoft | 0:fccb789424fc | 49 | |
jksoft | 0:fccb789424fc | 50 | enum ENDPOINT_DIRECTION { |
jksoft | 0:fccb789424fc | 51 | OUT = 1, |
jksoft | 0:fccb789424fc | 52 | IN |
jksoft | 0:fccb789424fc | 53 | }; |
jksoft | 0:fccb789424fc | 54 | |
jksoft | 0:fccb789424fc | 55 | enum ENDPOINT_TYPE { |
jksoft | 0:fccb789424fc | 56 | CONTROL_ENDPOINT = 0, |
jksoft | 0:fccb789424fc | 57 | ISOCHRONOUS_ENDPOINT, |
jksoft | 0:fccb789424fc | 58 | BULK_ENDPOINT, |
jksoft | 0:fccb789424fc | 59 | INTERRUPT_ENDPOINT |
jksoft | 0:fccb789424fc | 60 | }; |
jksoft | 0:fccb789424fc | 61 | |
jksoft | 0:fccb789424fc | 62 | #define AUDIO_CLASS 0x01 |
jksoft | 0:fccb789424fc | 63 | #define CDC_CLASS 0x02 |
jksoft | 0:fccb789424fc | 64 | #define HID_CLASS 0x03 |
jksoft | 0:fccb789424fc | 65 | #define MSD_CLASS 0x08 |
jksoft | 0:fccb789424fc | 66 | #define HUB_CLASS 0x09 |
jksoft | 0:fccb789424fc | 67 | #define SERIAL_CLASS 0x0A |
jksoft | 0:fccb789424fc | 68 | |
jksoft | 0:fccb789424fc | 69 | // ------------------ HcControl Register --------------------- |
jksoft | 0:fccb789424fc | 70 | #define OR_CONTROL_PLE 0x00000004 |
jksoft | 0:fccb789424fc | 71 | #define OR_CONTROL_CLE 0x00000010 |
jksoft | 0:fccb789424fc | 72 | #define OR_CONTROL_BLE 0x00000020 |
jksoft | 0:fccb789424fc | 73 | #define OR_CONTROL_HCFS 0x000000C0 |
jksoft | 0:fccb789424fc | 74 | #define OR_CONTROL_HC_OPER 0x00000080 |
jksoft | 0:fccb789424fc | 75 | // ----------------- HcCommandStatus Register ----------------- |
jksoft | 0:fccb789424fc | 76 | #define OR_CMD_STATUS_HCR 0x00000001 |
jksoft | 0:fccb789424fc | 77 | #define OR_CMD_STATUS_CLF 0x00000002 |
jksoft | 0:fccb789424fc | 78 | #define OR_CMD_STATUS_BLF 0x00000004 |
jksoft | 0:fccb789424fc | 79 | // --------------- HcInterruptStatus Register ----------------- |
jksoft | 0:fccb789424fc | 80 | #define OR_INTR_STATUS_WDH 0x00000002 |
jksoft | 0:fccb789424fc | 81 | #define OR_INTR_STATUS_RHSC 0x00000040 |
jksoft | 0:fccb789424fc | 82 | #define OR_INTR_STATUS_UE 0x00000010 |
jksoft | 0:fccb789424fc | 83 | // --------------- HcInterruptEnable Register ----------------- |
jksoft | 0:fccb789424fc | 84 | #define OR_INTR_ENABLE_WDH 0x00000002 |
jksoft | 0:fccb789424fc | 85 | #define OR_INTR_ENABLE_RHSC 0x00000040 |
jksoft | 0:fccb789424fc | 86 | #define OR_INTR_ENABLE_MIE 0x80000000 |
jksoft | 0:fccb789424fc | 87 | // ---------------- HcRhDescriptorA Register ------------------ |
jksoft | 0:fccb789424fc | 88 | #define OR_RH_STATUS_LPSC 0x00010000 |
jksoft | 0:fccb789424fc | 89 | #define OR_RH_STATUS_DRWE 0x00008000 |
jksoft | 0:fccb789424fc | 90 | // -------------- HcRhPortStatus[1:NDP] Register -------------- |
jksoft | 0:fccb789424fc | 91 | #define OR_RH_PORT_CCS 0x00000001 |
jksoft | 0:fccb789424fc | 92 | #define OR_RH_PORT_PRS 0x00000010 |
jksoft | 0:fccb789424fc | 93 | #define OR_RH_PORT_CSC 0x00010000 |
jksoft | 0:fccb789424fc | 94 | #define OR_RH_PORT_PRSC 0x00100000 |
jksoft | 0:fccb789424fc | 95 | #define OR_RH_PORT_LSDA 0x00000200 |
jksoft | 0:fccb789424fc | 96 | |
jksoft | 0:fccb789424fc | 97 | #define FI 0x2EDF // 12000 bits per frame (-1) |
jksoft | 0:fccb789424fc | 98 | #define DEFAULT_FMINTERVAL ((((6 * (FI - 210)) / 7) << 16) | FI) |
jksoft | 0:fccb789424fc | 99 | |
jksoft | 0:fccb789424fc | 100 | #define ED_SKIP (uint32_t) (0x00001000) // Skip this ep in queue |
jksoft | 0:fccb789424fc | 101 | |
jksoft | 0:fccb789424fc | 102 | #define TD_ROUNDING (uint32_t) (0x00040000) // Buffer Rounding |
jksoft | 0:fccb789424fc | 103 | #define TD_SETUP (uint32_t)(0) // Direction of Setup Packet |
jksoft | 0:fccb789424fc | 104 | #define TD_IN (uint32_t)(0x00100000) // Direction In |
jksoft | 0:fccb789424fc | 105 | #define TD_OUT (uint32_t)(0x00080000) // Direction Out |
jksoft | 0:fccb789424fc | 106 | #define TD_DELAY_INT(x) (uint32_t)((x) << 21) // Delay Interrupt |
jksoft | 0:fccb789424fc | 107 | #define TD_TOGGLE_0 (uint32_t)(0x02000000) // Toggle 0 |
jksoft | 0:fccb789424fc | 108 | #define TD_TOGGLE_1 (uint32_t)(0x03000000) // Toggle 1 |
jksoft | 0:fccb789424fc | 109 | #define TD_CC (uint32_t)(0xF0000000) // Completion Code |
jksoft | 0:fccb789424fc | 110 | |
jksoft | 0:fccb789424fc | 111 | #define DEVICE_DESCRIPTOR (1) |
jksoft | 0:fccb789424fc | 112 | #define CONFIGURATION_DESCRIPTOR (2) |
jksoft | 0:fccb789424fc | 113 | #define INTERFACE_DESCRIPTOR (4) |
jksoft | 0:fccb789424fc | 114 | #define ENDPOINT_DESCRIPTOR (5) |
jksoft | 0:fccb789424fc | 115 | #define HID_DESCRIPTOR (33) |
jksoft | 0:fccb789424fc | 116 | |
jksoft | 0:fccb789424fc | 117 | // ----------- Control RequestType Fields ----------- |
jksoft | 0:fccb789424fc | 118 | #define USB_DEVICE_TO_HOST 0x80 |
jksoft | 0:fccb789424fc | 119 | #define USB_HOST_TO_DEVICE 0x00 |
jksoft | 0:fccb789424fc | 120 | #define USB_REQUEST_TYPE_CLASS 0x20 |
jksoft | 0:fccb789424fc | 121 | #define USB_REQUEST_TYPE_STANDARD 0x00 |
jksoft | 0:fccb789424fc | 122 | #define USB_RECIPIENT_DEVICE 0x00 |
jksoft | 0:fccb789424fc | 123 | #define USB_RECIPIENT_INTERFACE 0x01 |
jksoft | 0:fccb789424fc | 124 | #define USB_RECIPIENT_ENDPOINT 0x02 |
jksoft | 0:fccb789424fc | 125 | |
jksoft | 0:fccb789424fc | 126 | // -------------- USB Standard Requests -------------- |
jksoft | 0:fccb789424fc | 127 | #define SET_ADDRESS 0x05 |
jksoft | 0:fccb789424fc | 128 | #define GET_DESCRIPTOR 0x06 |
jksoft | 0:fccb789424fc | 129 | #define SET_CONFIGURATION 0x09 |
jksoft | 0:fccb789424fc | 130 | #define SET_INTERFACE 0x0b |
jksoft | 0:fccb789424fc | 131 | #define CLEAR_FEATURE 0x01 |
jksoft | 0:fccb789424fc | 132 | |
jksoft | 0:fccb789424fc | 133 | // -------------- USB Descriptor Length -------------- |
jksoft | 0:fccb789424fc | 134 | #define DEVICE_DESCRIPTOR_LENGTH 0x12 |
jksoft | 0:fccb789424fc | 135 | #define CONFIGURATION_DESCRIPTOR_LENGTH 0x09 |
jksoft | 0:fccb789424fc | 136 | |
jksoft | 0:fccb789424fc | 137 | // ------------ HostController Transfer Descriptor ------------ |
jksoft | 0:fccb789424fc | 138 | typedef __packed struct HCTD { |
jksoft | 0:fccb789424fc | 139 | __IO uint32_t control; // Transfer descriptor control |
jksoft | 0:fccb789424fc | 140 | __IO uint8_t * currBufPtr; // Physical address of current buffer pointer |
jksoft | 0:fccb789424fc | 141 | __IO HCTD * nextTD; // Physical pointer to next Transfer Descriptor |
jksoft | 0:fccb789424fc | 142 | __IO uint8_t * bufEnd; // Physical address of end of buffer |
jksoft | 0:fccb789424fc | 143 | void * ep; // ep address where a td is linked in |
jksoft | 0:fccb789424fc | 144 | uint32_t dummy[3]; // padding |
jksoft | 0:fccb789424fc | 145 | } HCTD; |
jksoft | 0:fccb789424fc | 146 | |
jksoft | 0:fccb789424fc | 147 | // ----------- HostController EndPoint Descriptor ------------- |
jksoft | 0:fccb789424fc | 148 | typedef __packed struct hcEd { |
jksoft | 0:fccb789424fc | 149 | __IO uint32_t control; // Endpoint descriptor control |
jksoft | 0:fccb789424fc | 150 | __IO HCTD * tailTD; // Physical address of tail in Transfer descriptor list |
jksoft | 0:fccb789424fc | 151 | __IO HCTD * headTD; // Physcial address of head in Transfer descriptor list |
jksoft | 0:fccb789424fc | 152 | __IO hcEd * nextED; // Physical address of next Endpoint descriptor |
jksoft | 0:fccb789424fc | 153 | } HCED; |
jksoft | 0:fccb789424fc | 154 | |
jksoft | 0:fccb789424fc | 155 | |
jksoft | 0:fccb789424fc | 156 | // ----------- Host Controller Communication Area ------------ |
jksoft | 0:fccb789424fc | 157 | typedef __packed struct hcca { |
jksoft | 0:fccb789424fc | 158 | __IO uint32_t IntTable[32]; // Interrupt Table |
jksoft | 0:fccb789424fc | 159 | __IO uint32_t FrameNumber; // Frame Number |
jksoft | 0:fccb789424fc | 160 | __IO uint32_t DoneHead; // Done Head |
jksoft | 0:fccb789424fc | 161 | volatile uint8_t Reserved[116]; // Reserved for future use |
jksoft | 0:fccb789424fc | 162 | volatile uint8_t Unknown[4]; // Unused |
jksoft | 0:fccb789424fc | 163 | } HCCA; |
jksoft | 0:fccb789424fc | 164 | |
jksoft | 0:fccb789424fc | 165 | typedef __packed struct { |
jksoft | 0:fccb789424fc | 166 | uint8_t bLength; |
jksoft | 0:fccb789424fc | 167 | uint8_t bDescriptorType; |
jksoft | 0:fccb789424fc | 168 | uint16_t bcdUSB; |
jksoft | 0:fccb789424fc | 169 | uint8_t bDeviceClass; |
jksoft | 0:fccb789424fc | 170 | uint8_t bDeviceSubClass; |
jksoft | 0:fccb789424fc | 171 | uint8_t bDeviceProtocol; |
jksoft | 0:fccb789424fc | 172 | uint8_t bMaxPacketSize; |
jksoft | 0:fccb789424fc | 173 | uint16_t idVendor; |
jksoft | 0:fccb789424fc | 174 | uint16_t idProduct; |
jksoft | 0:fccb789424fc | 175 | uint16_t bcdDevice; |
jksoft | 0:fccb789424fc | 176 | uint8_t iManufacturer; |
jksoft | 0:fccb789424fc | 177 | uint8_t iProduct; |
jksoft | 0:fccb789424fc | 178 | uint8_t iSerialNumber; |
jksoft | 0:fccb789424fc | 179 | uint8_t bNumConfigurations; |
jksoft | 0:fccb789424fc | 180 | } DeviceDescriptor; |
jksoft | 0:fccb789424fc | 181 | |
jksoft | 0:fccb789424fc | 182 | typedef __packed struct { |
jksoft | 0:fccb789424fc | 183 | uint8_t bLength; |
jksoft | 0:fccb789424fc | 184 | uint8_t bDescriptorType; |
jksoft | 0:fccb789424fc | 185 | uint16_t wTotalLength; |
jksoft | 0:fccb789424fc | 186 | uint8_t bNumInterfaces; |
jksoft | 0:fccb789424fc | 187 | uint8_t bConfigurationValue; |
jksoft | 0:fccb789424fc | 188 | uint8_t iConfiguration; |
jksoft | 0:fccb789424fc | 189 | uint8_t bmAttributes; |
jksoft | 0:fccb789424fc | 190 | uint8_t bMaxPower; |
jksoft | 0:fccb789424fc | 191 | } ConfigurationDescriptor; |
jksoft | 0:fccb789424fc | 192 | |
jksoft | 0:fccb789424fc | 193 | typedef struct { |
jksoft | 0:fccb789424fc | 194 | uint8_t bLength; |
jksoft | 0:fccb789424fc | 195 | uint8_t bDescriptorType; |
jksoft | 0:fccb789424fc | 196 | uint8_t bInterfaceNumber; |
jksoft | 0:fccb789424fc | 197 | uint8_t bAlternateSetting; |
jksoft | 0:fccb789424fc | 198 | uint8_t bNumEndpoints; |
jksoft | 0:fccb789424fc | 199 | uint8_t bInterfaceClass; |
jksoft | 0:fccb789424fc | 200 | uint8_t bInterfaceSubClass; |
jksoft | 0:fccb789424fc | 201 | uint8_t bInterfaceProtocol; |
jksoft | 0:fccb789424fc | 202 | uint8_t iInterface; |
jksoft | 0:fccb789424fc | 203 | } InterfaceDescriptor; |
jksoft | 0:fccb789424fc | 204 | |
jksoft | 0:fccb789424fc | 205 | typedef struct { |
jksoft | 0:fccb789424fc | 206 | uint8_t bLength; |
jksoft | 0:fccb789424fc | 207 | uint8_t bDescriptorType; |
jksoft | 0:fccb789424fc | 208 | uint8_t bEndpointAddress; |
jksoft | 0:fccb789424fc | 209 | uint8_t bmAttributes; |
jksoft | 0:fccb789424fc | 210 | uint16_t wMaxPacketSize; |
jksoft | 0:fccb789424fc | 211 | uint8_t bInterval; |
jksoft | 0:fccb789424fc | 212 | } EndpointDescriptor; |
jksoft | 0:fccb789424fc | 213 | |
jksoft | 0:fccb789424fc | 214 | typedef struct { |
jksoft | 0:fccb789424fc | 215 | uint8_t bDescLength; |
jksoft | 0:fccb789424fc | 216 | uint8_t bDescriptorType; |
jksoft | 0:fccb789424fc | 217 | uint8_t bNbrPorts; |
jksoft | 0:fccb789424fc | 218 | uint16_t wHubCharacteristics; |
jksoft | 0:fccb789424fc | 219 | uint8_t bPwrOn2PwrGood; |
jksoft | 0:fccb789424fc | 220 | uint8_t bHubContrCurrent; |
jksoft | 0:fccb789424fc | 221 | uint8_t DeviceRemovable; |
jksoft | 0:fccb789424fc | 222 | uint8_t PortPweCtrlMak; |
jksoft | 0:fccb789424fc | 223 | } HubDescriptor; |
jksoft | 0:fccb789424fc | 224 | |
jksoft | 0:fccb789424fc | 225 | #endif |