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; }
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 }