diff --git a/c/include/libsbp/cpp/message_traits.h b/c/include/libsbp/cpp/message_traits.h index 8c2ec53d0e..fb827b5332 100644 --- a/c/include/libsbp/cpp/message_traits.h +++ b/c/include/libsbp/cpp/message_traits.h @@ -6621,6 +6621,43 @@ struct MessageTraits { } }; +template <> +struct MessageTraits { + static constexpr sbp_msg_type_t id = SbpMsgSsrSatelliteApcDep; + static constexpr const char *name = "MSG_SSR_SATELLITE_APC_DEP"; + static const sbp_msg_ssr_satellite_apc_dep_t &get(const sbp_msg_t &msg) { + return msg.ssr_satellite_apc_dep; + } + static sbp_msg_ssr_satellite_apc_dep_t &get(sbp_msg_t &msg) { + return msg.ssr_satellite_apc_dep; + } + static void to_sbp_msg(const sbp_msg_ssr_satellite_apc_dep_t &msg, + sbp_msg_t *sbp_msg) { + sbp_msg->ssr_satellite_apc_dep = msg; + } + static sbp_msg_t to_sbp_msg(const sbp_msg_ssr_satellite_apc_dep_t &msg) { + sbp_msg_t sbp_msg; + sbp_msg.ssr_satellite_apc_dep = msg; + return sbp_msg; + } + static s8 send(sbp_state_t *state, u16 sender_id, + const sbp_msg_ssr_satellite_apc_dep_t &msg, + sbp_write_fn_t write) { + return sbp_msg_ssr_satellite_apc_dep_send(state, sender_id, &msg, write); + } + static s8 encode(uint8_t *buf, uint8_t len, uint8_t *n_written, + const sbp_msg_ssr_satellite_apc_dep_t &msg) { + return sbp_msg_ssr_satellite_apc_dep_encode(buf, len, n_written, &msg); + } + static s8 decode(const uint8_t *buf, uint8_t len, uint8_t *n_read, + sbp_msg_ssr_satellite_apc_dep_t *msg) { + return sbp_msg_ssr_satellite_apc_dep_decode(buf, len, n_read, msg); + } + static size_t encoded_len(const sbp_msg_ssr_satellite_apc_dep_t &msg) { + return sbp_msg_ssr_satellite_apc_dep_encoded_len(&msg); + } +}; + template <> struct MessageTraits { static constexpr sbp_msg_type_t id = SbpMsgSsrSatelliteApc; @@ -6770,39 +6807,78 @@ struct MessageTraits { }; template <> -struct MessageTraits { - static constexpr sbp_msg_type_t id = SbpMsgSsrTileDefinitionDep; - static constexpr const char *name = "MSG_SSR_TILE_DEFINITION_DEP"; - static const sbp_msg_ssr_tile_definition_dep_t &get(const sbp_msg_t &msg) { - return msg.ssr_tile_definition_dep; +struct MessageTraits { + static constexpr sbp_msg_type_t id = SbpMsgSsrTileDefinitionDepA; + static constexpr const char *name = "MSG_SSR_TILE_DEFINITION_DEP_A"; + static const sbp_msg_ssr_tile_definition_dep_a_t &get(const sbp_msg_t &msg) { + return msg.ssr_tile_definition_dep_a; + } + static sbp_msg_ssr_tile_definition_dep_a_t &get(sbp_msg_t &msg) { + return msg.ssr_tile_definition_dep_a; + } + static void to_sbp_msg(const sbp_msg_ssr_tile_definition_dep_a_t &msg, + sbp_msg_t *sbp_msg) { + sbp_msg->ssr_tile_definition_dep_a = msg; + } + static sbp_msg_t to_sbp_msg(const sbp_msg_ssr_tile_definition_dep_a_t &msg) { + sbp_msg_t sbp_msg; + sbp_msg.ssr_tile_definition_dep_a = msg; + return sbp_msg; + } + static s8 send(sbp_state_t *state, u16 sender_id, + const sbp_msg_ssr_tile_definition_dep_a_t &msg, + sbp_write_fn_t write) { + return sbp_msg_ssr_tile_definition_dep_a_send(state, sender_id, &msg, + write); + } + static s8 encode(uint8_t *buf, uint8_t len, uint8_t *n_written, + const sbp_msg_ssr_tile_definition_dep_a_t &msg) { + return sbp_msg_ssr_tile_definition_dep_a_encode(buf, len, n_written, &msg); + } + static s8 decode(const uint8_t *buf, uint8_t len, uint8_t *n_read, + sbp_msg_ssr_tile_definition_dep_a_t *msg) { + return sbp_msg_ssr_tile_definition_dep_a_decode(buf, len, n_read, msg); + } + static size_t encoded_len(const sbp_msg_ssr_tile_definition_dep_a_t &msg) { + return sbp_msg_ssr_tile_definition_dep_a_encoded_len(&msg); + } +}; + +template <> +struct MessageTraits { + static constexpr sbp_msg_type_t id = SbpMsgSsrTileDefinitionDepB; + static constexpr const char *name = "MSG_SSR_TILE_DEFINITION_DEP_B"; + static const sbp_msg_ssr_tile_definition_dep_b_t &get(const sbp_msg_t &msg) { + return msg.ssr_tile_definition_dep_b; } - static sbp_msg_ssr_tile_definition_dep_t &get(sbp_msg_t &msg) { - return msg.ssr_tile_definition_dep; + static sbp_msg_ssr_tile_definition_dep_b_t &get(sbp_msg_t &msg) { + return msg.ssr_tile_definition_dep_b; } - static void to_sbp_msg(const sbp_msg_ssr_tile_definition_dep_t &msg, + static void to_sbp_msg(const sbp_msg_ssr_tile_definition_dep_b_t &msg, sbp_msg_t *sbp_msg) { - sbp_msg->ssr_tile_definition_dep = msg; + sbp_msg->ssr_tile_definition_dep_b = msg; } - static sbp_msg_t to_sbp_msg(const sbp_msg_ssr_tile_definition_dep_t &msg) { + static sbp_msg_t to_sbp_msg(const sbp_msg_ssr_tile_definition_dep_b_t &msg) { sbp_msg_t sbp_msg; - sbp_msg.ssr_tile_definition_dep = msg; + sbp_msg.ssr_tile_definition_dep_b = msg; return sbp_msg; } static s8 send(sbp_state_t *state, u16 sender_id, - const sbp_msg_ssr_tile_definition_dep_t &msg, + const sbp_msg_ssr_tile_definition_dep_b_t &msg, sbp_write_fn_t write) { - return sbp_msg_ssr_tile_definition_dep_send(state, sender_id, &msg, write); + return sbp_msg_ssr_tile_definition_dep_b_send(state, sender_id, &msg, + write); } static s8 encode(uint8_t *buf, uint8_t len, uint8_t *n_written, - const sbp_msg_ssr_tile_definition_dep_t &msg) { - return sbp_msg_ssr_tile_definition_dep_encode(buf, len, n_written, &msg); + const sbp_msg_ssr_tile_definition_dep_b_t &msg) { + return sbp_msg_ssr_tile_definition_dep_b_encode(buf, len, n_written, &msg); } static s8 decode(const uint8_t *buf, uint8_t len, uint8_t *n_read, - sbp_msg_ssr_tile_definition_dep_t *msg) { - return sbp_msg_ssr_tile_definition_dep_decode(buf, len, n_read, msg); + sbp_msg_ssr_tile_definition_dep_b_t *msg) { + return sbp_msg_ssr_tile_definition_dep_b_decode(buf, len, n_read, msg); } - static size_t encoded_len(const sbp_msg_ssr_tile_definition_dep_t &msg) { - return sbp_msg_ssr_tile_definition_dep_encoded_len(&msg); + static size_t encoded_len(const sbp_msg_ssr_tile_definition_dep_b_t &msg) { + return sbp_msg_ssr_tile_definition_dep_b_encoded_len(&msg); } }; diff --git a/c/include/libsbp/legacy/cpp/message_traits.h b/c/include/libsbp/legacy/cpp/message_traits.h index 7f40f7f4ef..3f3fd4c62f 100644 --- a/c/include/libsbp/legacy/cpp/message_traits.h +++ b/c/include/libsbp/legacy/cpp/message_traits.h @@ -1011,17 +1011,23 @@ struct MessageTraits { template<> -struct MessageTraits { +struct MessageTraits { static constexpr u16 id = 1526; }; template<> -struct MessageTraits { +struct MessageTraits { static constexpr u16 id = 1527; }; +template<> +struct MessageTraits { + static constexpr u16 id = 1528; +}; + + template<> struct MessageTraits { static constexpr u16 id = 1530; @@ -1053,11 +1059,17 @@ struct MessageTraits { template<> -struct MessageTraits { +struct MessageTraits { static constexpr u16 id = 1540; }; +template<> +struct MessageTraits { + static constexpr u16 id = 1541; +}; + + template<> struct MessageTraits { static constexpr u16 id = 1600; diff --git a/c/include/libsbp/legacy/ssr.h b/c/include/libsbp/legacy/ssr.h index 99a6d84886..19f74869bc 100644 --- a/c/include/libsbp/legacy/ssr.h +++ b/c/include/libsbp/legacy/ssr.h @@ -431,7 +431,7 @@ typedef struct SBP_ATTR_PACKED { See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the definition of the bits is inverted. */ -} msg_ssr_tile_definition_dep_t; +} msg_ssr_tile_definition_dep_a_t; /** Definition of a SSR atmospheric correction tile. @@ -507,6 +507,84 @@ typedef struct SBP_ATTR_PACKED { See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the definition of the bits is inverted. */ +} msg_ssr_tile_definition_dep_b_t; + +/** Definition of a SSR atmospheric correction tile. + + * + * Provides the correction point coordinates for the atmospheric correction + * values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION + * messages. + * + * Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information + * element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of + * correction points, not lists of points. + */ + +typedef struct SBP_ATTR_PACKED { + gps_time_sec_t time; /**< GNSS reference time of the + correction */ + u8 update_interval; /**< Update interval between consecutive corrections. + Encoded following RTCM DF391 specification. */ + u8 sol_id; /**< SSR Solution ID. Similar to RTCM DF415. */ + u8 iod_atmo; /**< IOD of the SSR atmospheric correction. */ + u16 tile_set_id; /**< Unique identifier of the tile set this tile + belongs to. */ + u16 tile_id; /**< Unique identifier of this tile in the tile set. + See GNSS-SSR-ArrayOfCorrectionPoints field + correctionPointSetID. */ + s16 corner_nw_lat; /**< North-West corner correction point latitude. + + The relation between the latitude X in the + range [-90, 90] and the coded number N is: N = + floor((X / 90) * 2^14) + + See GNSS-SSR-ArrayOfCorrectionPoints field + referencePointLatitude. [encoded degrees] */ + s16 corner_nw_lon; /**< North-West corner correction point longitude. + + The relation between the longitude X in the + range [-180, 180] and the coded number N is: N + = floor((X / 180) * 2^15) + + See GNSS-SSR-ArrayOfCorrectionPoints field + referencePointLongitude. [encoded degrees] */ + u16 spacing_lat; /**< Spacing of the correction points in the + latitude direction. + + See GNSS-SSR-ArrayOfCorrectionPoints field + stepOfLatitude. [0.01 degrees] */ + u16 spacing_lon; /**< Spacing of the correction points in the + longitude direction. + + See GNSS-SSR-ArrayOfCorrectionPoints field + stepOfLongitude. [0.01 degrees] */ + u16 rows; /**< Number of steps in the latitude direction. + + See GNSS-SSR-ArrayOfCorrectionPoints field + numberOfStepsLatitude. */ + u16 cols; /**< Number of steps in the longitude direction. + + See GNSS-SSR-ArrayOfCorrectionPoints field + numberOfStepsLongitude. */ + u64 bitmask; /**< Specifies the absence of correction data at the + correction points in the array (grid). + + Only the first rows * cols bits are used, and + if a specific bit is enabled (set to 1), the + correction is not available. If there are more + than 64 correction points the remaining + corrections are always available. + + The correction points are packed by rows, + starting with the northwest corner of the array + (top-left on a north oriented map), with each + row spanning west to east, ending with the + southeast corner of the array. + + See GNSS-SSR-ArrayOfCorrectionPoints field + bitmaskOfGrids but note the definition of the + bits is inverted. */ } msg_ssr_tile_definition_t; /** Antenna phase center correction @@ -531,6 +609,19 @@ typedef struct SBP_ATTR_PACKED { typedef struct SBP_ATTR_PACKED { satellite_apc_t apc[0]; /**< Satellite antenna phase center corrections */ +} msg_ssr_satellite_apc_dep_t; + +typedef struct SBP_ATTR_PACKED { + gps_time_sec_t time; /**< GNSS reference time of the + correction */ + u8 update_interval; /**< Update interval between consecutive corrections. + Encoded following RTCM DF391 specification. */ + u8 sol_id; /**< SSR Solution ID. Similar to RTCM DF415. */ + u8 iod_ssr; /**< IOD of the SSR correction. A change of Issue Of + Data SSR is used to indicate a change in the SSR + generating configuration */ + satellite_apc_t apc[0]; /**< Satellite antenna phase center + corrections */ } msg_ssr_satellite_apc_t; typedef struct SBP_ATTR_PACKED { diff --git a/c/include/libsbp/sbp_msg_type.h b/c/include/libsbp/sbp_msg_type.h index 71e10c35fd..56128e0965 100644 --- a/c/include/libsbp/sbp_msg_type.h +++ b/c/include/libsbp/sbp_msg_type.h @@ -235,11 +235,13 @@ typedef enum { SbpMsgSsrOrbitClockDepA = SBP_MSG_SSR_ORBIT_CLOCK_DEP_A, SbpMsgSsrOrbitClock = SBP_MSG_SSR_ORBIT_CLOCK, SbpMsgSsrPhaseBiases = SBP_MSG_SSR_PHASE_BIASES, + SbpMsgSsrSatelliteApcDep = SBP_MSG_SSR_SATELLITE_APC_DEP, SbpMsgSsrSatelliteApc = SBP_MSG_SSR_SATELLITE_APC, SbpMsgSsrStecCorrectionDepA = SBP_MSG_SSR_STEC_CORRECTION_DEP_A, SbpMsgSsrStecCorrectionDep = SBP_MSG_SSR_STEC_CORRECTION_DEP, SbpMsgSsrStecCorrection = SBP_MSG_SSR_STEC_CORRECTION, - SbpMsgSsrTileDefinitionDep = SBP_MSG_SSR_TILE_DEFINITION_DEP, + SbpMsgSsrTileDefinitionDepA = SBP_MSG_SSR_TILE_DEFINITION_DEP_A, + SbpMsgSsrTileDefinitionDepB = SBP_MSG_SSR_TILE_DEFINITION_DEP_B, SbpMsgSsrTileDefinition = SBP_MSG_SSR_TILE_DEFINITION, SbpMsgStartup = SBP_MSG_STARTUP, SbpMsgStatusJournal = SBP_MSG_STATUS_JOURNAL, diff --git a/c/include/libsbp/ssr_macros.h b/c/include/libsbp/ssr_macros.h index 4cd8bc86a4..ff9183ce16 100644 --- a/c/include/libsbp/ssr_macros.h +++ b/c/include/libsbp/ssr_macros.h @@ -240,19 +240,26 @@ */ #define SBP_MSG_SSR_GRIDDED_CORRECTION_BOUNDS_ENCODED_OVERHEAD 27u -#define SBP_MSG_SSR_TILE_DEFINITION_DEP 0x05F6 +#define SBP_MSG_SSR_TILE_DEFINITION_DEP_A 0x05F6 /** - * Encoded length of sbp_msg_ssr_tile_definition_dep_t (V4 API) and - * msg_ssr_tile_definition_dep_t (legacy API) + * Encoded length of sbp_msg_ssr_tile_definition_dep_a_t (V4 API) and + * msg_ssr_tile_definition_dep_a_t (legacy API) */ -#define SBP_MSG_SSR_TILE_DEFINITION_DEP_ENCODED_LEN 24u +#define SBP_MSG_SSR_TILE_DEFINITION_DEP_A_ENCODED_LEN 24u -#define SBP_MSG_SSR_TILE_DEFINITION 0x05F7 +#define SBP_MSG_SSR_TILE_DEFINITION_DEP_B 0x05F7 +/** + * Encoded length of sbp_msg_ssr_tile_definition_dep_b_t (V4 API) and + * msg_ssr_tile_definition_dep_b_t (legacy API) + */ +#define SBP_MSG_SSR_TILE_DEFINITION_DEP_B_ENCODED_LEN 25u + +#define SBP_MSG_SSR_TILE_DEFINITION 0x05F8 /** * Encoded length of sbp_msg_ssr_tile_definition_t (V4 API) and * msg_ssr_tile_definition_t (legacy API) */ -#define SBP_MSG_SSR_TILE_DEFINITION_ENCODED_LEN 25u +#define SBP_MSG_SSR_TILE_DEFINITION_ENCODED_LEN 33u #define SBP_SATELLITEAPC_SATELLITE_TYPE_MASK (0x1fu) #define SBP_SATELLITEAPC_SATELLITE_TYPE_SHIFT (0u) @@ -307,7 +314,31 @@ */ #define SBP_SATELLITE_APC_ENCODED_LEN 32u -#define SBP_MSG_SSR_SATELLITE_APC 0x0604 +#define SBP_MSG_SSR_SATELLITE_APC_DEP 0x0604 +/** + * The maximum number of items that can be stored in + * sbp_msg_ssr_satellite_apc_dep_t::apc (V4 API) or + * msg_ssr_satellite_apc_dep_t::apc (legacy API) before the maximum SBP message + * size is exceeded + */ +#define SBP_MSG_SSR_SATELLITE_APC_DEP_APC_MAX 7u + +/** + * Encoded length of sbp_msg_ssr_satellite_apc_dep_t (V4 API) and + * msg_ssr_satellite_apc_dep_t (legacy API) + * + * This type is not fixed size and an instance of this message may be longer + * than the value indicated by this symbol. Users of the V4 API should call + * #sbp_msg_ssr_satellite_apc_dep_encoded_len to determine the actual size of an + * instance of this message. Users of the legacy API are required to track the + * encoded message length when interacting with the legacy type. + * + * See the documentation for libsbp for more details regarding the message + * structure and its variable length component(s) + */ +#define SBP_MSG_SSR_SATELLITE_APC_DEP_ENCODED_OVERHEAD 0u + +#define SBP_MSG_SSR_SATELLITE_APC 0x0605 /** * The maximum number of items that can be stored in * sbp_msg_ssr_satellite_apc_t::apc (V4 API) or msg_ssr_satellite_apc_t::apc @@ -328,7 +359,7 @@ * See the documentation for libsbp for more details regarding the message * structure and its variable length component(s) */ -#define SBP_MSG_SSR_SATELLITE_APC_ENCODED_OVERHEAD 0u +#define SBP_MSG_SSR_SATELLITE_APC_ENCODED_OVERHEAD 9u #define SBP_MSG_SSR_ORBIT_CLOCK_DEP_A 0x05DC /** diff --git a/c/include/libsbp/v4/sbp_msg.h b/c/include/libsbp/v4/sbp_msg.h index 27456e42b4..3e3024c104 100644 --- a/c/include/libsbp/v4/sbp_msg.h +++ b/c/include/libsbp/v4/sbp_msg.h @@ -241,11 +241,13 @@ typedef union { sbp_msg_ssr_orbit_clock_dep_a_t ssr_orbit_clock_dep_a; sbp_msg_ssr_orbit_clock_t ssr_orbit_clock; sbp_msg_ssr_phase_biases_t ssr_phase_biases; + sbp_msg_ssr_satellite_apc_dep_t ssr_satellite_apc_dep; sbp_msg_ssr_satellite_apc_t ssr_satellite_apc; sbp_msg_ssr_stec_correction_dep_a_t ssr_stec_correction_dep_a; sbp_msg_ssr_stec_correction_dep_t ssr_stec_correction_dep; sbp_msg_ssr_stec_correction_t ssr_stec_correction; - sbp_msg_ssr_tile_definition_dep_t ssr_tile_definition_dep; + sbp_msg_ssr_tile_definition_dep_a_t ssr_tile_definition_dep_a; + sbp_msg_ssr_tile_definition_dep_b_t ssr_tile_definition_dep_b; sbp_msg_ssr_tile_definition_t ssr_tile_definition; sbp_msg_startup_t startup; sbp_msg_status_journal_t status_journal; @@ -796,6 +798,9 @@ static inline s8 sbp_message_encode(uint8_t *buf, uint8_t len, case SbpMsgSsrPhaseBiases: return sbp_msg_ssr_phase_biases_encode(buf, len, n_written, &msg->ssr_phase_biases); + case SbpMsgSsrSatelliteApcDep: + return sbp_msg_ssr_satellite_apc_dep_encode(buf, len, n_written, + &msg->ssr_satellite_apc_dep); case SbpMsgSsrSatelliteApc: return sbp_msg_ssr_satellite_apc_encode(buf, len, n_written, &msg->ssr_satellite_apc); @@ -808,9 +813,12 @@ static inline s8 sbp_message_encode(uint8_t *buf, uint8_t len, case SbpMsgSsrStecCorrection: return sbp_msg_ssr_stec_correction_encode(buf, len, n_written, &msg->ssr_stec_correction); - case SbpMsgSsrTileDefinitionDep: - return sbp_msg_ssr_tile_definition_dep_encode( - buf, len, n_written, &msg->ssr_tile_definition_dep); + case SbpMsgSsrTileDefinitionDepA: + return sbp_msg_ssr_tile_definition_dep_a_encode( + buf, len, n_written, &msg->ssr_tile_definition_dep_a); + case SbpMsgSsrTileDefinitionDepB: + return sbp_msg_ssr_tile_definition_dep_b_encode( + buf, len, n_written, &msg->ssr_tile_definition_dep_b); case SbpMsgSsrTileDefinition: return sbp_msg_ssr_tile_definition_encode(buf, len, n_written, &msg->ssr_tile_definition); @@ -1422,6 +1430,9 @@ static inline s8 sbp_message_decode(const uint8_t *buf, uint8_t len, case SbpMsgSsrPhaseBiases: return sbp_msg_ssr_phase_biases_decode(buf, len, n_read, &msg->ssr_phase_biases); + case SbpMsgSsrSatelliteApcDep: + return sbp_msg_ssr_satellite_apc_dep_decode(buf, len, n_read, + &msg->ssr_satellite_apc_dep); case SbpMsgSsrSatelliteApc: return sbp_msg_ssr_satellite_apc_decode(buf, len, n_read, &msg->ssr_satellite_apc); @@ -1434,9 +1445,12 @@ static inline s8 sbp_message_decode(const uint8_t *buf, uint8_t len, case SbpMsgSsrStecCorrection: return sbp_msg_ssr_stec_correction_decode(buf, len, n_read, &msg->ssr_stec_correction); - case SbpMsgSsrTileDefinitionDep: - return sbp_msg_ssr_tile_definition_dep_decode( - buf, len, n_read, &msg->ssr_tile_definition_dep); + case SbpMsgSsrTileDefinitionDepA: + return sbp_msg_ssr_tile_definition_dep_a_decode( + buf, len, n_read, &msg->ssr_tile_definition_dep_a); + case SbpMsgSsrTileDefinitionDepB: + return sbp_msg_ssr_tile_definition_dep_b_decode( + buf, len, n_read, &msg->ssr_tile_definition_dep_b); case SbpMsgSsrTileDefinition: return sbp_msg_ssr_tile_definition_decode(buf, len, n_read, &msg->ssr_tile_definition); @@ -1954,6 +1968,9 @@ static inline size_t sbp_message_encoded_len(sbp_msg_type_t msg_type, return sbp_msg_ssr_orbit_clock_encoded_len(&msg->ssr_orbit_clock); case SbpMsgSsrPhaseBiases: return sbp_msg_ssr_phase_biases_encoded_len(&msg->ssr_phase_biases); + case SbpMsgSsrSatelliteApcDep: + return sbp_msg_ssr_satellite_apc_dep_encoded_len( + &msg->ssr_satellite_apc_dep); case SbpMsgSsrSatelliteApc: return sbp_msg_ssr_satellite_apc_encoded_len(&msg->ssr_satellite_apc); case SbpMsgSsrStecCorrectionDepA: @@ -1964,9 +1981,12 @@ static inline size_t sbp_message_encoded_len(sbp_msg_type_t msg_type, &msg->ssr_stec_correction_dep); case SbpMsgSsrStecCorrection: return sbp_msg_ssr_stec_correction_encoded_len(&msg->ssr_stec_correction); - case SbpMsgSsrTileDefinitionDep: - return sbp_msg_ssr_tile_definition_dep_encoded_len( - &msg->ssr_tile_definition_dep); + case SbpMsgSsrTileDefinitionDepA: + return sbp_msg_ssr_tile_definition_dep_a_encoded_len( + &msg->ssr_tile_definition_dep_a); + case SbpMsgSsrTileDefinitionDepB: + return sbp_msg_ssr_tile_definition_dep_b_encoded_len( + &msg->ssr_tile_definition_dep_b); case SbpMsgSsrTileDefinition: return sbp_msg_ssr_tile_definition_encoded_len(&msg->ssr_tile_definition); case SbpMsgStartup: @@ -2532,6 +2552,9 @@ static inline int sbp_message_cmp(sbp_msg_type_t msg_type, const sbp_msg_t *a, case SbpMsgSsrPhaseBiases: return sbp_msg_ssr_phase_biases_cmp(&a->ssr_phase_biases, &b->ssr_phase_biases); + case SbpMsgSsrSatelliteApcDep: + return sbp_msg_ssr_satellite_apc_dep_cmp(&a->ssr_satellite_apc_dep, + &b->ssr_satellite_apc_dep); case SbpMsgSsrSatelliteApc: return sbp_msg_ssr_satellite_apc_cmp(&a->ssr_satellite_apc, &b->ssr_satellite_apc); @@ -2544,9 +2567,12 @@ static inline int sbp_message_cmp(sbp_msg_type_t msg_type, const sbp_msg_t *a, case SbpMsgSsrStecCorrection: return sbp_msg_ssr_stec_correction_cmp(&a->ssr_stec_correction, &b->ssr_stec_correction); - case SbpMsgSsrTileDefinitionDep: - return sbp_msg_ssr_tile_definition_dep_cmp(&a->ssr_tile_definition_dep, - &b->ssr_tile_definition_dep); + case SbpMsgSsrTileDefinitionDepA: + return sbp_msg_ssr_tile_definition_dep_a_cmp( + &a->ssr_tile_definition_dep_a, &b->ssr_tile_definition_dep_a); + case SbpMsgSsrTileDefinitionDepB: + return sbp_msg_ssr_tile_definition_dep_b_cmp( + &a->ssr_tile_definition_dep_b, &b->ssr_tile_definition_dep_b); case SbpMsgSsrTileDefinition: return sbp_msg_ssr_tile_definition_cmp(&a->ssr_tile_definition, &b->ssr_tile_definition); diff --git a/c/include/libsbp/v4/ssr.h b/c/include/libsbp/v4/ssr.h index 5dfb14cfef..d05fa21d6f 100644 --- a/c/include/libsbp/v4/ssr.h +++ b/c/include/libsbp/v4/ssr.h @@ -36,11 +36,13 @@ #include #include #include +#include #include #include #include #include -#include +#include +#include #include #include #include diff --git a/c/include/libsbp/v4/ssr/MSG_SSR_SATELLITE_APC.h b/c/include/libsbp/v4/ssr/MSG_SSR_SATELLITE_APC.h index 68b0f001ed..c2af8214c4 100644 --- a/c/include/libsbp/v4/ssr/MSG_SSR_SATELLITE_APC.h +++ b/c/include/libsbp/v4/ssr/MSG_SSR_SATELLITE_APC.h @@ -27,6 +27,7 @@ #include #include +#include #include #include @@ -40,6 +41,28 @@ extern "C" { * *****************************************************************************/ typedef struct { + /** + * GNSS reference time of the correction + */ + sbp_gps_time_sec_t time; + + /** + * Update interval between consecutive corrections. Encoded following RTCM + * DF391 specification. + */ + u8 update_interval; + + /** + * SSR Solution ID. Similar to RTCM DF415. + */ + u8 sol_id; + + /** + * IOD of the SSR correction. A change of Issue Of Data SSR is used to + * indicate a change in the SSR generating configuration + */ + u8 iod_ssr; + /** * Satellite antenna phase center corrections */ diff --git a/c/include/libsbp/v4/ssr/MSG_SSR_SATELLITE_APC_DEP.h b/c/include/libsbp/v4/ssr/MSG_SSR_SATELLITE_APC_DEP.h new file mode 100644 index 0000000000..b07b1a43e7 --- /dev/null +++ b/c/include/libsbp/v4/ssr/MSG_SSR_SATELLITE_APC_DEP.h @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2015-2021 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ + +/***************************************************************************** + * Automatically generated from yaml/swiftnav/sbp/ssr.yaml + * with generate.py. Please do not hand edit! + *****************************************************************************/ + +#ifndef LIBSBP_V4_SSR_MSG_SSR_SATELLITE_APC_DEP_H +#define LIBSBP_V4_SSR_MSG_SSR_SATELLITE_APC_DEP_H + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************************** + * + * SBP_MSG_SSR_SATELLITE_APC_DEP + * + *****************************************************************************/ +typedef struct { + /** + * Satellite antenna phase center corrections + */ + sbp_satellite_apc_t apc[SBP_MSG_SSR_SATELLITE_APC_DEP_APC_MAX]; + /** + * Number of elements in apc + * + * When sending a message fill in this field with the number elements set in + * apc before calling an appropriate libsbp send function + * + * When receiving a message query this field for the number of elements in + * apc. The value of any elements beyond the index specified in this field is + * undefined + */ + u8 n_apc; +} sbp_msg_ssr_satellite_apc_dep_t; + +/** + * Get encoded size of an instance of sbp_msg_ssr_satellite_apc_dep_t + * + * @param msg sbp_msg_ssr_satellite_apc_dep_t instance + * @return Length of on-wire representation + */ +static inline size_t sbp_msg_ssr_satellite_apc_dep_encoded_len( + const sbp_msg_ssr_satellite_apc_dep_t *msg) { + return SBP_MSG_SSR_SATELLITE_APC_DEP_ENCODED_OVERHEAD + + (msg->n_apc * SBP_SATELLITE_APC_ENCODED_LEN); +} + +/** + * Encode an instance of sbp_msg_ssr_satellite_apc_dep_t to wire representation + * + * This function encodes the given instance in to the user provided buffer. The + * buffer provided to this function must be large enough to store the encoded + * message otherwise it will return SBP_ENCODE_ERROR without writing anything to + * the buffer. + * + * Specify the length of the destination buffer in the \p len parameter. If + * non-null the number of bytes written to the buffer will be returned in \p + * n_written. + * + * @param buf Destination buffer + * @param len Length of \p buf + * @param n_written If not null, on success will be set to the number of bytes + * written to \p buf + * @param msg Instance of sbp_msg_ssr_satellite_apc_dep_t to encode + * @return SBP_OK on success, or other libsbp error code + */ +SBP_EXPORT s8 sbp_msg_ssr_satellite_apc_dep_encode( + uint8_t *buf, uint8_t len, uint8_t *n_written, + const sbp_msg_ssr_satellite_apc_dep_t *msg); + +/** + * Decode an instance of sbp_msg_ssr_satellite_apc_dep_t from wire + * representation + * + * This function decodes the wire representation of a + * sbp_msg_ssr_satellite_apc_dep_t message to the given instance. The caller + * must specify the length of the buffer in the \p len parameter. If non-null + * the number of bytes read from the buffer will be returned in \p n_read. + * + * @param buf Wire representation of the sbp_msg_ssr_satellite_apc_dep_t + * instance + * @param len Length of \p buf + * @param n_read If not null, on success will be set to the number of bytes read + * from \p buf + * @param msg Destination + * @return SBP_OK on success, or other libsbp error code + */ +SBP_EXPORT s8 sbp_msg_ssr_satellite_apc_dep_decode( + const uint8_t *buf, uint8_t len, uint8_t *n_read, + sbp_msg_ssr_satellite_apc_dep_t *msg); +/** + * Send an instance of sbp_msg_ssr_satellite_apc_dep_t with the given write + * function + * + * An equivalent of #sbp_message_send which operates specifically on + * sbp_msg_ssr_satellite_apc_dep_t + * + * The given message will be encoded to wire representation and passed in to the + * given write function callback. The write callback will be called several + * times for each invocation of this function. + * + * @param s SBP state + * @param sender_id SBP sender id + * @param msg Message to send + * @param write Write function + * @return SBP_OK on success, or other libsbp error code + */ +SBP_EXPORT s8 sbp_msg_ssr_satellite_apc_dep_send( + sbp_state_t *s, u16 sender_id, const sbp_msg_ssr_satellite_apc_dep_t *msg, + sbp_write_fn_t write); + +/** + * Compare two instances of sbp_msg_ssr_satellite_apc_dep_t + * + * The two instances will be compared and a value returned consistent with the + * return codes of comparison functions from the C standard library + * + * 0 will be returned if \p a and \p b are considered equal + * A value less than 0 will be returned if \p a is considered to be less than \p + * b A value greater than 0 will be returned if \p b is considered to be greater + * than \p b + * + * @param a sbp_msg_ssr_satellite_apc_dep_t instance + * @param b sbp_msg_ssr_satellite_apc_dep_t instance + * @return 0, <0, >0 + */ +SBP_EXPORT int sbp_msg_ssr_satellite_apc_dep_cmp( + const sbp_msg_ssr_satellite_apc_dep_t *a, + const sbp_msg_ssr_satellite_apc_dep_t *b); + +#ifdef __cplusplus +} + +static inline bool operator==(const sbp_msg_ssr_satellite_apc_dep_t &lhs, + const sbp_msg_ssr_satellite_apc_dep_t &rhs) { + return sbp_msg_ssr_satellite_apc_dep_cmp(&lhs, &rhs) == 0; +} + +static inline bool operator!=(const sbp_msg_ssr_satellite_apc_dep_t &lhs, + const sbp_msg_ssr_satellite_apc_dep_t &rhs) { + return sbp_msg_ssr_satellite_apc_dep_cmp(&lhs, &rhs) != 0; +} + +static inline bool operator<(const sbp_msg_ssr_satellite_apc_dep_t &lhs, + const sbp_msg_ssr_satellite_apc_dep_t &rhs) { + return sbp_msg_ssr_satellite_apc_dep_cmp(&lhs, &rhs) < 0; +} + +static inline bool operator<=(const sbp_msg_ssr_satellite_apc_dep_t &lhs, + const sbp_msg_ssr_satellite_apc_dep_t &rhs) { + return sbp_msg_ssr_satellite_apc_dep_cmp(&lhs, &rhs) <= 0; +} + +static inline bool operator>(const sbp_msg_ssr_satellite_apc_dep_t &lhs, + const sbp_msg_ssr_satellite_apc_dep_t &rhs) { + return sbp_msg_ssr_satellite_apc_dep_cmp(&lhs, &rhs) > 0; +} + +static inline bool operator>=(const sbp_msg_ssr_satellite_apc_dep_t &lhs, + const sbp_msg_ssr_satellite_apc_dep_t &rhs) { + return sbp_msg_ssr_satellite_apc_dep_cmp(&lhs, &rhs) >= 0; +} + +#endif // ifdef __cplusplus + +#endif /* LIBSBP_V4_SSR_MSG_SSR_SATELLITE_APC_DEP_H */ diff --git a/c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION.h b/c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION.h index fceb2b1a97..95982a2410 100644 --- a/c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION.h +++ b/c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION.h @@ -27,6 +27,7 @@ #include #include +#include #include #ifdef __cplusplus @@ -47,9 +48,25 @@ extern "C" { */ typedef struct { /** - * SSR Solution ID. + * GNSS reference time of the correction */ - u8 ssr_sol_id; + sbp_gps_time_sec_t time; + + /** + * Update interval between consecutive corrections. Encoded following RTCM + * DF391 specification. + */ + u8 update_interval; + + /** + * SSR Solution ID. Similar to RTCM DF415. + */ + u8 sol_id; + + /** + * IOD of the SSR atmospheric correction. + */ + u8 iod_atmo; /** * Unique identifier of the tile set this tile belongs to. @@ -66,9 +83,7 @@ typedef struct { * North-West corner correction point latitude. * * The relation between the latitude X in the range [-90, 90] and the coded - * number N is: - * - * N = floor((X / 90) * 2^14) + * number N is: N = floor((X / 90) * 2^14) * * See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude. [encoded * degrees] @@ -79,9 +94,7 @@ typedef struct { * North-West corner correction point longitude. * * The relation between the longitude X in the range [-180, 180] and the coded - * number N is: - * - * N = floor((X / 180) * 2^15) + * number N is: N = floor((X / 180) * 2^15) * * See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude. * [encoded degrees] @@ -117,18 +130,16 @@ typedef struct { u16 cols; /** - * Specifies the availability of correction data at the correction points in - * the array. + * Specifies the absence of correction data at the correction points in the + * array (grid). * - * If a specific bit is enabled (set to 1), the correction is not available. - * Only the first rows * cols bits are used, the remainder are set to 0. If - * there are more then 64 correction points the remaining corrections are - * always available. + * Only the first rows * cols bits are used, and if a specific bit is enabled + * (set to 1), the correction is not available. If there are more than 64 + * correction points the remaining corrections are always available. * - * Starting with the northwest corner of the array (top left on a north - * oriented map) the correction points are enumerated with row precedence - - * first row west to east, second row west to east, until last row west to - * east - ending with the southeast corner of the array. + * The correction points are packed by rows, starting with the northwest + * corner of the array (top-left on a north oriented map), with each row + * spanning west to east, ending with the southeast corner of the array. * * See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the * definition of the bits is inverted. diff --git a/c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION_DEP.h b/c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION_DEP_A.h similarity index 76% rename from c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION_DEP.h rename to c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION_DEP_A.h index e8eea9d93d..8273114b0f 100644 --- a/c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION_DEP.h +++ b/c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION_DEP_A.h @@ -15,8 +15,8 @@ * with generate.py. Please do not hand edit! *****************************************************************************/ -#ifndef LIBSBP_V4_SSR_MSG_SSR_TILE_DEFINITION_DEP_H -#define LIBSBP_V4_SSR_MSG_SSR_TILE_DEFINITION_DEP_H +#ifndef LIBSBP_V4_SSR_MSG_SSR_TILE_DEFINITION_DEP_A_H +#define LIBSBP_V4_SSR_MSG_SSR_TILE_DEFINITION_DEP_A_H #include #include @@ -35,7 +35,7 @@ extern "C" { /****************************************************************************** * - * SBP_MSG_SSR_TILE_DEFINITION_DEP + * SBP_MSG_SSR_TILE_DEFINITION_DEP_A * *****************************************************************************/ /** Definition of a SSR atmospheric correction tile. @@ -130,22 +130,22 @@ typedef struct { * definition of the bits is inverted. */ u64 bitmask; -} sbp_msg_ssr_tile_definition_dep_t; +} sbp_msg_ssr_tile_definition_dep_a_t; /** - * Get encoded size of an instance of sbp_msg_ssr_tile_definition_dep_t + * Get encoded size of an instance of sbp_msg_ssr_tile_definition_dep_a_t * - * @param msg sbp_msg_ssr_tile_definition_dep_t instance + * @param msg sbp_msg_ssr_tile_definition_dep_a_t instance * @return Length of on-wire representation */ -static inline size_t sbp_msg_ssr_tile_definition_dep_encoded_len( - const sbp_msg_ssr_tile_definition_dep_t *msg) { +static inline size_t sbp_msg_ssr_tile_definition_dep_a_encoded_len( + const sbp_msg_ssr_tile_definition_dep_a_t *msg) { (void)msg; - return SBP_MSG_SSR_TILE_DEFINITION_DEP_ENCODED_LEN; + return SBP_MSG_SSR_TILE_DEFINITION_DEP_A_ENCODED_LEN; } /** - * Encode an instance of sbp_msg_ssr_tile_definition_dep_t to wire + * Encode an instance of sbp_msg_ssr_tile_definition_dep_a_t to wire * representation * * This function encodes the given instance in to the user provided buffer. The @@ -161,23 +161,23 @@ static inline size_t sbp_msg_ssr_tile_definition_dep_encoded_len( * @param len Length of \p buf * @param n_written If not null, on success will be set to the number of bytes * written to \p buf - * @param msg Instance of sbp_msg_ssr_tile_definition_dep_t to encode + * @param msg Instance of sbp_msg_ssr_tile_definition_dep_a_t to encode * @return SBP_OK on success, or other libsbp error code */ -SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_encode( +SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_a_encode( uint8_t *buf, uint8_t len, uint8_t *n_written, - const sbp_msg_ssr_tile_definition_dep_t *msg); + const sbp_msg_ssr_tile_definition_dep_a_t *msg); /** - * Decode an instance of sbp_msg_ssr_tile_definition_dep_t from wire + * Decode an instance of sbp_msg_ssr_tile_definition_dep_a_t from wire * representation * * This function decodes the wire representation of a - * sbp_msg_ssr_tile_definition_dep_t message to the given instance. The caller + * sbp_msg_ssr_tile_definition_dep_a_t message to the given instance. The caller * must specify the length of the buffer in the \p len parameter. If non-null * the number of bytes read from the buffer will be returned in \p n_read. * - * @param buf Wire representation of the sbp_msg_ssr_tile_definition_dep_t + * @param buf Wire representation of the sbp_msg_ssr_tile_definition_dep_a_t * instance * @param len Length of \p buf * @param n_read If not null, on success will be set to the number of bytes read @@ -185,15 +185,15 @@ SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_encode( * @param msg Destination * @return SBP_OK on success, or other libsbp error code */ -SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_decode( +SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_a_decode( const uint8_t *buf, uint8_t len, uint8_t *n_read, - sbp_msg_ssr_tile_definition_dep_t *msg); + sbp_msg_ssr_tile_definition_dep_a_t *msg); /** - * Send an instance of sbp_msg_ssr_tile_definition_dep_t with the given write + * Send an instance of sbp_msg_ssr_tile_definition_dep_a_t with the given write * function * * An equivalent of #sbp_message_send which operates specifically on - * sbp_msg_ssr_tile_definition_dep_t + * sbp_msg_ssr_tile_definition_dep_a_t * * The given message will be encoded to wire representation and passed in to the * given write function callback. The write callback will be called several @@ -205,12 +205,12 @@ SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_decode( * @param write Write function * @return SBP_OK on success, or other libsbp error code */ -SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_send( - sbp_state_t *s, u16 sender_id, const sbp_msg_ssr_tile_definition_dep_t *msg, - sbp_write_fn_t write); +SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_a_send( + sbp_state_t *s, u16 sender_id, + const sbp_msg_ssr_tile_definition_dep_a_t *msg, sbp_write_fn_t write); /** - * Compare two instances of sbp_msg_ssr_tile_definition_dep_t + * Compare two instances of sbp_msg_ssr_tile_definition_dep_a_t * * The two instances will be compared and a value returned consistent with the * return codes of comparison functions from the C standard library @@ -220,47 +220,47 @@ SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_send( * b A value greater than 0 will be returned if \p b is considered to be greater * than \p b * - * @param a sbp_msg_ssr_tile_definition_dep_t instance - * @param b sbp_msg_ssr_tile_definition_dep_t instance + * @param a sbp_msg_ssr_tile_definition_dep_a_t instance + * @param b sbp_msg_ssr_tile_definition_dep_a_t instance * @return 0, <0, >0 */ -SBP_EXPORT int sbp_msg_ssr_tile_definition_dep_cmp( - const sbp_msg_ssr_tile_definition_dep_t *a, - const sbp_msg_ssr_tile_definition_dep_t *b); +SBP_EXPORT int sbp_msg_ssr_tile_definition_dep_a_cmp( + const sbp_msg_ssr_tile_definition_dep_a_t *a, + const sbp_msg_ssr_tile_definition_dep_a_t *b); #ifdef __cplusplus } -static inline bool operator==(const sbp_msg_ssr_tile_definition_dep_t &lhs, - const sbp_msg_ssr_tile_definition_dep_t &rhs) { - return sbp_msg_ssr_tile_definition_dep_cmp(&lhs, &rhs) == 0; +static inline bool operator==(const sbp_msg_ssr_tile_definition_dep_a_t &lhs, + const sbp_msg_ssr_tile_definition_dep_a_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_a_cmp(&lhs, &rhs) == 0; } -static inline bool operator!=(const sbp_msg_ssr_tile_definition_dep_t &lhs, - const sbp_msg_ssr_tile_definition_dep_t &rhs) { - return sbp_msg_ssr_tile_definition_dep_cmp(&lhs, &rhs) != 0; +static inline bool operator!=(const sbp_msg_ssr_tile_definition_dep_a_t &lhs, + const sbp_msg_ssr_tile_definition_dep_a_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_a_cmp(&lhs, &rhs) != 0; } -static inline bool operator<(const sbp_msg_ssr_tile_definition_dep_t &lhs, - const sbp_msg_ssr_tile_definition_dep_t &rhs) { - return sbp_msg_ssr_tile_definition_dep_cmp(&lhs, &rhs) < 0; +static inline bool operator<(const sbp_msg_ssr_tile_definition_dep_a_t &lhs, + const sbp_msg_ssr_tile_definition_dep_a_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_a_cmp(&lhs, &rhs) < 0; } -static inline bool operator<=(const sbp_msg_ssr_tile_definition_dep_t &lhs, - const sbp_msg_ssr_tile_definition_dep_t &rhs) { - return sbp_msg_ssr_tile_definition_dep_cmp(&lhs, &rhs) <= 0; +static inline bool operator<=(const sbp_msg_ssr_tile_definition_dep_a_t &lhs, + const sbp_msg_ssr_tile_definition_dep_a_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_a_cmp(&lhs, &rhs) <= 0; } -static inline bool operator>(const sbp_msg_ssr_tile_definition_dep_t &lhs, - const sbp_msg_ssr_tile_definition_dep_t &rhs) { - return sbp_msg_ssr_tile_definition_dep_cmp(&lhs, &rhs) > 0; +static inline bool operator>(const sbp_msg_ssr_tile_definition_dep_a_t &lhs, + const sbp_msg_ssr_tile_definition_dep_a_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_a_cmp(&lhs, &rhs) > 0; } -static inline bool operator>=(const sbp_msg_ssr_tile_definition_dep_t &lhs, - const sbp_msg_ssr_tile_definition_dep_t &rhs) { - return sbp_msg_ssr_tile_definition_dep_cmp(&lhs, &rhs) >= 0; +static inline bool operator>=(const sbp_msg_ssr_tile_definition_dep_a_t &lhs, + const sbp_msg_ssr_tile_definition_dep_a_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_a_cmp(&lhs, &rhs) >= 0; } #endif // ifdef __cplusplus -#endif /* LIBSBP_V4_SSR_MSG_SSR_TILE_DEFINITION_DEP_H */ +#endif /* LIBSBP_V4_SSR_MSG_SSR_TILE_DEFINITION_DEP_A_H */ diff --git a/c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION_DEP_B.h b/c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION_DEP_B.h new file mode 100644 index 0000000000..a274b05f3c --- /dev/null +++ b/c/include/libsbp/v4/ssr/MSG_SSR_TILE_DEFINITION_DEP_B.h @@ -0,0 +1,270 @@ +/* + * Copyright (C) 2015-2021 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ + +/***************************************************************************** + * Automatically generated from yaml/swiftnav/sbp/ssr.yaml + * with generate.py. Please do not hand edit! + *****************************************************************************/ + +#ifndef LIBSBP_V4_SSR_MSG_SSR_TILE_DEFINITION_DEP_B_H +#define LIBSBP_V4_SSR_MSG_SSR_TILE_DEFINITION_DEP_B_H + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************************** + * + * SBP_MSG_SSR_TILE_DEFINITION_DEP_B + * + *****************************************************************************/ +/** Definition of a SSR atmospheric correction tile. + + * + * Provides the correction point coordinates for the atmospheric correction + values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION messages. + * + */ +typedef struct { + /** + * SSR Solution ID. + */ + u8 ssr_sol_id; + + /** + * Unique identifier of the tile set this tile belongs to. + */ + u16 tile_set_id; + + /** + * Unique identifier of this tile in the tile set. + * See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID. + */ + u16 tile_id; + + /** + * North-West corner correction point latitude. + * + * The relation between the latitude X in the range [-90, 90] and the coded + * number N is: + * + * N = floor((X / 90) * 2^14) + * + * See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude. [encoded + * degrees] + */ + s16 corner_nw_lat; + + /** + * North-West corner correction point longitude. + * + * The relation between the longitude X in the range [-180, 180] and the coded + * number N is: + * + * N = floor((X / 180) * 2^15) + * + * See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude. + * [encoded degrees] + */ + s16 corner_nw_lon; + + /** + * Spacing of the correction points in the latitude direction. + * + * See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude. [0.01 degrees] + */ + u16 spacing_lat; + + /** + * Spacing of the correction points in the longitude direction. + * + * See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude. [0.01 degrees] + */ + u16 spacing_lon; + + /** + * Number of steps in the latitude direction. + * + * See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude. + */ + u16 rows; + + /** + * Number of steps in the longitude direction. + * + * See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude. + */ + u16 cols; + + /** + * Specifies the availability of correction data at the correction points in + * the array. + * + * If a specific bit is enabled (set to 1), the correction is not available. + * Only the first rows * cols bits are used, the remainder are set to 0. If + * there are more then 64 correction points the remaining corrections are + * always available. + * + * Starting with the northwest corner of the array (top left on a north + * oriented map) the correction points are enumerated with row precedence - + * first row west to east, second row west to east, until last row west to + * east - ending with the southeast corner of the array. + * + * See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the + * definition of the bits is inverted. + */ + u64 bitmask; +} sbp_msg_ssr_tile_definition_dep_b_t; + +/** + * Get encoded size of an instance of sbp_msg_ssr_tile_definition_dep_b_t + * + * @param msg sbp_msg_ssr_tile_definition_dep_b_t instance + * @return Length of on-wire representation + */ +static inline size_t sbp_msg_ssr_tile_definition_dep_b_encoded_len( + const sbp_msg_ssr_tile_definition_dep_b_t *msg) { + (void)msg; + return SBP_MSG_SSR_TILE_DEFINITION_DEP_B_ENCODED_LEN; +} + +/** + * Encode an instance of sbp_msg_ssr_tile_definition_dep_b_t to wire + * representation + * + * This function encodes the given instance in to the user provided buffer. The + * buffer provided to this function must be large enough to store the encoded + * message otherwise it will return SBP_ENCODE_ERROR without writing anything to + * the buffer. + * + * Specify the length of the destination buffer in the \p len parameter. If + * non-null the number of bytes written to the buffer will be returned in \p + * n_written. + * + * @param buf Destination buffer + * @param len Length of \p buf + * @param n_written If not null, on success will be set to the number of bytes + * written to \p buf + * @param msg Instance of sbp_msg_ssr_tile_definition_dep_b_t to encode + * @return SBP_OK on success, or other libsbp error code + */ +SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_b_encode( + uint8_t *buf, uint8_t len, uint8_t *n_written, + const sbp_msg_ssr_tile_definition_dep_b_t *msg); + +/** + * Decode an instance of sbp_msg_ssr_tile_definition_dep_b_t from wire + * representation + * + * This function decodes the wire representation of a + * sbp_msg_ssr_tile_definition_dep_b_t message to the given instance. The caller + * must specify the length of the buffer in the \p len parameter. If non-null + * the number of bytes read from the buffer will be returned in \p n_read. + * + * @param buf Wire representation of the sbp_msg_ssr_tile_definition_dep_b_t + * instance + * @param len Length of \p buf + * @param n_read If not null, on success will be set to the number of bytes read + * from \p buf + * @param msg Destination + * @return SBP_OK on success, or other libsbp error code + */ +SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_b_decode( + const uint8_t *buf, uint8_t len, uint8_t *n_read, + sbp_msg_ssr_tile_definition_dep_b_t *msg); +/** + * Send an instance of sbp_msg_ssr_tile_definition_dep_b_t with the given write + * function + * + * An equivalent of #sbp_message_send which operates specifically on + * sbp_msg_ssr_tile_definition_dep_b_t + * + * The given message will be encoded to wire representation and passed in to the + * given write function callback. The write callback will be called several + * times for each invocation of this function. + * + * @param s SBP state + * @param sender_id SBP sender id + * @param msg Message to send + * @param write Write function + * @return SBP_OK on success, or other libsbp error code + */ +SBP_EXPORT s8 sbp_msg_ssr_tile_definition_dep_b_send( + sbp_state_t *s, u16 sender_id, + const sbp_msg_ssr_tile_definition_dep_b_t *msg, sbp_write_fn_t write); + +/** + * Compare two instances of sbp_msg_ssr_tile_definition_dep_b_t + * + * The two instances will be compared and a value returned consistent with the + * return codes of comparison functions from the C standard library + * + * 0 will be returned if \p a and \p b are considered equal + * A value less than 0 will be returned if \p a is considered to be less than \p + * b A value greater than 0 will be returned if \p b is considered to be greater + * than \p b + * + * @param a sbp_msg_ssr_tile_definition_dep_b_t instance + * @param b sbp_msg_ssr_tile_definition_dep_b_t instance + * @return 0, <0, >0 + */ +SBP_EXPORT int sbp_msg_ssr_tile_definition_dep_b_cmp( + const sbp_msg_ssr_tile_definition_dep_b_t *a, + const sbp_msg_ssr_tile_definition_dep_b_t *b); + +#ifdef __cplusplus +} + +static inline bool operator==(const sbp_msg_ssr_tile_definition_dep_b_t &lhs, + const sbp_msg_ssr_tile_definition_dep_b_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_b_cmp(&lhs, &rhs) == 0; +} + +static inline bool operator!=(const sbp_msg_ssr_tile_definition_dep_b_t &lhs, + const sbp_msg_ssr_tile_definition_dep_b_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_b_cmp(&lhs, &rhs) != 0; +} + +static inline bool operator<(const sbp_msg_ssr_tile_definition_dep_b_t &lhs, + const sbp_msg_ssr_tile_definition_dep_b_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_b_cmp(&lhs, &rhs) < 0; +} + +static inline bool operator<=(const sbp_msg_ssr_tile_definition_dep_b_t &lhs, + const sbp_msg_ssr_tile_definition_dep_b_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_b_cmp(&lhs, &rhs) <= 0; +} + +static inline bool operator>(const sbp_msg_ssr_tile_definition_dep_b_t &lhs, + const sbp_msg_ssr_tile_definition_dep_b_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_b_cmp(&lhs, &rhs) > 0; +} + +static inline bool operator>=(const sbp_msg_ssr_tile_definition_dep_b_t &lhs, + const sbp_msg_ssr_tile_definition_dep_b_t &rhs) { + return sbp_msg_ssr_tile_definition_dep_b_cmp(&lhs, &rhs) >= 0; +} + +#endif // ifdef __cplusplus + +#endif /* LIBSBP_V4_SSR_MSG_SSR_TILE_DEFINITION_DEP_B_H */ diff --git a/c/src/include/libsbp/internal/v4/ssr.h b/c/src/include/libsbp/internal/v4/ssr.h index 9447bc1a0c..8f6b7377b1 100644 --- a/c/src/include/libsbp/internal/v4/ssr.h +++ b/c/src/include/libsbp/internal/v4/ssr.h @@ -396,8 +396,8 @@ bool sbp_msg_ssr_gridded_correction_bounds_decode_internal( * @param msg SBP type instance * @return true on success, false otherwise */ -bool sbp_msg_ssr_tile_definition_dep_encode_internal( - sbp_encode_ctx_t *ctx, const sbp_msg_ssr_tile_definition_dep_t *msg); +bool sbp_msg_ssr_tile_definition_dep_a_encode_internal( + sbp_encode_ctx_t *ctx, const sbp_msg_ssr_tile_definition_dep_a_t *msg); /** * Internal function to decode an SBP type from a buffer @@ -406,8 +406,28 @@ bool sbp_msg_ssr_tile_definition_dep_encode_internal( * @param msg SBP type instance * @return true on success, false otherwise */ -bool sbp_msg_ssr_tile_definition_dep_decode_internal( - sbp_decode_ctx_t *ctx, sbp_msg_ssr_tile_definition_dep_t *msg); +bool sbp_msg_ssr_tile_definition_dep_a_decode_internal( + sbp_decode_ctx_t *ctx, sbp_msg_ssr_tile_definition_dep_a_t *msg); + +/** + * Internal function to encode an SBP type to a buffer + * + * @param ctx Encode context + * @param msg SBP type instance + * @return true on success, false otherwise + */ +bool sbp_msg_ssr_tile_definition_dep_b_encode_internal( + sbp_encode_ctx_t *ctx, const sbp_msg_ssr_tile_definition_dep_b_t *msg); + +/** + * Internal function to decode an SBP type from a buffer + * + * @param ctx Decode context + * @param msg SBP type instance + * @return true on success, false otherwise + */ +bool sbp_msg_ssr_tile_definition_dep_b_decode_internal( + sbp_decode_ctx_t *ctx, sbp_msg_ssr_tile_definition_dep_b_t *msg); /** * Internal function to encode an SBP type to a buffer @@ -449,6 +469,26 @@ bool sbp_satellite_apc_encode_internal(sbp_encode_ctx_t *ctx, bool sbp_satellite_apc_decode_internal(sbp_decode_ctx_t *ctx, sbp_satellite_apc_t *msg); +/** + * Internal function to encode an SBP type to a buffer + * + * @param ctx Encode context + * @param msg SBP type instance + * @return true on success, false otherwise + */ +bool sbp_msg_ssr_satellite_apc_dep_encode_internal( + sbp_encode_ctx_t *ctx, const sbp_msg_ssr_satellite_apc_dep_t *msg); + +/** + * Internal function to decode an SBP type from a buffer + * + * @param ctx Decode context + * @param msg SBP type instance + * @return true on success, false otherwise + */ +bool sbp_msg_ssr_satellite_apc_dep_decode_internal( + sbp_decode_ctx_t *ctx, sbp_msg_ssr_satellite_apc_dep_t *msg); + /** * Internal function to encode an SBP type to a buffer * diff --git a/c/src/v4/ssr.c b/c/src/v4/ssr.c index 839b21a87e..ef5981b878 100644 --- a/c/src/v4/ssr.c +++ b/c/src/v4/ssr.c @@ -2124,8 +2124,8 @@ int sbp_msg_ssr_gridded_correction_bounds_cmp( return ret; } -bool sbp_msg_ssr_tile_definition_dep_encode_internal( - sbp_encode_ctx_t *ctx, const sbp_msg_ssr_tile_definition_dep_t *msg) { +bool sbp_msg_ssr_tile_definition_dep_a_encode_internal( + sbp_encode_ctx_t *ctx, const sbp_msg_ssr_tile_definition_dep_a_t *msg) { if (!sbp_u16_encode(ctx, &msg->tile_set_id)) { return false; } @@ -2156,14 +2156,14 @@ bool sbp_msg_ssr_tile_definition_dep_encode_internal( return true; } -s8 sbp_msg_ssr_tile_definition_dep_encode( +s8 sbp_msg_ssr_tile_definition_dep_a_encode( uint8_t *buf, uint8_t len, uint8_t *n_written, - const sbp_msg_ssr_tile_definition_dep_t *msg) { + const sbp_msg_ssr_tile_definition_dep_a_t *msg) { sbp_encode_ctx_t ctx; ctx.buf = buf; ctx.buf_len = len; ctx.offset = 0; - if (!sbp_msg_ssr_tile_definition_dep_encode_internal(&ctx, msg)) { + if (!sbp_msg_ssr_tile_definition_dep_a_encode_internal(&ctx, msg)) { return SBP_ENCODE_ERROR; } if (n_written != NULL) { @@ -2172,8 +2172,8 @@ s8 sbp_msg_ssr_tile_definition_dep_encode( return SBP_OK; } -bool sbp_msg_ssr_tile_definition_dep_decode_internal( - sbp_decode_ctx_t *ctx, sbp_msg_ssr_tile_definition_dep_t *msg) { +bool sbp_msg_ssr_tile_definition_dep_a_decode_internal( + sbp_decode_ctx_t *ctx, sbp_msg_ssr_tile_definition_dep_a_t *msg) { if (!sbp_u16_decode(ctx, &msg->tile_set_id)) { return false; } @@ -2204,14 +2204,14 @@ bool sbp_msg_ssr_tile_definition_dep_decode_internal( return true; } -s8 sbp_msg_ssr_tile_definition_dep_decode( +s8 sbp_msg_ssr_tile_definition_dep_a_decode( const uint8_t *buf, uint8_t len, uint8_t *n_read, - sbp_msg_ssr_tile_definition_dep_t *msg) { + sbp_msg_ssr_tile_definition_dep_a_t *msg) { sbp_decode_ctx_t ctx; ctx.buf = buf; ctx.buf_len = len; ctx.offset = 0; - if (!sbp_msg_ssr_tile_definition_dep_decode_internal(&ctx, msg)) { + if (!sbp_msg_ssr_tile_definition_dep_a_decode_internal(&ctx, msg)) { return SBP_DECODE_ERROR; } if (n_read != NULL) { @@ -2220,23 +2220,23 @@ s8 sbp_msg_ssr_tile_definition_dep_decode( return SBP_OK; } -s8 sbp_msg_ssr_tile_definition_dep_send( - sbp_state_t *s, u16 sender_id, const sbp_msg_ssr_tile_definition_dep_t *msg, - sbp_write_fn_t write) { +s8 sbp_msg_ssr_tile_definition_dep_a_send( + sbp_state_t *s, u16 sender_id, + const sbp_msg_ssr_tile_definition_dep_a_t *msg, sbp_write_fn_t write) { uint8_t payload[SBP_MAX_PAYLOAD_LEN]; uint8_t payload_len; - s8 ret = sbp_msg_ssr_tile_definition_dep_encode(payload, sizeof(payload), - &payload_len, msg); + s8 ret = sbp_msg_ssr_tile_definition_dep_a_encode(payload, sizeof(payload), + &payload_len, msg); if (ret != SBP_OK) { return ret; } - return sbp_payload_send(s, SBP_MSG_SSR_TILE_DEFINITION_DEP, sender_id, + return sbp_payload_send(s, SBP_MSG_SSR_TILE_DEFINITION_DEP_A, sender_id, payload_len, payload, write); } -int sbp_msg_ssr_tile_definition_dep_cmp( - const sbp_msg_ssr_tile_definition_dep_t *a, - const sbp_msg_ssr_tile_definition_dep_t *b) { +int sbp_msg_ssr_tile_definition_dep_a_cmp( + const sbp_msg_ssr_tile_definition_dep_a_t *a, + const sbp_msg_ssr_tile_definition_dep_a_t *b) { int ret = 0; ret = sbp_u16_cmp(&a->tile_set_id, &b->tile_set_id); @@ -2286,9 +2286,191 @@ int sbp_msg_ssr_tile_definition_dep_cmp( return ret; } +bool sbp_msg_ssr_tile_definition_dep_b_encode_internal( + sbp_encode_ctx_t *ctx, const sbp_msg_ssr_tile_definition_dep_b_t *msg) { + if (!sbp_u8_encode(ctx, &msg->ssr_sol_id)) { + return false; + } + if (!sbp_u16_encode(ctx, &msg->tile_set_id)) { + return false; + } + if (!sbp_u16_encode(ctx, &msg->tile_id)) { + return false; + } + if (!sbp_s16_encode(ctx, &msg->corner_nw_lat)) { + return false; + } + if (!sbp_s16_encode(ctx, &msg->corner_nw_lon)) { + return false; + } + if (!sbp_u16_encode(ctx, &msg->spacing_lat)) { + return false; + } + if (!sbp_u16_encode(ctx, &msg->spacing_lon)) { + return false; + } + if (!sbp_u16_encode(ctx, &msg->rows)) { + return false; + } + if (!sbp_u16_encode(ctx, &msg->cols)) { + return false; + } + if (!sbp_u64_encode(ctx, &msg->bitmask)) { + return false; + } + return true; +} + +s8 sbp_msg_ssr_tile_definition_dep_b_encode( + uint8_t *buf, uint8_t len, uint8_t *n_written, + const sbp_msg_ssr_tile_definition_dep_b_t *msg) { + sbp_encode_ctx_t ctx; + ctx.buf = buf; + ctx.buf_len = len; + ctx.offset = 0; + if (!sbp_msg_ssr_tile_definition_dep_b_encode_internal(&ctx, msg)) { + return SBP_ENCODE_ERROR; + } + if (n_written != NULL) { + *n_written = (uint8_t)ctx.offset; + } + return SBP_OK; +} + +bool sbp_msg_ssr_tile_definition_dep_b_decode_internal( + sbp_decode_ctx_t *ctx, sbp_msg_ssr_tile_definition_dep_b_t *msg) { + if (!sbp_u8_decode(ctx, &msg->ssr_sol_id)) { + return false; + } + if (!sbp_u16_decode(ctx, &msg->tile_set_id)) { + return false; + } + if (!sbp_u16_decode(ctx, &msg->tile_id)) { + return false; + } + if (!sbp_s16_decode(ctx, &msg->corner_nw_lat)) { + return false; + } + if (!sbp_s16_decode(ctx, &msg->corner_nw_lon)) { + return false; + } + if (!sbp_u16_decode(ctx, &msg->spacing_lat)) { + return false; + } + if (!sbp_u16_decode(ctx, &msg->spacing_lon)) { + return false; + } + if (!sbp_u16_decode(ctx, &msg->rows)) { + return false; + } + if (!sbp_u16_decode(ctx, &msg->cols)) { + return false; + } + if (!sbp_u64_decode(ctx, &msg->bitmask)) { + return false; + } + return true; +} + +s8 sbp_msg_ssr_tile_definition_dep_b_decode( + const uint8_t *buf, uint8_t len, uint8_t *n_read, + sbp_msg_ssr_tile_definition_dep_b_t *msg) { + sbp_decode_ctx_t ctx; + ctx.buf = buf; + ctx.buf_len = len; + ctx.offset = 0; + if (!sbp_msg_ssr_tile_definition_dep_b_decode_internal(&ctx, msg)) { + return SBP_DECODE_ERROR; + } + if (n_read != NULL) { + *n_read = (uint8_t)ctx.offset; + } + return SBP_OK; +} + +s8 sbp_msg_ssr_tile_definition_dep_b_send( + sbp_state_t *s, u16 sender_id, + const sbp_msg_ssr_tile_definition_dep_b_t *msg, sbp_write_fn_t write) { + uint8_t payload[SBP_MAX_PAYLOAD_LEN]; + uint8_t payload_len; + s8 ret = sbp_msg_ssr_tile_definition_dep_b_encode(payload, sizeof(payload), + &payload_len, msg); + if (ret != SBP_OK) { + return ret; + } + return sbp_payload_send(s, SBP_MSG_SSR_TILE_DEFINITION_DEP_B, sender_id, + payload_len, payload, write); +} + +int sbp_msg_ssr_tile_definition_dep_b_cmp( + const sbp_msg_ssr_tile_definition_dep_b_t *a, + const sbp_msg_ssr_tile_definition_dep_b_t *b) { + int ret = 0; + + ret = sbp_u8_cmp(&a->ssr_sol_id, &b->ssr_sol_id); + if (ret != 0) { + return ret; + } + + ret = sbp_u16_cmp(&a->tile_set_id, &b->tile_set_id); + if (ret != 0) { + return ret; + } + + ret = sbp_u16_cmp(&a->tile_id, &b->tile_id); + if (ret != 0) { + return ret; + } + + ret = sbp_s16_cmp(&a->corner_nw_lat, &b->corner_nw_lat); + if (ret != 0) { + return ret; + } + + ret = sbp_s16_cmp(&a->corner_nw_lon, &b->corner_nw_lon); + if (ret != 0) { + return ret; + } + + ret = sbp_u16_cmp(&a->spacing_lat, &b->spacing_lat); + if (ret != 0) { + return ret; + } + + ret = sbp_u16_cmp(&a->spacing_lon, &b->spacing_lon); + if (ret != 0) { + return ret; + } + + ret = sbp_u16_cmp(&a->rows, &b->rows); + if (ret != 0) { + return ret; + } + + ret = sbp_u16_cmp(&a->cols, &b->cols); + if (ret != 0) { + return ret; + } + + ret = sbp_u64_cmp(&a->bitmask, &b->bitmask); + if (ret != 0) { + return ret; + } + return ret; +} + bool sbp_msg_ssr_tile_definition_encode_internal( sbp_encode_ctx_t *ctx, const sbp_msg_ssr_tile_definition_t *msg) { - if (!sbp_u8_encode(ctx, &msg->ssr_sol_id)) { + if (!sbp_gps_time_sec_encode_internal(ctx, &msg->time)) { + return false; + } + if (!sbp_u8_encode(ctx, &msg->update_interval)) { + return false; + } + if (!sbp_u8_encode(ctx, &msg->sol_id)) { + return false; + } + if (!sbp_u8_encode(ctx, &msg->iod_atmo)) { return false; } if (!sbp_u16_encode(ctx, &msg->tile_set_id)) { @@ -2339,7 +2521,16 @@ s8 sbp_msg_ssr_tile_definition_encode( bool sbp_msg_ssr_tile_definition_decode_internal( sbp_decode_ctx_t *ctx, sbp_msg_ssr_tile_definition_t *msg) { - if (!sbp_u8_decode(ctx, &msg->ssr_sol_id)) { + if (!sbp_gps_time_sec_decode_internal(ctx, &msg->time)) { + return false; + } + if (!sbp_u8_decode(ctx, &msg->update_interval)) { + return false; + } + if (!sbp_u8_decode(ctx, &msg->sol_id)) { + return false; + } + if (!sbp_u8_decode(ctx, &msg->iod_atmo)) { return false; } if (!sbp_u16_decode(ctx, &msg->tile_set_id)) { @@ -2406,7 +2597,22 @@ int sbp_msg_ssr_tile_definition_cmp(const sbp_msg_ssr_tile_definition_t *a, const sbp_msg_ssr_tile_definition_t *b) { int ret = 0; - ret = sbp_u8_cmp(&a->ssr_sol_id, &b->ssr_sol_id); + ret = sbp_gps_time_sec_cmp(&a->time, &b->time); + if (ret != 0) { + return ret; + } + + ret = sbp_u8_cmp(&a->update_interval, &b->update_interval); + if (ret != 0) { + return ret; + } + + ret = sbp_u8_cmp(&a->sol_id, &b->sol_id); + if (ret != 0) { + return ret; + } + + ret = sbp_u8_cmp(&a->iod_atmo, &b->iod_atmo); if (ret != 0) { return ret; } @@ -2571,8 +2777,103 @@ int sbp_satellite_apc_cmp(const sbp_satellite_apc_t *a, return ret; } +bool sbp_msg_ssr_satellite_apc_dep_encode_internal( + sbp_encode_ctx_t *ctx, const sbp_msg_ssr_satellite_apc_dep_t *msg) { + for (size_t i = 0; i < msg->n_apc; i++) { + if (!sbp_satellite_apc_encode_internal(ctx, &msg->apc[i])) { + return false; + } + } + return true; +} + +s8 sbp_msg_ssr_satellite_apc_dep_encode( + uint8_t *buf, uint8_t len, uint8_t *n_written, + const sbp_msg_ssr_satellite_apc_dep_t *msg) { + sbp_encode_ctx_t ctx; + ctx.buf = buf; + ctx.buf_len = len; + ctx.offset = 0; + if (!sbp_msg_ssr_satellite_apc_dep_encode_internal(&ctx, msg)) { + return SBP_ENCODE_ERROR; + } + if (n_written != NULL) { + *n_written = (uint8_t)ctx.offset; + } + return SBP_OK; +} + +bool sbp_msg_ssr_satellite_apc_dep_decode_internal( + sbp_decode_ctx_t *ctx, sbp_msg_ssr_satellite_apc_dep_t *msg) { + msg->n_apc = + (uint8_t)((ctx->buf_len - ctx->offset) / SBP_SATELLITE_APC_ENCODED_LEN); + for (uint8_t i = 0; i < msg->n_apc; i++) { + if (!sbp_satellite_apc_decode_internal(ctx, &msg->apc[i])) { + return false; + } + } + return true; +} + +s8 sbp_msg_ssr_satellite_apc_dep_decode(const uint8_t *buf, uint8_t len, + uint8_t *n_read, + sbp_msg_ssr_satellite_apc_dep_t *msg) { + sbp_decode_ctx_t ctx; + ctx.buf = buf; + ctx.buf_len = len; + ctx.offset = 0; + if (!sbp_msg_ssr_satellite_apc_dep_decode_internal(&ctx, msg)) { + return SBP_DECODE_ERROR; + } + if (n_read != NULL) { + *n_read = (uint8_t)ctx.offset; + } + return SBP_OK; +} + +s8 sbp_msg_ssr_satellite_apc_dep_send( + sbp_state_t *s, u16 sender_id, const sbp_msg_ssr_satellite_apc_dep_t *msg, + sbp_write_fn_t write) { + uint8_t payload[SBP_MAX_PAYLOAD_LEN]; + uint8_t payload_len; + s8 ret = sbp_msg_ssr_satellite_apc_dep_encode(payload, sizeof(payload), + &payload_len, msg); + if (ret != SBP_OK) { + return ret; + } + return sbp_payload_send(s, SBP_MSG_SSR_SATELLITE_APC_DEP, sender_id, + payload_len, payload, write); +} + +int sbp_msg_ssr_satellite_apc_dep_cmp( + const sbp_msg_ssr_satellite_apc_dep_t *a, + const sbp_msg_ssr_satellite_apc_dep_t *b) { + int ret = 0; + + ret = sbp_u8_cmp(&a->n_apc, &b->n_apc); + for (uint8_t i = 0; ret == 0 && i < a->n_apc; i++) { + ret = sbp_satellite_apc_cmp(&a->apc[i], &b->apc[i]); + } + if (ret != 0) { + return ret; + } + return ret; +} + bool sbp_msg_ssr_satellite_apc_encode_internal( sbp_encode_ctx_t *ctx, const sbp_msg_ssr_satellite_apc_t *msg) { + if (!sbp_gps_time_sec_encode_internal(ctx, &msg->time)) { + return false; + } + if (!sbp_u8_encode(ctx, &msg->update_interval)) { + return false; + } + if (!sbp_u8_encode(ctx, &msg->sol_id)) { + return false; + } + if (!sbp_u8_encode(ctx, &msg->iod_ssr)) { + return false; + } for (size_t i = 0; i < msg->n_apc; i++) { if (!sbp_satellite_apc_encode_internal(ctx, &msg->apc[i])) { return false; @@ -2599,6 +2900,18 @@ s8 sbp_msg_ssr_satellite_apc_encode(uint8_t *buf, uint8_t len, bool sbp_msg_ssr_satellite_apc_decode_internal( sbp_decode_ctx_t *ctx, sbp_msg_ssr_satellite_apc_t *msg) { + if (!sbp_gps_time_sec_decode_internal(ctx, &msg->time)) { + return false; + } + if (!sbp_u8_decode(ctx, &msg->update_interval)) { + return false; + } + if (!sbp_u8_decode(ctx, &msg->sol_id)) { + return false; + } + if (!sbp_u8_decode(ctx, &msg->iod_ssr)) { + return false; + } msg->n_apc = (uint8_t)((ctx->buf_len - ctx->offset) / SBP_SATELLITE_APC_ENCODED_LEN); for (uint8_t i = 0; i < msg->n_apc; i++) { @@ -2643,6 +2956,26 @@ int sbp_msg_ssr_satellite_apc_cmp(const sbp_msg_ssr_satellite_apc_t *a, const sbp_msg_ssr_satellite_apc_t *b) { int ret = 0; + ret = sbp_gps_time_sec_cmp(&a->time, &b->time); + if (ret != 0) { + return ret; + } + + ret = sbp_u8_cmp(&a->update_interval, &b->update_interval); + if (ret != 0) { + return ret; + } + + ret = sbp_u8_cmp(&a->sol_id, &b->sol_id); + if (ret != 0) { + return ret; + } + + ret = sbp_u8_cmp(&a->iod_ssr, &b->iod_ssr); + if (ret != 0) { + return ret; + } + ret = sbp_u8_cmp(&a->n_apc, &b->n_apc); for (uint8_t i = 0; ret == 0 && i < a->n_apc; i++) { ret = sbp_satellite_apc_cmp(&a->apc[i], &b->apc[i]); diff --git a/c/test/auto_check_sbp_ssr_MsgSsrSatelliteApc.c b/c/test/auto_check_sbp_ssr_MsgSsrSatelliteApc.c new file mode 100644 index 0000000000..d7ded51b9e --- /dev/null +++ b/c/test/auto_check_sbp_ssr_MsgSsrSatelliteApc.c @@ -0,0 +1,389 @@ +/* + * Copyright (C) 2015-2021 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ + +// This file was auto-generated from +// spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrSatelliteApc.yaml by generate.py. +// Do not modify by hand! + +#include +#include +#include +#include // for debugging +#include // for malloc + +static struct { + u32 n_callbacks_logged; + u16 sender_id; + sbp_msg_type_t msg_type; + sbp_msg_t msg; + void *context; +} last_msg; + +static u32 dummy_wr = 0; +static u32 dummy_rd = 0; +static u8 dummy_buff[1024]; +static void *last_io_context; + +static void *DUMMY_MEMORY_FOR_CALLBACKS = (void *)0xdeadbeef; +static void *DUMMY_MEMORY_FOR_IO = (void *)0xdead0000; + +static void dummy_reset() { + dummy_rd = dummy_wr = 0; + memset(dummy_buff, 0, sizeof(dummy_buff)); +} + +static s32 dummy_write(u8 *buff, u32 n, void *context) { + last_io_context = context; + u32 real_n = n; //(dummy_n > n) ? n : dummy_n; + memcpy(dummy_buff + dummy_wr, buff, real_n); + dummy_wr += real_n; + return (s32)real_n; +} + +static s32 dummy_read(u8 *buff, u32 n, void *context) { + last_io_context = context; + u32 real_n = n; //(dummy_n > n) ? n : dummy_n; + memcpy(buff, dummy_buff + dummy_rd, real_n); + dummy_rd += real_n; + return (s32)real_n; +} + +static void logging_reset() { memset(&last_msg, 0, sizeof(last_msg)); } + +static void msg_callback(u16 sender_id, sbp_msg_type_t msg_type, + const sbp_msg_t *msg, void *context) { + last_msg.n_callbacks_logged++; + last_msg.sender_id = sender_id; + last_msg.msg_type = msg_type; + last_msg.msg = *msg; + last_msg.context = context; +} + +START_TEST(test_auto_check_sbp_ssr_MsgSsrSatelliteApc) { + static sbp_msg_callbacks_node_t n; + + // State of the SBP message parser. + // Must be statically allocated. + sbp_state_t sbp_state; + + // + // Run tests: + // + // Test successful parsing of a message + { + // SBP parser state must be initialized before sbp_process is called. + // We re-initialize before every test so that callbacks for the same message + // types can be + // allocated multiple times across different tests. + sbp_state_init(&sbp_state); + + sbp_state_set_io_context(&sbp_state, &DUMMY_MEMORY_FOR_IO); + + logging_reset(); + + sbp_callback_register(&sbp_state, 0x605, &msg_callback, + &DUMMY_MEMORY_FOR_CALLBACKS, &n); + + u8 encoded_frame[] = { + 85, 5, 6, 0, 0, 41, 127, 58, 9, 0, 174, 8, 1, + 2, 3, 2, 0, 4, 61, 0, 1, 0, 255, 255, 217, 2, + 11, 10, 8, 5, 1, 252, 248, 246, 246, 246, 249, 252, 0, + 6, 12, 22, 30, 41, 41, 41, 41, 144, 161, + }; + + dummy_reset(); + + sbp_msg_t test_msg; + memset(&test_msg, 0, sizeof(test_msg)); + + test_msg.ssr_satellite_apc.apc[0].pco[0] = 1; + + test_msg.ssr_satellite_apc.apc[0].pco[1] = -1; + + test_msg.ssr_satellite_apc.apc[0].pco[2] = 729; + + test_msg.ssr_satellite_apc.apc[0].pcv[0] = 11; + + test_msg.ssr_satellite_apc.apc[0].pcv[1] = 10; + + test_msg.ssr_satellite_apc.apc[0].pcv[2] = 8; + + test_msg.ssr_satellite_apc.apc[0].pcv[3] = 5; + + test_msg.ssr_satellite_apc.apc[0].pcv[4] = 1; + + test_msg.ssr_satellite_apc.apc[0].pcv[5] = -4; + + test_msg.ssr_satellite_apc.apc[0].pcv[6] = -8; + + test_msg.ssr_satellite_apc.apc[0].pcv[7] = -10; + + test_msg.ssr_satellite_apc.apc[0].pcv[8] = -10; + + test_msg.ssr_satellite_apc.apc[0].pcv[9] = -10; + + test_msg.ssr_satellite_apc.apc[0].pcv[10] = -7; + + test_msg.ssr_satellite_apc.apc[0].pcv[11] = -4; + + test_msg.ssr_satellite_apc.apc[0].pcv[12] = 0; + + test_msg.ssr_satellite_apc.apc[0].pcv[13] = 6; + + test_msg.ssr_satellite_apc.apc[0].pcv[14] = 12; + + test_msg.ssr_satellite_apc.apc[0].pcv[15] = 22; + + test_msg.ssr_satellite_apc.apc[0].pcv[16] = 30; + + test_msg.ssr_satellite_apc.apc[0].pcv[17] = 41; + + test_msg.ssr_satellite_apc.apc[0].pcv[18] = 41; + + test_msg.ssr_satellite_apc.apc[0].pcv[19] = 41; + + test_msg.ssr_satellite_apc.apc[0].pcv[20] = 41; + + test_msg.ssr_satellite_apc.apc[0].sat_info = 4; + + test_msg.ssr_satellite_apc.apc[0].sid.code = 0; + + test_msg.ssr_satellite_apc.apc[0].sid.sat = 2; + + test_msg.ssr_satellite_apc.apc[0].svn = 61; + + test_msg.ssr_satellite_apc.iod_ssr = 3; + + test_msg.ssr_satellite_apc.n_apc = 1; + + test_msg.ssr_satellite_apc.sol_id = 2; + + test_msg.ssr_satellite_apc.time.tow = 604799; + + test_msg.ssr_satellite_apc.time.wn = 2222; + + test_msg.ssr_satellite_apc.update_interval = 1; + + sbp_message_send(&sbp_state, SbpMsgSsrSatelliteApc, 0, &test_msg, + &dummy_write); + + ck_assert_msg(dummy_wr == sizeof(encoded_frame), + "not enough data was written to dummy_buff (expected: %zu, " + "actual: %zu)", + sizeof(encoded_frame), dummy_wr); + ck_assert_msg(memcmp(dummy_buff, encoded_frame, sizeof(encoded_frame)) == 0, + "frame was not encoded properly"); + + while (dummy_rd < dummy_wr) { + ck_assert_msg(sbp_process(&sbp_state, &dummy_read) >= SBP_OK, + "sbp_process threw an error!"); + } + + ck_assert_msg(last_msg.n_callbacks_logged == 1, + "msg_callback: one callback should have been logged"); + ck_assert_msg(last_msg.sender_id == 0, + "msg_callback: sender_id decoded incorrectly"); + + ck_assert_msg( + sbp_message_cmp(SbpMsgSsrSatelliteApc, &last_msg.msg, &test_msg) == 0, + "Sent and received messages did not compare equal"); + + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pco[0] == 1, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pco[0], " + "expected 1, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pco[0]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pco[1] == -1, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pco[1], " + "expected -1, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pco[1]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pco[2] == 729, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pco[2], " + "expected 729, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pco[2]); + + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[0] == 11, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[0], " + "expected 11, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[0]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[1] == 10, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[1], " + "expected 10, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[1]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[2] == 8, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[2], " + "expected 8, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[2]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[3] == 5, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[3], " + "expected 5, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[3]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[4] == 1, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[4], " + "expected 1, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[4]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[5] == -4, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[5], " + "expected -4, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[5]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[6] == -8, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[6], " + "expected -8, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[6]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[7] == -10, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[7], " + "expected -10, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[7]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[8] == -10, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[8], " + "expected -10, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[8]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[9] == -10, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[9], " + "expected -10, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[9]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[10] == -7, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[10], " + "expected -7, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[10]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[11] == -4, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[11], " + "expected -4, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[11]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[12] == 0, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[12], " + "expected 0, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[12]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[13] == 6, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[13], " + "expected 6, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[13]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[14] == 12, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[14], " + "expected 12, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[14]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[15] == 22, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[15], " + "expected 22, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[15]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[16] == 30, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[16], " + "expected 30, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[16]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[17] == 41, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[17], " + "expected 41, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[17]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[18] == 41, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[18], " + "expected 41, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[18]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[19] == 41, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[19], " + "expected 41, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[19]); + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].pcv[20] == 41, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].pcv[20], " + "expected 41, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].pcv[20]); + + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].sat_info == 4, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].sat_info, " + "expected 4, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].sat_info); + + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].sid.code == 0, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].sid.code, " + "expected 0, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].sid.code); + + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].sid.sat == 2, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].sid.sat, " + "expected 2, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].sid.sat); + + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.apc[0].svn == 61, + "incorrect value for last_msg.msg.ssr_satellite_apc.apc[0].svn, " + "expected 61, is %d", + last_msg.msg.ssr_satellite_apc.apc[0].svn); + + ck_assert_msg(last_msg.msg.ssr_satellite_apc.iod_ssr == 3, + "incorrect value for last_msg.msg.ssr_satellite_apc.iod_ssr, " + "expected 3, is %d", + last_msg.msg.ssr_satellite_apc.iod_ssr); + + ck_assert_msg(last_msg.msg.ssr_satellite_apc.n_apc == 1, + "incorrect value for last_msg.msg.ssr_satellite_apc.n_apc, " + "expected 1, is %d", + last_msg.msg.ssr_satellite_apc.n_apc); + + ck_assert_msg(last_msg.msg.ssr_satellite_apc.sol_id == 2, + "incorrect value for last_msg.msg.ssr_satellite_apc.sol_id, " + "expected 2, is %d", + last_msg.msg.ssr_satellite_apc.sol_id); + + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.time.tow == 604799, + "incorrect value for last_msg.msg.ssr_satellite_apc.time.tow, expected " + "604799, is %d", + last_msg.msg.ssr_satellite_apc.time.tow); + + ck_assert_msg(last_msg.msg.ssr_satellite_apc.time.wn == 2222, + "incorrect value for last_msg.msg.ssr_satellite_apc.time.wn, " + "expected 2222, is %d", + last_msg.msg.ssr_satellite_apc.time.wn); + + ck_assert_msg( + last_msg.msg.ssr_satellite_apc.update_interval == 1, + "incorrect value for last_msg.msg.ssr_satellite_apc.update_interval, " + "expected 1, is %d", + last_msg.msg.ssr_satellite_apc.update_interval); + } +} +END_TEST + +Suite *auto_check_sbp_ssr_MsgSsrSatelliteApc_suite(void) { + Suite *s = suite_create( + "SBP generated test suite: auto_check_sbp_ssr_MsgSsrSatelliteApc"); + TCase *tc_acq = + tcase_create("Automated_Suite_auto_check_sbp_ssr_MsgSsrSatelliteApc"); + tcase_add_test(tc_acq, test_auto_check_sbp_ssr_MsgSsrSatelliteApc); + suite_add_tcase(s, tc_acq); + return s; +} \ No newline at end of file diff --git a/c/test/auto_check_sbp_ssr_MsgSsrTileDefinition.c b/c/test/auto_check_sbp_ssr_MsgSsrTileDefinition.c index d705b2d803..7095fea517 100644 --- a/c/test/auto_check_sbp_ssr_MsgSsrTileDefinition.c +++ b/c/test/auto_check_sbp_ssr_MsgSsrTileDefinition.c @@ -90,12 +90,13 @@ START_TEST(test_auto_check_sbp_ssr_MsgSsrTileDefinition) { logging_reset(); - sbp_callback_register(&sbp_state, 1527, &msg_callback, + sbp_callback_register(&sbp_state, 0x5F8, &msg_callback, &DUMMY_MEMORY_FOR_CALLBACKS, &n); u8 encoded_frame[] = { - 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, - 0, 32, 0, 64, 0, 128, 210, 2, 150, 73, 0, 0, 0, 0, 214, 71, + 85, 248, 5, 0, 0, 33, 127, 58, 9, 0, 174, 8, 1, 2, + 3, 4, 0, 5, 0, 186, 28, 59, 167, 100, 0, 100, 0, 6, + 0, 6, 0, 210, 2, 150, 73, 0, 0, 0, 0, 204, 94, }; dummy_reset(); @@ -105,25 +106,33 @@ START_TEST(test_auto_check_sbp_ssr_MsgSsrTileDefinition) { test_msg.ssr_tile_definition.bitmask = 1234567890; - test_msg.ssr_tile_definition.cols = 32768; + test_msg.ssr_tile_definition.cols = 6; - test_msg.ssr_tile_definition.corner_nw_lat = 1024; + test_msg.ssr_tile_definition.corner_nw_lat = 7354; - test_msg.ssr_tile_definition.corner_nw_lon = 2048; + test_msg.ssr_tile_definition.corner_nw_lon = -22725; - test_msg.ssr_tile_definition.rows = 16384; + test_msg.ssr_tile_definition.iod_atmo = 3; - test_msg.ssr_tile_definition.spacing_lat = 4096; + test_msg.ssr_tile_definition.rows = 6; - test_msg.ssr_tile_definition.spacing_lon = 8192; + test_msg.ssr_tile_definition.sol_id = 2; - test_msg.ssr_tile_definition.ssr_sol_id = 31; + test_msg.ssr_tile_definition.spacing_lat = 100; - test_msg.ssr_tile_definition.tile_id = 512; + test_msg.ssr_tile_definition.spacing_lon = 100; - test_msg.ssr_tile_definition.tile_set_id = 256; + test_msg.ssr_tile_definition.tile_id = 5; - sbp_message_send(&sbp_state, SbpMsgSsrTileDefinition, 66, &test_msg, + test_msg.ssr_tile_definition.tile_set_id = 4; + + test_msg.ssr_tile_definition.time.tow = 604799; + + test_msg.ssr_tile_definition.time.wn = 2222; + + test_msg.ssr_tile_definition.update_interval = 1; + + sbp_message_send(&sbp_state, SbpMsgSsrTileDefinition, 0, &test_msg, &dummy_write); ck_assert_msg(dummy_wr == sizeof(encoded_frame), @@ -140,7 +149,7 @@ START_TEST(test_auto_check_sbp_ssr_MsgSsrTileDefinition) { ck_assert_msg(last_msg.n_callbacks_logged == 1, "msg_callback: one callback should have been logged"); - ck_assert_msg(last_msg.sender_id == 66, + ck_assert_msg(last_msg.sender_id == 0, "msg_callback: sender_id decoded incorrectly"); ck_assert_msg( @@ -153,57 +162,79 @@ START_TEST(test_auto_check_sbp_ssr_MsgSsrTileDefinition) { "expected 1234567890, is %d", last_msg.msg.ssr_tile_definition.bitmask); - ck_assert_msg(last_msg.msg.ssr_tile_definition.cols == 32768, + ck_assert_msg(last_msg.msg.ssr_tile_definition.cols == 6, "incorrect value for last_msg.msg.ssr_tile_definition.cols, " - "expected 32768, is %d", + "expected 6, is %d", last_msg.msg.ssr_tile_definition.cols); ck_assert_msg( - last_msg.msg.ssr_tile_definition.corner_nw_lat == 1024, + last_msg.msg.ssr_tile_definition.corner_nw_lat == 7354, "incorrect value for last_msg.msg.ssr_tile_definition.corner_nw_lat, " - "expected 1024, is %d", + "expected 7354, is %d", last_msg.msg.ssr_tile_definition.corner_nw_lat); ck_assert_msg( - last_msg.msg.ssr_tile_definition.corner_nw_lon == 2048, + last_msg.msg.ssr_tile_definition.corner_nw_lon == -22725, "incorrect value for last_msg.msg.ssr_tile_definition.corner_nw_lon, " - "expected 2048, is %d", + "expected -22725, is %d", last_msg.msg.ssr_tile_definition.corner_nw_lon); - ck_assert_msg(last_msg.msg.ssr_tile_definition.rows == 16384, + ck_assert_msg( + last_msg.msg.ssr_tile_definition.iod_atmo == 3, + "incorrect value for last_msg.msg.ssr_tile_definition.iod_atmo, " + "expected 3, is %d", + last_msg.msg.ssr_tile_definition.iod_atmo); + + ck_assert_msg(last_msg.msg.ssr_tile_definition.rows == 6, "incorrect value for last_msg.msg.ssr_tile_definition.rows, " - "expected 16384, is %d", + "expected 6, is %d", last_msg.msg.ssr_tile_definition.rows); + ck_assert_msg(last_msg.msg.ssr_tile_definition.sol_id == 2, + "incorrect value for " + "last_msg.msg.ssr_tile_definition.sol_id, expected 2, is %d", + last_msg.msg.ssr_tile_definition.sol_id); + ck_assert_msg( - last_msg.msg.ssr_tile_definition.spacing_lat == 4096, + last_msg.msg.ssr_tile_definition.spacing_lat == 100, "incorrect value for last_msg.msg.ssr_tile_definition.spacing_lat, " - "expected 4096, is %d", + "expected 100, is %d", last_msg.msg.ssr_tile_definition.spacing_lat); ck_assert_msg( - last_msg.msg.ssr_tile_definition.spacing_lon == 8192, + last_msg.msg.ssr_tile_definition.spacing_lon == 100, "incorrect value for last_msg.msg.ssr_tile_definition.spacing_lon, " - "expected 8192, is %d", + "expected 100, is %d", last_msg.msg.ssr_tile_definition.spacing_lon); + ck_assert_msg(last_msg.msg.ssr_tile_definition.tile_id == 5, + "incorrect value for " + "last_msg.msg.ssr_tile_definition.tile_id, expected 5, is %d", + last_msg.msg.ssr_tile_definition.tile_id); + ck_assert_msg( - last_msg.msg.ssr_tile_definition.ssr_sol_id == 31, - "incorrect value for last_msg.msg.ssr_tile_definition.ssr_sol_id, " - "expected 31, is %d", - last_msg.msg.ssr_tile_definition.ssr_sol_id); + last_msg.msg.ssr_tile_definition.tile_set_id == 4, + "incorrect value for last_msg.msg.ssr_tile_definition.tile_set_id, " + "expected 4, is %d", + last_msg.msg.ssr_tile_definition.tile_set_id); ck_assert_msg( - last_msg.msg.ssr_tile_definition.tile_id == 512, - "incorrect value for last_msg.msg.ssr_tile_definition.tile_id, " - "expected 512, is %d", - last_msg.msg.ssr_tile_definition.tile_id); + last_msg.msg.ssr_tile_definition.time.tow == 604799, + "incorrect value for last_msg.msg.ssr_tile_definition.time.tow, " + "expected 604799, is %d", + last_msg.msg.ssr_tile_definition.time.tow); ck_assert_msg( - last_msg.msg.ssr_tile_definition.tile_set_id == 256, - "incorrect value for last_msg.msg.ssr_tile_definition.tile_set_id, " - "expected 256, is %d", - last_msg.msg.ssr_tile_definition.tile_set_id); + last_msg.msg.ssr_tile_definition.time.wn == 2222, + "incorrect value for last_msg.msg.ssr_tile_definition.time.wn, " + "expected 2222, is %d", + last_msg.msg.ssr_tile_definition.time.wn); + + ck_assert_msg( + last_msg.msg.ssr_tile_definition.update_interval == 1, + "incorrect value for last_msg.msg.ssr_tile_definition.update_interval, " + "expected 1, is %d", + last_msg.msg.ssr_tile_definition.update_interval); } } END_TEST diff --git a/c/test/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.c b/c/test/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.c new file mode 100644 index 0000000000..40127c9db8 --- /dev/null +++ b/c/test/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.c @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2015-2021 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ + +// This file was auto-generated from +// spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinitionDepB.yaml by +// generate.py. Do not modify by hand! + +#include +#include +#include +#include // for debugging +#include // for malloc + +static struct { + u32 n_callbacks_logged; + u16 sender_id; + sbp_msg_type_t msg_type; + sbp_msg_t msg; + void *context; +} last_msg; + +static u32 dummy_wr = 0; +static u32 dummy_rd = 0; +static u8 dummy_buff[1024]; +static void *last_io_context; + +static void *DUMMY_MEMORY_FOR_CALLBACKS = (void *)0xdeadbeef; +static void *DUMMY_MEMORY_FOR_IO = (void *)0xdead0000; + +static void dummy_reset() { + dummy_rd = dummy_wr = 0; + memset(dummy_buff, 0, sizeof(dummy_buff)); +} + +static s32 dummy_write(u8 *buff, u32 n, void *context) { + last_io_context = context; + u32 real_n = n; //(dummy_n > n) ? n : dummy_n; + memcpy(dummy_buff + dummy_wr, buff, real_n); + dummy_wr += real_n; + return (s32)real_n; +} + +static s32 dummy_read(u8 *buff, u32 n, void *context) { + last_io_context = context; + u32 real_n = n; //(dummy_n > n) ? n : dummy_n; + memcpy(buff, dummy_buff + dummy_rd, real_n); + dummy_rd += real_n; + return (s32)real_n; +} + +static void logging_reset() { memset(&last_msg, 0, sizeof(last_msg)); } + +static void msg_callback(u16 sender_id, sbp_msg_type_t msg_type, + const sbp_msg_t *msg, void *context) { + last_msg.n_callbacks_logged++; + last_msg.sender_id = sender_id; + last_msg.msg_type = msg_type; + last_msg.msg = *msg; + last_msg.context = context; +} + +START_TEST(test_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB) { + static sbp_msg_callbacks_node_t n; + + // State of the SBP message parser. + // Must be statically allocated. + sbp_state_t sbp_state; + + // + // Run tests: + // + // Test successful parsing of a message + { + // SBP parser state must be initialized before sbp_process is called. + // We re-initialize before every test so that callbacks for the same message + // types can be + // allocated multiple times across different tests. + sbp_state_init(&sbp_state); + + sbp_state_set_io_context(&sbp_state, &DUMMY_MEMORY_FOR_IO); + + logging_reset(); + + sbp_callback_register(&sbp_state, 1527, &msg_callback, + &DUMMY_MEMORY_FOR_CALLBACKS, &n); + + u8 encoded_frame[] = { + 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, + 0, 32, 0, 64, 0, 128, 210, 2, 150, 73, 0, 0, 0, 0, 214, 71, + }; + + dummy_reset(); + + sbp_msg_t test_msg; + memset(&test_msg, 0, sizeof(test_msg)); + + test_msg.ssr_tile_definition_dep_b.bitmask = 1234567890; + + test_msg.ssr_tile_definition_dep_b.cols = 32768; + + test_msg.ssr_tile_definition_dep_b.corner_nw_lat = 1024; + + test_msg.ssr_tile_definition_dep_b.corner_nw_lon = 2048; + + test_msg.ssr_tile_definition_dep_b.rows = 16384; + + test_msg.ssr_tile_definition_dep_b.spacing_lat = 4096; + + test_msg.ssr_tile_definition_dep_b.spacing_lon = 8192; + + test_msg.ssr_tile_definition_dep_b.ssr_sol_id = 31; + + test_msg.ssr_tile_definition_dep_b.tile_id = 512; + + test_msg.ssr_tile_definition_dep_b.tile_set_id = 256; + + sbp_message_send(&sbp_state, SbpMsgSsrTileDefinitionDepB, 66, &test_msg, + &dummy_write); + + ck_assert_msg(dummy_wr == sizeof(encoded_frame), + "not enough data was written to dummy_buff (expected: %zu, " + "actual: %zu)", + sizeof(encoded_frame), dummy_wr); + ck_assert_msg(memcmp(dummy_buff, encoded_frame, sizeof(encoded_frame)) == 0, + "frame was not encoded properly"); + + while (dummy_rd < dummy_wr) { + ck_assert_msg(sbp_process(&sbp_state, &dummy_read) >= SBP_OK, + "sbp_process threw an error!"); + } + + ck_assert_msg(last_msg.n_callbacks_logged == 1, + "msg_callback: one callback should have been logged"); + ck_assert_msg(last_msg.sender_id == 66, + "msg_callback: sender_id decoded incorrectly"); + + ck_assert_msg(sbp_message_cmp(SbpMsgSsrTileDefinitionDepB, &last_msg.msg, + &test_msg) == 0, + "Sent and received messages did not compare equal"); + + ck_assert_msg( + last_msg.msg.ssr_tile_definition_dep_b.bitmask == 1234567890, + "incorrect value for last_msg.msg.ssr_tile_definition_dep_b.bitmask, " + "expected 1234567890, is %d", + last_msg.msg.ssr_tile_definition_dep_b.bitmask); + + ck_assert_msg( + last_msg.msg.ssr_tile_definition_dep_b.cols == 32768, + "incorrect value for last_msg.msg.ssr_tile_definition_dep_b.cols, " + "expected 32768, is %d", + last_msg.msg.ssr_tile_definition_dep_b.cols); + + ck_assert_msg(last_msg.msg.ssr_tile_definition_dep_b.corner_nw_lat == 1024, + "incorrect value for " + "last_msg.msg.ssr_tile_definition_dep_b.corner_nw_lat, " + "expected 1024, is %d", + last_msg.msg.ssr_tile_definition_dep_b.corner_nw_lat); + + ck_assert_msg(last_msg.msg.ssr_tile_definition_dep_b.corner_nw_lon == 2048, + "incorrect value for " + "last_msg.msg.ssr_tile_definition_dep_b.corner_nw_lon, " + "expected 2048, is %d", + last_msg.msg.ssr_tile_definition_dep_b.corner_nw_lon); + + ck_assert_msg( + last_msg.msg.ssr_tile_definition_dep_b.rows == 16384, + "incorrect value for last_msg.msg.ssr_tile_definition_dep_b.rows, " + "expected 16384, is %d", + last_msg.msg.ssr_tile_definition_dep_b.rows); + + ck_assert_msg(last_msg.msg.ssr_tile_definition_dep_b.spacing_lat == 4096, + "incorrect value for " + "last_msg.msg.ssr_tile_definition_dep_b.spacing_lat, " + "expected 4096, is %d", + last_msg.msg.ssr_tile_definition_dep_b.spacing_lat); + + ck_assert_msg(last_msg.msg.ssr_tile_definition_dep_b.spacing_lon == 8192, + "incorrect value for " + "last_msg.msg.ssr_tile_definition_dep_b.spacing_lon, " + "expected 8192, is %d", + last_msg.msg.ssr_tile_definition_dep_b.spacing_lon); + + ck_assert_msg( + last_msg.msg.ssr_tile_definition_dep_b.ssr_sol_id == 31, + "incorrect value for " + "last_msg.msg.ssr_tile_definition_dep_b.ssr_sol_id, expected 31, is %d", + last_msg.msg.ssr_tile_definition_dep_b.ssr_sol_id); + + ck_assert_msg( + last_msg.msg.ssr_tile_definition_dep_b.tile_id == 512, + "incorrect value for last_msg.msg.ssr_tile_definition_dep_b.tile_id, " + "expected 512, is %d", + last_msg.msg.ssr_tile_definition_dep_b.tile_id); + + ck_assert_msg(last_msg.msg.ssr_tile_definition_dep_b.tile_set_id == 256, + "incorrect value for " + "last_msg.msg.ssr_tile_definition_dep_b.tile_set_id, " + "expected 256, is %d", + last_msg.msg.ssr_tile_definition_dep_b.tile_set_id); + } +} +END_TEST + +Suite *auto_check_sbp_ssr_MsgSsrTileDefinitionDepB_suite(void) { + Suite *s = suite_create( + "SBP generated test suite: auto_check_sbp_ssr_MsgSsrTileDefinitionDepB"); + TCase *tc_acq = tcase_create( + "Automated_Suite_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB"); + tcase_add_test(tc_acq, test_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB); + suite_add_tcase(s, tc_acq); + return s; +} \ No newline at end of file diff --git a/c/test/check_main.c b/c/test/check_main.c index 153eb34dbb..51194fdc19 100644 --- a/c/test/check_main.c +++ b/c/test/check_main.c @@ -124,8 +124,10 @@ int main(void) { srunner_add_suite(sr, auto_check_sbp_ssr_MsgSsrOrbitClockBounds_suite()); srunner_add_suite( sr, auto_check_sbp_ssr_MsgSsrOrbitClockBoundsDegradation_suite()); + srunner_add_suite(sr, auto_check_sbp_ssr_MsgSsrSatelliteApc_suite()); srunner_add_suite(sr, auto_check_sbp_ssr_MsgSsrStecCorrection_suite()); srunner_add_suite(sr, auto_check_sbp_ssr_MsgSsrTileDefinition_suite()); + srunner_add_suite(sr, auto_check_sbp_ssr_MsgSsrTileDefinitionDepB_suite()); srunner_add_suite(sr, auto_check_sbp_system_MsgDgnssStatus_suite()); srunner_add_suite(sr, auto_check_sbp_system_MsgGroupMeta_suite()); srunner_add_suite(sr, auto_check_sbp_system_MsgHeartbeat_suite()); diff --git a/c/test/check_main_legacy.c b/c/test/check_main_legacy.c index 709dfe3c7f..63f3bf272f 100644 --- a/c/test/check_main_legacy.c +++ b/c/test/check_main_legacy.c @@ -166,8 +166,11 @@ int main(void) { legacy_auto_check_sbp_ssr_MsgSsrOrbitClockBounds_suite()); srunner_add_suite( sr, legacy_auto_check_sbp_ssr_MsgSsrOrbitClockBoundsDegradation_suite()); + srunner_add_suite(sr, legacy_auto_check_sbp_ssr_MsgSsrSatelliteApc_suite()); srunner_add_suite(sr, legacy_auto_check_sbp_ssr_MsgSsrStecCorrection_suite()); srunner_add_suite(sr, legacy_auto_check_sbp_ssr_MsgSsrTileDefinition_suite()); + srunner_add_suite(sr, + legacy_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB_suite()); srunner_add_suite(sr, legacy_auto_check_sbp_system_MsgDgnssStatus_suite()); srunner_add_suite(sr, legacy_auto_check_sbp_system_MsgGroupMeta_suite()); srunner_add_suite(sr, legacy_auto_check_sbp_system_MsgHeartbeat_suite()); diff --git a/c/test/check_suites.h b/c/test/check_suites.h index 9d00315d00..eec1bae18c 100644 --- a/c/test/check_suites.h +++ b/c/test/check_suites.h @@ -107,8 +107,10 @@ Suite* auto_check_sbp_ssr_MsgSsrCodePhaseBiasesBounds_suite(void); Suite* auto_check_sbp_ssr_MsgSsrGriddedCorrectionBounds_suite(void); Suite* auto_check_sbp_ssr_MsgSsrOrbitClockBounds_suite(void); Suite* auto_check_sbp_ssr_MsgSsrOrbitClockBoundsDegradation_suite(void); +Suite* auto_check_sbp_ssr_MsgSsrSatelliteApc_suite(void); Suite* auto_check_sbp_ssr_MsgSsrStecCorrection_suite(void); Suite* auto_check_sbp_ssr_MsgSsrTileDefinition_suite(void); +Suite* auto_check_sbp_ssr_MsgSsrTileDefinitionDepB_suite(void); Suite* auto_check_sbp_system_MsgDgnssStatus_suite(void); Suite* auto_check_sbp_system_MsgGroupMeta_suite(void); Suite* auto_check_sbp_system_MsgHeartbeat_suite(void); diff --git a/c/test/check_suites_legacy.h b/c/test/check_suites_legacy.h index a918791e16..404e5e7488 100644 --- a/c/test/check_suites_legacy.h +++ b/c/test/check_suites_legacy.h @@ -108,8 +108,10 @@ Suite* legacy_auto_check_sbp_ssr_MsgSsrCodePhaseBiasesBounds_suite(void); Suite* legacy_auto_check_sbp_ssr_MsgSsrGriddedCorrectionBounds_suite(void); Suite* legacy_auto_check_sbp_ssr_MsgSsrOrbitClockBounds_suite(void); Suite* legacy_auto_check_sbp_ssr_MsgSsrOrbitClockBoundsDegradation_suite(void); +Suite* legacy_auto_check_sbp_ssr_MsgSsrSatelliteApc_suite(void); Suite* legacy_auto_check_sbp_ssr_MsgSsrStecCorrection_suite(void); Suite* legacy_auto_check_sbp_ssr_MsgSsrTileDefinition_suite(void); +Suite* legacy_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB_suite(void); Suite* legacy_auto_check_sbp_system_MsgDgnssStatus_suite(void); Suite* legacy_auto_check_sbp_system_MsgGroupMeta_suite(void); Suite* legacy_auto_check_sbp_system_MsgHeartbeat_suite(void); diff --git a/c/test/cpp/auto_check_sbp_ssr_MsgSsrSatelliteApc.cc b/c/test/cpp/auto_check_sbp_ssr_MsgSsrSatelliteApc.cc new file mode 100644 index 0000000000..6090676ff5 --- /dev/null +++ b/c/test/cpp/auto_check_sbp_ssr_MsgSsrSatelliteApc.cc @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2015-2021 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ + +// This file was auto-generated from +// spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrSatelliteApc.yaml by generate.py. +// Do not modify by hand! + +#include +#include +#include +#include +#include +class Test_auto_check_sbp_ssr_MsgSsrSatelliteApc0 + : public ::testing::Test, + public sbp::State, + public sbp::IReader, + public sbp::IWriter, + sbp::MessageHandler { + public: + Test_auto_check_sbp_ssr_MsgSsrSatelliteApc0() + : ::testing::Test(), + sbp::State(), + sbp::IReader(), + sbp::IWriter(), + sbp::MessageHandler(this), + last_msg_(), + last_msg_len_(), + last_sender_id_(), + n_callbacks_logged_(), + dummy_wr_(), + dummy_rd_(), + dummy_buff_() { + set_reader(this); + set_writer(this); + } + + s32 read(uint8_t *buf, const uint32_t n) override { + uint32_t real_n = n; + memcpy(buf, dummy_buff_ + dummy_rd_, real_n); + dummy_rd_ += real_n; + return (s32)real_n; + } + + s32 write(const uint8_t *buf, uint32_t n) override { + uint32_t real_n = n; + memcpy(dummy_buff_ + dummy_wr_, buf, real_n); + dummy_wr_ += real_n; + return (s32)real_n; + } + + protected: + void handle_sbp_msg(uint16_t sender_id, + const sbp_msg_ssr_satellite_apc_t &msg) override { + last_msg_ = msg; + last_sender_id_ = sender_id; + n_callbacks_logged_++; + } + + sbp_msg_ssr_satellite_apc_t last_msg_; + uint8_t last_msg_len_; + uint16_t last_sender_id_; + size_t n_callbacks_logged_; + uint32_t dummy_wr_; + uint32_t dummy_rd_; + uint8_t dummy_buff_[1024]; +}; + +TEST_F(Test_auto_check_sbp_ssr_MsgSsrSatelliteApc0, Test) { + uint8_t encoded_frame[] = { + 85, 5, 6, 0, 0, 41, 127, 58, 9, 0, 174, 8, 1, + 2, 3, 2, 0, 4, 61, 0, 1, 0, 255, 255, 217, 2, + 11, 10, 8, 5, 1, 252, 248, 246, 246, 246, 249, 252, 0, + 6, 12, 22, 30, 41, 41, 41, 41, 144, 161, + }; + + sbp_msg_ssr_satellite_apc_t test_msg{}; + + test_msg.apc[0].pco[0] = 1; + + test_msg.apc[0].pco[1] = -1; + + test_msg.apc[0].pco[2] = 729; + + test_msg.apc[0].pcv[0] = 11; + + test_msg.apc[0].pcv[1] = 10; + + test_msg.apc[0].pcv[2] = 8; + + test_msg.apc[0].pcv[3] = 5; + + test_msg.apc[0].pcv[4] = 1; + + test_msg.apc[0].pcv[5] = -4; + + test_msg.apc[0].pcv[6] = -8; + + test_msg.apc[0].pcv[7] = -10; + + test_msg.apc[0].pcv[8] = -10; + + test_msg.apc[0].pcv[9] = -10; + + test_msg.apc[0].pcv[10] = -7; + + test_msg.apc[0].pcv[11] = -4; + + test_msg.apc[0].pcv[12] = 0; + + test_msg.apc[0].pcv[13] = 6; + + test_msg.apc[0].pcv[14] = 12; + + test_msg.apc[0].pcv[15] = 22; + + test_msg.apc[0].pcv[16] = 30; + + test_msg.apc[0].pcv[17] = 41; + + test_msg.apc[0].pcv[18] = 41; + + test_msg.apc[0].pcv[19] = 41; + + test_msg.apc[0].pcv[20] = 41; + test_msg.apc[0].sat_info = 4; + test_msg.apc[0].sid.code = 0; + test_msg.apc[0].sid.sat = 2; + test_msg.apc[0].svn = 61; + test_msg.iod_ssr = 3; + test_msg.n_apc = 1; + test_msg.sol_id = 2; + test_msg.time.tow = 604799; + test_msg.time.wn = 2222; + test_msg.update_interval = 1; + + EXPECT_EQ(send_message(0, test_msg), SBP_OK); + + EXPECT_EQ(dummy_wr_, sizeof(encoded_frame)); + EXPECT_EQ(memcmp(dummy_buff_, encoded_frame, sizeof(encoded_frame)), 0); + + while (dummy_rd_ < dummy_wr_) { + process(); + } + + EXPECT_EQ(n_callbacks_logged_, 1); + EXPECT_EQ(last_sender_id_, 0); + EXPECT_EQ(last_msg_, test_msg); + EXPECT_EQ(last_msg_.apc[0].pco[0], 1) + << "incorrect value for last_msg_.apc[0].pco[0], expected 1, is " + << last_msg_.apc[0].pco[0]; + EXPECT_EQ(last_msg_.apc[0].pco[1], -1) + << "incorrect value for last_msg_.apc[0].pco[1], expected -1, is " + << last_msg_.apc[0].pco[1]; + EXPECT_EQ(last_msg_.apc[0].pco[2], 729) + << "incorrect value for last_msg_.apc[0].pco[2], expected 729, is " + << last_msg_.apc[0].pco[2]; + EXPECT_EQ(last_msg_.apc[0].pcv[0], 11) + << "incorrect value for last_msg_.apc[0].pcv[0], expected 11, is " + << last_msg_.apc[0].pcv[0]; + EXPECT_EQ(last_msg_.apc[0].pcv[1], 10) + << "incorrect value for last_msg_.apc[0].pcv[1], expected 10, is " + << last_msg_.apc[0].pcv[1]; + EXPECT_EQ(last_msg_.apc[0].pcv[2], 8) + << "incorrect value for last_msg_.apc[0].pcv[2], expected 8, is " + << last_msg_.apc[0].pcv[2]; + EXPECT_EQ(last_msg_.apc[0].pcv[3], 5) + << "incorrect value for last_msg_.apc[0].pcv[3], expected 5, is " + << last_msg_.apc[0].pcv[3]; + EXPECT_EQ(last_msg_.apc[0].pcv[4], 1) + << "incorrect value for last_msg_.apc[0].pcv[4], expected 1, is " + << last_msg_.apc[0].pcv[4]; + EXPECT_EQ(last_msg_.apc[0].pcv[5], -4) + << "incorrect value for last_msg_.apc[0].pcv[5], expected -4, is " + << last_msg_.apc[0].pcv[5]; + EXPECT_EQ(last_msg_.apc[0].pcv[6], -8) + << "incorrect value for last_msg_.apc[0].pcv[6], expected -8, is " + << last_msg_.apc[0].pcv[6]; + EXPECT_EQ(last_msg_.apc[0].pcv[7], -10) + << "incorrect value for last_msg_.apc[0].pcv[7], expected -10, is " + << last_msg_.apc[0].pcv[7]; + EXPECT_EQ(last_msg_.apc[0].pcv[8], -10) + << "incorrect value for last_msg_.apc[0].pcv[8], expected -10, is " + << last_msg_.apc[0].pcv[8]; + EXPECT_EQ(last_msg_.apc[0].pcv[9], -10) + << "incorrect value for last_msg_.apc[0].pcv[9], expected -10, is " + << last_msg_.apc[0].pcv[9]; + EXPECT_EQ(last_msg_.apc[0].pcv[10], -7) + << "incorrect value for last_msg_.apc[0].pcv[10], expected -7, is " + << last_msg_.apc[0].pcv[10]; + EXPECT_EQ(last_msg_.apc[0].pcv[11], -4) + << "incorrect value for last_msg_.apc[0].pcv[11], expected -4, is " + << last_msg_.apc[0].pcv[11]; + EXPECT_EQ(last_msg_.apc[0].pcv[12], 0) + << "incorrect value for last_msg_.apc[0].pcv[12], expected 0, is " + << last_msg_.apc[0].pcv[12]; + EXPECT_EQ(last_msg_.apc[0].pcv[13], 6) + << "incorrect value for last_msg_.apc[0].pcv[13], expected 6, is " + << last_msg_.apc[0].pcv[13]; + EXPECT_EQ(last_msg_.apc[0].pcv[14], 12) + << "incorrect value for last_msg_.apc[0].pcv[14], expected 12, is " + << last_msg_.apc[0].pcv[14]; + EXPECT_EQ(last_msg_.apc[0].pcv[15], 22) + << "incorrect value for last_msg_.apc[0].pcv[15], expected 22, is " + << last_msg_.apc[0].pcv[15]; + EXPECT_EQ(last_msg_.apc[0].pcv[16], 30) + << "incorrect value for last_msg_.apc[0].pcv[16], expected 30, is " + << last_msg_.apc[0].pcv[16]; + EXPECT_EQ(last_msg_.apc[0].pcv[17], 41) + << "incorrect value for last_msg_.apc[0].pcv[17], expected 41, is " + << last_msg_.apc[0].pcv[17]; + EXPECT_EQ(last_msg_.apc[0].pcv[18], 41) + << "incorrect value for last_msg_.apc[0].pcv[18], expected 41, is " + << last_msg_.apc[0].pcv[18]; + EXPECT_EQ(last_msg_.apc[0].pcv[19], 41) + << "incorrect value for last_msg_.apc[0].pcv[19], expected 41, is " + << last_msg_.apc[0].pcv[19]; + EXPECT_EQ(last_msg_.apc[0].pcv[20], 41) + << "incorrect value for last_msg_.apc[0].pcv[20], expected 41, is " + << last_msg_.apc[0].pcv[20]; + EXPECT_EQ(last_msg_.apc[0].sat_info, 4) + << "incorrect value for last_msg_.apc[0].sat_info, expected 4, is " + << last_msg_.apc[0].sat_info; + EXPECT_EQ(last_msg_.apc[0].sid.code, 0) + << "incorrect value for last_msg_.apc[0].sid.code, expected 0, is " + << last_msg_.apc[0].sid.code; + EXPECT_EQ(last_msg_.apc[0].sid.sat, 2) + << "incorrect value for last_msg_.apc[0].sid.sat, expected 2, is " + << last_msg_.apc[0].sid.sat; + EXPECT_EQ(last_msg_.apc[0].svn, 61) + << "incorrect value for last_msg_.apc[0].svn, expected 61, is " + << last_msg_.apc[0].svn; + EXPECT_EQ(last_msg_.iod_ssr, 3) + << "incorrect value for last_msg_.iod_ssr, expected 3, is " + << last_msg_.iod_ssr; + EXPECT_EQ(last_msg_.n_apc, 1) + << "incorrect value for last_msg_.n_apc, expected 1, is " + << last_msg_.n_apc; + EXPECT_EQ(last_msg_.sol_id, 2) + << "incorrect value for last_msg_.sol_id, expected 2, is " + << last_msg_.sol_id; + EXPECT_EQ(last_msg_.time.tow, 604799) + << "incorrect value for last_msg_.time.tow, expected 604799, is " + << last_msg_.time.tow; + EXPECT_EQ(last_msg_.time.wn, 2222) + << "incorrect value for last_msg_.time.wn, expected 2222, is " + << last_msg_.time.wn; + EXPECT_EQ(last_msg_.update_interval, 1) + << "incorrect value for last_msg_.update_interval, expected 1, is " + << last_msg_.update_interval; +} diff --git a/c/test/cpp/auto_check_sbp_ssr_MsgSsrTileDefinition.cc b/c/test/cpp/auto_check_sbp_ssr_MsgSsrTileDefinition.cc index 47500d79b7..62178c44ac 100644 --- a/c/test/cpp/auto_check_sbp_ssr_MsgSsrTileDefinition.cc +++ b/c/test/cpp/auto_check_sbp_ssr_MsgSsrTileDefinition.cc @@ -76,23 +76,28 @@ class Test_auto_check_sbp_ssr_MsgSsrTileDefinition0 TEST_F(Test_auto_check_sbp_ssr_MsgSsrTileDefinition0, Test) { uint8_t encoded_frame[] = { - 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, - 0, 32, 0, 64, 0, 128, 210, 2, 150, 73, 0, 0, 0, 0, 214, 71, + 85, 248, 5, 0, 0, 33, 127, 58, 9, 0, 174, 8, 1, 2, + 3, 4, 0, 5, 0, 186, 28, 59, 167, 100, 0, 100, 0, 6, + 0, 6, 0, 210, 2, 150, 73, 0, 0, 0, 0, 204, 94, }; sbp_msg_ssr_tile_definition_t test_msg{}; test_msg.bitmask = 1234567890; - test_msg.cols = 32768; - test_msg.corner_nw_lat = 1024; - test_msg.corner_nw_lon = 2048; - test_msg.rows = 16384; - test_msg.spacing_lat = 4096; - test_msg.spacing_lon = 8192; - test_msg.ssr_sol_id = 31; - test_msg.tile_id = 512; - test_msg.tile_set_id = 256; + test_msg.cols = 6; + test_msg.corner_nw_lat = 7354; + test_msg.corner_nw_lon = -22725; + test_msg.iod_atmo = 3; + test_msg.rows = 6; + test_msg.sol_id = 2; + test_msg.spacing_lat = 100; + test_msg.spacing_lon = 100; + test_msg.tile_id = 5; + test_msg.tile_set_id = 4; + test_msg.time.tow = 604799; + test_msg.time.wn = 2222; + test_msg.update_interval = 1; - EXPECT_EQ(send_message(66, test_msg), SBP_OK); + EXPECT_EQ(send_message(0, test_msg), SBP_OK); EXPECT_EQ(dummy_wr_, sizeof(encoded_frame)); EXPECT_EQ(memcmp(dummy_buff_, encoded_frame, sizeof(encoded_frame)), 0); @@ -102,36 +107,48 @@ TEST_F(Test_auto_check_sbp_ssr_MsgSsrTileDefinition0, Test) { } EXPECT_EQ(n_callbacks_logged_, 1); - EXPECT_EQ(last_sender_id_, 66); + EXPECT_EQ(last_sender_id_, 0); EXPECT_EQ(last_msg_, test_msg); EXPECT_EQ(last_msg_.bitmask, 1234567890) << "incorrect value for last_msg_.bitmask, expected 1234567890, is " << last_msg_.bitmask; - EXPECT_EQ(last_msg_.cols, 32768) - << "incorrect value for last_msg_.cols, expected 32768, is " + EXPECT_EQ(last_msg_.cols, 6) + << "incorrect value for last_msg_.cols, expected 6, is " << last_msg_.cols; - EXPECT_EQ(last_msg_.corner_nw_lat, 1024) - << "incorrect value for last_msg_.corner_nw_lat, expected 1024, is " + EXPECT_EQ(last_msg_.corner_nw_lat, 7354) + << "incorrect value for last_msg_.corner_nw_lat, expected 7354, is " << last_msg_.corner_nw_lat; - EXPECT_EQ(last_msg_.corner_nw_lon, 2048) - << "incorrect value for last_msg_.corner_nw_lon, expected 2048, is " + EXPECT_EQ(last_msg_.corner_nw_lon, -22725) + << "incorrect value for last_msg_.corner_nw_lon, expected -22725, is " << last_msg_.corner_nw_lon; - EXPECT_EQ(last_msg_.rows, 16384) - << "incorrect value for last_msg_.rows, expected 16384, is " + EXPECT_EQ(last_msg_.iod_atmo, 3) + << "incorrect value for last_msg_.iod_atmo, expected 3, is " + << last_msg_.iod_atmo; + EXPECT_EQ(last_msg_.rows, 6) + << "incorrect value for last_msg_.rows, expected 6, is " << last_msg_.rows; - EXPECT_EQ(last_msg_.spacing_lat, 4096) - << "incorrect value for last_msg_.spacing_lat, expected 4096, is " + EXPECT_EQ(last_msg_.sol_id, 2) + << "incorrect value for last_msg_.sol_id, expected 2, is " + << last_msg_.sol_id; + EXPECT_EQ(last_msg_.spacing_lat, 100) + << "incorrect value for last_msg_.spacing_lat, expected 100, is " << last_msg_.spacing_lat; - EXPECT_EQ(last_msg_.spacing_lon, 8192) - << "incorrect value for last_msg_.spacing_lon, expected 8192, is " + EXPECT_EQ(last_msg_.spacing_lon, 100) + << "incorrect value for last_msg_.spacing_lon, expected 100, is " << last_msg_.spacing_lon; - EXPECT_EQ(last_msg_.ssr_sol_id, 31) - << "incorrect value for last_msg_.ssr_sol_id, expected 31, is " - << last_msg_.ssr_sol_id; - EXPECT_EQ(last_msg_.tile_id, 512) - << "incorrect value for last_msg_.tile_id, expected 512, is " + EXPECT_EQ(last_msg_.tile_id, 5) + << "incorrect value for last_msg_.tile_id, expected 5, is " << last_msg_.tile_id; - EXPECT_EQ(last_msg_.tile_set_id, 256) - << "incorrect value for last_msg_.tile_set_id, expected 256, is " + EXPECT_EQ(last_msg_.tile_set_id, 4) + << "incorrect value for last_msg_.tile_set_id, expected 4, is " << last_msg_.tile_set_id; + EXPECT_EQ(last_msg_.time.tow, 604799) + << "incorrect value for last_msg_.time.tow, expected 604799, is " + << last_msg_.time.tow; + EXPECT_EQ(last_msg_.time.wn, 2222) + << "incorrect value for last_msg_.time.wn, expected 2222, is " + << last_msg_.time.wn; + EXPECT_EQ(last_msg_.update_interval, 1) + << "incorrect value for last_msg_.update_interval, expected 1, is " + << last_msg_.update_interval; } diff --git a/c/test/cpp/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.cc b/c/test/cpp/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.cc new file mode 100644 index 0000000000..9207819ac1 --- /dev/null +++ b/c/test/cpp/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.cc @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2015-2021 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ + +// This file was auto-generated from +// spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinitionDepB.yaml by +// generate.py. Do not modify by hand! + +#include +#include +#include +#include +#include +class Test_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB0 + : public ::testing::Test, + public sbp::State, + public sbp::IReader, + public sbp::IWriter, + sbp::MessageHandler { + public: + Test_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB0() + : ::testing::Test(), + sbp::State(), + sbp::IReader(), + sbp::IWriter(), + sbp::MessageHandler(this), + last_msg_(), + last_msg_len_(), + last_sender_id_(), + n_callbacks_logged_(), + dummy_wr_(), + dummy_rd_(), + dummy_buff_() { + set_reader(this); + set_writer(this); + } + + s32 read(uint8_t *buf, const uint32_t n) override { + uint32_t real_n = n; + memcpy(buf, dummy_buff_ + dummy_rd_, real_n); + dummy_rd_ += real_n; + return (s32)real_n; + } + + s32 write(const uint8_t *buf, uint32_t n) override { + uint32_t real_n = n; + memcpy(dummy_buff_ + dummy_wr_, buf, real_n); + dummy_wr_ += real_n; + return (s32)real_n; + } + + protected: + void handle_sbp_msg(uint16_t sender_id, + const sbp_msg_ssr_tile_definition_dep_b_t &msg) override { + last_msg_ = msg; + last_sender_id_ = sender_id; + n_callbacks_logged_++; + } + + sbp_msg_ssr_tile_definition_dep_b_t last_msg_; + uint8_t last_msg_len_; + uint16_t last_sender_id_; + size_t n_callbacks_logged_; + uint32_t dummy_wr_; + uint32_t dummy_rd_; + uint8_t dummy_buff_[1024]; +}; + +TEST_F(Test_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB0, Test) { + uint8_t encoded_frame[] = { + 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, + 0, 32, 0, 64, 0, 128, 210, 2, 150, 73, 0, 0, 0, 0, 214, 71, + }; + + sbp_msg_ssr_tile_definition_dep_b_t test_msg{}; + test_msg.bitmask = 1234567890; + test_msg.cols = 32768; + test_msg.corner_nw_lat = 1024; + test_msg.corner_nw_lon = 2048; + test_msg.rows = 16384; + test_msg.spacing_lat = 4096; + test_msg.spacing_lon = 8192; + test_msg.ssr_sol_id = 31; + test_msg.tile_id = 512; + test_msg.tile_set_id = 256; + + EXPECT_EQ(send_message(66, test_msg), SBP_OK); + + EXPECT_EQ(dummy_wr_, sizeof(encoded_frame)); + EXPECT_EQ(memcmp(dummy_buff_, encoded_frame, sizeof(encoded_frame)), 0); + + while (dummy_rd_ < dummy_wr_) { + process(); + } + + EXPECT_EQ(n_callbacks_logged_, 1); + EXPECT_EQ(last_sender_id_, 66); + EXPECT_EQ(last_msg_, test_msg); + EXPECT_EQ(last_msg_.bitmask, 1234567890) + << "incorrect value for last_msg_.bitmask, expected 1234567890, is " + << last_msg_.bitmask; + EXPECT_EQ(last_msg_.cols, 32768) + << "incorrect value for last_msg_.cols, expected 32768, is " + << last_msg_.cols; + EXPECT_EQ(last_msg_.corner_nw_lat, 1024) + << "incorrect value for last_msg_.corner_nw_lat, expected 1024, is " + << last_msg_.corner_nw_lat; + EXPECT_EQ(last_msg_.corner_nw_lon, 2048) + << "incorrect value for last_msg_.corner_nw_lon, expected 2048, is " + << last_msg_.corner_nw_lon; + EXPECT_EQ(last_msg_.rows, 16384) + << "incorrect value for last_msg_.rows, expected 16384, is " + << last_msg_.rows; + EXPECT_EQ(last_msg_.spacing_lat, 4096) + << "incorrect value for last_msg_.spacing_lat, expected 4096, is " + << last_msg_.spacing_lat; + EXPECT_EQ(last_msg_.spacing_lon, 8192) + << "incorrect value for last_msg_.spacing_lon, expected 8192, is " + << last_msg_.spacing_lon; + EXPECT_EQ(last_msg_.ssr_sol_id, 31) + << "incorrect value for last_msg_.ssr_sol_id, expected 31, is " + << last_msg_.ssr_sol_id; + EXPECT_EQ(last_msg_.tile_id, 512) + << "incorrect value for last_msg_.tile_id, expected 512, is " + << last_msg_.tile_id; + EXPECT_EQ(last_msg_.tile_set_id, 256) + << "incorrect value for last_msg_.tile_set_id, expected 256, is " + << last_msg_.tile_set_id; +} diff --git a/c/test/legacy/auto_check_sbp_ssr_MsgSsrSatelliteApc.c b/c/test/legacy/auto_check_sbp_ssr_MsgSsrSatelliteApc.c new file mode 100644 index 0000000000..ac852eb72a --- /dev/null +++ b/c/test/legacy/auto_check_sbp_ssr_MsgSsrSatelliteApc.c @@ -0,0 +1,438 @@ +/* + * Copyright (C) 2015-2021 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ + +// This file was auto-generated from +// spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrSatelliteApc.yaml by generate.py. +// Do not modify by hand! + +#include +#include +#include +#include // for debugging +#include // for malloc + +static struct { + u32 n_callbacks_logged; + u16 sender_id; + u8 len; + u8 msg[SBP_MAX_PAYLOAD_LEN]; + void *context; +} last_msg; + +static struct { + u32 n_callbacks_logged; + u16 sender_id; + u16 msg_type; + u8 msg_len; + u8 msg[SBP_MAX_PAYLOAD_LEN]; + u16 frame_len; + u8 frame[SBP_MAX_FRAME_LEN]; + void *context; +} last_frame; + +static u32 dummy_wr = 0; +static u32 dummy_rd = 0; +static u8 dummy_buff[1024]; +static void *last_io_context; + +static int DUMMY_MEMORY_FOR_CALLBACKS = 0xdeadbeef; +static int DUMMY_MEMORY_FOR_IO = 0xdead0000; + +static void dummy_reset() { + dummy_rd = dummy_wr = 0; + memset(dummy_buff, 0, sizeof(dummy_buff)); +} + +static s32 dummy_write(u8 *buff, u32 n, void *context) { + last_io_context = context; + u32 real_n = n; //(dummy_n > n) ? n : dummy_n; + memcpy(dummy_buff + dummy_wr, buff, real_n); + dummy_wr += real_n; + return real_n; +} + +static s32 dummy_read(u8 *buff, u32 n, void *context) { + last_io_context = context; + u32 real_n = n; //(dummy_n > n) ? n : dummy_n; + memcpy(buff, dummy_buff + dummy_rd, real_n); + dummy_rd += real_n; + return real_n; +} + +static void logging_reset() { + memset(&last_msg, 0, sizeof(last_msg)); + memset(&last_frame, 0, sizeof(last_frame)); +} + +static void msg_callback(u16 sender_id, u8 len, u8 msg[], void *context) { + last_msg.n_callbacks_logged++; + last_msg.sender_id = sender_id; + last_msg.len = len; + last_msg.context = context; + memcpy(last_msg.msg, msg, len); +} + +static void frame_callback(u16 sender_id, u16 msg_type, u8 msg_len, u8 msg[], + u16 frame_len, u8 frame[], void *context) { + last_frame.n_callbacks_logged++; + last_frame.sender_id = sender_id; + last_frame.msg_type = msg_type; + last_frame.msg_len = msg_len; + memcpy(last_frame.msg, msg, msg_len); + last_frame.frame_len = frame_len; + memcpy(last_frame.frame, frame, frame_len); + last_frame.context = context; +} + +START_TEST(test_legacy_auto_check_sbp_ssr_MsgSsrSatelliteApc) { + static sbp_msg_callbacks_node_t n; + static sbp_msg_callbacks_node_t n2; + + // State of the SBP message parser. + // Must be statically allocated. + sbp_state_t sbp_state; + + // + // Run tests: + // + // Test successful parsing of a message + { + // SBP parser state must be initialized before sbp_process is called. + // We re-initialize before every test so that callbacks for the same message + // types can be + // allocated multiple times across different tests. + sbp_state_init(&sbp_state); + + sbp_state_set_io_context(&sbp_state, &DUMMY_MEMORY_FOR_IO); + + logging_reset(); + + sbp_payload_callback_register(&sbp_state, 0x605, &msg_callback, + &DUMMY_MEMORY_FOR_CALLBACKS, &n); + sbp_frame_callback_register(&sbp_state, 0x605, &frame_callback, + &DUMMY_MEMORY_FOR_CALLBACKS, &n2); + + u8 encoded_frame[] = { + 85, 5, 6, 0, 0, 41, 127, 58, 9, 0, 174, 8, 1, + 2, 3, 2, 0, 4, 61, 0, 1, 0, 255, 255, 217, 2, + 11, 10, 8, 5, 1, 252, 248, 246, 246, 246, 249, 252, 0, + 6, 12, 22, 30, 41, 41, 41, 41, 144, 161, + }; + + dummy_reset(); + + u8 test_msg_storage[SBP_MAX_PAYLOAD_LEN]; + memset(test_msg_storage, 0, sizeof(test_msg_storage)); + u8 test_msg_len = 0; + msg_ssr_satellite_apc_t *test_msg = + (msg_ssr_satellite_apc_t *)test_msg_storage; + test_msg_len = sizeof(*test_msg); + if (sizeof(test_msg->apc) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0]); + } + if (sizeof(test_msg->apc[0].pco) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pco[0]); + } + test_msg->apc[0].pco[0] = 1; + if (sizeof(test_msg->apc[0].pco) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pco[0]); + } + test_msg->apc[0].pco[1] = -1; + if (sizeof(test_msg->apc[0].pco) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pco[0]); + } + test_msg->apc[0].pco[2] = 729; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[0] = 11; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[1] = 10; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[2] = 8; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[3] = 5; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[4] = 1; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[5] = -4; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[6] = -8; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[7] = -10; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[8] = -10; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[9] = -10; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[10] = -7; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[11] = -4; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[12] = 0; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[13] = 6; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[14] = 12; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[15] = 22; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[16] = 30; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[17] = 41; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[18] = 41; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[19] = 41; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len += sizeof(test_msg->apc[0].pcv[0]); + } + test_msg->apc[0].pcv[20] = 41; + test_msg->apc[0].sat_info = 4; + test_msg->apc[0].sid.code = 0; + test_msg->apc[0].sid.sat = 2; + test_msg->apc[0].svn = 61; + test_msg->iod_ssr = 3; + test_msg->sol_id = 2; + test_msg->time.tow = 604799; + test_msg->time.wn = 2222; + test_msg->update_interval = 1; + sbp_payload_send(&sbp_state, 0x605, 0, test_msg_len, test_msg_storage, + &dummy_write); + + ck_assert_msg( + test_msg_len == sizeof(encoded_frame) - 8, + "Test message has not been generated correctly, or the encoded frame " + "from the spec is badly defined. Check your test spec"); + + ck_assert_msg(dummy_wr == sizeof(encoded_frame), + "not enough data was written to dummy_buff"); + ck_assert_msg(memcmp(dummy_buff, encoded_frame, sizeof(encoded_frame)) == 0, + "frame was not encoded properly"); + + while (dummy_rd < dummy_wr) { + ck_assert_msg(sbp_process(&sbp_state, &dummy_read) >= SBP_OK, + "sbp_process threw an error!"); + } + + ck_assert_msg(last_msg.n_callbacks_logged == 1, + "msg_callback: one callback should have been logged"); + ck_assert_msg(last_msg.sender_id == 0, + "msg_callback: sender_id decoded incorrectly"); + ck_assert_msg(last_msg.len == sizeof(encoded_frame) - 8, + "msg_callback: len decoded incorrectly"); + ck_assert_msg( + memcmp(last_msg.msg, encoded_frame + 6, sizeof(encoded_frame) - 8) == 0, + "msg_callback: test data decoded incorrectly"); + ck_assert_msg(last_msg.context == &DUMMY_MEMORY_FOR_CALLBACKS, + "frame_callback: context pointer incorrectly passed"); + + ck_assert_msg(last_frame.n_callbacks_logged == 1, + "frame_callback: one callback should have been logged"); + ck_assert_msg(last_frame.sender_id == 0, + "frame_callback: sender_id decoded incorrectly"); + ck_assert_msg(last_frame.msg_type == 0x605, + "frame_callback: msg_type decoded incorrectly"); + ck_assert_msg(last_frame.msg_len == sizeof(encoded_frame) - 8, + "frame_callback: msg_len decoded incorrectly"); + ck_assert_msg(memcmp(last_frame.msg, encoded_frame + 6, + sizeof(encoded_frame) - 8) == 0, + "frame_callback: test data decoded incorrectly"); + ck_assert_msg(last_frame.frame_len == sizeof(encoded_frame), + "frame_callback: frame_len decoded incorrectly"); + ck_assert_msg( + memcmp(last_frame.frame, encoded_frame, sizeof(encoded_frame)) == 0, + "frame_callback: frame decoded incorrectly"); + ck_assert_msg(last_frame.context == &DUMMY_MEMORY_FOR_CALLBACKS, + "frame_callback: context pointer incorrectly passed"); + + // Cast to expected message type - the +6 byte offset is where the payload + // starts + msg_ssr_satellite_apc_t *check_msg = + (msg_ssr_satellite_apc_t *)((void *)last_msg.msg); + // Run tests against fields + ck_assert_msg(check_msg != 0, "stub to prevent warnings if msg isn't used"); + ck_assert_msg(check_msg->apc[0].pco[0] == 1, + "incorrect value for apc[0].pco[0], expected 1, is %d", + check_msg->apc[0].pco[0]); + ck_assert_msg(check_msg->apc[0].pco[1] == -1, + "incorrect value for apc[0].pco[1], expected -1, is %d", + check_msg->apc[0].pco[1]); + ck_assert_msg(check_msg->apc[0].pco[2] == 729, + "incorrect value for apc[0].pco[2], expected 729, is %d", + check_msg->apc[0].pco[2]); + ck_assert_msg(check_msg->apc[0].pcv[0] == 11, + "incorrect value for apc[0].pcv[0], expected 11, is %d", + check_msg->apc[0].pcv[0]); + ck_assert_msg(check_msg->apc[0].pcv[1] == 10, + "incorrect value for apc[0].pcv[1], expected 10, is %d", + check_msg->apc[0].pcv[1]); + ck_assert_msg(check_msg->apc[0].pcv[2] == 8, + "incorrect value for apc[0].pcv[2], expected 8, is %d", + check_msg->apc[0].pcv[2]); + ck_assert_msg(check_msg->apc[0].pcv[3] == 5, + "incorrect value for apc[0].pcv[3], expected 5, is %d", + check_msg->apc[0].pcv[3]); + ck_assert_msg(check_msg->apc[0].pcv[4] == 1, + "incorrect value for apc[0].pcv[4], expected 1, is %d", + check_msg->apc[0].pcv[4]); + ck_assert_msg(check_msg->apc[0].pcv[5] == -4, + "incorrect value for apc[0].pcv[5], expected -4, is %d", + check_msg->apc[0].pcv[5]); + ck_assert_msg(check_msg->apc[0].pcv[6] == -8, + "incorrect value for apc[0].pcv[6], expected -8, is %d", + check_msg->apc[0].pcv[6]); + ck_assert_msg(check_msg->apc[0].pcv[7] == -10, + "incorrect value for apc[0].pcv[7], expected -10, is %d", + check_msg->apc[0].pcv[7]); + ck_assert_msg(check_msg->apc[0].pcv[8] == -10, + "incorrect value for apc[0].pcv[8], expected -10, is %d", + check_msg->apc[0].pcv[8]); + ck_assert_msg(check_msg->apc[0].pcv[9] == -10, + "incorrect value for apc[0].pcv[9], expected -10, is %d", + check_msg->apc[0].pcv[9]); + ck_assert_msg(check_msg->apc[0].pcv[10] == -7, + "incorrect value for apc[0].pcv[10], expected -7, is %d", + check_msg->apc[0].pcv[10]); + ck_assert_msg(check_msg->apc[0].pcv[11] == -4, + "incorrect value for apc[0].pcv[11], expected -4, is %d", + check_msg->apc[0].pcv[11]); + ck_assert_msg(check_msg->apc[0].pcv[12] == 0, + "incorrect value for apc[0].pcv[12], expected 0, is %d", + check_msg->apc[0].pcv[12]); + ck_assert_msg(check_msg->apc[0].pcv[13] == 6, + "incorrect value for apc[0].pcv[13], expected 6, is %d", + check_msg->apc[0].pcv[13]); + ck_assert_msg(check_msg->apc[0].pcv[14] == 12, + "incorrect value for apc[0].pcv[14], expected 12, is %d", + check_msg->apc[0].pcv[14]); + ck_assert_msg(check_msg->apc[0].pcv[15] == 22, + "incorrect value for apc[0].pcv[15], expected 22, is %d", + check_msg->apc[0].pcv[15]); + ck_assert_msg(check_msg->apc[0].pcv[16] == 30, + "incorrect value for apc[0].pcv[16], expected 30, is %d", + check_msg->apc[0].pcv[16]); + ck_assert_msg(check_msg->apc[0].pcv[17] == 41, + "incorrect value for apc[0].pcv[17], expected 41, is %d", + check_msg->apc[0].pcv[17]); + ck_assert_msg(check_msg->apc[0].pcv[18] == 41, + "incorrect value for apc[0].pcv[18], expected 41, is %d", + check_msg->apc[0].pcv[18]); + ck_assert_msg(check_msg->apc[0].pcv[19] == 41, + "incorrect value for apc[0].pcv[19], expected 41, is %d", + check_msg->apc[0].pcv[19]); + ck_assert_msg(check_msg->apc[0].pcv[20] == 41, + "incorrect value for apc[0].pcv[20], expected 41, is %d", + check_msg->apc[0].pcv[20]); + ck_assert_msg(check_msg->apc[0].sat_info == 4, + "incorrect value for apc[0].sat_info, expected 4, is %d", + check_msg->apc[0].sat_info); + ck_assert_msg(check_msg->apc[0].sid.code == 0, + "incorrect value for apc[0].sid.code, expected 0, is %d", + check_msg->apc[0].sid.code); + ck_assert_msg(check_msg->apc[0].sid.sat == 2, + "incorrect value for apc[0].sid.sat, expected 2, is %d", + check_msg->apc[0].sid.sat); + ck_assert_msg(check_msg->apc[0].svn == 61, + "incorrect value for apc[0].svn, expected 61, is %d", + check_msg->apc[0].svn); + ck_assert_msg(check_msg->iod_ssr == 3, + "incorrect value for iod_ssr, expected 3, is %d", + check_msg->iod_ssr); + ck_assert_msg(check_msg->sol_id == 2, + "incorrect value for sol_id, expected 2, is %d", + check_msg->sol_id); + ck_assert_msg(check_msg->time.tow == 604799, + "incorrect value for time.tow, expected 604799, is %d", + check_msg->time.tow); + ck_assert_msg(check_msg->time.wn == 2222, + "incorrect value for time.wn, expected 2222, is %d", + check_msg->time.wn); + ck_assert_msg(check_msg->update_interval == 1, + "incorrect value for update_interval, expected 1, is %d", + check_msg->update_interval); + } +} +END_TEST + +Suite *legacy_auto_check_sbp_ssr_MsgSsrSatelliteApc_suite(void) { + Suite *s = suite_create( + "SBP generated test suite: legacy_auto_check_sbp_ssr_MsgSsrSatelliteApc"); + TCase *tc_acq = tcase_create( + "Automated_Suite_legacy_auto_check_sbp_ssr_MsgSsrSatelliteApc"); + tcase_add_test(tc_acq, test_legacy_auto_check_sbp_ssr_MsgSsrSatelliteApc); + suite_add_tcase(s, tc_acq); + return s; +} \ No newline at end of file diff --git a/c/test/legacy/auto_check_sbp_ssr_MsgSsrTileDefinition.c b/c/test/legacy/auto_check_sbp_ssr_MsgSsrTileDefinition.c index af108f61da..aceb07a326 100644 --- a/c/test/legacy/auto_check_sbp_ssr_MsgSsrTileDefinition.c +++ b/c/test/legacy/auto_check_sbp_ssr_MsgSsrTileDefinition.c @@ -116,14 +116,15 @@ START_TEST(test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinition) { logging_reset(); - sbp_payload_callback_register(&sbp_state, 1527, &msg_callback, + sbp_payload_callback_register(&sbp_state, 0x5F8, &msg_callback, &DUMMY_MEMORY_FOR_CALLBACKS, &n); - sbp_frame_callback_register(&sbp_state, 1527, &frame_callback, + sbp_frame_callback_register(&sbp_state, 0x5F8, &frame_callback, &DUMMY_MEMORY_FOR_CALLBACKS, &n2); u8 encoded_frame[] = { - 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, - 0, 32, 0, 64, 0, 128, 210, 2, 150, 73, 0, 0, 0, 0, 214, 71, + 85, 248, 5, 0, 0, 33, 127, 58, 9, 0, 174, 8, 1, 2, + 3, 4, 0, 5, 0, 186, 28, 59, 167, 100, 0, 100, 0, 6, + 0, 6, 0, 210, 2, 150, 73, 0, 0, 0, 0, 204, 94, }; dummy_reset(); @@ -135,16 +136,20 @@ START_TEST(test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinition) { (msg_ssr_tile_definition_t *)test_msg_storage; test_msg_len = sizeof(*test_msg); test_msg->bitmask = 1234567890; - test_msg->cols = 32768; - test_msg->corner_nw_lat = 1024; - test_msg->corner_nw_lon = 2048; - test_msg->rows = 16384; - test_msg->spacing_lat = 4096; - test_msg->spacing_lon = 8192; - test_msg->ssr_sol_id = 31; - test_msg->tile_id = 512; - test_msg->tile_set_id = 256; - sbp_payload_send(&sbp_state, 1527, 66, test_msg_len, test_msg_storage, + test_msg->cols = 6; + test_msg->corner_nw_lat = 7354; + test_msg->corner_nw_lon = -22725; + test_msg->iod_atmo = 3; + test_msg->rows = 6; + test_msg->sol_id = 2; + test_msg->spacing_lat = 100; + test_msg->spacing_lon = 100; + test_msg->tile_id = 5; + test_msg->tile_set_id = 4; + test_msg->time.tow = 604799; + test_msg->time.wn = 2222; + test_msg->update_interval = 1; + sbp_payload_send(&sbp_state, 0x5F8, 0, test_msg_len, test_msg_storage, &dummy_write); ck_assert_msg( @@ -164,7 +169,7 @@ START_TEST(test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinition) { ck_assert_msg(last_msg.n_callbacks_logged == 1, "msg_callback: one callback should have been logged"); - ck_assert_msg(last_msg.sender_id == 66, + ck_assert_msg(last_msg.sender_id == 0, "msg_callback: sender_id decoded incorrectly"); ck_assert_msg(last_msg.len == sizeof(encoded_frame) - 8, "msg_callback: len decoded incorrectly"); @@ -176,9 +181,9 @@ START_TEST(test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinition) { ck_assert_msg(last_frame.n_callbacks_logged == 1, "frame_callback: one callback should have been logged"); - ck_assert_msg(last_frame.sender_id == 66, + ck_assert_msg(last_frame.sender_id == 0, "frame_callback: sender_id decoded incorrectly"); - ck_assert_msg(last_frame.msg_type == 1527, + ck_assert_msg(last_frame.msg_type == 0x5F8, "frame_callback: msg_type decoded incorrectly"); ck_assert_msg(last_frame.msg_len == sizeof(encoded_frame) - 8, "frame_callback: msg_len decoded incorrectly"); @@ -202,33 +207,45 @@ START_TEST(test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinition) { ck_assert_msg(check_msg->bitmask == 1234567890, "incorrect value for bitmask, expected 1234567890, is %d", check_msg->bitmask); - ck_assert_msg(check_msg->cols == 32768, - "incorrect value for cols, expected 32768, is %d", + ck_assert_msg(check_msg->cols == 6, + "incorrect value for cols, expected 6, is %d", check_msg->cols); - ck_assert_msg(check_msg->corner_nw_lat == 1024, - "incorrect value for corner_nw_lat, expected 1024, is %d", + ck_assert_msg(check_msg->corner_nw_lat == 7354, + "incorrect value for corner_nw_lat, expected 7354, is %d", check_msg->corner_nw_lat); - ck_assert_msg(check_msg->corner_nw_lon == 2048, - "incorrect value for corner_nw_lon, expected 2048, is %d", + ck_assert_msg(check_msg->corner_nw_lon == -22725, + "incorrect value for corner_nw_lon, expected -22725, is %d", check_msg->corner_nw_lon); - ck_assert_msg(check_msg->rows == 16384, - "incorrect value for rows, expected 16384, is %d", + ck_assert_msg(check_msg->iod_atmo == 3, + "incorrect value for iod_atmo, expected 3, is %d", + check_msg->iod_atmo); + ck_assert_msg(check_msg->rows == 6, + "incorrect value for rows, expected 6, is %d", check_msg->rows); - ck_assert_msg(check_msg->spacing_lat == 4096, - "incorrect value for spacing_lat, expected 4096, is %d", + ck_assert_msg(check_msg->sol_id == 2, + "incorrect value for sol_id, expected 2, is %d", + check_msg->sol_id); + ck_assert_msg(check_msg->spacing_lat == 100, + "incorrect value for spacing_lat, expected 100, is %d", check_msg->spacing_lat); - ck_assert_msg(check_msg->spacing_lon == 8192, - "incorrect value for spacing_lon, expected 8192, is %d", + ck_assert_msg(check_msg->spacing_lon == 100, + "incorrect value for spacing_lon, expected 100, is %d", check_msg->spacing_lon); - ck_assert_msg(check_msg->ssr_sol_id == 31, - "incorrect value for ssr_sol_id, expected 31, is %d", - check_msg->ssr_sol_id); - ck_assert_msg(check_msg->tile_id == 512, - "incorrect value for tile_id, expected 512, is %d", + ck_assert_msg(check_msg->tile_id == 5, + "incorrect value for tile_id, expected 5, is %d", check_msg->tile_id); - ck_assert_msg(check_msg->tile_set_id == 256, - "incorrect value for tile_set_id, expected 256, is %d", + ck_assert_msg(check_msg->tile_set_id == 4, + "incorrect value for tile_set_id, expected 4, is %d", check_msg->tile_set_id); + ck_assert_msg(check_msg->time.tow == 604799, + "incorrect value for time.tow, expected 604799, is %d", + check_msg->time.tow); + ck_assert_msg(check_msg->time.wn == 2222, + "incorrect value for time.wn, expected 2222, is %d", + check_msg->time.wn); + ck_assert_msg(check_msg->update_interval == 1, + "incorrect value for update_interval, expected 1, is %d", + check_msg->update_interval); } } END_TEST diff --git a/c/test/legacy/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.c b/c/test/legacy/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.c new file mode 100644 index 0000000000..d3f121c4bf --- /dev/null +++ b/c/test/legacy/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.c @@ -0,0 +1,246 @@ +/* + * Copyright (C) 2015-2021 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ + +// This file was auto-generated from +// spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinitionDepB.yaml by +// generate.py. Do not modify by hand! + +#include +#include +#include +#include // for debugging +#include // for malloc + +static struct { + u32 n_callbacks_logged; + u16 sender_id; + u8 len; + u8 msg[SBP_MAX_PAYLOAD_LEN]; + void *context; +} last_msg; + +static struct { + u32 n_callbacks_logged; + u16 sender_id; + u16 msg_type; + u8 msg_len; + u8 msg[SBP_MAX_PAYLOAD_LEN]; + u16 frame_len; + u8 frame[SBP_MAX_FRAME_LEN]; + void *context; +} last_frame; + +static u32 dummy_wr = 0; +static u32 dummy_rd = 0; +static u8 dummy_buff[1024]; +static void *last_io_context; + +static int DUMMY_MEMORY_FOR_CALLBACKS = 0xdeadbeef; +static int DUMMY_MEMORY_FOR_IO = 0xdead0000; + +static void dummy_reset() { + dummy_rd = dummy_wr = 0; + memset(dummy_buff, 0, sizeof(dummy_buff)); +} + +static s32 dummy_write(u8 *buff, u32 n, void *context) { + last_io_context = context; + u32 real_n = n; //(dummy_n > n) ? n : dummy_n; + memcpy(dummy_buff + dummy_wr, buff, real_n); + dummy_wr += real_n; + return real_n; +} + +static s32 dummy_read(u8 *buff, u32 n, void *context) { + last_io_context = context; + u32 real_n = n; //(dummy_n > n) ? n : dummy_n; + memcpy(buff, dummy_buff + dummy_rd, real_n); + dummy_rd += real_n; + return real_n; +} + +static void logging_reset() { + memset(&last_msg, 0, sizeof(last_msg)); + memset(&last_frame, 0, sizeof(last_frame)); +} + +static void msg_callback(u16 sender_id, u8 len, u8 msg[], void *context) { + last_msg.n_callbacks_logged++; + last_msg.sender_id = sender_id; + last_msg.len = len; + last_msg.context = context; + memcpy(last_msg.msg, msg, len); +} + +static void frame_callback(u16 sender_id, u16 msg_type, u8 msg_len, u8 msg[], + u16 frame_len, u8 frame[], void *context) { + last_frame.n_callbacks_logged++; + last_frame.sender_id = sender_id; + last_frame.msg_type = msg_type; + last_frame.msg_len = msg_len; + memcpy(last_frame.msg, msg, msg_len); + last_frame.frame_len = frame_len; + memcpy(last_frame.frame, frame, frame_len); + last_frame.context = context; +} + +START_TEST(test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB) { + static sbp_msg_callbacks_node_t n; + static sbp_msg_callbacks_node_t n2; + + // State of the SBP message parser. + // Must be statically allocated. + sbp_state_t sbp_state; + + // + // Run tests: + // + // Test successful parsing of a message + { + // SBP parser state must be initialized before sbp_process is called. + // We re-initialize before every test so that callbacks for the same message + // types can be + // allocated multiple times across different tests. + sbp_state_init(&sbp_state); + + sbp_state_set_io_context(&sbp_state, &DUMMY_MEMORY_FOR_IO); + + logging_reset(); + + sbp_payload_callback_register(&sbp_state, 1527, &msg_callback, + &DUMMY_MEMORY_FOR_CALLBACKS, &n); + sbp_frame_callback_register(&sbp_state, 1527, &frame_callback, + &DUMMY_MEMORY_FOR_CALLBACKS, &n2); + + u8 encoded_frame[] = { + 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, + 0, 32, 0, 64, 0, 128, 210, 2, 150, 73, 0, 0, 0, 0, 214, 71, + }; + + dummy_reset(); + + u8 test_msg_storage[SBP_MAX_PAYLOAD_LEN]; + memset(test_msg_storage, 0, sizeof(test_msg_storage)); + u8 test_msg_len = 0; + msg_ssr_tile_definition_dep_b_t *test_msg = + (msg_ssr_tile_definition_dep_b_t *)test_msg_storage; + test_msg_len = sizeof(*test_msg); + test_msg->bitmask = 1234567890; + test_msg->cols = 32768; + test_msg->corner_nw_lat = 1024; + test_msg->corner_nw_lon = 2048; + test_msg->rows = 16384; + test_msg->spacing_lat = 4096; + test_msg->spacing_lon = 8192; + test_msg->ssr_sol_id = 31; + test_msg->tile_id = 512; + test_msg->tile_set_id = 256; + sbp_payload_send(&sbp_state, 1527, 66, test_msg_len, test_msg_storage, + &dummy_write); + + ck_assert_msg( + test_msg_len == sizeof(encoded_frame) - 8, + "Test message has not been generated correctly, or the encoded frame " + "from the spec is badly defined. Check your test spec"); + + ck_assert_msg(dummy_wr == sizeof(encoded_frame), + "not enough data was written to dummy_buff"); + ck_assert_msg(memcmp(dummy_buff, encoded_frame, sizeof(encoded_frame)) == 0, + "frame was not encoded properly"); + + while (dummy_rd < dummy_wr) { + ck_assert_msg(sbp_process(&sbp_state, &dummy_read) >= SBP_OK, + "sbp_process threw an error!"); + } + + ck_assert_msg(last_msg.n_callbacks_logged == 1, + "msg_callback: one callback should have been logged"); + ck_assert_msg(last_msg.sender_id == 66, + "msg_callback: sender_id decoded incorrectly"); + ck_assert_msg(last_msg.len == sizeof(encoded_frame) - 8, + "msg_callback: len decoded incorrectly"); + ck_assert_msg( + memcmp(last_msg.msg, encoded_frame + 6, sizeof(encoded_frame) - 8) == 0, + "msg_callback: test data decoded incorrectly"); + ck_assert_msg(last_msg.context == &DUMMY_MEMORY_FOR_CALLBACKS, + "frame_callback: context pointer incorrectly passed"); + + ck_assert_msg(last_frame.n_callbacks_logged == 1, + "frame_callback: one callback should have been logged"); + ck_assert_msg(last_frame.sender_id == 66, + "frame_callback: sender_id decoded incorrectly"); + ck_assert_msg(last_frame.msg_type == 1527, + "frame_callback: msg_type decoded incorrectly"); + ck_assert_msg(last_frame.msg_len == sizeof(encoded_frame) - 8, + "frame_callback: msg_len decoded incorrectly"); + ck_assert_msg(memcmp(last_frame.msg, encoded_frame + 6, + sizeof(encoded_frame) - 8) == 0, + "frame_callback: test data decoded incorrectly"); + ck_assert_msg(last_frame.frame_len == sizeof(encoded_frame), + "frame_callback: frame_len decoded incorrectly"); + ck_assert_msg( + memcmp(last_frame.frame, encoded_frame, sizeof(encoded_frame)) == 0, + "frame_callback: frame decoded incorrectly"); + ck_assert_msg(last_frame.context == &DUMMY_MEMORY_FOR_CALLBACKS, + "frame_callback: context pointer incorrectly passed"); + + // Cast to expected message type - the +6 byte offset is where the payload + // starts + msg_ssr_tile_definition_dep_b_t *check_msg = + (msg_ssr_tile_definition_dep_b_t *)((void *)last_msg.msg); + // Run tests against fields + ck_assert_msg(check_msg != 0, "stub to prevent warnings if msg isn't used"); + ck_assert_msg(check_msg->bitmask == 1234567890, + "incorrect value for bitmask, expected 1234567890, is %d", + check_msg->bitmask); + ck_assert_msg(check_msg->cols == 32768, + "incorrect value for cols, expected 32768, is %d", + check_msg->cols); + ck_assert_msg(check_msg->corner_nw_lat == 1024, + "incorrect value for corner_nw_lat, expected 1024, is %d", + check_msg->corner_nw_lat); + ck_assert_msg(check_msg->corner_nw_lon == 2048, + "incorrect value for corner_nw_lon, expected 2048, is %d", + check_msg->corner_nw_lon); + ck_assert_msg(check_msg->rows == 16384, + "incorrect value for rows, expected 16384, is %d", + check_msg->rows); + ck_assert_msg(check_msg->spacing_lat == 4096, + "incorrect value for spacing_lat, expected 4096, is %d", + check_msg->spacing_lat); + ck_assert_msg(check_msg->spacing_lon == 8192, + "incorrect value for spacing_lon, expected 8192, is %d", + check_msg->spacing_lon); + ck_assert_msg(check_msg->ssr_sol_id == 31, + "incorrect value for ssr_sol_id, expected 31, is %d", + check_msg->ssr_sol_id); + ck_assert_msg(check_msg->tile_id == 512, + "incorrect value for tile_id, expected 512, is %d", + check_msg->tile_id); + ck_assert_msg(check_msg->tile_set_id == 256, + "incorrect value for tile_set_id, expected 256, is %d", + check_msg->tile_set_id); + } +} +END_TEST + +Suite *legacy_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB_suite(void) { + Suite *s = suite_create( + "SBP generated test suite: " + "legacy_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB"); + TCase *tc_acq = tcase_create( + "Automated_Suite_legacy_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB"); + tcase_add_test(tc_acq, + test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB); + suite_add_tcase(s, tc_acq); + return s; +} \ No newline at end of file diff --git a/c/test/legacy/cpp/auto_check_sbp_ssr_MsgSsrSatelliteApc.cc b/c/test/legacy/cpp/auto_check_sbp_ssr_MsgSsrSatelliteApc.cc new file mode 100644 index 0000000000..da5a14faf5 --- /dev/null +++ b/c/test/legacy/cpp/auto_check_sbp_ssr_MsgSsrSatelliteApc.cc @@ -0,0 +1,336 @@ +/* + * Copyright (C) 2015-2021 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ + +// This file was auto-generated from +// spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrSatelliteApc.yaml by generate.py. +// Do not modify by hand! + +#include +#include +#include +#include +class Test_legacy_auto_check_sbp_ssr_MsgSsrSatelliteApc0 + : public ::testing::Test, + public sbp::State, + public sbp::IReader, + public sbp::IWriter, + sbp::PayloadHandler { + public: + Test_legacy_auto_check_sbp_ssr_MsgSsrSatelliteApc0() + : ::testing::Test(), + sbp::State(), + sbp::IReader(), + sbp::IWriter(), + sbp::PayloadHandler(this), + last_msg_storage_(), + last_msg_( + reinterpret_cast(last_msg_storage_)), + last_msg_len_(), + last_sender_id_(), + n_callbacks_logged_(), + dummy_wr_(), + dummy_rd_(), + dummy_buff_() { + set_reader(this); + set_writer(this); + } + + s32 read(uint8_t *buf, const uint32_t n) override { + uint32_t real_n = n; + memcpy(buf, dummy_buff_ + dummy_rd_, real_n); + dummy_rd_ += real_n; + return (s32)real_n; + } + + s32 write(const uint8_t *buf, uint32_t n) override { + uint32_t real_n = n; + memcpy(dummy_buff_ + dummy_wr_, buf, real_n); + dummy_wr_ += real_n; + return (s32)real_n; + } + + protected: + void handle_sbp_msg(uint16_t sender_id, uint8_t message_length, + const msg_ssr_satellite_apc_t &msg) override { + memcpy(last_msg_storage_, &msg, message_length); + last_msg_len_ = message_length; + last_sender_id_ = sender_id; + n_callbacks_logged_++; + } + + uint8_t last_msg_storage_[SBP_MAX_PAYLOAD_LEN]; + msg_ssr_satellite_apc_t *last_msg_; + uint8_t last_msg_len_; + uint16_t last_sender_id_; + size_t n_callbacks_logged_; + uint32_t dummy_wr_; + uint32_t dummy_rd_; + uint8_t dummy_buff_[1024]; +}; + +TEST_F(Test_legacy_auto_check_sbp_ssr_MsgSsrSatelliteApc0, Test) { + uint8_t encoded_frame[] = { + 85, 5, 6, 0, 0, 41, 127, 58, 9, 0, 174, 8, 1, + 2, 3, 2, 0, 4, 61, 0, 1, 0, 255, 255, 217, 2, + 11, 10, 8, 5, 1, 252, 248, 246, 246, 246, 249, 252, 0, + 6, 12, 22, 30, 41, 41, 41, 41, 144, 161, + }; + + uint8_t test_msg_storage[SBP_MAX_PAYLOAD_LEN]{}; + uint8_t test_msg_len = 0; + msg_ssr_satellite_apc_t *test_msg = + (msg_ssr_satellite_apc_t *)test_msg_storage; + test_msg_len = (uint8_t)sizeof(*test_msg); + if (sizeof(test_msg->apc) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0])); + } + if (sizeof(test_msg->apc[0].pco) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pco[0])); + } + test_msg->apc[0].pco[0] = 1; + if (sizeof(test_msg->apc[0].pco) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pco[0])); + } + test_msg->apc[0].pco[1] = -1; + if (sizeof(test_msg->apc[0].pco) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pco[0])); + } + test_msg->apc[0].pco[2] = 729; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[0] = 11; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[1] = 10; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[2] = 8; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[3] = 5; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[4] = 1; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[5] = -4; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[6] = -8; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[7] = -10; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[8] = -10; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[9] = -10; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[10] = -7; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[11] = -4; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[12] = 0; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[13] = 6; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[14] = 12; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[15] = 22; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[16] = 30; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[17] = 41; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[18] = 41; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[19] = 41; + if (sizeof(test_msg->apc[0].pcv) == 0) { + // Cope with variable length arrays + test_msg_len = (uint8_t)(test_msg_len + sizeof(test_msg->apc[0].pcv[0])); + } + test_msg->apc[0].pcv[20] = 41; + test_msg->apc[0].sat_info = 4; + test_msg->apc[0].sid.code = 0; + test_msg->apc[0].sid.sat = 2; + test_msg->apc[0].svn = 61; + test_msg->iod_ssr = 3; + test_msg->sol_id = 2; + test_msg->time.tow = 604799; + test_msg->time.wn = 2222; + test_msg->update_interval = 1; + + EXPECT_EQ(send_message(0x605, 0, test_msg_len, test_msg_storage), SBP_OK); + + EXPECT_EQ(dummy_wr_, sizeof(encoded_frame)); + EXPECT_EQ(memcmp(dummy_buff_, encoded_frame, sizeof(encoded_frame)), 0); + + while (dummy_rd_ < dummy_wr_) { + process(); + } + + EXPECT_EQ(n_callbacks_logged_, 1); + EXPECT_EQ(last_sender_id_, 0); + EXPECT_EQ(last_msg_len_, test_msg_len); + EXPECT_EQ(last_msg_->apc[0].pco[0], 1) + << "incorrect value for apc[0].pco[0], expected 1, is " + << last_msg_->apc[0].pco[0]; + EXPECT_EQ(last_msg_->apc[0].pco[1], -1) + << "incorrect value for apc[0].pco[1], expected -1, is " + << last_msg_->apc[0].pco[1]; + EXPECT_EQ(last_msg_->apc[0].pco[2], 729) + << "incorrect value for apc[0].pco[2], expected 729, is " + << last_msg_->apc[0].pco[2]; + EXPECT_EQ(last_msg_->apc[0].pcv[0], 11) + << "incorrect value for apc[0].pcv[0], expected 11, is " + << last_msg_->apc[0].pcv[0]; + EXPECT_EQ(last_msg_->apc[0].pcv[1], 10) + << "incorrect value for apc[0].pcv[1], expected 10, is " + << last_msg_->apc[0].pcv[1]; + EXPECT_EQ(last_msg_->apc[0].pcv[2], 8) + << "incorrect value for apc[0].pcv[2], expected 8, is " + << last_msg_->apc[0].pcv[2]; + EXPECT_EQ(last_msg_->apc[0].pcv[3], 5) + << "incorrect value for apc[0].pcv[3], expected 5, is " + << last_msg_->apc[0].pcv[3]; + EXPECT_EQ(last_msg_->apc[0].pcv[4], 1) + << "incorrect value for apc[0].pcv[4], expected 1, is " + << last_msg_->apc[0].pcv[4]; + EXPECT_EQ(last_msg_->apc[0].pcv[5], -4) + << "incorrect value for apc[0].pcv[5], expected -4, is " + << last_msg_->apc[0].pcv[5]; + EXPECT_EQ(last_msg_->apc[0].pcv[6], -8) + << "incorrect value for apc[0].pcv[6], expected -8, is " + << last_msg_->apc[0].pcv[6]; + EXPECT_EQ(last_msg_->apc[0].pcv[7], -10) + << "incorrect value for apc[0].pcv[7], expected -10, is " + << last_msg_->apc[0].pcv[7]; + EXPECT_EQ(last_msg_->apc[0].pcv[8], -10) + << "incorrect value for apc[0].pcv[8], expected -10, is " + << last_msg_->apc[0].pcv[8]; + EXPECT_EQ(last_msg_->apc[0].pcv[9], -10) + << "incorrect value for apc[0].pcv[9], expected -10, is " + << last_msg_->apc[0].pcv[9]; + EXPECT_EQ(last_msg_->apc[0].pcv[10], -7) + << "incorrect value for apc[0].pcv[10], expected -7, is " + << last_msg_->apc[0].pcv[10]; + EXPECT_EQ(last_msg_->apc[0].pcv[11], -4) + << "incorrect value for apc[0].pcv[11], expected -4, is " + << last_msg_->apc[0].pcv[11]; + EXPECT_EQ(last_msg_->apc[0].pcv[12], 0) + << "incorrect value for apc[0].pcv[12], expected 0, is " + << last_msg_->apc[0].pcv[12]; + EXPECT_EQ(last_msg_->apc[0].pcv[13], 6) + << "incorrect value for apc[0].pcv[13], expected 6, is " + << last_msg_->apc[0].pcv[13]; + EXPECT_EQ(last_msg_->apc[0].pcv[14], 12) + << "incorrect value for apc[0].pcv[14], expected 12, is " + << last_msg_->apc[0].pcv[14]; + EXPECT_EQ(last_msg_->apc[0].pcv[15], 22) + << "incorrect value for apc[0].pcv[15], expected 22, is " + << last_msg_->apc[0].pcv[15]; + EXPECT_EQ(last_msg_->apc[0].pcv[16], 30) + << "incorrect value for apc[0].pcv[16], expected 30, is " + << last_msg_->apc[0].pcv[16]; + EXPECT_EQ(last_msg_->apc[0].pcv[17], 41) + << "incorrect value for apc[0].pcv[17], expected 41, is " + << last_msg_->apc[0].pcv[17]; + EXPECT_EQ(last_msg_->apc[0].pcv[18], 41) + << "incorrect value for apc[0].pcv[18], expected 41, is " + << last_msg_->apc[0].pcv[18]; + EXPECT_EQ(last_msg_->apc[0].pcv[19], 41) + << "incorrect value for apc[0].pcv[19], expected 41, is " + << last_msg_->apc[0].pcv[19]; + EXPECT_EQ(last_msg_->apc[0].pcv[20], 41) + << "incorrect value for apc[0].pcv[20], expected 41, is " + << last_msg_->apc[0].pcv[20]; + EXPECT_EQ(last_msg_->apc[0].sat_info, 4) + << "incorrect value for apc[0].sat_info, expected 4, is " + << last_msg_->apc[0].sat_info; + EXPECT_EQ(last_msg_->apc[0].sid.code, 0) + << "incorrect value for apc[0].sid.code, expected 0, is " + << last_msg_->apc[0].sid.code; + EXPECT_EQ(last_msg_->apc[0].sid.sat, 2) + << "incorrect value for apc[0].sid.sat, expected 2, is " + << last_msg_->apc[0].sid.sat; + EXPECT_EQ(last_msg_->apc[0].svn, 61) + << "incorrect value for apc[0].svn, expected 61, is " + << last_msg_->apc[0].svn; + EXPECT_EQ(last_msg_->iod_ssr, 3) + << "incorrect value for iod_ssr, expected 3, is " << last_msg_->iod_ssr; + EXPECT_EQ(last_msg_->sol_id, 2) + << "incorrect value for sol_id, expected 2, is " << last_msg_->sol_id; + EXPECT_EQ(last_msg_->time.tow, 604799) + << "incorrect value for time.tow, expected 604799, is " + << last_msg_->time.tow; + EXPECT_EQ(last_msg_->time.wn, 2222) + << "incorrect value for time.wn, expected 2222, is " + << last_msg_->time.wn; + EXPECT_EQ(last_msg_->update_interval, 1) + << "incorrect value for update_interval, expected 1, is " + << last_msg_->update_interval; +} diff --git a/c/test/legacy/cpp/auto_check_sbp_ssr_MsgSsrTileDefinition.cc b/c/test/legacy/cpp/auto_check_sbp_ssr_MsgSsrTileDefinition.cc index 850314925b..2c03db7f7b 100644 --- a/c/test/legacy/cpp/auto_check_sbp_ssr_MsgSsrTileDefinition.cc +++ b/c/test/legacy/cpp/auto_check_sbp_ssr_MsgSsrTileDefinition.cc @@ -79,8 +79,9 @@ class Test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinition0 TEST_F(Test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinition0, Test) { uint8_t encoded_frame[] = { - 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, - 0, 32, 0, 64, 0, 128, 210, 2, 150, 73, 0, 0, 0, 0, 214, 71, + 85, 248, 5, 0, 0, 33, 127, 58, 9, 0, 174, 8, 1, 2, + 3, 4, 0, 5, 0, 186, 28, 59, 167, 100, 0, 100, 0, 6, + 0, 6, 0, 210, 2, 150, 73, 0, 0, 0, 0, 204, 94, }; uint8_t test_msg_storage[SBP_MAX_PAYLOAD_LEN]{}; @@ -89,17 +90,21 @@ TEST_F(Test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinition0, Test) { (msg_ssr_tile_definition_t *)test_msg_storage; test_msg_len = (uint8_t)sizeof(*test_msg); test_msg->bitmask = 1234567890; - test_msg->cols = 32768; - test_msg->corner_nw_lat = 1024; - test_msg->corner_nw_lon = 2048; - test_msg->rows = 16384; - test_msg->spacing_lat = 4096; - test_msg->spacing_lon = 8192; - test_msg->ssr_sol_id = 31; - test_msg->tile_id = 512; - test_msg->tile_set_id = 256; + test_msg->cols = 6; + test_msg->corner_nw_lat = 7354; + test_msg->corner_nw_lon = -22725; + test_msg->iod_atmo = 3; + test_msg->rows = 6; + test_msg->sol_id = 2; + test_msg->spacing_lat = 100; + test_msg->spacing_lon = 100; + test_msg->tile_id = 5; + test_msg->tile_set_id = 4; + test_msg->time.tow = 604799; + test_msg->time.wn = 2222; + test_msg->update_interval = 1; - EXPECT_EQ(send_message(1527, 66, test_msg_len, test_msg_storage), SBP_OK); + EXPECT_EQ(send_message(0x5F8, 0, test_msg_len, test_msg_storage), SBP_OK); EXPECT_EQ(dummy_wr_, sizeof(encoded_frame)); EXPECT_EQ(memcmp(dummy_buff_, encoded_frame, sizeof(encoded_frame)), 0); @@ -109,33 +114,43 @@ TEST_F(Test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinition0, Test) { } EXPECT_EQ(n_callbacks_logged_, 1); - EXPECT_EQ(last_sender_id_, 66); + EXPECT_EQ(last_sender_id_, 0); EXPECT_EQ(last_msg_len_, test_msg_len); EXPECT_EQ(last_msg_->bitmask, 1234567890) << "incorrect value for bitmask, expected 1234567890, is " << last_msg_->bitmask; - EXPECT_EQ(last_msg_->cols, 32768) - << "incorrect value for cols, expected 32768, is " << last_msg_->cols; - EXPECT_EQ(last_msg_->corner_nw_lat, 1024) - << "incorrect value for corner_nw_lat, expected 1024, is " + EXPECT_EQ(last_msg_->cols, 6) + << "incorrect value for cols, expected 6, is " << last_msg_->cols; + EXPECT_EQ(last_msg_->corner_nw_lat, 7354) + << "incorrect value for corner_nw_lat, expected 7354, is " << last_msg_->corner_nw_lat; - EXPECT_EQ(last_msg_->corner_nw_lon, 2048) - << "incorrect value for corner_nw_lon, expected 2048, is " + EXPECT_EQ(last_msg_->corner_nw_lon, -22725) + << "incorrect value for corner_nw_lon, expected -22725, is " << last_msg_->corner_nw_lon; - EXPECT_EQ(last_msg_->rows, 16384) - << "incorrect value for rows, expected 16384, is " << last_msg_->rows; - EXPECT_EQ(last_msg_->spacing_lat, 4096) - << "incorrect value for spacing_lat, expected 4096, is " + EXPECT_EQ(last_msg_->iod_atmo, 3) + << "incorrect value for iod_atmo, expected 3, is " << last_msg_->iod_atmo; + EXPECT_EQ(last_msg_->rows, 6) + << "incorrect value for rows, expected 6, is " << last_msg_->rows; + EXPECT_EQ(last_msg_->sol_id, 2) + << "incorrect value for sol_id, expected 2, is " << last_msg_->sol_id; + EXPECT_EQ(last_msg_->spacing_lat, 100) + << "incorrect value for spacing_lat, expected 100, is " << last_msg_->spacing_lat; - EXPECT_EQ(last_msg_->spacing_lon, 8192) - << "incorrect value for spacing_lon, expected 8192, is " + EXPECT_EQ(last_msg_->spacing_lon, 100) + << "incorrect value for spacing_lon, expected 100, is " << last_msg_->spacing_lon; - EXPECT_EQ(last_msg_->ssr_sol_id, 31) - << "incorrect value for ssr_sol_id, expected 31, is " - << last_msg_->ssr_sol_id; - EXPECT_EQ(last_msg_->tile_id, 512) - << "incorrect value for tile_id, expected 512, is " << last_msg_->tile_id; - EXPECT_EQ(last_msg_->tile_set_id, 256) - << "incorrect value for tile_set_id, expected 256, is " + EXPECT_EQ(last_msg_->tile_id, 5) + << "incorrect value for tile_id, expected 5, is " << last_msg_->tile_id; + EXPECT_EQ(last_msg_->tile_set_id, 4) + << "incorrect value for tile_set_id, expected 4, is " << last_msg_->tile_set_id; + EXPECT_EQ(last_msg_->time.tow, 604799) + << "incorrect value for time.tow, expected 604799, is " + << last_msg_->time.tow; + EXPECT_EQ(last_msg_->time.wn, 2222) + << "incorrect value for time.wn, expected 2222, is " + << last_msg_->time.wn; + EXPECT_EQ(last_msg_->update_interval, 1) + << "incorrect value for update_interval, expected 1, is " + << last_msg_->update_interval; } diff --git a/c/test/legacy/cpp/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.cc b/c/test/legacy/cpp/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.cc new file mode 100644 index 0000000000..8375ffa30c --- /dev/null +++ b/c/test/legacy/cpp/auto_check_sbp_ssr_MsgSsrTileDefinitionDepB.cc @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2015-2021 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ + +// This file was auto-generated from +// spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinitionDepB.yaml by +// generate.py. Do not modify by hand! + +#include +#include +#include +#include +class Test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB0 + : public ::testing::Test, + public sbp::State, + public sbp::IReader, + public sbp::IWriter, + sbp::PayloadHandler { + public: + Test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB0() + : ::testing::Test(), + sbp::State(), + sbp::IReader(), + sbp::IWriter(), + sbp::PayloadHandler(this), + last_msg_storage_(), + last_msg_(reinterpret_cast( + last_msg_storage_)), + last_msg_len_(), + last_sender_id_(), + n_callbacks_logged_(), + dummy_wr_(), + dummy_rd_(), + dummy_buff_() { + set_reader(this); + set_writer(this); + } + + s32 read(uint8_t *buf, const uint32_t n) override { + uint32_t real_n = n; + memcpy(buf, dummy_buff_ + dummy_rd_, real_n); + dummy_rd_ += real_n; + return (s32)real_n; + } + + s32 write(const uint8_t *buf, uint32_t n) override { + uint32_t real_n = n; + memcpy(dummy_buff_ + dummy_wr_, buf, real_n); + dummy_wr_ += real_n; + return (s32)real_n; + } + + protected: + void handle_sbp_msg(uint16_t sender_id, uint8_t message_length, + const msg_ssr_tile_definition_dep_b_t &msg) override { + memcpy(last_msg_storage_, &msg, message_length); + last_msg_len_ = message_length; + last_sender_id_ = sender_id; + n_callbacks_logged_++; + } + + uint8_t last_msg_storage_[SBP_MAX_PAYLOAD_LEN]; + msg_ssr_tile_definition_dep_b_t *last_msg_; + uint8_t last_msg_len_; + uint16_t last_sender_id_; + size_t n_callbacks_logged_; + uint32_t dummy_wr_; + uint32_t dummy_rd_; + uint8_t dummy_buff_[1024]; +}; + +TEST_F(Test_legacy_auto_check_sbp_ssr_MsgSsrTileDefinitionDepB0, Test) { + uint8_t encoded_frame[] = { + 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, + 0, 32, 0, 64, 0, 128, 210, 2, 150, 73, 0, 0, 0, 0, 214, 71, + }; + + uint8_t test_msg_storage[SBP_MAX_PAYLOAD_LEN]{}; + uint8_t test_msg_len = 0; + msg_ssr_tile_definition_dep_b_t *test_msg = + (msg_ssr_tile_definition_dep_b_t *)test_msg_storage; + test_msg_len = (uint8_t)sizeof(*test_msg); + test_msg->bitmask = 1234567890; + test_msg->cols = 32768; + test_msg->corner_nw_lat = 1024; + test_msg->corner_nw_lon = 2048; + test_msg->rows = 16384; + test_msg->spacing_lat = 4096; + test_msg->spacing_lon = 8192; + test_msg->ssr_sol_id = 31; + test_msg->tile_id = 512; + test_msg->tile_set_id = 256; + + EXPECT_EQ(send_message(1527, 66, test_msg_len, test_msg_storage), SBP_OK); + + EXPECT_EQ(dummy_wr_, sizeof(encoded_frame)); + EXPECT_EQ(memcmp(dummy_buff_, encoded_frame, sizeof(encoded_frame)), 0); + + while (dummy_rd_ < dummy_wr_) { + process(); + } + + EXPECT_EQ(n_callbacks_logged_, 1); + EXPECT_EQ(last_sender_id_, 66); + EXPECT_EQ(last_msg_len_, test_msg_len); + EXPECT_EQ(last_msg_->bitmask, 1234567890) + << "incorrect value for bitmask, expected 1234567890, is " + << last_msg_->bitmask; + EXPECT_EQ(last_msg_->cols, 32768) + << "incorrect value for cols, expected 32768, is " << last_msg_->cols; + EXPECT_EQ(last_msg_->corner_nw_lat, 1024) + << "incorrect value for corner_nw_lat, expected 1024, is " + << last_msg_->corner_nw_lat; + EXPECT_EQ(last_msg_->corner_nw_lon, 2048) + << "incorrect value for corner_nw_lon, expected 2048, is " + << last_msg_->corner_nw_lon; + EXPECT_EQ(last_msg_->rows, 16384) + << "incorrect value for rows, expected 16384, is " << last_msg_->rows; + EXPECT_EQ(last_msg_->spacing_lat, 4096) + << "incorrect value for spacing_lat, expected 4096, is " + << last_msg_->spacing_lat; + EXPECT_EQ(last_msg_->spacing_lon, 8192) + << "incorrect value for spacing_lon, expected 8192, is " + << last_msg_->spacing_lon; + EXPECT_EQ(last_msg_->ssr_sol_id, 31) + << "incorrect value for ssr_sol_id, expected 31, is " + << last_msg_->ssr_sol_id; + EXPECT_EQ(last_msg_->tile_id, 512) + << "incorrect value for tile_id, expected 512, is " << last_msg_->tile_id; + EXPECT_EQ(last_msg_->tile_set_id, 256) + << "incorrect value for tile_set_id, expected 256, is " + << last_msg_->tile_set_id; +} diff --git a/docs/sbp.pdf b/docs/sbp.pdf index b654038044..79d6770e8a 100644 Binary files a/docs/sbp.pdf and b/docs/sbp.pdf differ diff --git a/haskell/src/SwiftNav/SBP/Msg.hs b/haskell/src/SwiftNav/SBP/Msg.hs index bb854b04d1..a6ba33fa79 100644 --- a/haskell/src/SwiftNav/SBP/Msg.hs +++ b/haskell/src/SwiftNav/SBP/Msg.hs @@ -239,11 +239,13 @@ data SBPMsg = | SBPMsgSsrOrbitClockDepA MsgSsrOrbitClockDepA Msg | SBPMsgSsrPhaseBiases MsgSsrPhaseBiases Msg | SBPMsgSsrSatelliteApc MsgSsrSatelliteApc Msg + | SBPMsgSsrSatelliteApcDep MsgSsrSatelliteApcDep Msg | SBPMsgSsrStecCorrection MsgSsrStecCorrection Msg | SBPMsgSsrStecCorrectionDep MsgSsrStecCorrectionDep Msg | SBPMsgSsrStecCorrectionDepA MsgSsrStecCorrectionDepA Msg | SBPMsgSsrTileDefinition MsgSsrTileDefinition Msg - | SBPMsgSsrTileDefinitionDep MsgSsrTileDefinitionDep Msg + | SBPMsgSsrTileDefinitionDepA MsgSsrTileDefinitionDepA Msg + | SBPMsgSsrTileDefinitionDepB MsgSsrTileDefinitionDepB Msg | SBPMsgStartup MsgStartup Msg | SBPMsgStatusJournal MsgStatusJournal Msg | SBPMsgStatusReport MsgStatusReport Msg @@ -476,11 +478,13 @@ instance Binary SBPMsg where | _msgSBPType == msgSsrOrbitClockDepA = SBPMsgSsrOrbitClockDepA (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrPhaseBiases = SBPMsgSsrPhaseBiases (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrSatelliteApc = SBPMsgSsrSatelliteApc (decode (fromStrict (unBytes _msgSBPPayload))) m + | _msgSBPType == msgSsrSatelliteApcDep = SBPMsgSsrSatelliteApcDep (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrStecCorrection = SBPMsgSsrStecCorrection (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrStecCorrectionDep = SBPMsgSsrStecCorrectionDep (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrStecCorrectionDepA = SBPMsgSsrStecCorrectionDepA (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrTileDefinition = SBPMsgSsrTileDefinition (decode (fromStrict (unBytes _msgSBPPayload))) m - | _msgSBPType == msgSsrTileDefinitionDep = SBPMsgSsrTileDefinitionDep (decode (fromStrict (unBytes _msgSBPPayload))) m + | _msgSBPType == msgSsrTileDefinitionDepA = SBPMsgSsrTileDefinitionDepA (decode (fromStrict (unBytes _msgSBPPayload))) m + | _msgSBPType == msgSsrTileDefinitionDepB = SBPMsgSsrTileDefinitionDepB (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgStartup = SBPMsgStartup (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgStatusJournal = SBPMsgStatusJournal (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgStatusReport = SBPMsgStatusReport (decode (fromStrict (unBytes _msgSBPPayload))) m @@ -705,11 +709,13 @@ instance Binary SBPMsg where encoder (SBPMsgSsrOrbitClockDepA _ m) = put m encoder (SBPMsgSsrPhaseBiases _ m) = put m encoder (SBPMsgSsrSatelliteApc _ m) = put m + encoder (SBPMsgSsrSatelliteApcDep _ m) = put m encoder (SBPMsgSsrStecCorrection _ m) = put m encoder (SBPMsgSsrStecCorrectionDep _ m) = put m encoder (SBPMsgSsrStecCorrectionDepA _ m) = put m encoder (SBPMsgSsrTileDefinition _ m) = put m - encoder (SBPMsgSsrTileDefinitionDep _ m) = put m + encoder (SBPMsgSsrTileDefinitionDepA _ m) = put m + encoder (SBPMsgSsrTileDefinitionDepB _ m) = put m encoder (SBPMsgStartup _ m) = put m encoder (SBPMsgStatusJournal _ m) = put m encoder (SBPMsgStatusReport _ m) = put m @@ -938,11 +944,13 @@ instance FromJSON SBPMsg where | msgType == msgSsrOrbitClockDepA = SBPMsgSsrOrbitClockDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrPhaseBiases = SBPMsgSsrPhaseBiases <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrSatelliteApc = SBPMsgSsrSatelliteApc <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj + | msgType == msgSsrSatelliteApcDep = SBPMsgSsrSatelliteApcDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrStecCorrection = SBPMsgSsrStecCorrection <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrStecCorrectionDep = SBPMsgSsrStecCorrectionDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrStecCorrectionDepA = SBPMsgSsrStecCorrectionDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrTileDefinition = SBPMsgSsrTileDefinition <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj - | msgType == msgSsrTileDefinitionDep = SBPMsgSsrTileDefinitionDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj + | msgType == msgSsrTileDefinitionDepA = SBPMsgSsrTileDefinitionDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj + | msgType == msgSsrTileDefinitionDepB = SBPMsgSsrTileDefinitionDepB <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgStartup = SBPMsgStartup <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgStatusJournal = SBPMsgStatusJournal <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgStatusReport = SBPMsgStatusReport <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj @@ -1172,11 +1180,13 @@ instance ToJSON SBPMsg where toJSON (SBPMsgSsrOrbitClockDepA n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrPhaseBiases n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrSatelliteApc n m) = toJSON n <<>> toJSON m + toJSON (SBPMsgSsrSatelliteApcDep n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrStecCorrection n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrStecCorrectionDep n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrStecCorrectionDepA n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrTileDefinition n m) = toJSON n <<>> toJSON m - toJSON (SBPMsgSsrTileDefinitionDep n m) = toJSON n <<>> toJSON m + toJSON (SBPMsgSsrTileDefinitionDepA n m) = toJSON n <<>> toJSON m + toJSON (SBPMsgSsrTileDefinitionDepB n m) = toJSON n <<>> toJSON m toJSON (SBPMsgStartup n m) = toJSON n <<>> toJSON m toJSON (SBPMsgStatusJournal n m) = toJSON n <<>> toJSON m toJSON (SBPMsgStatusReport n m) = toJSON n <<>> toJSON m @@ -1400,11 +1410,13 @@ instance HasMsg SBPMsg where msg f (SBPMsgSsrOrbitClockDepA n m) = SBPMsgSsrOrbitClockDepA n <$> f m msg f (SBPMsgSsrPhaseBiases n m) = SBPMsgSsrPhaseBiases n <$> f m msg f (SBPMsgSsrSatelliteApc n m) = SBPMsgSsrSatelliteApc n <$> f m + msg f (SBPMsgSsrSatelliteApcDep n m) = SBPMsgSsrSatelliteApcDep n <$> f m msg f (SBPMsgSsrStecCorrection n m) = SBPMsgSsrStecCorrection n <$> f m msg f (SBPMsgSsrStecCorrectionDep n m) = SBPMsgSsrStecCorrectionDep n <$> f m msg f (SBPMsgSsrStecCorrectionDepA n m) = SBPMsgSsrStecCorrectionDepA n <$> f m msg f (SBPMsgSsrTileDefinition n m) = SBPMsgSsrTileDefinition n <$> f m - msg f (SBPMsgSsrTileDefinitionDep n m) = SBPMsgSsrTileDefinitionDep n <$> f m + msg f (SBPMsgSsrTileDefinitionDepA n m) = SBPMsgSsrTileDefinitionDepA n <$> f m + msg f (SBPMsgSsrTileDefinitionDepB n m) = SBPMsgSsrTileDefinitionDepB n <$> f m msg f (SBPMsgStartup n m) = SBPMsgStartup n <$> f m msg f (SBPMsgStatusJournal n m) = SBPMsgStatusJournal n <$> f m msg f (SBPMsgStatusReport n m) = SBPMsgStatusReport n <$> f m diff --git a/haskell/src/SwiftNav/SBP/Ssr.hs b/haskell/src/SwiftNav/SBP/Ssr.hs index 83ae5317ff..88b226d200 100644 --- a/haskell/src/SwiftNav/SBP/Ssr.hs +++ b/haskell/src/SwiftNav/SBP/Ssr.hs @@ -759,10 +759,10 @@ $(makeSBP 'msgSsrGriddedCorrectionBounds ''MsgSsrGriddedCorrectionBounds) $(makeJSON "_msgSsrGriddedCorrectionBounds_" ''MsgSsrGriddedCorrectionBounds) $(makeLenses ''MsgSsrGriddedCorrectionBounds) -msgSsrTileDefinitionDep :: Word16 -msgSsrTileDefinitionDep = 0x05F6 +msgSsrTileDefinitionDepA :: Word16 +msgSsrTileDefinitionDepA = 0x05F6 --- | SBP class for message MSG_SSR_TILE_DEFINITION_DEP (0x05F6). +-- | SBP class for message MSG_SSR_TILE_DEFINITION_DEP_A (0x05F6). -- -- Provides the correction point coordinates for the atmospheric correction -- values in the MSG_SSR_STEC_CORRECTION_DEP and MSG_SSR_GRIDDED_CORRECTION @@ -771,13 +771,13 @@ msgSsrTileDefinitionDep = 0x05F6 -- Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information -- element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of -- correction points, not lists of points. -data MsgSsrTileDefinitionDep = MsgSsrTileDefinitionDep - { _msgSsrTileDefinitionDep_tile_set_id :: !Word16 +data MsgSsrTileDefinitionDepA = MsgSsrTileDefinitionDepA + { _msgSsrTileDefinitionDepA_tile_set_id :: !Word16 -- ^ Unique identifier of the tile set this tile belongs to. - , _msgSsrTileDefinitionDep_tile_id :: !Word16 + , _msgSsrTileDefinitionDepA_tile_id :: !Word16 -- ^ Unique identifier of this tile in the tile set. -- See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID. - , _msgSsrTileDefinitionDep_corner_nw_lat :: !Int16 + , _msgSsrTileDefinitionDepA_corner_nw_lat :: !Int16 -- ^ North-West corner correction point latitude. -- -- The relation between the latitude X in the range [-90, 90] and the @@ -786,7 +786,7 @@ data MsgSsrTileDefinitionDep = MsgSsrTileDefinitionDep -- N = floor((X / 90) * 2^14) -- -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude. - , _msgSsrTileDefinitionDep_corner_nw_lon :: !Int16 + , _msgSsrTileDefinitionDepA_corner_nw_lon :: !Int16 -- ^ North-West corner correction point longitude. -- -- The relation between the longitude X in the range [-180, 180] and the @@ -795,23 +795,23 @@ data MsgSsrTileDefinitionDep = MsgSsrTileDefinitionDep -- N = floor((X / 180) * 2^15) -- -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude. - , _msgSsrTileDefinitionDep_spacing_lat :: !Word16 + , _msgSsrTileDefinitionDepA_spacing_lat :: !Word16 -- ^ Spacing of the correction points in the latitude direction. -- -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude. - , _msgSsrTileDefinitionDep_spacing_lon :: !Word16 + , _msgSsrTileDefinitionDepA_spacing_lon :: !Word16 -- ^ Spacing of the correction points in the longitude direction. -- -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude. - , _msgSsrTileDefinitionDep_rows :: !Word16 + , _msgSsrTileDefinitionDepA_rows :: !Word16 -- ^ Number of steps in the latitude direction. -- -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude. - , _msgSsrTileDefinitionDep_cols :: !Word16 + , _msgSsrTileDefinitionDepA_cols :: !Word16 -- ^ Number of steps in the longitude direction. -- -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude. - , _msgSsrTileDefinitionDep_bitmask :: !Word64 + , _msgSsrTileDefinitionDepA_bitmask :: !Word64 -- ^ Specifies the availability of correction data at the correction points -- in the array. -- @@ -829,38 +829,38 @@ data MsgSsrTileDefinitionDep = MsgSsrTileDefinitionDep -- definition of the bits is inverted. } deriving ( Show, Read, Eq ) -instance Binary MsgSsrTileDefinitionDep where +instance Binary MsgSsrTileDefinitionDepA where get = do - _msgSsrTileDefinitionDep_tile_set_id <- getWord16le - _msgSsrTileDefinitionDep_tile_id <- getWord16le - _msgSsrTileDefinitionDep_corner_nw_lat <- (fromIntegral <$> getWord16le) - _msgSsrTileDefinitionDep_corner_nw_lon <- (fromIntegral <$> getWord16le) - _msgSsrTileDefinitionDep_spacing_lat <- getWord16le - _msgSsrTileDefinitionDep_spacing_lon <- getWord16le - _msgSsrTileDefinitionDep_rows <- getWord16le - _msgSsrTileDefinitionDep_cols <- getWord16le - _msgSsrTileDefinitionDep_bitmask <- getWord64le - pure MsgSsrTileDefinitionDep {..} - - put MsgSsrTileDefinitionDep {..} = do - putWord16le _msgSsrTileDefinitionDep_tile_set_id - putWord16le _msgSsrTileDefinitionDep_tile_id - (putWord16le . fromIntegral) _msgSsrTileDefinitionDep_corner_nw_lat - (putWord16le . fromIntegral) _msgSsrTileDefinitionDep_corner_nw_lon - putWord16le _msgSsrTileDefinitionDep_spacing_lat - putWord16le _msgSsrTileDefinitionDep_spacing_lon - putWord16le _msgSsrTileDefinitionDep_rows - putWord16le _msgSsrTileDefinitionDep_cols - putWord64le _msgSsrTileDefinitionDep_bitmask - -$(makeSBP 'msgSsrTileDefinitionDep ''MsgSsrTileDefinitionDep) -$(makeJSON "_msgSsrTileDefinitionDep_" ''MsgSsrTileDefinitionDep) -$(makeLenses ''MsgSsrTileDefinitionDep) - -msgSsrTileDefinition :: Word16 -msgSsrTileDefinition = 0x05F7 - --- | SBP class for message MSG_SSR_TILE_DEFINITION (0x05F7). + _msgSsrTileDefinitionDepA_tile_set_id <- getWord16le + _msgSsrTileDefinitionDepA_tile_id <- getWord16le + _msgSsrTileDefinitionDepA_corner_nw_lat <- (fromIntegral <$> getWord16le) + _msgSsrTileDefinitionDepA_corner_nw_lon <- (fromIntegral <$> getWord16le) + _msgSsrTileDefinitionDepA_spacing_lat <- getWord16le + _msgSsrTileDefinitionDepA_spacing_lon <- getWord16le + _msgSsrTileDefinitionDepA_rows <- getWord16le + _msgSsrTileDefinitionDepA_cols <- getWord16le + _msgSsrTileDefinitionDepA_bitmask <- getWord64le + pure MsgSsrTileDefinitionDepA {..} + + put MsgSsrTileDefinitionDepA {..} = do + putWord16le _msgSsrTileDefinitionDepA_tile_set_id + putWord16le _msgSsrTileDefinitionDepA_tile_id + (putWord16le . fromIntegral) _msgSsrTileDefinitionDepA_corner_nw_lat + (putWord16le . fromIntegral) _msgSsrTileDefinitionDepA_corner_nw_lon + putWord16le _msgSsrTileDefinitionDepA_spacing_lat + putWord16le _msgSsrTileDefinitionDepA_spacing_lon + putWord16le _msgSsrTileDefinitionDepA_rows + putWord16le _msgSsrTileDefinitionDepA_cols + putWord64le _msgSsrTileDefinitionDepA_bitmask + +$(makeSBP 'msgSsrTileDefinitionDepA ''MsgSsrTileDefinitionDepA) +$(makeJSON "_msgSsrTileDefinitionDepA_" ''MsgSsrTileDefinitionDepA) +$(makeLenses ''MsgSsrTileDefinitionDepA) + +msgSsrTileDefinitionDepB :: Word16 +msgSsrTileDefinitionDepB = 0x05F7 + +-- | SBP class for message MSG_SSR_TILE_DEFINITION_DEP_B (0x05F7). -- -- Provides the correction point coordinates for the atmospheric correction -- values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION @@ -869,15 +869,15 @@ msgSsrTileDefinition = 0x05F7 -- Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information -- element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of -- correction points, not lists of points. -data MsgSsrTileDefinition = MsgSsrTileDefinition - { _msgSsrTileDefinition_ssr_sol_id :: !Word8 +data MsgSsrTileDefinitionDepB = MsgSsrTileDefinitionDepB + { _msgSsrTileDefinitionDepB_ssr_sol_id :: !Word8 -- ^ SSR Solution ID. - , _msgSsrTileDefinition_tile_set_id :: !Word16 + , _msgSsrTileDefinitionDepB_tile_set_id :: !Word16 -- ^ Unique identifier of the tile set this tile belongs to. - , _msgSsrTileDefinition_tile_id :: !Word16 + , _msgSsrTileDefinitionDepB_tile_id :: !Word16 -- ^ Unique identifier of this tile in the tile set. -- See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID. - , _msgSsrTileDefinition_corner_nw_lat :: !Int16 + , _msgSsrTileDefinitionDepB_corner_nw_lat :: !Int16 -- ^ North-West corner correction point latitude. -- -- The relation between the latitude X in the range [-90, 90] and the @@ -886,7 +886,7 @@ data MsgSsrTileDefinition = MsgSsrTileDefinition -- N = floor((X / 90) * 2^14) -- -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude. - , _msgSsrTileDefinition_corner_nw_lon :: !Int16 + , _msgSsrTileDefinitionDepB_corner_nw_lon :: !Int16 -- ^ North-West corner correction point longitude. -- -- The relation between the longitude X in the range [-180, 180] and the @@ -895,23 +895,23 @@ data MsgSsrTileDefinition = MsgSsrTileDefinition -- N = floor((X / 180) * 2^15) -- -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude. - , _msgSsrTileDefinition_spacing_lat :: !Word16 + , _msgSsrTileDefinitionDepB_spacing_lat :: !Word16 -- ^ Spacing of the correction points in the latitude direction. -- -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude. - , _msgSsrTileDefinition_spacing_lon :: !Word16 + , _msgSsrTileDefinitionDepB_spacing_lon :: !Word16 -- ^ Spacing of the correction points in the longitude direction. -- -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude. - , _msgSsrTileDefinition_rows :: !Word16 + , _msgSsrTileDefinitionDepB_rows :: !Word16 -- ^ Number of steps in the latitude direction. -- -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude. - , _msgSsrTileDefinition_cols :: !Word16 + , _msgSsrTileDefinitionDepB_cols :: !Word16 -- ^ Number of steps in the longitude direction. -- -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude. - , _msgSsrTileDefinition_bitmask :: !Word64 + , _msgSsrTileDefinitionDepB_bitmask :: !Word64 -- ^ Specifies the availability of correction data at the correction points -- in the array. -- @@ -929,9 +929,116 @@ data MsgSsrTileDefinition = MsgSsrTileDefinition -- definition of the bits is inverted. } deriving ( Show, Read, Eq ) +instance Binary MsgSsrTileDefinitionDepB where + get = do + _msgSsrTileDefinitionDepB_ssr_sol_id <- getWord8 + _msgSsrTileDefinitionDepB_tile_set_id <- getWord16le + _msgSsrTileDefinitionDepB_tile_id <- getWord16le + _msgSsrTileDefinitionDepB_corner_nw_lat <- (fromIntegral <$> getWord16le) + _msgSsrTileDefinitionDepB_corner_nw_lon <- (fromIntegral <$> getWord16le) + _msgSsrTileDefinitionDepB_spacing_lat <- getWord16le + _msgSsrTileDefinitionDepB_spacing_lon <- getWord16le + _msgSsrTileDefinitionDepB_rows <- getWord16le + _msgSsrTileDefinitionDepB_cols <- getWord16le + _msgSsrTileDefinitionDepB_bitmask <- getWord64le + pure MsgSsrTileDefinitionDepB {..} + + put MsgSsrTileDefinitionDepB {..} = do + putWord8 _msgSsrTileDefinitionDepB_ssr_sol_id + putWord16le _msgSsrTileDefinitionDepB_tile_set_id + putWord16le _msgSsrTileDefinitionDepB_tile_id + (putWord16le . fromIntegral) _msgSsrTileDefinitionDepB_corner_nw_lat + (putWord16le . fromIntegral) _msgSsrTileDefinitionDepB_corner_nw_lon + putWord16le _msgSsrTileDefinitionDepB_spacing_lat + putWord16le _msgSsrTileDefinitionDepB_spacing_lon + putWord16le _msgSsrTileDefinitionDepB_rows + putWord16le _msgSsrTileDefinitionDepB_cols + putWord64le _msgSsrTileDefinitionDepB_bitmask + +$(makeSBP 'msgSsrTileDefinitionDepB ''MsgSsrTileDefinitionDepB) +$(makeJSON "_msgSsrTileDefinitionDepB_" ''MsgSsrTileDefinitionDepB) +$(makeLenses ''MsgSsrTileDefinitionDepB) + +msgSsrTileDefinition :: Word16 +msgSsrTileDefinition = 0x05F8 + +-- | SBP class for message MSG_SSR_TILE_DEFINITION (0x05F8). +-- +-- Provides the correction point coordinates for the atmospheric correction +-- values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION +-- messages. +-- +-- Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information +-- element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of +-- correction points, not lists of points. +data MsgSsrTileDefinition = MsgSsrTileDefinition + { _msgSsrTileDefinition_time :: !GpsTimeSec + -- ^ GNSS reference time of the correction + , _msgSsrTileDefinition_update_interval :: !Word8 + -- ^ Update interval between consecutive corrections. Encoded following RTCM + -- DF391 specification. + , _msgSsrTileDefinition_sol_id :: !Word8 + -- ^ SSR Solution ID. Similar to RTCM DF415. + , _msgSsrTileDefinition_iod_atmo :: !Word8 + -- ^ IOD of the SSR atmospheric correction. + , _msgSsrTileDefinition_tile_set_id :: !Word16 + -- ^ Unique identifier of the tile set this tile belongs to. + , _msgSsrTileDefinition_tile_id :: !Word16 + -- ^ Unique identifier of this tile in the tile set. + -- See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID. + , _msgSsrTileDefinition_corner_nw_lat :: !Int16 + -- ^ North-West corner correction point latitude. + -- + -- The relation between the latitude X in the range [-90, 90] and the + -- coded number N is: N = floor((X / 90) * 2^14) + -- + -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude. + , _msgSsrTileDefinition_corner_nw_lon :: !Int16 + -- ^ North-West corner correction point longitude. + -- + -- The relation between the longitude X in the range [-180, 180] and the + -- coded number N is: N = floor((X / 180) * 2^15) + -- + -- See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude. + , _msgSsrTileDefinition_spacing_lat :: !Word16 + -- ^ Spacing of the correction points in the latitude direction. + -- + -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude. + , _msgSsrTileDefinition_spacing_lon :: !Word16 + -- ^ Spacing of the correction points in the longitude direction. + -- + -- See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude. + , _msgSsrTileDefinition_rows :: !Word16 + -- ^ Number of steps in the latitude direction. + -- + -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude. + , _msgSsrTileDefinition_cols :: !Word16 + -- ^ Number of steps in the longitude direction. + -- + -- See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude. + , _msgSsrTileDefinition_bitmask :: !Word64 + -- ^ Specifies the absence of correction data at the correction points in + -- the array (grid). + -- + -- Only the first rows * cols bits are used, and if a specific bit is + -- enabled (set to 1), the correction is not available. If there are more + -- than 64 correction points the remaining corrections are always + -- available. + -- + -- The correction points are packed by rows, starting with the northwest + -- corner of the array (top-left on a north oriented map), with each row + -- spanning west to east, ending with the southeast corner of the array. + -- + -- See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the + -- definition of the bits is inverted. + } deriving ( Show, Read, Eq ) + instance Binary MsgSsrTileDefinition where get = do - _msgSsrTileDefinition_ssr_sol_id <- getWord8 + _msgSsrTileDefinition_time <- get + _msgSsrTileDefinition_update_interval <- getWord8 + _msgSsrTileDefinition_sol_id <- getWord8 + _msgSsrTileDefinition_iod_atmo <- getWord8 _msgSsrTileDefinition_tile_set_id <- getWord16le _msgSsrTileDefinition_tile_id <- getWord16le _msgSsrTileDefinition_corner_nw_lat <- (fromIntegral <$> getWord16le) @@ -944,7 +1051,10 @@ instance Binary MsgSsrTileDefinition where pure MsgSsrTileDefinition {..} put MsgSsrTileDefinition {..} = do - putWord8 _msgSsrTileDefinition_ssr_sol_id + put _msgSsrTileDefinition_time + putWord8 _msgSsrTileDefinition_update_interval + putWord8 _msgSsrTileDefinition_sol_id + putWord8 _msgSsrTileDefinition_iod_atmo putWord16le _msgSsrTileDefinition_tile_set_id putWord16le _msgSsrTileDefinition_tile_id (putWord16le . fromIntegral) _msgSsrTileDefinition_corner_nw_lat @@ -998,20 +1108,58 @@ instance Binary SatelliteAPC where $(makeJSON "_satelliteAPC_" ''SatelliteAPC) $(makeLenses ''SatelliteAPC) +msgSsrSatelliteApcDep :: Word16 +msgSsrSatelliteApcDep = 0x0604 + +data MsgSsrSatelliteApcDep = MsgSsrSatelliteApcDep + { _msgSsrSatelliteApcDep_apc :: ![SatelliteAPC] + -- ^ Satellite antenna phase center corrections + } deriving ( Show, Read, Eq ) + +instance Binary MsgSsrSatelliteApcDep where + get = do + _msgSsrSatelliteApcDep_apc <- whileM (not <$> isEmpty) get + pure MsgSsrSatelliteApcDep {..} + + put MsgSsrSatelliteApcDep {..} = do + mapM_ put _msgSsrSatelliteApcDep_apc + +$(makeSBP 'msgSsrSatelliteApcDep ''MsgSsrSatelliteApcDep) +$(makeJSON "_msgSsrSatelliteApcDep_" ''MsgSsrSatelliteApcDep) +$(makeLenses ''MsgSsrSatelliteApcDep) + msgSsrSatelliteApc :: Word16 -msgSsrSatelliteApc = 0x0604 +msgSsrSatelliteApc = 0x0605 data MsgSsrSatelliteApc = MsgSsrSatelliteApc - { _msgSsrSatelliteApc_apc :: ![SatelliteAPC] + { _msgSsrSatelliteApc_time :: !GpsTimeSec + -- ^ GNSS reference time of the correction + , _msgSsrSatelliteApc_update_interval :: !Word8 + -- ^ Update interval between consecutive corrections. Encoded following RTCM + -- DF391 specification. + , _msgSsrSatelliteApc_sol_id :: !Word8 + -- ^ SSR Solution ID. Similar to RTCM DF415. + , _msgSsrSatelliteApc_iod_ssr :: !Word8 + -- ^ IOD of the SSR correction. A change of Issue Of Data SSR is used to + -- indicate a change in the SSR generating configuration + , _msgSsrSatelliteApc_apc :: ![SatelliteAPC] -- ^ Satellite antenna phase center corrections } deriving ( Show, Read, Eq ) instance Binary MsgSsrSatelliteApc where get = do + _msgSsrSatelliteApc_time <- get + _msgSsrSatelliteApc_update_interval <- getWord8 + _msgSsrSatelliteApc_sol_id <- getWord8 + _msgSsrSatelliteApc_iod_ssr <- getWord8 _msgSsrSatelliteApc_apc <- whileM (not <$> isEmpty) get pure MsgSsrSatelliteApc {..} put MsgSsrSatelliteApc {..} = do + put _msgSsrSatelliteApc_time + putWord8 _msgSsrSatelliteApc_update_interval + putWord8 _msgSsrSatelliteApc_sol_id + putWord8 _msgSsrSatelliteApc_iod_ssr mapM_ put _msgSsrSatelliteApc_apc $(makeSBP 'msgSsrSatelliteApc ''MsgSsrSatelliteApc) diff --git a/java/src/com/swiftnav/sbp/client/MessageTable.java b/java/src/com/swiftnav/sbp/client/MessageTable.java index 72311f7b63..75f6ed268a 100644 --- a/java/src/com/swiftnav/sbp/client/MessageTable.java +++ b/java/src/com/swiftnav/sbp/client/MessageTable.java @@ -207,11 +207,13 @@ import com.swiftnav.sbp.ssr.MsgSsrOrbitClockDepA; import com.swiftnav.sbp.ssr.MsgSsrPhaseBiases; import com.swiftnav.sbp.ssr.MsgSsrSatelliteApc; +import com.swiftnav.sbp.ssr.MsgSsrSatelliteApcDep; import com.swiftnav.sbp.ssr.MsgSsrStecCorrection; import com.swiftnav.sbp.ssr.MsgSsrStecCorrectionDep; import com.swiftnav.sbp.ssr.MsgSsrStecCorrectionDepA; import com.swiftnav.sbp.ssr.MsgSsrTileDefinition; -import com.swiftnav.sbp.ssr.MsgSsrTileDefinitionDep; +import com.swiftnav.sbp.ssr.MsgSsrTileDefinitionDepA; +import com.swiftnav.sbp.ssr.MsgSsrTileDefinitionDepB; import com.swiftnav.sbp.system.MsgCsacTelemetry; import com.swiftnav.sbp.system.MsgCsacTelemetryLabels; import com.swiftnav.sbp.system.MsgDgnssStatus; @@ -617,10 +619,14 @@ static SBPMessage dispatch(SBPMessage msg) throws SBPBinaryException { return new MsgSsrGriddedCorrection(msg); case MsgSsrGriddedCorrectionBounds.TYPE: return new MsgSsrGriddedCorrectionBounds(msg); - case MsgSsrTileDefinitionDep.TYPE: - return new MsgSsrTileDefinitionDep(msg); + case MsgSsrTileDefinitionDepA.TYPE: + return new MsgSsrTileDefinitionDepA(msg); + case MsgSsrTileDefinitionDepB.TYPE: + return new MsgSsrTileDefinitionDepB(msg); case MsgSsrTileDefinition.TYPE: return new MsgSsrTileDefinition(msg); + case MsgSsrSatelliteApcDep.TYPE: + return new MsgSsrSatelliteApcDep(msg); case MsgSsrSatelliteApc.TYPE: return new MsgSsrSatelliteApc(msg); case MsgSsrOrbitClockDepA.TYPE: diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrSatelliteApc.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrSatelliteApc.java index 290c3ffe65..d6806dd67e 100644 --- a/java/src/com/swiftnav/sbp/ssr/MsgSsrSatelliteApc.java +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrSatelliteApc.java @@ -21,7 +21,24 @@ import org.json.JSONObject; public class MsgSsrSatelliteApc extends SBPMessage { - public static final int TYPE = 0x0604; + public static final int TYPE = 0x0605; + + /** GNSS reference time of the correction */ + public GPSTimeSec time; + + /** + * Update interval between consecutive corrections. Encoded following RTCM DF391 specification. + */ + public int update_interval; + + /** SSR Solution ID. Similar to RTCM DF415. */ + public int sol_id; + + /** + * IOD of the SSR correction. A change of Issue Of Data SSR is used to indicate a change in the + * SSR generating configuration + */ + public int iod_ssr; /** Satellite antenna phase center corrections */ public SatelliteAPC[] apc; @@ -38,23 +55,35 @@ public MsgSsrSatelliteApc(SBPMessage msg) throws SBPBinaryException { super(msg); if (msg.type != TYPE) throw new SBPBinaryException( - "Type mismatch for MsgSsrSatelliteApc, expected 1540, actual " + msg.type); + "Type mismatch for MsgSsrSatelliteApc, expected 1541, actual " + msg.type); } @Override protected void parse(Parser parser) throws SBPBinaryException { /* Parse fields from binary */ + time = new GPSTimeSec().parse(parser); + update_interval = parser.getU8(); + sol_id = parser.getU8(); + iod_ssr = parser.getU8(); apc = parser.getArray(SatelliteAPC.class); } @Override protected void build(Builder builder) { + time.build(builder); + builder.putU8(update_interval); + builder.putU8(sol_id); + builder.putU8(iod_ssr); builder.putArray(apc); } @Override public JSONObject toJSON() { JSONObject obj = super.toJSON(); + obj.put("time", time.toJSON()); + obj.put("update_interval", update_interval); + obj.put("sol_id", sol_id); + obj.put("iod_ssr", iod_ssr); obj.put("apc", SBPStruct.toJSONArray(apc)); return obj; } diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrSatelliteApcDep.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrSatelliteApcDep.java new file mode 100644 index 0000000000..23df92b561 --- /dev/null +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrSatelliteApcDep.java @@ -0,0 +1,66 @@ +/* Copyright (C) 2015-2022 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ +package com.swiftnav.sbp.ssr; + +// This file was auto-generated from yaml/swiftnav/sbp/ssr.yaml by generate.py. +// Do not modify by hand! + + +import com.swiftnav.sbp.SBPBinaryException; +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.SBPStruct; +import com.swiftnav.sbp.gnss.*; +import org.json.JSONObject; + +public class MsgSsrSatelliteApcDep extends SBPMessage { + public static final int TYPE = 0x0604; + + /** Satellite antenna phase center corrections */ + public SatelliteAPC[] apc; + + public MsgSsrSatelliteApcDep(int sender) { + super(sender, TYPE); + } + + public MsgSsrSatelliteApcDep() { + super(TYPE); + } + + public MsgSsrSatelliteApcDep(SBPMessage msg) throws SBPBinaryException { + super(msg); + if (msg.type != TYPE) + throw new SBPBinaryException( + "Type mismatch for MsgSsrSatelliteApcDep, expected 1540, actual " + msg.type); + } + + @Override + protected void parse(Parser parser) throws SBPBinaryException { + /* Parse fields from binary */ + apc = parser.getArray(SatelliteAPC.class); + } + + @Override + protected void build(Builder builder) { + builder.putArray(apc); + } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + obj.put("apc", SBPStruct.toJSONArray(apc)); + return obj; + } + + @Override + public String getFriendlyName() { + return "SSR SATELLITE APC DEP"; + } +} diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinition.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinition.java index 91672bf8bc..0fb0ad4dfc 100644 --- a/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinition.java +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinition.java @@ -21,7 +21,7 @@ import org.json.JSONObject; /** - * SBP class for message MSG_SSR_TILE_DEFINITION (0x05F7). + * SBP class for message MSG_SSR_TILE_DEFINITION (0x05F8). * *

You can have MSG_SSR_TILE_DEFINITION inherent its fields directly from an inherited SBP * object, or construct it inline using a dict of its fields. @@ -34,10 +34,21 @@ * points. */ public class MsgSsrTileDefinition extends SBPMessage { - public static final int TYPE = 0x05F7; + public static final int TYPE = 0x05F8; - /** SSR Solution ID. */ - public int ssr_sol_id; + /** GNSS reference time of the correction */ + public GPSTimeSec time; + + /** + * Update interval between consecutive corrections. Encoded following RTCM DF391 specification. + */ + public int update_interval; + + /** SSR Solution ID. Similar to RTCM DF415. */ + public int sol_id; + + /** IOD of the SSR atmospheric correction. */ + public int iod_atmo; /** Unique identifier of the tile set this tile belongs to. */ public int tile_set_id; @@ -51,9 +62,8 @@ public class MsgSsrTileDefinition extends SBPMessage { /** * North-West corner correction point latitude. * - *

The relation between the latitude X in the range [-90, 90] and the coded number N is: - * - *

N = floor((X / 90) * 2^14) + *

The relation between the latitude X in the range [-90, 90] and the coded number N is: N = + * floor((X / 90) * 2^14) * *

See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude. */ @@ -62,9 +72,8 @@ public class MsgSsrTileDefinition extends SBPMessage { /** * North-West corner correction point longitude. * - *

The relation between the longitude X in the range [-180, 180] and the coded number N is: - * - *

N = floor((X / 180) * 2^15) + *

The relation between the longitude X in the range [-180, 180] and the coded number N is: N + * = floor((X / 180) * 2^15) * *

See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude. */ @@ -99,15 +108,15 @@ public class MsgSsrTileDefinition extends SBPMessage { public int cols; /** - * Specifies the availability of correction data at the correction points in the array. + * Specifies the absence of correction data at the correction points in the array (grid). * - *

If a specific bit is enabled (set to 1), the correction is not available. Only the first - * rows * cols bits are used, the remainder are set to 0. If there are more then 64 correction - * points the remaining corrections are always available. + *

Only the first rows * cols bits are used, and if a specific bit is enabled (set to 1), the + * correction is not available. If there are more than 64 correction points the remaining + * corrections are always available. * - *

Starting with the northwest corner of the array (top left on a north oriented map) the - * correction points are enumerated with row precedence - first row west to east, second row - * west to east, until last row west to east - ending with the southeast corner of the array. + *

The correction points are packed by rows, starting with the northwest corner of the array + * (top-left on a north oriented map), with each row spanning west to east, ending with the + * southeast corner of the array. * *

See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the definition of the * bits is inverted. @@ -126,13 +135,16 @@ public MsgSsrTileDefinition(SBPMessage msg) throws SBPBinaryException { super(msg); if (msg.type != TYPE) throw new SBPBinaryException( - "Type mismatch for MsgSsrTileDefinition, expected 1527, actual " + msg.type); + "Type mismatch for MsgSsrTileDefinition, expected 1528, actual " + msg.type); } @Override protected void parse(Parser parser) throws SBPBinaryException { /* Parse fields from binary */ - ssr_sol_id = parser.getU8(); + time = new GPSTimeSec().parse(parser); + update_interval = parser.getU8(); + sol_id = parser.getU8(); + iod_atmo = parser.getU8(); tile_set_id = parser.getU16(); tile_id = parser.getU16(); corner_nw_lat = parser.getS16(); @@ -146,7 +158,10 @@ protected void parse(Parser parser) throws SBPBinaryException { @Override protected void build(Builder builder) { - builder.putU8(ssr_sol_id); + time.build(builder); + builder.putU8(update_interval); + builder.putU8(sol_id); + builder.putU8(iod_atmo); builder.putU16(tile_set_id); builder.putU16(tile_id); builder.putS16(corner_nw_lat); @@ -161,7 +176,10 @@ protected void build(Builder builder) { @Override public JSONObject toJSON() { JSONObject obj = super.toJSON(); - obj.put("ssr_sol_id", ssr_sol_id); + obj.put("time", time.toJSON()); + obj.put("update_interval", update_interval); + obj.put("sol_id", sol_id); + obj.put("iod_atmo", iod_atmo); obj.put("tile_set_id", tile_set_id); obj.put("tile_id", tile_id); obj.put("corner_nw_lat", corner_nw_lat); diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinitionDep.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinitionDepA.java similarity index 90% rename from java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinitionDep.java rename to java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinitionDepA.java index 66658017d1..f3d8cf2a81 100644 --- a/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinitionDep.java +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinitionDepA.java @@ -21,9 +21,9 @@ import org.json.JSONObject; /** - * SBP class for message MSG_SSR_TILE_DEFINITION_DEP (0x05F6). + * SBP class for message MSG_SSR_TILE_DEFINITION_DEP_A (0x05F6). * - *

You can have MSG_SSR_TILE_DEFINITION_DEP inherent its fields directly from an inherited SBP + *

You can have MSG_SSR_TILE_DEFINITION_DEP_A inherent its fields directly from an inherited SBP * object, or construct it inline using a dict of its fields. * *

Provides the correction point coordinates for the atmospheric correction values in the @@ -33,7 +33,7 @@ * GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of correction points, not lists of * points. */ -public class MsgSsrTileDefinitionDep extends SBPMessage { +public class MsgSsrTileDefinitionDepA extends SBPMessage { public static final int TYPE = 0x05F6; /** Unique identifier of the tile set this tile belongs to. */ @@ -111,19 +111,20 @@ public class MsgSsrTileDefinitionDep extends SBPMessage { */ public BigInteger bitmask; - public MsgSsrTileDefinitionDep(int sender) { + public MsgSsrTileDefinitionDepA(int sender) { super(sender, TYPE); } - public MsgSsrTileDefinitionDep() { + public MsgSsrTileDefinitionDepA() { super(TYPE); } - public MsgSsrTileDefinitionDep(SBPMessage msg) throws SBPBinaryException { + public MsgSsrTileDefinitionDepA(SBPMessage msg) throws SBPBinaryException { super(msg); if (msg.type != TYPE) throw new SBPBinaryException( - "Type mismatch for MsgSsrTileDefinitionDep, expected 1526, actual " + msg.type); + "Type mismatch for MsgSsrTileDefinitionDepA, expected 1526, actual " + + msg.type); } @Override @@ -170,6 +171,6 @@ public JSONObject toJSON() { @Override public String getFriendlyName() { - return "SSR TILE DEFINITION DEP"; + return "SSR TILE DEFINITION DEP A"; } } diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinitionDepB.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinitionDepB.java new file mode 100644 index 0000000000..e7463fd5c0 --- /dev/null +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinitionDepB.java @@ -0,0 +1,182 @@ +/* Copyright (C) 2015-2022 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ +package com.swiftnav.sbp.ssr; + +// This file was auto-generated from yaml/swiftnav/sbp/ssr.yaml by generate.py. +// Do not modify by hand! + + +import com.swiftnav.sbp.SBPBinaryException; +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.gnss.*; +import java.math.BigInteger; +import org.json.JSONObject; + +/** + * SBP class for message MSG_SSR_TILE_DEFINITION_DEP_B (0x05F7). + * + *

You can have MSG_SSR_TILE_DEFINITION_DEP_B inherent its fields directly from an inherited SBP + * object, or construct it inline using a dict of its fields. + * + *

Provides the correction point coordinates for the atmospheric correction values in the + * MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION messages. + * + *

Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information element + * GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of correction points, not lists of + * points. + */ +public class MsgSsrTileDefinitionDepB extends SBPMessage { + public static final int TYPE = 0x05F7; + + /** SSR Solution ID. */ + public int ssr_sol_id; + + /** Unique identifier of the tile set this tile belongs to. */ + public int tile_set_id; + + /** + * Unique identifier of this tile in the tile set. See GNSS-SSR-ArrayOfCorrectionPoints field + * correctionPointSetID. + */ + public int tile_id; + + /** + * North-West corner correction point latitude. + * + *

The relation between the latitude X in the range [-90, 90] and the coded number N is: + * + *

N = floor((X / 90) * 2^14) + * + *

See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude. + */ + public int corner_nw_lat; + + /** + * North-West corner correction point longitude. + * + *

The relation between the longitude X in the range [-180, 180] and the coded number N is: + * + *

N = floor((X / 180) * 2^15) + * + *

See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude. + */ + public int corner_nw_lon; + + /** + * Spacing of the correction points in the latitude direction. + * + *

See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude. + */ + public int spacing_lat; + + /** + * Spacing of the correction points in the longitude direction. + * + *

See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude. + */ + public int spacing_lon; + + /** + * Number of steps in the latitude direction. + * + *

See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude. + */ + public int rows; + + /** + * Number of steps in the longitude direction. + * + *

See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude. + */ + public int cols; + + /** + * Specifies the availability of correction data at the correction points in the array. + * + *

If a specific bit is enabled (set to 1), the correction is not available. Only the first + * rows * cols bits are used, the remainder are set to 0. If there are more then 64 correction + * points the remaining corrections are always available. + * + *

Starting with the northwest corner of the array (top left on a north oriented map) the + * correction points are enumerated with row precedence - first row west to east, second row + * west to east, until last row west to east - ending with the southeast corner of the array. + * + *

See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the definition of the + * bits is inverted. + */ + public BigInteger bitmask; + + public MsgSsrTileDefinitionDepB(int sender) { + super(sender, TYPE); + } + + public MsgSsrTileDefinitionDepB() { + super(TYPE); + } + + public MsgSsrTileDefinitionDepB(SBPMessage msg) throws SBPBinaryException { + super(msg); + if (msg.type != TYPE) + throw new SBPBinaryException( + "Type mismatch for MsgSsrTileDefinitionDepB, expected 1527, actual " + + msg.type); + } + + @Override + protected void parse(Parser parser) throws SBPBinaryException { + /* Parse fields from binary */ + ssr_sol_id = parser.getU8(); + tile_set_id = parser.getU16(); + tile_id = parser.getU16(); + corner_nw_lat = parser.getS16(); + corner_nw_lon = parser.getS16(); + spacing_lat = parser.getU16(); + spacing_lon = parser.getU16(); + rows = parser.getU16(); + cols = parser.getU16(); + bitmask = parser.getU64(); + } + + @Override + protected void build(Builder builder) { + builder.putU8(ssr_sol_id); + builder.putU16(tile_set_id); + builder.putU16(tile_id); + builder.putS16(corner_nw_lat); + builder.putS16(corner_nw_lon); + builder.putU16(spacing_lat); + builder.putU16(spacing_lon); + builder.putU16(rows); + builder.putU16(cols); + builder.putU64(bitmask); + } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + obj.put("ssr_sol_id", ssr_sol_id); + obj.put("tile_set_id", tile_set_id); + obj.put("tile_id", tile_id); + obj.put("corner_nw_lat", corner_nw_lat); + obj.put("corner_nw_lon", corner_nw_lon); + obj.put("spacing_lat", spacing_lat); + obj.put("spacing_lon", spacing_lon); + obj.put("rows", rows); + obj.put("cols", cols); + obj.put("bitmask", bitmask); + return obj; + } + + @Override + public String getFriendlyName() { + return "SSR TILE DEFINITION DEP B"; + } +} diff --git a/java/test/auto_check_sbp_ssr_MsgSsrSatelliteApcTest.java b/java/test/auto_check_sbp_ssr_MsgSsrSatelliteApcTest.java new file mode 100644 index 0000000000..f96614e9d1 --- /dev/null +++ b/java/test/auto_check_sbp_ssr_MsgSsrSatelliteApcTest.java @@ -0,0 +1,411 @@ +/* Copyright (C) 2015-2022 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ +package com.swiftnav.sbp.test; + +// This file was auto-generated from spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrSatelliteApc.yaml +// by generate.py. Do not modify by hand! + + +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.ssr.MsgSsrSatelliteApc; +import java.math.BigInteger; +import org.json.JSONObject; +import org.junit.Test; + +public class auto_check_sbp_ssr_MsgSsrSatelliteApcTest { + + public static boolean debug = false; + private static final double DELTA = 1e-15; + + @Test + public void test1() throws Throwable { + if (debug) System.out.format("%n%s%n", "auto_check_sbp_ssr_MsgSsrSatelliteApcTest.test1"); + byte[] payload = + new byte[] { + (byte) 127, + (byte) 58, + (byte) 9, + (byte) 0, + (byte) 174, + (byte) 8, + (byte) 1, + (byte) 2, + (byte) 3, + (byte) 2, + (byte) 0, + (byte) 4, + (byte) 61, + (byte) 0, + (byte) 1, + (byte) 0, + (byte) 255, + (byte) 255, + (byte) 217, + (byte) 2, + (byte) 11, + (byte) 10, + (byte) 8, + (byte) 5, + (byte) 1, + (byte) 252, + (byte) 248, + (byte) 246, + (byte) 246, + (byte) 246, + (byte) 249, + (byte) 252, + (byte) 0, + (byte) 6, + (byte) 12, + (byte) 22, + (byte) 30, + (byte) 41, + (byte) 41, + (byte) 41, + (byte) 41, + }; + SBPMessage sbp = new SBPMessage(0x0, 0x605, payload); + MsgSsrSatelliteApc msg = new MsgSsrSatelliteApc(sbp); + JSONObject json = msg.toJSON(); + Number value; + Number expected; + value = msg.apc[0].pco[0]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pco[0] + "' != '" + 1 + "'", + value.equals(BigInteger.valueOf(1L))); + } else { + value = value.longValue(); + expected = 1L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pco[1]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pco[1] + "' != '" + -1 + "'", + value.equals(BigInteger.valueOf(-1L))); + } else { + value = value.longValue(); + expected = -1L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pco[2]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pco[2] + "' != '" + 729 + "'", + value.equals(BigInteger.valueOf(729L))); + } else { + value = value.longValue(); + expected = 729L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[0]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[0] + "' != '" + 11 + "'", + value.equals(BigInteger.valueOf(11L))); + } else { + value = value.longValue(); + expected = 11L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[1]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[1] + "' != '" + 10 + "'", + value.equals(BigInteger.valueOf(10L))); + } else { + value = value.longValue(); + expected = 10L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[2]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[2] + "' != '" + 8 + "'", + value.equals(BigInteger.valueOf(8L))); + } else { + value = value.longValue(); + expected = 8L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[3]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[3] + "' != '" + 5 + "'", + value.equals(BigInteger.valueOf(5L))); + } else { + value = value.longValue(); + expected = 5L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[4]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[4] + "' != '" + 1 + "'", + value.equals(BigInteger.valueOf(1L))); + } else { + value = value.longValue(); + expected = 1L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[5]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[5] + "' != '" + -4 + "'", + value.equals(BigInteger.valueOf(-4L))); + } else { + value = value.longValue(); + expected = -4L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[6]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[6] + "' != '" + -8 + "'", + value.equals(BigInteger.valueOf(-8L))); + } else { + value = value.longValue(); + expected = -8L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[7]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[7] + "' != '" + -10 + "'", + value.equals(BigInteger.valueOf(-10L))); + } else { + value = value.longValue(); + expected = -10L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[8]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[8] + "' != '" + -10 + "'", + value.equals(BigInteger.valueOf(-10L))); + } else { + value = value.longValue(); + expected = -10L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[9]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[9] + "' != '" + -10 + "'", + value.equals(BigInteger.valueOf(-10L))); + } else { + value = value.longValue(); + expected = -10L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[10]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[10] + "' != '" + -7 + "'", + value.equals(BigInteger.valueOf(-7L))); + } else { + value = value.longValue(); + expected = -7L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[11]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[11] + "' != '" + -4 + "'", + value.equals(BigInteger.valueOf(-4L))); + } else { + value = value.longValue(); + expected = -4L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[12]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[12] + "' != '" + 0 + "'", + value.equals(BigInteger.valueOf(0L))); + } else { + value = value.longValue(); + expected = 0L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[13]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[13] + "' != '" + 6 + "'", + value.equals(BigInteger.valueOf(6L))); + } else { + value = value.longValue(); + expected = 6L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[14]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[14] + "' != '" + 12 + "'", + value.equals(BigInteger.valueOf(12L))); + } else { + value = value.longValue(); + expected = 12L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[15]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[15] + "' != '" + 22 + "'", + value.equals(BigInteger.valueOf(22L))); + } else { + value = value.longValue(); + expected = 22L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[16]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[16] + "' != '" + 30 + "'", + value.equals(BigInteger.valueOf(30L))); + } else { + value = value.longValue(); + expected = 30L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[17]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[17] + "' != '" + 41 + "'", + value.equals(BigInteger.valueOf(41L))); + } else { + value = value.longValue(); + expected = 41L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[18]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[18] + "' != '" + 41 + "'", + value.equals(BigInteger.valueOf(41L))); + } else { + value = value.longValue(); + expected = 41L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[19]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[19] + "' != '" + 41 + "'", + value.equals(BigInteger.valueOf(41L))); + } else { + value = value.longValue(); + expected = 41L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].pcv[20]; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].pcv[20] + "' != '" + 41 + "'", + value.equals(BigInteger.valueOf(41L))); + } else { + value = value.longValue(); + expected = 41L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].sat_info; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].sat_info + "' != '" + 4 + "'", + value.equals(BigInteger.valueOf(4L))); + } else { + value = value.longValue(); + expected = 4L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].sid.code; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].sid.code + "' != '" + 0 + "'", + value.equals(BigInteger.valueOf(0L))); + } else { + value = value.longValue(); + expected = 0L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].sid.sat; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].sid.sat + "' != '" + 2 + "'", + value.equals(BigInteger.valueOf(2L))); + } else { + value = value.longValue(); + expected = 2L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.apc[0].svn; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.apc[0].svn + "' != '" + 61 + "'", + value.equals(BigInteger.valueOf(61L))); + } else { + value = value.longValue(); + expected = 61L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.iod_ssr; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.iod_ssr + "' != '" + 3 + "'", value.equals(BigInteger.valueOf(3L))); + } else { + value = value.longValue(); + expected = 3L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.sol_id; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.sol_id + "' != '" + 2 + "'", value.equals(BigInteger.valueOf(2L))); + } else { + value = value.longValue(); + expected = 2L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.time.tow; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.time.tow + "' != '" + 604799 + "'", + value.equals(BigInteger.valueOf(604799L))); + } else { + value = value.longValue(); + expected = 604799L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.time.wn; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.time.wn + "' != '" + 2222 + "'", + value.equals(BigInteger.valueOf(2222L))); + } else { + value = value.longValue(); + expected = 2222L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.update_interval; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.update_interval + "' != '" + 1 + "'", + value.equals(BigInteger.valueOf(1L))); + } else { + value = value.longValue(); + expected = 1L; + org.junit.Assert.assertEquals(value, expected); + } + + org.junit.Assert.assertNotEquals("", msg.getFriendlyName()); + } +} diff --git a/java/test/auto_check_sbp_ssr_MsgSsrTileDefinitionDepBTest.java b/java/test/auto_check_sbp_ssr_MsgSsrTileDefinitionDepBTest.java new file mode 100644 index 0000000000..23814d53c9 --- /dev/null +++ b/java/test/auto_check_sbp_ssr_MsgSsrTileDefinitionDepBTest.java @@ -0,0 +1,169 @@ +/* Copyright (C) 2015-2022 Swift Navigation Inc. + * Contact: https://support.swiftnav.com + * + * This source is subject to the license found in the file 'LICENSE' which must + * be be distributed together with this source. All other rights reserved. + * + * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, + * EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + */ +package com.swiftnav.sbp.test; + +// This file was auto-generated from +// spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinitionDepB.yaml by generate.py. Do not modify +// by hand! + + +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.ssr.MsgSsrTileDefinitionDepB; +import java.math.BigInteger; +import org.json.JSONObject; +import org.junit.Test; + +public class auto_check_sbp_ssr_MsgSsrTileDefinitionDepBTest { + + public static boolean debug = false; + private static final double DELTA = 1e-15; + + @Test + public void test1() throws Throwable { + if (debug) + System.out.format("%n%s%n", "auto_check_sbp_ssr_MsgSsrTileDefinitionDepBTest.test1"); + byte[] payload = + new byte[] { + (byte) 31, + (byte) 0, + (byte) 1, + (byte) 0, + (byte) 2, + (byte) 0, + (byte) 4, + (byte) 0, + (byte) 8, + (byte) 0, + (byte) 16, + (byte) 0, + (byte) 32, + (byte) 0, + (byte) 64, + (byte) 0, + (byte) 128, + (byte) 210, + (byte) 2, + (byte) 150, + (byte) 73, + (byte) 0, + (byte) 0, + (byte) 0, + (byte) 0, + }; + SBPMessage sbp = new SBPMessage(0x0042, 0x05F7, payload); + MsgSsrTileDefinitionDepB msg = new MsgSsrTileDefinitionDepB(sbp); + JSONObject json = msg.toJSON(); + Number value; + Number expected; + value = msg.bitmask; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.bitmask + "' != '" + 1234567890 + "'", + value.equals(BigInteger.valueOf(1234567890L))); + } else { + value = value.longValue(); + expected = 1234567890L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.cols; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.cols + "' != '" + 32768 + "'", + value.equals(BigInteger.valueOf(32768L))); + } else { + value = value.longValue(); + expected = 32768L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.corner_nw_lat; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.corner_nw_lat + "' != '" + 1024 + "'", + value.equals(BigInteger.valueOf(1024L))); + } else { + value = value.longValue(); + expected = 1024L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.corner_nw_lon; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.corner_nw_lon + "' != '" + 2048 + "'", + value.equals(BigInteger.valueOf(2048L))); + } else { + value = value.longValue(); + expected = 2048L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.rows; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.rows + "' != '" + 16384 + "'", + value.equals(BigInteger.valueOf(16384L))); + } else { + value = value.longValue(); + expected = 16384L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.spacing_lat; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.spacing_lat + "' != '" + 4096 + "'", + value.equals(BigInteger.valueOf(4096L))); + } else { + value = value.longValue(); + expected = 4096L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.spacing_lon; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.spacing_lon + "' != '" + 8192 + "'", + value.equals(BigInteger.valueOf(8192L))); + } else { + value = value.longValue(); + expected = 8192L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.ssr_sol_id; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.ssr_sol_id + "' != '" + 31 + "'", + value.equals(BigInteger.valueOf(31L))); + } else { + value = value.longValue(); + expected = 31L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.tile_id; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.tile_id + "' != '" + 512 + "'", + value.equals(BigInteger.valueOf(512L))); + } else { + value = value.longValue(); + expected = 512L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.tile_set_id; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.tile_set_id + "' != '" + 256 + "'", + value.equals(BigInteger.valueOf(256L))); + } else { + value = value.longValue(); + expected = 256L; + org.junit.Assert.assertEquals(value, expected); + } + + org.junit.Assert.assertNotEquals("", msg.getFriendlyName()); + } +} diff --git a/java/test/auto_check_sbp_ssr_MsgSsrTileDefinitionTest.java b/java/test/auto_check_sbp_ssr_MsgSsrTileDefinitionTest.java index cad251be72..c17b08a0b8 100644 --- a/java/test/auto_check_sbp_ssr_MsgSsrTileDefinitionTest.java +++ b/java/test/auto_check_sbp_ssr_MsgSsrTileDefinitionTest.java @@ -30,33 +30,13 @@ public void test1() throws Throwable { if (debug) System.out.format("%n%s%n", "auto_check_sbp_ssr_MsgSsrTileDefinitionTest.test1"); byte[] payload = new byte[] { - (byte) 31, - (byte) 0, - (byte) 1, - (byte) 0, - (byte) 2, - (byte) 0, - (byte) 4, - (byte) 0, - (byte) 8, - (byte) 0, - (byte) 16, - (byte) 0, - (byte) 32, - (byte) 0, - (byte) 64, - (byte) 0, - (byte) 128, - (byte) 210, - (byte) 2, - (byte) 150, - (byte) 73, - (byte) 0, - (byte) 0, - (byte) 0, - (byte) 0, + (byte) 127, (byte) 58, (byte) 9, (byte) 0, (byte) 174, (byte) 8, (byte) 1, + (byte) 2, (byte) 3, (byte) 4, (byte) 0, (byte) 5, (byte) 0, (byte) 186, + (byte) 28, (byte) 59, (byte) 167, (byte) 100, (byte) 0, (byte) 100, (byte) 0, + (byte) 6, (byte) 0, (byte) 6, (byte) 0, (byte) 210, (byte) 2, (byte) 150, + (byte) 73, (byte) 0, (byte) 0, (byte) 0, (byte) 0, }; - SBPMessage sbp = new SBPMessage(0x0042, 0x05F7, payload); + SBPMessage sbp = new SBPMessage(0x0, 0x5F8, payload); MsgSsrTileDefinition msg = new MsgSsrTileDefinition(sbp); JSONObject json = msg.toJSON(); Number value; @@ -74,91 +54,126 @@ public void test1() throws Throwable { value = msg.cols; if (value instanceof BigInteger) { org.junit.Assert.assertTrue( - "'" + msg.cols + "' != '" + 32768 + "'", - value.equals(BigInteger.valueOf(32768L))); + "'" + msg.cols + "' != '" + 6 + "'", value.equals(BigInteger.valueOf(6L))); } else { value = value.longValue(); - expected = 32768L; + expected = 6L; org.junit.Assert.assertEquals(value, expected); } value = msg.corner_nw_lat; if (value instanceof BigInteger) { org.junit.Assert.assertTrue( - "'" + msg.corner_nw_lat + "' != '" + 1024 + "'", - value.equals(BigInteger.valueOf(1024L))); + "'" + msg.corner_nw_lat + "' != '" + 7354 + "'", + value.equals(BigInteger.valueOf(7354L))); } else { value = value.longValue(); - expected = 1024L; + expected = 7354L; org.junit.Assert.assertEquals(value, expected); } value = msg.corner_nw_lon; if (value instanceof BigInteger) { org.junit.Assert.assertTrue( - "'" + msg.corner_nw_lon + "' != '" + 2048 + "'", - value.equals(BigInteger.valueOf(2048L))); + "'" + msg.corner_nw_lon + "' != '" + -22725 + "'", + value.equals(BigInteger.valueOf(-22725L))); } else { value = value.longValue(); - expected = 2048L; + expected = -22725L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.iod_atmo; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.iod_atmo + "' != '" + 3 + "'", value.equals(BigInteger.valueOf(3L))); + } else { + value = value.longValue(); + expected = 3L; org.junit.Assert.assertEquals(value, expected); } value = msg.rows; if (value instanceof BigInteger) { org.junit.Assert.assertTrue( - "'" + msg.rows + "' != '" + 16384 + "'", - value.equals(BigInteger.valueOf(16384L))); + "'" + msg.rows + "' != '" + 6 + "'", value.equals(BigInteger.valueOf(6L))); } else { value = value.longValue(); - expected = 16384L; + expected = 6L; org.junit.Assert.assertEquals(value, expected); } - value = msg.spacing_lat; + value = msg.sol_id; if (value instanceof BigInteger) { org.junit.Assert.assertTrue( - "'" + msg.spacing_lat + "' != '" + 4096 + "'", - value.equals(BigInteger.valueOf(4096L))); + "'" + msg.sol_id + "' != '" + 2 + "'", value.equals(BigInteger.valueOf(2L))); } else { value = value.longValue(); - expected = 4096L; + expected = 2L; org.junit.Assert.assertEquals(value, expected); } - value = msg.spacing_lon; + value = msg.spacing_lat; if (value instanceof BigInteger) { org.junit.Assert.assertTrue( - "'" + msg.spacing_lon + "' != '" + 8192 + "'", - value.equals(BigInteger.valueOf(8192L))); + "'" + msg.spacing_lat + "' != '" + 100 + "'", + value.equals(BigInteger.valueOf(100L))); } else { value = value.longValue(); - expected = 8192L; + expected = 100L; org.junit.Assert.assertEquals(value, expected); } - value = msg.ssr_sol_id; + value = msg.spacing_lon; if (value instanceof BigInteger) { org.junit.Assert.assertTrue( - "'" + msg.ssr_sol_id + "' != '" + 31 + "'", - value.equals(BigInteger.valueOf(31L))); + "'" + msg.spacing_lon + "' != '" + 100 + "'", + value.equals(BigInteger.valueOf(100L))); } else { value = value.longValue(); - expected = 31L; + expected = 100L; org.junit.Assert.assertEquals(value, expected); } value = msg.tile_id; if (value instanceof BigInteger) { org.junit.Assert.assertTrue( - "'" + msg.tile_id + "' != '" + 512 + "'", - value.equals(BigInteger.valueOf(512L))); + "'" + msg.tile_id + "' != '" + 5 + "'", value.equals(BigInteger.valueOf(5L))); } else { value = value.longValue(); - expected = 512L; + expected = 5L; org.junit.Assert.assertEquals(value, expected); } value = msg.tile_set_id; if (value instanceof BigInteger) { org.junit.Assert.assertTrue( - "'" + msg.tile_set_id + "' != '" + 256 + "'", - value.equals(BigInteger.valueOf(256L))); + "'" + msg.tile_set_id + "' != '" + 4 + "'", + value.equals(BigInteger.valueOf(4L))); + } else { + value = value.longValue(); + expected = 4L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.time.tow; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.time.tow + "' != '" + 604799 + "'", + value.equals(BigInteger.valueOf(604799L))); + } else { + value = value.longValue(); + expected = 604799L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.time.wn; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.time.wn + "' != '" + 2222 + "'", + value.equals(BigInteger.valueOf(2222L))); + } else { + value = value.longValue(); + expected = 2222L; + org.junit.Assert.assertEquals(value, expected); + } + value = msg.update_interval; + if (value instanceof BigInteger) { + org.junit.Assert.assertTrue( + "'" + msg.update_interval + "' != '" + 1 + "'", + value.equals(BigInteger.valueOf(1L))); } else { value = value.longValue(); - expected = 256L; + expected = 1L; org.junit.Assert.assertEquals(value, expected); } diff --git a/javascript/sbp.bundle.js b/javascript/sbp.bundle.js index 553c50d98a..e3ea2d951f 100644 --- a/javascript/sbp.bundle.js +++ b/javascript/sbp.bundle.js @@ -12,4 +12,4 @@ var r=p(25),o=p(26),i=p(16);function s(){return a.TYPED_ARRAY_SUPPORT?2147483647 * @author Feross Aboukhadijeh * @license MIT */ -function r(e,t){if(e===t)return 0;for(var p=e.length,r=t.length,o=0,i=Math.min(p,r);o=0;l--)if(c[l]!==u[l])return!1;for(l=c.length-1;l>=0;l--)if(a=c[l],!g(e[a],t[a],p,r))return!1;return!0}(e,t,p,s))}return p?e===t:e==t}function w(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function E(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function m(e,t,p,r){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof p&&(r=p,p=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),r=(p&&p.name?" ("+p.name+").":".")+(r?" "+r:"."),e&&!o&&_(o,p,"Missing expected exception"+r);var s="string"==typeof r,n=!e&&o&&!p;if((!e&&i.isError(o)&&s&&E(o,p)||n)&&_(o,p,"Got unwanted exception"+r),e&&o&&p&&!E(o,p)||!e&&o)throw o}u.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return f(d(e.actual),128)+" "+e.operator+" "+f(d(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||_;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var p=new Error;if(p.stack){var r=p.stack,o=h(t),i=r.indexOf("\n"+o);if(i>=0){var s=r.indexOf("\n",i+1);r=r.substring(s+1)}this.stack=r}}},i.inherits(u.AssertionError,Error),u.fail=_,u.ok=S,u.equal=function(e,t,p){e!=t&&_(e,t,p,"==",u.equal)},u.notEqual=function(e,t,p){e==t&&_(e,t,p,"!=",u.notEqual)},u.deepEqual=function(e,t,p){g(e,t,!1)||_(e,t,p,"deepEqual",u.deepEqual)},u.deepStrictEqual=function(e,t,p){g(e,t,!0)||_(e,t,p,"deepStrictEqual",u.deepStrictEqual)},u.notDeepEqual=function(e,t,p){g(e,t,!1)&&_(e,t,p,"notDeepEqual",u.notDeepEqual)},u.notDeepStrictEqual=function e(t,p,r){g(t,p,!0)&&_(t,p,r,"notDeepStrictEqual",e)},u.strictEqual=function(e,t,p){e!==t&&_(e,t,p,"===",u.strictEqual)},u.notStrictEqual=function(e,t,p){e===t&&_(e,t,p,"!==",u.notStrictEqual)},u.throws=function(e,t,p){m(!0,e,t,p)},u.doesNotThrow=function(e,t,p){m(!1,e,t,p)},u.ifError=function(e){if(e)throw e};var b=Object.keys||function(e){var t=[];for(var p in e)s.call(e,p)&&t.push(p);return t}}).call(this,p(5))},function(e,t,p){var r;!function(p){o(Math.pow(36,5)),o(Math.pow(16,7)),o(Math.pow(10,9)),o(Math.pow(2,30)),o(36),o(16),o(10),o(2);function o(e,t){return this instanceof o?(this._low=0,this._high=0,this.remainder=null,void 0===t?s.call(this,e):"string"==typeof e?n.call(this,e,t):void i.call(this,e,t)):new o(e,t)}function i(e,t){return this._low=0|e,this._high=0|t,this}function s(e){return this._low=65535&e,this._high=e>>>16,this}function n(e,t){var p=parseInt(e,t||10);return this._low=65535&p,this._high=p>>>16,this}o.prototype.fromBits=i,o.prototype.fromNumber=s,o.prototype.fromString=n,o.prototype.toNumber=function(){return 65536*this._high+this._low},o.prototype.toString=function(e){return this.toNumber().toString(e||10)},o.prototype.add=function(e){var t=this._low+e._low,p=t>>>16;return p+=this._high+e._high,this._low=65535&t,this._high=65535&p,this},o.prototype.subtract=function(e){return this.add(e.clone().negate())},o.prototype.multiply=function(e){var t,p,r=this._high,o=this._low,i=e._high,s=e._low;return t=(p=o*s)>>>16,t+=r*s,t&=65535,t+=o*i,this._low=65535&p,this._high=65535&t,this},o.prototype.div=function(e){if(0==e._low&&0==e._high)throw Error("division by zero");if(0==e._high&&1==e._low)return this.remainder=new o(0),this;if(e.gt(this))return this.remainder=this.clone(),this._low=0,this._high=0,this;if(this.eq(e))return this.remainder=new o(0),this._low=1,this._high=0,this;for(var t=e.clone(),p=-1;!this.lt(t);)t.shiftLeft(1,!0),p++;for(this.remainder=this.clone(),this._low=0,this._high=0;p>=0;p--)t.shiftRight(1),this.remainder.lt(t)||(this.remainder.subtract(t),p>=16?this._high|=1<>>16)&65535,this},o.prototype.equals=o.prototype.eq=function(e){return this._low==e._low&&this._high==e._high},o.prototype.greaterThan=o.prototype.gt=function(e){return this._high>e._high||!(this._highe._low},o.prototype.lessThan=o.prototype.lt=function(e){return this._highe._high)&&this._low16?(this._low=this._high>>e-16,this._high=0):16==e?(this._low=this._high,this._high=0):(this._low=this._low>>e|this._high<<16-e&65535,this._high>>=e),this},o.prototype.shiftLeft=o.prototype.shiftl=function(e,t){return e>16?(this._high=this._low<>16-e,this._low=this._low<>>32-e,this._low=65535&t,this._high=t>>>16,this},o.prototype.rotateRight=o.prototype.rotr=function(e){var t=this._high<<16|this._low;return t=t>>>e|t<<32-e,this._low=65535&t,this._high=t>>>16,this},o.prototype.clone=function(){return new o(this._low,this._high)},void 0===(r=function(){return o}.apply(t,[]))||(e.exports=r)}()},function(e,t,p){var r;!function(p){var o={16:s(Math.pow(16,5)),10:s(Math.pow(10,5)),2:s(Math.pow(2,5))},i={16:s(16),10:s(10),2:s(2)};function s(e,t,p,r){return this instanceof s?(this.remainder=null,"string"==typeof e?l.call(this,e,t):void 0===t?a.call(this,e):void n.apply(this,arguments)):new s(e,t,p,r)}function n(e,t,p,r){return void 0===p?(this._a00=65535&e,this._a16=e>>>16,this._a32=65535&t,this._a48=t>>>16,this):(this._a00=0|e,this._a16=0|t,this._a32=0|p,this._a48=0|r,this)}function a(e){return this._a00=65535&e,this._a16=e>>>16,this._a32=0,this._a48=0,this}function l(e,t){t=t||10,this._a00=0,this._a16=0,this._a32=0,this._a48=0;for(var p=o[t]||new s(Math.pow(t,5)),r=0,i=e.length;r=0&&(p.div(t),r[o]=p.remainder.toNumber().toString(e),p.gt(t));o--);return r[o-1]=p.toNumber().toString(e),r.join("")},s.prototype.add=function(e){var t=this._a00+e._a00,p=t>>>16,r=(p+=this._a16+e._a16)>>>16,o=(r+=this._a32+e._a32)>>>16;return o+=this._a48+e._a48,this._a00=65535&t,this._a16=65535&p,this._a32=65535&r,this._a48=65535&o,this},s.prototype.subtract=function(e){return this.add(e.clone().negate())},s.prototype.multiply=function(e){var t=this._a00,p=this._a16,r=this._a32,o=this._a48,i=e._a00,s=e._a16,n=e._a32,a=t*i,l=a>>>16,c=(l+=t*s)>>>16;l&=65535,c+=(l+=p*i)>>>16;var u=(c+=t*n)>>>16;return c&=65535,u+=(c+=p*s)>>>16,c&=65535,u+=(c+=r*i)>>>16,u+=t*e._a48,u&=65535,u+=p*n,u&=65535,u+=r*s,u&=65535,u+=o*i,this._a00=65535&a,this._a16=65535&l,this._a32=65535&c,this._a48=65535&u,this},s.prototype.div=function(e){if(0==e._a16&&0==e._a32&&0==e._a48){if(0==e._a00)throw Error("division by zero");if(1==e._a00)return this.remainder=new s(0),this}if(e.gt(this))return this.remainder=this.clone(),this._a00=0,this._a16=0,this._a32=0,this._a48=0,this;if(this.eq(e))return this.remainder=new s(0),this._a00=1,this._a16=0,this._a32=0,this._a48=0,this;for(var t=e.clone(),p=-1;!this.lt(t);)t.shiftLeft(1,!0),p++;for(this.remainder=this.clone(),this._a00=0,this._a16=0,this._a32=0,this._a48=0;p>=0;p--)t.shiftRight(1),this.remainder.lt(t)||(this.remainder.subtract(t),p>=48?this._a48|=1<=32?this._a32|=1<=16?this._a16|=1<>>16),this._a16=65535&e,e=(65535&~this._a32)+(e>>>16),this._a32=65535&e,this._a48=~this._a48+(e>>>16)&65535,this},s.prototype.equals=s.prototype.eq=function(e){return this._a48==e._a48&&this._a00==e._a00&&this._a32==e._a32&&this._a16==e._a16},s.prototype.greaterThan=s.prototype.gt=function(e){return this._a48>e._a48||!(this._a48e._a32||!(this._a32e._a16||!(this._a16e._a00))},s.prototype.lessThan=s.prototype.lt=function(e){return this._a48e._a48)&&(this._a32e._a32)&&(this._a16e._a16)&&this._a00=48?(this._a00=this._a48>>e-48,this._a16=0,this._a32=0,this._a48=0):e>=32?(e-=32,this._a00=65535&(this._a32>>e|this._a48<<16-e),this._a16=this._a48>>e&65535,this._a32=0,this._a48=0):e>=16?(e-=16,this._a00=65535&(this._a16>>e|this._a32<<16-e),this._a16=65535&(this._a32>>e|this._a48<<16-e),this._a32=this._a48>>e&65535,this._a48=0):(this._a00=65535&(this._a00>>e|this._a16<<16-e),this._a16=65535&(this._a16>>e|this._a32<<16-e),this._a32=65535&(this._a32>>e|this._a48<<16-e),this._a48=this._a48>>e&65535),this},s.prototype.shiftLeft=s.prototype.shiftl=function(e,t){return(e%=64)>=48?(this._a48=this._a00<=32?(e-=32,this._a48=this._a16<>16-e,this._a32=this._a00<=16?(e-=16,this._a48=this._a32<>16-e,this._a32=65535&(this._a16<>16-e),this._a16=this._a00<>16-e,this._a32=65535&(this._a32<>16-e),this._a16=65535&(this._a16<>16-e),this._a00=this._a00<=32){var t=this._a00;if(this._a00=this._a32,this._a32=t,t=this._a48,this._a48=this._a16,this._a16=t,32==e)return this;e-=32}var p=this._a48<<16|this._a32,r=this._a16<<16|this._a00,o=p<>>32-e,i=r<>>32-e;return this._a00=65535&i,this._a16=i>>>16,this._a32=65535&o,this._a48=o>>>16,this},s.prototype.rotateRight=s.prototype.rotr=function(e){if(0==(e%=64))return this;if(e>=32){var t=this._a00;if(this._a00=this._a32,this._a32=t,t=this._a48,this._a48=this._a16,this._a16=t,32==e)return this;e-=32}var p=this._a48<<16|this._a32,r=this._a16<<16|this._a00,o=p>>>e|r<<32-e,i=r>>>e|p<<32-e;return this._a00=65535&i,this._a16=i>>>16,this._a32=65535&o,this._a48=o>>>16,this},s.prototype.clone=function(){return new s(this._a00,this._a16,this._a32,this._a48)},void 0===(r=function(){return s}.apply(t,[]))||(e.exports=r)}()},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal),s=p(0).GnssSignalDep,n=(p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_RESULT",this.fields=t||this.parser.parse(e.payload),this});(n.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_RESULT",n.prototype.msg_type=47,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").floatle("cn0").floatle("cp").floatle("cf").nest("sid",{type:i.prototype.parser}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["cn0","writeFloatLE",4]),n.prototype.fieldSpec.push(["cp","writeFloatLE",4]),n.prototype.fieldSpec.push(["cf","writeFloatLE",4]),n.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_RESULT_DEP_C",a.prototype.msg_type=31,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").floatle("cn0").floatle("cp").floatle("cf").nest("sid",{type:s.prototype.parser}),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["cn0","writeFloatLE",4]),a.prototype.fieldSpec.push(["cp","writeFloatLE",4]),a.prototype.fieldSpec.push(["cf","writeFloatLE",4]),a.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_RESULT_DEP_B",l.prototype.msg_type=20,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").floatle("snr").floatle("cp").floatle("cf").nest("sid",{type:s.prototype.parser}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["snr","writeFloatLE",4]),l.prototype.fieldSpec.push(["cp","writeFloatLE",4]),l.prototype.fieldSpec.push(["cf","writeFloatLE",4]),l.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_RESULT_DEP_A",c.prototype.msg_type=21,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").floatle("snr").floatle("cp").floatle("cf").uint8("prn"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["snr","writeFloatLE",4]),c.prototype.fieldSpec.push(["cp","writeFloatLE",4]),c.prototype.fieldSpec.push(["cf","writeFloatLE",4]),c.prototype.fieldSpec.push(["prn","writeUInt8",1]);let u=function(e,t){return r.call(this,e),this.messageType="AcqSvProfile",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="AcqSvProfile",u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint8("job_type").uint8("status").uint16("cn0").uint8("int_time").nest("sid",{type:i.prototype.parser}).uint16("bin_width").uint32("timestamp").uint32("time_spent").int32("cf_min").int32("cf_max").int32("cf").uint32("cp"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["job_type","writeUInt8",1]),u.prototype.fieldSpec.push(["status","writeUInt8",1]),u.prototype.fieldSpec.push(["cn0","writeUInt16LE",2]),u.prototype.fieldSpec.push(["int_time","writeUInt8",1]),u.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),u.prototype.fieldSpec.push(["bin_width","writeUInt16LE",2]),u.prototype.fieldSpec.push(["timestamp","writeUInt32LE",4]),u.prototype.fieldSpec.push(["time_spent","writeUInt32LE",4]),u.prototype.fieldSpec.push(["cf_min","writeInt32LE",4]),u.prototype.fieldSpec.push(["cf_max","writeInt32LE",4]),u.prototype.fieldSpec.push(["cf","writeInt32LE",4]),u.prototype.fieldSpec.push(["cp","writeUInt32LE",4]);let y=function(e,t){return r.call(this,e),this.messageType="AcqSvProfileDep",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="AcqSvProfileDep",y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint8("job_type").uint8("status").uint16("cn0").uint8("int_time").nest("sid",{type:s.prototype.parser}).uint16("bin_width").uint32("timestamp").uint32("time_spent").int32("cf_min").int32("cf_max").int32("cf").uint32("cp"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["job_type","writeUInt8",1]),y.prototype.fieldSpec.push(["status","writeUInt8",1]),y.prototype.fieldSpec.push(["cn0","writeUInt16LE",2]),y.prototype.fieldSpec.push(["int_time","writeUInt8",1]),y.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),y.prototype.fieldSpec.push(["bin_width","writeUInt16LE",2]),y.prototype.fieldSpec.push(["timestamp","writeUInt32LE",4]),y.prototype.fieldSpec.push(["time_spent","writeUInt32LE",4]),y.prototype.fieldSpec.push(["cf_min","writeInt32LE",4]),y.prototype.fieldSpec.push(["cf_max","writeInt32LE",4]),y.prototype.fieldSpec.push(["cf","writeInt32LE",4]),y.prototype.fieldSpec.push(["cp","writeUInt32LE",4]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_SV_PROFILE",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_SV_PROFILE",h.prototype.msg_type=46,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").array("acq_sv_profile",{type:u.prototype.parser,readUntil:"eof"}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["acq_sv_profile","array",u.prototype.fieldSpec,function(){return this.fields.array.length},null]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_SV_PROFILE_DEP",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_SV_PROFILE_DEP",f.prototype.msg_type=30,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").array("acq_sv_profile",{type:y.prototype.parser,readUntil:"eof"}),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["acq_sv_profile","array",y.prototype.fieldSpec,function(){return this.fields.array.length},null]),e.exports={47:n,MsgAcqResult:n,31:a,MsgAcqResultDepC:a,20:l,MsgAcqResultDepB:l,21:c,MsgAcqResultDepA:c,AcqSvProfile:u,AcqSvProfileDep:y,46:h,MsgAcqSvProfile:h,30:f,MsgAcqSvProfileDep:f}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_REQ",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_BOOTLOADER_HANDSHAKE_REQ",i.prototype.msg_type=179,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little"),i.prototype.fieldSpec=[];let s=function(e,t){return r.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_RESP",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_BOOTLOADER_HANDSHAKE_RESP",s.prototype.msg_type=180,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint32("flags").string("version",{greedy:!0}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["flags","writeUInt32LE",4]),s.prototype.fieldSpec.push(["version","string",null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_BOOTLOADER_JUMP_TO_APP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_BOOTLOADER_JUMP_TO_APP",n.prototype.msg_type=177,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint8("jump"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["jump","writeUInt8",1]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_NAP_DEVICE_DNA_REQ",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_NAP_DEVICE_DNA_REQ",a.prototype.msg_type=222,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little"),a.prototype.fieldSpec=[];let l=function(e,t){return r.call(this,e),this.messageType="MSG_NAP_DEVICE_DNA_RESP",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_NAP_DEVICE_DNA_RESP",l.prototype.msg_type=221,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").array("dna",{length:8,type:"uint8"}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["dna","array","writeUInt8",function(){return 1},8]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_BOOTLOADER_HANDSHAKE_DEP_A",c.prototype.msg_type=176,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").array("handshake",{type:"uint8",readUntil:"eof"}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["handshake","array","writeUInt8",function(){return 1},null]),e.exports={179:i,MsgBootloaderHandshakeReq:i,180:s,MsgBootloaderHandshakeResp:s,177:n,MsgBootloaderJumpToApp:n,222:a,MsgNapDeviceDnaReq:a,221:l,MsgNapDeviceDnaResp:l,176:c,MsgBootloaderHandshakeDepA:c}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_EXT_EVENT",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_EXT_EVENT",i.prototype.msg_type=257,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tow").int32("ns_residual").uint8("flags").uint8("pin"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),i.prototype.fieldSpec.push(["flags","writeUInt8",1]),i.prototype.fieldSpec.push(["pin","writeUInt8",1]),e.exports={257:i,MsgExtEvent:i}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_READ_REQ",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_READ_REQ",i.prototype.msg_type=168,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint32("sequence").uint32("offset").uint8("chunk_size").string("filename",{greedy:!0}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),i.prototype.fieldSpec.push(["offset","writeUInt32LE",4]),i.prototype.fieldSpec.push(["chunk_size","writeUInt8",1]),i.prototype.fieldSpec.push(["filename","string",null]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_READ_RESP",s.prototype.msg_type=163,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint32("sequence").array("contents",{type:"uint8",readUntil:"eof"}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),s.prototype.fieldSpec.push(["contents","array","writeUInt8",function(){return 1},null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_READ_DIR_REQ",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_READ_DIR_REQ",n.prototype.msg_type=169,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint32("sequence").uint32("offset").string("dirname",{greedy:!0}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),n.prototype.fieldSpec.push(["offset","writeUInt32LE",4]),n.prototype.fieldSpec.push(["dirname","string",null]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_READ_DIR_RESP",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_READ_DIR_RESP",a.prototype.msg_type=170,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint32("sequence").array("contents",{type:"uint8",readUntil:"eof"}),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),a.prototype.fieldSpec.push(["contents","array","writeUInt8",function(){return 1},null]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_REMOVE",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_REMOVE",l.prototype.msg_type=172,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").string("filename",{greedy:!0}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["filename","string",null]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_WRITE_REQ",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_WRITE_REQ",c.prototype.msg_type=173,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint32("sequence").uint32("offset").string("filename",{greedy:!0}).array("data",{type:"uint8",readUntil:"eof"}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),c.prototype.fieldSpec.push(["offset","writeUInt32LE",4]),c.prototype.fieldSpec.push(["filename","string",null]),c.prototype.fieldSpec.push(["data","array","writeUInt8",function(){return 1},null]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_WRITE_RESP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_WRITE_RESP",u.prototype.msg_type=171,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint32("sequence"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_CONFIG_REQ",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_CONFIG_REQ",y.prototype.msg_type=4097,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint32("sequence"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_CONFIG_RESP",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_CONFIG_RESP",h.prototype.msg_type=4098,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint32("sequence").uint32("window_size").uint32("batch_size").uint32("fileio_version"),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),h.prototype.fieldSpec.push(["window_size","writeUInt32LE",4]),h.prototype.fieldSpec.push(["batch_size","writeUInt32LE",4]),h.prototype.fieldSpec.push(["fileio_version","writeUInt32LE",4]),e.exports={168:i,MsgFileioReadReq:i,163:s,MsgFileioReadResp:s,169:n,MsgFileioReadDirReq:n,170:a,MsgFileioReadDirResp:a,172:l,MsgFileioRemove:l,173:c,MsgFileioWriteReq:c,171:u,MsgFileioWriteResp:u,4097:y,MsgFileioConfigReq:y,4098:h,MsgFileioConfigResp:h}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_FLASH_PROGRAM",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_FLASH_PROGRAM",i.prototype.msg_type=230,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint8("target").array("addr_start",{length:3,type:"uint8"}).uint8("addr_len").array("data",{type:"uint8",length:"addr_len"}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["target","writeUInt8",1]),i.prototype.fieldSpec.push(["addr_start","array","writeUInt8",function(){return 1},3]),i.prototype.fieldSpec.push(["addr_len","writeUInt8",1]),i.prototype.fieldSpec.push(["data","array","writeUInt8",function(){return 1},"addr_len"]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_FLASH_DONE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_FLASH_DONE",s.prototype.msg_type=224,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("response"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["response","writeUInt8",1]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_FLASH_READ_REQ",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_FLASH_READ_REQ",n.prototype.msg_type=231,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint8("target").array("addr_start",{length:3,type:"uint8"}).uint8("addr_len"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["target","writeUInt8",1]),n.prototype.fieldSpec.push(["addr_start","array","writeUInt8",function(){return 1},3]),n.prototype.fieldSpec.push(["addr_len","writeUInt8",1]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_FLASH_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_FLASH_READ_RESP",a.prototype.msg_type=225,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint8("target").array("addr_start",{length:3,type:"uint8"}).uint8("addr_len"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["target","writeUInt8",1]),a.prototype.fieldSpec.push(["addr_start","array","writeUInt8",function(){return 1},3]),a.prototype.fieldSpec.push(["addr_len","writeUInt8",1]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_FLASH_ERASE",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_FLASH_ERASE",l.prototype.msg_type=226,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint8("target").uint32("sector_num"),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["target","writeUInt8",1]),l.prototype.fieldSpec.push(["sector_num","writeUInt32LE",4]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_STM_FLASH_LOCK_SECTOR",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_STM_FLASH_LOCK_SECTOR",c.prototype.msg_type=227,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint32("sector"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["sector","writeUInt32LE",4]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_STM_FLASH_UNLOCK_SECTOR",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_STM_FLASH_UNLOCK_SECTOR",u.prototype.msg_type=228,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint32("sector"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["sector","writeUInt32LE",4]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_STM_UNIQUE_ID_REQ",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_STM_UNIQUE_ID_REQ",y.prototype.msg_type=232,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little"),y.prototype.fieldSpec=[];let h=function(e,t){return r.call(this,e),this.messageType="MSG_STM_UNIQUE_ID_RESP",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_STM_UNIQUE_ID_RESP",h.prototype.msg_type=229,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").array("stm_id",{length:12,type:"uint8"}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["stm_id","array","writeUInt8",function(){return 1},12]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_M25_FLASH_WRITE_STATUS",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_M25_FLASH_WRITE_STATUS",f.prototype.msg_type=243,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").array("status",{length:1,type:"uint8"}),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["status","array","writeUInt8",function(){return 1},1]),e.exports={230:i,MsgFlashProgram:i,224:s,MsgFlashDone:s,231:n,MsgFlashReadReq:n,225:a,MsgFlashReadResp:a,226:l,MsgFlashErase:l,227:c,MsgStmFlashLockSector:c,228:u,MsgStmFlashUnlockSector:u,232:y,MsgStmUniqueIdReq:y,229:h,MsgStmUniqueIdResp:h,243:f,MsgM25FlashWriteStatus:f}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_IMU_RAW",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_IMU_RAW",i.prototype.msg_type=2304,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint32("tow").uint8("tow_f").int16("acc_x").int16("acc_y").int16("acc_z").int16("gyr_x").int16("gyr_y").int16("gyr_z"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["tow_f","writeUInt8",1]),i.prototype.fieldSpec.push(["acc_x","writeInt16LE",2]),i.prototype.fieldSpec.push(["acc_y","writeInt16LE",2]),i.prototype.fieldSpec.push(["acc_z","writeInt16LE",2]),i.prototype.fieldSpec.push(["gyr_x","writeInt16LE",2]),i.prototype.fieldSpec.push(["gyr_y","writeInt16LE",2]),i.prototype.fieldSpec.push(["gyr_z","writeInt16LE",2]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_IMU_AUX",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_IMU_AUX",s.prototype.msg_type=2305,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("imu_type").int16("temp").uint8("imu_conf"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["imu_type","writeUInt8",1]),s.prototype.fieldSpec.push(["temp","writeInt16LE",2]),s.prototype.fieldSpec.push(["imu_conf","writeUInt8",1]),e.exports={2304:i,MsgImuRaw:i,2305:s,MsgImuAux:s}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal,p(0).GnssSignalDep,p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec),s=p(0).SvId,n=function(e,t){return r.call(this,e),this.messageType="IntegritySSRHeader",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="IntegritySSRHeader",n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").nest("obs_time",{type:i.prototype.parser}).uint8("num_msgs").uint8("seq_num").uint8("ssr_sol_id").uint16("tile_set_id").uint16("tile_id").uint8("chain_id"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["obs_time",i.prototype.fieldSpec]),n.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),n.prototype.fieldSpec.push(["seq_num","writeUInt8",1]),n.prototype.fieldSpec.push(["ssr_sol_id","writeUInt8",1]),n.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),n.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),n.prototype.fieldSpec.push(["chain_id","writeUInt8",1]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_HIGH_LEVEL",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_HIGH_LEVEL",a.prototype.msg_type=3001,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").nest("obs_time",{type:i.prototype.parser}).nest("corr_time",{type:i.prototype.parser}).uint8("ssr_sol_id").uint16("tile_set_id").uint16("tile_id").uint8("chain_id").uint8("use_gps_sat").uint8("use_gal_sat").uint8("use_bds_sat").array("reserved",{length:6,type:"uint8"}).uint8("use_tropo_grid_points").uint8("use_iono_grid_points").uint8("use_iono_tile_sat_los").uint8("use_iono_grid_point_sat_los"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["obs_time",i.prototype.fieldSpec]),a.prototype.fieldSpec.push(["corr_time",i.prototype.fieldSpec]),a.prototype.fieldSpec.push(["ssr_sol_id","writeUInt8",1]),a.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),a.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),a.prototype.fieldSpec.push(["chain_id","writeUInt8",1]),a.prototype.fieldSpec.push(["use_gps_sat","writeUInt8",1]),a.prototype.fieldSpec.push(["use_gal_sat","writeUInt8",1]),a.prototype.fieldSpec.push(["use_bds_sat","writeUInt8",1]),a.prototype.fieldSpec.push(["reserved","array","writeUInt8",function(){return 1},6]),a.prototype.fieldSpec.push(["use_tropo_grid_points","writeUInt8",1]),a.prototype.fieldSpec.push(["use_iono_grid_points","writeUInt8",1]),a.prototype.fieldSpec.push(["use_iono_tile_sat_los","writeUInt8",1]),a.prototype.fieldSpec.push(["use_iono_grid_point_sat_los","writeUInt8",1]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_SATELLITES",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_SATELLITES",l.prototype.msg_type=3005,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").nest("obs_time",{type:i.prototype.parser}).uint8("num_msgs").uint8("seq_num").uint8("ssr_sol_id").uint8("chain_id").uint8("const_id").uint8("n_faulty_sats").array("faulty_sats",{type:"uint8",length:"n_faulty_sats"}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["obs_time",i.prototype.fieldSpec]),l.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),l.prototype.fieldSpec.push(["seq_num","writeUInt8",1]),l.prototype.fieldSpec.push(["ssr_sol_id","writeUInt8",1]),l.prototype.fieldSpec.push(["chain_id","writeUInt8",1]),l.prototype.fieldSpec.push(["const_id","writeUInt8",1]),l.prototype.fieldSpec.push(["n_faulty_sats","writeUInt8",1]),l.prototype.fieldSpec.push(["faulty_sats","array","writeUInt8",function(){return 1},"n_faulty_sats"]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_TROPO_GRID_POINTS",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_TROPO_GRID_POINTS",c.prototype.msg_type=3011,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").nest("header",{type:n.prototype.parser}).uint8("n_faulty_points").array("faulty_points",{type:"uint16le",length:"n_faulty_points"}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["header",n.prototype.fieldSpec]),c.prototype.fieldSpec.push(["n_faulty_points","writeUInt8",1]),c.prototype.fieldSpec.push(["faulty_points","array","writeUInt16LE",function(){return 2},"n_faulty_points"]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_IONO_GRID_POINTS",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_IONO_GRID_POINTS",u.prototype.msg_type=3015,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").nest("header",{type:n.prototype.parser}).uint8("n_faulty_points").array("faulty_points",{type:"uint16le",length:"n_faulty_points"}),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["header",n.prototype.fieldSpec]),u.prototype.fieldSpec.push(["n_faulty_points","writeUInt8",1]),u.prototype.fieldSpec.push(["faulty_points","array","writeUInt16LE",function(){return 2},"n_faulty_points"]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_IONO_TILE_SAT_LOS",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_IONO_TILE_SAT_LOS",y.prototype.msg_type=3021,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").nest("header",{type:n.prototype.parser}).uint8("n_faulty_los").array("faulty_los",{type:s.prototype.parser,length:"n_faulty_los"}),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["header",n.prototype.fieldSpec]),y.prototype.fieldSpec.push(["n_faulty_los","writeUInt8",1]),y.prototype.fieldSpec.push(["faulty_los","array",s.prototype.fieldSpec,function(){return this.fields.array.length},"n_faulty_los"]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_IONO_GRID_POINT_SAT_LOS",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_IONO_GRID_POINT_SAT_LOS",h.prototype.msg_type=3025,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").nest("header",{type:n.prototype.parser}).uint16("grid_point_id").uint8("n_faulty_los").array("faulty_los",{type:s.prototype.parser,length:"n_faulty_los"}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["header",n.prototype.fieldSpec]),h.prototype.fieldSpec.push(["grid_point_id","writeUInt16LE",2]),h.prototype.fieldSpec.push(["n_faulty_los","writeUInt8",1]),h.prototype.fieldSpec.push(["faulty_los","array",s.prototype.fieldSpec,function(){return this.fields.array.length},"n_faulty_los"]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_ACKNOWLEDGE",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_ACKNOWLEDGE",f.prototype.msg_type=3026,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint8("request_id").uint32("area_id").uint8("response_code").uint16("correction_mask_on_demand").uint16("correction_mask_stream").uint8("solution_id"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["request_id","writeUInt8",1]),f.prototype.fieldSpec.push(["area_id","writeUInt32LE",4]),f.prototype.fieldSpec.push(["response_code","writeUInt8",1]),f.prototype.fieldSpec.push(["correction_mask_on_demand","writeUInt16LE",2]),f.prototype.fieldSpec.push(["correction_mask_stream","writeUInt16LE",2]),f.prototype.fieldSpec.push(["solution_id","writeUInt8",1]),e.exports={IntegritySSRHeader:n,3001:a,MsgSsrFlagHighLevel:a,3005:l,MsgSsrFlagSatellites:l,3011:c,MsgSsrFlagTropoGridPoints:c,3015:u,MsgSsrFlagIonoGridPoints:u,3021:y,MsgSsrFlagIonoTileSatLos:y,3025:h,MsgSsrFlagIonoGridPointSatLos:h,3026:f,MsgAcknowledge:f}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_CPU_STATE_DEP_A",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_CPU_STATE_DEP_A",i.prototype.msg_type=32512,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint8("pcpu").string("tname",{length:15}).string("cmdline",{greedy:!0}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["index","writeUInt8",1]),i.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),i.prototype.fieldSpec.push(["pcpu","writeUInt8",1]),i.prototype.fieldSpec.push(["tname","string",15]),i.prototype.fieldSpec.push(["cmdline","string",null]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_MEM_STATE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_MEM_STATE_DEP_A",s.prototype.msg_type=32513,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint8("pmem").string("tname",{length:15}).string("cmdline",{greedy:!0}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["index","writeUInt8",1]),s.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),s.prototype.fieldSpec.push(["pmem","writeUInt8",1]),s.prototype.fieldSpec.push(["tname","string",15]),s.prototype.fieldSpec.push(["cmdline","string",null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_SYS_STATE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_SYS_STATE_DEP_A",n.prototype.msg_type=32514,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint16("mem_total").uint8("pcpu").uint8("pmem").uint16("procs_starting").uint16("procs_stopping").uint16("pid_count"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["mem_total","writeUInt16LE",2]),n.prototype.fieldSpec.push(["pcpu","writeUInt8",1]),n.prototype.fieldSpec.push(["pmem","writeUInt8",1]),n.prototype.fieldSpec.push(["procs_starting","writeUInt16LE",2]),n.prototype.fieldSpec.push(["procs_stopping","writeUInt16LE",2]),n.prototype.fieldSpec.push(["pid_count","writeUInt16LE",2]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_PROCESS_SOCKET_COUNTS",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_PROCESS_SOCKET_COUNTS",a.prototype.msg_type=32515,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint16("socket_count").uint16("socket_types").uint16("socket_states").string("cmdline",{greedy:!0}),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["index","writeUInt8",1]),a.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),a.prototype.fieldSpec.push(["socket_count","writeUInt16LE",2]),a.prototype.fieldSpec.push(["socket_types","writeUInt16LE",2]),a.prototype.fieldSpec.push(["socket_states","writeUInt16LE",2]),a.prototype.fieldSpec.push(["cmdline","string",null]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_PROCESS_SOCKET_QUEUES",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_PROCESS_SOCKET_QUEUES",l.prototype.msg_type=32516,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint16("recv_queued").uint16("send_queued").uint16("socket_types").uint16("socket_states").string("address_of_largest",{length:64}).string("cmdline",{greedy:!0}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["index","writeUInt8",1]),l.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),l.prototype.fieldSpec.push(["recv_queued","writeUInt16LE",2]),l.prototype.fieldSpec.push(["send_queued","writeUInt16LE",2]),l.prototype.fieldSpec.push(["socket_types","writeUInt16LE",2]),l.prototype.fieldSpec.push(["socket_states","writeUInt16LE",2]),l.prototype.fieldSpec.push(["address_of_largest","string",64]),l.prototype.fieldSpec.push(["cmdline","string",null]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_SOCKET_USAGE",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_SOCKET_USAGE",c.prototype.msg_type=32517,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint32("avg_queue_depth").uint32("max_queue_depth").array("socket_state_counts",{length:16,type:"uint16le"}).array("socket_type_counts",{length:16,type:"uint16le"}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["avg_queue_depth","writeUInt32LE",4]),c.prototype.fieldSpec.push(["max_queue_depth","writeUInt32LE",4]),c.prototype.fieldSpec.push(["socket_state_counts","array","writeUInt16LE",function(){return 2},16]),c.prototype.fieldSpec.push(["socket_type_counts","array","writeUInt16LE",function(){return 2},16]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_PROCESS_FD_COUNT",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_PROCESS_FD_COUNT",u.prototype.msg_type=32518,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint16("fd_count").string("cmdline",{greedy:!0}),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["index","writeUInt8",1]),u.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),u.prototype.fieldSpec.push(["fd_count","writeUInt16LE",2]),u.prototype.fieldSpec.push(["cmdline","string",null]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_PROCESS_FD_SUMMARY",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_PROCESS_FD_SUMMARY",y.prototype.msg_type=32519,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint32("sys_fd_count").string("most_opened",{greedy:!0}),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["sys_fd_count","writeUInt32LE",4]),y.prototype.fieldSpec.push(["most_opened","string",null]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_CPU_STATE",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_CPU_STATE",h.prototype.msg_type=32520,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint8("pcpu").uint32("time").uint8("flags").string("tname",{length:15}).string("cmdline",{greedy:!0}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["index","writeUInt8",1]),h.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),h.prototype.fieldSpec.push(["pcpu","writeUInt8",1]),h.prototype.fieldSpec.push(["time","writeUInt32LE",4]),h.prototype.fieldSpec.push(["flags","writeUInt8",1]),h.prototype.fieldSpec.push(["tname","string",15]),h.prototype.fieldSpec.push(["cmdline","string",null]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_MEM_STATE",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_MEM_STATE",f.prototype.msg_type=32521,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint8("pmem").uint32("time").uint8("flags").string("tname",{length:15}).string("cmdline",{greedy:!0}),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["index","writeUInt8",1]),f.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),f.prototype.fieldSpec.push(["pmem","writeUInt8",1]),f.prototype.fieldSpec.push(["time","writeUInt32LE",4]),f.prototype.fieldSpec.push(["flags","writeUInt8",1]),f.prototype.fieldSpec.push(["tname","string",15]),f.prototype.fieldSpec.push(["cmdline","string",null]);let d=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_SYS_STATE",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_SYS_STATE",d.prototype.msg_type=32522,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").uint16("mem_total").uint8("pcpu").uint8("pmem").uint16("procs_starting").uint16("procs_stopping").uint16("pid_count").uint32("time").uint8("flags"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["mem_total","writeUInt16LE",2]),d.prototype.fieldSpec.push(["pcpu","writeUInt8",1]),d.prototype.fieldSpec.push(["pmem","writeUInt8",1]),d.prototype.fieldSpec.push(["procs_starting","writeUInt16LE",2]),d.prototype.fieldSpec.push(["procs_stopping","writeUInt16LE",2]),d.prototype.fieldSpec.push(["pid_count","writeUInt16LE",2]),d.prototype.fieldSpec.push(["time","writeUInt32LE",4]),d.prototype.fieldSpec.push(["flags","writeUInt8",1]),e.exports={32512:i,MsgLinuxCpuStateDepA:i,32513:s,MsgLinuxMemStateDepA:s,32514:n,MsgLinuxSysStateDepA:n,32515:a,MsgLinuxProcessSocketCounts:a,32516:l,MsgLinuxProcessSocketQueues:l,32517:c,MsgLinuxSocketUsage:c,32518:u,MsgLinuxProcessFdCount:u,32519:y,MsgLinuxProcessFdSummary:y,32520:h,MsgLinuxCpuState:h,32521:f,MsgLinuxMemState:f,32522:d,MsgLinuxSysState:d}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_LOG",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_LOG",i.prototype.msg_type=1025,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint8("level").string("text",{greedy:!0}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["level","writeUInt8",1]),i.prototype.fieldSpec.push(["text","string",null]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_FWD",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_FWD",s.prototype.msg_type=1026,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("source").uint8("protocol").array("fwd_payload",{type:"uint8",readUntil:"eof"}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["source","writeUInt8",1]),s.prototype.fieldSpec.push(["protocol","writeUInt8",1]),s.prototype.fieldSpec.push(["fwd_payload","array","writeUInt8",function(){return 1},null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_PRINT_DEP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_PRINT_DEP",n.prototype.msg_type=16,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").string("text",{greedy:!0}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["text","string",null]),e.exports={1025:i,MsgLog:i,1026:s,MsgFwd:s,16:n,MsgPrintDep:n}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_MAG_RAW",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_MAG_RAW",i.prototype.msg_type=2306,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint32("tow").uint8("tow_f").int16("mag_x").int16("mag_y").int16("mag_z"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["tow_f","writeUInt8",1]),i.prototype.fieldSpec.push(["mag_x","writeInt16LE",2]),i.prototype.fieldSpec.push(["mag_y","writeInt16LE",2]),i.prototype.fieldSpec.push(["mag_z","writeInt16LE",2]),e.exports={2306:i,MsgMagRaw:i}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_GPS_TIME",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_GPS_TIME",i.prototype.msg_type=258,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tow").int32("ns_residual").uint8("flags"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),i.prototype.fieldSpec.push(["flags","writeUInt8",1]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_GPS_TIME_GNSS",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_GPS_TIME_GNSS",s.prototype.msg_type=260,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tow").int32("ns_residual").uint8("flags"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),s.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),s.prototype.fieldSpec.push(["flags","writeUInt8",1]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_UTC_TIME",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_UTC_TIME",n.prototype.msg_type=259,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint8("flags").uint32("tow").uint16("year").uint8("month").uint8("day").uint8("hours").uint8("minutes").uint8("seconds").uint32("ns"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["flags","writeUInt8",1]),n.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),n.prototype.fieldSpec.push(["year","writeUInt16LE",2]),n.prototype.fieldSpec.push(["month","writeUInt8",1]),n.prototype.fieldSpec.push(["day","writeUInt8",1]),n.prototype.fieldSpec.push(["hours","writeUInt8",1]),n.prototype.fieldSpec.push(["minutes","writeUInt8",1]),n.prototype.fieldSpec.push(["seconds","writeUInt8",1]),n.prototype.fieldSpec.push(["ns","writeUInt32LE",4]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_UTC_TIME_GNSS",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_UTC_TIME_GNSS",a.prototype.msg_type=261,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint8("flags").uint32("tow").uint16("year").uint8("month").uint8("day").uint8("hours").uint8("minutes").uint8("seconds").uint32("ns"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["flags","writeUInt8",1]),a.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),a.prototype.fieldSpec.push(["year","writeUInt16LE",2]),a.prototype.fieldSpec.push(["month","writeUInt8",1]),a.prototype.fieldSpec.push(["day","writeUInt8",1]),a.prototype.fieldSpec.push(["hours","writeUInt8",1]),a.prototype.fieldSpec.push(["minutes","writeUInt8",1]),a.prototype.fieldSpec.push(["seconds","writeUInt8",1]),a.prototype.fieldSpec.push(["ns","writeUInt32LE",4]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_DOPS",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_DOPS",l.prototype.msg_type=520,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint32("tow").uint16("gdop").uint16("pdop").uint16("tdop").uint16("hdop").uint16("vdop").uint8("flags"),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),l.prototype.fieldSpec.push(["gdop","writeUInt16LE",2]),l.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),l.prototype.fieldSpec.push(["tdop","writeUInt16LE",2]),l.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),l.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]),l.prototype.fieldSpec.push(["flags","writeUInt8",1]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_POS_ECEF",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_POS_ECEF",c.prototype.msg_type=521,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),c.prototype.fieldSpec.push(["x","writeDoubleLE",8]),c.prototype.fieldSpec.push(["y","writeDoubleLE",8]),c.prototype.fieldSpec.push(["z","writeDoubleLE",8]),c.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),c.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),c.prototype.fieldSpec.push(["flags","writeUInt8",1]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_POS_ECEF_COV",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_POS_ECEF_COV",u.prototype.msg_type=532,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").floatle("cov_x_x").floatle("cov_x_y").floatle("cov_x_z").floatle("cov_y_y").floatle("cov_y_z").floatle("cov_z_z").uint8("n_sats").uint8("flags"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),u.prototype.fieldSpec.push(["x","writeDoubleLE",8]),u.prototype.fieldSpec.push(["y","writeDoubleLE",8]),u.prototype.fieldSpec.push(["z","writeDoubleLE",8]),u.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),u.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),u.prototype.fieldSpec.push(["flags","writeUInt8",1]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH",y.prototype.msg_type=522,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),y.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),y.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),y.prototype.fieldSpec.push(["height","writeDoubleLE",8]),y.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),y.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),y.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),y.prototype.fieldSpec.push(["flags","writeUInt8",1]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH_COV",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH_COV",h.prototype.msg_type=529,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").floatle("cov_n_n").floatle("cov_n_e").floatle("cov_n_d").floatle("cov_e_e").floatle("cov_e_d").floatle("cov_d_d").uint8("n_sats").uint8("flags"),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),h.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),h.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),h.prototype.fieldSpec.push(["height","writeDoubleLE",8]),h.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),h.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),h.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),h.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),h.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),h.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),h.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),h.prototype.fieldSpec.push(["flags","writeUInt8",1]);let f=function(e,t){return r.call(this,e),this.messageType="EstimatedHorizontalErrorEllipse",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="EstimatedHorizontalErrorEllipse",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").floatle("semi_major").floatle("semi_minor").floatle("orientation"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["semi_major","writeFloatLE",4]),f.prototype.fieldSpec.push(["semi_minor","writeFloatLE",4]),f.prototype.fieldSpec.push(["orientation","writeFloatLE",4]);let d=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH_ACC",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH_ACC",d.prototype.msg_type=536,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").doublele("orthometric_height").floatle("h_accuracy").floatle("v_accuracy").floatle("ct_accuracy").floatle("at_accuracy").nest("h_ellipse",{type:f.prototype.parser}).uint8("confidence_and_geoid").uint8("n_sats").uint8("flags"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),d.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),d.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),d.prototype.fieldSpec.push(["height","writeDoubleLE",8]),d.prototype.fieldSpec.push(["orthometric_height","writeDoubleLE",8]),d.prototype.fieldSpec.push(["h_accuracy","writeFloatLE",4]),d.prototype.fieldSpec.push(["v_accuracy","writeFloatLE",4]),d.prototype.fieldSpec.push(["ct_accuracy","writeFloatLE",4]),d.prototype.fieldSpec.push(["at_accuracy","writeFloatLE",4]),d.prototype.fieldSpec.push(["h_ellipse",f.prototype.fieldSpec]),d.prototype.fieldSpec.push(["confidence_and_geoid","writeUInt8",1]),d.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),d.prototype.fieldSpec.push(["flags","writeUInt8",1]);let _=function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_ECEF",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_ECEF",_.prototype.msg_type=523,_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),_.prototype.fieldSpec.push(["x","writeInt32LE",4]),_.prototype.fieldSpec.push(["y","writeInt32LE",4]),_.prototype.fieldSpec.push(["z","writeInt32LE",4]),_.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),_.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),_.prototype.fieldSpec.push(["flags","writeUInt8",1]);let S=function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_NED",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_NED",S.prototype.msg_type=524,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),S.prototype.fieldSpec.push(["n","writeInt32LE",4]),S.prototype.fieldSpec.push(["e","writeInt32LE",4]),S.prototype.fieldSpec.push(["d","writeInt32LE",4]),S.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),S.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),S.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),S.prototype.fieldSpec.push(["flags","writeUInt8",1]);let g=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_ECEF",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="MSG_VEL_ECEF",g.prototype.msg_type=525,g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),g.prototype.fieldSpec.push(["x","writeInt32LE",4]),g.prototype.fieldSpec.push(["y","writeInt32LE",4]),g.prototype.fieldSpec.push(["z","writeInt32LE",4]),g.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),g.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),g.prototype.fieldSpec.push(["flags","writeUInt8",1]);let w=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_ECEF_COV",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="MSG_VEL_ECEF_COV",w.prototype.msg_type=533,w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").floatle("cov_x_x").floatle("cov_x_y").floatle("cov_x_z").floatle("cov_y_y").floatle("cov_y_z").floatle("cov_z_z").uint8("n_sats").uint8("flags"),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),w.prototype.fieldSpec.push(["x","writeInt32LE",4]),w.prototype.fieldSpec.push(["y","writeInt32LE",4]),w.prototype.fieldSpec.push(["z","writeInt32LE",4]),w.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),w.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),w.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),w.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),w.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),w.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),w.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),w.prototype.fieldSpec.push(["flags","writeUInt8",1]);let E=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_NED",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(r.prototype)).messageType="MSG_VEL_NED",E.prototype.msg_type=526,E.prototype.constructor=E,E.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),E.prototype.fieldSpec.push(["n","writeInt32LE",4]),E.prototype.fieldSpec.push(["e","writeInt32LE",4]),E.prototype.fieldSpec.push(["d","writeInt32LE",4]),E.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),E.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),E.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),E.prototype.fieldSpec.push(["flags","writeUInt8",1]);let m=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_NED_COV",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(r.prototype)).messageType="MSG_VEL_NED_COV",m.prototype.msg_type=530,m.prototype.constructor=m,m.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").floatle("cov_n_n").floatle("cov_n_e").floatle("cov_n_d").floatle("cov_e_e").floatle("cov_e_d").floatle("cov_d_d").uint8("n_sats").uint8("flags"),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),m.prototype.fieldSpec.push(["n","writeInt32LE",4]),m.prototype.fieldSpec.push(["e","writeInt32LE",4]),m.prototype.fieldSpec.push(["d","writeInt32LE",4]),m.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),m.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),m.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),m.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),m.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),m.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),m.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),m.prototype.fieldSpec.push(["flags","writeUInt8",1]);let b=function(e,t){return r.call(this,e),this.messageType="MSG_POS_ECEF_GNSS",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(r.prototype)).messageType="MSG_POS_ECEF_GNSS",b.prototype.msg_type=553,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),b.prototype.fieldSpec.push(["x","writeDoubleLE",8]),b.prototype.fieldSpec.push(["y","writeDoubleLE",8]),b.prototype.fieldSpec.push(["z","writeDoubleLE",8]),b.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),b.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),b.prototype.fieldSpec.push(["flags","writeUInt8",1]);let I=function(e,t){return r.call(this,e),this.messageType="MSG_POS_ECEF_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(r.prototype)).messageType="MSG_POS_ECEF_COV_GNSS",I.prototype.msg_type=564,I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").floatle("cov_x_x").floatle("cov_x_y").floatle("cov_x_z").floatle("cov_y_y").floatle("cov_y_z").floatle("cov_z_z").uint8("n_sats").uint8("flags"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),I.prototype.fieldSpec.push(["x","writeDoubleLE",8]),I.prototype.fieldSpec.push(["y","writeDoubleLE",8]),I.prototype.fieldSpec.push(["z","writeDoubleLE",8]),I.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),I.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),I.prototype.fieldSpec.push(["flags","writeUInt8",1]);let L=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH_GNSS",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH_GNSS",L.prototype.msg_type=554,L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),L.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),L.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),L.prototype.fieldSpec.push(["height","writeDoubleLE",8]),L.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),L.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),L.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),L.prototype.fieldSpec.push(["flags","writeUInt8",1]);let T=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH_COV_GNSS",T.prototype.msg_type=561,T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").floatle("cov_n_n").floatle("cov_n_e").floatle("cov_n_d").floatle("cov_e_e").floatle("cov_e_d").floatle("cov_d_d").uint8("n_sats").uint8("flags"),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),T.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),T.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),T.prototype.fieldSpec.push(["height","writeDoubleLE",8]),T.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),T.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),T.prototype.fieldSpec.push(["flags","writeUInt8",1]);let v=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_ECEF_GNSS",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(r.prototype)).messageType="MSG_VEL_ECEF_GNSS",v.prototype.msg_type=557,v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),v.prototype.fieldSpec.push(["x","writeInt32LE",4]),v.prototype.fieldSpec.push(["y","writeInt32LE",4]),v.prototype.fieldSpec.push(["z","writeInt32LE",4]),v.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),v.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),v.prototype.fieldSpec.push(["flags","writeUInt8",1]);let U=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_ECEF_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(r.prototype)).messageType="MSG_VEL_ECEF_COV_GNSS",U.prototype.msg_type=565,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").floatle("cov_x_x").floatle("cov_x_y").floatle("cov_x_z").floatle("cov_y_y").floatle("cov_y_z").floatle("cov_z_z").uint8("n_sats").uint8("flags"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),U.prototype.fieldSpec.push(["x","writeInt32LE",4]),U.prototype.fieldSpec.push(["y","writeInt32LE",4]),U.prototype.fieldSpec.push(["z","writeInt32LE",4]),U.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),U.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),U.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),U.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),U.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),U.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),U.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),U.prototype.fieldSpec.push(["flags","writeUInt8",1]);let M=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_NED_GNSS",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(r.prototype)).messageType="MSG_VEL_NED_GNSS",M.prototype.msg_type=558,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),M.prototype.fieldSpec.push(["n","writeInt32LE",4]),M.prototype.fieldSpec.push(["e","writeInt32LE",4]),M.prototype.fieldSpec.push(["d","writeInt32LE",4]),M.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),M.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),M.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),M.prototype.fieldSpec.push(["flags","writeUInt8",1]);let D=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_NED_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(r.prototype)).messageType="MSG_VEL_NED_COV_GNSS",D.prototype.msg_type=562,D.prototype.constructor=D,D.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").floatle("cov_n_n").floatle("cov_n_e").floatle("cov_n_d").floatle("cov_e_e").floatle("cov_e_d").floatle("cov_d_d").uint8("n_sats").uint8("flags"),D.prototype.fieldSpec=[],D.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),D.prototype.fieldSpec.push(["n","writeInt32LE",4]),D.prototype.fieldSpec.push(["e","writeInt32LE",4]),D.prototype.fieldSpec.push(["d","writeInt32LE",4]),D.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),D.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),D.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),D.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),D.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),D.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),D.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),D.prototype.fieldSpec.push(["flags","writeUInt8",1]);let O=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_BODY",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(r.prototype)).messageType="MSG_VEL_BODY",O.prototype.msg_type=531,O.prototype.constructor=O,O.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").floatle("cov_x_x").floatle("cov_x_y").floatle("cov_x_z").floatle("cov_y_y").floatle("cov_y_z").floatle("cov_z_z").uint8("n_sats").uint8("flags"),O.prototype.fieldSpec=[],O.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),O.prototype.fieldSpec.push(["x","writeInt32LE",4]),O.prototype.fieldSpec.push(["y","writeInt32LE",4]),O.prototype.fieldSpec.push(["z","writeInt32LE",4]),O.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),O.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),O.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),O.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),O.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),O.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),O.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),O.prototype.fieldSpec.push(["flags","writeUInt8",1]);let G=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_COG",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(r.prototype)).messageType="MSG_VEL_COG",G.prototype.msg_type=540,G.prototype.constructor=G,G.prototype.parser=(new o).endianess("little").uint32("tow").uint32("cog").uint32("sog").int32("v_up").uint32("cog_accuracy").uint32("sog_accuracy").uint32("v_up_accuracy").uint16("flags"),G.prototype.fieldSpec=[],G.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),G.prototype.fieldSpec.push(["cog","writeUInt32LE",4]),G.prototype.fieldSpec.push(["sog","writeUInt32LE",4]),G.prototype.fieldSpec.push(["v_up","writeInt32LE",4]),G.prototype.fieldSpec.push(["cog_accuracy","writeUInt32LE",4]),G.prototype.fieldSpec.push(["sog_accuracy","writeUInt32LE",4]),G.prototype.fieldSpec.push(["v_up_accuracy","writeUInt32LE",4]),G.prototype.fieldSpec.push(["flags","writeUInt16LE",2]);let A=function(e,t){return r.call(this,e),this.messageType="MSG_AGE_CORRECTIONS",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(r.prototype)).messageType="MSG_AGE_CORRECTIONS",A.prototype.msg_type=528,A.prototype.constructor=A,A.prototype.parser=(new o).endianess("little").uint32("tow").uint16("age"),A.prototype.fieldSpec=[],A.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),A.prototype.fieldSpec.push(["age","writeUInt16LE",2]);let C=function(e,t){return r.call(this,e),this.messageType="MSG_GPS_TIME_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(r.prototype)).messageType="MSG_GPS_TIME_DEP_A",C.prototype.msg_type=256,C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tow").int32("ns_residual").uint8("flags"),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),C.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),C.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),C.prototype.fieldSpec.push(["flags","writeUInt8",1]);let R=function(e,t){return r.call(this,e),this.messageType="MSG_DOPS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(r.prototype)).messageType="MSG_DOPS_DEP_A",R.prototype.msg_type=518,R.prototype.constructor=R,R.prototype.parser=(new o).endianess("little").uint32("tow").uint16("gdop").uint16("pdop").uint16("tdop").uint16("hdop").uint16("vdop"),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),R.prototype.fieldSpec.push(["gdop","writeUInt16LE",2]),R.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),R.prototype.fieldSpec.push(["tdop","writeUInt16LE",2]),R.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),R.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]);let P=function(e,t){return r.call(this,e),this.messageType="MSG_POS_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(r.prototype)).messageType="MSG_POS_ECEF_DEP_A",P.prototype.msg_type=512,P.prototype.constructor=P,P.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),P.prototype.fieldSpec=[],P.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),P.prototype.fieldSpec.push(["x","writeDoubleLE",8]),P.prototype.fieldSpec.push(["y","writeDoubleLE",8]),P.prototype.fieldSpec.push(["z","writeDoubleLE",8]),P.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),P.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),P.prototype.fieldSpec.push(["flags","writeUInt8",1]);let N=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH_DEP_A",N.prototype.msg_type=513,N.prototype.constructor=N,N.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),N.prototype.fieldSpec=[],N.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),N.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),N.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),N.prototype.fieldSpec.push(["height","writeDoubleLE",8]),N.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),N.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),N.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),N.prototype.fieldSpec.push(["flags","writeUInt8",1]);let j=function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_ECEF_DEP_A",j.prototype.msg_type=514,j.prototype.constructor=j,j.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),j.prototype.fieldSpec=[],j.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),j.prototype.fieldSpec.push(["x","writeInt32LE",4]),j.prototype.fieldSpec.push(["y","writeInt32LE",4]),j.prototype.fieldSpec.push(["z","writeInt32LE",4]),j.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),j.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),j.prototype.fieldSpec.push(["flags","writeUInt8",1]);let x=function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_NED_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(x.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_NED_DEP_A",x.prototype.msg_type=515,x.prototype.constructor=x,x.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),x.prototype.fieldSpec=[],x.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),x.prototype.fieldSpec.push(["n","writeInt32LE",4]),x.prototype.fieldSpec.push(["e","writeInt32LE",4]),x.prototype.fieldSpec.push(["d","writeInt32LE",4]),x.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),x.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),x.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),x.prototype.fieldSpec.push(["flags","writeUInt8",1]);let F=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(F.prototype=Object.create(r.prototype)).messageType="MSG_VEL_ECEF_DEP_A",F.prototype.msg_type=516,F.prototype.constructor=F,F.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),F.prototype.fieldSpec=[],F.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),F.prototype.fieldSpec.push(["x","writeInt32LE",4]),F.prototype.fieldSpec.push(["y","writeInt32LE",4]),F.prototype.fieldSpec.push(["z","writeInt32LE",4]),F.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),F.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),F.prototype.fieldSpec.push(["flags","writeUInt8",1]);let k=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_NED_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(k.prototype=Object.create(r.prototype)).messageType="MSG_VEL_NED_DEP_A",k.prototype.msg_type=517,k.prototype.constructor=k,k.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),k.prototype.fieldSpec=[],k.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),k.prototype.fieldSpec.push(["n","writeInt32LE",4]),k.prototype.fieldSpec.push(["e","writeInt32LE",4]),k.prototype.fieldSpec.push(["d","writeInt32LE",4]),k.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),k.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),k.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),k.prototype.fieldSpec.push(["flags","writeUInt8",1]);let B=function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_HEADING_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(B.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_HEADING_DEP_A",B.prototype.msg_type=519,B.prototype.constructor=B,B.prototype.parser=(new o).endianess("little").uint32("tow").uint32("heading").uint8("n_sats").uint8("flags"),B.prototype.fieldSpec=[],B.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),B.prototype.fieldSpec.push(["heading","writeUInt32LE",4]),B.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),B.prototype.fieldSpec.push(["flags","writeUInt8",1]);let q=function(e,t){return r.call(this,e),this.messageType="MSG_PROTECTION_LEVEL_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(q.prototype=Object.create(r.prototype)).messageType="MSG_PROTECTION_LEVEL_DEP_A",q.prototype.msg_type=534,q.prototype.constructor=q,q.prototype.parser=(new o).endianess("little").uint32("tow").uint16("vpl").uint16("hpl").doublele("lat").doublele("lon").doublele("height").uint8("flags"),q.prototype.fieldSpec=[],q.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),q.prototype.fieldSpec.push(["vpl","writeUInt16LE",2]),q.prototype.fieldSpec.push(["hpl","writeUInt16LE",2]),q.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),q.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),q.prototype.fieldSpec.push(["height","writeDoubleLE",8]),q.prototype.fieldSpec.push(["flags","writeUInt8",1]);let z=function(e,t){return r.call(this,e),this.messageType="MSG_PROTECTION_LEVEL",this.fields=t||this.parser.parse(e.payload),this};(z.prototype=Object.create(r.prototype)).messageType="MSG_PROTECTION_LEVEL",z.prototype.msg_type=535,z.prototype.constructor=z,z.prototype.parser=(new o).endianess("little").uint32("tow").int16("wn").uint16("hpl").uint16("vpl").uint16("atpl").uint16("ctpl").uint16("hvpl").uint16("vvpl").uint16("hopl").uint16("popl").uint16("ropl").doublele("lat").doublele("lon").doublele("height").int32("v_x").int32("v_y").int32("v_z").int32("roll").int32("pitch").int32("heading").uint32("flags"),z.prototype.fieldSpec=[],z.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),z.prototype.fieldSpec.push(["wn","writeInt16LE",2]),z.prototype.fieldSpec.push(["hpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["vpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["atpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["ctpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["hvpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["vvpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["hopl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["popl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["ropl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),z.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),z.prototype.fieldSpec.push(["height","writeDoubleLE",8]),z.prototype.fieldSpec.push(["v_x","writeInt32LE",4]),z.prototype.fieldSpec.push(["v_y","writeInt32LE",4]),z.prototype.fieldSpec.push(["v_z","writeInt32LE",4]),z.prototype.fieldSpec.push(["roll","writeInt32LE",4]),z.prototype.fieldSpec.push(["pitch","writeInt32LE",4]),z.prototype.fieldSpec.push(["heading","writeInt32LE",4]),z.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let H=function(e,t){return r.call(this,e),this.messageType="MSG_UTC_LEAP_SECOND",this.fields=t||this.parser.parse(e.payload),this};(H.prototype=Object.create(r.prototype)).messageType="MSG_UTC_LEAP_SECOND",H.prototype.msg_type=570,H.prototype.constructor=H,H.prototype.parser=(new o).endianess("little").int16("reserved_0").int16("reserved_1").int8("reserved_2").int8("count_before").uint16("reserved_3").uint16("reserved_4").uint16("ref_wn").uint8("ref_dn").int8("count_after"),H.prototype.fieldSpec=[],H.prototype.fieldSpec.push(["reserved_0","writeInt16LE",2]),H.prototype.fieldSpec.push(["reserved_1","writeInt16LE",2]),H.prototype.fieldSpec.push(["reserved_2","writeInt8",1]),H.prototype.fieldSpec.push(["count_before","writeInt8",1]),H.prototype.fieldSpec.push(["reserved_3","writeUInt16LE",2]),H.prototype.fieldSpec.push(["reserved_4","writeUInt16LE",2]),H.prototype.fieldSpec.push(["ref_wn","writeUInt16LE",2]),H.prototype.fieldSpec.push(["ref_dn","writeUInt8",1]),H.prototype.fieldSpec.push(["count_after","writeInt8",1]);let V=function(e,t){return r.call(this,e),this.messageType="MSG_REFERENCE_FRAME_PARAM",this.fields=t||this.parser.parse(e.payload),this};(V.prototype=Object.create(r.prototype)).messageType="MSG_REFERENCE_FRAME_PARAM",V.prototype.msg_type=580,V.prototype.constructor=V,V.prototype.parser=(new o).endianess("little").uint8("ssr_iod").string("sn",{length:32}).string("tn",{length:32}).uint8("sin").uint16("utn").uint16("re_t0").int32("delta_X0").int32("delta_Y0").int32("delta_Z0").int32("theta_01").int32("theta_02").int32("theta_03").int32("scale").int32("dot_delta_X0").int32("dot_delta_Y0").int32("dot_delta_Z0").int32("dot_theta_01").int32("dot_theta_02").int32("dot_theta_03").int16("dot_scale"),V.prototype.fieldSpec=[],V.prototype.fieldSpec.push(["ssr_iod","writeUInt8",1]),V.prototype.fieldSpec.push(["sn","string",32]),V.prototype.fieldSpec.push(["tn","string",32]),V.prototype.fieldSpec.push(["sin","writeUInt8",1]),V.prototype.fieldSpec.push(["utn","writeUInt16LE",2]),V.prototype.fieldSpec.push(["re_t0","writeUInt16LE",2]),V.prototype.fieldSpec.push(["delta_X0","writeInt32LE",4]),V.prototype.fieldSpec.push(["delta_Y0","writeInt32LE",4]),V.prototype.fieldSpec.push(["delta_Z0","writeInt32LE",4]),V.prototype.fieldSpec.push(["theta_01","writeInt32LE",4]),V.prototype.fieldSpec.push(["theta_02","writeInt32LE",4]),V.prototype.fieldSpec.push(["theta_03","writeInt32LE",4]),V.prototype.fieldSpec.push(["scale","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_delta_X0","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_delta_Y0","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_delta_Z0","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_theta_01","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_theta_02","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_theta_03","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_scale","writeInt16LE",2]);let Y=function(e,t){return r.call(this,e),this.messageType="MSG_POSE_RELATIVE",this.fields=t||this.parser.parse(e.payload),this};(Y.prototype=Object.create(r.prototype)).messageType="MSG_POSE_RELATIVE",Y.prototype.msg_type=581,Y.prototype.constructor=Y,Y.prototype.parser=(new o).endianess("little").uint32("tow").uint8("sensor_id").uint32("timestamp_1").uint32("timestamp_2").array("trans",{length:3,type:"int32le"}).int32("w").int32("x").int32("y").int32("z").floatle("cov_r_x_x").floatle("cov_r_x_y").floatle("cov_r_x_z").floatle("cov_r_y_y").floatle("cov_r_y_z").floatle("cov_r_z_z").floatle("cov_c_x_x").floatle("cov_c_x_y").floatle("cov_c_x_z").floatle("cov_c_y_y").floatle("cov_c_y_z").floatle("cov_c_z_z").uint8("flags"),Y.prototype.fieldSpec=[],Y.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),Y.prototype.fieldSpec.push(["sensor_id","writeUInt8",1]),Y.prototype.fieldSpec.push(["timestamp_1","writeUInt32LE",4]),Y.prototype.fieldSpec.push(["timestamp_2","writeUInt32LE",4]),Y.prototype.fieldSpec.push(["trans","array","writeInt32LE",function(){return 4},3]),Y.prototype.fieldSpec.push(["w","writeInt32LE",4]),Y.prototype.fieldSpec.push(["x","writeInt32LE",4]),Y.prototype.fieldSpec.push(["y","writeInt32LE",4]),Y.prototype.fieldSpec.push(["z","writeInt32LE",4]),Y.prototype.fieldSpec.push(["cov_r_x_x","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_r_x_y","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_r_x_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_r_y_y","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_r_y_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_r_z_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_x_x","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_x_y","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_x_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_y_y","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_y_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_z_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["flags","writeUInt8",1]),e.exports={258:i,MsgGpsTime:i,260:s,MsgGpsTimeGnss:s,259:n,MsgUtcTime:n,261:a,MsgUtcTimeGnss:a,520:l,MsgDops:l,521:c,MsgPosEcef:c,532:u,MsgPosEcefCov:u,522:y,MsgPosLlh:y,529:h,MsgPosLlhCov:h,EstimatedHorizontalErrorEllipse:f,536:d,MsgPosLlhAcc:d,523:_,MsgBaselineEcef:_,524:S,MsgBaselineNed:S,525:g,MsgVelEcef:g,533:w,MsgVelEcefCov:w,526:E,MsgVelNed:E,530:m,MsgVelNedCov:m,553:b,MsgPosEcefGnss:b,564:I,MsgPosEcefCovGnss:I,554:L,MsgPosLlhGnss:L,561:T,MsgPosLlhCovGnss:T,557:v,MsgVelEcefGnss:v,565:U,MsgVelEcefCovGnss:U,558:M,MsgVelNedGnss:M,562:D,MsgVelNedCovGnss:D,531:O,MsgVelBody:O,540:G,MsgVelCog:G,528:A,MsgAgeCorrections:A,256:C,MsgGpsTimeDepA:C,518:R,MsgDopsDepA:R,512:P,MsgPosEcefDepA:P,513:N,MsgPosLlhDepA:N,514:j,MsgBaselineEcefDepA:j,515:x,MsgBaselineNedDepA:x,516:F,MsgVelEcefDepA:F,517:k,MsgVelNedDepA:k,519:B,MsgBaselineHeadingDepA:B,534:q,MsgProtectionLevelDepA:q,535:z,MsgProtectionLevel:z,570:H,MsgUtcLeapSecond:H,580:V,MsgReferenceFrameParam:V,581:Y,MsgPoseRelative:Y}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal),s=(p(0).GnssSignalDep,p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_NDB_EVENT",this.fields=t||this.parser.parse(e.payload),this});(s.prototype=Object.create(r.prototype)).messageType="MSG_NDB_EVENT",s.prototype.msg_type=1024,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint64("recv_time").uint8("event").uint8("object_type").uint8("result").uint8("data_source").nest("object_sid",{type:i.prototype.parser}).nest("src_sid",{type:i.prototype.parser}).uint16("original_sender"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["recv_time","writeUInt64LE",8]),s.prototype.fieldSpec.push(["event","writeUInt8",1]),s.prototype.fieldSpec.push(["object_type","writeUInt8",1]),s.prototype.fieldSpec.push(["result","writeUInt8",1]),s.prototype.fieldSpec.push(["data_source","writeUInt8",1]),s.prototype.fieldSpec.push(["object_sid",i.prototype.fieldSpec]),s.prototype.fieldSpec.push(["src_sid",i.prototype.fieldSpec]),s.prototype.fieldSpec.push(["original_sender","writeUInt16LE",2]),e.exports={1024:s,MsgNdbEvent:s}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase),s=p(0).GnssSignal,n=p(0).GnssSignalDep,a=p(0).GPSTime,l=p(0).GPSTimeDep,c=p(0).GPSTimeSec,u=(p(0).SvId,function(e,t){return r.call(this,e),this.messageType="ObservationHeader",this.fields=t||this.parser.parse(e.payload),this});(u.prototype=Object.create(r.prototype)).messageType="ObservationHeader",u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").nest("t",{type:a.prototype.parser}).uint8("n_obs"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["t",a.prototype.fieldSpec]),u.prototype.fieldSpec.push(["n_obs","writeUInt8",1]);let y=function(e,t){return r.call(this,e),this.messageType="Doppler",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="Doppler",y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").int16("i").uint8("f"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["i","writeInt16LE",2]),y.prototype.fieldSpec.push(["f","writeUInt8",1]);let h=function(e,t){return r.call(this,e),this.messageType="PackedObsContent",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="PackedObsContent",h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:i.prototype.parser}).nest("D",{type:y.prototype.parser}).uint8("cn0").uint8("lock").uint8("flags").nest("sid",{type:s.prototype.parser}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["P","writeUInt32LE",4]),h.prototype.fieldSpec.push(["L",i.prototype.fieldSpec]),h.prototype.fieldSpec.push(["D",y.prototype.fieldSpec]),h.prototype.fieldSpec.push(["cn0","writeUInt8",1]),h.prototype.fieldSpec.push(["lock","writeUInt8",1]),h.prototype.fieldSpec.push(["flags","writeUInt8",1]),h.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);let f=function(e,t){return r.call(this,e),this.messageType="PackedOsrContent",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="PackedOsrContent",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:i.prototype.parser}).uint8("lock").uint8("flags").nest("sid",{type:s.prototype.parser}).uint16("iono_std").uint16("tropo_std").uint16("range_std"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["P","writeUInt32LE",4]),f.prototype.fieldSpec.push(["L",i.prototype.fieldSpec]),f.prototype.fieldSpec.push(["lock","writeUInt8",1]),f.prototype.fieldSpec.push(["flags","writeUInt8",1]),f.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),f.prototype.fieldSpec.push(["iono_std","writeUInt16LE",2]),f.prototype.fieldSpec.push(["tropo_std","writeUInt16LE",2]),f.prototype.fieldSpec.push(["range_std","writeUInt16LE",2]);let d=function(e,t){return r.call(this,e),this.messageType="MSG_OBS",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_OBS",d.prototype.msg_type=74,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").nest("header",{type:u.prototype.parser}).array("obs",{type:h.prototype.parser,readUntil:"eof"}),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["header",u.prototype.fieldSpec]),d.prototype.fieldSpec.push(["obs","array",h.prototype.fieldSpec,function(){return this.fields.array.length},null]);let _=function(e,t){return r.call(this,e),this.messageType="MSG_BASE_POS_LLH",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="MSG_BASE_POS_LLH",_.prototype.msg_type=68,_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little").doublele("lat").doublele("lon").doublele("height"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),_.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),_.prototype.fieldSpec.push(["height","writeDoubleLE",8]);let S=function(e,t){return r.call(this,e),this.messageType="MSG_BASE_POS_ECEF",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_BASE_POS_ECEF",S.prototype.msg_type=72,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").doublele("x").doublele("y").doublele("z"),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["x","writeDoubleLE",8]),S.prototype.fieldSpec.push(["y","writeDoubleLE",8]),S.prototype.fieldSpec.push(["z","writeDoubleLE",8]);let g=function(e,t){return r.call(this,e),this.messageType="EphemerisCommonContent",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="EphemerisCommonContent",g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).nest("toe",{type:c.prototype.parser}).floatle("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),g.prototype.fieldSpec.push(["toe",c.prototype.fieldSpec]),g.prototype.fieldSpec.push(["ura","writeFloatLE",4]),g.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),g.prototype.fieldSpec.push(["valid","writeUInt8",1]),g.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);let w=function(e,t){return r.call(this,e),this.messageType="EphemerisCommonContentDepB",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="EphemerisCommonContentDepB",w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).nest("toe",{type:c.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),w.prototype.fieldSpec.push(["toe",c.prototype.fieldSpec]),w.prototype.fieldSpec.push(["ura","writeDoubleLE",8]),w.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),w.prototype.fieldSpec.push(["valid","writeUInt8",1]),w.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);let E=function(e,t){return r.call(this,e),this.messageType="EphemerisCommonContentDepA",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(r.prototype)).messageType="EphemerisCommonContentDepA",E.prototype.constructor=E,E.prototype.parser=(new o).endianess("little").nest("sid",{type:n.prototype.parser}).nest("toe",{type:l.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),E.prototype.fieldSpec.push(["toe",l.prototype.fieldSpec]),E.prototype.fieldSpec.push(["ura","writeDoubleLE",8]),E.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),E.prototype.fieldSpec.push(["valid","writeUInt8",1]),E.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);let m=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GPS_DEP_E",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GPS_DEP_E",m.prototype.msg_type=129,m.prototype.constructor=m,m.prototype.parser=(new o).endianess("little").nest("common",{type:E.prototype.parser}).doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").nest("toc",{type:l.prototype.parser}).uint8("iode").uint16("iodc"),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["common",E.prototype.fieldSpec]),m.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),m.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),m.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),m.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),m.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),m.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),m.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),m.prototype.fieldSpec.push(["w","writeDoubleLE",8]),m.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),m.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),m.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),m.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),m.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),m.prototype.fieldSpec.push(["toc",l.prototype.fieldSpec]),m.prototype.fieldSpec.push(["iode","writeUInt8",1]),m.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let b=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GPS_DEP_F",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GPS_DEP_F",b.prototype.msg_type=134,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").nest("common",{type:w.prototype.parser}).doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").nest("toc",{type:c.prototype.parser}).uint8("iode").uint16("iodc"),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["common",w.prototype.fieldSpec]),b.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),b.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),b.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),b.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),b.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),b.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),b.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),b.prototype.fieldSpec.push(["w","writeDoubleLE",8]),b.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),b.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),b.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),b.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),b.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),b.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),b.prototype.fieldSpec.push(["iode","writeUInt8",1]),b.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let I=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GPS",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GPS",I.prototype.msg_type=138,I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("tgd").floatle("c_rs").floatle("c_rc").floatle("c_uc").floatle("c_us").floatle("c_ic").floatle("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").floatle("af0").floatle("af1").floatle("af2").nest("toc",{type:c.prototype.parser}).uint8("iode").uint16("iodc"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),I.prototype.fieldSpec.push(["tgd","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),I.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),I.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),I.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),I.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),I.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),I.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),I.prototype.fieldSpec.push(["w","writeDoubleLE",8]),I.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),I.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),I.prototype.fieldSpec.push(["af0","writeFloatLE",4]),I.prototype.fieldSpec.push(["af1","writeFloatLE",4]),I.prototype.fieldSpec.push(["af2","writeFloatLE",4]),I.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),I.prototype.fieldSpec.push(["iode","writeUInt8",1]),I.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let L=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_QZSS",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_QZSS",L.prototype.msg_type=142,L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("tgd").floatle("c_rs").floatle("c_rc").floatle("c_uc").floatle("c_us").floatle("c_ic").floatle("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").floatle("af0").floatle("af1").floatle("af2").nest("toc",{type:c.prototype.parser}).uint8("iode").uint16("iodc"),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),L.prototype.fieldSpec.push(["tgd","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),L.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),L.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),L.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),L.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),L.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),L.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),L.prototype.fieldSpec.push(["w","writeDoubleLE",8]),L.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),L.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),L.prototype.fieldSpec.push(["af0","writeFloatLE",4]),L.prototype.fieldSpec.push(["af1","writeFloatLE",4]),L.prototype.fieldSpec.push(["af2","writeFloatLE",4]),L.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),L.prototype.fieldSpec.push(["iode","writeUInt8",1]),L.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let T=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_BDS",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_BDS",T.prototype.msg_type=137,T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("tgd1").floatle("tgd2").floatle("c_rs").floatle("c_rc").floatle("c_uc").floatle("c_us").floatle("c_ic").floatle("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").floatle("af1").floatle("af2").nest("toc",{type:c.prototype.parser}).uint8("iode").uint16("iodc"),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),T.prototype.fieldSpec.push(["tgd1","writeFloatLE",4]),T.prototype.fieldSpec.push(["tgd2","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),T.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),T.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),T.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),T.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),T.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),T.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),T.prototype.fieldSpec.push(["w","writeDoubleLE",8]),T.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),T.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),T.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),T.prototype.fieldSpec.push(["af1","writeFloatLE",4]),T.prototype.fieldSpec.push(["af2","writeFloatLE",4]),T.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),T.prototype.fieldSpec.push(["iode","writeUInt8",1]),T.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let v=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GAL_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GAL_DEP_A",v.prototype.msg_type=149,v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("bgd_e1e5a").floatle("bgd_e1e5b").floatle("c_rs").floatle("c_rc").floatle("c_uc").floatle("c_us").floatle("c_ic").floatle("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").floatle("af2").nest("toc",{type:c.prototype.parser}).uint16("iode").uint16("iodc"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),v.prototype.fieldSpec.push(["bgd_e1e5a","writeFloatLE",4]),v.prototype.fieldSpec.push(["bgd_e1e5b","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),v.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),v.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),v.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),v.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),v.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),v.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),v.prototype.fieldSpec.push(["w","writeDoubleLE",8]),v.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),v.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),v.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),v.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),v.prototype.fieldSpec.push(["af2","writeFloatLE",4]),v.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),v.prototype.fieldSpec.push(["iode","writeUInt16LE",2]),v.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let U=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GAL",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GAL",U.prototype.msg_type=141,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("bgd_e1e5a").floatle("bgd_e1e5b").floatle("c_rs").floatle("c_rc").floatle("c_uc").floatle("c_us").floatle("c_ic").floatle("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").floatle("af2").nest("toc",{type:c.prototype.parser}).uint16("iode").uint16("iodc").uint8("source"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),U.prototype.fieldSpec.push(["bgd_e1e5a","writeFloatLE",4]),U.prototype.fieldSpec.push(["bgd_e1e5b","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),U.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),U.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),U.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),U.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),U.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),U.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),U.prototype.fieldSpec.push(["w","writeDoubleLE",8]),U.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),U.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),U.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),U.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),U.prototype.fieldSpec.push(["af2","writeFloatLE",4]),U.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),U.prototype.fieldSpec.push(["iode","writeUInt16LE",2]),U.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),U.prototype.fieldSpec.push(["source","writeUInt8",1]);let M=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_SBAS_DEP_A",M.prototype.msg_type=130,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").nest("common",{type:E.prototype.parser}).array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}).doublele("a_gf0").doublele("a_gf1"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["common",E.prototype.fieldSpec]),M.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),M.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),M.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]),M.prototype.fieldSpec.push(["a_gf0","writeDoubleLE",8]),M.prototype.fieldSpec.push(["a_gf1","writeDoubleLE",8]);let D=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_A",D.prototype.msg_type=131,D.prototype.constructor=D,D.prototype.parser=(new o).endianess("little").nest("common",{type:E.prototype.parser}).doublele("gamma").doublele("tau").array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}),D.prototype.fieldSpec=[],D.prototype.fieldSpec.push(["common",E.prototype.fieldSpec]),D.prototype.fieldSpec.push(["gamma","writeDoubleLE",8]),D.prototype.fieldSpec.push(["tau","writeDoubleLE",8]),D.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),D.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),D.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]);let O=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_SBAS_DEP_B",O.prototype.msg_type=132,O.prototype.constructor=O,O.prototype.parser=(new o).endianess("little").nest("common",{type:w.prototype.parser}).array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}).doublele("a_gf0").doublele("a_gf1"),O.prototype.fieldSpec=[],O.prototype.fieldSpec.push(["common",w.prototype.fieldSpec]),O.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),O.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),O.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]),O.prototype.fieldSpec.push(["a_gf0","writeDoubleLE",8]),O.prototype.fieldSpec.push(["a_gf1","writeDoubleLE",8]);let G=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_SBAS",G.prototype.msg_type=140,G.prototype.constructor=G,G.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"floatle"}).array("acc",{length:3,type:"floatle"}).floatle("a_gf0").floatle("a_gf1"),G.prototype.fieldSpec=[],G.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),G.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),G.prototype.fieldSpec.push(["vel","array","writeFloatLE",function(){return 4},3]),G.prototype.fieldSpec.push(["acc","array","writeFloatLE",function(){return 4},3]),G.prototype.fieldSpec.push(["a_gf0","writeFloatLE",4]),G.prototype.fieldSpec.push(["a_gf1","writeFloatLE",4]);let A=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_B",A.prototype.msg_type=133,A.prototype.constructor=A,A.prototype.parser=(new o).endianess("little").nest("common",{type:w.prototype.parser}).doublele("gamma").doublele("tau").array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}),A.prototype.fieldSpec=[],A.prototype.fieldSpec.push(["common",w.prototype.fieldSpec]),A.prototype.fieldSpec.push(["gamma","writeDoubleLE",8]),A.prototype.fieldSpec.push(["tau","writeDoubleLE",8]),A.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),A.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),A.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]);let C=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_C",C.prototype.msg_type=135,C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").nest("common",{type:w.prototype.parser}).doublele("gamma").doublele("tau").doublele("d_tau").array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}).uint8("fcn"),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["common",w.prototype.fieldSpec]),C.prototype.fieldSpec.push(["gamma","writeDoubleLE",8]),C.prototype.fieldSpec.push(["tau","writeDoubleLE",8]),C.prototype.fieldSpec.push(["d_tau","writeDoubleLE",8]),C.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),C.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),C.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]),C.prototype.fieldSpec.push(["fcn","writeUInt8",1]);let R=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_D",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_D",R.prototype.msg_type=136,R.prototype.constructor=R,R.prototype.parser=(new o).endianess("little").nest("common",{type:w.prototype.parser}).doublele("gamma").doublele("tau").doublele("d_tau").array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}).uint8("fcn").uint8("iod"),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["common",w.prototype.fieldSpec]),R.prototype.fieldSpec.push(["gamma","writeDoubleLE",8]),R.prototype.fieldSpec.push(["tau","writeDoubleLE",8]),R.prototype.fieldSpec.push(["d_tau","writeDoubleLE",8]),R.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),R.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),R.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]),R.prototype.fieldSpec.push(["fcn","writeUInt8",1]),R.prototype.fieldSpec.push(["iod","writeUInt8",1]);let P=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GLO",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GLO",P.prototype.msg_type=139,P.prototype.constructor=P,P.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("gamma").floatle("tau").floatle("d_tau").array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"floatle"}).uint8("fcn").uint8("iod"),P.prototype.fieldSpec=[],P.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),P.prototype.fieldSpec.push(["gamma","writeFloatLE",4]),P.prototype.fieldSpec.push(["tau","writeFloatLE",4]),P.prototype.fieldSpec.push(["d_tau","writeFloatLE",4]),P.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),P.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),P.prototype.fieldSpec.push(["acc","array","writeFloatLE",function(){return 4},3]),P.prototype.fieldSpec.push(["fcn","writeUInt8",1]),P.prototype.fieldSpec.push(["iod","writeUInt8",1]);let N=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_D",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_DEP_D",N.prototype.msg_type=128,N.prototype.constructor=N,N.prototype.parser=(new o).endianess("little").doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").doublele("toe_tow").uint16("toe_wn").doublele("toc_tow").uint16("toc_wn").uint8("valid").uint8("healthy").nest("sid",{type:n.prototype.parser}).uint8("iode").uint16("iodc").uint32("reserved"),N.prototype.fieldSpec=[],N.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),N.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),N.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),N.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),N.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),N.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),N.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),N.prototype.fieldSpec.push(["w","writeDoubleLE",8]),N.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),N.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),N.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),N.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),N.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),N.prototype.fieldSpec.push(["toe_tow","writeDoubleLE",8]),N.prototype.fieldSpec.push(["toe_wn","writeUInt16LE",2]),N.prototype.fieldSpec.push(["toc_tow","writeDoubleLE",8]),N.prototype.fieldSpec.push(["toc_wn","writeUInt16LE",2]),N.prototype.fieldSpec.push(["valid","writeUInt8",1]),N.prototype.fieldSpec.push(["healthy","writeUInt8",1]),N.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),N.prototype.fieldSpec.push(["iode","writeUInt8",1]),N.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),N.prototype.fieldSpec.push(["reserved","writeUInt32LE",4]);let j=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_DEP_A",j.prototype.msg_type=26,j.prototype.constructor=j,j.prototype.parser=(new o).endianess("little").doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").doublele("toe_tow").uint16("toe_wn").doublele("toc_tow").uint16("toc_wn").uint8("valid").uint8("healthy").uint8("prn"),j.prototype.fieldSpec=[],j.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),j.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),j.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),j.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),j.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),j.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),j.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),j.prototype.fieldSpec.push(["w","writeDoubleLE",8]),j.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),j.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),j.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),j.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),j.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),j.prototype.fieldSpec.push(["toe_tow","writeDoubleLE",8]),j.prototype.fieldSpec.push(["toe_wn","writeUInt16LE",2]),j.prototype.fieldSpec.push(["toc_tow","writeDoubleLE",8]),j.prototype.fieldSpec.push(["toc_wn","writeUInt16LE",2]),j.prototype.fieldSpec.push(["valid","writeUInt8",1]),j.prototype.fieldSpec.push(["healthy","writeUInt8",1]),j.prototype.fieldSpec.push(["prn","writeUInt8",1]);let x=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(x.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_DEP_B",x.prototype.msg_type=70,x.prototype.constructor=x,x.prototype.parser=(new o).endianess("little").doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").doublele("toe_tow").uint16("toe_wn").doublele("toc_tow").uint16("toc_wn").uint8("valid").uint8("healthy").uint8("prn").uint8("iode"),x.prototype.fieldSpec=[],x.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),x.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),x.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),x.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),x.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),x.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),x.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),x.prototype.fieldSpec.push(["w","writeDoubleLE",8]),x.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),x.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),x.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),x.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),x.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),x.prototype.fieldSpec.push(["toe_tow","writeDoubleLE",8]),x.prototype.fieldSpec.push(["toe_wn","writeUInt16LE",2]),x.prototype.fieldSpec.push(["toc_tow","writeDoubleLE",8]),x.prototype.fieldSpec.push(["toc_wn","writeUInt16LE",2]),x.prototype.fieldSpec.push(["valid","writeUInt8",1]),x.prototype.fieldSpec.push(["healthy","writeUInt8",1]),x.prototype.fieldSpec.push(["prn","writeUInt8",1]),x.prototype.fieldSpec.push(["iode","writeUInt8",1]);let F=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(F.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_DEP_C",F.prototype.msg_type=71,F.prototype.constructor=F,F.prototype.parser=(new o).endianess("little").doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").doublele("toe_tow").uint16("toe_wn").doublele("toc_tow").uint16("toc_wn").uint8("valid").uint8("healthy").nest("sid",{type:n.prototype.parser}).uint8("iode").uint16("iodc").uint32("reserved"),F.prototype.fieldSpec=[],F.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),F.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),F.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),F.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),F.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),F.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),F.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),F.prototype.fieldSpec.push(["w","writeDoubleLE",8]),F.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),F.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),F.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),F.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),F.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),F.prototype.fieldSpec.push(["toe_tow","writeDoubleLE",8]),F.prototype.fieldSpec.push(["toe_wn","writeUInt16LE",2]),F.prototype.fieldSpec.push(["toc_tow","writeDoubleLE",8]),F.prototype.fieldSpec.push(["toc_wn","writeUInt16LE",2]),F.prototype.fieldSpec.push(["valid","writeUInt8",1]),F.prototype.fieldSpec.push(["healthy","writeUInt8",1]),F.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),F.prototype.fieldSpec.push(["iode","writeUInt8",1]),F.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),F.prototype.fieldSpec.push(["reserved","writeUInt32LE",4]);let k=function(e,t){return r.call(this,e),this.messageType="ObservationHeaderDep",this.fields=t||this.parser.parse(e.payload),this};(k.prototype=Object.create(r.prototype)).messageType="ObservationHeaderDep",k.prototype.constructor=k,k.prototype.parser=(new o).endianess("little").nest("t",{type:l.prototype.parser}).uint8("n_obs"),k.prototype.fieldSpec=[],k.prototype.fieldSpec.push(["t",l.prototype.fieldSpec]),k.prototype.fieldSpec.push(["n_obs","writeUInt8",1]);let B=function(e,t){return r.call(this,e),this.messageType="CarrierPhaseDepA",this.fields=t||this.parser.parse(e.payload),this};(B.prototype=Object.create(r.prototype)).messageType="CarrierPhaseDepA",B.prototype.constructor=B,B.prototype.parser=(new o).endianess("little").int32("i").uint8("f"),B.prototype.fieldSpec=[],B.prototype.fieldSpec.push(["i","writeInt32LE",4]),B.prototype.fieldSpec.push(["f","writeUInt8",1]);let q=function(e,t){return r.call(this,e),this.messageType="PackedObsContentDepA",this.fields=t||this.parser.parse(e.payload),this};(q.prototype=Object.create(r.prototype)).messageType="PackedObsContentDepA",q.prototype.constructor=q,q.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:B.prototype.parser}).uint8("cn0").uint16("lock").uint8("prn"),q.prototype.fieldSpec=[],q.prototype.fieldSpec.push(["P","writeUInt32LE",4]),q.prototype.fieldSpec.push(["L",B.prototype.fieldSpec]),q.prototype.fieldSpec.push(["cn0","writeUInt8",1]),q.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),q.prototype.fieldSpec.push(["prn","writeUInt8",1]);let z=function(e,t){return r.call(this,e),this.messageType="PackedObsContentDepB",this.fields=t||this.parser.parse(e.payload),this};(z.prototype=Object.create(r.prototype)).messageType="PackedObsContentDepB",z.prototype.constructor=z,z.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:B.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:n.prototype.parser}),z.prototype.fieldSpec=[],z.prototype.fieldSpec.push(["P","writeUInt32LE",4]),z.prototype.fieldSpec.push(["L",B.prototype.fieldSpec]),z.prototype.fieldSpec.push(["cn0","writeUInt8",1]),z.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),z.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]);let H=function(e,t){return r.call(this,e),this.messageType="PackedObsContentDepC",this.fields=t||this.parser.parse(e.payload),this};(H.prototype=Object.create(r.prototype)).messageType="PackedObsContentDepC",H.prototype.constructor=H,H.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:i.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:n.prototype.parser}),H.prototype.fieldSpec=[],H.prototype.fieldSpec.push(["P","writeUInt32LE",4]),H.prototype.fieldSpec.push(["L",i.prototype.fieldSpec]),H.prototype.fieldSpec.push(["cn0","writeUInt8",1]),H.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),H.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]);let V=function(e,t){return r.call(this,e),this.messageType="MSG_OBS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(V.prototype=Object.create(r.prototype)).messageType="MSG_OBS_DEP_A",V.prototype.msg_type=69,V.prototype.constructor=V,V.prototype.parser=(new o).endianess("little").nest("header",{type:k.prototype.parser}).array("obs",{type:q.prototype.parser,readUntil:"eof"}),V.prototype.fieldSpec=[],V.prototype.fieldSpec.push(["header",k.prototype.fieldSpec]),V.prototype.fieldSpec.push(["obs","array",q.prototype.fieldSpec,function(){return this.fields.array.length},null]);let Y=function(e,t){return r.call(this,e),this.messageType="MSG_OBS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(Y.prototype=Object.create(r.prototype)).messageType="MSG_OBS_DEP_B",Y.prototype.msg_type=67,Y.prototype.constructor=Y,Y.prototype.parser=(new o).endianess("little").nest("header",{type:k.prototype.parser}).array("obs",{type:z.prototype.parser,readUntil:"eof"}),Y.prototype.fieldSpec=[],Y.prototype.fieldSpec.push(["header",k.prototype.fieldSpec]),Y.prototype.fieldSpec.push(["obs","array",z.prototype.fieldSpec,function(){return this.fields.array.length},null]);let W=function(e,t){return r.call(this,e),this.messageType="MSG_OBS_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(W.prototype=Object.create(r.prototype)).messageType="MSG_OBS_DEP_C",W.prototype.msg_type=73,W.prototype.constructor=W,W.prototype.parser=(new o).endianess("little").nest("header",{type:k.prototype.parser}).array("obs",{type:H.prototype.parser,readUntil:"eof"}),W.prototype.fieldSpec=[],W.prototype.fieldSpec.push(["header",k.prototype.fieldSpec]),W.prototype.fieldSpec.push(["obs","array",H.prototype.fieldSpec,function(){return this.fields.array.length},null]);let Q=function(e,t){return r.call(this,e),this.messageType="MSG_IONO",this.fields=t||this.parser.parse(e.payload),this};(Q.prototype=Object.create(r.prototype)).messageType="MSG_IONO",Q.prototype.msg_type=144,Q.prototype.constructor=Q,Q.prototype.parser=(new o).endianess("little").nest("t_nmct",{type:c.prototype.parser}).doublele("a0").doublele("a1").doublele("a2").doublele("a3").doublele("b0").doublele("b1").doublele("b2").doublele("b3"),Q.prototype.fieldSpec=[],Q.prototype.fieldSpec.push(["t_nmct",c.prototype.fieldSpec]),Q.prototype.fieldSpec.push(["a0","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["a1","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["a2","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["a3","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["b0","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["b1","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["b2","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["b3","writeDoubleLE",8]);let K=function(e,t){return r.call(this,e),this.messageType="MSG_SV_CONFIGURATION_GPS_DEP",this.fields=t||this.parser.parse(e.payload),this};(K.prototype=Object.create(r.prototype)).messageType="MSG_SV_CONFIGURATION_GPS_DEP",K.prototype.msg_type=145,K.prototype.constructor=K,K.prototype.parser=(new o).endianess("little").nest("t_nmct",{type:c.prototype.parser}).uint32("l2c_mask"),K.prototype.fieldSpec=[],K.prototype.fieldSpec.push(["t_nmct",c.prototype.fieldSpec]),K.prototype.fieldSpec.push(["l2c_mask","writeUInt32LE",4]);let X=function(e,t){return r.call(this,e),this.messageType="GnssCapb",this.fields=t||this.parser.parse(e.payload),this};(X.prototype=Object.create(r.prototype)).messageType="GnssCapb",X.prototype.constructor=X,X.prototype.parser=(new o).endianess("little").uint64("gps_active").uint64("gps_l2c").uint64("gps_l5").uint32("glo_active").uint32("glo_l2of").uint32("glo_l3").uint64("sbas_active").uint64("sbas_l5").uint64("bds_active").uint64("bds_d2nav").uint64("bds_b2").uint64("bds_b2a").uint32("qzss_active").uint64("gal_active").uint64("gal_e5"),X.prototype.fieldSpec=[],X.prototype.fieldSpec.push(["gps_active","writeUInt64LE",8]),X.prototype.fieldSpec.push(["gps_l2c","writeUInt64LE",8]),X.prototype.fieldSpec.push(["gps_l5","writeUInt64LE",8]),X.prototype.fieldSpec.push(["glo_active","writeUInt32LE",4]),X.prototype.fieldSpec.push(["glo_l2of","writeUInt32LE",4]),X.prototype.fieldSpec.push(["glo_l3","writeUInt32LE",4]),X.prototype.fieldSpec.push(["sbas_active","writeUInt64LE",8]),X.prototype.fieldSpec.push(["sbas_l5","writeUInt64LE",8]),X.prototype.fieldSpec.push(["bds_active","writeUInt64LE",8]),X.prototype.fieldSpec.push(["bds_d2nav","writeUInt64LE",8]),X.prototype.fieldSpec.push(["bds_b2","writeUInt64LE",8]),X.prototype.fieldSpec.push(["bds_b2a","writeUInt64LE",8]),X.prototype.fieldSpec.push(["qzss_active","writeUInt32LE",4]),X.prototype.fieldSpec.push(["gal_active","writeUInt64LE",8]),X.prototype.fieldSpec.push(["gal_e5","writeUInt64LE",8]);let J=function(e,t){return r.call(this,e),this.messageType="MSG_GNSS_CAPB",this.fields=t||this.parser.parse(e.payload),this};(J.prototype=Object.create(r.prototype)).messageType="MSG_GNSS_CAPB",J.prototype.msg_type=150,J.prototype.constructor=J,J.prototype.parser=(new o).endianess("little").nest("t_nmct",{type:c.prototype.parser}).nest("gc",{type:X.prototype.parser}),J.prototype.fieldSpec=[],J.prototype.fieldSpec.push(["t_nmct",c.prototype.fieldSpec]),J.prototype.fieldSpec.push(["gc",X.prototype.fieldSpec]);let Z=function(e,t){return r.call(this,e),this.messageType="MSG_GROUP_DELAY_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(Z.prototype=Object.create(r.prototype)).messageType="MSG_GROUP_DELAY_DEP_A",Z.prototype.msg_type=146,Z.prototype.constructor=Z,Z.prototype.parser=(new o).endianess("little").nest("t_op",{type:l.prototype.parser}).uint8("prn").uint8("valid").int16("tgd").int16("isc_l1ca").int16("isc_l2c"),Z.prototype.fieldSpec=[],Z.prototype.fieldSpec.push(["t_op",l.prototype.fieldSpec]),Z.prototype.fieldSpec.push(["prn","writeUInt8",1]),Z.prototype.fieldSpec.push(["valid","writeUInt8",1]),Z.prototype.fieldSpec.push(["tgd","writeInt16LE",2]),Z.prototype.fieldSpec.push(["isc_l1ca","writeInt16LE",2]),Z.prototype.fieldSpec.push(["isc_l2c","writeInt16LE",2]);let $=function(e,t){return r.call(this,e),this.messageType="MSG_GROUP_DELAY_DEP_B",this.fields=t||this.parser.parse(e.payload),this};($.prototype=Object.create(r.prototype)).messageType="MSG_GROUP_DELAY_DEP_B",$.prototype.msg_type=147,$.prototype.constructor=$,$.prototype.parser=(new o).endianess("little").nest("t_op",{type:c.prototype.parser}).nest("sid",{type:n.prototype.parser}).uint8("valid").int16("tgd").int16("isc_l1ca").int16("isc_l2c"),$.prototype.fieldSpec=[],$.prototype.fieldSpec.push(["t_op",c.prototype.fieldSpec]),$.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),$.prototype.fieldSpec.push(["valid","writeUInt8",1]),$.prototype.fieldSpec.push(["tgd","writeInt16LE",2]),$.prototype.fieldSpec.push(["isc_l1ca","writeInt16LE",2]),$.prototype.fieldSpec.push(["isc_l2c","writeInt16LE",2]);let ee=function(e,t){return r.call(this,e),this.messageType="MSG_GROUP_DELAY",this.fields=t||this.parser.parse(e.payload),this};(ee.prototype=Object.create(r.prototype)).messageType="MSG_GROUP_DELAY",ee.prototype.msg_type=148,ee.prototype.constructor=ee,ee.prototype.parser=(new o).endianess("little").nest("t_op",{type:c.prototype.parser}).nest("sid",{type:s.prototype.parser}).uint8("valid").int16("tgd").int16("isc_l1ca").int16("isc_l2c"),ee.prototype.fieldSpec=[],ee.prototype.fieldSpec.push(["t_op",c.prototype.fieldSpec]),ee.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),ee.prototype.fieldSpec.push(["valid","writeUInt8",1]),ee.prototype.fieldSpec.push(["tgd","writeInt16LE",2]),ee.prototype.fieldSpec.push(["isc_l1ca","writeInt16LE",2]),ee.prototype.fieldSpec.push(["isc_l2c","writeInt16LE",2]);let te=function(e,t){return r.call(this,e),this.messageType="AlmanacCommonContent",this.fields=t||this.parser.parse(e.payload),this};(te.prototype=Object.create(r.prototype)).messageType="AlmanacCommonContent",te.prototype.constructor=te,te.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).nest("toa",{type:c.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),te.prototype.fieldSpec=[],te.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),te.prototype.fieldSpec.push(["toa",c.prototype.fieldSpec]),te.prototype.fieldSpec.push(["ura","writeDoubleLE",8]),te.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),te.prototype.fieldSpec.push(["valid","writeUInt8",1]),te.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);let pe=function(e,t){return r.call(this,e),this.messageType="AlmanacCommonContentDep",this.fields=t||this.parser.parse(e.payload),this};(pe.prototype=Object.create(r.prototype)).messageType="AlmanacCommonContentDep",pe.prototype.constructor=pe,pe.prototype.parser=(new o).endianess("little").nest("sid",{type:n.prototype.parser}).nest("toa",{type:c.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),pe.prototype.fieldSpec=[],pe.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),pe.prototype.fieldSpec.push(["toa",c.prototype.fieldSpec]),pe.prototype.fieldSpec.push(["ura","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),pe.prototype.fieldSpec.push(["valid","writeUInt8",1]),pe.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);let re=function(e,t){return r.call(this,e),this.messageType="MSG_ALMANAC_GPS_DEP",this.fields=t||this.parser.parse(e.payload),this};(re.prototype=Object.create(r.prototype)).messageType="MSG_ALMANAC_GPS_DEP",re.prototype.msg_type=112,re.prototype.constructor=re,re.prototype.parser=(new o).endianess("little").nest("common",{type:pe.prototype.parser}).doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("af0").doublele("af1"),re.prototype.fieldSpec=[],re.prototype.fieldSpec.push(["common",pe.prototype.fieldSpec]),re.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),re.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),re.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),re.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),re.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),re.prototype.fieldSpec.push(["w","writeDoubleLE",8]),re.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),re.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),re.prototype.fieldSpec.push(["af1","writeDoubleLE",8]);let oe=function(e,t){return r.call(this,e),this.messageType="MSG_ALMANAC_GPS",this.fields=t||this.parser.parse(e.payload),this};(oe.prototype=Object.create(r.prototype)).messageType="MSG_ALMANAC_GPS",oe.prototype.msg_type=114,oe.prototype.constructor=oe,oe.prototype.parser=(new o).endianess("little").nest("common",{type:te.prototype.parser}).doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("af0").doublele("af1"),oe.prototype.fieldSpec=[],oe.prototype.fieldSpec.push(["common",te.prototype.fieldSpec]),oe.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["w","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["af1","writeDoubleLE",8]);let ie=function(e,t){return r.call(this,e),this.messageType="MSG_ALMANAC_GLO_DEP",this.fields=t||this.parser.parse(e.payload),this};(ie.prototype=Object.create(r.prototype)).messageType="MSG_ALMANAC_GLO_DEP",ie.prototype.msg_type=113,ie.prototype.constructor=ie,ie.prototype.parser=(new o).endianess("little").nest("common",{type:pe.prototype.parser}).doublele("lambda_na").doublele("t_lambda_na").doublele("i").doublele("t").doublele("t_dot").doublele("epsilon").doublele("omega"),ie.prototype.fieldSpec=[],ie.prototype.fieldSpec.push(["common",pe.prototype.fieldSpec]),ie.prototype.fieldSpec.push(["lambda_na","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["t_lambda_na","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["i","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["t","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["t_dot","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["epsilon","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["omega","writeDoubleLE",8]);let se=function(e,t){return r.call(this,e),this.messageType="MSG_ALMANAC_GLO",this.fields=t||this.parser.parse(e.payload),this};(se.prototype=Object.create(r.prototype)).messageType="MSG_ALMANAC_GLO",se.prototype.msg_type=115,se.prototype.constructor=se,se.prototype.parser=(new o).endianess("little").nest("common",{type:te.prototype.parser}).doublele("lambda_na").doublele("t_lambda_na").doublele("i").doublele("t").doublele("t_dot").doublele("epsilon").doublele("omega"),se.prototype.fieldSpec=[],se.prototype.fieldSpec.push(["common",te.prototype.fieldSpec]),se.prototype.fieldSpec.push(["lambda_na","writeDoubleLE",8]),se.prototype.fieldSpec.push(["t_lambda_na","writeDoubleLE",8]),se.prototype.fieldSpec.push(["i","writeDoubleLE",8]),se.prototype.fieldSpec.push(["t","writeDoubleLE",8]),se.prototype.fieldSpec.push(["t_dot","writeDoubleLE",8]),se.prototype.fieldSpec.push(["epsilon","writeDoubleLE",8]),se.prototype.fieldSpec.push(["omega","writeDoubleLE",8]);let ne=function(e,t){return r.call(this,e),this.messageType="MSG_GLO_BIASES",this.fields=t||this.parser.parse(e.payload),this};(ne.prototype=Object.create(r.prototype)).messageType="MSG_GLO_BIASES",ne.prototype.msg_type=117,ne.prototype.constructor=ne,ne.prototype.parser=(new o).endianess("little").uint8("mask").int16("l1ca_bias").int16("l1p_bias").int16("l2ca_bias").int16("l2p_bias"),ne.prototype.fieldSpec=[],ne.prototype.fieldSpec.push(["mask","writeUInt8",1]),ne.prototype.fieldSpec.push(["l1ca_bias","writeInt16LE",2]),ne.prototype.fieldSpec.push(["l1p_bias","writeInt16LE",2]),ne.prototype.fieldSpec.push(["l2ca_bias","writeInt16LE",2]),ne.prototype.fieldSpec.push(["l2p_bias","writeInt16LE",2]);let ae=function(e,t){return r.call(this,e),this.messageType="SvAzEl",this.fields=t||this.parser.parse(e.payload),this};(ae.prototype=Object.create(r.prototype)).messageType="SvAzEl",ae.prototype.constructor=ae,ae.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).uint8("az").int8("el"),ae.prototype.fieldSpec=[],ae.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),ae.prototype.fieldSpec.push(["az","writeUInt8",1]),ae.prototype.fieldSpec.push(["el","writeInt8",1]);let le=function(e,t){return r.call(this,e),this.messageType="MSG_SV_AZ_EL",this.fields=t||this.parser.parse(e.payload),this};(le.prototype=Object.create(r.prototype)).messageType="MSG_SV_AZ_EL",le.prototype.msg_type=151,le.prototype.constructor=le,le.prototype.parser=(new o).endianess("little").array("azel",{type:ae.prototype.parser,readUntil:"eof"}),le.prototype.fieldSpec=[],le.prototype.fieldSpec.push(["azel","array",ae.prototype.fieldSpec,function(){return this.fields.array.length},null]);let ce=function(e,t){return r.call(this,e),this.messageType="MSG_OSR",this.fields=t||this.parser.parse(e.payload),this};(ce.prototype=Object.create(r.prototype)).messageType="MSG_OSR",ce.prototype.msg_type=1600,ce.prototype.constructor=ce,ce.prototype.parser=(new o).endianess("little").nest("header",{type:u.prototype.parser}).array("obs",{type:f.prototype.parser,readUntil:"eof"}),ce.prototype.fieldSpec=[],ce.prototype.fieldSpec.push(["header",u.prototype.fieldSpec]),ce.prototype.fieldSpec.push(["obs","array",f.prototype.fieldSpec,function(){return this.fields.array.length},null]),e.exports={ObservationHeader:u,Doppler:y,PackedObsContent:h,PackedOsrContent:f,74:d,MsgObs:d,68:_,MsgBasePosLlh:_,72:S,MsgBasePosEcef:S,EphemerisCommonContent:g,EphemerisCommonContentDepB:w,EphemerisCommonContentDepA:E,129:m,MsgEphemerisGpsDepE:m,134:b,MsgEphemerisGpsDepF:b,138:I,MsgEphemerisGps:I,142:L,MsgEphemerisQzss:L,137:T,MsgEphemerisBds:T,149:v,MsgEphemerisGalDepA:v,141:U,MsgEphemerisGal:U,130:M,MsgEphemerisSbasDepA:M,131:D,MsgEphemerisGloDepA:D,132:O,MsgEphemerisSbasDepB:O,140:G,MsgEphemerisSbas:G,133:A,MsgEphemerisGloDepB:A,135:C,MsgEphemerisGloDepC:C,136:R,MsgEphemerisGloDepD:R,139:P,MsgEphemerisGlo:P,128:N,MsgEphemerisDepD:N,26:j,MsgEphemerisDepA:j,70:x,MsgEphemerisDepB:x,71:F,MsgEphemerisDepC:F,ObservationHeaderDep:k,CarrierPhaseDepA:B,PackedObsContentDepA:q,PackedObsContentDepB:z,PackedObsContentDepC:H,69:V,MsgObsDepA:V,67:Y,MsgObsDepB:Y,73:W,MsgObsDepC:W,144:Q,MsgIono:Q,145:K,MsgSvConfigurationGpsDep:K,GnssCapb:X,150:J,MsgGnssCapb:J,146:Z,MsgGroupDelayDepA:Z,147:$,MsgGroupDelayDepB:$,148:ee,MsgGroupDelay:ee,AlmanacCommonContent:te,AlmanacCommonContentDep:pe,112:re,MsgAlmanacGpsDep:re,114:oe,MsgAlmanacGps:oe,113:ie,MsgAlmanacGloDep:ie,115:se,MsgAlmanacGlo:se,117:ne,MsgGloBiases:ne,SvAzEl:ae,151:le,MsgSvAzEl:le,1600:ce,MsgOsr:ce}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_HEADING",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_HEADING",i.prototype.msg_type=527,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint32("tow").uint32("heading").uint8("n_sats").uint8("flags"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["heading","writeUInt32LE",4]),i.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),i.prototype.fieldSpec.push(["flags","writeUInt8",1]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_ORIENT_QUAT",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_ORIENT_QUAT",s.prototype.msg_type=544,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint32("tow").int32("w").int32("x").int32("y").int32("z").floatle("w_accuracy").floatle("x_accuracy").floatle("y_accuracy").floatle("z_accuracy").uint8("flags"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["w","writeInt32LE",4]),s.prototype.fieldSpec.push(["x","writeInt32LE",4]),s.prototype.fieldSpec.push(["y","writeInt32LE",4]),s.prototype.fieldSpec.push(["z","writeInt32LE",4]),s.prototype.fieldSpec.push(["w_accuracy","writeFloatLE",4]),s.prototype.fieldSpec.push(["x_accuracy","writeFloatLE",4]),s.prototype.fieldSpec.push(["y_accuracy","writeFloatLE",4]),s.prototype.fieldSpec.push(["z_accuracy","writeFloatLE",4]),s.prototype.fieldSpec.push(["flags","writeUInt8",1]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_ORIENT_EULER",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_ORIENT_EULER",n.prototype.msg_type=545,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint32("tow").int32("roll").int32("pitch").int32("yaw").floatle("roll_accuracy").floatle("pitch_accuracy").floatle("yaw_accuracy").uint8("flags"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),n.prototype.fieldSpec.push(["roll","writeInt32LE",4]),n.prototype.fieldSpec.push(["pitch","writeInt32LE",4]),n.prototype.fieldSpec.push(["yaw","writeInt32LE",4]),n.prototype.fieldSpec.push(["roll_accuracy","writeFloatLE",4]),n.prototype.fieldSpec.push(["pitch_accuracy","writeFloatLE",4]),n.prototype.fieldSpec.push(["yaw_accuracy","writeFloatLE",4]),n.prototype.fieldSpec.push(["flags","writeUInt8",1]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_ANGULAR_RATE",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_ANGULAR_RATE",a.prototype.msg_type=546,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint8("flags"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),a.prototype.fieldSpec.push(["x","writeInt32LE",4]),a.prototype.fieldSpec.push(["y","writeInt32LE",4]),a.prototype.fieldSpec.push(["z","writeInt32LE",4]),a.prototype.fieldSpec.push(["flags","writeUInt8",1]),e.exports={527:i,MsgBaselineHeading:i,544:s,MsgOrientQuat:s,545:n,MsgOrientEuler:n,546:a,MsgAngularRate:a}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal),s=p(0).GnssSignalDep,n=p(0).GPSTime,a=p(0).GPSTimeDep,l=(p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_ALMANAC",this.fields=t||this.parser.parse(e.payload),this});(l.prototype=Object.create(r.prototype)).messageType="MSG_ALMANAC",l.prototype.msg_type=105,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little"),l.prototype.fieldSpec=[];let c=function(e,t){return r.call(this,e),this.messageType="MSG_SET_TIME",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_SET_TIME",c.prototype.msg_type=104,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little"),c.prototype.fieldSpec=[];let u=function(e,t){return r.call(this,e),this.messageType="MSG_RESET",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_RESET",u.prototype.msg_type=182,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint32("flags"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_RESET_DEP",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_RESET_DEP",y.prototype.msg_type=178,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little"),y.prototype.fieldSpec=[];let h=function(e,t){return r.call(this,e),this.messageType="MSG_CW_RESULTS",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_CW_RESULTS",h.prototype.msg_type=192,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little"),h.prototype.fieldSpec=[];let f=function(e,t){return r.call(this,e),this.messageType="MSG_CW_START",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_CW_START",f.prototype.msg_type=193,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little"),f.prototype.fieldSpec=[];let d=function(e,t){return r.call(this,e),this.messageType="MSG_RESET_FILTERS",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_RESET_FILTERS",d.prototype.msg_type=34,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").uint8("filter"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["filter","writeUInt8",1]);let _=function(e,t){return r.call(this,e),this.messageType="MSG_INIT_BASE_DEP",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="MSG_INIT_BASE_DEP",_.prototype.msg_type=35,_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little"),_.prototype.fieldSpec=[];let S=function(e,t){return r.call(this,e),this.messageType="MSG_THREAD_STATE",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_THREAD_STATE",S.prototype.msg_type=23,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").string("name",{length:20}).uint16("cpu").uint32("stack_free"),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["name","string",20]),S.prototype.fieldSpec.push(["cpu","writeUInt16LE",2]),S.prototype.fieldSpec.push(["stack_free","writeUInt32LE",4]);let g=function(e,t){return r.call(this,e),this.messageType="UARTChannel",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="UARTChannel",g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").floatle("tx_throughput").floatle("rx_throughput").uint16("crc_error_count").uint16("io_error_count").uint8("tx_buffer_level").uint8("rx_buffer_level"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["tx_throughput","writeFloatLE",4]),g.prototype.fieldSpec.push(["rx_throughput","writeFloatLE",4]),g.prototype.fieldSpec.push(["crc_error_count","writeUInt16LE",2]),g.prototype.fieldSpec.push(["io_error_count","writeUInt16LE",2]),g.prototype.fieldSpec.push(["tx_buffer_level","writeUInt8",1]),g.prototype.fieldSpec.push(["rx_buffer_level","writeUInt8",1]);let w=function(e,t){return r.call(this,e),this.messageType="Period",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="Period",w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").int32("avg").int32("pmin").int32("pmax").int32("current"),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["avg","writeInt32LE",4]),w.prototype.fieldSpec.push(["pmin","writeInt32LE",4]),w.prototype.fieldSpec.push(["pmax","writeInt32LE",4]),w.prototype.fieldSpec.push(["current","writeInt32LE",4]);let E=function(e,t){return r.call(this,e),this.messageType="Latency",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(r.prototype)).messageType="Latency",E.prototype.constructor=E,E.prototype.parser=(new o).endianess("little").int32("avg").int32("lmin").int32("lmax").int32("current"),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["avg","writeInt32LE",4]),E.prototype.fieldSpec.push(["lmin","writeInt32LE",4]),E.prototype.fieldSpec.push(["lmax","writeInt32LE",4]),E.prototype.fieldSpec.push(["current","writeInt32LE",4]);let m=function(e,t){return r.call(this,e),this.messageType="MSG_UART_STATE",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(r.prototype)).messageType="MSG_UART_STATE",m.prototype.msg_type=29,m.prototype.constructor=m,m.prototype.parser=(new o).endianess("little").nest("uart_a",{type:g.prototype.parser}).nest("uart_b",{type:g.prototype.parser}).nest("uart_ftdi",{type:g.prototype.parser}).nest("latency",{type:E.prototype.parser}).nest("obs_period",{type:w.prototype.parser}),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["uart_a",g.prototype.fieldSpec]),m.prototype.fieldSpec.push(["uart_b",g.prototype.fieldSpec]),m.prototype.fieldSpec.push(["uart_ftdi",g.prototype.fieldSpec]),m.prototype.fieldSpec.push(["latency",E.prototype.fieldSpec]),m.prototype.fieldSpec.push(["obs_period",w.prototype.fieldSpec]);let b=function(e,t){return r.call(this,e),this.messageType="MSG_UART_STATE_DEPA",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(r.prototype)).messageType="MSG_UART_STATE_DEPA",b.prototype.msg_type=24,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").nest("uart_a",{type:g.prototype.parser}).nest("uart_b",{type:g.prototype.parser}).nest("uart_ftdi",{type:g.prototype.parser}).nest("latency",{type:E.prototype.parser}),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["uart_a",g.prototype.fieldSpec]),b.prototype.fieldSpec.push(["uart_b",g.prototype.fieldSpec]),b.prototype.fieldSpec.push(["uart_ftdi",g.prototype.fieldSpec]),b.prototype.fieldSpec.push(["latency",E.prototype.fieldSpec]);let I=function(e,t){return r.call(this,e),this.messageType="MSG_IAR_STATE",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(r.prototype)).messageType="MSG_IAR_STATE",I.prototype.msg_type=25,I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").uint32("num_hyps"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["num_hyps","writeUInt32LE",4]);let L=function(e,t){return r.call(this,e),this.messageType="MSG_MASK_SATELLITE",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(r.prototype)).messageType="MSG_MASK_SATELLITE",L.prototype.msg_type=43,L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").uint8("mask").nest("sid",{type:i.prototype.parser}),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["mask","writeUInt8",1]),L.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]);let T=function(e,t){return r.call(this,e),this.messageType="MSG_MASK_SATELLITE_DEP",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(r.prototype)).messageType="MSG_MASK_SATELLITE_DEP",T.prototype.msg_type=27,T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").uint8("mask").nest("sid",{type:s.prototype.parser}),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["mask","writeUInt8",1]),T.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);let v=function(e,t){return r.call(this,e),this.messageType="MSG_DEVICE_MONITOR",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(r.prototype)).messageType="MSG_DEVICE_MONITOR",v.prototype.msg_type=181,v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").int16("dev_vin").int16("cpu_vint").int16("cpu_vaux").int16("cpu_temperature").int16("fe_temperature"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["dev_vin","writeInt16LE",2]),v.prototype.fieldSpec.push(["cpu_vint","writeInt16LE",2]),v.prototype.fieldSpec.push(["cpu_vaux","writeInt16LE",2]),v.prototype.fieldSpec.push(["cpu_temperature","writeInt16LE",2]),v.prototype.fieldSpec.push(["fe_temperature","writeInt16LE",2]);let U=function(e,t){return r.call(this,e),this.messageType="MSG_COMMAND_REQ",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(r.prototype)).messageType="MSG_COMMAND_REQ",U.prototype.msg_type=184,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").uint32("sequence").string("command",{greedy:!0}),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),U.prototype.fieldSpec.push(["command","string",null]);let M=function(e,t){return r.call(this,e),this.messageType="MSG_COMMAND_RESP",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(r.prototype)).messageType="MSG_COMMAND_RESP",M.prototype.msg_type=185,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").uint32("sequence").int32("code"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),M.prototype.fieldSpec.push(["code","writeInt32LE",4]);let D=function(e,t){return r.call(this,e),this.messageType="MSG_COMMAND_OUTPUT",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(r.prototype)).messageType="MSG_COMMAND_OUTPUT",D.prototype.msg_type=188,D.prototype.constructor=D,D.prototype.parser=(new o).endianess("little").uint32("sequence").string("line",{greedy:!0}),D.prototype.fieldSpec=[],D.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),D.prototype.fieldSpec.push(["line","string",null]);let O=function(e,t){return r.call(this,e),this.messageType="MSG_NETWORK_STATE_REQ",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(r.prototype)).messageType="MSG_NETWORK_STATE_REQ",O.prototype.msg_type=186,O.prototype.constructor=O,O.prototype.parser=(new o).endianess("little"),O.prototype.fieldSpec=[];let G=function(e,t){return r.call(this,e),this.messageType="MSG_NETWORK_STATE_RESP",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(r.prototype)).messageType="MSG_NETWORK_STATE_RESP",G.prototype.msg_type=187,G.prototype.constructor=G,G.prototype.parser=(new o).endianess("little").array("ipv4_address",{length:4,type:"uint8"}).uint8("ipv4_mask_size").array("ipv6_address",{length:16,type:"uint8"}).uint8("ipv6_mask_size").uint32("rx_bytes").uint32("tx_bytes").string("interface_name",{length:16}).uint32("flags"),G.prototype.fieldSpec=[],G.prototype.fieldSpec.push(["ipv4_address","array","writeUInt8",function(){return 1},4]),G.prototype.fieldSpec.push(["ipv4_mask_size","writeUInt8",1]),G.prototype.fieldSpec.push(["ipv6_address","array","writeUInt8",function(){return 1},16]),G.prototype.fieldSpec.push(["ipv6_mask_size","writeUInt8",1]),G.prototype.fieldSpec.push(["rx_bytes","writeUInt32LE",4]),G.prototype.fieldSpec.push(["tx_bytes","writeUInt32LE",4]),G.prototype.fieldSpec.push(["interface_name","string",16]),G.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let A=function(e,t){return r.call(this,e),this.messageType="NetworkUsage",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(r.prototype)).messageType="NetworkUsage",A.prototype.constructor=A,A.prototype.parser=(new o).endianess("little").uint64("duration").uint64("total_bytes").uint32("rx_bytes").uint32("tx_bytes").string("interface_name",{length:16}),A.prototype.fieldSpec=[],A.prototype.fieldSpec.push(["duration","writeUInt64LE",8]),A.prototype.fieldSpec.push(["total_bytes","writeUInt64LE",8]),A.prototype.fieldSpec.push(["rx_bytes","writeUInt32LE",4]),A.prototype.fieldSpec.push(["tx_bytes","writeUInt32LE",4]),A.prototype.fieldSpec.push(["interface_name","string",16]);let C=function(e,t){return r.call(this,e),this.messageType="MSG_NETWORK_BANDWIDTH_USAGE",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(r.prototype)).messageType="MSG_NETWORK_BANDWIDTH_USAGE",C.prototype.msg_type=189,C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").array("interfaces",{type:A.prototype.parser,readUntil:"eof"}),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["interfaces","array",A.prototype.fieldSpec,function(){return this.fields.array.length},null]);let R=function(e,t){return r.call(this,e),this.messageType="MSG_CELL_MODEM_STATUS",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(r.prototype)).messageType="MSG_CELL_MODEM_STATUS",R.prototype.msg_type=190,R.prototype.constructor=R,R.prototype.parser=(new o).endianess("little").int8("signal_strength").floatle("signal_error_rate").array("reserved",{type:"uint8",readUntil:"eof"}),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["signal_strength","writeInt8",1]),R.prototype.fieldSpec.push(["signal_error_rate","writeFloatLE",4]),R.prototype.fieldSpec.push(["reserved","array","writeUInt8",function(){return 1},null]);let P=function(e,t){return r.call(this,e),this.messageType="MSG_SPECAN_DEP",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(r.prototype)).messageType="MSG_SPECAN_DEP",P.prototype.msg_type=80,P.prototype.constructor=P,P.prototype.parser=(new o).endianess("little").uint16("channel_tag").nest("t",{type:a.prototype.parser}).floatle("freq_ref").floatle("freq_step").floatle("amplitude_ref").floatle("amplitude_unit").array("amplitude_value",{type:"uint8",readUntil:"eof"}),P.prototype.fieldSpec=[],P.prototype.fieldSpec.push(["channel_tag","writeUInt16LE",2]),P.prototype.fieldSpec.push(["t",a.prototype.fieldSpec]),P.prototype.fieldSpec.push(["freq_ref","writeFloatLE",4]),P.prototype.fieldSpec.push(["freq_step","writeFloatLE",4]),P.prototype.fieldSpec.push(["amplitude_ref","writeFloatLE",4]),P.prototype.fieldSpec.push(["amplitude_unit","writeFloatLE",4]),P.prototype.fieldSpec.push(["amplitude_value","array","writeUInt8",function(){return 1},null]);let N=function(e,t){return r.call(this,e),this.messageType="MSG_SPECAN",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(r.prototype)).messageType="MSG_SPECAN",N.prototype.msg_type=81,N.prototype.constructor=N,N.prototype.parser=(new o).endianess("little").uint16("channel_tag").nest("t",{type:n.prototype.parser}).floatle("freq_ref").floatle("freq_step").floatle("amplitude_ref").floatle("amplitude_unit").array("amplitude_value",{type:"uint8",readUntil:"eof"}),N.prototype.fieldSpec=[],N.prototype.fieldSpec.push(["channel_tag","writeUInt16LE",2]),N.prototype.fieldSpec.push(["t",n.prototype.fieldSpec]),N.prototype.fieldSpec.push(["freq_ref","writeFloatLE",4]),N.prototype.fieldSpec.push(["freq_step","writeFloatLE",4]),N.prototype.fieldSpec.push(["amplitude_ref","writeFloatLE",4]),N.prototype.fieldSpec.push(["amplitude_unit","writeFloatLE",4]),N.prototype.fieldSpec.push(["amplitude_value","array","writeUInt8",function(){return 1},null]);let j=function(e,t){return r.call(this,e),this.messageType="MSG_FRONT_END_GAIN",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(r.prototype)).messageType="MSG_FRONT_END_GAIN",j.prototype.msg_type=191,j.prototype.constructor=j,j.prototype.parser=(new o).endianess("little").array("rf_gain",{length:8,type:"int8"}).array("if_gain",{length:8,type:"int8"}),j.prototype.fieldSpec=[],j.prototype.fieldSpec.push(["rf_gain","array","writeInt8",function(){return 1},8]),j.prototype.fieldSpec.push(["if_gain","array","writeInt8",function(){return 1},8]),e.exports={105:l,MsgAlmanac:l,104:c,MsgSetTime:c,182:u,MsgReset:u,178:y,MsgResetDep:y,192:h,MsgCwResults:h,193:f,MsgCwStart:f,34:d,MsgResetFilters:d,35:_,MsgInitBaseDep:_,23:S,MsgThreadState:S,UARTChannel:g,Period:w,Latency:E,29:m,MsgUartState:m,24:b,MsgUartStateDepa:b,25:I,MsgIarState:I,43:L,MsgMaskSatellite:L,27:T,MsgMaskSatelliteDep:T,181:v,MsgDeviceMonitor:v,184:U,MsgCommandReq:U,185:M,MsgCommandResp:M,188:D,MsgCommandOutput:D,186:O,MsgNetworkStateReq:O,187:G,MsgNetworkStateResp:G,NetworkUsage:A,189:C,MsgNetworkBandwidthUsage:C,190:R,MsgCellModemStatus:R,80:P,MsgSpecanDep:P,81:N,MsgSpecan:N,191:j,MsgFrontEndGain:j}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal),s=(p(0).GnssSignalDep,p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_SBAS_RAW",this.fields=t||this.parser.parse(e.payload),this});(s.prototype=Object.create(r.prototype)).messageType="MSG_SBAS_RAW",s.prototype.msg_type=30583,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).uint32("tow").uint8("message_type").array("data",{length:27,type:"uint8"}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),s.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["message_type","writeUInt8",1]),s.prototype.fieldSpec.push(["data","array","writeUInt8",function(){return 1},27]),e.exports={30583:s,MsgSbasRaw:s}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_SAVE",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_SAVE",i.prototype.msg_type=161,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little"),i.prototype.fieldSpec=[];let s=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_WRITE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_WRITE",s.prototype.msg_type=160,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").string("setting",{greedy:!0}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["setting","string",null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_WRITE_RESP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_WRITE_RESP",n.prototype.msg_type=175,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint8("status").string("setting",{greedy:!0}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["status","writeUInt8",1]),n.prototype.fieldSpec.push(["setting","string",null]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_READ_REQ",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_READ_REQ",a.prototype.msg_type=164,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").string("setting",{greedy:!0}),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["setting","string",null]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_READ_RESP",l.prototype.msg_type=165,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").string("setting",{greedy:!0}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["setting","string",null]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_REQ",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_READ_BY_INDEX_REQ",c.prototype.msg_type=162,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint16("index"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["index","writeUInt16LE",2]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_RESP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_READ_BY_INDEX_RESP",u.prototype.msg_type=167,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint16("index").string("setting",{greedy:!0}),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["index","writeUInt16LE",2]),u.prototype.fieldSpec.push(["setting","string",null]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_DONE",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_READ_BY_INDEX_DONE",y.prototype.msg_type=166,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little"),y.prototype.fieldSpec=[];let h=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_REGISTER",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_REGISTER",h.prototype.msg_type=174,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").string("setting",{greedy:!0}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["setting","string",null]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_REGISTER_RESP",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_REGISTER_RESP",f.prototype.msg_type=431,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint8("status").string("setting",{greedy:!0}),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["status","writeUInt8",1]),f.prototype.fieldSpec.push(["setting","string",null]),e.exports={161:i,MsgSettingsSave:i,160:s,MsgSettingsWrite:s,175:n,MsgSettingsWriteResp:n,164:a,MsgSettingsReadReq:a,165:l,MsgSettingsReadResp:l,162:c,MsgSettingsReadByIndexReq:c,167:u,MsgSettingsReadByIndexResp:u,166:y,MsgSettingsReadByIndexDone:y,174:h,MsgSettingsRegister:h,431:f,MsgSettingsRegisterResp:f}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal,p(0).GnssSignalDep,p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_ED25519_SIGNATURE_DEP",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_ED25519_SIGNATURE_DEP",i.prototype.msg_type=3073,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").array("signature",{length:64,type:"uint8"}).array("fingerprint",{length:20,type:"uint8"}).array("signed_messages",{type:"uint32le",readUntil:"eof"}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["signature","array","writeUInt8",function(){return 1},64]),i.prototype.fieldSpec.push(["fingerprint","array","writeUInt8",function(){return 1},20]),i.prototype.fieldSpec.push(["signed_messages","array","writeUInt32LE",function(){return 4},null]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_ED25519_CERTIFICATE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_ED25519_CERTIFICATE",s.prototype.msg_type=3074,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("n_msg").array("fingerprint",{length:20,type:"uint8"}).array("certificate_bytes",{type:"uint8",readUntil:"eof"}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["n_msg","writeUInt8",1]),s.prototype.fieldSpec.push(["fingerprint","array","writeUInt8",function(){return 1},20]),s.prototype.fieldSpec.push(["certificate_bytes","array","writeUInt8",function(){return 1},null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_ED25519_SIGNATURE",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_ED25519_SIGNATURE",n.prototype.msg_type=3075,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint8("stream_counter").uint8("on_demand_counter").array("signature",{length:64,type:"uint8"}).array("fingerprint",{length:20,type:"uint8"}).array("signed_messages",{type:"uint32le",readUntil:"eof"}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["stream_counter","writeUInt8",1]),n.prototype.fieldSpec.push(["on_demand_counter","writeUInt8",1]),n.prototype.fieldSpec.push(["signature","array","writeUInt8",function(){return 1},64]),n.prototype.fieldSpec.push(["fingerprint","array","writeUInt8",function(){return 1},20]),n.prototype.fieldSpec.push(["signed_messages","array","writeUInt32LE",function(){return 4},null]),e.exports={3073:i,MsgEd25519SignatureDep:i,3074:s,MsgEd25519Certificate:s,3075:n,MsgEd25519Signature:n}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="SolutionInputType",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="SolutionInputType",i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint8("sensor_type").uint8("flags"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["sensor_type","writeUInt8",1]),i.prototype.fieldSpec.push(["flags","writeUInt8",1]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_SOLN_META_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_SOLN_META_DEP_A",s.prototype.msg_type=65295,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint16("pdop").uint16("hdop").uint16("vdop").uint8("n_sats").uint16("age_corrections").uint8("alignment_status").uint32("last_used_gnss_pos_tow").uint32("last_used_gnss_vel_tow").array("sol_in",{type:i.prototype.parser,readUntil:"eof"}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),s.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),s.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]),s.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),s.prototype.fieldSpec.push(["age_corrections","writeUInt16LE",2]),s.prototype.fieldSpec.push(["alignment_status","writeUInt8",1]),s.prototype.fieldSpec.push(["last_used_gnss_pos_tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["last_used_gnss_vel_tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["sol_in","array",i.prototype.fieldSpec,function(){return this.fields.array.length},null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_SOLN_META",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_SOLN_META",n.prototype.msg_type=65294,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint32("tow").uint16("pdop").uint16("hdop").uint16("vdop").uint16("age_corrections").uint32("age_gnss").array("sol_in",{type:i.prototype.parser,readUntil:"eof"}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),n.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["age_corrections","writeUInt16LE",2]),n.prototype.fieldSpec.push(["age_gnss","writeUInt32LE",4]),n.prototype.fieldSpec.push(["sol_in","array",i.prototype.fieldSpec,function(){return this.fields.array.length},null]);let a=function(e,t){return r.call(this,e),this.messageType="GNSSInputType",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="GNSSInputType",a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint8("flags"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["flags","writeUInt8",1]);let l=function(e,t){return r.call(this,e),this.messageType="IMUInputType",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="IMUInputType",l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint8("flags"),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["flags","writeUInt8",1]);let c=function(e,t){return r.call(this,e),this.messageType="OdoInputType",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="OdoInputType",c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint8("flags"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["flags","writeUInt8",1]),e.exports={SolutionInputType:i,65295:s,MsgSolnMetaDepA:s,65294:n,MsgSolnMeta:n,GNSSInputType:a,IMUInputType:l,OdoInputType:c}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal),s=(p(0).GnssSignalDep,p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec),n=p(0).SvId,a=function(e,t){return r.call(this,e),this.messageType="CodeBiasesContent",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="CodeBiasesContent",a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint8("code").int16("value"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["code","writeUInt8",1]),a.prototype.fieldSpec.push(["value","writeInt16LE",2]);let l=function(e,t){return r.call(this,e),this.messageType="PhaseBiasesContent",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="PhaseBiasesContent",l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint8("code").uint8("integer_indicator").uint8("widelane_integer_indicator").uint8("discontinuity_counter").int32("bias"),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["code","writeUInt8",1]),l.prototype.fieldSpec.push(["integer_indicator","writeUInt8",1]),l.prototype.fieldSpec.push(["widelane_integer_indicator","writeUInt8",1]),l.prototype.fieldSpec.push(["discontinuity_counter","writeUInt8",1]),l.prototype.fieldSpec.push(["bias","writeInt32LE",4]);let c=function(e,t){return r.call(this,e),this.messageType="STECHeader",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="STECHeader",c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint16("tile_set_id").uint16("tile_id").nest("time",{type:s.prototype.parser}).uint8("num_msgs").uint8("seq_num").uint8("update_interval").uint8("iod_atmo"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),c.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),c.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),c.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),c.prototype.fieldSpec.push(["seq_num","writeUInt8",1]),c.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),c.prototype.fieldSpec.push(["iod_atmo","writeUInt8",1]);let u=function(e,t){return r.call(this,e),this.messageType="GriddedCorrectionHeader",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="GriddedCorrectionHeader",u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint16("tile_set_id").uint16("tile_id").nest("time",{type:s.prototype.parser}).uint16("num_msgs").uint16("seq_num").uint8("update_interval").uint8("iod_atmo").uint8("tropo_quality_indicator"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),u.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),u.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),u.prototype.fieldSpec.push(["num_msgs","writeUInt16LE",2]),u.prototype.fieldSpec.push(["seq_num","writeUInt16LE",2]),u.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),u.prototype.fieldSpec.push(["iod_atmo","writeUInt8",1]),u.prototype.fieldSpec.push(["tropo_quality_indicator","writeUInt8",1]);let y=function(e,t){return r.call(this,e),this.messageType="STECSatElement",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="STECSatElement",y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").nest("sv_id",{type:n.prototype.parser}).uint8("stec_quality_indicator").array("stec_coeff",{length:4,type:"int16le"}),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["sv_id",n.prototype.fieldSpec]),y.prototype.fieldSpec.push(["stec_quality_indicator","writeUInt8",1]),y.prototype.fieldSpec.push(["stec_coeff","array","writeInt16LE",function(){return 2},4]);let h=function(e,t){return r.call(this,e),this.messageType="TroposphericDelayCorrectionNoStd",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="TroposphericDelayCorrectionNoStd",h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").int16("hydro").int8("wet"),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["hydro","writeInt16LE",2]),h.prototype.fieldSpec.push(["wet","writeInt8",1]);let f=function(e,t){return r.call(this,e),this.messageType="TroposphericDelayCorrection",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="TroposphericDelayCorrection",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").int16("hydro").int8("wet").uint8("stddev"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["hydro","writeInt16LE",2]),f.prototype.fieldSpec.push(["wet","writeInt8",1]),f.prototype.fieldSpec.push(["stddev","writeUInt8",1]);let d=function(e,t){return r.call(this,e),this.messageType="STECResidualNoStd",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="STECResidualNoStd",d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").nest("sv_id",{type:n.prototype.parser}).int16("residual"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["sv_id",n.prototype.fieldSpec]),d.prototype.fieldSpec.push(["residual","writeInt16LE",2]);let _=function(e,t){return r.call(this,e),this.messageType="STECResidual",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="STECResidual",_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little").nest("sv_id",{type:n.prototype.parser}).int16("residual").uint8("stddev"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["sv_id",n.prototype.fieldSpec]),_.prototype.fieldSpec.push(["residual","writeInt16LE",2]),_.prototype.fieldSpec.push(["stddev","writeUInt8",1]);let S=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_SSR_ORBIT_CLOCK",S.prototype.msg_type=1501,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).nest("sid",{type:i.prototype.parser}).uint8("update_interval").uint8("iod_ssr").uint32("iod").int32("radial").int32("along").int32("cross").int32("dot_radial").int32("dot_along").int32("dot_cross").int32("c0").int32("c1").int32("c2"),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),S.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),S.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),S.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),S.prototype.fieldSpec.push(["iod","writeUInt32LE",4]),S.prototype.fieldSpec.push(["radial","writeInt32LE",4]),S.prototype.fieldSpec.push(["along","writeInt32LE",4]),S.prototype.fieldSpec.push(["cross","writeInt32LE",4]),S.prototype.fieldSpec.push(["dot_radial","writeInt32LE",4]),S.prototype.fieldSpec.push(["dot_along","writeInt32LE",4]),S.prototype.fieldSpec.push(["dot_cross","writeInt32LE",4]),S.prototype.fieldSpec.push(["c0","writeInt32LE",4]),S.prototype.fieldSpec.push(["c1","writeInt32LE",4]),S.prototype.fieldSpec.push(["c2","writeInt32LE",4]);let g=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_CODE_BIASES",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="MSG_SSR_CODE_BIASES",g.prototype.msg_type=1505,g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).nest("sid",{type:i.prototype.parser}).uint8("update_interval").uint8("iod_ssr").array("biases",{type:a.prototype.parser,readUntil:"eof"}),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),g.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),g.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),g.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),g.prototype.fieldSpec.push(["biases","array",a.prototype.fieldSpec,function(){return this.fields.array.length},null]);let w=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_PHASE_BIASES",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="MSG_SSR_PHASE_BIASES",w.prototype.msg_type=1510,w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).nest("sid",{type:i.prototype.parser}).uint8("update_interval").uint8("iod_ssr").uint8("dispersive_bias").uint8("mw_consistency").uint16("yaw").int8("yaw_rate").array("biases",{type:l.prototype.parser,readUntil:"eof"}),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),w.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),w.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),w.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),w.prototype.fieldSpec.push(["dispersive_bias","writeUInt8",1]),w.prototype.fieldSpec.push(["mw_consistency","writeUInt8",1]),w.prototype.fieldSpec.push(["yaw","writeUInt16LE",2]),w.prototype.fieldSpec.push(["yaw_rate","writeInt8",1]),w.prototype.fieldSpec.push(["biases","array",l.prototype.fieldSpec,function(){return this.fields.array.length},null]);let E=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_STEC_CORRECTION_DEP",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(r.prototype)).messageType="MSG_SSR_STEC_CORRECTION_DEP",E.prototype.msg_type=1531,E.prototype.constructor=E,E.prototype.parser=(new o).endianess("little").nest("header",{type:c.prototype.parser}).array("stec_sat_list",{type:y.prototype.parser,readUntil:"eof"}),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["header",c.prototype.fieldSpec]),E.prototype.fieldSpec.push(["stec_sat_list","array",y.prototype.fieldSpec,function(){return this.fields.array.length},null]);let m=function(e,t){return r.call(this,e),this.messageType="BoundsHeader",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(r.prototype)).messageType="BoundsHeader",m.prototype.constructor=m,m.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).uint8("num_msgs").uint8("seq_num").uint8("update_interval").uint8("sol_id"),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),m.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),m.prototype.fieldSpec.push(["seq_num","writeUInt8",1]),m.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),m.prototype.fieldSpec.push(["sol_id","writeUInt8",1]);let b=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_STEC_CORRECTION",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(r.prototype)).messageType="MSG_SSR_STEC_CORRECTION",b.prototype.msg_type=1533,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").nest("header",{type:m.prototype.parser}).uint8("ssr_iod_atmo").uint16("tile_set_id").uint16("tile_id").uint8("n_sats").array("stec_sat_list",{type:y.prototype.parser,length:"n_sats"}),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["header",m.prototype.fieldSpec]),b.prototype.fieldSpec.push(["ssr_iod_atmo","writeUInt8",1]),b.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),b.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),b.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),b.prototype.fieldSpec.push(["stec_sat_list","array",y.prototype.fieldSpec,function(){return this.fields.array.length},"n_sats"]);let I=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(r.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION",I.prototype.msg_type=1532,I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").nest("header",{type:u.prototype.parser}).uint16("index").nest("tropo_delay_correction",{type:f.prototype.parser}).array("stec_residuals",{type:_.prototype.parser,readUntil:"eof"}),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["header",u.prototype.fieldSpec]),I.prototype.fieldSpec.push(["index","writeUInt16LE",2]),I.prototype.fieldSpec.push(["tropo_delay_correction",f.prototype.fieldSpec]),I.prototype.fieldSpec.push(["stec_residuals","array",_.prototype.fieldSpec,function(){return this.fields.array.length},null]);let L=function(e,t){return r.call(this,e),this.messageType="STECSatElementIntegrity",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(r.prototype)).messageType="STECSatElementIntegrity",L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").nest("stec_residual",{type:_.prototype.parser}).uint8("stec_bound_mu").uint8("stec_bound_sig").uint8("stec_bound_mu_dot").uint8("stec_bound_sig_dot"),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["stec_residual",_.prototype.fieldSpec]),L.prototype.fieldSpec.push(["stec_bound_mu","writeUInt8",1]),L.prototype.fieldSpec.push(["stec_bound_sig","writeUInt8",1]),L.prototype.fieldSpec.push(["stec_bound_mu_dot","writeUInt8",1]),L.prototype.fieldSpec.push(["stec_bound_sig_dot","writeUInt8",1]);let T=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION_BOUNDS",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(r.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION_BOUNDS",T.prototype.msg_type=1534,T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").nest("header",{type:m.prototype.parser}).uint8("ssr_iod_atmo").uint16("tile_set_id").uint16("tile_id").uint8("tropo_qi").uint16("grid_point_id").nest("tropo_delay_correction",{type:f.prototype.parser}).uint8("tropo_v_hydro_bound_mu").uint8("tropo_v_hydro_bound_sig").uint8("tropo_v_wet_bound_mu").uint8("tropo_v_wet_bound_sig").uint8("n_sats").array("stec_sat_list",{type:L.prototype.parser,length:"n_sats"}),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["header",m.prototype.fieldSpec]),T.prototype.fieldSpec.push(["ssr_iod_atmo","writeUInt8",1]),T.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),T.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),T.prototype.fieldSpec.push(["tropo_qi","writeUInt8",1]),T.prototype.fieldSpec.push(["grid_point_id","writeUInt16LE",2]),T.prototype.fieldSpec.push(["tropo_delay_correction",f.prototype.fieldSpec]),T.prototype.fieldSpec.push(["tropo_v_hydro_bound_mu","writeUInt8",1]),T.prototype.fieldSpec.push(["tropo_v_hydro_bound_sig","writeUInt8",1]),T.prototype.fieldSpec.push(["tropo_v_wet_bound_mu","writeUInt8",1]),T.prototype.fieldSpec.push(["tropo_v_wet_bound_sig","writeUInt8",1]),T.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),T.prototype.fieldSpec.push(["stec_sat_list","array",L.prototype.fieldSpec,function(){return this.fields.array.length},"n_sats"]);let v=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_TILE_DEFINITION_DEP",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(r.prototype)).messageType="MSG_SSR_TILE_DEFINITION_DEP",v.prototype.msg_type=1526,v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").uint16("tile_set_id").uint16("tile_id").int16("corner_nw_lat").int16("corner_nw_lon").uint16("spacing_lat").uint16("spacing_lon").uint16("rows").uint16("cols").uint64("bitmask"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),v.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),v.prototype.fieldSpec.push(["corner_nw_lat","writeInt16LE",2]),v.prototype.fieldSpec.push(["corner_nw_lon","writeInt16LE",2]),v.prototype.fieldSpec.push(["spacing_lat","writeUInt16LE",2]),v.prototype.fieldSpec.push(["spacing_lon","writeUInt16LE",2]),v.prototype.fieldSpec.push(["rows","writeUInt16LE",2]),v.prototype.fieldSpec.push(["cols","writeUInt16LE",2]),v.prototype.fieldSpec.push(["bitmask","writeUInt64LE",8]);let U=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_TILE_DEFINITION",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(r.prototype)).messageType="MSG_SSR_TILE_DEFINITION",U.prototype.msg_type=1527,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").uint8("ssr_sol_id").uint16("tile_set_id").uint16("tile_id").int16("corner_nw_lat").int16("corner_nw_lon").uint16("spacing_lat").uint16("spacing_lon").uint16("rows").uint16("cols").uint64("bitmask"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["ssr_sol_id","writeUInt8",1]),U.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),U.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),U.prototype.fieldSpec.push(["corner_nw_lat","writeInt16LE",2]),U.prototype.fieldSpec.push(["corner_nw_lon","writeInt16LE",2]),U.prototype.fieldSpec.push(["spacing_lat","writeUInt16LE",2]),U.prototype.fieldSpec.push(["spacing_lon","writeUInt16LE",2]),U.prototype.fieldSpec.push(["rows","writeUInt16LE",2]),U.prototype.fieldSpec.push(["cols","writeUInt16LE",2]),U.prototype.fieldSpec.push(["bitmask","writeUInt64LE",8]);let M=function(e,t){return r.call(this,e),this.messageType="SatelliteAPC",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(r.prototype)).messageType="SatelliteAPC",M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).uint8("sat_info").uint16("svn").array("pco",{length:3,type:"int16le"}).array("pcv",{length:21,type:"int8"}),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),M.prototype.fieldSpec.push(["sat_info","writeUInt8",1]),M.prototype.fieldSpec.push(["svn","writeUInt16LE",2]),M.prototype.fieldSpec.push(["pco","array","writeInt16LE",function(){return 2},3]),M.prototype.fieldSpec.push(["pcv","array","writeInt8",function(){return 1},21]);let D=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_SATELLITE_APC",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(r.prototype)).messageType="MSG_SSR_SATELLITE_APC",D.prototype.msg_type=1540,D.prototype.constructor=D,D.prototype.parser=(new o).endianess("little").array("apc",{type:M.prototype.parser,readUntil:"eof"}),D.prototype.fieldSpec=[],D.prototype.fieldSpec.push(["apc","array",M.prototype.fieldSpec,function(){return this.fields.array.length},null]);let O=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(r.prototype)).messageType="MSG_SSR_ORBIT_CLOCK_DEP_A",O.prototype.msg_type=1500,O.prototype.constructor=O,O.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).nest("sid",{type:i.prototype.parser}).uint8("update_interval").uint8("iod_ssr").uint8("iod").int32("radial").int32("along").int32("cross").int32("dot_radial").int32("dot_along").int32("dot_cross").int32("c0").int32("c1").int32("c2"),O.prototype.fieldSpec=[],O.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),O.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),O.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),O.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),O.prototype.fieldSpec.push(["iod","writeUInt8",1]),O.prototype.fieldSpec.push(["radial","writeInt32LE",4]),O.prototype.fieldSpec.push(["along","writeInt32LE",4]),O.prototype.fieldSpec.push(["cross","writeInt32LE",4]),O.prototype.fieldSpec.push(["dot_radial","writeInt32LE",4]),O.prototype.fieldSpec.push(["dot_along","writeInt32LE",4]),O.prototype.fieldSpec.push(["dot_cross","writeInt32LE",4]),O.prototype.fieldSpec.push(["c0","writeInt32LE",4]),O.prototype.fieldSpec.push(["c1","writeInt32LE",4]),O.prototype.fieldSpec.push(["c2","writeInt32LE",4]);let G=function(e,t){return r.call(this,e),this.messageType="STECHeaderDepA",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(r.prototype)).messageType="STECHeaderDepA",G.prototype.constructor=G,G.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).uint8("num_msgs").uint8("seq_num").uint8("update_interval").uint8("iod_atmo"),G.prototype.fieldSpec=[],G.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),G.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),G.prototype.fieldSpec.push(["seq_num","writeUInt8",1]),G.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),G.prototype.fieldSpec.push(["iod_atmo","writeUInt8",1]);let A=function(e,t){return r.call(this,e),this.messageType="GriddedCorrectionHeaderDepA",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(r.prototype)).messageType="GriddedCorrectionHeaderDepA",A.prototype.constructor=A,A.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).uint16("num_msgs").uint16("seq_num").uint8("update_interval").uint8("iod_atmo").uint8("tropo_quality_indicator"),A.prototype.fieldSpec=[],A.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),A.prototype.fieldSpec.push(["num_msgs","writeUInt16LE",2]),A.prototype.fieldSpec.push(["seq_num","writeUInt16LE",2]),A.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),A.prototype.fieldSpec.push(["iod_atmo","writeUInt8",1]),A.prototype.fieldSpec.push(["tropo_quality_indicator","writeUInt8",1]);let C=function(e,t){return r.call(this,e),this.messageType="GridDefinitionHeaderDepA",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(r.prototype)).messageType="GridDefinitionHeaderDepA",C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").uint8("region_size_inverse").uint16("area_width").uint16("lat_nw_corner_enc").uint16("lon_nw_corner_enc").uint8("num_msgs").uint8("seq_num"),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["region_size_inverse","writeUInt8",1]),C.prototype.fieldSpec.push(["area_width","writeUInt16LE",2]),C.prototype.fieldSpec.push(["lat_nw_corner_enc","writeUInt16LE",2]),C.prototype.fieldSpec.push(["lon_nw_corner_enc","writeUInt16LE",2]),C.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),C.prototype.fieldSpec.push(["seq_num","writeUInt8",1]);let R=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_STEC_CORRECTION_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(r.prototype)).messageType="MSG_SSR_STEC_CORRECTION_DEP_A",R.prototype.msg_type=1515,R.prototype.constructor=R,R.prototype.parser=(new o).endianess("little").nest("header",{type:G.prototype.parser}).array("stec_sat_list",{type:y.prototype.parser,readUntil:"eof"}),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["header",G.prototype.fieldSpec]),R.prototype.fieldSpec.push(["stec_sat_list","array",y.prototype.fieldSpec,function(){return this.fields.array.length},null]);let P=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(r.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A",P.prototype.msg_type=1520,P.prototype.constructor=P,P.prototype.parser=(new o).endianess("little").nest("header",{type:A.prototype.parser}).uint16("index").nest("tropo_delay_correction",{type:h.prototype.parser}).array("stec_residuals",{type:d.prototype.parser,readUntil:"eof"}),P.prototype.fieldSpec=[],P.prototype.fieldSpec.push(["header",A.prototype.fieldSpec]),P.prototype.fieldSpec.push(["index","writeUInt16LE",2]),P.prototype.fieldSpec.push(["tropo_delay_correction",h.prototype.fieldSpec]),P.prototype.fieldSpec.push(["stec_residuals","array",d.prototype.fieldSpec,function(){return this.fields.array.length},null]);let N=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(r.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION_DEP_A",N.prototype.msg_type=1530,N.prototype.constructor=N,N.prototype.parser=(new o).endianess("little").nest("header",{type:A.prototype.parser}).uint16("index").nest("tropo_delay_correction",{type:f.prototype.parser}).array("stec_residuals",{type:_.prototype.parser,readUntil:"eof"}),N.prototype.fieldSpec=[],N.prototype.fieldSpec.push(["header",A.prototype.fieldSpec]),N.prototype.fieldSpec.push(["index","writeUInt16LE",2]),N.prototype.fieldSpec.push(["tropo_delay_correction",f.prototype.fieldSpec]),N.prototype.fieldSpec.push(["stec_residuals","array",_.prototype.fieldSpec,function(){return this.fields.array.length},null]);let j=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_GRID_DEFINITION_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(r.prototype)).messageType="MSG_SSR_GRID_DEFINITION_DEP_A",j.prototype.msg_type=1525,j.prototype.constructor=j,j.prototype.parser=(new o).endianess("little").nest("header",{type:C.prototype.parser}).array("rle_list",{type:"uint8",readUntil:"eof"}),j.prototype.fieldSpec=[],j.prototype.fieldSpec.push(["header",C.prototype.fieldSpec]),j.prototype.fieldSpec.push(["rle_list","array","writeUInt8",function(){return 1},null]);let x=function(e,t){return r.call(this,e),this.messageType="OrbitClockBound",this.fields=t||this.parser.parse(e.payload),this};(x.prototype=Object.create(r.prototype)).messageType="OrbitClockBound",x.prototype.constructor=x,x.prototype.parser=(new o).endianess("little").uint8("sat_id").uint8("orb_radial_bound_mu").uint8("orb_along_bound_mu").uint8("orb_cross_bound_mu").uint8("orb_radial_bound_sig").uint8("orb_along_bound_sig").uint8("orb_cross_bound_sig").uint8("clock_bound_mu").uint8("clock_bound_sig"),x.prototype.fieldSpec=[],x.prototype.fieldSpec.push(["sat_id","writeUInt8",1]),x.prototype.fieldSpec.push(["orb_radial_bound_mu","writeUInt8",1]),x.prototype.fieldSpec.push(["orb_along_bound_mu","writeUInt8",1]),x.prototype.fieldSpec.push(["orb_cross_bound_mu","writeUInt8",1]),x.prototype.fieldSpec.push(["orb_radial_bound_sig","writeUInt8",1]),x.prototype.fieldSpec.push(["orb_along_bound_sig","writeUInt8",1]),x.prototype.fieldSpec.push(["orb_cross_bound_sig","writeUInt8",1]),x.prototype.fieldSpec.push(["clock_bound_mu","writeUInt8",1]),x.prototype.fieldSpec.push(["clock_bound_sig","writeUInt8",1]);let F=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK_BOUNDS",this.fields=t||this.parser.parse(e.payload),this};(F.prototype=Object.create(r.prototype)).messageType="MSG_SSR_ORBIT_CLOCK_BOUNDS",F.prototype.msg_type=1502,F.prototype.constructor=F,F.prototype.parser=(new o).endianess("little").nest("header",{type:m.prototype.parser}).uint8("ssr_iod").uint8("const_id").uint8("n_sats").array("orbit_clock_bounds",{type:x.prototype.parser,length:"n_sats"}),F.prototype.fieldSpec=[],F.prototype.fieldSpec.push(["header",m.prototype.fieldSpec]),F.prototype.fieldSpec.push(["ssr_iod","writeUInt8",1]),F.prototype.fieldSpec.push(["const_id","writeUInt8",1]),F.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),F.prototype.fieldSpec.push(["orbit_clock_bounds","array",x.prototype.fieldSpec,function(){return this.fields.array.length},"n_sats"]);let k=function(e,t){return r.call(this,e),this.messageType="CodePhaseBiasesSatSig",this.fields=t||this.parser.parse(e.payload),this};(k.prototype=Object.create(r.prototype)).messageType="CodePhaseBiasesSatSig",k.prototype.constructor=k,k.prototype.parser=(new o).endianess("little").uint8("sat_id").uint8("signal_id").uint8("code_bias_bound_mu").uint8("code_bias_bound_sig").uint8("phase_bias_bound_mu").uint8("phase_bias_bound_sig"),k.prototype.fieldSpec=[],k.prototype.fieldSpec.push(["sat_id","writeUInt8",1]),k.prototype.fieldSpec.push(["signal_id","writeUInt8",1]),k.prototype.fieldSpec.push(["code_bias_bound_mu","writeUInt8",1]),k.prototype.fieldSpec.push(["code_bias_bound_sig","writeUInt8",1]),k.prototype.fieldSpec.push(["phase_bias_bound_mu","writeUInt8",1]),k.prototype.fieldSpec.push(["phase_bias_bound_sig","writeUInt8",1]);let B=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_CODE_PHASE_BIASES_BOUNDS",this.fields=t||this.parser.parse(e.payload),this};(B.prototype=Object.create(r.prototype)).messageType="MSG_SSR_CODE_PHASE_BIASES_BOUNDS",B.prototype.msg_type=1516,B.prototype.constructor=B,B.prototype.parser=(new o).endianess("little").nest("header",{type:m.prototype.parser}).uint8("ssr_iod").uint8("const_id").uint8("n_sats_signals").array("satellites_signals",{type:k.prototype.parser,length:"n_sats_signals"}),B.prototype.fieldSpec=[],B.prototype.fieldSpec.push(["header",m.prototype.fieldSpec]),B.prototype.fieldSpec.push(["ssr_iod","writeUInt8",1]),B.prototype.fieldSpec.push(["const_id","writeUInt8",1]),B.prototype.fieldSpec.push(["n_sats_signals","writeUInt8",1]),B.prototype.fieldSpec.push(["satellites_signals","array",k.prototype.fieldSpec,function(){return this.fields.array.length},"n_sats_signals"]);let q=function(e,t){return r.call(this,e),this.messageType="OrbitClockBoundDegradation",this.fields=t||this.parser.parse(e.payload),this};(q.prototype=Object.create(r.prototype)).messageType="OrbitClockBoundDegradation",q.prototype.constructor=q,q.prototype.parser=(new o).endianess("little").uint8("orb_radial_bound_mu_dot").uint8("orb_along_bound_mu_dot").uint8("orb_cross_bound_mu_dot").uint8("orb_radial_bound_sig_dot").uint8("orb_along_bound_sig_dot").uint8("orb_cross_bound_sig_dot").uint8("clock_bound_mu_dot").uint8("clock_bound_sig_dot"),q.prototype.fieldSpec=[],q.prototype.fieldSpec.push(["orb_radial_bound_mu_dot","writeUInt8",1]),q.prototype.fieldSpec.push(["orb_along_bound_mu_dot","writeUInt8",1]),q.prototype.fieldSpec.push(["orb_cross_bound_mu_dot","writeUInt8",1]),q.prototype.fieldSpec.push(["orb_radial_bound_sig_dot","writeUInt8",1]),q.prototype.fieldSpec.push(["orb_along_bound_sig_dot","writeUInt8",1]),q.prototype.fieldSpec.push(["orb_cross_bound_sig_dot","writeUInt8",1]),q.prototype.fieldSpec.push(["clock_bound_mu_dot","writeUInt8",1]),q.prototype.fieldSpec.push(["clock_bound_sig_dot","writeUInt8",1]);let z=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK_BOUNDS_DEGRADATION",this.fields=t||this.parser.parse(e.payload),this};(z.prototype=Object.create(r.prototype)).messageType="MSG_SSR_ORBIT_CLOCK_BOUNDS_DEGRADATION",z.prototype.msg_type=1503,z.prototype.constructor=z,z.prototype.parser=(new o).endianess("little").nest("header",{type:m.prototype.parser}).uint8("ssr_iod").uint8("const_id").uint64("sat_bitmask").nest("orbit_clock_bounds_degradation",{type:q.prototype.parser}),z.prototype.fieldSpec=[],z.prototype.fieldSpec.push(["header",m.prototype.fieldSpec]),z.prototype.fieldSpec.push(["ssr_iod","writeUInt8",1]),z.prototype.fieldSpec.push(["const_id","writeUInt8",1]),z.prototype.fieldSpec.push(["sat_bitmask","writeUInt64LE",8]),z.prototype.fieldSpec.push(["orbit_clock_bounds_degradation",q.prototype.fieldSpec]),e.exports={CodeBiasesContent:a,PhaseBiasesContent:l,STECHeader:c,GriddedCorrectionHeader:u,STECSatElement:y,TroposphericDelayCorrectionNoStd:h,TroposphericDelayCorrection:f,STECResidualNoStd:d,STECResidual:_,1501:S,MsgSsrOrbitClock:S,1505:g,MsgSsrCodeBiases:g,1510:w,MsgSsrPhaseBiases:w,1531:E,MsgSsrStecCorrectionDep:E,BoundsHeader:m,1533:b,MsgSsrStecCorrection:b,1532:I,MsgSsrGriddedCorrection:I,STECSatElementIntegrity:L,1534:T,MsgSsrGriddedCorrectionBounds:T,1526:v,MsgSsrTileDefinitionDep:v,1527:U,MsgSsrTileDefinition:U,SatelliteAPC:M,1540:D,MsgSsrSatelliteApc:D,1500:O,MsgSsrOrbitClockDepA:O,STECHeaderDepA:G,GriddedCorrectionHeaderDepA:A,GridDefinitionHeaderDepA:C,1515:R,MsgSsrStecCorrectionDepA:R,1520:P,MsgSsrGriddedCorrectionNoStdDepA:P,1530:N,MsgSsrGriddedCorrectionDepA:N,1525:j,MsgSsrGridDefinitionDepA:j,OrbitClockBound:x,1502:F,MsgSsrOrbitClockBounds:F,CodePhaseBiasesSatSig:k,1516:B,MsgSsrCodePhaseBiasesBounds:B,OrbitClockBoundDegradation:q,1503:z,MsgSsrOrbitClockBoundsDegradation:z}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_STARTUP",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_STARTUP",i.prototype.msg_type=65280,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint8("cause").uint8("startup_type").uint16("reserved"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["cause","writeUInt8",1]),i.prototype.fieldSpec.push(["startup_type","writeUInt8",1]),i.prototype.fieldSpec.push(["reserved","writeUInt16LE",2]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_DGNSS_STATUS",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_DGNSS_STATUS",s.prototype.msg_type=65282,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("flags").uint16("latency").uint8("num_signals").string("source",{greedy:!0}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["flags","writeUInt8",1]),s.prototype.fieldSpec.push(["latency","writeUInt16LE",2]),s.prototype.fieldSpec.push(["num_signals","writeUInt8",1]),s.prototype.fieldSpec.push(["source","string",null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_HEARTBEAT",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_HEARTBEAT",n.prototype.msg_type=65535,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint32("flags"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let a=function(e,t){return r.call(this,e),this.messageType="SubSystemReport",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="SubSystemReport",a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint16("component").uint8("generic").uint8("specific"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["component","writeUInt16LE",2]),a.prototype.fieldSpec.push(["generic","writeUInt8",1]),a.prototype.fieldSpec.push(["specific","writeUInt8",1]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_STATUS_REPORT",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_STATUS_REPORT",l.prototype.msg_type=65534,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint16("reporting_system").uint16("sbp_version").uint32("sequence").uint32("uptime").array("status",{type:a.prototype.parser,readUntil:"eof"}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["reporting_system","writeUInt16LE",2]),l.prototype.fieldSpec.push(["sbp_version","writeUInt16LE",2]),l.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),l.prototype.fieldSpec.push(["uptime","writeUInt32LE",4]),l.prototype.fieldSpec.push(["status","array",a.prototype.fieldSpec,function(){return this.fields.array.length},null]);let c=function(e,t){return r.call(this,e),this.messageType="StatusJournalItem",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="StatusJournalItem",c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint32("uptime").nest("report",{type:a.prototype.parser}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["uptime","writeUInt32LE",4]),c.prototype.fieldSpec.push(["report",a.prototype.fieldSpec]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_STATUS_JOURNAL",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_STATUS_JOURNAL",u.prototype.msg_type=65533,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint16("reporting_system").uint16("sbp_version").uint32("total_status_reports").uint8("sequence_descriptor").array("journal",{type:c.prototype.parser,readUntil:"eof"}),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["reporting_system","writeUInt16LE",2]),u.prototype.fieldSpec.push(["sbp_version","writeUInt16LE",2]),u.prototype.fieldSpec.push(["total_status_reports","writeUInt32LE",4]),u.prototype.fieldSpec.push(["sequence_descriptor","writeUInt8",1]),u.prototype.fieldSpec.push(["journal","array",c.prototype.fieldSpec,function(){return this.fields.array.length},null]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_INS_STATUS",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_INS_STATUS",y.prototype.msg_type=65283,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint32("flags"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_CSAC_TELEMETRY",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_CSAC_TELEMETRY",h.prototype.msg_type=65284,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint8("id").string("telemetry",{greedy:!0}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["id","writeUInt8",1]),h.prototype.fieldSpec.push(["telemetry","string",null]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_CSAC_TELEMETRY_LABELS",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_CSAC_TELEMETRY_LABELS",f.prototype.msg_type=65285,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint8("id").string("telemetry_labels",{greedy:!0}),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["id","writeUInt8",1]),f.prototype.fieldSpec.push(["telemetry_labels","string",null]);let d=function(e,t){return r.call(this,e),this.messageType="MSG_INS_UPDATES",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_INS_UPDATES",d.prototype.msg_type=65286,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").uint32("tow").uint8("gnsspos").uint8("gnssvel").uint8("wheelticks").uint8("speed").uint8("nhc").uint8("zerovel"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),d.prototype.fieldSpec.push(["gnsspos","writeUInt8",1]),d.prototype.fieldSpec.push(["gnssvel","writeUInt8",1]),d.prototype.fieldSpec.push(["wheelticks","writeUInt8",1]),d.prototype.fieldSpec.push(["speed","writeUInt8",1]),d.prototype.fieldSpec.push(["nhc","writeUInt8",1]),d.prototype.fieldSpec.push(["zerovel","writeUInt8",1]);let _=function(e,t){return r.call(this,e),this.messageType="MSG_GNSS_TIME_OFFSET",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="MSG_GNSS_TIME_OFFSET",_.prototype.msg_type=65287,_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little").int16("weeks").int32("milliseconds").int16("microseconds").uint8("flags"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["weeks","writeInt16LE",2]),_.prototype.fieldSpec.push(["milliseconds","writeInt32LE",4]),_.prototype.fieldSpec.push(["microseconds","writeInt16LE",2]),_.prototype.fieldSpec.push(["flags","writeUInt8",1]);let S=function(e,t){return r.call(this,e),this.messageType="MSG_PPS_TIME",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_PPS_TIME",S.prototype.msg_type=65288,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").uint64("time").uint8("flags"),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["time","writeUInt64LE",8]),S.prototype.fieldSpec.push(["flags","writeUInt8",1]);let g=function(e,t){return r.call(this,e),this.messageType="MSG_SENSOR_AID_EVENT",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="MSG_SENSOR_AID_EVENT",g.prototype.msg_type=65289,g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").uint32("time").uint8("sensor_type").uint16("sensor_id").uint8("sensor_state").uint8("n_available_meas").uint8("n_attempted_meas").uint8("n_accepted_meas").uint32("flags"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["time","writeUInt32LE",4]),g.prototype.fieldSpec.push(["sensor_type","writeUInt8",1]),g.prototype.fieldSpec.push(["sensor_id","writeUInt16LE",2]),g.prototype.fieldSpec.push(["sensor_state","writeUInt8",1]),g.prototype.fieldSpec.push(["n_available_meas","writeUInt8",1]),g.prototype.fieldSpec.push(["n_attempted_meas","writeUInt8",1]),g.prototype.fieldSpec.push(["n_accepted_meas","writeUInt8",1]),g.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let w=function(e,t){return r.call(this,e),this.messageType="MSG_GROUP_META",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="MSG_GROUP_META",w.prototype.msg_type=65290,w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").uint8("group_id").uint8("flags").uint8("n_group_msgs").array("group_msgs",{type:"uint16le",length:"n_group_msgs"}),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["group_id","writeUInt8",1]),w.prototype.fieldSpec.push(["flags","writeUInt8",1]),w.prototype.fieldSpec.push(["n_group_msgs","writeUInt8",1]),w.prototype.fieldSpec.push(["group_msgs","array","writeUInt16LE",function(){return 2},"n_group_msgs"]),e.exports={65280:i,MsgStartup:i,65282:s,MsgDgnssStatus:s,65535:n,MsgHeartbeat:n,SubSystemReport:a,65534:l,MsgStatusReport:l,StatusJournalItem:c,65533:u,MsgStatusJournal:u,65283:y,MsgInsStatus:y,65284:h,MsgCsacTelemetry:h,65285:f,MsgCsacTelemetryLabels:f,65286:d,MsgInsUpdates:d,65287:_,MsgGnssTimeOffset:_,65288:S,MsgPpsTime:S,65289:g,MsgSensorAidEvent:g,65290:w,MsgGroupMeta:w}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase),s=p(0).GnssSignal,n=p(0).GnssSignalDep,a=p(0).GPSTime,l=p(0).GPSTimeDep,c=(p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_STATE_DETAILED_DEP_A",this.fields=t||this.parser.parse(e.payload),this});(c.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_STATE_DETAILED_DEP_A",c.prototype.msg_type=33,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint64("recv_time").nest("tot",{type:a.prototype.parser}).uint32("P").uint16("P_std").nest("L",{type:i.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:s.prototype.parser}).int32("doppler").uint16("doppler_std").uint32("uptime").int16("clock_offset").int16("clock_drift").uint16("corr_spacing").int8("acceleration").uint8("sync_flags").uint8("tow_flags").uint8("track_flags").uint8("nav_flags").uint8("pset_flags").uint8("misc_flags"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["recv_time","writeUInt64LE",8]),c.prototype.fieldSpec.push(["tot",a.prototype.fieldSpec]),c.prototype.fieldSpec.push(["P","writeUInt32LE",4]),c.prototype.fieldSpec.push(["P_std","writeUInt16LE",2]),c.prototype.fieldSpec.push(["L",i.prototype.fieldSpec]),c.prototype.fieldSpec.push(["cn0","writeUInt8",1]),c.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),c.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),c.prototype.fieldSpec.push(["doppler","writeInt32LE",4]),c.prototype.fieldSpec.push(["doppler_std","writeUInt16LE",2]),c.prototype.fieldSpec.push(["uptime","writeUInt32LE",4]),c.prototype.fieldSpec.push(["clock_offset","writeInt16LE",2]),c.prototype.fieldSpec.push(["clock_drift","writeInt16LE",2]),c.prototype.fieldSpec.push(["corr_spacing","writeUInt16LE",2]),c.prototype.fieldSpec.push(["acceleration","writeInt8",1]),c.prototype.fieldSpec.push(["sync_flags","writeUInt8",1]),c.prototype.fieldSpec.push(["tow_flags","writeUInt8",1]),c.prototype.fieldSpec.push(["track_flags","writeUInt8",1]),c.prototype.fieldSpec.push(["nav_flags","writeUInt8",1]),c.prototype.fieldSpec.push(["pset_flags","writeUInt8",1]),c.prototype.fieldSpec.push(["misc_flags","writeUInt8",1]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_STATE_DETAILED_DEP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_STATE_DETAILED_DEP",u.prototype.msg_type=17,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint64("recv_time").nest("tot",{type:l.prototype.parser}).uint32("P").uint16("P_std").nest("L",{type:i.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:n.prototype.parser}).int32("doppler").uint16("doppler_std").uint32("uptime").int16("clock_offset").int16("clock_drift").uint16("corr_spacing").int8("acceleration").uint8("sync_flags").uint8("tow_flags").uint8("track_flags").uint8("nav_flags").uint8("pset_flags").uint8("misc_flags"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["recv_time","writeUInt64LE",8]),u.prototype.fieldSpec.push(["tot",l.prototype.fieldSpec]),u.prototype.fieldSpec.push(["P","writeUInt32LE",4]),u.prototype.fieldSpec.push(["P_std","writeUInt16LE",2]),u.prototype.fieldSpec.push(["L",i.prototype.fieldSpec]),u.prototype.fieldSpec.push(["cn0","writeUInt8",1]),u.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),u.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),u.prototype.fieldSpec.push(["doppler","writeInt32LE",4]),u.prototype.fieldSpec.push(["doppler_std","writeUInt16LE",2]),u.prototype.fieldSpec.push(["uptime","writeUInt32LE",4]),u.prototype.fieldSpec.push(["clock_offset","writeInt16LE",2]),u.prototype.fieldSpec.push(["clock_drift","writeInt16LE",2]),u.prototype.fieldSpec.push(["corr_spacing","writeUInt16LE",2]),u.prototype.fieldSpec.push(["acceleration","writeInt8",1]),u.prototype.fieldSpec.push(["sync_flags","writeUInt8",1]),u.prototype.fieldSpec.push(["tow_flags","writeUInt8",1]),u.prototype.fieldSpec.push(["track_flags","writeUInt8",1]),u.prototype.fieldSpec.push(["nav_flags","writeUInt8",1]),u.prototype.fieldSpec.push(["pset_flags","writeUInt8",1]),u.prototype.fieldSpec.push(["misc_flags","writeUInt8",1]);let y=function(e,t){return r.call(this,e),this.messageType="TrackingChannelState",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="TrackingChannelState",y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).uint8("fcn").uint8("cn0"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),y.prototype.fieldSpec.push(["fcn","writeUInt8",1]),y.prototype.fieldSpec.push(["cn0","writeUInt8",1]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_STATE",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_STATE",h.prototype.msg_type=65,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").array("states",{type:y.prototype.parser,readUntil:"eof"}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["states","array",y.prototype.fieldSpec,function(){return this.fields.array.length},null]);let f=function(e,t){return r.call(this,e),this.messageType="MeasurementState",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MeasurementState",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").nest("mesid",{type:s.prototype.parser}).uint8("cn0"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["mesid",s.prototype.fieldSpec]),f.prototype.fieldSpec.push(["cn0","writeUInt8",1]);let d=function(e,t){return r.call(this,e),this.messageType="MSG_MEASUREMENT_STATE",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_MEASUREMENT_STATE",d.prototype.msg_type=97,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").array("states",{type:f.prototype.parser,readUntil:"eof"}),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["states","array",f.prototype.fieldSpec,function(){return this.fields.array.length},null]);let _=function(e,t){return r.call(this,e),this.messageType="TrackingChannelCorrelation",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="TrackingChannelCorrelation",_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little").int16("I").int16("Q"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["I","writeInt16LE",2]),_.prototype.fieldSpec.push(["Q","writeInt16LE",2]);let S=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_IQ",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_IQ",S.prototype.msg_type=45,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").uint8("channel").nest("sid",{type:s.prototype.parser}).array("corrs",{length:3,type:_.prototype.parser}),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["channel","writeUInt8",1]),S.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),S.prototype.fieldSpec.push(["corrs","array",_.prototype.fieldSpec,function(){return this.fields.array.length},3]);let g=function(e,t){return r.call(this,e),this.messageType="TrackingChannelCorrelationDep",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="TrackingChannelCorrelationDep",g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").int32("I").int32("Q"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["I","writeInt32LE",4]),g.prototype.fieldSpec.push(["Q","writeInt32LE",4]);let w=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_IQ_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_IQ_DEP_B",w.prototype.msg_type=44,w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").uint8("channel").nest("sid",{type:s.prototype.parser}).array("corrs",{length:3,type:g.prototype.parser}),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["channel","writeUInt8",1]),w.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),w.prototype.fieldSpec.push(["corrs","array",g.prototype.fieldSpec,function(){return this.fields.array.length},3]);let E=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_IQ_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_IQ_DEP_A",E.prototype.msg_type=28,E.prototype.constructor=E,E.prototype.parser=(new o).endianess("little").uint8("channel").nest("sid",{type:n.prototype.parser}).array("corrs",{length:3,type:g.prototype.parser}),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["channel","writeUInt8",1]),E.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),E.prototype.fieldSpec.push(["corrs","array",g.prototype.fieldSpec,function(){return this.fields.array.length},3]);let m=function(e,t){return r.call(this,e),this.messageType="TrackingChannelStateDepA",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(r.prototype)).messageType="TrackingChannelStateDepA",m.prototype.constructor=m,m.prototype.parser=(new o).endianess("little").uint8("state").uint8("prn").floatle("cn0"),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["state","writeUInt8",1]),m.prototype.fieldSpec.push(["prn","writeUInt8",1]),m.prototype.fieldSpec.push(["cn0","writeFloatLE",4]);let b=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_STATE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_STATE_DEP_A",b.prototype.msg_type=22,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").array("states",{type:m.prototype.parser,readUntil:"eof"}),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["states","array",m.prototype.fieldSpec,function(){return this.fields.array.length},null]);let I=function(e,t){return r.call(this,e),this.messageType="TrackingChannelStateDepB",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(r.prototype)).messageType="TrackingChannelStateDepB",I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").uint8("state").nest("sid",{type:n.prototype.parser}).floatle("cn0"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["state","writeUInt8",1]),I.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),I.prototype.fieldSpec.push(["cn0","writeFloatLE",4]);let L=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_STATE_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_STATE_DEP_B",L.prototype.msg_type=19,L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").array("states",{type:I.prototype.parser,readUntil:"eof"}),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["states","array",I.prototype.fieldSpec,function(){return this.fields.array.length},null]),e.exports={33:c,MsgTrackingStateDetailedDepA:c,17:u,MsgTrackingStateDetailedDep:u,TrackingChannelState:y,65:h,MsgTrackingState:h,MeasurementState:f,97:d,MsgMeasurementState:d,TrackingChannelCorrelation:_,45:S,MsgTrackingIq:S,TrackingChannelCorrelationDep:g,44:w,MsgTrackingIqDepB:w,28:E,MsgTrackingIqDepA:E,TrackingChannelStateDepA:m,22:b,MsgTrackingStateDepA:b,TrackingChannelStateDepB:I,19:L,MsgTrackingStateDepB:L}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_USER_DATA",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_USER_DATA",i.prototype.msg_type=2048,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").array("contents",{type:"uint8",readUntil:"eof"}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["contents","array","writeUInt8",function(){return 1},null]),e.exports={2048:i,MsgUserData:i}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_ODOMETRY",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_ODOMETRY",i.prototype.msg_type=2307,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint32("tow").int32("velocity").uint8("flags"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["velocity","writeInt32LE",4]),i.prototype.fieldSpec.push(["flags","writeUInt8",1]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_WHEELTICK",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_WHEELTICK",s.prototype.msg_type=2308,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint64("time").uint8("flags").uint8("source").int32("ticks"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["time","writeUInt64LE",8]),s.prototype.fieldSpec.push(["flags","writeUInt8",1]),s.prototype.fieldSpec.push(["source","writeUInt8",1]),s.prototype.fieldSpec.push(["ticks","writeInt32LE",4]),e.exports={2307:i,MsgOdometry:i,2308:s,MsgWheeltick:s}}]); \ No newline at end of file +function r(e,t){if(e===t)return 0;for(var p=e.length,r=t.length,o=0,i=Math.min(p,r);o=0;l--)if(c[l]!==u[l])return!1;for(l=c.length-1;l>=0;l--)if(a=c[l],!g(e[a],t[a],p,r))return!1;return!0}(e,t,p,s))}return p?e===t:e==t}function w(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function E(e,t){if(!e||!t)return!1;if("[object RegExp]"==Object.prototype.toString.call(t))return t.test(e);try{if(e instanceof t)return!0}catch(e){}return!Error.isPrototypeOf(t)&&!0===t.call({},e)}function m(e,t,p,r){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof p&&(r=p,p=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),r=(p&&p.name?" ("+p.name+").":".")+(r?" "+r:"."),e&&!o&&_(o,p,"Missing expected exception"+r);var s="string"==typeof r,n=!e&&o&&!p;if((!e&&i.isError(o)&&s&&E(o,p)||n)&&_(o,p,"Got unwanted exception"+r),e&&o&&p&&!E(o,p)||!e&&o)throw o}u.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=function(e){return f(d(e.actual),128)+" "+e.operator+" "+f(d(e.expected),128)}(this),this.generatedMessage=!0);var t=e.stackStartFunction||_;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var p=new Error;if(p.stack){var r=p.stack,o=h(t),i=r.indexOf("\n"+o);if(i>=0){var s=r.indexOf("\n",i+1);r=r.substring(s+1)}this.stack=r}}},i.inherits(u.AssertionError,Error),u.fail=_,u.ok=S,u.equal=function(e,t,p){e!=t&&_(e,t,p,"==",u.equal)},u.notEqual=function(e,t,p){e==t&&_(e,t,p,"!=",u.notEqual)},u.deepEqual=function(e,t,p){g(e,t,!1)||_(e,t,p,"deepEqual",u.deepEqual)},u.deepStrictEqual=function(e,t,p){g(e,t,!0)||_(e,t,p,"deepStrictEqual",u.deepStrictEqual)},u.notDeepEqual=function(e,t,p){g(e,t,!1)&&_(e,t,p,"notDeepEqual",u.notDeepEqual)},u.notDeepStrictEqual=function e(t,p,r){g(t,p,!0)&&_(t,p,r,"notDeepStrictEqual",e)},u.strictEqual=function(e,t,p){e!==t&&_(e,t,p,"===",u.strictEqual)},u.notStrictEqual=function(e,t,p){e===t&&_(e,t,p,"!==",u.notStrictEqual)},u.throws=function(e,t,p){m(!0,e,t,p)},u.doesNotThrow=function(e,t,p){m(!1,e,t,p)},u.ifError=function(e){if(e)throw e};var b=Object.keys||function(e){var t=[];for(var p in e)s.call(e,p)&&t.push(p);return t}}).call(this,p(5))},function(e,t,p){var r;!function(p){o(Math.pow(36,5)),o(Math.pow(16,7)),o(Math.pow(10,9)),o(Math.pow(2,30)),o(36),o(16),o(10),o(2);function o(e,t){return this instanceof o?(this._low=0,this._high=0,this.remainder=null,void 0===t?s.call(this,e):"string"==typeof e?n.call(this,e,t):void i.call(this,e,t)):new o(e,t)}function i(e,t){return this._low=0|e,this._high=0|t,this}function s(e){return this._low=65535&e,this._high=e>>>16,this}function n(e,t){var p=parseInt(e,t||10);return this._low=65535&p,this._high=p>>>16,this}o.prototype.fromBits=i,o.prototype.fromNumber=s,o.prototype.fromString=n,o.prototype.toNumber=function(){return 65536*this._high+this._low},o.prototype.toString=function(e){return this.toNumber().toString(e||10)},o.prototype.add=function(e){var t=this._low+e._low,p=t>>>16;return p+=this._high+e._high,this._low=65535&t,this._high=65535&p,this},o.prototype.subtract=function(e){return this.add(e.clone().negate())},o.prototype.multiply=function(e){var t,p,r=this._high,o=this._low,i=e._high,s=e._low;return t=(p=o*s)>>>16,t+=r*s,t&=65535,t+=o*i,this._low=65535&p,this._high=65535&t,this},o.prototype.div=function(e){if(0==e._low&&0==e._high)throw Error("division by zero");if(0==e._high&&1==e._low)return this.remainder=new o(0),this;if(e.gt(this))return this.remainder=this.clone(),this._low=0,this._high=0,this;if(this.eq(e))return this.remainder=new o(0),this._low=1,this._high=0,this;for(var t=e.clone(),p=-1;!this.lt(t);)t.shiftLeft(1,!0),p++;for(this.remainder=this.clone(),this._low=0,this._high=0;p>=0;p--)t.shiftRight(1),this.remainder.lt(t)||(this.remainder.subtract(t),p>=16?this._high|=1<>>16)&65535,this},o.prototype.equals=o.prototype.eq=function(e){return this._low==e._low&&this._high==e._high},o.prototype.greaterThan=o.prototype.gt=function(e){return this._high>e._high||!(this._highe._low},o.prototype.lessThan=o.prototype.lt=function(e){return this._highe._high)&&this._low16?(this._low=this._high>>e-16,this._high=0):16==e?(this._low=this._high,this._high=0):(this._low=this._low>>e|this._high<<16-e&65535,this._high>>=e),this},o.prototype.shiftLeft=o.prototype.shiftl=function(e,t){return e>16?(this._high=this._low<>16-e,this._low=this._low<>>32-e,this._low=65535&t,this._high=t>>>16,this},o.prototype.rotateRight=o.prototype.rotr=function(e){var t=this._high<<16|this._low;return t=t>>>e|t<<32-e,this._low=65535&t,this._high=t>>>16,this},o.prototype.clone=function(){return new o(this._low,this._high)},void 0===(r=function(){return o}.apply(t,[]))||(e.exports=r)}()},function(e,t,p){var r;!function(p){var o={16:s(Math.pow(16,5)),10:s(Math.pow(10,5)),2:s(Math.pow(2,5))},i={16:s(16),10:s(10),2:s(2)};function s(e,t,p,r){return this instanceof s?(this.remainder=null,"string"==typeof e?l.call(this,e,t):void 0===t?a.call(this,e):void n.apply(this,arguments)):new s(e,t,p,r)}function n(e,t,p,r){return void 0===p?(this._a00=65535&e,this._a16=e>>>16,this._a32=65535&t,this._a48=t>>>16,this):(this._a00=0|e,this._a16=0|t,this._a32=0|p,this._a48=0|r,this)}function a(e){return this._a00=65535&e,this._a16=e>>>16,this._a32=0,this._a48=0,this}function l(e,t){t=t||10,this._a00=0,this._a16=0,this._a32=0,this._a48=0;for(var p=o[t]||new s(Math.pow(t,5)),r=0,i=e.length;r=0&&(p.div(t),r[o]=p.remainder.toNumber().toString(e),p.gt(t));o--);return r[o-1]=p.toNumber().toString(e),r.join("")},s.prototype.add=function(e){var t=this._a00+e._a00,p=t>>>16,r=(p+=this._a16+e._a16)>>>16,o=(r+=this._a32+e._a32)>>>16;return o+=this._a48+e._a48,this._a00=65535&t,this._a16=65535&p,this._a32=65535&r,this._a48=65535&o,this},s.prototype.subtract=function(e){return this.add(e.clone().negate())},s.prototype.multiply=function(e){var t=this._a00,p=this._a16,r=this._a32,o=this._a48,i=e._a00,s=e._a16,n=e._a32,a=t*i,l=a>>>16,c=(l+=t*s)>>>16;l&=65535,c+=(l+=p*i)>>>16;var u=(c+=t*n)>>>16;return c&=65535,u+=(c+=p*s)>>>16,c&=65535,u+=(c+=r*i)>>>16,u+=t*e._a48,u&=65535,u+=p*n,u&=65535,u+=r*s,u&=65535,u+=o*i,this._a00=65535&a,this._a16=65535&l,this._a32=65535&c,this._a48=65535&u,this},s.prototype.div=function(e){if(0==e._a16&&0==e._a32&&0==e._a48){if(0==e._a00)throw Error("division by zero");if(1==e._a00)return this.remainder=new s(0),this}if(e.gt(this))return this.remainder=this.clone(),this._a00=0,this._a16=0,this._a32=0,this._a48=0,this;if(this.eq(e))return this.remainder=new s(0),this._a00=1,this._a16=0,this._a32=0,this._a48=0,this;for(var t=e.clone(),p=-1;!this.lt(t);)t.shiftLeft(1,!0),p++;for(this.remainder=this.clone(),this._a00=0,this._a16=0,this._a32=0,this._a48=0;p>=0;p--)t.shiftRight(1),this.remainder.lt(t)||(this.remainder.subtract(t),p>=48?this._a48|=1<=32?this._a32|=1<=16?this._a16|=1<>>16),this._a16=65535&e,e=(65535&~this._a32)+(e>>>16),this._a32=65535&e,this._a48=~this._a48+(e>>>16)&65535,this},s.prototype.equals=s.prototype.eq=function(e){return this._a48==e._a48&&this._a00==e._a00&&this._a32==e._a32&&this._a16==e._a16},s.prototype.greaterThan=s.prototype.gt=function(e){return this._a48>e._a48||!(this._a48e._a32||!(this._a32e._a16||!(this._a16e._a00))},s.prototype.lessThan=s.prototype.lt=function(e){return this._a48e._a48)&&(this._a32e._a32)&&(this._a16e._a16)&&this._a00=48?(this._a00=this._a48>>e-48,this._a16=0,this._a32=0,this._a48=0):e>=32?(e-=32,this._a00=65535&(this._a32>>e|this._a48<<16-e),this._a16=this._a48>>e&65535,this._a32=0,this._a48=0):e>=16?(e-=16,this._a00=65535&(this._a16>>e|this._a32<<16-e),this._a16=65535&(this._a32>>e|this._a48<<16-e),this._a32=this._a48>>e&65535,this._a48=0):(this._a00=65535&(this._a00>>e|this._a16<<16-e),this._a16=65535&(this._a16>>e|this._a32<<16-e),this._a32=65535&(this._a32>>e|this._a48<<16-e),this._a48=this._a48>>e&65535),this},s.prototype.shiftLeft=s.prototype.shiftl=function(e,t){return(e%=64)>=48?(this._a48=this._a00<=32?(e-=32,this._a48=this._a16<>16-e,this._a32=this._a00<=16?(e-=16,this._a48=this._a32<>16-e,this._a32=65535&(this._a16<>16-e),this._a16=this._a00<>16-e,this._a32=65535&(this._a32<>16-e),this._a16=65535&(this._a16<>16-e),this._a00=this._a00<=32){var t=this._a00;if(this._a00=this._a32,this._a32=t,t=this._a48,this._a48=this._a16,this._a16=t,32==e)return this;e-=32}var p=this._a48<<16|this._a32,r=this._a16<<16|this._a00,o=p<>>32-e,i=r<>>32-e;return this._a00=65535&i,this._a16=i>>>16,this._a32=65535&o,this._a48=o>>>16,this},s.prototype.rotateRight=s.prototype.rotr=function(e){if(0==(e%=64))return this;if(e>=32){var t=this._a00;if(this._a00=this._a32,this._a32=t,t=this._a48,this._a48=this._a16,this._a16=t,32==e)return this;e-=32}var p=this._a48<<16|this._a32,r=this._a16<<16|this._a00,o=p>>>e|r<<32-e,i=r>>>e|p<<32-e;return this._a00=65535&i,this._a16=i>>>16,this._a32=65535&o,this._a48=o>>>16,this},s.prototype.clone=function(){return new s(this._a00,this._a16,this._a32,this._a48)},void 0===(r=function(){return s}.apply(t,[]))||(e.exports=r)}()},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal),s=p(0).GnssSignalDep,n=(p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_RESULT",this.fields=t||this.parser.parse(e.payload),this});(n.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_RESULT",n.prototype.msg_type=47,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").floatle("cn0").floatle("cp").floatle("cf").nest("sid",{type:i.prototype.parser}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["cn0","writeFloatLE",4]),n.prototype.fieldSpec.push(["cp","writeFloatLE",4]),n.prototype.fieldSpec.push(["cf","writeFloatLE",4]),n.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_RESULT_DEP_C",a.prototype.msg_type=31,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").floatle("cn0").floatle("cp").floatle("cf").nest("sid",{type:s.prototype.parser}),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["cn0","writeFloatLE",4]),a.prototype.fieldSpec.push(["cp","writeFloatLE",4]),a.prototype.fieldSpec.push(["cf","writeFloatLE",4]),a.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_RESULT_DEP_B",l.prototype.msg_type=20,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").floatle("snr").floatle("cp").floatle("cf").nest("sid",{type:s.prototype.parser}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["snr","writeFloatLE",4]),l.prototype.fieldSpec.push(["cp","writeFloatLE",4]),l.prototype.fieldSpec.push(["cf","writeFloatLE",4]),l.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_RESULT_DEP_A",c.prototype.msg_type=21,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").floatle("snr").floatle("cp").floatle("cf").uint8("prn"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["snr","writeFloatLE",4]),c.prototype.fieldSpec.push(["cp","writeFloatLE",4]),c.prototype.fieldSpec.push(["cf","writeFloatLE",4]),c.prototype.fieldSpec.push(["prn","writeUInt8",1]);let u=function(e,t){return r.call(this,e),this.messageType="AcqSvProfile",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="AcqSvProfile",u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint8("job_type").uint8("status").uint16("cn0").uint8("int_time").nest("sid",{type:i.prototype.parser}).uint16("bin_width").uint32("timestamp").uint32("time_spent").int32("cf_min").int32("cf_max").int32("cf").uint32("cp"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["job_type","writeUInt8",1]),u.prototype.fieldSpec.push(["status","writeUInt8",1]),u.prototype.fieldSpec.push(["cn0","writeUInt16LE",2]),u.prototype.fieldSpec.push(["int_time","writeUInt8",1]),u.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),u.prototype.fieldSpec.push(["bin_width","writeUInt16LE",2]),u.prototype.fieldSpec.push(["timestamp","writeUInt32LE",4]),u.prototype.fieldSpec.push(["time_spent","writeUInt32LE",4]),u.prototype.fieldSpec.push(["cf_min","writeInt32LE",4]),u.prototype.fieldSpec.push(["cf_max","writeInt32LE",4]),u.prototype.fieldSpec.push(["cf","writeInt32LE",4]),u.prototype.fieldSpec.push(["cp","writeUInt32LE",4]);let y=function(e,t){return r.call(this,e),this.messageType="AcqSvProfileDep",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="AcqSvProfileDep",y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint8("job_type").uint8("status").uint16("cn0").uint8("int_time").nest("sid",{type:s.prototype.parser}).uint16("bin_width").uint32("timestamp").uint32("time_spent").int32("cf_min").int32("cf_max").int32("cf").uint32("cp"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["job_type","writeUInt8",1]),y.prototype.fieldSpec.push(["status","writeUInt8",1]),y.prototype.fieldSpec.push(["cn0","writeUInt16LE",2]),y.prototype.fieldSpec.push(["int_time","writeUInt8",1]),y.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),y.prototype.fieldSpec.push(["bin_width","writeUInt16LE",2]),y.prototype.fieldSpec.push(["timestamp","writeUInt32LE",4]),y.prototype.fieldSpec.push(["time_spent","writeUInt32LE",4]),y.prototype.fieldSpec.push(["cf_min","writeInt32LE",4]),y.prototype.fieldSpec.push(["cf_max","writeInt32LE",4]),y.prototype.fieldSpec.push(["cf","writeInt32LE",4]),y.prototype.fieldSpec.push(["cp","writeUInt32LE",4]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_SV_PROFILE",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_SV_PROFILE",h.prototype.msg_type=46,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").array("acq_sv_profile",{type:u.prototype.parser,readUntil:"eof"}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["acq_sv_profile","array",u.prototype.fieldSpec,function(){return this.fields.array.length},null]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_ACQ_SV_PROFILE_DEP",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_ACQ_SV_PROFILE_DEP",f.prototype.msg_type=30,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").array("acq_sv_profile",{type:y.prototype.parser,readUntil:"eof"}),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["acq_sv_profile","array",y.prototype.fieldSpec,function(){return this.fields.array.length},null]),e.exports={47:n,MsgAcqResult:n,31:a,MsgAcqResultDepC:a,20:l,MsgAcqResultDepB:l,21:c,MsgAcqResultDepA:c,AcqSvProfile:u,AcqSvProfileDep:y,46:h,MsgAcqSvProfile:h,30:f,MsgAcqSvProfileDep:f}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_REQ",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_BOOTLOADER_HANDSHAKE_REQ",i.prototype.msg_type=179,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little"),i.prototype.fieldSpec=[];let s=function(e,t){return r.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_RESP",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_BOOTLOADER_HANDSHAKE_RESP",s.prototype.msg_type=180,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint32("flags").string("version",{greedy:!0}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["flags","writeUInt32LE",4]),s.prototype.fieldSpec.push(["version","string",null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_BOOTLOADER_JUMP_TO_APP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_BOOTLOADER_JUMP_TO_APP",n.prototype.msg_type=177,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint8("jump"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["jump","writeUInt8",1]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_NAP_DEVICE_DNA_REQ",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_NAP_DEVICE_DNA_REQ",a.prototype.msg_type=222,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little"),a.prototype.fieldSpec=[];let l=function(e,t){return r.call(this,e),this.messageType="MSG_NAP_DEVICE_DNA_RESP",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_NAP_DEVICE_DNA_RESP",l.prototype.msg_type=221,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").array("dna",{length:8,type:"uint8"}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["dna","array","writeUInt8",function(){return 1},8]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_BOOTLOADER_HANDSHAKE_DEP_A",c.prototype.msg_type=176,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").array("handshake",{type:"uint8",readUntil:"eof"}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["handshake","array","writeUInt8",function(){return 1},null]),e.exports={179:i,MsgBootloaderHandshakeReq:i,180:s,MsgBootloaderHandshakeResp:s,177:n,MsgBootloaderJumpToApp:n,222:a,MsgNapDeviceDnaReq:a,221:l,MsgNapDeviceDnaResp:l,176:c,MsgBootloaderHandshakeDepA:c}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_EXT_EVENT",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_EXT_EVENT",i.prototype.msg_type=257,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tow").int32("ns_residual").uint8("flags").uint8("pin"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),i.prototype.fieldSpec.push(["flags","writeUInt8",1]),i.prototype.fieldSpec.push(["pin","writeUInt8",1]),e.exports={257:i,MsgExtEvent:i}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_READ_REQ",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_READ_REQ",i.prototype.msg_type=168,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint32("sequence").uint32("offset").uint8("chunk_size").string("filename",{greedy:!0}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),i.prototype.fieldSpec.push(["offset","writeUInt32LE",4]),i.prototype.fieldSpec.push(["chunk_size","writeUInt8",1]),i.prototype.fieldSpec.push(["filename","string",null]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_READ_RESP",s.prototype.msg_type=163,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint32("sequence").array("contents",{type:"uint8",readUntil:"eof"}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),s.prototype.fieldSpec.push(["contents","array","writeUInt8",function(){return 1},null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_READ_DIR_REQ",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_READ_DIR_REQ",n.prototype.msg_type=169,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint32("sequence").uint32("offset").string("dirname",{greedy:!0}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),n.prototype.fieldSpec.push(["offset","writeUInt32LE",4]),n.prototype.fieldSpec.push(["dirname","string",null]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_READ_DIR_RESP",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_READ_DIR_RESP",a.prototype.msg_type=170,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint32("sequence").array("contents",{type:"uint8",readUntil:"eof"}),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),a.prototype.fieldSpec.push(["contents","array","writeUInt8",function(){return 1},null]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_REMOVE",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_REMOVE",l.prototype.msg_type=172,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").string("filename",{greedy:!0}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["filename","string",null]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_WRITE_REQ",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_WRITE_REQ",c.prototype.msg_type=173,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint32("sequence").uint32("offset").string("filename",{greedy:!0}).array("data",{type:"uint8",readUntil:"eof"}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),c.prototype.fieldSpec.push(["offset","writeUInt32LE",4]),c.prototype.fieldSpec.push(["filename","string",null]),c.prototype.fieldSpec.push(["data","array","writeUInt8",function(){return 1},null]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_WRITE_RESP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_WRITE_RESP",u.prototype.msg_type=171,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint32("sequence"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_CONFIG_REQ",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_CONFIG_REQ",y.prototype.msg_type=4097,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint32("sequence"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_FILEIO_CONFIG_RESP",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_FILEIO_CONFIG_RESP",h.prototype.msg_type=4098,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint32("sequence").uint32("window_size").uint32("batch_size").uint32("fileio_version"),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),h.prototype.fieldSpec.push(["window_size","writeUInt32LE",4]),h.prototype.fieldSpec.push(["batch_size","writeUInt32LE",4]),h.prototype.fieldSpec.push(["fileio_version","writeUInt32LE",4]),e.exports={168:i,MsgFileioReadReq:i,163:s,MsgFileioReadResp:s,169:n,MsgFileioReadDirReq:n,170:a,MsgFileioReadDirResp:a,172:l,MsgFileioRemove:l,173:c,MsgFileioWriteReq:c,171:u,MsgFileioWriteResp:u,4097:y,MsgFileioConfigReq:y,4098:h,MsgFileioConfigResp:h}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_FLASH_PROGRAM",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_FLASH_PROGRAM",i.prototype.msg_type=230,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint8("target").array("addr_start",{length:3,type:"uint8"}).uint8("addr_len").array("data",{type:"uint8",length:"addr_len"}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["target","writeUInt8",1]),i.prototype.fieldSpec.push(["addr_start","array","writeUInt8",function(){return 1},3]),i.prototype.fieldSpec.push(["addr_len","writeUInt8",1]),i.prototype.fieldSpec.push(["data","array","writeUInt8",function(){return 1},"addr_len"]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_FLASH_DONE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_FLASH_DONE",s.prototype.msg_type=224,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("response"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["response","writeUInt8",1]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_FLASH_READ_REQ",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_FLASH_READ_REQ",n.prototype.msg_type=231,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint8("target").array("addr_start",{length:3,type:"uint8"}).uint8("addr_len"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["target","writeUInt8",1]),n.prototype.fieldSpec.push(["addr_start","array","writeUInt8",function(){return 1},3]),n.prototype.fieldSpec.push(["addr_len","writeUInt8",1]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_FLASH_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_FLASH_READ_RESP",a.prototype.msg_type=225,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint8("target").array("addr_start",{length:3,type:"uint8"}).uint8("addr_len"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["target","writeUInt8",1]),a.prototype.fieldSpec.push(["addr_start","array","writeUInt8",function(){return 1},3]),a.prototype.fieldSpec.push(["addr_len","writeUInt8",1]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_FLASH_ERASE",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_FLASH_ERASE",l.prototype.msg_type=226,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint8("target").uint32("sector_num"),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["target","writeUInt8",1]),l.prototype.fieldSpec.push(["sector_num","writeUInt32LE",4]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_STM_FLASH_LOCK_SECTOR",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_STM_FLASH_LOCK_SECTOR",c.prototype.msg_type=227,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint32("sector"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["sector","writeUInt32LE",4]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_STM_FLASH_UNLOCK_SECTOR",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_STM_FLASH_UNLOCK_SECTOR",u.prototype.msg_type=228,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint32("sector"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["sector","writeUInt32LE",4]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_STM_UNIQUE_ID_REQ",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_STM_UNIQUE_ID_REQ",y.prototype.msg_type=232,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little"),y.prototype.fieldSpec=[];let h=function(e,t){return r.call(this,e),this.messageType="MSG_STM_UNIQUE_ID_RESP",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_STM_UNIQUE_ID_RESP",h.prototype.msg_type=229,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").array("stm_id",{length:12,type:"uint8"}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["stm_id","array","writeUInt8",function(){return 1},12]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_M25_FLASH_WRITE_STATUS",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_M25_FLASH_WRITE_STATUS",f.prototype.msg_type=243,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").array("status",{length:1,type:"uint8"}),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["status","array","writeUInt8",function(){return 1},1]),e.exports={230:i,MsgFlashProgram:i,224:s,MsgFlashDone:s,231:n,MsgFlashReadReq:n,225:a,MsgFlashReadResp:a,226:l,MsgFlashErase:l,227:c,MsgStmFlashLockSector:c,228:u,MsgStmFlashUnlockSector:u,232:y,MsgStmUniqueIdReq:y,229:h,MsgStmUniqueIdResp:h,243:f,MsgM25FlashWriteStatus:f}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_IMU_RAW",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_IMU_RAW",i.prototype.msg_type=2304,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint32("tow").uint8("tow_f").int16("acc_x").int16("acc_y").int16("acc_z").int16("gyr_x").int16("gyr_y").int16("gyr_z"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["tow_f","writeUInt8",1]),i.prototype.fieldSpec.push(["acc_x","writeInt16LE",2]),i.prototype.fieldSpec.push(["acc_y","writeInt16LE",2]),i.prototype.fieldSpec.push(["acc_z","writeInt16LE",2]),i.prototype.fieldSpec.push(["gyr_x","writeInt16LE",2]),i.prototype.fieldSpec.push(["gyr_y","writeInt16LE",2]),i.prototype.fieldSpec.push(["gyr_z","writeInt16LE",2]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_IMU_AUX",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_IMU_AUX",s.prototype.msg_type=2305,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("imu_type").int16("temp").uint8("imu_conf"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["imu_type","writeUInt8",1]),s.prototype.fieldSpec.push(["temp","writeInt16LE",2]),s.prototype.fieldSpec.push(["imu_conf","writeUInt8",1]),e.exports={2304:i,MsgImuRaw:i,2305:s,MsgImuAux:s}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal,p(0).GnssSignalDep,p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec),s=p(0).SvId,n=function(e,t){return r.call(this,e),this.messageType="IntegritySSRHeader",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="IntegritySSRHeader",n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").nest("obs_time",{type:i.prototype.parser}).uint8("num_msgs").uint8("seq_num").uint8("ssr_sol_id").uint16("tile_set_id").uint16("tile_id").uint8("chain_id"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["obs_time",i.prototype.fieldSpec]),n.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),n.prototype.fieldSpec.push(["seq_num","writeUInt8",1]),n.prototype.fieldSpec.push(["ssr_sol_id","writeUInt8",1]),n.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),n.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),n.prototype.fieldSpec.push(["chain_id","writeUInt8",1]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_HIGH_LEVEL",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_HIGH_LEVEL",a.prototype.msg_type=3001,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").nest("obs_time",{type:i.prototype.parser}).nest("corr_time",{type:i.prototype.parser}).uint8("ssr_sol_id").uint16("tile_set_id").uint16("tile_id").uint8("chain_id").uint8("use_gps_sat").uint8("use_gal_sat").uint8("use_bds_sat").array("reserved",{length:6,type:"uint8"}).uint8("use_tropo_grid_points").uint8("use_iono_grid_points").uint8("use_iono_tile_sat_los").uint8("use_iono_grid_point_sat_los"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["obs_time",i.prototype.fieldSpec]),a.prototype.fieldSpec.push(["corr_time",i.prototype.fieldSpec]),a.prototype.fieldSpec.push(["ssr_sol_id","writeUInt8",1]),a.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),a.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),a.prototype.fieldSpec.push(["chain_id","writeUInt8",1]),a.prototype.fieldSpec.push(["use_gps_sat","writeUInt8",1]),a.prototype.fieldSpec.push(["use_gal_sat","writeUInt8",1]),a.prototype.fieldSpec.push(["use_bds_sat","writeUInt8",1]),a.prototype.fieldSpec.push(["reserved","array","writeUInt8",function(){return 1},6]),a.prototype.fieldSpec.push(["use_tropo_grid_points","writeUInt8",1]),a.prototype.fieldSpec.push(["use_iono_grid_points","writeUInt8",1]),a.prototype.fieldSpec.push(["use_iono_tile_sat_los","writeUInt8",1]),a.prototype.fieldSpec.push(["use_iono_grid_point_sat_los","writeUInt8",1]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_SATELLITES",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_SATELLITES",l.prototype.msg_type=3005,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").nest("obs_time",{type:i.prototype.parser}).uint8("num_msgs").uint8("seq_num").uint8("ssr_sol_id").uint8("chain_id").uint8("const_id").uint8("n_faulty_sats").array("faulty_sats",{type:"uint8",length:"n_faulty_sats"}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["obs_time",i.prototype.fieldSpec]),l.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),l.prototype.fieldSpec.push(["seq_num","writeUInt8",1]),l.prototype.fieldSpec.push(["ssr_sol_id","writeUInt8",1]),l.prototype.fieldSpec.push(["chain_id","writeUInt8",1]),l.prototype.fieldSpec.push(["const_id","writeUInt8",1]),l.prototype.fieldSpec.push(["n_faulty_sats","writeUInt8",1]),l.prototype.fieldSpec.push(["faulty_sats","array","writeUInt8",function(){return 1},"n_faulty_sats"]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_TROPO_GRID_POINTS",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_TROPO_GRID_POINTS",c.prototype.msg_type=3011,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").nest("header",{type:n.prototype.parser}).uint8("n_faulty_points").array("faulty_points",{type:"uint16le",length:"n_faulty_points"}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["header",n.prototype.fieldSpec]),c.prototype.fieldSpec.push(["n_faulty_points","writeUInt8",1]),c.prototype.fieldSpec.push(["faulty_points","array","writeUInt16LE",function(){return 2},"n_faulty_points"]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_IONO_GRID_POINTS",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_IONO_GRID_POINTS",u.prototype.msg_type=3015,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").nest("header",{type:n.prototype.parser}).uint8("n_faulty_points").array("faulty_points",{type:"uint16le",length:"n_faulty_points"}),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["header",n.prototype.fieldSpec]),u.prototype.fieldSpec.push(["n_faulty_points","writeUInt8",1]),u.prototype.fieldSpec.push(["faulty_points","array","writeUInt16LE",function(){return 2},"n_faulty_points"]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_IONO_TILE_SAT_LOS",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_IONO_TILE_SAT_LOS",y.prototype.msg_type=3021,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").nest("header",{type:n.prototype.parser}).uint8("n_faulty_los").array("faulty_los",{type:s.prototype.parser,length:"n_faulty_los"}),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["header",n.prototype.fieldSpec]),y.prototype.fieldSpec.push(["n_faulty_los","writeUInt8",1]),y.prototype.fieldSpec.push(["faulty_los","array",s.prototype.fieldSpec,function(){return this.fields.array.length},"n_faulty_los"]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_FLAG_IONO_GRID_POINT_SAT_LOS",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_SSR_FLAG_IONO_GRID_POINT_SAT_LOS",h.prototype.msg_type=3025,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").nest("header",{type:n.prototype.parser}).uint16("grid_point_id").uint8("n_faulty_los").array("faulty_los",{type:s.prototype.parser,length:"n_faulty_los"}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["header",n.prototype.fieldSpec]),h.prototype.fieldSpec.push(["grid_point_id","writeUInt16LE",2]),h.prototype.fieldSpec.push(["n_faulty_los","writeUInt8",1]),h.prototype.fieldSpec.push(["faulty_los","array",s.prototype.fieldSpec,function(){return this.fields.array.length},"n_faulty_los"]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_ACKNOWLEDGE",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_ACKNOWLEDGE",f.prototype.msg_type=3026,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint8("request_id").uint32("area_id").uint8("response_code").uint16("correction_mask_on_demand").uint16("correction_mask_stream").uint8("solution_id"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["request_id","writeUInt8",1]),f.prototype.fieldSpec.push(["area_id","writeUInt32LE",4]),f.prototype.fieldSpec.push(["response_code","writeUInt8",1]),f.prototype.fieldSpec.push(["correction_mask_on_demand","writeUInt16LE",2]),f.prototype.fieldSpec.push(["correction_mask_stream","writeUInt16LE",2]),f.prototype.fieldSpec.push(["solution_id","writeUInt8",1]),e.exports={IntegritySSRHeader:n,3001:a,MsgSsrFlagHighLevel:a,3005:l,MsgSsrFlagSatellites:l,3011:c,MsgSsrFlagTropoGridPoints:c,3015:u,MsgSsrFlagIonoGridPoints:u,3021:y,MsgSsrFlagIonoTileSatLos:y,3025:h,MsgSsrFlagIonoGridPointSatLos:h,3026:f,MsgAcknowledge:f}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_CPU_STATE_DEP_A",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_CPU_STATE_DEP_A",i.prototype.msg_type=32512,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint8("pcpu").string("tname",{length:15}).string("cmdline",{greedy:!0}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["index","writeUInt8",1]),i.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),i.prototype.fieldSpec.push(["pcpu","writeUInt8",1]),i.prototype.fieldSpec.push(["tname","string",15]),i.prototype.fieldSpec.push(["cmdline","string",null]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_MEM_STATE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_MEM_STATE_DEP_A",s.prototype.msg_type=32513,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint8("pmem").string("tname",{length:15}).string("cmdline",{greedy:!0}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["index","writeUInt8",1]),s.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),s.prototype.fieldSpec.push(["pmem","writeUInt8",1]),s.prototype.fieldSpec.push(["tname","string",15]),s.prototype.fieldSpec.push(["cmdline","string",null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_SYS_STATE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_SYS_STATE_DEP_A",n.prototype.msg_type=32514,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint16("mem_total").uint8("pcpu").uint8("pmem").uint16("procs_starting").uint16("procs_stopping").uint16("pid_count"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["mem_total","writeUInt16LE",2]),n.prototype.fieldSpec.push(["pcpu","writeUInt8",1]),n.prototype.fieldSpec.push(["pmem","writeUInt8",1]),n.prototype.fieldSpec.push(["procs_starting","writeUInt16LE",2]),n.prototype.fieldSpec.push(["procs_stopping","writeUInt16LE",2]),n.prototype.fieldSpec.push(["pid_count","writeUInt16LE",2]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_PROCESS_SOCKET_COUNTS",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_PROCESS_SOCKET_COUNTS",a.prototype.msg_type=32515,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint16("socket_count").uint16("socket_types").uint16("socket_states").string("cmdline",{greedy:!0}),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["index","writeUInt8",1]),a.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),a.prototype.fieldSpec.push(["socket_count","writeUInt16LE",2]),a.prototype.fieldSpec.push(["socket_types","writeUInt16LE",2]),a.prototype.fieldSpec.push(["socket_states","writeUInt16LE",2]),a.prototype.fieldSpec.push(["cmdline","string",null]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_PROCESS_SOCKET_QUEUES",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_PROCESS_SOCKET_QUEUES",l.prototype.msg_type=32516,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint16("recv_queued").uint16("send_queued").uint16("socket_types").uint16("socket_states").string("address_of_largest",{length:64}).string("cmdline",{greedy:!0}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["index","writeUInt8",1]),l.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),l.prototype.fieldSpec.push(["recv_queued","writeUInt16LE",2]),l.prototype.fieldSpec.push(["send_queued","writeUInt16LE",2]),l.prototype.fieldSpec.push(["socket_types","writeUInt16LE",2]),l.prototype.fieldSpec.push(["socket_states","writeUInt16LE",2]),l.prototype.fieldSpec.push(["address_of_largest","string",64]),l.prototype.fieldSpec.push(["cmdline","string",null]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_SOCKET_USAGE",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_SOCKET_USAGE",c.prototype.msg_type=32517,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint32("avg_queue_depth").uint32("max_queue_depth").array("socket_state_counts",{length:16,type:"uint16le"}).array("socket_type_counts",{length:16,type:"uint16le"}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["avg_queue_depth","writeUInt32LE",4]),c.prototype.fieldSpec.push(["max_queue_depth","writeUInt32LE",4]),c.prototype.fieldSpec.push(["socket_state_counts","array","writeUInt16LE",function(){return 2},16]),c.prototype.fieldSpec.push(["socket_type_counts","array","writeUInt16LE",function(){return 2},16]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_PROCESS_FD_COUNT",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_PROCESS_FD_COUNT",u.prototype.msg_type=32518,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint16("fd_count").string("cmdline",{greedy:!0}),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["index","writeUInt8",1]),u.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),u.prototype.fieldSpec.push(["fd_count","writeUInt16LE",2]),u.prototype.fieldSpec.push(["cmdline","string",null]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_PROCESS_FD_SUMMARY",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_PROCESS_FD_SUMMARY",y.prototype.msg_type=32519,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint32("sys_fd_count").string("most_opened",{greedy:!0}),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["sys_fd_count","writeUInt32LE",4]),y.prototype.fieldSpec.push(["most_opened","string",null]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_CPU_STATE",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_CPU_STATE",h.prototype.msg_type=32520,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint8("pcpu").uint32("time").uint8("flags").string("tname",{length:15}).string("cmdline",{greedy:!0}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["index","writeUInt8",1]),h.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),h.prototype.fieldSpec.push(["pcpu","writeUInt8",1]),h.prototype.fieldSpec.push(["time","writeUInt32LE",4]),h.prototype.fieldSpec.push(["flags","writeUInt8",1]),h.prototype.fieldSpec.push(["tname","string",15]),h.prototype.fieldSpec.push(["cmdline","string",null]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_MEM_STATE",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_MEM_STATE",f.prototype.msg_type=32521,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint8("index").uint16("pid").uint8("pmem").uint32("time").uint8("flags").string("tname",{length:15}).string("cmdline",{greedy:!0}),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["index","writeUInt8",1]),f.prototype.fieldSpec.push(["pid","writeUInt16LE",2]),f.prototype.fieldSpec.push(["pmem","writeUInt8",1]),f.prototype.fieldSpec.push(["time","writeUInt32LE",4]),f.prototype.fieldSpec.push(["flags","writeUInt8",1]),f.prototype.fieldSpec.push(["tname","string",15]),f.prototype.fieldSpec.push(["cmdline","string",null]);let d=function(e,t){return r.call(this,e),this.messageType="MSG_LINUX_SYS_STATE",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_LINUX_SYS_STATE",d.prototype.msg_type=32522,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").uint16("mem_total").uint8("pcpu").uint8("pmem").uint16("procs_starting").uint16("procs_stopping").uint16("pid_count").uint32("time").uint8("flags"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["mem_total","writeUInt16LE",2]),d.prototype.fieldSpec.push(["pcpu","writeUInt8",1]),d.prototype.fieldSpec.push(["pmem","writeUInt8",1]),d.prototype.fieldSpec.push(["procs_starting","writeUInt16LE",2]),d.prototype.fieldSpec.push(["procs_stopping","writeUInt16LE",2]),d.prototype.fieldSpec.push(["pid_count","writeUInt16LE",2]),d.prototype.fieldSpec.push(["time","writeUInt32LE",4]),d.prototype.fieldSpec.push(["flags","writeUInt8",1]),e.exports={32512:i,MsgLinuxCpuStateDepA:i,32513:s,MsgLinuxMemStateDepA:s,32514:n,MsgLinuxSysStateDepA:n,32515:a,MsgLinuxProcessSocketCounts:a,32516:l,MsgLinuxProcessSocketQueues:l,32517:c,MsgLinuxSocketUsage:c,32518:u,MsgLinuxProcessFdCount:u,32519:y,MsgLinuxProcessFdSummary:y,32520:h,MsgLinuxCpuState:h,32521:f,MsgLinuxMemState:f,32522:d,MsgLinuxSysState:d}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_LOG",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_LOG",i.prototype.msg_type=1025,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint8("level").string("text",{greedy:!0}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["level","writeUInt8",1]),i.prototype.fieldSpec.push(["text","string",null]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_FWD",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_FWD",s.prototype.msg_type=1026,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("source").uint8("protocol").array("fwd_payload",{type:"uint8",readUntil:"eof"}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["source","writeUInt8",1]),s.prototype.fieldSpec.push(["protocol","writeUInt8",1]),s.prototype.fieldSpec.push(["fwd_payload","array","writeUInt8",function(){return 1},null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_PRINT_DEP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_PRINT_DEP",n.prototype.msg_type=16,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").string("text",{greedy:!0}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["text","string",null]),e.exports={1025:i,MsgLog:i,1026:s,MsgFwd:s,16:n,MsgPrintDep:n}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_MAG_RAW",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_MAG_RAW",i.prototype.msg_type=2306,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint32("tow").uint8("tow_f").int16("mag_x").int16("mag_y").int16("mag_z"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["tow_f","writeUInt8",1]),i.prototype.fieldSpec.push(["mag_x","writeInt16LE",2]),i.prototype.fieldSpec.push(["mag_y","writeInt16LE",2]),i.prototype.fieldSpec.push(["mag_z","writeInt16LE",2]),e.exports={2306:i,MsgMagRaw:i}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_GPS_TIME",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_GPS_TIME",i.prototype.msg_type=258,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tow").int32("ns_residual").uint8("flags"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),i.prototype.fieldSpec.push(["flags","writeUInt8",1]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_GPS_TIME_GNSS",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_GPS_TIME_GNSS",s.prototype.msg_type=260,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tow").int32("ns_residual").uint8("flags"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),s.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),s.prototype.fieldSpec.push(["flags","writeUInt8",1]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_UTC_TIME",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_UTC_TIME",n.prototype.msg_type=259,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint8("flags").uint32("tow").uint16("year").uint8("month").uint8("day").uint8("hours").uint8("minutes").uint8("seconds").uint32("ns"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["flags","writeUInt8",1]),n.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),n.prototype.fieldSpec.push(["year","writeUInt16LE",2]),n.prototype.fieldSpec.push(["month","writeUInt8",1]),n.prototype.fieldSpec.push(["day","writeUInt8",1]),n.prototype.fieldSpec.push(["hours","writeUInt8",1]),n.prototype.fieldSpec.push(["minutes","writeUInt8",1]),n.prototype.fieldSpec.push(["seconds","writeUInt8",1]),n.prototype.fieldSpec.push(["ns","writeUInt32LE",4]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_UTC_TIME_GNSS",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_UTC_TIME_GNSS",a.prototype.msg_type=261,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint8("flags").uint32("tow").uint16("year").uint8("month").uint8("day").uint8("hours").uint8("minutes").uint8("seconds").uint32("ns"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["flags","writeUInt8",1]),a.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),a.prototype.fieldSpec.push(["year","writeUInt16LE",2]),a.prototype.fieldSpec.push(["month","writeUInt8",1]),a.prototype.fieldSpec.push(["day","writeUInt8",1]),a.prototype.fieldSpec.push(["hours","writeUInt8",1]),a.prototype.fieldSpec.push(["minutes","writeUInt8",1]),a.prototype.fieldSpec.push(["seconds","writeUInt8",1]),a.prototype.fieldSpec.push(["ns","writeUInt32LE",4]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_DOPS",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_DOPS",l.prototype.msg_type=520,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint32("tow").uint16("gdop").uint16("pdop").uint16("tdop").uint16("hdop").uint16("vdop").uint8("flags"),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),l.prototype.fieldSpec.push(["gdop","writeUInt16LE",2]),l.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),l.prototype.fieldSpec.push(["tdop","writeUInt16LE",2]),l.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),l.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]),l.prototype.fieldSpec.push(["flags","writeUInt8",1]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_POS_ECEF",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_POS_ECEF",c.prototype.msg_type=521,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),c.prototype.fieldSpec.push(["x","writeDoubleLE",8]),c.prototype.fieldSpec.push(["y","writeDoubleLE",8]),c.prototype.fieldSpec.push(["z","writeDoubleLE",8]),c.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),c.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),c.prototype.fieldSpec.push(["flags","writeUInt8",1]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_POS_ECEF_COV",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_POS_ECEF_COV",u.prototype.msg_type=532,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").floatle("cov_x_x").floatle("cov_x_y").floatle("cov_x_z").floatle("cov_y_y").floatle("cov_y_z").floatle("cov_z_z").uint8("n_sats").uint8("flags"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),u.prototype.fieldSpec.push(["x","writeDoubleLE",8]),u.prototype.fieldSpec.push(["y","writeDoubleLE",8]),u.prototype.fieldSpec.push(["z","writeDoubleLE",8]),u.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),u.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),u.prototype.fieldSpec.push(["flags","writeUInt8",1]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH",y.prototype.msg_type=522,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),y.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),y.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),y.prototype.fieldSpec.push(["height","writeDoubleLE",8]),y.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),y.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),y.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),y.prototype.fieldSpec.push(["flags","writeUInt8",1]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH_COV",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH_COV",h.prototype.msg_type=529,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").floatle("cov_n_n").floatle("cov_n_e").floatle("cov_n_d").floatle("cov_e_e").floatle("cov_e_d").floatle("cov_d_d").uint8("n_sats").uint8("flags"),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),h.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),h.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),h.prototype.fieldSpec.push(["height","writeDoubleLE",8]),h.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),h.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),h.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),h.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),h.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),h.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),h.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),h.prototype.fieldSpec.push(["flags","writeUInt8",1]);let f=function(e,t){return r.call(this,e),this.messageType="EstimatedHorizontalErrorEllipse",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="EstimatedHorizontalErrorEllipse",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").floatle("semi_major").floatle("semi_minor").floatle("orientation"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["semi_major","writeFloatLE",4]),f.prototype.fieldSpec.push(["semi_minor","writeFloatLE",4]),f.prototype.fieldSpec.push(["orientation","writeFloatLE",4]);let d=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH_ACC",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH_ACC",d.prototype.msg_type=536,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").doublele("orthometric_height").floatle("h_accuracy").floatle("v_accuracy").floatle("ct_accuracy").floatle("at_accuracy").nest("h_ellipse",{type:f.prototype.parser}).uint8("confidence_and_geoid").uint8("n_sats").uint8("flags"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),d.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),d.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),d.prototype.fieldSpec.push(["height","writeDoubleLE",8]),d.prototype.fieldSpec.push(["orthometric_height","writeDoubleLE",8]),d.prototype.fieldSpec.push(["h_accuracy","writeFloatLE",4]),d.prototype.fieldSpec.push(["v_accuracy","writeFloatLE",4]),d.prototype.fieldSpec.push(["ct_accuracy","writeFloatLE",4]),d.prototype.fieldSpec.push(["at_accuracy","writeFloatLE",4]),d.prototype.fieldSpec.push(["h_ellipse",f.prototype.fieldSpec]),d.prototype.fieldSpec.push(["confidence_and_geoid","writeUInt8",1]),d.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),d.prototype.fieldSpec.push(["flags","writeUInt8",1]);let _=function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_ECEF",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_ECEF",_.prototype.msg_type=523,_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),_.prototype.fieldSpec.push(["x","writeInt32LE",4]),_.prototype.fieldSpec.push(["y","writeInt32LE",4]),_.prototype.fieldSpec.push(["z","writeInt32LE",4]),_.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),_.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),_.prototype.fieldSpec.push(["flags","writeUInt8",1]);let S=function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_NED",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_NED",S.prototype.msg_type=524,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),S.prototype.fieldSpec.push(["n","writeInt32LE",4]),S.prototype.fieldSpec.push(["e","writeInt32LE",4]),S.prototype.fieldSpec.push(["d","writeInt32LE",4]),S.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),S.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),S.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),S.prototype.fieldSpec.push(["flags","writeUInt8",1]);let g=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_ECEF",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="MSG_VEL_ECEF",g.prototype.msg_type=525,g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),g.prototype.fieldSpec.push(["x","writeInt32LE",4]),g.prototype.fieldSpec.push(["y","writeInt32LE",4]),g.prototype.fieldSpec.push(["z","writeInt32LE",4]),g.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),g.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),g.prototype.fieldSpec.push(["flags","writeUInt8",1]);let w=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_ECEF_COV",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="MSG_VEL_ECEF_COV",w.prototype.msg_type=533,w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").floatle("cov_x_x").floatle("cov_x_y").floatle("cov_x_z").floatle("cov_y_y").floatle("cov_y_z").floatle("cov_z_z").uint8("n_sats").uint8("flags"),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),w.prototype.fieldSpec.push(["x","writeInt32LE",4]),w.prototype.fieldSpec.push(["y","writeInt32LE",4]),w.prototype.fieldSpec.push(["z","writeInt32LE",4]),w.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),w.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),w.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),w.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),w.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),w.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),w.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),w.prototype.fieldSpec.push(["flags","writeUInt8",1]);let E=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_NED",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(r.prototype)).messageType="MSG_VEL_NED",E.prototype.msg_type=526,E.prototype.constructor=E,E.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),E.prototype.fieldSpec.push(["n","writeInt32LE",4]),E.prototype.fieldSpec.push(["e","writeInt32LE",4]),E.prototype.fieldSpec.push(["d","writeInt32LE",4]),E.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),E.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),E.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),E.prototype.fieldSpec.push(["flags","writeUInt8",1]);let m=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_NED_COV",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(r.prototype)).messageType="MSG_VEL_NED_COV",m.prototype.msg_type=530,m.prototype.constructor=m,m.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").floatle("cov_n_n").floatle("cov_n_e").floatle("cov_n_d").floatle("cov_e_e").floatle("cov_e_d").floatle("cov_d_d").uint8("n_sats").uint8("flags"),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),m.prototype.fieldSpec.push(["n","writeInt32LE",4]),m.prototype.fieldSpec.push(["e","writeInt32LE",4]),m.prototype.fieldSpec.push(["d","writeInt32LE",4]),m.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),m.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),m.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),m.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),m.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),m.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),m.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),m.prototype.fieldSpec.push(["flags","writeUInt8",1]);let b=function(e,t){return r.call(this,e),this.messageType="MSG_POS_ECEF_GNSS",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(r.prototype)).messageType="MSG_POS_ECEF_GNSS",b.prototype.msg_type=553,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),b.prototype.fieldSpec.push(["x","writeDoubleLE",8]),b.prototype.fieldSpec.push(["y","writeDoubleLE",8]),b.prototype.fieldSpec.push(["z","writeDoubleLE",8]),b.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),b.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),b.prototype.fieldSpec.push(["flags","writeUInt8",1]);let I=function(e,t){return r.call(this,e),this.messageType="MSG_POS_ECEF_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(r.prototype)).messageType="MSG_POS_ECEF_COV_GNSS",I.prototype.msg_type=564,I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").floatle("cov_x_x").floatle("cov_x_y").floatle("cov_x_z").floatle("cov_y_y").floatle("cov_y_z").floatle("cov_z_z").uint8("n_sats").uint8("flags"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),I.prototype.fieldSpec.push(["x","writeDoubleLE",8]),I.prototype.fieldSpec.push(["y","writeDoubleLE",8]),I.prototype.fieldSpec.push(["z","writeDoubleLE",8]),I.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),I.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),I.prototype.fieldSpec.push(["flags","writeUInt8",1]);let L=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH_GNSS",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH_GNSS",L.prototype.msg_type=554,L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),L.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),L.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),L.prototype.fieldSpec.push(["height","writeDoubleLE",8]),L.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),L.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),L.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),L.prototype.fieldSpec.push(["flags","writeUInt8",1]);let T=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH_COV_GNSS",T.prototype.msg_type=561,T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").floatle("cov_n_n").floatle("cov_n_e").floatle("cov_n_d").floatle("cov_e_e").floatle("cov_e_d").floatle("cov_d_d").uint8("n_sats").uint8("flags"),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),T.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),T.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),T.prototype.fieldSpec.push(["height","writeDoubleLE",8]),T.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),T.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),T.prototype.fieldSpec.push(["flags","writeUInt8",1]);let v=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_ECEF_GNSS",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(r.prototype)).messageType="MSG_VEL_ECEF_GNSS",v.prototype.msg_type=557,v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),v.prototype.fieldSpec.push(["x","writeInt32LE",4]),v.prototype.fieldSpec.push(["y","writeInt32LE",4]),v.prototype.fieldSpec.push(["z","writeInt32LE",4]),v.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),v.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),v.prototype.fieldSpec.push(["flags","writeUInt8",1]);let U=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_ECEF_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(r.prototype)).messageType="MSG_VEL_ECEF_COV_GNSS",U.prototype.msg_type=565,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").floatle("cov_x_x").floatle("cov_x_y").floatle("cov_x_z").floatle("cov_y_y").floatle("cov_y_z").floatle("cov_z_z").uint8("n_sats").uint8("flags"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),U.prototype.fieldSpec.push(["x","writeInt32LE",4]),U.prototype.fieldSpec.push(["y","writeInt32LE",4]),U.prototype.fieldSpec.push(["z","writeInt32LE",4]),U.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),U.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),U.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),U.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),U.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),U.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),U.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),U.prototype.fieldSpec.push(["flags","writeUInt8",1]);let M=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_NED_GNSS",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(r.prototype)).messageType="MSG_VEL_NED_GNSS",M.prototype.msg_type=558,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),M.prototype.fieldSpec.push(["n","writeInt32LE",4]),M.prototype.fieldSpec.push(["e","writeInt32LE",4]),M.prototype.fieldSpec.push(["d","writeInt32LE",4]),M.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),M.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),M.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),M.prototype.fieldSpec.push(["flags","writeUInt8",1]);let D=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_NED_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(r.prototype)).messageType="MSG_VEL_NED_COV_GNSS",D.prototype.msg_type=562,D.prototype.constructor=D,D.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").floatle("cov_n_n").floatle("cov_n_e").floatle("cov_n_d").floatle("cov_e_e").floatle("cov_e_d").floatle("cov_d_d").uint8("n_sats").uint8("flags"),D.prototype.fieldSpec=[],D.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),D.prototype.fieldSpec.push(["n","writeInt32LE",4]),D.prototype.fieldSpec.push(["e","writeInt32LE",4]),D.prototype.fieldSpec.push(["d","writeInt32LE",4]),D.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),D.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),D.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),D.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),D.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),D.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),D.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),D.prototype.fieldSpec.push(["flags","writeUInt8",1]);let O=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_BODY",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(r.prototype)).messageType="MSG_VEL_BODY",O.prototype.msg_type=531,O.prototype.constructor=O,O.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").floatle("cov_x_x").floatle("cov_x_y").floatle("cov_x_z").floatle("cov_y_y").floatle("cov_y_z").floatle("cov_z_z").uint8("n_sats").uint8("flags"),O.prototype.fieldSpec=[],O.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),O.prototype.fieldSpec.push(["x","writeInt32LE",4]),O.prototype.fieldSpec.push(["y","writeInt32LE",4]),O.prototype.fieldSpec.push(["z","writeInt32LE",4]),O.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),O.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),O.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),O.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),O.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),O.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),O.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),O.prototype.fieldSpec.push(["flags","writeUInt8",1]);let G=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_COG",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(r.prototype)).messageType="MSG_VEL_COG",G.prototype.msg_type=540,G.prototype.constructor=G,G.prototype.parser=(new o).endianess("little").uint32("tow").uint32("cog").uint32("sog").int32("v_up").uint32("cog_accuracy").uint32("sog_accuracy").uint32("v_up_accuracy").uint16("flags"),G.prototype.fieldSpec=[],G.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),G.prototype.fieldSpec.push(["cog","writeUInt32LE",4]),G.prototype.fieldSpec.push(["sog","writeUInt32LE",4]),G.prototype.fieldSpec.push(["v_up","writeInt32LE",4]),G.prototype.fieldSpec.push(["cog_accuracy","writeUInt32LE",4]),G.prototype.fieldSpec.push(["sog_accuracy","writeUInt32LE",4]),G.prototype.fieldSpec.push(["v_up_accuracy","writeUInt32LE",4]),G.prototype.fieldSpec.push(["flags","writeUInt16LE",2]);let A=function(e,t){return r.call(this,e),this.messageType="MSG_AGE_CORRECTIONS",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(r.prototype)).messageType="MSG_AGE_CORRECTIONS",A.prototype.msg_type=528,A.prototype.constructor=A,A.prototype.parser=(new o).endianess("little").uint32("tow").uint16("age"),A.prototype.fieldSpec=[],A.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),A.prototype.fieldSpec.push(["age","writeUInt16LE",2]);let C=function(e,t){return r.call(this,e),this.messageType="MSG_GPS_TIME_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(r.prototype)).messageType="MSG_GPS_TIME_DEP_A",C.prototype.msg_type=256,C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tow").int32("ns_residual").uint8("flags"),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),C.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),C.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),C.prototype.fieldSpec.push(["flags","writeUInt8",1]);let R=function(e,t){return r.call(this,e),this.messageType="MSG_DOPS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(r.prototype)).messageType="MSG_DOPS_DEP_A",R.prototype.msg_type=518,R.prototype.constructor=R,R.prototype.parser=(new o).endianess("little").uint32("tow").uint16("gdop").uint16("pdop").uint16("tdop").uint16("hdop").uint16("vdop"),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),R.prototype.fieldSpec.push(["gdop","writeUInt16LE",2]),R.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),R.prototype.fieldSpec.push(["tdop","writeUInt16LE",2]),R.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),R.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]);let P=function(e,t){return r.call(this,e),this.messageType="MSG_POS_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(r.prototype)).messageType="MSG_POS_ECEF_DEP_A",P.prototype.msg_type=512,P.prototype.constructor=P,P.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),P.prototype.fieldSpec=[],P.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),P.prototype.fieldSpec.push(["x","writeDoubleLE",8]),P.prototype.fieldSpec.push(["y","writeDoubleLE",8]),P.prototype.fieldSpec.push(["z","writeDoubleLE",8]),P.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),P.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),P.prototype.fieldSpec.push(["flags","writeUInt8",1]);let N=function(e,t){return r.call(this,e),this.messageType="MSG_POS_LLH_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(r.prototype)).messageType="MSG_POS_LLH_DEP_A",N.prototype.msg_type=513,N.prototype.constructor=N,N.prototype.parser=(new o).endianess("little").uint32("tow").doublele("lat").doublele("lon").doublele("height").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),N.prototype.fieldSpec=[],N.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),N.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),N.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),N.prototype.fieldSpec.push(["height","writeDoubleLE",8]),N.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),N.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),N.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),N.prototype.fieldSpec.push(["flags","writeUInt8",1]);let j=function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_ECEF_DEP_A",j.prototype.msg_type=514,j.prototype.constructor=j,j.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),j.prototype.fieldSpec=[],j.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),j.prototype.fieldSpec.push(["x","writeInt32LE",4]),j.prototype.fieldSpec.push(["y","writeInt32LE",4]),j.prototype.fieldSpec.push(["z","writeInt32LE",4]),j.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),j.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),j.prototype.fieldSpec.push(["flags","writeUInt8",1]);let x=function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_NED_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(x.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_NED_DEP_A",x.prototype.msg_type=515,x.prototype.constructor=x,x.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),x.prototype.fieldSpec=[],x.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),x.prototype.fieldSpec.push(["n","writeInt32LE",4]),x.prototype.fieldSpec.push(["e","writeInt32LE",4]),x.prototype.fieldSpec.push(["d","writeInt32LE",4]),x.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),x.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),x.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),x.prototype.fieldSpec.push(["flags","writeUInt8",1]);let F=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(F.prototype=Object.create(r.prototype)).messageType="MSG_VEL_ECEF_DEP_A",F.prototype.msg_type=516,F.prototype.constructor=F,F.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),F.prototype.fieldSpec=[],F.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),F.prototype.fieldSpec.push(["x","writeInt32LE",4]),F.prototype.fieldSpec.push(["y","writeInt32LE",4]),F.prototype.fieldSpec.push(["z","writeInt32LE",4]),F.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),F.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),F.prototype.fieldSpec.push(["flags","writeUInt8",1]);let k=function(e,t){return r.call(this,e),this.messageType="MSG_VEL_NED_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(k.prototype=Object.create(r.prototype)).messageType="MSG_VEL_NED_DEP_A",k.prototype.msg_type=517,k.prototype.constructor=k,k.prototype.parser=(new o).endianess("little").uint32("tow").int32("n").int32("e").int32("d").uint16("h_accuracy").uint16("v_accuracy").uint8("n_sats").uint8("flags"),k.prototype.fieldSpec=[],k.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),k.prototype.fieldSpec.push(["n","writeInt32LE",4]),k.prototype.fieldSpec.push(["e","writeInt32LE",4]),k.prototype.fieldSpec.push(["d","writeInt32LE",4]),k.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),k.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),k.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),k.prototype.fieldSpec.push(["flags","writeUInt8",1]);let B=function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_HEADING_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(B.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_HEADING_DEP_A",B.prototype.msg_type=519,B.prototype.constructor=B,B.prototype.parser=(new o).endianess("little").uint32("tow").uint32("heading").uint8("n_sats").uint8("flags"),B.prototype.fieldSpec=[],B.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),B.prototype.fieldSpec.push(["heading","writeUInt32LE",4]),B.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),B.prototype.fieldSpec.push(["flags","writeUInt8",1]);let q=function(e,t){return r.call(this,e),this.messageType="MSG_PROTECTION_LEVEL_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(q.prototype=Object.create(r.prototype)).messageType="MSG_PROTECTION_LEVEL_DEP_A",q.prototype.msg_type=534,q.prototype.constructor=q,q.prototype.parser=(new o).endianess("little").uint32("tow").uint16("vpl").uint16("hpl").doublele("lat").doublele("lon").doublele("height").uint8("flags"),q.prototype.fieldSpec=[],q.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),q.prototype.fieldSpec.push(["vpl","writeUInt16LE",2]),q.prototype.fieldSpec.push(["hpl","writeUInt16LE",2]),q.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),q.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),q.prototype.fieldSpec.push(["height","writeDoubleLE",8]),q.prototype.fieldSpec.push(["flags","writeUInt8",1]);let z=function(e,t){return r.call(this,e),this.messageType="MSG_PROTECTION_LEVEL",this.fields=t||this.parser.parse(e.payload),this};(z.prototype=Object.create(r.prototype)).messageType="MSG_PROTECTION_LEVEL",z.prototype.msg_type=535,z.prototype.constructor=z,z.prototype.parser=(new o).endianess("little").uint32("tow").int16("wn").uint16("hpl").uint16("vpl").uint16("atpl").uint16("ctpl").uint16("hvpl").uint16("vvpl").uint16("hopl").uint16("popl").uint16("ropl").doublele("lat").doublele("lon").doublele("height").int32("v_x").int32("v_y").int32("v_z").int32("roll").int32("pitch").int32("heading").uint32("flags"),z.prototype.fieldSpec=[],z.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),z.prototype.fieldSpec.push(["wn","writeInt16LE",2]),z.prototype.fieldSpec.push(["hpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["vpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["atpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["ctpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["hvpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["vvpl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["hopl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["popl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["ropl","writeUInt16LE",2]),z.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),z.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),z.prototype.fieldSpec.push(["height","writeDoubleLE",8]),z.prototype.fieldSpec.push(["v_x","writeInt32LE",4]),z.prototype.fieldSpec.push(["v_y","writeInt32LE",4]),z.prototype.fieldSpec.push(["v_z","writeInt32LE",4]),z.prototype.fieldSpec.push(["roll","writeInt32LE",4]),z.prototype.fieldSpec.push(["pitch","writeInt32LE",4]),z.prototype.fieldSpec.push(["heading","writeInt32LE",4]),z.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let H=function(e,t){return r.call(this,e),this.messageType="MSG_UTC_LEAP_SECOND",this.fields=t||this.parser.parse(e.payload),this};(H.prototype=Object.create(r.prototype)).messageType="MSG_UTC_LEAP_SECOND",H.prototype.msg_type=570,H.prototype.constructor=H,H.prototype.parser=(new o).endianess("little").int16("reserved_0").int16("reserved_1").int8("reserved_2").int8("count_before").uint16("reserved_3").uint16("reserved_4").uint16("ref_wn").uint8("ref_dn").int8("count_after"),H.prototype.fieldSpec=[],H.prototype.fieldSpec.push(["reserved_0","writeInt16LE",2]),H.prototype.fieldSpec.push(["reserved_1","writeInt16LE",2]),H.prototype.fieldSpec.push(["reserved_2","writeInt8",1]),H.prototype.fieldSpec.push(["count_before","writeInt8",1]),H.prototype.fieldSpec.push(["reserved_3","writeUInt16LE",2]),H.prototype.fieldSpec.push(["reserved_4","writeUInt16LE",2]),H.prototype.fieldSpec.push(["ref_wn","writeUInt16LE",2]),H.prototype.fieldSpec.push(["ref_dn","writeUInt8",1]),H.prototype.fieldSpec.push(["count_after","writeInt8",1]);let V=function(e,t){return r.call(this,e),this.messageType="MSG_REFERENCE_FRAME_PARAM",this.fields=t||this.parser.parse(e.payload),this};(V.prototype=Object.create(r.prototype)).messageType="MSG_REFERENCE_FRAME_PARAM",V.prototype.msg_type=580,V.prototype.constructor=V,V.prototype.parser=(new o).endianess("little").uint8("ssr_iod").string("sn",{length:32}).string("tn",{length:32}).uint8("sin").uint16("utn").uint16("re_t0").int32("delta_X0").int32("delta_Y0").int32("delta_Z0").int32("theta_01").int32("theta_02").int32("theta_03").int32("scale").int32("dot_delta_X0").int32("dot_delta_Y0").int32("dot_delta_Z0").int32("dot_theta_01").int32("dot_theta_02").int32("dot_theta_03").int16("dot_scale"),V.prototype.fieldSpec=[],V.prototype.fieldSpec.push(["ssr_iod","writeUInt8",1]),V.prototype.fieldSpec.push(["sn","string",32]),V.prototype.fieldSpec.push(["tn","string",32]),V.prototype.fieldSpec.push(["sin","writeUInt8",1]),V.prototype.fieldSpec.push(["utn","writeUInt16LE",2]),V.prototype.fieldSpec.push(["re_t0","writeUInt16LE",2]),V.prototype.fieldSpec.push(["delta_X0","writeInt32LE",4]),V.prototype.fieldSpec.push(["delta_Y0","writeInt32LE",4]),V.prototype.fieldSpec.push(["delta_Z0","writeInt32LE",4]),V.prototype.fieldSpec.push(["theta_01","writeInt32LE",4]),V.prototype.fieldSpec.push(["theta_02","writeInt32LE",4]),V.prototype.fieldSpec.push(["theta_03","writeInt32LE",4]),V.prototype.fieldSpec.push(["scale","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_delta_X0","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_delta_Y0","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_delta_Z0","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_theta_01","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_theta_02","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_theta_03","writeInt32LE",4]),V.prototype.fieldSpec.push(["dot_scale","writeInt16LE",2]);let Y=function(e,t){return r.call(this,e),this.messageType="MSG_POSE_RELATIVE",this.fields=t||this.parser.parse(e.payload),this};(Y.prototype=Object.create(r.prototype)).messageType="MSG_POSE_RELATIVE",Y.prototype.msg_type=581,Y.prototype.constructor=Y,Y.prototype.parser=(new o).endianess("little").uint32("tow").uint8("sensor_id").uint32("timestamp_1").uint32("timestamp_2").array("trans",{length:3,type:"int32le"}).int32("w").int32("x").int32("y").int32("z").floatle("cov_r_x_x").floatle("cov_r_x_y").floatle("cov_r_x_z").floatle("cov_r_y_y").floatle("cov_r_y_z").floatle("cov_r_z_z").floatle("cov_c_x_x").floatle("cov_c_x_y").floatle("cov_c_x_z").floatle("cov_c_y_y").floatle("cov_c_y_z").floatle("cov_c_z_z").uint8("flags"),Y.prototype.fieldSpec=[],Y.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),Y.prototype.fieldSpec.push(["sensor_id","writeUInt8",1]),Y.prototype.fieldSpec.push(["timestamp_1","writeUInt32LE",4]),Y.prototype.fieldSpec.push(["timestamp_2","writeUInt32LE",4]),Y.prototype.fieldSpec.push(["trans","array","writeInt32LE",function(){return 4},3]),Y.prototype.fieldSpec.push(["w","writeInt32LE",4]),Y.prototype.fieldSpec.push(["x","writeInt32LE",4]),Y.prototype.fieldSpec.push(["y","writeInt32LE",4]),Y.prototype.fieldSpec.push(["z","writeInt32LE",4]),Y.prototype.fieldSpec.push(["cov_r_x_x","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_r_x_y","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_r_x_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_r_y_y","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_r_y_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_r_z_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_x_x","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_x_y","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_x_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_y_y","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_y_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["cov_c_z_z","writeFloatLE",4]),Y.prototype.fieldSpec.push(["flags","writeUInt8",1]),e.exports={258:i,MsgGpsTime:i,260:s,MsgGpsTimeGnss:s,259:n,MsgUtcTime:n,261:a,MsgUtcTimeGnss:a,520:l,MsgDops:l,521:c,MsgPosEcef:c,532:u,MsgPosEcefCov:u,522:y,MsgPosLlh:y,529:h,MsgPosLlhCov:h,EstimatedHorizontalErrorEllipse:f,536:d,MsgPosLlhAcc:d,523:_,MsgBaselineEcef:_,524:S,MsgBaselineNed:S,525:g,MsgVelEcef:g,533:w,MsgVelEcefCov:w,526:E,MsgVelNed:E,530:m,MsgVelNedCov:m,553:b,MsgPosEcefGnss:b,564:I,MsgPosEcefCovGnss:I,554:L,MsgPosLlhGnss:L,561:T,MsgPosLlhCovGnss:T,557:v,MsgVelEcefGnss:v,565:U,MsgVelEcefCovGnss:U,558:M,MsgVelNedGnss:M,562:D,MsgVelNedCovGnss:D,531:O,MsgVelBody:O,540:G,MsgVelCog:G,528:A,MsgAgeCorrections:A,256:C,MsgGpsTimeDepA:C,518:R,MsgDopsDepA:R,512:P,MsgPosEcefDepA:P,513:N,MsgPosLlhDepA:N,514:j,MsgBaselineEcefDepA:j,515:x,MsgBaselineNedDepA:x,516:F,MsgVelEcefDepA:F,517:k,MsgVelNedDepA:k,519:B,MsgBaselineHeadingDepA:B,534:q,MsgProtectionLevelDepA:q,535:z,MsgProtectionLevel:z,570:H,MsgUtcLeapSecond:H,580:V,MsgReferenceFrameParam:V,581:Y,MsgPoseRelative:Y}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal),s=(p(0).GnssSignalDep,p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_NDB_EVENT",this.fields=t||this.parser.parse(e.payload),this});(s.prototype=Object.create(r.prototype)).messageType="MSG_NDB_EVENT",s.prototype.msg_type=1024,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint64("recv_time").uint8("event").uint8("object_type").uint8("result").uint8("data_source").nest("object_sid",{type:i.prototype.parser}).nest("src_sid",{type:i.prototype.parser}).uint16("original_sender"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["recv_time","writeUInt64LE",8]),s.prototype.fieldSpec.push(["event","writeUInt8",1]),s.prototype.fieldSpec.push(["object_type","writeUInt8",1]),s.prototype.fieldSpec.push(["result","writeUInt8",1]),s.prototype.fieldSpec.push(["data_source","writeUInt8",1]),s.prototype.fieldSpec.push(["object_sid",i.prototype.fieldSpec]),s.prototype.fieldSpec.push(["src_sid",i.prototype.fieldSpec]),s.prototype.fieldSpec.push(["original_sender","writeUInt16LE",2]),e.exports={1024:s,MsgNdbEvent:s}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase),s=p(0).GnssSignal,n=p(0).GnssSignalDep,a=p(0).GPSTime,l=p(0).GPSTimeDep,c=p(0).GPSTimeSec,u=(p(0).SvId,function(e,t){return r.call(this,e),this.messageType="ObservationHeader",this.fields=t||this.parser.parse(e.payload),this});(u.prototype=Object.create(r.prototype)).messageType="ObservationHeader",u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").nest("t",{type:a.prototype.parser}).uint8("n_obs"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["t",a.prototype.fieldSpec]),u.prototype.fieldSpec.push(["n_obs","writeUInt8",1]);let y=function(e,t){return r.call(this,e),this.messageType="Doppler",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="Doppler",y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").int16("i").uint8("f"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["i","writeInt16LE",2]),y.prototype.fieldSpec.push(["f","writeUInt8",1]);let h=function(e,t){return r.call(this,e),this.messageType="PackedObsContent",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="PackedObsContent",h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:i.prototype.parser}).nest("D",{type:y.prototype.parser}).uint8("cn0").uint8("lock").uint8("flags").nest("sid",{type:s.prototype.parser}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["P","writeUInt32LE",4]),h.prototype.fieldSpec.push(["L",i.prototype.fieldSpec]),h.prototype.fieldSpec.push(["D",y.prototype.fieldSpec]),h.prototype.fieldSpec.push(["cn0","writeUInt8",1]),h.prototype.fieldSpec.push(["lock","writeUInt8",1]),h.prototype.fieldSpec.push(["flags","writeUInt8",1]),h.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);let f=function(e,t){return r.call(this,e),this.messageType="PackedOsrContent",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="PackedOsrContent",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:i.prototype.parser}).uint8("lock").uint8("flags").nest("sid",{type:s.prototype.parser}).uint16("iono_std").uint16("tropo_std").uint16("range_std"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["P","writeUInt32LE",4]),f.prototype.fieldSpec.push(["L",i.prototype.fieldSpec]),f.prototype.fieldSpec.push(["lock","writeUInt8",1]),f.prototype.fieldSpec.push(["flags","writeUInt8",1]),f.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),f.prototype.fieldSpec.push(["iono_std","writeUInt16LE",2]),f.prototype.fieldSpec.push(["tropo_std","writeUInt16LE",2]),f.prototype.fieldSpec.push(["range_std","writeUInt16LE",2]);let d=function(e,t){return r.call(this,e),this.messageType="MSG_OBS",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_OBS",d.prototype.msg_type=74,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").nest("header",{type:u.prototype.parser}).array("obs",{type:h.prototype.parser,readUntil:"eof"}),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["header",u.prototype.fieldSpec]),d.prototype.fieldSpec.push(["obs","array",h.prototype.fieldSpec,function(){return this.fields.array.length},null]);let _=function(e,t){return r.call(this,e),this.messageType="MSG_BASE_POS_LLH",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="MSG_BASE_POS_LLH",_.prototype.msg_type=68,_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little").doublele("lat").doublele("lon").doublele("height"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),_.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),_.prototype.fieldSpec.push(["height","writeDoubleLE",8]);let S=function(e,t){return r.call(this,e),this.messageType="MSG_BASE_POS_ECEF",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_BASE_POS_ECEF",S.prototype.msg_type=72,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").doublele("x").doublele("y").doublele("z"),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["x","writeDoubleLE",8]),S.prototype.fieldSpec.push(["y","writeDoubleLE",8]),S.prototype.fieldSpec.push(["z","writeDoubleLE",8]);let g=function(e,t){return r.call(this,e),this.messageType="EphemerisCommonContent",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="EphemerisCommonContent",g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).nest("toe",{type:c.prototype.parser}).floatle("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),g.prototype.fieldSpec.push(["toe",c.prototype.fieldSpec]),g.prototype.fieldSpec.push(["ura","writeFloatLE",4]),g.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),g.prototype.fieldSpec.push(["valid","writeUInt8",1]),g.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);let w=function(e,t){return r.call(this,e),this.messageType="EphemerisCommonContentDepB",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="EphemerisCommonContentDepB",w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).nest("toe",{type:c.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),w.prototype.fieldSpec.push(["toe",c.prototype.fieldSpec]),w.prototype.fieldSpec.push(["ura","writeDoubleLE",8]),w.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),w.prototype.fieldSpec.push(["valid","writeUInt8",1]),w.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);let E=function(e,t){return r.call(this,e),this.messageType="EphemerisCommonContentDepA",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(r.prototype)).messageType="EphemerisCommonContentDepA",E.prototype.constructor=E,E.prototype.parser=(new o).endianess("little").nest("sid",{type:n.prototype.parser}).nest("toe",{type:l.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),E.prototype.fieldSpec.push(["toe",l.prototype.fieldSpec]),E.prototype.fieldSpec.push(["ura","writeDoubleLE",8]),E.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),E.prototype.fieldSpec.push(["valid","writeUInt8",1]),E.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);let m=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GPS_DEP_E",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GPS_DEP_E",m.prototype.msg_type=129,m.prototype.constructor=m,m.prototype.parser=(new o).endianess("little").nest("common",{type:E.prototype.parser}).doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").nest("toc",{type:l.prototype.parser}).uint8("iode").uint16("iodc"),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["common",E.prototype.fieldSpec]),m.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),m.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),m.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),m.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),m.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),m.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),m.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),m.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),m.prototype.fieldSpec.push(["w","writeDoubleLE",8]),m.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),m.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),m.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),m.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),m.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),m.prototype.fieldSpec.push(["toc",l.prototype.fieldSpec]),m.prototype.fieldSpec.push(["iode","writeUInt8",1]),m.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let b=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GPS_DEP_F",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GPS_DEP_F",b.prototype.msg_type=134,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").nest("common",{type:w.prototype.parser}).doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").nest("toc",{type:c.prototype.parser}).uint8("iode").uint16("iodc"),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["common",w.prototype.fieldSpec]),b.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),b.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),b.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),b.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),b.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),b.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),b.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),b.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),b.prototype.fieldSpec.push(["w","writeDoubleLE",8]),b.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),b.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),b.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),b.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),b.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),b.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),b.prototype.fieldSpec.push(["iode","writeUInt8",1]),b.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let I=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GPS",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GPS",I.prototype.msg_type=138,I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("tgd").floatle("c_rs").floatle("c_rc").floatle("c_uc").floatle("c_us").floatle("c_ic").floatle("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").floatle("af0").floatle("af1").floatle("af2").nest("toc",{type:c.prototype.parser}).uint8("iode").uint16("iodc"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),I.prototype.fieldSpec.push(["tgd","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),I.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),I.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),I.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),I.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),I.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),I.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),I.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),I.prototype.fieldSpec.push(["w","writeDoubleLE",8]),I.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),I.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),I.prototype.fieldSpec.push(["af0","writeFloatLE",4]),I.prototype.fieldSpec.push(["af1","writeFloatLE",4]),I.prototype.fieldSpec.push(["af2","writeFloatLE",4]),I.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),I.prototype.fieldSpec.push(["iode","writeUInt8",1]),I.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let L=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_QZSS",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_QZSS",L.prototype.msg_type=142,L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("tgd").floatle("c_rs").floatle("c_rc").floatle("c_uc").floatle("c_us").floatle("c_ic").floatle("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").floatle("af0").floatle("af1").floatle("af2").nest("toc",{type:c.prototype.parser}).uint8("iode").uint16("iodc"),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),L.prototype.fieldSpec.push(["tgd","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),L.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),L.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),L.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),L.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),L.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),L.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),L.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),L.prototype.fieldSpec.push(["w","writeDoubleLE",8]),L.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),L.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),L.prototype.fieldSpec.push(["af0","writeFloatLE",4]),L.prototype.fieldSpec.push(["af1","writeFloatLE",4]),L.prototype.fieldSpec.push(["af2","writeFloatLE",4]),L.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),L.prototype.fieldSpec.push(["iode","writeUInt8",1]),L.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let T=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_BDS",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_BDS",T.prototype.msg_type=137,T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("tgd1").floatle("tgd2").floatle("c_rs").floatle("c_rc").floatle("c_uc").floatle("c_us").floatle("c_ic").floatle("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").floatle("af1").floatle("af2").nest("toc",{type:c.prototype.parser}).uint8("iode").uint16("iodc"),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),T.prototype.fieldSpec.push(["tgd1","writeFloatLE",4]),T.prototype.fieldSpec.push(["tgd2","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),T.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),T.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),T.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),T.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),T.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),T.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),T.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),T.prototype.fieldSpec.push(["w","writeDoubleLE",8]),T.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),T.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),T.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),T.prototype.fieldSpec.push(["af1","writeFloatLE",4]),T.prototype.fieldSpec.push(["af2","writeFloatLE",4]),T.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),T.prototype.fieldSpec.push(["iode","writeUInt8",1]),T.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let v=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GAL_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GAL_DEP_A",v.prototype.msg_type=149,v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("bgd_e1e5a").floatle("bgd_e1e5b").floatle("c_rs").floatle("c_rc").floatle("c_uc").floatle("c_us").floatle("c_ic").floatle("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").floatle("af2").nest("toc",{type:c.prototype.parser}).uint16("iode").uint16("iodc"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),v.prototype.fieldSpec.push(["bgd_e1e5a","writeFloatLE",4]),v.prototype.fieldSpec.push(["bgd_e1e5b","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),v.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),v.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),v.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),v.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),v.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),v.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),v.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),v.prototype.fieldSpec.push(["w","writeDoubleLE",8]),v.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),v.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),v.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),v.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),v.prototype.fieldSpec.push(["af2","writeFloatLE",4]),v.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),v.prototype.fieldSpec.push(["iode","writeUInt16LE",2]),v.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);let U=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GAL",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GAL",U.prototype.msg_type=141,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("bgd_e1e5a").floatle("bgd_e1e5b").floatle("c_rs").floatle("c_rc").floatle("c_uc").floatle("c_us").floatle("c_ic").floatle("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").floatle("af2").nest("toc",{type:c.prototype.parser}).uint16("iode").uint16("iodc").uint8("source"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),U.prototype.fieldSpec.push(["bgd_e1e5a","writeFloatLE",4]),U.prototype.fieldSpec.push(["bgd_e1e5b","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),U.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),U.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),U.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),U.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),U.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),U.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),U.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),U.prototype.fieldSpec.push(["w","writeDoubleLE",8]),U.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),U.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),U.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),U.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),U.prototype.fieldSpec.push(["af2","writeFloatLE",4]),U.prototype.fieldSpec.push(["toc",c.prototype.fieldSpec]),U.prototype.fieldSpec.push(["iode","writeUInt16LE",2]),U.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),U.prototype.fieldSpec.push(["source","writeUInt8",1]);let M=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_SBAS_DEP_A",M.prototype.msg_type=130,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").nest("common",{type:E.prototype.parser}).array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}).doublele("a_gf0").doublele("a_gf1"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["common",E.prototype.fieldSpec]),M.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),M.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),M.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]),M.prototype.fieldSpec.push(["a_gf0","writeDoubleLE",8]),M.prototype.fieldSpec.push(["a_gf1","writeDoubleLE",8]);let D=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_A",D.prototype.msg_type=131,D.prototype.constructor=D,D.prototype.parser=(new o).endianess("little").nest("common",{type:E.prototype.parser}).doublele("gamma").doublele("tau").array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}),D.prototype.fieldSpec=[],D.prototype.fieldSpec.push(["common",E.prototype.fieldSpec]),D.prototype.fieldSpec.push(["gamma","writeDoubleLE",8]),D.prototype.fieldSpec.push(["tau","writeDoubleLE",8]),D.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),D.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),D.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]);let O=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_SBAS_DEP_B",O.prototype.msg_type=132,O.prototype.constructor=O,O.prototype.parser=(new o).endianess("little").nest("common",{type:w.prototype.parser}).array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}).doublele("a_gf0").doublele("a_gf1"),O.prototype.fieldSpec=[],O.prototype.fieldSpec.push(["common",w.prototype.fieldSpec]),O.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),O.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),O.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]),O.prototype.fieldSpec.push(["a_gf0","writeDoubleLE",8]),O.prototype.fieldSpec.push(["a_gf1","writeDoubleLE",8]);let G=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_SBAS",G.prototype.msg_type=140,G.prototype.constructor=G,G.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"floatle"}).array("acc",{length:3,type:"floatle"}).floatle("a_gf0").floatle("a_gf1"),G.prototype.fieldSpec=[],G.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),G.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),G.prototype.fieldSpec.push(["vel","array","writeFloatLE",function(){return 4},3]),G.prototype.fieldSpec.push(["acc","array","writeFloatLE",function(){return 4},3]),G.prototype.fieldSpec.push(["a_gf0","writeFloatLE",4]),G.prototype.fieldSpec.push(["a_gf1","writeFloatLE",4]);let A=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_B",A.prototype.msg_type=133,A.prototype.constructor=A,A.prototype.parser=(new o).endianess("little").nest("common",{type:w.prototype.parser}).doublele("gamma").doublele("tau").array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}),A.prototype.fieldSpec=[],A.prototype.fieldSpec.push(["common",w.prototype.fieldSpec]),A.prototype.fieldSpec.push(["gamma","writeDoubleLE",8]),A.prototype.fieldSpec.push(["tau","writeDoubleLE",8]),A.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),A.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),A.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]);let C=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_C",C.prototype.msg_type=135,C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").nest("common",{type:w.prototype.parser}).doublele("gamma").doublele("tau").doublele("d_tau").array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}).uint8("fcn"),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["common",w.prototype.fieldSpec]),C.prototype.fieldSpec.push(["gamma","writeDoubleLE",8]),C.prototype.fieldSpec.push(["tau","writeDoubleLE",8]),C.prototype.fieldSpec.push(["d_tau","writeDoubleLE",8]),C.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),C.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),C.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]),C.prototype.fieldSpec.push(["fcn","writeUInt8",1]);let R=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_D",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_D",R.prototype.msg_type=136,R.prototype.constructor=R,R.prototype.parser=(new o).endianess("little").nest("common",{type:w.prototype.parser}).doublele("gamma").doublele("tau").doublele("d_tau").array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"doublele"}).uint8("fcn").uint8("iod"),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["common",w.prototype.fieldSpec]),R.prototype.fieldSpec.push(["gamma","writeDoubleLE",8]),R.prototype.fieldSpec.push(["tau","writeDoubleLE",8]),R.prototype.fieldSpec.push(["d_tau","writeDoubleLE",8]),R.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),R.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),R.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]),R.prototype.fieldSpec.push(["fcn","writeUInt8",1]),R.prototype.fieldSpec.push(["iod","writeUInt8",1]);let P=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_GLO",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_GLO",P.prototype.msg_type=139,P.prototype.constructor=P,P.prototype.parser=(new o).endianess("little").nest("common",{type:g.prototype.parser}).floatle("gamma").floatle("tau").floatle("d_tau").array("pos",{length:3,type:"doublele"}).array("vel",{length:3,type:"doublele"}).array("acc",{length:3,type:"floatle"}).uint8("fcn").uint8("iod"),P.prototype.fieldSpec=[],P.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),P.prototype.fieldSpec.push(["gamma","writeFloatLE",4]),P.prototype.fieldSpec.push(["tau","writeFloatLE",4]),P.prototype.fieldSpec.push(["d_tau","writeFloatLE",4]),P.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),P.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),P.prototype.fieldSpec.push(["acc","array","writeFloatLE",function(){return 4},3]),P.prototype.fieldSpec.push(["fcn","writeUInt8",1]),P.prototype.fieldSpec.push(["iod","writeUInt8",1]);let N=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_D",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_DEP_D",N.prototype.msg_type=128,N.prototype.constructor=N,N.prototype.parser=(new o).endianess("little").doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").doublele("toe_tow").uint16("toe_wn").doublele("toc_tow").uint16("toc_wn").uint8("valid").uint8("healthy").nest("sid",{type:n.prototype.parser}).uint8("iode").uint16("iodc").uint32("reserved"),N.prototype.fieldSpec=[],N.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),N.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),N.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),N.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),N.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),N.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),N.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),N.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),N.prototype.fieldSpec.push(["w","writeDoubleLE",8]),N.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),N.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),N.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),N.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),N.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),N.prototype.fieldSpec.push(["toe_tow","writeDoubleLE",8]),N.prototype.fieldSpec.push(["toe_wn","writeUInt16LE",2]),N.prototype.fieldSpec.push(["toc_tow","writeDoubleLE",8]),N.prototype.fieldSpec.push(["toc_wn","writeUInt16LE",2]),N.prototype.fieldSpec.push(["valid","writeUInt8",1]),N.prototype.fieldSpec.push(["healthy","writeUInt8",1]),N.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),N.prototype.fieldSpec.push(["iode","writeUInt8",1]),N.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),N.prototype.fieldSpec.push(["reserved","writeUInt32LE",4]);let j=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_DEP_A",j.prototype.msg_type=26,j.prototype.constructor=j,j.prototype.parser=(new o).endianess("little").doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").doublele("toe_tow").uint16("toe_wn").doublele("toc_tow").uint16("toc_wn").uint8("valid").uint8("healthy").uint8("prn"),j.prototype.fieldSpec=[],j.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),j.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),j.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),j.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),j.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),j.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),j.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),j.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),j.prototype.fieldSpec.push(["w","writeDoubleLE",8]),j.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),j.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),j.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),j.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),j.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),j.prototype.fieldSpec.push(["toe_tow","writeDoubleLE",8]),j.prototype.fieldSpec.push(["toe_wn","writeUInt16LE",2]),j.prototype.fieldSpec.push(["toc_tow","writeDoubleLE",8]),j.prototype.fieldSpec.push(["toc_wn","writeUInt16LE",2]),j.prototype.fieldSpec.push(["valid","writeUInt8",1]),j.prototype.fieldSpec.push(["healthy","writeUInt8",1]),j.prototype.fieldSpec.push(["prn","writeUInt8",1]);let x=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(x.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_DEP_B",x.prototype.msg_type=70,x.prototype.constructor=x,x.prototype.parser=(new o).endianess("little").doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").doublele("toe_tow").uint16("toe_wn").doublele("toc_tow").uint16("toc_wn").uint8("valid").uint8("healthy").uint8("prn").uint8("iode"),x.prototype.fieldSpec=[],x.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),x.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),x.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),x.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),x.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),x.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),x.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),x.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),x.prototype.fieldSpec.push(["w","writeDoubleLE",8]),x.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),x.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),x.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),x.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),x.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),x.prototype.fieldSpec.push(["toe_tow","writeDoubleLE",8]),x.prototype.fieldSpec.push(["toe_wn","writeUInt16LE",2]),x.prototype.fieldSpec.push(["toc_tow","writeDoubleLE",8]),x.prototype.fieldSpec.push(["toc_wn","writeUInt16LE",2]),x.prototype.fieldSpec.push(["valid","writeUInt8",1]),x.prototype.fieldSpec.push(["healthy","writeUInt8",1]),x.prototype.fieldSpec.push(["prn","writeUInt8",1]),x.prototype.fieldSpec.push(["iode","writeUInt8",1]);let F=function(e,t){return r.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(F.prototype=Object.create(r.prototype)).messageType="MSG_EPHEMERIS_DEP_C",F.prototype.msg_type=71,F.prototype.constructor=F,F.prototype.parser=(new o).endianess("little").doublele("tgd").doublele("c_rs").doublele("c_rc").doublele("c_uc").doublele("c_us").doublele("c_ic").doublele("c_is").doublele("dn").doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("inc_dot").doublele("af0").doublele("af1").doublele("af2").doublele("toe_tow").uint16("toe_wn").doublele("toc_tow").uint16("toc_wn").uint8("valid").uint8("healthy").nest("sid",{type:n.prototype.parser}).uint8("iode").uint16("iodc").uint32("reserved"),F.prototype.fieldSpec=[],F.prototype.fieldSpec.push(["tgd","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_rs","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_rc","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_uc","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_us","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_ic","writeDoubleLE",8]),F.prototype.fieldSpec.push(["c_is","writeDoubleLE",8]),F.prototype.fieldSpec.push(["dn","writeDoubleLE",8]),F.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),F.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),F.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),F.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),F.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),F.prototype.fieldSpec.push(["w","writeDoubleLE",8]),F.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),F.prototype.fieldSpec.push(["inc_dot","writeDoubleLE",8]),F.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),F.prototype.fieldSpec.push(["af1","writeDoubleLE",8]),F.prototype.fieldSpec.push(["af2","writeDoubleLE",8]),F.prototype.fieldSpec.push(["toe_tow","writeDoubleLE",8]),F.prototype.fieldSpec.push(["toe_wn","writeUInt16LE",2]),F.prototype.fieldSpec.push(["toc_tow","writeDoubleLE",8]),F.prototype.fieldSpec.push(["toc_wn","writeUInt16LE",2]),F.prototype.fieldSpec.push(["valid","writeUInt8",1]),F.prototype.fieldSpec.push(["healthy","writeUInt8",1]),F.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),F.prototype.fieldSpec.push(["iode","writeUInt8",1]),F.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),F.prototype.fieldSpec.push(["reserved","writeUInt32LE",4]);let k=function(e,t){return r.call(this,e),this.messageType="ObservationHeaderDep",this.fields=t||this.parser.parse(e.payload),this};(k.prototype=Object.create(r.prototype)).messageType="ObservationHeaderDep",k.prototype.constructor=k,k.prototype.parser=(new o).endianess("little").nest("t",{type:l.prototype.parser}).uint8("n_obs"),k.prototype.fieldSpec=[],k.prototype.fieldSpec.push(["t",l.prototype.fieldSpec]),k.prototype.fieldSpec.push(["n_obs","writeUInt8",1]);let B=function(e,t){return r.call(this,e),this.messageType="CarrierPhaseDepA",this.fields=t||this.parser.parse(e.payload),this};(B.prototype=Object.create(r.prototype)).messageType="CarrierPhaseDepA",B.prototype.constructor=B,B.prototype.parser=(new o).endianess("little").int32("i").uint8("f"),B.prototype.fieldSpec=[],B.prototype.fieldSpec.push(["i","writeInt32LE",4]),B.prototype.fieldSpec.push(["f","writeUInt8",1]);let q=function(e,t){return r.call(this,e),this.messageType="PackedObsContentDepA",this.fields=t||this.parser.parse(e.payload),this};(q.prototype=Object.create(r.prototype)).messageType="PackedObsContentDepA",q.prototype.constructor=q,q.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:B.prototype.parser}).uint8("cn0").uint16("lock").uint8("prn"),q.prototype.fieldSpec=[],q.prototype.fieldSpec.push(["P","writeUInt32LE",4]),q.prototype.fieldSpec.push(["L",B.prototype.fieldSpec]),q.prototype.fieldSpec.push(["cn0","writeUInt8",1]),q.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),q.prototype.fieldSpec.push(["prn","writeUInt8",1]);let z=function(e,t){return r.call(this,e),this.messageType="PackedObsContentDepB",this.fields=t||this.parser.parse(e.payload),this};(z.prototype=Object.create(r.prototype)).messageType="PackedObsContentDepB",z.prototype.constructor=z,z.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:B.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:n.prototype.parser}),z.prototype.fieldSpec=[],z.prototype.fieldSpec.push(["P","writeUInt32LE",4]),z.prototype.fieldSpec.push(["L",B.prototype.fieldSpec]),z.prototype.fieldSpec.push(["cn0","writeUInt8",1]),z.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),z.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]);let H=function(e,t){return r.call(this,e),this.messageType="PackedObsContentDepC",this.fields=t||this.parser.parse(e.payload),this};(H.prototype=Object.create(r.prototype)).messageType="PackedObsContentDepC",H.prototype.constructor=H,H.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:i.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:n.prototype.parser}),H.prototype.fieldSpec=[],H.prototype.fieldSpec.push(["P","writeUInt32LE",4]),H.prototype.fieldSpec.push(["L",i.prototype.fieldSpec]),H.prototype.fieldSpec.push(["cn0","writeUInt8",1]),H.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),H.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]);let V=function(e,t){return r.call(this,e),this.messageType="MSG_OBS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(V.prototype=Object.create(r.prototype)).messageType="MSG_OBS_DEP_A",V.prototype.msg_type=69,V.prototype.constructor=V,V.prototype.parser=(new o).endianess("little").nest("header",{type:k.prototype.parser}).array("obs",{type:q.prototype.parser,readUntil:"eof"}),V.prototype.fieldSpec=[],V.prototype.fieldSpec.push(["header",k.prototype.fieldSpec]),V.prototype.fieldSpec.push(["obs","array",q.prototype.fieldSpec,function(){return this.fields.array.length},null]);let Y=function(e,t){return r.call(this,e),this.messageType="MSG_OBS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(Y.prototype=Object.create(r.prototype)).messageType="MSG_OBS_DEP_B",Y.prototype.msg_type=67,Y.prototype.constructor=Y,Y.prototype.parser=(new o).endianess("little").nest("header",{type:k.prototype.parser}).array("obs",{type:z.prototype.parser,readUntil:"eof"}),Y.prototype.fieldSpec=[],Y.prototype.fieldSpec.push(["header",k.prototype.fieldSpec]),Y.prototype.fieldSpec.push(["obs","array",z.prototype.fieldSpec,function(){return this.fields.array.length},null]);let W=function(e,t){return r.call(this,e),this.messageType="MSG_OBS_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(W.prototype=Object.create(r.prototype)).messageType="MSG_OBS_DEP_C",W.prototype.msg_type=73,W.prototype.constructor=W,W.prototype.parser=(new o).endianess("little").nest("header",{type:k.prototype.parser}).array("obs",{type:H.prototype.parser,readUntil:"eof"}),W.prototype.fieldSpec=[],W.prototype.fieldSpec.push(["header",k.prototype.fieldSpec]),W.prototype.fieldSpec.push(["obs","array",H.prototype.fieldSpec,function(){return this.fields.array.length},null]);let Q=function(e,t){return r.call(this,e),this.messageType="MSG_IONO",this.fields=t||this.parser.parse(e.payload),this};(Q.prototype=Object.create(r.prototype)).messageType="MSG_IONO",Q.prototype.msg_type=144,Q.prototype.constructor=Q,Q.prototype.parser=(new o).endianess("little").nest("t_nmct",{type:c.prototype.parser}).doublele("a0").doublele("a1").doublele("a2").doublele("a3").doublele("b0").doublele("b1").doublele("b2").doublele("b3"),Q.prototype.fieldSpec=[],Q.prototype.fieldSpec.push(["t_nmct",c.prototype.fieldSpec]),Q.prototype.fieldSpec.push(["a0","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["a1","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["a2","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["a3","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["b0","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["b1","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["b2","writeDoubleLE",8]),Q.prototype.fieldSpec.push(["b3","writeDoubleLE",8]);let K=function(e,t){return r.call(this,e),this.messageType="MSG_SV_CONFIGURATION_GPS_DEP",this.fields=t||this.parser.parse(e.payload),this};(K.prototype=Object.create(r.prototype)).messageType="MSG_SV_CONFIGURATION_GPS_DEP",K.prototype.msg_type=145,K.prototype.constructor=K,K.prototype.parser=(new o).endianess("little").nest("t_nmct",{type:c.prototype.parser}).uint32("l2c_mask"),K.prototype.fieldSpec=[],K.prototype.fieldSpec.push(["t_nmct",c.prototype.fieldSpec]),K.prototype.fieldSpec.push(["l2c_mask","writeUInt32LE",4]);let X=function(e,t){return r.call(this,e),this.messageType="GnssCapb",this.fields=t||this.parser.parse(e.payload),this};(X.prototype=Object.create(r.prototype)).messageType="GnssCapb",X.prototype.constructor=X,X.prototype.parser=(new o).endianess("little").uint64("gps_active").uint64("gps_l2c").uint64("gps_l5").uint32("glo_active").uint32("glo_l2of").uint32("glo_l3").uint64("sbas_active").uint64("sbas_l5").uint64("bds_active").uint64("bds_d2nav").uint64("bds_b2").uint64("bds_b2a").uint32("qzss_active").uint64("gal_active").uint64("gal_e5"),X.prototype.fieldSpec=[],X.prototype.fieldSpec.push(["gps_active","writeUInt64LE",8]),X.prototype.fieldSpec.push(["gps_l2c","writeUInt64LE",8]),X.prototype.fieldSpec.push(["gps_l5","writeUInt64LE",8]),X.prototype.fieldSpec.push(["glo_active","writeUInt32LE",4]),X.prototype.fieldSpec.push(["glo_l2of","writeUInt32LE",4]),X.prototype.fieldSpec.push(["glo_l3","writeUInt32LE",4]),X.prototype.fieldSpec.push(["sbas_active","writeUInt64LE",8]),X.prototype.fieldSpec.push(["sbas_l5","writeUInt64LE",8]),X.prototype.fieldSpec.push(["bds_active","writeUInt64LE",8]),X.prototype.fieldSpec.push(["bds_d2nav","writeUInt64LE",8]),X.prototype.fieldSpec.push(["bds_b2","writeUInt64LE",8]),X.prototype.fieldSpec.push(["bds_b2a","writeUInt64LE",8]),X.prototype.fieldSpec.push(["qzss_active","writeUInt32LE",4]),X.prototype.fieldSpec.push(["gal_active","writeUInt64LE",8]),X.prototype.fieldSpec.push(["gal_e5","writeUInt64LE",8]);let J=function(e,t){return r.call(this,e),this.messageType="MSG_GNSS_CAPB",this.fields=t||this.parser.parse(e.payload),this};(J.prototype=Object.create(r.prototype)).messageType="MSG_GNSS_CAPB",J.prototype.msg_type=150,J.prototype.constructor=J,J.prototype.parser=(new o).endianess("little").nest("t_nmct",{type:c.prototype.parser}).nest("gc",{type:X.prototype.parser}),J.prototype.fieldSpec=[],J.prototype.fieldSpec.push(["t_nmct",c.prototype.fieldSpec]),J.prototype.fieldSpec.push(["gc",X.prototype.fieldSpec]);let Z=function(e,t){return r.call(this,e),this.messageType="MSG_GROUP_DELAY_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(Z.prototype=Object.create(r.prototype)).messageType="MSG_GROUP_DELAY_DEP_A",Z.prototype.msg_type=146,Z.prototype.constructor=Z,Z.prototype.parser=(new o).endianess("little").nest("t_op",{type:l.prototype.parser}).uint8("prn").uint8("valid").int16("tgd").int16("isc_l1ca").int16("isc_l2c"),Z.prototype.fieldSpec=[],Z.prototype.fieldSpec.push(["t_op",l.prototype.fieldSpec]),Z.prototype.fieldSpec.push(["prn","writeUInt8",1]),Z.prototype.fieldSpec.push(["valid","writeUInt8",1]),Z.prototype.fieldSpec.push(["tgd","writeInt16LE",2]),Z.prototype.fieldSpec.push(["isc_l1ca","writeInt16LE",2]),Z.prototype.fieldSpec.push(["isc_l2c","writeInt16LE",2]);let $=function(e,t){return r.call(this,e),this.messageType="MSG_GROUP_DELAY_DEP_B",this.fields=t||this.parser.parse(e.payload),this};($.prototype=Object.create(r.prototype)).messageType="MSG_GROUP_DELAY_DEP_B",$.prototype.msg_type=147,$.prototype.constructor=$,$.prototype.parser=(new o).endianess("little").nest("t_op",{type:c.prototype.parser}).nest("sid",{type:n.prototype.parser}).uint8("valid").int16("tgd").int16("isc_l1ca").int16("isc_l2c"),$.prototype.fieldSpec=[],$.prototype.fieldSpec.push(["t_op",c.prototype.fieldSpec]),$.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),$.prototype.fieldSpec.push(["valid","writeUInt8",1]),$.prototype.fieldSpec.push(["tgd","writeInt16LE",2]),$.prototype.fieldSpec.push(["isc_l1ca","writeInt16LE",2]),$.prototype.fieldSpec.push(["isc_l2c","writeInt16LE",2]);let ee=function(e,t){return r.call(this,e),this.messageType="MSG_GROUP_DELAY",this.fields=t||this.parser.parse(e.payload),this};(ee.prototype=Object.create(r.prototype)).messageType="MSG_GROUP_DELAY",ee.prototype.msg_type=148,ee.prototype.constructor=ee,ee.prototype.parser=(new o).endianess("little").nest("t_op",{type:c.prototype.parser}).nest("sid",{type:s.prototype.parser}).uint8("valid").int16("tgd").int16("isc_l1ca").int16("isc_l2c"),ee.prototype.fieldSpec=[],ee.prototype.fieldSpec.push(["t_op",c.prototype.fieldSpec]),ee.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),ee.prototype.fieldSpec.push(["valid","writeUInt8",1]),ee.prototype.fieldSpec.push(["tgd","writeInt16LE",2]),ee.prototype.fieldSpec.push(["isc_l1ca","writeInt16LE",2]),ee.prototype.fieldSpec.push(["isc_l2c","writeInt16LE",2]);let te=function(e,t){return r.call(this,e),this.messageType="AlmanacCommonContent",this.fields=t||this.parser.parse(e.payload),this};(te.prototype=Object.create(r.prototype)).messageType="AlmanacCommonContent",te.prototype.constructor=te,te.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).nest("toa",{type:c.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),te.prototype.fieldSpec=[],te.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),te.prototype.fieldSpec.push(["toa",c.prototype.fieldSpec]),te.prototype.fieldSpec.push(["ura","writeDoubleLE",8]),te.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),te.prototype.fieldSpec.push(["valid","writeUInt8",1]),te.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);let pe=function(e,t){return r.call(this,e),this.messageType="AlmanacCommonContentDep",this.fields=t||this.parser.parse(e.payload),this};(pe.prototype=Object.create(r.prototype)).messageType="AlmanacCommonContentDep",pe.prototype.constructor=pe,pe.prototype.parser=(new o).endianess("little").nest("sid",{type:n.prototype.parser}).nest("toa",{type:c.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),pe.prototype.fieldSpec=[],pe.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),pe.prototype.fieldSpec.push(["toa",c.prototype.fieldSpec]),pe.prototype.fieldSpec.push(["ura","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),pe.prototype.fieldSpec.push(["valid","writeUInt8",1]),pe.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);let re=function(e,t){return r.call(this,e),this.messageType="MSG_ALMANAC_GPS_DEP",this.fields=t||this.parser.parse(e.payload),this};(re.prototype=Object.create(r.prototype)).messageType="MSG_ALMANAC_GPS_DEP",re.prototype.msg_type=112,re.prototype.constructor=re,re.prototype.parser=(new o).endianess("little").nest("common",{type:pe.prototype.parser}).doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("af0").doublele("af1"),re.prototype.fieldSpec=[],re.prototype.fieldSpec.push(["common",pe.prototype.fieldSpec]),re.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),re.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),re.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),re.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),re.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),re.prototype.fieldSpec.push(["w","writeDoubleLE",8]),re.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),re.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),re.prototype.fieldSpec.push(["af1","writeDoubleLE",8]);let oe=function(e,t){return r.call(this,e),this.messageType="MSG_ALMANAC_GPS",this.fields=t||this.parser.parse(e.payload),this};(oe.prototype=Object.create(r.prototype)).messageType="MSG_ALMANAC_GPS",oe.prototype.msg_type=114,oe.prototype.constructor=oe,oe.prototype.parser=(new o).endianess("little").nest("common",{type:te.prototype.parser}).doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("af0").doublele("af1"),oe.prototype.fieldSpec=[],oe.prototype.fieldSpec.push(["common",te.prototype.fieldSpec]),oe.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["w","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),oe.prototype.fieldSpec.push(["af1","writeDoubleLE",8]);let ie=function(e,t){return r.call(this,e),this.messageType="MSG_ALMANAC_GLO_DEP",this.fields=t||this.parser.parse(e.payload),this};(ie.prototype=Object.create(r.prototype)).messageType="MSG_ALMANAC_GLO_DEP",ie.prototype.msg_type=113,ie.prototype.constructor=ie,ie.prototype.parser=(new o).endianess("little").nest("common",{type:pe.prototype.parser}).doublele("lambda_na").doublele("t_lambda_na").doublele("i").doublele("t").doublele("t_dot").doublele("epsilon").doublele("omega"),ie.prototype.fieldSpec=[],ie.prototype.fieldSpec.push(["common",pe.prototype.fieldSpec]),ie.prototype.fieldSpec.push(["lambda_na","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["t_lambda_na","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["i","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["t","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["t_dot","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["epsilon","writeDoubleLE",8]),ie.prototype.fieldSpec.push(["omega","writeDoubleLE",8]);let se=function(e,t){return r.call(this,e),this.messageType="MSG_ALMANAC_GLO",this.fields=t||this.parser.parse(e.payload),this};(se.prototype=Object.create(r.prototype)).messageType="MSG_ALMANAC_GLO",se.prototype.msg_type=115,se.prototype.constructor=se,se.prototype.parser=(new o).endianess("little").nest("common",{type:te.prototype.parser}).doublele("lambda_na").doublele("t_lambda_na").doublele("i").doublele("t").doublele("t_dot").doublele("epsilon").doublele("omega"),se.prototype.fieldSpec=[],se.prototype.fieldSpec.push(["common",te.prototype.fieldSpec]),se.prototype.fieldSpec.push(["lambda_na","writeDoubleLE",8]),se.prototype.fieldSpec.push(["t_lambda_na","writeDoubleLE",8]),se.prototype.fieldSpec.push(["i","writeDoubleLE",8]),se.prototype.fieldSpec.push(["t","writeDoubleLE",8]),se.prototype.fieldSpec.push(["t_dot","writeDoubleLE",8]),se.prototype.fieldSpec.push(["epsilon","writeDoubleLE",8]),se.prototype.fieldSpec.push(["omega","writeDoubleLE",8]);let ne=function(e,t){return r.call(this,e),this.messageType="MSG_GLO_BIASES",this.fields=t||this.parser.parse(e.payload),this};(ne.prototype=Object.create(r.prototype)).messageType="MSG_GLO_BIASES",ne.prototype.msg_type=117,ne.prototype.constructor=ne,ne.prototype.parser=(new o).endianess("little").uint8("mask").int16("l1ca_bias").int16("l1p_bias").int16("l2ca_bias").int16("l2p_bias"),ne.prototype.fieldSpec=[],ne.prototype.fieldSpec.push(["mask","writeUInt8",1]),ne.prototype.fieldSpec.push(["l1ca_bias","writeInt16LE",2]),ne.prototype.fieldSpec.push(["l1p_bias","writeInt16LE",2]),ne.prototype.fieldSpec.push(["l2ca_bias","writeInt16LE",2]),ne.prototype.fieldSpec.push(["l2p_bias","writeInt16LE",2]);let ae=function(e,t){return r.call(this,e),this.messageType="SvAzEl",this.fields=t||this.parser.parse(e.payload),this};(ae.prototype=Object.create(r.prototype)).messageType="SvAzEl",ae.prototype.constructor=ae,ae.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).uint8("az").int8("el"),ae.prototype.fieldSpec=[],ae.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),ae.prototype.fieldSpec.push(["az","writeUInt8",1]),ae.prototype.fieldSpec.push(["el","writeInt8",1]);let le=function(e,t){return r.call(this,e),this.messageType="MSG_SV_AZ_EL",this.fields=t||this.parser.parse(e.payload),this};(le.prototype=Object.create(r.prototype)).messageType="MSG_SV_AZ_EL",le.prototype.msg_type=151,le.prototype.constructor=le,le.prototype.parser=(new o).endianess("little").array("azel",{type:ae.prototype.parser,readUntil:"eof"}),le.prototype.fieldSpec=[],le.prototype.fieldSpec.push(["azel","array",ae.prototype.fieldSpec,function(){return this.fields.array.length},null]);let ce=function(e,t){return r.call(this,e),this.messageType="MSG_OSR",this.fields=t||this.parser.parse(e.payload),this};(ce.prototype=Object.create(r.prototype)).messageType="MSG_OSR",ce.prototype.msg_type=1600,ce.prototype.constructor=ce,ce.prototype.parser=(new o).endianess("little").nest("header",{type:u.prototype.parser}).array("obs",{type:f.prototype.parser,readUntil:"eof"}),ce.prototype.fieldSpec=[],ce.prototype.fieldSpec.push(["header",u.prototype.fieldSpec]),ce.prototype.fieldSpec.push(["obs","array",f.prototype.fieldSpec,function(){return this.fields.array.length},null]),e.exports={ObservationHeader:u,Doppler:y,PackedObsContent:h,PackedOsrContent:f,74:d,MsgObs:d,68:_,MsgBasePosLlh:_,72:S,MsgBasePosEcef:S,EphemerisCommonContent:g,EphemerisCommonContentDepB:w,EphemerisCommonContentDepA:E,129:m,MsgEphemerisGpsDepE:m,134:b,MsgEphemerisGpsDepF:b,138:I,MsgEphemerisGps:I,142:L,MsgEphemerisQzss:L,137:T,MsgEphemerisBds:T,149:v,MsgEphemerisGalDepA:v,141:U,MsgEphemerisGal:U,130:M,MsgEphemerisSbasDepA:M,131:D,MsgEphemerisGloDepA:D,132:O,MsgEphemerisSbasDepB:O,140:G,MsgEphemerisSbas:G,133:A,MsgEphemerisGloDepB:A,135:C,MsgEphemerisGloDepC:C,136:R,MsgEphemerisGloDepD:R,139:P,MsgEphemerisGlo:P,128:N,MsgEphemerisDepD:N,26:j,MsgEphemerisDepA:j,70:x,MsgEphemerisDepB:x,71:F,MsgEphemerisDepC:F,ObservationHeaderDep:k,CarrierPhaseDepA:B,PackedObsContentDepA:q,PackedObsContentDepB:z,PackedObsContentDepC:H,69:V,MsgObsDepA:V,67:Y,MsgObsDepB:Y,73:W,MsgObsDepC:W,144:Q,MsgIono:Q,145:K,MsgSvConfigurationGpsDep:K,GnssCapb:X,150:J,MsgGnssCapb:J,146:Z,MsgGroupDelayDepA:Z,147:$,MsgGroupDelayDepB:$,148:ee,MsgGroupDelay:ee,AlmanacCommonContent:te,AlmanacCommonContentDep:pe,112:re,MsgAlmanacGpsDep:re,114:oe,MsgAlmanacGps:oe,113:ie,MsgAlmanacGloDep:ie,115:se,MsgAlmanacGlo:se,117:ne,MsgGloBiases:ne,SvAzEl:ae,151:le,MsgSvAzEl:le,1600:ce,MsgOsr:ce}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_BASELINE_HEADING",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_BASELINE_HEADING",i.prototype.msg_type=527,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint32("tow").uint32("heading").uint8("n_sats").uint8("flags"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["heading","writeUInt32LE",4]),i.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),i.prototype.fieldSpec.push(["flags","writeUInt8",1]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_ORIENT_QUAT",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_ORIENT_QUAT",s.prototype.msg_type=544,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint32("tow").int32("w").int32("x").int32("y").int32("z").floatle("w_accuracy").floatle("x_accuracy").floatle("y_accuracy").floatle("z_accuracy").uint8("flags"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["w","writeInt32LE",4]),s.prototype.fieldSpec.push(["x","writeInt32LE",4]),s.prototype.fieldSpec.push(["y","writeInt32LE",4]),s.prototype.fieldSpec.push(["z","writeInt32LE",4]),s.prototype.fieldSpec.push(["w_accuracy","writeFloatLE",4]),s.prototype.fieldSpec.push(["x_accuracy","writeFloatLE",4]),s.prototype.fieldSpec.push(["y_accuracy","writeFloatLE",4]),s.prototype.fieldSpec.push(["z_accuracy","writeFloatLE",4]),s.prototype.fieldSpec.push(["flags","writeUInt8",1]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_ORIENT_EULER",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_ORIENT_EULER",n.prototype.msg_type=545,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint32("tow").int32("roll").int32("pitch").int32("yaw").floatle("roll_accuracy").floatle("pitch_accuracy").floatle("yaw_accuracy").uint8("flags"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),n.prototype.fieldSpec.push(["roll","writeInt32LE",4]),n.prototype.fieldSpec.push(["pitch","writeInt32LE",4]),n.prototype.fieldSpec.push(["yaw","writeInt32LE",4]),n.prototype.fieldSpec.push(["roll_accuracy","writeFloatLE",4]),n.prototype.fieldSpec.push(["pitch_accuracy","writeFloatLE",4]),n.prototype.fieldSpec.push(["yaw_accuracy","writeFloatLE",4]),n.prototype.fieldSpec.push(["flags","writeUInt8",1]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_ANGULAR_RATE",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_ANGULAR_RATE",a.prototype.msg_type=546,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint8("flags"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),a.prototype.fieldSpec.push(["x","writeInt32LE",4]),a.prototype.fieldSpec.push(["y","writeInt32LE",4]),a.prototype.fieldSpec.push(["z","writeInt32LE",4]),a.prototype.fieldSpec.push(["flags","writeUInt8",1]),e.exports={527:i,MsgBaselineHeading:i,544:s,MsgOrientQuat:s,545:n,MsgOrientEuler:n,546:a,MsgAngularRate:a}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal),s=p(0).GnssSignalDep,n=p(0).GPSTime,a=p(0).GPSTimeDep,l=(p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_ALMANAC",this.fields=t||this.parser.parse(e.payload),this});(l.prototype=Object.create(r.prototype)).messageType="MSG_ALMANAC",l.prototype.msg_type=105,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little"),l.prototype.fieldSpec=[];let c=function(e,t){return r.call(this,e),this.messageType="MSG_SET_TIME",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_SET_TIME",c.prototype.msg_type=104,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little"),c.prototype.fieldSpec=[];let u=function(e,t){return r.call(this,e),this.messageType="MSG_RESET",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_RESET",u.prototype.msg_type=182,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint32("flags"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_RESET_DEP",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_RESET_DEP",y.prototype.msg_type=178,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little"),y.prototype.fieldSpec=[];let h=function(e,t){return r.call(this,e),this.messageType="MSG_CW_RESULTS",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_CW_RESULTS",h.prototype.msg_type=192,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little"),h.prototype.fieldSpec=[];let f=function(e,t){return r.call(this,e),this.messageType="MSG_CW_START",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_CW_START",f.prototype.msg_type=193,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little"),f.prototype.fieldSpec=[];let d=function(e,t){return r.call(this,e),this.messageType="MSG_RESET_FILTERS",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_RESET_FILTERS",d.prototype.msg_type=34,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").uint8("filter"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["filter","writeUInt8",1]);let _=function(e,t){return r.call(this,e),this.messageType="MSG_INIT_BASE_DEP",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="MSG_INIT_BASE_DEP",_.prototype.msg_type=35,_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little"),_.prototype.fieldSpec=[];let S=function(e,t){return r.call(this,e),this.messageType="MSG_THREAD_STATE",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_THREAD_STATE",S.prototype.msg_type=23,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").string("name",{length:20}).uint16("cpu").uint32("stack_free"),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["name","string",20]),S.prototype.fieldSpec.push(["cpu","writeUInt16LE",2]),S.prototype.fieldSpec.push(["stack_free","writeUInt32LE",4]);let g=function(e,t){return r.call(this,e),this.messageType="UARTChannel",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="UARTChannel",g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").floatle("tx_throughput").floatle("rx_throughput").uint16("crc_error_count").uint16("io_error_count").uint8("tx_buffer_level").uint8("rx_buffer_level"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["tx_throughput","writeFloatLE",4]),g.prototype.fieldSpec.push(["rx_throughput","writeFloatLE",4]),g.prototype.fieldSpec.push(["crc_error_count","writeUInt16LE",2]),g.prototype.fieldSpec.push(["io_error_count","writeUInt16LE",2]),g.prototype.fieldSpec.push(["tx_buffer_level","writeUInt8",1]),g.prototype.fieldSpec.push(["rx_buffer_level","writeUInt8",1]);let w=function(e,t){return r.call(this,e),this.messageType="Period",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="Period",w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").int32("avg").int32("pmin").int32("pmax").int32("current"),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["avg","writeInt32LE",4]),w.prototype.fieldSpec.push(["pmin","writeInt32LE",4]),w.prototype.fieldSpec.push(["pmax","writeInt32LE",4]),w.prototype.fieldSpec.push(["current","writeInt32LE",4]);let E=function(e,t){return r.call(this,e),this.messageType="Latency",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(r.prototype)).messageType="Latency",E.prototype.constructor=E,E.prototype.parser=(new o).endianess("little").int32("avg").int32("lmin").int32("lmax").int32("current"),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["avg","writeInt32LE",4]),E.prototype.fieldSpec.push(["lmin","writeInt32LE",4]),E.prototype.fieldSpec.push(["lmax","writeInt32LE",4]),E.prototype.fieldSpec.push(["current","writeInt32LE",4]);let m=function(e,t){return r.call(this,e),this.messageType="MSG_UART_STATE",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(r.prototype)).messageType="MSG_UART_STATE",m.prototype.msg_type=29,m.prototype.constructor=m,m.prototype.parser=(new o).endianess("little").nest("uart_a",{type:g.prototype.parser}).nest("uart_b",{type:g.prototype.parser}).nest("uart_ftdi",{type:g.prototype.parser}).nest("latency",{type:E.prototype.parser}).nest("obs_period",{type:w.prototype.parser}),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["uart_a",g.prototype.fieldSpec]),m.prototype.fieldSpec.push(["uart_b",g.prototype.fieldSpec]),m.prototype.fieldSpec.push(["uart_ftdi",g.prototype.fieldSpec]),m.prototype.fieldSpec.push(["latency",E.prototype.fieldSpec]),m.prototype.fieldSpec.push(["obs_period",w.prototype.fieldSpec]);let b=function(e,t){return r.call(this,e),this.messageType="MSG_UART_STATE_DEPA",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(r.prototype)).messageType="MSG_UART_STATE_DEPA",b.prototype.msg_type=24,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").nest("uart_a",{type:g.prototype.parser}).nest("uart_b",{type:g.prototype.parser}).nest("uart_ftdi",{type:g.prototype.parser}).nest("latency",{type:E.prototype.parser}),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["uart_a",g.prototype.fieldSpec]),b.prototype.fieldSpec.push(["uart_b",g.prototype.fieldSpec]),b.prototype.fieldSpec.push(["uart_ftdi",g.prototype.fieldSpec]),b.prototype.fieldSpec.push(["latency",E.prototype.fieldSpec]);let I=function(e,t){return r.call(this,e),this.messageType="MSG_IAR_STATE",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(r.prototype)).messageType="MSG_IAR_STATE",I.prototype.msg_type=25,I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").uint32("num_hyps"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["num_hyps","writeUInt32LE",4]);let L=function(e,t){return r.call(this,e),this.messageType="MSG_MASK_SATELLITE",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(r.prototype)).messageType="MSG_MASK_SATELLITE",L.prototype.msg_type=43,L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").uint8("mask").nest("sid",{type:i.prototype.parser}),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["mask","writeUInt8",1]),L.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]);let T=function(e,t){return r.call(this,e),this.messageType="MSG_MASK_SATELLITE_DEP",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(r.prototype)).messageType="MSG_MASK_SATELLITE_DEP",T.prototype.msg_type=27,T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").uint8("mask").nest("sid",{type:s.prototype.parser}),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["mask","writeUInt8",1]),T.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);let v=function(e,t){return r.call(this,e),this.messageType="MSG_DEVICE_MONITOR",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(r.prototype)).messageType="MSG_DEVICE_MONITOR",v.prototype.msg_type=181,v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").int16("dev_vin").int16("cpu_vint").int16("cpu_vaux").int16("cpu_temperature").int16("fe_temperature"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["dev_vin","writeInt16LE",2]),v.prototype.fieldSpec.push(["cpu_vint","writeInt16LE",2]),v.prototype.fieldSpec.push(["cpu_vaux","writeInt16LE",2]),v.prototype.fieldSpec.push(["cpu_temperature","writeInt16LE",2]),v.prototype.fieldSpec.push(["fe_temperature","writeInt16LE",2]);let U=function(e,t){return r.call(this,e),this.messageType="MSG_COMMAND_REQ",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(r.prototype)).messageType="MSG_COMMAND_REQ",U.prototype.msg_type=184,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").uint32("sequence").string("command",{greedy:!0}),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),U.prototype.fieldSpec.push(["command","string",null]);let M=function(e,t){return r.call(this,e),this.messageType="MSG_COMMAND_RESP",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(r.prototype)).messageType="MSG_COMMAND_RESP",M.prototype.msg_type=185,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").uint32("sequence").int32("code"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),M.prototype.fieldSpec.push(["code","writeInt32LE",4]);let D=function(e,t){return r.call(this,e),this.messageType="MSG_COMMAND_OUTPUT",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(r.prototype)).messageType="MSG_COMMAND_OUTPUT",D.prototype.msg_type=188,D.prototype.constructor=D,D.prototype.parser=(new o).endianess("little").uint32("sequence").string("line",{greedy:!0}),D.prototype.fieldSpec=[],D.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),D.prototype.fieldSpec.push(["line","string",null]);let O=function(e,t){return r.call(this,e),this.messageType="MSG_NETWORK_STATE_REQ",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(r.prototype)).messageType="MSG_NETWORK_STATE_REQ",O.prototype.msg_type=186,O.prototype.constructor=O,O.prototype.parser=(new o).endianess("little"),O.prototype.fieldSpec=[];let G=function(e,t){return r.call(this,e),this.messageType="MSG_NETWORK_STATE_RESP",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(r.prototype)).messageType="MSG_NETWORK_STATE_RESP",G.prototype.msg_type=187,G.prototype.constructor=G,G.prototype.parser=(new o).endianess("little").array("ipv4_address",{length:4,type:"uint8"}).uint8("ipv4_mask_size").array("ipv6_address",{length:16,type:"uint8"}).uint8("ipv6_mask_size").uint32("rx_bytes").uint32("tx_bytes").string("interface_name",{length:16}).uint32("flags"),G.prototype.fieldSpec=[],G.prototype.fieldSpec.push(["ipv4_address","array","writeUInt8",function(){return 1},4]),G.prototype.fieldSpec.push(["ipv4_mask_size","writeUInt8",1]),G.prototype.fieldSpec.push(["ipv6_address","array","writeUInt8",function(){return 1},16]),G.prototype.fieldSpec.push(["ipv6_mask_size","writeUInt8",1]),G.prototype.fieldSpec.push(["rx_bytes","writeUInt32LE",4]),G.prototype.fieldSpec.push(["tx_bytes","writeUInt32LE",4]),G.prototype.fieldSpec.push(["interface_name","string",16]),G.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let A=function(e,t){return r.call(this,e),this.messageType="NetworkUsage",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(r.prototype)).messageType="NetworkUsage",A.prototype.constructor=A,A.prototype.parser=(new o).endianess("little").uint64("duration").uint64("total_bytes").uint32("rx_bytes").uint32("tx_bytes").string("interface_name",{length:16}),A.prototype.fieldSpec=[],A.prototype.fieldSpec.push(["duration","writeUInt64LE",8]),A.prototype.fieldSpec.push(["total_bytes","writeUInt64LE",8]),A.prototype.fieldSpec.push(["rx_bytes","writeUInt32LE",4]),A.prototype.fieldSpec.push(["tx_bytes","writeUInt32LE",4]),A.prototype.fieldSpec.push(["interface_name","string",16]);let C=function(e,t){return r.call(this,e),this.messageType="MSG_NETWORK_BANDWIDTH_USAGE",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(r.prototype)).messageType="MSG_NETWORK_BANDWIDTH_USAGE",C.prototype.msg_type=189,C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").array("interfaces",{type:A.prototype.parser,readUntil:"eof"}),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["interfaces","array",A.prototype.fieldSpec,function(){return this.fields.array.length},null]);let R=function(e,t){return r.call(this,e),this.messageType="MSG_CELL_MODEM_STATUS",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(r.prototype)).messageType="MSG_CELL_MODEM_STATUS",R.prototype.msg_type=190,R.prototype.constructor=R,R.prototype.parser=(new o).endianess("little").int8("signal_strength").floatle("signal_error_rate").array("reserved",{type:"uint8",readUntil:"eof"}),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["signal_strength","writeInt8",1]),R.prototype.fieldSpec.push(["signal_error_rate","writeFloatLE",4]),R.prototype.fieldSpec.push(["reserved","array","writeUInt8",function(){return 1},null]);let P=function(e,t){return r.call(this,e),this.messageType="MSG_SPECAN_DEP",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(r.prototype)).messageType="MSG_SPECAN_DEP",P.prototype.msg_type=80,P.prototype.constructor=P,P.prototype.parser=(new o).endianess("little").uint16("channel_tag").nest("t",{type:a.prototype.parser}).floatle("freq_ref").floatle("freq_step").floatle("amplitude_ref").floatle("amplitude_unit").array("amplitude_value",{type:"uint8",readUntil:"eof"}),P.prototype.fieldSpec=[],P.prototype.fieldSpec.push(["channel_tag","writeUInt16LE",2]),P.prototype.fieldSpec.push(["t",a.prototype.fieldSpec]),P.prototype.fieldSpec.push(["freq_ref","writeFloatLE",4]),P.prototype.fieldSpec.push(["freq_step","writeFloatLE",4]),P.prototype.fieldSpec.push(["amplitude_ref","writeFloatLE",4]),P.prototype.fieldSpec.push(["amplitude_unit","writeFloatLE",4]),P.prototype.fieldSpec.push(["amplitude_value","array","writeUInt8",function(){return 1},null]);let N=function(e,t){return r.call(this,e),this.messageType="MSG_SPECAN",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(r.prototype)).messageType="MSG_SPECAN",N.prototype.msg_type=81,N.prototype.constructor=N,N.prototype.parser=(new o).endianess("little").uint16("channel_tag").nest("t",{type:n.prototype.parser}).floatle("freq_ref").floatle("freq_step").floatle("amplitude_ref").floatle("amplitude_unit").array("amplitude_value",{type:"uint8",readUntil:"eof"}),N.prototype.fieldSpec=[],N.prototype.fieldSpec.push(["channel_tag","writeUInt16LE",2]),N.prototype.fieldSpec.push(["t",n.prototype.fieldSpec]),N.prototype.fieldSpec.push(["freq_ref","writeFloatLE",4]),N.prototype.fieldSpec.push(["freq_step","writeFloatLE",4]),N.prototype.fieldSpec.push(["amplitude_ref","writeFloatLE",4]),N.prototype.fieldSpec.push(["amplitude_unit","writeFloatLE",4]),N.prototype.fieldSpec.push(["amplitude_value","array","writeUInt8",function(){return 1},null]);let j=function(e,t){return r.call(this,e),this.messageType="MSG_FRONT_END_GAIN",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(r.prototype)).messageType="MSG_FRONT_END_GAIN",j.prototype.msg_type=191,j.prototype.constructor=j,j.prototype.parser=(new o).endianess("little").array("rf_gain",{length:8,type:"int8"}).array("if_gain",{length:8,type:"int8"}),j.prototype.fieldSpec=[],j.prototype.fieldSpec.push(["rf_gain","array","writeInt8",function(){return 1},8]),j.prototype.fieldSpec.push(["if_gain","array","writeInt8",function(){return 1},8]),e.exports={105:l,MsgAlmanac:l,104:c,MsgSetTime:c,182:u,MsgReset:u,178:y,MsgResetDep:y,192:h,MsgCwResults:h,193:f,MsgCwStart:f,34:d,MsgResetFilters:d,35:_,MsgInitBaseDep:_,23:S,MsgThreadState:S,UARTChannel:g,Period:w,Latency:E,29:m,MsgUartState:m,24:b,MsgUartStateDepa:b,25:I,MsgIarState:I,43:L,MsgMaskSatellite:L,27:T,MsgMaskSatelliteDep:T,181:v,MsgDeviceMonitor:v,184:U,MsgCommandReq:U,185:M,MsgCommandResp:M,188:D,MsgCommandOutput:D,186:O,MsgNetworkStateReq:O,187:G,MsgNetworkStateResp:G,NetworkUsage:A,189:C,MsgNetworkBandwidthUsage:C,190:R,MsgCellModemStatus:R,80:P,MsgSpecanDep:P,81:N,MsgSpecan:N,191:j,MsgFrontEndGain:j}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal),s=(p(0).GnssSignalDep,p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_SBAS_RAW",this.fields=t||this.parser.parse(e.payload),this});(s.prototype=Object.create(r.prototype)).messageType="MSG_SBAS_RAW",s.prototype.msg_type=30583,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).uint32("tow").uint8("message_type").array("data",{length:27,type:"uint8"}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),s.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["message_type","writeUInt8",1]),s.prototype.fieldSpec.push(["data","array","writeUInt8",function(){return 1},27]),e.exports={30583:s,MsgSbasRaw:s}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_SAVE",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_SAVE",i.prototype.msg_type=161,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little"),i.prototype.fieldSpec=[];let s=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_WRITE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_WRITE",s.prototype.msg_type=160,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").string("setting",{greedy:!0}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["setting","string",null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_WRITE_RESP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_WRITE_RESP",n.prototype.msg_type=175,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint8("status").string("setting",{greedy:!0}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["status","writeUInt8",1]),n.prototype.fieldSpec.push(["setting","string",null]);let a=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_READ_REQ",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_READ_REQ",a.prototype.msg_type=164,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").string("setting",{greedy:!0}),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["setting","string",null]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_READ_RESP",l.prototype.msg_type=165,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").string("setting",{greedy:!0}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["setting","string",null]);let c=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_REQ",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_READ_BY_INDEX_REQ",c.prototype.msg_type=162,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint16("index"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["index","writeUInt16LE",2]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_RESP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_READ_BY_INDEX_RESP",u.prototype.msg_type=167,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint16("index").string("setting",{greedy:!0}),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["index","writeUInt16LE",2]),u.prototype.fieldSpec.push(["setting","string",null]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_DONE",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_READ_BY_INDEX_DONE",y.prototype.msg_type=166,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little"),y.prototype.fieldSpec=[];let h=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_REGISTER",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_REGISTER",h.prototype.msg_type=174,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").string("setting",{greedy:!0}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["setting","string",null]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_SETTINGS_REGISTER_RESP",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_SETTINGS_REGISTER_RESP",f.prototype.msg_type=431,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint8("status").string("setting",{greedy:!0}),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["status","writeUInt8",1]),f.prototype.fieldSpec.push(["setting","string",null]),e.exports={161:i,MsgSettingsSave:i,160:s,MsgSettingsWrite:s,175:n,MsgSettingsWriteResp:n,164:a,MsgSettingsReadReq:a,165:l,MsgSettingsReadResp:l,162:c,MsgSettingsReadByIndexReq:c,167:u,MsgSettingsReadByIndexResp:u,166:y,MsgSettingsReadByIndexDone:y,174:h,MsgSettingsRegister:h,431:f,MsgSettingsRegisterResp:f}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal,p(0).GnssSignalDep,p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_ED25519_SIGNATURE_DEP",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_ED25519_SIGNATURE_DEP",i.prototype.msg_type=3073,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").array("signature",{length:64,type:"uint8"}).array("fingerprint",{length:20,type:"uint8"}).array("signed_messages",{type:"uint32le",readUntil:"eof"}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["signature","array","writeUInt8",function(){return 1},64]),i.prototype.fieldSpec.push(["fingerprint","array","writeUInt8",function(){return 1},20]),i.prototype.fieldSpec.push(["signed_messages","array","writeUInt32LE",function(){return 4},null]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_ED25519_CERTIFICATE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_ED25519_CERTIFICATE",s.prototype.msg_type=3074,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("n_msg").array("fingerprint",{length:20,type:"uint8"}).array("certificate_bytes",{type:"uint8",readUntil:"eof"}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["n_msg","writeUInt8",1]),s.prototype.fieldSpec.push(["fingerprint","array","writeUInt8",function(){return 1},20]),s.prototype.fieldSpec.push(["certificate_bytes","array","writeUInt8",function(){return 1},null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_ED25519_SIGNATURE",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_ED25519_SIGNATURE",n.prototype.msg_type=3075,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint8("stream_counter").uint8("on_demand_counter").array("signature",{length:64,type:"uint8"}).array("fingerprint",{length:20,type:"uint8"}).array("signed_messages",{type:"uint32le",readUntil:"eof"}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["stream_counter","writeUInt8",1]),n.prototype.fieldSpec.push(["on_demand_counter","writeUInt8",1]),n.prototype.fieldSpec.push(["signature","array","writeUInt8",function(){return 1},64]),n.prototype.fieldSpec.push(["fingerprint","array","writeUInt8",function(){return 1},20]),n.prototype.fieldSpec.push(["signed_messages","array","writeUInt32LE",function(){return 4},null]),e.exports={3073:i,MsgEd25519SignatureDep:i,3074:s,MsgEd25519Certificate:s,3075:n,MsgEd25519Signature:n}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="SolutionInputType",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="SolutionInputType",i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint8("sensor_type").uint8("flags"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["sensor_type","writeUInt8",1]),i.prototype.fieldSpec.push(["flags","writeUInt8",1]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_SOLN_META_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_SOLN_META_DEP_A",s.prototype.msg_type=65295,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint16("pdop").uint16("hdop").uint16("vdop").uint8("n_sats").uint16("age_corrections").uint8("alignment_status").uint32("last_used_gnss_pos_tow").uint32("last_used_gnss_vel_tow").array("sol_in",{type:i.prototype.parser,readUntil:"eof"}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),s.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),s.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]),s.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),s.prototype.fieldSpec.push(["age_corrections","writeUInt16LE",2]),s.prototype.fieldSpec.push(["alignment_status","writeUInt8",1]),s.prototype.fieldSpec.push(["last_used_gnss_pos_tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["last_used_gnss_vel_tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["sol_in","array",i.prototype.fieldSpec,function(){return this.fields.array.length},null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_SOLN_META",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_SOLN_META",n.prototype.msg_type=65294,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint32("tow").uint16("pdop").uint16("hdop").uint16("vdop").uint16("age_corrections").uint32("age_gnss").array("sol_in",{type:i.prototype.parser,readUntil:"eof"}),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),n.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["age_corrections","writeUInt16LE",2]),n.prototype.fieldSpec.push(["age_gnss","writeUInt32LE",4]),n.prototype.fieldSpec.push(["sol_in","array",i.prototype.fieldSpec,function(){return this.fields.array.length},null]);let a=function(e,t){return r.call(this,e),this.messageType="GNSSInputType",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="GNSSInputType",a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint8("flags"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["flags","writeUInt8",1]);let l=function(e,t){return r.call(this,e),this.messageType="IMUInputType",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="IMUInputType",l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint8("flags"),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["flags","writeUInt8",1]);let c=function(e,t){return r.call(this,e),this.messageType="OdoInputType",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="OdoInputType",c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint8("flags"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["flags","writeUInt8",1]),e.exports={SolutionInputType:i,65295:s,MsgSolnMetaDepA:s,65294:n,MsgSolnMeta:n,GNSSInputType:a,IMUInputType:l,OdoInputType:c}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase,p(0).GnssSignal),s=(p(0).GnssSignalDep,p(0).GPSTime,p(0).GPSTimeDep,p(0).GPSTimeSec),n=p(0).SvId,a=function(e,t){return r.call(this,e),this.messageType="CodeBiasesContent",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="CodeBiasesContent",a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint8("code").int16("value"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["code","writeUInt8",1]),a.prototype.fieldSpec.push(["value","writeInt16LE",2]);let l=function(e,t){return r.call(this,e),this.messageType="PhaseBiasesContent",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="PhaseBiasesContent",l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint8("code").uint8("integer_indicator").uint8("widelane_integer_indicator").uint8("discontinuity_counter").int32("bias"),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["code","writeUInt8",1]),l.prototype.fieldSpec.push(["integer_indicator","writeUInt8",1]),l.prototype.fieldSpec.push(["widelane_integer_indicator","writeUInt8",1]),l.prototype.fieldSpec.push(["discontinuity_counter","writeUInt8",1]),l.prototype.fieldSpec.push(["bias","writeInt32LE",4]);let c=function(e,t){return r.call(this,e),this.messageType="STECHeader",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="STECHeader",c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint16("tile_set_id").uint16("tile_id").nest("time",{type:s.prototype.parser}).uint8("num_msgs").uint8("seq_num").uint8("update_interval").uint8("iod_atmo"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),c.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),c.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),c.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),c.prototype.fieldSpec.push(["seq_num","writeUInt8",1]),c.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),c.prototype.fieldSpec.push(["iod_atmo","writeUInt8",1]);let u=function(e,t){return r.call(this,e),this.messageType="GriddedCorrectionHeader",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="GriddedCorrectionHeader",u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint16("tile_set_id").uint16("tile_id").nest("time",{type:s.prototype.parser}).uint16("num_msgs").uint16("seq_num").uint8("update_interval").uint8("iod_atmo").uint8("tropo_quality_indicator"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),u.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),u.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),u.prototype.fieldSpec.push(["num_msgs","writeUInt16LE",2]),u.prototype.fieldSpec.push(["seq_num","writeUInt16LE",2]),u.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),u.prototype.fieldSpec.push(["iod_atmo","writeUInt8",1]),u.prototype.fieldSpec.push(["tropo_quality_indicator","writeUInt8",1]);let y=function(e,t){return r.call(this,e),this.messageType="STECSatElement",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="STECSatElement",y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").nest("sv_id",{type:n.prototype.parser}).uint8("stec_quality_indicator").array("stec_coeff",{length:4,type:"int16le"}),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["sv_id",n.prototype.fieldSpec]),y.prototype.fieldSpec.push(["stec_quality_indicator","writeUInt8",1]),y.prototype.fieldSpec.push(["stec_coeff","array","writeInt16LE",function(){return 2},4]);let h=function(e,t){return r.call(this,e),this.messageType="TroposphericDelayCorrectionNoStd",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="TroposphericDelayCorrectionNoStd",h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").int16("hydro").int8("wet"),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["hydro","writeInt16LE",2]),h.prototype.fieldSpec.push(["wet","writeInt8",1]);let f=function(e,t){return r.call(this,e),this.messageType="TroposphericDelayCorrection",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="TroposphericDelayCorrection",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").int16("hydro").int8("wet").uint8("stddev"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["hydro","writeInt16LE",2]),f.prototype.fieldSpec.push(["wet","writeInt8",1]),f.prototype.fieldSpec.push(["stddev","writeUInt8",1]);let d=function(e,t){return r.call(this,e),this.messageType="STECResidualNoStd",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="STECResidualNoStd",d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").nest("sv_id",{type:n.prototype.parser}).int16("residual"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["sv_id",n.prototype.fieldSpec]),d.prototype.fieldSpec.push(["residual","writeInt16LE",2]);let _=function(e,t){return r.call(this,e),this.messageType="STECResidual",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="STECResidual",_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little").nest("sv_id",{type:n.prototype.parser}).int16("residual").uint8("stddev"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["sv_id",n.prototype.fieldSpec]),_.prototype.fieldSpec.push(["residual","writeInt16LE",2]),_.prototype.fieldSpec.push(["stddev","writeUInt8",1]);let S=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_SSR_ORBIT_CLOCK",S.prototype.msg_type=1501,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).nest("sid",{type:i.prototype.parser}).uint8("update_interval").uint8("iod_ssr").uint32("iod").int32("radial").int32("along").int32("cross").int32("dot_radial").int32("dot_along").int32("dot_cross").int32("c0").int32("c1").int32("c2"),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),S.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),S.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),S.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),S.prototype.fieldSpec.push(["iod","writeUInt32LE",4]),S.prototype.fieldSpec.push(["radial","writeInt32LE",4]),S.prototype.fieldSpec.push(["along","writeInt32LE",4]),S.prototype.fieldSpec.push(["cross","writeInt32LE",4]),S.prototype.fieldSpec.push(["dot_radial","writeInt32LE",4]),S.prototype.fieldSpec.push(["dot_along","writeInt32LE",4]),S.prototype.fieldSpec.push(["dot_cross","writeInt32LE",4]),S.prototype.fieldSpec.push(["c0","writeInt32LE",4]),S.prototype.fieldSpec.push(["c1","writeInt32LE",4]),S.prototype.fieldSpec.push(["c2","writeInt32LE",4]);let g=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_CODE_BIASES",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="MSG_SSR_CODE_BIASES",g.prototype.msg_type=1505,g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).nest("sid",{type:i.prototype.parser}).uint8("update_interval").uint8("iod_ssr").array("biases",{type:a.prototype.parser,readUntil:"eof"}),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),g.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),g.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),g.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),g.prototype.fieldSpec.push(["biases","array",a.prototype.fieldSpec,function(){return this.fields.array.length},null]);let w=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_PHASE_BIASES",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="MSG_SSR_PHASE_BIASES",w.prototype.msg_type=1510,w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).nest("sid",{type:i.prototype.parser}).uint8("update_interval").uint8("iod_ssr").uint8("dispersive_bias").uint8("mw_consistency").uint16("yaw").int8("yaw_rate").array("biases",{type:l.prototype.parser,readUntil:"eof"}),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),w.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),w.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),w.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),w.prototype.fieldSpec.push(["dispersive_bias","writeUInt8",1]),w.prototype.fieldSpec.push(["mw_consistency","writeUInt8",1]),w.prototype.fieldSpec.push(["yaw","writeUInt16LE",2]),w.prototype.fieldSpec.push(["yaw_rate","writeInt8",1]),w.prototype.fieldSpec.push(["biases","array",l.prototype.fieldSpec,function(){return this.fields.array.length},null]);let E=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_STEC_CORRECTION_DEP",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(r.prototype)).messageType="MSG_SSR_STEC_CORRECTION_DEP",E.prototype.msg_type=1531,E.prototype.constructor=E,E.prototype.parser=(new o).endianess("little").nest("header",{type:c.prototype.parser}).array("stec_sat_list",{type:y.prototype.parser,readUntil:"eof"}),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["header",c.prototype.fieldSpec]),E.prototype.fieldSpec.push(["stec_sat_list","array",y.prototype.fieldSpec,function(){return this.fields.array.length},null]);let m=function(e,t){return r.call(this,e),this.messageType="BoundsHeader",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(r.prototype)).messageType="BoundsHeader",m.prototype.constructor=m,m.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).uint8("num_msgs").uint8("seq_num").uint8("update_interval").uint8("sol_id"),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),m.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),m.prototype.fieldSpec.push(["seq_num","writeUInt8",1]),m.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),m.prototype.fieldSpec.push(["sol_id","writeUInt8",1]);let b=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_STEC_CORRECTION",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(r.prototype)).messageType="MSG_SSR_STEC_CORRECTION",b.prototype.msg_type=1533,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").nest("header",{type:m.prototype.parser}).uint8("ssr_iod_atmo").uint16("tile_set_id").uint16("tile_id").uint8("n_sats").array("stec_sat_list",{type:y.prototype.parser,length:"n_sats"}),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["header",m.prototype.fieldSpec]),b.prototype.fieldSpec.push(["ssr_iod_atmo","writeUInt8",1]),b.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),b.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),b.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),b.prototype.fieldSpec.push(["stec_sat_list","array",y.prototype.fieldSpec,function(){return this.fields.array.length},"n_sats"]);let I=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(r.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION",I.prototype.msg_type=1532,I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").nest("header",{type:u.prototype.parser}).uint16("index").nest("tropo_delay_correction",{type:f.prototype.parser}).array("stec_residuals",{type:_.prototype.parser,readUntil:"eof"}),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["header",u.prototype.fieldSpec]),I.prototype.fieldSpec.push(["index","writeUInt16LE",2]),I.prototype.fieldSpec.push(["tropo_delay_correction",f.prototype.fieldSpec]),I.prototype.fieldSpec.push(["stec_residuals","array",_.prototype.fieldSpec,function(){return this.fields.array.length},null]);let L=function(e,t){return r.call(this,e),this.messageType="STECSatElementIntegrity",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(r.prototype)).messageType="STECSatElementIntegrity",L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").nest("stec_residual",{type:_.prototype.parser}).uint8("stec_bound_mu").uint8("stec_bound_sig").uint8("stec_bound_mu_dot").uint8("stec_bound_sig_dot"),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["stec_residual",_.prototype.fieldSpec]),L.prototype.fieldSpec.push(["stec_bound_mu","writeUInt8",1]),L.prototype.fieldSpec.push(["stec_bound_sig","writeUInt8",1]),L.prototype.fieldSpec.push(["stec_bound_mu_dot","writeUInt8",1]),L.prototype.fieldSpec.push(["stec_bound_sig_dot","writeUInt8",1]);let T=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION_BOUNDS",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(r.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION_BOUNDS",T.prototype.msg_type=1534,T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").nest("header",{type:m.prototype.parser}).uint8("ssr_iod_atmo").uint16("tile_set_id").uint16("tile_id").uint8("tropo_qi").uint16("grid_point_id").nest("tropo_delay_correction",{type:f.prototype.parser}).uint8("tropo_v_hydro_bound_mu").uint8("tropo_v_hydro_bound_sig").uint8("tropo_v_wet_bound_mu").uint8("tropo_v_wet_bound_sig").uint8("n_sats").array("stec_sat_list",{type:L.prototype.parser,length:"n_sats"}),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["header",m.prototype.fieldSpec]),T.prototype.fieldSpec.push(["ssr_iod_atmo","writeUInt8",1]),T.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),T.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),T.prototype.fieldSpec.push(["tropo_qi","writeUInt8",1]),T.prototype.fieldSpec.push(["grid_point_id","writeUInt16LE",2]),T.prototype.fieldSpec.push(["tropo_delay_correction",f.prototype.fieldSpec]),T.prototype.fieldSpec.push(["tropo_v_hydro_bound_mu","writeUInt8",1]),T.prototype.fieldSpec.push(["tropo_v_hydro_bound_sig","writeUInt8",1]),T.prototype.fieldSpec.push(["tropo_v_wet_bound_mu","writeUInt8",1]),T.prototype.fieldSpec.push(["tropo_v_wet_bound_sig","writeUInt8",1]),T.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),T.prototype.fieldSpec.push(["stec_sat_list","array",L.prototype.fieldSpec,function(){return this.fields.array.length},"n_sats"]);let v=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_TILE_DEFINITION_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(r.prototype)).messageType="MSG_SSR_TILE_DEFINITION_DEP_A",v.prototype.msg_type=1526,v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").uint16("tile_set_id").uint16("tile_id").int16("corner_nw_lat").int16("corner_nw_lon").uint16("spacing_lat").uint16("spacing_lon").uint16("rows").uint16("cols").uint64("bitmask"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),v.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),v.prototype.fieldSpec.push(["corner_nw_lat","writeInt16LE",2]),v.prototype.fieldSpec.push(["corner_nw_lon","writeInt16LE",2]),v.prototype.fieldSpec.push(["spacing_lat","writeUInt16LE",2]),v.prototype.fieldSpec.push(["spacing_lon","writeUInt16LE",2]),v.prototype.fieldSpec.push(["rows","writeUInt16LE",2]),v.prototype.fieldSpec.push(["cols","writeUInt16LE",2]),v.prototype.fieldSpec.push(["bitmask","writeUInt64LE",8]);let U=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_TILE_DEFINITION_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(r.prototype)).messageType="MSG_SSR_TILE_DEFINITION_DEP_B",U.prototype.msg_type=1527,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").uint8("ssr_sol_id").uint16("tile_set_id").uint16("tile_id").int16("corner_nw_lat").int16("corner_nw_lon").uint16("spacing_lat").uint16("spacing_lon").uint16("rows").uint16("cols").uint64("bitmask"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["ssr_sol_id","writeUInt8",1]),U.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),U.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),U.prototype.fieldSpec.push(["corner_nw_lat","writeInt16LE",2]),U.prototype.fieldSpec.push(["corner_nw_lon","writeInt16LE",2]),U.prototype.fieldSpec.push(["spacing_lat","writeUInt16LE",2]),U.prototype.fieldSpec.push(["spacing_lon","writeUInt16LE",2]),U.prototype.fieldSpec.push(["rows","writeUInt16LE",2]),U.prototype.fieldSpec.push(["cols","writeUInt16LE",2]),U.prototype.fieldSpec.push(["bitmask","writeUInt64LE",8]);let M=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_TILE_DEFINITION",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(r.prototype)).messageType="MSG_SSR_TILE_DEFINITION",M.prototype.msg_type=1528,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).uint8("update_interval").uint8("sol_id").uint8("iod_atmo").uint16("tile_set_id").uint16("tile_id").int16("corner_nw_lat").int16("corner_nw_lon").uint16("spacing_lat").uint16("spacing_lon").uint16("rows").uint16("cols").uint64("bitmask"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),M.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),M.prototype.fieldSpec.push(["sol_id","writeUInt8",1]),M.prototype.fieldSpec.push(["iod_atmo","writeUInt8",1]),M.prototype.fieldSpec.push(["tile_set_id","writeUInt16LE",2]),M.prototype.fieldSpec.push(["tile_id","writeUInt16LE",2]),M.prototype.fieldSpec.push(["corner_nw_lat","writeInt16LE",2]),M.prototype.fieldSpec.push(["corner_nw_lon","writeInt16LE",2]),M.prototype.fieldSpec.push(["spacing_lat","writeUInt16LE",2]),M.prototype.fieldSpec.push(["spacing_lon","writeUInt16LE",2]),M.prototype.fieldSpec.push(["rows","writeUInt16LE",2]),M.prototype.fieldSpec.push(["cols","writeUInt16LE",2]),M.prototype.fieldSpec.push(["bitmask","writeUInt64LE",8]);let D=function(e,t){return r.call(this,e),this.messageType="SatelliteAPC",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(r.prototype)).messageType="SatelliteAPC",D.prototype.constructor=D,D.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).uint8("sat_info").uint16("svn").array("pco",{length:3,type:"int16le"}).array("pcv",{length:21,type:"int8"}),D.prototype.fieldSpec=[],D.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),D.prototype.fieldSpec.push(["sat_info","writeUInt8",1]),D.prototype.fieldSpec.push(["svn","writeUInt16LE",2]),D.prototype.fieldSpec.push(["pco","array","writeInt16LE",function(){return 2},3]),D.prototype.fieldSpec.push(["pcv","array","writeInt8",function(){return 1},21]);let O=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_SATELLITE_APC_DEP",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(r.prototype)).messageType="MSG_SSR_SATELLITE_APC_DEP",O.prototype.msg_type=1540,O.prototype.constructor=O,O.prototype.parser=(new o).endianess("little").array("apc",{type:D.prototype.parser,readUntil:"eof"}),O.prototype.fieldSpec=[],O.prototype.fieldSpec.push(["apc","array",D.prototype.fieldSpec,function(){return this.fields.array.length},null]);let G=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_SATELLITE_APC",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(r.prototype)).messageType="MSG_SSR_SATELLITE_APC",G.prototype.msg_type=1541,G.prototype.constructor=G,G.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).uint8("update_interval").uint8("sol_id").uint8("iod_ssr").array("apc",{type:D.prototype.parser,readUntil:"eof"}),G.prototype.fieldSpec=[],G.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),G.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),G.prototype.fieldSpec.push(["sol_id","writeUInt8",1]),G.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),G.prototype.fieldSpec.push(["apc","array",D.prototype.fieldSpec,function(){return this.fields.array.length},null]);let A=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(r.prototype)).messageType="MSG_SSR_ORBIT_CLOCK_DEP_A",A.prototype.msg_type=1500,A.prototype.constructor=A,A.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).nest("sid",{type:i.prototype.parser}).uint8("update_interval").uint8("iod_ssr").uint8("iod").int32("radial").int32("along").int32("cross").int32("dot_radial").int32("dot_along").int32("dot_cross").int32("c0").int32("c1").int32("c2"),A.prototype.fieldSpec=[],A.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),A.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),A.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),A.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),A.prototype.fieldSpec.push(["iod","writeUInt8",1]),A.prototype.fieldSpec.push(["radial","writeInt32LE",4]),A.prototype.fieldSpec.push(["along","writeInt32LE",4]),A.prototype.fieldSpec.push(["cross","writeInt32LE",4]),A.prototype.fieldSpec.push(["dot_radial","writeInt32LE",4]),A.prototype.fieldSpec.push(["dot_along","writeInt32LE",4]),A.prototype.fieldSpec.push(["dot_cross","writeInt32LE",4]),A.prototype.fieldSpec.push(["c0","writeInt32LE",4]),A.prototype.fieldSpec.push(["c1","writeInt32LE",4]),A.prototype.fieldSpec.push(["c2","writeInt32LE",4]);let C=function(e,t){return r.call(this,e),this.messageType="STECHeaderDepA",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(r.prototype)).messageType="STECHeaderDepA",C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).uint8("num_msgs").uint8("seq_num").uint8("update_interval").uint8("iod_atmo"),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),C.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),C.prototype.fieldSpec.push(["seq_num","writeUInt8",1]),C.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),C.prototype.fieldSpec.push(["iod_atmo","writeUInt8",1]);let R=function(e,t){return r.call(this,e),this.messageType="GriddedCorrectionHeaderDepA",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(r.prototype)).messageType="GriddedCorrectionHeaderDepA",R.prototype.constructor=R,R.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).uint16("num_msgs").uint16("seq_num").uint8("update_interval").uint8("iod_atmo").uint8("tropo_quality_indicator"),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),R.prototype.fieldSpec.push(["num_msgs","writeUInt16LE",2]),R.prototype.fieldSpec.push(["seq_num","writeUInt16LE",2]),R.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),R.prototype.fieldSpec.push(["iod_atmo","writeUInt8",1]),R.prototype.fieldSpec.push(["tropo_quality_indicator","writeUInt8",1]);let P=function(e,t){return r.call(this,e),this.messageType="GridDefinitionHeaderDepA",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(r.prototype)).messageType="GridDefinitionHeaderDepA",P.prototype.constructor=P,P.prototype.parser=(new o).endianess("little").uint8("region_size_inverse").uint16("area_width").uint16("lat_nw_corner_enc").uint16("lon_nw_corner_enc").uint8("num_msgs").uint8("seq_num"),P.prototype.fieldSpec=[],P.prototype.fieldSpec.push(["region_size_inverse","writeUInt8",1]),P.prototype.fieldSpec.push(["area_width","writeUInt16LE",2]),P.prototype.fieldSpec.push(["lat_nw_corner_enc","writeUInt16LE",2]),P.prototype.fieldSpec.push(["lon_nw_corner_enc","writeUInt16LE",2]),P.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),P.prototype.fieldSpec.push(["seq_num","writeUInt8",1]);let N=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_STEC_CORRECTION_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(r.prototype)).messageType="MSG_SSR_STEC_CORRECTION_DEP_A",N.prototype.msg_type=1515,N.prototype.constructor=N,N.prototype.parser=(new o).endianess("little").nest("header",{type:C.prototype.parser}).array("stec_sat_list",{type:y.prototype.parser,readUntil:"eof"}),N.prototype.fieldSpec=[],N.prototype.fieldSpec.push(["header",C.prototype.fieldSpec]),N.prototype.fieldSpec.push(["stec_sat_list","array",y.prototype.fieldSpec,function(){return this.fields.array.length},null]);let j=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(r.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A",j.prototype.msg_type=1520,j.prototype.constructor=j,j.prototype.parser=(new o).endianess("little").nest("header",{type:R.prototype.parser}).uint16("index").nest("tropo_delay_correction",{type:h.prototype.parser}).array("stec_residuals",{type:d.prototype.parser,readUntil:"eof"}),j.prototype.fieldSpec=[],j.prototype.fieldSpec.push(["header",R.prototype.fieldSpec]),j.prototype.fieldSpec.push(["index","writeUInt16LE",2]),j.prototype.fieldSpec.push(["tropo_delay_correction",h.prototype.fieldSpec]),j.prototype.fieldSpec.push(["stec_residuals","array",d.prototype.fieldSpec,function(){return this.fields.array.length},null]);let x=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(x.prototype=Object.create(r.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION_DEP_A",x.prototype.msg_type=1530,x.prototype.constructor=x,x.prototype.parser=(new o).endianess("little").nest("header",{type:R.prototype.parser}).uint16("index").nest("tropo_delay_correction",{type:f.prototype.parser}).array("stec_residuals",{type:_.prototype.parser,readUntil:"eof"}),x.prototype.fieldSpec=[],x.prototype.fieldSpec.push(["header",R.prototype.fieldSpec]),x.prototype.fieldSpec.push(["index","writeUInt16LE",2]),x.prototype.fieldSpec.push(["tropo_delay_correction",f.prototype.fieldSpec]),x.prototype.fieldSpec.push(["stec_residuals","array",_.prototype.fieldSpec,function(){return this.fields.array.length},null]);let F=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_GRID_DEFINITION_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(F.prototype=Object.create(r.prototype)).messageType="MSG_SSR_GRID_DEFINITION_DEP_A",F.prototype.msg_type=1525,F.prototype.constructor=F,F.prototype.parser=(new o).endianess("little").nest("header",{type:P.prototype.parser}).array("rle_list",{type:"uint8",readUntil:"eof"}),F.prototype.fieldSpec=[],F.prototype.fieldSpec.push(["header",P.prototype.fieldSpec]),F.prototype.fieldSpec.push(["rle_list","array","writeUInt8",function(){return 1},null]);let k=function(e,t){return r.call(this,e),this.messageType="OrbitClockBound",this.fields=t||this.parser.parse(e.payload),this};(k.prototype=Object.create(r.prototype)).messageType="OrbitClockBound",k.prototype.constructor=k,k.prototype.parser=(new o).endianess("little").uint8("sat_id").uint8("orb_radial_bound_mu").uint8("orb_along_bound_mu").uint8("orb_cross_bound_mu").uint8("orb_radial_bound_sig").uint8("orb_along_bound_sig").uint8("orb_cross_bound_sig").uint8("clock_bound_mu").uint8("clock_bound_sig"),k.prototype.fieldSpec=[],k.prototype.fieldSpec.push(["sat_id","writeUInt8",1]),k.prototype.fieldSpec.push(["orb_radial_bound_mu","writeUInt8",1]),k.prototype.fieldSpec.push(["orb_along_bound_mu","writeUInt8",1]),k.prototype.fieldSpec.push(["orb_cross_bound_mu","writeUInt8",1]),k.prototype.fieldSpec.push(["orb_radial_bound_sig","writeUInt8",1]),k.prototype.fieldSpec.push(["orb_along_bound_sig","writeUInt8",1]),k.prototype.fieldSpec.push(["orb_cross_bound_sig","writeUInt8",1]),k.prototype.fieldSpec.push(["clock_bound_mu","writeUInt8",1]),k.prototype.fieldSpec.push(["clock_bound_sig","writeUInt8",1]);let B=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK_BOUNDS",this.fields=t||this.parser.parse(e.payload),this};(B.prototype=Object.create(r.prototype)).messageType="MSG_SSR_ORBIT_CLOCK_BOUNDS",B.prototype.msg_type=1502,B.prototype.constructor=B,B.prototype.parser=(new o).endianess("little").nest("header",{type:m.prototype.parser}).uint8("ssr_iod").uint8("const_id").uint8("n_sats").array("orbit_clock_bounds",{type:k.prototype.parser,length:"n_sats"}),B.prototype.fieldSpec=[],B.prototype.fieldSpec.push(["header",m.prototype.fieldSpec]),B.prototype.fieldSpec.push(["ssr_iod","writeUInt8",1]),B.prototype.fieldSpec.push(["const_id","writeUInt8",1]),B.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),B.prototype.fieldSpec.push(["orbit_clock_bounds","array",k.prototype.fieldSpec,function(){return this.fields.array.length},"n_sats"]);let q=function(e,t){return r.call(this,e),this.messageType="CodePhaseBiasesSatSig",this.fields=t||this.parser.parse(e.payload),this};(q.prototype=Object.create(r.prototype)).messageType="CodePhaseBiasesSatSig",q.prototype.constructor=q,q.prototype.parser=(new o).endianess("little").uint8("sat_id").uint8("signal_id").uint8("code_bias_bound_mu").uint8("code_bias_bound_sig").uint8("phase_bias_bound_mu").uint8("phase_bias_bound_sig"),q.prototype.fieldSpec=[],q.prototype.fieldSpec.push(["sat_id","writeUInt8",1]),q.prototype.fieldSpec.push(["signal_id","writeUInt8",1]),q.prototype.fieldSpec.push(["code_bias_bound_mu","writeUInt8",1]),q.prototype.fieldSpec.push(["code_bias_bound_sig","writeUInt8",1]),q.prototype.fieldSpec.push(["phase_bias_bound_mu","writeUInt8",1]),q.prototype.fieldSpec.push(["phase_bias_bound_sig","writeUInt8",1]);let z=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_CODE_PHASE_BIASES_BOUNDS",this.fields=t||this.parser.parse(e.payload),this};(z.prototype=Object.create(r.prototype)).messageType="MSG_SSR_CODE_PHASE_BIASES_BOUNDS",z.prototype.msg_type=1516,z.prototype.constructor=z,z.prototype.parser=(new o).endianess("little").nest("header",{type:m.prototype.parser}).uint8("ssr_iod").uint8("const_id").uint8("n_sats_signals").array("satellites_signals",{type:q.prototype.parser,length:"n_sats_signals"}),z.prototype.fieldSpec=[],z.prototype.fieldSpec.push(["header",m.prototype.fieldSpec]),z.prototype.fieldSpec.push(["ssr_iod","writeUInt8",1]),z.prototype.fieldSpec.push(["const_id","writeUInt8",1]),z.prototype.fieldSpec.push(["n_sats_signals","writeUInt8",1]),z.prototype.fieldSpec.push(["satellites_signals","array",q.prototype.fieldSpec,function(){return this.fields.array.length},"n_sats_signals"]);let H=function(e,t){return r.call(this,e),this.messageType="OrbitClockBoundDegradation",this.fields=t||this.parser.parse(e.payload),this};(H.prototype=Object.create(r.prototype)).messageType="OrbitClockBoundDegradation",H.prototype.constructor=H,H.prototype.parser=(new o).endianess("little").uint8("orb_radial_bound_mu_dot").uint8("orb_along_bound_mu_dot").uint8("orb_cross_bound_mu_dot").uint8("orb_radial_bound_sig_dot").uint8("orb_along_bound_sig_dot").uint8("orb_cross_bound_sig_dot").uint8("clock_bound_mu_dot").uint8("clock_bound_sig_dot"),H.prototype.fieldSpec=[],H.prototype.fieldSpec.push(["orb_radial_bound_mu_dot","writeUInt8",1]),H.prototype.fieldSpec.push(["orb_along_bound_mu_dot","writeUInt8",1]),H.prototype.fieldSpec.push(["orb_cross_bound_mu_dot","writeUInt8",1]),H.prototype.fieldSpec.push(["orb_radial_bound_sig_dot","writeUInt8",1]),H.prototype.fieldSpec.push(["orb_along_bound_sig_dot","writeUInt8",1]),H.prototype.fieldSpec.push(["orb_cross_bound_sig_dot","writeUInt8",1]),H.prototype.fieldSpec.push(["clock_bound_mu_dot","writeUInt8",1]),H.prototype.fieldSpec.push(["clock_bound_sig_dot","writeUInt8",1]);let V=function(e,t){return r.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK_BOUNDS_DEGRADATION",this.fields=t||this.parser.parse(e.payload),this};(V.prototype=Object.create(r.prototype)).messageType="MSG_SSR_ORBIT_CLOCK_BOUNDS_DEGRADATION",V.prototype.msg_type=1503,V.prototype.constructor=V,V.prototype.parser=(new o).endianess("little").nest("header",{type:m.prototype.parser}).uint8("ssr_iod").uint8("const_id").uint64("sat_bitmask").nest("orbit_clock_bounds_degradation",{type:H.prototype.parser}),V.prototype.fieldSpec=[],V.prototype.fieldSpec.push(["header",m.prototype.fieldSpec]),V.prototype.fieldSpec.push(["ssr_iod","writeUInt8",1]),V.prototype.fieldSpec.push(["const_id","writeUInt8",1]),V.prototype.fieldSpec.push(["sat_bitmask","writeUInt64LE",8]),V.prototype.fieldSpec.push(["orbit_clock_bounds_degradation",H.prototype.fieldSpec]),e.exports={CodeBiasesContent:a,PhaseBiasesContent:l,STECHeader:c,GriddedCorrectionHeader:u,STECSatElement:y,TroposphericDelayCorrectionNoStd:h,TroposphericDelayCorrection:f,STECResidualNoStd:d,STECResidual:_,1501:S,MsgSsrOrbitClock:S,1505:g,MsgSsrCodeBiases:g,1510:w,MsgSsrPhaseBiases:w,1531:E,MsgSsrStecCorrectionDep:E,BoundsHeader:m,1533:b,MsgSsrStecCorrection:b,1532:I,MsgSsrGriddedCorrection:I,STECSatElementIntegrity:L,1534:T,MsgSsrGriddedCorrectionBounds:T,1526:v,MsgSsrTileDefinitionDepA:v,1527:U,MsgSsrTileDefinitionDepB:U,1528:M,MsgSsrTileDefinition:M,SatelliteAPC:D,1540:O,MsgSsrSatelliteApcDep:O,1541:G,MsgSsrSatelliteApc:G,1500:A,MsgSsrOrbitClockDepA:A,STECHeaderDepA:C,GriddedCorrectionHeaderDepA:R,GridDefinitionHeaderDepA:P,1515:N,MsgSsrStecCorrectionDepA:N,1520:j,MsgSsrGriddedCorrectionNoStdDepA:j,1530:x,MsgSsrGriddedCorrectionDepA:x,1525:F,MsgSsrGridDefinitionDepA:F,OrbitClockBound:k,1502:B,MsgSsrOrbitClockBounds:B,CodePhaseBiasesSatSig:q,1516:z,MsgSsrCodePhaseBiasesBounds:z,OrbitClockBoundDegradation:H,1503:V,MsgSsrOrbitClockBoundsDegradation:V}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_STARTUP",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_STARTUP",i.prototype.msg_type=65280,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint8("cause").uint8("startup_type").uint16("reserved"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["cause","writeUInt8",1]),i.prototype.fieldSpec.push(["startup_type","writeUInt8",1]),i.prototype.fieldSpec.push(["reserved","writeUInt16LE",2]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_DGNSS_STATUS",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_DGNSS_STATUS",s.prototype.msg_type=65282,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("flags").uint16("latency").uint8("num_signals").string("source",{greedy:!0}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["flags","writeUInt8",1]),s.prototype.fieldSpec.push(["latency","writeUInt16LE",2]),s.prototype.fieldSpec.push(["num_signals","writeUInt8",1]),s.prototype.fieldSpec.push(["source","string",null]);let n=function(e,t){return r.call(this,e),this.messageType="MSG_HEARTBEAT",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(r.prototype)).messageType="MSG_HEARTBEAT",n.prototype.msg_type=65535,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint32("flags"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let a=function(e,t){return r.call(this,e),this.messageType="SubSystemReport",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(r.prototype)).messageType="SubSystemReport",a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint16("component").uint8("generic").uint8("specific"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["component","writeUInt16LE",2]),a.prototype.fieldSpec.push(["generic","writeUInt8",1]),a.prototype.fieldSpec.push(["specific","writeUInt8",1]);let l=function(e,t){return r.call(this,e),this.messageType="MSG_STATUS_REPORT",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(r.prototype)).messageType="MSG_STATUS_REPORT",l.prototype.msg_type=65534,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint16("reporting_system").uint16("sbp_version").uint32("sequence").uint32("uptime").array("status",{type:a.prototype.parser,readUntil:"eof"}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["reporting_system","writeUInt16LE",2]),l.prototype.fieldSpec.push(["sbp_version","writeUInt16LE",2]),l.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),l.prototype.fieldSpec.push(["uptime","writeUInt32LE",4]),l.prototype.fieldSpec.push(["status","array",a.prototype.fieldSpec,function(){return this.fields.array.length},null]);let c=function(e,t){return r.call(this,e),this.messageType="StatusJournalItem",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(r.prototype)).messageType="StatusJournalItem",c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint32("uptime").nest("report",{type:a.prototype.parser}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["uptime","writeUInt32LE",4]),c.prototype.fieldSpec.push(["report",a.prototype.fieldSpec]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_STATUS_JOURNAL",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_STATUS_JOURNAL",u.prototype.msg_type=65533,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint16("reporting_system").uint16("sbp_version").uint32("total_status_reports").uint8("sequence_descriptor").array("journal",{type:c.prototype.parser,readUntil:"eof"}),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["reporting_system","writeUInt16LE",2]),u.prototype.fieldSpec.push(["sbp_version","writeUInt16LE",2]),u.prototype.fieldSpec.push(["total_status_reports","writeUInt32LE",4]),u.prototype.fieldSpec.push(["sequence_descriptor","writeUInt8",1]),u.prototype.fieldSpec.push(["journal","array",c.prototype.fieldSpec,function(){return this.fields.array.length},null]);let y=function(e,t){return r.call(this,e),this.messageType="MSG_INS_STATUS",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="MSG_INS_STATUS",y.prototype.msg_type=65283,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint32("flags"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_CSAC_TELEMETRY",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_CSAC_TELEMETRY",h.prototype.msg_type=65284,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint8("id").string("telemetry",{greedy:!0}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["id","writeUInt8",1]),h.prototype.fieldSpec.push(["telemetry","string",null]);let f=function(e,t){return r.call(this,e),this.messageType="MSG_CSAC_TELEMETRY_LABELS",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MSG_CSAC_TELEMETRY_LABELS",f.prototype.msg_type=65285,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint8("id").string("telemetry_labels",{greedy:!0}),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["id","writeUInt8",1]),f.prototype.fieldSpec.push(["telemetry_labels","string",null]);let d=function(e,t){return r.call(this,e),this.messageType="MSG_INS_UPDATES",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_INS_UPDATES",d.prototype.msg_type=65286,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").uint32("tow").uint8("gnsspos").uint8("gnssvel").uint8("wheelticks").uint8("speed").uint8("nhc").uint8("zerovel"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),d.prototype.fieldSpec.push(["gnsspos","writeUInt8",1]),d.prototype.fieldSpec.push(["gnssvel","writeUInt8",1]),d.prototype.fieldSpec.push(["wheelticks","writeUInt8",1]),d.prototype.fieldSpec.push(["speed","writeUInt8",1]),d.prototype.fieldSpec.push(["nhc","writeUInt8",1]),d.prototype.fieldSpec.push(["zerovel","writeUInt8",1]);let _=function(e,t){return r.call(this,e),this.messageType="MSG_GNSS_TIME_OFFSET",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="MSG_GNSS_TIME_OFFSET",_.prototype.msg_type=65287,_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little").int16("weeks").int32("milliseconds").int16("microseconds").uint8("flags"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["weeks","writeInt16LE",2]),_.prototype.fieldSpec.push(["milliseconds","writeInt32LE",4]),_.prototype.fieldSpec.push(["microseconds","writeInt16LE",2]),_.prototype.fieldSpec.push(["flags","writeUInt8",1]);let S=function(e,t){return r.call(this,e),this.messageType="MSG_PPS_TIME",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_PPS_TIME",S.prototype.msg_type=65288,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").uint64("time").uint8("flags"),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["time","writeUInt64LE",8]),S.prototype.fieldSpec.push(["flags","writeUInt8",1]);let g=function(e,t){return r.call(this,e),this.messageType="MSG_SENSOR_AID_EVENT",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="MSG_SENSOR_AID_EVENT",g.prototype.msg_type=65289,g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").uint32("time").uint8("sensor_type").uint16("sensor_id").uint8("sensor_state").uint8("n_available_meas").uint8("n_attempted_meas").uint8("n_accepted_meas").uint32("flags"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["time","writeUInt32LE",4]),g.prototype.fieldSpec.push(["sensor_type","writeUInt8",1]),g.prototype.fieldSpec.push(["sensor_id","writeUInt16LE",2]),g.prototype.fieldSpec.push(["sensor_state","writeUInt8",1]),g.prototype.fieldSpec.push(["n_available_meas","writeUInt8",1]),g.prototype.fieldSpec.push(["n_attempted_meas","writeUInt8",1]),g.prototype.fieldSpec.push(["n_accepted_meas","writeUInt8",1]),g.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);let w=function(e,t){return r.call(this,e),this.messageType="MSG_GROUP_META",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="MSG_GROUP_META",w.prototype.msg_type=65290,w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").uint8("group_id").uint8("flags").uint8("n_group_msgs").array("group_msgs",{type:"uint16le",length:"n_group_msgs"}),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["group_id","writeUInt8",1]),w.prototype.fieldSpec.push(["flags","writeUInt8",1]),w.prototype.fieldSpec.push(["n_group_msgs","writeUInt8",1]),w.prototype.fieldSpec.push(["group_msgs","array","writeUInt16LE",function(){return 2},"n_group_msgs"]),e.exports={65280:i,MsgStartup:i,65282:s,MsgDgnssStatus:s,65535:n,MsgHeartbeat:n,SubSystemReport:a,65534:l,MsgStatusReport:l,StatusJournalItem:c,65533:u,MsgStatusJournal:u,65283:y,MsgInsStatus:y,65284:h,MsgCsacTelemetry:h,65285:f,MsgCsacTelemetryLabels:f,65286:d,MsgInsUpdates:d,65287:_,MsgGnssTimeOffset:_,65288:S,MsgPpsTime:S,65289:g,MsgSensorAidEvent:g,65290:w,MsgGroupMeta:w}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,p(0).CarrierPhase),s=p(0).GnssSignal,n=p(0).GnssSignalDep,a=p(0).GPSTime,l=p(0).GPSTimeDep,c=(p(0).GPSTimeSec,p(0).SvId,function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_STATE_DETAILED_DEP_A",this.fields=t||this.parser.parse(e.payload),this});(c.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_STATE_DETAILED_DEP_A",c.prototype.msg_type=33,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint64("recv_time").nest("tot",{type:a.prototype.parser}).uint32("P").uint16("P_std").nest("L",{type:i.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:s.prototype.parser}).int32("doppler").uint16("doppler_std").uint32("uptime").int16("clock_offset").int16("clock_drift").uint16("corr_spacing").int8("acceleration").uint8("sync_flags").uint8("tow_flags").uint8("track_flags").uint8("nav_flags").uint8("pset_flags").uint8("misc_flags"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["recv_time","writeUInt64LE",8]),c.prototype.fieldSpec.push(["tot",a.prototype.fieldSpec]),c.prototype.fieldSpec.push(["P","writeUInt32LE",4]),c.prototype.fieldSpec.push(["P_std","writeUInt16LE",2]),c.prototype.fieldSpec.push(["L",i.prototype.fieldSpec]),c.prototype.fieldSpec.push(["cn0","writeUInt8",1]),c.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),c.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),c.prototype.fieldSpec.push(["doppler","writeInt32LE",4]),c.prototype.fieldSpec.push(["doppler_std","writeUInt16LE",2]),c.prototype.fieldSpec.push(["uptime","writeUInt32LE",4]),c.prototype.fieldSpec.push(["clock_offset","writeInt16LE",2]),c.prototype.fieldSpec.push(["clock_drift","writeInt16LE",2]),c.prototype.fieldSpec.push(["corr_spacing","writeUInt16LE",2]),c.prototype.fieldSpec.push(["acceleration","writeInt8",1]),c.prototype.fieldSpec.push(["sync_flags","writeUInt8",1]),c.prototype.fieldSpec.push(["tow_flags","writeUInt8",1]),c.prototype.fieldSpec.push(["track_flags","writeUInt8",1]),c.prototype.fieldSpec.push(["nav_flags","writeUInt8",1]),c.prototype.fieldSpec.push(["pset_flags","writeUInt8",1]),c.prototype.fieldSpec.push(["misc_flags","writeUInt8",1]);let u=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_STATE_DETAILED_DEP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_STATE_DETAILED_DEP",u.prototype.msg_type=17,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint64("recv_time").nest("tot",{type:l.prototype.parser}).uint32("P").uint16("P_std").nest("L",{type:i.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:n.prototype.parser}).int32("doppler").uint16("doppler_std").uint32("uptime").int16("clock_offset").int16("clock_drift").uint16("corr_spacing").int8("acceleration").uint8("sync_flags").uint8("tow_flags").uint8("track_flags").uint8("nav_flags").uint8("pset_flags").uint8("misc_flags"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["recv_time","writeUInt64LE",8]),u.prototype.fieldSpec.push(["tot",l.prototype.fieldSpec]),u.prototype.fieldSpec.push(["P","writeUInt32LE",4]),u.prototype.fieldSpec.push(["P_std","writeUInt16LE",2]),u.prototype.fieldSpec.push(["L",i.prototype.fieldSpec]),u.prototype.fieldSpec.push(["cn0","writeUInt8",1]),u.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),u.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),u.prototype.fieldSpec.push(["doppler","writeInt32LE",4]),u.prototype.fieldSpec.push(["doppler_std","writeUInt16LE",2]),u.prototype.fieldSpec.push(["uptime","writeUInt32LE",4]),u.prototype.fieldSpec.push(["clock_offset","writeInt16LE",2]),u.prototype.fieldSpec.push(["clock_drift","writeInt16LE",2]),u.prototype.fieldSpec.push(["corr_spacing","writeUInt16LE",2]),u.prototype.fieldSpec.push(["acceleration","writeInt8",1]),u.prototype.fieldSpec.push(["sync_flags","writeUInt8",1]),u.prototype.fieldSpec.push(["tow_flags","writeUInt8",1]),u.prototype.fieldSpec.push(["track_flags","writeUInt8",1]),u.prototype.fieldSpec.push(["nav_flags","writeUInt8",1]),u.prototype.fieldSpec.push(["pset_flags","writeUInt8",1]),u.prototype.fieldSpec.push(["misc_flags","writeUInt8",1]);let y=function(e,t){return r.call(this,e),this.messageType="TrackingChannelState",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(r.prototype)).messageType="TrackingChannelState",y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).uint8("fcn").uint8("cn0"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),y.prototype.fieldSpec.push(["fcn","writeUInt8",1]),y.prototype.fieldSpec.push(["cn0","writeUInt8",1]);let h=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_STATE",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_STATE",h.prototype.msg_type=65,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").array("states",{type:y.prototype.parser,readUntil:"eof"}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["states","array",y.prototype.fieldSpec,function(){return this.fields.array.length},null]);let f=function(e,t){return r.call(this,e),this.messageType="MeasurementState",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(r.prototype)).messageType="MeasurementState",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").nest("mesid",{type:s.prototype.parser}).uint8("cn0"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["mesid",s.prototype.fieldSpec]),f.prototype.fieldSpec.push(["cn0","writeUInt8",1]);let d=function(e,t){return r.call(this,e),this.messageType="MSG_MEASUREMENT_STATE",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(r.prototype)).messageType="MSG_MEASUREMENT_STATE",d.prototype.msg_type=97,d.prototype.constructor=d,d.prototype.parser=(new o).endianess("little").array("states",{type:f.prototype.parser,readUntil:"eof"}),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["states","array",f.prototype.fieldSpec,function(){return this.fields.array.length},null]);let _=function(e,t){return r.call(this,e),this.messageType="TrackingChannelCorrelation",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(r.prototype)).messageType="TrackingChannelCorrelation",_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little").int16("I").int16("Q"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["I","writeInt16LE",2]),_.prototype.fieldSpec.push(["Q","writeInt16LE",2]);let S=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_IQ",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_IQ",S.prototype.msg_type=45,S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").uint8("channel").nest("sid",{type:s.prototype.parser}).array("corrs",{length:3,type:_.prototype.parser}),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["channel","writeUInt8",1]),S.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),S.prototype.fieldSpec.push(["corrs","array",_.prototype.fieldSpec,function(){return this.fields.array.length},3]);let g=function(e,t){return r.call(this,e),this.messageType="TrackingChannelCorrelationDep",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(r.prototype)).messageType="TrackingChannelCorrelationDep",g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").int32("I").int32("Q"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["I","writeInt32LE",4]),g.prototype.fieldSpec.push(["Q","writeInt32LE",4]);let w=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_IQ_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_IQ_DEP_B",w.prototype.msg_type=44,w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").uint8("channel").nest("sid",{type:s.prototype.parser}).array("corrs",{length:3,type:g.prototype.parser}),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["channel","writeUInt8",1]),w.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),w.prototype.fieldSpec.push(["corrs","array",g.prototype.fieldSpec,function(){return this.fields.array.length},3]);let E=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_IQ_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_IQ_DEP_A",E.prototype.msg_type=28,E.prototype.constructor=E,E.prototype.parser=(new o).endianess("little").uint8("channel").nest("sid",{type:n.prototype.parser}).array("corrs",{length:3,type:g.prototype.parser}),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["channel","writeUInt8",1]),E.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),E.prototype.fieldSpec.push(["corrs","array",g.prototype.fieldSpec,function(){return this.fields.array.length},3]);let m=function(e,t){return r.call(this,e),this.messageType="TrackingChannelStateDepA",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(r.prototype)).messageType="TrackingChannelStateDepA",m.prototype.constructor=m,m.prototype.parser=(new o).endianess("little").uint8("state").uint8("prn").floatle("cn0"),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["state","writeUInt8",1]),m.prototype.fieldSpec.push(["prn","writeUInt8",1]),m.prototype.fieldSpec.push(["cn0","writeFloatLE",4]);let b=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_STATE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_STATE_DEP_A",b.prototype.msg_type=22,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").array("states",{type:m.prototype.parser,readUntil:"eof"}),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["states","array",m.prototype.fieldSpec,function(){return this.fields.array.length},null]);let I=function(e,t){return r.call(this,e),this.messageType="TrackingChannelStateDepB",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(r.prototype)).messageType="TrackingChannelStateDepB",I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").uint8("state").nest("sid",{type:n.prototype.parser}).floatle("cn0"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["state","writeUInt8",1]),I.prototype.fieldSpec.push(["sid",n.prototype.fieldSpec]),I.prototype.fieldSpec.push(["cn0","writeFloatLE",4]);let L=function(e,t){return r.call(this,e),this.messageType="MSG_TRACKING_STATE_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(r.prototype)).messageType="MSG_TRACKING_STATE_DEP_B",L.prototype.msg_type=19,L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").array("states",{type:I.prototype.parser,readUntil:"eof"}),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["states","array",I.prototype.fieldSpec,function(){return this.fields.array.length},null]),e.exports={33:c,MsgTrackingStateDetailedDepA:c,17:u,MsgTrackingStateDetailedDep:u,TrackingChannelState:y,65:h,MsgTrackingState:h,MeasurementState:f,97:d,MsgMeasurementState:d,TrackingChannelCorrelation:_,45:S,MsgTrackingIq:S,TrackingChannelCorrelationDep:g,44:w,MsgTrackingIqDepB:w,28:E,MsgTrackingIqDepA:E,TrackingChannelStateDepA:m,22:b,MsgTrackingStateDepA:b,TrackingChannelStateDepB:I,19:L,MsgTrackingStateDepB:L}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_USER_DATA",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_USER_DATA",i.prototype.msg_type=2048,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").array("contents",{type:"uint8",readUntil:"eof"}),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["contents","array","writeUInt8",function(){return 1},null]),e.exports={2048:i,MsgUserData:i}},function(e,t,p){let r=p(2),o=p(4),i=(p(3),p(1).UINT64,function(e,t){return r.call(this,e),this.messageType="MSG_ODOMETRY",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(r.prototype)).messageType="MSG_ODOMETRY",i.prototype.msg_type=2307,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little").uint32("tow").int32("velocity").uint8("flags"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),i.prototype.fieldSpec.push(["velocity","writeInt32LE",4]),i.prototype.fieldSpec.push(["flags","writeUInt8",1]);let s=function(e,t){return r.call(this,e),this.messageType="MSG_WHEELTICK",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(r.prototype)).messageType="MSG_WHEELTICK",s.prototype.msg_type=2308,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint64("time").uint8("flags").uint8("source").int32("ticks"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["time","writeUInt64LE",8]),s.prototype.fieldSpec.push(["flags","writeUInt8",1]),s.prototype.fieldSpec.push(["source","writeUInt8",1]),s.prototype.fieldSpec.push(["ticks","writeInt32LE",4]),e.exports={2307:i,MsgOdometry:i,2308:s,MsgWheeltick:s}}]); \ No newline at end of file diff --git a/javascript/sbp/ssr.js b/javascript/sbp/ssr.js index a0f40e91c3..559c60dd8f 100644 --- a/javascript/sbp/ssr.js +++ b/javascript/sbp/ssr.js @@ -775,7 +775,7 @@ MsgSsrGriddedCorrectionBounds.prototype.fieldSpec.push(['n_sats', 'writeUInt8', MsgSsrGriddedCorrectionBounds.prototype.fieldSpec.push(['stec_sat_list', 'array', STECSatElementIntegrity.prototype.fieldSpec, function () { return this.fields.array.length; }, 'n_sats']); /** - * SBP class for message MSG_SSR_TILE_DEFINITION_DEP (0x05F6). + * SBP class for message MSG_SSR_TILE_DEFINITION_DEP_A (0x05F6). * * Provides the correction point coordinates for the atmospheric correction values * in the MSG_SSR_STEC_CORRECTION_DEP and MSG_SSR_GRIDDED_CORRECTION messages. @@ -814,18 +814,18 @@ MsgSsrGriddedCorrectionBounds.prototype.fieldSpec.push(['stec_sat_list', 'array' * * @param sbp An SBP object with a payload to be decoded. */ -let MsgSsrTileDefinitionDep = function (sbp, fields) { +let MsgSsrTileDefinitionDepA = function (sbp, fields) { SBP.call(this, sbp); - this.messageType = "MSG_SSR_TILE_DEFINITION_DEP"; + this.messageType = "MSG_SSR_TILE_DEFINITION_DEP_A"; this.fields = (fields || this.parser.parse(sbp.payload)); return this; }; -MsgSsrTileDefinitionDep.prototype = Object.create(SBP.prototype); -MsgSsrTileDefinitionDep.prototype.messageType = "MSG_SSR_TILE_DEFINITION_DEP"; -MsgSsrTileDefinitionDep.prototype.msg_type = 0x05F6; -MsgSsrTileDefinitionDep.prototype.constructor = MsgSsrTileDefinitionDep; -MsgSsrTileDefinitionDep.prototype.parser = new Parser() +MsgSsrTileDefinitionDepA.prototype = Object.create(SBP.prototype); +MsgSsrTileDefinitionDepA.prototype.messageType = "MSG_SSR_TILE_DEFINITION_DEP_A"; +MsgSsrTileDefinitionDepA.prototype.msg_type = 0x05F6; +MsgSsrTileDefinitionDepA.prototype.constructor = MsgSsrTileDefinitionDepA; +MsgSsrTileDefinitionDepA.prototype.parser = new Parser() .endianess('little') .uint16('tile_set_id') .uint16('tile_id') @@ -836,19 +836,19 @@ MsgSsrTileDefinitionDep.prototype.parser = new Parser() .uint16('rows') .uint16('cols') .uint64('bitmask'); -MsgSsrTileDefinitionDep.prototype.fieldSpec = []; -MsgSsrTileDefinitionDep.prototype.fieldSpec.push(['tile_set_id', 'writeUInt16LE', 2]); -MsgSsrTileDefinitionDep.prototype.fieldSpec.push(['tile_id', 'writeUInt16LE', 2]); -MsgSsrTileDefinitionDep.prototype.fieldSpec.push(['corner_nw_lat', 'writeInt16LE', 2]); -MsgSsrTileDefinitionDep.prototype.fieldSpec.push(['corner_nw_lon', 'writeInt16LE', 2]); -MsgSsrTileDefinitionDep.prototype.fieldSpec.push(['spacing_lat', 'writeUInt16LE', 2]); -MsgSsrTileDefinitionDep.prototype.fieldSpec.push(['spacing_lon', 'writeUInt16LE', 2]); -MsgSsrTileDefinitionDep.prototype.fieldSpec.push(['rows', 'writeUInt16LE', 2]); -MsgSsrTileDefinitionDep.prototype.fieldSpec.push(['cols', 'writeUInt16LE', 2]); -MsgSsrTileDefinitionDep.prototype.fieldSpec.push(['bitmask', 'writeUInt64LE', 8]); +MsgSsrTileDefinitionDepA.prototype.fieldSpec = []; +MsgSsrTileDefinitionDepA.prototype.fieldSpec.push(['tile_set_id', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepA.prototype.fieldSpec.push(['tile_id', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepA.prototype.fieldSpec.push(['corner_nw_lat', 'writeInt16LE', 2]); +MsgSsrTileDefinitionDepA.prototype.fieldSpec.push(['corner_nw_lon', 'writeInt16LE', 2]); +MsgSsrTileDefinitionDepA.prototype.fieldSpec.push(['spacing_lat', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepA.prototype.fieldSpec.push(['spacing_lon', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepA.prototype.fieldSpec.push(['rows', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepA.prototype.fieldSpec.push(['cols', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepA.prototype.fieldSpec.push(['bitmask', 'writeUInt64LE', 8]); /** - * SBP class for message MSG_SSR_TILE_DEFINITION (0x05F7). + * SBP class for message MSG_SSR_TILE_DEFINITION_DEP_B (0x05F7). * * Provides the correction point coordinates for the atmospheric correction values * in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION messages. Based @@ -888,6 +888,86 @@ MsgSsrTileDefinitionDep.prototype.fieldSpec.push(['bitmask', 'writeUInt64LE', 8] * * @param sbp An SBP object with a payload to be decoded. */ +let MsgSsrTileDefinitionDepB = function (sbp, fields) { + SBP.call(this, sbp); + this.messageType = "MSG_SSR_TILE_DEFINITION_DEP_B"; + this.fields = (fields || this.parser.parse(sbp.payload)); + + return this; +}; +MsgSsrTileDefinitionDepB.prototype = Object.create(SBP.prototype); +MsgSsrTileDefinitionDepB.prototype.messageType = "MSG_SSR_TILE_DEFINITION_DEP_B"; +MsgSsrTileDefinitionDepB.prototype.msg_type = 0x05F7; +MsgSsrTileDefinitionDepB.prototype.constructor = MsgSsrTileDefinitionDepB; +MsgSsrTileDefinitionDepB.prototype.parser = new Parser() + .endianess('little') + .uint8('ssr_sol_id') + .uint16('tile_set_id') + .uint16('tile_id') + .int16('corner_nw_lat') + .int16('corner_nw_lon') + .uint16('spacing_lat') + .uint16('spacing_lon') + .uint16('rows') + .uint16('cols') + .uint64('bitmask'); +MsgSsrTileDefinitionDepB.prototype.fieldSpec = []; +MsgSsrTileDefinitionDepB.prototype.fieldSpec.push(['ssr_sol_id', 'writeUInt8', 1]); +MsgSsrTileDefinitionDepB.prototype.fieldSpec.push(['tile_set_id', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepB.prototype.fieldSpec.push(['tile_id', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepB.prototype.fieldSpec.push(['corner_nw_lat', 'writeInt16LE', 2]); +MsgSsrTileDefinitionDepB.prototype.fieldSpec.push(['corner_nw_lon', 'writeInt16LE', 2]); +MsgSsrTileDefinitionDepB.prototype.fieldSpec.push(['spacing_lat', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepB.prototype.fieldSpec.push(['spacing_lon', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepB.prototype.fieldSpec.push(['rows', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepB.prototype.fieldSpec.push(['cols', 'writeUInt16LE', 2]); +MsgSsrTileDefinitionDepB.prototype.fieldSpec.push(['bitmask', 'writeUInt64LE', 8]); + +/** + * SBP class for message MSG_SSR_TILE_DEFINITION (0x05F8). + * + * Provides the correction point coordinates for the atmospheric correction values + * in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION messages. Based + * on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information element GNSS- + * SSR-CorrectionPoints. SBP only supports gridded arrays of correction points, not + * lists of points. + * + * Fields in the SBP payload (`sbp.payload`): + * @field time GPSTimeSec GNSS reference time of the correction + * @field update_interval number (unsigned 8-bit int, 1 byte) Update interval between consecutive corrections. Encoded following RTCM DF391 + * specification. + * @field sol_id number (unsigned 8-bit int, 1 byte) SSR Solution ID. Similar to RTCM DF415. + * @field iod_atmo number (unsigned 8-bit int, 1 byte) IOD of the SSR atmospheric correction. + * @field tile_set_id number (unsigned 16-bit int, 2 bytes) Unique identifier of the tile set this tile belongs to. + * @field tile_id number (unsigned 16-bit int, 2 bytes) Unique identifier of this tile in the tile set. See GNSS-SSR- + * ArrayOfCorrectionPoints field correctionPointSetID. + * @field corner_nw_lat number (signed 16-bit int, 2 bytes) North-West corner correction point latitude. The relation between the latitude + * X in the range [-90, 90] and the coded number N is: N = floor((X / 90) * 2^14) + * See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude. + * @field corner_nw_lon number (signed 16-bit int, 2 bytes) North-West corner correction point longitude. The relation between the + * longitude X in the range [-180, 180] and the coded number N is: N = floor((X / + * 180) * 2^15) See GNSS-SSR-ArrayOfCorrectionPoints field + * referencePointLongitude. + * @field spacing_lat number (unsigned 16-bit int, 2 bytes) Spacing of the correction points in the latitude direction. See GNSS-SSR- + * ArrayOfCorrectionPoints field stepOfLatitude. + * @field spacing_lon number (unsigned 16-bit int, 2 bytes) Spacing of the correction points in the longitude direction. See GNSS-SSR- + * ArrayOfCorrectionPoints field stepOfLongitude. + * @field rows number (unsigned 16-bit int, 2 bytes) Number of steps in the latitude direction. See GNSS-SSR-ArrayOfCorrectionPoints + * field numberOfStepsLatitude. + * @field cols number (unsigned 16-bit int, 2 bytes) Number of steps in the longitude direction. See GNSS-SSR- + * ArrayOfCorrectionPoints field numberOfStepsLongitude. + * @field bitmask number (unsigned 64-bit int, 8 bytes) Specifies the absence of correction data at the correction points in the array + * (grid). Only the first rows * cols bits are used, and if a specific bit is + * enabled (set to 1), the correction is not available. If there are more than 64 + * correction points the remaining corrections are always available. The + * correction points are packed by rows, starting with the northwest corner of the + * array (top-left on a north oriented map), with each row spanning west to east, + * ending with the southeast corner of the array. See GNSS-SSR- + * ArrayOfCorrectionPoints field bitmaskOfGrids but note the definition of the bits + * is inverted. + * + * @param sbp An SBP object with a payload to be decoded. + */ let MsgSsrTileDefinition = function (sbp, fields) { SBP.call(this, sbp); this.messageType = "MSG_SSR_TILE_DEFINITION"; @@ -897,11 +977,14 @@ let MsgSsrTileDefinition = function (sbp, fields) { }; MsgSsrTileDefinition.prototype = Object.create(SBP.prototype); MsgSsrTileDefinition.prototype.messageType = "MSG_SSR_TILE_DEFINITION"; -MsgSsrTileDefinition.prototype.msg_type = 0x05F7; +MsgSsrTileDefinition.prototype.msg_type = 0x05F8; MsgSsrTileDefinition.prototype.constructor = MsgSsrTileDefinition; MsgSsrTileDefinition.prototype.parser = new Parser() .endianess('little') - .uint8('ssr_sol_id') + .nest('time', { type: GPSTimeSec.prototype.parser }) + .uint8('update_interval') + .uint8('sol_id') + .uint8('iod_atmo') .uint16('tile_set_id') .uint16('tile_id') .int16('corner_nw_lat') @@ -912,7 +995,10 @@ MsgSsrTileDefinition.prototype.parser = new Parser() .uint16('cols') .uint64('bitmask'); MsgSsrTileDefinition.prototype.fieldSpec = []; -MsgSsrTileDefinition.prototype.fieldSpec.push(['ssr_sol_id', 'writeUInt8', 1]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['time', GPSTimeSec.prototype.fieldSpec]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['update_interval', 'writeUInt8', 1]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['sol_id', 'writeUInt8', 1]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['iod_atmo', 'writeUInt8', 1]); MsgSsrTileDefinition.prototype.fieldSpec.push(['tile_set_id', 'writeUInt16LE', 2]); MsgSsrTileDefinition.prototype.fieldSpec.push(['tile_id', 'writeUInt16LE', 2]); MsgSsrTileDefinition.prototype.fieldSpec.push(['corner_nw_lat', 'writeInt16LE', 2]); @@ -966,10 +1052,42 @@ SatelliteAPC.prototype.fieldSpec.push(['pco', 'array', 'writeInt16LE', function SatelliteAPC.prototype.fieldSpec.push(['pcv', 'array', 'writeInt8', function () { return 1; }, 21]); /** - * SBP class for message MSG_SSR_SATELLITE_APC (0x0604). + * SBP class for message MSG_SSR_SATELLITE_APC_DEP (0x0604). + * + + * Fields in the SBP payload (`sbp.payload`): + * @field apc array Satellite antenna phase center corrections + * + * @param sbp An SBP object with a payload to be decoded. + */ +let MsgSsrSatelliteApcDep = function (sbp, fields) { + SBP.call(this, sbp); + this.messageType = "MSG_SSR_SATELLITE_APC_DEP"; + this.fields = (fields || this.parser.parse(sbp.payload)); + + return this; +}; +MsgSsrSatelliteApcDep.prototype = Object.create(SBP.prototype); +MsgSsrSatelliteApcDep.prototype.messageType = "MSG_SSR_SATELLITE_APC_DEP"; +MsgSsrSatelliteApcDep.prototype.msg_type = 0x0604; +MsgSsrSatelliteApcDep.prototype.constructor = MsgSsrSatelliteApcDep; +MsgSsrSatelliteApcDep.prototype.parser = new Parser() + .endianess('little') + .array('apc', { type: SatelliteAPC.prototype.parser, readUntil: 'eof' }); +MsgSsrSatelliteApcDep.prototype.fieldSpec = []; +MsgSsrSatelliteApcDep.prototype.fieldSpec.push(['apc', 'array', SatelliteAPC.prototype.fieldSpec, function () { return this.fields.array.length; }, null]); + +/** + * SBP class for message MSG_SSR_SATELLITE_APC (0x0605). * * Fields in the SBP payload (`sbp.payload`): + * @field time GPSTimeSec GNSS reference time of the correction + * @field update_interval number (unsigned 8-bit int, 1 byte) Update interval between consecutive corrections. Encoded following RTCM DF391 + * specification. + * @field sol_id number (unsigned 8-bit int, 1 byte) SSR Solution ID. Similar to RTCM DF415. + * @field iod_ssr number (unsigned 8-bit int, 1 byte) IOD of the SSR correction. A change of Issue Of Data SSR is used to indicate a + * change in the SSR generating configuration * @field apc array Satellite antenna phase center corrections * * @param sbp An SBP object with a payload to be decoded. @@ -983,12 +1101,20 @@ let MsgSsrSatelliteApc = function (sbp, fields) { }; MsgSsrSatelliteApc.prototype = Object.create(SBP.prototype); MsgSsrSatelliteApc.prototype.messageType = "MSG_SSR_SATELLITE_APC"; -MsgSsrSatelliteApc.prototype.msg_type = 0x0604; +MsgSsrSatelliteApc.prototype.msg_type = 0x0605; MsgSsrSatelliteApc.prototype.constructor = MsgSsrSatelliteApc; MsgSsrSatelliteApc.prototype.parser = new Parser() .endianess('little') + .nest('time', { type: GPSTimeSec.prototype.parser }) + .uint8('update_interval') + .uint8('sol_id') + .uint8('iod_ssr') .array('apc', { type: SatelliteAPC.prototype.parser, readUntil: 'eof' }); MsgSsrSatelliteApc.prototype.fieldSpec = []; +MsgSsrSatelliteApc.prototype.fieldSpec.push(['time', GPSTimeSec.prototype.fieldSpec]); +MsgSsrSatelliteApc.prototype.fieldSpec.push(['update_interval', 'writeUInt8', 1]); +MsgSsrSatelliteApc.prototype.fieldSpec.push(['sol_id', 'writeUInt8', 1]); +MsgSsrSatelliteApc.prototype.fieldSpec.push(['iod_ssr', 'writeUInt8', 1]); MsgSsrSatelliteApc.prototype.fieldSpec.push(['apc', 'array', SatelliteAPC.prototype.fieldSpec, function () { return this.fields.array.length; }, null]); /** @@ -1602,12 +1728,16 @@ module.exports = { STECSatElementIntegrity: STECSatElementIntegrity, 0x05FE: MsgSsrGriddedCorrectionBounds, MsgSsrGriddedCorrectionBounds: MsgSsrGriddedCorrectionBounds, - 0x05F6: MsgSsrTileDefinitionDep, - MsgSsrTileDefinitionDep: MsgSsrTileDefinitionDep, - 0x05F7: MsgSsrTileDefinition, + 0x05F6: MsgSsrTileDefinitionDepA, + MsgSsrTileDefinitionDepA: MsgSsrTileDefinitionDepA, + 0x05F7: MsgSsrTileDefinitionDepB, + MsgSsrTileDefinitionDepB: MsgSsrTileDefinitionDepB, + 0x05F8: MsgSsrTileDefinition, MsgSsrTileDefinition: MsgSsrTileDefinition, SatelliteAPC: SatelliteAPC, - 0x0604: MsgSsrSatelliteApc, + 0x0604: MsgSsrSatelliteApcDep, + MsgSsrSatelliteApcDep: MsgSsrSatelliteApcDep, + 0x0605: MsgSsrSatelliteApc, MsgSsrSatelliteApc: MsgSsrSatelliteApc, 0x05DC: MsgSsrOrbitClockDepA, MsgSsrOrbitClockDepA: MsgSsrOrbitClockDepA, diff --git a/jsonschema/MsgSsrSatelliteApc.json b/jsonschema/MsgSsrSatelliteApc.json index de10878ba0..4abb0311e8 100644 --- a/jsonschema/MsgSsrSatelliteApc.json +++ b/jsonschema/MsgSsrSatelliteApc.json @@ -16,9 +16,17 @@ "description":"", "type": "object", "properties": { + "time": {"$ref": "GpsTimeSec.json"}, + "update_interval": {"type": "integer"}, + "sol_id": {"type": "integer"}, + "iod_ssr": {"type": "integer"}, "apc": {"type": "array", "items": {"$ref": "SatelliteAPC.json"}} }, "required": [ + "time", + "update_interval", + "sol_id", + "iod_ssr", "apc" ] } \ No newline at end of file diff --git a/jsonschema/MsgSsrTileDefinition.json b/jsonschema/MsgSsrTileDefinition.json index d9cadfd546..445c6d6225 100644 --- a/jsonschema/MsgSsrTileDefinition.json +++ b/jsonschema/MsgSsrTileDefinition.json @@ -16,7 +16,10 @@ "description":"Provides the correction point coordinates for the atmospheric correction values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION messages.,\n,\nBased on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of correction points, not lists of points.\n", "type": "object", "properties": { - "ssr_sol_id": {"type": "integer"}, + "time": {"$ref": "GpsTimeSec.json"}, + "update_interval": {"type": "integer"}, + "sol_id": {"type": "integer"}, + "iod_atmo": {"type": "integer"}, "tile_set_id": {"type": "integer"}, "tile_id": {"type": "integer"}, "corner_nw_lat": {"type": "integer"}, @@ -28,7 +31,10 @@ "bitmask": {"type": "integer"} }, "required": [ - "ssr_sol_id", + "time", + "update_interval", + "sol_id", + "iod_atmo", "tile_set_id", "tile_id", "corner_nw_lat", diff --git a/proto/ssr.proto b/proto/ssr.proto index e513991b80..8e1315ea22 100644 --- a/proto/ssr.proto +++ b/proto/ssr.proto @@ -265,16 +265,19 @@ message MsgSsrGriddedCorrectionBounds { * correction points, not lists of points. */ message MsgSsrTileDefinition { - uint32 ssr_sol_id = 1; - uint32 tile_set_id = 2; - uint32 tile_id = 3; - sint32 corner_nw_lat = 4; - sint32 corner_nw_lon = 5; - uint32 spacing_lat = 6; - uint32 spacing_lon = 7; - uint32 rows = 8; - uint32 cols = 9; - uint64 bitmask = 10; + gnss.GpsTimeSec time = 1; + uint32 update_interval = 2; + uint32 sol_id = 3; + uint32 iod_atmo = 4; + uint32 tile_set_id = 5; + uint32 tile_id = 6; + sint32 corner_nw_lat = 7; + sint32 corner_nw_lon = 8; + uint32 spacing_lat = 9; + uint32 spacing_lon = 10; + uint32 rows = 11; + uint32 cols = 12; + uint64 bitmask = 13; } /** Antenna phase center correction @@ -295,7 +298,11 @@ message SatelliteAPC { None */ message MsgSsrSatelliteApc { - repeated SatelliteAPC apc = 1; + gnss.GpsTimeSec time = 1; + uint32 update_interval = 2; + uint32 sol_id = 3; + uint32 iod_ssr = 4; + repeated SatelliteAPC apc = 5; } /** None diff --git a/python/sbp/RELEASE-VERSION b/python/sbp/RELEASE-VERSION index 1910ba9d23..8877aedc29 100644 --- a/python/sbp/RELEASE-VERSION +++ b/python/sbp/RELEASE-VERSION @@ -1 +1 @@ -4.10.0 \ No newline at end of file +4.10.1-alpha \ No newline at end of file diff --git a/python/sbp/ssr.py b/python/sbp/ssr.py index c4788c4978..b5020344d9 100644 --- a/python/sbp/ssr.py +++ b/python/sbp/ssr.py @@ -1891,11 +1891,11 @@ def to_json_dict(self): d.update(j) return d -SBP_MSG_SSR_TILE_DEFINITION_DEP = 0x05F6 -class MsgSsrTileDefinitionDep(SBP): - """SBP class for message MSG_SSR_TILE_DEFINITION_DEP (0x05F6). +SBP_MSG_SSR_TILE_DEFINITION_DEP_A = 0x05F6 +class MsgSsrTileDefinitionDepA(SBP): + """SBP class for message MSG_SSR_TILE_DEFINITION_DEP_A (0x05F6). - You can have MSG_SSR_TILE_DEFINITION_DEP inherit its fields directly + You can have MSG_SSR_TILE_DEFINITION_DEP_A inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. @@ -1995,13 +1995,13 @@ class MsgSsrTileDefinitionDep(SBP): def __init__(self, sbp=None, **kwargs): if sbp: - super( MsgSsrTileDefinitionDep, + super( MsgSsrTileDefinitionDepA, self).__init__(sbp.msg_type, sbp.sender, sbp.length, sbp.payload, sbp.crc) self.from_binary(sbp.payload) else: - super( MsgSsrTileDefinitionDep, self).__init__() - self.msg_type = SBP_MSG_SSR_TILE_DEFINITION_DEP + super( MsgSsrTileDefinitionDepA, self).__init__() + self.msg_type = SBP_MSG_SSR_TILE_DEFINITION_DEP_A self.sender = kwargs.pop('sender', SENDER_ID) self.tile_set_id = kwargs.pop('tile_set_id') self.tile_id = kwargs.pop('tile_id') @@ -2022,12 +2022,12 @@ def from_json(s): """ d = json.loads(s) - return MsgSsrTileDefinitionDep.from_json_dict(d) + return MsgSsrTileDefinitionDepA.from_json_dict(d) @staticmethod def from_json_dict(d): sbp = SBP.from_json_dict(d) - return MsgSsrTileDefinitionDep(sbp, **d) + return MsgSsrTileDefinitionDepA(sbp, **d) def from_binary(self, d): @@ -2035,7 +2035,7 @@ def from_binary(self, d): the message. """ - p = MsgSsrTileDefinitionDep._parser.parse(d) + p = MsgSsrTileDefinitionDepA._parser.parse(d) for n in self.__class__.__slots__: setattr(self, n, getattr(p, n)) @@ -2044,36 +2044,36 @@ def to_binary(self): """ c = containerize(exclude_fields(self)) - self.payload = MsgSsrTileDefinitionDep._parser.build(c) + self.payload = MsgSsrTileDefinitionDepA._parser.build(c) return self.pack() def friendly_name(self): """Produces friendly human-readable name for this message """ - return "SSR TILE DEFINITION DEP" + return "SSR TILE DEFINITION DEP A" def into_buffer(self, buf, offset): """Produce a framed/packed SBP message into the provided buffer and offset. """ self.payload = containerize(exclude_fields(self)) - self.parser = MsgSsrTileDefinitionDep._parser + self.parser = MsgSsrTileDefinitionDepA._parser self.stream_payload.reset(buf, offset) return self.pack_into(buf, offset, self._build_payload) def to_json_dict(self): self.to_binary() - d = super( MsgSsrTileDefinitionDep, self).to_json_dict() + d = super( MsgSsrTileDefinitionDepA, self).to_json_dict() j = walk_json_dict(exclude_fields(self)) d.update(j) return d -SBP_MSG_SSR_TILE_DEFINITION = 0x05F7 -class MsgSsrTileDefinition(SBP): - """SBP class for message MSG_SSR_TILE_DEFINITION (0x05F7). +SBP_MSG_SSR_TILE_DEFINITION_DEP_B = 0x05F7 +class MsgSsrTileDefinitionDepB(SBP): + """SBP class for message MSG_SSR_TILE_DEFINITION_DEP_B (0x05F7). - You can have MSG_SSR_TILE_DEFINITION inherit its fields directly + You can have MSG_SSR_TILE_DEFINITION_DEP_B inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. @@ -2175,6 +2175,196 @@ class MsgSsrTileDefinition(SBP): 'bitmask', ] + def __init__(self, sbp=None, **kwargs): + if sbp: + super( MsgSsrTileDefinitionDepB, + self).__init__(sbp.msg_type, sbp.sender, sbp.length, + sbp.payload, sbp.crc) + self.from_binary(sbp.payload) + else: + super( MsgSsrTileDefinitionDepB, self).__init__() + self.msg_type = SBP_MSG_SSR_TILE_DEFINITION_DEP_B + self.sender = kwargs.pop('sender', SENDER_ID) + self.ssr_sol_id = kwargs.pop('ssr_sol_id') + self.tile_set_id = kwargs.pop('tile_set_id') + self.tile_id = kwargs.pop('tile_id') + self.corner_nw_lat = kwargs.pop('corner_nw_lat') + self.corner_nw_lon = kwargs.pop('corner_nw_lon') + self.spacing_lat = kwargs.pop('spacing_lat') + self.spacing_lon = kwargs.pop('spacing_lon') + self.rows = kwargs.pop('rows') + self.cols = kwargs.pop('cols') + self.bitmask = kwargs.pop('bitmask') + + def __repr__(self): + return fmt_repr(self) + + @staticmethod + def from_json(s): + """Given a JSON-encoded string s, build a message object. + + """ + d = json.loads(s) + return MsgSsrTileDefinitionDepB.from_json_dict(d) + + @staticmethod + def from_json_dict(d): + sbp = SBP.from_json_dict(d) + return MsgSsrTileDefinitionDepB(sbp, **d) + + + def from_binary(self, d): + """Given a binary payload d, update the appropriate payload fields of + the message. + + """ + p = MsgSsrTileDefinitionDepB._parser.parse(d) + for n in self.__class__.__slots__: + setattr(self, n, getattr(p, n)) + + def to_binary(self): + """Produce a framed/packed SBP message. + + """ + c = containerize(exclude_fields(self)) + self.payload = MsgSsrTileDefinitionDepB._parser.build(c) + return self.pack() + + def friendly_name(self): + """Produces friendly human-readable name for this message + + """ + return "SSR TILE DEFINITION DEP B" + + def into_buffer(self, buf, offset): + """Produce a framed/packed SBP message into the provided buffer and offset. + + """ + self.payload = containerize(exclude_fields(self)) + self.parser = MsgSsrTileDefinitionDepB._parser + self.stream_payload.reset(buf, offset) + return self.pack_into(buf, offset, self._build_payload) + + def to_json_dict(self): + self.to_binary() + d = super( MsgSsrTileDefinitionDepB, self).to_json_dict() + j = walk_json_dict(exclude_fields(self)) + d.update(j) + return d + +SBP_MSG_SSR_TILE_DEFINITION = 0x05F8 +class MsgSsrTileDefinition(SBP): + """SBP class for message MSG_SSR_TILE_DEFINITION (0x05F8). + + You can have MSG_SSR_TILE_DEFINITION inherit its fields directly + from an inherited SBP object, or construct it inline using a dict + of its fields. + + + Provides the correction point coordinates for the atmospheric correction + values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION + messages. + + Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information + element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of + correction points, not lists of points. + + Parameters + ---------- + sbp : SBP + SBP parent object to inherit from. + time : GPSTimeSec + GNSS reference time of the correction + update_interval : int + Update interval between consecutive corrections. Encoded following RTCM + DF391 specification. + sol_id : int + SSR Solution ID. Similar to RTCM DF415. + iod_atmo : int + IOD of the SSR atmospheric correction. + tile_set_id : int + Unique identifier of the tile set this tile belongs to. + tile_id : int + Unique identifier of this tile in the tile set. + See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID. + corner_nw_lat : int + North-West corner correction point latitude. + + The relation between the latitude X in the range [-90, 90] and the coded + number N is: N = floor((X / 90) * 2^14) + + See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude. + corner_nw_lon : int + North-West corner correction point longitude. + + The relation between the longitude X in the range [-180, 180] and the + coded number N is: N = floor((X / 180) * 2^15) + + See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude. + spacing_lat : int + Spacing of the correction points in the latitude direction. + + See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude. + spacing_lon : int + Spacing of the correction points in the longitude direction. + + See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude. + rows : int + Number of steps in the latitude direction. + + See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude. + cols : int + Number of steps in the longitude direction. + + See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude. + bitmask : int + Specifies the absence of correction data at the correction points in the + array (grid). + + Only the first rows * cols bits are used, and if a specific bit is enabled + (set to 1), the correction is not available. If there are more than 64 + correction points the remaining corrections are always available. + + The correction points are packed by rows, starting with the northwest + corner of the array (top-left on a north oriented map), with each row + spanning west to east, ending with the southeast corner of the array. + + See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the + definition of the bits is inverted. + sender : int + Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). + + """ + _parser = construct.Struct( + 'time' / GPSTimeSec._parser, + 'update_interval' / construct.Int8ul, + 'sol_id' / construct.Int8ul, + 'iod_atmo' / construct.Int8ul, + 'tile_set_id' / construct.Int16ul, + 'tile_id' / construct.Int16ul, + 'corner_nw_lat' / construct.Int16sl, + 'corner_nw_lon' / construct.Int16sl, + 'spacing_lat' / construct.Int16ul, + 'spacing_lon' / construct.Int16ul, + 'rows' / construct.Int16ul, + 'cols' / construct.Int16ul, + 'bitmask' / construct.Int64ul,) + __slots__ = [ + 'time', + 'update_interval', + 'sol_id', + 'iod_atmo', + 'tile_set_id', + 'tile_id', + 'corner_nw_lat', + 'corner_nw_lon', + 'spacing_lat', + 'spacing_lon', + 'rows', + 'cols', + 'bitmask', + ] + def __init__(self, sbp=None, **kwargs): if sbp: super( MsgSsrTileDefinition, @@ -2185,7 +2375,10 @@ def __init__(self, sbp=None, **kwargs): super( MsgSsrTileDefinition, self).__init__() self.msg_type = SBP_MSG_SSR_TILE_DEFINITION self.sender = kwargs.pop('sender', SENDER_ID) - self.ssr_sol_id = kwargs.pop('ssr_sol_id') + self.time = kwargs.pop('time') + self.update_interval = kwargs.pop('update_interval') + self.sol_id = kwargs.pop('sol_id') + self.iod_atmo = kwargs.pop('iod_atmo') self.tile_set_id = kwargs.pop('tile_set_id') self.tile_id = kwargs.pop('tile_id') self.corner_nw_lat = kwargs.pop('corner_nw_lat') @@ -2252,9 +2445,103 @@ def to_json_dict(self): d.update(j) return d -SBP_MSG_SSR_SATELLITE_APC = 0x0604 +SBP_MSG_SSR_SATELLITE_APC_DEP = 0x0604 +class MsgSsrSatelliteApcDep(SBP): + """SBP class for message MSG_SSR_SATELLITE_APC_DEP (0x0604). + + You can have MSG_SSR_SATELLITE_APC_DEP inherit its fields directly + from an inherited SBP object, or construct it inline using a dict + of its fields. + + + + Parameters + ---------- + sbp : SBP + SBP parent object to inherit from. + apc : array + Satellite antenna phase center corrections + sender : int + Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). + + """ + _parser = construct.Struct( + 'apc' / construct.GreedyRange(SatelliteAPC._parser),) + __slots__ = [ + 'apc', + ] + + def __init__(self, sbp=None, **kwargs): + if sbp: + super( MsgSsrSatelliteApcDep, + self).__init__(sbp.msg_type, sbp.sender, sbp.length, + sbp.payload, sbp.crc) + self.from_binary(sbp.payload) + else: + super( MsgSsrSatelliteApcDep, self).__init__() + self.msg_type = SBP_MSG_SSR_SATELLITE_APC_DEP + self.sender = kwargs.pop('sender', SENDER_ID) + self.apc = kwargs.pop('apc') + + def __repr__(self): + return fmt_repr(self) + + @staticmethod + def from_json(s): + """Given a JSON-encoded string s, build a message object. + + """ + d = json.loads(s) + return MsgSsrSatelliteApcDep.from_json_dict(d) + + @staticmethod + def from_json_dict(d): + sbp = SBP.from_json_dict(d) + return MsgSsrSatelliteApcDep(sbp, **d) + + + def from_binary(self, d): + """Given a binary payload d, update the appropriate payload fields of + the message. + + """ + p = MsgSsrSatelliteApcDep._parser.parse(d) + for n in self.__class__.__slots__: + setattr(self, n, getattr(p, n)) + + def to_binary(self): + """Produce a framed/packed SBP message. + + """ + c = containerize(exclude_fields(self)) + self.payload = MsgSsrSatelliteApcDep._parser.build(c) + return self.pack() + + def friendly_name(self): + """Produces friendly human-readable name for this message + + """ + return "SSR SATELLITE APC DEP" + + def into_buffer(self, buf, offset): + """Produce a framed/packed SBP message into the provided buffer and offset. + + """ + self.payload = containerize(exclude_fields(self)) + self.parser = MsgSsrSatelliteApcDep._parser + self.stream_payload.reset(buf, offset) + return self.pack_into(buf, offset, self._build_payload) + + def to_json_dict(self): + self.to_binary() + d = super( MsgSsrSatelliteApcDep, self).to_json_dict() + j = walk_json_dict(exclude_fields(self)) + d.update(j) + return d + +SBP_MSG_SSR_SATELLITE_APC = 0x0605 class MsgSsrSatelliteApc(SBP): - """SBP class for message MSG_SSR_SATELLITE_APC (0x0604). + """SBP class for message MSG_SSR_SATELLITE_APC (0x0605). You can have MSG_SSR_SATELLITE_APC inherit its fields directly from an inherited SBP object, or construct it inline using a dict @@ -2266,6 +2553,16 @@ class MsgSsrSatelliteApc(SBP): ---------- sbp : SBP SBP parent object to inherit from. + time : GPSTimeSec + GNSS reference time of the correction + update_interval : int + Update interval between consecutive corrections. Encoded following RTCM + DF391 specification. + sol_id : int + SSR Solution ID. Similar to RTCM DF415. + iod_ssr : int + IOD of the SSR correction. A change of Issue Of Data SSR is used to + indicate a change in the SSR generating configuration apc : array Satellite antenna phase center corrections sender : int @@ -2273,8 +2570,16 @@ class MsgSsrSatelliteApc(SBP): """ _parser = construct.Struct( + 'time' / GPSTimeSec._parser, + 'update_interval' / construct.Int8ul, + 'sol_id' / construct.Int8ul, + 'iod_ssr' / construct.Int8ul, 'apc' / construct.GreedyRange(SatelliteAPC._parser),) __slots__ = [ + 'time', + 'update_interval', + 'sol_id', + 'iod_ssr', 'apc', ] @@ -2288,6 +2593,10 @@ def __init__(self, sbp=None, **kwargs): super( MsgSsrSatelliteApc, self).__init__() self.msg_type = SBP_MSG_SSR_SATELLITE_APC self.sender = kwargs.pop('sender', SENDER_ID) + self.time = kwargs.pop('time') + self.update_interval = kwargs.pop('update_interval') + self.sol_id = kwargs.pop('sol_id') + self.iod_ssr = kwargs.pop('iod_ssr') self.apc = kwargs.pop('apc') def __repr__(self): @@ -3284,9 +3593,11 @@ def to_json_dict(self): 0x05FD: MsgSsrStecCorrection, 0x05FC: MsgSsrGriddedCorrection, 0x05FE: MsgSsrGriddedCorrectionBounds, - 0x05F6: MsgSsrTileDefinitionDep, - 0x05F7: MsgSsrTileDefinition, - 0x0604: MsgSsrSatelliteApc, + 0x05F6: MsgSsrTileDefinitionDepA, + 0x05F7: MsgSsrTileDefinitionDepB, + 0x05F8: MsgSsrTileDefinition, + 0x0604: MsgSsrSatelliteApcDep, + 0x0605: MsgSsrSatelliteApc, 0x05DC: MsgSsrOrbitClockDepA, 0x05EB: MsgSsrStecCorrectionDepA, 0x05F0: MsgSsrGriddedCorrectionNoStdDepA, diff --git a/python/tests/sbp/test_table.py b/python/tests/sbp/test_table.py index 8ee38d6b9b..c38f130321 100644 --- a/python/tests/sbp/test_table.py +++ b/python/tests/sbp/test_table.py @@ -42,7 +42,7 @@ def test_table_count(): Test number of available messages to deserialize. """ - number_of_messages = 224 + number_of_messages = 226 assert len(_SBP_TABLE) == number_of_messages def test_table_unqiue_count(): diff --git a/rust/sbp/src/messages/mod.rs b/rust/sbp/src/messages/mod.rs index 93aff64e53..659e6bffc1 100644 --- a/rust/sbp/src/messages/mod.rs +++ b/rust/sbp/src/messages/mod.rs @@ -228,11 +228,13 @@ use self::ssr::msg_ssr_orbit_clock_bounds_degradation::MsgSsrOrbitClockBoundsDeg use self::ssr::msg_ssr_orbit_clock_dep_a::MsgSsrOrbitClockDepA; use self::ssr::msg_ssr_phase_biases::MsgSsrPhaseBiases; use self::ssr::msg_ssr_satellite_apc::MsgSsrSatelliteApc; +use self::ssr::msg_ssr_satellite_apc_dep::MsgSsrSatelliteApcDep; use self::ssr::msg_ssr_stec_correction::MsgSsrStecCorrection; use self::ssr::msg_ssr_stec_correction_dep::MsgSsrStecCorrectionDep; use self::ssr::msg_ssr_stec_correction_dep_a::MsgSsrStecCorrectionDepA; use self::ssr::msg_ssr_tile_definition::MsgSsrTileDefinition; -use self::ssr::msg_ssr_tile_definition_dep::MsgSsrTileDefinitionDep; +use self::ssr::msg_ssr_tile_definition_dep_a::MsgSsrTileDefinitionDepA; +use self::ssr::msg_ssr_tile_definition_dep_b::MsgSsrTileDefinitionDepB; use self::system::msg_csac_telemetry::MsgCsacTelemetry; use self::system::msg_csac_telemetry_labels::MsgCsacTelemetryLabels; use self::system::msg_dgnss_status::MsgDgnssStatus; @@ -702,7 +704,9 @@ pub enum Sbp { /// Deprecated MsgSsrGridDefinitionDepA(MsgSsrGridDefinitionDepA), /// Definition of a SSR atmospheric correction tile. - MsgSsrTileDefinitionDep(MsgSsrTileDefinitionDep), + MsgSsrTileDefinitionDepA(MsgSsrTileDefinitionDepA), + /// Definition of a SSR atmospheric correction tile. + MsgSsrTileDefinitionDepB(MsgSsrTileDefinitionDepB), /// Definition of a SSR atmospheric correction tile. MsgSsrTileDefinition(MsgSsrTileDefinition), /// Deprecated @@ -716,6 +720,8 @@ pub enum Sbp { /// Gridded troposhere and STEC correction residuals bounds MsgSsrGriddedCorrectionBounds(MsgSsrGriddedCorrectionBounds), /// Satellite antenna phase center corrections + MsgSsrSatelliteApcDep(MsgSsrSatelliteApcDep), + /// Satellite antenna phase center corrections MsgSsrSatelliteApc(MsgSsrSatelliteApc), /// OSR corrections MsgOsr(MsgOsr), @@ -1353,9 +1359,13 @@ impl<'de> serde::Deserialize<'de> for Sbp { serde_json::from_value::(value) .map(Sbp::MsgSsrGridDefinitionDepA) } - Some(MsgSsrTileDefinitionDep::MESSAGE_TYPE) => { - serde_json::from_value::(value) - .map(Sbp::MsgSsrTileDefinitionDep) + Some(MsgSsrTileDefinitionDepA::MESSAGE_TYPE) => { + serde_json::from_value::(value) + .map(Sbp::MsgSsrTileDefinitionDepA) + } + Some(MsgSsrTileDefinitionDepB::MESSAGE_TYPE) => { + serde_json::from_value::(value) + .map(Sbp::MsgSsrTileDefinitionDepB) } Some(MsgSsrTileDefinition::MESSAGE_TYPE) => { serde_json::from_value::(value).map(Sbp::MsgSsrTileDefinition) @@ -1379,6 +1389,10 @@ impl<'de> serde::Deserialize<'de> for Sbp { serde_json::from_value::(value) .map(Sbp::MsgSsrGriddedCorrectionBounds) } + Some(MsgSsrSatelliteApcDep::MESSAGE_TYPE) => { + serde_json::from_value::(value) + .map(Sbp::MsgSsrSatelliteApcDep) + } Some(MsgSsrSatelliteApc::MESSAGE_TYPE) => { serde_json::from_value::(value).map(Sbp::MsgSsrSatelliteApc) } @@ -2415,10 +2429,15 @@ impl Sbp { msg.set_sender_id(sender_id); Ok(Sbp::MsgSsrGridDefinitionDepA(msg)) } - MsgSsrTileDefinitionDep::MESSAGE_TYPE => { - let mut msg = MsgSsrTileDefinitionDep::parse(&mut payload)?; + MsgSsrTileDefinitionDepA::MESSAGE_TYPE => { + let mut msg = MsgSsrTileDefinitionDepA::parse(&mut payload)?; msg.set_sender_id(sender_id); - Ok(Sbp::MsgSsrTileDefinitionDep(msg)) + Ok(Sbp::MsgSsrTileDefinitionDepA(msg)) + } + MsgSsrTileDefinitionDepB::MESSAGE_TYPE => { + let mut msg = MsgSsrTileDefinitionDepB::parse(&mut payload)?; + msg.set_sender_id(sender_id); + Ok(Sbp::MsgSsrTileDefinitionDepB(msg)) } MsgSsrTileDefinition::MESSAGE_TYPE => { let mut msg = MsgSsrTileDefinition::parse(&mut payload)?; @@ -2450,6 +2469,11 @@ impl Sbp { msg.set_sender_id(sender_id); Ok(Sbp::MsgSsrGriddedCorrectionBounds(msg)) } + MsgSsrSatelliteApcDep::MESSAGE_TYPE => { + let mut msg = MsgSsrSatelliteApcDep::parse(&mut payload)?; + msg.set_sender_id(sender_id); + Ok(Sbp::MsgSsrSatelliteApcDep(msg)) + } MsgSsrSatelliteApc::MESSAGE_TYPE => { let mut msg = MsgSsrSatelliteApc::parse(&mut payload)?; msg.set_sender_id(sender_id); @@ -2867,13 +2891,15 @@ impl SbpMessage for Sbp { Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.message_name(), Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.message_name(), Sbp::MsgSsrGridDefinitionDepA(msg) => msg.message_name(), - Sbp::MsgSsrTileDefinitionDep(msg) => msg.message_name(), + Sbp::MsgSsrTileDefinitionDepA(msg) => msg.message_name(), + Sbp::MsgSsrTileDefinitionDepB(msg) => msg.message_name(), Sbp::MsgSsrTileDefinition(msg) => msg.message_name(), Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.message_name(), Sbp::MsgSsrStecCorrectionDep(msg) => msg.message_name(), Sbp::MsgSsrGriddedCorrection(msg) => msg.message_name(), Sbp::MsgSsrStecCorrection(msg) => msg.message_name(), Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.message_name(), + Sbp::MsgSsrSatelliteApcDep(msg) => msg.message_name(), Sbp::MsgSsrSatelliteApc(msg) => msg.message_name(), Sbp::MsgOsr(msg) => msg.message_name(), Sbp::MsgUserData(msg) => msg.message_name(), @@ -3097,13 +3123,15 @@ impl SbpMessage for Sbp { Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.message_type(), Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.message_type(), Sbp::MsgSsrGridDefinitionDepA(msg) => msg.message_type(), - Sbp::MsgSsrTileDefinitionDep(msg) => msg.message_type(), + Sbp::MsgSsrTileDefinitionDepA(msg) => msg.message_type(), + Sbp::MsgSsrTileDefinitionDepB(msg) => msg.message_type(), Sbp::MsgSsrTileDefinition(msg) => msg.message_type(), Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.message_type(), Sbp::MsgSsrStecCorrectionDep(msg) => msg.message_type(), Sbp::MsgSsrGriddedCorrection(msg) => msg.message_type(), Sbp::MsgSsrStecCorrection(msg) => msg.message_type(), Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.message_type(), + Sbp::MsgSsrSatelliteApcDep(msg) => msg.message_type(), Sbp::MsgSsrSatelliteApc(msg) => msg.message_type(), Sbp::MsgOsr(msg) => msg.message_type(), Sbp::MsgUserData(msg) => msg.message_type(), @@ -3327,13 +3355,15 @@ impl SbpMessage for Sbp { Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.sender_id(), Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.sender_id(), Sbp::MsgSsrGridDefinitionDepA(msg) => msg.sender_id(), - Sbp::MsgSsrTileDefinitionDep(msg) => msg.sender_id(), + Sbp::MsgSsrTileDefinitionDepA(msg) => msg.sender_id(), + Sbp::MsgSsrTileDefinitionDepB(msg) => msg.sender_id(), Sbp::MsgSsrTileDefinition(msg) => msg.sender_id(), Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.sender_id(), Sbp::MsgSsrStecCorrectionDep(msg) => msg.sender_id(), Sbp::MsgSsrGriddedCorrection(msg) => msg.sender_id(), Sbp::MsgSsrStecCorrection(msg) => msg.sender_id(), Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.sender_id(), + Sbp::MsgSsrSatelliteApcDep(msg) => msg.sender_id(), Sbp::MsgSsrSatelliteApc(msg) => msg.sender_id(), Sbp::MsgOsr(msg) => msg.sender_id(), Sbp::MsgUserData(msg) => msg.sender_id(), @@ -3557,13 +3587,15 @@ impl SbpMessage for Sbp { Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.set_sender_id(new_id), Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.set_sender_id(new_id), Sbp::MsgSsrGridDefinitionDepA(msg) => msg.set_sender_id(new_id), - Sbp::MsgSsrTileDefinitionDep(msg) => msg.set_sender_id(new_id), + Sbp::MsgSsrTileDefinitionDepA(msg) => msg.set_sender_id(new_id), + Sbp::MsgSsrTileDefinitionDepB(msg) => msg.set_sender_id(new_id), Sbp::MsgSsrTileDefinition(msg) => msg.set_sender_id(new_id), Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.set_sender_id(new_id), Sbp::MsgSsrStecCorrectionDep(msg) => msg.set_sender_id(new_id), Sbp::MsgSsrGriddedCorrection(msg) => msg.set_sender_id(new_id), Sbp::MsgSsrStecCorrection(msg) => msg.set_sender_id(new_id), Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.set_sender_id(new_id), + Sbp::MsgSsrSatelliteApcDep(msg) => msg.set_sender_id(new_id), Sbp::MsgSsrSatelliteApc(msg) => msg.set_sender_id(new_id), Sbp::MsgOsr(msg) => msg.set_sender_id(new_id), Sbp::MsgUserData(msg) => msg.set_sender_id(new_id), @@ -3787,13 +3819,15 @@ impl SbpMessage for Sbp { Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.encoded_len(), Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.encoded_len(), Sbp::MsgSsrGridDefinitionDepA(msg) => msg.encoded_len(), - Sbp::MsgSsrTileDefinitionDep(msg) => msg.encoded_len(), + Sbp::MsgSsrTileDefinitionDepA(msg) => msg.encoded_len(), + Sbp::MsgSsrTileDefinitionDepB(msg) => msg.encoded_len(), Sbp::MsgSsrTileDefinition(msg) => msg.encoded_len(), Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.encoded_len(), Sbp::MsgSsrStecCorrectionDep(msg) => msg.encoded_len(), Sbp::MsgSsrGriddedCorrection(msg) => msg.encoded_len(), Sbp::MsgSsrStecCorrection(msg) => msg.encoded_len(), Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.encoded_len(), + Sbp::MsgSsrSatelliteApcDep(msg) => msg.encoded_len(), Sbp::MsgSsrSatelliteApc(msg) => msg.encoded_len(), Sbp::MsgOsr(msg) => msg.encoded_len(), Sbp::MsgUserData(msg) => msg.encoded_len(), @@ -4020,13 +4054,15 @@ impl SbpMessage for Sbp { Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.gps_time(), Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.gps_time(), Sbp::MsgSsrGridDefinitionDepA(msg) => msg.gps_time(), - Sbp::MsgSsrTileDefinitionDep(msg) => msg.gps_time(), + Sbp::MsgSsrTileDefinitionDepA(msg) => msg.gps_time(), + Sbp::MsgSsrTileDefinitionDepB(msg) => msg.gps_time(), Sbp::MsgSsrTileDefinition(msg) => msg.gps_time(), Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.gps_time(), Sbp::MsgSsrStecCorrectionDep(msg) => msg.gps_time(), Sbp::MsgSsrGriddedCorrection(msg) => msg.gps_time(), Sbp::MsgSsrStecCorrection(msg) => msg.gps_time(), Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.gps_time(), + Sbp::MsgSsrSatelliteApcDep(msg) => msg.gps_time(), Sbp::MsgSsrSatelliteApc(msg) => msg.gps_time(), Sbp::MsgOsr(msg) => msg.gps_time(), Sbp::MsgUserData(msg) => msg.gps_time(), @@ -4250,13 +4286,15 @@ impl SbpMessage for Sbp { Sbp::MsgSsrCodePhaseBiasesBounds(msg) => msg.friendly_name(), Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg.friendly_name(), Sbp::MsgSsrGridDefinitionDepA(msg) => msg.friendly_name(), - Sbp::MsgSsrTileDefinitionDep(msg) => msg.friendly_name(), + Sbp::MsgSsrTileDefinitionDepA(msg) => msg.friendly_name(), + Sbp::MsgSsrTileDefinitionDepB(msg) => msg.friendly_name(), Sbp::MsgSsrTileDefinition(msg) => msg.friendly_name(), Sbp::MsgSsrGriddedCorrectionDepA(msg) => msg.friendly_name(), Sbp::MsgSsrStecCorrectionDep(msg) => msg.friendly_name(), Sbp::MsgSsrGriddedCorrection(msg) => msg.friendly_name(), Sbp::MsgSsrStecCorrection(msg) => msg.friendly_name(), Sbp::MsgSsrGriddedCorrectionBounds(msg) => msg.friendly_name(), + Sbp::MsgSsrSatelliteApcDep(msg) => msg.friendly_name(), Sbp::MsgSsrSatelliteApc(msg) => msg.friendly_name(), Sbp::MsgOsr(msg) => msg.friendly_name(), Sbp::MsgUserData(msg) => msg.friendly_name(), @@ -4488,13 +4526,15 @@ impl WireFormat for Sbp { Sbp::MsgSsrCodePhaseBiasesBounds(msg) => WireFormat::write(msg, buf), Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => WireFormat::write(msg, buf), Sbp::MsgSsrGridDefinitionDepA(msg) => WireFormat::write(msg, buf), - Sbp::MsgSsrTileDefinitionDep(msg) => WireFormat::write(msg, buf), + Sbp::MsgSsrTileDefinitionDepA(msg) => WireFormat::write(msg, buf), + Sbp::MsgSsrTileDefinitionDepB(msg) => WireFormat::write(msg, buf), Sbp::MsgSsrTileDefinition(msg) => WireFormat::write(msg, buf), Sbp::MsgSsrGriddedCorrectionDepA(msg) => WireFormat::write(msg, buf), Sbp::MsgSsrStecCorrectionDep(msg) => WireFormat::write(msg, buf), Sbp::MsgSsrGriddedCorrection(msg) => WireFormat::write(msg, buf), Sbp::MsgSsrStecCorrection(msg) => WireFormat::write(msg, buf), Sbp::MsgSsrGriddedCorrectionBounds(msg) => WireFormat::write(msg, buf), + Sbp::MsgSsrSatelliteApcDep(msg) => WireFormat::write(msg, buf), Sbp::MsgSsrSatelliteApc(msg) => WireFormat::write(msg, buf), Sbp::MsgOsr(msg) => WireFormat::write(msg, buf), Sbp::MsgUserData(msg) => WireFormat::write(msg, buf), @@ -4718,13 +4758,15 @@ impl WireFormat for Sbp { Sbp::MsgSsrCodePhaseBiasesBounds(msg) => WireFormat::len(msg), Sbp::MsgSsrGriddedCorrectionNoStdDepA(msg) => WireFormat::len(msg), Sbp::MsgSsrGridDefinitionDepA(msg) => WireFormat::len(msg), - Sbp::MsgSsrTileDefinitionDep(msg) => WireFormat::len(msg), + Sbp::MsgSsrTileDefinitionDepA(msg) => WireFormat::len(msg), + Sbp::MsgSsrTileDefinitionDepB(msg) => WireFormat::len(msg), Sbp::MsgSsrTileDefinition(msg) => WireFormat::len(msg), Sbp::MsgSsrGriddedCorrectionDepA(msg) => WireFormat::len(msg), Sbp::MsgSsrStecCorrectionDep(msg) => WireFormat::len(msg), Sbp::MsgSsrGriddedCorrection(msg) => WireFormat::len(msg), Sbp::MsgSsrStecCorrection(msg) => WireFormat::len(msg), Sbp::MsgSsrGriddedCorrectionBounds(msg) => WireFormat::len(msg), + Sbp::MsgSsrSatelliteApcDep(msg) => WireFormat::len(msg), Sbp::MsgSsrSatelliteApc(msg) => WireFormat::len(msg), Sbp::MsgOsr(msg) => WireFormat::len(msg), Sbp::MsgUserData(msg) => WireFormat::len(msg), @@ -5797,9 +5839,15 @@ impl From for Sbp { } } -impl From for Sbp { - fn from(msg: MsgSsrTileDefinitionDep) -> Self { - Sbp::MsgSsrTileDefinitionDep(msg) +impl From for Sbp { + fn from(msg: MsgSsrTileDefinitionDepA) -> Self { + Sbp::MsgSsrTileDefinitionDepA(msg) + } +} + +impl From for Sbp { + fn from(msg: MsgSsrTileDefinitionDepB) -> Self { + Sbp::MsgSsrTileDefinitionDepB(msg) } } @@ -5839,6 +5887,12 @@ impl From for Sbp { } } +impl From for Sbp { + fn from(msg: MsgSsrSatelliteApcDep) -> Self { + Sbp::MsgSsrSatelliteApcDep(msg) + } +} + impl From for Sbp { fn from(msg: MsgSsrSatelliteApc) -> Self { Sbp::MsgSsrSatelliteApc(msg) diff --git a/rust/sbp/src/messages/ssr.rs b/rust/sbp/src/messages/ssr.rs index e68afdfa16..0da9f3f6dc 100644 --- a/rust/sbp/src/messages/ssr.rs +++ b/rust/sbp/src/messages/ssr.rs @@ -32,11 +32,13 @@ pub use msg_ssr_orbit_clock_bounds_degradation::MsgSsrOrbitClockBoundsDegradatio pub use msg_ssr_orbit_clock_dep_a::MsgSsrOrbitClockDepA; pub use msg_ssr_phase_biases::MsgSsrPhaseBiases; pub use msg_ssr_satellite_apc::MsgSsrSatelliteApc; +pub use msg_ssr_satellite_apc_dep::MsgSsrSatelliteApcDep; pub use msg_ssr_stec_correction::MsgSsrStecCorrection; pub use msg_ssr_stec_correction_dep::MsgSsrStecCorrectionDep; pub use msg_ssr_stec_correction_dep_a::MsgSsrStecCorrectionDepA; pub use msg_ssr_tile_definition::MsgSsrTileDefinition; -pub use msg_ssr_tile_definition_dep::MsgSsrTileDefinitionDep; +pub use msg_ssr_tile_definition_dep_a::MsgSsrTileDefinitionDepA; +pub use msg_ssr_tile_definition_dep_b::MsgSsrTileDefinitionDepB; pub use orbit_clock_bound::OrbitClockBound; pub use orbit_clock_bound_degradation::OrbitClockBoundDegradation; pub use phase_biases_content::PhaseBiasesContent; @@ -1928,13 +1930,27 @@ pub mod msg_ssr_satellite_apc { /// The message sender_id #[cfg_attr(feature = "serde", serde(skip_serializing, alias = "sender"))] pub sender_id: Option, + /// GNSS reference time of the correction + #[cfg_attr(feature = "serde", serde(rename = "time"))] + pub time: GpsTimeSec, + /// Update interval between consecutive corrections. Encoded following RTCM + /// DF391 specification. + #[cfg_attr(feature = "serde", serde(rename = "update_interval"))] + pub update_interval: u8, + /// SSR Solution ID. Similar to RTCM DF415. + #[cfg_attr(feature = "serde", serde(rename = "sol_id"))] + pub sol_id: u8, + /// IOD of the SSR correction. A change of Issue Of Data SSR is used to + /// indicate a change in the SSR generating configuration + #[cfg_attr(feature = "serde", serde(rename = "iod_ssr"))] + pub iod_ssr: u8, /// Satellite antenna phase center corrections #[cfg_attr(feature = "serde", serde(rename = "apc"))] pub apc: Vec, } impl ConcreteMessage for MsgSsrSatelliteApc { - const MESSAGE_TYPE: u16 = 1540; + const MESSAGE_TYPE: u16 = 1541; const MESSAGE_NAME: &'static str = "MSG_SSR_SATELLITE_APC"; } @@ -1973,6 +1989,97 @@ pub mod msg_ssr_satellite_apc { } impl WireFormat for MsgSsrSatelliteApc { + const MIN_LEN: usize = ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + as WireFormat>::MIN_LEN; + fn len(&self) -> usize { + WireFormat::len(&self.time) + + WireFormat::len(&self.update_interval) + + WireFormat::len(&self.sol_id) + + WireFormat::len(&self.iod_ssr) + + WireFormat::len(&self.apc) + } + fn write(&self, buf: &mut B) { + WireFormat::write(&self.time, buf); + WireFormat::write(&self.update_interval, buf); + WireFormat::write(&self.sol_id, buf); + WireFormat::write(&self.iod_ssr, buf); + WireFormat::write(&self.apc, buf); + } + fn parse_unchecked(buf: &mut B) -> Self { + MsgSsrSatelliteApc { + sender_id: None, + time: WireFormat::parse_unchecked(buf), + update_interval: WireFormat::parse_unchecked(buf), + sol_id: WireFormat::parse_unchecked(buf), + iod_ssr: WireFormat::parse_unchecked(buf), + apc: WireFormat::parse_unchecked(buf), + } + } + } +} + +pub mod msg_ssr_satellite_apc_dep { + #![allow(unused_imports)] + + use super::*; + use crate::messages::gnss::*; + use crate::messages::lib::*; + /// Satellite antenna phase center corrections + #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Debug, PartialEq, Clone)] + pub struct MsgSsrSatelliteApcDep { + /// The message sender_id + #[cfg_attr(feature = "serde", serde(skip_serializing, alias = "sender"))] + pub sender_id: Option, + /// Satellite antenna phase center corrections + #[cfg_attr(feature = "serde", serde(rename = "apc"))] + pub apc: Vec, + } + + impl ConcreteMessage for MsgSsrSatelliteApcDep { + const MESSAGE_TYPE: u16 = 1540; + const MESSAGE_NAME: &'static str = "MSG_SSR_SATELLITE_APC_DEP"; + } + + impl SbpMessage for MsgSsrSatelliteApcDep { + fn message_name(&self) -> &'static str { + ::MESSAGE_NAME + } + fn message_type(&self) -> u16 { + ::MESSAGE_TYPE + } + fn sender_id(&self) -> Option { + self.sender_id + } + fn set_sender_id(&mut self, new_id: u16) { + self.sender_id = Some(new_id); + } + fn encoded_len(&self) -> usize { + WireFormat::len(self) + crate::HEADER_LEN + crate::CRC_LEN + } + } + + impl FriendlyName for MsgSsrSatelliteApcDep { + fn friendly_name() -> &'static str { + "SSR SATELLITE APC DEP" + } + } + + impl TryFrom for MsgSsrSatelliteApcDep { + type Error = TryFromSbpError; + fn try_from(msg: Sbp) -> Result { + match msg { + Sbp::MsgSsrSatelliteApcDep(m) => Ok(m), + _ => Err(TryFromSbpError(msg)), + } + } + } + + impl WireFormat for MsgSsrSatelliteApcDep { const MIN_LEN: usize = as WireFormat>::MIN_LEN; fn len(&self) -> usize { WireFormat::len(&self.apc) @@ -1981,7 +2088,7 @@ pub mod msg_ssr_satellite_apc { WireFormat::write(&self.apc, buf); } fn parse_unchecked(buf: &mut B) -> Self { - MsgSsrSatelliteApc { + MsgSsrSatelliteApcDep { sender_id: None, apc: WireFormat::parse_unchecked(buf), } @@ -2295,9 +2402,209 @@ pub mod msg_ssr_tile_definition { /// The message sender_id #[cfg_attr(feature = "serde", serde(skip_serializing, alias = "sender"))] pub sender_id: Option, - /// SSR Solution ID. - #[cfg_attr(feature = "serde", serde(rename = "ssr_sol_id"))] - pub ssr_sol_id: u8, + /// GNSS reference time of the correction + #[cfg_attr(feature = "serde", serde(rename = "time"))] + pub time: GpsTimeSec, + /// Update interval between consecutive corrections. Encoded following RTCM + /// DF391 specification. + #[cfg_attr(feature = "serde", serde(rename = "update_interval"))] + pub update_interval: u8, + /// SSR Solution ID. Similar to RTCM DF415. + #[cfg_attr(feature = "serde", serde(rename = "sol_id"))] + pub sol_id: u8, + /// IOD of the SSR atmospheric correction. + #[cfg_attr(feature = "serde", serde(rename = "iod_atmo"))] + pub iod_atmo: u8, + /// Unique identifier of the tile set this tile belongs to. + #[cfg_attr(feature = "serde", serde(rename = "tile_set_id"))] + pub tile_set_id: u16, + /// Unique identifier of this tile in the tile set. + /// See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID. + #[cfg_attr(feature = "serde", serde(rename = "tile_id"))] + pub tile_id: u16, + /// North-West corner correction point latitude. + /// + /// The relation between the latitude X in the range \[-90, 90\] and the coded + /// number N is: N = floor((X / 90) * 2^14) + /// + /// See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude. + #[cfg_attr(feature = "serde", serde(rename = "corner_nw_lat"))] + pub corner_nw_lat: i16, + /// North-West corner correction point longitude. + /// + /// The relation between the longitude X in the range \[-180, 180\] and the + /// coded number N is: N = floor((X / 180) * 2^15) + /// + /// See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude. + #[cfg_attr(feature = "serde", serde(rename = "corner_nw_lon"))] + pub corner_nw_lon: i16, + /// Spacing of the correction points in the latitude direction. + /// + /// See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude. + #[cfg_attr(feature = "serde", serde(rename = "spacing_lat"))] + pub spacing_lat: u16, + /// Spacing of the correction points in the longitude direction. + /// + /// See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude. + #[cfg_attr(feature = "serde", serde(rename = "spacing_lon"))] + pub spacing_lon: u16, + /// Number of steps in the latitude direction. + /// + /// See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude. + #[cfg_attr(feature = "serde", serde(rename = "rows"))] + pub rows: u16, + /// Number of steps in the longitude direction. + /// + /// See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude. + #[cfg_attr(feature = "serde", serde(rename = "cols"))] + pub cols: u16, + /// Specifies the absence of correction data at the correction points in the + /// array (grid). + /// + /// Only the first rows * cols bits are used, and if a specific bit is + /// enabled (set to 1), the correction is not available. If there are more + /// than 64 correction points the remaining corrections are always + /// available. + /// + /// The correction points are packed by rows, starting with the northwest + /// corner of the array (top-left on a north oriented map), with each row + /// spanning west to east, ending with the southeast corner of the array. + /// + /// See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the + /// definition of the bits is inverted. + #[cfg_attr(feature = "serde", serde(rename = "bitmask"))] + pub bitmask: u64, + } + + impl ConcreteMessage for MsgSsrTileDefinition { + const MESSAGE_TYPE: u16 = 1528; + const MESSAGE_NAME: &'static str = "MSG_SSR_TILE_DEFINITION"; + } + + impl SbpMessage for MsgSsrTileDefinition { + fn message_name(&self) -> &'static str { + ::MESSAGE_NAME + } + fn message_type(&self) -> u16 { + ::MESSAGE_TYPE + } + fn sender_id(&self) -> Option { + self.sender_id + } + fn set_sender_id(&mut self, new_id: u16) { + self.sender_id = Some(new_id); + } + fn encoded_len(&self) -> usize { + WireFormat::len(self) + crate::HEADER_LEN + crate::CRC_LEN + } + } + + impl FriendlyName for MsgSsrTileDefinition { + fn friendly_name() -> &'static str { + "SSR TILE DEFINITION" + } + } + + impl TryFrom for MsgSsrTileDefinition { + type Error = TryFromSbpError; + fn try_from(msg: Sbp) -> Result { + match msg { + Sbp::MsgSsrTileDefinition(m) => Ok(m), + _ => Err(TryFromSbpError(msg)), + } + } + } + + impl WireFormat for MsgSsrTileDefinition { + const MIN_LEN: usize = ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN + + ::MIN_LEN; + fn len(&self) -> usize { + WireFormat::len(&self.time) + + WireFormat::len(&self.update_interval) + + WireFormat::len(&self.sol_id) + + WireFormat::len(&self.iod_atmo) + + WireFormat::len(&self.tile_set_id) + + WireFormat::len(&self.tile_id) + + WireFormat::len(&self.corner_nw_lat) + + WireFormat::len(&self.corner_nw_lon) + + WireFormat::len(&self.spacing_lat) + + WireFormat::len(&self.spacing_lon) + + WireFormat::len(&self.rows) + + WireFormat::len(&self.cols) + + WireFormat::len(&self.bitmask) + } + fn write(&self, buf: &mut B) { + WireFormat::write(&self.time, buf); + WireFormat::write(&self.update_interval, buf); + WireFormat::write(&self.sol_id, buf); + WireFormat::write(&self.iod_atmo, buf); + WireFormat::write(&self.tile_set_id, buf); + WireFormat::write(&self.tile_id, buf); + WireFormat::write(&self.corner_nw_lat, buf); + WireFormat::write(&self.corner_nw_lon, buf); + WireFormat::write(&self.spacing_lat, buf); + WireFormat::write(&self.spacing_lon, buf); + WireFormat::write(&self.rows, buf); + WireFormat::write(&self.cols, buf); + WireFormat::write(&self.bitmask, buf); + } + fn parse_unchecked(buf: &mut B) -> Self { + MsgSsrTileDefinition { + sender_id: None, + time: WireFormat::parse_unchecked(buf), + update_interval: WireFormat::parse_unchecked(buf), + sol_id: WireFormat::parse_unchecked(buf), + iod_atmo: WireFormat::parse_unchecked(buf), + tile_set_id: WireFormat::parse_unchecked(buf), + tile_id: WireFormat::parse_unchecked(buf), + corner_nw_lat: WireFormat::parse_unchecked(buf), + corner_nw_lon: WireFormat::parse_unchecked(buf), + spacing_lat: WireFormat::parse_unchecked(buf), + spacing_lon: WireFormat::parse_unchecked(buf), + rows: WireFormat::parse_unchecked(buf), + cols: WireFormat::parse_unchecked(buf), + bitmask: WireFormat::parse_unchecked(buf), + } + } + } +} + +pub mod msg_ssr_tile_definition_dep_a { + #![allow(unused_imports)] + + use super::*; + use crate::messages::gnss::*; + use crate::messages::lib::*; + + /// Definition of a SSR atmospheric correction tile. + + /// + /// Provides the correction point coordinates for the atmospheric correction + /// values in the MSG_SSR_STEC_CORRECTION_DEP and MSG_SSR_GRIDDED_CORRECTION + /// messages. + /// + /// Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information + /// element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of + /// correction points, not lists of points. + /// + #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] + #[allow(clippy::derive_partial_eq_without_eq)] + #[derive(Debug, PartialEq, Clone)] + pub struct MsgSsrTileDefinitionDepA { + /// The message sender_id + #[cfg_attr(feature = "serde", serde(skip_serializing, alias = "sender"))] + pub sender_id: Option, /// Unique identifier of the tile set this tile belongs to. #[cfg_attr(feature = "serde", serde(rename = "tile_set_id"))] pub tile_set_id: u16, @@ -2364,12 +2671,12 @@ pub mod msg_ssr_tile_definition { pub bitmask: u64, } - impl ConcreteMessage for MsgSsrTileDefinition { - const MESSAGE_TYPE: u16 = 1527; - const MESSAGE_NAME: &'static str = "MSG_SSR_TILE_DEFINITION"; + impl ConcreteMessage for MsgSsrTileDefinitionDepA { + const MESSAGE_TYPE: u16 = 1526; + const MESSAGE_NAME: &'static str = "MSG_SSR_TILE_DEFINITION_DEP_A"; } - impl SbpMessage for MsgSsrTileDefinition { + impl SbpMessage for MsgSsrTileDefinitionDepA { fn message_name(&self) -> &'static str { ::MESSAGE_NAME } @@ -2387,25 +2694,24 @@ pub mod msg_ssr_tile_definition { } } - impl FriendlyName for MsgSsrTileDefinition { + impl FriendlyName for MsgSsrTileDefinitionDepA { fn friendly_name() -> &'static str { - "SSR TILE DEFINITION" + "SSR TILE DEFINITION DEP A" } } - impl TryFrom for MsgSsrTileDefinition { + impl TryFrom for MsgSsrTileDefinitionDepA { type Error = TryFromSbpError; fn try_from(msg: Sbp) -> Result { match msg { - Sbp::MsgSsrTileDefinition(m) => Ok(m), + Sbp::MsgSsrTileDefinitionDepA(m) => Ok(m), _ => Err(TryFromSbpError(msg)), } } } - impl WireFormat for MsgSsrTileDefinition { - const MIN_LEN: usize = ::MIN_LEN - + ::MIN_LEN + impl WireFormat for MsgSsrTileDefinitionDepA { + const MIN_LEN: usize = ::MIN_LEN + ::MIN_LEN + ::MIN_LEN + ::MIN_LEN @@ -2415,8 +2721,7 @@ pub mod msg_ssr_tile_definition { + ::MIN_LEN + ::MIN_LEN; fn len(&self) -> usize { - WireFormat::len(&self.ssr_sol_id) - + WireFormat::len(&self.tile_set_id) + WireFormat::len(&self.tile_set_id) + WireFormat::len(&self.tile_id) + WireFormat::len(&self.corner_nw_lat) + WireFormat::len(&self.corner_nw_lon) @@ -2427,7 +2732,6 @@ pub mod msg_ssr_tile_definition { + WireFormat::len(&self.bitmask) } fn write(&self, buf: &mut B) { - WireFormat::write(&self.ssr_sol_id, buf); WireFormat::write(&self.tile_set_id, buf); WireFormat::write(&self.tile_id, buf); WireFormat::write(&self.corner_nw_lat, buf); @@ -2439,9 +2743,8 @@ pub mod msg_ssr_tile_definition { WireFormat::write(&self.bitmask, buf); } fn parse_unchecked(buf: &mut B) -> Self { - MsgSsrTileDefinition { + MsgSsrTileDefinitionDepA { sender_id: None, - ssr_sol_id: WireFormat::parse_unchecked(buf), tile_set_id: WireFormat::parse_unchecked(buf), tile_id: WireFormat::parse_unchecked(buf), corner_nw_lat: WireFormat::parse_unchecked(buf), @@ -2456,7 +2759,7 @@ pub mod msg_ssr_tile_definition { } } -pub mod msg_ssr_tile_definition_dep { +pub mod msg_ssr_tile_definition_dep_b { #![allow(unused_imports)] use super::*; @@ -2467,7 +2770,7 @@ pub mod msg_ssr_tile_definition_dep { /// /// Provides the correction point coordinates for the atmospheric correction - /// values in the MSG_SSR_STEC_CORRECTION_DEP and MSG_SSR_GRIDDED_CORRECTION + /// values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION /// messages. /// /// Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information @@ -2477,10 +2780,13 @@ pub mod msg_ssr_tile_definition_dep { #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Debug, PartialEq, Clone)] - pub struct MsgSsrTileDefinitionDep { + pub struct MsgSsrTileDefinitionDepB { /// The message sender_id #[cfg_attr(feature = "serde", serde(skip_serializing, alias = "sender"))] pub sender_id: Option, + /// SSR Solution ID. + #[cfg_attr(feature = "serde", serde(rename = "ssr_sol_id"))] + pub ssr_sol_id: u8, /// Unique identifier of the tile set this tile belongs to. #[cfg_attr(feature = "serde", serde(rename = "tile_set_id"))] pub tile_set_id: u16, @@ -2547,12 +2853,12 @@ pub mod msg_ssr_tile_definition_dep { pub bitmask: u64, } - impl ConcreteMessage for MsgSsrTileDefinitionDep { - const MESSAGE_TYPE: u16 = 1526; - const MESSAGE_NAME: &'static str = "MSG_SSR_TILE_DEFINITION_DEP"; + impl ConcreteMessage for MsgSsrTileDefinitionDepB { + const MESSAGE_TYPE: u16 = 1527; + const MESSAGE_NAME: &'static str = "MSG_SSR_TILE_DEFINITION_DEP_B"; } - impl SbpMessage for MsgSsrTileDefinitionDep { + impl SbpMessage for MsgSsrTileDefinitionDepB { fn message_name(&self) -> &'static str { ::MESSAGE_NAME } @@ -2570,24 +2876,25 @@ pub mod msg_ssr_tile_definition_dep { } } - impl FriendlyName for MsgSsrTileDefinitionDep { + impl FriendlyName for MsgSsrTileDefinitionDepB { fn friendly_name() -> &'static str { - "SSR TILE DEFINITION DEP" + "SSR TILE DEFINITION DEP B" } } - impl TryFrom for MsgSsrTileDefinitionDep { + impl TryFrom for MsgSsrTileDefinitionDepB { type Error = TryFromSbpError; fn try_from(msg: Sbp) -> Result { match msg { - Sbp::MsgSsrTileDefinitionDep(m) => Ok(m), + Sbp::MsgSsrTileDefinitionDepB(m) => Ok(m), _ => Err(TryFromSbpError(msg)), } } } - impl WireFormat for MsgSsrTileDefinitionDep { - const MIN_LEN: usize = ::MIN_LEN + impl WireFormat for MsgSsrTileDefinitionDepB { + const MIN_LEN: usize = ::MIN_LEN + + ::MIN_LEN + ::MIN_LEN + ::MIN_LEN + ::MIN_LEN @@ -2597,7 +2904,8 @@ pub mod msg_ssr_tile_definition_dep { + ::MIN_LEN + ::MIN_LEN; fn len(&self) -> usize { - WireFormat::len(&self.tile_set_id) + WireFormat::len(&self.ssr_sol_id) + + WireFormat::len(&self.tile_set_id) + WireFormat::len(&self.tile_id) + WireFormat::len(&self.corner_nw_lat) + WireFormat::len(&self.corner_nw_lon) @@ -2608,6 +2916,7 @@ pub mod msg_ssr_tile_definition_dep { + WireFormat::len(&self.bitmask) } fn write(&self, buf: &mut B) { + WireFormat::write(&self.ssr_sol_id, buf); WireFormat::write(&self.tile_set_id, buf); WireFormat::write(&self.tile_id, buf); WireFormat::write(&self.corner_nw_lat, buf); @@ -2619,8 +2928,9 @@ pub mod msg_ssr_tile_definition_dep { WireFormat::write(&self.bitmask, buf); } fn parse_unchecked(buf: &mut B) -> Self { - MsgSsrTileDefinitionDep { + MsgSsrTileDefinitionDepB { sender_id: None, + ssr_sol_id: WireFormat::parse_unchecked(buf), tile_set_id: WireFormat::parse_unchecked(buf), tile_id: WireFormat::parse_unchecked(buf), corner_nw_lat: WireFormat::parse_unchecked(buf), diff --git a/rust/sbp/tests/integration/auto_check_sbp_ssr_msg_ssr_satellite_apc.rs b/rust/sbp/tests/integration/auto_check_sbp_ssr_msg_ssr_satellite_apc.rs new file mode 100644 index 0000000000..2d988d261e --- /dev/null +++ b/rust/sbp/tests/integration/auto_check_sbp_ssr_msg_ssr_satellite_apc.rs @@ -0,0 +1,669 @@ +// +// Copyright (C) 2019-2021 Swift Navigation Inc. +// Contact: https://support.swiftnav.com +// +// This source is subject to the license found in the file 'LICENSE' which must +// be be distributed together with this source. All other rights reserved. +// +// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, +// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + +// This file was auto-generated from spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrSatelliteApc.yaml by generate.py. Do not modify by hand! + +use crate::*; + +/// Tests [`sbp::iter_messages`], from payload into SBP messages +/// +/// Asserts: +/// - SBP fields equates to that of the field +/// - Payload is identical +#[test] +fn test_auto_check_sbp_ssr_msg_ssr_satellite_apc() { + { + let mut payload = Cursor::new(vec![ + 85, 5, 6, 0, 0, 41, 127, 58, 9, 0, 174, 8, 1, 2, 3, 2, 0, 4, 61, 0, 1, 0, 255, 255, + 217, 2, 11, 10, 8, 5, 1, 252, 248, 246, 246, 246, 249, 252, 0, 6, 12, 22, 30, 41, 41, + 41, 41, 144, 161, + ]); + + // Test the round trip payload parsing + let sbp_msg = { + let mut msgs = iter_messages(&mut payload); + msgs.next() + .expect("no message found") + .expect("failed to parse message") + }; + match &sbp_msg { + sbp::messages::Sbp::MsgSsrSatelliteApc(msg) => { + assert_eq!( + msg.message_type(), + 0x605, + "Incorrect message type, expected 0x605, is {}", + msg.message_type() + ); + let sender_id = msg.sender_id().unwrap(); + assert_eq!( + sender_id, 0x0, + "incorrect sender id, expected 0x0, is {}", + sender_id + ); + assert_eq!( + msg.apc[0].pco[0], 1, + "incorrect value for apc[0].pco[0], expected 1, is {}", + msg.apc[0].pco[0] + ); + assert_eq!( + msg.apc[0].pco[1], -1, + "incorrect value for apc[0].pco[1], expected -1, is {}", + msg.apc[0].pco[1] + ); + assert_eq!( + msg.apc[0].pco[2], 729, + "incorrect value for apc[0].pco[2], expected 729, is {}", + msg.apc[0].pco[2] + ); + assert_eq!( + msg.apc[0].pcv[0], 11, + "incorrect value for apc[0].pcv[0], expected 11, is {}", + msg.apc[0].pcv[0] + ); + assert_eq!( + msg.apc[0].pcv[1], 10, + "incorrect value for apc[0].pcv[1], expected 10, is {}", + msg.apc[0].pcv[1] + ); + assert_eq!( + msg.apc[0].pcv[2], 8, + "incorrect value for apc[0].pcv[2], expected 8, is {}", + msg.apc[0].pcv[2] + ); + assert_eq!( + msg.apc[0].pcv[3], 5, + "incorrect value for apc[0].pcv[3], expected 5, is {}", + msg.apc[0].pcv[3] + ); + assert_eq!( + msg.apc[0].pcv[4], 1, + "incorrect value for apc[0].pcv[4], expected 1, is {}", + msg.apc[0].pcv[4] + ); + assert_eq!( + msg.apc[0].pcv[5], -4, + "incorrect value for apc[0].pcv[5], expected -4, is {}", + msg.apc[0].pcv[5] + ); + assert_eq!( + msg.apc[0].pcv[6], -8, + "incorrect value for apc[0].pcv[6], expected -8, is {}", + msg.apc[0].pcv[6] + ); + assert_eq!( + msg.apc[0].pcv[7], -10, + "incorrect value for apc[0].pcv[7], expected -10, is {}", + msg.apc[0].pcv[7] + ); + assert_eq!( + msg.apc[0].pcv[8], -10, + "incorrect value for apc[0].pcv[8], expected -10, is {}", + msg.apc[0].pcv[8] + ); + assert_eq!( + msg.apc[0].pcv[9], -10, + "incorrect value for apc[0].pcv[9], expected -10, is {}", + msg.apc[0].pcv[9] + ); + assert_eq!( + msg.apc[0].pcv[10], -7, + "incorrect value for apc[0].pcv[10], expected -7, is {}", + msg.apc[0].pcv[10] + ); + assert_eq!( + msg.apc[0].pcv[11], -4, + "incorrect value for apc[0].pcv[11], expected -4, is {}", + msg.apc[0].pcv[11] + ); + assert_eq!( + msg.apc[0].pcv[12], 0, + "incorrect value for apc[0].pcv[12], expected 0, is {}", + msg.apc[0].pcv[12] + ); + assert_eq!( + msg.apc[0].pcv[13], 6, + "incorrect value for apc[0].pcv[13], expected 6, is {}", + msg.apc[0].pcv[13] + ); + assert_eq!( + msg.apc[0].pcv[14], 12, + "incorrect value for apc[0].pcv[14], expected 12, is {}", + msg.apc[0].pcv[14] + ); + assert_eq!( + msg.apc[0].pcv[15], 22, + "incorrect value for apc[0].pcv[15], expected 22, is {}", + msg.apc[0].pcv[15] + ); + assert_eq!( + msg.apc[0].pcv[16], 30, + "incorrect value for apc[0].pcv[16], expected 30, is {}", + msg.apc[0].pcv[16] + ); + assert_eq!( + msg.apc[0].pcv[17], 41, + "incorrect value for apc[0].pcv[17], expected 41, is {}", + msg.apc[0].pcv[17] + ); + assert_eq!( + msg.apc[0].pcv[18], 41, + "incorrect value for apc[0].pcv[18], expected 41, is {}", + msg.apc[0].pcv[18] + ); + assert_eq!( + msg.apc[0].pcv[19], 41, + "incorrect value for apc[0].pcv[19], expected 41, is {}", + msg.apc[0].pcv[19] + ); + assert_eq!( + msg.apc[0].pcv[20], 41, + "incorrect value for apc[0].pcv[20], expected 41, is {}", + msg.apc[0].pcv[20] + ); + assert_eq!( + msg.apc[0].sat_info, 4, + "incorrect value for apc[0].sat_info, expected 4, is {}", + msg.apc[0].sat_info + ); + assert_eq!( + msg.apc[0].sid.code, 0, + "incorrect value for apc[0].sid.code, expected 0, is {}", + msg.apc[0].sid.code + ); + assert_eq!( + msg.apc[0].sid.sat, 2, + "incorrect value for apc[0].sid.sat, expected 2, is {}", + msg.apc[0].sid.sat + ); + assert_eq!( + msg.apc[0].svn, 61, + "incorrect value for apc[0].svn, expected 61, is {}", + msg.apc[0].svn + ); + assert_eq!( + msg.iod_ssr, 3, + "incorrect value for iod_ssr, expected 3, is {}", + msg.iod_ssr + ); + assert_eq!( + msg.sol_id, 2, + "incorrect value for sol_id, expected 2, is {}", + msg.sol_id + ); + assert_eq!( + msg.time.tow, 604799, + "incorrect value for time.tow, expected 604799, is {}", + msg.time.tow + ); + assert_eq!( + msg.time.wn, 2222, + "incorrect value for time.wn, expected 2222, is {}", + msg.time.wn + ); + assert_eq!( + msg.update_interval, 1, + "incorrect value for update_interval, expected 1, is {}", + msg.update_interval + ); + } + _ => panic!("Invalid message type! Expected a MsgSsrSatelliteApc"), + }; + let frame = sbp::to_vec(&sbp_msg).unwrap(); + assert_eq!(frame, payload.into_inner()); + } +} + +/// Tests [`sbp::json::iter_messages`] for JSON payload -> SBP message +/// and [`sbp::json::iter_messages_from_fields`] for JSON fields -> SBP message. +/// +/// Asserts: +/// - SBP message constructed via payload is identical to from fields +/// - SBP fields equates to that of the field +/// - Payload is identical +#[test] +#[cfg(feature = "json")] +fn test_json2sbp_auto_check_sbp_ssr_msg_ssr_satellite_apc() { + { + let json_input = r#"{"preamble": 85, "msg_type": 1541, "sender": 0, "length": 41, "payload": "fzoJAK4IAQIDAgAEPQABAP//2QILCggFAfz49vb2+fwABgwWHikpKSk=", "crc": 41360, "time": {"tow": 604799, "wn": 2222}, "update_interval": 1, "sol_id": 2, "iod_ssr": 3, "apc": [{"sid": {"sat": 2, "code": 0}, "sat_info": 4, "svn": 61, "pco": [1, -1, 729], "pcv": [11, 10, 8, 5, 1, -4, -8, -10, -10, -10, -7, -4, 0, 6, 12, 22, 30, 41, 41, 41, 41]}]}"#.as_bytes(); + + let sbp_msg = { + // JSON to SBP message from payload + let mut iter = json2sbp_iter_msg(json_input); + let from_payload = iter + .next() + .expect("no message found") + .expect("failed to parse message"); + + // JSON to SBP message from fields + let mut iter = iter_messages_from_fields(json_input); + let from_fields = iter + .next() + .expect("no message found") + .expect("failed to parse message"); + + assert_eq!(from_fields, from_payload); + from_fields + }; + match &sbp_msg { + sbp::messages::Sbp::MsgSsrSatelliteApc(msg) => { + assert_eq!( + msg.message_type(), + 0x605, + "Incorrect message type, expected 0x605, is {}", + msg.message_type() + ); + let sender_id = msg.sender_id().unwrap(); + assert_eq!( + sender_id, 0x0, + "incorrect sender id, expected 0x0, is {}", + sender_id + ); + assert_eq!( + msg.apc[0].pco[0], 1, + "incorrect value for apc[0].pco[0], expected 1, is {}", + msg.apc[0].pco[0] + ); + assert_eq!( + msg.apc[0].pco[1], -1, + "incorrect value for apc[0].pco[1], expected -1, is {}", + msg.apc[0].pco[1] + ); + assert_eq!( + msg.apc[0].pco[2], 729, + "incorrect value for apc[0].pco[2], expected 729, is {}", + msg.apc[0].pco[2] + ); + assert_eq!( + msg.apc[0].pcv[0], 11, + "incorrect value for apc[0].pcv[0], expected 11, is {}", + msg.apc[0].pcv[0] + ); + assert_eq!( + msg.apc[0].pcv[1], 10, + "incorrect value for apc[0].pcv[1], expected 10, is {}", + msg.apc[0].pcv[1] + ); + assert_eq!( + msg.apc[0].pcv[2], 8, + "incorrect value for apc[0].pcv[2], expected 8, is {}", + msg.apc[0].pcv[2] + ); + assert_eq!( + msg.apc[0].pcv[3], 5, + "incorrect value for apc[0].pcv[3], expected 5, is {}", + msg.apc[0].pcv[3] + ); + assert_eq!( + msg.apc[0].pcv[4], 1, + "incorrect value for apc[0].pcv[4], expected 1, is {}", + msg.apc[0].pcv[4] + ); + assert_eq!( + msg.apc[0].pcv[5], -4, + "incorrect value for apc[0].pcv[5], expected -4, is {}", + msg.apc[0].pcv[5] + ); + assert_eq!( + msg.apc[0].pcv[6], -8, + "incorrect value for apc[0].pcv[6], expected -8, is {}", + msg.apc[0].pcv[6] + ); + assert_eq!( + msg.apc[0].pcv[7], -10, + "incorrect value for apc[0].pcv[7], expected -10, is {}", + msg.apc[0].pcv[7] + ); + assert_eq!( + msg.apc[0].pcv[8], -10, + "incorrect value for apc[0].pcv[8], expected -10, is {}", + msg.apc[0].pcv[8] + ); + assert_eq!( + msg.apc[0].pcv[9], -10, + "incorrect value for apc[0].pcv[9], expected -10, is {}", + msg.apc[0].pcv[9] + ); + assert_eq!( + msg.apc[0].pcv[10], -7, + "incorrect value for apc[0].pcv[10], expected -7, is {}", + msg.apc[0].pcv[10] + ); + assert_eq!( + msg.apc[0].pcv[11], -4, + "incorrect value for apc[0].pcv[11], expected -4, is {}", + msg.apc[0].pcv[11] + ); + assert_eq!( + msg.apc[0].pcv[12], 0, + "incorrect value for apc[0].pcv[12], expected 0, is {}", + msg.apc[0].pcv[12] + ); + assert_eq!( + msg.apc[0].pcv[13], 6, + "incorrect value for apc[0].pcv[13], expected 6, is {}", + msg.apc[0].pcv[13] + ); + assert_eq!( + msg.apc[0].pcv[14], 12, + "incorrect value for apc[0].pcv[14], expected 12, is {}", + msg.apc[0].pcv[14] + ); + assert_eq!( + msg.apc[0].pcv[15], 22, + "incorrect value for apc[0].pcv[15], expected 22, is {}", + msg.apc[0].pcv[15] + ); + assert_eq!( + msg.apc[0].pcv[16], 30, + "incorrect value for apc[0].pcv[16], expected 30, is {}", + msg.apc[0].pcv[16] + ); + assert_eq!( + msg.apc[0].pcv[17], 41, + "incorrect value for apc[0].pcv[17], expected 41, is {}", + msg.apc[0].pcv[17] + ); + assert_eq!( + msg.apc[0].pcv[18], 41, + "incorrect value for apc[0].pcv[18], expected 41, is {}", + msg.apc[0].pcv[18] + ); + assert_eq!( + msg.apc[0].pcv[19], 41, + "incorrect value for apc[0].pcv[19], expected 41, is {}", + msg.apc[0].pcv[19] + ); + assert_eq!( + msg.apc[0].pcv[20], 41, + "incorrect value for apc[0].pcv[20], expected 41, is {}", + msg.apc[0].pcv[20] + ); + assert_eq!( + msg.apc[0].sat_info, 4, + "incorrect value for apc[0].sat_info, expected 4, is {}", + msg.apc[0].sat_info + ); + assert_eq!( + msg.apc[0].sid.code, 0, + "incorrect value for apc[0].sid.code, expected 0, is {}", + msg.apc[0].sid.code + ); + assert_eq!( + msg.apc[0].sid.sat, 2, + "incorrect value for apc[0].sid.sat, expected 2, is {}", + msg.apc[0].sid.sat + ); + assert_eq!( + msg.apc[0].svn, 61, + "incorrect value for apc[0].svn, expected 61, is {}", + msg.apc[0].svn + ); + assert_eq!( + msg.iod_ssr, 3, + "incorrect value for iod_ssr, expected 3, is {}", + msg.iod_ssr + ); + assert_eq!( + msg.sol_id, 2, + "incorrect value for sol_id, expected 2, is {}", + msg.sol_id + ); + assert_eq!( + msg.time.tow, 604799, + "incorrect value for time.tow, expected 604799, is {}", + msg.time.tow + ); + assert_eq!( + msg.time.wn, 2222, + "incorrect value for time.wn, expected 2222, is {}", + msg.time.wn + ); + assert_eq!( + msg.update_interval, 1, + "incorrect value for update_interval, expected 1, is {}", + msg.update_interval + ); + } + _ => panic!("Invalid message type! Expected a MsgSsrSatelliteApc"), + }; + } +} + +/// Tests [`sbp::json::JsonEncoder`] for roundtrip SBP message -> JSON +/// +/// Assumes: +/// - [`self::test_auto_check_sbp_ssr_msg_ssr_satellite_apc`] passes +/// +/// Asserts: +/// - SBP fields equates to that of the field +/// - Payload is identical +#[test] +#[cfg(feature = "json")] +fn test_sbp2json_auto_check_sbp_ssr_msg_ssr_satellite_apc() { + { + let mut payload = Cursor::new(vec![ + 85, 5, 6, 0, 0, 41, 127, 58, 9, 0, 174, 8, 1, 2, 3, 2, 0, 4, 61, 0, 1, 0, 255, 255, + 217, 2, 11, 10, 8, 5, 1, 252, 248, 246, 246, 246, 249, 252, 0, 6, 12, 22, 30, 41, 41, + 41, 41, 144, 161, + ]); + + // Construct sbp message + let sbp_msg = { + let mut msgs = iter_messages(&mut payload); + msgs.next() + .expect("no message found") + .expect("failed to parse message") + }; + + let mut json_buffer = vec![]; + // Populate json buffer, CompactFormatter + sbp::json::JsonEncoder::new(&mut json_buffer, sbp::json::CompactFormatter {}) + .send(&sbp_msg) + .unwrap(); + + // Reconstruct Sbp message from json fields, roundtrip + let sbp_msg = sbp::messages::Sbp::MsgSsrSatelliteApc( + serde_json::from_str( + std::str::from_utf8(json_buffer.as_slice()) + .unwrap() + .to_string() + .as_str(), + ) + .unwrap(), + ); + match &sbp_msg { + sbp::messages::Sbp::MsgSsrSatelliteApc(msg) => { + assert_eq!( + msg.message_type(), + 0x605, + "Incorrect message type, expected 0x605, is {}", + msg.message_type() + ); + let sender_id = msg.sender_id().unwrap(); + assert_eq!( + sender_id, 0x0, + "incorrect sender id, expected 0x0, is {}", + sender_id + ); + assert_eq!( + msg.apc[0].pco[0], 1, + "incorrect value for apc[0].pco[0], expected 1, is {}", + msg.apc[0].pco[0] + ); + assert_eq!( + msg.apc[0].pco[1], -1, + "incorrect value for apc[0].pco[1], expected -1, is {}", + msg.apc[0].pco[1] + ); + assert_eq!( + msg.apc[0].pco[2], 729, + "incorrect value for apc[0].pco[2], expected 729, is {}", + msg.apc[0].pco[2] + ); + assert_eq!( + msg.apc[0].pcv[0], 11, + "incorrect value for apc[0].pcv[0], expected 11, is {}", + msg.apc[0].pcv[0] + ); + assert_eq!( + msg.apc[0].pcv[1], 10, + "incorrect value for apc[0].pcv[1], expected 10, is {}", + msg.apc[0].pcv[1] + ); + assert_eq!( + msg.apc[0].pcv[2], 8, + "incorrect value for apc[0].pcv[2], expected 8, is {}", + msg.apc[0].pcv[2] + ); + assert_eq!( + msg.apc[0].pcv[3], 5, + "incorrect value for apc[0].pcv[3], expected 5, is {}", + msg.apc[0].pcv[3] + ); + assert_eq!( + msg.apc[0].pcv[4], 1, + "incorrect value for apc[0].pcv[4], expected 1, is {}", + msg.apc[0].pcv[4] + ); + assert_eq!( + msg.apc[0].pcv[5], -4, + "incorrect value for apc[0].pcv[5], expected -4, is {}", + msg.apc[0].pcv[5] + ); + assert_eq!( + msg.apc[0].pcv[6], -8, + "incorrect value for apc[0].pcv[6], expected -8, is {}", + msg.apc[0].pcv[6] + ); + assert_eq!( + msg.apc[0].pcv[7], -10, + "incorrect value for apc[0].pcv[7], expected -10, is {}", + msg.apc[0].pcv[7] + ); + assert_eq!( + msg.apc[0].pcv[8], -10, + "incorrect value for apc[0].pcv[8], expected -10, is {}", + msg.apc[0].pcv[8] + ); + assert_eq!( + msg.apc[0].pcv[9], -10, + "incorrect value for apc[0].pcv[9], expected -10, is {}", + msg.apc[0].pcv[9] + ); + assert_eq!( + msg.apc[0].pcv[10], -7, + "incorrect value for apc[0].pcv[10], expected -7, is {}", + msg.apc[0].pcv[10] + ); + assert_eq!( + msg.apc[0].pcv[11], -4, + "incorrect value for apc[0].pcv[11], expected -4, is {}", + msg.apc[0].pcv[11] + ); + assert_eq!( + msg.apc[0].pcv[12], 0, + "incorrect value for apc[0].pcv[12], expected 0, is {}", + msg.apc[0].pcv[12] + ); + assert_eq!( + msg.apc[0].pcv[13], 6, + "incorrect value for apc[0].pcv[13], expected 6, is {}", + msg.apc[0].pcv[13] + ); + assert_eq!( + msg.apc[0].pcv[14], 12, + "incorrect value for apc[0].pcv[14], expected 12, is {}", + msg.apc[0].pcv[14] + ); + assert_eq!( + msg.apc[0].pcv[15], 22, + "incorrect value for apc[0].pcv[15], expected 22, is {}", + msg.apc[0].pcv[15] + ); + assert_eq!( + msg.apc[0].pcv[16], 30, + "incorrect value for apc[0].pcv[16], expected 30, is {}", + msg.apc[0].pcv[16] + ); + assert_eq!( + msg.apc[0].pcv[17], 41, + "incorrect value for apc[0].pcv[17], expected 41, is {}", + msg.apc[0].pcv[17] + ); + assert_eq!( + msg.apc[0].pcv[18], 41, + "incorrect value for apc[0].pcv[18], expected 41, is {}", + msg.apc[0].pcv[18] + ); + assert_eq!( + msg.apc[0].pcv[19], 41, + "incorrect value for apc[0].pcv[19], expected 41, is {}", + msg.apc[0].pcv[19] + ); + assert_eq!( + msg.apc[0].pcv[20], 41, + "incorrect value for apc[0].pcv[20], expected 41, is {}", + msg.apc[0].pcv[20] + ); + assert_eq!( + msg.apc[0].sat_info, 4, + "incorrect value for apc[0].sat_info, expected 4, is {}", + msg.apc[0].sat_info + ); + assert_eq!( + msg.apc[0].sid.code, 0, + "incorrect value for apc[0].sid.code, expected 0, is {}", + msg.apc[0].sid.code + ); + assert_eq!( + msg.apc[0].sid.sat, 2, + "incorrect value for apc[0].sid.sat, expected 2, is {}", + msg.apc[0].sid.sat + ); + assert_eq!( + msg.apc[0].svn, 61, + "incorrect value for apc[0].svn, expected 61, is {}", + msg.apc[0].svn + ); + assert_eq!( + msg.iod_ssr, 3, + "incorrect value for iod_ssr, expected 3, is {}", + msg.iod_ssr + ); + assert_eq!( + msg.sol_id, 2, + "incorrect value for sol_id, expected 2, is {}", + msg.sol_id + ); + assert_eq!( + msg.time.tow, 604799, + "incorrect value for time.tow, expected 604799, is {}", + msg.time.tow + ); + assert_eq!( + msg.time.wn, 2222, + "incorrect value for time.wn, expected 2222, is {}", + msg.time.wn + ); + assert_eq!( + msg.update_interval, 1, + "incorrect value for update_interval, expected 1, is {}", + msg.update_interval + ); + } + _ => panic!("Invalid message type! Expected a MsgSsrSatelliteApc"), + }; + + // Check payload is still identical + let frame = sbp::to_vec(&sbp_msg).unwrap(); + assert_eq!(frame, payload.into_inner()); + } +} diff --git a/rust/sbp/tests/integration/auto_check_sbp_ssr_msg_ssr_tile_definition.rs b/rust/sbp/tests/integration/auto_check_sbp_ssr_msg_ssr_tile_definition.rs index 1c2687dc3f..03cc26d8a2 100644 --- a/rust/sbp/tests/integration/auto_check_sbp_ssr_msg_ssr_tile_definition.rs +++ b/rust/sbp/tests/integration/auto_check_sbp_ssr_msg_ssr_tile_definition.rs @@ -22,8 +22,8 @@ use crate::*; fn test_auto_check_sbp_ssr_msg_ssr_tile_definition() { { let mut payload = Cursor::new(vec![ - 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, 0, 32, 0, 64, 0, 128, 210, 2, - 150, 73, 0, 0, 0, 0, 214, 71, + 85, 248, 5, 0, 0, 33, 127, 58, 9, 0, 174, 8, 1, 2, 3, 4, 0, 5, 0, 186, 28, 59, 167, + 100, 0, 100, 0, 6, 0, 6, 0, 210, 2, 150, 73, 0, 0, 0, 0, 204, 94, ]); // Test the round trip payload parsing @@ -37,14 +37,14 @@ fn test_auto_check_sbp_ssr_msg_ssr_tile_definition() { sbp::messages::Sbp::MsgSsrTileDefinition(msg) => { assert_eq!( msg.message_type(), - 1527, - "Incorrect message type, expected 1527, is {}", + 0x5F8, + "Incorrect message type, expected 0x5F8, is {}", msg.message_type() ); let sender_id = msg.sender_id().unwrap(); assert_eq!( - sender_id, 0x0042, - "incorrect sender id, expected 0x0042, is {}", + sender_id, 0x0, + "incorrect sender id, expected 0x0, is {}", sender_id ); assert_eq!( @@ -53,50 +53,70 @@ fn test_auto_check_sbp_ssr_msg_ssr_tile_definition() { msg.bitmask ); assert_eq!( - msg.cols, 32768, - "incorrect value for cols, expected 32768, is {}", + msg.cols, 6, + "incorrect value for cols, expected 6, is {}", msg.cols ); assert_eq!( - msg.corner_nw_lat, 1024, - "incorrect value for corner_nw_lat, expected 1024, is {}", + msg.corner_nw_lat, 7354, + "incorrect value for corner_nw_lat, expected 7354, is {}", msg.corner_nw_lat ); assert_eq!( - msg.corner_nw_lon, 2048, - "incorrect value for corner_nw_lon, expected 2048, is {}", + msg.corner_nw_lon, -22725, + "incorrect value for corner_nw_lon, expected -22725, is {}", msg.corner_nw_lon ); assert_eq!( - msg.rows, 16384, - "incorrect value for rows, expected 16384, is {}", + msg.iod_atmo, 3, + "incorrect value for iod_atmo, expected 3, is {}", + msg.iod_atmo + ); + assert_eq!( + msg.rows, 6, + "incorrect value for rows, expected 6, is {}", msg.rows ); assert_eq!( - msg.spacing_lat, 4096, - "incorrect value for spacing_lat, expected 4096, is {}", - msg.spacing_lat + msg.sol_id, 2, + "incorrect value for sol_id, expected 2, is {}", + msg.sol_id ); assert_eq!( - msg.spacing_lon, 8192, - "incorrect value for spacing_lon, expected 8192, is {}", - msg.spacing_lon + msg.spacing_lat, 100, + "incorrect value for spacing_lat, expected 100, is {}", + msg.spacing_lat ); assert_eq!( - msg.ssr_sol_id, 31, - "incorrect value for ssr_sol_id, expected 31, is {}", - msg.ssr_sol_id + msg.spacing_lon, 100, + "incorrect value for spacing_lon, expected 100, is {}", + msg.spacing_lon ); assert_eq!( - msg.tile_id, 512, - "incorrect value for tile_id, expected 512, is {}", + msg.tile_id, 5, + "incorrect value for tile_id, expected 5, is {}", msg.tile_id ); assert_eq!( - msg.tile_set_id, 256, - "incorrect value for tile_set_id, expected 256, is {}", + msg.tile_set_id, 4, + "incorrect value for tile_set_id, expected 4, is {}", msg.tile_set_id ); + assert_eq!( + msg.time.tow, 604799, + "incorrect value for time.tow, expected 604799, is {}", + msg.time.tow + ); + assert_eq!( + msg.time.wn, 2222, + "incorrect value for time.wn, expected 2222, is {}", + msg.time.wn + ); + assert_eq!( + msg.update_interval, 1, + "incorrect value for update_interval, expected 1, is {}", + msg.update_interval + ); } _ => panic!("Invalid message type! Expected a MsgSsrTileDefinition"), }; @@ -116,7 +136,7 @@ fn test_auto_check_sbp_ssr_msg_ssr_tile_definition() { #[cfg(feature = "json")] fn test_json2sbp_auto_check_sbp_ssr_msg_ssr_tile_definition() { { - let json_input = r#"{"ssr_sol_id": 31, "tile_set_id": 256, "tile_id": 512, "corner_nw_lat": 1024, "corner_nw_lon": 2048, "spacing_lat": 4096, "spacing_lon": 8192, "rows": 16384, "cols": 32768, "bitmask": 1234567890, "preamble": 85, "msg_type": 1527, "sender": 66, "length": 25, "payload": "HwABAAIABAAIABAAIABAAIDSApZJAAAAAA==", "crc": 18390}"#.as_bytes(); + let json_input = r#"{"preamble": 85, "msg_type": 1528, "sender": 0, "length": 33, "payload": "fzoJAK4IAQIDBAAFALocO6dkAGQABgAGANIClkkAAAAA", "crc": 24268, "time": {"tow": 604799, "wn": 2222}, "update_interval": 1, "sol_id": 2, "iod_atmo": 3, "tile_set_id": 4, "tile_id": 5, "corner_nw_lat": 7354, "corner_nw_lon": -22725, "spacing_lat": 100, "spacing_lon": 100, "rows": 6, "cols": 6, "bitmask": 1234567890}"#.as_bytes(); let sbp_msg = { // JSON to SBP message from payload @@ -140,14 +160,14 @@ fn test_json2sbp_auto_check_sbp_ssr_msg_ssr_tile_definition() { sbp::messages::Sbp::MsgSsrTileDefinition(msg) => { assert_eq!( msg.message_type(), - 1527, - "Incorrect message type, expected 1527, is {}", + 0x5F8, + "Incorrect message type, expected 0x5F8, is {}", msg.message_type() ); let sender_id = msg.sender_id().unwrap(); assert_eq!( - sender_id, 0x0042, - "incorrect sender id, expected 0x0042, is {}", + sender_id, 0x0, + "incorrect sender id, expected 0x0, is {}", sender_id ); assert_eq!( @@ -156,50 +176,70 @@ fn test_json2sbp_auto_check_sbp_ssr_msg_ssr_tile_definition() { msg.bitmask ); assert_eq!( - msg.cols, 32768, - "incorrect value for cols, expected 32768, is {}", + msg.cols, 6, + "incorrect value for cols, expected 6, is {}", msg.cols ); assert_eq!( - msg.corner_nw_lat, 1024, - "incorrect value for corner_nw_lat, expected 1024, is {}", + msg.corner_nw_lat, 7354, + "incorrect value for corner_nw_lat, expected 7354, is {}", msg.corner_nw_lat ); assert_eq!( - msg.corner_nw_lon, 2048, - "incorrect value for corner_nw_lon, expected 2048, is {}", + msg.corner_nw_lon, -22725, + "incorrect value for corner_nw_lon, expected -22725, is {}", msg.corner_nw_lon ); assert_eq!( - msg.rows, 16384, - "incorrect value for rows, expected 16384, is {}", + msg.iod_atmo, 3, + "incorrect value for iod_atmo, expected 3, is {}", + msg.iod_atmo + ); + assert_eq!( + msg.rows, 6, + "incorrect value for rows, expected 6, is {}", msg.rows ); assert_eq!( - msg.spacing_lat, 4096, - "incorrect value for spacing_lat, expected 4096, is {}", - msg.spacing_lat + msg.sol_id, 2, + "incorrect value for sol_id, expected 2, is {}", + msg.sol_id ); assert_eq!( - msg.spacing_lon, 8192, - "incorrect value for spacing_lon, expected 8192, is {}", - msg.spacing_lon + msg.spacing_lat, 100, + "incorrect value for spacing_lat, expected 100, is {}", + msg.spacing_lat ); assert_eq!( - msg.ssr_sol_id, 31, - "incorrect value for ssr_sol_id, expected 31, is {}", - msg.ssr_sol_id + msg.spacing_lon, 100, + "incorrect value for spacing_lon, expected 100, is {}", + msg.spacing_lon ); assert_eq!( - msg.tile_id, 512, - "incorrect value for tile_id, expected 512, is {}", + msg.tile_id, 5, + "incorrect value for tile_id, expected 5, is {}", msg.tile_id ); assert_eq!( - msg.tile_set_id, 256, - "incorrect value for tile_set_id, expected 256, is {}", + msg.tile_set_id, 4, + "incorrect value for tile_set_id, expected 4, is {}", msg.tile_set_id ); + assert_eq!( + msg.time.tow, 604799, + "incorrect value for time.tow, expected 604799, is {}", + msg.time.tow + ); + assert_eq!( + msg.time.wn, 2222, + "incorrect value for time.wn, expected 2222, is {}", + msg.time.wn + ); + assert_eq!( + msg.update_interval, 1, + "incorrect value for update_interval, expected 1, is {}", + msg.update_interval + ); } _ => panic!("Invalid message type! Expected a MsgSsrTileDefinition"), }; @@ -219,8 +259,8 @@ fn test_json2sbp_auto_check_sbp_ssr_msg_ssr_tile_definition() { fn test_sbp2json_auto_check_sbp_ssr_msg_ssr_tile_definition() { { let mut payload = Cursor::new(vec![ - 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, 0, 32, 0, 64, 0, 128, 210, 2, - 150, 73, 0, 0, 0, 0, 214, 71, + 85, 248, 5, 0, 0, 33, 127, 58, 9, 0, 174, 8, 1, 2, 3, 4, 0, 5, 0, 186, 28, 59, 167, + 100, 0, 100, 0, 6, 0, 6, 0, 210, 2, 150, 73, 0, 0, 0, 0, 204, 94, ]); // Construct sbp message @@ -251,14 +291,14 @@ fn test_sbp2json_auto_check_sbp_ssr_msg_ssr_tile_definition() { sbp::messages::Sbp::MsgSsrTileDefinition(msg) => { assert_eq!( msg.message_type(), - 1527, - "Incorrect message type, expected 1527, is {}", + 0x5F8, + "Incorrect message type, expected 0x5F8, is {}", msg.message_type() ); let sender_id = msg.sender_id().unwrap(); assert_eq!( - sender_id, 0x0042, - "incorrect sender id, expected 0x0042, is {}", + sender_id, 0x0, + "incorrect sender id, expected 0x0, is {}", sender_id ); assert_eq!( @@ -267,50 +307,70 @@ fn test_sbp2json_auto_check_sbp_ssr_msg_ssr_tile_definition() { msg.bitmask ); assert_eq!( - msg.cols, 32768, - "incorrect value for cols, expected 32768, is {}", + msg.cols, 6, + "incorrect value for cols, expected 6, is {}", msg.cols ); assert_eq!( - msg.corner_nw_lat, 1024, - "incorrect value for corner_nw_lat, expected 1024, is {}", + msg.corner_nw_lat, 7354, + "incorrect value for corner_nw_lat, expected 7354, is {}", msg.corner_nw_lat ); assert_eq!( - msg.corner_nw_lon, 2048, - "incorrect value for corner_nw_lon, expected 2048, is {}", + msg.corner_nw_lon, -22725, + "incorrect value for corner_nw_lon, expected -22725, is {}", msg.corner_nw_lon ); assert_eq!( - msg.rows, 16384, - "incorrect value for rows, expected 16384, is {}", + msg.iod_atmo, 3, + "incorrect value for iod_atmo, expected 3, is {}", + msg.iod_atmo + ); + assert_eq!( + msg.rows, 6, + "incorrect value for rows, expected 6, is {}", msg.rows ); assert_eq!( - msg.spacing_lat, 4096, - "incorrect value for spacing_lat, expected 4096, is {}", - msg.spacing_lat + msg.sol_id, 2, + "incorrect value for sol_id, expected 2, is {}", + msg.sol_id ); assert_eq!( - msg.spacing_lon, 8192, - "incorrect value for spacing_lon, expected 8192, is {}", - msg.spacing_lon + msg.spacing_lat, 100, + "incorrect value for spacing_lat, expected 100, is {}", + msg.spacing_lat ); assert_eq!( - msg.ssr_sol_id, 31, - "incorrect value for ssr_sol_id, expected 31, is {}", - msg.ssr_sol_id + msg.spacing_lon, 100, + "incorrect value for spacing_lon, expected 100, is {}", + msg.spacing_lon ); assert_eq!( - msg.tile_id, 512, - "incorrect value for tile_id, expected 512, is {}", + msg.tile_id, 5, + "incorrect value for tile_id, expected 5, is {}", msg.tile_id ); assert_eq!( - msg.tile_set_id, 256, - "incorrect value for tile_set_id, expected 256, is {}", + msg.tile_set_id, 4, + "incorrect value for tile_set_id, expected 4, is {}", msg.tile_set_id ); + assert_eq!( + msg.time.tow, 604799, + "incorrect value for time.tow, expected 604799, is {}", + msg.time.tow + ); + assert_eq!( + msg.time.wn, 2222, + "incorrect value for time.wn, expected 2222, is {}", + msg.time.wn + ); + assert_eq!( + msg.update_interval, 1, + "incorrect value for update_interval, expected 1, is {}", + msg.update_interval + ); } _ => panic!("Invalid message type! Expected a MsgSsrTileDefinition"), }; diff --git a/rust/sbp/tests/integration/auto_check_sbp_ssr_msg_ssr_tile_definition_dep_b.rs b/rust/sbp/tests/integration/auto_check_sbp_ssr_msg_ssr_tile_definition_dep_b.rs new file mode 100644 index 0000000000..16661d278e --- /dev/null +++ b/rust/sbp/tests/integration/auto_check_sbp_ssr_msg_ssr_tile_definition_dep_b.rs @@ -0,0 +1,322 @@ +// +// Copyright (C) 2019-2021 Swift Navigation Inc. +// Contact: https://support.swiftnav.com +// +// This source is subject to the license found in the file 'LICENSE' which must +// be be distributed together with this source. All other rights reserved. +// +// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, +// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. + +// This file was auto-generated from spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinitionDepB.yaml by generate.py. Do not modify by hand! + +use crate::*; + +/// Tests [`sbp::iter_messages`], from payload into SBP messages +/// +/// Asserts: +/// - SBP fields equates to that of the field +/// - Payload is identical +#[test] +fn test_auto_check_sbp_ssr_msg_ssr_tile_definition_dep_b() { + { + let mut payload = Cursor::new(vec![ + 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, 0, 32, 0, 64, 0, 128, 210, 2, + 150, 73, 0, 0, 0, 0, 214, 71, + ]); + + // Test the round trip payload parsing + let sbp_msg = { + let mut msgs = iter_messages(&mut payload); + msgs.next() + .expect("no message found") + .expect("failed to parse message") + }; + match &sbp_msg { + sbp::messages::Sbp::MsgSsrTileDefinitionDepB(msg) => { + assert_eq!( + msg.message_type(), + 1527, + "Incorrect message type, expected 1527, is {}", + msg.message_type() + ); + let sender_id = msg.sender_id().unwrap(); + assert_eq!( + sender_id, 0x0042, + "incorrect sender id, expected 0x0042, is {}", + sender_id + ); + assert_eq!( + msg.bitmask, 1234567890, + "incorrect value for bitmask, expected 1234567890, is {}", + msg.bitmask + ); + assert_eq!( + msg.cols, 32768, + "incorrect value for cols, expected 32768, is {}", + msg.cols + ); + assert_eq!( + msg.corner_nw_lat, 1024, + "incorrect value for corner_nw_lat, expected 1024, is {}", + msg.corner_nw_lat + ); + assert_eq!( + msg.corner_nw_lon, 2048, + "incorrect value for corner_nw_lon, expected 2048, is {}", + msg.corner_nw_lon + ); + assert_eq!( + msg.rows, 16384, + "incorrect value for rows, expected 16384, is {}", + msg.rows + ); + assert_eq!( + msg.spacing_lat, 4096, + "incorrect value for spacing_lat, expected 4096, is {}", + msg.spacing_lat + ); + assert_eq!( + msg.spacing_lon, 8192, + "incorrect value for spacing_lon, expected 8192, is {}", + msg.spacing_lon + ); + assert_eq!( + msg.ssr_sol_id, 31, + "incorrect value for ssr_sol_id, expected 31, is {}", + msg.ssr_sol_id + ); + assert_eq!( + msg.tile_id, 512, + "incorrect value for tile_id, expected 512, is {}", + msg.tile_id + ); + assert_eq!( + msg.tile_set_id, 256, + "incorrect value for tile_set_id, expected 256, is {}", + msg.tile_set_id + ); + } + _ => panic!("Invalid message type! Expected a MsgSsrTileDefinitionDepB"), + }; + let frame = sbp::to_vec(&sbp_msg).unwrap(); + assert_eq!(frame, payload.into_inner()); + } +} + +/// Tests [`sbp::json::iter_messages`] for JSON payload -> SBP message +/// and [`sbp::json::iter_messages_from_fields`] for JSON fields -> SBP message. +/// +/// Asserts: +/// - SBP message constructed via payload is identical to from fields +/// - SBP fields equates to that of the field +/// - Payload is identical +#[test] +#[cfg(feature = "json")] +fn test_json2sbp_auto_check_sbp_ssr_msg_ssr_tile_definition_dep_b() { + { + let json_input = r#"{"ssr_sol_id": 31, "tile_set_id": 256, "tile_id": 512, "corner_nw_lat": 1024, "corner_nw_lon": 2048, "spacing_lat": 4096, "spacing_lon": 8192, "rows": 16384, "cols": 32768, "bitmask": 1234567890, "preamble": 85, "msg_type": 1527, "sender": 66, "length": 25, "payload": "HwABAAIABAAIABAAIABAAIDSApZJAAAAAA==", "crc": 18390}"#.as_bytes(); + + let sbp_msg = { + // JSON to SBP message from payload + let mut iter = json2sbp_iter_msg(json_input); + let from_payload = iter + .next() + .expect("no message found") + .expect("failed to parse message"); + + // JSON to SBP message from fields + let mut iter = iter_messages_from_fields(json_input); + let from_fields = iter + .next() + .expect("no message found") + .expect("failed to parse message"); + + assert_eq!(from_fields, from_payload); + from_fields + }; + match &sbp_msg { + sbp::messages::Sbp::MsgSsrTileDefinitionDepB(msg) => { + assert_eq!( + msg.message_type(), + 1527, + "Incorrect message type, expected 1527, is {}", + msg.message_type() + ); + let sender_id = msg.sender_id().unwrap(); + assert_eq!( + sender_id, 0x0042, + "incorrect sender id, expected 0x0042, is {}", + sender_id + ); + assert_eq!( + msg.bitmask, 1234567890, + "incorrect value for bitmask, expected 1234567890, is {}", + msg.bitmask + ); + assert_eq!( + msg.cols, 32768, + "incorrect value for cols, expected 32768, is {}", + msg.cols + ); + assert_eq!( + msg.corner_nw_lat, 1024, + "incorrect value for corner_nw_lat, expected 1024, is {}", + msg.corner_nw_lat + ); + assert_eq!( + msg.corner_nw_lon, 2048, + "incorrect value for corner_nw_lon, expected 2048, is {}", + msg.corner_nw_lon + ); + assert_eq!( + msg.rows, 16384, + "incorrect value for rows, expected 16384, is {}", + msg.rows + ); + assert_eq!( + msg.spacing_lat, 4096, + "incorrect value for spacing_lat, expected 4096, is {}", + msg.spacing_lat + ); + assert_eq!( + msg.spacing_lon, 8192, + "incorrect value for spacing_lon, expected 8192, is {}", + msg.spacing_lon + ); + assert_eq!( + msg.ssr_sol_id, 31, + "incorrect value for ssr_sol_id, expected 31, is {}", + msg.ssr_sol_id + ); + assert_eq!( + msg.tile_id, 512, + "incorrect value for tile_id, expected 512, is {}", + msg.tile_id + ); + assert_eq!( + msg.tile_set_id, 256, + "incorrect value for tile_set_id, expected 256, is {}", + msg.tile_set_id + ); + } + _ => panic!("Invalid message type! Expected a MsgSsrTileDefinitionDepB"), + }; + } +} + +/// Tests [`sbp::json::JsonEncoder`] for roundtrip SBP message -> JSON +/// +/// Assumes: +/// - [`self::test_auto_check_sbp_ssr_msg_ssr_tile_definition_dep_b`] passes +/// +/// Asserts: +/// - SBP fields equates to that of the field +/// - Payload is identical +#[test] +#[cfg(feature = "json")] +fn test_sbp2json_auto_check_sbp_ssr_msg_ssr_tile_definition_dep_b() { + { + let mut payload = Cursor::new(vec![ + 85, 247, 5, 66, 0, 25, 31, 0, 1, 0, 2, 0, 4, 0, 8, 0, 16, 0, 32, 0, 64, 0, 128, 210, 2, + 150, 73, 0, 0, 0, 0, 214, 71, + ]); + + // Construct sbp message + let sbp_msg = { + let mut msgs = iter_messages(&mut payload); + msgs.next() + .expect("no message found") + .expect("failed to parse message") + }; + + let mut json_buffer = vec![]; + // Populate json buffer, CompactFormatter + sbp::json::JsonEncoder::new(&mut json_buffer, sbp::json::CompactFormatter {}) + .send(&sbp_msg) + .unwrap(); + + // Reconstruct Sbp message from json fields, roundtrip + let sbp_msg = sbp::messages::Sbp::MsgSsrTileDefinitionDepB( + serde_json::from_str( + std::str::from_utf8(json_buffer.as_slice()) + .unwrap() + .to_string() + .as_str(), + ) + .unwrap(), + ); + match &sbp_msg { + sbp::messages::Sbp::MsgSsrTileDefinitionDepB(msg) => { + assert_eq!( + msg.message_type(), + 1527, + "Incorrect message type, expected 1527, is {}", + msg.message_type() + ); + let sender_id = msg.sender_id().unwrap(); + assert_eq!( + sender_id, 0x0042, + "incorrect sender id, expected 0x0042, is {}", + sender_id + ); + assert_eq!( + msg.bitmask, 1234567890, + "incorrect value for bitmask, expected 1234567890, is {}", + msg.bitmask + ); + assert_eq!( + msg.cols, 32768, + "incorrect value for cols, expected 32768, is {}", + msg.cols + ); + assert_eq!( + msg.corner_nw_lat, 1024, + "incorrect value for corner_nw_lat, expected 1024, is {}", + msg.corner_nw_lat + ); + assert_eq!( + msg.corner_nw_lon, 2048, + "incorrect value for corner_nw_lon, expected 2048, is {}", + msg.corner_nw_lon + ); + assert_eq!( + msg.rows, 16384, + "incorrect value for rows, expected 16384, is {}", + msg.rows + ); + assert_eq!( + msg.spacing_lat, 4096, + "incorrect value for spacing_lat, expected 4096, is {}", + msg.spacing_lat + ); + assert_eq!( + msg.spacing_lon, 8192, + "incorrect value for spacing_lon, expected 8192, is {}", + msg.spacing_lon + ); + assert_eq!( + msg.ssr_sol_id, 31, + "incorrect value for ssr_sol_id, expected 31, is {}", + msg.ssr_sol_id + ); + assert_eq!( + msg.tile_id, 512, + "incorrect value for tile_id, expected 512, is {}", + msg.tile_id + ); + assert_eq!( + msg.tile_set_id, 256, + "incorrect value for tile_set_id, expected 256, is {}", + msg.tile_set_id + ); + } + _ => panic!("Invalid message type! Expected a MsgSsrTileDefinitionDepB"), + }; + + // Check payload is still identical + let frame = sbp::to_vec(&sbp_msg).unwrap(); + assert_eq!(frame, payload.into_inner()); + } +} diff --git a/rust/sbp/tests/integration/main.rs b/rust/sbp/tests/integration/main.rs index a54ca232a4..857c6a9d54 100644 --- a/rust/sbp/tests/integration/main.rs +++ b/rust/sbp/tests/integration/main.rs @@ -101,8 +101,10 @@ mod auto_check_sbp_ssr_msg_ssr_code_phase_biases_bounds; mod auto_check_sbp_ssr_msg_ssr_gridded_correction_bounds; mod auto_check_sbp_ssr_msg_ssr_orbit_clock_bounds; mod auto_check_sbp_ssr_msg_ssr_orbit_clock_bounds_degradation; +mod auto_check_sbp_ssr_msg_ssr_satellite_apc; mod auto_check_sbp_ssr_msg_ssr_stec_correction; mod auto_check_sbp_ssr_msg_ssr_tile_definition; +mod auto_check_sbp_ssr_msg_ssr_tile_definition_dep_b; mod auto_check_sbp_system_msg_dgnss_status; mod auto_check_sbp_system_msg_group_meta; mod auto_check_sbp_system_msg_heartbeat; diff --git a/sbpjson/elm/SbpJson.elm b/sbpjson/elm/SbpJson.elm index 95acd23363..7a3966a8a5 100644 --- a/sbpjson/elm/SbpJson.elm +++ b/sbpjson/elm/SbpJson.elm @@ -2832,6 +2832,10 @@ type alias PhaseBiasesContent = type alias MsgSsrSatelliteApc = { apc : Array SatelliteAPC + , iodSsr : Int + , solID : Int + , time : GpsTimeSEC + , updateInterval : Int } {-| Contains phase center offset and elevation variation corrections for one signal on a @@ -2873,12 +2877,15 @@ type alias MsgSsrTileDefinition = , cols : Int , cornerNwLat : Int , cornerNwLon : Int + , iodAtmo : Int , rows : Int + , solID : Int , spacingLat : Int , spacingLon : Int - , ssrSolID : Int , tileID : Int , tileSetID : Int + , time : GpsTimeSEC + , updateInterval : Int } {-| The system start-up message is sent once on system start-up. It notifies the host or @@ -7137,11 +7144,19 @@ msgSsrSatelliteApc : Jdec.Decoder MsgSsrSatelliteApc msgSsrSatelliteApc = Jpipe.decode MsgSsrSatelliteApc |> Jpipe.required "apc" (Jdec.array satelliteAPC) + |> Jpipe.required "iod_ssr" Jdec.int + |> Jpipe.required "sol_id" Jdec.int + |> Jpipe.required "time" gpsTimeSEC + |> Jpipe.required "update_interval" Jdec.int encodeMsgSsrSatelliteApc : MsgSsrSatelliteApc -> Jenc.Value encodeMsgSsrSatelliteApc x = Jenc.object [ ("apc", makeArrayEncoder encodeSatelliteAPC x.apc) + , ("iod_ssr", Jenc.int x.iodSsr) + , ("sol_id", Jenc.int x.solID) + , ("time", encodeGpsTimeSEC x.time) + , ("update_interval", Jenc.int x.updateInterval) ] satelliteAPC : Jdec.Decoder SatelliteAPC @@ -7206,12 +7221,15 @@ msgSsrTileDefinition = |> Jpipe.required "cols" Jdec.int |> Jpipe.required "corner_nw_lat" Jdec.int |> Jpipe.required "corner_nw_lon" Jdec.int + |> Jpipe.required "iod_atmo" Jdec.int |> Jpipe.required "rows" Jdec.int + |> Jpipe.required "sol_id" Jdec.int |> Jpipe.required "spacing_lat" Jdec.int |> Jpipe.required "spacing_lon" Jdec.int - |> Jpipe.required "ssr_sol_id" Jdec.int |> Jpipe.required "tile_id" Jdec.int |> Jpipe.required "tile_set_id" Jdec.int + |> Jpipe.required "time" gpsTimeSEC + |> Jpipe.required "update_interval" Jdec.int encodeMsgSsrTileDefinition : MsgSsrTileDefinition -> Jenc.Value encodeMsgSsrTileDefinition x = @@ -7220,12 +7238,15 @@ encodeMsgSsrTileDefinition x = , ("cols", Jenc.int x.cols) , ("corner_nw_lat", Jenc.int x.cornerNwLat) , ("corner_nw_lon", Jenc.int x.cornerNwLon) + , ("iod_atmo", Jenc.int x.iodAtmo) , ("rows", Jenc.int x.rows) + , ("sol_id", Jenc.int x.solID) , ("spacing_lat", Jenc.int x.spacingLat) , ("spacing_lon", Jenc.int x.spacingLon) - , ("ssr_sol_id", Jenc.int x.ssrSolID) , ("tile_id", Jenc.int x.tileID) , ("tile_set_id", Jenc.int x.tileSetID) + , ("time", encodeGpsTimeSEC x.time) + , ("update_interval", Jenc.int x.updateInterval) ] msgStartup : Jdec.Decoder MsgStartup diff --git a/sbpjson/javascript/SbpJson.js b/sbpjson/javascript/SbpJson.js index b90e248475..7943fc2ff6 100644 --- a/sbpjson/javascript/SbpJson.js +++ b/sbpjson/javascript/SbpJson.js @@ -3208,6 +3208,10 @@ const typeMap = { ], "any"), "MsgSsrSatelliteApc": o([ { json: "apc", js: "apc", typ: a(r("SatelliteAPC")) }, + { json: "iod_ssr", js: "iod_ssr", typ: 0 }, + { json: "sol_id", js: "sol_id", typ: 0 }, + { json: "time", js: "time", typ: r("GpsTimeSEC") }, + { json: "update_interval", js: "update_interval", typ: 0 }, ], "any"), "SatelliteAPC": o([ { json: "pco", js: "pco", typ: a(0) }, @@ -3234,12 +3238,15 @@ const typeMap = { { json: "cols", js: "cols", typ: 0 }, { json: "corner_nw_lat", js: "corner_nw_lat", typ: 0 }, { json: "corner_nw_lon", js: "corner_nw_lon", typ: 0 }, + { json: "iod_atmo", js: "iod_atmo", typ: 0 }, { json: "rows", js: "rows", typ: 0 }, + { json: "sol_id", js: "sol_id", typ: 0 }, { json: "spacing_lat", js: "spacing_lat", typ: 0 }, { json: "spacing_lon", js: "spacing_lon", typ: 0 }, - { json: "ssr_sol_id", js: "ssr_sol_id", typ: 0 }, { json: "tile_id", js: "tile_id", typ: 0 }, { json: "tile_set_id", js: "tile_set_id", typ: 0 }, + { json: "time", js: "time", typ: r("GpsTimeSEC") }, + { json: "update_interval", js: "update_interval", typ: 0 }, ], "any"), "MsgStartup": o([ { json: "cause", js: "cause", typ: 0 }, diff --git a/sbpjson/typescript/SbpJson.ts b/sbpjson/typescript/SbpJson.ts index a3d0821dac..424fe9525a 100644 --- a/sbpjson/typescript/SbpJson.ts +++ b/sbpjson/typescript/SbpJson.ts @@ -2333,7 +2333,11 @@ export interface PhaseBiasesContent { } export interface MsgSsrSatelliteApc { - apc: SatelliteAPC[]; + apc: SatelliteAPC[]; + iod_ssr: number; + sol_id: number; + time: GpsTimeSEC; + update_interval: number; } /** @@ -2375,16 +2379,19 @@ export interface STECSatElement { * lists of points. */ export interface MsgSsrTileDefinition { - bitmask: number; - cols: number; - corner_nw_lat: number; - corner_nw_lon: number; - rows: number; - spacing_lat: number; - spacing_lon: number; - ssr_sol_id: number; - tile_id: number; - tile_set_id: number; + bitmask: number; + cols: number; + corner_nw_lat: number; + corner_nw_lon: number; + iod_atmo: number; + rows: number; + sol_id: number; + spacing_lat: number; + spacing_lon: number; + tile_id: number; + tile_set_id: number; + time: GpsTimeSEC; + update_interval: number; } /** @@ -5866,6 +5873,10 @@ const typeMap: any = { ], "any"), "MsgSsrSatelliteApc": o([ { json: "apc", js: "apc", typ: a(r("SatelliteAPC")) }, + { json: "iod_ssr", js: "iod_ssr", typ: 0 }, + { json: "sol_id", js: "sol_id", typ: 0 }, + { json: "time", js: "time", typ: r("GpsTimeSEC") }, + { json: "update_interval", js: "update_interval", typ: 0 }, ], "any"), "SatelliteAPC": o([ { json: "pco", js: "pco", typ: a(0) }, @@ -5892,12 +5903,15 @@ const typeMap: any = { { json: "cols", js: "cols", typ: 0 }, { json: "corner_nw_lat", js: "corner_nw_lat", typ: 0 }, { json: "corner_nw_lon", js: "corner_nw_lon", typ: 0 }, + { json: "iod_atmo", js: "iod_atmo", typ: 0 }, { json: "rows", js: "rows", typ: 0 }, + { json: "sol_id", js: "sol_id", typ: 0 }, { json: "spacing_lat", js: "spacing_lat", typ: 0 }, { json: "spacing_lon", js: "spacing_lon", typ: 0 }, - { json: "ssr_sol_id", js: "ssr_sol_id", typ: 0 }, { json: "tile_id", js: "tile_id", typ: 0 }, { json: "tile_set_id", js: "tile_set_id", typ: 0 }, + { json: "time", js: "time", typ: r("GpsTimeSEC") }, + { json: "update_interval", js: "update_interval", typ: 0 }, ], "any"), "MsgStartup": o([ { json: "cause", js: "cause", typ: 0 }, diff --git a/spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrSatelliteApc.yaml b/spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrSatelliteApc.yaml new file mode 100644 index 0000000000..6f2d7e1e6a --- /dev/null +++ b/spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrSatelliteApc.yaml @@ -0,0 +1,63 @@ +description: Unit tests for swiftnav.sbp.ssr MsgSsrSatelliteApc +generated_on: '2023-01-09 22:41:50.310466' +package: sbp.ssr +tests: +- msg: + c_decoded_fields: + n_apc: 1 + fields: + apc: + - pco: + - 1 + - -1 + - 729 + pcv: + - 11 + - 10 + - 8 + - 5 + - 1 + - -4 + - -8 + - -10 + - -10 + - -10 + - -7 + - -4 + - 0 + - 6 + - 12 + - 22 + - 30 + - 41 + - 41 + - 41 + - 41 + sat_info: 4 + sid: + code: 0 + sat: 2 + svn: 61 + iod_ssr: 3 + sol_id: 2 + time: + tow: 604799 + wn: 2222 + update_interval: 1 + module: sbp.ssr + name: MsgSsrSatelliteApc + msg_type: '0x605' + raw_json: '{"preamble": 85, "msg_type": 1541, "sender": 0, "length": 41, "payload": + "fzoJAK4IAQIDAgAEPQABAP//2QILCggFAfz49vb2+fwABgwWHikpKSk=", "crc": 41360, "time": + {"tow": 604799, "wn": 2222}, "update_interval": 1, "sol_id": 2, "iod_ssr": 3, + "apc": [{"sid": {"sat": 2, "code": 0}, "sat_info": 4, "svn": 61, "pco": [1, -1, + 729], "pcv": [11, 10, 8, 5, 1, -4, -8, -10, -10, -10, -7, -4, 0, 6, 12, 22, 30, + 41, 41, 41, 41]}]}' + raw_packet: VQUGAAApfzoJAK4IAQIDAgAEPQABAP//2QILCggFAfz49vb2+fwABgwWHikpKSmQoQ== + sbp: + crc: '0xA190' + length: 41 + msg_type: '0x605' + payload: fzoJAK4IAQIDAgAEPQABAP//2QILCggFAfz49vb2+fwABgwWHikpKSk= + preamble: '0x55' + sender: '0x0' diff --git a/spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinition.yaml b/spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinition.yaml index 0d3c1846b5..2623777276 100644 --- a/spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinition.yaml +++ b/spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinition.yaml @@ -1,31 +1,37 @@ description: Unit tests for swiftnav.sbp.ssr MsgSsrTileDefinition -generated_on: 2022-04-20 # manually generated +generated_on: '2023-01-12 00:05:32.601743' package: sbp.ssr tests: - - - msg: - fields: - ssr_sol_id: 31 - tile_set_id: 256 - tile_id: 512 - corner_nw_lat: 1024 - corner_nw_lon: 2048 - spacing_lat: 4096 - spacing_lon: 8192 - rows: 16384 - cols: 32768 - bitmask: 1234567890 - module: sbp.ssr - name: MsgSsrTileDefinition - msg_type: '1527' - raw_json: '{"ssr_sol_id": 31, "tile_set_id": 256, "tile_id": 512, "corner_nw_lat": 1024, "corner_nw_lon": 2048, - "spacing_lat": 4096, "spacing_lon": 8192, "rows": 16384, "cols": 32768, "bitmask": 1234567890, "preamble": 85, - "msg_type": 1527, "sender": 66, "length": 25, "payload": "HwABAAIABAAIABAAIABAAIDSApZJAAAAAA==", "crc": 18390}' - raw_packet: VfcFQgAZHwABAAIABAAIABAAIABAAIDSApZJAAAAANZH - sbp: - preamble: '0x55' - msg_type: '0x05F7' - sender: '0x0042' - length: 25 - payload: HwABAAIABAAIABAAIABAAIDSApZJAAAAAA== - crc: '0x47D6' +- msg: + fields: + bitmask: 1234567890 + cols: 6 + corner_nw_lat: 7354 + corner_nw_lon: -22725 + iod_atmo: 3 + rows: 6 + sol_id: 2 + spacing_lat: 100 + spacing_lon: 100 + tile_id: 5 + tile_set_id: 4 + time: + tow: 604799 + wn: 2222 + update_interval: 1 + module: sbp.ssr + name: MsgSsrTileDefinition + msg_type: '0x5F8' + raw_json: '{"preamble": 85, "msg_type": 1528, "sender": 0, "length": 33, "payload": + "fzoJAK4IAQIDBAAFALocO6dkAGQABgAGANIClkkAAAAA", "crc": 24268, "time": {"tow": + 604799, "wn": 2222}, "update_interval": 1, "sol_id": 2, "iod_atmo": 3, "tile_set_id": + 4, "tile_id": 5, "corner_nw_lat": 7354, "corner_nw_lon": -22725, "spacing_lat": + 100, "spacing_lon": 100, "rows": 6, "cols": 6, "bitmask": 1234567890}' + raw_packet: VfgFAAAhfzoJAK4IAQIDBAAFALocO6dkAGQABgAGANIClkkAAAAAzF4= + sbp: + crc: '0x5ECC' + length: 33 + msg_type: '0x5F8' + payload: fzoJAK4IAQIDBAAFALocO6dkAGQABgAGANIClkkAAAAA + preamble: '0x55' + sender: '0x0' diff --git a/spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinitionDepB.yaml b/spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinitionDepB.yaml new file mode 100644 index 0000000000..9e5d6bc6ec --- /dev/null +++ b/spec/tests/yaml/swiftnav/sbp/ssr/test_MsgSsrTileDefinitionDepB.yaml @@ -0,0 +1,31 @@ +description: Unit tests for swiftnav.sbp.ssr MsgSsrTileDefinitionDepB +generated_on: 2022-04-20 # manually generated +package: sbp.ssr +tests: + + - msg: + fields: + ssr_sol_id: 31 + tile_set_id: 256 + tile_id: 512 + corner_nw_lat: 1024 + corner_nw_lon: 2048 + spacing_lat: 4096 + spacing_lon: 8192 + rows: 16384 + cols: 32768 + bitmask: 1234567890 + module: sbp.ssr + name: MsgSsrTileDefinitionDepB + msg_type: '1527' + raw_json: '{"ssr_sol_id": 31, "tile_set_id": 256, "tile_id": 512, "corner_nw_lat": 1024, "corner_nw_lon": 2048, + "spacing_lat": 4096, "spacing_lon": 8192, "rows": 16384, "cols": 32768, "bitmask": 1234567890, "preamble": 85, + "msg_type": 1527, "sender": 66, "length": 25, "payload": "HwABAAIABAAIABAAIABAAIDSApZJAAAAAA==", "crc": 18390}' + raw_packet: VfcFQgAZHwABAAIABAAIABAAIABAAIDSApZJAAAAANZH + sbp: + preamble: '0x55' + msg_type: '0x05F7' + sender: '0x0042' + length: 25 + payload: HwABAAIABAAIABAAIABAAIDSApZJAAAAAA== + crc: '0x47D6' diff --git a/spec/yaml/swiftnav/sbp/ssr.yaml b/spec/yaml/swiftnav/sbp/ssr.yaml index 8e138017cf..3b42757266 100644 --- a/spec/yaml/swiftnav/sbp/ssr.yaml +++ b/spec/yaml/swiftnav/sbp/ssr.yaml @@ -537,7 +537,7 @@ definitions: size_fn: n_sats desc: Array of STEC polynomial coefficients and its bounds for each space vehicle. - - MSG_SSR_TILE_DEFINITION_DEP: + - MSG_SSR_TILE_DEFINITION_DEP_A: id: 0x05F6 short_desc: > Definition of a SSR atmospheric correction tile. @@ -645,7 +645,7 @@ definitions: See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the definition of the bits is inverted. - - MSG_SSR_TILE_DEFINITION: + - MSG_SSR_TILE_DEFINITION_DEP_B: id: 0x05F7 short_desc: > Definition of a SSR atmospheric correction tile. @@ -658,6 +658,8 @@ definitions: Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of correction points, not lists of points. + replaced_by: + - MSG_SSR_TILE_DEFINITION fields: - ssr_sol_id: type: u8 @@ -754,6 +756,123 @@ definitions: See GNSS-SSR-ArrayOfCorrectionPoints field bitmaskOfGrids but note the definition of the bits is inverted. + - MSG_SSR_TILE_DEFINITION: + id: 0x05F8 + short_desc: > + Definition of a SSR atmospheric correction tile. + desc: > + Provides the correction point coordinates for the atmospheric correction + values in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION + messages. + + + Based on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information + element GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of + correction points, not lists of points. + fields: + - time: + type: GPSTimeSec + desc: GNSS reference time of the correction + - update_interval: + type: u8 + desc: > + Update interval between consecutive corrections. Encoded + following RTCM DF391 specification. + - sol_id: + type: u8 + desc: SSR Solution ID. Similar to RTCM DF415. + - iod_atmo: + type: u8 + desc: > + IOD of the SSR atmospheric correction. + - tile_set_id: + type: u16 + desc: Unique identifier of the tile set this tile belongs to. + - tile_id: + type: u16 + desc: > + Unique identifier of this tile in the tile set. + + See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID. + - corner_nw_lat: + type: s16 + units: encoded degrees + desc: > + North-West corner correction point latitude. + + + The relation between the latitude X in the range [-90, 90] and + the coded number N is: N = floor((X / 90) * 2^14) + + + See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLatitude. + - corner_nw_lon: + type: s16 + units: encoded degrees + desc: > + North-West corner correction point longitude. + + + The relation between the longitude X in the range [-180, 180] + and the coded number N is: N = floor((X / 180) * 2^15) + + + See GNSS-SSR-ArrayOfCorrectionPoints field referencePointLongitude. + - spacing_lat: + type: u16 + units: 0.01 degrees + desc: > + Spacing of the correction points in the latitude direction. + + + See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLatitude. + - spacing_lon: + type: u16 + units: 0.01 degrees + desc: > + Spacing of the correction points in the longitude direction. + + + See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongitude. + - rows: + type: u16 + desc: > + Number of steps in the latitude direction. + + + See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude. + - cols: + type: u16 + desc: > + Number of steps in the longitude direction. + + + See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongitude. + - bitmask: + type: u64 + desc: > + Specifies the absence of correction data at + the correction points in the array (grid). + + + Only the first rows * cols bits are used, + and if a specific bit is enabled (set to 1), + the correction is not available. If there + are more than 64 correction points the + remaining corrections are always available. + + + The correction points are packed by rows, + starting with the northwest corner of the + array (top-left on a north oriented map), + with each row spanning west to east, ending + with the southeast corner of the array. + + + See GNSS-SSR-ArrayOfCorrectionPoints + field bitmaskOfGrids but note the definition + of the bits is inverted. + - SatelliteAPC: short_desc: Antenna phase center correction desc: > @@ -813,10 +932,38 @@ definitions: degrees separation from the Z axis, subsequent elements represent elevation variations in 1 degree increments. - - MSG_SSR_SATELLITE_APC: + - MSG_SSR_SATELLITE_APC_DEP: id: 0x0604 short_desc: Satellite antenna phase center corrections + replaced_by: + - MSG_SSR_SATELLITE_APC + fields: + - apc: + type: array + fill: SatelliteAPC + desc: Satellite antenna phase center corrections + + - MSG_SSR_SATELLITE_APC: + id: 0x0605 + short_desc: Satellite antenna phase center corrections fields: + - time: + type: GPSTimeSec + desc: GNSS reference time of the correction + - update_interval: + type: u8 + desc: > + Update interval between consecutive corrections. Encoded + following RTCM DF391 specification. + - sol_id: + type: u8 + desc: SSR Solution ID. Similar to RTCM DF415. + - iod_ssr: + type: u8 + desc: > + IOD of the SSR correction. A change of Issue Of Data + SSR is used to indicate a change in the SSR + generating configuration - apc: type: array fill: SatelliteAPC