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; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
19 #ifndef _AO_GPS_UBLOX_H_
20 #define _AO_GPS_UBLOX_H_
23 uint8_t class, message;
27 #define UBLOX_NAV 0x01
29 #define UBLOX_NAV_DOP 0x04
31 struct ublox_nav_dop {
32 uint8_t class; /* 0x01 */
33 uint8_t message; /* 0x04 */
34 uint16_t length; /* 18 */
36 uint32_t itow; /* ms */
46 #define UBLOX_NAV_POSLLH 0x02
48 struct ublox_nav_posllh {
49 uint8_t class; /* 0x01 */
50 uint8_t message; /* 0x02 */
51 uint16_t length; /* 28 */
53 uint32_t itow; /* ms */
54 int32_t lon; /* deg * 1e7 */
55 int32_t lat; /* deg * 1e7 */
56 int32_t height; /* mm */
57 int32_t hmsl; /* mm */
58 uint32_t hacc; /* mm */
59 uint32_t vacc; /* mm */
62 #define UBLOX_NAV_SOL 0x06
64 struct ublox_nav_sol {
65 uint8_t class; /* 0x01 */
66 uint8_t message; /* 0x06 */
67 uint16_t length; /* 52 */
69 uint32_t itow; /* ms */
70 int32_t ftow; /* ns */
74 int32_t exefx; /* cm */
75 int32_t exefy; /* cm */
76 int32_t exefz; /* cm */
77 uint32_t pacc; /* cm */
78 int32_t exefvx; /* cm/s */
79 int32_t exefvy; /* cm/s */
80 int32_t exefvz; /* cm/s */
81 uint32_t sacc; /* cm/s */
82 uint16_t pdop; /* * 100 */
88 #define UBLOX_NAV_SOL_GPSFIX_NO_FIX 0
89 #define UBLOX_NAV_SOL_GPSFIX_DEAD_RECKONING 1
90 #define UBLOX_NAV_SOL_GPSFIX_2D 2
91 #define UBLOX_NAV_SOL_GPSFIX_3D 3
92 #define UBLOX_NAV_SOL_GPSFIX_GPS_DEAD_RECKONING 4
93 #define UBLOX_NAV_SOL_GPSFIX_TIME_ONLY 5
95 #define UBLOX_NAV_SOL_FLAGS_GPSFIXOK 0
96 #define UBLOX_NAV_SOL_FLAGS_DIFFSOLN 1
97 #define UBLOX_NAV_SOL_FLAGS_WKNSET 2
98 #define UBLOX_NAV_SOL_FLAGS_TOWSET 3
100 #define UBLOX_NAV_STATUS 0x03
102 struct ublox_nav_status {
103 uint8_t class; /* 0x01 */
104 uint8_t message; /* 0x03 */
105 uint16_t length; /* 16 */
112 uint32_t ttff; /* ms */
113 uint32_t msss; /* ms */
116 #define UBLOX_NAV_STATUS_GPSFIX_NO_FIX 0
117 #define UBLOX_NAV_STATUS_GPSFIX_DEAD_RECKONING 1
118 #define UBLOX_NAV_STATUS_GPSFIX_2D 2
119 #define UBLOX_NAV_STATUS_GPSFIX_3D 3
120 #define UBLOX_NAV_STATUS_GPSFIX_GPS_DEAD_RECKONING 4
121 #define UBLOX_NAV_STATUS_GPSFIX_TIME_ONLY 5
123 #define UBLOX_NAV_STATUS_FLAGS_GPSFIXOK 0
124 #define UBLOX_NAV_STATUS_FLAGS_DIFFSOLN 1
125 #define UBLOX_NAV_STATUS_FLAGS_WKNSET 2
126 #define UBLOX_NAV_STATUS_FLAGS_TOWSET 3
128 #define UBLOX_NAV_STATUS_FIXSTAT_DGPSISTAT 0
129 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING 6
130 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING_NONE 0
131 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING_VALID 1
132 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING_USED 2
133 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING_DR 3
134 #define UBLOX_NAV_STATUS_FIXSTAT_MAPMATCHING_MASK 3
136 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE 0
137 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE_ACQUISITION 0
138 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE_TRACKING 1
139 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE_POWER_OPTIMIZED_TRACKING 2
140 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE_INACTIVE 3
141 #define UBLOX_NAV_STATUS_FLAGS2_PSMSTATE_MASK 3
143 #define UBLOX_NAV_SVINFO 0x30
145 struct ublox_nav_svinfo {
146 uint8_t class; /* 0x01 */
147 uint8_t message; /* 0x30 */
148 uint16_t length; /* 8 + 12 * numch */
150 uint32_t itow; /* ms */
157 #define UBLOX_NAV_SVINFO_GLOBAL_FLAGS_CHIPGEN 0
158 #define UBLOX_NAV_SVINFO_GLOBAL_FLAGS_CHIPGEN_ANTARIS 0
159 #define UBLOX_NAV_SVINFO_GLOBAL_FLAGS_CHIPGEN_U_BLOX_5 1
160 #define UBLOX_NAV_SVINFO_GLOBAL_FLAGS_CHIPGEN_U_BLOX_6 2
161 #define UBLOX_NAV_SVINFO_GLOBAL_FLAGS_CHIPGEN_MASK 7
163 struct ublox_nav_svinfo_block {
169 uint8_t cno; /* dbHz */
170 int8_t elev; /* deg */
171 int16_t azim; /* deg */
173 int32_t prres; /* cm */
176 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_SVUSED 0
177 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_DIFFCORR 1
178 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_ORBITAVAIL 2
179 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_ORBITEPH 3
180 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_UNHEALTHY 4
181 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_ORBITALM 5
182 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_ORBITAOP 6
183 #define UBLOX_NAV_SVINFO_BLOCK_FLAGS_SMOOTHED 7
185 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND 0
186 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_IDLE 0
187 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_SEARCHING 1
188 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_ACQUIRED 2
189 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_UNUSABLE 3
190 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_CODE_LOCK 4
191 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_CARRIER_LOCKED_5 5
192 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_CARRIER_LOCKED_6 6
193 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_CARRIER_LOCKED_7 7
194 #define UBLOX_NAV_SVINFO_BLOCK_QUALITY_QUALITYIND_MASK 7
196 #define UBLOX_NAV_TIMEUTC 0x21
198 struct ublox_nav_timeutc {
199 uint8_t class; /* 0x01 */
200 uint8_t message; /* 0x21 */
201 uint16_t length; /* 20 */
203 uint32_t itow; /* ms */
204 uint32_t tacc; /* ns */
205 int32_t nano; /* ns */
217 #define UBLOX_NAV_TIMEUTC_VALID_VALIDTOW 0
218 #define UBLOX_NAV_TIMEUTC_VALID_VALIDWKN 1
219 #define UBLOX_NAV_TIMEUTC_VALID_VALIDUTC 2
221 #define UBLOX_NAV_VELNED 0x12
223 struct ublox_nav_velned {
224 uint8_t class; /* 0x01 */
225 uint8_t message; /* 0x12 */
226 uint16_t length; /* 36 */
228 uint32_t itow; /* ms */
230 int32_t veln; /* cm/s */
231 int32_t vele; /* cm/s */
232 int32_t veld; /* cm/s */
234 uint32_t speed; /* cm/s */
235 uint32_t gspeed; /* cm/s */
237 int32_t heading; /* deg */
238 uint32_t sacc; /* cm/s */
239 uint32_t cacc; /* deg */
242 #define UBLOX_CFG 0x06
244 #define UBLOX_CFG_NAV5 0x24
246 #define UBLOX_CFG_NAV5_MASK_DYN 0
247 #define UBLOX_CFG_NAV5_MASK_MINE1 1
248 #define UBLOX_CFG_NAV5_MASK_FIXMODE 2
249 #define UBLOX_CFG_NAV5_MASK_DRLIM 3
250 #define UBLOX_CFG_NAV5_MASK_POSMASK 4
251 #define UBLOX_CFG_NAV5_MASK_TIMEMASK 5
252 #define UBLOX_CFG_NAV5_MASK_STATICHOLDMASK 6
253 #define UBLOX_CFG_NAV5_MASK_DGPSMASK 7
255 #define UBLOX_CFG_NAV5_DYNMODEL_PORTABLE 0
256 #define UBLOX_CFG_NAV5_DYNMODEL_STATIONARY 2
257 #define UBLOX_CFG_NAV5_DYNMODEL_PEDESTRIAN 3
258 #define UBLOX_CFG_NAV5_DYNMODEL_AUTOMOTIVE 4
259 #define UBLOX_CFG_NAV5_DYNMODEL_SEA 5
260 #define UBLOX_CFG_NAV5_DYNMODEL_AIRBORNE_1G 6
261 #define UBLOX_CFG_NAV5_DYNMODEL_AIRBORNE_2G 7
262 #define UBLOX_CFG_NAV5_DYNMODEL_AIRBORNE_4G 8
264 #define UBLOX_CFG_NAV5_FIXMODE_2D 1
265 #define UBLOX_CFG_NAV5_FIXMODE_3D 2
266 #define UBLOX_CFG_NAV5_FIXMODE_AUTO 3
268 #endif /* _AO_GPS_UBLOX_H_ */