BOOL CDriverInterface::GetLibraryVersion(LPDWORD pLibraryVersion) { FT_STATUS ftResult; ftResult = FT_GetLibraryVersion(pLibraryVersion); if (FT_FAILED(ftResult)) { return FALSE; } return TRUE; }
FT_STATUS GetComPort( LONG * comPort ) { //FTD2xx: // FT_GetDriverVersion , FT_GetLibraryVersion // FT_GetDeviceInfo , FT_CreateDeviceInfoList , FT_GetDeviceInfoDetail // FT_GetComPortNumber // FT_CyclePort , FT_ResetPort , FT_ResetDevice , FT_GetStatus FT_HANDLE ftHandle; FT_STATUS ftStatus; uint8_t * version; #define VER_BUILD 0 #define VER_MINOR 1 #define VER_MAJOR 2 #define VER_UNUSED 3 DWORD dwLibraryVer; // Get DLL version ftStatus = FT_GetLibraryVersion(&dwLibraryVer); if (ftStatus == FT_OK) { version = (uint8_t *)&dwLibraryVer; //ASSUMPTION: dwLibraryVer is little-endian std::cout << "FTD2xx Library " << int(version[VER_MAJOR]) << "." << int(version[VER_MINOR]) << " Build " << int(version[VER_BUILD]) << std::endl; } else { std::cerr << "ERROR: FT_GetLibraryVersion()" << std::endl; std::cerr << "ERROR: returning ftStatus" << std::endl; return ftStatus; } DWORD dwDriverVer; // Get driver version ftStatus = FT_Open(0, &ftHandle); if (ftStatus == FT_OK) { ftStatus = FT_GetDriverVersion(ftHandle, &dwDriverVer); if (ftStatus == FT_OK) { version = (uint8_t *)&dwDriverVer; //ASSUMPTION: dwLibraryVer is little-endian std::cout << "FTD2xx Driver " << int(version[VER_MAJOR]) << "." << int(version[VER_MINOR]) << " Build " << int(version[VER_BUILD]) << std::dec << std::endl; } else { std::cerr << "ERROR: FT_GetDriverVersion()" << std::endl; std::cerr << "ERROR: returning ftStatus" << std::endl; return ftStatus; } FT_Close(ftHandle); } else { std::cerr << "ERROR: FT_Open()" << std::endl; std::cerr << "ERROR: returning ftStatus" << std::endl; return ftStatus; } DWORD numDevs; ftStatus = FT_ListDevices(&numDevs, NULL, FT_LIST_NUMBER_ONLY); if (ftStatus == FT_OK) { // FT_ListDevices OK, number of devices connected is in numDevs } else { // FT_ListDevices failed std::cerr << "ERROR: FT_ListDevices()" << std::endl; std::cerr << "ERROR: returning ftStatus" << std::endl; return ftStatus; } DWORD numDevs2; // create the device information list ftStatus = FT_CreateDeviceInfoList(&numDevs2); if (ftStatus == FT_OK) { } else { // FT_CreateDeviceInfoList failed std::cerr << "ERROR: FT_CreateDeviceInfoList()" << std::endl; std::cerr << "ERROR: returning ftStatus" << std::endl; return ftStatus; } if (numDevs != numDevs2) { std::cerr << "ERROR: number of devices from FT_ListDevices() and FT_CreateDeviceInfoList() are different" << std::endl; return ftStatus; } if (numDevs == 0) { std::cerr << "ERROR: numDevs==0 ; ftStatus==FT_DEVICE_NOT_FOUND (2) ???" << std::endl; std::cerr << "ERROR: returning ftStatus" << std::endl; return ftStatus; } if (numDevs > 1) { std::cerr << "ERROR: numDevs > 1" << std::endl; std::cerr << "ERROR: returning numDevs" << std::endl; return numDevs; } std::cout << "1 FTDI device found" << std::endl; /* DWORD devIndex = 0; // first device char buffer[64]; // more than enough room! ftStatus = FT_ListDevices((PVOID)devIndex, buffer, FT_LIST_BY_INDEX | FT_OPEN_BY_SERIAL_NUMBER); if (ftStatus == FT_OK) { // FT_ListDevices OK, serial number is in Buffer } else { // FT_ListDevices failed std::cerr << "ERROR: FT_ListDevices()" << std::endl; std::cerr << "ERROR: returning ftStatus" << std::endl; return ftStatus; } std::cout << buffer << std::endl; */ //FT_DEVICE_LIST_INFO_NODE * devInfo; // allocate storage for list based on numDevs //devInfo = (FT_DEVICE_LIST_INFO_NODE*)malloc(sizeof(FT_DEVICE_LIST_INFO_NODE)*numDevs); FT_DEVICE_LIST_INFO_NODE devInfo[1]; // get the device information list ftStatus = FT_GetDeviceInfoList(devInfo, &numDevs); if (ftStatus == FT_OK) { //for (unsigned int i = 0; i < numDevs; i++) //{ unsigned int i = 0; //std::cout << "Dev " << i << ":" << std::endl; std::cout << std::hex; std::cout << " Flags=0x" << devInfo[i].Flags << std::endl; std::cout << " Type=0x" << devInfo[i].Type << std::endl; std::cout << " ID=0x" << devInfo[i].ID << std::endl; std::cout << " LocId=0x" << devInfo[i].LocId << std::endl; std::cout << " ftHandle=0x" << devInfo[i].ftHandle << std::endl; std::cout << std::dec; std::cout << " SerialNumber=" << devInfo[i].SerialNumber << std::endl; std::cout << " Desc=" << devInfo[i].Description << std::endl; //} } else { std::cerr << "ERROR: FT_GetDeviceInfoList()" << std::endl; std::cerr << "ERROR: returning ftStatus" << std::endl; return ftStatus; } ftStatus = FT_Open(0, &ftHandle); if (ftStatus == FT_OK) { ftStatus = FT_GetComPortNumber(ftHandle, comPort); if (ftStatus == FT_OK) { if(*comPort == -1) { // No COM port assigned } else { // COM port assigned with number held in *comPort } } else { // FT_GetComPortNumber FAILED! std::cerr << "ERROR: FT_GetComPortNumber()" << std::endl; std::cerr << "ERROR: returning ftStatus" << std::endl; return ftStatus; } FT_Close(ftHandle); if (ftStatus == FT_OK) { } else { std::cerr << "ERROR: FT_Close()" << std::endl; std::cerr << "ERROR: returning ftStatus" << std::endl; return ftStatus; } } else { std::cerr << "ERROR: FT_Open()" << std::endl; std::cerr << "ERROR: returning ftStatus" << std::endl; return ftStatus; } return FT_OK; }
main (int argc, char *argv[]) { DWORD num; FT_CreateDeviceInfoList(&num); std::cout << num << " devices found" << std::endl; DWORD version; FT_GetLibraryVersion (&version); std::cout << "Version " << version << std::endl; FT_STATUS ftStatus; DWORD vid,pid; ftStatus = FT_GetVIDPID(&vid,&pid); if (ftStatus!= FT_OK) { std::cout << "Error " << ftStatus << std::endl; } std::cout << std::hex << "vid("<<vid<<") pid("<<pid<<")" << std::endl; std::cout << std::dec << "vid("<<vid<<") pid("<<pid<<")" << std::endl; FT_DEVICE_LIST_INFO_NODE devInfo[16]; ftStatus = FT_GetDeviceInfoList(devInfo, &num); if (ftStatus != FT_OK) { std::cout << "Error " << ftStatus << std::endl; } for (int i = 0; i < num; i++) { printf("Dev %d:\n",i); printf(" Flags=0x%x\n",devInfo[i].Flags); printf(" Type=0x%x\n",devInfo[i].Type); printf(" ID=0x%x\n",devInfo[i].ID); printf(" LocId=0x%x\n",devInfo[i].LocId); printf(" SerialNumber=%s\n",devInfo[i].SerialNumber); printf(" Description=%s\n",devInfo[i].Description); //printf(" ftHandle=0x%x\n",(unsigned int)devInfo[i].ftHandle); } FT_HANDLE h; ftStatus = FT_Open(0, &h); if (ftStatus != FT_OK) { std::cout << "Failed to open device - " << ftStatus << std::endl; } /* std::cout << "start" << std::endl; for(size_t i(0); i < 10; ++i) { FT_SetRts(h); FT_ClrDtr(h); sleep(1); FT_ClrRts(h); FT_SetDtr(h); sleep(1); } */ FT_Close(0); std::cout << "done" << std::endl; }