// USBTransmitTest.cpp : Defines the entry point for the console application.
//
#ifdef OS_UNIX
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
#include <stdlib.h>
#else
#include <Windows.h>
#endif
#include <stdio.h>
#include <memory.h>
#include "USBTransmit.h"
#define USB_VID 0x0483
#define USB_PID 0x5710
int main(int argc, char* argv[])
{
int DevNum;
//单位为包
int DataNum = 500;
//每次传输的数据字节数,该参数必须和单片机中的参数完全匹配,该参数不能大于或等于64K
int PacketSize = 32*1024;
int DataNumIndex = DataNum;
int ret;
char *pReadDataBuffer = (char *)malloc(PacketSize);
char WriteDataBuffer[8];
//扫描设备连接数,需要初始化
DevNum = USBScanDevice(USB_PID,USB_VID);
printf("设备连接数为:%d\n",DevNum);
//打开设备0
if(USBOpenDevice(0)){
printf("打开设备成功!\n");
}else{
printf("打开设备失败!\n");
getchar();
return 0;
}
DataNumIndex = DataNum;
//告诉设备即将要读取的数据包数
WriteDataBuffer[0] = DataNum>>24;
WriteDataBuffer[1] = DataNum>>16;
WriteDataBuffer[2] = DataNum>>8;
WriteDataBuffer[3] = DataNum>>0;
//高速设备每包数据的长度
WriteDataBuffer[4] = PacketSize>>24;
WriteDataBuffer[5] = PacketSize>>16;
WriteDataBuffer[6] = PacketSize>>8;
WriteDataBuffer[7] = PacketSize>>0;
ret = USBBulkWriteData(0,EP1_OUT,WriteDataBuffer,8,100);
if(ret){
printf("写数据成功!\n");
}else{
printf("写数据失败!\n");
getchar();
}
printf("正在测试读数据速度,请稍候...\n");
//获取起始时间
#ifdef OS_UNIX
struct timeval StartTime_t,EndTime_t;
long long StartTime,EndTime;
double dfFreq = CLOCKS_PER_SEC;
gettimeofday(&StartTime_t,NULL);//开始计时
#else
LARGE_INTEGER litmp;
LONGLONG StartTime,EndTime;
double dfFreq;
QueryPerformanceFrequency(&litmp);//取得高精度运行计数器的频率f,单位是每秒多少次(n/s),
dfFreq = (double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);//取得高精度运行计数器的数值
StartTime = litmp.QuadPart; //开始计时
#endif
//循环读取数据
do{
ret = USBBulkReadData(0,EP1_IN,pReadDataBuffer,PacketSize,100);
if(ret != PacketSize){
break;
}else{
DataNumIndex--;
}
}while(DataNumIndex > 0);
if(DataNumIndex > 0){
printf("读数据失败!\n");
getchar();
}else{
printf("读数据成功!\n");
}
//获取结束时间并打印输出耗时和速度
#ifdef OS_UNIX
gettimeofday(&EndTime_t,NULL); //终止计时
StartTime = StartTime_t.tv_sec*1000000+StartTime_t.tv_usec;
EndTime = EndTime_t.tv_sec*1000000+EndTime_t.tv_usec;
#else
QueryPerformanceCounter(&litmp);//取得高精度运行计数器的数值
EndTime = litmp.QuadPart; //终止计时
#endif
//打印输出读数据速度
printf("读数据字节数: %d MBytes\n",(DataNum-DataNumIndex)*PacketSize/(1024*1024));
printf("读数据消耗时间: %f s\n",(EndTime-StartTime)/dfFreq);
printf("读数据速度: %.3f MByte/s\n",(DataNum-DataNumIndex)*PacketSize/((EndTime-StartTime)/dfFreq)/(1024*1024));
//释放动态分配的内存空间
free(pReadDataBuffer);
//关闭设备0
ret = USBCloseDevice(0);
if(ret){
printf("关闭设备成功!\n");
}else{
printf("关闭设备失败!\n");
}
getchar();
return 0;
}