うおーるぼっとを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

Committer:
jksoft
Date:
Mon Jun 10 16:01:50 2013 +0000
Revision:
0:fccb789424fc
1.0

Who changed what in which revision?

UserRevisionLine numberNew 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