public override IObservable <Mat> Process(IObservable <Mat> source) { return(Observable.Using( () => PulsePalManager.ReserveConnection(PortName), pulsePal => source.Do(input => { var pulseInterval = 1000000 / (Frequency * CycleTimeMicroseconds); var pulseTimes = new int[input.Cols]; var pulseVoltages = new byte[input.Cols]; for (int i = 0; i < pulseTimes.Length; i++) { pulseTimes[i] = pulseInterval * i; } using (var voltageHeader = Mat.CreateMatHeader(pulseVoltages)) { CV.Convert(input, voltageHeader); } lock (pulsePal.PulsePal) { pulsePal.PulsePal.SendCustomPulseTrain(PulseId, pulseTimes, pulseVoltages); } }))); }
public override IObservable <TSource> Process <TSource>(IObservable <TSource> source) { return(Observable.Using( () => PulsePalManager.ReserveConnection(PortName), pulsePal => source.Do(input => { lock (pulsePal.PulsePal) { pulsePal.PulsePal.TriggerOutputChannels(Channels); } }))); }