private void Parse(int sourceID, string message) { NMEAIncomingMessageReceived.Rise(this, new NMEAMessageEventArgs(sourceID, message)); try { var pResult = NMEAParser.Parse(message); if (pResult is NMEAStandartSentence) { NMEAStandartSentence sentence = (NMEAStandartSentence)pResult; if (standardSenteceParsers.ContainsKey(sentence.SentenceID)) { standardSenteceParsers[sentence.SentenceID](sourceID, sentence.TalkerID, sentence.parameters); } else { NMEAStandartUnsupportedSentenceParsed.Rise(this, new NMEAUnsupportedStandartEventArgs(sourceID, sentence)); } } else { NMEAProprietaryUnsupportedSentenceParsed.Rise(this, new NMEAUnsupportedProprietaryEventArgs(sourceID, (pResult as NMEAProprietarySentence))); } } catch (Exception ex) { LogEventHandler.Rise(this, new LogEventArgs(LogLineType.ERROR, ex)); } }
public void Send(string message) { if ((port != null) && port.IsOpen) { port.SendData(message); LogEventHandler.Rise(this, new LogEventArgs(LogLineType.INFO, string.Format("{0} ({1}) << {2}", PortName, PortDescription, message))); } }
public void Stop() { StopTimer(); SafelyClosePort(false); detected = false; IsActive = false; OnClosed(); LogEventHandler.Rise(this, new LogEventArgs(LogLineType.INFO, string.Format("{0} Stopped", PortDescription))); }
public void Open() { foreach (var port in ports) { try { port.Value.Open(); port.Value.DataReceived += dataReceivedHandler; port.Value.ErrorReceived += errorReceivedHandler; } catch (Exception ex) { LogEventHandler.Rise(this, new LogEventArgs(LogLineType.ERROR, ex)); } } }
public void Start() { StopTimer(); checkedPortNames.Clear(); if ((port != null) && port.IsOpen) { SafelyClosePort(true); } IsActive = true; detected = false; LogEventHandler.Rise(this, new LogEventArgs(LogLineType.INFO, string.Format("{0} Starting detection...", PortDescription))); TryNextPort(); }
private void port_NewNMEAMessage(object sender, NewNMEAMessageEventArgs e) { if (IsLogIncoming) { LogEventHandler.Rise(this, new LogEventArgs(LogLineType.INFO, string.Format("{0} ({1}) >> {2}", PortName, PortDescription, e.Message))); } try { var _result = NMEAParser.Parse(e.Message); ProcessIncoming(_result); } catch (Exception ex) { LogEventHandler.Rise(this, new LogEventArgs(LogLineType.ERROR, string.Format("{0} ({1}) >> {2} Caused error ({3})", PortName, PortDescription, e.Message, ex.Message))); } }
private void SafelyClosePort(bool isCallOnClosed) { if (port != null) { try { port.NewNMEAMessage -= port_NewNMEAMessageHandler; port.PortError -= port_PortErrorHandler; if (port.IsOpen) { port.Close(); LogEventHandler.Rise(this, new LogEventArgs(LogLineType.INFO, string.Format("{0} ({1}) Closed", port.PortName, PortDescription))); } } catch { } } if (isCallOnClosed) { OnClosed(); } }
private void port_PortError(object sender, SerialErrorReceivedEventArgs e) { LogEventHandler.Rise(this, new LogEventArgs(LogLineType.ERROR, string.Format("{0} ({1}) >> {2}", PortName, PortDescription, e.EventType.ToString()))); }
private void TryNextPort() { StopTimer(); SafelyClosePort(true); string pName = string.Empty; // Will try the previously detected port, if it has been if (!string.IsNullOrEmpty(detectedPortName) && !checkedPortNames.Contains(detectedPortName)) { pName = detectedPortName; } else { pName = GetNextPortName(checkedPortNames); } if (!string.IsNullOrEmpty(pName)) { checkedPortNames.Add(pName); LogEventHandler.Rise(this, new LogEventArgs(LogLineType.INFO, string.Format("Trying {0} as {1}...", pName, PortDescription))); try { port = new NMEASerialPort(new SerialPortSettings(pName, Baudrate, Parity.None, DataBits.dataBits8, StopBits.One, Handshake.None)); port.IsRawModeOnly = false; port.PortError += port_PortErrorHandler; port.NewNMEAMessage += port_NewNMEAMessageHandler; port.Open(); if (!supress_try_send) { port.SendRaw(new byte[] { 0x00, 0x00, 0x00 }); } InitQuerySend(); StartTimer(1000); } catch (Exception ex) { LogEventHandler.Rise(this, new LogEventArgs(LogLineType.ERROR, ex)); StartTimer(0); // To avoid recursion - timer expiration will cause a next TryNextPort() call } } else { if (IsTryAlways) { checkedPortNames.Clear(); LogEventHandler.Rise(this, new LogEventArgs(LogLineType.ERROR, string.Format("{0} was not detected, retrying in a moment... ", PortDescription))); StartTimer(1000); } else { PortDetectionFailed.Rise(this, new EventArgs()); } } }