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.
usbeh.h
00001 /**************************************************************************** 00002 * Copyright 2010 Andy Kirkham, Stellar Technologies Ltd 00003 * 00004 * This file is part of the Satellite Observers Workbench (SOWB). 00005 * 00006 * SOWB is free software: you can redistribute it and/or modify 00007 * it under the terms of the GNU General Public License as published by 00008 * the Free Software Foundation, either version 3 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * SOWB is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with SOWB. If not, see <http://www.gnu.org/licenses/>. 00018 * 00019 * $Id: main.cpp 5 2010-07-12 20:51:11Z ajk $ 00020 * 00021 ***************************************************************************/ 00022 00023 #ifndef USBEH_H 00024 #define USBEH_H 00025 00026 #include "sowb.h" 00027 00028 /* Definitions */ 00029 #define USBEH_HcRevision LPC_USB->HcRevision 00030 #define USBEH_HcControl LPC_USB->HcControl 00031 #define USBEH_HcCommandStatus LPC_USB->HcCommandStatus 00032 #define USBEH_HcInterruptStatus LPC_USB->HcInterruptStatus 00033 #define USBEH_HcInterruptEnable LPC_USB->HcInterruptEnable 00034 #define USBEH_HcInterruptDisable LPC_USB->HcInterruptDisable 00035 #define USBEH_HcHCCA LPC_USB->HcHCCA 00036 #define USBEH_entED LPC_USB->entED 00037 #define USBEH_HcControlHeadED LPC_USB->HcControlHeadED 00038 #define USBEH_HcControlCurrentED LPC_USB->HcControlCurrentED 00039 #define USBEH_HcBulkHeadED LPC_USB->HcBulkHeadED 00040 #define USBEH_HcBulkCurrentED LPC_USB->HcBulkCurrentED 00041 #define USBEH_HcDoneHead LPC_USB->HcDoneHead 00042 #define USBEH_HcFmInterval LPC_USB->HcFmInterval 00043 #define USBEH_HcFmRemaining LPC_USB->HcFmRemaining 00044 #define USBEH_HcFmNumber LPC_USB->HcFmNumber 00045 #define USBEH_HcPeriodicStart LPC_USB->HcPeriodicStart 00046 #define USBEH_HcLSTreshold LPC_USB->HcLSTreshold 00047 #define USBEH_HcRhDescriptorA LPC_USB->HcRhDescriptorA 00048 #define USBEH_HcRhDescriptorB LPC_USB->HcRhDescriptorB 00049 #define USBEH_HcRhStatus LPC_USB->HcRhStatus 00050 #define USBEH_HcRhPortStatus1 LPC_USB->HcRhPortStatus1 00051 #define USBEH_HcRhPortStatus2 LPC_USB->HcRhPortStatus2 00052 #define USBEH_Module_ID LPC_USB->Module_ID 00053 #define USBEH_OTGIntSt LPC_USB->OTGIntSt 00054 #define USBEH_OTGIntEn LPC_USB->OTGIntEn 00055 #define USBEH_OTGIntSet LPC_USB->OTGIntSet 00056 #define USBEH_OTGIntClr LPC_USB->OTGIntClr 00057 #define USBEH_OTGStCtrl LPC_USB->OTGStCtrl 00058 #define USBEH_OTGTmr LPC_USB->OTGTmr 00059 #define USBEH_USBDevIntSt LPC_USB->USBDevIntSt 00060 #define USBEH_USBDevIntEn LPC_USB->USBDevIntEn 00061 #define USBEH_USBDevIntClr LPC_USB->USBDevIntClr 00062 #define USBEH_USBDevIntSet LPC_USB->USBDevIntSet 00063 #define USBEH_USBCmdCode LPC_USB->USBCmdCode 00064 #define USBEH_USBCmdData LPC_USB->USBCmdData 00065 #define USBEH_USBRxData LPC_USB->USBRxData 00066 #define USBEH_USBTxData LPC_USB->USBTxData 00067 #define USBEH_USBRxPLen LPC_USB->USBRxPLen 00068 #define USBEH_USBTxPLen LPC_USB->USBTxPLen 00069 #define USBEH_USBCtrl LPC_USB->USBCtrl 00070 #define USBEH_USBDevIntPri LPC_USB->USBDevIntPri 00071 #define USBEH_USBEpIntSt LPC_USB->USBEpIntSt 00072 #define USBEH_USBEpIntEn LPC_USB->USBEpIntEn 00073 #define USBEH_USBEpIntClr LPC_USB->USBEpIntClr 00074 #define USBEH_USBEpIntSet LPC_USB->USBEpIntSet 00075 #define USBEH_USBEpIntPri LPC_USB->USBEpIntPri 00076 #define USBEH_USBReEp LPC_USB->USBReEp 00077 #define USBEH_USBEpInd LPC_USB->USBEpInd 00078 #define USBEH_USBMaxPSize LPC_USB->USBMaxPSize 00079 #define USBEH_USBDMARSt LPC_USB->USBDMARSt 00080 #define USBEH_USBDMARClr LPC_USB->USBDMARClr 00081 #define USBEH_USBDMARSet LPC_USB->USBDMARSet 00082 #define USBEH_USBUDCAH LPC_USB->USBUDCAH 00083 #define USBEH_USBEpDMASt LPC_USB->USBEpDMASt 00084 #define USBEH_USBEpDMAEn LPC_USB->USBEpDMAEn 00085 #define USBEH_USBEpDMADis LPC_USB->USBEpDMADis 00086 #define USBEH_USBDMAIntSt LPC_USB->USBDMAIntSt 00087 #define USBEH_USBDMAIntEn LPC_USB->USBDMAIntEn 00088 #define USBEH_USBEoTIntSt LPC_USB->USBEoTIntSt 00089 #define USBEH_USBEoTIntClr LPC_USB->USBEoTIntClr 00090 #define USBEH_USBEoTIntSet LPC_USB->USBEoTIntSet 00091 #define USBEH_USBNDDRIntSt LPC_USB->USBNDDRIntSt 00092 #define USBEH_USBNDDRIntClr LPC_USB->USBNDDRIntClr 00093 #define USBEH_USBNDDRIntSet LPC_USB->USBNDDRIntSet 00094 #define USBEH_USBSysErrIntSt LPC_USB->USBSysErrIntSt 00095 #define USBEH_USBSysErrIntClr LPC_USB->USBSysErrIntClr 00096 #define USBEH_USBSysErrIntSet LPC_USB->USBSysErrIntSet 00097 #define USBEH_I2C_RX LPC_USB->I2C_RX 00098 #define USBEH_I2C_WO LPC_USB->I2C_WO 00099 #define USBEH_I2C_STS LPC_USB->I2C_STS 00100 #define USBEH_I2C_CTL LPC_USB->I2C_CTL 00101 #define USBEH_I2C_CLKHI LPC_USB->I2C_CLKHI 00102 #define USBEH_I2C_CLKLO LPC_USB->I2C_CLKLO 00103 #define USBEH_USBClkCtrl LPC_USB->USBClkCtrl 00104 #define USBEH_OTGClkCtrl LPC_USB->OTGClkCtrl 00105 #define USBEH_USBClkSt LPC_USB->USBClkSt 00106 #define USBEH_OTGClkSt LPC_USB->OTGClkSt 00107 00108 void user_wait_ms(uint32_t ms); 00109 //#define USBEH_OS_DELAY_MS(x) wait_ms(x); 00110 #define USBEH_OS_DELAY_MS(x) user_wait_ms(x); 00111 00112 #define USBEH_U32 uint32_t 00113 #define USBEH_U16 unsigned short int 00114 #define USBEH_U08 unsigned char 00115 #define USBEH_S32 int32_t 00116 #define USBEH_S16 short int 00117 #define USBEH_S08 char 00118 00119 #define USBEH_MAX_ENDPOINTS_TOTAL 16 00120 #define USBEH_MAX_DEVICES 8 00121 #define USBEH_MAX_ENDPOINTS_PER_DEVICE 8 00122 00123 #define USBEH_ENDPOINT_CONTROL 0 00124 #define USBEH_ENDPOINT_ISOCRONOUS 1 00125 #define USBEH_ENDPOINT_BULK 2 00126 #define USBEH_ENDPOINT_INTERRUPT 3 00127 00128 #define USBEH_DESCRIPTOR_TYPE_DEVICE 1 00129 #define USBEH_DESCRIPTOR_TYPE_CONFIGURATION 2 00130 #define USBEH_DESCRIPTOR_TYPE_STRING 3 00131 #define USBEH_DESCRIPTOR_TYPE_INTERFACE 4 00132 #define USBEH_DESCRIPTOR_TYPE_ENDPOINT 5 00133 00134 #define USBEH_DESCRIPTOR_TYPE_HID 0x21 00135 #define USBEH_DESCRIPTOR_TYPE_REPORT 0x22 00136 #define USBEH_DESCRIPTOR_TYPE_PHYSICAL 0x23 00137 #define USBEH_DESCRIPTOR_TYPE_HUB 0x29 00138 00139 #define USBEH_HOST_CLK_EN (1 << 0) 00140 #define USBEH_PORTSEL_CLK_EN (1 << 3) 00141 #define USBEH_AHB_CLK_EN (1 << 4) 00142 #define USBEH_CLOCK_MASK (USBEH_HOST_CLK_EN | USBEH_PORTSEL_CLK_EN | USBEH_AHB_CLK_EN) 00143 #define USBEH_FRAMEINTERVAL (12000-1) // 1ms 00144 #define USBEH_DEFAULT_FMINTERVAL ((((6 * (USBEH_FRAMEINTERVAL - 210)) / 7) << 16) | USBEH_FRAMEINTERVAL) 00145 #define USBEH_HOST_CONTROLLER_RESET 0x01 00146 #define USBEH_HOST_CONTROLLER_FUNCTIONAL_STATE 0xC0 00147 #define USBEH_OPERATIONAL_MASK 0x80 00148 #define USBEH_SET_GLOBAL_POWER 0x00010000 00149 00150 #define USBEH_WRITEBACK_DONE_HEAD 0x00000002 00151 #define USBEH_START_OF_FRAME 0x00000004 00152 #define USBEH_RESUME_DETECTED 0x00000008 00153 #define USBEH_UNRECOVERABLE_ERROR 0x00000010 00154 #define USBEH_FRAME_NUMBER_OVERFLOW 0x00000020 00155 #define USBEH_ROOT_HUB_STATUS_CHANGE 0x00000040 00156 #define USBEH_OWNERSHIP_CHANGE 0x00000080 00157 #define USBEH_MASTER_IRQ_ENABLE 0x80000000 00158 00159 enum USB_CLASS_CODE { 00160 CLASS_DEVICE, 00161 CLASS_AUDIO, 00162 CLASS_COMM_AND_CDC_CONTROL, 00163 CLASS_HID, 00164 CLASS_PHYSICAL = 0x05, 00165 CLASS_STILL_IMAGING, 00166 CLASS_PRINTER, 00167 CLASS_MASS_STORAGE, 00168 CLASS_HUB, 00169 CLASS_CDC_DATA, 00170 CLASS_SMART_CARD, 00171 CLASS_CONTENT_SECURITY = 0x0D, 00172 CLASS_VIDEO = 0x0E, 00173 CLASS_DIAGNOSTIC_DEVICE = 0xDC, 00174 CLASS_WIRELESS_CONTROLLER = 0xE0, 00175 CLASS_MISCELLANEOUS = 0xEF, 00176 CLASS_APP_SPECIFIC = 0xFE, 00177 CLASS_VENDOR_SPECIFIC = 0xFF 00178 }; 00179 00180 #define USBEH_DEVICE_TO_HOST 0x80 00181 #define USBEH_HOST_TO_DEVICE 0x00 00182 #define USBEH_REQUEST_TYPE_CLASS 0x20 00183 #define USBEH_RECIPIENT_DEVICE 0x00 00184 #define USBEH_RECIPIENT_INTERFACE 0x01 00185 #define USBEH_RECIPIENT_ENDPOINT 0x02 00186 #define USBEH_RECIPIENT_OTHER 0x03 00187 00188 #define USBEH_SETUP_TYPE_MASK_STANDARD 0x00 00189 #define USBEH_SETUP_TYPE_MASK_CLASS 0x20 00190 #define USBEH_SETUP_TYPE_MASK_VENDOR 0x40 00191 #define USBEH_SETUP_TYPE_MASK_RESERVED 0x60 00192 00193 #define USBEH_GET_STATUS 0 00194 #define USBEH_CLEAR_FEATURE 1 00195 #define USBEH_SET_FEATURE 3 00196 #define USBEH_SET_ADDRESS 5 00197 #define USBEH_GET_DESCRIPTOR 6 00198 #define USBEH_SET_DESCRIPTOR 7 00199 #define USBEH_GET_CONFIGURATION 8 00200 #define USBEH_SET_CONFIGURATION 9 00201 #define USBEH_GET_INTERFACE 10 00202 #define USBEH_SET_INTERFACE 11 00203 #define USBEH_SYNCH_FRAME 11 00204 00205 // Status flags from hub 00206 #define USBEH_PORT_CONNECTION 0 00207 #define USBEH_PORT_ENABLE 1 00208 #define USBEH_PORT_SUSPEND 2 00209 #define USBEH_PORT_OVER_CURRENT 3 00210 #define USBEH_PORT_RESET 4 00211 #define USBEH_PORT_POWER 8 00212 #define USBEH_PORT_LOW_SPEED 9 00213 00214 #define USBEH_C_PORT_CONNECTION 16 00215 #define USBEH_C_PORT_ENABLE 17 00216 #define USBEH_C_PORT_SUSPEND 18 00217 #define USBEH_C_PORT_OVER_CURRENT 19 00218 #define USBEH_C_PORT_RESET 20 00219 00220 #define USBEH_IO_PENDING -100 00221 #define USBEH_ERR_ENDPOINT_NONE_LEFT -101 00222 #define USBEH_ERR_ENDPOINT_NOT_FOUND -102 00223 #define USBEH_ERR_DEVICE_NOT_FOUND -103 00224 #define USBEH_ERR_DEVICE_NONE_LEFT -104 00225 #define USBEH_ERR_HUB_INIT_FAILED -105 00226 #define USBEH_ERR_INTERFACE_NOT_FOUND -106 00227 00228 #define USBEH_TOKEN_SETUP 0 00229 #define USBEH_TOKEN_IN 1 00230 #define USBEH_TOKEN_OUT 2 00231 00232 #define USBEH_TD_ROUNDING (USBEH_U32)0x00040000 00233 #define USBEH_TD_SETUP (USBEH_U32)0x00000000 00234 #define USBEH_TD_IN (USBEH_U32)0x00100000 00235 #define USBEH_TD_OUT (USBEH_U32)0x00080000 00236 #define USBEH_TD_DELAY_INT(x) (USBEH_U32)((x) << 21) 00237 #define USBEH_TD_TOGGLE_0 (USBEH_U32)0x02000000 00238 #define USBEH_TD_TOGGLE_1 (USBEH_U32)0x03000000 00239 #define USBEH_TD_CC (USBEH_U32)0xF0000000 00240 00241 typedef struct { 00242 USBEH_U08 bLength; 00243 USBEH_U08 bDescriptorType; 00244 USBEH_U16 bcdUSB; 00245 USBEH_U08 bDeviceClass; 00246 USBEH_U08 bDeviceSubClass; 00247 USBEH_U08 bDeviceProtocol; 00248 USBEH_U08 bMaxPacketSize; 00249 USBEH_U16 idVendor; 00250 USBEH_U16 idProduct; 00251 USBEH_U16 bcdDevice; 00252 USBEH_U08 iManufacturer; 00253 USBEH_U08 iProduct; 00254 USBEH_U08 iSerialNumber; 00255 USBEH_U08 bNumConfigurations; 00256 } USBEH_deviceDescriptor; 00257 00258 typedef struct { 00259 USBEH_U08 bLength; 00260 USBEH_U08 bDescriptorType; 00261 USBEH_U16 wTotalLength; 00262 USBEH_U08 bNumInterfaces; 00263 USBEH_U08 bConfigurationValue; 00264 USBEH_U08 iConfiguration; 00265 USBEH_U08 bmAttributes; 00266 USBEH_U08 bMaxPower; 00267 } USBEH_configurationDescriptor; 00268 00269 typedef struct { 00270 USBEH_U08 bLength; 00271 USBEH_U08 bDescriptorType; 00272 USBEH_U08 bInterfaceNumber; 00273 USBEH_U08 bAlternateSetting; 00274 USBEH_U08 bNumEndpoints; 00275 USBEH_U08 bInterfaceClass; 00276 USBEH_U08 bInterfaceSubClass; 00277 USBEH_U08 bInterfaceProtocol; 00278 USBEH_U08 iInterface; 00279 } USBEH_interfaceDescriptor; 00280 00281 typedef struct { 00282 USBEH_U08 bLength; 00283 USBEH_U08 bDescriptorType; 00284 USBEH_U08 bEndpointAddress; 00285 USBEH_U08 bmAttributes; 00286 USBEH_U16 wMaxPacketSize; 00287 USBEH_U08 bInterval; 00288 } USBEH_endpointDescriptor; 00289 00290 typedef struct { 00291 USBEH_U08 bLength; 00292 USBEH_U08 bDescriptorType; 00293 USBEH_U16 bcdHID; 00294 USBEH_U08 bCountryCode; 00295 USBEH_U08 bNumDescriptors; 00296 USBEH_U08 bDescriptorType2; 00297 USBEH_U16 wDescriptorLength; 00298 } USBEH_HIDDescriptor; 00299 00300 typedef struct { 00301 volatile USBEH_U32 control; 00302 volatile USBEH_U32 tailTd; 00303 volatile USBEH_U32 headTd; 00304 volatile USBEH_U32 next; 00305 } USBEH_HCED; 00306 00307 typedef struct { 00308 volatile USBEH_U32 control; 00309 volatile USBEH_U32 currentBufferPointer; 00310 volatile USBEH_U32 next; 00311 volatile USBEH_U32 bufferEnd; 00312 } USBEH_HCTD; 00313 00314 typedef struct { 00315 volatile USBEH_U32 interruptTable[32]; 00316 volatile USBEH_U16 frameNumber; 00317 volatile USBEH_U16 frameNumberPad; 00318 volatile USBEH_U32 doneHead; 00319 volatile USBEH_U08 Reserved[120]; 00320 } USBEH_HCCA; 00321 00322 typedef struct { 00323 USBEH_U08 bm_request_type; 00324 USBEH_U08 b_request; 00325 USBEH_U16 w_value; 00326 USBEH_U16 w_index; 00327 USBEH_U16 w_length; 00328 } USBEH_Setup; 00329 00330 typedef void (*USBEH_callback)(int device, int endpoint, int status, USBEH_U08* data, int len, void* userData); 00331 00332 #define USBEH_SOF_COUNTER_INC 1 00333 #define USBEH_SOF_COUNTER_DEC 2 00334 #define USBEH_SOF_COUNTER_DEC_HALT_AT_ZERO 4 00335 #define USBEH_SOF_COUNTER_RELOAD 8 00336 00337 typedef struct _sof_counter { 00338 USBEH_U08 mode; 00339 USBEH_U08 flag; 00340 USBEH_U32 counter; 00341 USBEH_U32 reload; 00342 USBEH_U32 userData; 00343 void (*callback)(struct _sof_counter *); 00344 _sof_counter *next; 00345 } USBEH_SOF_COUNTER; 00346 00347 //typedef void (*USBCallback)(int device, int endpoint, int status, USBEH_U08* data, int len, void* userData); 00348 00349 00350 // Macros. 00351 00352 #define USBEH_CURRENT_CONNECT_STATUS 0x01 00353 #define USBEH_CONNECT_STATUS_CHANGE (USBEH_CURRENT_CONNECT_STATUS << 16) 00354 #define USBEH_PORT_RESET_STATUS 0x10 00355 #define USBEH_PORT_RESET_STATUS_CAHNGE (USBEH_PORT_RESET_STATUS << 16) 00356 #define USBEH_CONTROL_LIST_ENABLE 0x10 00357 #define USBEH_CONTROL_LIST_FILLED 0x02; 00358 #define USBEH_BULK_LIST_ENABLE 0x20 00359 #define USBEH_BULK_LIST_FILLED 0x04 00360 #define USBEH_PERIODIC_LIST_ENABLE 0x04 00361 #define USBEH_PORT_RESET_STATUS 0x10 00362 #define USBEH_PORT_RESET_STATUS_CHANGE (USBEH_PORT_RESET_STATUS << 16) 00363 #define USBEH_LOW_SPEED_DEVICE 0x200 00364 #define USBEH_HIGH_SPEED_DEVICE 0x400 00365 00366 #endif
Generated on Tue Jul 12 2022 18:05:35 by
1.7.2