/// <summary> /// Returns the list of FT4222 connected /// </summary> /// <returns>A list of devices connected</returns> public static List <DeviceInformation> GetDevices() { List <DeviceInformation> devInfos = new List <DeviceInformation>(); FtStatus ftStatus = 0; // Check device uint numOfDevices; ftStatus = FtFunction.FT_CreateDeviceInfoList(out numOfDevices); Debug.WriteLine($"Number of devices: {numOfDevices}"); if (numOfDevices == 0) { throw new IOException($"No device found"); } Span <byte> sernum = stackalloc byte[16]; Span <byte> desc = stackalloc byte[64]; for (uint i = 0; i < numOfDevices; i++) { uint flags = 0; FtDevice ftDevice; uint id; uint locId; IntPtr handle; ftStatus = FtFunction.FT_GetDeviceInfoDetail(i, out flags, out ftDevice, out id, out locId, in MemoryMarshal.GetReference(sernum), in MemoryMarshal.GetReference(desc), out handle); if (ftStatus != FtStatus.Ok) { throw new IOException($"Can't read device information on device index {i}, error {ftStatus}"); } var devInfo = new DeviceInformation( (FtFlag)flags, ftDevice, id, locId, Encoding.ASCII.GetString(sernum.ToArray(), 0, FindFirstZero(sernum)), Encoding.ASCII.GetString(desc.ToArray(), 0, FindFirstZero(desc))); devInfos.Add(devInfo); } return(devInfos); }