2 * Copyright © 2013 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
18 #ifndef _AO_GPS_UBLOX_H_
19 #define _AO_GPS_UBLOX_H_
22 uint8_t class, message;
26 #define UBLOX_NAV 0x01
28 #define UBLOX_NAV_DOP 0x04
30 struct ublox_nav_dop {
31 uint8_t class; /* 0x01 */
32 uint8_t message; /* 0x04 */
33 uint16_t length; /* 18 */
35 uint32_t itow; /* ms */
45 #define UBLOX_NAV_POSLLH 0x02
47 struct ublox_nav_posllh {
48 uint8_t class; /* 0x01 */
49 uint8_t message; /* 0x02 */
50 uint16_t length; /* 28 */
52 uint32_t itow; /* ms */
53 int32_t lon; /* deg * 1e7 */
54 int32_t lat; /* deg * 1e7 */
55 int32_t height; /* mm */
56 int32_t hmsl; /* mm */
57 uint32_t hacc; /* mm */
58 uint32_t vacc; /* mm */
61 #define UBLOX_NAV_SOL 0x06
63 struct ublox_nav_sol {
64 uint8_t class; /* 0x01 */
65 uint8_t message; /* 0x06 */
66 uint16_t length; /* 52 */
68 uint32_t itow; /* ms */
69 int32_t ftow; /* ns */
73 int32_t exefx; /* cm */
74 int32_t exefy; /* cm */
75 int32_t exefz; /* cm */
76 uint32_t pacc; /* cm */
77 int32_t exefvx; /* cm/s */
78 int32_t exefvy; /* cm/s */
79 int32_t exefvz; /* cm/s */
80 uint32_t sacc; /* cm/s */
81 uint16_t pdop; /* * 100 */
87 #define UBLOX_NAV_SOL_GPSFIX_NO_FIX 0
88 #define UBLOX_NAV_SOL_GPSFIX_DEAD_RECKONING 1
89 #define UBLOX_NAV_SOL_GPSFIX_2D 2
90 #define UBLOX_NAV_SOL_GPSFIX_3D 3
91 #define UBLOX_NAV_SOL_GPSFIX_GPS_DEAD_RECKONING 4
92 #define UBLOX_NAV_SOL_GPSFIX_TIME_ONLY 5
94 #define UBLOX_NAV_SOL_FLAGS_GPSFIXOK 0
95 #define UBLOX_NAV_SOL_FLAGS_DIFFSOLN 1
96 #define UBLOX_NAV_SOL_FLAGS_WKNSET 2
97 #define UBLOX_NAV_SOL_FLAGS_TOWSET 3
99 #define UBLOX_NAV_STATUS 0x03
101 struct ublox_nav_status {
102 uint8_t class; /* 0x01 */
103 uint8_t message; /* 0x03 */
104 uint16_t length; /* 16 */
111 uint32_t ttff; /* ms */
112 uint32_t msss; /* ms */
115 #define UBLOX_NAV_STATUS_GPSFIX_NO_FIX 0
116 #define UBLOX_NAV_STATUS_GPSFIX_DEAD_RECKONING 1
117 #define UBLOX_NAV_STATUS_GPSFIX_2D 2
118 #define UBLOX_NAV_STATUS_GPSFIX_3D 3
119 #define UBLOX_NAV_STATUS_GPSFIX_GPS_DEAD_RECKONING 4
120 #define UBLOX_NAV_STATUS_GPSFIX_TIME_ONLY 5
122 #define UBLOX_NAV_STATUS_FLAGS_GPSFIXOK 0
123 #define UBLOX_NAV_STATUS_FLAGS_DIFFSOLN 1
124 #define UBLOX_NAV_STATUS_FLAGS_WKNSET 2
125 #define UBLOX_NAV_STATUS_FLAGS_TOWSET 3
127 #define UBLOX_NAV_STATUS_FIXSTAT_DGPSISTAT 0
128 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING 6
129 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING_NONE 0
130 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING_VALID 1
131 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING_USED 2
132 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING_DR 3
133 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING_MASK 3
135 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE 0
136 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE_ACQUISITION 0
137 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE_TRACKING 1
138 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE_POWER_OPTIMIZED_TRACKING 2
139 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE_INACTIVE 3
140 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE_MASK 3
142 #define UBLOX_NAV_SVINFO 0x30
144 struct ublox_nav_svinfo {
145 uint8_t class; /* 0x01 */
146 uint8_t message; /* 0x30 */
147 uint16_t length; /* 8 + 12 * numch */
149 uint32_t itow; /* ms */
156 #define UBLOX_NAV_SVINFO_GLOBAL_FLAGS_CHIPGEN 0
157 #define UBLOX_NAV_SVINFO_GLOBAL_FLAGS_CHIPGEN_ANTARIS 0
158 #define UBLOX_NAV_SVINFO_GLOBAL_FLAGS_CHIPGEN_U_BLOX_5 1
159 #define UBLOX_NAV_SVINFO_GLOBAL_FLAGS_CHIPGEN_U_BLOX_6 2
160 #define UBLOX_NAV_SVINFO_GLOBAL_FLAGS_CHIPGEN_MASK 7
162 struct ublox_nav_svinfo_block {
168 uint8_t cno; /* dbHz */
169 int8_t elev; /* deg */
170 int16_t azim; /* deg */
172 int32_t prres; /* cm */
175 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_SVUSED 0
176 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_DIFFCORR 1
177 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_ORBITAVAIL 2
178 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_ORBITEPH 3
179 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_UNHEALTHY 4
180 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_ORBITALM 5
181 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_ORBITAOP 6
182 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_SMOOTHED 7
184 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND 0
185 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_IDLE 0
186 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_SEARCHING 1
187 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_ACQUIRED 2
188 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_UNUSABLE 3
189 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_CODE_LOCK 4
190 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_CARRIER_LOCKED_5 5
191 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_CARRIER_LOCKED_6 6
192 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_CARRIER_LOCKED_7 7
193 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_MASK 7
195 #define UBLOX_NAV_TIMEUTC 0x21
197 struct ublox_nav_timeutc {
198 uint8_t class; /* 0x01 */
199 uint8_t message; /* 0x21 */
200 uint16_t length; /* 20 */
202 uint32_t itow; /* ms */
203 uint32_t tacc; /* ns */
204 int32_t nano; /* ns */
216 #define UBLOX_NAV_TIMEUTC_VALID_VALIDTOW 0
217 #define UBLOX_NAV_TIMEUTC_VALID_VALIDWKN 1
218 #define UBLOX_NAV_TIMEUTC_VALID_VALIDUTC 2
220 #define UBLOX_NAV_VELNED 0x12
222 struct ublox_nav_velned {
223 uint8_t class; /* 0x01 */
224 uint8_t message; /* 0x12 */
225 uint16_t length; /* 36 */
227 uint32_t itow; /* ms */
229 int32_t veln; /* cm/s */
230 int32_t vele; /* cm/s */
231 int32_t veld; /* cm/s */
233 uint32_t speed; /* cm/s */
234 uint32_t gspeed; /* cm/s */
236 int32_t heading; /* deg */
237 uint32_t sacc; /* cm/s */
238 uint32_t cacc; /* deg */
241 #define UBLOX_CFG 0x06
243 #define UBLOX_CFG_NAV5 0x24
245 #define UBLOX_CFG_NAV5_MASK_DYN 0
246 #define UBLOX_CFG_NAV5_MASK_MINE1 1
247 #define UBLOX_CFG_NAV5_MASK_FIXMODE 2
248 #define UBLOX_CFG_NAV5_MASK_DRLIM 3
249 #define UBLOX_CFG_NAV5_MASK_POSMASK 4
250 #define UBLOX_CFG_NAV5_MASK_TIMEMASK 5
251 #define UBLOX_CFG_NAV5_MASK_STATICHOLDMASK 6
252 #define UBLOX_CFG_NAV5_MASK_DGPSMASK 7
254 #define UBLOX_CFG_NAV5_DYNMODEL_PORTABLE 0
255 #define UBLOX_CFG_NAV5_DYNMODEL_STATIONARY 2
256 #define UBLOX_CFG_NAV5_DYNMODEL_PEDESTRIAN 3
257 #define UBLOX_CFG_NAV5_DYNMODEL_AUTOMOTIVE 4
258 #define UBLOX_CFG_NAV5_DYNMODEL_SEA 5
259 #define UBLOX_CFG_NAV5_DYNMODEL_AIRBORNE_1G 6
260 #define UBLOX_CFG_NAV5_DYNMODEL_AIRBORNE_2G 7
261 #define UBLOX_CFG_NAV5_DYNMODEL_AIRBORNE_4G 8
263 #define UBLOX_CFG_NAV5_FIXMODE_2D 1
264 #define UBLOX_CFG_NAV5_FIXMODE_3D 2
265 #define UBLOX_CFG_NAV5_FIXMODE_AUTO 3
267 #endif /* _AO_GPS_UBLOX_H_ */