public async Task <DeviceSample[]> GetSamplesFromDevice(SamplesReadingCallback samplesReadingCallback) { var result = new List <DeviceSample>(); await Task.Run(() => { WithSerialPort(() => { var details = new DeviceDetails(); GetInfoDetails1(details); var data = new DataMessageSample[details.NumberOfSamples]; GetData(data, samplesReadingCallback); int sampleNumber = 1; foreach (var sample in data) { result.Add(new DeviceSample { ID = sampleNumber++, Temperature = Convert.ToDecimal(sample.Temperature) / 10M, TimeStamp = sample.GetTimeStamp() }); } }); }); return(result.ToArray()); }
public void GetSamplesFromDevice(SamplesReadingCallback samplesReadingCallback) { var result = new List <LoggerSample>(); }
private void DoCallback(int offset, int totalBytes, SamplesReadingCallback callback) { var p = Convert.ToInt32(offset * 100.0 / totalBytes); callback(p, offset, totalBytes); }
private void GetData(DataMessageSample[] data, SamplesReadingCallback callback) { var messageCount = data.Length / 15; var totalBytes = messageCount * Marshal.SizeOf <DataMessage>(); var rest = data.Length % 15; if (rest > 0) { messageCount++; totalBytes = totalBytes + Marshal.SizeOf <DataMessageHeader>() + rest * Marshal.SizeOf <DataMessageSample>() + Marshal.SizeOf <DataMessageTail>(); } var buffer = new byte[Marshal.SizeOf <DataMessage>() * messageCount]; var offset = 0; var estimatedTransferTime = Convert.ToInt64(totalBytes * serialFrameSize * 1000) / serialPort.BaudRate; logger.Info($"Data : {totalBytes} estimated transfer time {estimatedTransferTime} ms"); var question = Messages.GetDataMessage(SerialNumber); SendQuestion(question); sw.Restart(); while (offset < totalBytes) { //TODO 1 JS PROTECT AGAINST ENDLESS LOOP var bytecount = buffer.Length - offset; int r = serialPort.BaseStream.Read(buffer, offset, bytecount); offset += r; decimal progress = Convert.ToDecimal(offset * 100 / buffer.Length); if (r > 0) { logger.Debug($"\treceived {r} bytes ({offset} of {buffer.Length}) ({ progress:##0.##}%)"); } if (r == 0) { Thread.Sleep(1); } DoCallback(offset, totalBytes, callback); } sw.Start(); logger.Info($"Received a total of {offset} bytes in {sw.Elapsed}"); if (rest > 0) { var dmts = Marshal.SizeOf <DataMessageTail>(); var targetIndex = buffer.Length - Marshal.SizeOf <DataMessageTail>(); var srcIndex = targetIndex - (15 - rest) * Marshal.SizeOf <DataMessageSample>(); Array.Copy(buffer, srcIndex, buffer, targetIndex, dmts); } var dataMessages = Utils.MapArray <DataMessage>(buffer); var c = 0; for (int i = 0; i < dataMessages.Length; i++) { var samples = dataMessages[i].GetSamples(); for (int j = 0; j < 15 && c < data.Length; j++, c++) { data[c] = samples[j]; } } }