11 #ifndef GPS_UBLOX_H__ND
12 #define GPS_UBLOX_H__ND
31 #define UBLOX_SET_BINARY "$PUBX,41,1,0003,0001,38400,0*25\r\n"//\265\142\006\001\003\000\001\006\001\022\117"
42 #define UBX_PREAMBLE1 0xb5
43 #define UBX_PREAMBLE2 0x62
56 #define UBX_CLASS_NAV 0x01
57 #define UBX_CLASS_RXM 0x02
58 #define UBX_CLASS_INF 0x04
59 #define UBX_CLASS_ACK 0x05
60 #define UBX_CLASS_CFG 0x06
61 #define UBX_CLASS_MON 0x0A
62 #define UBX_CLASS_AID 0x0B
63 #define UBX_CLASS_TIM 0x0D
64 #define UBX_CLASS_ESF 0x10
67 #define MSG_ACK_NACK 0x00
68 #define MSG_ACK_ACK 0x01
70 #define MSG_INF_ERROR 0x00
71 #define MSG_INF_WARNING 0x01
72 #define MSG_INF_NOTICE 0x02
73 #define MSG_INF_TEST 0x03
74 #define MSG_INF_DEBUG 0x04
76 #define MSG_NAV_POSLLH 0x02
77 #define MSG_NAV_STATUS 0x03
78 #define MSG_NAV_AOPSTATUS 0x60
79 #define MSG_NAV_CLOCK 0x22
80 #define MSG_NAV_SOL 0x06
81 #define MSG_NAV_VELNED 0x12
82 #define MSG_NAV_VELCEF 0x11
83 #define MSG_NAV_TIMEGPS 0x20
84 #define MSG_NAV_TIMEUTC 0x21
85 #define MSG_NAV_SVINFO 0x30
87 #define MSG_CFG_PRT 0x00
88 #define MSG_CFG_RATE 0x08
89 #define MSG_CFG_SET_RATE 0x01
90 #define MSG_CFG_NAV_SETTINGS 0x24
91 #define MSG_CFG_NMEA 0x17
93 #define MSG_MON_RXR 0x21
95 #define MSG_TIM_TP 0x01
96 #define MSG_TIM_VRFY 0x06
98 #define UBX_PLATFORM_PORTABLE 0x00
99 #define UBX_PLATFORM_STATIONARY 0x02
100 #define UBX_PLATFORM_PEDESTRIAN 0x03
101 #define UBX_PLATFORM_AUTO 0x04
102 #define UBX_PLATFORM_SEA 0x05
103 #define UBX_PLATFORM_1GAIR 0x06
104 #define UBX_PLATFORM_2GAIR 0x07
105 #define UBX_PLATFORM_4GAIR 0x08
107 #define GPS_FIX_TYPE_NOFIX 0x00
108 #define GPS_FIX_TYPE_DEADRECK 0x01
109 #define GPS_FIX_TYPE_2DFIX 0x02
110 #define GPS_FIX_TYPE_3DFIX 0x03
111 #define GPS_FIX_TYPE_GPSDEADRECK 0x04
112 #define GPS_FIX_TYPE_TIMEONLY 0x05
115 #define UBX_CFG_MSG 0xF1
116 #define UBX_CFG_MSG_ID 0x41
119 #define UBX_SIZE_NAV_POSLLH 28
120 #define UBX_SIZE_NAV_STATUS 16
121 #define UBX_SIZE_NAV_SOL 52
122 #define UBX_SIZE_NAV_VELNED 36
123 #define UBX_SIZE_NAV_SVINFO 30 //8 + 12*num_channel
124 #define UBX_SIZE_NAV_SETTINGS 36
126 #define UBX_SIZE_CFG_RATE 6
127 #define UBX_SIZE_CFG_GETSET_RATE 3
129 #define UBX_SIZE_MON_RXR 1
131 #define UBX_SIZE_TIM_TP 16
132 #define UBX_SIZE_TIM_VRFY 20
134 #define NAV_STATUS_FIX_NVALID 0
135 #define NAV_STATUS_FIX_VALID 1
138 #define TIME_OF_DAY 0 //<
139 #define TIME_OF_WEEK 1 //< Ublox
140 #define TIME_OF_YEAR 2 //< MTK, NMEA
147 #define DEG2RAD PI/180
156 uint8_t msg_id_header;
165 uint16_t measure_rate_ms;
170 uint16_t measure_rate_ms;
192 uint8_t dgps_timeout;
193 uint8_t static_hold_thresh;
200 uint32_t fixed_alt_var;
208 uint32_t vertical_accuracy;
209 uint32_t horizontal_accuracy;
210 int32_t altitude_msl;
211 int32_t altitude_ellipsoid;
219 uint32_t time_to_first_fix;
221 uint8_t differential_status;
231 uint16_t position_DOP;
232 uint32_t speed_accuracy;
233 int32_t ecef_z_velocity;
234 int32_t ecef_y_velocity;
235 int32_t ecef_x_velocity;
236 uint32_t position_accuracy_3d;
248 uint32_t heading_accuracy;
249 uint32_t speed_accuracy;
251 uint32_t ground_speed_2d;
274 uint8_t global_flags;
309 uint8_t msg_id_header;
314 uint16_t measure_rate_ms;
330 uint32_t fixed_alt_var;
337 uint8_t static_hold_thresh;
338 uint8_t dgps_timeout;
348 int32_t altitude_ellipsoid;
349 int32_t altitude_msl;
350 uint32_t horizontal_accuracy;
351 uint32_t vertical_accuracy;
358 uint8_t differential_status;
360 uint32_t time_to_first_fix;
373 uint32_t position_accuracy_3d;
374 int32_t ecef_x_velocity;
375 int32_t ecef_y_velocity;
376 int32_t ecef_z_velocity;
377 uint32_t speed_accuracy;
378 uint16_t position_DOP;
390 uint32_t ground_speed_2d;
392 uint32_t speed_accuracy;
393 uint32_t heading_accuracy;
400 uint8_t global_flags;
451 uint16_t payload_length;
452 uint16_t payload_counter;
464 uint8_t disable_counter;
468 bool have_raw_velocity;
472 uint32_t last_ground_speed_cm;
478 enum gps_engine_setting_t{
479 GPS_ENGINE_NONE = -1,
480 GPS_ENGINE_PORTABLE = 0,
481 GPS_ENGINE_STATIONARY = 2,
482 GPS_ENGINE_PEDESTRIAN = 3,
483 GPS_ENGINE_AUTOMOTIVE = 4,
485 GPS_ENGINE_AIRBORNE_1G = 6,
486 GPS_ENGINE_AIRBORNE_2G = 7,
487 GPS_ENGINE_AIRBORNE_4G = 8
490 enum gps_engine_setting_t engine_nav_setting;
493 #define UBX_TIMEOUT_CYCLES 2
494 #define UBX_POSITION_PRECISION 20
496 #define UBX_ALTITUDE_PRECISION 20
498 #define UBX_SPEED_PRECISION 5
500 #define UBX_HEADING_PRECISION 5000000//3000000
514 float vertical_speed;
517 float horizontal_accuracy;
518 float vertical_accuracy;
520 float speed_accuracy;
521 float heading_accuracy;
529 unsigned char status;
531 unsigned char horizontal_status;
535 unsigned char altitude_status;
536 unsigned char speed_status;
541 unsigned char course_status;
542 unsigned char accuracy_status;
553 uint32_t idle_timeout;
555 uint32_t last_fix_time;
557 float velocity_north;
563 void gps_ublox_init(
enum gps_engine_setting_t _engine_nav_setting);
565 bool gps_ublox_message_decode(
void);
566 bool gps_ublox_process_data(
void);
568 void update_checksum(uint8_t *data, uint8_t len, uint8_t *ck_a, uint8_t *ck_b);
569 uint8_t endian_lower_bytes_uint16(uint16_t bytes);
570 uint8_t endian_higher_bytes_uint16(uint16_t bytes);
571 void ubx_send_header(uint8_t msg_class, uint8_t _msg_id, uint8_t size);
572 void ubx_send_cksum(uint8_t ck_sum_a, uint8_t ck_sum_b);
574 void ubx_send_message(uint8_t msg_class, uint8_t msg_id,
void *msg, uint8_t size);
575 void ubx_send_message_CFG_nav_rate(uint8_t msg_class, uint8_t _msg_id,
ubx_cfg_nav_rate_send_t msg, uint8_t size);
576 void ubx_send_message_nav_settings(uint8_t msg_class, uint8_t _msg_id,
enum gps_engine_setting_t *engine_settings, uint8_t size);
577 void ubx_configure_message_rate(uint8_t msg_class, uint8_t msg_id, uint8_t rate);
579 void gps_ublox_configure_gps(
void);
581 void gps_ublox_update(
void);
582 bool gps_ublox_newValidGpsMsg(uint32_t *prev_gps_msg_time);
595 float to_rad(
float numdeg);
597 #endif //GPS_UBLOX_H__
The U-Blox CFG_MSG rate structure definition.
Definition: gps_ublox.h:225
unsigned long time_gps
time reference in ms of gps
Definition: gps_ublox.h:527
The U-Blox CFG_NAV rate send structure definition.
Definition: gps_ublox.h:215
The U-Blox NAV-SOL message structure definition.
Definition: gps_ublox.h:297
The U-Blox TIM-VRFY message structure definition.
Definition: gps_ublox.h:384
The U-Blox NAV-VELNED message structure definition.
Definition: gps_ublox.h:321
The U-Blox MON-RXR message structure definition.
Definition: gps_ublox.h:363
The U-Blox NAV-STATUS message structure definition.
Definition: gps_ublox.h:283
Type definition for GPS data.
Definition: gps_ublox.h:635
unsigned long time_last_msg
time reference in ms of microcontroller
Definition: gps_ublox.h:526
The U-Blox CFG_NAV structure definition.
Definition: gps_ublox.h:204
The U-Blox CFG_MSG rate send structure definition.
Definition: gps_ublox.h:236
The U-Blox NAV-SVINFO message structure definition.
Definition: gps_ublox.h:337
The U-Blox TIM-TP message structure definition.
Definition: gps_ublox.h:371
The U-Blox CFG_NAV settings structure definition.
Definition: gps_ublox.h:246
The U-Blox NAV-POSLLH message structure definition.
Definition: gps_ublox.h:269