예제 #1
0
        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
        }
예제 #2
0
 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;
             }
         }
     }
 }