BOOL CDriverInterface::GetLibraryVersion(LPDWORD pLibraryVersion)
{
	FT_STATUS ftResult;

	ftResult = FT_GetLibraryVersion(pLibraryVersion);
	if (FT_FAILED(ftResult))
	{
		return FALSE;
	}

	return TRUE;
}
Example #2
0
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;
}
Example #3
0
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;
}