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 DelegatesSampleRateToController() { var c = new NIDAQController(); var s = new NIDAQOutputStream("none", 0, c); var srate = new Measurement(1000, "Hz"); c.SampleRate = srate; Assert.That(s.SampleRate, Is.EqualTo(c.SampleRate)); Assert.Throws<NotSupportedException>(() => s.SampleRate = srate); }
public NIDAQOutputStream(string name, string physicalName, PhysicalChannelTypes channelType, NIDAQController controller) : base(name, controller) { PhysicalName = physicalName; PhysicalChannelType = channelType; DAQUnits = (PhysicalChannelType == PhysicalChannelTypes.DOPort || PhysicalChannelType == PhysicalChannelTypes.DOLine) ? Measurement.UNITLESS : "V"; MeasurementConversionTarget = DAQUnits; Controller = controller; Clock = controller.Clock; }
public NIDAQOutputStream(string physicalName, PhysicalChannelTypes channelType, NIDAQController controller) : this(physicalName, physicalName, channelType, controller) { }
public NIDigitalDAQOutputStream(string name, string physicalName, NIDAQController controller) : base(name, physicalName, PhysicalChannelTypes.DOPort, controller) { BitPositions = new Dictionary<IExternalDevice, ushort>(); }
public NIDigitalDAQOutputStream(string physicalName, NIDAQController controller) : this(physicalName, physicalName, controller) { }
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); }
private void FixtureForController(NIDAQController controller, double durationSeconds = 10) { controller.SampleRate = new Measurement(10000, "Hz"); controller.InitHardware(); OutStream = controller.OutputStreams .OfType<NIDAQOutputStream>().First(str => str.Name == "ao0"); InputStream = controller.InputStreams .OfType<NIDAQInputStream>().First(str => str.Name == "ai0"); InputStream.Configuration["SampleRate"] = InputStream.SampleRate; OutStream.Configuration["SampleRate"] = OutStream.SampleRate; IDAQOutputStream s = OutStream; var dataQueue = new Dictionary<IDAQOutputStream, Queue<IOutputData>>(); dataQueue[s] = new Queue<IOutputData>(); Data = new OutputData( Enumerable.Range(0, (int)(TimeSpan.FromSeconds(durationSeconds).Samples(controller.SampleRate))) .Select(i => new Measurement(i % 10, "V")).ToList(), s.SampleRate, false); TimeSpan d = new TimeSpan(controller.ProcessInterval.Ticks / 2); var outData = (IOutputData)Data.Clone(); while (outData.Duration > TimeSpan.Zero) { var split = outData.SplitData(d); dataQueue[s].Enqueue(new OutputData(split.Head, split.Rest.Duration == TimeSpan.Zero)); outData = split.Rest; } OutDevice = new TestDevice("Output", dataQueue); InputDevice = new TestDevice("Input", null); OutDevice.MeasurementConversionTarget = "V"; InputDevice.MeasurementConversionTarget = "V"; BindStreams(controller, OutDevice, InputDevice); }