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); }
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); }
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); }