#include #include #include "CyAPI.h" #include #include HANDLE XyloDeviceHandle; /////////////////////////////////////////////////// // Open and close the USB driver void USB_Open() { XyloDeviceHandle = CreateFile("\\\\.\\EzUSB-0", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); assert(XyloDeviceHandle!=INVALID_HANDLE_VALUE); } void USB_Close() { CloseHandle(XyloDeviceHandle); } /////////////////////////////////////////////////// // USB functions to send and receive bulk packets DWORD USB_BulkWrite(DWORD pipe, void* buffer, DWORD buffersize) { DWORD nBytes; assert(buffersize<0x10000); DeviceIoControl(XyloDeviceHandle, 0x222051, &pipe, sizeof(pipe), buffer, buffersize, &nBytes, NULL); assert(nBytes==buffersize); // make sure everything was sent return nBytes; } DWORD USB_BulkRead(DWORD pipe, void* buffer, DWORD buffersize) { DWORD nBytes; assert(buffersize<0x10000); DeviceIoControl(XyloDeviceHandle, 0x22204E, &pipe, sizeof(pipe), buffer, buffersize, &nBytes, NULL); return nBytes; } // GUID {0EFA2C93-0C7B-454F-9403-D638F6C37E65} static GUID GUID_KNJN_FX2 = {0x0EFA2C93, 0x0C7B, 0x454F, 0x94, 0x03, 0xD6, 0x38, 0xF6, 0xC3, 0x7E, 0x65}; void main() { //This is transfered byte buffer. unsigned char transferbuf[8024]; unsigned char ReceiveBuf[8024]; LONG Transfered[8024]; LONG Received[8024]; for (int j = 0; j < 8024; j++) { transferbuf[j] = j; Transfered[j] = 0; Received[j] = 0; ReceiveBuf[j] = 0; } //HiRes Perf Counter __int64 counter1 = 0, counter2 = 0, freq = 0; LONG transferlen = 256; LONG ReceivedLen = 0; LONG TotalTransfered = 0; USB_Open(); //Get HiRes Performance Counter Freq QueryPerformanceFrequency((LARGE_INTEGER *)&freq); //Get Hires Perf Counter: Start QueryPerformanceCounter((LARGE_INTEGER *)&counter1); USB_BulkWrite(2, transferbuf, transferlen); transferlen = 512; TotalTransfered += transferlen; //Execute Transfer 1000 times = 512KB. for (int i = 0 ; i < 8000; i++) { transferlen = 512; USB_BulkWrite(2, transferbuf, transferlen); Transfered[i] = transferlen; TotalTransfered += transferlen; // ReceivedLen = USB_BulkRead(4, ReceiveBuf, 512); // Received[i] = ReceivedLen; // transferlen = ReceivedLen; // if (transferlen > 512) // { // transferlen = 512; // } } USB_Close(); //Get Hires Perf Counter: Finish QueryPerformanceCounter((LARGE_INTEGER *)&counter2); printf("Counter: %d\n", counter2 - counter1); printf("QueryPerformanceCounter minimum resolution: 1/%d Seconds.\n",freq); printf("Total %d write time: %f seconds.",TotalTransfered, ((counter2 - counter1) * 1.0 / freq)); printf("BandWidth = %d B/sec.\n", TotalTransfered * freq / (counter2 - counter1) ); printf("press any key\n"); }