3 Copyright (c) 2001-2005 Future Technology Devices International Ltd.
11 Native USB device driver for FTDI FT8U232/245
12 FTD2XX library definitions
21 13/01/03 awm Added device information support.
22 19/03/03 awm Added FT_W32_CancelIo.
23 12/06/03 awm Added FT_StopInTask and FT_RestartInTask.
24 18/09/03 awm Added FT_SetResetPipeRetryCount.
25 10/10/03 awm Added FT_ResetPort.
26 23/01/04 awm Added support for open-by-location.
27 16/03/04 awm Added support for FT2232C.
28 23/09/04 awm Added support for FT232R.
29 20/10/04 awm Added FT_CyclePort.
30 18/01/05 awm Added FT_DEVICE_LIST_INFO_NODE type.
31 11/02/05 awm Added LocId to FT_DEVICE_LIST_INFO_NODE.
32 25/08/05 awm Added FT_SetDeadmanTimeout.
33 02/12/05 awm Removed obsolete references.
34 05/12/05 awm Added FT_GetVersion, FT_GetVersionEx.
43 // The following ifdef block is the standard way of creating macros
44 // which make exporting from a DLL simpler. All files within this DLL
45 // are compiled with the FTD2XX_EXPORTS symbol defined on the command line.
46 // This symbol should not be defined on any project that uses this DLL.
47 // This way any other project whose source files include this file see
48 // FTD2XX_API functions as being imported from a DLL, whereas this DLL
49 // sees symbols defined with this macro as being exported.
52 #define FTD2XX_API __declspec(dllexport)
54 #define FTD2XX_API __declspec(dllimport)
58 typedef PVOID FT_HANDLE;
59 typedef ULONG FT_STATUS;
70 FT_INSUFFICIENT_RESOURCES,
74 FT_DEVICE_NOT_OPENED_FOR_ERASE,
75 FT_DEVICE_NOT_OPENED_FOR_WRITE,
76 FT_FAILED_TO_WRITE_DEVICE,
77 FT_EEPROM_READ_FAILED,
78 FT_EEPROM_WRITE_FAILED,
79 FT_EEPROM_ERASE_FAILED,
80 FT_EEPROM_NOT_PRESENT,
81 FT_EEPROM_NOT_PROGRAMMED,
88 #define FT_SUCCESS(status) ((status) == FT_OK)
94 #define FT_OPEN_BY_SERIAL_NUMBER 1
95 #define FT_OPEN_BY_DESCRIPTION 2
96 #define FT_OPEN_BY_LOCATION 4
99 // FT_ListDevices Flags (used in conjunction with FT_OpenEx Flags
102 #define FT_LIST_NUMBER_ONLY 0x80000000
103 #define FT_LIST_BY_INDEX 0x40000000
104 #define FT_LIST_ALL 0x20000000
106 #define FT_LIST_MASK (FT_LIST_NUMBER_ONLY|FT_LIST_BY_INDEX|FT_LIST_ALL)
112 #define FT_BAUD_300 300
113 #define FT_BAUD_600 600
114 #define FT_BAUD_1200 1200
115 #define FT_BAUD_2400 2400
116 #define FT_BAUD_4800 4800
117 #define FT_BAUD_9600 9600
118 #define FT_BAUD_14400 14400
119 #define FT_BAUD_19200 19200
120 #define FT_BAUD_38400 38400
121 #define FT_BAUD_57600 57600
122 #define FT_BAUD_115200 115200
123 #define FT_BAUD_230400 230400
124 #define FT_BAUD_460800 460800
125 #define FT_BAUD_921600 921600
131 #define FT_BITS_8 (UCHAR) 8
132 #define FT_BITS_7 (UCHAR) 7
133 #define FT_BITS_6 (UCHAR) 6
134 #define FT_BITS_5 (UCHAR) 5
140 #define FT_STOP_BITS_1 (UCHAR) 0
141 #define FT_STOP_BITS_1_5 (UCHAR) 1
142 #define FT_STOP_BITS_2 (UCHAR) 2
148 #define FT_PARITY_NONE (UCHAR) 0
149 #define FT_PARITY_ODD (UCHAR) 1
150 #define FT_PARITY_EVEN (UCHAR) 2
151 #define FT_PARITY_MARK (UCHAR) 3
152 #define FT_PARITY_SPACE (UCHAR) 4
158 #define FT_FLOW_NONE 0x0000
159 #define FT_FLOW_RTS_CTS 0x0100
160 #define FT_FLOW_DTR_DSR 0x0200
161 #define FT_FLOW_XON_XOFF 0x0400
164 // Purge rx and tx buffers
166 #define FT_PURGE_RX 1
167 #define FT_PURGE_TX 2
173 typedef void (*PFT_EVENT_HANDLER)(DWORD,DWORD);
175 #define FT_EVENT_RXCHAR 1
176 #define FT_EVENT_MODEM_STATUS 2
182 #define FT_DEFAULT_RX_TIMEOUT 300
183 #define FT_DEFAULT_TX_TIMEOUT 300
189 typedef ULONG FT_DEVICE;
207 FT_STATUS WINAPI FT_Open(
213 FT_STATUS WINAPI FT_OpenEx(
220 FT_STATUS WINAPI FT_ListDevices(
227 FT_STATUS WINAPI FT_Close(
232 FT_STATUS WINAPI FT_Read(
236 LPDWORD lpBytesReturned
240 FT_STATUS WINAPI FT_Write(
244 LPDWORD lpBytesWritten
248 FT_STATUS WINAPI FT_IoCtl(
250 DWORD dwIoControlCode,
255 LPDWORD lpBytesReturned,
256 LPOVERLAPPED lpOverlapped
260 FT_STATUS WINAPI FT_SetBaudRate(
266 FT_STATUS WINAPI FT_SetDivisor(
272 FT_STATUS WINAPI FT_SetDataCharacteristics(
280 FT_STATUS WINAPI FT_SetFlowControl(
288 FT_STATUS WINAPI FT_ResetDevice(
293 FT_STATUS WINAPI FT_SetDtr(
298 FT_STATUS WINAPI FT_ClrDtr(
303 FT_STATUS WINAPI FT_SetRts(
308 FT_STATUS WINAPI FT_ClrRts(
313 FT_STATUS WINAPI FT_GetModemStatus(
319 FT_STATUS WINAPI FT_SetChars(
322 UCHAR EventCharEnabled,
324 UCHAR ErrorCharEnabled
328 FT_STATUS WINAPI FT_Purge(
334 FT_STATUS WINAPI FT_SetTimeouts(
341 FT_STATUS WINAPI FT_GetQueueStatus(
347 FT_STATUS WINAPI FT_SetEventNotification(
354 FT_STATUS WINAPI FT_GetStatus(
362 FT_STATUS WINAPI FT_SetBreakOn(
367 FT_STATUS WINAPI FT_SetBreakOff(
372 FT_STATUS WINAPI FT_SetWaitMask(
378 FT_STATUS WINAPI FT_WaitOnMask(
384 FT_STATUS WINAPI FT_GetEventStatus(
390 FT_STATUS WINAPI FT_ReadEE(
397 FT_STATUS WINAPI FT_WriteEE(
404 FT_STATUS WINAPI FT_EraseEE(
409 // structure to hold program data for FT_Program function
411 typedef struct ft_program_data {
413 DWORD Signature1; // Header - must be 0x00000000
414 DWORD Signature2; // Header - must be 0xffffffff
415 DWORD Version; // Header - FT_PROGRAM_DATA version
417 // 1 = FT2232C extensions
418 // 2 = FT232R extensions
420 WORD VendorId; // 0x0403
421 WORD ProductId; // 0x6001
422 char *Manufacturer; // "FTDI"
423 char *ManufacturerId; // "FT"
424 char *Description; // "USB HS Serial Converter"
425 char *SerialNumber; // "FT000001" if fixed, or NULL
426 WORD MaxPower; // 0 < MaxPower <= 500
427 WORD PnP; // 0 = disabled, 1 = enabled
428 WORD SelfPowered; // 0 = bus powered, 1 = self powered
429 WORD RemoteWakeup; // 0 = not capable, 1 = capable
433 UCHAR Rev4; // non-zero if Rev4 chip, zero otherwise
434 UCHAR IsoIn; // non-zero if in endpoint is isochronous
435 UCHAR IsoOut; // non-zero if out endpoint is isochronous
436 UCHAR PullDownEnable; // non-zero if pull down enabled
437 UCHAR SerNumEnable; // non-zero if serial number to be used
438 UCHAR USBVersionEnable; // non-zero if chip uses USBVersion
439 WORD USBVersion; // BCD (0x0200 => USB2)
441 // FT2232C extensions
443 UCHAR Rev5; // non-zero if Rev5 chip, zero otherwise
444 UCHAR IsoInA; // non-zero if in endpoint is isochronous
445 UCHAR IsoInB; // non-zero if in endpoint is isochronous
446 UCHAR IsoOutA; // non-zero if out endpoint is isochronous
447 UCHAR IsoOutB; // non-zero if out endpoint is isochronous
448 UCHAR PullDownEnable5; // non-zero if pull down enabled
449 UCHAR SerNumEnable5; // non-zero if serial number to be used
450 UCHAR USBVersionEnable5; // non-zero if chip uses USBVersion
451 WORD USBVersion5; // BCD (0x0200 => USB2)
452 UCHAR AIsHighCurrent; // non-zero if interface is high current
453 UCHAR BIsHighCurrent; // non-zero if interface is high current
454 UCHAR IFAIsFifo; // non-zero if interface is 245 FIFO
455 UCHAR IFAIsFifoTar; // non-zero if interface is 245 FIFO CPU target
456 UCHAR IFAIsFastSer; // non-zero if interface is Fast serial
457 UCHAR AIsVCP; // non-zero if interface is to use VCP drivers
458 UCHAR IFBIsFifo; // non-zero if interface is 245 FIFO
459 UCHAR IFBIsFifoTar; // non-zero if interface is 245 FIFO CPU target
460 UCHAR IFBIsFastSer; // non-zero if interface is Fast serial
461 UCHAR BIsVCP; // non-zero if interface is to use VCP drivers
465 UCHAR UseExtOsc; // Use External Oscillator
466 UCHAR HighDriveIOs; // High Drive I/Os
467 UCHAR EndpointSize; // Endpoint size
469 UCHAR PullDownEnableR; // non-zero if pull down enabled
470 UCHAR SerNumEnableR; // non-zero if serial number to be used
472 UCHAR InvertTXD; // non-zero if invert TXD
473 UCHAR InvertRXD; // non-zero if invert RXD
474 UCHAR InvertRTS; // non-zero if invert RTS
475 UCHAR InvertCTS; // non-zero if invert CTS
476 UCHAR InvertDTR; // non-zero if invert DTR
477 UCHAR InvertDSR; // non-zero if invert DSR
478 UCHAR InvertDCD; // non-zero if invert DCD
479 UCHAR InvertRI; // non-zero if invert RI
481 UCHAR Cbus0; // Cbus Mux control
482 UCHAR Cbus1; // Cbus Mux control
483 UCHAR Cbus2; // Cbus Mux control
484 UCHAR Cbus3; // Cbus Mux control
485 UCHAR Cbus4; // Cbus Mux control
487 UCHAR RIsVCP; // non-zero if using VCP drivers
489 } FT_PROGRAM_DATA, *PFT_PROGRAM_DATA;
492 FT_STATUS WINAPI FT_EE_Program(
494 PFT_PROGRAM_DATA pData
498 FT_STATUS WINAPI FT_EE_ProgramEx(
500 PFT_PROGRAM_DATA pData,
502 char *ManufacturerId,
508 FT_STATUS WINAPI FT_EE_Read(
510 PFT_PROGRAM_DATA pData
514 FT_STATUS WINAPI FT_EE_ReadEx(
516 PFT_PROGRAM_DATA pData,
518 char *ManufacturerId,
524 FT_STATUS WINAPI FT_EE_UASize(
530 FT_STATUS WINAPI FT_EE_UAWrite(
537 FT_STATUS WINAPI FT_EE_UARead(
541 LPDWORD lpdwBytesRead
545 FT_STATUS WINAPI FT_SetLatencyTimer(
551 FT_STATUS WINAPI FT_GetLatencyTimer(
557 FT_STATUS WINAPI FT_SetBitMode(
564 FT_STATUS WINAPI FT_GetBitMode(
570 FT_STATUS WINAPI FT_SetUSBParameters(
572 ULONG ulInTransferSize,
573 ULONG ulOutTransferSize
577 FT_STATUS WINAPI FT_SetDeadmanTimeout(
579 ULONG ulDeadmanTimeout
583 FT_STATUS WINAPI FT_GetDeviceInfo(
585 FT_DEVICE *lpftDevice,
593 FT_STATUS WINAPI FT_StopInTask(
598 FT_STATUS WINAPI FT_RestartInTask(
603 FT_STATUS WINAPI FT_SetResetPipeRetryCount(
609 FT_STATUS WINAPI FT_ResetPort(
614 FT_STATUS WINAPI FT_CyclePort(
620 // Win32-type functions
624 FT_HANDLE WINAPI FT_W32_CreateFile(
628 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
630 DWORD dwAttrsAndFlags,
635 BOOL WINAPI FT_W32_CloseHandle(
640 BOOL WINAPI FT_W32_ReadFile(
644 LPDWORD lpBytesReturned,
645 LPOVERLAPPED lpOverlapped
649 BOOL WINAPI FT_W32_WriteFile(
653 LPDWORD lpBytesWritten,
654 LPOVERLAPPED lpOverlapped
658 DWORD WINAPI FT_W32_GetLastError(
663 BOOL WINAPI FT_W32_GetOverlappedResult(
665 LPOVERLAPPED lpOverlapped,
666 LPDWORD lpdwBytesTransferred,
671 BOOL WINAPI FT_W32_CancelIo(
677 // Win32 COMM API type functions
679 typedef struct _FTCOMSTAT {
687 DWORD fReserved : 25;
690 } FTCOMSTAT, *LPFTCOMSTAT;
692 typedef struct _FTDCB {
693 DWORD DCBlength; /* sizeof(FTDCB) */
694 DWORD BaudRate; /* Baudrate at which running */
695 DWORD fBinary: 1; /* Binary Mode (skip EOF check) */
696 DWORD fParity: 1; /* Enable parity checking */
697 DWORD fOutxCtsFlow:1; /* CTS handshaking on output */
698 DWORD fOutxDsrFlow:1; /* DSR handshaking on output */
699 DWORD fDtrControl:2; /* DTR Flow control */
700 DWORD fDsrSensitivity:1; /* DSR Sensitivity */
701 DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
702 DWORD fOutX: 1; /* Enable output X-ON/X-OFF */
703 DWORD fInX: 1; /* Enable input X-ON/X-OFF */
704 DWORD fErrorChar: 1; /* Enable Err Replacement */
705 DWORD fNull: 1; /* Enable Null stripping */
706 DWORD fRtsControl:2; /* Rts Flow control */
707 DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
708 DWORD fDummy2:17; /* Reserved */
709 WORD wReserved; /* Not currently used */
710 WORD XonLim; /* Transmit X-ON threshold */
711 WORD XoffLim; /* Transmit X-OFF threshold */
712 BYTE ByteSize; /* Number of bits/byte, 4-8 */
713 BYTE Parity; /* 0-4=None,Odd,Even,Mark,Space */
714 BYTE StopBits; /* 0,1,2 = 1, 1.5, 2 */
715 char XonChar; /* Tx and Rx X-ON character */
716 char XoffChar; /* Tx and Rx X-OFF character */
717 char ErrorChar; /* Error replacement char */
718 char EofChar; /* End of Input character */
719 char EvtChar; /* Received Event character */
720 WORD wReserved1; /* Fill for now. */
723 typedef struct _FTTIMEOUTS {
724 DWORD ReadIntervalTimeout; /* Maximum time between read chars. */
725 DWORD ReadTotalTimeoutMultiplier; /* Multiplier of characters. */
726 DWORD ReadTotalTimeoutConstant; /* Constant in milliseconds. */
727 DWORD WriteTotalTimeoutMultiplier; /* Multiplier of characters. */
728 DWORD WriteTotalTimeoutConstant; /* Constant in milliseconds. */
729 } FTTIMEOUTS,*LPFTTIMEOUTS;
733 BOOL WINAPI FT_W32_ClearCommBreak(
738 BOOL WINAPI FT_W32_ClearCommError(
741 LPFTCOMSTAT lpftComstat
745 BOOL WINAPI FT_W32_EscapeCommFunction(
751 BOOL WINAPI FT_W32_GetCommModemStatus(
753 LPDWORD lpdwModemStatus
757 BOOL WINAPI FT_W32_GetCommState(
763 BOOL WINAPI FT_W32_GetCommTimeouts(
765 FTTIMEOUTS *pTimeouts
769 BOOL WINAPI FT_W32_PurgeComm(
775 BOOL WINAPI FT_W32_SetCommBreak(
780 BOOL WINAPI FT_W32_SetCommMask(
786 BOOL WINAPI FT_W32_SetCommState(
792 BOOL WINAPI FT_W32_SetCommTimeouts(
794 FTTIMEOUTS *pTimeouts
798 BOOL WINAPI FT_W32_SetupComm(
800 DWORD dwReadBufferSize,
801 DWORD dwWriteBufferSize
805 BOOL WINAPI FT_W32_WaitCommEvent(
808 LPOVERLAPPED lpOverlapped
813 // Device information
816 typedef struct _ft_device_list_info_node {
821 char SerialNumber[16];
822 char Description[64];
824 } FT_DEVICE_LIST_INFO_NODE;
828 FT_STATUS WINAPI FT_CreateDeviceInfoList(
833 FT_STATUS WINAPI FT_GetDeviceInfoList(
834 FT_DEVICE_LIST_INFO_NODE *pDest,
839 FT_STATUS WINAPI FT_GetDeviceInfoDetail(
845 LPVOID lpSerialNumber,
846 LPVOID lpDescription,
852 // Version information
856 FT_STATUS WINAPI FT_GetDriverVersion(
862 FT_STATUS WINAPI FT_GetLibraryVersion(
874 #endif /* FTD2XX_H */