OSDN Git Service

NavSvInfo,RxmSfrB実装
authorkimikage <kimikage_ceo@hotmail.com>
Wed, 23 Feb 2011 14:08:39 +0000 (23:08 +0900)
committerkimikage <kimikage_ceo@hotmail.com>
Wed, 23 Feb 2011 14:08:39 +0000 (23:08 +0900)
Yubeshi/Ubx/NavSvInfo.cs
Yubeshi/Ubx/Packet.cs
Yubeshi/Ubx/Parser.cs
Yubeshi/Ubx/RxmSfrB.cs [new file with mode: 0755]
Yubeshi/Yubeshi.csproj

index 82b4946..f52a033 100755 (executable)
@@ -14,9 +14,99 @@ namespace Yubeshi.Ubx
     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
@@ -25,6 +115,12 @@ namespace Yubeshi.Ubx
         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
@@ -39,6 +135,28 @@ namespace Yubeshi.Ubx
             }\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
index 0626502..2cec083 100755 (executable)
@@ -51,7 +51,7 @@ namespace Yubeshi.Ubx
             NavSvInfo = 0x0130,\r
             NavSbas = 0x0132,\r
             RxmRaw = 0x0210,\r
-            RxmSfrb = 0x0211,\r
+            RxmSfrB = 0x0211,\r
             RxmSvSI = 0x0220,\r
             RxmAlm = 0x0230,\r
             RxmEph = 0x0231,\r
index e5d99fe..d463e66 100755 (executable)
@@ -48,12 +48,15 @@ namespace Yubeshi.Ubx
             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
diff --git a/Yubeshi/Ubx/RxmSfrB.cs b/Yubeshi/Ubx/RxmSfrB.cs
new file mode 100755 (executable)
index 0000000..6664db9
--- /dev/null
@@ -0,0 +1,75 @@
+/*\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
index d628777..da77dd0 100755 (executable)
@@ -88,6 +88,8 @@
     <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