33#define GPS_RX_BUF_SIZE 100
36#define UBX_NAV_PVT_HEADER_B0 0xB5
37#define UBX_NAV_PVT_HEADER_B1 0x62
38#define UBX_NAV_PVT_CLASS 0x01
39#define UBX_NAV_PVT_MSG_ID 0x07
42typedef uint8_t gps_valid_flags_t;
43#define GPS_VALID_DATE ((gps_valid_flags_t)0x01)
44#define GPS_VALID_TIME ((gps_valid_flags_t)0x02)
45#define GPS_VALID_FULLY_RESOLVED ((gps_valid_flags_t)0x04)
46#define GPS_VALID_MAG ((gps_valid_flags_t)0x08)
49typedef uint8_t gps_fix_type_t;
50#define GPS_FIX_TYPE_NONE ((gps_fix_type_t)0x00)
51#define GPS_FIX_TYPE_DEAD_RECKONING ((gps_fix_type_t)0x01)
52#define GPS_FIX_TYPE_GNSS_2D ((gps_fix_type_t)0x02)
53#define GPS_FIX_TYPE_GNSS_3D ((gps_fix_type_t)0x03)
54#define GPS_FIX_TYPE_GNSS_DEAD_RECKONING ((gps_fix_type_t)0x04)
55#define GPS_FIX_TYPE_TIME_ONLY ((gps_fix_type_t)0x05)
58typedef uint8_t gps_flags1_t;
59#define GPS_FLAG1_GNSS_FIX_OK ((gps_flags1_t)0x01)
60#define GPS_FLAG1_DIFF_SOLN ((gps_flags1_t)0x02)
62#define GPS_FLAG1_PSM_MASK ((gps_flags1_t)0x1C)
63#define GPS_FLAG1_PSM_OFF ((gps_flags1_t)0x00)
64#define GPS_FLAG1_PSM_ENABLED ((gps_flags1_t)0x04)
65#define GPS_FLAG1_PSM_ACQUIRED ((gps_flags1_t)0x08)
66#define GPS_FLAG1_PSM_TRACKING ((gps_flags1_t)0x0C)
67#define GPS_FLAG1_PSM_POWER_OPTIMIZED ((gps_flags1_t)0x10)
68#define GPS_FLAG1_PSM_INACTIVE ((gps_flags1_t)0x14)
70#define GPS_FLAG1_HEADING_VALID ((gps_flags1_t)0x20)
71#define GPS_FLAG1_CARRIER_PHASE_MASK ((gps_flags1_t)0xC0)
72#define GPS_FLAG1_CARRIER_PHASE_NONE ((gps_flags1_t)0x00)
73#define GPS_FLAG1_CARRIER_PHASE_FLOAT ((gps_flags1_t)0x40)
74#define GPS_FLAG1_CARRIER_PHASE_FIXED ((gps_flags1_t)0x80)
76typedef uint8_t gps_flags2_t;
77#define GPS_FLAGS2_CONFIRMED_AVAILABLE ((gps_flags2_t)0x20)
78#define GPS_FLAGS2_CONFIRMED_DATE ((gps_flags2_t)0x40)
79#define GPS_FLAGS2_CONFIRMED_TIME ((gps_flags2_t)0x80)
90 gps_valid_flags_t valid;
92 uint32_t timeAccuracy;
95 gps_fix_type_t fixType;
99 uint8_t numSatellites;
104 uint32_t horizontalAccuracy;
105 uint32_t verticalAccuracy;
111 int32_t headingMotion;
112 uint32_t speedAccuracy;
114 uint16_t positionDOP;
117 int32_t headingVehicle;
120 uint16_t magneticAcc;
124 uint8_t gps_rx_buffer[GPS_RX_BUF_SIZE];
129 bool isFullyResolved;
134static inline int32_t bytes_to_int32(uint8_t b0, uint8_t b1, uint8_t b2, uint8_t b3) {
135 uint32_t value = (uint32_t)b0 | ((uint32_t)b1 << 8) | ((uint32_t)b2 << 16) | ((uint32_t)b3 << 24);
136 return (int32_t)value;
139static inline uint32_t bytes_to_uint32(uint8_t b0, uint8_t b1, uint8_t b2, uint8_t b3) {
140 return (uint32_t)b0 | ((uint32_t)b1 << 8) | ((uint32_t)b2 << 16) | ((uint32_t)b3 << 24);
143static inline uint16_t bytes_to_uint16(uint8_t b0, uint8_t b1) {
144 return (uint16_t)b0 | ((uint16_t)b1 << 8);
147static inline int16_t bytes_to_int16(uint8_t b0, uint8_t b1) {
148 uint16_t value = (uint16_t)b0 | ((uint16_t)b1 << 8);
149 return (int16_t)value;
152static inline bool is_valid_header(uint8_t sync0, uint8_t sync1, uint8_t class_id, uint8_t msg_id) {
153 return (sync0 == UBX_NAV_PVT_HEADER_B0) && (sync1 == UBX_NAV_PVT_HEADER_B1) && (class_id == UBX_NAV_PVT_CLASS) && (msg_id == UBX_NAV_PVT_MSG_ID);
bool GPS_Decode(GPS_Handle_t *gps)
Function to decode periodic GPS UBX message.
Definition gps.c:10