private void OnTick(object sender, object e) { var devicesList = ftManager.GetDeviceList(); // add devices we don't have yet var devicesToAdd = devicesList.Where(x => Devices.All(y => y.DeviceId != x.DeviceId)).ToList(); foreach (var device in devicesToAdd) { Devices.Add(new DeviceNode(device)); } // if (DeviceConnection == null && devicesList.Count > 0) { OnSelectDevice(Devices[0]); } // remove any devices that are no longer connected var devicesToDelete = Devices.Where(x => devicesList.All(y => y.DeviceId != x.DeviceId)).ToList(); foreach (var deviceNode in devicesToDelete) { Devices.Remove(deviceNode); } }
/// <summary> /// This test open and closes the handle to the FTDI device 100 times. /// </summary> #if DAVE public async Task <Boolean> OpenCloseTest(FTManager ftManager, String deviceID) { try { int errorCode = (int)ERROR_CODES.SUCCESS; double start = DateTime.Now.TimeOfDay.TotalSeconds; String s = "\r\n\r\nStarted OpenCloseTest\r\n"; AppendLogFile(s); AppendConsole(s); var res = await Task <Boolean> .Factory.StartNew(async (source) => { for (int i = 0; i < 100; i++) { var devList = ftManager.GetDeviceList(); if (devList.Count == 0) { errorCode = (int)ERROR_CODES.NO_DEVICES_FOUND; return(false); } IFTDevice dev = ftManager.OpenByDeviceID(deviceID); if (dev == null) { errorCode = (int)ERROR_CODES.FAILED_TO_OPEN; return(false); } await SetUARTSettings(dev); dev.Close(); } return(true); }, WorkItemPriority.Normal); double finish = DateTime.Now.TimeOfDay.TotalSeconds; s = String.Format( @"Finished OpenCloseTest: Result: {0} ErrorCode: {1} Duration: {2}secs", res, errorCode, Math.Round(finish - start, 2)); AppendLogFile(s); AppendConsole(s); return(res); } catch { return(false); } }
/// <summary> /// Tests the Purging of a device /// </summary> /// <param name="ftManager">The ftManager instance.</param> /// <param name="deviceID">The device identifier.</param> /// <returns>Task{Boolean}.</returns> public async Task <Boolean> PurgeTest(FTManager ftManager, String deviceID) { try { int errorCode = (int)ERROR_CODES.SUCCESS; double start = DateTime.Now.TimeOfDay.TotalSeconds; String s = "\r\n\r\nStarted PurgeLoopbackTest\r\n"; AppendLogFile(s); AppendConsole(s); Boolean res = await Task.Run <Boolean>(async() => { for (int i = 0; i < 100; i++) { byte[] dataTx = new byte[10]; byte[] dataRx = new byte[10]; // Create device list... var devList = ftManager.GetDeviceList(); if (devList.Count == 0) { errorCode = (int)ERROR_CODES.NO_DEVICES_FOUND; } // Find device in the list again... IFTDevice dev = ftManager.OpenByDeviceID(deviceID); if (dev == null) { errorCode = (int)ERROR_CODES.FAILED_TO_OPEN; } await SetUARTSettings(dev); // Generate some random data... Random rnd = new Random(); for (int j = 0; j < dataTx.Length; j++) { dataTx[j] = (byte)rnd.Next(0, 0xff); } // Write then read back the data... await dev.WriteAsync(dataTx, (uint)dataTx.Length); dev.Purge(true, false); for (int j = 0; j < dataTx.Length; j++) { dataTx[j] = (byte)rnd.Next(0, 0xff); } // Write then read back the data... await dev.WriteAsync(dataTx, (uint)dataTx.Length); uint count = await dev.ReadAsync(dataRx, (uint)dataTx.Length); if (count < dataTx.Length) { errorCode = (int)ERROR_CODES.FAILED_TO_READ_ALL_DATA; dev.Close(); return(false); } for (int j = 0; j < dataTx.Length; j++) { if (dataTx[j] != dataRx[j]) { errorCode = (int)ERROR_CODES.DATA_INTEGRITY; return(false); } } dev.Close(); } return(true); }).AsAsyncOperation(); double finish = DateTime.Now.TimeOfDay.TotalSeconds; s = String.Format( @"Finished PurgeLoopbackTest: Result: {0} ErrorCode: {1} Duration: {2}secs", res.ToString().ToLower(), errorCode, Math.Round(finish - start, 2)); AppendLogFile(s); AppendConsole(s); return(res); } catch { return(false); } }
private async Task MultiThreadedReadWrite() { int errorCode = (int)ERROR_CODES.SUCCESS; // Create device list... var devList = ftManager.GetDeviceList(); if (devList.Count == 0) { errorCode = (int)ERROR_CODES.NO_DEVICES_FOUND; } // Find device in the list again... IFTDevice dev = ftManager.OpenByDeviceID(devList[0].DeviceId); if (dev == null) { errorCode = (int)ERROR_CODES.FAILED_TO_OPEN; return; } await SetUARTSettings(dev); byte[] dataTx = new byte[10]; byte[] dataRx = new byte[10]; var task1 = Windows.System.Threading.ThreadPool.RunAsync( async(workItem) => { while (true) { // Generate some random data... Random rnd = new Random(); for (int j = 0; j < dataTx.Length; j++) { dataTx[j] = (byte)rnd.Next(0, 0xff); } await dev.WriteAsync(dataTx, (uint)10); } }).AsTask(); var task2 = Windows.System.Threading.ThreadPool.RunAsync( async(workItem) => { while (true) { uint count = await dev.ReadAsync(dataRx, (uint)10); if (count < 10) { return; } } }).AsTask(); #if DAVE var task1 = Windows.System.Threading.ThreadPool.RunAsync( async(workItem) => { byte[] dataTx = new byte[10]; byte[] dataRx = new byte[10]; // Create device list... var devList = ftManager.GetDeviceList(); if (devList.Count == 0) { errorCode = (int)ERROR_CODES.NO_DEVICES_FOUND; } // Find device in the list again... IFTDevice dev = ftManager.OpenByDeviceID(devList[0].DeviceId); if (dev == null) { errorCode = (int)ERROR_CODES.FAILED_TO_OPEN; return; } await SetUARTSettings(dev); // Generate some random data... Random rnd = new Random(); for (int j = 0; j < dataTx.Length; j++) { dataTx[j] = (byte)rnd.Next(0, 0xff); } // Write then read back the data... await dev.Write(dataTx, (uint)10); uint count = dev.Read(dataRx, (uint)10); if (count < 10) { errorCode = (int)ERROR_CODES.FAILED_TO_READ_ALL_DATA; return; } for (int j = 0; j < 10; j++) { if (dataTx[j] != dataRx[j]) { errorCode = (int)ERROR_CODES.DATA_INTEGRITY; return; } } dev.Close(); }).AsTask(); //await task1; task1.Wait(); #endif #if DAVE while (task1.Status == TaskStatus.Running) { ; } var task2 = Windows.System.Threading.ThreadPool.RunAsync( async(workItem) => { byte[] dataTx = new byte[10]; byte[] dataRx = new byte[10]; // Create device list... var devList = ftManager.GetDeviceList(); if (devList.Count == 0) { errorCode = (int)ERROR_CODES.NO_DEVICES_FOUND; return; } // Find device in the list again... IFTDevice dev = ftManager.OpenByDeviceID(devList[0].DeviceId); if (dev == null) { errorCode = (int)ERROR_CODES.FAILED_TO_OPEN; return; } await SetUARTSettings(dev); // Generate some random data... Random rnd = new Random(); for (int j = 0; j < dataTx.Length; j++) { dataTx[j] = (byte)rnd.Next(0, 0xff); } // Write then read back the data... await dev.Write(dataTx, (uint)10); uint count = dev.Read(dataRx, (uint)10); if (count < 10) { errorCode = (int)ERROR_CODES.FAILED_TO_READ_ALL_DATA; return; } for (int j = 0; j < 10; j++) { if (dataTx[j] != dataRx[j]) { errorCode = (int)ERROR_CODES.DATA_INTEGRITY; return; } } dev.Close(); }).AsTask(); await task2; #endif }
/// <summary> /// Tests the QueueStatus property of an IFTDevice. /// </summary> /// <param name="ftManager">The ftManager instance.</param> /// <param name="deviceID">The device identifier.</param> /// <returns>Task{Boolean}.</returns> public async Task <Boolean> QueueStatusTest(FTManager ftManager, String deviceID) { try { String s = ""; double start = 0; int errorCode = (int)ERROR_CODES.SUCCESS; uint TOTAL_BYTES = 32769; uint PACKET_SIZE = 1024; uint iterations = TOTAL_BYTES / PACKET_SIZE; Boolean res = await Task.Run <Boolean>(async() => { byte[] dataTx = new byte[TOTAL_BYTES]; byte[] dataRx = new byte[TOTAL_BYTES]; // Generate some random data... Random rnd = new Random(); for (int j = 0; j < dataTx.Length; j++) { dataTx[j] = (byte)rnd.Next(0, 0xff); } // Create device list... var devList = ftManager.GetDeviceList(); if (devList.Count == 0) { errorCode = (int)ERROR_CODES.NO_DEVICES_FOUND; } // Find device in the list again... IFTDevice dev = ftManager.OpenByDeviceID(deviceID); if (dev == null) { errorCode = (int)ERROR_CODES.FAILED_TO_OPEN; } await SetUARTSettings(dev); start = DateTime.Now.TimeOfDay.TotalSeconds; s = "\r\n\r\nStarted QueueStatusTest\r\n"; AppendLogFile(s); AppendConsole(s); await dev.WriteAsync(dataTx, 128); dev.Purge(true, false); for (int j = 0; j < TOTAL_BYTES; j++) { dataTx[j] = (byte)j; } await dev.ResetAsync(); await dev.WriteAsync(dataTx, 10); while (dev.GetQueueStatus() != 10) { //return false; } if (await dev.ReadAsync(dataRx, 10) != 10) { return(false); } for (int j = 0; j < 10; j++) { if (dataTx[j] != dataRx[j]) { errorCode = (int)ERROR_CODES.DATA_INTEGRITY; return(false); } } dev.Close(); return(true); }).AsAsyncOperation(); double finish = DateTime.Now.TimeOfDay.TotalSeconds; s = String.Format( @"Finished QueueStatusTest: Result: {0} ErrorCode: {1} Duration: {2}secs", res.ToString().ToLower(), errorCode, Math.Round(finish - start, 2)); AppendLogFile(s); AppendConsole(s); return(res); } catch { return(false); } }
/// <summary> /// Loopback test that transmits 1MB of data to the device and reads it back. /// </summary> public async Task <Boolean> LoopbackTest(FTManager ftManager, String deviceID) { try { String s = ""; double start = 0; int errorCode = (int)ERROR_CODES.SUCCESS; int TOTAL_BYTES = 65535; int PACKET_SIZE = 1024; int iterations = TOTAL_BYTES / PACKET_SIZE; Boolean res = await Task.Run <Boolean>(async() => { byte[] dataTx = new byte[TOTAL_BYTES]; byte[] dataRx = new byte[PACKET_SIZE]; // Generate some random data... Random rnd = new Random(); for (int j = 0; j < dataTx.Length; j++) { dataTx[j] = (byte)rnd.Next(0, 0xff); } // Create device list... var devList = ftManager.GetDeviceList(); if (devList.Count == 0) { errorCode = (int)ERROR_CODES.NO_DEVICES_FOUND; } // Find device in the list again... IFTDevice dev = ftManager.OpenByDeviceID(deviceID); if (dev == null) { errorCode = (int)ERROR_CODES.FAILED_TO_OPEN; } await SetUARTSettings(dev); start = DateTime.Now.TimeOfDay.TotalSeconds; s = "\r\n\r\nStarted LoopbackTest\r\n"; AppendLogFile(s); AppendConsole(s); for (int i = 0; i < iterations; i++) { byte[] buf = new byte[PACKET_SIZE]; Buffer.BlockCopy(dataTx, i *PACKET_SIZE, buf, 0, PACKET_SIZE); // Write then read back the data... double t1 = DateTime.Now.TimeOfDay.TotalSeconds; await dev.WriteAsync(buf, (uint)PACKET_SIZE); double t2 = DateTime.Now.TimeOfDay.TotalSeconds; double t3 = DateTime.Now.TimeOfDay.TotalSeconds; uint count = await dev.ReadAsync(dataRx, (uint)PACKET_SIZE); double t4 = DateTime.Now.TimeOfDay.TotalSeconds; if (count < PACKET_SIZE) { errorCode = (int)ERROR_CODES.FAILED_TO_READ_ALL_DATA; return(false); } double span = t4 - t3; //AppendConsole(span.ToString()); double t5 = DateTime.Now.TimeOfDay.TotalSeconds; for (int j = 0; j < PACKET_SIZE; j++) { if (buf[j] != dataRx[j]) { errorCode = (int)ERROR_CODES.DATA_INTEGRITY; return(false); } } double t6 = DateTime.Now.TimeOfDay.TotalSeconds; } dev.Close(); return(true); }).AsAsyncOperation(); double finish = DateTime.Now.TimeOfDay.TotalSeconds; s = String.Format( @"Finished LoopbackTest: Result: {0} ErrorCode: {1} Duration: {2}secs", res.ToString().ToLower(), errorCode, Math.Round(finish - start, 2)); AppendLogFile(s); AppendConsole(s); return(res); } catch { return(false); } }
public Task <IEnumerable <DeviceNode> > GetDeviceList() { return(Task.FromResult(ftManager.GetDeviceList().Select(x => new DeviceNode(x.DeviceId, x.DeviceType.ToString())))); }