private ChannelData <float> ConvertSample(FpgaSample sample) { return(new ChannelData <float>( sample.GetAnalogsAsFloats().Select(x => new DataChannel <float>(x.name, x.value)), sample.Bools.Select(x => new DataChannel <bool>(x.name, x.value)), sample.TimeStamp, sample.TachometerCount, sample.MasterSyncIncrement, sample.MasterSyncState, sample.SampleIndex )); }
private FpgaSample AssembleSample(ByteString bytes, int sampleIndex) { using (var stream = new MemoryStream(bytes.ToArray())) { using (var reader = new BinaryReader(stream)) { var uint32s = new List <(string, UInt32)>(); var int16s = new List <(string, Int16)>(); var int24s = new List <(string, Int24)>(); var int32s = new List <(string, Int32)>(); var floats = new List <(string, float)>(); var doubles = new List <(string, Double)>(); var bools = new List <(string, bool)>(); var boolsToRead = 0; foreach (var channel in _channelList) { switch (channel.DataType) { case ChannelType.UInt32: uint32s.Add((channel.ChannelName, reader.ReadUInt32())); break; case ChannelType.Int16: int16s.Add((channel.ChannelName, reader.ReadInt16())); break; case ChannelType.Int24: int24s.Add((channel.ChannelName, reader.ReadInt24())); break; case ChannelType.Int32: int32s.Add((channel.ChannelName, reader.ReadInt32())); break; case ChannelType.Float: floats.Add((channel.ChannelName, reader.ReadSingle())); break; case ChannelType.Double: doubles.Add((channel.ChannelName, reader.ReadDouble())); break; case ChannelType.Bool: //Add the bools to a separate array and handle afterwards. ++boolsToRead; break; default: break; } } //Assemble the bools if (boolsToRead > 0) { var digitalBytes = reader.ReadBytes(boolsToRead / 8); var bits = new BitArray(digitalBytes); for (var i = 0; i < bits.Length; i++) { bools.Add((_digitalChannelNames[i], bits[i])); } } var sample = new FpgaSample(0, 0, 0, false, sampleIndex, uint32s, int16s, int24s, int32s, floats, doubles, bools ); return(sample); } } }