From 8386718266d68da21cc585f217bb0311e6277f8e Mon Sep 17 00:00:00 2001 From: david-chambers Date: Wed, 7 Jun 2017 16:18:23 -0400 Subject: [PATCH 1/4] Add GNGST message --- src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs | 80 +++++++++++++++++++ .../NmeaParser.Shared.projitems | 1 + 2 files changed, 81 insertions(+) create mode 100644 src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs diff --git a/src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs b/src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs new file mode 100644 index 0000000..953e016 --- /dev/null +++ b/src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs @@ -0,0 +1,80 @@ +using System; + +namespace NmeaParser.Nmea.Gnss +{ + /// + /// Position error statistics + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gngst")] + [NmeaMessageType("GNGST")] + public class Gngst : NmeaMessage + { + /// + /// Called when the message is being loaded. + /// + /// The NMEA message values. + protected override void OnLoadMessage(string[] message) + { + if (message == null || message.Length < 8) + throw new ArgumentException("Invalid GNGST", "message"); + FixTime = StringToTimeSpan(message[0]); + Rms = NmeaMessage.StringToDouble(message[1]); + SemiMajorError = NmeaMessage.StringToDouble(message[2]); + SemiMinorError = NmeaMessage.StringToDouble(message[3]); + ErrorOrientation = NmeaMessage.StringToDouble(message[4]); + SigmaLatitudeError = NmeaMessage.StringToDouble(message[5]); + SigmaLongitudeError = NmeaMessage.StringToDouble(message[6]); + SigmaHeightError = NmeaMessage.StringToDouble(message[7]); + } + + /// + /// UTC of position fix + /// + public TimeSpan FixTime { get; private set; } + + /// + /// RMS value of the pseudorange residuals; includes carrier phase residuals during periods of RTK (float) and RTK (fixed) processing + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Rms")] + public double Rms { get; private set; } + + /// + /// Error ellipse semi-major axis 1 sigma error, in meters + /// + public double SemiMajorError { get; private set; } + + /// + /// Error ellipse semi-minor axis 1 sigma error, in meters + /// + public double SemiMinorError { get; private set; } + + /// + /// Error ellipse orientation, degrees from true north + /// + public double ErrorOrientation { get; private set; } + + /// + /// Latitude 1 sigma error, in meters + /// + /// + /// The error expressed as one standard deviation. + /// + public double SigmaLatitudeError { get; private set; } + + /// + /// Longitude 1 sigma error, in meters + /// + /// + /// The error expressed as one standard deviation. + /// + public double SigmaLongitudeError { get; private set; } + + /// + /// Height 1 sigma error, in meters + /// + /// + /// The error expressed as one standard deviation. + /// + public double SigmaHeightError { get; private set; } + } +} diff --git a/src/NmeaParser.Shared/NmeaParser.Shared.projitems b/src/NmeaParser.Shared/NmeaParser.Shared.projitems index 8cc777b..745fabb 100644 --- a/src/NmeaParser.Shared/NmeaParser.Shared.projitems +++ b/src/NmeaParser.Shared/NmeaParser.Shared.projitems @@ -13,6 +13,7 @@ + From ef06cafade9872c197a5f5c53d7c3d5dbacc9339 Mon Sep 17 00:00:00 2001 From: david-chambers Date: Thu, 8 Jun 2017 13:20:02 -0400 Subject: [PATCH 2/4] Add code analysis suppressions --- src/GlobalSuppressions.cs | Bin 3620 -> 4372 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/GlobalSuppressions.cs b/src/GlobalSuppressions.cs index e44cc61e8c32caff40db6501a76f58e34b5fe7ab..eb6aa262ff98b875f5e2b004af981929790fdc55 100644 GIT binary patch delta 194 zcmZ1?Gev2G3g6~e>>iBl?hJVh#SF!h@3T*@_hU$8$Ysa`ilj3rG3YQT07+*CM+QR% za|Qzj69y{=PlgnRRG@qbP*oZbr!o`)bq6zKFyu3oGUNbdoq%G&3DkF2h^g;5X->Jzy-zt Dm--~& delta 7 OcmbQDv_xiu3LgLp=>k~* From 6b7bdec066c682361efa336c13d97c2ab127d41c Mon Sep 17 00:00:00 2001 From: david-chambers Date: Thu, 8 Jun 2017 13:20:25 -0400 Subject: [PATCH 3/4] Add Gngst unit test --- src/NmeaParser.Tests/NmeaMessages.cs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/NmeaParser.Tests/NmeaMessages.cs b/src/NmeaParser.Tests/NmeaMessages.cs index 77ad5d7..19a188e 100644 --- a/src/NmeaParser.Tests/NmeaMessages.cs +++ b/src/NmeaParser.Tests/NmeaMessages.cs @@ -1,4 +1,4 @@ -// +// // Copyright (c) 2014 Morten Nielsen // // Licensed under the Microsoft Public License (Ms-PL) (the "License"); @@ -23,6 +23,7 @@ using NmeaParser.Nmea; using NmeaParser.Nmea.Gps; using System.Threading.Tasks; using System.IO; +using NmeaParser.Nmea.Gnss; namespace NmeaParser.Tests { @@ -374,5 +375,22 @@ namespace NmeaParser.Tests Assert.AreEqual(0.020, gst.SigmaLongitudeError); Assert.AreEqual(0.031, gst.SigmaHeightError); } - } + + [TestMethod] + public void TestGngst() + { + string input = "$GNGST,172814.0,0.006,0.023,0.020,273.6,0.023,0.020,0.031*74"; + var msg = NmeaMessage.Parse(input); + Assert.IsInstanceOfType(msg, typeof(Gngst)); + Gngst gst = (Gngst)msg; + Assert.AreEqual(new TimeSpan(17, 28, 14), gst.FixTime); + Assert.AreEqual(0.006, gst.Rms); + Assert.AreEqual(0.023, gst.SemiMajorError); + Assert.AreEqual(0.02, gst.SemiMinorError); + Assert.AreEqual(273.6, gst.ErrorOrientation); + Assert.AreEqual(0.023, gst.SigmaLatitudeError); + Assert.AreEqual(0.020, gst.SigmaLongitudeError); + Assert.AreEqual(0.031, gst.SigmaHeightError); + } + } } From 848be8469535da87459e607e9327de3321b430d8 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Thu, 8 Jun 2017 15:40:44 -0400 Subject: [PATCH 4/4] Add formatting --- src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs b/src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs index 953e016..c195448 100644 --- a/src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs +++ b/src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs @@ -28,9 +28,9 @@ namespace NmeaParser.Nmea.Gnss } /// - /// UTC of position fix - /// - public TimeSpan FixTime { get; private set; } + /// UTC of position fix + /// + public TimeSpan FixTime { get; private set; } /// /// RMS value of the pseudorange residuals; includes carrier phase residuals during periods of RTK (float) and RTK (fixed) processing