public override IOutputData PullOutputData(IDAQOutputStream stream, TimeSpan duration) { /* * IOuputData will be directed to a device (not an DAQStream) by the controller. * Controller should get mapping (device=>data) from the current Epoch instance. * * Thus the standard PullOuputData will pull from the controller's queue for this * device. */ if (duration.Samples(stream.SampleRate) <= 1) throw new ExternalDeviceException("Cannot pull less than one sample."); try { IOutputData data = this.Controller.PullOutputData(this, duration); return data.DataWithUnits(MeasurementConversionTarget) .DataWithExternalDeviceConfiguration(this, Configuration); } catch (Exception ex) { log.DebugFormat("Error pulling data from controller: " + ex.Message); throw; } }
private static IOutputData DataForDuration(TimeSpan blockDuration, IMeasurement sampleRate) { ulong nSamples = blockDuration.Samples(sampleRate); var samples = Enumerable.Range(0, (int)nSamples).Select(i => new Measurement(1, "V")).ToList(); return new OutputData(samples, sampleRate, false); }
private static IEnumerable<IMeasurement> ConstantMeasurementList(TimeSpan blockDuration, IMeasurement srate, IMeasurement value) { //log.DebugFormat("Generating constant measurment: {0} x {1} samles @ {2}", value, blockDuration.Samples(srate), srate); return Enumerable.Range(0, (int)blockDuration.Samples(srate)) .Select(i => value) .ToList(); }
public void PullsOutputData() { var dur1 = new TimeSpan(seqData.Duration.Ticks / 3); var pull1 = seqStream.PullOutputData(dur1); var dur2 = new TimeSpan(seqData.Duration.Ticks); var pull2 = seqStream.PullOutputData(dur2); var samples1 = (int)dur1.Samples(seqStream.SampleRate); Assert.That(pull1.Data, Is.EqualTo(seqData.Data.Take(samples1).ToList())); var samples2 = (int)dur2.Samples(seqStream.SampleRate); Assert.That(pull2.Data, Is.EqualTo(seqData.Data.Skip(samples1).Take(samples2).ToList())); }