1 /*++ 2 3 Copyright � 2001-2011 Future Technology Devices International Limited 4 5 THIS SOFTWARE IS PROVIDED BY FUTURE TECHNOLOGY DEVICES INTERNATIONAL LIMITED "AS IS" 6 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 7 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 8 FUTURE TECHNOLOGY DEVICES INTERNATIONAL LIMITED BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 9 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 10 OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION) 11 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 12 TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 13 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 14 15 FTDI DRIVERS MAY BE USED ONLY IN CONJUNCTION WITH PRODUCTS BASED ON FTDI PARTS. 16 17 FTDI DRIVERS MAY BE DISTRIBUTED IN ANY FORM AS LONG AS LICENSE INFORMATION IS NOT MODIFIED. 18 19 IF A CUSTOM VENDOR ID AND/OR PRODUCT ID OR DESCRIPTION STRING ARE USED, IT IS THE 20 RESPONSIBILITY OF THE PRODUCT MANUFACTURER TO MAINTAIN ANY CHANGES AND SUBSEQUENT WHQL 21 RE-CERTIFICATION AS A RESULT OF MAKING THESE CHANGES. 22 23 24 Module Name: 25 26 ftd2xx.h 27 28 Abstract: 29 30 Native USB device driver for FTDI FT232x, FT245x, FT2232x and FT4232x devices 31 FTD2XX library definitions 32 33 Environment: 34 35 kernel & user mode 36 37 38 --*/ 39 40 41 #ifndef FTD2XX_H 42 #define FTD2XX_H 43 44 // The following ifdef block is the standard way of creating macros 45 // which make exporting from a DLL simpler. All files within this DLL 46 // are compiled with the FTD2XX_EXPORTS symbol defined on the command line. 47 // This symbol should not be defined on any project that uses this DLL. 48 // This way any other project whose source files include this file see 49 // FTD2XX_API functions as being imported from a DLL, whereas this DLL 50 // sees symbols defined with this macro as being exported. 51 52 #ifdef FTD2XX_EXPORTS 53 #define FTD2XX_API __declspec(dllexport) 54 #else 55 #define FTD2XX_API __declspec(dllimport) 56 #endif 57 58 59 typedef PVOID FT_HANDLE; 60 typedef ULONG FT_STATUS; 61 62 // 63 // Device status 64 // 65 enum { 66 FT_OK, 67 FT_INVALID_HANDLE, 68 FT_DEVICE_NOT_FOUND, 69 FT_DEVICE_NOT_OPENED, 70 FT_IO_ERROR, 71 FT_INSUFFICIENT_RESOURCES, 72 FT_INVALID_PARAMETER, 73 FT_INVALID_BAUD_RATE, 74 75 FT_DEVICE_NOT_OPENED_FOR_ERASE, 76 FT_DEVICE_NOT_OPENED_FOR_WRITE, 77 FT_FAILED_TO_WRITE_DEVICE, 78 FT_EEPROM_READ_FAILED, 79 FT_EEPROM_WRITE_FAILED, 80 FT_EEPROM_ERASE_FAILED, 81 FT_EEPROM_NOT_PRESENT, 82 FT_EEPROM_NOT_PROGRAMMED, 83 FT_INVALID_ARGS, 84 FT_NOT_SUPPORTED, 85 FT_OTHER_ERROR, 86 FT_DEVICE_LIST_NOT_READY, 87 }; 88 89 90 #define FT_SUCCESS(status) ((status) == FT_OK) 91 92 // 93 // FT_OpenEx Flags 94 // 95 96 #define FT_OPEN_BY_SERIAL_NUMBER 1 97 #define FT_OPEN_BY_DESCRIPTION 2 98 #define FT_OPEN_BY_LOCATION 4 99 100 // 101 // FT_ListDevices Flags (used in conjunction with FT_OpenEx Flags 102 // 103 104 #define FT_LIST_NUMBER_ONLY 0x80000000 105 #define FT_LIST_BY_INDEX 0x40000000 106 #define FT_LIST_ALL 0x20000000 107 108 #define FT_LIST_MASK (FT_LIST_NUMBER_ONLY|FT_LIST_BY_INDEX|FT_LIST_ALL) 109 110 // 111 // Baud Rates 112 // 113 114 #define FT_BAUD_300 300 115 #define FT_BAUD_600 600 116 #define FT_BAUD_1200 1200 117 #define FT_BAUD_2400 2400 118 #define FT_BAUD_4800 4800 119 #define FT_BAUD_9600 9600 120 #define FT_BAUD_14400 14400 121 #define FT_BAUD_19200 19200 122 #define FT_BAUD_38400 38400 123 #define FT_BAUD_57600 57600 124 #define FT_BAUD_115200 115200 125 #define FT_BAUD_230400 230400 126 #define FT_BAUD_460800 460800 127 #define FT_BAUD_921600 921600 128 129 // 130 // Word Lengths 131 // 132 133 #define FT_BITS_8 (UCHAR) 8 134 #define FT_BITS_7 (UCHAR) 7 135 136 // 137 // Stop Bits 138 // 139 140 #define FT_STOP_BITS_1 (UCHAR) 0 141 #define FT_STOP_BITS_2 (UCHAR) 2 142 143 // 144 // Parity 145 // 146 147 #define FT_PARITY_NONE (UCHAR) 0 148 #define FT_PARITY_ODD (UCHAR) 1 149 #define FT_PARITY_EVEN (UCHAR) 2 150 #define FT_PARITY_MARK (UCHAR) 3 151 #define FT_PARITY_SPACE (UCHAR) 4 152 153 // 154 // Flow Control 155 // 156 157 #define FT_FLOW_NONE 0x0000 158 #define FT_FLOW_RTS_CTS 0x0100 159 #define FT_FLOW_DTR_DSR 0x0200 160 #define FT_FLOW_XON_XOFF 0x0400 161 162 // 163 // Purge rx and tx buffers 164 // 165 #define FT_PURGE_RX 1 166 #define FT_PURGE_TX 2 167 168 // 169 // Events 170 // 171 172 typedef void (*PFT_EVENT_HANDLER)(DWORD,DWORD); 173 174 #define FT_EVENT_RXCHAR 1 175 #define FT_EVENT_MODEM_STATUS 2 176 #define FT_EVENT_LINE_STATUS 4 177 178 // 179 // Timeouts 180 // 181 182 #define FT_DEFAULT_RX_TIMEOUT 300 183 #define FT_DEFAULT_TX_TIMEOUT 300 184 185 // 186 // Device types 187 // 188 189 typedef ULONG FT_DEVICE; 190 191 enum { 192 FT_DEVICE_BM, 193 FT_DEVICE_AM, 194 FT_DEVICE_100AX, 195 FT_DEVICE_UNKNOWN, 196 FT_DEVICE_2232C, 197 FT_DEVICE_232R, 198 FT_DEVICE_2232H, 199 FT_DEVICE_4232H, 200 FT_DEVICE_232H 201 }; 202 203 // 204 // Bit Modes 205 // 206 207 #define FT_BITMODE_RESET 0x00 208 #define FT_BITMODE_ASYNC_BITBANG 0x01 209 #define FT_BITMODE_MPSSE 0x02 210 #define FT_BITMODE_SYNC_BITBANG 0x04 211 #define FT_BITMODE_MCU_HOST 0x08 212 #define FT_BITMODE_FAST_SERIAL 0x10 213 #define FT_BITMODE_CBUS_BITBANG 0x20 214 #define FT_BITMODE_SYNC_FIFO 0x40 215 216 // 217 // FT232R CBUS Options EEPROM values 218 // 219 220 #define FT_232R_CBUS_TXDEN 0x00 // Tx Data Enable 221 #define FT_232R_CBUS_PWRON 0x01 // Power On 222 #define FT_232R_CBUS_RXLED 0x02 // Rx LED 223 #define FT_232R_CBUS_TXLED 0x03 // Tx LED 224 #define FT_232R_CBUS_TXRXLED 0x04 // Tx and Rx LED 225 #define FT_232R_CBUS_SLEEP 0x05 // Sleep 226 #define FT_232R_CBUS_CLK48 0x06 // 48MHz clock 227 #define FT_232R_CBUS_CLK24 0x07 // 24MHz clock 228 #define FT_232R_CBUS_CLK12 0x08 // 12MHz clock 229 #define FT_232R_CBUS_CLK6 0x09 // 6MHz clock 230 #define FT_232R_CBUS_IOMODE 0x0A // IO Mode for CBUS bit-bang 231 #define FT_232R_CBUS_BITBANG_WR 0x0B // Bit-bang write strobe 232 #define FT_232R_CBUS_BITBANG_RD 0x0C // Bit-bang read strobe 233 234 // 235 // FT232H CBUS Options EEPROM values 236 // 237 238 #define FT_232H_CBUS_TRISTATE 0x00 // Tristate 239 #define FT_232H_CBUS_RXLED 0x01 // Rx LED 240 #define FT_232H_CBUS_TXLED 0x02 // Tx LED 241 #define FT_232H_CBUS_TXRXLED 0x03 // Tx and Rx LED 242 #define FT_232H_CBUS_PWREN 0x04 // Power Enable 243 #define FT_232H_CBUS_SLEEP 0x05 // Sleep 244 #define FT_232H_CBUS_DRIVE_0 0x06 // Drive pin to logic 0 245 #define FT_232H_CBUS_DRIVE_1 0x07 // Drive pin to logic 1 246 #define FT_232H_CBUS_IOMODE 0x08 // IO Mode for CBUS bit-bang 247 #define FT_232H_CBUS_TXDEN 0x09 // Tx Data Enable 248 #define FT_232H_CBUS_CLK30 0x0A // 30MHz clock 249 #define FT_232H_CBUS_CLK15 0x0B // 15MHz clock 250 #define FT_232H_CBUS_CLK7_5 0x0C // 7.5MHz clock 251 252 253 #ifdef __cplusplus 254 extern "C" { 255 #endif 256 257 258 FTD2XX_API 259 FT_STATUS WINAPI FT_Open( 260 int deviceNumber, 261 FT_HANDLE *pHandle 262 ); 263 264 FTD2XX_API 265 FT_STATUS WINAPI FT_OpenEx( 266 PVOID pArg1, 267 DWORD Flags, 268 FT_HANDLE *pHandle 269 ); 270 271 FTD2XX_API 272 FT_STATUS WINAPI FT_ListDevices( 273 PVOID pArg1, 274 PVOID pArg2, 275 DWORD Flags 276 ); 277 278 FTD2XX_API 279 FT_STATUS WINAPI FT_Close( 280 FT_HANDLE ftHandle 281 ); 282 283 FTD2XX_API 284 FT_STATUS WINAPI FT_Read( 285 FT_HANDLE ftHandle, 286 LPVOID lpBuffer, 287 DWORD dwBytesToRead, 288 LPDWORD lpBytesReturned 289 ); 290 291 FTD2XX_API 292 FT_STATUS WINAPI FT_Write( 293 FT_HANDLE ftHandle, 294 LPVOID lpBuffer, 295 DWORD dwBytesToWrite, 296 LPDWORD lpBytesWritten 297 ); 298 299 FTD2XX_API 300 FT_STATUS WINAPI FT_IoCtl( 301 FT_HANDLE ftHandle, 302 DWORD dwIoControlCode, 303 LPVOID lpInBuf, 304 DWORD nInBufSize, 305 LPVOID lpOutBuf, 306 DWORD nOutBufSize, 307 LPDWORD lpBytesReturned, 308 LPOVERLAPPED lpOverlapped 309 ); 310 311 FTD2XX_API 312 FT_STATUS WINAPI FT_SetBaudRate( 313 FT_HANDLE ftHandle, 314 ULONG BaudRate 315 ); 316 317 FTD2XX_API 318 FT_STATUS WINAPI FT_SetDivisor( 319 FT_HANDLE ftHandle, 320 USHORT Divisor 321 ); 322 323 FTD2XX_API 324 FT_STATUS WINAPI FT_SetDataCharacteristics( 325 FT_HANDLE ftHandle, 326 UCHAR WordLength, 327 UCHAR StopBits, 328 UCHAR Parity 329 ); 330 331 FTD2XX_API 332 FT_STATUS WINAPI FT_SetFlowControl( 333 FT_HANDLE ftHandle, 334 USHORT FlowControl, 335 UCHAR XonChar, 336 UCHAR XoffChar 337 ); 338 339 FTD2XX_API 340 FT_STATUS WINAPI FT_ResetDevice( 341 FT_HANDLE ftHandle 342 ); 343 344 FTD2XX_API 345 FT_STATUS WINAPI FT_SetDtr( 346 FT_HANDLE ftHandle 347 ); 348 349 FTD2XX_API 350 FT_STATUS WINAPI FT_ClrDtr( 351 FT_HANDLE ftHandle 352 ); 353 354 FTD2XX_API 355 FT_STATUS WINAPI FT_SetRts( 356 FT_HANDLE ftHandle 357 ); 358 359 FTD2XX_API 360 FT_STATUS WINAPI FT_ClrRts( 361 FT_HANDLE ftHandle 362 ); 363 364 FTD2XX_API 365 FT_STATUS WINAPI FT_GetModemStatus( 366 FT_HANDLE ftHandle, 367 ULONG *pModemStatus 368 ); 369 370 FTD2XX_API 371 FT_STATUS WINAPI FT_SetChars( 372 FT_HANDLE ftHandle, 373 UCHAR EventChar, 374 UCHAR EventCharEnabled, 375 UCHAR ErrorChar, 376 UCHAR ErrorCharEnabled 377 ); 378 379 FTD2XX_API 380 FT_STATUS WINAPI FT_Purge( 381 FT_HANDLE ftHandle, 382 ULONG Mask 383 ); 384 385 FTD2XX_API 386 FT_STATUS WINAPI FT_SetTimeouts( 387 FT_HANDLE ftHandle, 388 ULONG ReadTimeout, 389 ULONG WriteTimeout 390 ); 391 392 FTD2XX_API 393 FT_STATUS WINAPI FT_GetQueueStatus( 394 FT_HANDLE ftHandle, 395 DWORD *dwRxBytes 396 ); 397 398 FTD2XX_API 399 FT_STATUS WINAPI FT_SetEventNotification( 400 FT_HANDLE ftHandle, 401 DWORD Mask, 402 PVOID Param 403 ); 404 405 FTD2XX_API 406 FT_STATUS WINAPI FT_GetStatus( 407 FT_HANDLE ftHandle, 408 DWORD *dwRxBytes, 409 DWORD *dwTxBytes, 410 DWORD *dwEventDWord 411 ); 412 413 FTD2XX_API 414 FT_STATUS WINAPI FT_SetBreakOn( 415 FT_HANDLE ftHandle 416 ); 417 418 FTD2XX_API 419 FT_STATUS WINAPI FT_SetBreakOff( 420 FT_HANDLE ftHandle 421 ); 422 423 FTD2XX_API 424 FT_STATUS WINAPI FT_SetWaitMask( 425 FT_HANDLE ftHandle, 426 DWORD Mask 427 ); 428 429 FTD2XX_API 430 FT_STATUS WINAPI FT_WaitOnMask( 431 FT_HANDLE ftHandle, 432 DWORD *Mask 433 ); 434 435 FTD2XX_API 436 FT_STATUS WINAPI FT_GetEventStatus( 437 FT_HANDLE ftHandle, 438 DWORD *dwEventDWord 439 ); 440 441 FTD2XX_API 442 FT_STATUS WINAPI FT_ReadEE( 443 FT_HANDLE ftHandle, 444 DWORD dwWordOffset, 445 LPWORD lpwValue 446 ); 447 448 FTD2XX_API 449 FT_STATUS WINAPI FT_WriteEE( 450 FT_HANDLE ftHandle, 451 DWORD dwWordOffset, 452 WORD wValue 453 ); 454 455 FTD2XX_API 456 FT_STATUS WINAPI FT_EraseEE( 457 FT_HANDLE ftHandle 458 ); 459 460 // 461 // structure to hold program data for FT_Program function 462 // 463 typedef struct ft_program_data { 464 465 DWORD Signature1; // Header - must be 0x00000000 466 DWORD Signature2; // Header - must be 0xffffffff 467 DWORD Version; // Header - FT_PROGRAM_DATA version 468 // 0 = original 469 // 1 = FT2232C extensions 470 // 2 = FT232R extensions 471 // 3 = FT2232H extensions 472 // 4 = FT4232H extensions 473 // 5 = FT232H extensions 474 475 WORD VendorId; // 0x0403 476 WORD ProductId; // 0x6001 477 char *Manufacturer; // "FTDI" 478 char *ManufacturerId; // "FT" 479 char *Description; // "USB HS Serial Converter" 480 char *SerialNumber; // "FT000001" if fixed, or NULL 481 WORD MaxPower; // 0 < MaxPower <= 500 482 WORD PnP; // 0 = disabled, 1 = enabled 483 WORD SelfPowered; // 0 = bus powered, 1 = self powered 484 WORD RemoteWakeup; // 0 = not capable, 1 = capable 485 // 486 // Rev4 (FT232B) extensions 487 // 488 UCHAR Rev4; // non-zero if Rev4 chip, zero otherwise 489 UCHAR IsoIn; // non-zero if in endpoint is isochronous 490 UCHAR IsoOut; // non-zero if out endpoint is isochronous 491 UCHAR PullDownEnable; // non-zero if pull down enabled 492 UCHAR SerNumEnable; // non-zero if serial number to be used 493 UCHAR USBVersionEnable; // non-zero if chip uses USBVersion 494 WORD USBVersion; // BCD (0x0200 => USB2) 495 // 496 // Rev 5 (FT2232) extensions 497 // 498 UCHAR Rev5; // non-zero if Rev5 chip, zero otherwise 499 UCHAR IsoInA; // non-zero if in endpoint is isochronous 500 UCHAR IsoInB; // non-zero if in endpoint is isochronous 501 UCHAR IsoOutA; // non-zero if out endpoint is isochronous 502 UCHAR IsoOutB; // non-zero if out endpoint is isochronous 503 UCHAR PullDownEnable5; // non-zero if pull down enabled 504 UCHAR SerNumEnable5; // non-zero if serial number to be used 505 UCHAR USBVersionEnable5; // non-zero if chip uses USBVersion 506 WORD USBVersion5; // BCD (0x0200 => USB2) 507 UCHAR AIsHighCurrent; // non-zero if interface is high current 508 UCHAR BIsHighCurrent; // non-zero if interface is high current 509 UCHAR IFAIsFifo; // non-zero if interface is 245 FIFO 510 UCHAR IFAIsFifoTar; // non-zero if interface is 245 FIFO CPU target 511 UCHAR IFAIsFastSer; // non-zero if interface is Fast serial 512 UCHAR AIsVCP; // non-zero if interface is to use VCP drivers 513 UCHAR IFBIsFifo; // non-zero if interface is 245 FIFO 514 UCHAR IFBIsFifoTar; // non-zero if interface is 245 FIFO CPU target 515 UCHAR IFBIsFastSer; // non-zero if interface is Fast serial 516 UCHAR BIsVCP; // non-zero if interface is to use VCP drivers 517 // 518 // Rev 6 (FT232R) extensions 519 // 520 UCHAR UseExtOsc; // Use External Oscillator 521 UCHAR HighDriveIOs; // High Drive I/Os 522 UCHAR EndpointSize; // Endpoint size 523 UCHAR PullDownEnableR; // non-zero if pull down enabled 524 UCHAR SerNumEnableR; // non-zero if serial number to be used 525 UCHAR InvertTXD; // non-zero if invert TXD 526 UCHAR InvertRXD; // non-zero if invert RXD 527 UCHAR InvertRTS; // non-zero if invert RTS 528 UCHAR InvertCTS; // non-zero if invert CTS 529 UCHAR InvertDTR; // non-zero if invert DTR 530 UCHAR InvertDSR; // non-zero if invert DSR 531 UCHAR InvertDCD; // non-zero if invert DCD 532 UCHAR InvertRI; // non-zero if invert RI 533 UCHAR Cbus0; // Cbus Mux control 534 UCHAR Cbus1; // Cbus Mux control 535 UCHAR Cbus2; // Cbus Mux control 536 UCHAR Cbus3; // Cbus Mux control 537 UCHAR Cbus4; // Cbus Mux control 538 UCHAR RIsD2XX; // non-zero if using D2XX driver 539 // 540 // Rev 7 (FT2232H) Extensions 541 // 542 UCHAR PullDownEnable7; // non-zero if pull down enabled 543 UCHAR SerNumEnable7; // non-zero if serial number to be used 544 UCHAR ALSlowSlew; // non-zero if AL pins have slow slew 545 UCHAR ALSchmittInput; // non-zero if AL pins are Schmitt input 546 UCHAR ALDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA 547 UCHAR AHSlowSlew; // non-zero if AH pins have slow slew 548 UCHAR AHSchmittInput; // non-zero if AH pins are Schmitt input 549 UCHAR AHDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA 550 UCHAR BLSlowSlew; // non-zero if BL pins have slow slew 551 UCHAR BLSchmittInput; // non-zero if BL pins are Schmitt input 552 UCHAR BLDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA 553 UCHAR BHSlowSlew; // non-zero if BH pins have slow slew 554 UCHAR BHSchmittInput; // non-zero if BH pins are Schmitt input 555 UCHAR BHDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA 556 UCHAR IFAIsFifo7; // non-zero if interface is 245 FIFO 557 UCHAR IFAIsFifoTar7; // non-zero if interface is 245 FIFO CPU target 558 UCHAR IFAIsFastSer7; // non-zero if interface is Fast serial 559 UCHAR AIsVCP7; // non-zero if interface is to use VCP drivers 560 UCHAR IFBIsFifo7; // non-zero if interface is 245 FIFO 561 UCHAR IFBIsFifoTar7; // non-zero if interface is 245 FIFO CPU target 562 UCHAR IFBIsFastSer7; // non-zero if interface is Fast serial 563 UCHAR BIsVCP7; // non-zero if interface is to use VCP drivers 564 UCHAR PowerSaveEnable; // non-zero if using BCBUS7 to save power for self-powered designs 565 // 566 // Rev 8 (FT4232H) Extensions 567 // 568 UCHAR PullDownEnable8; // non-zero if pull down enabled 569 UCHAR SerNumEnable8; // non-zero if serial number to be used 570 UCHAR ASlowSlew; // non-zero if AL pins have slow slew 571 UCHAR ASchmittInput; // non-zero if AL pins are Schmitt input 572 UCHAR ADriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA 573 UCHAR BSlowSlew; // non-zero if AH pins have slow slew 574 UCHAR BSchmittInput; // non-zero if AH pins are Schmitt input 575 UCHAR BDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA 576 UCHAR CSlowSlew; // non-zero if BL pins have slow slew 577 UCHAR CSchmittInput; // non-zero if BL pins are Schmitt input 578 UCHAR CDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA 579 UCHAR DSlowSlew; // non-zero if BH pins have slow slew 580 UCHAR DSchmittInput; // non-zero if BH pins are Schmitt input 581 UCHAR DDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA 582 UCHAR ARIIsTXDEN; // non-zero if port A uses RI as RS485 TXDEN 583 UCHAR BRIIsTXDEN; // non-zero if port B uses RI as RS485 TXDEN 584 UCHAR CRIIsTXDEN; // non-zero if port C uses RI as RS485 TXDEN 585 UCHAR DRIIsTXDEN; // non-zero if port D uses RI as RS485 TXDEN 586 UCHAR AIsVCP8; // non-zero if interface is to use VCP drivers 587 UCHAR BIsVCP8; // non-zero if interface is to use VCP drivers 588 UCHAR CIsVCP8; // non-zero if interface is to use VCP drivers 589 UCHAR DIsVCP8; // non-zero if interface is to use VCP drivers 590 // 591 // Rev 9 (FT232H) Extensions 592 // 593 UCHAR PullDownEnableH; // non-zero if pull down enabled 594 UCHAR SerNumEnableH; // non-zero if serial number to be used 595 UCHAR ACSlowSlewH; // non-zero if AC pins have slow slew 596 UCHAR ACSchmittInputH; // non-zero if AC pins are Schmitt input 597 UCHAR ACDriveCurrentH; // valid values are 4mA, 8mA, 12mA, 16mA 598 UCHAR ADSlowSlewH; // non-zero if AD pins have slow slew 599 UCHAR ADSchmittInputH; // non-zero if AD pins are Schmitt input 600 UCHAR ADDriveCurrentH; // valid values are 4mA, 8mA, 12mA, 16mA 601 UCHAR Cbus0H; // Cbus Mux control 602 UCHAR Cbus1H; // Cbus Mux control 603 UCHAR Cbus2H; // Cbus Mux control 604 UCHAR Cbus3H; // Cbus Mux control 605 UCHAR Cbus4H; // Cbus Mux control 606 UCHAR Cbus5H; // Cbus Mux control 607 UCHAR Cbus6H; // Cbus Mux control 608 UCHAR Cbus7H; // Cbus Mux control 609 UCHAR Cbus8H; // Cbus Mux control 610 UCHAR Cbus9H; // Cbus Mux control 611 UCHAR IsFifoH; // non-zero if interface is 245 FIFO 612 UCHAR IsFifoTarH; // non-zero if interface is 245 FIFO CPU target 613 UCHAR IsFastSerH; // non-zero if interface is Fast serial 614 UCHAR IsFT1248H; // non-zero if interface is FT1248 615 UCHAR FT1248CpolH; // FT1248 clock polarity - clock idle high (1) or clock idle low (0) 616 UCHAR FT1248LsbH; // FT1248 data is LSB (1) or MSB (0) 617 UCHAR FT1248FlowControlH; // FT1248 flow control enable 618 UCHAR IsVCPH; // non-zero if interface is to use VCP drivers 619 UCHAR PowerSaveEnableH; // non-zero if using ACBUS7 to save power for self-powered designs 620 621 } FT_PROGRAM_DATA, *PFT_PROGRAM_DATA; 622 623 FTD2XX_API 624 FT_STATUS WINAPI FT_EE_Program( 625 FT_HANDLE ftHandle, 626 PFT_PROGRAM_DATA pData 627 ); 628 629 FTD2XX_API 630 FT_STATUS WINAPI FT_EE_ProgramEx( 631 FT_HANDLE ftHandle, 632 PFT_PROGRAM_DATA pData, 633 char *Manufacturer, 634 char *ManufacturerId, 635 char *Description, 636 char *SerialNumber 637 ); 638 639 FTD2XX_API 640 FT_STATUS WINAPI FT_EE_Read( 641 FT_HANDLE ftHandle, 642 PFT_PROGRAM_DATA pData 643 ); 644 645 FTD2XX_API 646 FT_STATUS WINAPI FT_EE_ReadEx( 647 FT_HANDLE ftHandle, 648 PFT_PROGRAM_DATA pData, 649 char *Manufacturer, 650 char *ManufacturerId, 651 char *Description, 652 char *SerialNumber 653 ); 654 655 FTD2XX_API 656 FT_STATUS WINAPI FT_EE_UASize( 657 FT_HANDLE ftHandle, 658 LPDWORD lpdwSize 659 ); 660 661 FTD2XX_API 662 FT_STATUS WINAPI FT_EE_UAWrite( 663 FT_HANDLE ftHandle, 664 PUCHAR pucData, 665 DWORD dwDataLen 666 ); 667 668 FTD2XX_API 669 FT_STATUS WINAPI FT_EE_UARead( 670 FT_HANDLE ftHandle, 671 PUCHAR pucData, 672 DWORD dwDataLen, 673 LPDWORD lpdwBytesRead 674 ); 675 676 FTD2XX_API 677 FT_STATUS WINAPI FT_SetLatencyTimer( 678 FT_HANDLE ftHandle, 679 UCHAR ucLatency 680 ); 681 682 FTD2XX_API 683 FT_STATUS WINAPI FT_GetLatencyTimer( 684 FT_HANDLE ftHandle, 685 PUCHAR pucLatency 686 ); 687 688 FTD2XX_API 689 FT_STATUS WINAPI FT_SetBitMode( 690 FT_HANDLE ftHandle, 691 UCHAR ucMask, 692 UCHAR ucEnable 693 ); 694 695 FTD2XX_API 696 FT_STATUS WINAPI FT_GetBitMode( 697 FT_HANDLE ftHandle, 698 PUCHAR pucMode 699 ); 700 701 FTD2XX_API 702 FT_STATUS WINAPI FT_SetUSBParameters( 703 FT_HANDLE ftHandle, 704 ULONG ulInTransferSize, 705 ULONG ulOutTransferSize 706 ); 707 708 FTD2XX_API 709 FT_STATUS WINAPI FT_SetDeadmanTimeout( 710 FT_HANDLE ftHandle, 711 ULONG ulDeadmanTimeout 712 ); 713 714 FTD2XX_API 715 FT_STATUS WINAPI FT_GetDeviceInfo( 716 FT_HANDLE ftHandle, 717 FT_DEVICE *lpftDevice, 718 LPDWORD lpdwID, 719 PCHAR SerialNumber, 720 PCHAR Description, 721 LPVOID Dummy 722 ); 723 724 FTD2XX_API 725 FT_STATUS WINAPI FT_StopInTask( 726 FT_HANDLE ftHandle 727 ); 728 729 FTD2XX_API 730 FT_STATUS WINAPI FT_RestartInTask( 731 FT_HANDLE ftHandle 732 ); 733 734 FTD2XX_API 735 FT_STATUS WINAPI FT_SetResetPipeRetryCount( 736 FT_HANDLE ftHandle, 737 DWORD dwCount 738 ); 739 740 FTD2XX_API 741 FT_STATUS WINAPI FT_ResetPort( 742 FT_HANDLE ftHandle 743 ); 744 745 FTD2XX_API 746 FT_STATUS WINAPI FT_CyclePort( 747 FT_HANDLE ftHandle 748 ); 749 750 751 // 752 // Win32-type functions 753 // 754 755 FTD2XX_API 756 FT_HANDLE WINAPI FT_W32_CreateFile( 757 LPCTSTR lpszName, 758 DWORD dwAccess, 759 DWORD dwShareMode, 760 LPSECURITY_ATTRIBUTES lpSecurityAttributes, 761 DWORD dwCreate, 762 DWORD dwAttrsAndFlags, 763 HANDLE hTemplate 764 ); 765 766 FTD2XX_API 767 BOOL WINAPI FT_W32_CloseHandle( 768 FT_HANDLE ftHandle 769 ); 770 771 FTD2XX_API 772 BOOL WINAPI FT_W32_ReadFile( 773 FT_HANDLE ftHandle, 774 LPVOID lpBuffer, 775 DWORD nBufferSize, 776 LPDWORD lpBytesReturned, 777 LPOVERLAPPED lpOverlapped 778 ); 779 780 FTD2XX_API 781 BOOL WINAPI FT_W32_WriteFile( 782 FT_HANDLE ftHandle, 783 LPVOID lpBuffer, 784 DWORD nBufferSize, 785 LPDWORD lpBytesWritten, 786 LPOVERLAPPED lpOverlapped 787 ); 788 789 FTD2XX_API 790 DWORD WINAPI FT_W32_GetLastError( 791 FT_HANDLE ftHandle 792 ); 793 794 FTD2XX_API 795 BOOL WINAPI FT_W32_GetOverlappedResult( 796 FT_HANDLE ftHandle, 797 LPOVERLAPPED lpOverlapped, 798 LPDWORD lpdwBytesTransferred, 799 BOOL bWait 800 ); 801 802 FTD2XX_API 803 BOOL WINAPI FT_W32_CancelIo( 804 FT_HANDLE ftHandle 805 ); 806 807 808 // 809 // Win32 COMM API type functions 810 // 811 typedef struct _FTCOMSTAT { 812 DWORD fCtsHold : 1; 813 DWORD fDsrHold : 1; 814 DWORD fRlsdHold : 1; 815 DWORD fXoffHold : 1; 816 DWORD fXoffSent : 1; 817 DWORD fEof : 1; 818 DWORD fTxim : 1; 819 DWORD fReserved : 25; 820 DWORD cbInQue; 821 DWORD cbOutQue; 822 } FTCOMSTAT, *LPFTCOMSTAT; 823 824 typedef struct _FTDCB { 825 DWORD DCBlength; /* sizeof(FTDCB) */ 826 DWORD BaudRate; /* Baudrate at which running */ 827 DWORD fBinary: 1; /* Binary Mode (skip EOF check) */ 828 DWORD fParity: 1; /* Enable parity checking */ 829 DWORD fOutxCtsFlow:1; /* CTS handshaking on output */ 830 DWORD fOutxDsrFlow:1; /* DSR handshaking on output */ 831 DWORD fDtrControl:2; /* DTR Flow control */ 832 DWORD fDsrSensitivity:1; /* DSR Sensitivity */ 833 DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */ 834 DWORD fOutX: 1; /* Enable output X-ON/X-OFF */ 835 DWORD fInX: 1; /* Enable input X-ON/X-OFF */ 836 DWORD fErrorChar: 1; /* Enable Err Replacement */ 837 DWORD fNull: 1; /* Enable Null stripping */ 838 DWORD fRtsControl:2; /* Rts Flow control */ 839 DWORD fAbortOnError:1; /* Abort all reads and writes on Error */ 840 DWORD fDummy2:17; /* Reserved */ 841 WORD wReserved; /* Not currently used */ 842 WORD XonLim; /* Transmit X-ON threshold */ 843 WORD XoffLim; /* Transmit X-OFF threshold */ 844 BYTE ByteSize; /* Number of bits/byte, 4-8 */ 845 BYTE Parity; /* 0-4=None,Odd,Even,Mark,Space */ 846 BYTE StopBits; /* 0,1,2 = 1, 1.5, 2 */ 847 char XonChar; /* Tx and Rx X-ON character */ 848 char XoffChar; /* Tx and Rx X-OFF character */ 849 char ErrorChar; /* Error replacement char */ 850 char EofChar; /* End of Input character */ 851 char EvtChar; /* Received Event character */ 852 WORD wReserved1; /* Fill for now. */ 853 } FTDCB, *LPFTDCB; 854 855 typedef struct _FTTIMEOUTS { 856 DWORD ReadIntervalTimeout; /* Maximum time between read chars. */ 857 DWORD ReadTotalTimeoutMultiplier; /* Multiplier of characters. */ 858 DWORD ReadTotalTimeoutConstant; /* Constant in milliseconds. */ 859 DWORD WriteTotalTimeoutMultiplier; /* Multiplier of characters. */ 860 DWORD WriteTotalTimeoutConstant; /* Constant in milliseconds. */ 861 } FTTIMEOUTS,*LPFTTIMEOUTS; 862 863 864 FTD2XX_API 865 BOOL WINAPI FT_W32_ClearCommBreak( 866 FT_HANDLE ftHandle 867 ); 868 869 FTD2XX_API 870 BOOL WINAPI FT_W32_ClearCommError( 871 FT_HANDLE ftHandle, 872 LPDWORD lpdwErrors, 873 LPFTCOMSTAT lpftComstat 874 ); 875 876 FTD2XX_API 877 BOOL WINAPI FT_W32_EscapeCommFunction( 878 FT_HANDLE ftHandle, 879 DWORD dwFunc 880 ); 881 882 FTD2XX_API 883 BOOL WINAPI FT_W32_GetCommModemStatus( 884 FT_HANDLE ftHandle, 885 LPDWORD lpdwModemStatus 886 ); 887 888 FTD2XX_API 889 BOOL WINAPI FT_W32_GetCommState( 890 FT_HANDLE ftHandle, 891 LPFTDCB lpftDcb 892 ); 893 894 FTD2XX_API 895 BOOL WINAPI FT_W32_GetCommTimeouts( 896 FT_HANDLE ftHandle, 897 FTTIMEOUTS *pTimeouts 898 ); 899 900 FTD2XX_API 901 BOOL WINAPI FT_W32_PurgeComm( 902 FT_HANDLE ftHandle, 903 DWORD dwMask 904 ); 905 906 FTD2XX_API 907 BOOL WINAPI FT_W32_SetCommBreak( 908 FT_HANDLE ftHandle 909 ); 910 911 FTD2XX_API 912 BOOL WINAPI FT_W32_SetCommMask( 913 FT_HANDLE ftHandle, 914 ULONG ulEventMask 915 ); 916 917 FTD2XX_API 918 BOOL WINAPI FT_W32_GetCommMask( 919 FT_HANDLE ftHandle, 920 LPDWORD lpdwEventMask 921 ); 922 923 FTD2XX_API 924 BOOL WINAPI FT_W32_SetCommState( 925 FT_HANDLE ftHandle, 926 LPFTDCB lpftDcb 927 ); 928 929 FTD2XX_API 930 BOOL WINAPI FT_W32_SetCommTimeouts( 931 FT_HANDLE ftHandle, 932 FTTIMEOUTS *pTimeouts 933 ); 934 935 FTD2XX_API 936 BOOL WINAPI FT_W32_SetupComm( 937 FT_HANDLE ftHandle, 938 DWORD dwReadBufferSize, 939 DWORD dwWriteBufferSize 940 ); 941 942 FTD2XX_API 943 BOOL WINAPI FT_W32_WaitCommEvent( 944 FT_HANDLE ftHandle, 945 PULONG pulEvent, 946 LPOVERLAPPED lpOverlapped 947 ); 948 949 950 // 951 // Device information 952 // 953 954 typedef struct _ft_device_list_info_node { 955 ULONG Flags; 956 ULONG Type; 957 ULONG ID; 958 DWORD LocId; 959 char SerialNumber[16]; 960 char Description[64]; 961 FT_HANDLE ftHandle; 962 } FT_DEVICE_LIST_INFO_NODE; 963 964 // Device information flags 965 enum { 966 FT_FLAGS_OPENED = 1, 967 FT_FLAGS_HISPEED = 2 968 }; 969 970 971 FTD2XX_API 972 FT_STATUS WINAPI FT_CreateDeviceInfoList( 973 LPDWORD lpdwNumDevs 974 ); 975 976 FTD2XX_API 977 FT_STATUS WINAPI FT_GetDeviceInfoList( 978 FT_DEVICE_LIST_INFO_NODE *pDest, 979 LPDWORD lpdwNumDevs 980 ); 981 982 FTD2XX_API 983 FT_STATUS WINAPI FT_GetDeviceInfoDetail( 984 DWORD dwIndex, 985 LPDWORD lpdwFlags, 986 LPDWORD lpdwType, 987 LPDWORD lpdwID, 988 LPDWORD lpdwLocId, 989 LPVOID lpSerialNumber, 990 LPVOID lpDescription, 991 FT_HANDLE *pftHandle 992 ); 993 994 995 // 996 // Version information 997 // 998 999 FTD2XX_API 1000 FT_STATUS WINAPI FT_GetDriverVersion( 1001 FT_HANDLE ftHandle, 1002 LPDWORD lpdwVersion 1003 ); 1004 1005 FTD2XX_API 1006 FT_STATUS WINAPI FT_GetLibraryVersion( 1007 LPDWORD lpdwVersion 1008 ); 1009 1010 1011 FTD2XX_API 1012 FT_STATUS WINAPI FT_Rescan( 1013 void 1014 ); 1015 1016 FTD2XX_API 1017 FT_STATUS WINAPI FT_Reload( 1018 WORD wVid, 1019 WORD wPid 1020 ); 1021 1022 FTD2XX_API 1023 FT_STATUS WINAPI FT_GetComPortNumber( 1024 FT_HANDLE ftHandle, 1025 LPLONG lpdwComPortNumber 1026 ); 1027 1028 1029 // 1030 // FT232H additional EEPROM functions 1031 // 1032 1033 FTD2XX_API 1034 FT_STATUS WINAPI FT_EE_ReadConfig( 1035 FT_HANDLE ftHandle, 1036 UCHAR ucAddress, 1037 PUCHAR pucValue 1038 ); 1039 1040 FTD2XX_API 1041 FT_STATUS WINAPI FT_EE_WriteConfig( 1042 FT_HANDLE ftHandle, 1043 UCHAR ucAddress, 1044 UCHAR ucValue 1045 ); 1046 1047 FTD2XX_API 1048 FT_STATUS WINAPI FT_EE_ReadECC( 1049 FT_HANDLE ftHandle, 1050 UCHAR ucOption, 1051 LPWORD lpwValue 1052 ); 1053 1054 FTD2XX_API 1055 FT_STATUS WINAPI FT_GetQueueStatusEx( 1056 FT_HANDLE ftHandle, 1057 DWORD *dwRxBytes 1058 ); 1059 1060 1061 #ifdef __cplusplus 1062 } 1063 #endif 1064 1065 1066 #endif /* FTD2XX_H */ 1067 1068