usbdmx.com Home of the opto isolated, bus powered, DMX512 interface with both in and out universes. Cheap and simple to build. USBDMX logo

ftd2xx.h

00001 /*++
00002 
00003  Copyright (c) 2001-2011 Future Technology Devices International Limited
00004  
00005  THIS SOFTWARE IS PROVIDED BY FUTURE TECHNOLOGY DEVICES INTERNATIONAL LIMITED "AS IS"
00006  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00007  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
00008  FUTURE TECHNOLOGY DEVICES INTERNATIONAL LIMITED BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00009  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
00010  OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION)
00011  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
00012  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
00013  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00014  
00015  FTDI DRIVERS MAY BE USED ONLY IN CONJUNCTION WITH PRODUCTS BASED ON FTDI PARTS.
00016  
00017  FTDI DRIVERS MAY BE DISTRIBUTED IN ANY FORM AS LONG AS LICENSE INFORMATION IS NOT MODIFIED.
00018  
00019  IF A CUSTOM VENDOR ID AND/OR PRODUCT ID OR DESCRIPTION STRING ARE USED, IT IS THE
00020  RESPONSIBILITY OF THE PRODUCT MANUFACTURER TO MAINTAIN ANY CHANGES AND SUBSEQUENT WHQL
00021  RE-CERTIFICATION AS A RESULT OF MAKING THESE CHANGES.
00022  
00023  
00024  Module Name:
00025  
00026  ftd2xx.h
00027  
00028  Abstract:
00029  
00030  Native USB device driver for FTDI FT232x, FT245x, FT2232x and FT4232x devices
00031  FTD2XX library definitions
00032  
00033  Environment:
00034  
00035  user mode 
00036  
00037  
00038  --*/
00039 
00040 
00041 #ifndef FTD2XX_H
00042 #define FTD2XX_H
00043 
00044 #ifndef _WINDOWS
00045 #include <pthread.h>
00046 #define WINAPI
00047 #endif
00048 
00049 // The following ifdef block is the standard way of creating macros
00050 // which make exporting from a DLL simpler.  All files within this DLL
00051 // are compiled with the FTD2XX_EXPORTS symbol defined on the command line.
00052 // This symbol should not be defined on any project that uses this DLL.
00053 // This way any other project whose source files include this file see
00054 // FTD2XX_API functions as being imported from a DLL, whereas this DLL
00055 // sees symbols defined with this macro as being exported.
00056 
00057 #ifdef FTD2XX_EXPORTS
00058 #define FTD2XX_API __declspec(dllexport)
00059 #else
00060 #define FTD2XX_API __declspec(dllimport)
00061 #endif
00062 
00063 #ifndef _WINDOWS
00064 #include "WinTypes.h"
00065 
00066 #ifdef FTD2XX_API
00067 #undef FTD2XX_API
00068 #define FTD2XX_API
00069 #endif
00070 #endif
00071 typedef struct _EVENT_HANDLE{
00072         pthread_cond_t eCondVar;
00073         pthread_mutex_t eMutex;
00074         int iVar;
00075 } EVENT_HANDLE;
00076 
00077 typedef PVOID                   FT_HANDLE;
00078 typedef ULONG                   FT_STATUS;
00079 
00080 //
00081 // Device status
00082 //
00083 enum {
00084         FT_OK,
00085         FT_INVALID_HANDLE,
00086         FT_DEVICE_NOT_FOUND,
00087         FT_DEVICE_NOT_OPENED,
00088         FT_IO_ERROR,
00089         FT_INSUFFICIENT_RESOURCES,
00090         FT_INVALID_PARAMETER,
00091         FT_INVALID_BAUD_RATE,   //7
00092 
00093         FT_DEVICE_NOT_OPENED_FOR_ERASE,
00094         FT_DEVICE_NOT_OPENED_FOR_WRITE,
00095         FT_FAILED_TO_WRITE_DEVICE,
00096         FT_EEPROM_READ_FAILED,
00097         FT_EEPROM_WRITE_FAILED,
00098         FT_EEPROM_ERASE_FAILED,
00099         FT_EEPROM_NOT_PRESENT,
00100         FT_EEPROM_NOT_PROGRAMMED,
00101         FT_INVALID_ARGS,
00102         FT_NOT_SUPPORTED,
00103         FT_OTHER_ERROR
00104 };
00105 
00106 
00107 #define FT_SUCCESS(status) ((status) == FT_OK)
00108 
00109 //
00110 // FT_OpenEx Flags
00111 //
00112 
00113 #define FT_OPEN_BY_SERIAL_NUMBER    1
00114 #define FT_OPEN_BY_DESCRIPTION      2
00115 #define FT_OPEN_BY_LOCATION                     4
00116 
00117 //
00118 // FT_ListDevices Flags (used in conjunction with FT_OpenEx Flags
00119 //
00120 
00121 #define FT_LIST_NUMBER_ONLY                     0x80000000
00122 #define FT_LIST_BY_INDEX                        0x40000000
00123 #define FT_LIST_ALL                                     0x20000000
00124 
00125 #define FT_LIST_MASK (FT_LIST_NUMBER_ONLY|FT_LIST_BY_INDEX|FT_LIST_ALL)
00126 
00127 //
00128 // Baud Rates
00129 //
00130 
00131 #define FT_BAUD_300                     300
00132 #define FT_BAUD_600                     600
00133 #define FT_BAUD_1200            1200
00134 #define FT_BAUD_2400            2400
00135 #define FT_BAUD_4800            4800
00136 #define FT_BAUD_9600            9600
00137 #define FT_BAUD_14400           14400
00138 #define FT_BAUD_19200           19200
00139 #define FT_BAUD_38400           38400
00140 #define FT_BAUD_57600           57600
00141 #define FT_BAUD_115200          115200
00142 #define FT_BAUD_230400          230400
00143 #define FT_BAUD_460800          460800
00144 #define FT_BAUD_921600          921600
00145 
00146 //
00147 // Word Lengths
00148 //
00149 
00150 #define FT_BITS_8                       (UCHAR) 8
00151 #define FT_BITS_7                       (UCHAR) 7
00152 
00153 //
00154 // Stop Bits
00155 //
00156 
00157 #define FT_STOP_BITS_1          (UCHAR) 0
00158 #define FT_STOP_BITS_2          (UCHAR) 2
00159 
00160 //
00161 // Parity
00162 //
00163 
00164 #define FT_PARITY_NONE          (UCHAR) 0
00165 #define FT_PARITY_ODD           (UCHAR) 1
00166 #define FT_PARITY_EVEN          (UCHAR) 2
00167 #define FT_PARITY_MARK          (UCHAR) 3
00168 #define FT_PARITY_SPACE         (UCHAR) 4
00169 
00170 //
00171 // Flow Control
00172 //
00173 
00174 #define FT_FLOW_NONE        0x0000
00175 #define FT_FLOW_RTS_CTS     0x0100
00176 #define FT_FLOW_DTR_DSR     0x0200
00177 #define FT_FLOW_XON_XOFF    0x0400
00178 
00179 //
00180 // Purge rx and tx buffers
00181 //
00182 #define FT_PURGE_RX         1
00183 #define FT_PURGE_TX         2
00184 
00185 //
00186 // Events
00187 //
00188 
00189 typedef void (*PFT_EVENT_HANDLER)(DWORD,DWORD);
00190 
00191 #define FT_EVENT_RXCHAR                 1
00192 #define FT_EVENT_MODEM_STATUS   2
00193 #define FT_EVENT_LINE_STATUS    4
00194 
00195 //
00196 // Timeouts
00197 //
00198 
00199 #define FT_DEFAULT_RX_TIMEOUT   300
00200 #define FT_DEFAULT_TX_TIMEOUT   300
00201 
00202 //
00203 // Device types
00204 //
00205 
00206 typedef ULONG   FT_DEVICE;
00207 
00208 enum {
00209     FT_DEVICE_BM,
00210     FT_DEVICE_AM,
00211     FT_DEVICE_100AX,
00212     FT_DEVICE_UNKNOWN,
00213         FT_DEVICE_2232C,
00214         FT_DEVICE_232R,
00215         FT_DEVICE_2232H,
00216         FT_DEVICE_4232H
00217  };
00218 
00219 //
00220 // Bit Modes
00221 //
00222 
00223 #define FT_BITMODE_RESET                                0x00
00224 #define FT_BITMODE_ASYNC_BITBANG                0x01
00225 #define FT_BITMODE_MPSSE                                0x02
00226 #define FT_BITMODE_SYNC_BITBANG                 0x04
00227 #define FT_BITMODE_MCU_HOST                             0x08
00228 #define FT_BITMODE_FAST_SERIAL                  0x10
00229 #define FT_BITMODE_CBUS_BITBANG                 0x20
00230 #define FT_BITMODE_SYNC_FIFO                    0x40
00231 
00232 
00233 #ifdef __cplusplus
00234 extern "C" {
00235 #endif
00236         
00237 FTD2XX_API
00238 FT_STATUS WINAPI FT_Open(
00239         int deviceNumber,
00240         FT_HANDLE *pHandle
00241         );
00242 
00243 FTD2XX_API
00244 FT_STATUS WINAPI FT_OpenEx(
00245     PVOID pArg1,
00246     DWORD Flags,
00247     FT_HANDLE *pHandle
00248     );
00249 
00250 FTD2XX_API 
00251 FT_STATUS WINAPI FT_ListDevices(
00252         PVOID pArg1,
00253         PVOID pArg2,
00254         DWORD Flags
00255         );
00256 
00257 FTD2XX_API
00258 FT_STATUS FT_SetVIDPID(
00259         DWORD dwVID, 
00260         DWORD dwPID
00261         );
00262         
00263 FTD2XX_API
00264 FT_STATUS FT_GetVIDPID(
00265         DWORD * pdwVID, 
00266         DWORD * pdwPID
00267         );
00268 
00269 FTD2XX_API
00270 FT_STATUS WINAPI FT_Close(
00271     FT_HANDLE ftHandle
00272     );
00273 
00274 FTD2XX_API
00275 FT_STATUS WINAPI FT_Read(
00276     FT_HANDLE ftHandle,
00277     LPVOID lpBuffer,
00278     DWORD nBufferSize,
00279     LPDWORD lpBytesReturned
00280     );
00281 
00282 FTD2XX_API 
00283 FT_STATUS WINAPI FT_Write(
00284     FT_HANDLE ftHandle,
00285     LPVOID lpBuffer,
00286     DWORD nBufferSize,
00287     LPDWORD lpBytesWritten
00288     );
00289 
00290 FTD2XX_API 
00291 FT_STATUS WINAPI FT_IoCtl(
00292     FT_HANDLE ftHandle,
00293     DWORD dwIoControlCode,
00294     LPVOID lpInBuf,
00295     DWORD nInBufSize,
00296     LPVOID lpOutBuf,
00297     DWORD nOutBufSize,
00298     LPDWORD lpBytesReturned,
00299     LPOVERLAPPED lpOverlapped
00300     );
00301 
00302 FTD2XX_API
00303 FT_STATUS WINAPI FT_SetBaudRate(
00304     FT_HANDLE ftHandle,
00305         ULONG BaudRate
00306         );
00307 
00308 FTD2XX_API
00309 FT_STATUS WINAPI FT_SetDivisor(
00310     FT_HANDLE ftHandle,
00311         USHORT Divisor
00312         );
00313 
00314 FTD2XX_API
00315 FT_STATUS WINAPI FT_SetDataCharacteristics(
00316     FT_HANDLE ftHandle,
00317         UCHAR WordLength,
00318         UCHAR StopBits,
00319         UCHAR Parity
00320         );
00321 
00322 FTD2XX_API
00323 FT_STATUS WINAPI FT_SetFlowControl(
00324     FT_HANDLE ftHandle,
00325     USHORT FlowControl,
00326     UCHAR XonChar,
00327     UCHAR XoffChar
00328         );
00329 
00330 FTD2XX_API
00331 FT_STATUS WINAPI FT_ResetDevice(
00332     FT_HANDLE ftHandle
00333         );
00334 
00335 FTD2XX_API
00336 FT_STATUS WINAPI FT_SetDtr(
00337     FT_HANDLE ftHandle
00338         );
00339 
00340 FTD2XX_API
00341 FT_STATUS WINAPI FT_ClrDtr(
00342     FT_HANDLE ftHandle
00343         );
00344 
00345 FTD2XX_API
00346 FT_STATUS WINAPI FT_SetRts(
00347     FT_HANDLE ftHandle
00348         );
00349 
00350 FTD2XX_API
00351 FT_STATUS WINAPI FT_ClrRts(
00352     FT_HANDLE ftHandle
00353         );
00354 
00355 FTD2XX_API
00356 FT_STATUS WINAPI FT_GetModemStatus(
00357     FT_HANDLE ftHandle,
00358         ULONG *pModemStatus
00359         );
00360 
00361 FTD2XX_API
00362 FT_STATUS WINAPI FT_SetChars(
00363     FT_HANDLE ftHandle,
00364         UCHAR EventChar,
00365         UCHAR EventCharEnabled,
00366         UCHAR ErrorChar,
00367         UCHAR ErrorCharEnabled
00368     );
00369 
00370 FTD2XX_API
00371 FT_STATUS WINAPI FT_Purge(
00372     FT_HANDLE ftHandle,
00373         ULONG Mask
00374         );
00375 
00376 FTD2XX_API
00377 FT_STATUS WINAPI FT_SetTimeouts(
00378     FT_HANDLE ftHandle,
00379         ULONG ReadTimeout,
00380         ULONG WriteTimeout
00381         );
00382 
00383 FTD2XX_API
00384 FT_STATUS WINAPI FT_GetQueueStatus(
00385     FT_HANDLE ftHandle,
00386         DWORD *dwRxBytes
00387         );
00388 
00389 FTD2XX_API
00390 FT_STATUS WINAPI FT_SetEventNotification(
00391     FT_HANDLE ftHandle,
00392         DWORD Mask,
00393         PVOID Param
00394         );
00395 
00396 FTD2XX_API
00397 FT_STATUS WINAPI FT_GetStatus(
00398     FT_HANDLE ftHandle,
00399     DWORD *dwRxBytes,
00400     DWORD *dwTxBytes,
00401     DWORD *dwEventDWord
00402         );
00403 
00404 FTD2XX_API
00405 FT_STATUS WINAPI FT_SetBreakOn(
00406     FT_HANDLE ftHandle
00407     );
00408 
00409 FTD2XX_API
00410 FT_STATUS WINAPI FT_SetBreakOff(
00411     FT_HANDLE ftHandle
00412     );
00413 
00414 FTD2XX_API
00415 FT_STATUS WINAPI FT_SetWaitMask(
00416     FT_HANDLE ftHandle,
00417     DWORD Mask
00418     );
00419 
00420 FTD2XX_API
00421 FT_STATUS WINAPI FT_WaitOnMask(
00422     FT_HANDLE ftHandle,
00423     DWORD *Mask
00424     );
00425 
00426 FTD2XX_API
00427 FT_STATUS WINAPI FT_GetEventStatus(
00428     FT_HANDLE ftHandle,
00429     DWORD *dwEventDWord
00430     );
00431 
00432 FTD2XX_API
00433 FT_STATUS WINAPI FT_ReadEE(
00434     FT_HANDLE ftHandle,
00435         DWORD dwWordOffset,
00436     LPWORD lpwValue
00437         );
00438 
00439 FTD2XX_API
00440 FT_STATUS WINAPI FT_WriteEE(
00441     FT_HANDLE ftHandle,
00442         DWORD dwWordOffset,
00443     WORD wValue
00444         );
00445 
00446 FTD2XX_API
00447 FT_STATUS WINAPI FT_EraseEE(
00448     FT_HANDLE ftHandle
00449         );
00450         
00451 //
00452 // structure to hold program data for FT_Program function
00453 //
00454 typedef struct ft_program_data {
00455 
00456         DWORD Signature1;                       // Header - must be 0x00000000 
00457         DWORD Signature2;                       // Header - must be 0xffffffff
00458         DWORD Version;                          // Header - FT_PROGRAM_DATA version
00459                                                                 //          0 = original
00460                                     //          1 = FT2232C extensions
00461                                                                 //                      2 = FT232R extensions
00462                                                                 //                      3 = FT2232H extensions
00463                                                                 //                      4 = FT4232H extensions
00464         WORD VendorId;                          // 0x0403
00465         WORD ProductId;                         // 0x6001
00466         char *Manufacturer;                     // "FTDI"
00467         char *ManufacturerId;           // "FT"
00468         char *Description;                      // "USB HS Serial Converter"
00469         char *SerialNumber;                     // "FT000001" if fixed, or NULL
00470         WORD MaxPower;                          // 0 < MaxPower <= 500
00471         WORD PnP;                                       // 0 = disabled, 1 = enabled
00472         WORD SelfPowered;                       // 0 = bus powered, 1 = self powered
00473         WORD RemoteWakeup;                      // 0 = not capable, 1 = capable
00474         //
00475         // Rev4 (FT232B) extensions
00476         //
00477         UCHAR Rev4;                                     // non-zero if Rev4 chip, zero otherwise
00478         UCHAR IsoIn;                            // non-zero if in endpoint is isochronous
00479         UCHAR IsoOut;                           // non-zero if out endpoint is isochronous
00480         UCHAR PullDownEnable;           // non-zero if pull down enabled
00481         UCHAR SerNumEnable;                     // non-zero if serial number to be used
00482         UCHAR USBVersionEnable;         // non-zero if chip uses USBVersion
00483         WORD USBVersion;                        // BCD (0x0200 => USB2)
00484         //
00485         // Rev 5 (FT2232) extensions
00486         //
00487         UCHAR Rev5;                                     // non-zero if Rev5 chip, zero otherwise
00488         UCHAR IsoInA;                           // non-zero if in endpoint is isochronous
00489         UCHAR IsoInB;                           // non-zero if in endpoint is isochronous
00490         UCHAR IsoOutA;                          // non-zero if out endpoint is isochronous
00491         UCHAR IsoOutB;                          // non-zero if out endpoint is isochronous
00492         UCHAR PullDownEnable5;          // non-zero if pull down enabled
00493         UCHAR SerNumEnable5;            // non-zero if serial number to be used
00494         UCHAR USBVersionEnable5;        // non-zero if chip uses USBVersion
00495         WORD USBVersion5;                       // BCD (0x0200 => USB2)
00496         UCHAR AIsHighCurrent;           // non-zero if interface is high current
00497         UCHAR BIsHighCurrent;           // non-zero if interface is high current
00498         UCHAR IFAIsFifo;                        // non-zero if interface is 245 FIFO
00499         UCHAR IFAIsFifoTar;                     // non-zero if interface is 245 FIFO CPU target
00500         UCHAR IFAIsFastSer;                     // non-zero if interface is Fast serial
00501         UCHAR AIsVCP;                           // non-zero if interface is to use VCP drivers
00502         UCHAR IFBIsFifo;                        // non-zero if interface is 245 FIFO
00503         UCHAR IFBIsFifoTar;                     // non-zero if interface is 245 FIFO CPU target
00504         UCHAR IFBIsFastSer;                     // non-zero if interface is Fast serial
00505         UCHAR BIsVCP;                           // non-zero if interface is to use VCP drivers
00506         //
00507         // Rev 6 (FT232R) extensions
00508         //
00509         UCHAR UseExtOsc;                        // Use External Oscillator
00510         UCHAR HighDriveIOs;                     // High Drive I/Os
00511         UCHAR EndpointSize;                     // Endpoint size
00512         UCHAR PullDownEnableR;          // non-zero if pull down enabled
00513         UCHAR SerNumEnableR;            // non-zero if serial number to be used
00514         UCHAR InvertTXD;                        // non-zero if invert TXD
00515         UCHAR InvertRXD;                        // non-zero if invert RXD
00516         UCHAR InvertRTS;                        // non-zero if invert RTS
00517         UCHAR InvertCTS;                        // non-zero if invert CTS
00518         UCHAR InvertDTR;                        // non-zero if invert DTR
00519         UCHAR InvertDSR;                        // non-zero if invert DSR
00520         UCHAR InvertDCD;                        // non-zero if invert DCD
00521         UCHAR InvertRI;                         // non-zero if invert RI
00522         UCHAR Cbus0;                            // Cbus Mux control
00523         UCHAR Cbus1;                            // Cbus Mux control
00524         UCHAR Cbus2;                            // Cbus Mux control
00525         UCHAR Cbus3;                            // Cbus Mux control
00526         UCHAR Cbus4;                            // Cbus Mux control
00527         UCHAR RIsD2XX;                          // non-zero if using D2XX drivers
00528         //
00529         // Rev 7 (FT2232H) Extensions
00530         //
00531         UCHAR PullDownEnable7;          // non-zero if pull down enabled
00532         UCHAR SerNumEnable7;            // non-zero if serial number to be used
00533         UCHAR ALSlowSlew;                       // non-zero if AL pins have slow slew
00534         UCHAR ALSchmittInput;           // non-zero if AL pins are Schmitt input
00535         UCHAR ALDriveCurrent;           // valid values are 4mA, 8mA, 12mA, 16mA
00536         UCHAR AHSlowSlew;                       // non-zero if AH pins have slow slew
00537         UCHAR AHSchmittInput;           // non-zero if AH pins are Schmitt input
00538         UCHAR AHDriveCurrent;           // valid values are 4mA, 8mA, 12mA, 16mA
00539         UCHAR BLSlowSlew;                       // non-zero if BL pins have slow slew
00540         UCHAR BLSchmittInput;           // non-zero if BL pins are Schmitt input
00541         UCHAR BLDriveCurrent;           // valid values are 4mA, 8mA, 12mA, 16mA
00542         UCHAR BHSlowSlew;                       // non-zero if BH pins have slow slew
00543         UCHAR BHSchmittInput;           // non-zero if BH pins are Schmitt input
00544         UCHAR BHDriveCurrent;           // valid values are 4mA, 8mA, 12mA, 16mA
00545         UCHAR IFAIsFifo7;                       // non-zero if interface is 245 FIFO
00546         UCHAR IFAIsFifoTar7;            // non-zero if interface is 245 FIFO CPU target
00547         UCHAR IFAIsFastSer7;            // non-zero if interface is Fast serial
00548         UCHAR AIsVCP7;                          // non-zero if interface is to use VCP drivers
00549         UCHAR IFBIsFifo7;                       // non-zero if interface is 245 FIFO
00550         UCHAR IFBIsFifoTar7;            // non-zero if interface is 245 FIFO CPU target
00551         UCHAR IFBIsFastSer7;            // non-zero if interface is Fast serial
00552         UCHAR BIsVCP7;                          // non-zero if interface is to use VCP drivers
00553         UCHAR PowerSaveEnable;                  // non-zero if using BCBUS7 to save power for self-powered designs
00554         //
00555         // Rev 8 (FT4232H) Extensions
00556         //
00557         UCHAR PullDownEnable8;          // non-zero if pull down enabled
00558         UCHAR SerNumEnable8;            // non-zero if serial number to be used
00559         UCHAR ASlowSlew;                        // non-zero if AL pins have slow slew
00560         UCHAR ASchmittInput;            // non-zero if AL pins are Schmitt input
00561         UCHAR ADriveCurrent;            // valid values are 4mA, 8mA, 12mA, 16mA
00562         UCHAR BSlowSlew;                        // non-zero if AH pins have slow slew
00563         UCHAR BSchmittInput;            // non-zero if AH pins are Schmitt input
00564         UCHAR BDriveCurrent;            // valid values are 4mA, 8mA, 12mA, 16mA
00565         UCHAR CSlowSlew;                        // non-zero if BL pins have slow slew
00566         UCHAR CSchmittInput;            // non-zero if BL pins are Schmitt input
00567         UCHAR CDriveCurrent;            // valid values are 4mA, 8mA, 12mA, 16mA
00568         UCHAR DSlowSlew;                        // non-zero if BH pins have slow slew
00569         UCHAR DSchmittInput;            // non-zero if BH pins are Schmitt input
00570         UCHAR DDriveCurrent;            // valid values are 4mA, 8mA, 12mA, 16mA
00571         UCHAR ARIIsTXDEN;                       // non-zero if port A uses RI as RS485 TXDEN
00572         UCHAR BRIIsTXDEN;                       // non-zero if port B uses RI as RS485 TXDEN
00573         UCHAR CRIIsTXDEN;                       // non-zero if port C uses RI as RS485 TXDEN
00574         UCHAR DRIIsTXDEN;                       // non-zero if port D uses RI as RS485 TXDEN
00575         UCHAR AIsVCP8;                          // non-zero if interface is to use VCP drivers
00576         UCHAR BIsVCP8;                          // non-zero if interface is to use VCP drivers
00577         UCHAR CIsVCP8;                          // non-zero if interface is to use VCP drivers
00578         UCHAR DIsVCP8;                          // non-zero if interface is to use VCP drivers
00579 
00580 } FT_PROGRAM_DATA, *PFT_PROGRAM_DATA;
00581 
00582         
00583 FTD2XX_API
00584 FT_STATUS WINAPI FT_EE_Program(
00585     FT_HANDLE ftHandle,
00586         PFT_PROGRAM_DATA pData
00587         );
00588 
00589 FTD2XX_API
00590 FT_STATUS WINAPI FT_EE_ProgramEx(
00591     FT_HANDLE ftHandle,
00592         PFT_PROGRAM_DATA lpData,
00593         char *Manufacturer,
00594         char *ManufacturerId,
00595         char *Description,
00596         char *SerialNumber
00597         );
00598         
00599 FTD2XX_API
00600 FT_STATUS WINAPI FT_EE_Read(
00601     FT_HANDLE ftHandle,
00602         PFT_PROGRAM_DATA pData
00603         );
00604 
00605 FTD2XX_API
00606 FT_STATUS WINAPI FT_EE_ReadEx(
00607     FT_HANDLE ftHandle,
00608         PFT_PROGRAM_DATA lpData,
00609         char *Manufacturer,
00610         char *ManufacturerId,
00611         char *Description,
00612         char *SerialNumber
00613         );
00614         
00615 FTD2XX_API
00616 FT_STATUS WINAPI FT_EE_UASize(
00617     FT_HANDLE ftHandle,
00618         LPDWORD lpdwSize
00619         );
00620 
00621 FTD2XX_API
00622 FT_STATUS WINAPI FT_EE_UAWrite(
00623     FT_HANDLE ftHandle,
00624         PUCHAR pucData,
00625         DWORD dwDataLen
00626         );
00627 
00628 FTD2XX_API
00629 FT_STATUS WINAPI FT_EE_UARead(
00630     FT_HANDLE ftHandle,
00631         PUCHAR pucData,
00632         DWORD dwDataLen,
00633         LPDWORD lpdwBytesRead
00634         );
00635 
00636 FTD2XX_API
00637 FT_STATUS WINAPI FT_SetLatencyTimer(
00638     FT_HANDLE ftHandle,
00639     UCHAR ucLatency
00640     );
00641 
00642 FTD2XX_API
00643 FT_STATUS WINAPI FT_GetLatencyTimer(
00644     FT_HANDLE ftHandle,
00645     PUCHAR pucLatency
00646     );
00647 
00648 FTD2XX_API
00649 FT_STATUS WINAPI FT_SetBitMode(
00650     FT_HANDLE ftHandle,
00651     UCHAR ucMask,
00652         UCHAR ucEnable
00653     );
00654 
00655 FTD2XX_API
00656 FT_STATUS WINAPI FT_GetBitMode(
00657     FT_HANDLE ftHandle,
00658     PUCHAR pucMode
00659     );
00660 
00661 FTD2XX_API
00662 FT_STATUS WINAPI FT_SetUSBParameters(
00663     FT_HANDLE ftHandle,
00664     ULONG ulInTransferSize,
00665     ULONG ulOutTransferSize
00666     );
00667 
00668 FTD2XX_API
00669 FT_STATUS WINAPI FT_GetDeviceInfo(
00670     FT_HANDLE ftHandle,
00671     FT_DEVICE *lpftDevice,
00672         LPDWORD lpdwID,
00673         PCHAR SerialNumber,
00674         PCHAR Description,
00675         LPVOID Dummy
00676     );
00677         
00678 FTD2XX_API
00679 FT_STATUS WINAPI FT_GetDeviceLocId(
00680    FT_HANDLE ftHandle,
00681    LPDWORD lpdwLocId
00682    );
00683 
00684 FTD2XX_API
00685 FT_STATUS WINAPI FT_StopInTask(
00686     FT_HANDLE ftHandle
00687     );
00688 
00689 FTD2XX_API
00690 FT_STATUS WINAPI FT_RestartInTask(
00691     FT_HANDLE ftHandle
00692     );
00693 
00694 FTD2XX_API
00695 FT_STATUS WINAPI FT_SetResetPipeRetryCount(
00696     FT_HANDLE ftHandle,
00697         DWORD dwCount
00698     );
00699 
00700 FTD2XX_API
00701 FT_STATUS WINAPI FT_ResetPort(
00702     FT_HANDLE ftHandle
00703     );
00704 
00705 
00706 //
00707 // Win32-type functions
00708 //
00709 
00710 FTD2XX_API
00711 FT_HANDLE WINAPI FT_W32_CreateFile(
00712         LPCSTR                                  lpszName,
00713         DWORD                                   dwAccess,
00714         DWORD                                   dwShareMode,
00715         LPSECURITY_ATTRIBUTES   lpSecurityAttributes,
00716         DWORD                                   dwCreate,
00717         DWORD                                   dwAttrsAndFlags,
00718         HANDLE                                  hTemplate
00719         );
00720 
00721 FTD2XX_API
00722 BOOL WINAPI FT_W32_CloseHandle(
00723     FT_HANDLE ftHandle
00724         );
00725 
00726 FTD2XX_API
00727 BOOL WINAPI FT_W32_ReadFile(
00728     FT_HANDLE ftHandle,
00729     LPVOID lpBuffer,
00730     DWORD nBufferSize,
00731     LPDWORD lpBytesReturned,
00732         LPOVERLAPPED lpOverlapped
00733     );
00734 
00735 FTD2XX_API
00736 BOOL WINAPI FT_W32_WriteFile(
00737     FT_HANDLE ftHandle,
00738     LPVOID lpBuffer,
00739     DWORD nBufferSize,
00740     LPDWORD lpBytesWritten,
00741         LPOVERLAPPED lpOverlapped
00742     );
00743 
00744 FTD2XX_API
00745 DWORD WINAPI FT_W32_GetLastError(
00746     FT_HANDLE ftHandle
00747     );
00748 
00749 FTD2XX_API
00750 BOOL WINAPI FT_W32_GetOverlappedResult(
00751     FT_HANDLE ftHandle,
00752         LPOVERLAPPED lpOverlapped,
00753     LPDWORD lpdwBytesTransferred,
00754         BOOL bWait
00755     );
00756 
00757 FTD2XX_API
00758 BOOL WINAPI FT_W32_CancelIo(
00759     FT_HANDLE ftHandle
00760     );
00761 
00762 
00763 //
00764 // Win32 COMM API type functions
00765 //
00766 typedef struct _FTCOMSTAT {
00767     DWORD fCtsHold : 1;
00768     DWORD fDsrHold : 1;
00769     DWORD fRlsdHold : 1;
00770     DWORD fXoffHold : 1;
00771     DWORD fXoffSent : 1;
00772     DWORD fEof : 1;
00773     DWORD fTxim : 1;
00774     DWORD fReserved : 25;
00775     DWORD cbInQue;
00776     DWORD cbOutQue;
00777 } FTCOMSTAT, *LPFTCOMSTAT;
00778 
00779 typedef struct _FTDCB {
00780     DWORD DCBlength;      /* sizeof(FTDCB)                   */
00781     DWORD BaudRate;       /* Baudrate at which running       */
00782     DWORD fBinary: 1;     /* Binary Mode (skip EOF check)    */
00783     DWORD fParity: 1;     /* Enable parity checking          */
00784     DWORD fOutxCtsFlow:1; /* CTS handshaking on output       */
00785     DWORD fOutxDsrFlow:1; /* DSR handshaking on output       */
00786     DWORD fDtrControl:2;  /* DTR Flow control                */
00787     DWORD fDsrSensitivity:1; /* DSR Sensitivity              */
00788     DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
00789     DWORD fOutX: 1;       /* Enable output X-ON/X-OFF        */
00790     DWORD fInX: 1;        /* Enable input X-ON/X-OFF         */
00791     DWORD fErrorChar: 1;  /* Enable Err Replacement          */
00792     DWORD fNull: 1;       /* Enable Null stripping           */
00793     DWORD fRtsControl:2;  /* Rts Flow control                */
00794     DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
00795     DWORD fDummy2:17;     /* Reserved                        */
00796     WORD wReserved;       /* Not currently used              */
00797     WORD XonLim;          /* Transmit X-ON threshold         */
00798     WORD XoffLim;         /* Transmit X-OFF threshold        */
00799     BYTE ByteSize;        /* Number of bits/byte, 4-8        */
00800     BYTE Parity;          /* 0-4=None,Odd,Even,Mark,Space    */
00801     BYTE StopBits;        /* 0,1,2 = 1, 1.5, 2               */
00802     char XonChar;         /* Tx and Rx X-ON character        */
00803     char XoffChar;        /* Tx and Rx X-OFF character       */
00804     char ErrorChar;       /* Error replacement char          */
00805     char EofChar;         /* End of Input character          */
00806     char EvtChar;         /* Received Event character        */
00807     WORD wReserved1;      /* Fill for now.                   */
00808 } FTDCB, *LPFTDCB;
00809 
00810 typedef struct _FTTIMEOUTS {
00811     DWORD ReadIntervalTimeout;          /* Maximum time between read chars. */
00812     DWORD ReadTotalTimeoutMultiplier;   /* Multiplier of characters.        */
00813     DWORD ReadTotalTimeoutConstant;     /* Constant in milliseconds.        */
00814     DWORD WriteTotalTimeoutMultiplier;  /* Multiplier of characters.        */
00815     DWORD WriteTotalTimeoutConstant;    /* Constant in milliseconds.        */
00816 } FTTIMEOUTS,*LPFTTIMEOUTS;
00817 
00818 
00819 FTD2XX_API
00820 BOOL WINAPI FT_W32_ClearCommBreak(
00821     FT_HANDLE ftHandle
00822         );
00823 
00824 FTD2XX_API
00825 BOOL WINAPI FT_W32_ClearCommError(
00826     FT_HANDLE ftHandle,
00827         LPDWORD lpdwErrors,
00828     LPFTCOMSTAT lpftComstat
00829         );
00830 
00831 FTD2XX_API
00832 BOOL WINAPI FT_W32_EscapeCommFunction(
00833     FT_HANDLE ftHandle,
00834         DWORD dwFunc
00835         );
00836 
00837 FTD2XX_API
00838 BOOL WINAPI FT_W32_GetCommModemStatus(
00839     FT_HANDLE ftHandle,
00840         LPDWORD lpdwModemStatus
00841         );
00842 
00843 FTD2XX_API
00844 BOOL WINAPI FT_W32_GetCommState(
00845     FT_HANDLE ftHandle,
00846     LPFTDCB lpftDcb
00847         );
00848 
00849 FTD2XX_API
00850 BOOL WINAPI FT_W32_GetCommTimeouts(
00851     FT_HANDLE ftHandle,
00852     FTTIMEOUTS *pTimeouts
00853         );
00854 
00855 FTD2XX_API
00856 BOOL WINAPI FT_W32_PurgeComm(
00857     FT_HANDLE ftHandle,
00858         DWORD dwMask
00859         );
00860 
00861 FTD2XX_API
00862 BOOL WINAPI FT_W32_SetCommBreak(
00863     FT_HANDLE ftHandle
00864         );
00865 
00866 FTD2XX_API
00867 BOOL WINAPI FT_W32_SetCommMask(
00868     FT_HANDLE ftHandle,
00869     ULONG ulEventMask
00870     );
00871 
00872 FTD2XX_API
00873 BOOL WINAPI FT_W32_SetCommState(
00874     FT_HANDLE ftHandle,
00875     LPFTDCB lpftDcb
00876         );
00877 
00878 FTD2XX_API
00879 BOOL WINAPI FT_W32_SetCommTimeouts(
00880     FT_HANDLE ftHandle,
00881     FTTIMEOUTS *pTimeouts
00882         );
00883 
00884 FTD2XX_API
00885 BOOL WINAPI FT_W32_SetupComm(
00886     FT_HANDLE ftHandle,
00887         DWORD dwReadBufferSize,
00888         DWORD dwWriteBufferSize
00889         );
00890 
00891 FTD2XX_API
00892 BOOL WINAPI FT_W32_WaitCommEvent(
00893     FT_HANDLE ftHandle,
00894     PULONG pulEvent,
00895         LPOVERLAPPED lpOverlapped
00896     );
00897 
00898 //
00899 // Device information
00900 //
00901 
00902 typedef struct _ft_device_list_info_node {
00903         ULONG Flags;
00904     ULONG Type;
00905         ULONG ID;
00906         DWORD LocId;
00907         char SerialNumber[16];
00908         char Description[64];
00909         FT_HANDLE ftHandle;
00910 } FT_DEVICE_LIST_INFO_NODE;
00911 
00912 // Device information flags
00913 enum {
00914         FT_FLAGS_OPENED = 1,
00915         FT_FLAGS_HISPEED = 2
00916 };
00917 
00918 FTD2XX_API
00919 FT_STATUS WINAPI FT_CreateDeviceInfoList(
00920         LPDWORD lpdwNumDevs
00921         );
00922 
00923 FTD2XX_API
00924 FT_STATUS WINAPI FT_GetDeviceInfoList(
00925         FT_DEVICE_LIST_INFO_NODE *pDest,
00926         LPDWORD lpdwNumDevs
00927         );
00928 
00929 FTD2XX_API
00930 FT_STATUS WINAPI FT_GetDeviceInfoDetail(
00931         DWORD dwIndex,
00932         LPDWORD lpdwFlags,
00933         LPDWORD lpdwType,
00934         LPDWORD lpdwID,
00935         LPDWORD lpdwLocId,
00936         LPVOID lpSerialNumber,
00937         LPVOID lpDescription,
00938         FT_HANDLE *pftHandle
00939         );
00940 
00941 
00942 //
00943 // Version information
00944 //
00945 
00946 FTD2XX_API
00947 FT_STATUS WINAPI FT_GetDriverVersion(
00948     FT_HANDLE ftHandle,
00949         LPDWORD lpdwVersion
00950         );
00951 
00952 FTD2XX_API
00953 FT_STATUS WINAPI FT_GetLibraryVersion(
00954         LPDWORD lpdwVersion
00955         );              
00956 
00957 //
00958 // Events
00959 //
00960 
00961 #define EV_RXCHAR           0x0001  // Any Character received
00962 #define EV_RXFLAG           0x0002  // Received certain character
00963 #define EV_TXEMPTY          0x0004  // Transmitt Queue Empty
00964 #define EV_CTS              0x0008  // CTS changed state
00965 #define EV_DSR              0x0010  // DSR changed state
00966 #define EV_RLSD             0x0020  // RLSD changed state
00967 #define EV_BREAK            0x0040  // BREAK received
00968 #define EV_ERR              0x0080  // Line status error occurred
00969 #define EV_RING             0x0100  // Ring signal detected
00970 #define EV_PERR             0x0200  // Printer error occured
00971 #define EV_RX80FULL         0x0400  // Receive buffer is 80 percent full
00972 #define EV_EVENT1           0x0800  // Provider specific event 1
00973 #define EV_EVENT2           0x1000  // Provider specific event 2
00974 
00975 //
00976 // Escape Functions
00977 //
00978 
00979 #define SETXOFF             1       // Simulate XOFF received
00980 #define SETXON              2       // Simulate XON received
00981 #define SETRTS              3       // Set RTS high
00982 #define CLRRTS              4       // Set RTS low
00983 #define SETDTR              5       // Set DTR high
00984 #define CLRDTR              6       // Set DTR low
00985 #define RESETDEV            7       // Reset device if possible
00986 #define SETBREAK            8       // Set the device break line.
00987 #define CLRBREAK            9       // Clear the device break line.
00988 
00989 //
00990 // PURGE function flags.
00991 //
00992 #define PURGE_TXABORT       0x0001  // Kill the pending/current writes to the comm port.
00993 #define PURGE_RXABORT       0x0002  // Kill the pending/current reads to the comm port.
00994 #define PURGE_TXCLEAR       0x0004  // Kill the transmit queue if there.
00995 #define PURGE_RXCLEAR       0x0008  // Kill the typeahead buffer if there.
00996 
00997 #ifdef __cplusplus
00998 }
00999 #endif
01000 
01001 
01002 #endif  /* FTD2XX_H */
01003 
01004 
01005 
01006 
01007 
01008