OSDN Git Service

NavSvInfo,RxmSfrB実装
[yubeshi/yubeshi.git] / Yubeshi / Ubx / NavSvInfo.cs
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