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