public class NavSvInfo : Packet\r
{\r
#region type definitions\r
+\r
+ public enum ChipGeneration : byte\r
+ {\r
+ Antaris = 0,\r
+ Ublox5 = 1,\r
+ Ublox6 = 2,\r
+ }\r
+\r
public struct SvInfo\r
{ \r
+\r
+ [Flags]\r
+ public enum Status : byte\r
+ {\r
+ SvUsed = 0x01,\r
+ DifferentialCorrection = 0x02,\r
+ OrbitInformation = 0x04,\r
+ Ephemeris = 0x08,\r
+ Unhealthy = 0x10,\r
+ AlmanacPlus = 0x20,\r
+ AutonomousOrbitPrediction = 0x40,\r
+ }\r
+\r
private byte[] Raw;\r
+\r
+ public int Channel\r
+ {\r
+ get \r
+ { \r
+ return Raw[0];\r
+ }\r
+ }\r
+\r
+ public int SatelliteId\r
+ {\r
+ get\r
+ {\r
+ return Raw[1];\r
+ }\r
+ }\r
+\r
+ public Status StatusFlags\r
+ {\r
+ get\r
+ {\r
+ return (Status)Raw[2];\r
+ }\r
+ }\r
+\r
+ public int Quality\r
+ {\r
+ get\r
+ {\r
+ return Raw[3] & 0x0F;\r
+ }\r
+ }\r
+\r
+ public int SignalStrength\r
+ {\r
+ get\r
+ {\r
+ return Raw[4];\r
+ }\r
+ }\r
+\r
+ public Degree Elevation\r
+ {\r
+ get\r
+ {\r
+ return ((int)(Raw[4] << 24)) >> 24;\r
+ }\r
+ }\r
+\r
+ public Degree Azimuth\r
+ {\r
+ get\r
+ {\r
+ return BitConverter.ToInt16(Raw, 6);\r
+ }\r
+ }\r
+\r
+ public double PseudoRangeResidual\r
+ {\r
+ get\r
+ {\r
+ return BitConverter.ToInt32(Raw, 8) * 0.01;\r
+ }\r
+ }\r
+\r
+ public void Set(byte[] raw)\r
+ {\r
+ Raw = raw;\r
+ }\r
}\r
#endregion\r
\r
public NavSvInfo(byte[] sentence, int length)\r
: base(sentence, length)\r
{\r
+ SvInformation = new SvInfo[NumberOfChannels];\r
+ for (int i = 0; i < NumberOfChannels; ++i)\r
+ {\r
+ SvInformation[i].Set(\r
+ OctetString.Substring(Raw, 14 + 12 * i, 12));\r
+ }\r
}\r
\r
#endregion\r
}\r
}\r
\r
+ public int NumberOfChannels\r
+ {\r
+ get\r
+ {\r
+ return Raw[6 + 4];\r
+ }\r
+ }\r
+\r
+ public ChipGeneration Chip\r
+ {\r
+ get\r
+ {\r
+ return (ChipGeneration)(Raw[6 + 5] & 0x7);\r
+ }\r
+ }\r
+\r
+ public SvInfo[] SvInformation\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
#endregion\r
\r
#region public methods\r