ftd2xx.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964
  1. /*++
  2. Copyright (c) 2001-2007 Future Technology Devices International Ltd.
  3. Module Name:
  4. ftd2xx.h
  5. Abstract:
  6. Native USB device driver for FTDI FT8U232/245
  7. FTD2XX library definitions
  8. Environment:
  9. kernel & user mode
  10. Revision History:
  11. 13/03/01 awm Created.
  12. 13/01/03 awm Added device information support.
  13. 19/03/03 awm Added FT_W32_CancelIo.
  14. 12/06/03 awm Added FT_StopInTask and FT_RestartInTask.
  15. 18/09/03 awm Added FT_SetResetPipeRetryCount.
  16. 10/10/03 awm Added FT_ResetPort.
  17. 23/01/04 awm Added support for open-by-location.
  18. 16/03/04 awm Added support for FT2232C.
  19. 23/09/04 awm Added support for FT232R.
  20. 20/10/04 awm Added FT_CyclePort.
  21. 18/01/05 awm Added FT_DEVICE_LIST_INFO_NODE type.
  22. 11/02/05 awm Added LocId to FT_DEVICE_LIST_INFO_NODE.
  23. 25/08/05 awm Added FT_SetDeadmanTimeout.
  24. 02/12/05 awm Removed obsolete references.
  25. 05/12/05 awm Added FT_GetVersion, FT_GetVersionEx.
  26. 08/09/06 awm Added FT_W32_GetCommMask.
  27. 11/09/06 awm Added FT_Rescan.
  28. 11/07/07 awm Added support for FT2232H and FT4232H.
  29. 10/08/07 awm Added flags definitions.
  30. 21/11/07 mja Added FT_GetComPortNumber.
  31. 05/06/08 mja Added EEPROM extensions for FT2232H.
  32. --*/
  33. #ifndef FTD2XX_H
  34. #define FTD2XX_H
  35. // The following ifdef block is the standard way of creating macros
  36. // which make exporting from a DLL simpler. All files within this DLL
  37. // are compiled with the FTD2XX_EXPORTS symbol defined on the command line.
  38. // This symbol should not be defined on any project that uses this DLL.
  39. // This way any other project whose source files include this file see
  40. // FTD2XX_API functions as being imported from a DLL, whereas this DLL
  41. // sees symbols defined with this macro as being exported.
  42. #ifdef FTD2XX_EXPORTS
  43. #define FTD2XX_API __declspec(dllexport)
  44. #else
  45. #define FTD2XX_API __declspec(dllimport)
  46. #endif
  47. typedef PVOID FT_HANDLE;
  48. typedef ULONG FT_STATUS;
  49. //
  50. // Device status
  51. //
  52. enum {
  53. FT_OK,
  54. FT_INVALID_HANDLE,
  55. FT_DEVICE_NOT_FOUND,
  56. FT_DEVICE_NOT_OPENED,
  57. FT_IO_ERROR,
  58. FT_INSUFFICIENT_RESOURCES,
  59. FT_INVALID_PARAMETER,
  60. FT_INVALID_BAUD_RATE,
  61. FT_DEVICE_NOT_OPENED_FOR_ERASE,
  62. FT_DEVICE_NOT_OPENED_FOR_WRITE,
  63. FT_FAILED_TO_WRITE_DEVICE,
  64. FT_EEPROM_READ_FAILED,
  65. FT_EEPROM_WRITE_FAILED,
  66. FT_EEPROM_ERASE_FAILED,
  67. FT_EEPROM_NOT_PRESENT,
  68. FT_EEPROM_NOT_PROGRAMMED,
  69. FT_INVALID_ARGS,
  70. FT_NOT_SUPPORTED,
  71. FT_OTHER_ERROR,
  72. FT_DEVICE_LIST_NOT_READY,
  73. };
  74. #define FT_SUCCESS(status) ((status) == FT_OK)
  75. //
  76. // FT_OpenEx Flags
  77. //
  78. #define FT_OPEN_BY_SERIAL_NUMBER 1
  79. #define FT_OPEN_BY_DESCRIPTION 2
  80. #define FT_OPEN_BY_LOCATION 4
  81. //
  82. // FT_ListDevices Flags (used in conjunction with FT_OpenEx Flags
  83. //
  84. #define FT_LIST_NUMBER_ONLY 0x80000000
  85. #define FT_LIST_BY_INDEX 0x40000000
  86. #define FT_LIST_ALL 0x20000000
  87. #define FT_LIST_MASK (FT_LIST_NUMBER_ONLY|FT_LIST_BY_INDEX|FT_LIST_ALL)
  88. //
  89. // Baud Rates
  90. //
  91. #define FT_BAUD_300 300
  92. #define FT_BAUD_600 600
  93. #define FT_BAUD_1200 1200
  94. #define FT_BAUD_2400 2400
  95. #define FT_BAUD_4800 4800
  96. #define FT_BAUD_9600 9600
  97. #define FT_BAUD_14400 14400
  98. #define FT_BAUD_19200 19200
  99. #define FT_BAUD_38400 38400
  100. #define FT_BAUD_57600 57600
  101. #define FT_BAUD_115200 115200
  102. #define FT_BAUD_230400 230400
  103. #define FT_BAUD_460800 460800
  104. #define FT_BAUD_921600 921600
  105. //
  106. // Word Lengths
  107. //
  108. #define FT_BITS_8 (UCHAR) 8
  109. #define FT_BITS_7 (UCHAR) 7
  110. #define FT_BITS_6 (UCHAR) 6
  111. #define FT_BITS_5 (UCHAR) 5
  112. //
  113. // Stop Bits
  114. //
  115. #define FT_STOP_BITS_1 (UCHAR) 0
  116. #define FT_STOP_BITS_1_5 (UCHAR) 1
  117. #define FT_STOP_BITS_2 (UCHAR) 2
  118. //
  119. // Parity
  120. //
  121. #define FT_PARITY_NONE (UCHAR) 0
  122. #define FT_PARITY_ODD (UCHAR) 1
  123. #define FT_PARITY_EVEN (UCHAR) 2
  124. #define FT_PARITY_MARK (UCHAR) 3
  125. #define FT_PARITY_SPACE (UCHAR) 4
  126. //
  127. // Flow Control
  128. //
  129. #define FT_FLOW_NONE 0x0000
  130. #define FT_FLOW_RTS_CTS 0x0100
  131. #define FT_FLOW_DTR_DSR 0x0200
  132. #define FT_FLOW_XON_XOFF 0x0400
  133. //
  134. // Purge rx and tx buffers
  135. //
  136. #define FT_PURGE_RX 1
  137. #define FT_PURGE_TX 2
  138. //
  139. // Events
  140. //
  141. typedef void (*PFT_EVENT_HANDLER)(DWORD,DWORD);
  142. #define FT_EVENT_RXCHAR 1
  143. #define FT_EVENT_MODEM_STATUS 2
  144. #define FT_EVENT_LINE_STATUS 4
  145. //
  146. // Timeouts
  147. //
  148. #define FT_DEFAULT_RX_TIMEOUT 300
  149. #define FT_DEFAULT_TX_TIMEOUT 300
  150. //
  151. // Device types
  152. //
  153. typedef ULONG FT_DEVICE;
  154. enum {
  155. FT_DEVICE_BM,
  156. FT_DEVICE_AM,
  157. FT_DEVICE_100AX,
  158. FT_DEVICE_UNKNOWN,
  159. FT_DEVICE_2232C,
  160. FT_DEVICE_232R,
  161. FT_DEVICE_2232H,
  162. FT_DEVICE_4232H,
  163. FT_DEVICE_232H
  164. };
  165. #ifdef __cplusplus
  166. extern "C" {
  167. #endif
  168. FTD2XX_API
  169. FT_STATUS WINAPI FT_Open(
  170. int deviceNumber,
  171. FT_HANDLE *pHandle
  172. );
  173. FTD2XX_API
  174. FT_STATUS WINAPI FT_OpenEx(
  175. PVOID pArg1,
  176. DWORD Flags,
  177. FT_HANDLE *pHandle
  178. );
  179. FTD2XX_API
  180. FT_STATUS WINAPI FT_ListDevices(
  181. PVOID pArg1,
  182. PVOID pArg2,
  183. DWORD Flags
  184. );
  185. FTD2XX_API
  186. FT_STATUS WINAPI FT_Close(
  187. FT_HANDLE ftHandle
  188. );
  189. FTD2XX_API
  190. FT_STATUS WINAPI FT_Read(
  191. FT_HANDLE ftHandle,
  192. LPVOID lpBuffer,
  193. DWORD dwBytesToRead,
  194. LPDWORD lpBytesReturned
  195. );
  196. FTD2XX_API
  197. FT_STATUS WINAPI FT_Write(
  198. FT_HANDLE ftHandle,
  199. LPVOID lpBuffer,
  200. DWORD dwBytesToWrite,
  201. LPDWORD lpBytesWritten
  202. );
  203. FTD2XX_API
  204. FT_STATUS WINAPI FT_IoCtl(
  205. FT_HANDLE ftHandle,
  206. DWORD dwIoControlCode,
  207. LPVOID lpInBuf,
  208. DWORD nInBufSize,
  209. LPVOID lpOutBuf,
  210. DWORD nOutBufSize,
  211. LPDWORD lpBytesReturned,
  212. LPOVERLAPPED lpOverlapped
  213. );
  214. FTD2XX_API
  215. FT_STATUS WINAPI FT_SetBaudRate(
  216. FT_HANDLE ftHandle,
  217. ULONG BaudRate
  218. );
  219. FTD2XX_API
  220. FT_STATUS WINAPI FT_SetDivisor(
  221. FT_HANDLE ftHandle,
  222. USHORT Divisor
  223. );
  224. FTD2XX_API
  225. FT_STATUS WINAPI FT_SetDataCharacteristics(
  226. FT_HANDLE ftHandle,
  227. UCHAR WordLength,
  228. UCHAR StopBits,
  229. UCHAR Parity
  230. );
  231. FTD2XX_API
  232. FT_STATUS WINAPI FT_SetFlowControl(
  233. FT_HANDLE ftHandle,
  234. USHORT FlowControl,
  235. UCHAR XonChar,
  236. UCHAR XoffChar
  237. );
  238. FTD2XX_API
  239. FT_STATUS WINAPI FT_ResetDevice(
  240. FT_HANDLE ftHandle
  241. );
  242. FTD2XX_API
  243. FT_STATUS WINAPI FT_SetDtr(
  244. FT_HANDLE ftHandle
  245. );
  246. FTD2XX_API
  247. FT_STATUS WINAPI FT_ClrDtr(
  248. FT_HANDLE ftHandle
  249. );
  250. FTD2XX_API
  251. FT_STATUS WINAPI FT_SetRts(
  252. FT_HANDLE ftHandle
  253. );
  254. FTD2XX_API
  255. FT_STATUS WINAPI FT_ClrRts(
  256. FT_HANDLE ftHandle
  257. );
  258. FTD2XX_API
  259. FT_STATUS WINAPI FT_GetModemStatus(
  260. FT_HANDLE ftHandle,
  261. ULONG *pModemStatus
  262. );
  263. FTD2XX_API
  264. FT_STATUS WINAPI FT_SetChars(
  265. FT_HANDLE ftHandle,
  266. UCHAR EventChar,
  267. UCHAR EventCharEnabled,
  268. UCHAR ErrorChar,
  269. UCHAR ErrorCharEnabled
  270. );
  271. FTD2XX_API
  272. FT_STATUS WINAPI FT_Purge(
  273. FT_HANDLE ftHandle,
  274. ULONG Mask
  275. );
  276. FTD2XX_API
  277. FT_STATUS WINAPI FT_SetTimeouts(
  278. FT_HANDLE ftHandle,
  279. ULONG ReadTimeout,
  280. ULONG WriteTimeout
  281. );
  282. FTD2XX_API
  283. FT_STATUS WINAPI FT_GetQueueStatus(
  284. FT_HANDLE ftHandle,
  285. DWORD *dwRxBytes
  286. );
  287. FTD2XX_API
  288. FT_STATUS WINAPI FT_SetEventNotification(
  289. FT_HANDLE ftHandle,
  290. DWORD Mask,
  291. PVOID Param
  292. );
  293. FTD2XX_API
  294. FT_STATUS WINAPI FT_GetStatus(
  295. FT_HANDLE ftHandle,
  296. DWORD *dwRxBytes,
  297. DWORD *dwTxBytes,
  298. DWORD *dwEventDWord
  299. );
  300. FTD2XX_API
  301. FT_STATUS WINAPI FT_SetBreakOn(
  302. FT_HANDLE ftHandle
  303. );
  304. FTD2XX_API
  305. FT_STATUS WINAPI FT_SetBreakOff(
  306. FT_HANDLE ftHandle
  307. );
  308. FTD2XX_API
  309. FT_STATUS WINAPI FT_SetWaitMask(
  310. FT_HANDLE ftHandle,
  311. DWORD Mask
  312. );
  313. FTD2XX_API
  314. FT_STATUS WINAPI FT_WaitOnMask(
  315. FT_HANDLE ftHandle,
  316. DWORD *Mask
  317. );
  318. FTD2XX_API
  319. FT_STATUS WINAPI FT_GetEventStatus(
  320. FT_HANDLE ftHandle,
  321. DWORD *dwEventDWord
  322. );
  323. FTD2XX_API
  324. FT_STATUS WINAPI FT_ReadEE(
  325. FT_HANDLE ftHandle,
  326. DWORD dwWordOffset,
  327. LPWORD lpwValue
  328. );
  329. FTD2XX_API
  330. FT_STATUS WINAPI FT_WriteEE(
  331. FT_HANDLE ftHandle,
  332. DWORD dwWordOffset,
  333. WORD wValue
  334. );
  335. FTD2XX_API
  336. FT_STATUS WINAPI FT_EraseEE(
  337. FT_HANDLE ftHandle
  338. );
  339. //
  340. // structure to hold program data for FT_Program function
  341. //
  342. typedef struct ft_program_data {
  343. DWORD Signature1; // Header - must be 0x00000000
  344. DWORD Signature2; // Header - must be 0xffffffff
  345. DWORD Version; // Header - FT_PROGRAM_DATA version
  346. // 0 = original
  347. // 1 = FT2232C extensions
  348. // 2 = FT232R extensions
  349. // 3 = FT2232H extensions
  350. // 4 = FT4232H extensions
  351. WORD VendorId; // 0x0403
  352. WORD ProductId; // 0x6001
  353. char *Manufacturer; // "FTDI"
  354. char *ManufacturerId; // "FT"
  355. char *Description; // "USB HS Serial Converter"
  356. char *SerialNumber; // "FT000001" if fixed, or NULL
  357. WORD MaxPower; // 0 < MaxPower <= 500
  358. WORD PnP; // 0 = disabled, 1 = enabled
  359. WORD SelfPowered; // 0 = bus powered, 1 = self powered
  360. WORD RemoteWakeup; // 0 = not capable, 1 = capable
  361. //
  362. // Rev4 (FT232B) extensions
  363. //
  364. UCHAR Rev4; // non-zero if Rev4 chip, zero otherwise
  365. UCHAR IsoIn; // non-zero if in endpoint is isochronous
  366. UCHAR IsoOut; // non-zero if out endpoint is isochronous
  367. UCHAR PullDownEnable; // non-zero if pull down enabled
  368. UCHAR SerNumEnable; // non-zero if serial number to be used
  369. UCHAR USBVersionEnable; // non-zero if chip uses USBVersion
  370. WORD USBVersion; // BCD (0x0200 => USB2)
  371. //
  372. // Rev 5 (FT2232) extensions
  373. //
  374. UCHAR Rev5; // non-zero if Rev5 chip, zero otherwise
  375. UCHAR IsoInA; // non-zero if in endpoint is isochronous
  376. UCHAR IsoInB; // non-zero if in endpoint is isochronous
  377. UCHAR IsoOutA; // non-zero if out endpoint is isochronous
  378. UCHAR IsoOutB; // non-zero if out endpoint is isochronous
  379. UCHAR PullDownEnable5; // non-zero if pull down enabled
  380. UCHAR SerNumEnable5; // non-zero if serial number to be used
  381. UCHAR USBVersionEnable5; // non-zero if chip uses USBVersion
  382. WORD USBVersion5; // BCD (0x0200 => USB2)
  383. UCHAR AIsHighCurrent; // non-zero if interface is high current
  384. UCHAR BIsHighCurrent; // non-zero if interface is high current
  385. UCHAR IFAIsFifo; // non-zero if interface is 245 FIFO
  386. UCHAR IFAIsFifoTar; // non-zero if interface is 245 FIFO CPU target
  387. UCHAR IFAIsFastSer; // non-zero if interface is Fast serial
  388. UCHAR AIsVCP; // non-zero if interface is to use VCP drivers
  389. UCHAR IFBIsFifo; // non-zero if interface is 245 FIFO
  390. UCHAR IFBIsFifoTar; // non-zero if interface is 245 FIFO CPU target
  391. UCHAR IFBIsFastSer; // non-zero if interface is Fast serial
  392. UCHAR BIsVCP; // non-zero if interface is to use VCP drivers
  393. //
  394. // Rev 6 (FT232R) extensions
  395. //
  396. UCHAR UseExtOsc; // Use External Oscillator
  397. UCHAR HighDriveIOs; // High Drive I/Os
  398. UCHAR EndpointSize; // Endpoint size
  399. UCHAR PullDownEnableR; // non-zero if pull down enabled
  400. UCHAR SerNumEnableR; // non-zero if serial number to be used
  401. UCHAR InvertTXD; // non-zero if invert TXD
  402. UCHAR InvertRXD; // non-zero if invert RXD
  403. UCHAR InvertRTS; // non-zero if invert RTS
  404. UCHAR InvertCTS; // non-zero if invert CTS
  405. UCHAR InvertDTR; // non-zero if invert DTR
  406. UCHAR InvertDSR; // non-zero if invert DSR
  407. UCHAR InvertDCD; // non-zero if invert DCD
  408. UCHAR InvertRI; // non-zero if invert RI
  409. UCHAR Cbus0; // Cbus Mux control
  410. UCHAR Cbus1; // Cbus Mux control
  411. UCHAR Cbus2; // Cbus Mux control
  412. UCHAR Cbus3; // Cbus Mux control
  413. UCHAR Cbus4; // Cbus Mux control
  414. UCHAR RIsD2XX; // non-zero if using D2XX driver
  415. //
  416. // Rev 7 (FT2232H) Extensions
  417. //
  418. UCHAR PullDownEnable7; // non-zero if pull down enabled
  419. UCHAR SerNumEnable7; // non-zero if serial number to be used
  420. UCHAR ALSlowSlew; // non-zero if AL pins have slow slew
  421. UCHAR ALSchmittInput; // non-zero if AL pins are Schmitt input
  422. UCHAR ALDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
  423. UCHAR AHSlowSlew; // non-zero if AH pins have slow slew
  424. UCHAR AHSchmittInput; // non-zero if AH pins are Schmitt input
  425. UCHAR AHDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
  426. UCHAR BLSlowSlew; // non-zero if BL pins have slow slew
  427. UCHAR BLSchmittInput; // non-zero if BL pins are Schmitt input
  428. UCHAR BLDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
  429. UCHAR BHSlowSlew; // non-zero if BH pins have slow slew
  430. UCHAR BHSchmittInput; // non-zero if BH pins are Schmitt input
  431. UCHAR BHDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
  432. UCHAR IFAIsFifo7; // non-zero if interface is 245 FIFO
  433. UCHAR IFAIsFifoTar7; // non-zero if interface is 245 FIFO CPU target
  434. UCHAR IFAIsFastSer7; // non-zero if interface is Fast serial
  435. UCHAR AIsVCP7; // non-zero if interface is to use VCP drivers
  436. UCHAR IFBIsFifo7; // non-zero if interface is 245 FIFO
  437. UCHAR IFBIsFifoTar7; // non-zero if interface is 245 FIFO CPU target
  438. UCHAR IFBIsFastSer7; // non-zero if interface is Fast serial
  439. UCHAR BIsVCP7; // non-zero if interface is to use VCP drivers
  440. UCHAR PowerSaveEnable; // non-zero if using BCBUS7 to save power for self-powered designs
  441. //
  442. // Rev 8 (FT4232H) Extensions
  443. //
  444. UCHAR PullDownEnable8; // non-zero if pull down enabled
  445. UCHAR SerNumEnable8; // non-zero if serial number to be used
  446. UCHAR ASlowSlew; // non-zero if AL pins have slow slew
  447. UCHAR ASchmittInput; // non-zero if AL pins are Schmitt input
  448. UCHAR ADriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
  449. UCHAR BSlowSlew; // non-zero if AH pins have slow slew
  450. UCHAR BSchmittInput; // non-zero if AH pins are Schmitt input
  451. UCHAR BDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
  452. UCHAR CSlowSlew; // non-zero if BL pins have slow slew
  453. UCHAR CSchmittInput; // non-zero if BL pins are Schmitt input
  454. UCHAR CDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
  455. UCHAR DSlowSlew; // non-zero if BH pins have slow slew
  456. UCHAR DSchmittInput; // non-zero if BH pins are Schmitt input
  457. UCHAR DDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
  458. UCHAR ARIIsTXDEN; // non-zero if port A uses RI as RS485 TXDEN
  459. UCHAR BRIIsTXDEN; // non-zero if port B uses RI as RS485 TXDEN
  460. UCHAR CRIIsTXDEN; // non-zero if port C uses RI as RS485 TXDEN
  461. UCHAR DRIIsTXDEN; // non-zero if port D uses RI as RS485 TXDEN
  462. UCHAR AIsVCP8; // non-zero if interface is to use VCP drivers
  463. UCHAR BIsVCP8; // non-zero if interface is to use VCP drivers
  464. UCHAR CIsVCP8; // non-zero if interface is to use VCP drivers
  465. UCHAR DIsVCP8; // non-zero if interface is to use VCP drivers
  466. } FT_PROGRAM_DATA, *PFT_PROGRAM_DATA;
  467. FTD2XX_API
  468. FT_STATUS WINAPI FT_EE_Program(
  469. FT_HANDLE ftHandle,
  470. PFT_PROGRAM_DATA pData
  471. );
  472. FTD2XX_API
  473. FT_STATUS WINAPI FT_EE_ProgramEx(
  474. FT_HANDLE ftHandle,
  475. PFT_PROGRAM_DATA pData,
  476. char *Manufacturer,
  477. char *ManufacturerId,
  478. char *Description,
  479. char *SerialNumber
  480. );
  481. FTD2XX_API
  482. FT_STATUS WINAPI FT_EE_Read(
  483. FT_HANDLE ftHandle,
  484. PFT_PROGRAM_DATA pData
  485. );
  486. FTD2XX_API
  487. FT_STATUS WINAPI FT_EE_ReadEx(
  488. FT_HANDLE ftHandle,
  489. PFT_PROGRAM_DATA pData,
  490. char *Manufacturer,
  491. char *ManufacturerId,
  492. char *Description,
  493. char *SerialNumber
  494. );
  495. FTD2XX_API
  496. FT_STATUS WINAPI FT_EE_UASize(
  497. FT_HANDLE ftHandle,
  498. LPDWORD lpdwSize
  499. );
  500. FTD2XX_API
  501. FT_STATUS WINAPI FT_EE_UAWrite(
  502. FT_HANDLE ftHandle,
  503. PUCHAR pucData,
  504. DWORD dwDataLen
  505. );
  506. FTD2XX_API
  507. FT_STATUS WINAPI FT_EE_UARead(
  508. FT_HANDLE ftHandle,
  509. PUCHAR pucData,
  510. DWORD dwDataLen,
  511. LPDWORD lpdwBytesRead
  512. );
  513. FTD2XX_API
  514. FT_STATUS WINAPI FT_SetLatencyTimer(
  515. FT_HANDLE ftHandle,
  516. UCHAR ucLatency
  517. );
  518. FTD2XX_API
  519. FT_STATUS WINAPI FT_GetLatencyTimer(
  520. FT_HANDLE ftHandle,
  521. PUCHAR pucLatency
  522. );
  523. FTD2XX_API
  524. FT_STATUS WINAPI FT_SetBitMode(
  525. FT_HANDLE ftHandle,
  526. UCHAR ucMask,
  527. UCHAR ucEnable
  528. );
  529. FTD2XX_API
  530. FT_STATUS WINAPI FT_GetBitMode(
  531. FT_HANDLE ftHandle,
  532. PUCHAR pucMode
  533. );
  534. FTD2XX_API
  535. FT_STATUS WINAPI FT_SetUSBParameters(
  536. FT_HANDLE ftHandle,
  537. ULONG ulInTransferSize,
  538. ULONG ulOutTransferSize
  539. );
  540. FTD2XX_API
  541. FT_STATUS WINAPI FT_SetDeadmanTimeout(
  542. FT_HANDLE ftHandle,
  543. ULONG ulDeadmanTimeout
  544. );
  545. FTD2XX_API
  546. FT_STATUS WINAPI FT_GetDeviceInfo(
  547. FT_HANDLE ftHandle,
  548. FT_DEVICE *lpftDevice,
  549. LPDWORD lpdwID,
  550. PCHAR SerialNumber,
  551. PCHAR Description,
  552. LPVOID Dummy
  553. );
  554. FTD2XX_API
  555. FT_STATUS WINAPI FT_StopInTask(
  556. FT_HANDLE ftHandle
  557. );
  558. FTD2XX_API
  559. FT_STATUS WINAPI FT_RestartInTask(
  560. FT_HANDLE ftHandle
  561. );
  562. FTD2XX_API
  563. FT_STATUS WINAPI FT_SetResetPipeRetryCount(
  564. FT_HANDLE ftHandle,
  565. DWORD dwCount
  566. );
  567. FTD2XX_API
  568. FT_STATUS WINAPI FT_ResetPort(
  569. FT_HANDLE ftHandle
  570. );
  571. FTD2XX_API
  572. FT_STATUS WINAPI FT_CyclePort(
  573. FT_HANDLE ftHandle
  574. );
  575. //
  576. // Win32-type functions
  577. //
  578. FTD2XX_API
  579. FT_HANDLE WINAPI FT_W32_CreateFile(
  580. LPCTSTR lpszName,
  581. DWORD dwAccess,
  582. DWORD dwShareMode,
  583. LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  584. DWORD dwCreate,
  585. DWORD dwAttrsAndFlags,
  586. HANDLE hTemplate
  587. );
  588. FTD2XX_API
  589. BOOL WINAPI FT_W32_CloseHandle(
  590. FT_HANDLE ftHandle
  591. );
  592. FTD2XX_API
  593. BOOL WINAPI FT_W32_ReadFile(
  594. FT_HANDLE ftHandle,
  595. LPVOID lpBuffer,
  596. DWORD nBufferSize,
  597. LPDWORD lpBytesReturned,
  598. LPOVERLAPPED lpOverlapped
  599. );
  600. FTD2XX_API
  601. BOOL WINAPI FT_W32_WriteFile(
  602. FT_HANDLE ftHandle,
  603. LPVOID lpBuffer,
  604. DWORD nBufferSize,
  605. LPDWORD lpBytesWritten,
  606. LPOVERLAPPED lpOverlapped
  607. );
  608. FTD2XX_API
  609. DWORD WINAPI FT_W32_GetLastError(
  610. FT_HANDLE ftHandle
  611. );
  612. FTD2XX_API
  613. BOOL WINAPI FT_W32_GetOverlappedResult(
  614. FT_HANDLE ftHandle,
  615. LPOVERLAPPED lpOverlapped,
  616. LPDWORD lpdwBytesTransferred,
  617. BOOL bWait
  618. );
  619. FTD2XX_API
  620. BOOL WINAPI FT_W32_CancelIo(
  621. FT_HANDLE ftHandle
  622. );
  623. //
  624. // Win32 COMM API type functions
  625. //
  626. typedef struct _FTCOMSTAT {
  627. DWORD fCtsHold : 1;
  628. DWORD fDsrHold : 1;
  629. DWORD fRlsdHold : 1;
  630. DWORD fXoffHold : 1;
  631. DWORD fXoffSent : 1;
  632. DWORD fEof : 1;
  633. DWORD fTxim : 1;
  634. DWORD fReserved : 25;
  635. DWORD cbInQue;
  636. DWORD cbOutQue;
  637. } FTCOMSTAT, *LPFTCOMSTAT;
  638. typedef struct _FTDCB {
  639. DWORD DCBlength; /* sizeof(FTDCB) */
  640. DWORD BaudRate; /* Baudrate at which running */
  641. DWORD fBinary: 1; /* Binary Mode (skip EOF check) */
  642. DWORD fParity: 1; /* Enable parity checking */
  643. DWORD fOutxCtsFlow:1; /* CTS handshaking on output */
  644. DWORD fOutxDsrFlow:1; /* DSR handshaking on output */
  645. DWORD fDtrControl:2; /* DTR Flow control */
  646. DWORD fDsrSensitivity:1; /* DSR Sensitivity */
  647. DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
  648. DWORD fOutX: 1; /* Enable output X-ON/X-OFF */
  649. DWORD fInX: 1; /* Enable input X-ON/X-OFF */
  650. DWORD fErrorChar: 1; /* Enable Err Replacement */
  651. DWORD fNull: 1; /* Enable Null stripping */
  652. DWORD fRtsControl:2; /* Rts Flow control */
  653. DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
  654. DWORD fDummy2:17; /* Reserved */
  655. WORD wReserved; /* Not currently used */
  656. WORD XonLim; /* Transmit X-ON threshold */
  657. WORD XoffLim; /* Transmit X-OFF threshold */
  658. BYTE ByteSize; /* Number of bits/byte, 4-8 */
  659. BYTE Parity; /* 0-4=None,Odd,Even,Mark,Space */
  660. BYTE StopBits; /* 0,1,2 = 1, 1.5, 2 */
  661. char XonChar; /* Tx and Rx X-ON character */
  662. char XoffChar; /* Tx and Rx X-OFF character */
  663. char ErrorChar; /* Error replacement char */
  664. char EofChar; /* End of Input character */
  665. char EvtChar; /* Received Event character */
  666. WORD wReserved1; /* Fill for now. */
  667. } FTDCB, *LPFTDCB;
  668. typedef struct _FTTIMEOUTS {
  669. DWORD ReadIntervalTimeout; /* Maximum time between read chars. */
  670. DWORD ReadTotalTimeoutMultiplier; /* Multiplier of characters. */
  671. DWORD ReadTotalTimeoutConstant; /* Constant in milliseconds. */
  672. DWORD WriteTotalTimeoutMultiplier; /* Multiplier of characters. */
  673. DWORD WriteTotalTimeoutConstant; /* Constant in milliseconds. */
  674. } FTTIMEOUTS,*LPFTTIMEOUTS;
  675. FTD2XX_API
  676. BOOL WINAPI FT_W32_ClearCommBreak(
  677. FT_HANDLE ftHandle
  678. );
  679. FTD2XX_API
  680. BOOL WINAPI FT_W32_ClearCommError(
  681. FT_HANDLE ftHandle,
  682. LPDWORD lpdwErrors,
  683. LPFTCOMSTAT lpftComstat
  684. );
  685. FTD2XX_API
  686. BOOL WINAPI FT_W32_EscapeCommFunction(
  687. FT_HANDLE ftHandle,
  688. DWORD dwFunc
  689. );
  690. FTD2XX_API
  691. BOOL WINAPI FT_W32_GetCommModemStatus(
  692. FT_HANDLE ftHandle,
  693. LPDWORD lpdwModemStatus
  694. );
  695. FTD2XX_API
  696. BOOL WINAPI FT_W32_GetCommState(
  697. FT_HANDLE ftHandle,
  698. LPFTDCB lpftDcb
  699. );
  700. FTD2XX_API
  701. BOOL WINAPI FT_W32_GetCommTimeouts(
  702. FT_HANDLE ftHandle,
  703. FTTIMEOUTS *pTimeouts
  704. );
  705. FTD2XX_API
  706. BOOL WINAPI FT_W32_PurgeComm(
  707. FT_HANDLE ftHandle,
  708. DWORD dwMask
  709. );
  710. FTD2XX_API
  711. BOOL WINAPI FT_W32_SetCommBreak(
  712. FT_HANDLE ftHandle
  713. );
  714. FTD2XX_API
  715. BOOL WINAPI FT_W32_SetCommMask(
  716. FT_HANDLE ftHandle,
  717. ULONG ulEventMask
  718. );
  719. FTD2XX_API
  720. BOOL WINAPI FT_W32_GetCommMask(
  721. FT_HANDLE ftHandle,
  722. LPDWORD lpdwEventMask
  723. );
  724. FTD2XX_API
  725. BOOL WINAPI FT_W32_SetCommState(
  726. FT_HANDLE ftHandle,
  727. LPFTDCB lpftDcb
  728. );
  729. FTD2XX_API
  730. BOOL WINAPI FT_W32_SetCommTimeouts(
  731. FT_HANDLE ftHandle,
  732. FTTIMEOUTS *pTimeouts
  733. );
  734. FTD2XX_API
  735. BOOL WINAPI FT_W32_SetupComm(
  736. FT_HANDLE ftHandle,
  737. DWORD dwReadBufferSize,
  738. DWORD dwWriteBufferSize
  739. );
  740. FTD2XX_API
  741. BOOL WINAPI FT_W32_WaitCommEvent(
  742. FT_HANDLE ftHandle,
  743. PULONG pulEvent,
  744. LPOVERLAPPED lpOverlapped
  745. );
  746. //
  747. // Device information
  748. //
  749. typedef struct _ft_device_list_info_node {
  750. ULONG Flags;
  751. ULONG Type;
  752. ULONG ID;
  753. DWORD LocId;
  754. char SerialNumber[16];
  755. char Description[64];
  756. FT_HANDLE ftHandle;
  757. } FT_DEVICE_LIST_INFO_NODE;
  758. // Device information flags
  759. enum {
  760. FT_FLAGS_OPENED = 1,
  761. FT_FLAGS_HISPEED = 2
  762. };
  763. FTD2XX_API
  764. FT_STATUS WINAPI FT_CreateDeviceInfoList(
  765. LPDWORD lpdwNumDevs
  766. );
  767. FTD2XX_API
  768. FT_STATUS WINAPI FT_GetDeviceInfoList(
  769. FT_DEVICE_LIST_INFO_NODE *pDest,
  770. LPDWORD lpdwNumDevs
  771. );
  772. FTD2XX_API
  773. FT_STATUS WINAPI FT_GetDeviceInfoDetail(
  774. DWORD dwIndex,
  775. LPDWORD lpdwFlags,
  776. LPDWORD lpdwType,
  777. LPDWORD lpdwID,
  778. LPDWORD lpdwLocId,
  779. LPVOID lpSerialNumber,
  780. LPVOID lpDescription,
  781. FT_HANDLE *pftHandle
  782. );
  783. //
  784. // Version information
  785. //
  786. FTD2XX_API
  787. FT_STATUS WINAPI FT_GetDriverVersion(
  788. FT_HANDLE ftHandle,
  789. LPDWORD lpdwVersion
  790. );
  791. FTD2XX_API
  792. FT_STATUS WINAPI FT_GetLibraryVersion(
  793. LPDWORD lpdwVersion
  794. );
  795. FTD2XX_API
  796. FT_STATUS WINAPI FT_Rescan(
  797. void
  798. );
  799. FTD2XX_API
  800. FT_STATUS WINAPI FT_Reload(
  801. WORD wVid,
  802. WORD wPid
  803. );
  804. FTD2XX_API
  805. FT_STATUS WINAPI FT_GetComPortNumber(
  806. FT_HANDLE ftHandle,
  807. LPLONG lpdwComPortNumber
  808. );
  809. #ifdef __cplusplus
  810. }
  811. #endif
  812. #endif /* FTD2XX_H */