OSDN Git Service

境界チェック不具合修正,UBX特化の座標コンストラクタ廃止,パケット実装の拡充と修正
authorkimikage <kimikage_ceo@hotmail.com>
Thu, 24 Feb 2011 12:20:02 +0000 (21:20 +0900)
committerkimikage <kimikage_ceo@hotmail.com>
Thu, 24 Feb 2011 12:20:02 +0000 (21:20 +0900)
18 files changed:
Yubeshi/EcefCoordinate.cs
Yubeshi/EcefVelocity.cs
Yubeshi/EnuVelocity.cs
Yubeshi/Ubx/AidAlm.cs
Yubeshi/Ubx/MonHw2.cs
Yubeshi/Ubx/NavDop.cs
Yubeshi/Ubx/NavPosEcef.cs
Yubeshi/Ubx/NavSbas.cs
Yubeshi/Ubx/NavSol.cs
Yubeshi/Ubx/NavStatus.cs
Yubeshi/Ubx/NavSvInfo.cs
Yubeshi/Ubx/NavTimeUtc.cs
Yubeshi/Ubx/NavVelEcef.cs
Yubeshi/Ubx/NavVelNed.cs
Yubeshi/Ubx/Parser.cs
Yubeshi/Ubx/RxmAlm.cs
Yubeshi/Ubx/RxmRaw.cs
Yubeshi/Ubx/RxmSfrB.cs

index 6f6ed83..d53665f 100755 (executable)
@@ -35,18 +35,6 @@ namespace Yubeshi
             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
index 5f3a7f8..bcb810f 100755 (executable)
@@ -22,17 +22,6 @@ namespace Yubeshi
             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
index 8f3330f..3cd33f9 100755 (executable)
@@ -27,11 +27,6 @@ namespace Yubeshi
             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
index 5efa063..458660f 100755 (executable)
@@ -20,14 +20,14 @@ namespace Yubeshi.Ubx
         {\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
@@ -53,7 +53,7 @@ namespace Yubeshi.Ubx
 \r
         #region properties\r
 \r
-        public uint SvId\r
+        public uint SvID\r
         {\r
             get\r
             {\r
index 732563b..d3d419f 100755 (executable)
@@ -38,7 +38,7 @@ namespace Yubeshi.Ubx
         {\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
@@ -54,7 +54,7 @@ namespace Yubeshi.Ubx
         {\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
index 685c02b..e27911a 100755 (executable)
@@ -36,7 +36,7 @@ namespace Yubeshi.Ubx
         {\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
@@ -44,7 +44,7 @@ namespace Yubeshi.Ubx
         {\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
@@ -52,7 +52,7 @@ namespace Yubeshi.Ubx
         {\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
@@ -60,7 +60,7 @@ namespace Yubeshi.Ubx
         {\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
@@ -68,7 +68,7 @@ namespace Yubeshi.Ubx
         {\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
@@ -76,7 +76,7 @@ namespace Yubeshi.Ubx
         {\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
@@ -84,7 +84,7 @@ namespace Yubeshi.Ubx
         {\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
index 3026f75..71b057e 100755 (executable)
@@ -39,8 +39,8 @@ namespace Yubeshi.Ubx
                 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
index 3049f7e..7e65446 100755 (executable)
@@ -14,6 +14,23 @@ namespace Yubeshi.Ubx
     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
@@ -39,6 +56,43 @@ namespace Yubeshi.Ubx
             }\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
@@ -46,7 +100,7 @@ namespace Yubeshi.Ubx
         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
index adb4cfa..106aca9 100755 (executable)
@@ -50,7 +50,7 @@ namespace Yubeshi.Ubx
             }\r
         }\r
 \r
-        public GpsFixType PositionFixType\r
+        public GpsFixType FixType\r
         {\r
             get\r
             {\r
@@ -73,8 +73,8 @@ namespace Yubeshi.Ubx
                 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
index 4c7311e..e08d4e4 100755 (executable)
@@ -17,13 +17,22 @@ namespace Yubeshi.Ubx
         [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
@@ -38,10 +47,54 @@ namespace Yubeshi.Ubx
 \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
@@ -50,7 +103,8 @@ namespace Yubeshi.Ubx
 \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
@@ -59,7 +113,7 @@ namespace Yubeshi.Ubx
 \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
index f52a033..4434e3c 100755 (executable)
@@ -47,7 +47,7 @@ namespace Yubeshi.Ubx
                 }\r
             }\r
 \r
-            public int SatelliteId\r
+            public int SatelliteID\r
             {\r
                 get\r
                 {\r
@@ -83,7 +83,7 @@ namespace Yubeshi.Ubx
             {\r
                 get\r
                 {\r
-                    return ((int)(Raw[4] << 24)) >> 24;\r
+                    return (sbyte)(Raw[5]);\r
                 }\r
             }\r
 \r
@@ -164,7 +164,7 @@ namespace Yubeshi.Ubx
         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
index 552601b..b456b41 100755 (executable)
@@ -13,6 +13,18 @@ namespace Yubeshi.Ubx
 {\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
@@ -48,16 +60,24 @@ namespace Yubeshi.Ubx
             { \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
index 1096e1b..653bdae 100755 (executable)
@@ -39,8 +39,8 @@ namespace Yubeshi.Ubx
                 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
index 12d1c87..335f81c 100755 (executable)
@@ -39,7 +39,7 @@ namespace Yubeshi.Ubx
                 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
@@ -47,20 +47,40 @@ namespace Yubeshi.Ubx
         {\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
index d463e66..6f16ff6 100755 (executable)
@@ -90,11 +90,11 @@ namespace Yubeshi.Ubx
             {\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
index 14ea90c..d7ade82 100755 (executable)
@@ -20,14 +20,14 @@ namespace Yubeshi.Ubx
         {\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
@@ -54,7 +54,7 @@ namespace Yubeshi.Ubx
 \r
         #region properties\r
 \r
-        public uint SvId\r
+        public uint SvID\r
         {\r
             get\r
             {\r
index fecfda1..8756fca 100755 (executable)
@@ -58,7 +58,7 @@ namespace Yubeshi.Ubx
             {\r
                 get\r
                 {\r
-                    return ((int)(Raw[21] << 24)) >> 24; // SByte\r
+                    return (sbyte)Raw[21];\r
                 }\r
             }\r
 \r
@@ -66,7 +66,7 @@ namespace Yubeshi.Ubx
             {\r
                 get\r
                 {\r
-                    return ((int)(Raw[22] << 24)) >> 24; // SByte\r
+                    return (sbyte)Raw[22];\r
                 }\r
             }\r
 \r
@@ -147,7 +147,7 @@ namespace Yubeshi.Ubx
         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
index 6664db9..c9fac30 100755 (executable)
@@ -37,7 +37,7 @@ namespace Yubeshi.Ubx
             }\r
         }\r
 \r
-        public int SatelliteId\r
+        public int SatelliteID\r
         {\r
             get\r
             {\r