Exemple #1
0
        public void TestGpgns()
        {
            string input = "$GPGNS,224749.00,3333.4268304,N,11153.3538273,W,D,19,0.6,406.110,-26.294,6.0,0138,S*6A";
            var    msg   = NmeaMessage.Parse(input);

            Assert.IsInstanceOfType(msg, typeof(Gns));
            Gns gns = (Gns)msg;

            Assert.AreEqual(new TimeSpan(0, 22, 47, 49, 0), gns.FixTime);
            Assert.AreEqual(33.55711384, gns.Latitude, .000000000001);
            Assert.AreEqual(-111.889230455, gns.Longitude, .000000000001);
            Assert.AreEqual(Gns.Mode.Differential, gns.GpsModeIndicator);
            Assert.AreEqual(Gns.Mode.NoFix, gns.GlonassModeIndicator);
            Assert.AreEqual(Gns.Mode.NoFix, gns.GalileoModeIndicator);
            Assert.AreEqual(Gns.Mode.NoFix, gns.BDSModeIndicator);
            Assert.AreEqual(Gns.Mode.NoFix, gns.QZSSModeIndicator);
            Assert.AreEqual(1, gns.ModeIndicators.Length);
            Assert.AreEqual(19, gns.NumberOfSatellites);
            Assert.AreEqual(.6, gns.Hdop);
            Assert.AreEqual(406.110, gns.OrthometricHeight);
            Assert.AreEqual(-26.294, gns.GeoidalSeparation);
            Assert.AreEqual("0138", gns.DgpsStationId);
            Assert.AreEqual(Gns.NavigationalStatus.Safe, gns.Status);
            Assert.AreEqual(TimeSpan.FromSeconds(6), gns.TimeSinceLastDgpsUpdate);
        }
Exemple #2
0
        public void TestGpgns_NoData()
        {
            string input = "$GPGNS,235720.00,,,,,,6,,,,2.0,0*48";
            var    msg   = NmeaMessage.Parse(input);

            Assert.IsInstanceOfType(msg, typeof(Gns));
            Gns gns = (Gns)msg;

            Assert.AreEqual(Talker.GlobalPositioningSystem, gns.TalkerId);
            Assert.AreEqual(new TimeSpan(0, 23, 57, 20, 0), gns.FixTime);
            Assert.AreEqual(double.NaN, gns.Latitude);
            Assert.AreEqual(double.NaN, gns.Longitude);
            Assert.AreEqual(Gns.Mode.NoFix, gns.GpsModeIndicator);
            Assert.AreEqual(Gns.Mode.NoFix, gns.GlonassModeIndicator);
            Assert.AreEqual(Gns.Mode.NoFix, gns.GalileoModeIndicator);
            Assert.AreEqual(Gns.Mode.NoFix, gns.BDSModeIndicator);
            Assert.AreEqual(Gns.Mode.NoFix, gns.QZSSModeIndicator);
            Assert.AreEqual(0, gns.ModeIndicators.Length);
            Assert.AreEqual(6, gns.NumberOfSatellites);
            Assert.AreEqual(double.NaN, gns.Hdop);
            Assert.AreEqual(double.NaN, gns.OrthometricHeight);
            Assert.AreEqual(double.NaN, gns.GeoidalSeparation);
            Assert.AreEqual(TimeSpan.FromSeconds(2), gns.TimeSinceLastDgpsUpdate);
            Assert.AreEqual("0", gns.DgpsStationId);
        }
Exemple #3
0
            protected override IPacket DecodeCore(List <string> message)
            {
                var ret = new Gns();

                if (message == null || message.Count < 12)
                {
                    throw new ArgumentException("Invalid GNS", "message");
                }
                ret.FixTime   = StringToTimeSpan(message[0]);
                ret.Latitude  = StringToLatitude(message[1], message[2]);
                ret.Longitude = StringToLongitude(message[3], message[4]);
                if (message[5].Length > 0)
                {
                    ret.GpsModeIndicator = ParseModeIndicator(message[5][0]);
                }
                if (message[5].Length > 1)
                {
                    ret.GlonassModeIndicator = ParseModeIndicator(message[5][1]);
                }
                ret.FutureModeIndicator = message[5].Length > 2 ? message[5].Skip(2).Select(ParseModeIndicator).ToArray() : new Mode[] { };
                ret.NumberOfSatellites  = int.Parse(message[6], CultureInfo.InvariantCulture);
                ret.Hdop              = StringToDouble(message[7]);
                ret.OrhometricHeight  = StringToDouble(message[8]);
                ret.GeoidalSeparation = StringToDouble(message[9]);
                var timeInSeconds = StringToDouble(message[10]);

                ret.TimeSinceLastDgpsUpdate = !double.IsNaN(timeInSeconds) ? TimeSpan.FromSeconds(timeInSeconds) : TimeSpan.MaxValue;
                ret.DgpsStationId           = message[11].Length > 0 ? int.Parse(message[1], CultureInfo.InvariantCulture) : -1;

                if (message.Count <= 12)
                {
                    return(ret);
                }
                ret.Status = message[12] switch
                {
                    "S" => NavigationalStatus.Safe,
                    "C" => NavigationalStatus.Caution,
                    "U" => NavigationalStatus.Unsafe,
                    "V" => NavigationalStatus.NotValid,
                    _ => NavigationalStatus.NotValid
                };
                return(ret);
            }