コード例 #1
0
 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
                ));
 }
コード例 #2
0
        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);
                }
            }
        }