1 /*
2  * This file is Copyright (c) 2010 by the GPSD project
3  * BSD terms apply: see the file COPYING in the distribution root for details
4  */
5 #ifndef _GPSD_UBX_H_
6 #define _GPSD_UBX_H_
7 
8 #define UBX_MESSAGE_BASE_SIZE 6
9 #define UBX_MESSAGE_DATA_OFFSET UBX_MESSAGE_BASE_SIZE
10 
11 typedef enum {
12     UBX_CLASS_NAV = 0x01,     /**< Navigation */
13     UBX_CLASS_RXM = 0x02,     /**< Receiver Manager */
14     UBX_CLASS_INF = 0x04,     /**< Informative text messages */
15     UBX_CLASS_ACK = 0x05,     /**< (Not) Acknowledges for cfg messages */
16     UBX_CLASS_CFG = 0x06,     /**< Configuration requests */
17     UBX_CLASS_UPD = 0x09,     /**< Firmware updates */
18     UBX_CLASS_MON = 0x0a,     /**< System monitoring */
19     UBX_CLASS_AID = 0x0b,     /**< AGPS (Deprecated) */
20     UBX_CLASS_TIM = 0x0d,     /**< Time */
21     UBX_CLASS_ESF = 0x10,     /**< External Sensor Fusion */
22     UBX_CLASS_MGA = 0x13,     /**< Multi GNSS Assistance */
23     UBX_CLASS_LOG = 0x21,     /**< Log */
24     UBX_CLASS_SEC = 0x27,     /**< Security */
25     UBX_CLASS_HNR = 0x28,     /**< High Rate Nav Results  */
26     UBX_CLASS_NMEA = 0xf0,    /**< NMEA, for configuring */
27     UBX_CLASS_RTCM3 = 0xf5,   /**< RTCM3, for configuring */
28 } ubx_classes_t;
29 
30 #define UBX_MSGID(cls_, id_) (((cls_)<<8)|(id_))
31 
32 typedef enum {
33     UBX_NAV_POSECEF	= UBX_MSGID(UBX_CLASS_NAV, 0x01),
34     UBX_NAV_POSLLH	= UBX_MSGID(UBX_CLASS_NAV, 0x02),
35     UBX_NAV_STATUS	= UBX_MSGID(UBX_CLASS_NAV, 0x03),
36     UBX_NAV_DOP		= UBX_MSGID(UBX_CLASS_NAV, 0x04),
37     UBX_NAV_ATT		= UBX_MSGID(UBX_CLASS_NAV, 0x05),
38     UBX_NAV_SOL		= UBX_MSGID(UBX_CLASS_NAV, 0x06),
39     UBX_NAV_PVT	        = UBX_MSGID(UBX_CLASS_NAV, 0x07),
40     UBX_NAV_POSUTM	= UBX_MSGID(UBX_CLASS_NAV, 0x08),
41     UBX_NAV_ODO 	= UBX_MSGID(UBX_CLASS_NAV, 0x09),
42     UBX_NAV_RESETODO 	= UBX_MSGID(UBX_CLASS_NAV, 0x10),
43     UBX_NAV_VELECEF	= UBX_MSGID(UBX_CLASS_NAV, 0x11),
44     UBX_NAV_VELNED	= UBX_MSGID(UBX_CLASS_NAV, 0x12),
45     UBX_NAV_HPPOSECEF	= UBX_MSGID(UBX_CLASS_NAV, 0x13),
46     UBX_NAV_HPPOSLLH 	= UBX_MSGID(UBX_CLASS_NAV, 0x14),
47     UBX_NAV_TIMEGPS	= UBX_MSGID(UBX_CLASS_NAV, 0x20),
48     UBX_NAV_TIMEUTC	= UBX_MSGID(UBX_CLASS_NAV, 0x21),
49     UBX_NAV_CLOCK	= UBX_MSGID(UBX_CLASS_NAV, 0x22),
50     UBX_NAV_TIMEGLO	= UBX_MSGID(UBX_CLASS_NAV, 0x23),
51     UBX_NAV_TIMEBDS	= UBX_MSGID(UBX_CLASS_NAV, 0x24),
52     UBX_NAV_TIMEGAL	= UBX_MSGID(UBX_CLASS_NAV, 0x25),
53     UBX_NAV_TIMELS	= UBX_MSGID(UBX_CLASS_NAV, 0x26),
54     UBX_NAV_SVINFO	= UBX_MSGID(UBX_CLASS_NAV, 0x30),
55     UBX_NAV_DGPS	= UBX_MSGID(UBX_CLASS_NAV, 0x31),
56     UBX_NAV_SBAS	= UBX_MSGID(UBX_CLASS_NAV, 0x32),
57     UBX_NAV_ORB 	= UBX_MSGID(UBX_CLASS_NAV, 0x34),
58     UBX_NAV_SAT 	= UBX_MSGID(UBX_CLASS_NAV, 0x35),
59     UBX_NAV_GEOFENCE	= UBX_MSGID(UBX_CLASS_NAV, 0x39),
60     UBX_NAV_SVIN	= UBX_MSGID(UBX_CLASS_NAV, 0x3b),
61     UBX_NAV_RELPOSNED	= UBX_MSGID(UBX_CLASS_NAV, 0x3c),
62     UBX_NAV_EKFSTATUS	= UBX_MSGID(UBX_CLASS_NAV, 0x40),
63     UBX_NAV_SIG	        = UBX_MSGID(UBX_CLASS_NAV, 0x43),
64     UBX_NAV_AOPSTATUS	= UBX_MSGID(UBX_CLASS_NAV, 0x60),
65     UBX_NAV_EOE   	= UBX_MSGID(UBX_CLASS_NAV, 0x61),
66 
67     UBX_RXM_RAW		= UBX_MSGID(UBX_CLASS_RXM, 0x10),
68     UBX_RXM_SFRB	= UBX_MSGID(UBX_CLASS_RXM, 0x11),
69     UBX_RXM_SFRBX	= UBX_MSGID(UBX_CLASS_RXM, 0x13),
70     UBX_RXM_MEASX	= UBX_MSGID(UBX_CLASS_RXM, 0x14),
71     UBX_RXM_RAWX	= UBX_MSGID(UBX_CLASS_RXM, 0x15),
72     UBX_RXM_SVSI	= UBX_MSGID(UBX_CLASS_RXM, 0x20),
73     UBX_RXM_ALM		= UBX_MSGID(UBX_CLASS_RXM, 0x30),
74     UBX_RXM_EPH		= UBX_MSGID(UBX_CLASS_RXM, 0x31),
75     UBX_RXM_RTCM	= UBX_MSGID(UBX_CLASS_RXM, 0x32),
76     UBX_RXM_POSREQ	= UBX_MSGID(UBX_CLASS_RXM, 0x40),
77     UBX_RXM_PMREQ	= UBX_MSGID(UBX_CLASS_RXM, 0x41),
78     UBX_RXM_RLM 	= UBX_MSGID(UBX_CLASS_RXM, 0x59),
79     UBX_RXM_IMES	= UBX_MSGID(UBX_CLASS_RXM, 0x61),
80 
81     UBX_INF_ERROR	= UBX_MSGID(UBX_CLASS_INF, 0X00),
82     UBX_INF_WARNING	= UBX_MSGID(UBX_CLASS_INF, 0X01),
83     UBX_INF_NOTICE	= UBX_MSGID(UBX_CLASS_INF, 0x02),
84     UBX_INF_TEST	= UBX_MSGID(UBX_CLASS_INF, 0x03),
85     UBX_INF_DEBUG	= UBX_MSGID(UBX_CLASS_INF, 0x04),
86     /* where is UBX-INF-USER documented? */
87     UBX_INF_USER	= UBX_MSGID(UBX_CLASS_INF, 0x07),
88 
89     UBX_ACK_NAK		= UBX_MSGID(UBX_CLASS_ACK, 0x00),
90     UBX_ACK_ACK		= UBX_MSGID(UBX_CLASS_ACK, 0x01),
91 
92     UBX_CFG_PRT		= UBX_MSGID(UBX_CLASS_CFG, 0x00),
93     UBX_CFG_MSG		= UBX_MSGID(UBX_CLASS_CFG, 0x01),
94     UBX_CFG_INF		= UBX_MSGID(UBX_CLASS_CFG, 0x02),
95     UBX_CFG_RST		= UBX_MSGID(UBX_CLASS_CFG, 0x04),
96     UBX_CFG_DAT		= UBX_MSGID(UBX_CLASS_CFG, 0x06),
97     UBX_CFG_RATE	= UBX_MSGID(UBX_CLASS_CFG, 0x08),
98     UBX_CFG_CFG		= UBX_MSGID(UBX_CLASS_CFG, 0x09),
99     UBX_CFG_RXM		= UBX_MSGID(UBX_CLASS_CFG, 0x11),
100     UBX_CFG_ANT		= UBX_MSGID(UBX_CLASS_CFG, 0x13),
101     UBX_CFG_SBAS	= UBX_MSGID(UBX_CLASS_CFG, 0x16),
102     UBX_CFG_NMEA	= UBX_MSGID(UBX_CLASS_CFG, 0x17),
103     UBX_CFG_USB 	= UBX_MSGID(UBX_CLASS_CFG, 0x1b),
104     UBX_CFG_ODO 	= UBX_MSGID(UBX_CLASS_CFG, 0x1e),
105     UBX_CFG_NAVX5	= UBX_MSGID(UBX_CLASS_CFG, 0x23),
106     UBX_CFG_NAV5	= UBX_MSGID(UBX_CLASS_CFG, 0x24),
107     UBX_CFG_TP5 	= UBX_MSGID(UBX_CLASS_CFG, 0x31),
108     UBX_CFG_RINV	= UBX_MSGID(UBX_CLASS_CFG, 0x34),
109     UBX_CFG_ITFM	= UBX_MSGID(UBX_CLASS_CFG, 0x39),
110     UBX_CFG_PM2 	= UBX_MSGID(UBX_CLASS_CFG, 0x3b),
111     UBX_CFG_TMODE2 	= UBX_MSGID(UBX_CLASS_CFG, 0x3D),
112     UBX_CFG_GNSS	= UBX_MSGID(UBX_CLASS_CFG, 0x3e),
113     UBX_CFG_LOGFILTER	= UBX_MSGID(UBX_CLASS_CFG, 0x47),
114     UBX_CFG_TXSLOT 	= UBX_MSGID(UBX_CLASS_CFG, 0x53),
115     UBX_CFG_PWR 	= UBX_MSGID(UBX_CLASS_CFG, 0x57),
116     UBX_CFG_HNR 	= UBX_MSGID(UBX_CLASS_CFG, 0x5c),
117     UBX_CFG_ESRC	= UBX_MSGID(UBX_CLASS_CFG, 0x60),
118     UBX_CFG_DOSC	= UBX_MSGID(UBX_CLASS_CFG, 0x61),
119     UBX_CFG_SMGR	= UBX_MSGID(UBX_CLASS_CFG, 0x62),
120     UBX_CFG_GEOFENCE	= UBX_MSGID(UBX_CLASS_CFG, 0x69),
121     UBX_CFG_DGNSS	= UBX_MSGID(UBX_CLASS_CFG, 0x70),
122     UBX_CFG_TMODE3 	= UBX_MSGID(UBX_CLASS_CFG, 0x71),
123     UBX_CFG_FIXSEED	= UBX_MSGID(UBX_CLASS_CFG, 0x84),
124     UBX_CFG_DYNSEED	= UBX_MSGID(UBX_CLASS_CFG, 0x85),
125     UBX_CFG_PMS 	= UBX_MSGID(UBX_CLASS_CFG, 0x86),
126 
127     UBX_UPD_DOWNL	= UBX_MSGID(UBX_CLASS_UPD, 0x01),
128     UBX_UPD_UPLOAD	= UBX_MSGID(UBX_CLASS_UPD, 0x02),
129     UBX_UPD_EXEC	= UBX_MSGID(UBX_CLASS_UPD, 0x03),
130     UBX_UPD_MEMCPY	= UBX_MSGID(UBX_CLASS_UPD, 0x04),
131     UBX_UPD_SOS 	= UBX_MSGID(UBX_CLASS_UPD, 0x14),
132 
133     UBX_MON_SCHED	= UBX_MSGID(UBX_CLASS_MON, 0x01),
134     UBX_MON_IO		= UBX_MSGID(UBX_CLASS_MON, 0x02),
135     UBX_MON_IPC		= UBX_MSGID(UBX_CLASS_MON, 0x03),
136     UBX_MON_VER		= UBX_MSGID(UBX_CLASS_MON, 0x04),
137     UBX_MON_EXCEPT	= UBX_MSGID(UBX_CLASS_MON, 0x05),
138     UBX_MON_MSGPP	= UBX_MSGID(UBX_CLASS_MON, 0x06),
139     UBX_MON_RXBUF	= UBX_MSGID(UBX_CLASS_MON, 0x07),
140     UBX_MON_TXBUF	= UBX_MSGID(UBX_CLASS_MON, 0x08),
141     UBX_MON_HW		= UBX_MSGID(UBX_CLASS_MON, 0x09),
142     UBX_MON_USB		= UBX_MSGID(UBX_CLASS_MON, 0x0a),
143     UBX_MON_HW2		= UBX_MSGID(UBX_CLASS_MON, 0x0b),
144     UBX_MON_RXR 	= UBX_MSGID(UBX_CLASS_MON, 0x21),
145     UBX_MON_PATCH	= UBX_MSGID(UBX_CLASS_MON, 0x27),
146     UBX_MON_GNSS	= UBX_MSGID(UBX_CLASS_MON, 0x28),
147     UBX_MON_SMGR	= UBX_MSGID(UBX_CLASS_MON, 0x2e),
148 
149     /* USB-AID- Deprecated */
150     UBX_AID_REQ		= UBX_MSGID(UBX_CLASS_AID, 0x00),
151     UBX_AID_INI		= UBX_MSGID(UBX_CLASS_AID, 0x01),
152     UBX_AID_HUI		= UBX_MSGID(UBX_CLASS_AID, 0x02),
153     UBX_AID_DATA	= UBX_MSGID(UBX_CLASS_AID, 0x10),
154     UBX_AID_ALM		= UBX_MSGID(UBX_CLASS_AID, 0x30),
155     UBX_AID_EPH		= UBX_MSGID(UBX_CLASS_AID, 0x31),
156     UBX_AID_AOP		= UBX_MSGID(UBX_CLASS_AID, 0x33),
157 
158     UBX_TIM_TP		= UBX_MSGID(UBX_CLASS_TIM, 0x01),
159     UBX_TIM_TM		= UBX_MSGID(UBX_CLASS_TIM, 0x02),
160     UBX_TIM_TM2		= UBX_MSGID(UBX_CLASS_TIM, 0x03),
161     UBX_TIM_SVIN	= UBX_MSGID(UBX_CLASS_TIM, 0x04),
162     UBX_TIM_VRFY	= UBX_MSGID(UBX_CLASS_TIM, 0x06),
163     UBX_TIM_DOSC	= UBX_MSGID(UBX_CLASS_TIM, 0x11),
164     UBX_TIM_TOS 	= UBX_MSGID(UBX_CLASS_TIM, 0x12),
165     UBX_TIM_SMEAS 	= UBX_MSGID(UBX_CLASS_TIM, 0x13),
166     UBX_TIM_VCOCAL 	= UBX_MSGID(UBX_CLASS_TIM, 0x15),
167     UBX_TIM_FCHG 	= UBX_MSGID(UBX_CLASS_TIM, 0x16),
168     UBX_TIM_HOC 	= UBX_MSGID(UBX_CLASS_TIM, 0x17),
169 
170     UBX_ESF_MEAS 	= UBX_MSGID(UBX_CLASS_SEC, 0x02),
171     UBX_ESF_RAW 	= UBX_MSGID(UBX_CLASS_SEC, 0x03),
172     UBX_ESF_STATUS 	= UBX_MSGID(UBX_CLASS_SEC, 0x10),
173     UBX_ESF_INS 	= UBX_MSGID(UBX_CLASS_SEC, 0x15),
174 
175     UBX_MGA_GPS 	= UBX_MSGID(UBX_CLASS_MGA, 0x00),
176     UBX_MGA_GAL 	= UBX_MSGID(UBX_CLASS_MGA, 0x02),
177     UBX_MGA_BDS 	= UBX_MSGID(UBX_CLASS_MGA, 0x03),
178     UBX_MGA_QZSS 	= UBX_MSGID(UBX_CLASS_MGA, 0x05),
179     UBX_MGA_GLO 	= UBX_MSGID(UBX_CLASS_MGA, 0x06),
180     UBX_MGA_ANO 	= UBX_MSGID(UBX_CLASS_MGA, 0x20),
181     UBX_MGA_FLASH 	= UBX_MSGID(UBX_CLASS_MGA, 0x21),
182     UBX_MGA_INI 	= UBX_MSGID(UBX_CLASS_MGA, 0x40),
183     UBX_MGA_ACK 	= UBX_MSGID(UBX_CLASS_MGA, 0x60),
184     UBX_MGA_DBD 	= UBX_MSGID(UBX_CLASS_MGA, 0x80),
185 
186     UBX_LOG_ERASE               = UBX_MSGID(UBX_CLASS_LOG, 0x03),
187     UBX_LOG_STRING              = UBX_MSGID(UBX_CLASS_LOG, 0x04),
188     UBX_LOG_CREATE              = UBX_MSGID(UBX_CLASS_LOG, 0x07),
189     UBX_LOG_INFO                = UBX_MSGID(UBX_CLASS_LOG, 0x08),
190     UBX_LOG_RETRIEVE            = UBX_MSGID(UBX_CLASS_LOG, 0x09),
191     UBX_LOG_RETRIEVEPOS         = UBX_MSGID(UBX_CLASS_LOG, 0x0b),
192     UBX_LOG_RETRIEVESTRING      = UBX_MSGID(UBX_CLASS_LOG, 0x0d),
193     UBX_LOG_FINDTIME            = UBX_MSGID(UBX_CLASS_LOG, 0x0e),
194     UBX_LOG_RETRIEVEPOSEXTRA    = UBX_MSGID(UBX_CLASS_LOG, 0x0f),
195 
196     UBX_SEC_SIGN	= UBX_MSGID(UBX_CLASS_SEC, 0x01),
197     UBX_SEC_UNIQID	= UBX_MSGID(UBX_CLASS_SEC, 0x03),
198 
199     UBX_HNR_PVT 	= UBX_MSGID(UBX_CLASS_HNR, 0x00),
200 } ubx_message_t;
201 
202 typedef enum {
203     UBX_MODE_NOFIX  = 0x00,	/* no fix available */
204     UBX_MODE_DR	    = 0x01,	/* Dead reckoning */
205     UBX_MODE_2D	    = 0x02,	/* 2D fix */
206     UBX_MODE_3D	    = 0x03,	/* 3D fix */
207     UBX_MODE_GPSDR  = 0x04,	/* GPS + dead reckoning */
208     UBX_MODE_TMONLY = 0x05,	/* Time-only fix */
209 } ubx_mode_t;
210 
211 #define UBX_SOL_FLAG_GPS_FIX_OK 0x01
212 #define UBX_SOL_FLAG_DGPS 0x02
213 #define UBX_SOL_VALID_WEEK 0x04
214 #define UBX_SOL_VALID_TIME 0x08
215 
216 #define UBX_TIMEGPS_VALID_TIME        0x01
217 #define UBX_TIMEGPS_VALID_WEEK        0x02
218 #define UBX_TIMEGPS_VALID_LEAP_SECOND 0x04
219 
220 /* from UBX_NAV_SVINFO */
221 #define UBX_SAT_USED 0x01
222 #define UBX_SAT_DGPS 0x02
223 #define UBX_SAT_EPHALM 0x04
224 #define UBX_SAT_EPHEM 0x08
225 #define UBX_SAT_UNHEALTHY 0x10
226 
227 #define UBX_SIG_IDLE 0
228 #define UBX_SIG_SRCH1 1
229 #define UBX_SIG_SRCH2 2
230 #define UBX_SIG_DETECT 3
231 #define UBX_SIG_CDLK 4
232 #define UBX_SIG_CDCRLK1 5
233 #define UBX_SIG_CDCRLK2 6
234 #define UBX_SIG_NAVMSG 7
235 
236 #define UBX_NAV_PVT_VALID_DATE      0x01
237 #define UBX_NAV_PVT_VALID_TIME      0x02
238 #define UBX_NAV_PVT_VALID_RESL      0x04
239 #define UBX_NAV_PVT_VALID_DATE_TIME (UBX_NAV_PVT_VALID_DATE | UBX_NAV_PVT_VALID_TIME)
240 #define UBX_NAV_PVT_VALID_MAG       0x08
241 
242 #define UBX_NAV_PVT_FLAG_GPS_FIX_OK 0x01
243 #define UBX_NAV_PVT_FLAG_DGPS       0x02
244 #define UBX_NAV_PVT_FLAG_HDG_OK     0x20
245 
246 #endif /* _GPSD_UBX_H_ */
247