public void AddMessage(NmeaParser.Messages.NmeaMessage message) { messages.Enqueue($"{DateTime.Now.ToString("hh:mm:ss.fff")}: {message}"); if (messages.Count > 100) { messages.Dequeue(); //Keep message queue at 100 } output.Text = string.Join("\n", messages.ToArray()); output.Select(output.Text.Length - 1, 0); //scroll to bottom }
public void ParseMessage(NmeaParser.Messages.NmeaMessage message) { bool isNewFix = false; bool lostFix = false; double lat = 0; double lon = 0; if (message is NmeaParser.Messages.Garmin.Pgrme) { m_Accuracy = ((NmeaParser.Messages.Garmin.Pgrme)message).HorizontalError; } else if (message is NmeaParser.Messages.Gst) { Gst = ((NmeaParser.Messages.Gst)message); m_Accuracy = Math.Sqrt(Gst.SigmaLatitudeError * Gst.SigmaLatitudeError + Gst.SigmaLongitudeError * Gst.SigmaLongitudeError); } else if (message is NmeaParser.Messages.Gga) { Gga = ((NmeaParser.Messages.Gga)message); isNewFix = Gga.Quality != NmeaParser.Messages.Gga.FixQuality.Invalid; lostFix = !isNewFix; m_altitude = Gga.Altitude; lat = Gga.Latitude; lon = Gga.Longitude; } else if (message is NmeaParser.Messages.Rmc) { Rmc = (NmeaParser.Messages.Rmc)message; if (Rmc.Active) { isNewFix = true; m_speed = Rmc.Speed; m_course = Rmc.Course; lat = Rmc.Latitude; lon = Rmc.Longitude; } else { lostFix = true; } } else if (message is NmeaParser.Messages.Gsa) { Gsa = (NmeaParser.Messages.Gsa)message; } if (isNewFix) { base.UpdateLocation(new Esri.ArcGISRuntime.Location.Location(new MapPoint(lon, lat, m_altitude, SpatialReferences.Wgs84), m_Accuracy, m_speed, m_course, false)); } else if (lostFix) { } }