Fixposition SDK 0.0.0-heads/main-0-g90a51ff
Collection of c++ libraries and apps for use with Fixposition products
Loading...
Searching...
No Matches
novb.hpp
Go to the documentation of this file.
1/**
2 * \verbatim
3 * ___ ___
4 * \ \ / /
5 * \ \/ / Copyright (c) Fixposition AG (www.fixposition.com) and contributors
6 * / /\ \ License: see the LICENSE file
7 * /__/ \__\
8 *
9 * Parts copyright (c) 2020 NovAtel Inc. See the LICENSE file.
10 * Based on work by flipflip (https://github.com/phkehl)
11 * The information on message structures, IDs, descriptions etc. in this file are from publicly available data, such as:
12 * - https://github.com/novatel/novatel_oem7_driver/tree/master
13 * - https://docs.novatel.com/OEM7/Content/Messages/Binary.htm
14 * - https://docs.novatel.com/OEM7/Content/Messages/Description_of_Short_Headers.htm
15 * \endverbatim
16 *
17 * @file
18 * @brief Fixposition SDK: Parser NOV_B routines and types
19 *
20 * @page FPSDK_COMMON_PARSER_NOVB Parser NOV_B routines and types
21 *
22 * **API**: fpsdk_common/parser/novb.hpp and fpsdk::common::parser::novb
23 *
24 */
25#ifndef __FPSDK_COMMON_PARSER_NOVB_HPP__
26#define __FPSDK_COMMON_PARSER_NOVB_HPP__
27
28/* LIBC/STL */
29#include <cstddef>
30#include <cstdint>
31
32/* EXTERNAL */
33
34/* PACKAGE */
35
36namespace fpsdk {
37namespace common {
38namespace parser {
39/**
40 * @brief Parser NOV_B routines and types
41 */
42namespace novb {
43/* ****************************************************************************************************************** */
44
45// Doxygen is easily confused.. :-/
46//! Message truct that must be packed
47#ifndef _DOXYGEN_
48# define NOV_B_PACKED __attribute__((packed))
49#else
50# define NOV_B_PACKED /* packed */
51#endif
52
53static constexpr uint8_t NOV_B_SYNC_1 = 0xaa; //!< Sync char 1
54static constexpr uint8_t NOV_B_SYNC_2 = 0x44; //!< Sync char 2
55static constexpr uint8_t NOV_B_SYNC_3_LONG = 0x12; //!< Sync char 3 (long header)
56static constexpr uint8_t NOV_B_SYNC_3_SHORT = 0x13; //!< Sync char 3 (short header)
57static constexpr std::size_t NOV_B_HEAD_SIZE_LONG = 28; //!< Size of the NOV_B long header (NovbLongHeader)
58static constexpr std::size_t NOV_B_HEAD_SIZE_SHORT = 12; //!< Size of the NOV_B short header (NovbShortHeader)
59
60/**
61 * @brief Get message ID
62 *
63 * @param[in] msg Pointer to the start of the message
64 *
65 * @note No check on the data provided is done. The caller must ensure that the data is a valid NOV_B message.
66 *
67 * @returns message ID
68 */
69constexpr uint16_t NovbMsgId(const uint8_t* msg)
70{
71 return (((uint16_t)((uint8_t*)msg)[5] << 8) | (uint16_t)((uint8_t*)msg)[4]);
72}
73
74/**
75 * @brief Check if message has the long header
76 *
77 * @param[in] msg Pointer to the start of the message
78 *
79 * @note No check on the data provided is done. The caller must ensure that the data is a valid NOV_B message.
80 *
81 * @returns true if the message has the long header (NovbLongHeader)
82 */
83constexpr bool NovbIsLongHeader(const uint8_t* msg)
84{
85 return msg[2] == NOV_B_SYNC_3_LONG;
86}
87
88/**
89 * @brief Check if message has the short header
90 *
91 * @param[in] msg Pointer to the start of the message
92 *
93 * @note No check on the data provided is done. The caller must ensure that the data is a valid NOV_B message.
94 *
95 * @returns true if the message has the short header (NovbShortHeader)
96 */
97constexpr bool NovbIsShortHeader(const uint8_t* msg)
98{
99 return msg[2] == NOV_B_SYNC_3_SHORT;
100}
101
102/**
103 * @brief Get NOV_B message name
104 *
105 * Generates a name (string) in the form "NOV_B-NAME", where NAME is a suitable stringifications of the
106 * message ID if known (for example, "NOV_B-BESTGNSSPOS", respectively "%05u" formatted message ID if unknown (for
107 * example, "NOV_B-MSG01234").
108 *
109 * @param[out] name String to write the name to
110 * @param[in] size Size of \c name (incl. nul termination)
111 * @param[in] msg Pointer to the NOV_B message
112 * @param[in] msg_size Size of the \c msg
113 *
114 * @note No check on the data provided is done. The caller must ensure that the data is a valid NOV_B message.
115 *
116 * @returns true if message name was generated, false if \c name buffer was too small
117 */
118bool NovbGetMessageName(char* name, const std::size_t size, const uint8_t* msg, const std::size_t msg_size);
119
120/**
121 * @brief Get NOV_B message info
122 *
123 * This stringifies the content of some NOV_B messages, for debugging.
124 *
125 * @param[out] info String to write the info to
126 * @param[in] size Size of \c name (incl. nul termination)
127 * @param[in] msg Pointer to the NOV_B message
128 * @param[in] msg_size Size of the \c msg
129 *
130 * @note No check on the data provided is done. The caller must ensure that the data is a valid NOV_B message.
131 *
132 * @returns true if message info was generated (even if info is empty), false if \c name buffer was too small
133 */
134bool NovbGetMessageInfo(char* info, const std::size_t size, const uint8_t* msg, const std::size_t msg_size);
135
136/**
137 * @name NOV_B messages (names and IDs)
138 *
139 * @{
140 */
141// clang-format off
142// @fp_codegen_begin{FPSDK_COMMON_PARSER_NOVB_MESSAGES}
143static constexpr uint16_t NOV_B_BESTGNSSPOS_MSGID = 1429; //!< NOV_B-BESTGNSSPOS message ID
144static constexpr const char* NOV_B_BESTGNSSPOS_STRID = "NOV_B-BESTGNSSPOS"; //!< NOV_B-BESTGNSSPOS message name
145static constexpr uint16_t NOV_B_BESTPOS_MSGID = 42; //!< NOV_B-BESTPOS message ID
146static constexpr const char* NOV_B_BESTPOS_STRID = "NOV_B-BESTPOS"; //!< NOV_B-BESTPOS message name
147static constexpr uint16_t NOV_B_BESTUTM_MSGID = 726; //!< NOV_B-BESTUTM message ID
148static constexpr const char* NOV_B_BESTUTM_STRID = "NOV_B-BESTUTM"; //!< NOV_B-BESTUTM message name
149static constexpr uint16_t NOV_B_BESTVEL_MSGID = 99; //!< NOV_B-BESTVEL message ID
150static constexpr const char* NOV_B_BESTVEL_STRID = "NOV_B-BESTVEL"; //!< NOV_B-BESTVEL message name
151static constexpr uint16_t NOV_B_BESTXYZ_MSGID = 241; //!< NOV_B-BESTXYZ message ID
152static constexpr const char* NOV_B_BESTXYZ_STRID = "NOV_B-BESTXYZ"; //!< NOV_B-BESTXYZ message name
153static constexpr uint16_t NOV_B_CORRIMUS_MSGID = 2264; //!< NOV_B-CORRIMUS message ID
154static constexpr const char* NOV_B_CORRIMUS_STRID = "NOV_B-CORRIMUS"; //!< NOV_B-CORRIMUS message name
155static constexpr uint16_t NOV_B_HEADING2_MSGID = 1335; //!< NOV_B-HEADING2 message ID
156static constexpr const char* NOV_B_HEADING2_STRID = "NOV_B-HEADING2"; //!< NOV_B-HEADING2 message name
157static constexpr uint16_t NOV_B_IMURATECORRIMUS_MSGID = 1362; //!< NOV_B-IMURATECORRIMUS message ID
158static constexpr const char* NOV_B_IMURATECORRIMUS_STRID = "NOV_B-IMURATECORRIMUS"; //!< NOV_B-IMURATECORRIMUS message name
159static constexpr uint16_t NOV_B_INSCONFIG_MSGID = 1945; //!< NOV_B-INSCONFIG message ID
160static constexpr const char* NOV_B_INSCONFIG_STRID = "NOV_B-INSCONFIG"; //!< NOV_B-INSCONFIG message name
161static constexpr uint16_t NOV_B_INSPVA_MSGID = 507; //!< NOV_B-INSPVA message ID
162static constexpr const char* NOV_B_INSPVA_STRID = "NOV_B-INSPVA"; //!< NOV_B-INSPVA message name
163static constexpr uint16_t NOV_B_INSPVAS_MSGID = 508; //!< NOV_B-INSPVAS message ID
164static constexpr const char* NOV_B_INSPVAS_STRID = "NOV_B-INSPVAS"; //!< NOV_B-INSPVAS message name
165static constexpr uint16_t NOV_B_INSPVAX_MSGID = 1465; //!< NOV_B-INSPVAX message ID
166static constexpr const char* NOV_B_INSPVAX_STRID = "NOV_B-INSPVAX"; //!< NOV_B-INSPVAX message name
167static constexpr uint16_t NOV_B_INSSTDEV_MSGID = 2051; //!< NOV_B-INSSTDEV message ID
168static constexpr const char* NOV_B_INSSTDEV_STRID = "NOV_B-INSSTDEV"; //!< NOV_B-INSSTDEV message name
169static constexpr uint16_t NOV_B_PSRDOP2_MSGID = 1163; //!< NOV_B-PSRDOP2 message ID
170static constexpr const char* NOV_B_PSRDOP2_STRID = "NOV_B-PSRDOP2"; //!< NOV_B-PSRDOP2 message name
171static constexpr uint16_t NOV_B_RAWDMI_MSGID = 2269; //!< NOV_B-RAWDMI message ID
172static constexpr const char* NOV_B_RAWDMI_STRID = "NOV_B-RAWDMI"; //!< NOV_B-RAWDMI message name
173static constexpr uint16_t NOV_B_RAWIMU_MSGID = 268; //!< NOV_B-RAWIMU message ID
174static constexpr const char* NOV_B_RAWIMU_STRID = "NOV_B-RAWIMU"; //!< NOV_B-RAWIMU message name
175static constexpr uint16_t NOV_B_RAWIMUSX_MSGID = 1462; //!< NOV_B-RAWIMUSX message ID
176static constexpr const char* NOV_B_RAWIMUSX_STRID = "NOV_B-RAWIMUSX"; //!< NOV_B-RAWIMUSX message name
177static constexpr uint16_t NOV_B_RXSTATUS_MSGID = 93; //!< NOV_B-RXSTATUS message ID
178static constexpr const char* NOV_B_RXSTATUS_STRID = "NOV_B-RXSTATUS"; //!< NOV_B-RXSTATUS message name
179static constexpr uint16_t NOV_B_TIME_MSGID = 101; //!< NOV_B-TIME message ID
180static constexpr const char* NOV_B_TIME_STRID = "NOV_B-TIME"; //!< NOV_B-TIME message name
181// @fp_codegen_end{FPSDK_COMMON_PARSER_NOVB_MESSAGES}
182// clang-format on
183///@}
184
185// ---------------------------------------------------------------------------------------------------------------------
186
187/**
188 * @brief NOV_B frame long header
189 *
190 * See https://docs.novatel.com/OEM7/Content/Messages/Binary.htm
191 */
193{ // clang-format off
194 uint8_t sync1; //!< = NOV_B_SYNC_1
195 uint8_t sync2; //!< = NOV_B_SYNC_2
196 uint8_t sync3; //!< = NOV_B_SYNC_3_LONG
197 uint8_t header_length; //!< sizeof(NovbLongHeader)
198 uint16_t message_id; //!< Message ID
199 uint8_t message_type; //!< Message type (see NovbMsgTypeSource)
200 uint8_t port_address; //!< Port address (see NovbPortAddr)
201 uint16_t message_length; //!< Message (payload) length
202 uint16_t sequence; //!< Sequence for groups of same messages
203 uint8_t idle_time; //!< CPU idle [%]
204 uint8_t time_status; //!< Time quality indicator (see NovbTimeStatus)
205 uint16_t gps_week; //!< GPS week number
206 int32_t gps_milliseconds; //!< GPS time of week [ms]
207 uint32_t receiver_status; //!< Receiver status flags
208 uint16_t reserved; //!< Reserved
209 uint16_t receiver_version; //!< Receiver sw version
210}; // clang-format on
211
212static_assert(sizeof(NovbLongHeader) == NOV_B_HEAD_SIZE_LONG, "");
213
214/**
215 * @brief NOV_B frame short header
216 *
217 * See https://docs.novatel.com/OEM7/Content/Messages/Description_of_Short_Headers.htm
218 */
220{ // clang-format off
221 uint8_t sync1; //!< = NOV_B_SYNC_1
222 uint8_t sync2; //!< = NOV_B_SYNC_2
223 uint8_t sync3; //!< = NOV_B_SYNC_3_LONG
224 uint8_t message_length; //!< Message (payload) length
225 uint16_t message_id; //!< Message ID
226 uint16_t gps_week; //!< GPS week number
227 int32_t gps_milliseconds; //!< GPS time of week [ms]
228}; // clang-format on
229
230static_assert(sizeof(NovbShortHeader) == NOV_B_HEAD_SIZE_SHORT, "");
231
232enum class NovbMsgTypeSource : uint8_t; // forward declaration
233
234/**
235 * @brief Union of NOV_B long and short header
236 */
238{
239 union
240 {
241 NovbLongHeader long_header; //!< Long header
242 NovbShortHeader short_header; //!< Short header
243 };
244 /**
245 * @brief Check for long vs short header
246 *
247 * @returns true if long_header is valid, false if short_header is valid
248 */
249 bool IsLongHeader() const;
250 /**
251 * @brief Get message type source
252 *
253 * @returns the message type source (NovbMsgTypeSource::_MASK if unknown)
254 */
256};
257
258static_assert(sizeof(NovbHeader) == sizeof(NovbLongHeader), "");
259
260/**
261 * @brief Message type measurement source (bits 4..0 of NovbLongHeader.message_type)
262 */
263enum class NovbMsgTypeSource : uint8_t
264{ // clang-format off
265 PRIMARY = 0b00000000, //!< Primary antenna
266 SECONDARY = 0b00000001, //!< Secondary antenna
267 _MASK = 0b00011111, //!< Mask for the source part of the NovbLongHeader.message_type field
268}; // clang-format on
269
270/**
271 * @brief Stringify message type measurement source
272 *
273 * @param[in] message_type Message type
274 *
275 * @returns a unique string for the message type measurement source
276 */
277const char* NovbMsgTypeSourceStr(const uint8_t message_type);
278
279/**
280 * @brief Message type format (bits 6..5 of NovbLongHeader.message_type)
281 */
282enum class NovbMsgTypeFormat : uint8_t
283{ // clang-format off
284 BINARY = 0b00000000, //!< Binary
285 ASCII = 0b00100000, //!< ASCII
286 AASCII_NMEA = 0b01000000, //!< Abbreviated ASCII, NMEA
287 RESERVED = 0b01100000, //!< Reserved
288 _MASK = 0b01100000, //!< Mask for the format part of the NovbLongHeader.message_type field
289}; // clang-format on
290
291/**
292 * @brief Message type format (bit 7 of NovbLongHeader.message_type)
293 */
294enum class NovbMsgTypeResp : uint8_t
295{ // clang-format off
296 ORIGINAL = 0b00000000, //!< Primary GNSS receiver
297 RESPONSE = 0b10000000, //!< Secondary GNSS receiver
298 _MASK = 0b10000000, //!< Mask for the response part of the NovbLongHeader.message_type field
299}; // clang-format on
300
301/**
302 * @brief Message time status (NovbLongHeader.time_status)
303 *
304 * See https://docs.novatel.com/OEM7/Content/Messages/GPS_Reference_Time_Statu.htm#Table_GPSReferenceTimeStatus
305 */
306enum class NovbTimeStatus : uint8_t
307{ // clang-format off
308 UNKNOWN = 20, //!< Time validity is unknown
309 APPROXIMATE = 60, //!< Time is set approximately
310 COARSEADJUSTING = 80, //!< Time is approaching coarse precision
311 COARSE = 100, //!< This time is valid to coarse precision
312 COARSESTEERING = 120, //!< Time is coarse set and is being steered
313 FREEWHEELING = 130, //!< Position is lost and the range bias cannot be calculated
314 FINEADJUSTING = 140, //!< Time is adjusting to fine precision
315 FINE = 160, //!< Time has fine precision
316 FINEBACKUPSTEERING = 170, //!< Time is fine set and is being steered by the backup system
317 FINESTEERING = 180, //!< Time is fine set and is being steered
318 SATTIME = 200, //!< Time from satellite. Only used in logs containing satellite data, such as eph or alm
319}; // clang-format on
320
321/**
322 * @brief Stringify time status
323 *
324 * @param[in] time_status The time status
325 *
326 * @returns a unique string for the time status
327 */
328const char* NovbTimeStatusStr(const NovbTimeStatus time_status);
329
330/**
331 * @brief Message port address (NovbLongHeader.port_address)
332 *
333 * See https://docs.novatel.com/OEM7/Content/Messages/Binary.htm#Table_DetailedPortIdentifier
334 */
335enum class NovbPortAddr : uint8_t
336{ // clang-format off
337 NO_PORTS = 0x00, //!< No ports specified
338 ALL_PORTS = 0x80, //!< All virtual ports for all ports
339 THISPORT = 0xc0, //!< Current COM port
340 // There are many more...
341}; // clang-format on
342
343// ---------------------------------------------------------------------------------------------------------------------
344
345/**
346 * @brief Solution status
347 *
348 * See https://docs.novatel.com/OEM7/Content/Logs/BESTPOS.htm#SolutionStatus
349 */
350enum class NovbGnssSolStat : uint32_t
351{ // clang-format off
352 SOL_COMPUTED = 0, //!< Solution computed
353 INSUFFICIENT_OBS = 1, //!< Insufficient observations
354 NO_CONVERGENCE = 2, //!< No convergence
355 SINGULARITY = 3, //!< Singularity at parameters matrix
356 COV_TRACE = 4, //!< Covariance trace exceeds maximum (trace > 1000 m)
357 TEST_DIST = 5, //!< Test distance exceeded (maximum of 3 rejections if distance >10 km)
358 COLD_START = 6, //!< Not yet converged from cold start
359 V_H_LIMIT = 7, //!< Height or velocity limits exceeded (in accordance with export licensing restrictions)
360 VARIANCE = 8, //!< Variance exceeds limits
361 RESIDUALS = 9, //!< Residuals are too large
362 // There are some more...
363}; // clang-format on
364
365/**
366 * @brief Extended solution status (bits)
367 *
368 * See https://docs.novatel.com/OEM7/Content/Logs/BESTPOS.htm#ExtendedSolutionStatus
369 */
370enum class NovbGnssSolExtStat : uint8_t
371{ // clang-format off
372 SOL_VERIFIED = 0b00000001, //!< Solution verified
373 // There are more...
374}; // clang-format on
375
376/**
377 * @brief Solution source (bits)
378 *
379 * See https://docs.novatel.com/OEM7/Content/Logs/HEADING2.htm#SolutionSource
380 */
381enum class NovbSolSource : uint8_t
382{ // clang-format off
383 PRIMARY = 0b00000100, //!< Primary antenna
384 SECONDARY = 0b00001000, //!< Secondary antenna
385 _MASK = 0b00001100, //!< Mask
386}; // clang-format on
387
388/**
389 * @brief Datum ID
390 */
391enum class NovbDatumId : uint32_t
392{ // clang-format off
393 WGS84 = 61, //!< WGS-84 datum
394 USER = 63, //!< User-defined datum
395}; // clang-format on
396
397/**
398 * @brief Position or velocity type
399 *
400 * See https://docs.novatel.com/OEM7/Content/Logs/BESTPOS.htm#Position_VelocityType
401 */
402enum class NovbPosOrVelType : uint32_t
403{ // clang-format off
404 NONE = 0, //!< No solution
405 FIXEDPOS = 1, //!< Position has been fixed by the FIX position command or by position averaging.
406 FIXEDHEIGHT = 2, //!< Position has been fixed by the FIX height or FIX auto command or by position averaging
407 DOPPLER_VELOCITY = 8, //!< Velocity computed using instantaneous Doppler
408 SINGLE = 16, //!< Solution calculated using only data supplied by the GNSS satellites
409 PSRDIFF = 17, //!< Solution calculated using pseudorange differential (DGPS, DGNSS) corrections
410 WAAS = 18, //!< Solution calculated using corrections from an SBAS satellite
411 PROPAGATED = 19, //!< Propagated by a Kalman filter without new observations
412 L1_FLOAT = 32, //!< Single-frequency RTK solution with unresolved, float carrier phase ambiguities
413 NARROW_FLOAT = 34, //!< Multi-frequency RTK solution with unresolved, float carrier phase ambiguities
414 L1_INT = 48, //!< Single-frequency RTK solution with carrier phase ambiguities resolved to integers
415 WIDE_INT = 49, //!< Multi-frequency RTK solution with carrier phase ambiguities resolved to wide-lane integers
416 NARROW_INT = 50, //!< Multi-frequency RTK solution with carrier phase ambiguities resolved to narrow-lane integers
417 RTK_DIRECT_INS = 51, //!< RTK status where the RTK filter is directly initialized from the INS filter
418 INS_SBAS = 52, //!< INS position, where the last applied position update used a GNSS solution computed using corrections from an SBAS (WAAS) solution
419 INS_PSRSP = 53, //!< INS position, where the last applied position update used a single point GNSS (SINGLE) solution
420 INS_PSRDIFF = 54, //!< INS position, where the last applied position update used a pseudorange differential GNSS (PSRDIFF) solution
421 INS_RTKFLOAT = 55, //!< INS position, where the last applied position update used a floating ambiguity RTK (L1_FLOAT or NARROW_FLOAT) solution
422 INS_RTKFIXED = 56, //!< INS position, where the last applied position update used a fixed integer ambiguity RTK (L1_INT, WIDE_INT or NARROW_INT) solution
423 PPP_CONVERGING = 68, //!< Converging TerraStar-C, TerraStar-C PRO or TerraStar-X solution
424 PPP = 69, //!< Converged TerraStar-C, TerraStar-C PRO or TerraStar-X solution
425 OPERATIONAL = 70, //!< Solution accuracy is within UAL operational limit
426 WARNING = 71, //!< Solution accuracy is outside UAL operational limit but within warning limit
427 OUT_OF_BOUNDS = 72, //!< Solution accuracy is outside UAL limits
428 INS_PPP_CONVERGING = 73, //!< INS position, where the last applied position update used a converging TerraStar-C, TerraStar-C PRO or TerraStar-X PPP (PPP_CONVERGING) solution
429 INS_PPP = 74, //!< INS position, where the last applied position update used a converged TerraStar-C, TerraStar-C PRO or TerraStar-X PPP (PPP) solution
430 PPP_BASIC_CONVERGING = 77, //!< Converging TerraStar-L solution
431 PPP_BASIC = 78, //!< Converged TerraStar-L solution
432 INS_PPP_BASIC_CONVERGING = 79, //!< INS position, where the last applied position update used a converging TerraStar-L PPP (PPP_BASIC) solution
433 INS_PPP_BASIC = 80, //!< INS position, where the last applied position update used a converged TerraStar-L PPP (PPP_BASIC) solution
434}; // clang-format on
435
436/**
437 * @brief GPS and GLONASS signals used (bits)
438 *
439 * See https://docs.novatel.com/OEM7/Content/Logs/BESTPOS.htm#GPS_GLONASSSignalUsedMask
440 */
441enum class NovbSigUsedGpsGlo : uint8_t
442{ // clang-format off
443 GPS_L1 = 0x01, //!< GPS L1 used in solution
444 GPS_L2 = 0x02, //!< GPS L2 used in solution
445 GPS_L5 = 0x04, //!< GPS L5 used in solution
446 GLONASS_L1 = 0x10, //!< GLONASS L1 used in solution
447 GLONASS_L2 = 0x20, //!< GLONASS L2 used in solution
448 GLONASS_L5 = 0x40, //!< GLONASS L3 used in solution
449}; // clang-format on
450
451/**
452 * @brief Gelileo and BeiDou signals used (bits)
453 *
454 * See https://docs.novatel.com/OEM7/Content/Logs/BESTPOS.htm#Galileo_BeiDouSignalUsedMask
455 */
456enum class NovbSigUsedGalBds : uint8_t
457{ // clang-format off
458 GALILEO_L1 = 0x01, //!< Galileo E1 used in Solution
459 GALILEO_L2 = 0x02, //!< Galileo E5a used in Solution
460 GALILEO_L5 = 0x04, //!< Galileo E5b used in Solution
461 GALILEO_ALTBOC = 0x08, //!< Galileo ALTBOC used in Solution
462 BEIDOU_L1 = 0x10, //!< BeiDou B1 used in Solution (B1I and B1C)
463 BEIDOU_L2 = 0x20, //!< BeiDou B2 used in Solution (B2I, B2a and B2b)
464 BEIDOU_L5 = 0x40, //!< BeiDou B3 used in Solution (B3I)
465 GALILEO_E6 = 0x80, //!< Galileo E6 used in Solution (E6B and E6C)
466}; // clang-format on
467
468/**
469 * @brief Intertial solution status
470 *
471 * See https://docs.novatel.com/OEM7/Content/SPAN_Logs/INSATT.htm#InertialSolutionStatus
472 */
473enum class NovbInsSolStatus : uint32_t
474{ // clang-format off
475 INS_INACTIVE = 0, //!< IMU logs are present, but the alignment routine has not started; INS is inactive
476 INS_ALIGNING = 1, //!< INS is in alignment mode
477 INS_HIGH_VARIANCE = 2, //!< The INS solution uncertainty contains outliers and the solution may be outside specifications
478 INS_SOLUTION_GOOD = 3, //!< The INS filter is in navigation mode and the INS solution is good
479 INS_SOLUTION_FREE = 6, //!< The INS Filter is in navigation mode and the GNSS solution is suspected to be in error
480 INS_ALIGNMENT_COMPLETE = 7, //!< The INS filter is in navigation mode, but not enough vehicle dynamics have been experienced for the system to be within specifications
481 DETERMINING_ORIENTATION = 8, //!< INS is determining the IMU axis aligned with gravity
482 WAITING_INITIAL_POS = 9, //!< The INS filter has determined the IMU orientation and is awaiting an initial position estimate to begin the alignment process
483 WAITING_AZIMUTH = 10, //!< The INS filer has orientation, initial biases, initial position and valid roll/pitch estimated
484 INITIALIZING_BIASES = 11, //!< The INS filter is estimating initial biases during the first 10 seconds of stationary data
485 MOTION_DETECT = 12, //!< The INS filter has not completely aligned, but has detected motion
486 WAITING_ALIGNMENTORIENTATION = 14, //!< The INS filter is waiting to start alignment
487}; // clang-format on
488
489/**
490 * @brief Extended intertial solution status (bits)
491 *
492 * See https://docs.novatel.com/OEM7/Content/SPAN_Logs/INSATTX.htm#ExtendedSolutionStatus
493 */
494enum class NovbInsSolExtStatus : uint32_t
495{ // clang-format off
496 POSITION_UPDATE = 0x00000001, //!< Position update
497 PHASE_UPDATE = 0x00000002, //!< Phase update
498 ZERO_VELOCITY_UPDATE = 0x00000004, //!< Zero velocity update
499 WHEEL_SENSOR_UPDATE = 0x00000008, //!< Wheel sensor update
500 HEADING_UPDATE = 0x00000010, //!< ALIGN (heading) update
501 EXTERNAL_POSITION_UPDATE = 0x00000020, //!< External position update
502 INS_SOLUTION_CONVERGENCE = 0x00000040, //!< INS solution convergence flag
503 DOPPLER_UPDATE = 0x00000080, //!< Doppler update
504 PSEUDORANGE_UPDATE = 0x00000100, //!< Pseudorange update
505 VELOCITY_UPDATE = 0x00000200, //!< Velocity update
506 DR_UPDATE = 0x00000800, //!< Dead reckoning update
507 PHASE_WINDUP_UPDATE = 0x00001000, //!< Phase wind up update
508 COURSE_OVER_GROUND_UPDATE = 0x00002000, //!< Course over ground update
509 EXTERNAL_VELOCITY_UPDATE = 0x00004000, //!< External velocity update
510 EXTERNAL_ATTITUDE_UPDATE = 0x00008000, //!< External attitude update
511 EXTERNAL_HEADING_UPDATE = 0x00010000, //!< External heading update
512 EXTERNAL_HEIGHT_UPDATE = 0x00020000, //!< External height update
513 SECONDARY_INS_USED = 0x00400000, //!< Secondary INS solution
514 TURN_ON_BIAS_ESTIMATED = 0x01000000, //!< Turn on biases estimated
515 ALIGNMENT_DIRECTION_VERIFIED = 0x02000000, //!< Alignment direction verified
516 ALIGNMENT_INDICATION_1 = 0x04000000, //!< Alignment indication 1
517 ALIGNMENT_INDICATION_2 = 0x08000000, //!< Alignment indication 2
518 ALIGNMENT_INDICATION_3 = 0x10000000, //!< Alignment indication 3
519 NVM_SEED_INDICATION_1 = 0x20000000, //!< NVM seed indication 1
520 NVM_SEED_INDICATION_2 = 0x40000000, //!< NVM seed indication 2
521 NVM_SEED_INDICATION_3 = 0x80000000, //!< NVM seed indication 3
522}; // clang-format on
523
524// ---------------------------------------------------------------------------------------------------------------------
525
526/**
527 * @brief NOV_B-RAWDMI payload
528 *
529 * See https://docs.novatel.com/OEM7/Content/SPAN_Logs/RAWDMI.htm
530 */
532{ // clang-format off
533 int32_t dmi1; //!< DMI1 value (RC wheel or FR wheel)
534 int32_t dmi2; //!< DMI2 value (FL wheel or YW sensor)
535 int32_t dmi3; //!< DMI3 value (RR wheel)
536 int32_t dmi4; //!< DMI4 value (RL wheel)
537 uint32_t dmi1_valid : 1; //!< DMI1 value valid flag (1 = dmi1 value is valid)
538 uint32_t dmi2_valid : 1; //!< DMI2 value valid flag (1 = dmi2 value is valid)
539 uint32_t dmi3_valid : 1; //!< DMI3 value valid flag (1 = dmi3 value is valid)
540 uint32_t dmi4_valid : 1; //!< DMI4 value valid flag (1 = dmi4 value is valid)
541 uint32_t dmi1_type : 7; //!< DMI1 value type (0 = linear speed, 1 = angular velocity)
542 uint32_t dmi2_type : 7; //!< DMI2 value type (0 = linear speed, 1 = angular velocity)
543 uint32_t dmi3_type : 7; //!< DMI3 value type (0 = linear speed, 1 = angular velocity)
544 uint32_t dmi4_type : 7; //!< DMI4 value type (0 = linear speed, 1 = angular velocity)
545}; // clang-format on
546
547static_assert(sizeof(NovbRawdmi) == 20, "");
548
549/**
550 * @brief NOV_B-RAWIMU payload
551 *
552 * See https://docs.novatel.com/OEM7/Content/SPAN_Logs/RAWIMU.htm
553 */
555{ // clang-format off
556 uint32_t week; //!< GNSS week number
557 double seconds; //!< GNSS time of week [s]
558 uint32_t imu_stat; //!< The status of the IMU
559 int32_t z_accel; //!< Change in velocity count along z axis
560 int32_t y_accel; //!< -change in velocity count along y axis
561 int32_t x_accel; //!< Change in velocity count along x axis
562 int32_t z_gyro; //!< Change in angle count around z axis
563 int32_t y_gyro; //!< -change in angle count around y axis
564 int32_t x_gyro; //!< Change in angle count around x axis
565}; // clang-format on
566
567static_assert(sizeof(NovbRawimu) == 40, "");
568
569/**
570 * @brief NOV_B-BESTGNSSPOS payload
571 *
572 * See https://docs.novatel.com/OEM7/Content/SPAN_Logs/BESTGNSSPOS.htm
573 */
575{ // clang-format off
576 uint32_t sol_stat; //!< See NovbGnssSolStat
577 uint32_t pos_type; //!< See NovbPosOrVelType
578 double lat; //!< @todo document
579 double lon; //!< @todo document
580 double hgt; //!< @todo document
581 float undulation; //!< @todo document
582 uint32_t datum_id; //!< See NovbDatumId
583 float lat_stdev; //!< @todo document
584 float lon_stdev; //!< @todo document
585 float hgt_stdev; //!< @todo document
586 uint8_t stn_id[4]; //!< @todo document
587 float diff_age; //!< @todo document
588 float sol_age; //!< @todo document
589 uint8_t num_svs; //!< @todo document
590 uint8_t num_sol_svs; //!< @todo document
591 uint8_t num_sol_l1_svs; //!< @todo document
592 uint8_t num_sol_multi_svs; //!< @todo document
593 uint8_t reserved; //!< @todo document
594 uint8_t ext_sol_stat; //!< See NovbGnssSolExtStat
595 uint8_t galileo_beidou_sig_mask; //!< See NovbSigUsedGalBds
596 uint8_t gps_glonass_sig_mask; //!< See NovbSigUsedGpsGlo
597}; // clang-format on
598
599static_assert(sizeof(NovbBestgnsspos) == 72, "");
600
601/**
602 * @brief NOV_B-BESTVEL payload
603 *
604 * See https://docs.novatel.com/OEM7/Content/Logs/BESTVEL.htm
605 */
607{ // clang-format off
608 uint32_t sol_stat; //!< See NovbGnssSolStat
609 uint32_t vel_type; //!< See NovbPosOrVelType
610 float latency; //!< @todo document
611 float age; //!< @todo document
612 double hor_spd; //!< @todo document
613 double trk_gnd; //!< @todo document
614 double vert_spd; //!< @todo document
615 uint32_t reserved; //!< @todo document
616}; // clang-format on
617
618static_assert(sizeof(NovbBestvel) == 44, "");
619
620/**
621 * @brief NOV_B-HEADING2 payload
622 *
623 * See https://docs.novatel.com/OEM7/Content/Logs/HEADING2.htm
624 */
626{ // clang-format off
627 uint32_t sol_status; //!< See NovbGnssSolStat
628 uint32_t pos_type; //!< See NovbPosOrVelType
629 float length; //!< @todo document
630 float heading; //!< @todo document
631 float pitch; //!< @todo document
632 float reserved; //!< @todo document
633 float heading_stdev; //!< @todo document
634 float pitch_stdev; //!< @todo document
635 uint8_t rover_stn_id[4]; //!< @todo document
636 uint8_t master_stn_id[4]; //!< @todo document
637 uint8_t num_sv_tracked; //!< @todo document
638 uint8_t num_sv_in_sol; //!< @todo document
639 uint8_t num_sv_obs; //!< @todo document
640 uint8_t num_sv_multi; //!< @todo document
641 uint8_t sol_source; //!< See NovbSolSource
642 uint8_t ext_sol_status; //!< See NovbGnssSolExtStat
643 uint8_t galileo_beidou_sig_mask; //!< See NovbSigUsedGalBds
644 uint8_t gps_glonass_sig_mask; //!< See NovbSigUsedGpsGlo
645}; // clang-format on
646
647static_assert(sizeof(NovbHeading2) == 48, "");
648
649/**
650 * @brief NOV_B-INSPVAX payload
651 *
652 * See https://docs.novatel.com/OEM7/Content/SPAN_Logs/INSPVAX.htm
653 */
655{ // clang-format off
656 uint32_t ins_status; //!< See NovbInsSolStatus
657 uint32_t pos_type; //!< See NovbPosOrVelType
658 double latitude; //!< @todo document
659 double longitude; //!< @todo document
660 double height; //!< @todo document
661 float undulation; //!< @todo document
662 double north_velocity; //!< @todo document
663 double east_velocity; //!< @todo document
664 double up_velocity; //!< @todo document
665 double roll; //!< @todo document
666 double pitch; //!< @todo document
667 double azimuth; //!< @todo document
668 float latitude_stdev; //!< @todo document
669 float longitude_stdev; //!< @todo document
670 float height_stdev; //!< @todo document
671 float north_velocity_stdev; //!< @todo document
672 float east_velocity_stdev; //!< @todo document
673 float up_velocity_stdev; //!< @todo document
674 float roll_stdev; //!< @todo document
675 float pitch_stdev; //!< @todo document
676 float azimuth_stdev; //!< @todo document
677 uint32_t extended_status; //!< See NovbInsSolExtStatus
678 uint16_t time_since_update; //!< @todo document
679}; // clang-format on
680
681static_assert(sizeof(NovbInspvax) == 126, "");
682
683#undef NOV_B_PACKED
684
685/* ****************************************************************************************************************** */
686} // namespace novb
687} // namespace parser
688} // namespace common
689} // namespace fpsdk
690#endif // __FPSDK_COMMON_PARSER_NOVB_HPP__
static constexpr const char * NOV_B_IMURATECORRIMUS_STRID
NOV_B-IMURATECORRIMUS message name.
Definition novb.hpp:158
static constexpr uint16_t NOV_B_RAWIMUSX_MSGID
NOV_B-RAWIMUSX message ID.
Definition novb.hpp:175
static constexpr uint16_t NOV_B_RXSTATUS_MSGID
NOV_B-RXSTATUS message ID.
Definition novb.hpp:177
static constexpr const char * NOV_B_HEADING2_STRID
NOV_B-HEADING2 message name.
Definition novb.hpp:156
static constexpr const char * NOV_B_TIME_STRID
NOV_B-TIME message name.
Definition novb.hpp:180
static constexpr uint16_t NOV_B_RAWIMU_MSGID
NOV_B-RAWIMU message ID.
Definition novb.hpp:173
static constexpr const char * NOV_B_BESTPOS_STRID
NOV_B-BESTPOS message name.
Definition novb.hpp:146
static constexpr uint16_t NOV_B_IMURATECORRIMUS_MSGID
NOV_B-IMURATECORRIMUS message ID.
Definition novb.hpp:157
static constexpr const char * NOV_B_RAWIMU_STRID
NOV_B-RAWIMU message name.
Definition novb.hpp:174
static constexpr const char * NOV_B_INSPVAS_STRID
NOV_B-INSPVAS message name.
Definition novb.hpp:164
static constexpr uint16_t NOV_B_CORRIMUS_MSGID
NOV_B-CORRIMUS message ID.
Definition novb.hpp:153
NovbInsSolStatus
Intertial solution status.
Definition novb.hpp:474
@ WAITING_INITIAL_POS
The INS filter has determined the IMU orientation and is awaiting an initial position estimate to beg...
@ INS_SOLUTION_GOOD
The INS filter is in navigation mode and the INS solution is good.
@ INS_ALIGNMENT_COMPLETE
The INS filter is in navigation mode, but not enough vehicle dynamics have been experienced for the s...
@ INS_SOLUTION_FREE
The INS Filter is in navigation mode and the GNSS solution is suspected to be in error.
@ INS_HIGH_VARIANCE
The INS solution uncertainty contains outliers and the solution may be outside specifications.
@ WAITING_AZIMUTH
The INS filer has orientation, initial biases, initial position and valid roll/pitch estimated.
@ WAITING_ALIGNMENTORIENTATION
The INS filter is waiting to start alignment.
@ INS_INACTIVE
IMU logs are present, but the alignment routine has not started; INS is inactive.
@ INITIALIZING_BIASES
The INS filter is estimating initial biases during the first 10 seconds of stationary data.
@ DETERMINING_ORIENTATION
INS is determining the IMU axis aligned with gravity.
@ MOTION_DETECT
The INS filter has not completely aligned, but has detected motion.
NovbMsgTypeResp
Message type format (bit 7 of NovbLongHeader.message_type)
Definition novb.hpp:295
NovbSigUsedGalBds
Gelileo and BeiDou signals used (bits)
Definition novb.hpp:457
@ GALILEO_L2
Galileo E5a used in Solution.
@ GALILEO_L1
Galileo E1 used in Solution.
@ GALILEO_L5
Galileo E5b used in Solution.
@ BEIDOU_L1
BeiDou B1 used in Solution (B1I and B1C)
@ GALILEO_E6
Galileo E6 used in Solution (E6B and E6C)
@ BEIDOU_L2
BeiDou B2 used in Solution (B2I, B2a and B2b)
@ GALILEO_ALTBOC
Galileo ALTBOC used in Solution.
@ BEIDOU_L5
BeiDou B3 used in Solution (B3I)
static constexpr uint16_t NOV_B_BESTUTM_MSGID
NOV_B-BESTUTM message ID.
Definition novb.hpp:147
NovbGnssSolStat
Solution status.
Definition novb.hpp:351
@ INSUFFICIENT_OBS
Insufficient observations.
@ TEST_DIST
Test distance exceeded (maximum of 3 rejections if distance >10 km)
@ COLD_START
Not yet converged from cold start.
@ V_H_LIMIT
Height or velocity limits exceeded (in accordance with export licensing restrictions)
@ SINGULARITY
Singularity at parameters matrix.
@ COV_TRACE
Covariance trace exceeds maximum (trace > 1000 m)
static constexpr uint16_t NOV_B_BESTVEL_MSGID
NOV_B-BESTVEL message ID.
Definition novb.hpp:149
static constexpr uint8_t NOV_B_SYNC_3_SHORT
Sync char 3 (short header)
Definition novb.hpp:56
bool NovbGetMessageInfo(char *info, const std::size_t size, const uint8_t *msg, const std::size_t msg_size)
Get NOV_B message info.
static constexpr const char * NOV_B_BESTXYZ_STRID
NOV_B-BESTXYZ message name.
Definition novb.hpp:152
const char * NovbTimeStatusStr(const NovbTimeStatus time_status)
Stringify time status.
static constexpr const char * NOV_B_INSCONFIG_STRID
NOV_B-INSCONFIG message name.
Definition novb.hpp:160
static constexpr uint16_t NOV_B_BESTGNSSPOS_MSGID
NOV_B-BESTGNSSPOS message ID.
Definition novb.hpp:143
static constexpr uint16_t NOV_B_INSPVA_MSGID
NOV_B-INSPVA message ID.
Definition novb.hpp:161
static constexpr uint16_t NOV_B_INSPVAS_MSGID
NOV_B-INSPVAS message ID.
Definition novb.hpp:163
static constexpr const char * NOV_B_BESTGNSSPOS_STRID
NOV_B-BESTGNSSPOS message name.
Definition novb.hpp:144
static constexpr const char * NOV_B_RAWDMI_STRID
NOV_B-RAWDMI message name.
Definition novb.hpp:172
static constexpr uint16_t NOV_B_INSCONFIG_MSGID
NOV_B-INSCONFIG message ID.
Definition novb.hpp:159
static constexpr uint16_t NOV_B_PSRDOP2_MSGID
NOV_B-PSRDOP2 message ID.
Definition novb.hpp:169
const char * NovbMsgTypeSourceStr(const uint8_t message_type)
Stringify message type measurement source.
static constexpr uint16_t NOV_B_BESTPOS_MSGID
NOV_B-BESTPOS message ID.
Definition novb.hpp:145
static constexpr const char * NOV_B_PSRDOP2_STRID
NOV_B-PSRDOP2 message name.
Definition novb.hpp:170
constexpr bool NovbIsLongHeader(const uint8_t *msg)
Check if message has the long header.
Definition novb.hpp:83
NovbPortAddr
Message port address (NovbLongHeader.port_address)
Definition novb.hpp:336
@ ALL_PORTS
All virtual ports for all ports.
bool NovbGetMessageName(char *name, const std::size_t size, const uint8_t *msg, const std::size_t msg_size)
Get NOV_B message name.
static constexpr const char * NOV_B_INSSTDEV_STRID
NOV_B-INSSTDEV message name.
Definition novb.hpp:168
static constexpr uint16_t NOV_B_TIME_MSGID
NOV_B-TIME message ID.
Definition novb.hpp:179
static constexpr const char * NOV_B_RXSTATUS_STRID
NOV_B-RXSTATUS message name.
Definition novb.hpp:178
NovbSolSource
Solution source (bits)
Definition novb.hpp:382
constexpr uint16_t NovbMsgId(const uint8_t *msg)
Get message ID.
Definition novb.hpp:69
NovbSigUsedGpsGlo
GPS and GLONASS signals used (bits)
Definition novb.hpp:442
@ GLONASS_L5
GLONASS L3 used in solution.
@ GLONASS_L2
GLONASS L2 used in solution.
@ GLONASS_L1
GLONASS L1 used in solution.
NovbTimeStatus
Message time status (NovbLongHeader.time_status)
Definition novb.hpp:307
@ SATTIME
Time from satellite. Only used in logs containing satellite data, such as eph or alm.
@ FINEBACKUPSTEERING
Time is fine set and is being steered by the backup system.
@ COARSE
This time is valid to coarse precision.
@ APPROXIMATE
Time is set approximately.
@ FINESTEERING
Time is fine set and is being steered.
@ COARSEADJUSTING
Time is approaching coarse precision.
@ FINEADJUSTING
Time is adjusting to fine precision.
@ FREEWHEELING
Position is lost and the range bias cannot be calculated.
@ COARSESTEERING
Time is coarse set and is being steered.
static constexpr const char * NOV_B_RAWIMUSX_STRID
NOV_B-RAWIMUSX message name.
Definition novb.hpp:176
static constexpr const char * NOV_B_CORRIMUS_STRID
NOV_B-CORRIMUS message name.
Definition novb.hpp:154
constexpr bool NovbIsShortHeader(const uint8_t *msg)
Check if message has the short header.
Definition novb.hpp:97
NovbMsgTypeSource
Message type measurement source (bits 4..0 of NovbLongHeader.message_type)
Definition novb.hpp:264
@ _MASK
Mask for the source part of the NovbLongHeader.message_type field.
NovbMsgTypeFormat
Message type format (bits 6..5 of NovbLongHeader.message_type)
Definition novb.hpp:283
static constexpr uint8_t NOV_B_SYNC_3_LONG
Sync char 3 (long header)
Definition novb.hpp:55
static constexpr uint8_t NOV_B_SYNC_1
Sync char 1.
Definition novb.hpp:53
static constexpr uint16_t NOV_B_INSSTDEV_MSGID
NOV_B-INSSTDEV message ID.
Definition novb.hpp:167
static constexpr const char * NOV_B_BESTUTM_STRID
NOV_B-BESTUTM message name.
Definition novb.hpp:148
static constexpr const char * NOV_B_INSPVAX_STRID
NOV_B-INSPVAX message name.
Definition novb.hpp:166
static constexpr const char * NOV_B_BESTVEL_STRID
NOV_B-BESTVEL message name.
Definition novb.hpp:150
NovbInsSolExtStatus
Extended intertial solution status (bits)
Definition novb.hpp:495
@ EXTERNAL_VELOCITY_UPDATE
External velocity update.
@ COURSE_OVER_GROUND_UPDATE
Course over ground update.
@ INS_SOLUTION_CONVERGENCE
INS solution convergence flag.
@ ALIGNMENT_DIRECTION_VERIFIED
Alignment direction verified.
@ EXTERNAL_HEADING_UPDATE
External heading update.
@ EXTERNAL_POSITION_UPDATE
External position update.
@ EXTERNAL_ATTITUDE_UPDATE
External attitude update.
@ TURN_ON_BIAS_ESTIMATED
Turn on biases estimated.
static constexpr uint16_t NOV_B_HEADING2_MSGID
NOV_B-HEADING2 message ID.
Definition novb.hpp:155
static constexpr const char * NOV_B_INSPVA_STRID
NOV_B-INSPVA message name.
Definition novb.hpp:162
NovbPosOrVelType
Position or velocity type.
Definition novb.hpp:403
@ INS_RTKFIXED
INS position, where the last applied position update used a fixed integer ambiguity RTK (L1_INT,...
@ RTK_DIRECT_INS
RTK status where the RTK filter is directly initialized from the INS filter.
@ WARNING
Solution accuracy is outside UAL operational limit but within warning limit.
@ SINGLE
Solution calculated using only data supplied by the GNSS satellites.
@ PPP_BASIC_CONVERGING
Converging TerraStar-L solution.
@ INS_SBAS
INS position, where the last applied position update used a GNSS solution computed using corrections ...
@ NARROW_INT
Multi-frequency RTK solution with carrier phase ambiguities resolved to narrow-lane integers.
@ FIXEDPOS
Position has been fixed by the FIX position command or by position averaging.
@ INS_RTKFLOAT
INS position, where the last applied position update used a floating ambiguity RTK (L1_FLOAT or NARRO...
@ INS_PSRSP
INS position, where the last applied position update used a single point GNSS (SINGLE) solution.
@ WAAS
Solution calculated using corrections from an SBAS satellite.
@ L1_INT
Single-frequency RTK solution with carrier phase ambiguities resolved to integers.
@ PSRDIFF
Solution calculated using pseudorange differential (DGPS, DGNSS) corrections.
@ INS_PPP_CONVERGING
INS position, where the last applied position update used a converging TerraStar-C,...
@ FIXEDHEIGHT
Position has been fixed by the FIX height or FIX auto command or by position averaging.
@ PPP_BASIC
Converged TerraStar-L solution.
@ INS_PSRDIFF
INS position, where the last applied position update used a pseudorange differential GNSS (PSRDIFF) s...
@ L1_FLOAT
Single-frequency RTK solution with unresolved, float carrier phase ambiguities.
@ INS_PPP
INS position, where the last applied position update used a converged TerraStar-C,...
@ INS_PPP_BASIC_CONVERGING
INS position, where the last applied position update used a converging TerraStar-L PPP (PPP_BASIC) so...
@ OUT_OF_BOUNDS
Solution accuracy is outside UAL limits.
@ PROPAGATED
Propagated by a Kalman filter without new observations.
@ PPP
Converged TerraStar-C, TerraStar-C PRO or TerraStar-X solution.
@ PPP_CONVERGING
Converging TerraStar-C, TerraStar-C PRO or TerraStar-X solution.
@ OPERATIONAL
Solution accuracy is within UAL operational limit.
@ DOPPLER_VELOCITY
Velocity computed using instantaneous Doppler.
@ WIDE_INT
Multi-frequency RTK solution with carrier phase ambiguities resolved to wide-lane integers.
@ INS_PPP_BASIC
INS position, where the last applied position update used a converged TerraStar-L PPP (PPP_BASIC) sol...
@ NARROW_FLOAT
Multi-frequency RTK solution with unresolved, float carrier phase ambiguities.
NovbGnssSolExtStat
Extended solution status (bits)
Definition novb.hpp:371
static constexpr uint16_t NOV_B_INSPVAX_MSGID
NOV_B-INSPVAX message ID.
Definition novb.hpp:165
static constexpr uint8_t NOV_B_SYNC_2
Sync char 2.
Definition novb.hpp:54
static constexpr uint16_t NOV_B_BESTXYZ_MSGID
NOV_B-BESTXYZ message ID.
Definition novb.hpp:151
static constexpr std::size_t NOV_B_HEAD_SIZE_SHORT
Size of the NOV_B short header (NovbShortHeader)
Definition novb.hpp:58
static constexpr uint16_t NOV_B_RAWDMI_MSGID
NOV_B-RAWDMI message ID.
Definition novb.hpp:171
static constexpr std::size_t NOV_B_HEAD_SIZE_LONG
Size of the NOV_B long header (NovbLongHeader)
Definition novb.hpp:57
Fixposition SDK.
#define NOV_B_PACKED
Message truct that must be packed.
Definition novb.hpp:50
uint8_t ext_sol_stat
See NovbGnssSolExtStat.
Definition novb.hpp:594
uint8_t gps_glonass_sig_mask
See NovbSigUsedGpsGlo.
Definition novb.hpp:596
uint32_t datum_id
See NovbDatumId.
Definition novb.hpp:582
uint8_t galileo_beidou_sig_mask
See NovbSigUsedGalBds.
Definition novb.hpp:595
uint32_t sol_stat
See NovbGnssSolStat.
Definition novb.hpp:576
uint32_t pos_type
See NovbPosOrVelType.
Definition novb.hpp:577
uint32_t vel_type
See NovbPosOrVelType.
Definition novb.hpp:609
uint32_t sol_stat
See NovbGnssSolStat.
Definition novb.hpp:608
Union of NOV_B long and short header.
Definition novb.hpp:238
NovbShortHeader short_header
Short header.
Definition novb.hpp:242
bool IsLongHeader() const
Check for long vs short header.
NovbLongHeader long_header
Long header.
Definition novb.hpp:241
NovbMsgTypeSource Source() const
Get message type source.
uint32_t sol_status
See NovbGnssSolStat.
Definition novb.hpp:627
uint32_t pos_type
See NovbPosOrVelType.
Definition novb.hpp:628
uint8_t galileo_beidou_sig_mask
See NovbSigUsedGalBds.
Definition novb.hpp:643
uint8_t ext_sol_status
See NovbGnssSolExtStat.
Definition novb.hpp:642
uint8_t gps_glonass_sig_mask
See NovbSigUsedGpsGlo.
Definition novb.hpp:644
uint8_t sol_source
See NovbSolSource.
Definition novb.hpp:641
uint32_t extended_status
See NovbInsSolExtStatus.
Definition novb.hpp:677
uint32_t ins_status
See NovbInsSolStatus.
Definition novb.hpp:656
uint32_t pos_type
See NovbPosOrVelType.
Definition novb.hpp:657
uint8_t time_status
Time quality indicator (see NovbTimeStatus)
Definition novb.hpp:204
uint16_t receiver_version
Receiver sw version.
Definition novb.hpp:209
uint8_t port_address
Port address (see NovbPortAddr)
Definition novb.hpp:200
int32_t gps_milliseconds
GPS time of week [ms].
Definition novb.hpp:206
uint16_t message_length
Message (payload) length.
Definition novb.hpp:201
uint16_t sequence
Sequence for groups of same messages.
Definition novb.hpp:202
uint8_t sync3
= NOV_B_SYNC_3_LONG
Definition novb.hpp:196
uint8_t message_type
Message type (see NovbMsgTypeSource)
Definition novb.hpp:199
uint8_t header_length
sizeof(NovbLongHeader)
Definition novb.hpp:197
uint32_t receiver_status
Receiver status flags.
Definition novb.hpp:207
uint16_t gps_week
GPS week number.
Definition novb.hpp:205
uint32_t dmi3_valid
DMI3 value valid flag (1 = dmi3 value is valid)
Definition novb.hpp:539
int32_t dmi4
DMI4 value (RL wheel)
Definition novb.hpp:536
uint32_t dmi4_type
DMI4 value type (0 = linear speed, 1 = angular velocity)
Definition novb.hpp:544
int32_t dmi1
DMI1 value (RC wheel or FR wheel)
Definition novb.hpp:533
int32_t dmi3
DMI3 value (RR wheel)
Definition novb.hpp:535
uint32_t dmi1_valid
DMI1 value valid flag (1 = dmi1 value is valid)
Definition novb.hpp:537
uint32_t dmi1_type
DMI1 value type (0 = linear speed, 1 = angular velocity)
Definition novb.hpp:541
uint32_t dmi2_type
DMI2 value type (0 = linear speed, 1 = angular velocity)
Definition novb.hpp:542
uint32_t dmi2_valid
DMI2 value valid flag (1 = dmi2 value is valid)
Definition novb.hpp:538
uint32_t dmi4_valid
DMI4 value valid flag (1 = dmi4 value is valid)
Definition novb.hpp:540
uint32_t dmi3_type
DMI3 value type (0 = linear speed, 1 = angular velocity)
Definition novb.hpp:543
int32_t dmi2
DMI2 value (FL wheel or YW sensor)
Definition novb.hpp:534
int32_t y_gyro
-change in angle count around y axis
Definition novb.hpp:563
double seconds
GNSS time of week [s].
Definition novb.hpp:557
int32_t x_accel
Change in velocity count along x axis.
Definition novb.hpp:561
uint32_t week
GNSS week number.
Definition novb.hpp:556
int32_t y_accel
-change in velocity count along y axis
Definition novb.hpp:560
int32_t z_accel
Change in velocity count along z axis.
Definition novb.hpp:559
int32_t x_gyro
Change in angle count around x axis.
Definition novb.hpp:564
uint32_t imu_stat
The status of the IMU.
Definition novb.hpp:558
int32_t z_gyro
Change in angle count around z axis.
Definition novb.hpp:562
uint16_t gps_week
GPS week number.
Definition novb.hpp:226
uint8_t sync3
= NOV_B_SYNC_3_LONG
Definition novb.hpp:223
uint8_t message_length
Message (payload) length.
Definition novb.hpp:224
int32_t gps_milliseconds
GPS time of week [ms].
Definition novb.hpp:227