private void SetupOutputPipeline(IDAQController c, out IOutputData expectedOutput, out DAQOutputStream outStream)
        {
            string units      = "V";
            var    data       = Enumerable.Range(0, 1000).Select(i => new Measurement(i, units)).ToList();
            var    sampleRate = new Measurement(100, "Hz");
            var    config     = new Dictionary <string, object>();

            expectedOutput = new OutputData(data,
                                            sampleRate, true);

            outStream            = new DAQOutputStream("OUT");
            outStream.SampleRate = sampleRate;
            outStream.MeasurementConversionTarget = units;
            (c as IMutableDAQController).AddStream(outStream);

            var outQueue = new Dictionary <IDAQOutputStream, Queue <IOutputData> >();

            outQueue[outStream] = new Queue <IOutputData>();
            outQueue[outStream].Enqueue(expectedOutput);

            TestDevice dev = new TestDevice("OUT-DEVICE", outQueue);

            dev.BindStream(outStream);
            dev.MeasurementConversionTarget = units;
        }
示例#2
0
        public void PreloadShouldFeedBuffer()
        {
            /*
             * We want to keep HardwareBufferTargetDuration available in the hardware buffer.
             */

            Converters.Clear();
            HekaDAQOutputStream.RegisterConverters();

            var        itcMock       = new Mock <IHekaDevice>();
            StreamType channelType   = StreamType.ANALOG_OUT;
            ushort     channelNumber = 0;
            var        time          = DateTimeOffset.Now;

            int availableSamplesStart = 1000000;
            int availableSamples      = availableSamplesStart;

            //itcMock.Setup(itc => itc.AvailableSamples(channelType, channelNumber)).Returns(availableSamples);
            itcMock.Setup(itc => itc.PreloadSamples(channelType, channelNumber, It.IsAny <IList <short> >()))
            .Callback <StreamType, ushort, IList <short> >((type, number, sampleList) => availableSamples -= sampleList.Count);


            var controller        = new HekaDAQController();
            HekaDAQOutputStream s = new HekaDAQOutputStream("OUT", channelType, channelNumber, controller);

            s.MeasurementConversionTarget = "V";
            controller.SampleRate         = new Measurement(10000, 1, "Hz");

            var dataQueue = new Dictionary <IDAQOutputStream, Queue <IOutputData> >();

            dataQueue[s] = new Queue <IOutputData>();
            var bigData = new OutputData(Enumerable.Range(0, 100000).Select(i => new Measurement(i % 5, "V")).ToList(),
                                         s.SampleRate, false);

            TimeSpan bufferDuration = TimeSpan.FromSeconds(0.45);

            dataQueue[s].Enqueue(bigData.SplitData(bufferDuration).Head);
            dataQueue[s].Enqueue(bigData.SplitData(bufferDuration).Head);

            TestDevice dev = new TestDevice("OUT-DEVICE", dataQueue);

            dev.BindStream(s);
            dev.Controller = new Controller();

            s.Preload(itcMock.Object as IHekaDevice, new OutputData(dataQueue[s].Peek()));

            int expectedSamples = (int)Math.Ceiling(bufferDuration.TotalSeconds * (double)s.SampleRate.QuantityInBaseUnit);

            itcMock.VerifyAll();
            Assert.AreEqual(availableSamplesStart - expectedSamples, availableSamples); //Preload should not affect buffer availablility because PRELOAD_FIFO is used
        }