コード例 #1
0
        public void TestGpgsv()
        {
            string input = "$GPGSV,3,3,11,22,42,067,42,75,14,311,43,50,05,244,00,,,,*49";
            var    msg   = NmeaMessage.Parse(input);

            Assert.IsInstanceOfType(msg, typeof(Gpgsv));
            Gpgsv gsv = (Gpgsv)msg;

            Assert.AreEqual(3, gsv.TotalMessages);
            Assert.AreEqual(3, gsv.MessageNumber);
            Assert.AreEqual(11, gsv.SVsInView);
            Assert.IsNotNull(gsv.SVs);
            Assert.AreEqual(3, gsv.SVs.Count);
            var sv = gsv.SVs[0];

            Assert.AreEqual(22, sv.PrnNumber);
            Assert.AreEqual(42, sv.Elevation);
            Assert.AreEqual(67, sv.Azimuth);
            Assert.AreEqual(42, sv.SignalToNoiseRatio);
            Assert.AreEqual(SatelliteSystem.Gps, sv.System);

            sv = gsv.SVs[1];
            Assert.AreEqual(75, sv.PrnNumber);
            Assert.AreEqual(14, sv.Elevation);
            Assert.AreEqual(311, sv.Azimuth);
            Assert.AreEqual(43, sv.SignalToNoiseRatio);
            Assert.AreEqual(SatelliteSystem.Glonass, sv.System);

            sv = gsv.SVs[2];
            Assert.AreEqual(50, sv.PrnNumber);
            Assert.AreEqual(5, sv.Elevation);
            Assert.AreEqual(244, sv.Azimuth);
            Assert.AreEqual(00, sv.SignalToNoiseRatio);
            Assert.AreEqual(SatelliteSystem.Waas, sv.System);
        }
コード例 #2
0
        /// <summary>
        /// Event handler for the SerialGPS, parses the NMEA message and updates CurrentGeopoint.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _serialGPSDevice_MessageReceived(object sender, NmeaMessageReceivedEventArgs e)
        {
            if (!_serialGPSDeviceFound)
            {
                _serialGPSDeviceFound = true;
            }

            double Latitude = 0.0, Longitude = 0.0;

            NMEAMessage = e.Message.ToString();

            //Parse all NMEA messages supported by BU353-s4.
            //Only GGA, RMC, and GLL support location
            switch (e.Message.MessageType)
            {
            case "GPGGA":
                Gpgga gga = (Gpgga)e.Message;
                Latitude  = gga.Latitude;
                Longitude = gga.Longitude;

                break;

            case "GPRMC":
                Gprmc rmc = (Gprmc)e.Message;
                Latitude  = rmc.Latitude;
                Longitude = rmc.Longitude;

                break;

            case "GPGLL":
                Gpgll gll = (Gpgll)e.Message;
                Latitude  = gll.Latitude;
                Longitude = gll.Longitude;

                break;

            case "GPGSA":
                Gpgsa gsa = (Gpgsa)e.Message;

                break;

            case "GPGSV":
                Gpgsv gsv = (Gpgsv)e.Message;
                break;
            }

            //make sure the delta-p is above a threshold
            if (Latitude != 0.0 && Longitude != 0.0)
            {
                double distance = Haversine(Latitude, Longitude, CurrentGeopoint.Position.Latitude, CurrentGeopoint.Position.Longitude);
                if (distance > 0) //2.5m is minimum accuracy of BU-353 S4 and WAAS/SBAS corrections
                {
                    CurrentGeopoint = CreateGeopoint(Latitude, Longitude);
                }
            }
        }
コード例 #3
0
        private void NmeaStreamDevice_MessageReceived(object sender, NmeaMessageReceivedEventArgs e)
        {
            if (!messageStats.ContainsKey(e.Message.MessageType))
            {
                messageStats.Add(e.Message.MessageType, 0);
            }
            messageStats[e.Message.MessageType]++;

            switch (e.Message.MessageType)
            {
            case "GPGSV":
                Gpgsv gpgsv = (Gpgsv)e.Message;
                numSattelites = gpgsv.SVsInView;
                break;

            case "GPGLL":       //enthält GPS Daten
                Gpgll gpgll = (Gpgll)e.Message;
                if (gpgll.DataActive)
                {
                    lon            = gpgll.Longitude;
                    lat            = gpgll.Latitude;
                    validGpsSignal = true;
                    gpsLlTimestamp = DateTime.Now;
                }
                break;

            case "GPGSA":
                Gpgsa gpgsa = (Gpgsa)e.Message;
                fixMode = gpgsa.FixMode;
                break;

            case "GPRMC":       //enthält GPS Daten
                Gprmc gprmc = (Gprmc)e.Message;
                break;

            case "GPVTG":
                break;

            case "GPZDA":
                break;

            case "GPGGA":       //enthält GPS Daten
                Gpgga gpgga = (Gpgga)e.Message;
                altitude = gpgga.Altitude;
                break;

            default:
                lock (lockVictim)
                {
                    tourStreamWriter.WriteLine(String.Format("UNIMP_GPS;", e.Message.ToString()));
                }
                break;
            }
        }
コード例 #4
0
        public void TestGpgsv_Empty()
        {
            string input = "$GPGSV,1,1,0,,,,,,,,,,,,,,,,*49";
            var    msg   = NmeaMessage.Parse(input);

            Assert.IsInstanceOfType(msg, typeof(Gpgsv));
            Gpgsv gsv = (Gpgsv)msg;

            Assert.AreEqual(1, gsv.TotalMessages);
            Assert.AreEqual(1, gsv.MessageNumber);
            Assert.AreEqual(0, gsv.SVsInView);
            Assert.IsNotNull(gsv.SVs);
            Assert.AreEqual(0, gsv.SVs.Count);
        }