OpenCores
URL https://opencores.org/ocsvn/ft2232hcore/ft2232hcore/trunk

Subversion Repositories ft2232hcore

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /ft2232hcore
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

/trunk/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>
/trunk/pc_test_app/ftd2xx.lib Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/pc_test_app/ftd2xx.lib Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/pc_test_app/speed_test.dsp =================================================================== --- trunk/pc_test_app/speed_test.dsp (nonexistent) +++ trunk/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: trunk/pc_test_app/speed_test.suo =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/pc_test_app/speed_test.suo =================================================================== --- trunk/pc_test_app/speed_test.suo (nonexistent) +++ trunk/pc_test_app/speed_test.suo (revision 2)
trunk/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: trunk/pc_test_app/ftd2xx.h =================================================================== --- trunk/pc_test_app/ftd2xx.h (nonexistent) +++ trunk/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: trunk/pc_test_app/main.cpp =================================================================== --- trunk/pc_test_app/main.cpp (nonexistent) +++ trunk/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: trunk/pc_test_app/speed_test.sln =================================================================== --- trunk/pc_test_app/speed_test.sln (nonexistent) +++ trunk/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: trunk/pc_test_app/types.h =================================================================== --- trunk/pc_test_app/types.h (nonexistent) +++ trunk/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: trunk/pc_test_app/speed_test.dsw =================================================================== --- trunk/pc_test_app/speed_test.dsw (nonexistent) +++ trunk/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: trunk/nios_test_app/main.cpp =================================================================== --- trunk/nios_test_app/main.cpp (nonexistent) +++ trunk/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: trunk/nios_test_app/types.h =================================================================== --- trunk/nios_test_app/types.h (nonexistent) +++ trunk/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: trunk/nios_test_app/hardware/usb_sync/usb_sync.cpp =================================================================== --- trunk/nios_test_app/hardware/usb_sync/usb_sync.cpp (nonexistent) +++ trunk/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: trunk/nios_test_app/hardware/usb_sync/usb_sync.h =================================================================== --- trunk/nios_test_app/hardware/usb_sync/usb_sync.h (nonexistent) +++ trunk/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: trunk/vhdl/usb_sync/usb_sync_hw.tcl =================================================================== --- trunk/vhdl/usb_sync/usb_sync_hw.tcl (nonexistent) +++ trunk/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: trunk/vhdl/usb_sync/usb_sync.vhd =================================================================== --- trunk/vhdl/usb_sync/usb_sync.vhd (nonexistent) +++ trunk/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; +

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.