| Line No. | Rev | Author | Line |
|---|---|---|---|
| 1 | 32 | kaklik | /****************************************************************************** |
| 2 | |||
| 3 | USB Hardware Abstraction Layer (HAL) (Header File) |
||
| 4 | |||
| 5 | Summary: |
||
| 6 | This file abstracts the hardware interface. |
||
| 7 | |||
| 8 | Description: |
||
| 9 | This file abstracts the hardware interface. |
||
| 10 | |||
| 11 | This file is located in the "\<Install Directory\>\\Microchip\\Include\\USB" |
||
| 12 | directory. |
||
| 13 | |||
| 14 | When including this file in a new project, this file can either be |
||
| 15 | referenced from the directory in which it was installed or copied |
||
| 16 | directly into the user application folder. If the first method is |
||
| 17 | chosen to keep the file located in the folder in which it is installed |
||
| 18 | then include paths need to be added so that the library and the |
||
| 19 | application both know where to reference each others files. If the |
||
| 20 | application folder is located in the same folder as the Microchip |
||
| 21 | folder (like the current demo folders), then the following include |
||
| 22 | paths need to be added to the application's project: |
||
| 23 | |||
| 24 | . |
||
| 25 | ..\\..\\MicrochipInclude |
||
| 26 | |||
| 27 | If a different directory structure is used, modify the paths as |
||
| 28 | required. An example using absolute paths instead of relative paths |
||
| 29 | would be the following: |
||
| 30 | |||
| 31 | C:\\Microchip Solutions\\Microchip\\Include |
||
| 32 | |||
| 33 | C:\\Microchip Solutions\\My Demo Application |
||
| 34 | *******************************************************************************/ |
||
| 35 | //DOM-IGNORE-BEGIN |
||
| 36 | /****************************************************************************** |
||
| 37 | |||
| 38 | File Description: |
||
| 39 | |||
| 40 | This file defines the interface to the USB hardware abstraction layer. |
||
| 41 | |||
| 42 | Filename: usb_hal.h |
||
| 43 | Dependancies: none |
||
| 44 | Processor: PIC18, PIC24, or PIC32 USB Microcontrollers |
||
| 45 | Hardware: The code is natively intended to be used on the following |
||
| 46 | hardware platforms: PICDEM FS USB Demo Board, |
||
| 47 | PIC18F87J50 FS USB Plug-In Module, or |
||
| 48 | Explorer 16 + PIC24 USB PIM. The firmware may be |
||
| 49 | modified for use on other USB platforms by editing the |
||
| 50 | HardwareProfile.h file. |
||
| 51 | Compiler: Microchip C18 (for PIC18) or C30 (for PIC24) |
||
| 52 | Company: Microchip Technology, Inc. |
||
| 53 | |||
| 54 | Software License Agreement: |
||
| 55 | |||
| 56 | The software supplied herewith by Microchip Technology Incorporated |
||
| 57 | (the Company) for its PICmicro® Microcontroller is intended and |
||
| 58 | supplied to you, the Companys customer, for use solely and |
||
| 59 | exclusively on Microchip PICmicro Microcontroller products. The |
||
| 60 | software is owned by the Company and/or its supplier, and is |
||
| 61 | protected under applicable copyright laws. All rights are reserved. |
||
| 62 | Any use in violation of the foregoing restrictions may subject the |
||
| 63 | user to criminal sanctions under applicable laws, as well as to |
||
| 64 | civil liability for the breach of the terms and conditions of this |
||
| 65 | license. |
||
| 66 | |||
| 67 | THIS SOFTWARE IS PROVIDED IN AN AS IS CONDITION. NO WARRANTIES, |
||
| 68 | WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED |
||
| 69 | TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
||
| 70 | PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, |
||
| 71 | IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR |
||
| 72 | CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. |
||
| 73 | |||
| 74 | *************************************************************************/ |
||
| 75 | |||
| 76 | /******************************************************************** |
||
| 77 | Change History: |
||
| 78 | Rev Description |
||
| 79 | ---- ----------- |
||
| 80 | 2.6- No Change |
||
| 81 | 2.6a |
||
| 82 | |||
| 83 | 2.7 Minor changes changes to the structure of the conditional |
||
| 84 | compilation statement ordering. |
||
| 85 | |||
| 86 | 2.7a No Change |
||
| 87 | ********************************************************************/ |
||
| 88 | |||
| 89 | #ifndef _USB_HAL_H_ |
||
| 90 | #define _USB_HAL_H_ |
||
| 91 | //DOM-IGNORE-END |
||
| 92 | |||
| 93 | #if defined(__18CXX) |
||
| 94 | #include "USB\usb_hal_pic18.h" |
||
| 95 | #elif defined(__C30__) |
||
| 96 | #include "USB\usb_hal_pic24.h" |
||
| 97 | #elif defined(__PIC32MX__) |
||
| 98 | #include "USB\usb_hal_pic32.h" |
||
| 99 | #else |
||
| 100 | #error "Silicon Platform not defined" |
||
| 101 | #endif |
||
| 102 | |||
| 103 | |||
| 104 | /********************** |
||
| 105 | Interface Routines |
||
| 106 | **********************/ |
||
| 107 | |||
| 108 | /************************************************************************* |
||
| 109 | Function: |
||
| 110 | void USBHALSetBusAddress( BYTE addr ) |
||
| 111 | |||
| 112 | Description: |
||
| 113 | This routine sets the address of the system on the USB |
||
| 114 | when acting as a peripheral device. |
||
| 115 | |||
| 116 | Preconditions: |
||
| 117 | 1. USBHALInitialize must have been called to |
||
| 118 | initialize the USB HAL. |
||
| 119 | 2. Endpoint zero (0) must be configured as appropriate |
||
| 120 | by calls to USBHALSetEpConfiguration. |
||
| 121 | 3. The system must have been enumerated on the USB (as |
||
| 122 | a device). |
||
| 123 | |||
| 124 | Parameters: |
||
| 125 | addr Desired address of this device on the USB. |
||
| 126 | |||
| 127 | Return Values: |
||
| 128 | None |
||
| 129 | |||
| 130 | Side Effect: |
||
| 131 | The bus address has been set. |
||
| 132 | |||
| 133 | Remmarks: |
||
| 134 | The address is assigned by the host and is received in |
||
| 135 | a SET_ADDRESS setup request. |
||
| 136 | |||
| 137 | *************************************************************************/ |
||
| 138 | /* |
||
| 139 | This routine is implemented as a macro to a lower-level level routine. |
||
| 140 | */ |
||
| 141 | |||
| 142 | #define USBHALSetBusAddress OTGCORE_SetDeviceAddr |
||
| 143 | |||
| 144 | void USBHALSetBusAddress( BYTE addr ); |
||
| 145 | |||
| 146 | |||
| 147 | /************************************************************************* |
||
| 148 | Function: |
||
| 149 | void USBHALControlUsbResistors( BYTE flags ); |
||
| 150 | |||
| 151 | Description: |
||
| 152 | This routine enables or disables the USB pull-up or |
||
| 153 | pull-down resistors as requested. |
||
| 154 | |||
| 155 | Precondition: |
||
| 156 | USBInitialize must have been called to initialize the |
||
| 157 | USB SW stack. |
||
| 158 | |||
| 159 | Parameters: |
||
| 160 | flags - This is a bit-mapped flags value indicating |
||
| 161 | which resistors to enable or disable (see below). |
||
| 162 | |||
| 163 | Return Values: |
||
| 164 | TRUE if successful, FALSE if not. |
||
| 165 | |||
| 166 | Side Effects: |
||
| 167 | The resistors are enabled as requested. |
||
| 168 | |||
| 169 | Remarks: |
||
| 170 | Used for USB peripheral control to connect to or |
||
| 171 | disconnect from the bus. Otherwise, used for OTG |
||
| 172 | SRP/HNP and host support. |
||
| 173 | |||
| 174 | *************************************************************************/ |
||
| 175 | |||
| 176 | /* |
||
| 177 | This routine is implemented as a macro to a lower-level level routine. |
||
| 178 | */ |
||
| 179 | #if defined(__18CXX) |
||
| 180 | void USBHALControlUsbResistors( BYTE flags ); |
||
| 181 | #else |
||
| 182 | #define USBHALControlUsbResistors OTGCORE_ControlUsbResistors |
||
| 183 | void USBHALControlUsbResistors( BYTE flags ); |
||
| 184 | #endif |
||
| 185 | |||
| 186 | /* USBHALControlUsbResistors flags */ |
||
| 187 | #define USB_HAL_PULL_UP_D_PLUS 0x80 // Pull D+ line high |
||
| 188 | #define USB_HAL_PULL_UP_D_MINUS 0x40 // Pull D- line high |
||
| 189 | #define USB_HAL_PULL_DN_D_PLUS 0x20 // Pull D+ line low |
||
| 190 | #define USB_HAL_PULL_DN_D_MINUS 0x10 // Pull D- line low |
||
| 191 | /* |
||
| 192 | The following are defined for convenience: |
||
| 193 | */ |
||
| 194 | #define USB_HAL_DEV_CONN_FULL_SPD USB_HAL_PULL_UP_D_PLUS |
||
| 195 | #define USB_HAL_DEV_CONN_LOW_SPD USB_HAL_PULL_UP_D_MINUS |
||
| 196 | #define USB_HAL_DEV_DISCONNECT 0 |
||
| 197 | |||
| 198 | |||
| 199 | /* |
||
| 200 | To Do: Define a method to check for SE0 & a way to send a reset (SE0). |
||
| 201 | */ |
||
| 202 | |||
| 203 | |||
| 204 | /************************************************************************* |
||
| 205 | Function: |
||
| 206 | BOOL USBHALSessionIsValid( void ) |
||
| 207 | |||
| 208 | Description: |
||
| 209 | This routine determines if there is currently a valid |
||
| 210 | USB session or not. |
||
| 211 | |||
| 212 | Precondition: |
||
| 213 | USBInitialize must have been called to initialize the |
||
| 214 | USB SW stack. |
||
| 215 | |||
| 216 | Parameters: |
||
| 217 | None |
||
| 218 | |||
| 219 | Return Values: |
||
| 220 | TRUE if the session is currently valid, FALSE if not. |
||
| 221 | |||
| 222 | Remarks: |
||
| 223 | Only used for host and OTG support. |
||
| 224 | |||
| 225 | *************************************************************************/ |
||
| 226 | |||
| 227 | BOOL USBHALSessionIsValid( void ); |
||
| 228 | |||
| 229 | |||
| 230 | /************************************************************************* |
||
| 231 | Function: |
||
| 232 | USBHALControlBusPower |
||
| 233 | |||
| 234 | Description: |
||
| 235 | This routine provides a bitmap of the most recent |
||
| 236 | error conditions to occur. |
||
| 237 | |||
| 238 | Precondition: |
||
| 239 | USBInitialize must have been called to initialize the |
||
| 240 | USB SW stack. |
||
| 241 | |||
| 242 | Parameters: |
||
| 243 | cmd - Identifies desired command (see below). |
||
| 244 | |||
| 245 | Return Values: |
||
| 246 | TRUE if successful, FALSE if not. |
||
| 247 | |||
| 248 | Remarks: |
||
| 249 | Only used for host and OTG support. |
||
| 250 | |||
| 251 | *************************************************************************/ |
||
| 252 | |||
| 253 | BOOL USBHALControlBusPower( BYTE cmd ); |
||
| 254 | |||
| 255 | /* USBHALControlBusPower Commands */ |
||
| 256 | #define USB_VBUS_DISCHARGE 0 // Dicharge Vbus via resistor |
||
| 257 | #define USB_VBUS_CHARGE 1 // Charge Vbus via resistor |
||
| 258 | #define USB_VBUS_POWER_ON 3 // Supply power to Vbus |
||
| 259 | #define USB_VBUS_POWER_OFF 4 // Do not supply power to Vbus |
||
| 260 | /* |
||
| 261 | Note: All commands except USB_VBUS_POWER_ON imply that this device |
||
| 262 | does not actively supply power to Vbus. |
||
| 263 | */ |
||
| 264 | |||
| 265 | |||
| 266 | /************************************************************************* |
||
| 267 | Function: |
||
| 268 | unsigned long USBHALGetLastError( void ) |
||
| 269 | |||
| 270 | Description: |
||
| 271 | This routine provides a bitmap of the most recent |
||
| 272 | error conditions to occur. |
||
| 273 | |||
| 274 | Precondition: |
||
| 275 | USBInitialize must have been called to initialize the |
||
| 276 | USB SW stack. |
||
| 277 | |||
| 278 | Parameters: |
||
| 279 | None |
||
| 280 | |||
| 281 | Return Values: |
||
| 282 | Bitmap indicating the most recent error condition(s). |
||
| 283 | |||
| 284 | Side Effect: |
||
| 285 | Error record is cleared. |
||
| 286 | |||
| 287 | Remarks: |
||
| 288 | Although record of the error state is cleared, nothing |
||
| 289 | is done to fix the condition or recover from the |
||
| 290 | error. The client must take appropriate steps. |
||
| 291 | |||
| 292 | *************************************************************************/ |
||
| 293 | |||
| 294 | unsigned long USBHALGetLastError( void ); |
||
| 295 | |||
| 296 | /* |
||
| 297 | USBHALGetLastError Error Bits. |
||
| 298 | */ |
||
| 299 | #define USBHAL_PID_ERR 0x00000001 // Packet ID Error |
||
| 300 | #define USBHAL_CRC5 0x00000002 // (Host) Token CRC5 check failed |
||
| 301 | #define USBHAL_HOST_EOF 0x00000002 // (Host) EOF not reached before next SOF |
||
| 302 | #define USBHAL_CRC16 0x00000004 // Data packet CRC error |
||
| 303 | #define USBHAL_DFN8 0x00000008 // Data field size not n*8 bits |
||
| 304 | #define USBHAL_BTO_ERR 0x00000010 // Bus turn-around timeout |
||
| 305 | #define USBHAL_DMA_ERR 0x00000020 // DMA error, unable to read/write memory |
||
| 306 | #define USBHAL_BTS_ERR 0x00000080 // Bit-stuffing error |
||
| 307 | #define USBHAL_XFER_ID 0x00000100 // Unable to identify transfer EP |
||
| 308 | #define USBHAL_NO_EP 0x00000200 // Invalid endpoint number |
||
| 309 | #define USBHAL_DMA_ERR2 0x00000400 // Error starting DMA transaction |
||
| 310 | |||
| 311 | |||
| 312 | /************************************************************************* |
||
| 313 | Function: |
||
| 314 | void USBHALHandleBusEvent ( void ) |
||
| 315 | |||
| 316 | Description: |
||
| 317 | This routine checks the USB for any events that may |
||
| 318 | have occured and handles them appropriately. It may |
||
| 319 | be called directly to poll the USB and handle events |
||
| 320 | or it may be called in response to an interrupt. |
||
| 321 | |||
| 322 | Precondition: |
||
| 323 | USBInitialize must have been called to initialize the |
||
| 324 | USB SW stack. |
||
| 325 | |||
| 326 | Parameters: |
||
| 327 | None |
||
| 328 | |||
| 329 | Return Values: |
||
| 330 | None |
||
| 331 | |||
| 332 | Side Effects: |
||
| 333 | Depend on the event that may have occured. |
||
| 334 | |||
| 335 | Remarks: |
||
| 336 | None |
||
| 337 | |||
| 338 | *************************************************************************/ |
||
| 339 | |||
| 340 | void USBHALHandleBusEvent ( void ); |
||
| 341 | |||
| 342 | |||
| 343 | /************************************************************************* |
||
| 344 | Function: |
||
| 345 | BOOL USBHALStallPipe( TRANSFER_FLAGS pipe ) |
||
| 346 | |||
| 347 | Description: |
||
| 348 | This routine stalls the given endpoint. |
||
| 349 | |||
| 350 | Preconditions: |
||
| 351 | USBHALInitialize must have been called to initialize |
||
| 352 | the USB HAL. |
||
| 353 | |||
| 354 | Parameters: |
||
| 355 | pipe - Uses the TRANSFER_FLAGS (see USBCommon.h) format to |
||
| 356 | identify the endpoint and direction making up the |
||
| 357 | pipe to stall. |
||
| 358 | |||
| 359 | Note: Only ep_num and direction fields are required. |
||
| 360 | |||
| 361 | Return Values: |
||
| 362 | TRUE if able to stall endpoint, FALSE if not. |
||
| 363 | |||
| 364 | Side Effects: |
||
| 365 | The endpoint will stall if additional data transfer is |
||
| 366 | attempted. |
||
| 367 | Given endpoint has been stalled. |
||
| 368 | |||
| 369 | Remarks: |
||
| 370 | Starting another data transfer automatically |
||
| 371 | "un-stalls" the endpoint. |
||
| 372 | |||
| 373 | *************************************************************************/ |
||
| 374 | /* |
||
| 375 | Note: This function is implemented as a macro, calling directly into |
||
| 376 | an internal HAL routine. |
||
| 377 | */ |
||
| 378 | |||
| 379 | #define USBHALStallPipe OTGCORE_StallPipe |
||
| 380 | |||
| 381 | BOOL USBHALStallPipe( TRANSFER_FLAGS pipe ); |
||
| 382 | |||
| 383 | |||
| 384 | /****************************************************************************** |
||
| 385 | Function: |
||
| 386 | BOOL USBHALUnstallPipe( TRANSFER_FLAGS pipe ) |
||
| 387 | |||
| 388 | Description: |
||
| 389 | This routine clears the stall condition for the given pipe. |
||
| 390 | |||
| 391 | PreCondition: |
||
| 392 | Assumes OTGCORE_DeviceEnable has been called and |
||
| 393 | OTGCORE_StallPipe has been called on the given pipe. |
||
| 394 | |||
| 395 | Parameters: |
||
| 396 | pipe - Uses the TRANSFER_FLAGS (see USBCommon.h) format to |
||
| 397 | identify the endpoint and direction making up the |
||
| 398 | pipe to unstall. |
||
| 399 | |||
| 400 | Return Values: |
||
| 401 | TRUE if able to stall the pipe, FALSE if not. |
||
| 402 | |||
| 403 | Side Effects: |
||
| 404 | The BSTALL and UOWN bits (and all other control bits) in |
||
| 405 | the BDT for the given pipe will be cleared. |
||
| 406 | |||
| 407 | Remarks: |
||
| 408 | None |
||
| 409 | |||
| 410 | *****************************************************************************/ |
||
| 411 | /* |
||
| 412 | Note: This function is implemented as a macro, calling directly into |
||
| 413 | an internal HAL routine. |
||
| 414 | */ |
||
| 415 | |||
| 416 | #define USBHALUnstallPipe OTGCORE_UnstallPipe |
||
| 417 | |||
| 418 | BOOL USBHALUnstallPipe( TRANSFER_FLAGS pipe ); |
||
| 419 | |||
| 420 | |||
| 421 | /************************************************************************** |
||
| 422 | Function: |
||
| 423 | USBHALGetStalledEndpoints |
||
| 424 | |||
| 425 | Description: |
||
| 426 | This function returns a 16-bit bitmapped value with a |
||
| 427 | bit set in the position of any endpoint that is stalled |
||
| 428 | (i.e. if endpoint 0 is stalled then bit 0 is set, if |
||
| 429 | endpoint 1 is stalled then bit 1 is set, etc.). |
||
| 430 | |||
| 431 | Preconditions: |
||
| 432 | USBHALInitialize must have been called to initialize |
||
| 433 | the USB HAL. |
||
| 434 | |||
| 435 | Parameters: |
||
| 436 | None |
||
| 437 | |||
| 438 | Return Values: |
||
| 439 | Bitmap of the currently stalled endpoints (see overview). |
||
| 440 | |||
| 441 | Remarks: |
||
| 442 | None |
||
| 443 | *************************************************************************/ |
||
| 444 | |||
| 445 | /* |
||
| 446 | Note: This function is implemented as a macro, calling directly into |
||
| 447 | a HAL routine. |
||
| 448 | */ |
||
| 449 | |||
| 450 | #define USBHALGetStalledEndpoints OTGCORE_GetStalledEndpoints |
||
| 451 | |||
| 452 | UINT16 USBHALGetStalledEndpoints ( void ); |
||
| 453 | |||
| 454 | |||
| 455 | /****************************************************************************** |
||
| 456 | Function: |
||
| 457 | BOOL USBHALFlushPipe( TRANSFER_FLAGS pipe ) |
||
| 458 | |||
| 459 | Description: |
||
| 460 | This routine clears any pending transfers on the given |
||
| 461 | pipe. |
||
| 462 | |||
| 463 | Preconditions: |
||
| 464 | USBHALInitialize must have been called to initialize the |
||
| 465 | USB HAL. |
||
| 466 | |||
| 467 | The caller must ensure that there is no possible way for |
||
| 468 | hardware to be currently accessing the pipe (see notes). |
||
| 469 | |||
| 470 | Parameters: |
||
| 471 | pipe - Uses the TRANSFER_FLAGS (see USBCommon.h) format to |
||
| 472 | identify the endpoint and direction making up the |
||
| 473 | pipe to flush. |
||
| 474 | |||
| 475 | Return Values: |
||
| 476 | TRUE if successful, FALSE if not. |
||
| 477 | |||
| 478 | Side Effects: |
||
| 479 | Transfer data for this pipe has been zero'd out. |
||
| 480 | |||
| 481 | Remarks: |
||
| 482 | This routine ignores the normal HW protocol for ownership |
||
| 483 | of the pipe data and flushes the pipe, even if it is in |
||
| 484 | process. Thus, the caller must ensure that data transfer |
||
| 485 | cannot be in process. This situation occurs when a |
||
| 486 | transfer has been terminated early by the host. |
||
| 487 | *****************************************************************************/ |
||
| 488 | |||
| 489 | BOOL USBHALFlushPipe( TRANSFER_FLAGS pipe ); |
||
| 490 | |||
| 491 | |||
| 492 | /************************************************************************** |
||
| 493 | Function: |
||
| 494 | USBHALTransferData |
||
| 495 | |||
| 496 | Description: |
||
| 497 | This routine prepares to transfer data on the USB. |
||
| 498 | If the system is in device mode, the actual transfer |
||
| 499 | will not occur until the host peforms an OUT request |
||
| 500 | to the given endpoint. If the system is in host mode, |
||
| 501 | the transfer will not start until the token has been |
||
| 502 | sent on the bus. |
||
| 503 | |||
| 504 | Preconditions: |
||
| 505 | 1. USBHALInitialize must have been called to |
||
| 506 | initialize the USB HAL. |
||
| 507 | 2. The endpoint through which the data will be |
||
| 508 | transferred must be configured as appropriate by a |
||
| 509 | call to USBHALSetEpConfiguration. |
||
| 510 | 3. The bus must have been enumerated (either as a host |
||
| 511 | or device). Except for EP0 transfers. |
||
| 512 | |||
| 513 | Parameters: |
||
| 514 | flags - Flags consists of the endpoint number OR'd |
||
| 515 | with one or more flags indicating transfer |
||
| 516 | direction and such (see "Data Transfer |
||
| 517 | Macros" in USBCommon.h): |
||
| 518 | |||
| 519 | 7 6 5 4 3 2 1 0 - Description |
||
| 520 | | | | | \_____/ |
||
| 521 | | | | | +----- Endpoint Number |
||
| 522 | | | | +---------- Short or zero-size pkt |
||
| 523 | | | +------------ Data Toggle 0/1 |
||
| 524 | | +-------------- Force Data Toggle |
||
| 525 | +---------------- 1=Transmit/0=Receive |
||
| 526 | |||
| 527 | buffer Address of the buffer to receive data. |
||
| 528 | |||
| 529 | size Number of bytes of data to transfer. |
||
| 530 | |||
| 531 | Return Values: |
||
| 532 | TRUE if the HAL was able to successfully start the |
||
| 533 | data transfer, FALSE if not. |
||
| 534 | |||
| 535 | Side Effects: |
||
| 536 | The HAL has prepared to transfer the data on the USB. |
||
| 537 | |||
| 538 | Ramarks: |
||
| 539 | The HAL will continue the data transfer, keeping track |
||
| 540 | of the buffer address, data remaining, and ping-pong |
||
| 541 | buffer details internally when USBHALHandleBusEvent is |
||
| 542 | called (either polled or in response to an interrupt). |
||
| 543 | The caller will receive notification that the transfer |
||
| 544 | has completed when the EVT_XFER event is passed into |
||
| 545 | the USBHALBusEventCallout call-out function. |
||
| 546 | |||
| 547 | *************************************************************************/ |
||
| 548 | |||
| 549 | BOOL USBHALTransferData ( TRANSFER_FLAGS flags, |
||
| 550 | void *buffer, |
||
| 551 | unsigned int size ); |
||
| 552 | |||
| 553 | |||
| 554 | /************************************************************************* |
||
| 555 | Function: |
||
| 556 | USBHALSetEpConfiguration |
||
| 557 | |||
| 558 | Description: |
||
| 559 | This routine allows the caller to configure various |
||
| 560 | options (see "Flags for USBHALSetEpConfiguration", |
||
| 561 | below) and set the behavior for the given endpoint. |
||
| 562 | |||
| 563 | Precondition: |
||
| 564 | USBHALInitialize has been called. |
||
| 565 | |||
| 566 | Parameters: |
||
| 567 | ep_num - Number of endpoint to configur, Must be |
||
| 568 | (ep_num >=0) && (ep_num <= USB_DEV_HIGHEST_EP_NUMBER) |
||
| 569 | max_pkt_size Size of largest packet this enpoint can |
||
| 570 | transfer. |
||
| 571 | |||
| 572 | flags - Configuration flags (see below) |
||
| 573 | |||
| 574 | Return Values: |
||
| 575 | TRUE if successful, FALSE if not. |
||
| 576 | |||
| 577 | Side Effects: |
||
| 578 | The endpoint has been configured as desired. |
||
| 579 | |||
| 580 | Remarks: |
||
| 581 | The base address and size of the buffer is not set by |
||
| 582 | this routine. Those features of an endpoint are |
||
| 583 | dynamically managed by the USBHALTransferData routine. |
||
| 584 | An endpoint can be "de-configured" by setting its max |
||
| 585 | packet size to 0. When doing this, you should also |
||
| 586 | set all flags to 0. |
||
| 587 | *************************************************************************/ |
||
| 588 | |||
| 589 | BOOL USBHALSetEpConfiguration ( BYTE ep_num, UINT16 max_pkt_size, UINT16 flags ); |
||
| 590 | |||
| 591 | /* Flags for USBHALSetEpConfiguration */ |
||
| 592 | #if defined(__18CXX) |
||
| 593 | #define USB_HAL_TRANSMIT 0x0400 // Enable EP for transmitting data |
||
| 594 | #define USB_HAL_RECEIVE 0x0200 // Enable EP for receiving data |
||
| 595 | #define USB_HAL_HANDSHAKE 0x1000 // Enable EP to give ACK/NACK (non isoch) |
||
| 596 | |||
| 597 | #define USB_HAL_NO_INC 0x0010 // Use for DMA to another device FIFO |
||
| 598 | #define USB_HAL_HW_KEEPS 0x0020 // Cause HW to keep EP |
||
| 599 | #else |
||
| 600 | #define USB_HAL_TRANSMIT 0x0400 // Enable EP for transmitting data |
||
| 601 | #define USB_HAL_RECEIVE 0x0800 // Enable EP for receiving data |
||
| 602 | #define USB_HAL_HANDSHAKE 0x0100 // Enable EP to give ACK/NACK (non isoch) |
||
| 603 | |||
| 604 | /* Does not work, Fix this if needed. 3/1/07 - Bud |
||
| 605 | #define USB_HAL_NO_INC 0x0010 // Use for DMA to another device FIFO |
||
| 606 | #define USB_HAL_HW_KEEPS 0x0020 // Cause HW to keep EP |
||
| 607 | */ |
||
| 608 | #define USB_HAL_ALLOW_HUB 0x8000 // (host only) Enable low-spd hub support |
||
| 609 | #define USB_HAL_NO_RETRY 0x4000 // (host only) disable auto-retry on NACK |
||
| 610 | #endif |
||
| 611 | |||
| 612 | |||
| 613 | /************************************************************************* |
||
| 614 | Function: |
||
| 615 | USBHALInitialize |
||
| 616 | |||
| 617 | Description: |
||
| 618 | This call performs the basic initialization of the USB |
||
| 619 | HAL. This routine must be called before any of the |
||
| 620 | other HAL interface routines are called. |
||
| 621 | |||
| 622 | Precondition: |
||
| 623 | The system has been initialized. |
||
| 624 | |||
| 625 | Paramters: |
||
| 626 | flags - Initialization flags |
||
| 627 | |||
| 628 | Return Values: |
||
| 629 | TRUE if successful, FALSE if not. |
||
| 630 | |||
| 631 | Side Effects: |
||
| 632 | The USB HAL SW stack was initialized. |
||
| 633 | |||
| 634 | Remarks: |
||
| 635 | This routine can be called to reset the controller. |
||
| 636 | |||
| 637 | *************************************************************************/ |
||
| 638 | |||
| 639 | BOOL USBHALInitialize ( unsigned long flags ); |
||
| 640 | |||
| 641 | #endif // _USB_HAL_H_ |
||
| 642 | /************************************************************************* |
||
| 643 | * EOF |
||
| 644 | */ |
||
| 645 |
Powered by WebSVN v2.8.3