{
printf("Dev %d:\n", iDev);
printf(" Flags= 0x%x, (%s)\n", devInfo.Flags,
DeviceFlagToString(devInfo.Flags).c_str());
printf(" Type= 0x%x\n", devInfo.Type);
printf(" ID= 0x%x\n", devInfo.ID);
printf(" LocId= 0x%x\n", devInfo.LocId);
printf(" SerialNumber= %s\n", devInfo.SerialNumber);
printf(" Description= %s\n", devInfo.Description);
printf(" ftHandle= 0x%x\n", devInfo.ftHandle);
const std::string desc = devInfo.Description;
if(desc == "FT4222" || desc == "FT4222 A") {
g_FT4222DevList.push_back(devInfo);
}
}
}
}
int main(int argc, char const *argv[])
{
ListFtUsbDevices();
if(g_FT4222DevList.empty()) {
printf("No FT4222 device is found!\n");
return 0;
}
FT_HANDLE ftHandle = NULL;
FT_STATUS ftStatus;
FT4222_STATUS ft4222Status;
ftStatus = FT_OpenEx((PVOID)g_FT4222DevList[0].LocId,
FT_OPEN_BY_LOCATION, &ftHandle);
if (FT_OK != ftStatus) {
printf("Open a FT4222 device failed!\n");
return 0;
}
ft4222Status = FT4222_SPIMaster_Init(ftHandle,
SPI_IO_SINGLE, CLK_DIV_4, CLK_ACTIVE_LOW, CLK_LEADING, 0x01);
if (FT4222_OK != ft4222Status) {
printf("Init FT4222 as SPI master device failed!\n");
return 0;
}
// TODO:
// Start to work as SPI master, and read/write data to an SPI slave
// FT4222_SPIMaster_SingleWrite
// FT4222_SPIMaster_SingleRead
// FT4222_SPIMaster_SingleReadWrite
FT4222_Uninitialize(ftHandle);
FT_Close(ftHandle);
return 0;
}