Z = z;\r
Accuracy = accuracy;\r
}\r
-\r
- /// <summary>\r
- /// \r
- /// </summary>\r
- /// <param name="x">ECEF X coordinate in cm</param>\r
- /// <param name="y">ECEF Y coordinate in cm</param>\r
- /// <param name="z">ECEF Z coordinate in cm</param>\r
- /// <param name="accuracy">3D Position Accuracy Estimate in cm</param>\r
- public EcefCoordinate(int x, int y, int z, uint accuracy)\r
- : this(x * 0.01, y * 0.01, z * 0.01, accuracy * 0.01)\r
- {\r
- }\r
#endregion\r
\r
#region properties\r
Accuracy = accuracy;\r
}\r
\r
- /// <summary>\r
- /// \r
- /// </summary>\r
- /// <param name="e">ENU E velocity in cm/s</param>\r
- /// <param name="n">ENU N velocity in cm/s</param>\r
- /// <param name="u">ENU U velocity in cm/s</param>\r
- /// <param name="accuracy">Speed Accuracy Estimate in cm/s</param>\r
- public EcefVelocity(int e, int n, int u, uint accuracy)\r
- : this(e * 0.01, n * 0.01, u * 0.01, accuracy * 0.01)\r
- {\r
- }\r
#endregion\r
\r
#region properties\r
Origin = null;\r
}\r
\r
- public EnuVelocity(int e, int n, int u)\r
- : this(e * 0.01, n * 0.01, u * 0.01)\r
- { \r
- }\r
-\r
#endregion\r
\r
#region properties\r
{\r
}\r
\r
- public AidAlm(uint svId)\r
+ public AidAlm(uint svID)\r
: base(\r
new byte[]\r
{\r
Packet.SyncCharacter1, Packet.SyncCharacter2,\r
0x0B, 0x30, // ID\r
0x01, 0x00, // length\r
- (byte)svId, // svid\r
+ (byte)svID, // svid\r
0x00, 0x00 // checksum\r
})\r
{\r
\r
#region properties\r
\r
- public uint SvId\r
+ public uint SvID\r
{\r
get\r
{\r
{\r
get\r
{\r
- return (((int)Raw[6 + 0] << 24) >> 24) / 128.0;\r
+ return (sbyte)Raw[6 + 0] / 128.0;\r
}\r
}\r
\r
{\r
get\r
{\r
- return (((int)Raw[6 + 2] << 24) >> 24) / 128.0;\r
+ return (sbyte)Raw[6 + 2] / 128.0;\r
}\r
}\r
\r
{\r
get\r
{\r
- return BitConverter.ToUInt16(Raw, 6 + 4) * 1e-2;\r
+ return BitConverter.ToUInt16(Raw, 6 + 4) * 0.01;\r
}\r
}\r
\r
{\r
get\r
{\r
- return BitConverter.ToUInt16(Raw, 6 + 6) * 1e-2;\r
+ return BitConverter.ToUInt16(Raw, 6 + 6) * 0.01;\r
}\r
}\r
\r
{\r
get\r
{\r
- return BitConverter.ToUInt16(Raw, 6 + 8) * 1e-2;\r
+ return BitConverter.ToUInt16(Raw, 6 + 8) * 0.01;\r
}\r
}\r
\r
{\r
get\r
{\r
- return BitConverter.ToUInt16(Raw, 6 + 10) * 1e-2;\r
+ return BitConverter.ToUInt16(Raw, 6 + 10) * 0.01;\r
}\r
}\r
\r
{\r
get\r
{\r
- return BitConverter.ToUInt16(Raw, 6 + 12) * 1e-2;\r
+ return BitConverter.ToUInt16(Raw, 6 + 12) * 0.01;\r
}\r
}\r
\r
{\r
get\r
{\r
- return BitConverter.ToUInt16(Raw, 6 + 14) * 1e-2;\r
+ return BitConverter.ToUInt16(Raw, 6 + 14) * 0.01;\r
}\r
}\r
\r
{\r
get\r
{\r
- return BitConverter.ToUInt16(Raw, 6 + 16) * 1e-2;\r
+ return BitConverter.ToUInt16(Raw, 6 + 16) * 0.01;\r
}\r
}\r
\r
int x = BitConverter.ToInt32(Raw, 6 + 4);\r
int y = BitConverter.ToInt32(Raw, 6 + 8);\r
int z = BitConverter.ToInt32(Raw, 6 + 12);\r
- uint acc = BitConverter.ToUInt32(Raw, 6 + 16);\r
- return new EcefCoordinate(x, y, z, acc);\r
+ double acc = BitConverter.ToUInt32(Raw, 6 + 16) * 0.01;\r
+ return new EcefCoordinate(x * 0.01, y * 0.01, z * 0.01, acc);\r
}\r
}\r
\r
public class NavSbas : Packet\r
{\r
#region type definitions\r
+\r
+ public enum SbasMode : byte\r
+ {\r
+ Disabled = 0,\r
+ IntegrityEnabled = 1,\r
+ TestModeEnabled = 3,\r
+ }\r
+\r
+ public enum SbasSystem : sbyte\r
+ {\r
+ Unknown = -1,\r
+ Waas = 0,\r
+ Egnos = 1,\r
+ Msas = 2,\r
+ Gps = 16,\r
+ }\r
+\r
public struct SbasStatus\r
{ \r
private byte[] Raw;\r
}\r
}\r
\r
+ public int SbasID\r
+ {\r
+ get\r
+ {\r
+ return Raw[6 + 4];\r
+ }\r
+ }\r
+\r
+ public SbasMode Mode\r
+ {\r
+ get\r
+ {\r
+ return (SbasMode)Raw[6 + 5];\r
+ }\r
+ }\r
+\r
+ public SbasSystem System\r
+ {\r
+ get\r
+ {\r
+ return (SbasSystem)Raw[6 + 6];\r
+ }\r
+ }\r
+\r
+ public int NumberOfSvData\r
+ {\r
+ get\r
+ {\r
+ return Raw[6 + 8];\r
+ }\r
+ }\r
+\r
+ public SbasStatus[] Status\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
#endregion\r
\r
#region public methods\r
public static bool TryParse(byte[] sentence, out UnknownPacket packet)\r
{\r
packet = null;\r
- if (sentence.Length < 12)\r
+ if (sentence.Length < 20)\r
{\r
return false;\r
}\r
}\r
}\r
\r
- public GpsFixType PositionFixType\r
+ public GpsFixType FixType\r
{\r
get\r
{\r
int x = BitConverter.ToInt32(Raw, 6 + 12);\r
int y = BitConverter.ToInt32(Raw, 6 + 16);\r
int z = BitConverter.ToInt32(Raw, 6 + 20);\r
- uint acc = BitConverter.ToUInt32(Raw, 6 + 24);\r
- return new EcefCoordinate(x, y, z, acc);\r
+ double acc = BitConverter.ToUInt32(Raw, 6 + 24) * 0.01;\r
+ return new EcefCoordinate(x * 0.01, y * 0.01, z * 0.01, acc);\r
}\r
}\r
\r
[Flags]\r
public enum NavigationStatus : byte\r
{\r
- \r
+ GpsFixOk = 0x01,\r
+ DgpsFix = 0x02,\r
+ WeekNumberValid = 0x04,\r
+ TimeOfWeekValid = 0x08,\r
+ }\r
+\r
+ public enum DifferentialStatus : byte\r
+ { \r
+ None = 0,\r
+ PrPrr = 1,\r
+ PrPrrCp = 2,\r
+ HighAccuracyPrPrrCp = 3,\r
}\r
#endregion\r
\r
#region fields\r
- \r
- private NavigationStatus flags;\r
\r
#endregion\r
\r
\r
#region properties\r
\r
+ public decimal TimeOfWeek\r
+ {\r
+ get\r
+ {\r
+ return BitConverter.ToUInt32(Raw, 6 + 0) * 1e-3m;\r
+ }\r
+ }\r
+\r
public GpsFixType PositionFixType\r
{\r
- get;\r
- private set;\r
+ get\r
+ {\r
+ return (GpsFixType)Raw[6 + 4];\r
+ }\r
+ }\r
+\r
+ public NavigationStatus NavigationStatusFlags\r
+ {\r
+ get\r
+ {\r
+ return (NavigationStatus)Raw[6 + 5];\r
+ }\r
+ }\r
+\r
+ public DifferentialStatus DgpsStatus\r
+ {\r
+ get\r
+ {\r
+ return (DifferentialStatus)(Raw[6 + 6] & 3);\r
+ }\r
+ }\r
+\r
+ public TimeSpan TimeToFirstFix\r
+ {\r
+ get\r
+ {\r
+ long ms = BitConverter.ToUInt32(Raw, 6 + 8);\r
+ return new TimeSpan(ms * 10000); // 1e-3 / 100e-9\r
+ }\r
+ }\r
+\r
+ public TimeSpan TimeSinceStartup\r
+ {\r
+ get\r
+ { \r
+ long ms = BitConverter.ToUInt32(Raw, 6 + 12);\r
+ return new TimeSpan(ms * 10000); // 1e-3 / 100e-9\r
+ }\r
}\r
\r
#endregion\r
\r
public static bool TryParse(byte[] sentence, out UnknownPacket packet)\r
{\r
- return TryParse(sentence, out packet, MessageID.NavSol, 52, Build);\r
+ return TryParse(sentence, out packet, \r
+ MessageID.NavStatus, 16, Build);\r
}\r
\r
#endregion\r
\r
private static Packet Build(byte[] sentence, int length)\r
{\r
- return new NavSol(sentence, length);\r
+ return new NavStatus(sentence, length);\r
}\r
\r
#endregion\r
}\r
}\r
\r
- public int SatelliteId\r
+ public int SatelliteID\r
{\r
get\r
{\r
{\r
get\r
{\r
- return ((int)(Raw[4] << 24)) >> 24;\r
+ return (sbyte)(Raw[5]);\r
}\r
}\r
\r
public static bool TryParse(byte[] sentence, out UnknownPacket packet)\r
{\r
packet = null;\r
- if (sentence.Length < 8)\r
+ if (sentence.Length < 16)\r
{\r
return false;\r
}\r
{\r
public class NavTimeUtc : Packet\r
{\r
+ #region type definitions\r
+\r
+ [Flags]\r
+ public enum Validity : byte\r
+ { \r
+ TimeOfWeek = 0x01,\r
+ WeekNumber = 0x02,\r
+ Utc = 0x04,\r
+ }\r
+\r
+ #endregion\r
+\r
#region constructors\r
\r
public NavTimeUtc(byte[] sentence, int length)\r
{ \r
int y = BitConverter.ToUInt16(Raw, 6 + 12);\r
int m = Raw[6 + 14];\r
- int d = Raw[6 + 14];\r
- int h = Raw[6 + 14];\r
- int min = Raw[6 + 14];\r
- int s = Raw[6 + 14];\r
+ int d = Raw[6 + 15];\r
+ int h = Raw[6 + 16];\r
+ int min = Raw[6 + 17];\r
+ int s = Raw[6 + 18];\r
int ftow = BitConverter.ToInt32(Raw, 6 + 8);\r
DateTime utc = new DateTime(y, m, d, h, min, s, \r
DateTimeKind.Utc);\r
return utc.AddTicks(ftow / 100);\r
}\r
}\r
+\r
+ public Validity ValidityFlag\r
+ {\r
+ get\r
+ {\r
+ return (Validity)Raw[19];\r
+ }\r
+ }\r
#endregion\r
\r
#region public methods\r
int x = BitConverter.ToInt32(Raw, 6 + 4);\r
int y = BitConverter.ToInt32(Raw, 6 + 8);\r
int z = BitConverter.ToInt32(Raw, 6 + 12);\r
- uint acc = BitConverter.ToUInt32(Raw, 6 + 16);\r
- return new EcefVelocity(x, y, z, acc);\r
+ double acc = BitConverter.ToUInt32(Raw, 6 + 16) * 0.01;\r
+ return new EcefVelocity(x * 0.01, y * 0.01, z * 0.01, acc);\r
}\r
}\r
\r
int n = BitConverter.ToInt32(Raw, 6 + 4);\r
int e = BitConverter.ToInt32(Raw, 6 + 8);\r
int d = -BitConverter.ToInt32(Raw, 6 + 12);\r
- return new EnuVelocity(e, n, -d);\r
+ return new EnuVelocity(e * 0.01, n * 0.01, -d * 0.01);\r
}\r
}\r
\r
{\r
get\r
{\r
- return BitConverter.ToUInt32(Raw, 6 + 16);\r
+ return BitConverter.ToUInt32(Raw, 6 + 16) * 0.01;\r
}\r
}\r
\r
public double GroundSpeed\r
{\r
- get;\r
- private set;\r
+ get\r
+ {\r
+ return BitConverter.ToUInt32(Raw, 6 + 20) * 0.01;\r
+ }\r
}\r
\r
public Degree Heading\r
{\r
- get;\r
- private set;\r
+ get\r
+ {\r
+ return BitConverter.ToInt32(Raw, 6 + 24) * 1e-5;\r
+ }\r
+ }\r
+\r
+ public double SpeedAccuracy\r
+ {\r
+ get\r
+ {\r
+ return BitConverter.ToUInt32(Raw, 6 + 28) * 0.01;\r
+ }\r
+ }\r
+\r
+ public Degree HeadingAccuracy\r
+ {\r
+ get\r
+ {\r
+ return BitConverter.ToUInt32(Raw, 6 + 32) * 1e-5;\r
+ }\r
}\r
\r
#endregion\r
{\r
return false;\r
}\r
- Packet.MessageID messageId = \r
+ Packet.MessageID messageID = \r
(Packet.MessageID)(sentence[2] << 8 | sentence[3]);\r
- if (parsers.ContainsKey(messageId))\r
+ if (parsers.ContainsKey(messageID))\r
{\r
- return parsers[messageId](sentence, out packet);\r
+ return parsers[messageID](sentence, out packet);\r
}\r
return Unknown.TryParse(sentence, out packet);\r
}\r
{\r
}\r
\r
- public RxmAlm(uint svId)\r
+ public RxmAlm(uint svID)\r
: base(\r
new byte[]\r
{\r
Packet.SyncCharacter1, Packet.SyncCharacter2,\r
0x02, 0x30, // ID\r
0x01, 0x00, // length\r
- (byte)svId, // svid\r
+ (byte)svID, // svid\r
0x00, 0x00 // checksum\r
})\r
{\r
\r
#region properties\r
\r
- public uint SvId\r
+ public uint SvID\r
{\r
get\r
{\r
{\r
get\r
{\r
- return ((int)(Raw[21] << 24)) >> 24; // SByte\r
+ return (sbyte)Raw[21];\r
}\r
}\r
\r
{\r
get\r
{\r
- return ((int)(Raw[22] << 24)) >> 24; // SByte\r
+ return (sbyte)Raw[22];\r
}\r
}\r
\r
public static bool TryParse(byte[] sentence, out UnknownPacket packet)\r
{\r
packet = null;\r
- if (sentence.Length < 8)\r
+ if (sentence.Length < 16)\r
{\r
return false;\r
}\r
}\r
}\r
\r
- public int SatelliteId\r
+ public int SatelliteID\r
{\r
get\r
{\r