Zephyr Project API 4.1.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
protocol.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2025 Croxel Inc.
3 * Copyright (c) 2025 CogniPilot Foundation
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef ZEPHYR_MODEM_UBX_PROTOCOL_
9#define ZEPHYR_MODEM_UBX_PROTOCOL_
10
11#include <stdint.h>
13
14#define UBX_FRAME_HEADER_SZ 6
15#define UBX_FRAME_FOOTER_SZ 2
16#define UBX_FRAME_SZ_WITHOUT_PAYLOAD (UBX_FRAME_HEADER_SZ + UBX_FRAME_FOOTER_SZ)
17#define UBX_FRAME_SZ(payload_size) (payload_size + UBX_FRAME_SZ_WITHOUT_PAYLOAD)
18
19#define UBX_PREAMBLE_SYNC_CHAR_1 0xB5
20#define UBX_PREAMBLE_SYNC_CHAR_2 0x62
21
22#define UBX_FRAME_PREAMBLE_SYNC_CHAR_1_IDX 0
23#define UBX_FRAME_PREAMBLE_SYNC_CHAR_2_IDX 1
24#define UBX_FRAME_MSG_CLASS_IDX 2
25
26#define UBX_PAYLOAD_SZ_MAX 512
27#define UBX_FRAME_SZ_MAX UBX_FRAME_SZ(UBX_PAYLOAD_SZ_MAX)
28
37
46
48 UBX_CLASS_ID_NAV = 0x01, /* Navigation Results Messages */
49 UBX_CLASS_ID_RXM = 0x02, /* Receiver Manager Messages */
50 UBX_CLASS_ID_INF = 0x04, /* Information Messages */
51 UBX_CLASS_ID_ACK = 0x05, /* Ack/Nak Messages */
52 UBX_CLASS_ID_CFG = 0x06, /* Configuration Input Messages */
53 UBX_CLASS_ID_UPD = 0x09, /* Firmware Update Messages */
54 UBX_CLASS_ID_MON = 0x0A, /* Monitoring Messages */
55 UBX_CLASS_ID_TIM = 0x0D, /* Timing Messages */
56 UBX_CLASS_ID_MGA = 0x13, /* Multiple GNSS Assistance Messages */
57 UBX_CLASS_ID_LOG = 0x21, /* Logging Messages */
58 UBX_CLASS_ID_SEC = 0x27, /* Security Feature Messages */
59 UBX_CLASS_ID_NMEA_STD = 0xF0, /* Note: Only used to configure message rate */
60 UBX_CLASS_ID_NMEA_PUBX = 0xF1, /* Note: Only used to configure message rate */
61};
62
67
76
77#define UBX_NAV_PVT_VALID_DATE BIT(0)
78#define UBX_NAV_PVT_VALID_TIME BIT(1)
79#define UBX_NAV_PVT_VALID_UTC_TOD BIT(2)
80#define UBX_NAV_PVT_VALID_MAGN BIT(3)
81
82#define UBX_NAV_PVT_FLAGS_GNSS_FIX_OK BIT(0)
83
84#define UBX_NAV_PVT_FLAGS3_INVALID_LLH BIT(0)
85
87 struct {
98 } __packed time;
102 struct {
104 int32_t longitude; /* Longitude. Degrees. scaling: 1e-7 */
105 int32_t latitude; /* Latitude. Degrees. scaling: 1e-7 */
106 int32_t height; /* Height above ellipsoid. mm */
107 int32_t hmsl; /* Height above mean sea level. mm */
108 uint32_t horiz_acc; /* Horizontal accuracy estimate. mm */
109 uint32_t vert_acc; /* Vertical accuracy estimate. mm */
110 int32_t vel_north; /* NED north velocity. mm/s */
111 int32_t vel_east; /* NED east velocity. mm/s */
112 int32_t vel_down; /* NED down velocity. mm/s */
113 int32_t ground_speed; /* Ground Speed (2D). mm/s */
114 int32_t head_motion; /* Heading of Motion (2D). Degrees. scaling: 1e-5 */
115 uint32_t speed_acc; /* Speed accuracy estimated. mm/s */
119 uint16_t pdop; /* scaling: 1e-2 */
122 int32_t head_vehicle; /* Heading of vehicle (2D). Degrees. Valid if
123 * flags.head_vehicle_valid is set.
124 */
125 int16_t mag_decl; /* Magnetic declination. Degrees. */
126 uint16_t magacc; /* Magnetic declination accuracy. Degrees. scaling: 1e-2 */
127 } __packed nav;
128} __packed;
129
135
144
145#define UBX_NAV_SAT_FLAGS_SV_USED BIT(3)
146
149 uint8_t version; /* Message version. */
153 uint8_t gnss_id; /* See ubx_gnss_id */
155 uint8_t cno; /* Carrier-to-noise ratio. dBHz */
156 int8_t elevation; /* Elevation (range: +/- 90). Degrees */
157 int16_t azimuth; /* Azimuth (range: 0 - 360). Degrees */
158 int16_t pseu_res; /* Pseudorange Residual. Meters */
160 } sat[];
161};
162
167
177
182
183struct ubx_ack {
184 uint8_t class;
186};
187
188#define UBX_GNSS_SELECTION_GPS BIT(0)
189#define UBX_GNSS_SELECTION_GLONASS BIT(1)
190#define UBX_GNSS_SELECTION_BEIDOU BIT(2)
191#define UBX_GNSS_SELECTION_GALILEO BIT(3)
192
203
210
212 UBX_CFG_PRT_PORT_MODE_CHAR_LEN_5 = 0, /* Not supported */
213 UBX_CFG_PRT_PORT_MODE_CHAR_LEN_6 = 1, /* Not supported */
214 UBX_CFG_PRT_PORT_MODE_CHAR_LEN_7 = 2, /* Supported only with parity */
216};
217
223
230
231#define UBX_CFG_PRT_MODE_CHAR_LEN(val) (((val) & BIT_MASK(2)) << 6)
232#define UBX_CFG_PRT_MODE_PARITY(val) (((val) & BIT_MASK(3)) << 9)
233#define UBX_CFG_PRT_MODE_STOP_BITS(val) (((val) & BIT_MASK(2)) << 12)
234
235#define UBX_CFG_PRT_PROTO_MASK_UBX BIT(0)
236#define UBX_CFG_PRT_PROTO_MASK_NMEA BIT(1)
237#define UBX_CFG_PRT_PROTO_MASK_RTCM3 BIT(5)
238
250
263
269
277
278#define UBX_CFG_NAV5_APPLY_DYN BIT(0)
279#define UBX_CFG_NAV5_APPLY_FIX_MODE BIT(2)
280
283 uint8_t dyn_model; /* Dynamic platform model. See ubx_dyn_model */
284 uint8_t fix_mode; /* Position fixing mode. See ubx_fix_mode */
285 int32_t fixed_alt; /* Fixed altitude for 2D fix mode. Meters */
286 uint32_t fixed_alt_var; /* Variance for Fixed altitude in 2D mode. Sq. meters */
287 int8_t min_elev; /* Minimum Elevation to use a GNSS satellite in Navigation. Degrees */
288 uint8_t dr_limit; /* Reserved */
289 uint16_t p_dop; /* Position DOP mask */
290 uint16_t t_dop; /* Time DOP mask */
291 uint16_t p_acc; /* Position accuracy mask. Meters */
292 uint16_t t_acc; /* Time accuracy mask. Meters */
293 uint8_t static_hold_thresh; /* Static hold threshold. cm/s */
294 uint8_t dgnss_timeout; /* DGNSS timeout. Seconds */
295 uint8_t cno_thresh_num_svs; /* Number of satellites required above cno_thresh */
296 uint8_t cno_thresh; /* C/N0 threshold for GNSS signals. dbHz */
298 uint16_t static_hold_max_dist; /* Static hold distance threshold. Meters */
299 uint8_t utc_standard; /* UTC standard to be used. See ubx_utc_standard */
301} __packed;
302
308
315
321
330
336
341
343 uint8_t ver; /* See ubx_cfg_val_ver */
346} __packed;
347
353
359
365
387
395
401
403 char sw_ver[30];
404 char hw_ver[10];
405};
406
407static inline uint16_t ubx_calc_checksum(const struct ubx_frame *frame, size_t len)
408{
409 uint8_t ck_a = 0;
410 uint8_t ck_b = 0;
411 const uint8_t *data = (const uint8_t *)frame;
412
414 if (len != UBX_FRAME_SZ(frame->payload_size)) {
415 return 0xFFFF;
416 }
417
418 for (int i = UBX_FRAME_MSG_CLASS_IDX ; i < (UBX_FRAME_SZ(frame->payload_size) - 2) ; i++) {
419 ck_a = ck_a + data[i];
420 ck_b = ck_b + ck_a;
421 }
422
423 return ((ck_a & 0xFF) | ((ck_b & 0xFF) << 8));
424}
425
426static inline int ubx_frame_encode(uint8_t class, uint8_t id,
427 const uint8_t *payload, size_t payload_len,
428 uint8_t *buf, size_t buf_len)
429{
430 if (buf_len < UBX_FRAME_SZ(payload_len)) {
431 return -EINVAL;
432 }
433
434 struct ubx_frame *frame = (struct ubx_frame *)buf;
435
438 frame->class = class;
439 frame->id = id;
440 frame->payload_size = payload_len;
441 memcpy(frame->payload_and_checksum, payload, payload_len);
442
443 uint16_t checksum = ubx_calc_checksum(frame, UBX_FRAME_SZ(payload_len));
444
445 frame->payload_and_checksum[payload_len] = checksum & 0xFF;
446 frame->payload_and_checksum[payload_len + 1] = (checksum >> 8) & 0xFF;
447
448 return UBX_FRAME_SZ(payload_len);
449}
450
451#define UBX_FRAME_DEFINE(_name, _frame) \
452 const static struct ubx_frame _name = _frame
453
454#define UBX_FRAME_ARRAY_DEFINE(_name, ...) \
455 const struct ubx_frame *_name[] = {__VA_ARGS__};
456
457#define UBX_FRAME_ACK_INITIALIZER(_class_id, _msg_id) \
458 UBX_FRAME_INITIALIZER_PAYLOAD(UBX_CLASS_ID_ACK, UBX_MSG_ID_ACK, _class_id, _msg_id)
459
460#define UBX_FRAME_NAK_INITIALIZER(_class_id, _msg_id) \
461 UBX_FRAME_INITIALIZER_PAYLOAD(UBX_CLASS_ID_ACK, UBX_MSG_ID_NAK, _class_id, _msg_id)
462
463#define UBX_FRAME_CFG_RST_INITIALIZER(_start_mode, _reset_mode) \
464 UBX_FRAME_INITIALIZER_PAYLOAD(UBX_CLASS_ID_CFG, UBX_MSG_ID_CFG_RST, \
465 (_start_mode & 0xFF), ((_start_mode >> 8) & 0xFF), \
466 _reset_mode, 0)
467
468#define UBX_FRAME_CFG_RATE_INITIALIZER(_meas_rate_ms, _nav_rate, _time_ref) \
469 UBX_FRAME_INITIALIZER_PAYLOAD(UBX_CLASS_ID_CFG, UBX_MSG_ID_CFG_RATE, \
470 (_meas_rate_ms & 0xFF), ((_meas_rate_ms >> 8) & 0xFF), \
471 (_nav_rate & 0xFF), ((_nav_rate >> 8) & 0xFF), \
472 (_time_ref & 0xFF), ((_time_ref >> 8) & 0xFF))
473
474#define UBX_FRAME_CFG_MSG_RATE_INITIALIZER(_class_id, _msg_id, _rate) \
475 UBX_FRAME_INITIALIZER_PAYLOAD(UBX_CLASS_ID_CFG, UBX_MSG_ID_CFG_MSG, \
476 _class_id, _msg_id, _rate)
477
478#define UBX_FRAME_CFG_VAL_SET_U8_INITIALIZER(_key, _value) \
479 UBX_FRAME_INITIALIZER_PAYLOAD(UBX_CLASS_ID_CFG, UBX_MSG_ID_CFG_VAL_SET, \
480 0x00, 0x01, 0x00, 0x00, \
481 ((_key) & 0xFF), (((_key) >> 8) & 0xFF), \
482 (((_key) >> 16) & 0xFF), (((_key) >> 24) & 0xFF), \
483 ((_value) & 0xFF))
484
485#define UBX_FRAME_CFG_VAL_SET_U16_INITIALIZER(_key, _value) \
486 UBX_FRAME_INITIALIZER_PAYLOAD(UBX_CLASS_ID_CFG, UBX_MSG_ID_CFG_VAL_SET, \
487 0x00, 0x01, 0x00, 0x00, \
488 ((_key) & 0xFF), (((_key) >> 8) & 0xFF), \
489 (((_key) >> 16) & 0xFF), (((_key) >> 24) & 0xFF), \
490 ((_value) & 0xFF), (((_value) >> 8) & 0xFF))
491
492#define UBX_FRAME_CFG_VAL_SET_U32_INITIALIZER(_key, _value) \
493 UBX_FRAME_INITIALIZER_PAYLOAD(UBX_CLASS_ID_CFG, UBX_MSG_ID_CFG_VAL_SET, \
494 0x00, 0x01, 0x00, 0x00, \
495 ((_key) & 0xFF), (((_key) >> 8) & 0xFF), \
496 (((_key) >> 16) & 0xFF), (((_key) >> 24) & 0xFF), \
497 ((_value) & 0xFF), (((_value) >> 8) & 0xFF), \
498 (((_value) >> 16) & 0xFF), (((_value) >> 24) & 0xFF))
499
500#define UBX_FRAME_CFG_VAL_GET_INITIALIZER(_key) \
501 UBX_FRAME_INITIALIZER_PAYLOAD(UBX_CLASS_ID_CFG, UBX_MSG_ID_CFG_VAL_GET, \
502 0x00, 0x00, 0x00, 0x00, \
503 ((_key) & 0xFF), (((_key) >> 8) & 0xFF), \
504 (((_key) >> 16) & 0xFF), (((_key) >> 24) & 0xFF))
505
506#define UBX_FRAME_INITIALIZER_PAYLOAD(_class_id, _msg_id, ...) \
507 _UBX_FRAME_INITIALIZER_PAYLOAD(_class_id, _msg_id, __VA_ARGS__)
508
509#define _UBX_FRAME_INITIALIZER_PAYLOAD(_class_id, _msg_id, ...) \
510 { \
511 .preamble_sync_char_1 = UBX_PREAMBLE_SYNC_CHAR_1, \
512 .preamble_sync_char_2 = UBX_PREAMBLE_SYNC_CHAR_2, \
513 .class = _class_id, \
514 .id = _msg_id, \
515 .payload_size = (NUM_VA_ARGS(__VA_ARGS__)) & 0xFFFF, \
516 .payload_and_checksum = { \
517 __VA_ARGS__, \
518 UBX_CSUM(_class_id, _msg_id, \
519 ((NUM_VA_ARGS(__VA_ARGS__)) & 0xFF), \
520 (((NUM_VA_ARGS(__VA_ARGS__)) >> 8) & 0xFF), \
521 __VA_ARGS__), \
522 }, \
523 }
524
525#define UBX_FRAME_GET_INITIALIZER(_class_id, _msg_id) \
526 { \
527 .preamble_sync_char_1 = UBX_PREAMBLE_SYNC_CHAR_1, \
528 .preamble_sync_char_2 = UBX_PREAMBLE_SYNC_CHAR_2, \
529 .class = _class_id, \
530 .id = _msg_id, \
531 .payload_size = 0, \
532 .payload_and_checksum = { \
533 UBX_CSUM(_class_id, _msg_id, 0, 0), \
534 }, \
535 }
536
537#endif /* ZEPHYR_MODEM_UBX_PROTOCOL_ */
#define EINVAL
Invalid argument.
Definition errno.h:60
ubx_msg_id_mon
Definition protocol.h:178
@ UBX_MSG_ID_MON_VER
Definition protocol.h:179
@ UBX_MSG_ID_MON_GNSS
Definition protocol.h:180
#define UBX_PREAMBLE_SYNC_CHAR_1
Definition protocol.h:19
ubx_nav_fix_type
Definition protocol.h:68
@ UBX_NAV_FIX_TYPE_3D
Definition protocol.h:72
@ UBX_NAV_FIX_TYPE_TIME_ONLY
Definition protocol.h:74
@ UBX_NAV_FIX_TYPE_GNSS_DR_COMBINED
Definition protocol.h:73
@ UBX_NAV_FIX_TYPE_NO_FIX
Definition protocol.h:69
@ UBX_NAV_FIX_TYPE_DR
Definition protocol.h:70
@ UBX_NAV_FIX_TYPE_2D
Definition protocol.h:71
ubx_msg_id_ack
Definition protocol.h:163
@ UBX_MSG_ID_ACK
Definition protocol.h:164
@ UBX_MSG_ID_NAK
Definition protocol.h:165
#define UBX_FRAME_MSG_CLASS_IDX
Definition protocol.h:24
ubx_cfg_parity
Definition protocol.h:218
@ UBX_CFG_PRT_PORT_MODE_PARITY_EVEN
Definition protocol.h:219
@ UBX_CFG_PRT_PORT_MODE_PARITY_NONE
Definition protocol.h:221
@ UBX_CFG_PRT_PORT_MODE_PARITY_ODD
Definition protocol.h:220
ubx_fix_mode
Definition protocol.h:264
@ UBX_FIX_MODE_AUTO
Definition protocol.h:267
@ UBX_FIX_MODE_2D_ONLY
Definition protocol.h:265
@ UBX_FIX_MODE_3D_ONLY
Definition protocol.h:266
ubx_utc_standard
Definition protocol.h:270
@ UBX_UTC_STANDARD_GPS
Definition protocol.h:272
@ UBX_UTC_STANDARD_GALILEO
Definition protocol.h:273
@ UBX_UTC_STANDARD_AUTOMATIC
Definition protocol.h:271
@ UBX_UTC_STANDARD_BEIDOU
Definition protocol.h:275
@ UBX_UTC_STANDARD_GLONASS
Definition protocol.h:274
ubx_msg_id_cfg
Definition protocol.h:168
@ UBX_MSG_ID_CFG_NAV5
Definition protocol.h:173
@ UBX_MSG_ID_CFG_VAL_SET
Definition protocol.h:174
@ UBX_MSG_ID_CFG_PRT
Definition protocol.h:169
@ UBX_MSG_ID_CFG_RATE
Definition protocol.h:172
@ UBX_MSG_ID_CFG_VAL_GET
Definition protocol.h:175
@ UBX_MSG_ID_CFG_MSG
Definition protocol.h:170
@ UBX_MSG_ID_CFG_RST
Definition protocol.h:171
ubx_cfg_rst_start_mode
Definition protocol.h:303
@ UBX_CFG_RST_WARM_START
Definition protocol.h:305
@ UBX_CFG_RST_HOT_START
Definition protocol.h:304
@ UBX_CFG_RST_COLD_START
Definition protocol.h:306
static uint16_t ubx_calc_checksum(const struct ubx_frame *frame, size_t len)
Definition protocol.h:407
#define UBX_FRAME_SZ(payload_size)
Definition protocol.h:17
ubx_msg_id_nmea_pubx
Definition protocol.h:388
@ UBX_MSG_ID_NMEA_PUBX_CONFIG
Definition protocol.h:389
@ UBX_MSG_ID_NMEA_PUBX_POSITION
Definition protocol.h:390
@ UBX_MSG_ID_NMEA_PUBX_SVSTATUS
Definition protocol.h:392
@ UBX_MSG_ID_NMEA_PUBX_TIME
Definition protocol.h:393
@ UBX_MSG_ID_NMEA_PUBX_RATE
Definition protocol.h:391
ubx_cfg_rst_mode
Definition protocol.h:309
@ UBX_CFG_RST_MODE_GNSS_STOP
Definition protocol.h:312
@ UBX_CFG_RST_MODE_SW
Definition protocol.h:311
@ UBX_CFG_RST_MODE_HW
Definition protocol.h:310
@ UBX_CFG_RST_MODE_GNSS_START
Definition protocol.h:313
ubx_cfg_rate_time_ref
Definition protocol.h:322
@ UBX_CFG_RATE_TIME_REF_BEIDOU
Definition protocol.h:326
@ UBX_CFG_RATE_TIME_REF_GLONASS
Definition protocol.h:325
@ UBX_CFG_RATE_TIME_REF_NAVIC
Definition protocol.h:328
@ UBX_CFG_RATE_TIME_REF_GPS
Definition protocol.h:324
@ UBX_CFG_RATE_TIME_REF_GALILEO
Definition protocol.h:327
@ UBX_CFG_RATE_TIME_REF_UTC
Definition protocol.h:323
ubx_gnss_id
Definition protocol.h:136
@ UBX_GNSS_ID_QZSS
Definition protocol.h:141
@ UBX_GNSS_ID_SBAS
Definition protocol.h:138
@ UBX_GNSS_ID_GLONASS
Definition protocol.h:142
@ UBX_GNSS_ID_GALILEO
Definition protocol.h:139
@ UBX_GNSS_ID_BEIDOU
Definition protocol.h:140
@ UBX_GNSS_ID_GPS
Definition protocol.h:137
ubx_cfg_char_len
Definition protocol.h:211
@ UBX_CFG_PRT_PORT_MODE_CHAR_LEN_5
Definition protocol.h:212
@ UBX_CFG_PRT_PORT_MODE_CHAR_LEN_8
Definition protocol.h:215
@ UBX_CFG_PRT_PORT_MODE_CHAR_LEN_7
Definition protocol.h:214
@ UBX_CFG_PRT_PORT_MODE_CHAR_LEN_6
Definition protocol.h:213
ubx_msg_id_nav
Definition protocol.h:63
@ UBX_MSG_ID_NAV_PVT
Definition protocol.h:64
@ UBX_MSG_ID_NAV_SAT
Definition protocol.h:65
ubx_cfg_stop_bits
Definition protocol.h:224
@ UBX_CFG_PRT_PORT_MODE_STOP_BITS_1_5
Definition protocol.h:226
@ UBX_CFG_PRT_PORT_MODE_STOP_BITS_0_5
Definition protocol.h:228
@ UBX_CFG_PRT_PORT_MODE_STOP_BITS_2
Definition protocol.h:227
@ UBX_CFG_PRT_PORT_MODE_STOP_BITS_1
Definition protocol.h:225
ubx_dyn_model
Definition protocol.h:251
@ UBX_DYN_MODEL_WRIST
Definition protocol.h:260
@ UBX_DYN_MODEL_AIRBORNE_2G
Definition protocol.h:258
@ UBX_DYN_MODEL_STATIONARY
Definition protocol.h:253
@ UBX_DYN_MODEL_PORTABLE
Definition protocol.h:252
@ UBX_DYN_MODEL_SEA
Definition protocol.h:256
@ UBX_DYN_MODEL_AUTOMOTIVE
Definition protocol.h:255
@ UBX_DYN_MODEL_PEDESTRIAN
Definition protocol.h:254
@ UBX_DYN_MODEL_AIRBORNE_1G
Definition protocol.h:257
@ UBX_DYN_MODEL_BIKE
Definition protocol.h:261
@ UBX_DYN_MODEL_AIRBORNE_4G
Definition protocol.h:259
ubx_msg_id_nmea_std
Definition protocol.h:366
@ UBX_MSG_ID_NMEA_STD_GGA
Definition protocol.h:370
@ UBX_MSG_ID_NMEA_STD_GLQ
Definition protocol.h:372
@ UBX_MSG_ID_NMEA_STD_GSV
Definition protocol.h:379
@ UBX_MSG_ID_NMEA_STD_GPQ
Definition protocol.h:375
@ UBX_MSG_ID_NMEA_STD_GBQ
Definition protocol.h:368
@ UBX_MSG_ID_NMEA_STD_VLW
Definition protocol.h:383
@ UBX_MSG_ID_NMEA_STD_VTG
Definition protocol.h:384
@ UBX_MSG_ID_NMEA_STD_GLL
Definition protocol.h:371
@ UBX_MSG_ID_NMEA_STD_GRS
Definition protocol.h:376
@ UBX_MSG_ID_NMEA_STD_RMC
Definition protocol.h:380
@ UBX_MSG_ID_NMEA_STD_THS
Definition protocol.h:381
@ UBX_MSG_ID_NMEA_STD_GST
Definition protocol.h:378
@ UBX_MSG_ID_NMEA_STD_GNQ
Definition protocol.h:373
@ UBX_MSG_ID_NMEA_STD_DTM
Definition protocol.h:367
@ UBX_MSG_ID_NMEA_STD_TXT
Definition protocol.h:382
@ UBX_MSG_ID_NMEA_STD_GSA
Definition protocol.h:377
@ UBX_MSG_ID_NMEA_STD_ZDA
Definition protocol.h:385
@ UBX_MSG_ID_NMEA_STD_GBS
Definition protocol.h:369
@ UBX_MSG_ID_NMEA_STD_GNS
Definition protocol.h:374
static int ubx_frame_encode(uint8_t class, uint8_t id, const uint8_t *payload, size_t payload_len, uint8_t *buf, size_t buf_len)
Definition protocol.h:426
ubx_class_id
Definition protocol.h:47
@ UBX_CLASS_ID_NMEA_PUBX
Definition protocol.h:60
@ UBX_CLASS_ID_LOG
Definition protocol.h:57
@ UBX_CLASS_ID_MGA
Definition protocol.h:56
@ UBX_CLASS_ID_RXM
Definition protocol.h:49
@ UBX_CLASS_ID_SEC
Definition protocol.h:58
@ UBX_CLASS_ID_NMEA_STD
Definition protocol.h:59
@ UBX_CLASS_ID_INF
Definition protocol.h:50
@ UBX_CLASS_ID_TIM
Definition protocol.h:55
@ UBX_CLASS_ID_NAV
Definition protocol.h:48
@ UBX_CLASS_ID_UPD
Definition protocol.h:53
@ UBX_CLASS_ID_MON
Definition protocol.h:54
@ UBX_CLASS_ID_ACK
Definition protocol.h:51
@ UBX_CLASS_ID_CFG
Definition protocol.h:52
ubx_cfg_val_ver
Definition protocol.h:337
@ UBX_CFG_VAL_VER_SIMPLE
Definition protocol.h:338
@ UBX_CFG_VAL_VER_TRANSACTION
Definition protocol.h:339
#define UBX_PREAMBLE_SYNC_CHAR_2
Definition protocol.h:20
ubx_cfg_port_id
Definition protocol.h:204
@ UBX_CFG_PORT_ID_USB
Definition protocol.h:207
@ UBX_CFG_PORT_ID_DDC
Definition protocol.h:205
@ UBX_CFG_PORT_ID_SPI
Definition protocol.h:208
@ UBX_CFG_PORT_ID_UART
Definition protocol.h:206
ubx_nav_sat_health
Definition protocol.h:130
@ UBX_NAV_SAT_HEALTH_UNKNOWN
Definition protocol.h:131
@ UBX_NAV_SAT_HEALTH_HEALTHY
Definition protocol.h:132
@ UBX_NAV_SAT_HEALTH_UNHEALTHY
Definition protocol.h:133
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__INT32_TYPE__ int32_t
Definition stdint.h:74
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
__INT8_TYPE__ int8_t
Definition stdint.h:72
__INT16_TYPE__ int16_t
Definition stdint.h:73
void * memcpy(void *ZRESTRICT d, const void *ZRESTRICT s, size_t n)
Definition protocol.h:183
uint8_t id
Definition protocol.h:185
Definition protocol.h:396
uint8_t rate
Definition protocol.h:399
uint8_t id
Definition protocol.h:398
Definition protocol.h:281
uint16_t p_acc
Definition protocol.h:291
int8_t min_elev
Definition protocol.h:287
uint8_t dgnss_timeout
Definition protocol.h:294
uint16_t t_dop
Definition protocol.h:290
uint16_t apply
Definition protocol.h:282
uint8_t static_hold_thresh
Definition protocol.h:293
uint16_t static_hold_max_dist
Definition protocol.h:298
uint8_t cno_thresh_num_svs
Definition protocol.h:295
uint8_t dyn_model
Definition protocol.h:283
uint16_t p_dop
Definition protocol.h:289
uint8_t fix_mode
Definition protocol.h:284
uint8_t reserved1[2]
Definition protocol.h:297
uint32_t fixed_alt_var
Definition protocol.h:286
uint8_t cno_thresh
Definition protocol.h:296
uint8_t reserved2[5]
Definition protocol.h:300
uint8_t dr_limit
Definition protocol.h:288
uint16_t t_acc
Definition protocol.h:292
uint8_t utc_standard
Definition protocol.h:299
int32_t fixed_alt
Definition protocol.h:285
Definition protocol.h:239
uint16_t rx_ready_pin
Definition protocol.h:242
uint16_t out_proto_mask
Definition protocol.h:246
uint32_t mode
Definition protocol.h:243
uint16_t flags
Definition protocol.h:247
uint16_t in_proto_mask
Definition protocol.h:245
uint8_t reserved1
Definition protocol.h:241
uint32_t baudrate
Definition protocol.h:244
uint16_t reserved2
Definition protocol.h:248
uint8_t port_id
Definition protocol.h:240
Definition protocol.h:331
uint16_t time_ref
Definition protocol.h:334
uint16_t nav_rate
Definition protocol.h:333
uint16_t meas_rate_ms
Definition protocol.h:332
Definition protocol.h:316
uint8_t reset_mode
Definition protocol.h:318
uint16_t nav_bbr_mask
Definition protocol.h:317
uint8_t reserved
Definition protocol.h:319
Definition protocol.h:342
uint8_t ver
Definition protocol.h:343
uint16_t position
Definition protocol.h:345
uint8_t layer
Definition protocol.h:344
Definition protocol.h:354
struct ubx_cfg_val_hdr hdr
Definition protocol.h:355
uint16_t value
Definition protocol.h:357
uint32_t key
Definition protocol.h:356
Definition protocol.h:360
uint32_t value
Definition protocol.h:363
uint32_t key
Definition protocol.h:362
struct ubx_cfg_val_hdr hdr
Definition protocol.h:361
Definition protocol.h:348
uint32_t key
Definition protocol.h:350
uint8_t value
Definition protocol.h:351
struct ubx_cfg_val_hdr hdr
Definition protocol.h:349
Definition protocol.h:38
uint16_t len
Definition protocol.h:43
struct ubx_frame_match::@363 payload
uint8_t id
Definition protocol.h:40
uint8_t * buf
Definition protocol.h:42
Definition protocol.h:29
uint8_t class
Definition protocol.h:32
uint8_t id
Definition protocol.h:33
uint8_t payload_and_checksum[]
Definition protocol.h:35
uint16_t payload_size
Definition protocol.h:34
uint8_t preamble_sync_char_2
Definition protocol.h:31
uint8_t preamble_sync_char_1
Definition protocol.h:30
Definition protocol.h:193
uint8_t reserved1[3]
Definition protocol.h:201
uint8_t default_enabled
Definition protocol.h:197
uint8_t simultaneous
Definition protocol.h:200
struct ubx_mon_gnss::@366 selection
uint8_t supported
Definition protocol.h:196
uint8_t enabled
Definition protocol.h:198
uint8_t ver
Definition protocol.h:194
Definition protocol.h:402
char hw_ver[10]
Definition protocol.h:404
char sw_ver[30]
Definition protocol.h:403
Definition protocol.h:86
struct ubx_nav_pvt::@365 nav
struct ubx_nav_pvt::@364 time
uint8_t second
Definition protocol.h:94
uint32_t tacc
Definition protocol.h:96
int32_t vel_east
Definition protocol.h:111
uint8_t minute
Definition protocol.h:93
uint8_t flags
See ubx_nav_fix_type.
Definition protocol.h:100
int32_t nano
Definition protocol.h:97
int32_t vel_north
Definition protocol.h:110
uint8_t flags2
Definition protocol.h:101
int32_t latitude
Definition protocol.h:105
int32_t ground_speed
Definition protocol.h:113
uint16_t flags3
Definition protocol.h:120
uint8_t fix_type
Definition protocol.h:99
uint32_t itow
Definition protocol.h:88
uint8_t valid
Definition protocol.h:95
int32_t vel_down
Definition protocol.h:112
int16_t mag_decl
Definition protocol.h:125
uint16_t pdop
Heading accuracy estimate (both motion and vehicle).
Definition protocol.h:119
uint32_t reserved
Definition protocol.h:121
uint16_t year
Definition protocol.h:89
int32_t head_vehicle
Definition protocol.h:122
uint32_t speed_acc
Definition protocol.h:115
uint32_t head_acc
Definition protocol.h:116
int32_t height
Definition protocol.h:106
int32_t head_motion
Definition protocol.h:114
uint16_t magacc
Definition protocol.h:126
uint32_t horiz_acc
Definition protocol.h:108
uint8_t month
Definition protocol.h:90
int32_t longitude
Definition protocol.h:104
int32_t hmsl
Definition protocol.h:107
uint8_t num_sv
Definition protocol.h:103
uint8_t day
Definition protocol.h:91
uint8_t hour
Definition protocol.h:92
uint32_t vert_acc
Definition protocol.h:109
Definition protocol.h:152
uint8_t gnss_id
Definition protocol.h:153
int16_t azimuth
Definition protocol.h:157
int16_t pseu_res
Definition protocol.h:158
uint8_t cno
Definition protocol.h:155
int8_t elevation
Definition protocol.h:156
uint8_t sv_id
Definition protocol.h:154
uint32_t flags
Definition protocol.h:159
Definition protocol.h:147
uint16_t reserved1
Definition protocol.h:151
uint8_t version
Definition protocol.h:149
uint32_t itow
Definition protocol.h:148
struct ubx_nav_sat::ubx_nav_sat_info sat[]
uint8_t num_sv
Definition protocol.h:150