/// <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); } }
public DeviceConnection(DeviceNode deviceNode, IFTDevice device) { DeviceNode = deviceNode; this.device = device; State = ConnectionState.Initializing; ReadBuffer = new byte[] { }; WriteASCIICommand = new DelegateCommand <string>(OnWriteASCII, _ => State == ConnectionState.Ready); WriteBytesCommand = new DelegateCommand <string>(OnWriteBytes, _ => State == ConnectionState.Ready); }
public DeviceConnection(DeviceNode deviceNode, IFTDevice device) { DeviceNode = deviceNode; this.device = device; State = ConnectionState.Initializing; ReadBuffer = new byte[] { }; WriteASCIICommand = new DelegateCommand<string>(OnWriteASCII, _ => State == ConnectionState.Ready); WriteBytesCommand = new DelegateCommand<string>(OnWriteBytes, _ => State == ConnectionState.Ready); }
private void btnOpen_Click(object sender, RoutedEventArgs e) { if (dev != null) { dev.Close(); } // Create device list... var devList = ftManager.GetDeviceList(); if (devList.Count == 0) { return; } // Find device in the list again... dev = ftManager.OpenByDeviceID(devList[0].DeviceId); if (dev == null) { return; } }
private async Task SetUARTSettings(IFTDevice ftDevice) { UInt32 baudRate = 3000000; // Get the baud rate from the combo box. /*await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => * { * ComboBoxItem br = (ComboBoxItem)cbBaudRate.SelectedItem; * baudRate = Convert.ToUInt32(br.Content); * });*/ /*await MainPage.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => * { * ComboBoxItem br = (ComboBoxItem)cbBaudRate.SelectedItem; * baudRate = Convert.ToUInt32(br.Content); * });*/ await ftDevice.SetBaudRateAsync(baudRate); await ftDevice.SetFlowControlAsync(FLOW_CONTROL.RTS_CTS, 0x00, 0x00); await ftDevice.SetDataCharacteristicsAsync(WORD_LENGTH.BITS_8, STOP_BITS.BITS_1, PARITY.NONE); }
/// <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 FtdiSerialDevice(IFTDevice ftDevice) { this.ftDevice = ftDevice; }
public XBeeDevice(IFTDevice device) { this.device = device; memoryStream = new MemoryStream(); }