public void ADcmXLStreamCancelTest() { Console.WriteLine("Starting ADcmXL stream cancel test..."); long firstCount; FX3.DrActive = true; FX3.SensorType = DeviceType.ADcmXL; FX3.PartType = DUTType.ADcmXL3021; FX3.DrPin = FX3.DIO3; /* Start 6KHz DR signal on DIO4 */ FX3.StartPWM(6000, 0.1, FX3.DIO4); for (int trial = 0; trial < 4; trial++) { Console.WriteLine("Starting trial " + trial.ToString()); /* Start stream */ FX3.StartRealTimeStreaming(1000000); firstCount = FX3.GetNumBuffersRead; System.Threading.Thread.Sleep(50); Assert.Greater(FX3.GetNumBuffersRead, firstCount, "ERROR: Expected to have read buffers"); /* Cancel stream (stop stream) */ FX3.StopStream(); System.Threading.Thread.Sleep(50); /* Check SPI functionality */ TestSpiFunctionality(); /* Start stream */ FX3.StartRealTimeStreaming(1000000); firstCount = FX3.GetNumBuffersRead; System.Threading.Thread.Sleep(50); Assert.Greater(FX3.GetNumBuffersRead, firstCount, "ERROR: Expected to have read buffers"); /* Cancel stream (cancel stream) */ FX3.CancelStreamAsync(); System.Threading.Thread.Sleep(50); /* Check SPI functionality */ TestSpiFunctionality(); } }
public void ADcmXLRealTimeStreamTest() { Console.WriteLine("Starting ADcmXL data stream test..."); double expectedTime; double realTime; double baseTime; uint numBuffers = 13600; Stopwatch timer = new Stopwatch(); FX3.DrActive = true; FX3.SensorType = DeviceType.ADcmXL; FX3.PartType = DUTType.ADcmXL3021; FX3.DrPin = FX3.DIO3; /* Start 6.8KHz, 80% duty cycle DR signal on DIO4 */ FX3.StartPWM(6800, 0.8, FX3.DIO4); Console.WriteLine("Measuring base stream time..."); baseTime = 0; for (int trial = 0; trial < 5; trial++) { timer.Restart(); FX3.StartRealTimeStreaming(1000); System.Threading.Thread.Sleep(5); FX3.WaitForStreamCompletion(1000); baseTime += (timer.ElapsedMilliseconds - (1000.0 / 6.8)); } baseTime /= 5; Console.WriteLine("Base stream overhead time: " + baseTime.ToString() + "ms"); for (int trial = 0; trial < 4; trial++) { Console.WriteLine("Starting trial " + trial.ToString()); /* Start stream */ timer.Restart(); FX3.StartRealTimeStreaming(numBuffers); System.Threading.Thread.Sleep(100); FX3.WaitForStreamCompletion((int)(numBuffers / 6.0) + 1000); timer.Stop(); Assert.AreEqual(FX3.GetNumBuffersRead, numBuffers, "ERROR: Invalid number of buffers read"); realTime = timer.ElapsedMilliseconds; /* Take off a base time */ realTime -= baseTime; expectedTime = numBuffers / 6.8; Console.WriteLine("Expected time: " + expectedTime.ToString() + "ms, Real time: " + realTime.ToString() + "ms"); Assert.AreEqual(expectedTime, realTime, 0.01 * expectedTime, "ERROR: Invalid stream time"); /* Check SPI functionality */ FX3.WordLength = 16; TestSpiFunctionality(); } Console.WriteLine("Verifying that when the DR edge is missed the stream waits until the following edge to start..."); FX3.SclkFrequency = 8000000; timer.Restart(); FX3.StartRealTimeStreaming(numBuffers); System.Threading.Thread.Sleep(100); FX3.WaitForStreamCompletion((int)(2 * numBuffers / 6.0) + 1000); timer.Stop(); Assert.AreEqual(FX3.GetNumBuffersRead, numBuffers, "ERROR: Invalid number of buffers read"); realTime = timer.ElapsedMilliseconds; /* Take off a base time */ realTime -= baseTime; /* Twice the time because we read every other data ready */ expectedTime = 2 * numBuffers / 6.8; Console.WriteLine("Expected time: " + expectedTime.ToString() + "ms, Real time: " + realTime.ToString() + "ms"); Assert.AreEqual(expectedTime, realTime, 0.01 * expectedTime, "ERROR: Invalid stream time"); }