diff --git a/src/NmeaParser.Shared/Nmea/Gps/GPGGA.cs b/src/NmeaParser.Shared/Nmea/Gps/GPGGA.cs
index 95a510f..436655a 100644
--- a/src/NmeaParser.Shared/Nmea/Gps/GPGGA.cs
+++ b/src/NmeaParser.Shared/Nmea/Gps/GPGGA.cs
@@ -24,7 +24,7 @@ using System.Threading.Tasks;
namespace NmeaParser.Nmea.Gps
{
///
- /// Recommended Minimum
+ /// Global Positioning System Fix Data
///
[NmeaMessageType(Type = "GPGGA")]
public class Gpgga : NmeaMessage
@@ -58,10 +58,16 @@ namespace NmeaParser.Nmea.Gps
AltitudeUnits = message[9];
HeightOfGeoid = double.Parse(message[10], CultureInfo.InvariantCulture);
HeightOfGeoidUnits = message[11];
- if (message[12].Length > 0)
- TimeSinceLastDgpsUpdate = TimeSpan.FromSeconds(int.Parse(message[12], CultureInfo.InvariantCulture));
+ if (message[0].Length == 6)
+ {
+ TimeSinceLastDgpsUpdate = new TimeSpan(int.Parse(message[0].Substring(0, 2)),
+ int.Parse(message[0].Substring(2, 2)),
+ int.Parse(message[0].Substring(4, 2)));
+ }
if (message[13].Length > 0)
DgpsStationID = int.Parse(message[13], CultureInfo.InvariantCulture);
+ else
+ DgpsStationID = -1;
}
///
diff --git a/src/NmeaParser.Tests/NmeaMessages.cs b/src/NmeaParser.Tests/NmeaMessages.cs
index 14497ce..cf155f7 100644
--- a/src/NmeaParser.Tests/NmeaMessages.cs
+++ b/src/NmeaParser.Tests/NmeaMessages.cs
@@ -30,13 +30,35 @@ namespace NmeaParser.Tests
[TestMethod]
public void TestGprmc()
{
- string input = "$GPRMC,123519,A,4807.038,S,01131.000,W,022.4,084.4,230313,003.1,W*6E";
+ string input = "$GPRMC,123519,A,4807.038,S,01131.000,W,022.4,084.4,230313,003.1,W*6A";
var msg = NmeaMessage.Parse(input);
Assert.IsInstanceOfType(msg, typeof(Gprmc));
Gprmc rmc = (Gprmc)msg;
- Assert.AreEqual(new DateTime(23, 03, 2013, 12, 35, 19, DateTimeKind.Utc), rmc.FixTime);
+ Assert.AreEqual(new DateTime(2013, 03, 23, 12, 35, 19, DateTimeKind.Utc), rmc.FixTime);
+ Assert.AreEqual(-48.1173, rmc.Latitude);
+ Assert.AreEqual(-11.516666666666667, rmc.Longitude, 0.0000000001);
}
+ [TestMethod]
+ public void TestGpgga()
+ {
+ string input = "$GPGGA,235236,3925.9479,N,11945.9211,W,1,10,0.8,1378.0,M,-22.1,M,,*46";
+ var msg = NmeaMessage.Parse(input);
+ Assert.IsInstanceOfType(msg, typeof(Gpgga));
+ Gpgga gga = (Gpgga)msg;
+ Assert.AreEqual(new TimeSpan(23, 52, 36), gga.TimeSinceLastDgpsUpdate);
+ Assert.AreEqual(39.432465, gga.Latitude);
+ Assert.AreEqual(-119.7653516666666667, gga.Longitude, 0.0000000001);
+ Assert.AreEqual(NmeaParser.Nmea.Gps.Gpgga.FixQuality.GpsFix, gga.Quality);
+ Assert.AreEqual(10, gga.NumberOfSatellites);
+ Assert.AreEqual(.8, gga.Hdop);
+ Assert.AreEqual(1378, gga.Altitude);
+ Assert.AreEqual("M", gga.AltitudeUnits);
+ Assert.AreEqual(-22.1, gga.HeightOfGeoid);
+ Assert.AreEqual("M", gga.HeightOfGeoidUnits);
+ Assert.AreEqual(-1, gga.DgpsStationID);
+ }
+
[TestMethod]
public void TestPtlna()
{