Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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");
        }