private static void Trace(string s) { #if TRACE TraceQueue.Enqueue(() => { System.Diagnostics.Trace.WriteLine(string.Format("{0:mm.ss.ff} {1}", DateTime.UtcNow, s)); }); #endif }
private void ParseLine(string line) { Trace("Parser invoked"); TerminalQueue.Enqueue(() => { TerminalEvent?.Invoke(this, new TerminalEventArgs(line)); }); if (line.EndsWith(ErrorDesignator)) { new Thread(DeviceErrorThreadStart).Start(new TerminalEventArgs(line)); return; } if (IsConnected) { if (line.Length == ConnectionSignature.Length) { if (line.SequenceEqual(ConnectionSignature)) { OnUnexpectedDisconnect(); return; } } if (!CommandExecutionCompleted) { if (line.Length == CompletionSignature.Length) { if (line.SequenceEqual(CompletionSignature)) { CommandExecutionCompleted = true; return; } } } if (AcquisitionInProgress) { if (line.Length == EndOfAcquisitionSignature.Length) { if (line.SequenceEqual(EndOfAcquisitionSignature)) { AcquisitionInProgress = false; return; } } try { string[] parsed = line.Split(Splitter); byte c = byte.Parse(parsed[0], NumberStyles.HexNumber, CultureInfo.InvariantCulture); float v = float.Parse(parsed[1].Trim(ToTrim), CultureInfo.InvariantCulture); DataQueue.Enqueue(() => { AcquisitionDataReceived?.Invoke(this, new AcquisitionEventArgs(c, v)); }); } catch (Exception exc) { new Thread(DataErrorEventThreadStart).Start(new DataErrorEventArgs(exc, line)); } } else { if (line.Length == AcquisitionSignature.Length) { if (line.SequenceEqual(AcquisitionSignature)) { AcquisitionInProgress = true; return; } } } } else { if (line.Length == ConnectionSignature.Length) { if (line.SequenceEqual(ConnectionSignature)) { IsConnected = true; return; } } } }