テストに使ったプログラムの抜粋です
int __fastcall TForm2::FifoOpen()
{
FT_STATUS ftStatus;
int serial_length;
DWORD InTransferSize =65535;
DWORD OutTransferSize =4096;
char *serial;
serial = "HDL00511A";
int ret;
ret = -1;
for(;;){
ftStatus = FT_OpenEx(serial, FT_OPEN_BY_SERIAL_NUMBER, &handle);
if(ftStatus != FT_OK){
AddMemo("FT_OPEN_BY_SERIAL_NUMBER : NG");
break;
}else{
AddMemo("FT_OPEN_BY_SERIAL_NUMBER : OK");
}
ftStatus = FT_SetBitMode(handle, 0, 0x40);
if(ftStatus != FT_OK){
AddMemo("FT_SetBitMode(Sync-FIFO Mode) : NG");
break;
}else{
AddMemo("FT_SetBitMode(Sync-FIFO Mode) : OK");
}
ftStatus = FT_SetLatencyTimer(handle, 2);
if(ftStatus != FT_OK){
AddMemo("FT_SetLatencyTimer : NG");
break;
}else{
AddMemo("FT_SetLatencyTimer : OK");
}
ftStatus = FT_SetUSBParameters(handle, InTransferSize, OutTransferSize);
if(ftStatus != FT_OK){
AddMemo("FT_SetUSBParameters : NG");
break;
}else{
AddMemo("FT_SetUSBParameterse : OK");
}
ftStatus = FT_SetFlowControl( handle, FT_FLOW_RTS_CTS, 0x10,0x13);
if(ftStatus != FT_OK){
AddMemo("FT_SetFlowControl : NG");
break;
}else{
AddMemo("FT_SetFlowControl : OK");
}
// 正常リターン
ret = 0;
break;
}
if( ret == 0 ){
AddMemo("FIFO OPEN : OK");
}else{
AddMemo("FIFO OPEN : NG");
}
return ret;
}
int __fastcall TForm2::Write_1000( char *p, int len, int kaisuu )
{
FT_STATUS ftStatus;
DWORD writtenBytes;
int ret;
ret = 0;
for( int ii=0; ii < kaisuu; ii++ ){
ftStatus = FT_Write(handle, p, len, &writtenBytes);
if(ftStatus != FT_OK){
ret = -1;
break;
}
}
return ret;
}
// 送信テスト
int __fastcall TForm2::FifoExam_snd( void )
{
String str;
FT_STATUS ftStatus;
DWORD writtenBytes;
DWORD EventDWord;
DWORD TxBytes;
DWORD RxBytes;
DWORD BytesReceived;
char *RxData;
char *TxData;
String DiffTime;
long fDiffTIme;
long totalbyte;
long nn;
int kaisuu;
int ret;
AddMemo("送信テスト");
gExamBurden = Edit_ExamBurden->Text.ToInt();
TxData = new char[gExamBurden+1]; //*1
for(int i=0; i<gExamBurden; i++){
TxData[i] = '0' + i%(16*3-1);
}
TxData[gExamBurden] = '\0';
kaisuu = 10;
ret = -1;
for(;;){
QueryPerformanceCounter(&gStartTime); //開始時間
if( Write_1000(TxData, gExamBurden, kaisuu)!= FT_OK){
AddMemo("FT_Write ERROR");
break;
}
QueryPerformanceCounter(&gEndTime); //終了時間
fDiffTIme = ((gEndTime.QuadPart - gStartTime.QuadPart)*1000 / gCpuFreq.QuadPart);
DiffTime.sprintf("%d [mSec]", (DWORD)fDiffTIme);
AddMemo( DiffTime ) ;
totalbyte = gExamBurden * kaisuu;
nn = 1000*(totalbyte / (fDiffTIme+0.0000000001));
String tmp;
tmp.sprintf( "%d bytes---%6.3f [MBytes/sec] " ,totalbyte, (float)nn/1000000.0 );
AddMemo( tmp ) ;
ret = 0;
// 正常終了
break;
}
AddMemo("................");
delete [] TxData; //*1
return ret;
}
// 受信テスト
int __fastcall TForm2::FifoExam_rcv( void )
{
String str;
FT_STATUS ftStatus;
DWORD writtenBytes;
DWORD EventDWord;
DWORD RxBytes;
DWORD RxBytes1;
DWORD TxBytes;
DWORD BytesReceived;
char *RxData;
String DiffTime;
long fDiffTIme;
long nn;
int ret;
AddMemo("受信テスト");
RxBytes = 10000000;
RxData = new char[RxBytes]; // *1
DWORD InTransferSize = 32768;//16384;
ftStatus = FT_SetUSBParameters(handle, InTransferSize, 0);
AddMemo("FT_SetUSBParameters(32768)");
FT_Purge(handle, FT_PURGE_RX);
AddMemo("FT_Purge");
ret = -1;
for(;;){
//Application->ProcessMessages();
ftStatus = FT_GetStatus(handle, &RxBytes1, &TxBytes, &EventDWord);
if(ftStatus != FT_OK){
AddMemo("FT_GetStatus ERROR");
break;
}else{
if (RxBytes1 == 0) {
continue;
}
}
QueryPerformanceCounter(&gStartTime); //開始時間
ftStatus = FT_Read(handle, RxData, RxBytes, &BytesReceived);
if(ftStatus != FT_OK){
AddMemo("FT_Read ERROR");
break;
}
QueryPerformanceCounter(&gEndTime); //終了時間
fDiffTIme = ((gEndTime.QuadPart - gStartTime.QuadPart)*1000 / gCpuFreq.QuadPart);
DiffTime.sprintf("%d [mSec]", (DWORD)fDiffTIme);
AddMemo( DiffTime ) ;
nn = 1000*(RxBytes / (fDiffTIme+0.0000000001));
String tmp;
tmp.sprintf( "%d bytes---%6.3f [MBytes/sec] " ,RxBytes, (float)nn/1000000.0 );
AddMemo( tmp ) ;
ret = 0;
//正常終了
break;
}
delete []RxData; // *1
AddMemo("................");
return ret;
}