int usbport_open(char *deviceNumber, FT_HANDLE *ftHandle, int serial); void usbport_getdata(FT_HANDLE ftHandle); int usbport_open(char *deviceNumber, FT_HANDLE *ftHandle, int serial) { FT_STATUS ftStatus; DWORD numDevs; char * pcBufLD[MAX_DEVICES + 1]; char cBufLD[MAX_DEVICES][64]; for (int i = 0; i < MAX_DEVICES; i++) { pcBufLD[i] = cBufLD[i]; } pcBufLD[MAX_DEVICES] = NULL; // list devices printf("List of devices:\n\n"); ftStatus = FT_ListDevices(pcBufLD, &numDevs, FT_LIST_ALL | FT_OPEN_BY_SERIAL_NUMBER); if (ftStatus != FT_OK) { printf("Error: FT_ListDevices returned %d\n", (int) ftStatus); return -1; } for (unsigned int i = 0; ((i < MAX_DEVICES) && (i < numDevs)); i++) { printf(" - Device %d Serial Number - %s\n", i, cBufLD[i]); } ftStatus = FT_OpenEx(deviceNumber, FT_OPEN_BY_SERIAL_NUMBER, ftHandle); if (ftStatus == FT_OK) { printf("\n Port opened (0x%s)", deviceNumber); } else { printf("\n Device fail open"); return 0; } ftStatus |= FT_ResetDevice(*ftHandle); //Reset USB device ftStatus |= FT_Purge(*ftHandle, FT_PURGE_RX | FT_PURGE_TX);// Purge transmit and receive buffers ftStatus |= FT_SetUSBParameters(*ftHandle, USB_TRANSFER_SIZE, 0);//Set USB request transfer size ftStatus |= FT_SetTimeouts(*ftHandle, 100, 100);//Sets the read and write timeouts in milliseconds for the FT2232H ftStatus |= FT_SetLatencyTimer(*ftHandle, 2);//Set the latency timer ftStatus |= FT_SetBitMode(*ftHandle, 0xFF, FT_BITMODE_RESET); // Turn on Sync mode delay_ms(100); ftStatus |= FT_SetBitMode(*ftHandle, 0xFF, FT_BITMODE_SYNC_FIFO); // Turn on Sync mode if(serial) { ftStatus |= FT_SetBaudRate(*ftHandle, 9600);// Set baud rate to 9600 ftStatus |= FT_SetDataCharacteristics(*ftHandle, FT_BITS_8, FT_STOP_BITS_1, FT_PARITY_NONE);// Set to communicate at 8N1 ftStatus |= FT_SetFlowControl(*ftHandle, FT_FLOW_NONE, 0, 0);// Disable hardware / software flow control } else { } if (ftStatus != FT_OK) { printf(" >> Fail on initialize USB device <<\n"); FT_Close(*ftHandle); return 0; } return 1; } void usbport_getdata(FT_HANDLE ftHandle) { unsigned long int throughput = 0; FT_STATUS ftStatus; DWORD dwNumBytesRead = 0, dwNumInputBuffer = USB_TRANSFER_SIZE; int done = 0; int delay; int errors = 0; timing_start(); while (done == 0) { dwNumInputBuffer = USB_TRANSFER_DATA_SIZE; ftStatus = FT_Read(ftHandle, &InputBuffer, dwNumInputBuffer, &dwNumBytesRead); //Read out the data from input buffer if (ftStatus != FT_OK) { printf("Fail reading from USB device!\n"); } //display_buffer_hex(InputBuffer, dwNumBytesRead); errors += continuos_data_validate(InputBuffer, dwNumBytesRead); delay = timing_end(); throughput += dwNumBytesRead; if (delay >= 1000) { timing_start(); printf(" > %.2f Mbps (%d ms), %lu bytes/s (%d errors)\n", (float) ((throughput * 8)) / 1000000, delay, throughput, errors); throughput = 0; errors = 0; } if (_kbhit() == 1) done = 1; } return; }