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
 }
Esempio n. 2
0
        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)
            {
            }
        }