public void ShouldBitShiftAndMaskPushedInputData() { Converters.Clear(); var controller = new NIDAQController(); var s = new NIDigitalDAQInputStream("IN", controller); controller.SampleRate = new Measurement(10000, 1, "Hz"); TimeSpan duration = TimeSpan.FromSeconds(0.5); var devices = new List<TestDevice>(); for (ushort bitPosition = 1; bitPosition < 32; bitPosition += 2) { TestDevice dev = new TestDevice(); dev.BindStream(s); s.BitPositions[dev] = bitPosition; devices.Add(dev); } var data = new InputData(Enumerable.Range(0, 10000).Select(i => new Measurement((short)(i % 2 * 0xaaaa), Measurement.UNITLESS)).ToList(), s.SampleRate, DateTime.Now); s.PushInputData(data); s.PushInputData(data); var expected = Enumerable.Range(0, 10000).Select(i => new Measurement(i % 2, Measurement.UNITLESS)).ToList(); foreach (var ed in devices) { Assert.AreEqual(expected, ed.InputData[s].ElementAt(0).Data); Assert.AreEqual(expected, ed.InputData[s].ElementAt(1).Data); } }
public void PushesDataToDevices() { String units = "V"; DAQInputStream s = new DAQInputStream("IN"); s.MeasurementConversionTarget = units; TestDevice inDevice = new TestDevice("IN-DEVICE", null); inDevice.MeasurementConversionTarget = units; inDevice.BindStream(s); IList <IMeasurement> data = new List <IMeasurement>(2); data.Add(new Measurement(1, units)); data.Add(new Measurement(2, units)); IMeasurement sampleRate = new Measurement(1000, "Hz"); DateTimeOffset time = DateTimeOffset.Now; IDictionary <string, object> config = null; IInputData inData = new InputData(data, sampleRate, time); s.PushInputData(inData); IInputData actual = inDevice.InputData[s].First(); CollectionAssert.AreEqual(inData.Data, actual.Data); Assert.AreEqual(inData.InputTime, actual.InputTime); }
public void FiresStimulusOutputEvents() { var c = new TestDAQController(); var srate = new Measurement(10, "Hz"); var outStream = new DAQOutputStream("out") { MeasurementConversionTarget = "V", SampleRate = srate }; var inStream = new DAQInputStream("in") { MeasurementConversionTarget = "V", SampleRate = srate }; var outputData = new Dictionary <IDAQOutputStream, Queue <IOutputData> >(); var dataQueue = new Queue <IOutputData>(); var outputIOData = new OutputData( Enumerable.Range(0, 100).Select(i => new Measurement(i, "V")), new Measurement(10, "Hz") ); dataQueue.Enqueue(outputIOData); outputData[outStream] = dataQueue; var dev = new TestDevice("test", outputData) { MeasurementConversionTarget = "V" }; dev.BindStream(outStream); bool fired = false; c.StimulusOutput += (daq, args) => { Assert.That(args.Stream == outStream); Assert.That(args.Data != null); Assert.That(args.Data.Configuration.Count() > 0); fired = true; }; c.ProcessIteration += (daq, args) => ((IDAQController)daq).RequestStop(); c.AddStreamMapping(outStream, inStream); c.Start(false); while (c.Running) { ; } Assert.That(fired, Is.True.After(1000, 10)); }
public void FiresStimulusOutputEvents() { var c = new TestDAQController(); var srate = new Measurement(10, "Hz"); var outStream = new DAQOutputStream("out") { MeasurementConversionTarget = "V", SampleRate = srate }; var inStream = new DAQInputStream("in") { MeasurementConversionTarget = "V", SampleRate = srate }; var outputData = new Dictionary<IDAQOutputStream, Queue<IOutputData>>(); var dataQueue = new Queue<IOutputData>(); var outputIOData = new OutputData( Enumerable.Range(0, 100).Select(i => new Measurement(i, "V")), new Measurement(10, "Hz") ); dataQueue.Enqueue(outputIOData); outputData[outStream] = dataQueue; var dev = new TestDevice("test", outputData) { MeasurementConversionTarget = "V" }; dev.BindStream(outStream); bool fired = false; c.StimulusOutput += (daq, args) => { Assert.That(args.Stream == outStream); Assert.That(args.Data != null); Assert.That(args.Data.Configuration.Count() > 0); fired = true; ((IDAQController) daq).RequestStop(); }; c.AddStreamMapping(outStream, inStream); c.Start(false); while (c.IsRunning) { Thread.Sleep(1); } Assert.That(fired, Is.True); }
public void ShouldBitShiftAndMergePulledOutputData() { var controller = new NIDAQController(); var s = new NIDigitalDAQOutputStream("OUT", controller); controller.SampleRate = new Measurement(10000, 1, "Hz"); TimeSpan duration = TimeSpan.FromSeconds(0.5); for (ushort bitPosition = 1; bitPosition < 32; bitPosition += 2) { var dataQueue = new Dictionary<IDAQOutputStream, Queue<IOutputData>>(); dataQueue[s] = new Queue<IOutputData>(); var data = new OutputData(Enumerable.Range(0, 10000).Select(i => new Measurement(i % 2, Measurement.UNITLESS)).ToList(), s.SampleRate, false); dataQueue[s].Enqueue(data.SplitData(duration).Head); dataQueue[s].Enqueue(data.SplitData(duration).Head); TestDevice dev = new TestDevice("OUT-DEVICE" + bitPosition, dataQueue); dev.BindStream(s); s.BitPositions[dev] = bitPosition; } var expected = Enumerable.Range(0, 10000).Select(i => new Measurement((long)(i % 2 * 0xaaaaaaaa), Measurement.UNITLESS)).ToList(); var pull1 = s.PullOutputData(duration); Assert.AreEqual(expected, pull1.Data); var pull2 = s.PullOutputData(duration); Assert.AreEqual(expected, pull2.Data); }
public void ShouldBitShiftAndMergeBackground() { var controller = new NIDAQController(); var s = new NIDigitalDAQOutputStream("OUT", controller); controller.SampleRate = new Measurement(10000, 1, "Hz"); for (ushort bitPosition = 1; bitPosition < 32; bitPosition += 2) { TestDevice dev = new TestDevice { Background = new Measurement(1, Measurement.UNITLESS) }; dev.BindStream(s); s.BitPositions[dev] = bitPosition; } ulong q = 0xaaaaaaaa; var expected = new Measurement((long)q, Measurement.UNITLESS); Assert.AreEqual(expected, s.Background); }
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.AO; 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.QuantityInBaseUnits); itcMock.VerifyAll(); Assert.AreEqual(availableSamplesStart - expectedSamples, availableSamples); //Preload should not affect buffer availablility because PRELOAD_FIFO is used }
public void PushesDataToDevices() { String units = "V"; DAQInputStream s = new DAQInputStream("IN"); s.MeasurementConversionTarget = units; TestDevice inDevice = new TestDevice("IN-DEVICE", null); inDevice.MeasurementConversionTarget = units; inDevice.BindStream(s); IList<IMeasurement> data = new List<IMeasurement>(2); data.Add(new Measurement(1, units)); data.Add(new Measurement(2, units)); IMeasurement sampleRate = new Measurement(1000, "Hz"); DateTimeOffset time = DateTimeOffset.Now; IDictionary<string, object> config = null; IInputData inData = new InputData(data, sampleRate, time); s.PushInputData(inData); IInputData actual = inDevice.InputData[s].First(); CollectionAssert.AreEqual(inData.Data, actual.Data); Assert.AreEqual(inData.InputTime, actual.InputTime); }
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; }