15static constexpr uint8_t NAV_PVT_HEADER_B0 = 0xB5;
16static constexpr uint8_t NAV_PVT_HEADER_B1 = 0x62;
17static constexpr uint8_t NAV_PVT_CLASS = 0x01;
18static constexpr uint8_t NAV_PVT_MSG_ID = 0x07;
20static constexpr size_t NAV_PVT_TOTAL_LENGTH = 100;
22typedef enum : uint8_t {
23 GPS_VALID_DATE = 0x01,
24 GPS_VALID_TIME = 0x02,
25 GPS_VALID_FULLY_RESOLVED = 0x04,
29typedef enum : uint8_t {
30 GPS_FIX_TYPE_NONE = 0x00,
31 GPS_FIX_TYPE_DEAD_RECKONING = 0x01,
32 GPS_FIX_TYPE_GNSS_2D = 0x02,
33 GPS_FIX_TYPE_GNSS_3D = 0x03,
34 GPS_FIX_TYPE_GNSS_DEAD_RECKONING = 0x04,
35 GPS_FIX_TYPE_TIME_ONLY = 0x05
38typedef enum : uint8_t {
39 GPS_FLAG1_GNSS_FIX_OK = 0x01,
40 GPS_FLAG1_DIFF_SOLN = 0x02,
42 GPS_FLAG1_PSM_MASK = 0x1C,
43 GPS_FLAG1_PSM_OFF = 0x00,
44 GPS_FLAG1_PSM_ENABLED = 0x04,
45 GPS_FLAG1_PSM_ACQUIRED = 0x08,
46 GPS_FLAG1_PSM_TRACKING = 0x0C,
47 GPS_FLAG1_PSM_POWER_OPTIMIZED = 0x10,
48 GPS_FLAG1_PSM_INACTIVE = 0x14,
50 GPS_FLAG1_HEADING_VALID = 0x20,
51 GPS_FLAG1_CARRIER_PHASE_MASK = 0xC0,
52 GPS_FLAG1_CARRIER_PHASE_NONE = 0x00,
53 GPS_FLAG1_CARRIER_PHASE_FLOAT = 0x40,
54 GPS_FLAG1_CARRIER_PHASE_FIXED = 0x80
57typedef enum : uint8_t {
58 GPS_FLAGS2_CONFIRMED_AVAILABLE = 0x20,
59 GPS_FLAGS2_CONFIRMED_DATE = 0x40,
60 GPS_FLAGS2_CONFIRMED_TIME = 0x80
72 gps_valid_flags_t valid;
74 uint32_t timeAccuracy;
77 gps_fix_type_t fixType;
81 uint8_t numSatellites;
86 uint32_t horizontalAccuracy;
87 uint32_t verticalAccuracy;
93 int32_t headingMotion;
94 uint32_t speedAccuracy;
95 uint32_t headingAccuracy;
100 int32_t headingVehicle;
103 uint16_t magneticAcc;
106static_assert(
sizeof(
NAV_PVT_data_t) == 92,
"NAV_PVT_data_t size must be 92 bytes");
116void NAV_PVT_decode(
NAV_PVT_data_t *nav_pvt,
const volatile uint8_t *rx_buffer);