OSDN Git Service

境界チェック不具合修正,UBX特化の座標コンストラクタ廃止,パケット実装の拡充と修正
[yubeshi/yubeshi.git] / Yubeshi / Ubx / NavTimeUtc.cs
1 /*\r
2  *      Yubeshi GPS Parser\r
3  *\r
4  *      This software is distributed under a zlib-style license.\r
5  *      See license.txt for more information.\r
6  */\r
7 \r
8 using System;\r
9 using System.Collections.Generic;\r
10 using System.Text;\r
11 \r
12 namespace Yubeshi.Ubx\r
13 {\r
14     public class NavTimeUtc : Packet\r
15     {\r
16         #region type definitions\r
17 \r
18         [Flags]\r
19         public enum Validity : byte\r
20         { \r
21             TimeOfWeek = 0x01,\r
22             WeekNumber = 0x02,\r
23             Utc = 0x04,\r
24         }\r
25 \r
26         #endregion\r
27 \r
28         #region constructors\r
29 \r
30         public NavTimeUtc(byte[] sentence, int length)\r
31             : base(sentence, length)\r
32         {\r
33         }\r
34 \r
35         #endregion\r
36 \r
37         #region properties\r
38 \r
39         public decimal TimeOfWeek\r
40         {\r
41             get\r
42             {\r
43                 uint tow = BitConverter.ToUInt32(Raw, 6 + 0);\r
44                 int ftow = BitConverter.ToInt32(Raw, 6 + 8);\r
45                 return tow * 1e-3m + ftow * 1e-9m;\r
46             }\r
47         }\r
48 \r
49         public decimal Accuracy\r
50         {\r
51             get \r
52             {\r
53                 return BitConverter.ToUInt32(Raw, 6 + 4) * 1e-9m;\r
54             }\r
55         }\r
56 \r
57         public DateTime Utc\r
58         {\r
59             get\r
60             { \r
61                 int y = BitConverter.ToUInt16(Raw, 6 + 12);\r
62                 int m = Raw[6 + 14];\r
63                 int d = Raw[6 + 15];\r
64                 int h = Raw[6 + 16];\r
65                 int min = Raw[6 + 17];\r
66                 int s = Raw[6 + 18];\r
67                 int ftow = BitConverter.ToInt32(Raw, 6 + 8);\r
68                 DateTime utc = new DateTime(y, m, d, h, min, s, \r
69                                                             DateTimeKind.Utc);\r
70                 return utc.AddTicks(ftow / 100);\r
71             }\r
72         }\r
73 \r
74         public Validity ValidityFlag\r
75         {\r
76             get\r
77             {\r
78                 return (Validity)Raw[19];\r
79             }\r
80         }\r
81         #endregion\r
82 \r
83         #region public methods\r
84 \r
85         public static bool TryParse(byte[] sentence, out UnknownPacket packet)\r
86         {\r
87             return TryParse(sentence, out packet, \r
88                                             MessageID.NavTimeUtc, 20, Build);\r
89         }\r
90 \r
91         #endregion\r
92 \r
93         #region private methods\r
94 \r
95         private static Packet Build(byte[] sentence, int length)\r
96         {\r
97             return new NavTimeUtc(sentence, length);\r
98         }\r
99 \r
100         #endregion\r
101     }\r
102 }\r