mirror of
https://github.com/dotMorten/NmeaParser.git
synced 2026-01-04 15:50:27 +01:00
Addressed all code analysis warnings (note: Some minor breaking changes to follow naming guidelines)
This commit is contained in:
parent
32b9a8b9eb
commit
9c37a40bc0
37
src/CustomDictionary.xml
Normal file
37
src/CustomDictionary.xml
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<Dictionary>
|
||||
<Words>
|
||||
<Recognized>
|
||||
<Word>Nmea</Word>
|
||||
</Recognized>
|
||||
<Recognized>
|
||||
<Word>Gps</Word>
|
||||
</Recognized>
|
||||
<Recognized>
|
||||
<Word>Dgps</Word>
|
||||
</Recognized>
|
||||
<!--
|
||||
<Unrecognized>
|
||||
<Word>Gps</Word>
|
||||
</Unrecognized>
|
||||
<Unrecognized>
|
||||
<Word>Nmea</Word>
|
||||
</Unrecognized>
|
||||
<Deprecated>
|
||||
<Term PreferredAlternate=""></Term>
|
||||
</Deprecated>
|
||||
<Compound>
|
||||
<Term CompoundAlternate=""></Term>
|
||||
</Compound>
|
||||
<DiscreteExceptions>
|
||||
<Term></Term>
|
||||
</DiscreteExceptions>
|
||||
-->
|
||||
</Words>
|
||||
<!--<Acronyms>
|
||||
<CasingExceptions>
|
||||
<Acronym>Gps</Acronym>
|
||||
<Acronym>Nmea</Acronym>
|
||||
<Acronym>Dgps</Acronym>
|
||||
</CasingExceptions>
|
||||
</Acronyms> -->
|
||||
</Dictionary>
|
||||
BIN
src/GlobalSuppressions.cs
Normal file
BIN
src/GlobalSuppressions.cs
Normal file
Binary file not shown.
|
|
@ -32,10 +32,16 @@ namespace NmeaParser
|
|||
BufferedStream m_stream;
|
||||
int m_readSpeed;
|
||||
/// <summary>
|
||||
///
|
||||
/// Initializes a new instance of the <see cref="BufferedStreamDevice"/> class.
|
||||
/// </summary>
|
||||
protected BufferedStreamDevice() : this(200)
|
||||
{
|
||||
}
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="BufferedStreamDevice"/> class.
|
||||
/// </summary>
|
||||
/// <param name="readSpeed">The time to wait between each line being read in milliseconds</param>
|
||||
protected BufferedStreamDevice( int readSpeed = 200)
|
||||
protected BufferedStreamDevice(int readSpeed)
|
||||
{
|
||||
m_readSpeed = readSpeed;
|
||||
}
|
||||
|
|
@ -44,6 +50,7 @@ namespace NmeaParser
|
|||
/// Gets the stream to perform buffer reads on.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")]
|
||||
protected abstract Task<System.IO.Stream> GetStreamAsync();
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -74,8 +81,8 @@ namespace NmeaParser
|
|||
private class BufferedStream : Stream
|
||||
{
|
||||
StreamReader m_sr;
|
||||
byte[] buffer = new byte[0];
|
||||
System.Threading.Timer timer;
|
||||
byte[] m_buffer = new byte[0];
|
||||
System.Threading.Timer m_timer;
|
||||
object lockObj = new object();
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="BufferedStream"/> class.
|
||||
|
|
@ -85,7 +92,7 @@ namespace NmeaParser
|
|||
public BufferedStream(StreamReader stream, int readSpeed)
|
||||
{
|
||||
m_sr = stream;
|
||||
timer = new System.Threading.Timer(OnRead, null, 0, readSpeed); //add a new line to buffer every 100 ms
|
||||
m_timer = new System.Threading.Timer(OnRead, null, 0, readSpeed); //add a new line to buffer every 100 ms
|
||||
}
|
||||
private void OnRead(object state)
|
||||
{
|
||||
|
|
@ -97,10 +104,10 @@ namespace NmeaParser
|
|||
var bytes = Encoding.UTF8.GetBytes(line);
|
||||
lock (lockObj)
|
||||
{
|
||||
byte[] newBuffer = new byte[buffer.Length + bytes.Length];
|
||||
buffer.CopyTo(newBuffer, 0);
|
||||
bytes.CopyTo(newBuffer, buffer.Length);
|
||||
buffer = newBuffer;
|
||||
byte[] newBuffer = new byte[m_buffer.Length + bytes.Length];
|
||||
m_buffer.CopyTo(newBuffer, 0);
|
||||
bytes.CopyTo(newBuffer, m_buffer.Length);
|
||||
m_buffer = newBuffer;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
|
|
@ -162,19 +169,19 @@ namespace NmeaParser
|
|||
{
|
||||
lock (lockObj)
|
||||
{
|
||||
if (this.buffer.Length <= count)
|
||||
if (this.m_buffer.Length <= count)
|
||||
{
|
||||
int length = this.buffer.Length;
|
||||
this.buffer.CopyTo(buffer, 0);
|
||||
this.buffer = new byte[0];
|
||||
int length = this.m_buffer.Length;
|
||||
this.m_buffer.CopyTo(buffer, 0);
|
||||
this.m_buffer = new byte[0];
|
||||
return length;
|
||||
}
|
||||
else
|
||||
{
|
||||
Array.Copy(this.buffer, buffer, count);
|
||||
byte[] newBuffer = new byte[this.buffer.Length - count];
|
||||
Array.Copy(this.buffer, count, newBuffer, 0, newBuffer.Length);
|
||||
this.buffer = newBuffer;
|
||||
Array.Copy(this.m_buffer, buffer, count);
|
||||
byte[] newBuffer = new byte[this.m_buffer.Length - count];
|
||||
Array.Copy(this.m_buffer, count, newBuffer, 0, newBuffer.Length);
|
||||
this.m_buffer = newBuffer;
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
|
@ -203,7 +210,7 @@ namespace NmeaParser
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the specified buffer.
|
||||
/// Writes the specified buffer to the device.
|
||||
/// </summary>
|
||||
/// <param name="buffer">The buffer.</param>
|
||||
/// <param name="offset">The offset.</param>
|
||||
|
|
@ -222,7 +229,7 @@ namespace NmeaParser
|
|||
{
|
||||
base.Dispose(disposing);
|
||||
m_sr.Dispose();
|
||||
timer.Dispose();
|
||||
m_timer.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Bearing Origin to Destination
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "GPBOD")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpbod")]
|
||||
[NmeaMessageType("GPBOD")]
|
||||
public class Gpbod : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -35,6 +36,8 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 3)
|
||||
throw new ArgumentException("Invalid GPBOD", "message");
|
||||
if (message[0].Length > 0)
|
||||
TrueBearing = double.Parse(message[0], CultureInfo.InvariantCulture);
|
||||
else
|
||||
|
|
@ -44,9 +47,9 @@ namespace NmeaParser.Nmea.Gps
|
|||
else
|
||||
MagneticBearing = double.NaN;
|
||||
if (message.Length > 4 && !string.IsNullOrEmpty(message[4]))
|
||||
DestinationID = message[4];
|
||||
DestinationId = message[4];
|
||||
if (message.Length > 5 && !string.IsNullOrEmpty(message[5]))
|
||||
OriginID = message[5];
|
||||
OriginId = message[5];
|
||||
}
|
||||
/// <summary>
|
||||
/// True Bearing from start to destination
|
||||
|
|
@ -61,11 +64,11 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Name of origin
|
||||
/// </summary>
|
||||
public string OriginID { get; set; }
|
||||
public string OriginId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Name of destination
|
||||
/// </summary>
|
||||
public string DestinationID { get; set; }
|
||||
public string DestinationId { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Global Positioning System Fix Data
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "GPGGA")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpgga")]
|
||||
[NmeaMessageType("GPGGA")]
|
||||
public class Gpgga : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -39,12 +40,16 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>GPS</summary>
|
||||
GpsFix = 1,
|
||||
/// <summary>Differential GPS</summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Dgps")]
|
||||
DgpsFix = 2,
|
||||
/// <summary>Precise Positioning Service</summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Pps")]
|
||||
PpsFix = 3,
|
||||
/// <summary>Real Time Kinematic (Fixed)</summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Rtk")]
|
||||
Rtk = 4,
|
||||
/// <summary>Real Time Kinematic (Floating)</summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Rtk")]
|
||||
FloatRtk = 5,
|
||||
/// <summary>Estimated</summary>
|
||||
Estimated = 6,
|
||||
|
|
@ -60,7 +65,8 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
var time = message[0];
|
||||
if (message == null || message.Length < 14)
|
||||
throw new ArgumentException("Invalid GPGGA", "message");
|
||||
Latitude = NmeaMessage.StringToLatitude(message[1], message[2]);
|
||||
Longitude = NmeaMessage.StringToLongitude(message[3], message[4]);
|
||||
Quality = (FixQuality)int.Parse(message[5], CultureInfo.InvariantCulture);
|
||||
|
|
@ -72,14 +78,14 @@ namespace NmeaParser.Nmea.Gps
|
|||
HeightOfGeoidUnits = message[11];
|
||||
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)));
|
||||
TimeSinceLastDgpsUpdate = new TimeSpan(int.Parse(message[0].Substring(0, 2), CultureInfo.InvariantCulture),
|
||||
int.Parse(message[0].Substring(2, 2), CultureInfo.InvariantCulture),
|
||||
int.Parse(message[0].Substring(4, 2), CultureInfo.InvariantCulture));
|
||||
}
|
||||
if (message[13].Length > 0)
|
||||
DgpsStationID = int.Parse(message[13], CultureInfo.InvariantCulture);
|
||||
DgpsStationId = int.Parse(message[13], CultureInfo.InvariantCulture);
|
||||
else
|
||||
DgpsStationID = -1;
|
||||
DgpsStationId = -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -105,6 +111,7 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Horizontal Dilution of Precision
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hdop")]
|
||||
public double Hdop { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -135,6 +142,6 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// DGPS Station ID Number
|
||||
/// </summary>
|
||||
public int DgpsStationID { get; set; }
|
||||
public int DgpsStationId { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Geographic position, latitude / longitude
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "GPGLL")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpgll")]
|
||||
[NmeaMessageType("GPGLL")]
|
||||
public class Gpgll : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -35,14 +36,15 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
var time = message[0];
|
||||
if (message == null || message.Length < 4)
|
||||
throw new ArgumentException("Invalid GPGLL", "message");
|
||||
Latitude = NmeaMessage.StringToLatitude(message[0], message[1]);
|
||||
Longitude = NmeaMessage.StringToLongitude(message[2], message[3]);
|
||||
if (message.Length >= 5 && message[4].Length == 6) //Some older GPS doesn't broadcast fix time
|
||||
{
|
||||
FixTime = new TimeSpan(int.Parse(message[4].Substring(0, 2)),
|
||||
int.Parse(message[4].Substring(2, 2)),
|
||||
int.Parse(message[4].Substring(4, 2)));
|
||||
FixTime = new TimeSpan(int.Parse(message[4].Substring(0, 2), CultureInfo.InvariantCulture),
|
||||
int.Parse(message[4].Substring(2, 2), CultureInfo.InvariantCulture),
|
||||
int.Parse(message[4].Substring(4, 2), CultureInfo.InvariantCulture));
|
||||
}
|
||||
DataActive = (message.Length < 6 || message[5] == "A");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Global Positioning System Fix Data
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "GPGSA")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpgsa")]
|
||||
[NmeaMessageType("GPGSA")]
|
||||
public class Gpgsa : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -46,6 +47,7 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Fix Mode
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue", Justification = "Enum values matches NMEA spec")]
|
||||
public enum Mode : int
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -55,11 +57,11 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// 2D Fix
|
||||
/// </summary>
|
||||
_2D = 2,
|
||||
Fix2D = 2,
|
||||
/// <summary>
|
||||
/// 3D Fix
|
||||
/// </summary>
|
||||
_3D = 3
|
||||
Fix3D = 3
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -68,8 +70,11 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 17)
|
||||
throw new ArgumentException("Invalid GPGSA", "message");
|
||||
|
||||
GpsMode = message[0] == "A" ? ModeSelection.Auto : ModeSelection.Manual;
|
||||
FixMode = (Mode)int.Parse(message[1]);
|
||||
FixMode = (Mode)int.Parse(message[1], CultureInfo.InvariantCulture);
|
||||
|
||||
List<int> svs = new List<int>();
|
||||
for (int i = 2; i < 14; i++)
|
||||
|
|
@ -82,19 +87,19 @@ namespace NmeaParser.Nmea.Gps
|
|||
|
||||
double tmp;
|
||||
if (double.TryParse(message[14], NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
PDop = tmp;
|
||||
Pdop = tmp;
|
||||
else
|
||||
PDop = double.NaN;
|
||||
Pdop = double.NaN;
|
||||
|
||||
if (double.TryParse(message[15], NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
HDop = tmp;
|
||||
Hdop = tmp;
|
||||
else
|
||||
HDop = double.NaN;
|
||||
Hdop = double.NaN;
|
||||
|
||||
if (double.TryParse(message[16], NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
VDop = tmp;
|
||||
Vdop = tmp;
|
||||
else
|
||||
VDop = double.NaN;
|
||||
Vdop = double.NaN;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -110,21 +115,24 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// IDs of SVs used in position fix
|
||||
/// </summary>
|
||||
public int[] SVs { get; private set; }
|
||||
public IReadOnlyList<int> SVs { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dilution of precision
|
||||
/// </summary>
|
||||
public double PDop { get; private set; }
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Pdop")]
|
||||
public double Pdop { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Horizontal dilution of precision
|
||||
/// </summary>
|
||||
public double HDop { get; private set; }
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hdop")]
|
||||
public double Hdop { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Vertical dilution of precision
|
||||
/// </summary>
|
||||
public double VDop { get; private set; }
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Vdop")]
|
||||
public double Vdop { get; private set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,8 +26,10 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// GPS Satellites in view
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "GPGSV")]
|
||||
public sealed class Gpgsv : NmeaMessage, IMultiPartMessage<SatelitteVehicle>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpgsv")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
|
||||
[NmeaMessageType("GPGSV")]
|
||||
public sealed class Gpgsv : NmeaMessage, IMultiPartMessage<SatelliteVehicle>
|
||||
{
|
||||
/// <summary>
|
||||
/// Called when the message is being loaded.
|
||||
|
|
@ -35,17 +37,20 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
TotalMessages = int.Parse(message[0]);
|
||||
MessageNumber = int.Parse(message[1]);
|
||||
SVsInView = int.Parse(message[2]);
|
||||
if (message == null || message.Length < 3)
|
||||
throw new ArgumentException("Invalid GPGSV", "message");
|
||||
|
||||
TotalMessages = int.Parse(message[0], CultureInfo.InvariantCulture);
|
||||
MessageNumber = int.Parse(message[1], CultureInfo.InvariantCulture);
|
||||
SVsInView = int.Parse(message[2], CultureInfo.InvariantCulture);
|
||||
|
||||
List<SatelitteVehicle> svs = new List<SatelitteVehicle>();
|
||||
List<SatelliteVehicle> svs = new List<SatelliteVehicle>();
|
||||
for (int i = 3; i < message.Length - 4; i += 4)
|
||||
{
|
||||
if (message[i].Length == 0)
|
||||
continue;
|
||||
else
|
||||
svs.Add(new SatelitteVehicle(message, i));
|
||||
svs.Add(new SatelliteVehicle(message, i));
|
||||
}
|
||||
this.SVs = svs.ToArray();
|
||||
}
|
||||
|
|
@ -68,13 +73,13 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Dilution of precision
|
||||
/// </summary>
|
||||
public SatelitteVehicle[] SVs { get; private set; }
|
||||
public IReadOnlyList<SatelliteVehicle> SVs { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns an enumerator that iterates through the collection.
|
||||
/// </summary>
|
||||
/// <returns> A System.Collections.Generic.IEnumerator{SatelitteVehicle} that can be used to iterate through the collection.</returns>
|
||||
public IEnumerator<SatelitteVehicle> GetEnumerator()
|
||||
/// <returns> A System.Collections.Generic.IEnumerator{SatelliteVehicle} that can be used to iterate through the collection.</returns>
|
||||
public IEnumerator<SatelliteVehicle> GetEnumerator()
|
||||
{
|
||||
foreach(var sv in SVs)
|
||||
yield return sv;
|
||||
|
|
@ -93,11 +98,11 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Satellite vehicle
|
||||
/// </summary>
|
||||
public sealed class SatelitteVehicle
|
||||
public sealed class SatelliteVehicle
|
||||
{
|
||||
internal SatelitteVehicle(string[] message, int startIndex)
|
||||
internal SatelliteVehicle(string[] message, int startIndex)
|
||||
{
|
||||
PrnNumber = int.Parse(message[startIndex]);
|
||||
PrnNumber = int.Parse(message[startIndex], CultureInfo.InvariantCulture);
|
||||
Elevation = double.Parse(message[startIndex+1], CultureInfo.InvariantCulture);
|
||||
Azimuth = double.Parse(message[startIndex + 2], CultureInfo.InvariantCulture);
|
||||
int snr = -1;
|
||||
|
|
@ -155,10 +160,12 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// WAAS - Wide Area Augmentation System
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Waas")]
|
||||
Waas,
|
||||
/// <summary>
|
||||
/// GLONASS - Globalnaya navigatsionnaya sputnikovaya sistema
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Glonass")]
|
||||
Glonass
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Recommended minimum navigation information
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "GPRMB")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gprmb")]
|
||||
[NmeaMessageType("GPRMB")]
|
||||
public class Gprmb : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -35,9 +36,9 @@ namespace NmeaParser.Nmea.Gps
|
|||
public enum DataStatus
|
||||
{
|
||||
/// <summary>
|
||||
/// OK
|
||||
/// Ok
|
||||
/// </summary>
|
||||
OK,
|
||||
Ok,
|
||||
/// <summary>
|
||||
/// Warning
|
||||
/// </summary>
|
||||
|
|
@ -49,7 +50,10 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
Status = message[0] == "A" ? DataStatus.OK : Gprmb.DataStatus.Warning;
|
||||
if (message == null || message.Length < 13)
|
||||
throw new ArgumentException("Invalid GPRMB", "message");
|
||||
|
||||
Status = message[0] == "A" ? DataStatus.Ok : Gprmb.DataStatus.Warning;
|
||||
double tmp;
|
||||
if (double.TryParse(message[1], NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
{
|
||||
|
|
@ -62,9 +66,9 @@ namespace NmeaParser.Nmea.Gps
|
|||
CrossTrackError = double.NaN;
|
||||
|
||||
if(message[3].Length > 0)
|
||||
OriginWaypointID = int.Parse(message[3], CultureInfo.InvariantCulture);
|
||||
OriginWaypointId = int.Parse(message[3], CultureInfo.InvariantCulture);
|
||||
if (message[3].Length > 0)
|
||||
DestinationWaypointID = int.Parse(message[4], CultureInfo.InvariantCulture);
|
||||
DestinationWaypointId = int.Parse(message[4], CultureInfo.InvariantCulture);
|
||||
DestinationLatitude = NmeaMessage.StringToLatitude(message[5], message[6]);
|
||||
DestinationLongitude = NmeaMessage.StringToLongitude(message[7], message[8]);
|
||||
if (double.TryParse(message[9], NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
|
|
@ -95,12 +99,12 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Origin waypoint ID
|
||||
/// </summary>
|
||||
public double OriginWaypointID { get; private set; }
|
||||
public double OriginWaypointId { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Destination waypoint ID
|
||||
/// </summary>
|
||||
public double DestinationWaypointID { get; private set; }
|
||||
public double DestinationWaypointId { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Destination Latitude
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Recommended Minimum
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "GPRMC")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gprmc")]
|
||||
[NmeaMessageType("GPRMC")]
|
||||
public class Gprmc : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -35,14 +36,17 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 11)
|
||||
throw new ArgumentException("Invalid GPRMC", "message");
|
||||
|
||||
if (message[8].Length == 6 && message[0].Length == 6)
|
||||
{
|
||||
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);
|
||||
FixTime = new DateTime(int.Parse(message[8].Substring(4, 2), CultureInfo.InvariantCulture) + 2000,
|
||||
int.Parse(message[8].Substring(2, 2), CultureInfo.InvariantCulture),
|
||||
int.Parse(message[8].Substring(0, 2), CultureInfo.InvariantCulture),
|
||||
int.Parse(message[0].Substring(0, 2), CultureInfo.InvariantCulture),
|
||||
int.Parse(message[0].Substring(2, 2), CultureInfo.InvariantCulture),
|
||||
int.Parse(message[0].Substring(4, 2), CultureInfo.InvariantCulture), DateTimeKind.Utc);
|
||||
}
|
||||
Active = (message[1] == "A");
|
||||
Latitude = NmeaMessage.StringToLatitude(message[2], message[3]);
|
||||
|
|
|
|||
|
|
@ -26,7 +26,9 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Routes
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "GPRTE")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gprte")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
|
||||
[NmeaMessageType("GPRTE")]
|
||||
public sealed class Gprte : NmeaMessage, IMultiPartMessage<string>
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -49,10 +51,13 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
TotalMessages = int.Parse(message[0]);
|
||||
MessageNumber = int.Parse(message[1]);
|
||||
if (message == null || message.Length < 4)
|
||||
throw new ArgumentException("Invalid GPRTE", "message");
|
||||
|
||||
TotalMessages = int.Parse(message[0], CultureInfo.InvariantCulture);
|
||||
MessageNumber = int.Parse(message[1], CultureInfo.InvariantCulture);
|
||||
ListType = message[2] == "c" ? WaypointListType.CompleteWaypointsList : WaypointListType.RemainingWaypointsList;
|
||||
RouteID = message[3];
|
||||
RouteId = message[3];
|
||||
Waypoints = message.Skip(4).ToArray();
|
||||
}
|
||||
|
||||
|
|
@ -74,12 +79,12 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// <summary>
|
||||
/// Gets the route identifier.
|
||||
/// </summary>
|
||||
public string RouteID { get; private set; }
|
||||
public string RouteId { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Waypoints
|
||||
/// </summary>
|
||||
public string[] Waypoints { get; private set; }
|
||||
public IReadOnlyList<string> Waypoints { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns an enumerator that iterates through the collection.
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace NmeaParser.Nmea.Gps.Garmin
|
|||
/// <summary>
|
||||
/// Recommended Minimum
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "PGRME")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Pgrme")]
|
||||
[NmeaMessageType("PGRME")]
|
||||
public class Pgrme : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -35,6 +36,9 @@ namespace NmeaParser.Nmea.Gps.Garmin
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 6)
|
||||
throw new ArgumentException("Invalid PGRME", "message");
|
||||
|
||||
HorizontalError = NmeaMessage.StringToDouble(message[0]);
|
||||
HorizontalErrorUnits = message[1];
|
||||
VerticalError = NmeaMessage.StringToDouble(message[2]);
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace NmeaParser.Nmea.Gps.Garmin
|
|||
/// <summary>
|
||||
/// Altitude Information
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "PGRMZ")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Pgrmz")]
|
||||
[NmeaMessageType("PGRMZ")]
|
||||
public class Pgrmz : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -67,6 +68,9 @@ namespace NmeaParser.Nmea.Gps.Garmin
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 3)
|
||||
throw new ArgumentException("Invalid PGRMZ", "message");
|
||||
|
||||
if (message[0].Length > 0)
|
||||
Altitude = double.Parse(message[0], CultureInfo.InvariantCulture);
|
||||
else
|
||||
|
|
|
|||
|
|
@ -35,6 +35,9 @@ namespace NmeaParser.Nmea.LaserRange
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 9)
|
||||
throw new ArgumentException("Invalid Laser Range Message", "message");
|
||||
|
||||
HorizontalVector = message[0];
|
||||
HorizontalDistance = double.Parse(message[1], CultureInfo.InvariantCulture);
|
||||
HorizontalDistanceUnits = message[2][0];
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace NmeaParser.Nmea.LaserRange.LaserTech
|
|||
/// <summary>
|
||||
/// Laser Range
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "PLTIT")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Pltit")]
|
||||
[NmeaMessageType("PLTIT")]
|
||||
public class Pltit : LaserRangeMessage
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace NmeaParser.Nmea.LaserRange.Trimble
|
|||
/// <summary>
|
||||
/// Burden finder
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "PTNLA")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Ptnla")]
|
||||
[NmeaMessageType("PTNLA")]
|
||||
public class Ptnla : LaserRangeMessage
|
||||
{
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,8 @@ namespace NmeaParser.Nmea.LaserRange.Trimble
|
|||
/// <summary>
|
||||
/// Tree Measurement
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "PTNLB")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Ptnlb")]
|
||||
[NmeaMessageType("PTNLB")]
|
||||
public class Ptnlb : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
|
|
@ -35,6 +36,9 @@ namespace NmeaParser.Nmea.LaserRange.Trimble
|
|||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 6)
|
||||
throw new ArgumentException("Invalid PTNLB", "message");
|
||||
|
||||
TreeHeight = message[0];
|
||||
MeasuredTreeHeight = double.Parse(message[1], CultureInfo.InvariantCulture);
|
||||
MeasuredTreeHeightUnits = message[2][0];
|
||||
|
|
|
|||
|
|
@ -27,12 +27,21 @@ namespace NmeaParser.Nmea
|
|||
/// <summary>
|
||||
/// Nmea message attribute type used on concrete <see cref="NmeaMessage"/> implementations.
|
||||
/// </summary>
|
||||
public class NmeaMessageTypeAttribute : Attribute
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
|
||||
public sealed class NmeaMessageTypeAttribute : Attribute
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="NmeaMessageTypeAttribute"/> class.
|
||||
/// </summary>
|
||||
/// <param name="nmeaType">The type.</param>
|
||||
public NmeaMessageTypeAttribute(string nmeaType)
|
||||
{
|
||||
NmeaType = nmeaType;
|
||||
}
|
||||
/// <summary>
|
||||
/// Gets or sets the NMEA message type.
|
||||
/// </summary>
|
||||
public string Type { get; set; }
|
||||
public string NmeaType { get; private set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -51,6 +60,9 @@ namespace NmeaParser.Nmea
|
|||
/// </exception>
|
||||
public static NmeaMessage Parse(string message)
|
||||
{
|
||||
if (string.IsNullOrEmpty(message))
|
||||
throw new ArgumentNullException("message");
|
||||
|
||||
int checksum = -1;
|
||||
if (message[0] != '$')
|
||||
throw new ArgumentException("Invalid nmea message: Missing starting character '$'");
|
||||
|
|
@ -69,7 +81,7 @@ namespace NmeaParser.Nmea
|
|||
checksumTest ^= Convert.ToByte(message[i]);
|
||||
}
|
||||
if (checksum != checksumTest)
|
||||
throw new ArgumentException(string.Format("Invalid nmea message: Checksum failure. Got {0:X2}, Expected {1:X2}", checksum, checksumTest));
|
||||
throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Invalid nmea message: Checksum failure. Got {0:X2}, Expected {1:X2}", checksum, checksumTest));
|
||||
}
|
||||
|
||||
string[] parts = message.Split(new char[] { ',' });
|
||||
|
|
@ -110,7 +122,7 @@ namespace NmeaParser.Nmea
|
|||
var pinfo = c.GetParameters();
|
||||
if (pinfo.Length == 0)
|
||||
{
|
||||
messageTypes.Add(attr.Type, c);
|
||||
messageTypes.Add(attr.NmeaType, c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -124,10 +136,10 @@ namespace NmeaParser.Nmea
|
|||
/// <summary>
|
||||
/// Gets the NMEA message parts.
|
||||
/// </summary>
|
||||
protected string[] MessageParts { get; private set; }
|
||||
protected IReadOnlyList<string> MessageParts { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the type id for the message.
|
||||
/// Gets the NMEA type id for the message.
|
||||
/// </summary>
|
||||
public string MessageType { get; private set; }
|
||||
|
||||
|
|
@ -148,47 +160,37 @@ namespace NmeaParser.Nmea
|
|||
/// </returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("${0},{1}", MessageType, string.Join(",", MessageParts));
|
||||
return string.Format(CultureInfo.InvariantCulture, "${0},{1}", MessageType, string.Join(",", MessageParts));
|
||||
}
|
||||
|
||||
internal static double StringToLatitude(string value, string ns)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (value.Length < 3)
|
||||
return double.NaN;
|
||||
double latitude = int.Parse(value.Substring(0, 2), CultureInfo.InvariantCulture) + double.Parse(value.Substring(2), CultureInfo.InvariantCulture) / 60;
|
||||
if (ns == "S")
|
||||
latitude *= -1;
|
||||
return latitude;
|
||||
}
|
||||
catch { return double.NaN; }
|
||||
if (value == null || value.Length < 3)
|
||||
return double.NaN;
|
||||
double latitude = int.Parse(value.Substring(0, 2), CultureInfo.InvariantCulture) + double.Parse(value.Substring(2), CultureInfo.InvariantCulture) / 60;
|
||||
if (ns == "S")
|
||||
latitude *= -1;
|
||||
return latitude;
|
||||
}
|
||||
|
||||
internal static double StringToLongitude(string value, string ew)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (value.Length < 4)
|
||||
return double.NaN;
|
||||
double longitude = int.Parse(value.Substring(0, 3), CultureInfo.InvariantCulture) + double.Parse(value.Substring(3), CultureInfo.InvariantCulture) / 60;
|
||||
if (ew == "W")
|
||||
longitude *= -1;
|
||||
return longitude;
|
||||
}
|
||||
catch { return double.NaN; }
|
||||
if (value == null || value.Length < 4)
|
||||
return double.NaN;
|
||||
double longitude = int.Parse(value.Substring(0, 3), CultureInfo.InvariantCulture) + double.Parse(value.Substring(3), CultureInfo.InvariantCulture) / 60;
|
||||
if (ew == "W")
|
||||
longitude *= -1;
|
||||
return longitude;
|
||||
}
|
||||
|
||||
internal static double StringToDouble(string value)
|
||||
{
|
||||
try
|
||||
double result = double.NaN;
|
||||
if(value != null && double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out result))
|
||||
{
|
||||
double result = double.NaN;
|
||||
if(double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
return double.NaN;
|
||||
return result;
|
||||
}
|
||||
catch { return double.NaN; }
|
||||
return double.NaN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,9 +28,9 @@ namespace NmeaParser.Nmea
|
|||
public class UnknownMessage : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the nmea value aarray.
|
||||
/// Gets the nmea value array.
|
||||
/// </summary>
|
||||
public string[] Values { get { return base.MessageParts; } }
|
||||
public IReadOnlyList<string> Values { get { return base.MessageParts; } }
|
||||
/// <summary>
|
||||
/// Called when the message is being loaded.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ namespace NmeaParser
|
|||
MultiPartMessageCache.Clear();
|
||||
}
|
||||
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "_")]
|
||||
private void StartParser()
|
||||
{
|
||||
var token = m_cts.Token;
|
||||
|
|
@ -127,7 +128,7 @@ namespace NmeaParser
|
|||
{
|
||||
m_message += nmea;
|
||||
|
||||
var lineEnd = m_message.IndexOf("\n");
|
||||
var lineEnd = m_message.IndexOf("\n", StringComparison.Ordinal);
|
||||
if (lineEnd > -1)
|
||||
{
|
||||
line = m_message.Substring(0, lineEnd).Trim();
|
||||
|
|
@ -138,6 +139,7 @@ namespace NmeaParser
|
|||
ProcessMessage(line);
|
||||
}
|
||||
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", Justification="Must silently handle invalid/corrupt input")]
|
||||
private void ProcessMessage(string p)
|
||||
{
|
||||
try
|
||||
|
|
@ -152,10 +154,10 @@ namespace NmeaParser
|
|||
private void OnMessageReceived(Nmea.NmeaMessage msg)
|
||||
{
|
||||
var args = new NmeaMessageReceivedEventArgs(msg);
|
||||
if (msg is IMultiPartMessage)
|
||||
var multi = msg as IMultiPartMessage;
|
||||
if (multi != null)
|
||||
{
|
||||
args.IsMultiPart = true;
|
||||
var multi = (IMultiPartMessage)msg;
|
||||
args.IsMultipart = true;
|
||||
if (MultiPartMessageCache.ContainsKey(msg.MessageType))
|
||||
{
|
||||
var dic = MultiPartMessageCache[msg.MessageType];
|
||||
|
|
@ -202,12 +204,13 @@ namespace NmeaParser
|
|||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
/// <summary>
|
||||
/// Releases unmanaged and - optionally - managed resources.
|
||||
/// </summary>
|
||||
/// <param name="force"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
|
||||
protected virtual void Dispose(bool force)
|
||||
/// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (m_stream != null)
|
||||
{
|
||||
|
|
@ -217,6 +220,8 @@ namespace NmeaParser
|
|||
m_cts = null;
|
||||
}
|
||||
CloseStreamAsync(m_stream);
|
||||
if (disposing && m_stream != null)
|
||||
m_stream.Dispose();
|
||||
m_stream = null;
|
||||
}
|
||||
}
|
||||
|
|
@ -251,13 +256,13 @@ namespace NmeaParser
|
|||
/// <value>
|
||||
/// <c>true</c> if this instance is multi part; otherwise, <c>false</c>.
|
||||
/// </value>
|
||||
public bool IsMultiPart { get; internal set; }
|
||||
public bool IsMultipart { get; internal set; }
|
||||
/// <summary>
|
||||
/// Gets the message parts if this is a multi-part message and all message parts has been received.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// The message parts.
|
||||
/// </value>
|
||||
public Nmea.NmeaMessage[] MessageParts { get; internal set; }
|
||||
public IReadOnlyList<Nmea.NmeaMessage> MessageParts { get; internal set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,32 +33,47 @@ namespace NmeaParser
|
|||
#else
|
||||
string m_filename;
|
||||
#endif
|
||||
int m_readSpeed;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="NmeaFileDevice"/> class.
|
||||
/// </summary>
|
||||
/// <param name="filename"></param>
|
||||
/// <param name="readSpeed">The time to wait between each line being read in milliseconds</param>
|
||||
/// <param name="fileName"></param>
|
||||
#if NETFX_CORE
|
||||
public NmeaFileDevice(Windows.Storage.IStorageFile filename, int readSpeed = 200) : base(readSpeed)
|
||||
public NmeaFileDevice(Windows.Storage.IStorageFile fileName) : this(fileName, 200)
|
||||
#else
|
||||
public NmeaFileDevice(string filename, int readSpeed = 200) : base(readSpeed)
|
||||
public NmeaFileDevice(string fileName) : this(fileName, 200)
|
||||
#endif
|
||||
{
|
||||
m_filename = filename;
|
||||
m_readSpeed = readSpeed;
|
||||
m_filename = fileName;
|
||||
}
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="NmeaFileDevice"/> class.
|
||||
/// </summary>
|
||||
/// <param name="fileName"></param>
|
||||
/// <param name="readSpeed">The time to wait between each line being read in milliseconds</param>
|
||||
#if NETFX_CORE
|
||||
public NmeaFileDevice(Windows.Storage.IStorageFile fileName, int readSpeed)
|
||||
: base(readSpeed)
|
||||
#else
|
||||
public NmeaFileDevice(string fileName, int readSpeed) : base(readSpeed)
|
||||
#endif
|
||||
{
|
||||
m_filename = fileName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the stream to perform buffer reads on.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
#if !NETFX_CORE
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
|
||||
#endif
|
||||
protected override Task<Stream> GetStreamAsync()
|
||||
{
|
||||
#if NETFX_CORE
|
||||
return m_filename.OpenStreamForReadAsync();
|
||||
#else
|
||||
var sr = System.IO.File.OpenRead(m_filename);
|
||||
return Task.FromResult<Stream>(sr);
|
||||
return Task.FromResult<Stream>(System.IO.File.OpenRead(m_filename));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,6 @@ using System.Runtime.InteropServices;
|
|||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.3.1.0")]
|
||||
[assembly: AssemblyFileVersion("1.3.1.0")]
|
||||
[assembly: AssemblyVersion("1.4.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.4.0.0")]
|
||||
[assembly: ComVisible(false)]
|
||||
|
|
@ -59,9 +59,10 @@ namespace NmeaParser
|
|||
/// <summary>
|
||||
/// Releases unmanaged and - optionally - managed resources.
|
||||
/// </summary>
|
||||
/// <param name="force"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
|
||||
protected override void Dispose(bool force)
|
||||
/// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
base.Dispose(disposing);
|
||||
if (m_stream != null)
|
||||
m_stream.Dispose();
|
||||
m_stream = null;
|
||||
|
|
|
|||
|
|
@ -23,13 +23,13 @@ namespace NmeaParser.Tests
|
|||
count++;
|
||||
try
|
||||
{
|
||||
Assert.IsTrue(e.IsMultiPart, "IsMultiPart");
|
||||
Assert.IsTrue(e.IsMultipart, "IsMultiPart");
|
||||
Assert.IsInstanceOfType(e.Message, typeof(NmeaParser.Nmea.Gps.Gpgsv));
|
||||
var msg = e.Message as NmeaParser.Nmea.Gps.Gpgsv;
|
||||
if (msg.TotalMessages == msg.MessageNumber)
|
||||
{
|
||||
Assert.IsNotNull(e.MessageParts);
|
||||
Assert.AreEqual(e.MessageParts.Length, 3, "MessageParts.Length");
|
||||
Assert.AreEqual(e.MessageParts.Count, 3, "MessageParts.Length");
|
||||
tcs.SetResult(true);
|
||||
}
|
||||
else
|
||||
|
|
@ -60,7 +60,7 @@ namespace NmeaParser.Tests
|
|||
count++;
|
||||
try
|
||||
{
|
||||
Assert.IsTrue(e.IsMultiPart, "IsMultiPart");
|
||||
Assert.IsTrue(e.IsMultipart, "IsMultiPart");
|
||||
Assert.IsInstanceOfType(e.Message, typeof(NmeaParser.Nmea.Gps.Gpgsv));
|
||||
var msg = e.Message as NmeaParser.Nmea.Gps.Gpgsv;
|
||||
Assert.IsNull(e.MessageParts);
|
||||
|
|
|
|||
|
|
@ -57,10 +57,10 @@ namespace NmeaParser.Tests
|
|||
Assert.AreEqual(double.NaN, rmb.CrossTrackError);
|
||||
Assert.AreEqual(double.NaN, rmb.DestinationLatitude);
|
||||
Assert.AreEqual(double.NaN, rmb.DestinationLongitude);
|
||||
Assert.AreEqual(0, rmb.DestinationWaypointID);
|
||||
Assert.AreEqual(0, rmb.OriginWaypointID);
|
||||
Assert.AreEqual(0, rmb.DestinationWaypointId);
|
||||
Assert.AreEqual(0, rmb.OriginWaypointId);
|
||||
Assert.AreEqual(double.NaN, rmb.RangeToDestination);
|
||||
Assert.AreEqual(Gprmb.DataStatus.OK, rmb.Status);
|
||||
Assert.AreEqual(Gprmb.DataStatus.Ok, rmb.Status);
|
||||
Assert.AreEqual(double.NaN, rmb.TrueBearing);
|
||||
Assert.AreEqual(double.NaN, rmb.Velocity);
|
||||
}
|
||||
|
|
@ -72,10 +72,10 @@ namespace NmeaParser.Tests
|
|||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gprmb));
|
||||
Gprmb rmb = (Gprmb)msg;
|
||||
Assert.AreEqual(Gprmb.DataStatus.OK, rmb.Status);
|
||||
Assert.AreEqual(Gprmb.DataStatus.Ok, rmb.Status);
|
||||
Assert.AreEqual(-.66, rmb.CrossTrackError);
|
||||
Assert.AreEqual(3, rmb.OriginWaypointID);
|
||||
Assert.AreEqual(4, rmb.DestinationWaypointID);
|
||||
Assert.AreEqual(3, rmb.OriginWaypointId);
|
||||
Assert.AreEqual(4, rmb.DestinationWaypointId);
|
||||
Assert.AreEqual(-49.287333333333333333, rmb.DestinationLatitude);
|
||||
Assert.AreEqual(-123.1595, rmb.DestinationLongitude);
|
||||
Assert.AreEqual(1.3, rmb.RangeToDestination);
|
||||
|
|
@ -113,7 +113,7 @@ namespace NmeaParser.Tests
|
|||
Assert.AreEqual("M", gga.AltitudeUnits);
|
||||
Assert.AreEqual(-22.1, gga.HeightOfGeoid);
|
||||
Assert.AreEqual("M", gga.HeightOfGeoidUnits);
|
||||
Assert.AreEqual(-1, gga.DgpsStationID);
|
||||
Assert.AreEqual(-1, gga.DgpsStationId);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
|
@ -156,15 +156,15 @@ namespace NmeaParser.Tests
|
|||
Assert.IsInstanceOfType(msg, typeof(Gpgsa));
|
||||
Gpgsa gsa = (Gpgsa)msg;
|
||||
Assert.AreEqual(Gpgsa.ModeSelection.Auto, gsa.GpsMode);
|
||||
Assert.AreEqual(Gpgsa.Mode._3D, gsa.FixMode);
|
||||
Assert.AreEqual(4, gsa.SVs.Length);
|
||||
Assert.AreEqual(Gpgsa.Mode.Fix3D, gsa.FixMode);
|
||||
Assert.AreEqual(4, gsa.SVs.Count);
|
||||
Assert.AreEqual(16, gsa.SVs[0]);
|
||||
Assert.AreEqual(18, gsa.SVs[1]);
|
||||
Assert.AreEqual(22, gsa.SVs[2]);
|
||||
Assert.AreEqual(24, gsa.SVs[3]);
|
||||
Assert.AreEqual(double.NaN, gsa.PDop);
|
||||
Assert.AreEqual(double.NaN, gsa.HDop);
|
||||
Assert.AreEqual(double.NaN, gsa.VDop);
|
||||
Assert.AreEqual(double.NaN, gsa.Pdop);
|
||||
Assert.AreEqual(double.NaN, gsa.Hdop);
|
||||
Assert.AreEqual(double.NaN, gsa.Vdop);
|
||||
}
|
||||
[TestMethod]
|
||||
public void TestGpgsa()
|
||||
|
|
@ -174,8 +174,8 @@ namespace NmeaParser.Tests
|
|||
Assert.IsInstanceOfType(msg, typeof(Gpgsa));
|
||||
Gpgsa gsa = (Gpgsa)msg;
|
||||
Assert.AreEqual(Gpgsa.ModeSelection.Manual, gsa.GpsMode);
|
||||
Assert.AreEqual(Gpgsa.Mode._2D, gsa.FixMode);
|
||||
Assert.AreEqual(12, gsa.SVs.Length);
|
||||
Assert.AreEqual(Gpgsa.Mode.Fix2D, gsa.FixMode);
|
||||
Assert.AreEqual(12, gsa.SVs.Count);
|
||||
Assert.AreEqual(19, gsa.SVs[0]);
|
||||
Assert.AreEqual(28, gsa.SVs[1]);
|
||||
Assert.AreEqual(14, gsa.SVs[2]);
|
||||
|
|
@ -188,9 +188,9 @@ namespace NmeaParser.Tests
|
|||
Assert.AreEqual(42, gsa.SVs[9]);
|
||||
Assert.AreEqual(43, gsa.SVs[10]);
|
||||
Assert.AreEqual(44, gsa.SVs[11]);
|
||||
Assert.AreEqual(1.7, gsa.PDop);
|
||||
Assert.AreEqual(1.0, gsa.HDop);
|
||||
Assert.AreEqual(1.3, gsa.VDop);
|
||||
Assert.AreEqual(1.7, gsa.Pdop);
|
||||
Assert.AreEqual(1.0, gsa.Hdop);
|
||||
Assert.AreEqual(1.3, gsa.Vdop);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
|
@ -204,7 +204,7 @@ namespace NmeaParser.Tests
|
|||
Assert.AreEqual(3, gsv.MessageNumber);
|
||||
Assert.AreEqual(11, gsv.SVsInView);
|
||||
Assert.IsNotNull(gsv.SVs);
|
||||
Assert.AreEqual(3, gsv.SVs.Length);
|
||||
Assert.AreEqual(3, gsv.SVs.Count);
|
||||
var sv = gsv.SVs[0];
|
||||
Assert.AreEqual(22, sv.PrnNumber);
|
||||
Assert.AreEqual(42, sv.Elevation);
|
||||
|
|
@ -238,7 +238,7 @@ namespace NmeaParser.Tests
|
|||
Assert.AreEqual(1, gsv.MessageNumber);
|
||||
Assert.AreEqual(0, gsv.SVsInView);
|
||||
Assert.IsNotNull(gsv.SVs);
|
||||
Assert.AreEqual(0, gsv.SVs.Length);
|
||||
Assert.AreEqual(0, gsv.SVs.Count);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
|
@ -277,8 +277,8 @@ namespace NmeaParser.Tests
|
|||
Gpbod bod = (Gpbod)msg;
|
||||
Assert.AreEqual(double.NaN, bod.TrueBearing, "TrueBearing");
|
||||
Assert.AreEqual(double.NaN, bod.MagneticBearing, "MagneticBearing");
|
||||
Assert.IsNull(bod.OriginID, "OriginID");
|
||||
Assert.IsNull(bod.DestinationID, "DestinationID");
|
||||
Assert.IsNull(bod.OriginId, "OriginID");
|
||||
Assert.IsNull(bod.DestinationId, "DestinationID");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
|
@ -290,8 +290,8 @@ namespace NmeaParser.Tests
|
|||
Gpbod bod = (Gpbod)msg;
|
||||
Assert.AreEqual(99.3, bod.TrueBearing, "TrueBearing");
|
||||
Assert.AreEqual(105.6, bod.MagneticBearing, "MagneticBearing");
|
||||
Assert.AreEqual("POINTB", bod.DestinationID, "DestinationID");
|
||||
Assert.IsNull(bod.OriginID, "OriginID");
|
||||
Assert.AreEqual("POINTB", bod.DestinationId, "DestinationID");
|
||||
Assert.IsNull(bod.OriginId, "OriginID");
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -304,8 +304,8 @@ namespace NmeaParser.Tests
|
|||
Gpbod bod = (Gpbod)msg;
|
||||
Assert.AreEqual(97d, bod.TrueBearing, "TrueBearing");
|
||||
Assert.AreEqual(103.2, bod.MagneticBearing, "MagneticBearing");
|
||||
Assert.AreEqual("POINTB", bod.DestinationID, "DestinationID");
|
||||
Assert.AreEqual("POINTA", bod.OriginID, "OriginID");
|
||||
Assert.AreEqual("POINTB", bod.DestinationId, "DestinationID");
|
||||
Assert.AreEqual("POINTA", bod.OriginId, "OriginID");
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -343,9 +343,9 @@ namespace NmeaParser.Tests
|
|||
Assert.AreEqual(2, gsv.TotalMessages);
|
||||
Assert.AreEqual(1, gsv.MessageNumber);
|
||||
Assert.AreEqual(NmeaParser.Nmea.Gps.Gprte.WaypointListType.CompleteWaypointsList, gsv.ListType);
|
||||
Assert.AreEqual("0", gsv.RouteID);
|
||||
Assert.AreEqual("0", gsv.RouteID);
|
||||
Assert.AreEqual(9, gsv.Waypoints.Length);
|
||||
Assert.AreEqual("0", gsv.RouteId);
|
||||
Assert.AreEqual("0", gsv.RouteId);
|
||||
Assert.AreEqual(9, gsv.Waypoints.Count);
|
||||
Assert.AreEqual("W3IWI", gsv.Waypoints[0]);
|
||||
Assert.AreEqual("32BKLD", gsv.Waypoints[4]);
|
||||
Assert.AreEqual("BW-198", gsv.Waypoints[8]);
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>..\Bin\Debug\NmeaParser.WinDesktop.xml</DocumentationFile>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
|
|
@ -30,6 +32,7 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>..\Bin\Release\NmeaParser.WinDesktop.xml</DocumentationFile>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
|
|
@ -37,10 +40,18 @@
|
|||
<Reference Include="Microsoft.CSharp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\GlobalSuppressions.cs">
|
||||
<Link>GlobalSuppressions.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="SerialPortDevice.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.Desktop.cs" />
|
||||
<Compile Include="TypedEventHandler.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CodeAnalysisDictionary Include="..\CustomDictionary.xml">
|
||||
<Link>CustomDictionary.xml</Link>
|
||||
</CodeAnalysisDictionary>
|
||||
</ItemGroup>
|
||||
<Import Project="..\NmeaParser.Shared\NmeaParser.Shared.projitems" Label="Shared" Condition="Exists('..\NmeaParser.Shared\NmeaParser.Shared.projitems')" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>..\bin\Debug\NmeaParser.WinPhone.xml</DocumentationFile>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
|
|
@ -35,16 +37,25 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>..\bin\Release\NmeaParser.WinPhone.xml</DocumentationFile>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
|
||||
<Folder Include="Properties\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\GlobalSuppressions.cs">
|
||||
<Link>GlobalSuppressions.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="..\NmeaParser.WinStore\BluetoothDevice.cs">
|
||||
<Link>BluetoothDevice.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CodeAnalysisDictionary Include="..\CustomDictionary.xml">
|
||||
<Link>CustomDictionary.xml</Link>
|
||||
</CodeAnalysisDictionary>
|
||||
</ItemGroup>
|
||||
<Import Project="..\NmeaParser.Shared\NmeaParser.Shared.projitems" Label="Shared" Condition="Exists('..\NmeaParser.Shared\NmeaParser.Shared.projitems')" />
|
||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '12.0' ">
|
||||
<VisualStudioVersion>12.0</VisualStudioVersion>
|
||||
|
|
|
|||
|
|
@ -74,6 +74,8 @@ namespace NmeaParser
|
|||
/// <returns></returns>
|
||||
protected override Task CloseStreamAsync(System.IO.Stream stream)
|
||||
{
|
||||
if (stream == null)
|
||||
throw new ArgumentNullException("stream");
|
||||
stream.Dispose();
|
||||
m_socket.Dispose();
|
||||
m_socket = null;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>..\bin\Debug\NmeaParser.WinStore.xml</DocumentationFile>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
|
|
@ -35,14 +37,24 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>..\bin\Release\NmeaParser.WinStore.xml</DocumentationFile>
|
||||
<RunCodeAnalysis>true</RunCodeAnalysis>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
|
||||
<Folder Include="Properties\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\GlobalSuppressions.cs">
|
||||
<Link>GlobalSuppressions.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="BluetoothDevice.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CodeAnalysisDictionary Include="..\CustomDictionary.xml">
|
||||
<Link>CustomDictionary.xml</Link>
|
||||
<SubType>Designer</SubType>
|
||||
</CodeAnalysisDictionary>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '12.0' ">
|
||||
<VisualStudioVersion>12.0</VisualStudioVersion>
|
||||
</PropertyGroup>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.30501.0
|
||||
VisualStudioVersion = 12.0.31101.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NmeaParser.WinStore", "NmeaParser.WinStore\NmeaParser.WinStore.csproj", "{62A55887-10F5-40D2-9352-96246D1B11D3}"
|
||||
EndProject
|
||||
|
|
@ -33,6 +33,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnitTests", "UnitTests", "{
|
|||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SampleApps", "SampleApps", "{A4B9D59A-C8C6-4199-A7F3-F3AF0C748281}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0EBBFC7B-43E8-4478-9951-50C842991A9C}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
CustomDictionary.xml = CustomDictionary.xml
|
||||
GlobalSuppressions.cs = GlobalSuppressions.cs
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
||||
NmeaParser.Shared\NmeaParser.Shared.projitems*{df711ab9-f14e-4f1f-b8f2-b6ddc4691554}*SharedItemsImports = 4
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ namespace SampleApp.WinDesktop
|
|||
if(args.Message is NmeaParser.Nmea.Gps.Gpgsv)
|
||||
{
|
||||
var gpgsv = (NmeaParser.Nmea.Gps.Gpgsv)args.Message;
|
||||
if(args.IsMultiPart && args.MessageParts != null)
|
||||
if(args.IsMultipart && args.MessageParts != null)
|
||||
satView.GpgsvMessages = args.MessageParts.OfType<NmeaParser.Nmea.Gps.Gpgsv>();
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue