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
NavSvInfo = 0x0130,\r
NavSbas = 0x0132,\r
RxmRaw = 0x0210,\r
- RxmSfrb = 0x0211,\r
+ RxmSfrB = 0x0211,\r
RxmSvSI = 0x0220,\r
RxmAlm = 0x0230,\r
RxmEph = 0x0231,\r
parsers[Packet.MessageID.NavPosLlh] = NavPosLlh.TryParse;\r
parsers[Packet.MessageID.NavSol] = NavSol.TryParse;\r
parsers[Packet.MessageID.NavStatus] = NavStatus.TryParse;\r
+ parsers[Packet.MessageID.NavSvInfo] = NavSvInfo.TryParse;\r
parsers[Packet.MessageID.NavTimeGps] = NavTimeGps.TryParse;\r
+ parsers[Packet.MessageID.NavTimeUtc] = NavTimeUtc.TryParse;\r
parsers[Packet.MessageID.NavVelEcef] = NavVelEcef.TryParse;\r
parsers[Packet.MessageID.NavVelNed] = NavVelNed.TryParse;\r
\r
parsers[Packet.MessageID.RxmAlm] = RxmAlm.TryParse;\r
parsers[Packet.MessageID.RxmRaw] = RxmRaw.TryParse;\r
+ parsers[Packet.MessageID.RxmSfrB] = RxmSfrB.TryParse;\r
}\r
#endregion\r
\r
--- /dev/null
+/*\r
+ * Yubeshi GPS Parser\r
+ *\r
+ * This software is distributed under a zlib-style license.\r
+ * See license.txt for more information.\r
+ */\r
+\r
+using System;\r
+using System.Collections.Generic;\r
+using System.Text;\r
+\r
+namespace Yubeshi.Ubx\r
+{\r
+ public class RxmSfrB : Packet\r
+ {\r
+ #region constructors\r
+\r
+ public RxmSfrB(byte[] sentence, int length)\r
+ : base(sentence, length)\r
+ {\r
+ Subframe = new uint[10];\r
+ for(int i = 0; i < Subframe.Length; ++i)\r
+ {\r
+ Subframe[i] = BitConverter.ToUInt32(Raw, 8 + 4 * i);\r
+ }\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region properties\r
+\r
+ public int Channel\r
+ {\r
+ get\r
+ {\r
+ return Raw[6 + 0];\r
+ }\r
+ }\r
+\r
+ public int SatelliteId\r
+ {\r
+ get\r
+ {\r
+ return Raw[6 + 1];\r
+ }\r
+ }\r
+\r
+ public uint[] Subframe\r
+ {\r
+ get;\r
+ private set;\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region public methods\r
+\r
+ public static bool TryParse(byte[] sentence, out UnknownPacket packet)\r
+ {\r
+ return TryParse(sentence, out packet, \r
+ MessageID.RxmSfrB, 42, Build);\r
+ }\r
+\r
+ #endregion\r
+\r
+ #region private methods\r
+\r
+ private static Packet Build(byte[] sentence, int length)\r
+ {\r
+ return new RxmSfrB(sentence, length);\r
+ }\r
+\r
+ #endregion\r
+ }\r
+}\r
<Compile Include="Ubx\InfWarning.cs" />\r
<Compile Include="Ubx\InfNotice.cs" />\r
<Compile Include="Ubx\InfTest.cs" />\r
+ <Compile Include="Ubx\Inf.cs" />\r
+ <Compile Include="Ubx\RxmSfrB.cs" />\r
<Compile Include="UnknownPacket.cs" />\r
<Compile Include="EnuVelocity.cs" />\r
<Compile Include="YumaAlmanacReader.cs" />\r