Added support for WinDesktop

This commit is contained in:
mort5161 2014-07-25 11:25:18 -07:00
parent 254da8a14c
commit c5150bba41
26 changed files with 410 additions and 188 deletions

View file

@ -0,0 +1,106 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NmeaParser.Nmea.Gps
{
/// <summary>
/// Recommended Minimum
/// </summary>
[NmeaMessageType(Type = "GPGGA")]
public class Gpgga : NmeaMessage
{
public enum FixQuality : int
{
Invalid = 0,
GpsFix = 1,
DgpsFix = 2,
PpsFix = 3,
Rtk = 4,
FloatRtk = 5,
Estimated = 6,
ManualInput = 7,
Simulation = 8
}
protected override void LoadMessage(string[] message)
{
var time = message[0];
Latitude = int.Parse(message[1].Substring(0, 2), CultureInfo.InvariantCulture) + double.Parse(message[1].Substring(2), CultureInfo.InvariantCulture) / 60;
if (message[2] == "S")
Latitude *= -1;
Longitude = int.Parse(message[3].Substring(0, 3), CultureInfo.InvariantCulture) + double.Parse(message[3].Substring(3), CultureInfo.InvariantCulture) / 60;
if (message[4] == "W")
Latitude *= -1;
Quality = (FixQuality)int.Parse(message[5], CultureInfo.InvariantCulture);
NumberOfSatellites = int.Parse(message[6], CultureInfo.InvariantCulture);
Hdop = double.Parse(message[7], CultureInfo.InvariantCulture);
Altitude = double.Parse(message[8], CultureInfo.InvariantCulture);
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[13].Length > 0)
DgpsStationID = int.Parse(message[13], CultureInfo.InvariantCulture);
}
/// <summary>
/// Latitude
/// </summary>
public double Latitude { get; private set; }
/// <summary>
/// Longitude
/// </summary>
public double Longitude { get; private set; }
/// <summary>
/// Fix Quality
/// </summary>
public FixQuality Quality { get; private set; }
/// <summary>
/// Number of satellites being tracked
/// </summary>
public int NumberOfSatellites { get; private set; }
/// <summary>
/// Horizontal Dilution of Precision
/// </summary>
public double Hdop { get; private set; }
/// <summary>
/// Altitude
/// </summary>
public double Altitude { get; private set; }
/// <summary>
/// Altitude units ('M' for Meters)
/// </summary>
public string AltitudeUnits { get; private set; }
/// <summary>
/// Height of geoid (mean sea level) above WGS84
/// </summary>
public double HeightOfGeoid { get; private set; }
/// <summary>
/// Altitude units ('M' for Meters)
/// </summary>
public string HeightOfGeoidUnits { get; private set; }
/// <summary>
/// Time since last DGPS update
/// </summary>
public TimeSpan TimeSinceLastDgpsUpdate { get; set; }
/// <summary>
/// DGPS Station ID Number
/// </summary>
public int DgpsStationID { get; set; }
}
}

View file

@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NmeaParser.Nmea.Gps
{
/// <summary>
/// Recommended Minimum
/// </summary>
[NmeaMessageType(Type = "GPRMC")]
public class Gprmc : NmeaMessage
{
protected override void LoadMessage(string[] message)
{
FixTime = new DateTime(int.Parse(message[8].Substring(4, 2)) + 2000,
int.Parse(message[8].Substring(2, 2)),
int.Parse(message[8].Substring(0, 2)),
int.Parse(message[0].Substring(0, 2)),
int.Parse(message[0].Substring(2, 2)),
int.Parse(message[0].Substring(4, 2)), DateTimeKind.Utc);
Active = (message[1] == "A");
Latitude = int.Parse(message[2].Substring(0, 2), CultureInfo.InvariantCulture) + double.Parse(message[2].Substring(2), CultureInfo.InvariantCulture) / 60;
if (message[3] == "S")
Latitude *= -1;
Longitude = int.Parse(message[4].Substring(0, 3), CultureInfo.InvariantCulture) + double.Parse(message[4].Substring(3), CultureInfo.InvariantCulture) / 60;
if (message[5] == "W")
Latitude *= -1;
Speed = double.Parse(message[6], CultureInfo.InvariantCulture);
Course = double.Parse(message[7], CultureInfo.InvariantCulture);
MagneticVariation = double.Parse(message[9], CultureInfo.InvariantCulture);
if (message[10] == "W")
MagneticVariation *= -1;
}
/// <summary>
/// Fix Time
/// </summary>
public DateTime FixTime { get; private set; }
/// <summary>
/// Gets a value whether the device is active
/// </summary>
public bool Active { get; private set; }
/// <summary>
/// Latitude
/// </summary>
public double Latitude { get; private set; }
/// <summary>
/// Longitude
/// </summary>
public double Longitude { get; private set; }
/// <summary>
/// Speed over the ground in knots
/// </summary>
public double Speed { get; private set; }
/// <summary>
/// Track angle in degrees True
/// </summary>
public double Course { get; private set; }
/// <summary>
/// Magnetic Variation
/// </summary>
public double MagneticVariation { get; private set; }
}
}

View file

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BTDevices.Nmea.Gps
{
/// <summary>
/// Recommended Minimum
/// </summary>
[NmeaMessageType(Type = "PGRME")]
public class Pgrme : NmeaMessage
{
protected override void LoadMessage(string[] message)
{
HorizontalError = double.Parse(message[0], CultureInfo.InvariantCulture);
HorizontalErrorUnits = message[1];
VerticalError = double.Parse(message[2], CultureInfo.InvariantCulture);
VerticalErrorUnits = message[3];
SphericalError = double.Parse(message[4], CultureInfo.InvariantCulture);
SphericalErrorUnits = message[5];
}
/// <summary>
/// Estimated horizontal position error in meters (HPE)
/// </summary>
public double HorizontalError { get; private set; }
/// <summary>
/// Horizontal Error unit ('M' for Meters)
/// </summary>
public string HorizontalErrorUnits { get; private set; }
/// <summary>
/// Estimated vertical position error in meters (VPE)
/// </summary>
public double VerticalError { get; private set; }
/// <summary>
/// Vertical Error unit ('M' for Meters)
/// </summary>
public string VerticalErrorUnits { get; private set; }
/// <summary>
/// Overall spherical equivalent position error
/// </summary>
public double SphericalError { get; private set; }
/// <summary>
/// Spherical Error unit ('M' for Meters)
/// </summary>
public string SphericalErrorUnits { get; private set; }
}
}