public override bool outputSingleTimestep(SettingsData settings, SingleOutputFrame output) { return(true); }
/* * /// <summary> * /// This class contains both the analog and the digital tasks returned from a specific device. * /// The reason for its existence is that if a device is to have both its analog and its digital outputs used, * /// then they must exist in separate tasks. * /// </summary> * /// * public class TaskCollection * { * public Task analogTask; * public Task digitalTask; * } */ /* * public static Task createVariableTimebaseTask(string digitalTimebaseOutLine, string analogTimebaseOutLine) * { * * }*/ /// /// This method creates a daqMX task for an "output now" command, and starts the output. /// </summary> /// <param name="deviceName"></param> /// <param name="settings"></param> /// <param name="output"></param> /// <returns></returns> public static Task createDaqMxTaskAndOutputNow(string deviceName, DeviceSettings deviceSettings, SingleOutputFrame output, SettingsData settings, Dictionary <int, HardwareChannel> usedDigitalChannels, Dictionary <int, HardwareChannel> usedAnalogChannels) { Task task = new Task(deviceName + " output task"); List <int> analogIDs; List <HardwareChannel> analogs; Dictionary <int, int[]> port_digital_IDs; List <int> usedPortNumbers; // Parse and create channels. parseAndCreateChannels(deviceName, deviceSettings, usedDigitalChannels, usedAnalogChannels, task, out analogIDs, out analogs, out port_digital_IDs, out usedPortNumbers); // now create buffer. task.Timing.SampleTimingType = SampleTimingType.OnDemand; // analog output if (analogIDs.Count != 0) { // extract a list of analog values corresponding to the list analodIDs. This is // sorted in the same way as the channels were created in parseAndCreateChannels List <double> outputValues = new List <double>(); foreach (int analogID in analogIDs) { double val; if (output.analogValues.ContainsKey(analogID)) { val = output.analogValues[analogID]; } else { val = 0; } outputValues.Add(val); } AnalogMultiChannelWriter writer = new AnalogMultiChannelWriter(task.Stream); writer.WriteSingleSample(true, outputValues.ToArray()); } // digital output if (usedPortNumbers.Count != 0) { List <byte> outputValues = new List <byte>(); foreach (int portNumber in usedPortNumbers) { byte digitalMask = 1; byte value = 0; for (int lineNum = 0; lineNum < 8; lineNum++) { int digitalID = port_digital_IDs[portNumber][lineNum]; if (digitalID != -1) { bool val = false; if (output.digitalValues.ContainsKey(digitalID)) { val = output.digitalValues[digitalID]; } if (val) { value |= digitalMask; } } digitalMask = (byte)(digitalMask << 1); } outputValues.Add(value); } DigitalMultiChannelWriter writer = new DigitalMultiChannelWriter(task.Stream); writer.WriteSingleSamplePort(true, outputValues.ToArray()); } return(task); }