using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using DTS.Common.Enums.DASFactory; using DTS.Common.Interface.DASFactory; namespace DTS.DASLib.Command.SLICE.RealtimeCommands { public class GetRealtimeSamplesTSRAIR : GetRealtimeSamples { public GetRealtimeSamplesTSRAIR(ICommunication sock) : base(sock) { } public GetRealtimeSamplesTSRAIR(ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { } protected List _timestamps; public List Timestamps => _timestamps; protected override CommandReceiveAction WholePackage() { try { if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError) { // Figure out the number of samples returned int samples_returned = (response.ParameterLength - 8) / (_channels * 2); _samplesReturned = samples_returned; int data_bytes_returned = samples_returned * _channels * 2; _data = new List(_channels); // Grab the sample number if (response.ParameterLength > 0) { response.GetParameter(0, out _sampleNumber); } // Create the data arrays by channel for (int i = 0; i < _channels; i++) { _data.Add(new short[samples_returned]); } // Grab the data int parameter = 8; for (int sample = 0; sample < samples_returned; sample++) { for (int channel = 0; channel < _channels; channel++) { response.GetParameter(parameter, out ushort uval); //TSRAIR data is unsigned data. Convert sign, no need to normalize _data[channel][sample] = (short)((((uval & 0x00FF) << 8) | ((uval >> 8) & 0x00FF))); parameter += 2; } } return CommandReceiveAction.StopReceiving; } } catch { _samplesReturned = 0; } return CommandReceiveAction.StopReceiving; } } }