URL
https://opencores.org/ocsvn/ft2232hcore/ft2232hcore/trunk
Subversion Repositories ft2232hcore
Compare Revisions
- This comparison shows the changes necessary to convert path
/ft2232hcore/trunk
- from Rev 1 to Rev 2
- ↔ Reverse comparison
Rev 1 → Rev 2
/pc_test_app/speed_test.vcproj
0,0 → 1,193
<?xml version="1.0" encoding="Windows-1252"?> |
<VisualStudioProject |
ProjectType="Visual C++" |
Version="7.10" |
Name="speed_test" |
SccProjectName="" |
SccLocalPath=""> |
<Platforms> |
<Platform |
Name="Win32"/> |
</Platforms> |
<Configurations> |
<Configuration |
Name="Debug|Win32" |
OutputDirectory=".\Debug" |
IntermediateDirectory=".\Debug" |
ConfigurationType="1" |
UseOfMFC="0" |
ATLMinimizesCRunTimeLibraryUsage="FALSE" |
CharacterSet="2"> |
<Tool |
Name="VCCLCompilerTool" |
Optimization="0" |
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE" |
BasicRuntimeChecks="3" |
RuntimeLibrary="5" |
UsePrecompiledHeader="2" |
PrecompiledHeaderFile=".\Debug/speed_test.pch" |
AssemblerListingLocation=".\Debug/" |
ObjectFile=".\Debug/" |
ProgramDataBaseFileName=".\Debug/" |
WarningLevel="3" |
SuppressStartupBanner="TRUE" |
DebugInformationFormat="4"/> |
<Tool |
Name="VCCustomBuildTool"/> |
<Tool |
Name="VCLinkerTool" |
OutputFile=".\Debug/speed_test.exe" |
LinkIncremental="1" |
SuppressStartupBanner="TRUE" |
GenerateDebugInformation="TRUE" |
ProgramDatabaseFile=".\Debug/speed_test.pdb" |
SubSystem="1" |
TargetMachine="1"/> |
<Tool |
Name="VCMIDLTool" |
TypeLibraryName=".\Debug/speed_test.tlb" |
HeaderFileName=""/> |
<Tool |
Name="VCPostBuildEventTool"/> |
<Tool |
Name="VCPreBuildEventTool"/> |
<Tool |
Name="VCPreLinkEventTool"/> |
<Tool |
Name="VCResourceCompilerTool" |
PreprocessorDefinitions="_DEBUG" |
Culture="3081"/> |
<Tool |
Name="VCWebServiceProxyGeneratorTool"/> |
<Tool |
Name="VCXMLDataGeneratorTool"/> |
<Tool |
Name="VCWebDeploymentTool"/> |
<Tool |
Name="VCManagedWrapperGeneratorTool"/> |
<Tool |
Name="VCAuxiliaryManagedWrapperGeneratorTool"/> |
</Configuration> |
<Configuration |
Name="Release|Win32" |
OutputDirectory=".\Release" |
IntermediateDirectory=".\Release" |
ConfigurationType="1" |
UseOfMFC="0" |
ATLMinimizesCRunTimeLibraryUsage="FALSE" |
CharacterSet="2"> |
<Tool |
Name="VCCLCompilerTool" |
Optimization="2" |
InlineFunctionExpansion="1" |
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" |
StringPooling="TRUE" |
RuntimeLibrary="4" |
EnableFunctionLevelLinking="TRUE" |
UsePrecompiledHeader="2" |
PrecompiledHeaderFile=".\Release/speed_test.pch" |
AssemblerListingLocation=".\Release/" |
ObjectFile=".\Release/" |
ProgramDataBaseFileName=".\Release/" |
WarningLevel="3" |
SuppressStartupBanner="TRUE"/> |
<Tool |
Name="VCCustomBuildTool"/> |
<Tool |
Name="VCLinkerTool" |
OutputFile=".\Release/speed_test.exe" |
LinkIncremental="1" |
SuppressStartupBanner="TRUE" |
ProgramDatabaseFile=".\Release/speed_test.pdb" |
SubSystem="1" |
TargetMachine="1"/> |
<Tool |
Name="VCMIDLTool" |
TypeLibraryName=".\Release/speed_test.tlb" |
HeaderFileName=""/> |
<Tool |
Name="VCPostBuildEventTool"/> |
<Tool |
Name="VCPreBuildEventTool"/> |
<Tool |
Name="VCPreLinkEventTool"/> |
<Tool |
Name="VCResourceCompilerTool" |
PreprocessorDefinitions="NDEBUG" |
Culture="3081"/> |
<Tool |
Name="VCWebServiceProxyGeneratorTool"/> |
<Tool |
Name="VCXMLDataGeneratorTool"/> |
<Tool |
Name="VCWebDeploymentTool"/> |
<Tool |
Name="VCManagedWrapperGeneratorTool"/> |
<Tool |
Name="VCAuxiliaryManagedWrapperGeneratorTool"/> |
</Configuration> |
</Configurations> |
<References> |
</References> |
<Files> |
<Filter |
Name="Source Files" |
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> |
<File |
RelativePath="main.cpp"> |
<FileConfiguration |
Name="Debug|Win32"> |
<Tool |
Name="VCCLCompilerTool" |
Optimization="0" |
PreprocessorDefinitions="" |
BasicRuntimeChecks="3"/> |
</FileConfiguration> |
<FileConfiguration |
Name="Release|Win32"> |
<Tool |
Name="VCCLCompilerTool" |
Optimization="2" |
PreprocessorDefinitions=""/> |
</FileConfiguration> |
</File> |
<File |
RelativePath="packet.cpp"> |
<FileConfiguration |
Name="Debug|Win32"> |
<Tool |
Name="VCCLCompilerTool" |
Optimization="0" |
PreprocessorDefinitions="" |
BasicRuntimeChecks="3"/> |
</FileConfiguration> |
<FileConfiguration |
Name="Release|Win32"> |
<Tool |
Name="VCCLCompilerTool" |
Optimization="2" |
PreprocessorDefinitions=""/> |
</FileConfiguration> |
</File> |
<File |
RelativePath="packet.h"> |
</File> |
<File |
RelativePath="protocol.h"> |
</File> |
<File |
RelativePath="types.h"> |
</File> |
</Filter> |
<Filter |
Name="Header Files" |
Filter="h;hpp;hxx;hm;inl"> |
</Filter> |
<Filter |
Name="Resource Files" |
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> |
</Filter> |
</Files> |
<Globals> |
</Globals> |
</VisualStudioProject> |
/pc_test_app/ftd2xx.lib
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
pc_test_app/ftd2xx.lib
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: pc_test_app/speed_test.dsp
===================================================================
--- pc_test_app/speed_test.dsp (nonexistent)
+++ pc_test_app/speed_test.dsp (revision 2)
@@ -0,0 +1,116 @@
+# Microsoft Developer Studio Project File - Name="speed_test" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=speed_test - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "speed_test.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "speed_test.mak" CFG="speed_test - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "speed_test - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "speed_test - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "speed_test - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0xc09 /d "NDEBUG"
+# ADD RSC /l 0xc09 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "speed_test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0xc09 /d "_DEBUG"
+# ADD RSC /l 0xc09 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "speed_test - Win32 Release"
+# Name "speed_test - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\packet.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\packet.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\protocol.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\types.h
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
Index: pc_test_app/speed_test.suo
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: pc_test_app/speed_test.suo
===================================================================
--- pc_test_app/speed_test.suo (nonexistent)
+++ pc_test_app/speed_test.suo (revision 2)
pc_test_app/speed_test.suo
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: pc_test_app/ftd2xx.h
===================================================================
--- pc_test_app/ftd2xx.h (nonexistent)
+++ pc_test_app/ftd2xx.h (revision 2)
@@ -0,0 +1,963 @@
+/*++
+
+Copyright (c) 2001-2007 Future Technology Devices International Ltd.
+
+Module Name:
+
+ ftd2xx.h
+
+Abstract:
+
+ Native USB device driver for FTDI FT8U232/245
+ FTD2XX library definitions
+
+Environment:
+
+ kernel & user mode
+
+Revision History:
+
+ 13/03/01 awm Created.
+ 13/01/03 awm Added device information support.
+ 19/03/03 awm Added FT_W32_CancelIo.
+ 12/06/03 awm Added FT_StopInTask and FT_RestartInTask.
+ 18/09/03 awm Added FT_SetResetPipeRetryCount.
+ 10/10/03 awm Added FT_ResetPort.
+ 23/01/04 awm Added support for open-by-location.
+ 16/03/04 awm Added support for FT2232C.
+ 23/09/04 awm Added support for FT232R.
+ 20/10/04 awm Added FT_CyclePort.
+ 18/01/05 awm Added FT_DEVICE_LIST_INFO_NODE type.
+ 11/02/05 awm Added LocId to FT_DEVICE_LIST_INFO_NODE.
+ 25/08/05 awm Added FT_SetDeadmanTimeout.
+ 02/12/05 awm Removed obsolete references.
+ 05/12/05 awm Added FT_GetVersion, FT_GetVersionEx.
+ 08/09/06 awm Added FT_W32_GetCommMask.
+ 11/09/06 awm Added FT_Rescan.
+ 11/07/07 awm Added support for FT2232H and FT4232H.
+ 10/08/07 awm Added flags definitions.
+ 21/11/07 mja Added FT_GetComPortNumber.
+ 05/06/08 mja Added EEPROM extensions for FT2232H.
+
+
+--*/
+
+
+#ifndef FTD2XX_H
+#define FTD2XX_H
+
+// The following ifdef block is the standard way of creating macros
+// which make exporting from a DLL simpler. All files within this DLL
+// are compiled with the FTD2XX_EXPORTS symbol defined on the command line.
+// This symbol should not be defined on any project that uses this DLL.
+// This way any other project whose source files include this file see
+// FTD2XX_API functions as being imported from a DLL, whereas this DLL
+// sees symbols defined with this macro as being exported.
+
+#ifdef FTD2XX_EXPORTS
+#define FTD2XX_API __declspec(dllexport)
+#else
+#define FTD2XX_API __declspec(dllimport)
+#endif
+
+
+typedef PVOID FT_HANDLE;
+typedef ULONG FT_STATUS;
+
+//
+// Device status
+//
+enum {
+ FT_OK,
+ FT_INVALID_HANDLE,
+ FT_DEVICE_NOT_FOUND,
+ FT_DEVICE_NOT_OPENED,
+ FT_IO_ERROR,
+ FT_INSUFFICIENT_RESOURCES,
+ FT_INVALID_PARAMETER,
+ FT_INVALID_BAUD_RATE,
+
+ FT_DEVICE_NOT_OPENED_FOR_ERASE,
+ FT_DEVICE_NOT_OPENED_FOR_WRITE,
+ FT_FAILED_TO_WRITE_DEVICE,
+ FT_EEPROM_READ_FAILED,
+ FT_EEPROM_WRITE_FAILED,
+ FT_EEPROM_ERASE_FAILED,
+ FT_EEPROM_NOT_PRESENT,
+ FT_EEPROM_NOT_PROGRAMMED,
+ FT_INVALID_ARGS,
+ FT_NOT_SUPPORTED,
+ FT_OTHER_ERROR,
+ FT_DEVICE_LIST_NOT_READY,
+};
+
+
+#define FT_SUCCESS(status) ((status) == FT_OK)
+
+//
+// FT_OpenEx Flags
+//
+
+#define FT_OPEN_BY_SERIAL_NUMBER 1
+#define FT_OPEN_BY_DESCRIPTION 2
+#define FT_OPEN_BY_LOCATION 4
+
+//
+// FT_ListDevices Flags (used in conjunction with FT_OpenEx Flags
+//
+
+#define FT_LIST_NUMBER_ONLY 0x80000000
+#define FT_LIST_BY_INDEX 0x40000000
+#define FT_LIST_ALL 0x20000000
+
+#define FT_LIST_MASK (FT_LIST_NUMBER_ONLY|FT_LIST_BY_INDEX|FT_LIST_ALL)
+
+//
+// Baud Rates
+//
+
+#define FT_BAUD_300 300
+#define FT_BAUD_600 600
+#define FT_BAUD_1200 1200
+#define FT_BAUD_2400 2400
+#define FT_BAUD_4800 4800
+#define FT_BAUD_9600 9600
+#define FT_BAUD_14400 14400
+#define FT_BAUD_19200 19200
+#define FT_BAUD_38400 38400
+#define FT_BAUD_57600 57600
+#define FT_BAUD_115200 115200
+#define FT_BAUD_230400 230400
+#define FT_BAUD_460800 460800
+#define FT_BAUD_921600 921600
+
+//
+// Word Lengths
+//
+
+#define FT_BITS_8 (UCHAR) 8
+#define FT_BITS_7 (UCHAR) 7
+#define FT_BITS_6 (UCHAR) 6
+#define FT_BITS_5 (UCHAR) 5
+
+//
+// Stop Bits
+//
+
+#define FT_STOP_BITS_1 (UCHAR) 0
+#define FT_STOP_BITS_1_5 (UCHAR) 1
+#define FT_STOP_BITS_2 (UCHAR) 2
+
+//
+// Parity
+//
+
+#define FT_PARITY_NONE (UCHAR) 0
+#define FT_PARITY_ODD (UCHAR) 1
+#define FT_PARITY_EVEN (UCHAR) 2
+#define FT_PARITY_MARK (UCHAR) 3
+#define FT_PARITY_SPACE (UCHAR) 4
+
+//
+// Flow Control
+//
+
+#define FT_FLOW_NONE 0x0000
+#define FT_FLOW_RTS_CTS 0x0100
+#define FT_FLOW_DTR_DSR 0x0200
+#define FT_FLOW_XON_XOFF 0x0400
+
+//
+// Purge rx and tx buffers
+//
+#define FT_PURGE_RX 1
+#define FT_PURGE_TX 2
+
+//
+// Events
+//
+
+typedef void (*PFT_EVENT_HANDLER)(DWORD,DWORD);
+
+#define FT_EVENT_RXCHAR 1
+#define FT_EVENT_MODEM_STATUS 2
+#define FT_EVENT_LINE_STATUS 4
+
+//
+// Timeouts
+//
+
+#define FT_DEFAULT_RX_TIMEOUT 300
+#define FT_DEFAULT_TX_TIMEOUT 300
+
+//
+// Device types
+//
+
+typedef ULONG FT_DEVICE;
+
+enum {
+ FT_DEVICE_BM,
+ FT_DEVICE_AM,
+ FT_DEVICE_100AX,
+ FT_DEVICE_UNKNOWN,
+ FT_DEVICE_2232C,
+ FT_DEVICE_232R,
+ FT_DEVICE_2232H,
+ FT_DEVICE_4232H
+};
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+FTD2XX_API
+FT_STATUS WINAPI FT_Open(
+ int deviceNumber,
+ FT_HANDLE *pHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_OpenEx(
+ PVOID pArg1,
+ DWORD Flags,
+ FT_HANDLE *pHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_ListDevices(
+ PVOID pArg1,
+ PVOID pArg2,
+ DWORD Flags
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_Close(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_Read(
+ FT_HANDLE ftHandle,
+ LPVOID lpBuffer,
+ DWORD dwBytesToRead,
+ LPDWORD lpBytesReturned
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_Write(
+ FT_HANDLE ftHandle,
+ LPVOID lpBuffer,
+ DWORD dwBytesToWrite,
+ LPDWORD lpBytesWritten
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_IoCtl(
+ FT_HANDLE ftHandle,
+ DWORD dwIoControlCode,
+ LPVOID lpInBuf,
+ DWORD nInBufSize,
+ LPVOID lpOutBuf,
+ DWORD nOutBufSize,
+ LPDWORD lpBytesReturned,
+ LPOVERLAPPED lpOverlapped
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetBaudRate(
+ FT_HANDLE ftHandle,
+ ULONG BaudRate
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetDivisor(
+ FT_HANDLE ftHandle,
+ USHORT Divisor
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetDataCharacteristics(
+ FT_HANDLE ftHandle,
+ UCHAR WordLength,
+ UCHAR StopBits,
+ UCHAR Parity
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetFlowControl(
+ FT_HANDLE ftHandle,
+ USHORT FlowControl,
+ UCHAR XonChar,
+ UCHAR XoffChar
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_ResetDevice(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetDtr(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_ClrDtr(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetRts(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_ClrRts(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetModemStatus(
+ FT_HANDLE ftHandle,
+ ULONG *pModemStatus
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetChars(
+ FT_HANDLE ftHandle,
+ UCHAR EventChar,
+ UCHAR EventCharEnabled,
+ UCHAR ErrorChar,
+ UCHAR ErrorCharEnabled
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_Purge(
+ FT_HANDLE ftHandle,
+ ULONG Mask
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetTimeouts(
+ FT_HANDLE ftHandle,
+ ULONG ReadTimeout,
+ ULONG WriteTimeout
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetQueueStatus(
+ FT_HANDLE ftHandle,
+ DWORD *dwRxBytes
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetEventNotification(
+ FT_HANDLE ftHandle,
+ DWORD Mask,
+ PVOID Param
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetStatus(
+ FT_HANDLE ftHandle,
+ DWORD *dwRxBytes,
+ DWORD *dwTxBytes,
+ DWORD *dwEventDWord
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetBreakOn(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetBreakOff(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetWaitMask(
+ FT_HANDLE ftHandle,
+ DWORD Mask
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_WaitOnMask(
+ FT_HANDLE ftHandle,
+ DWORD *Mask
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetEventStatus(
+ FT_HANDLE ftHandle,
+ DWORD *dwEventDWord
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_ReadEE(
+ FT_HANDLE ftHandle,
+ DWORD dwWordOffset,
+ LPWORD lpwValue
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_WriteEE(
+ FT_HANDLE ftHandle,
+ DWORD dwWordOffset,
+ WORD wValue
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_EraseEE(
+ FT_HANDLE ftHandle
+ );
+
+//
+// structure to hold program data for FT_Program function
+//
+typedef struct ft_program_data {
+
+ DWORD Signature1; // Header - must be 0x00000000
+ DWORD Signature2; // Header - must be 0xffffffff
+ DWORD Version; // Header - FT_PROGRAM_DATA version
+ // 0 = original
+ // 1 = FT2232C extensions
+ // 2 = FT232R extensions
+ // 3 = FT2232H extensions
+ // 4 = FT4232H extensions
+
+ WORD VendorId; // 0x0403
+ WORD ProductId; // 0x6001
+ char *Manufacturer; // "FTDI"
+ char *ManufacturerId; // "FT"
+ char *Description; // "USB HS Serial Converter"
+ char *SerialNumber; // "FT000001" if fixed, or NULL
+ WORD MaxPower; // 0 < MaxPower <= 500
+ WORD PnP; // 0 = disabled, 1 = enabled
+ WORD SelfPowered; // 0 = bus powered, 1 = self powered
+ WORD RemoteWakeup; // 0 = not capable, 1 = capable
+ //
+ // Rev4 (FT232B) extensions
+ //
+ UCHAR Rev4; // non-zero if Rev4 chip, zero otherwise
+ UCHAR IsoIn; // non-zero if in endpoint is isochronous
+ UCHAR IsoOut; // non-zero if out endpoint is isochronous
+ UCHAR PullDownEnable; // non-zero if pull down enabled
+ UCHAR SerNumEnable; // non-zero if serial number to be used
+ UCHAR USBVersionEnable; // non-zero if chip uses USBVersion
+ WORD USBVersion; // BCD (0x0200 => USB2)
+ //
+ // Rev 5 (FT2232) extensions
+ //
+ UCHAR Rev5; // non-zero if Rev5 chip, zero otherwise
+ UCHAR IsoInA; // non-zero if in endpoint is isochronous
+ UCHAR IsoInB; // non-zero if in endpoint is isochronous
+ UCHAR IsoOutA; // non-zero if out endpoint is isochronous
+ UCHAR IsoOutB; // non-zero if out endpoint is isochronous
+ UCHAR PullDownEnable5; // non-zero if pull down enabled
+ UCHAR SerNumEnable5; // non-zero if serial number to be used
+ UCHAR USBVersionEnable5; // non-zero if chip uses USBVersion
+ WORD USBVersion5; // BCD (0x0200 => USB2)
+ UCHAR AIsHighCurrent; // non-zero if interface is high current
+ UCHAR BIsHighCurrent; // non-zero if interface is high current
+ UCHAR IFAIsFifo; // non-zero if interface is 245 FIFO
+ UCHAR IFAIsFifoTar; // non-zero if interface is 245 FIFO CPU target
+ UCHAR IFAIsFastSer; // non-zero if interface is Fast serial
+ UCHAR AIsVCP; // non-zero if interface is to use VCP drivers
+ UCHAR IFBIsFifo; // non-zero if interface is 245 FIFO
+ UCHAR IFBIsFifoTar; // non-zero if interface is 245 FIFO CPU target
+ UCHAR IFBIsFastSer; // non-zero if interface is Fast serial
+ UCHAR BIsVCP; // non-zero if interface is to use VCP drivers
+ //
+ // Rev 6 (FT232R) extensions
+ //
+ UCHAR UseExtOsc; // Use External Oscillator
+ UCHAR HighDriveIOs; // High Drive I/Os
+ UCHAR EndpointSize; // Endpoint size
+ UCHAR PullDownEnableR; // non-zero if pull down enabled
+ UCHAR SerNumEnableR; // non-zero if serial number to be used
+ UCHAR InvertTXD; // non-zero if invert TXD
+ UCHAR InvertRXD; // non-zero if invert RXD
+ UCHAR InvertRTS; // non-zero if invert RTS
+ UCHAR InvertCTS; // non-zero if invert CTS
+ UCHAR InvertDTR; // non-zero if invert DTR
+ UCHAR InvertDSR; // non-zero if invert DSR
+ UCHAR InvertDCD; // non-zero if invert DCD
+ UCHAR InvertRI; // non-zero if invert RI
+ UCHAR Cbus0; // Cbus Mux control
+ UCHAR Cbus1; // Cbus Mux control
+ UCHAR Cbus2; // Cbus Mux control
+ UCHAR Cbus3; // Cbus Mux control
+ UCHAR Cbus4; // Cbus Mux control
+ UCHAR RIsD2XX; // non-zero if using D2XX driver
+ //
+ // Rev 7 (FT2232H) Extensions
+ //
+ UCHAR PullDownEnable7; // non-zero if pull down enabled
+ UCHAR SerNumEnable7; // non-zero if serial number to be used
+ UCHAR ALSlowSlew; // non-zero if AL pins have slow slew
+ UCHAR ALSchmittInput; // non-zero if AL pins are Schmitt input
+ UCHAR ALDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
+ UCHAR AHSlowSlew; // non-zero if AH pins have slow slew
+ UCHAR AHSchmittInput; // non-zero if AH pins are Schmitt input
+ UCHAR AHDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
+ UCHAR BLSlowSlew; // non-zero if BL pins have slow slew
+ UCHAR BLSchmittInput; // non-zero if BL pins are Schmitt input
+ UCHAR BLDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
+ UCHAR BHSlowSlew; // non-zero if BH pins have slow slew
+ UCHAR BHSchmittInput; // non-zero if BH pins are Schmitt input
+ UCHAR BHDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
+ UCHAR IFAIsFifo7; // non-zero if interface is 245 FIFO
+ UCHAR IFAIsFifoTar7; // non-zero if interface is 245 FIFO CPU target
+ UCHAR IFAIsFastSer7; // non-zero if interface is Fast serial
+ UCHAR AIsVCP7; // non-zero if interface is to use VCP drivers
+ UCHAR IFBIsFifo7; // non-zero if interface is 245 FIFO
+ UCHAR IFBIsFifoTar7; // non-zero if interface is 245 FIFO CPU target
+ UCHAR IFBIsFastSer7; // non-zero if interface is Fast serial
+ UCHAR BIsVCP7; // non-zero if interface is to use VCP drivers
+ UCHAR PowerSaveEnable; // non-zero if using BCBUS7 to save power for self-powered designs
+ //
+ // Rev 8 (FT4232H) Extensions
+ //
+ UCHAR PullDownEnable8; // non-zero if pull down enabled
+ UCHAR SerNumEnable8; // non-zero if serial number to be used
+ UCHAR ASlowSlew; // non-zero if AL pins have slow slew
+ UCHAR ASchmittInput; // non-zero if AL pins are Schmitt input
+ UCHAR ADriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
+ UCHAR BSlowSlew; // non-zero if AH pins have slow slew
+ UCHAR BSchmittInput; // non-zero if AH pins are Schmitt input
+ UCHAR BDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
+ UCHAR CSlowSlew; // non-zero if BL pins have slow slew
+ UCHAR CSchmittInput; // non-zero if BL pins are Schmitt input
+ UCHAR CDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
+ UCHAR DSlowSlew; // non-zero if BH pins have slow slew
+ UCHAR DSchmittInput; // non-zero if BH pins are Schmitt input
+ UCHAR DDriveCurrent; // valid values are 4mA, 8mA, 12mA, 16mA
+ UCHAR ARIIsTXDEN; // non-zero if port A uses RI as RS485 TXDEN
+ UCHAR BRIIsTXDEN; // non-zero if port B uses RI as RS485 TXDEN
+ UCHAR CRIIsTXDEN; // non-zero if port C uses RI as RS485 TXDEN
+ UCHAR DRIIsTXDEN; // non-zero if port D uses RI as RS485 TXDEN
+ UCHAR AIsVCP8; // non-zero if interface is to use VCP drivers
+ UCHAR BIsVCP8; // non-zero if interface is to use VCP drivers
+ UCHAR CIsVCP8; // non-zero if interface is to use VCP drivers
+ UCHAR DIsVCP8; // non-zero if interface is to use VCP drivers
+
+} FT_PROGRAM_DATA, *PFT_PROGRAM_DATA;
+
+FTD2XX_API
+FT_STATUS WINAPI FT_EE_Program(
+ FT_HANDLE ftHandle,
+ PFT_PROGRAM_DATA pData
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_EE_ProgramEx(
+ FT_HANDLE ftHandle,
+ PFT_PROGRAM_DATA pData,
+ char *Manufacturer,
+ char *ManufacturerId,
+ char *Description,
+ char *SerialNumber
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_EE_Read(
+ FT_HANDLE ftHandle,
+ PFT_PROGRAM_DATA pData
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_EE_ReadEx(
+ FT_HANDLE ftHandle,
+ PFT_PROGRAM_DATA pData,
+ char *Manufacturer,
+ char *ManufacturerId,
+ char *Description,
+ char *SerialNumber
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_EE_UASize(
+ FT_HANDLE ftHandle,
+ LPDWORD lpdwSize
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_EE_UAWrite(
+ FT_HANDLE ftHandle,
+ PUCHAR pucData,
+ DWORD dwDataLen
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_EE_UARead(
+ FT_HANDLE ftHandle,
+ PUCHAR pucData,
+ DWORD dwDataLen,
+ LPDWORD lpdwBytesRead
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetLatencyTimer(
+ FT_HANDLE ftHandle,
+ UCHAR ucLatency
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetLatencyTimer(
+ FT_HANDLE ftHandle,
+ PUCHAR pucLatency
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetBitMode(
+ FT_HANDLE ftHandle,
+ UCHAR ucMask,
+ UCHAR ucEnable
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetBitMode(
+ FT_HANDLE ftHandle,
+ PUCHAR pucMode
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetUSBParameters(
+ FT_HANDLE ftHandle,
+ ULONG ulInTransferSize,
+ ULONG ulOutTransferSize
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetDeadmanTimeout(
+ FT_HANDLE ftHandle,
+ ULONG ulDeadmanTimeout
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetDeviceInfo(
+ FT_HANDLE ftHandle,
+ FT_DEVICE *lpftDevice,
+ LPDWORD lpdwID,
+ PCHAR SerialNumber,
+ PCHAR Description,
+ LPVOID Dummy
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_StopInTask(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_RestartInTask(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_SetResetPipeRetryCount(
+ FT_HANDLE ftHandle,
+ DWORD dwCount
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_ResetPort(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_CyclePort(
+ FT_HANDLE ftHandle
+ );
+
+
+//
+// Win32-type functions
+//
+
+FTD2XX_API
+FT_HANDLE WINAPI FT_W32_CreateFile(
+ LPCTSTR lpszName,
+ DWORD dwAccess,
+ DWORD dwShareMode,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ DWORD dwCreate,
+ DWORD dwAttrsAndFlags,
+ HANDLE hTemplate
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_CloseHandle(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_ReadFile(
+ FT_HANDLE ftHandle,
+ LPVOID lpBuffer,
+ DWORD nBufferSize,
+ LPDWORD lpBytesReturned,
+ LPOVERLAPPED lpOverlapped
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_WriteFile(
+ FT_HANDLE ftHandle,
+ LPVOID lpBuffer,
+ DWORD nBufferSize,
+ LPDWORD lpBytesWritten,
+ LPOVERLAPPED lpOverlapped
+ );
+
+FTD2XX_API
+DWORD WINAPI FT_W32_GetLastError(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_GetOverlappedResult(
+ FT_HANDLE ftHandle,
+ LPOVERLAPPED lpOverlapped,
+ LPDWORD lpdwBytesTransferred,
+ BOOL bWait
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_CancelIo(
+ FT_HANDLE ftHandle
+ );
+
+
+//
+// Win32 COMM API type functions
+//
+typedef struct _FTCOMSTAT {
+ DWORD fCtsHold : 1;
+ DWORD fDsrHold : 1;
+ DWORD fRlsdHold : 1;
+ DWORD fXoffHold : 1;
+ DWORD fXoffSent : 1;
+ DWORD fEof : 1;
+ DWORD fTxim : 1;
+ DWORD fReserved : 25;
+ DWORD cbInQue;
+ DWORD cbOutQue;
+} FTCOMSTAT, *LPFTCOMSTAT;
+
+typedef struct _FTDCB {
+ DWORD DCBlength; /* sizeof(FTDCB) */
+ DWORD BaudRate; /* Baudrate at which running */
+ DWORD fBinary: 1; /* Binary Mode (skip EOF check) */
+ DWORD fParity: 1; /* Enable parity checking */
+ DWORD fOutxCtsFlow:1; /* CTS handshaking on output */
+ DWORD fOutxDsrFlow:1; /* DSR handshaking on output */
+ DWORD fDtrControl:2; /* DTR Flow control */
+ DWORD fDsrSensitivity:1; /* DSR Sensitivity */
+ DWORD fTXContinueOnXoff: 1; /* Continue TX when Xoff sent */
+ DWORD fOutX: 1; /* Enable output X-ON/X-OFF */
+ DWORD fInX: 1; /* Enable input X-ON/X-OFF */
+ DWORD fErrorChar: 1; /* Enable Err Replacement */
+ DWORD fNull: 1; /* Enable Null stripping */
+ DWORD fRtsControl:2; /* Rts Flow control */
+ DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
+ DWORD fDummy2:17; /* Reserved */
+ WORD wReserved; /* Not currently used */
+ WORD XonLim; /* Transmit X-ON threshold */
+ WORD XoffLim; /* Transmit X-OFF threshold */
+ BYTE ByteSize; /* Number of bits/byte, 4-8 */
+ BYTE Parity; /* 0-4=None,Odd,Even,Mark,Space */
+ BYTE StopBits; /* 0,1,2 = 1, 1.5, 2 */
+ char XonChar; /* Tx and Rx X-ON character */
+ char XoffChar; /* Tx and Rx X-OFF character */
+ char ErrorChar; /* Error replacement char */
+ char EofChar; /* End of Input character */
+ char EvtChar; /* Received Event character */
+ WORD wReserved1; /* Fill for now. */
+} FTDCB, *LPFTDCB;
+
+typedef struct _FTTIMEOUTS {
+ DWORD ReadIntervalTimeout; /* Maximum time between read chars. */
+ DWORD ReadTotalTimeoutMultiplier; /* Multiplier of characters. */
+ DWORD ReadTotalTimeoutConstant; /* Constant in milliseconds. */
+ DWORD WriteTotalTimeoutMultiplier; /* Multiplier of characters. */
+ DWORD WriteTotalTimeoutConstant; /* Constant in milliseconds. */
+} FTTIMEOUTS,*LPFTTIMEOUTS;
+
+
+FTD2XX_API
+BOOL WINAPI FT_W32_ClearCommBreak(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_ClearCommError(
+ FT_HANDLE ftHandle,
+ LPDWORD lpdwErrors,
+ LPFTCOMSTAT lpftComstat
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_EscapeCommFunction(
+ FT_HANDLE ftHandle,
+ DWORD dwFunc
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_GetCommModemStatus(
+ FT_HANDLE ftHandle,
+ LPDWORD lpdwModemStatus
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_GetCommState(
+ FT_HANDLE ftHandle,
+ LPFTDCB lpftDcb
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_GetCommTimeouts(
+ FT_HANDLE ftHandle,
+ FTTIMEOUTS *pTimeouts
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_PurgeComm(
+ FT_HANDLE ftHandle,
+ DWORD dwMask
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_SetCommBreak(
+ FT_HANDLE ftHandle
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_SetCommMask(
+ FT_HANDLE ftHandle,
+ ULONG ulEventMask
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_GetCommMask(
+ FT_HANDLE ftHandle,
+ LPDWORD lpdwEventMask
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_SetCommState(
+ FT_HANDLE ftHandle,
+ LPFTDCB lpftDcb
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_SetCommTimeouts(
+ FT_HANDLE ftHandle,
+ FTTIMEOUTS *pTimeouts
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_SetupComm(
+ FT_HANDLE ftHandle,
+ DWORD dwReadBufferSize,
+ DWORD dwWriteBufferSize
+ );
+
+FTD2XX_API
+BOOL WINAPI FT_W32_WaitCommEvent(
+ FT_HANDLE ftHandle,
+ PULONG pulEvent,
+ LPOVERLAPPED lpOverlapped
+ );
+
+
+//
+// Device information
+//
+
+typedef struct _ft_device_list_info_node {
+ ULONG Flags;
+ ULONG Type;
+ ULONG ID;
+ DWORD LocId;
+ char SerialNumber[16];
+ char Description[64];
+ FT_HANDLE ftHandle;
+} FT_DEVICE_LIST_INFO_NODE;
+
+// Device information flags
+enum {
+ FT_FLAGS_OPENED = 1,
+ FT_FLAGS_HISPEED = 2
+};
+
+
+FTD2XX_API
+FT_STATUS WINAPI FT_CreateDeviceInfoList(
+ LPDWORD lpdwNumDevs
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetDeviceInfoList(
+ FT_DEVICE_LIST_INFO_NODE *pDest,
+ LPDWORD lpdwNumDevs
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetDeviceInfoDetail(
+ DWORD dwIndex,
+ LPDWORD lpdwFlags,
+ LPDWORD lpdwType,
+ LPDWORD lpdwID,
+ LPDWORD lpdwLocId,
+ LPVOID lpSerialNumber,
+ LPVOID lpDescription,
+ FT_HANDLE *pftHandle
+ );
+
+
+//
+// Version information
+//
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetDriverVersion(
+ FT_HANDLE ftHandle,
+ LPDWORD lpdwVersion
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetLibraryVersion(
+ LPDWORD lpdwVersion
+ );
+
+
+FTD2XX_API
+FT_STATUS WINAPI FT_Rescan(
+ void
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_Reload(
+ WORD wVid,
+ WORD wPid
+ );
+
+FTD2XX_API
+FT_STATUS WINAPI FT_GetComPortNumber(
+ FT_HANDLE ftHandle,
+ LPLONG lpdwComPortNumber
+ );
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* FTD2XX_H */
+
Index: pc_test_app/main.cpp
===================================================================
--- pc_test_app/main.cpp (nonexistent)
+++ pc_test_app/main.cpp (revision 2)
@@ -0,0 +1,88 @@
+
+#include
+#include
+#include
+
+#include "ftd2xx.h"
+#include "types.h"
+
+
+#pragma comment(lib, "ftd2xx.lib")
+
+
+int main(void)
+{
+ FT_HANDLE ftHandle;
+
+ FT_STATUS ftStatus = FT_Open (0, &ftHandle);
+
+ if (!FT_SUCCESS(ftStatus))
+ {
+ printf("Unable to open USB device\n");
+ return 0;
+ }
+
+ FT_Purge(ftHandle, FT_PURGE_RX | FT_PURGE_TX);
+ FT_SetBitMode(ftHandle, 0, 0x40); // Single Channel Synchronous 245 FIFO Mode
+ FT_SetUSBParameters(ftHandle, 32768, 4096);
+ FT_SetResetPipeRetryCount(ftHandle, 100);
+ FT_SetFlowControl(ftHandle, FT_FLOW_RTS_CTS, 0, 0); //Required to avoid data loss, see appnote "an_130_ft2232h_used_in_ft245 synchronous fifo mode.pdf"
+ FT_SetTimeouts(ftHandle, 500, 0);
+
+ unsigned long start = GetTickCount();
+ unsigned long last = start;
+ unsigned char buffer[4096];
+ int filesize = 0;
+ int errors = 0;
+ unsigned char sequence = 0;
+ bool initialised = false;
+
+
+ while(true)
+ {
+ DWORD BytesRead = 0;
+
+ if (FT_Read (ftHandle, buffer, sizeof(buffer), &BytesRead) != FT_OK)
+ break;
+
+ for (uint32_t i = 0; i < BytesRead; i++)
+ {
+ uint8_t c = buffer[i];
+
+ sequence++;
+
+ if (!initialised)
+ {
+ sequence = c;
+ initialised = true;
+ }
+
+ if (c != sequence)
+ {
+ errors++;
+ sequence = c;
+ }
+ }
+
+ filesize += BytesRead;
+
+ unsigned long current = GetTickCount();
+
+ if (current - last >= 500)
+ {
+ double kbsec = (double) ((double) filesize / 1000) / ((double) (current - start) / 1000);
+ int timepassed = (current - start) / 1000;
+
+ printf("Sec:%d Errors: %d Size:%dKb Rate:%.1fKb/s \r", timepassed, errors, filesize/1000, kbsec);
+ fflush(stdout);
+
+ last = current;
+ }
+ }
+
+ FT_SetBitMode(ftHandle, 0, 0);
+
+ FT_Close(ftHandle);
+
+ return 0;
+}
Index: pc_test_app/speed_test.sln
===================================================================
--- pc_test_app/speed_test.sln (nonexistent)
+++ pc_test_app/speed_test.sln (revision 2)
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 8.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "speed_test", "speed_test.vcproj", "{C078F8F1-7060-4B88-A3E5-2858690D5F29}"
+ ProjectSection(ProjectDependencies) = postProject
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ Debug = Debug
+ Release = Release
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {C078F8F1-7060-4B88-A3E5-2858690D5F29}.Debug.ActiveCfg = Debug|Win32
+ {C078F8F1-7060-4B88-A3E5-2858690D5F29}.Debug.Build.0 = Debug|Win32
+ {C078F8F1-7060-4B88-A3E5-2858690D5F29}.Release.ActiveCfg = Release|Win32
+ {C078F8F1-7060-4B88-A3E5-2858690D5F29}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
Index: pc_test_app/types.h
===================================================================
--- pc_test_app/types.h (nonexistent)
+++ pc_test_app/types.h (revision 2)
@@ -0,0 +1,11 @@
+#ifndef __TYPES_H__
+#define __TYPES_H__
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+
+typedef signed short int16_t;
+typedef signed int int32_t;
+
+#endif /*_TYPES_H*/
Index: pc_test_app/speed_test.dsw
===================================================================
--- pc_test_app/speed_test.dsw (nonexistent)
+++ pc_test_app/speed_test.dsw (revision 2)
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "speed_test"=.\speed_test.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
Index: nios_test_app/main.cpp
===================================================================
--- nios_test_app/main.cpp (nonexistent)
+++ nios_test_app/main.cpp (revision 2)
@@ -0,0 +1,56 @@
+
+#include
+#include
+
+#include "hardware/usb_sync/usb_sync.h"
+
+
+
+int main(void)
+{
+ printf("Started...\n");
+
+
+ // Setup tx buffer with our sequence
+ uint8_t buffer[1024];
+
+ for (uint32_t i = 0; i < sizeof(buffer); i++)
+ buffer[i] = (uint8_t) (i & 0xFF);
+
+
+ int errors = 0;
+ unsigned char sequence = 0;
+ unsigned char tx_byte = 0;
+ bool initialised = false;
+
+ while (true)
+ {
+ // Check the driver's RX FIFO
+ if (usb_kbhit())
+ {
+ uint8_t c = usb_getch();
+
+ sequence++;
+
+ if (!initialised)
+ {
+ sequence = c;
+ initialised = true;
+ }
+
+ if (c != sequence)
+ {
+ errors++;
+ printf("Sequence errors: %d\n", errors);
+ sequence = c;
+ }
+ }
+
+ // Fill the driver's TX FIFO
+ while (USB_TX_FREE >= (uint32_t) sizeof(buffer))
+ for (uint32_t i = 0; i < (uint32_t) sizeof(buffer); i++)
+ USB_DATA_WR(tx_byte++);
+ }
+
+ return 0;
+}
Index: nios_test_app/types.h
===================================================================
--- nios_test_app/types.h (nonexistent)
+++ nios_test_app/types.h (revision 2)
@@ -0,0 +1,13 @@
+#ifndef __TYPES_H__
+#define __TYPES_H__
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long uint64_t;
+
+typedef signed short int16_t;
+typedef signed int int32_t;
+typedef signed long long int64_t;
+
+#endif /*_TYPES_H*/
Index: nios_test_app/hardware/usb_sync/usb_sync.cpp
===================================================================
--- nios_test_app/hardware/usb_sync/usb_sync.cpp (nonexistent)
+++ nios_test_app/hardware/usb_sync/usb_sync.cpp (revision 2)
@@ -0,0 +1,29 @@
+
+#include "hardware/usb_sync/usb_sync.h"
+
+
+void usb_putch(uint8_t c)
+{
+ while (USB_TX_FULL);
+ USB_DATA_WR(c);
+}
+
+bool usb_kbhit(void)
+{
+ return !USB_RX_EMPTY;
+}
+
+uint8_t usb_getch(void)
+{
+ while (USB_RX_EMPTY);
+ return USB_DATA_RD;
+}
+
+void usb_print(const char *string)
+{
+ while (*string != 0)
+ {
+ usb_putch(*string);
+ string++;
+ }
+}
Index: nios_test_app/hardware/usb_sync/usb_sync.h
===================================================================
--- nios_test_app/hardware/usb_sync/usb_sync.h (nonexistent)
+++ nios_test_app/hardware/usb_sync/usb_sync.h (revision 2)
@@ -0,0 +1,24 @@
+#ifndef USB_SYNC_H_
+#define USB_SYNC_H_
+
+#include
+#include
+
+#include "types.h"
+
+#define USB_DATA_RD IORD_8DIRECT(USB_SYNC_0_BASE, 0)
+#define USB_DATA_WR(data) IOWR_8DIRECT(USB_SYNC_0_BASE, 0, data)
+#define USB_RX_STATUS IORD_32DIRECT(USB_SYNC_0_BASE, 4)
+#define USB_TX_STATUS IORD_32DIRECT(USB_SYNC_0_BASE, 8)
+#define USB_TX_FULL (USB_TX_STATUS & (1 << 12))
+#define USB_RX_EMPTY (USB_RX_STATUS & (1 << 12))
+#define USB_TX_USED (USB_TX_STATUS & 0x0FFF)
+#define USB_TX_FREE (4095 - USB_TX_USED)
+
+
+void usb_putch(uint8_t c);
+bool usb_kbhit(void);
+uint8_t usb_getch(void);
+void usb_print(const char *string);
+
+#endif /*USB_SYNC_H_*/
Index: vhdl/usb_sync/usb_sync_hw.tcl
===================================================================
--- vhdl/usb_sync/usb_sync_hw.tcl (nonexistent)
+++ vhdl/usb_sync/usb_sync_hw.tcl (revision 2)
@@ -0,0 +1,120 @@
+# TCL File Generated by Component Editor 9.0sp2
+# Tue Sep 08 09:07:29 EST 2009
+# DO NOT MODIFY
+
+
+# +-----------------------------------
+# |
+# | usb_sync "usb_sync" v1.0
+# | null 2009.09.08.09:07:29
+# |
+# |
+# | src/vhdl/trunk/usb_sync.vhd
+# |
+# | ./usb_sync.vhd syn, sim
+# |
+# +-----------------------------------
+
+
+# +-----------------------------------
+# | module usb_sync
+# |
+set_module_property NAME usb_sync
+set_module_property VERSION 1.0
+set_module_property INTERNAL false
+set_module_property GROUP USB
+set_module_property DISPLAY_NAME usb_sync
+set_module_property LIBRARIES {ieee.std_logic_1164.all ieee.std_logic_arith.all ieee.std_logic_unsigned.all std.standard.all}
+set_module_property TOP_LEVEL_HDL_FILE usb_sync.vhd
+set_module_property TOP_LEVEL_HDL_MODULE usb_sync
+set_module_property INSTANTIATE_IN_SYSTEM_MODULE true
+set_module_property EDITABLE true
+# |
+# +-----------------------------------
+
+# +-----------------------------------
+# | files
+# |
+add_file usb_sync.vhd {SYNTHESIS SIMULATION}
+# |
+# +-----------------------------------
+
+# +-----------------------------------
+# | parameters
+# |
+# |
+# +-----------------------------------
+
+# +-----------------------------------
+# | connection point avalon_slave_0
+# |
+add_interface avalon_slave_0 avalon end
+set_interface_property avalon_slave_0 addressAlignment DYNAMIC
+set_interface_property avalon_slave_0 bridgesToMaster ""
+set_interface_property avalon_slave_0 burstOnBurstBoundariesOnly false
+set_interface_property avalon_slave_0 holdTime 0
+set_interface_property avalon_slave_0 isMemoryDevice false
+set_interface_property avalon_slave_0 isNonVolatileStorage false
+set_interface_property avalon_slave_0 linewrapBursts false
+set_interface_property avalon_slave_0 maximumPendingReadTransactions 0
+set_interface_property avalon_slave_0 printableDevice false
+set_interface_property avalon_slave_0 readLatency 0
+set_interface_property avalon_slave_0 readWaitTime 1
+set_interface_property avalon_slave_0 setupTime 0
+set_interface_property avalon_slave_0 timingUnits Cycles
+set_interface_property avalon_slave_0 writeWaitTime 0
+
+set_interface_property avalon_slave_0 ASSOCIATED_CLOCK clock
+set_interface_property avalon_slave_0 ENABLED true
+
+add_interface_port avalon_slave_0 read_n read_n Input 1
+add_interface_port avalon_slave_0 write_n write_n Input 1
+add_interface_port avalon_slave_0 chipselect chipselect Input 1
+add_interface_port avalon_slave_0 address address Input 2
+add_interface_port avalon_slave_0 readdata readdata Output 32
+add_interface_port avalon_slave_0 writedata writedata Input 32
+# |
+# +-----------------------------------
+
+# +-----------------------------------
+# | connection point clock
+# |
+add_interface clock clock end
+set_interface_property clock ptfSchematicName ""
+
+set_interface_property clock ENABLED true
+
+add_interface_port clock clk clk Input 1
+add_interface_port clock reset_n reset_n Input 1
+# |
+# +-----------------------------------
+
+# +-----------------------------------
+# | connection point usb_export
+# |
+add_interface usb_export conduit end
+
+set_interface_property usb_export ENABLED true
+
+add_interface_port usb_export usb_clock export Input 1
+add_interface_port usb_export usb_data export Bidir 8
+add_interface_port usb_export usb_rd_n export Output 1
+add_interface_port usb_export usb_wr_n export Output 1
+add_interface_port usb_export usb_oe_n export Output 1
+add_interface_port usb_export usb_rxf_n export Input 1
+add_interface_port usb_export usb_txe_n export Input 1
+# |
+# +-----------------------------------
+
+# +-----------------------------------
+# | connection point usb_irq
+# |
+add_interface usb_irq interrupt end
+set_interface_property usb_irq associatedAddressablePoint avalon_slave_0
+
+set_interface_property usb_irq ASSOCIATED_CLOCK clock
+set_interface_property usb_irq ENABLED true
+
+add_interface_port usb_irq irq irq Output 1
+# |
+# +-----------------------------------
Index: vhdl/usb_sync/usb_sync.vhd
===================================================================
--- vhdl/usb_sync/usb_sync.vhd (nonexistent)
+++ vhdl/usb_sync/usb_sync.vhd (revision 2)
@@ -0,0 +1,271 @@
+
+-- FT2232H USB Device Core
+-- Operates in FT245 Style Synchronous FIFO Mode for high speed data transfers
+-- Designer: Wes Pope
+-- License: Public Domain
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+use ieee.std_logic_unsigned.all;
+
+entity usb_sync is
+ port (
+ -- Avalon bus signals
+ signal clk : in std_logic;
+ signal reset_n : in std_logic;
+ signal read_n : in std_logic;
+ signal write_n : in std_logic;
+ signal irq : out std_logic;
+ signal chipselect : in std_logic;
+ signal address : in std_logic_vector(1 downto 0);
+ signal readdata : out std_logic_vector (31 downto 0);
+ signal writedata : in std_logic_vector (31 downto 0);
+
+ -- FT2232 Bus Signals
+ signal usb_clock : in std_logic;
+ signal usb_data : inout std_logic_vector(7 downto 0);
+ signal usb_rd_n : out std_logic;
+ signal usb_wr_n : out std_logic;
+ signal usb_oe_n : out std_logic;
+ signal usb_rxf_n : in std_logic;
+ signal usb_txe_n : in std_logic
+ );
+end entity usb_sync;
+
+
+architecture rtl of usb_sync is
+
+ signal rd_sig : std_logic;
+ signal wr_sig : std_logic;
+
+ signal data_addr_sig : std_logic;
+ signal rx_status_addr_sig : std_logic;
+ signal tx_status_addr_sig : std_logic;
+
+ signal rx_fifo_rddone : std_logic := '0';
+
+ signal rx_fifo_wrclk : std_logic;
+ signal rx_fifo_rdreq : std_logic;
+ signal rx_fifo_rdclk : std_logic;
+ signal rx_fifo_wrreq : std_logic;
+ signal rx_fifo_data : std_logic_vector(7 downto 0);
+ signal rx_fifo_rdempty : std_logic;
+ signal rx_fifo_wrfull : std_logic;
+ signal rx_fifo_q : std_logic_vector(7 downto 0);
+ signal rx_fifo_rdusedw : std_logic_vector(11 downto 0);
+
+ signal tx_fifo_wrclk : std_logic;
+ signal tx_fifo_rdreq : std_logic;
+ signal tx_fifo_rdclk : std_logic;
+ signal tx_fifo_wrreq : std_logic;
+ signal tx_fifo_data : std_logic_vector(7 downto 0);
+ signal tx_fifo_rdempty : std_logic;
+ signal tx_fifo_wrfull : std_logic;
+ signal tx_fifo_q : std_logic_vector(7 downto 0);
+ signal tx_fifo_wrusedw : std_logic_vector(11 downto 0);
+
+ signal ft2232_wait : integer range 0 to 1 := 0;
+ signal ft2232_bus_oe_mode : integer range 0 to 3 := 0;
+ signal ft2232_tx_fifo_read : std_logic;
+ signal ft2232_rx_fifo_write : std_logic;
+ signal ft2232_tx_please : std_logic;
+ signal ft2232_rx_please : std_logic;
+
+ COMPONENT dcfifo
+ GENERIC (
+ intended_device_family : STRING;
+ lpm_numwords : NATURAL;
+ lpm_showahead : STRING;
+ lpm_type : STRING;
+ lpm_width : NATURAL;
+ lpm_widthu : NATURAL;
+ overflow_checking : STRING;
+ rdsync_delaypipe : NATURAL;
+ underflow_checking : STRING;
+ use_eab : STRING;
+ wrsync_delaypipe : NATURAL
+ );
+ PORT (
+ wrclk : IN STD_LOGIC ;
+ rdempty : OUT STD_LOGIC ;
+ rdreq : IN STD_LOGIC ;
+ wrfull : OUT STD_LOGIC ;
+ rdclk : IN STD_LOGIC ;
+ q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);
+ wrreq : IN STD_LOGIC ;
+ data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
+ rdusedw : OUT STD_LOGIC_VECTOR (11 DOWNTO 0);
+ wrusedw : OUT STD_LOGIC_VECTOR (11 DOWNTO 0)
+ );
+ END COMPONENT;
+
+begin
+
+
+ rx_dcfifo : dcfifo
+ GENERIC MAP (
+ intended_device_family => "Cyclone II",
+ lpm_numwords => 2047,
+ lpm_showahead => "ON",
+ lpm_type => "dcfifo",
+ lpm_width => 8,
+ lpm_widthu => 11,
+ overflow_checking => "ON",
+ rdsync_delaypipe => 4,
+ underflow_checking => "ON",
+ use_eab => "ON",
+ wrsync_delaypipe => 4
+ )
+ PORT MAP (
+ wrclk => rx_fifo_wrclk,
+ rdreq => rx_fifo_rdreq,
+ rdclk => rx_fifo_rdclk,
+ wrreq => rx_fifo_wrreq,
+ data => rx_fifo_data,
+ rdempty => rx_fifo_rdempty,
+ wrfull => rx_fifo_wrfull,
+ q => rx_fifo_q,
+ rdusedw => rx_fifo_rdusedw
+ );
+
+ tx_dcfifo : dcfifo
+ GENERIC MAP (
+ intended_device_family => "Cyclone II",
+ lpm_numwords => 4095,
+ lpm_showahead => "ON",
+ lpm_type => "dcfifo",
+ lpm_width => 8,
+ lpm_widthu => 12,
+ overflow_checking => "ON",
+ rdsync_delaypipe => 4,
+ underflow_checking => "ON",
+ use_eab => "ON",
+ wrsync_delaypipe => 4
+ )
+ PORT MAP (
+ wrclk => tx_fifo_wrclk,
+ rdreq => tx_fifo_rdreq,
+ rdclk => tx_fifo_rdclk,
+ wrreq => tx_fifo_wrreq,
+ data => tx_fifo_data,
+ rdempty => tx_fifo_rdempty,
+ wrfull => tx_fifo_wrfull,
+ q => tx_fifo_q,
+ wrusedw => tx_fifo_wrusedw
+ );
+
+ -- USB2232 side
+ rx_fifo_wrclk <= usb_clock;
+ tx_fifo_rdclk <= usb_clock;
+
+ ft2232_tx_please <= '1' when usb_txe_n = '0' and tx_fifo_rdempty = '0' and ft2232_wait = 1 else '0';
+ ft2232_rx_please <= '1' when usb_rxf_n = '0' and rx_fifo_wrfull = '0' else '0';
+
+ ft2232_tx_fifo_read <= '1' when ft2232_tx_please = '1' else '0';
+ ft2232_rx_fifo_write <= '1' when ft2232_bus_oe_mode > 1 and ft2232_rx_please = '1' and ft2232_tx_please = '0' else '0';
+
+ tx_fifo_rdreq <= ft2232_tx_fifo_read;
+ rx_fifo_wrreq <= ft2232_rx_fifo_write;
+
+ usb_rd_n <= '0' when ft2232_rx_fifo_write = '1' else '1';
+ usb_wr_n <= '0' when ft2232_tx_fifo_read = '1' else '1';
+ usb_oe_n <= '0' when ft2232_bus_oe_mode > 0 else '1';
+ usb_data <= tx_fifo_q when ft2232_bus_oe_mode = 0 else (others => 'Z');
+ rx_fifo_data <= usb_data when ft2232_bus_oe_mode > 0 and usb_rxf_n = '0';
+
+
+ -- Handle FIFOs to USB2232 in synchronous mode
+ process (usb_clock)
+ begin
+
+ if usb_clock'event and usb_clock = '1' then
+
+ -- Bias TX over RX
+ if (ft2232_tx_please = '1' or ft2232_rx_please = '0') then
+
+ ft2232_bus_oe_mode <= 0;
+
+ if (usb_txe_n = '0' and tx_fifo_rdempty = '0') then
+ ft2232_wait <= ft2232_wait + 1;
+ else
+ ft2232_wait <= 0;
+ end if;
+
+ elsif (ft2232_rx_please = '1') then
+
+ ft2232_wait <= 0;
+
+ -- Handle bus turn-around. Negate OE (and for atleast 1 clock)
+ if (ft2232_bus_oe_mode < 3) then
+ ft2232_bus_oe_mode <= ft2232_bus_oe_mode + 1;
+ end if;
+
+ end if;
+
+ end if;
+
+ end process;
+
+
+ -- Avalon Bus side
+ rx_fifo_rdclk <= clk;
+ tx_fifo_wrclk <= clk;
+
+ wr_sig <= '1' when chipselect = '1' and write_n = '0' else '0';
+ rd_sig <= '1' when chipselect = '1' and read_n = '0' else '0';
+
+ data_addr_sig <= '1' when address = "00" else '0';
+ rx_status_addr_sig <= '1' when address = "01" else '0';
+ tx_status_addr_sig <= '1' when address = "10" else '0';
+
+ irq <= '0';
+
+ -- Handle FIFOs to Avalon Bus
+ process (clk, reset_n)
+ begin
+
+ if reset_n = '0' then
+
+ readdata <= (others => '0');
+ rx_fifo_rddone <= '0';
+
+ elsif clk'event and clk = '1' then
+
+ if (rd_sig = '1' and data_addr_sig = '1') then
+ -- read fifo with 2 clocks
+ readdata <= "000000000000000000000000" & rx_fifo_q;
+ if (rx_fifo_rddone = '0') then
+ rx_fifo_rdreq <= '1';
+ rx_fifo_rddone <= '1';
+ else
+ rx_fifo_rdreq <= '0';
+ rx_fifo_rddone <= '0';
+ end if;
+ end if;
+
+ if (wr_sig = '1' and data_addr_sig = '1') then
+ -- write fifo
+ tx_fifo_wrreq <= '1';
+ tx_fifo_data <= writedata(7 downto 0);
+ else
+ tx_fifo_wrreq <= '0';
+ end if;
+
+ if (rd_sig = '1' and rx_status_addr_sig = '1') then
+ -- read rx fifo stats
+ readdata <= "1000000000000000000" & rx_fifo_rdempty & rx_fifo_rdusedw;
+ end if;
+
+ if (rd_sig = '1' and tx_status_addr_sig = '1') then
+ -- read tx fifo stats
+ readdata <= "1000000000000000000" & tx_fifo_wrfull & tx_fifo_wrusedw;
+ end if;
+
+ end if;
+
+ end process;
+
+end rtl;
+