diff --git a/.gitignore b/.gitignore index c567795219..8d5e0e4ec1 100644 --- a/.gitignore +++ b/.gitignore @@ -70,7 +70,9 @@ sbp_out.* .build/ # rust -/Cargo.lock -/target +Cargo.lock +target/ +rust/sbp/Cargo.lock +rust/sbp/target python/sbp/_version.py diff --git a/c/include/libsbp/cpp/message_traits.h b/c/include/libsbp/cpp/message_traits.h index 2c03396ea4..f87b1b27f3 100644 --- a/c/include/libsbp/cpp/message_traits.h +++ b/c/include/libsbp/cpp/message_traits.h @@ -925,29 +925,47 @@ struct MessageTraits { template<> -struct MessageTraits { +struct MessageTraits { static constexpr u16 id = 1515; }; template<> -struct MessageTraits { +struct MessageTraits { static constexpr u16 id = 1520; }; template<> -struct MessageTraits { +struct MessageTraits { static constexpr u16 id = 1525; }; template<> -struct MessageTraits { +struct MessageTraits { + static constexpr u16 id = 1526; +}; + + +template<> +struct MessageTraits { static constexpr u16 id = 1530; }; +template<> +struct MessageTraits { + static constexpr u16 id = 1531; +}; + + +template<> +struct MessageTraits { + static constexpr u16 id = 1532; +}; + + template<> struct MessageTraits { static constexpr u16 id = 1600; diff --git a/c/include/libsbp/observation.h b/c/include/libsbp/observation.h index 2e2ce5879b..3a4b49bfe7 100644 --- a/c/include/libsbp/observation.h +++ b/c/include/libsbp/observation.h @@ -371,8 +371,16 @@ typedef struct SBP_ATTR_PACKED { float af1; /**< Polynomial clock correction coefficient (clock drift) [s/s] */ float af2; /**< Polynomial clock correction coefficient (rate of clock drift) [s/s^2] */ gps_time_sec_t toc; /**< Clock reference */ - u8 iode; /**< Issue of ephemeris data */ - u16 iodc; /**< Issue of clock data */ + u8 iode; /**< Issue of ephemeris data + +Calculated from the navigation data parameter t_oe per RTCM/CSNO recommendation: +IODE = mod (t_oe / 720, 240) + */ + u16 iodc; /**< Issue of clock data + +Calculated from the navigation data parameter t_oe per RTCM/CSNO recommendation: +IODE = mod (t_oc / 720, 240) + */ } msg_ephemeris_bds_t; @@ -405,8 +413,8 @@ typedef struct SBP_ATTR_PACKED { double af1; /**< Polynomial clock correction coefficient (clock drift) [s/s] */ float af2; /**< Polynomial clock correction coefficient (rate of clock drift) [s/s^2] */ gps_time_sec_t toc; /**< Clock reference */ - u16 iode; /**< Issue of ephemeris data */ - u16 iodc; /**< Issue of clock data */ + u16 iode; /**< Issue of data (IODnav) */ + u16 iodc; /**< Issue of data (IODnav). Always equal to iode */ } msg_ephemeris_gal_dep_a_t; @@ -441,9 +449,9 @@ typedef struct SBP_ATTR_PACKED { double af1; /**< Polynomial clock correction coefficient (clock drift) [s/s] */ float af2; /**< Polynomial clock correction coefficient (rate of clock drift) [s/s^2] */ gps_time_sec_t toc; /**< Clock reference */ - u16 iode; /**< Issue of ephemeris data */ - u16 iodc; /**< Issue of clock data */ - u8 source; /**< 0=I/NAV, 1=F/NAV, ... */ + u16 iode; /**< Issue of data (IODnav) */ + u16 iodc; /**< Issue of data (IODnav). Always equal to iode */ + u8 source; /**< 0=I/NAV, 1=F/NAV */ } msg_ephemeris_gal_t; @@ -559,7 +567,7 @@ typedef struct SBP_ATTR_PACKED { double vel[3]; /**< Velocity vector of the SV at tb in PZ-90.02 coordinates system [m/s] */ double acc[3]; /**< Acceleration vector of the SV at tb in PZ-90.02 coordinates sys [m/s^2] */ u8 fcn; /**< Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid */ - u8 iod; /**< Issue of ephemeris data */ + u8 iod; /**< Issue of data. Equal to the 7 bits of the immediate data word t_b */ } msg_ephemeris_glo_dep_d_t; @@ -581,7 +589,7 @@ typedef struct SBP_ATTR_PACKED { double vel[3]; /**< Velocity vector of the SV at tb in PZ-90.02 coordinates system [m/s] */ float acc[3]; /**< Acceleration vector of the SV at tb in PZ-90.02 coordinates sys [m/s^2] */ u8 fcn; /**< Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid */ - u8 iod; /**< Issue of ephemeris data */ + u8 iod; /**< Issue of data. Equal to the 7 bits of the immediate data word t_b */ } msg_ephemeris_glo_t; diff --git a/c/include/libsbp/ssr.h b/c/include/libsbp/ssr.h index 9e219aa2ab..62dbfec58f 100644 --- a/c/include/libsbp/ssr.h +++ b/c/include/libsbp/ssr.h @@ -56,13 +56,15 @@ Increased for every discontinuity in phase. } phase_biases_content_t; -/** Header for MSG_SSR_STEC_CORRECTION message +/** Header for the MSG_SSR_STEC_CORRECTION message. * * A full set of STEC information will likely span multiple SBP * messages, since SBP message a limited to 255 bytes. The header * is used to tie multiple SBP messages into a sequence. */ typedef struct SBP_ATTR_PACKED { + u8 tile_set_id; /**< Unique identifier of the tile set this tile belongs to. */ + u8 tile_id; /**< Unique identifier of this tile in the tile set. */ gps_time_sec_t time; /**< GNSS reference time of the correction */ u8 num_msgs; /**< Number of messages in the dataset */ u8 seq_num; /**< Position of this message in the dataset */ @@ -74,13 +76,15 @@ following RTCM DF391 specification. } stec_header_t; -/** Header for MSG_SSR_GRIDDED_CORRECTION +/** Header for the MSG_SSR_GRIDDED_CORRECTION message. * - * The 3GPP message contains nested variable length arrays + * The LPP message contains nested variable length arrays * which are not suppported in SBP, so each grid point will * be identified by the index. */ typedef struct SBP_ATTR_PACKED { + u8 tile_set_id; /**< Unique identifier of the tile set this tile belongs to. */ + u8 tile_id; /**< Unique identifier of this tile in the tile set. */ gps_time_sec_t time; /**< GNSS reference time of the correction */ u16 num_msgs; /**< Number of messages in the dataset */ u16 seq_num; /**< Position of this message in the dataset */ @@ -181,25 +185,6 @@ typedef struct SBP_ATTR_PACKED { } grid_element_t; -/** Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. - * - * Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. - * Also includes an RLE encoded validity list. - */ -typedef struct SBP_ATTR_PACKED { - u8 region_size_inverse; /**< region_size (deg) = 10 / region_size_inverse -0 is an invalid value. - [inverse degrees] */ - u16 area_width; /**< grid height (deg) = grid idth (deg) = area_width / region_size -0 is an invalid value. - */ - u16 lat_nw_corner_enc; /**< North-West corner latitdue (deg) = region_size * lat_nw_corner_enc - 90 */ - u16 lon_nw_corner_enc; /**< North-West corner longtitude (deg) = region_size * lon_nw_corner_enc - 180 */ - u8 num_msgs; /**< Number of messages in the dataset */ - u8 seq_num; /**< Postion of this message in the dataset */ -} grid_definition_header_t; - - /** Precise orbit and clock correction * * The precise orbit and clock correction message is @@ -207,7 +192,7 @@ typedef struct SBP_ATTR_PACKED { * ephemeris and is typically an equivalent to the 1060 * and 1066 RTCM message types */ -#define SBP_MSG_SSR_ORBIT_CLOCK 0x05DD +#define SBP_MSG_SSR_ORBIT_CLOCK 0x05DD typedef struct SBP_ATTR_PACKED { gps_time_sec_t time; /**< GNSS reference time of the correction */ sbp_gnss_signal_t sid; /**< GNSS signal identifier (16 bit) */ @@ -231,37 +216,6 @@ generating configuration } msg_ssr_orbit_clock_t; -/** Precise orbit and clock correction - * - * The precise orbit and clock correction message is - * to be applied as a delta correction to broadcast - * ephemeris and is typically an equivalent to the 1060 - * and 1066 RTCM message types - */ -#define SBP_MSG_SSR_ORBIT_CLOCK_DEP_A 0x05DC -typedef struct SBP_ATTR_PACKED { - gps_time_sec_t time; /**< GNSS reference time of the correction */ - sbp_gnss_signal_t sid; /**< GNSS signal identifier (16 bit) */ - u8 update_interval; /**< Update interval between consecutive corrections. Encoded -following RTCM DF391 specification. - */ - 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 - */ - u8 iod; /**< Issue of broadcast ephemeris data */ - s32 radial; /**< Orbit radial delta correction [0.1 mm] */ - s32 along; /**< Orbit along delta correction [0.4 mm] */ - s32 cross; /**< Orbit along delta correction [0.4 mm] */ - s32 dot_radial; /**< Velocity of orbit radial delta correction [0.001 mm/s] */ - s32 dot_along; /**< Velocity of orbit along delta correction [0.004 mm/s] */ - s32 dot_cross; /**< Velocity of orbit cross delta correction [0.004 mm/s] */ - s32 c0; /**< C0 polynomial coefficient for correction of broadcast satellite clock [0.1 mm] */ - s32 c1; /**< C1 polynomial coefficient for correction of broadcast satellite clock [0.001 mm/s] */ - s32 c2; /**< C2 polynomial coefficient for correction of broadcast satellite clock [0.00002 mm/s^-2] */ -} msg_ssr_orbit_clock_dep_a_t; - - /** Precise code biases correction * * The precise code biases message is to be added @@ -269,7 +223,7 @@ generating configuration * to get corrected pseudorange. It is typically * an equivalent to the 1059 and 1065 RTCM message types */ -#define SBP_MSG_SSR_CODE_BIASES 0x05E1 +#define SBP_MSG_SSR_CODE_BIASES 0x05E1 typedef struct SBP_ATTR_PACKED { gps_time_sec_t time; /**< GNSS reference time of the correction */ sbp_gnss_signal_t sid; /**< GNSS signal identifier (16 bit) */ @@ -293,7 +247,7 @@ generating configuration * the phase wind-up correction. * It is typically an equivalent to the 1265 RTCM message types */ -#define SBP_MSG_SSR_PHASE_BIASES 0x05E6 +#define SBP_MSG_SSR_PHASE_BIASES 0x05E6 typedef struct SBP_ATTR_PACKED { gps_time_sec_t time; /**< GNSS reference time of the correction */ sbp_gnss_signal_t sid; /**< GNSS signal identifier (16 bit) */ @@ -316,60 +270,222 @@ satellite being tracked. } msg_ssr_phase_biases_t; -/** Slant Total Electron Content +/** STEC correction polynomial coeffcients. * - * The STEC per space vehicle, given as polynomial approximation for - * a given grid. This should be combined with MSG_SSR_GRIDDED_CORRECTION - * message to get the state space representation of the atmospheric - * delay. It is typically equivalent to the QZSS CLAS Sub Type 8 messages - */ -#define SBP_MSG_SSR_STEC_CORRECTION 0x05EB + * The Slant Total Electron Content per space vehicle, given as polynomial + * approximation for a given tile. This should be combined with the + * MSG_SSR_GRIDDED_CORRECTION message to get the state space representation + * of the atmospheric delay. + * + * It is typically equivalent to the QZSS CLAS Sub Type 8 messages. + */ +#define SBP_MSG_SSR_STEC_CORRECTION 0x05FB typedef struct SBP_ATTR_PACKED { - stec_header_t header; /**< Header of a STEC message */ - stec_sat_element_t stec_sat_list[0]; /**< Array of STEC information for each space vehicle */ + stec_header_t header; /**< Header of a STEC polynomial coeffcient message. */ + stec_sat_element_t stec_sat_list[0]; /**< Array of STEC polynomial coeffcients for each space vehicle. */ } msg_ssr_stec_correction_t; -/** Gridded troposphere and STEC residuals +/** Gridded troposphere and STEC correction residuals. * - * This message was deprecated when variances (stddev) - * were added. + * STEC residuals are per space vehicle, troposphere is not. + * + * It is typically equivalent to the QZSS CLAS Sub Type 9 messages */ -#define SBP_MSG_SSR_GRIDDED_CORRECTION_NO_STD 0x05F0 +#define SBP_MSG_SSR_GRIDDED_CORRECTION 0x05FC typedef struct SBP_ATTR_PACKED { - gridded_correction_header_t header; /**< Header of a Gridded Correction message */ - grid_element_no_std_t element; /**< Tropo and STEC residuals for the given grid point */ -} msg_ssr_gridded_correction_no_std_t; + gridded_correction_header_t header; /**< Header of a gridded correction message */ + grid_element_t element; /**< Tropo and STEC residuals for the given grid point. + */ +} msg_ssr_gridded_correction_t; -/** Gridded troposphere and STEC residuals +/** Definition of a SSR atmospheric correction tile. + * - * STEC residuals are per space vehicle, tropo is not. - * It is typically equivalent to the QZSS CLAS Sub Type 9 messages + * 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. + */ +#define SBP_MSG_SSR_TILE_DEFINITION 0x05F6 +typedef struct SBP_ATTR_PACKED { + u8 tile_set_id; /**< Unique identifier of the tile set this tile belongs to. */ + u8 tile_id; /**< Unique identifier of this tile in the tile set. + +See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID. + */ + u16 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] */ + u16 corner_nw_lon; /**< North-West corner correction point longtitude. + +The relation between the longtitude 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 longtitude direction. + +See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongtitude. + [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 longtitude direction. + +See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongtitude. + */ + u64 bitmask; /**< 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. */ -#define SBP_MSG_SSR_GRIDDED_CORRECTION 0x05FA +} msg_ssr_tile_definition_t; + + +#define SBP_MSG_SSR_ORBIT_CLOCK_DEP_A 0x05DC typedef struct SBP_ATTR_PACKED { - gridded_correction_header_t header; /**< Header of a Gridded Correction message */ - grid_element_t element; /**< Tropo and STEC residuals for the given grid point (mean -and standard deviation) + gps_time_sec_t time; /**< GNSS reference time of the correction */ + sbp_gnss_signal_t sid; /**< GNSS signal identifier (16 bit) */ + u8 update_interval; /**< Update interval between consecutive corrections. Encoded +following RTCM DF391 specification. */ -} msg_ssr_gridded_correction_t; + 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 + */ + u8 iod; /**< Issue of broadcast ephemeris data */ + s32 radial; /**< Orbit radial delta correction [0.1 mm] */ + s32 along; /**< Orbit along delta correction [0.4 mm] */ + s32 cross; /**< Orbit along delta correction [0.4 mm] */ + s32 dot_radial; /**< Velocity of orbit radial delta correction [0.001 mm/s] */ + s32 dot_along; /**< Velocity of orbit along delta correction [0.004 mm/s] */ + s32 dot_cross; /**< Velocity of orbit cross delta correction [0.004 mm/s] */ + s32 c0; /**< C0 polynomial coefficient for correction of broadcast satellite clock [0.1 mm] */ + s32 c1; /**< C1 polynomial coefficient for correction of broadcast satellite clock [0.001 mm/s] */ + s32 c2; /**< C2 polynomial coefficient for correction of broadcast satellite clock [0.00002 mm/s^-2] */ +} msg_ssr_orbit_clock_dep_a_t; + + +/** Header for MSG_SSR_STEC_CORRECTION_DEP message + * + * A full set of STEC information will likely span multiple SBP + * messages, since SBP message a limited to 255 bytes. The header + * is used to tie multiple SBP messages into a sequence. + */ +typedef struct SBP_ATTR_PACKED { + gps_time_sec_t time; /**< GNSS reference time of the correction */ + u8 num_msgs; /**< Number of messages in the dataset */ + u8 seq_num; /**< Position of this message in the dataset */ + u8 update_interval; /**< Update interval between consecutive corrections. Encoded +following RTCM DF391 specification. + */ + u8 iod_atmo; /**< IOD of the SSR atmospheric correction + */ +} stec_header_dep_a_t; + + +/** Header for MSG_SSR_GRIDDED_CORRECTION_DEP + * + * The 3GPP message contains nested variable length arrays + * which are not suppported in SBP, so each grid point will + * be identified by the index. + */ +typedef struct SBP_ATTR_PACKED { + gps_time_sec_t time; /**< GNSS reference time of the correction */ + u16 num_msgs; /**< Number of messages in the dataset */ + u16 seq_num; /**< Position of this message in the dataset */ + u8 update_interval; /**< Update interval between consecutive corrections. Encoded +following RTCM DF391 specification. + */ + u8 iod_atmo; /**< IOD of the SSR atmospheric correction + */ + u8 tropo_quality_indicator; /**< Quality of the troposphere data. Encoded following RTCM DF389 +specifcation in units of m. + */ +} gridded_correction_header_dep_a_t; -/** Definition of the grid for STEC and tropo messages +/** Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. * - * Based on the 3GPP proposal R2-1906781 which is in turn based on - * OMA-LPPe-ValidityArea from OMA-TS-LPPe-V2_0-20141202-C + * Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. + * Also includes an RLE encoded validity list. + */ +typedef struct SBP_ATTR_PACKED { + u8 region_size_inverse; /**< region_size (deg) = 10 / region_size_inverse +0 is an invalid value. + [inverse degrees] */ + u16 area_width; /**< grid height (deg) = grid width (deg) = area_width / region_size +0 is an invalid value. + */ + u16 lat_nw_corner_enc; /**< North-West corner latitude (deg) = region_size * lat_nw_corner_enc - 90 */ + u16 lon_nw_corner_enc; /**< North-West corner longtitude (deg) = region_size * lon_nw_corner_enc - 180 */ + u8 num_msgs; /**< Number of messages in the dataset */ + u8 seq_num; /**< Postion of this message in the dataset */ +} grid_definition_header_dep_a_t; + + +#define SBP_MSG_SSR_STEC_CORRECTION_DEP_A 0x05EB +typedef struct SBP_ATTR_PACKED { + stec_header_dep_a_t header; /**< Header of a STEC message */ + stec_sat_element_t stec_sat_list[0]; /**< Array of STEC information for each space vehicle */ +} msg_ssr_stec_correction_dep_a_t; + + +#define SBP_MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A 0x05F0 +typedef struct SBP_ATTR_PACKED { + gridded_correction_header_dep_a_t header; /**< Header of a Gridded Correction message */ + grid_element_no_std_t element; /**< Tropo and STEC residuals for the given grid point */ +} msg_ssr_gridded_correction_no_std_dep_a_t; + + +#define SBP_MSG_SSR_GRIDDED_CORRECTION_DEP_A 0x05FA +typedef struct SBP_ATTR_PACKED { + gridded_correction_header_dep_a_t header; /**< Header of a Gridded Correction message */ + grid_element_t element; /**< Tropo and STEC residuals for the given grid point (mean +and standard deviation) */ -#define SBP_MSG_SSR_GRID_DEFINITION 0x05F5 +} msg_ssr_gridded_correction_dep_a_t; + + +#define SBP_MSG_SSR_GRID_DEFINITION_DEP_A 0x05F5 typedef struct SBP_ATTR_PACKED { - grid_definition_header_t header; /**< Header of a Gridded Correction message */ + grid_definition_header_dep_a_t header; /**< Header of a Gridded Correction message */ u8 rle_list[0]; /**< Run Length Encode list of quadrants that contain valid data. The spec describes the encoding scheme in detail, but essentially the index of the quadrants that contain transitions between valid and invalid (and vice versa) are encoded as u8 integers. */ -} msg_ssr_grid_definition_t; +} msg_ssr_grid_definition_dep_a_t; /** \} */ diff --git a/docs/sbp.pdf b/docs/sbp.pdf index 44787beec2..b90d5c2371 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 290607cc79..a99de200f5 100644 --- a/haskell/src/SwiftNav/SBP/Msg.hs +++ b/haskell/src/SwiftNav/SBP/Msg.hs @@ -206,13 +206,16 @@ data SBPMsg = | SBPMsgSpecan MsgSpecan Msg | SBPMsgSpecanDep MsgSpecanDep Msg | SBPMsgSsrCodeBiases MsgSsrCodeBiases Msg - | SBPMsgSsrGridDefinition MsgSsrGridDefinition Msg + | SBPMsgSsrGridDefinitionDepA MsgSsrGridDefinitionDepA Msg | SBPMsgSsrGriddedCorrection MsgSsrGriddedCorrection Msg - | SBPMsgSsrGriddedCorrectionNoStd MsgSsrGriddedCorrectionNoStd Msg + | SBPMsgSsrGriddedCorrectionDepA MsgSsrGriddedCorrectionDepA Msg + | SBPMsgSsrGriddedCorrectionNoStdDepA MsgSsrGriddedCorrectionNoStdDepA Msg | SBPMsgSsrOrbitClock MsgSsrOrbitClock Msg | SBPMsgSsrOrbitClockDepA MsgSsrOrbitClockDepA Msg | SBPMsgSsrPhaseBiases MsgSsrPhaseBiases Msg | SBPMsgSsrStecCorrection MsgSsrStecCorrection Msg + | SBPMsgSsrStecCorrectionDepA MsgSsrStecCorrectionDepA Msg + | SBPMsgSsrTileDefinition MsgSsrTileDefinition Msg | SBPMsgStartup MsgStartup Msg | SBPMsgStmFlashLockSector MsgStmFlashLockSector Msg | SBPMsgStmFlashUnlockSector MsgStmFlashUnlockSector Msg @@ -410,13 +413,16 @@ instance Binary SBPMsg where | _msgSBPType == msgSpecan = SBPMsgSpecan (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSpecanDep = SBPMsgSpecanDep (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrCodeBiases = SBPMsgSsrCodeBiases (decode (fromStrict (unBytes _msgSBPPayload))) m - | _msgSBPType == msgSsrGridDefinition = SBPMsgSsrGridDefinition (decode (fromStrict (unBytes _msgSBPPayload))) m + | _msgSBPType == msgSsrGridDefinitionDepA = SBPMsgSsrGridDefinitionDepA (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrGriddedCorrection = SBPMsgSsrGriddedCorrection (decode (fromStrict (unBytes _msgSBPPayload))) m - | _msgSBPType == msgSsrGriddedCorrectionNoStd = SBPMsgSsrGriddedCorrectionNoStd (decode (fromStrict (unBytes _msgSBPPayload))) m + | _msgSBPType == msgSsrGriddedCorrectionDepA = SBPMsgSsrGriddedCorrectionDepA (decode (fromStrict (unBytes _msgSBPPayload))) m + | _msgSBPType == msgSsrGriddedCorrectionNoStdDepA = SBPMsgSsrGriddedCorrectionNoStdDepA (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrOrbitClock = SBPMsgSsrOrbitClock (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrOrbitClockDepA = SBPMsgSsrOrbitClockDepA (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrPhaseBiases = SBPMsgSsrPhaseBiases (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgSsrStecCorrection = SBPMsgSsrStecCorrection (decode (fromStrict (unBytes _msgSBPPayload))) m + | _msgSBPType == msgSsrStecCorrectionDepA = SBPMsgSsrStecCorrectionDepA (decode (fromStrict (unBytes _msgSBPPayload))) m + | _msgSBPType == msgSsrTileDefinition = SBPMsgSsrTileDefinition (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgStartup = SBPMsgStartup (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgStmFlashLockSector = SBPMsgStmFlashLockSector (decode (fromStrict (unBytes _msgSBPPayload))) m | _msgSBPType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector (decode (fromStrict (unBytes _msgSBPPayload))) m @@ -606,13 +612,16 @@ instance Binary SBPMsg where encoder (SBPMsgSpecan _ m) = put m encoder (SBPMsgSpecanDep _ m) = put m encoder (SBPMsgSsrCodeBiases _ m) = put m - encoder (SBPMsgSsrGridDefinition _ m) = put m + encoder (SBPMsgSsrGridDefinitionDepA _ m) = put m encoder (SBPMsgSsrGriddedCorrection _ m) = put m - encoder (SBPMsgSsrGriddedCorrectionNoStd _ m) = put m + encoder (SBPMsgSsrGriddedCorrectionDepA _ m) = put m + encoder (SBPMsgSsrGriddedCorrectionNoStdDepA _ m) = put m encoder (SBPMsgSsrOrbitClock _ m) = put m encoder (SBPMsgSsrOrbitClockDepA _ m) = put m encoder (SBPMsgSsrPhaseBiases _ m) = put m encoder (SBPMsgSsrStecCorrection _ m) = put m + encoder (SBPMsgSsrStecCorrectionDepA _ m) = put m + encoder (SBPMsgSsrTileDefinition _ m) = put m encoder (SBPMsgStartup _ m) = put m encoder (SBPMsgStmFlashLockSector _ m) = put m encoder (SBPMsgStmFlashUnlockSector _ m) = put m @@ -806,13 +815,16 @@ instance FromJSON SBPMsg where | msgType == msgSpecan = SBPMsgSpecan <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSpecanDep = SBPMsgSpecanDep <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrCodeBiases = SBPMsgSsrCodeBiases <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj - | msgType == msgSsrGridDefinition = SBPMsgSsrGridDefinition <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj + | msgType == msgSsrGridDefinitionDepA = SBPMsgSsrGridDefinitionDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrGriddedCorrection = SBPMsgSsrGriddedCorrection <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj - | msgType == msgSsrGriddedCorrectionNoStd = SBPMsgSsrGriddedCorrectionNoStd <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj + | msgType == msgSsrGriddedCorrectionDepA = SBPMsgSsrGriddedCorrectionDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj + | msgType == msgSsrGriddedCorrectionNoStdDepA = SBPMsgSsrGriddedCorrectionNoStdDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrOrbitClock = SBPMsgSsrOrbitClock <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrOrbitClockDepA = SBPMsgSsrOrbitClockDepA <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrPhaseBiases = SBPMsgSsrPhaseBiases <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgSsrStecCorrection = SBPMsgSsrStecCorrection <$> 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 == msgStartup = SBPMsgStartup <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgStmFlashLockSector = SBPMsgStmFlashLockSector <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj | msgType == msgStmFlashUnlockSector = SBPMsgStmFlashUnlockSector <$> pure (decode (fromStrict (unBytes payload))) <*> parseJSON obj @@ -1007,13 +1019,16 @@ instance ToJSON SBPMsg where toJSON (SBPMsgSpecan n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSpecanDep n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrCodeBiases n m) = toJSON n <<>> toJSON m - toJSON (SBPMsgSsrGridDefinition n m) = toJSON n <<>> toJSON m + toJSON (SBPMsgSsrGridDefinitionDepA n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrGriddedCorrection n m) = toJSON n <<>> toJSON m - toJSON (SBPMsgSsrGriddedCorrectionNoStd n m) = toJSON n <<>> toJSON m + toJSON (SBPMsgSsrGriddedCorrectionDepA n m) = toJSON n <<>> toJSON m + toJSON (SBPMsgSsrGriddedCorrectionNoStdDepA n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrOrbitClock n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrOrbitClockDepA n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrPhaseBiases n m) = toJSON n <<>> toJSON m toJSON (SBPMsgSsrStecCorrection n m) = toJSON n <<>> toJSON m + toJSON (SBPMsgSsrStecCorrectionDepA n m) = toJSON n <<>> toJSON m + toJSON (SBPMsgSsrTileDefinition n m) = toJSON n <<>> toJSON m toJSON (SBPMsgStartup n m) = toJSON n <<>> toJSON m toJSON (SBPMsgStmFlashLockSector n m) = toJSON n <<>> toJSON m toJSON (SBPMsgStmFlashUnlockSector n m) = toJSON n <<>> toJSON m @@ -1202,13 +1217,16 @@ instance HasMsg SBPMsg where msg f (SBPMsgSpecan n m) = SBPMsgSpecan n <$> f m msg f (SBPMsgSpecanDep n m) = SBPMsgSpecanDep n <$> f m msg f (SBPMsgSsrCodeBiases n m) = SBPMsgSsrCodeBiases n <$> f m - msg f (SBPMsgSsrGridDefinition n m) = SBPMsgSsrGridDefinition n <$> f m + msg f (SBPMsgSsrGridDefinitionDepA n m) = SBPMsgSsrGridDefinitionDepA n <$> f m msg f (SBPMsgSsrGriddedCorrection n m) = SBPMsgSsrGriddedCorrection n <$> f m - msg f (SBPMsgSsrGriddedCorrectionNoStd n m) = SBPMsgSsrGriddedCorrectionNoStd n <$> f m + msg f (SBPMsgSsrGriddedCorrectionDepA n m) = SBPMsgSsrGriddedCorrectionDepA n <$> f m + msg f (SBPMsgSsrGriddedCorrectionNoStdDepA n m) = SBPMsgSsrGriddedCorrectionNoStdDepA n <$> f m msg f (SBPMsgSsrOrbitClock n m) = SBPMsgSsrOrbitClock n <$> f m msg f (SBPMsgSsrOrbitClockDepA n m) = SBPMsgSsrOrbitClockDepA n <$> f m msg f (SBPMsgSsrPhaseBiases n m) = SBPMsgSsrPhaseBiases n <$> f m msg f (SBPMsgSsrStecCorrection n m) = SBPMsgSsrStecCorrection n <$> f m + msg f (SBPMsgSsrStecCorrectionDepA n m) = SBPMsgSsrStecCorrectionDepA n <$> f m + msg f (SBPMsgSsrTileDefinition n m) = SBPMsgSsrTileDefinition n <$> f m msg f (SBPMsgStartup n m) = SBPMsgStartup n <$> f m msg f (SBPMsgStmFlashLockSector n m) = SBPMsgStmFlashLockSector n <$> f m msg f (SBPMsgStmFlashUnlockSector n m) = SBPMsgStmFlashUnlockSector n <$> f m diff --git a/haskell/src/SwiftNav/SBP/Observation.hs b/haskell/src/SwiftNav/SBP/Observation.hs index 4b6de57b50..abbee8abdc 100644 --- a/haskell/src/SwiftNav/SBP/Observation.hs +++ b/haskell/src/SwiftNav/SBP/Observation.hs @@ -930,9 +930,11 @@ data MsgEphemerisBds = MsgEphemerisBds , _msgEphemerisBds_toc :: !GpsTimeSec -- ^ Clock reference , _msgEphemerisBds_iode :: !Word8 - -- ^ Issue of ephemeris data + -- ^ Issue of ephemeris data Calculated from the navigation data parameter + -- t_oe per RTCM/CSNO recommendation: IODE = mod (t_oe / 720, 240) , _msgEphemerisBds_iodc :: !Word16 - -- ^ Issue of clock data + -- ^ Issue of clock data Calculated from the navigation data parameter t_oe + -- per RTCM/CSNO recommendation: IODE = mod (t_oc / 720, 240) } deriving ( Show, Read, Eq ) instance Binary MsgEphemerisBds where @@ -1050,9 +1052,9 @@ data MsgEphemerisGalDepA = MsgEphemerisGalDepA , _msgEphemerisGalDepA_toc :: !GpsTimeSec -- ^ Clock reference , _msgEphemerisGalDepA_iode :: !Word16 - -- ^ Issue of ephemeris data + -- ^ Issue of data (IODnav) , _msgEphemerisGalDepA_iodc :: !Word16 - -- ^ Issue of clock data + -- ^ Issue of data (IODnav). Always equal to iode } deriving ( Show, Read, Eq ) instance Binary MsgEphemerisGalDepA where @@ -1172,11 +1174,11 @@ data MsgEphemerisGal = MsgEphemerisGal , _msgEphemerisGal_toc :: !GpsTimeSec -- ^ Clock reference , _msgEphemerisGal_iode :: !Word16 - -- ^ Issue of ephemeris data + -- ^ Issue of data (IODnav) , _msgEphemerisGal_iodc :: !Word16 - -- ^ Issue of clock data + -- ^ Issue of data (IODnav). Always equal to iode , _msgEphemerisGal_source :: !Word8 - -- ^ 0=I/NAV, 1=F/NAV, ... + -- ^ 0=I/NAV, 1=F/NAV } deriving ( Show, Read, Eq ) instance Binary MsgEphemerisGal where @@ -1534,7 +1536,7 @@ data MsgEphemerisGloDepD = MsgEphemerisGloDepD , _msgEphemerisGloDepD_fcn :: !Word8 -- ^ Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid , _msgEphemerisGloDepD_iod :: !Word8 - -- ^ Issue of ephemeris data + -- ^ Issue of data. Equal to the 7 bits of the immediate data word t_b } deriving ( Show, Read, Eq ) instance Binary MsgEphemerisGloDepD where @@ -1592,7 +1594,7 @@ data MsgEphemerisGlo = MsgEphemerisGlo , _msgEphemerisGlo_fcn :: !Word8 -- ^ Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid , _msgEphemerisGlo_iod :: !Word8 - -- ^ Issue of ephemeris data + -- ^ Issue of data. Equal to the 7 bits of the immediate data word t_b } deriving ( Show, Read, Eq ) instance Binary MsgEphemerisGlo where diff --git a/haskell/src/SwiftNav/SBP/Ssr.hs b/haskell/src/SwiftNav/SBP/Ssr.hs index d07840639a..08b4a1fb85 100644 --- a/haskell/src/SwiftNav/SBP/Ssr.hs +++ b/haskell/src/SwiftNav/SBP/Ssr.hs @@ -103,7 +103,11 @@ $(makeLenses ''PhaseBiasesContent) -- SBP message a limited to 255 bytes. The header is used to tie multiple SBP -- messages into a sequence. data STECHeader = STECHeader - { _sTECHeader_time :: !GpsTimeSec + { _sTECHeader_tile_set_id :: !Word8 + -- ^ Unique identifier of the tile set this tile belongs to. + , _sTECHeader_tile_id :: !Word8 + -- ^ Unique identifier of this tile in the tile set. + , _sTECHeader_time :: !GpsTimeSec -- ^ GNSS reference time of the correction , _sTECHeader_num_msgs :: !Word8 -- ^ Number of messages in the dataset @@ -118,6 +122,8 @@ data STECHeader = STECHeader instance Binary STECHeader where get = do + _sTECHeader_tile_set_id <- getWord8 + _sTECHeader_tile_id <- getWord8 _sTECHeader_time <- get _sTECHeader_num_msgs <- getWord8 _sTECHeader_seq_num <- getWord8 @@ -126,6 +132,8 @@ instance Binary STECHeader where pure STECHeader {..} put STECHeader {..} = do + putWord8 _sTECHeader_tile_set_id + putWord8 _sTECHeader_tile_id put _sTECHeader_time putWord8 _sTECHeader_num_msgs putWord8 _sTECHeader_seq_num @@ -137,10 +145,14 @@ $(makeLenses ''STECHeader) -- | GriddedCorrectionHeader. -- --- The 3GPP message contains nested variable length arrays which are not +-- The LPP message contains nested variable length arrays which are not -- suppported in SBP, so each grid point will be identified by the index. data GriddedCorrectionHeader = GriddedCorrectionHeader - { _griddedCorrectionHeader_time :: !GpsTimeSec + { _griddedCorrectionHeader_tile_set_id :: !Word8 + -- ^ Unique identifier of the tile set this tile belongs to. + , _griddedCorrectionHeader_tile_id :: !Word8 + -- ^ Unique identifier of this tile in the tile set. + , _griddedCorrectionHeader_time :: !GpsTimeSec -- ^ GNSS reference time of the correction , _griddedCorrectionHeader_num_msgs :: !Word16 -- ^ Number of messages in the dataset @@ -158,6 +170,8 @@ data GriddedCorrectionHeader = GriddedCorrectionHeader instance Binary GriddedCorrectionHeader where get = do + _griddedCorrectionHeader_tile_set_id <- getWord8 + _griddedCorrectionHeader_tile_id <- getWord8 _griddedCorrectionHeader_time <- get _griddedCorrectionHeader_num_msgs <- getWord16le _griddedCorrectionHeader_seq_num <- getWord16le @@ -167,6 +181,8 @@ instance Binary GriddedCorrectionHeader where pure GriddedCorrectionHeader {..} put GriddedCorrectionHeader {..} = do + putWord8 _griddedCorrectionHeader_tile_set_id + putWord8 _griddedCorrectionHeader_tile_id put _griddedCorrectionHeader_time putWord16le _griddedCorrectionHeader_num_msgs putWord16le _griddedCorrectionHeader_seq_num @@ -362,48 +378,6 @@ instance Binary GridElement where $(makeJSON "_gridElement_" ''GridElement) $(makeLenses ''GridElement) --- | GridDefinitionHeader. --- --- Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. Also includes an --- RLE encoded validity list. -data GridDefinitionHeader = GridDefinitionHeader - { _gridDefinitionHeader_region_size_inverse :: !Word8 - -- ^ region_size (deg) = 10 / region_size_inverse 0 is an invalid value. - , _gridDefinitionHeader_area_width :: !Word16 - -- ^ grid height (deg) = grid idth (deg) = area_width / region_size 0 is an - -- invalid value. - , _gridDefinitionHeader_lat_nw_corner_enc :: !Word16 - -- ^ North-West corner latitdue (deg) = region_size * lat_nw_corner_enc - 90 - , _gridDefinitionHeader_lon_nw_corner_enc :: !Word16 - -- ^ North-West corner longtitude (deg) = region_size * lon_nw_corner_enc - - -- 180 - , _gridDefinitionHeader_num_msgs :: !Word8 - -- ^ Number of messages in the dataset - , _gridDefinitionHeader_seq_num :: !Word8 - -- ^ Postion of this message in the dataset - } deriving ( Show, Read, Eq ) - -instance Binary GridDefinitionHeader where - get = do - _gridDefinitionHeader_region_size_inverse <- getWord8 - _gridDefinitionHeader_area_width <- getWord16le - _gridDefinitionHeader_lat_nw_corner_enc <- getWord16le - _gridDefinitionHeader_lon_nw_corner_enc <- getWord16le - _gridDefinitionHeader_num_msgs <- getWord8 - _gridDefinitionHeader_seq_num <- getWord8 - pure GridDefinitionHeader {..} - - put GridDefinitionHeader {..} = do - putWord8 _gridDefinitionHeader_region_size_inverse - putWord16le _gridDefinitionHeader_area_width - putWord16le _gridDefinitionHeader_lat_nw_corner_enc - putWord16le _gridDefinitionHeader_lon_nw_corner_enc - putWord8 _gridDefinitionHeader_num_msgs - putWord8 _gridDefinitionHeader_seq_num - -$(makeJSON "_gridDefinitionHeader_" ''GridDefinitionHeader) -$(makeLenses ''GridDefinitionHeader) - msgSsrOrbitClock :: Word16 msgSsrOrbitClock = 0x05DD @@ -483,85 +457,6 @@ $(makeSBP 'msgSsrOrbitClock ''MsgSsrOrbitClock) $(makeJSON "_msgSsrOrbitClock_" ''MsgSsrOrbitClock) $(makeLenses ''MsgSsrOrbitClock) -msgSsrOrbitClockDepA :: Word16 -msgSsrOrbitClockDepA = 0x05DC - --- | SBP class for message MSG_SSR_ORBIT_CLOCK_DEP_A (0x05DC). --- --- The precise orbit and clock correction message is to be applied as a delta --- correction to broadcast ephemeris and is typically an equivalent to the 1060 --- and 1066 RTCM message types -data MsgSsrOrbitClockDepA = MsgSsrOrbitClockDepA - { _msgSsrOrbitClockDepA_time :: !GpsTimeSec - -- ^ GNSS reference time of the correction - , _msgSsrOrbitClockDepA_sid :: !GnssSignal - -- ^ GNSS signal identifier (16 bit) - , _msgSsrOrbitClockDepA_update_interval :: !Word8 - -- ^ Update interval between consecutive corrections. Encoded following RTCM - -- DF391 specification. - , _msgSsrOrbitClockDepA_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 - , _msgSsrOrbitClockDepA_iod :: !Word8 - -- ^ Issue of broadcast ephemeris data - , _msgSsrOrbitClockDepA_radial :: !Int32 - -- ^ Orbit radial delta correction - , _msgSsrOrbitClockDepA_along :: !Int32 - -- ^ Orbit along delta correction - , _msgSsrOrbitClockDepA_cross :: !Int32 - -- ^ Orbit along delta correction - , _msgSsrOrbitClockDepA_dot_radial :: !Int32 - -- ^ Velocity of orbit radial delta correction - , _msgSsrOrbitClockDepA_dot_along :: !Int32 - -- ^ Velocity of orbit along delta correction - , _msgSsrOrbitClockDepA_dot_cross :: !Int32 - -- ^ Velocity of orbit cross delta correction - , _msgSsrOrbitClockDepA_c0 :: !Int32 - -- ^ C0 polynomial coefficient for correction of broadcast satellite clock - , _msgSsrOrbitClockDepA_c1 :: !Int32 - -- ^ C1 polynomial coefficient for correction of broadcast satellite clock - , _msgSsrOrbitClockDepA_c2 :: !Int32 - -- ^ C2 polynomial coefficient for correction of broadcast satellite clock - } deriving ( Show, Read, Eq ) - -instance Binary MsgSsrOrbitClockDepA where - get = do - _msgSsrOrbitClockDepA_time <- get - _msgSsrOrbitClockDepA_sid <- get - _msgSsrOrbitClockDepA_update_interval <- getWord8 - _msgSsrOrbitClockDepA_iod_ssr <- getWord8 - _msgSsrOrbitClockDepA_iod <- getWord8 - _msgSsrOrbitClockDepA_radial <- (fromIntegral <$> getWord32le) - _msgSsrOrbitClockDepA_along <- (fromIntegral <$> getWord32le) - _msgSsrOrbitClockDepA_cross <- (fromIntegral <$> getWord32le) - _msgSsrOrbitClockDepA_dot_radial <- (fromIntegral <$> getWord32le) - _msgSsrOrbitClockDepA_dot_along <- (fromIntegral <$> getWord32le) - _msgSsrOrbitClockDepA_dot_cross <- (fromIntegral <$> getWord32le) - _msgSsrOrbitClockDepA_c0 <- (fromIntegral <$> getWord32le) - _msgSsrOrbitClockDepA_c1 <- (fromIntegral <$> getWord32le) - _msgSsrOrbitClockDepA_c2 <- (fromIntegral <$> getWord32le) - pure MsgSsrOrbitClockDepA {..} - - put MsgSsrOrbitClockDepA {..} = do - put _msgSsrOrbitClockDepA_time - put _msgSsrOrbitClockDepA_sid - putWord8 _msgSsrOrbitClockDepA_update_interval - putWord8 _msgSsrOrbitClockDepA_iod_ssr - putWord8 _msgSsrOrbitClockDepA_iod - (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_radial - (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_along - (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_cross - (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_dot_radial - (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_dot_along - (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_dot_cross - (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_c0 - (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_c1 - (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_c2 - -$(makeSBP 'msgSsrOrbitClockDepA ''MsgSsrOrbitClockDepA) -$(makeJSON "_msgSsrOrbitClockDepA_" ''MsgSsrOrbitClockDepA) -$(makeLenses ''MsgSsrOrbitClockDepA) - msgSsrCodeBiases :: Word16 msgSsrCodeBiases = 0x05E1 @@ -667,19 +562,20 @@ $(makeJSON "_msgSsrPhaseBiases_" ''MsgSsrPhaseBiases) $(makeLenses ''MsgSsrPhaseBiases) msgSsrStecCorrection :: Word16 -msgSsrStecCorrection = 0x05EB +msgSsrStecCorrection = 0x05FB --- | SBP class for message MSG_SSR_STEC_CORRECTION (0x05EB). +-- | SBP class for message MSG_SSR_STEC_CORRECTION (0x05FB). -- --- The STEC per space vehicle, given as polynomial approximation for a given --- grid. This should be combined with MSG_SSR_GRIDDED_CORRECTION message to --- get the state space representation of the atmospheric delay. It is typically --- equivalent to the QZSS CLAS Sub Type 8 messages +-- The Slant Total Electron Content per space vehicle, given as polynomial +-- approximation for a given tile. This should be combined with the +-- MSG_SSR_GRIDDED_CORRECTION message to get the state space representation of +-- the atmospheric delay. It is typically equivalent to the QZSS CLAS Sub Type +-- 8 messages. data MsgSsrStecCorrection = MsgSsrStecCorrection { _msgSsrStecCorrection_header :: !STECHeader - -- ^ Header of a STEC message + -- ^ Header of a STEC polynomial coeffcient message. , _msgSsrStecCorrection_stec_sat_list :: ![STECSatElement] - -- ^ Array of STEC information for each space vehicle + -- ^ Array of STEC polynomial coeffcients for each space vehicle. } deriving ( Show, Read, Eq ) instance Binary MsgSsrStecCorrection where @@ -696,46 +592,18 @@ $(makeSBP 'msgSsrStecCorrection ''MsgSsrStecCorrection) $(makeJSON "_msgSsrStecCorrection_" ''MsgSsrStecCorrection) $(makeLenses ''MsgSsrStecCorrection) -msgSsrGriddedCorrectionNoStd :: Word16 -msgSsrGriddedCorrectionNoStd = 0x05F0 - --- | SBP class for message MSG_SSR_GRIDDED_CORRECTION_NO_STD (0x05F0). --- --- This message was deprecated when variances (stddev) were added. -data MsgSsrGriddedCorrectionNoStd = MsgSsrGriddedCorrectionNoStd - { _msgSsrGriddedCorrectionNoStd_header :: !GriddedCorrectionHeader - -- ^ Header of a Gridded Correction message - , _msgSsrGriddedCorrectionNoStd_element :: !GridElementNoStd - -- ^ Tropo and STEC residuals for the given grid point - } deriving ( Show, Read, Eq ) - -instance Binary MsgSsrGriddedCorrectionNoStd where - get = do - _msgSsrGriddedCorrectionNoStd_header <- get - _msgSsrGriddedCorrectionNoStd_element <- get - pure MsgSsrGriddedCorrectionNoStd {..} - - put MsgSsrGriddedCorrectionNoStd {..} = do - put _msgSsrGriddedCorrectionNoStd_header - put _msgSsrGriddedCorrectionNoStd_element - -$(makeSBP 'msgSsrGriddedCorrectionNoStd ''MsgSsrGriddedCorrectionNoStd) -$(makeJSON "_msgSsrGriddedCorrectionNoStd_" ''MsgSsrGriddedCorrectionNoStd) -$(makeLenses ''MsgSsrGriddedCorrectionNoStd) - msgSsrGriddedCorrection :: Word16 -msgSsrGriddedCorrection = 0x05FA +msgSsrGriddedCorrection = 0x05FC --- | SBP class for message MSG_SSR_GRIDDED_CORRECTION (0x05FA). +-- | SBP class for message MSG_SSR_GRIDDED_CORRECTION (0x05FC). -- --- STEC residuals are per space vehicle, tropo is not. It is typically +-- STEC residuals are per space vehicle, troposphere is not. It is typically -- equivalent to the QZSS CLAS Sub Type 9 messages data MsgSsrGriddedCorrection = MsgSsrGriddedCorrection { _msgSsrGriddedCorrection_header :: !GriddedCorrectionHeader - -- ^ Header of a Gridded Correction message + -- ^ Header of a gridded correction message , _msgSsrGriddedCorrection_element :: !GridElement - -- ^ Tropo and STEC residuals for the given grid point (mean and standard - -- deviation) + -- ^ Tropo and STEC residuals for the given grid point. } deriving ( Show, Read, Eq ) instance Binary MsgSsrGriddedCorrection where @@ -752,33 +620,377 @@ $(makeSBP 'msgSsrGriddedCorrection ''MsgSsrGriddedCorrection) $(makeJSON "_msgSsrGriddedCorrection_" ''MsgSsrGriddedCorrection) $(makeLenses ''MsgSsrGriddedCorrection) -msgSsrGridDefinition :: Word16 -msgSsrGridDefinition = 0x05F5 +msgSsrTileDefinition :: Word16 +msgSsrTileDefinition = 0x05F6 + +-- | SBP class for message MSG_SSR_TILE_DEFINITION (0x05F6). +-- +-- 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_tile_set_id :: !Word8 + -- ^ Unique identifier of the tile set this tile belongs to. + , _msgSsrTileDefinition_tile_id :: !Word8 + -- ^ Unique identifier of this tile in the tile set. See GNSS-SSR- + -- ArrayOfCorrectionPoints field correctionPointSetID. + , _msgSsrTileDefinition_corner_nw_lat :: !Word16 + -- ^ 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 :: !Word16 + -- ^ North-West corner correction point longtitude. The relation between the + -- longtitude 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 longtitude direction. See GNSS- + -- SSR-ArrayOfCorrectionPoints field stepOfLongtitude. + , _msgSsrTileDefinition_rows :: !Word16 + -- ^ Number of steps in the latitude direction. See GNSS-SSR- + -- ArrayOfCorrectionPoints field numberOfStepsLatitude. + , _msgSsrTileDefinition_cols :: !Word16 + -- ^ Number of steps in the longtitude direction. See GNSS-SSR- + -- ArrayOfCorrectionPoints field numberOfStepsLongtitude. + , _msgSsrTileDefinition_bitmask :: !Word64 + -- ^ 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. + } deriving ( Show, Read, Eq ) + +instance Binary MsgSsrTileDefinition where + get = do + _msgSsrTileDefinition_tile_set_id <- getWord8 + _msgSsrTileDefinition_tile_id <- getWord8 + _msgSsrTileDefinition_corner_nw_lat <- getWord16le + _msgSsrTileDefinition_corner_nw_lon <- getWord16le + _msgSsrTileDefinition_spacing_lat <- getWord16le + _msgSsrTileDefinition_spacing_lon <- getWord16le + _msgSsrTileDefinition_rows <- getWord16le + _msgSsrTileDefinition_cols <- getWord16le + _msgSsrTileDefinition_bitmask <- getWord64le + pure MsgSsrTileDefinition {..} + + put MsgSsrTileDefinition {..} = do + putWord8 _msgSsrTileDefinition_tile_set_id + putWord8 _msgSsrTileDefinition_tile_id + putWord16le _msgSsrTileDefinition_corner_nw_lat + putWord16le _msgSsrTileDefinition_corner_nw_lon + putWord16le _msgSsrTileDefinition_spacing_lat + putWord16le _msgSsrTileDefinition_spacing_lon + putWord16le _msgSsrTileDefinition_rows + putWord16le _msgSsrTileDefinition_cols + putWord64le _msgSsrTileDefinition_bitmask + +$(makeSBP 'msgSsrTileDefinition ''MsgSsrTileDefinition) +$(makeJSON "_msgSsrTileDefinition_" ''MsgSsrTileDefinition) +$(makeLenses ''MsgSsrTileDefinition) + +msgSsrOrbitClockDepA :: Word16 +msgSsrOrbitClockDepA = 0x05DC + +data MsgSsrOrbitClockDepA = MsgSsrOrbitClockDepA + { _msgSsrOrbitClockDepA_time :: !GpsTimeSec + -- ^ GNSS reference time of the correction + , _msgSsrOrbitClockDepA_sid :: !GnssSignal + -- ^ GNSS signal identifier (16 bit) + , _msgSsrOrbitClockDepA_update_interval :: !Word8 + -- ^ Update interval between consecutive corrections. Encoded following RTCM + -- DF391 specification. + , _msgSsrOrbitClockDepA_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 + , _msgSsrOrbitClockDepA_iod :: !Word8 + -- ^ Issue of broadcast ephemeris data + , _msgSsrOrbitClockDepA_radial :: !Int32 + -- ^ Orbit radial delta correction + , _msgSsrOrbitClockDepA_along :: !Int32 + -- ^ Orbit along delta correction + , _msgSsrOrbitClockDepA_cross :: !Int32 + -- ^ Orbit along delta correction + , _msgSsrOrbitClockDepA_dot_radial :: !Int32 + -- ^ Velocity of orbit radial delta correction + , _msgSsrOrbitClockDepA_dot_along :: !Int32 + -- ^ Velocity of orbit along delta correction + , _msgSsrOrbitClockDepA_dot_cross :: !Int32 + -- ^ Velocity of orbit cross delta correction + , _msgSsrOrbitClockDepA_c0 :: !Int32 + -- ^ C0 polynomial coefficient for correction of broadcast satellite clock + , _msgSsrOrbitClockDepA_c1 :: !Int32 + -- ^ C1 polynomial coefficient for correction of broadcast satellite clock + , _msgSsrOrbitClockDepA_c2 :: !Int32 + -- ^ C2 polynomial coefficient for correction of broadcast satellite clock + } deriving ( Show, Read, Eq ) + +instance Binary MsgSsrOrbitClockDepA where + get = do + _msgSsrOrbitClockDepA_time <- get + _msgSsrOrbitClockDepA_sid <- get + _msgSsrOrbitClockDepA_update_interval <- getWord8 + _msgSsrOrbitClockDepA_iod_ssr <- getWord8 + _msgSsrOrbitClockDepA_iod <- getWord8 + _msgSsrOrbitClockDepA_radial <- (fromIntegral <$> getWord32le) + _msgSsrOrbitClockDepA_along <- (fromIntegral <$> getWord32le) + _msgSsrOrbitClockDepA_cross <- (fromIntegral <$> getWord32le) + _msgSsrOrbitClockDepA_dot_radial <- (fromIntegral <$> getWord32le) + _msgSsrOrbitClockDepA_dot_along <- (fromIntegral <$> getWord32le) + _msgSsrOrbitClockDepA_dot_cross <- (fromIntegral <$> getWord32le) + _msgSsrOrbitClockDepA_c0 <- (fromIntegral <$> getWord32le) + _msgSsrOrbitClockDepA_c1 <- (fromIntegral <$> getWord32le) + _msgSsrOrbitClockDepA_c2 <- (fromIntegral <$> getWord32le) + pure MsgSsrOrbitClockDepA {..} + + put MsgSsrOrbitClockDepA {..} = do + put _msgSsrOrbitClockDepA_time + put _msgSsrOrbitClockDepA_sid + putWord8 _msgSsrOrbitClockDepA_update_interval + putWord8 _msgSsrOrbitClockDepA_iod_ssr + putWord8 _msgSsrOrbitClockDepA_iod + (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_radial + (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_along + (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_cross + (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_dot_radial + (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_dot_along + (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_dot_cross + (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_c0 + (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_c1 + (putWord32le . fromIntegral) _msgSsrOrbitClockDepA_c2 + +$(makeSBP 'msgSsrOrbitClockDepA ''MsgSsrOrbitClockDepA) +$(makeJSON "_msgSsrOrbitClockDepA_" ''MsgSsrOrbitClockDepA) +$(makeLenses ''MsgSsrOrbitClockDepA) + +-- | STECHeaderDepA. +-- +-- A full set of STEC information will likely span multiple SBP messages, since +-- SBP message a limited to 255 bytes. The header is used to tie multiple SBP +-- messages into a sequence. +data STECHeaderDepA = STECHeaderDepA + { _sTECHeaderDepA_time :: !GpsTimeSec + -- ^ GNSS reference time of the correction + , _sTECHeaderDepA_num_msgs :: !Word8 + -- ^ Number of messages in the dataset + , _sTECHeaderDepA_seq_num :: !Word8 + -- ^ Position of this message in the dataset + , _sTECHeaderDepA_update_interval :: !Word8 + -- ^ Update interval between consecutive corrections. Encoded following RTCM + -- DF391 specification. + , _sTECHeaderDepA_iod_atmo :: !Word8 + -- ^ IOD of the SSR atmospheric correction + } deriving ( Show, Read, Eq ) + +instance Binary STECHeaderDepA where + get = do + _sTECHeaderDepA_time <- get + _sTECHeaderDepA_num_msgs <- getWord8 + _sTECHeaderDepA_seq_num <- getWord8 + _sTECHeaderDepA_update_interval <- getWord8 + _sTECHeaderDepA_iod_atmo <- getWord8 + pure STECHeaderDepA {..} + + put STECHeaderDepA {..} = do + put _sTECHeaderDepA_time + putWord8 _sTECHeaderDepA_num_msgs + putWord8 _sTECHeaderDepA_seq_num + putWord8 _sTECHeaderDepA_update_interval + putWord8 _sTECHeaderDepA_iod_atmo + +$(makeJSON "_sTECHeaderDepA_" ''STECHeaderDepA) +$(makeLenses ''STECHeaderDepA) + +-- | GriddedCorrectionHeaderDepA. +-- +-- The 3GPP message contains nested variable length arrays which are not +-- suppported in SBP, so each grid point will be identified by the index. +data GriddedCorrectionHeaderDepA = GriddedCorrectionHeaderDepA + { _griddedCorrectionHeaderDepA_time :: !GpsTimeSec + -- ^ GNSS reference time of the correction + , _griddedCorrectionHeaderDepA_num_msgs :: !Word16 + -- ^ Number of messages in the dataset + , _griddedCorrectionHeaderDepA_seq_num :: !Word16 + -- ^ Position of this message in the dataset + , _griddedCorrectionHeaderDepA_update_interval :: !Word8 + -- ^ Update interval between consecutive corrections. Encoded following RTCM + -- DF391 specification. + , _griddedCorrectionHeaderDepA_iod_atmo :: !Word8 + -- ^ IOD of the SSR atmospheric correction + , _griddedCorrectionHeaderDepA_tropo_quality_indicator :: !Word8 + -- ^ Quality of the troposphere data. Encoded following RTCM DF389 + -- specifcation in units of m. + } deriving ( Show, Read, Eq ) --- | SBP class for message MSG_SSR_GRID_DEFINITION (0x05F5). +instance Binary GriddedCorrectionHeaderDepA where + get = do + _griddedCorrectionHeaderDepA_time <- get + _griddedCorrectionHeaderDepA_num_msgs <- getWord16le + _griddedCorrectionHeaderDepA_seq_num <- getWord16le + _griddedCorrectionHeaderDepA_update_interval <- getWord8 + _griddedCorrectionHeaderDepA_iod_atmo <- getWord8 + _griddedCorrectionHeaderDepA_tropo_quality_indicator <- getWord8 + pure GriddedCorrectionHeaderDepA {..} + + put GriddedCorrectionHeaderDepA {..} = do + put _griddedCorrectionHeaderDepA_time + putWord16le _griddedCorrectionHeaderDepA_num_msgs + putWord16le _griddedCorrectionHeaderDepA_seq_num + putWord8 _griddedCorrectionHeaderDepA_update_interval + putWord8 _griddedCorrectionHeaderDepA_iod_atmo + putWord8 _griddedCorrectionHeaderDepA_tropo_quality_indicator + +$(makeJSON "_griddedCorrectionHeaderDepA_" ''GriddedCorrectionHeaderDepA) +$(makeLenses ''GriddedCorrectionHeaderDepA) + +-- | GridDefinitionHeaderDepA. -- --- Based on the 3GPP proposal R2-1906781 which is in turn based on OMA-LPPe- --- ValidityArea from OMA-TS-LPPe-V2_0-20141202-C -data MsgSsrGridDefinition = MsgSsrGridDefinition - { _msgSsrGridDefinition_header :: !GridDefinitionHeader +-- Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. Also includes an +-- RLE encoded validity list. +data GridDefinitionHeaderDepA = GridDefinitionHeaderDepA + { _gridDefinitionHeaderDepA_region_size_inverse :: !Word8 + -- ^ region_size (deg) = 10 / region_size_inverse 0 is an invalid value. + , _gridDefinitionHeaderDepA_area_width :: !Word16 + -- ^ grid height (deg) = grid width (deg) = area_width / region_size 0 is an + -- invalid value. + , _gridDefinitionHeaderDepA_lat_nw_corner_enc :: !Word16 + -- ^ North-West corner latitude (deg) = region_size * lat_nw_corner_enc - 90 + , _gridDefinitionHeaderDepA_lon_nw_corner_enc :: !Word16 + -- ^ North-West corner longtitude (deg) = region_size * lon_nw_corner_enc - + -- 180 + , _gridDefinitionHeaderDepA_num_msgs :: !Word8 + -- ^ Number of messages in the dataset + , _gridDefinitionHeaderDepA_seq_num :: !Word8 + -- ^ Postion of this message in the dataset + } deriving ( Show, Read, Eq ) + +instance Binary GridDefinitionHeaderDepA where + get = do + _gridDefinitionHeaderDepA_region_size_inverse <- getWord8 + _gridDefinitionHeaderDepA_area_width <- getWord16le + _gridDefinitionHeaderDepA_lat_nw_corner_enc <- getWord16le + _gridDefinitionHeaderDepA_lon_nw_corner_enc <- getWord16le + _gridDefinitionHeaderDepA_num_msgs <- getWord8 + _gridDefinitionHeaderDepA_seq_num <- getWord8 + pure GridDefinitionHeaderDepA {..} + + put GridDefinitionHeaderDepA {..} = do + putWord8 _gridDefinitionHeaderDepA_region_size_inverse + putWord16le _gridDefinitionHeaderDepA_area_width + putWord16le _gridDefinitionHeaderDepA_lat_nw_corner_enc + putWord16le _gridDefinitionHeaderDepA_lon_nw_corner_enc + putWord8 _gridDefinitionHeaderDepA_num_msgs + putWord8 _gridDefinitionHeaderDepA_seq_num + +$(makeJSON "_gridDefinitionHeaderDepA_" ''GridDefinitionHeaderDepA) +$(makeLenses ''GridDefinitionHeaderDepA) + +msgSsrStecCorrectionDepA :: Word16 +msgSsrStecCorrectionDepA = 0x05EB + +data MsgSsrStecCorrectionDepA = MsgSsrStecCorrectionDepA + { _msgSsrStecCorrectionDepA_header :: !STECHeaderDepA + -- ^ Header of a STEC message + , _msgSsrStecCorrectionDepA_stec_sat_list :: ![STECSatElement] + -- ^ Array of STEC information for each space vehicle + } deriving ( Show, Read, Eq ) + +instance Binary MsgSsrStecCorrectionDepA where + get = do + _msgSsrStecCorrectionDepA_header <- get + _msgSsrStecCorrectionDepA_stec_sat_list <- whileM (not <$> isEmpty) get + pure MsgSsrStecCorrectionDepA {..} + + put MsgSsrStecCorrectionDepA {..} = do + put _msgSsrStecCorrectionDepA_header + mapM_ put _msgSsrStecCorrectionDepA_stec_sat_list + +$(makeSBP 'msgSsrStecCorrectionDepA ''MsgSsrStecCorrectionDepA) +$(makeJSON "_msgSsrStecCorrectionDepA_" ''MsgSsrStecCorrectionDepA) +$(makeLenses ''MsgSsrStecCorrectionDepA) + +msgSsrGriddedCorrectionNoStdDepA :: Word16 +msgSsrGriddedCorrectionNoStdDepA = 0x05F0 + +data MsgSsrGriddedCorrectionNoStdDepA = MsgSsrGriddedCorrectionNoStdDepA + { _msgSsrGriddedCorrectionNoStdDepA_header :: !GriddedCorrectionHeaderDepA + -- ^ Header of a Gridded Correction message + , _msgSsrGriddedCorrectionNoStdDepA_element :: !GridElementNoStd + -- ^ Tropo and STEC residuals for the given grid point + } deriving ( Show, Read, Eq ) + +instance Binary MsgSsrGriddedCorrectionNoStdDepA where + get = do + _msgSsrGriddedCorrectionNoStdDepA_header <- get + _msgSsrGriddedCorrectionNoStdDepA_element <- get + pure MsgSsrGriddedCorrectionNoStdDepA {..} + + put MsgSsrGriddedCorrectionNoStdDepA {..} = do + put _msgSsrGriddedCorrectionNoStdDepA_header + put _msgSsrGriddedCorrectionNoStdDepA_element + +$(makeSBP 'msgSsrGriddedCorrectionNoStdDepA ''MsgSsrGriddedCorrectionNoStdDepA) +$(makeJSON "_msgSsrGriddedCorrectionNoStdDepA_" ''MsgSsrGriddedCorrectionNoStdDepA) +$(makeLenses ''MsgSsrGriddedCorrectionNoStdDepA) + +msgSsrGriddedCorrectionDepA :: Word16 +msgSsrGriddedCorrectionDepA = 0x05FA + +data MsgSsrGriddedCorrectionDepA = MsgSsrGriddedCorrectionDepA + { _msgSsrGriddedCorrectionDepA_header :: !GriddedCorrectionHeaderDepA + -- ^ Header of a Gridded Correction message + , _msgSsrGriddedCorrectionDepA_element :: !GridElement + -- ^ Tropo and STEC residuals for the given grid point (mean and standard + -- deviation) + } deriving ( Show, Read, Eq ) + +instance Binary MsgSsrGriddedCorrectionDepA where + get = do + _msgSsrGriddedCorrectionDepA_header <- get + _msgSsrGriddedCorrectionDepA_element <- get + pure MsgSsrGriddedCorrectionDepA {..} + + put MsgSsrGriddedCorrectionDepA {..} = do + put _msgSsrGriddedCorrectionDepA_header + put _msgSsrGriddedCorrectionDepA_element + +$(makeSBP 'msgSsrGriddedCorrectionDepA ''MsgSsrGriddedCorrectionDepA) +$(makeJSON "_msgSsrGriddedCorrectionDepA_" ''MsgSsrGriddedCorrectionDepA) +$(makeLenses ''MsgSsrGriddedCorrectionDepA) + +msgSsrGridDefinitionDepA :: Word16 +msgSsrGridDefinitionDepA = 0x05F5 + +data MsgSsrGridDefinitionDepA = MsgSsrGridDefinitionDepA + { _msgSsrGridDefinitionDepA_header :: !GridDefinitionHeaderDepA -- ^ Header of a Gridded Correction message - , _msgSsrGridDefinition_rle_list :: ![Word8] + , _msgSsrGridDefinitionDepA_rle_list :: ![Word8] -- ^ Run Length Encode list of quadrants that contain valid data. The spec -- describes the encoding scheme in detail, but essentially the index of -- the quadrants that contain transitions between valid and invalid (and -- vice versa) are encoded as u8 integers. } deriving ( Show, Read, Eq ) -instance Binary MsgSsrGridDefinition where +instance Binary MsgSsrGridDefinitionDepA where get = do - _msgSsrGridDefinition_header <- get - _msgSsrGridDefinition_rle_list <- whileM (not <$> isEmpty) getWord8 - pure MsgSsrGridDefinition {..} + _msgSsrGridDefinitionDepA_header <- get + _msgSsrGridDefinitionDepA_rle_list <- whileM (not <$> isEmpty) getWord8 + pure MsgSsrGridDefinitionDepA {..} - put MsgSsrGridDefinition {..} = do - put _msgSsrGridDefinition_header - mapM_ putWord8 _msgSsrGridDefinition_rle_list + put MsgSsrGridDefinitionDepA {..} = do + put _msgSsrGridDefinitionDepA_header + mapM_ putWord8 _msgSsrGridDefinitionDepA_rle_list -$(makeSBP 'msgSsrGridDefinition ''MsgSsrGridDefinition) -$(makeJSON "_msgSsrGridDefinition_" ''MsgSsrGridDefinition) -$(makeLenses ''MsgSsrGridDefinition) +$(makeSBP 'msgSsrGridDefinitionDepA ''MsgSsrGridDefinitionDepA) +$(makeJSON "_msgSsrGridDefinitionDepA_" ''MsgSsrGridDefinitionDepA) +$(makeLenses ''MsgSsrGridDefinitionDepA) diff --git a/java/src/com/swiftnav/sbp/client/MessageTable.java b/java/src/com/swiftnav/sbp/client/MessageTable.java index f71ef7eb32..42879eddc1 100644 --- a/java/src/com/swiftnav/sbp/client/MessageTable.java +++ b/java/src/com/swiftnav/sbp/client/MessageTable.java @@ -178,13 +178,16 @@ import com.swiftnav.sbp.solution_meta.IMUInputType; import com.swiftnav.sbp.solution_meta.OdoInputType; import com.swiftnav.sbp.ssr.MsgSsrOrbitClock; -import com.swiftnav.sbp.ssr.MsgSsrOrbitClockDepA; import com.swiftnav.sbp.ssr.MsgSsrCodeBiases; import com.swiftnav.sbp.ssr.MsgSsrPhaseBiases; import com.swiftnav.sbp.ssr.MsgSsrStecCorrection; -import com.swiftnav.sbp.ssr.MsgSsrGriddedCorrectionNoStd; import com.swiftnav.sbp.ssr.MsgSsrGriddedCorrection; -import com.swiftnav.sbp.ssr.MsgSsrGridDefinition; +import com.swiftnav.sbp.ssr.MsgSsrTileDefinition; +import com.swiftnav.sbp.ssr.MsgSsrOrbitClockDepA; +import com.swiftnav.sbp.ssr.MsgSsrStecCorrectionDepA; +import com.swiftnav.sbp.ssr.MsgSsrGriddedCorrectionNoStdDepA; +import com.swiftnav.sbp.ssr.MsgSsrGriddedCorrectionDepA; +import com.swiftnav.sbp.ssr.MsgSsrGridDefinitionDepA; import com.swiftnav.sbp.system.MsgStartup; import com.swiftnav.sbp.system.MsgDgnssStatus; import com.swiftnav.sbp.system.MsgHeartbeat; @@ -536,20 +539,26 @@ static SBPMessage dispatch(SBPMessage msg) throws SBPBinaryException { return new OdoInputType(msg); case MsgSsrOrbitClock.TYPE: return new MsgSsrOrbitClock(msg); - case MsgSsrOrbitClockDepA.TYPE: - return new MsgSsrOrbitClockDepA(msg); case MsgSsrCodeBiases.TYPE: return new MsgSsrCodeBiases(msg); case MsgSsrPhaseBiases.TYPE: return new MsgSsrPhaseBiases(msg); case MsgSsrStecCorrection.TYPE: return new MsgSsrStecCorrection(msg); - case MsgSsrGriddedCorrectionNoStd.TYPE: - return new MsgSsrGriddedCorrectionNoStd(msg); case MsgSsrGriddedCorrection.TYPE: return new MsgSsrGriddedCorrection(msg); - case MsgSsrGridDefinition.TYPE: - return new MsgSsrGridDefinition(msg); + case MsgSsrTileDefinition.TYPE: + return new MsgSsrTileDefinition(msg); + case MsgSsrOrbitClockDepA.TYPE: + return new MsgSsrOrbitClockDepA(msg); + case MsgSsrStecCorrectionDepA.TYPE: + return new MsgSsrStecCorrectionDepA(msg); + case MsgSsrGriddedCorrectionNoStdDepA.TYPE: + return new MsgSsrGriddedCorrectionNoStdDepA(msg); + case MsgSsrGriddedCorrectionDepA.TYPE: + return new MsgSsrGriddedCorrectionDepA(msg); + case MsgSsrGridDefinitionDepA.TYPE: + return new MsgSsrGridDefinitionDepA(msg); case MsgStartup.TYPE: return new MsgStartup(msg); case MsgDgnssStatus.TYPE: diff --git a/java/src/com/swiftnav/sbp/observation/MsgEphemerisBds.java b/java/src/com/swiftnav/sbp/observation/MsgEphemerisBds.java index 62eaded454..72be637995 100644 --- a/java/src/com/swiftnav/sbp/observation/MsgEphemerisBds.java +++ b/java/src/com/swiftnav/sbp/observation/MsgEphemerisBds.java @@ -104,10 +104,18 @@ public class MsgEphemerisBds extends SBPMessage { /** Clock reference */ public GPSTimeSec toc; - /** Issue of ephemeris data */ + /** Issue of ephemeris data + +Calculated from the navigation data parameter t_oe per RTCM/CSNO recommendation: +IODE = mod (t_oe / 720, 240) + */ public int iode; - /** Issue of clock data */ + /** Issue of clock data + +Calculated from the navigation data parameter t_oe per RTCM/CSNO recommendation: +IODE = mod (t_oc / 720, 240) + */ public int iodc; diff --git a/java/src/com/swiftnav/sbp/observation/MsgEphemerisGal.java b/java/src/com/swiftnav/sbp/observation/MsgEphemerisGal.java index 19210534d6..d1096e5198 100644 --- a/java/src/com/swiftnav/sbp/observation/MsgEphemerisGal.java +++ b/java/src/com/swiftnav/sbp/observation/MsgEphemerisGal.java @@ -104,13 +104,13 @@ public class MsgEphemerisGal extends SBPMessage { /** Clock reference */ public GPSTimeSec toc; - /** Issue of ephemeris data */ + /** Issue of data (IODnav) */ public int iode; - /** Issue of clock data */ + /** Issue of data (IODnav). Always equal to iode */ public int iodc; - /** 0=I/NAV, 1=F/NAV, ... */ + /** 0=I/NAV, 1=F/NAV */ public int source; diff --git a/java/src/com/swiftnav/sbp/observation/MsgEphemerisGalDepA.java b/java/src/com/swiftnav/sbp/observation/MsgEphemerisGalDepA.java index 442d782490..0b51bd4391 100644 --- a/java/src/com/swiftnav/sbp/observation/MsgEphemerisGalDepA.java +++ b/java/src/com/swiftnav/sbp/observation/MsgEphemerisGalDepA.java @@ -102,10 +102,10 @@ public class MsgEphemerisGalDepA extends SBPMessage { /** Clock reference */ public GPSTimeSec toc; - /** Issue of ephemeris data */ + /** Issue of data (IODnav) */ public int iode; - /** Issue of clock data */ + /** Issue of data (IODnav). Always equal to iode */ public int iodc; diff --git a/java/src/com/swiftnav/sbp/observation/MsgEphemerisGlo.java b/java/src/com/swiftnav/sbp/observation/MsgEphemerisGlo.java index b5beee0882..450a669f6a 100644 --- a/java/src/com/swiftnav/sbp/observation/MsgEphemerisGlo.java +++ b/java/src/com/swiftnav/sbp/observation/MsgEphemerisGlo.java @@ -63,7 +63,7 @@ public class MsgEphemerisGlo extends SBPMessage { /** Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid */ public int fcn; - /** Issue of ephemeris data */ + /** Issue of data. Equal to the 7 bits of the immediate data word t_b */ public int iod; diff --git a/java/src/com/swiftnav/sbp/observation/MsgEphemerisGloDepD.java b/java/src/com/swiftnav/sbp/observation/MsgEphemerisGloDepD.java index b37ed9c234..ae1b2a5aeb 100644 --- a/java/src/com/swiftnav/sbp/observation/MsgEphemerisGloDepD.java +++ b/java/src/com/swiftnav/sbp/observation/MsgEphemerisGloDepD.java @@ -60,7 +60,7 @@ public class MsgEphemerisGloDepD extends SBPMessage { /** Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid */ public int fcn; - /** Issue of ephemeris data */ + /** Issue of data. Equal to the 7 bits of the immediate data word t_b */ public int iod; diff --git a/java/src/com/swiftnav/sbp/ssr/GridDefinitionHeaderDepA.java b/java/src/com/swiftnav/sbp/ssr/GridDefinitionHeaderDepA.java new file mode 100644 index 0000000000..f8236ba40f --- /dev/null +++ b/java/src/com/swiftnav/sbp/ssr/GridDefinitionHeaderDepA.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2015-2018 Swift Navigation Inc. + * Contact: Swift Navigation + * + * 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; + +import java.math.BigInteger; + +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.SBPBinaryException; +import com.swiftnav.sbp.SBPStruct; +import com.swiftnav.sbp.gnss.*; + +import org.json.JSONObject; +import org.json.JSONArray; +import com.swiftnav.sbp.SBPStruct; + +public class GridDefinitionHeaderDepA extends SBPStruct { + + /** region_size (deg) = 10 / region_size_inverse +0 is an invalid value. + */ + public int region_size_inverse; + + /** grid height (deg) = grid width (deg) = area_width / region_size +0 is an invalid value. + */ + public int area_width; + + /** North-West corner latitude (deg) = region_size * lat_nw_corner_enc - 90 */ + public int lat_nw_corner_enc; + + /** North-West corner longtitude (deg) = region_size * lon_nw_corner_enc - 180 */ + public int lon_nw_corner_enc; + + /** Number of messages in the dataset */ + public int num_msgs; + + /** Postion of this message in the dataset */ + public int seq_num; + + + public GridDefinitionHeaderDepA () {} + + @Override + public GridDefinitionHeaderDepA parse(SBPMessage.Parser parser) throws SBPBinaryException { + /* Parse fields from binary */ + region_size_inverse = parser.getU8(); + area_width = parser.getU16(); + lat_nw_corner_enc = parser.getU16(); + lon_nw_corner_enc = parser.getU16(); + num_msgs = parser.getU8(); + seq_num = parser.getU8(); + return this; + } + + @Override + public void build(SBPMessage.Builder builder) { + /* Build fields into binary */ + builder.putU8(region_size_inverse); + builder.putU16(area_width); + builder.putU16(lat_nw_corner_enc); + builder.putU16(lon_nw_corner_enc); + builder.putU8(num_msgs); + builder.putU8(seq_num); + } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + obj.put("region_size_inverse", region_size_inverse); + obj.put("area_width", area_width); + obj.put("lat_nw_corner_enc", lat_nw_corner_enc); + obj.put("lon_nw_corner_enc", lon_nw_corner_enc); + obj.put("num_msgs", num_msgs); + obj.put("seq_num", seq_num); + return obj; + } +} \ No newline at end of file diff --git a/java/src/com/swiftnav/sbp/ssr/GriddedCorrectionHeader.java b/java/src/com/swiftnav/sbp/ssr/GriddedCorrectionHeader.java index b8d9889bec..9c96274eb2 100644 --- a/java/src/com/swiftnav/sbp/ssr/GriddedCorrectionHeader.java +++ b/java/src/com/swiftnav/sbp/ssr/GriddedCorrectionHeader.java @@ -25,6 +25,12 @@ public class GriddedCorrectionHeader extends SBPStruct { + /** Unique identifier of the tile set this tile belongs to. */ + public int tile_set_id; + + /** Unique identifier of this tile in the tile set. */ + public int tile_id; + /** GNSS reference time of the correction */ public GPSTimeSec time; @@ -54,6 +60,8 @@ public GriddedCorrectionHeader () {} @Override public GriddedCorrectionHeader parse(SBPMessage.Parser parser) throws SBPBinaryException { /* Parse fields from binary */ + tile_set_id = parser.getU8(); + tile_id = parser.getU8(); time = new GPSTimeSec().parse(parser); num_msgs = parser.getU16(); seq_num = parser.getU16(); @@ -66,6 +74,8 @@ public GriddedCorrectionHeader parse(SBPMessage.Parser parser) throws SBPBinaryE @Override public void build(SBPMessage.Builder builder) { /* Build fields into binary */ + builder.putU8(tile_set_id); + builder.putU8(tile_id); time.build(builder); builder.putU16(num_msgs); builder.putU16(seq_num); @@ -77,6 +87,8 @@ public void build(SBPMessage.Builder builder) { @Override public JSONObject toJSON() { JSONObject obj = new JSONObject(); + obj.put("tile_set_id", tile_set_id); + obj.put("tile_id", tile_id); obj.put("time", time.toJSON()); obj.put("num_msgs", num_msgs); obj.put("seq_num", seq_num); diff --git a/java/src/com/swiftnav/sbp/ssr/GriddedCorrectionHeaderDepA.java b/java/src/com/swiftnav/sbp/ssr/GriddedCorrectionHeaderDepA.java new file mode 100644 index 0000000000..cf04879b77 --- /dev/null +++ b/java/src/com/swiftnav/sbp/ssr/GriddedCorrectionHeaderDepA.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2015-2018 Swift Navigation Inc. + * Contact: Swift Navigation + * + * 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; + +import java.math.BigInteger; + +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.SBPBinaryException; +import com.swiftnav.sbp.SBPStruct; +import com.swiftnav.sbp.gnss.*; + +import org.json.JSONObject; +import org.json.JSONArray; +import com.swiftnav.sbp.SBPStruct; + +public class GriddedCorrectionHeaderDepA extends SBPStruct { + + /** GNSS reference time of the correction */ + public GPSTimeSec time; + + /** Number of messages in the dataset */ + public int num_msgs; + + /** Position of this message in the dataset */ + public int seq_num; + + /** Update interval between consecutive corrections. Encoded +following RTCM DF391 specification. + */ + public int update_interval; + + /** IOD of the SSR atmospheric correction + */ + public int iod_atmo; + + /** Quality of the troposphere data. Encoded following RTCM DF389 +specifcation in units of m. + */ + public int tropo_quality_indicator; + + + public GriddedCorrectionHeaderDepA () {} + + @Override + public GriddedCorrectionHeaderDepA parse(SBPMessage.Parser parser) throws SBPBinaryException { + /* Parse fields from binary */ + time = new GPSTimeSec().parse(parser); + num_msgs = parser.getU16(); + seq_num = parser.getU16(); + update_interval = parser.getU8(); + iod_atmo = parser.getU8(); + tropo_quality_indicator = parser.getU8(); + return this; + } + + @Override + public void build(SBPMessage.Builder builder) { + /* Build fields into binary */ + time.build(builder); + builder.putU16(num_msgs); + builder.putU16(seq_num); + builder.putU8(update_interval); + builder.putU8(iod_atmo); + builder.putU8(tropo_quality_indicator); + } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + obj.put("time", time.toJSON()); + obj.put("num_msgs", num_msgs); + obj.put("seq_num", seq_num); + obj.put("update_interval", update_interval); + obj.put("iod_atmo", iod_atmo); + obj.put("tropo_quality_indicator", tropo_quality_indicator); + return obj; + } +} \ No newline at end of file diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrGridDefinitionDepA.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrGridDefinitionDepA.java new file mode 100644 index 0000000000..8e8e3353d9 --- /dev/null +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrGridDefinitionDepA.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2015-2018 Swift Navigation Inc. + * Contact: Swift Navigation + * + * 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; + +import java.math.BigInteger; + +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.SBPBinaryException; +import com.swiftnav.sbp.SBPStruct; +import com.swiftnav.sbp.gnss.*; + +import org.json.JSONObject; +import org.json.JSONArray; + + + +public class MsgSsrGridDefinitionDepA extends SBPMessage { + public static final int TYPE = 0x05F5; + + + /** Header of a Gridded Correction message */ + public GridDefinitionHeaderDepA header; + + /** Run Length Encode list of quadrants that contain valid data. +The spec describes the encoding scheme in detail, but +essentially the index of the quadrants that contain transitions between +valid and invalid (and vice versa) are encoded as u8 integers. + */ + public int[] rle_list; + + + public MsgSsrGridDefinitionDepA (int sender) { super(sender, TYPE); } + public MsgSsrGridDefinitionDepA () { super(TYPE); } + public MsgSsrGridDefinitionDepA (SBPMessage msg) throws SBPBinaryException { + super(msg); + assert msg.type != TYPE; + } + + @Override + protected void parse(Parser parser) throws SBPBinaryException { + /* Parse fields from binary */ + header = new GridDefinitionHeaderDepA().parse(parser); + rle_list = parser.getArrayofU8(); + } + + @Override + protected void build(Builder builder) { + header.build(builder); + builder.putArrayofU8(rle_list); + } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + obj.put("header", header.toJSON()); + obj.put("rle_list", new JSONArray(rle_list)); + return obj; + } +} \ No newline at end of file diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrGriddedCorrection.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrGriddedCorrection.java index a548c9a8ae..8d3acd3b40 100644 --- a/java/src/com/swiftnav/sbp/ssr/MsgSsrGriddedCorrection.java +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrGriddedCorrection.java @@ -23,24 +23,24 @@ import org.json.JSONArray; -/** SBP class for message MSG_SSR_GRIDDED_CORRECTION (0x05FA). +/** SBP class for message MSG_SSR_GRIDDED_CORRECTION (0x05FC). * * You can have MSG_SSR_GRIDDED_CORRECTION inherent its fields directly from * an inherited SBP object, or construct it inline using a dict of its * fields. * - * STEC residuals are per space vehicle, tropo is not. + * STEC residuals are per space vehicle, troposphere is not. + * * It is typically equivalent to the QZSS CLAS Sub Type 9 messages */ public class MsgSsrGriddedCorrection extends SBPMessage { - public static final int TYPE = 0x05FA; + public static final int TYPE = 0x05FC; - /** Header of a Gridded Correction message */ + /** Header of a gridded correction message */ public GriddedCorrectionHeader header; - /** Tropo and STEC residuals for the given grid point (mean -and standard deviation) + /** Tropo and STEC residuals for the given grid point. */ public GridElement element; diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrGriddedCorrectionDepA.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrGriddedCorrectionDepA.java new file mode 100644 index 0000000000..3a0b42e679 --- /dev/null +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrGriddedCorrectionDepA.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2015-2018 Swift Navigation Inc. + * Contact: Swift Navigation + * + * 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; + +import java.math.BigInteger; + +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.SBPBinaryException; +import com.swiftnav.sbp.SBPStruct; +import com.swiftnav.sbp.gnss.*; + +import org.json.JSONObject; +import org.json.JSONArray; + + + +public class MsgSsrGriddedCorrectionDepA extends SBPMessage { + public static final int TYPE = 0x05FA; + + + /** Header of a Gridded Correction message */ + public GriddedCorrectionHeaderDepA header; + + /** Tropo and STEC residuals for the given grid point (mean +and standard deviation) + */ + public GridElement element; + + + public MsgSsrGriddedCorrectionDepA (int sender) { super(sender, TYPE); } + public MsgSsrGriddedCorrectionDepA () { super(TYPE); } + public MsgSsrGriddedCorrectionDepA (SBPMessage msg) throws SBPBinaryException { + super(msg); + assert msg.type != TYPE; + } + + @Override + protected void parse(Parser parser) throws SBPBinaryException { + /* Parse fields from binary */ + header = new GriddedCorrectionHeaderDepA().parse(parser); + element = new GridElement().parse(parser); + } + + @Override + protected void build(Builder builder) { + header.build(builder); + element.build(builder); + } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + obj.put("header", header.toJSON()); + obj.put("element", element.toJSON()); + return obj; + } +} \ No newline at end of file diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrGriddedCorrectionNoStdDepA.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrGriddedCorrectionNoStdDepA.java new file mode 100644 index 0000000000..c9b5478f8c --- /dev/null +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrGriddedCorrectionNoStdDepA.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2015-2018 Swift Navigation Inc. + * Contact: Swift Navigation + * + * 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; + +import java.math.BigInteger; + +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.SBPBinaryException; +import com.swiftnav.sbp.SBPStruct; +import com.swiftnav.sbp.gnss.*; + +import org.json.JSONObject; +import org.json.JSONArray; + + + +public class MsgSsrGriddedCorrectionNoStdDepA extends SBPMessage { + public static final int TYPE = 0x05F0; + + + /** Header of a Gridded Correction message */ + public GriddedCorrectionHeaderDepA header; + + /** Tropo and STEC residuals for the given grid point */ + public GridElementNoStd element; + + + public MsgSsrGriddedCorrectionNoStdDepA (int sender) { super(sender, TYPE); } + public MsgSsrGriddedCorrectionNoStdDepA () { super(TYPE); } + public MsgSsrGriddedCorrectionNoStdDepA (SBPMessage msg) throws SBPBinaryException { + super(msg); + assert msg.type != TYPE; + } + + @Override + protected void parse(Parser parser) throws SBPBinaryException { + /* Parse fields from binary */ + header = new GriddedCorrectionHeaderDepA().parse(parser); + element = new GridElementNoStd().parse(parser); + } + + @Override + protected void build(Builder builder) { + header.build(builder); + element.build(builder); + } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + obj.put("header", header.toJSON()); + obj.put("element", element.toJSON()); + return obj; + } +} \ No newline at end of file diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrOrbitClockDepA.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrOrbitClockDepA.java index c9ce0f9272..1c73e1d546 100644 --- a/java/src/com/swiftnav/sbp/ssr/MsgSsrOrbitClockDepA.java +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrOrbitClockDepA.java @@ -23,16 +23,6 @@ import org.json.JSONArray; -/** SBP class for message MSG_SSR_ORBIT_CLOCK_DEP_A (0x05DC). - * - * You can have MSG_SSR_ORBIT_CLOCK_DEP_A inherent its fields directly from - * an inherited SBP object, or construct it inline using a dict of its - * fields. - * - * The precise orbit and clock correction message is - * to be applied as a delta correction to broadcast - * ephemeris and is typically an equivalent to the 1060 - * and 1066 RTCM message types */ public class MsgSsrOrbitClockDepA extends SBPMessage { public static final int TYPE = 0x05DC; diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrStecCorrection.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrStecCorrection.java index 077424db69..336bbea98b 100644 --- a/java/src/com/swiftnav/sbp/ssr/MsgSsrStecCorrection.java +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrStecCorrection.java @@ -23,25 +23,27 @@ import org.json.JSONArray; -/** SBP class for message MSG_SSR_STEC_CORRECTION (0x05EB). +/** SBP class for message MSG_SSR_STEC_CORRECTION (0x05FB). * * You can have MSG_SSR_STEC_CORRECTION inherent its fields directly from * an inherited SBP object, or construct it inline using a dict of its * fields. * - * The STEC per space vehicle, given as polynomial approximation for - * a given grid. This should be combined with MSG_SSR_GRIDDED_CORRECTION - * message to get the state space representation of the atmospheric - * delay. It is typically equivalent to the QZSS CLAS Sub Type 8 messages */ + * The Slant Total Electron Content per space vehicle, given as polynomial + * approximation for a given tile. This should be combined with the + * MSG_SSR_GRIDDED_CORRECTION message to get the state space representation + * of the atmospheric delay. + * + * It is typically equivalent to the QZSS CLAS Sub Type 8 messages. */ public class MsgSsrStecCorrection extends SBPMessage { - public static final int TYPE = 0x05EB; + public static final int TYPE = 0x05FB; - /** Header of a STEC message */ + /** Header of a STEC polynomial coeffcient message. */ public STECHeader header; - /** Array of STEC information for each space vehicle */ + /** Array of STEC polynomial coeffcients for each space vehicle. */ public STECSatElement[] stec_sat_list; diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrStecCorrectionDepA.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrStecCorrectionDepA.java new file mode 100644 index 0000000000..9531518f61 --- /dev/null +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrStecCorrectionDepA.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2015-2018 Swift Navigation Inc. + * Contact: Swift Navigation + * + * 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; + +import java.math.BigInteger; + +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.SBPBinaryException; +import com.swiftnav.sbp.SBPStruct; +import com.swiftnav.sbp.gnss.*; + +import org.json.JSONObject; +import org.json.JSONArray; + + + +public class MsgSsrStecCorrectionDepA extends SBPMessage { + public static final int TYPE = 0x05EB; + + + /** Header of a STEC message */ + public STECHeaderDepA header; + + /** Array of STEC information for each space vehicle */ + public STECSatElement[] stec_sat_list; + + + public MsgSsrStecCorrectionDepA (int sender) { super(sender, TYPE); } + public MsgSsrStecCorrectionDepA () { super(TYPE); } + public MsgSsrStecCorrectionDepA (SBPMessage msg) throws SBPBinaryException { + super(msg); + assert msg.type != TYPE; + } + + @Override + protected void parse(Parser parser) throws SBPBinaryException { + /* Parse fields from binary */ + header = new STECHeaderDepA().parse(parser); + stec_sat_list = parser.getArray(STECSatElement.class); + } + + @Override + protected void build(Builder builder) { + header.build(builder); + builder.putArray(stec_sat_list); + } + + @Override + public JSONObject toJSON() { + JSONObject obj = super.toJSON(); + obj.put("header", header.toJSON()); + obj.put("stec_sat_list", SBPStruct.toJSONArray(stec_sat_list)); + return obj; + } +} \ No newline at end of file diff --git a/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinition.java b/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinition.java new file mode 100644 index 0000000000..5e4a371f65 --- /dev/null +++ b/java/src/com/swiftnav/sbp/ssr/MsgSsrTileDefinition.java @@ -0,0 +1,167 @@ +/* + * Copyright (C) 2015-2018 Swift Navigation Inc. + * Contact: Swift Navigation + * + * 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; + +import java.math.BigInteger; + +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.SBPBinaryException; +import com.swiftnav.sbp.SBPStruct; +import com.swiftnav.sbp.gnss.*; + +import org.json.JSONObject; +import org.json.JSONArray; + + +/** SBP class for message MSG_SSR_TILE_DEFINITION (0x05F6). + * + * 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. + * + * 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 MsgSsrTileDefinition extends SBPMessage { + public static final int TYPE = 0x05F6; + + + /** 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 longtitude. + +The relation between the longtitude 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 longtitude direction. + +See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongtitude. + */ + 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 longtitude direction. + +See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongtitude. + */ + 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 MsgSsrTileDefinition (int sender) { super(sender, TYPE); } + public MsgSsrTileDefinition () { super(TYPE); } + public MsgSsrTileDefinition (SBPMessage msg) throws SBPBinaryException { + super(msg); + assert msg.type != TYPE; + } + + @Override + protected void parse(Parser parser) throws SBPBinaryException { + /* Parse fields from binary */ + tile_set_id = parser.getU8(); + tile_id = parser.getU8(); + corner_nw_lat = parser.getU16(); + corner_nw_lon = parser.getU16(); + 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(tile_set_id); + builder.putU8(tile_id); + builder.putU16(corner_nw_lat); + builder.putU16(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("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; + } +} \ No newline at end of file diff --git a/java/src/com/swiftnav/sbp/ssr/STECHeader.java b/java/src/com/swiftnav/sbp/ssr/STECHeader.java index 3c72a01ad0..231112ccb6 100644 --- a/java/src/com/swiftnav/sbp/ssr/STECHeader.java +++ b/java/src/com/swiftnav/sbp/ssr/STECHeader.java @@ -25,6 +25,12 @@ public class STECHeader extends SBPStruct { + /** Unique identifier of the tile set this tile belongs to. */ + public int tile_set_id; + + /** Unique identifier of this tile in the tile set. */ + public int tile_id; + /** GNSS reference time of the correction */ public GPSTimeSec time; @@ -49,6 +55,8 @@ public STECHeader () {} @Override public STECHeader parse(SBPMessage.Parser parser) throws SBPBinaryException { /* Parse fields from binary */ + tile_set_id = parser.getU8(); + tile_id = parser.getU8(); time = new GPSTimeSec().parse(parser); num_msgs = parser.getU8(); seq_num = parser.getU8(); @@ -60,6 +68,8 @@ public STECHeader parse(SBPMessage.Parser parser) throws SBPBinaryException { @Override public void build(SBPMessage.Builder builder) { /* Build fields into binary */ + builder.putU8(tile_set_id); + builder.putU8(tile_id); time.build(builder); builder.putU8(num_msgs); builder.putU8(seq_num); @@ -70,6 +80,8 @@ public void build(SBPMessage.Builder builder) { @Override public JSONObject toJSON() { JSONObject obj = new JSONObject(); + obj.put("tile_set_id", tile_set_id); + obj.put("tile_id", tile_id); obj.put("time", time.toJSON()); obj.put("num_msgs", num_msgs); obj.put("seq_num", seq_num); diff --git a/java/src/com/swiftnav/sbp/ssr/STECHeaderDepA.java b/java/src/com/swiftnav/sbp/ssr/STECHeaderDepA.java new file mode 100644 index 0000000000..33b3b944ce --- /dev/null +++ b/java/src/com/swiftnav/sbp/ssr/STECHeaderDepA.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2015-2018 Swift Navigation Inc. + * Contact: Swift Navigation + * + * 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; + +import java.math.BigInteger; + +import com.swiftnav.sbp.SBPMessage; +import com.swiftnav.sbp.SBPBinaryException; +import com.swiftnav.sbp.SBPStruct; +import com.swiftnav.sbp.gnss.*; + +import org.json.JSONObject; +import org.json.JSONArray; +import com.swiftnav.sbp.SBPStruct; + +public class STECHeaderDepA extends SBPStruct { + + /** GNSS reference time of the correction */ + public GPSTimeSec time; + + /** Number of messages in the dataset */ + public int num_msgs; + + /** Position of this message in the dataset */ + public int seq_num; + + /** Update interval between consecutive corrections. Encoded +following RTCM DF391 specification. + */ + public int update_interval; + + /** IOD of the SSR atmospheric correction + */ + public int iod_atmo; + + + public STECHeaderDepA () {} + + @Override + public STECHeaderDepA parse(SBPMessage.Parser parser) throws SBPBinaryException { + /* Parse fields from binary */ + time = new GPSTimeSec().parse(parser); + num_msgs = parser.getU8(); + seq_num = parser.getU8(); + update_interval = parser.getU8(); + iod_atmo = parser.getU8(); + return this; + } + + @Override + public void build(SBPMessage.Builder builder) { + /* Build fields into binary */ + time.build(builder); + builder.putU8(num_msgs); + builder.putU8(seq_num); + builder.putU8(update_interval); + builder.putU8(iod_atmo); + } + + @Override + public JSONObject toJSON() { + JSONObject obj = new JSONObject(); + obj.put("time", time.toJSON()); + obj.put("num_msgs", num_msgs); + obj.put("seq_num", seq_num); + obj.put("update_interval", update_interval); + obj.put("iod_atmo", iod_atmo); + return obj; + } +} \ No newline at end of file diff --git a/javascript/sbp.bundle.js b/javascript/sbp.bundle.js index f86b554aa6..f4dc78006f 100644 --- a/javascript/sbp.bundle.js +++ b/javascript/sbp.bundle.js @@ -12,4 +12,4 @@ var p=r(24),o=r(25),i=r(17);function s(){return a.TYPED_ARRAY_SUPPORT?2147483647 * @author Feross Aboukhadijeh * @license MIT */ -function p(e,t){if(e===t)return 0;for(var r=e.length,p=t.length,o=0,i=Math.min(r,p);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],r,p))return!1;return!0}(e,t,r,s))}return r?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,r,p){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(p=r,r=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),p=(r&&r.name?" ("+r.name+").":".")+(p?" "+p:"."),e&&!o&&_(o,r,"Missing expected exception"+p);var s="string"==typeof p,n=!e&&o&&!r;if((!e&&i.isError(o)&&s&&E(o,r)||n)&&_(o,r,"Got unwanted exception"+p),e&&o&&r&&!E(o,r)||!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 r=new Error;if(r.stack){var p=r.stack,o=h(t),i=p.indexOf("\n"+o);if(i>=0){var s=p.indexOf("\n",i+1);p=p.substring(s+1)}this.stack=p}}},i.inherits(u.AssertionError,Error),u.fail=_,u.ok=S,u.equal=function(e,t,r){e!=t&&_(e,t,r,"==",u.equal)},u.notEqual=function(e,t,r){e==t&&_(e,t,r,"!=",u.notEqual)},u.deepEqual=function(e,t,r){g(e,t,!1)||_(e,t,r,"deepEqual",u.deepEqual)},u.deepStrictEqual=function(e,t,r){g(e,t,!0)||_(e,t,r,"deepStrictEqual",u.deepStrictEqual)},u.notDeepEqual=function(e,t,r){g(e,t,!1)&&_(e,t,r,"notDeepEqual",u.notDeepEqual)},u.notDeepStrictEqual=function e(t,r,p){g(t,r,!0)&&_(t,r,p,"notDeepStrictEqual",e)},u.strictEqual=function(e,t,r){e!==t&&_(e,t,r,"===",u.strictEqual)},u.notStrictEqual=function(e,t,r){e===t&&_(e,t,r,"!==",u.notStrictEqual)},u.throws=function(e,t,r){m(!0,e,t,r)},u.doesNotThrow=function(e,t,r){m(!1,e,t,r)},u.ifError=function(e){if(e)throw e};var b=Object.keys||function(e){var t=[];for(var r in e)s.call(e,r)&&t.push(r);return t}}).call(this,r(5))},function(e,t,r){(function(e,p){var o=/%[sdj%]/g;t.format=function(e){if(!S(e)){for(var t=[],r=0;r=i)return e;switch(e){case"%s":return String(p[r++]);case"%d":return Number(p[r++]);case"%j":try{return JSON.stringify(p[r++])}catch(e){return"[Circular]"}default:return e}})),a=p[r];r=3&&(p.depth=arguments[2]),arguments.length>=4&&(p.colors=arguments[3]),f(r)?p.showHidden=r:r&&t._extend(p,r),g(p.showHidden)&&(p.showHidden=!1),g(p.depth)&&(p.depth=2),g(p.colors)&&(p.colors=!1),g(p.customInspect)&&(p.customInspect=!0),p.colors&&(p.stylize=a),c(p,e,p.depth)}function a(e,t){var r=n.styles[t];return r?"["+n.colors[r][0]+"m"+e+"["+n.colors[r][1]+"m":e}function l(e,t){return e}function c(e,r,p){if(e.customInspect&&r&&v(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var o=r.inspect(p,e);return S(o)||(o=c(e,o,p)),o}var i=function(e,t){if(g(t))return e.stylize("undefined","undefined");if(S(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}if(_(t))return e.stylize(""+t,"number");if(f(t))return e.stylize(""+t,"boolean");if(d(t))return e.stylize("null","null")}(e,r);if(i)return i;var s=Object.keys(r),n=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(s);if(e.showHidden&&(s=Object.getOwnPropertyNames(r)),b(r)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return u(r);if(0===s.length){if(v(r)){var a=r.name?": "+r.name:"";return e.stylize("[Function"+a+"]","special")}if(w(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(m(r))return e.stylize(Date.prototype.toString.call(r),"date");if(b(r))return u(r)}var l,E="",L=!1,I=["{","}"];(h(r)&&(L=!0,I=["[","]"]),v(r))&&(E=" [Function"+(r.name?": "+r.name:"")+"]");return w(r)&&(E=" "+RegExp.prototype.toString.call(r)),m(r)&&(E=" "+Date.prototype.toUTCString.call(r)),b(r)&&(E=" "+u(r)),0!==s.length||L&&0!=r.length?p<0?w(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special"):(e.seen.push(r),l=L?function(e,t,r,p,o){for(var i=[],s=0,n=t.length;s=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1];return r[0]+t+" "+e.join(", ")+" "+r[1]}(l,E,I)):I[0]+E+I[1]}function u(e){return"["+Error.prototype.toString.call(e)+"]"}function y(e,t,r,p,o,i){var s,n,a;if((a=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?n=a.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):a.set&&(n=e.stylize("[Setter]","special")),U(p,o)||(s="["+o+"]"),n||(e.seen.indexOf(a.value)<0?(n=d(r)?c(e,a.value,null):c(e,a.value,r-1)).indexOf("\n")>-1&&(n=i?n.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+n.split("\n").map((function(e){return" "+e})).join("\n")):n=e.stylize("[Circular]","special")),g(s)){if(i&&o.match(/^\d+$/))return n;(s=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+n}function h(e){return Array.isArray(e)}function f(e){return"boolean"==typeof e}function d(e){return null===e}function _(e){return"number"==typeof e}function S(e){return"string"==typeof e}function g(e){return void 0===e}function w(e){return E(e)&&"[object RegExp]"===L(e)}function E(e){return"object"==typeof e&&null!==e}function m(e){return E(e)&&"[object Date]"===L(e)}function b(e){return E(e)&&("[object Error]"===L(e)||e instanceof Error)}function v(e){return"function"==typeof e}function L(e){return Object.prototype.toString.call(e)}function I(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(e){if(g(i)&&(i=p.env.NODE_DEBUG||""),e=e.toUpperCase(),!s[e])if(new RegExp("\\b"+e+"\\b","i").test(i)){var r=p.pid;s[e]=function(){var p=t.format.apply(t,arguments);console.error("%s %d: %s",e,r,p)}}else s[e]=function(){};return s[e]},t.inspect=n,n.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},n.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=h,t.isBoolean=f,t.isNull=d,t.isNullOrUndefined=function(e){return null==e},t.isNumber=_,t.isString=S,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=g,t.isRegExp=w,t.isObject=E,t.isDate=m,t.isError=b,t.isFunction=v,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=r(43);var T=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function M(){var e=new Date,t=[I(e.getHours()),I(e.getMinutes()),I(e.getSeconds())].join(":");return[e.getDate(),T[e.getMonth()],t].join(" ")}function U(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",M(),t.format.apply(t,arguments))},t.inherits=r(6),t._extend=function(e,t){if(!t||!E(t))return e;for(var r=Object.keys(t),p=r.length;p--;)e[r[p]]=t[r[p]];return e}}).call(this,r(5),r(9))},function(e,t){e.exports=function(e){return e&&"object"==typeof e&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},function(e,t,r){var p;!function(r){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 r=parseInt(e,t||10);return this._low=65535&r,this._high=r>>>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,r=t>>>16;return r+=this._high+e._high,this._low=65535&t,this._high=65535&r,this},o.prototype.subtract=function(e){return this.add(e.clone().negate())},o.prototype.multiply=function(e){var t,r,p=this._high,o=this._low,i=e._high,s=e._low;return t=(r=o*s)>>>16,t+=p*s,t&=65535,t+=o*i,this._low=65535&r,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(),r=-1;!this.lt(t);)t.shiftLeft(1,!0),r++;for(this.remainder=this.clone(),this._low=0,this._high=0;r>=0;r--)t.shiftRight(1),this.remainder.lt(t)||(this.remainder.subtract(t),r>=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===(p=function(){return o}.apply(t,[]))||(e.exports=p)}()},function(e,t,r){var p;!function(r){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,r,p){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,r,p)}function n(e,t,r,p){return void 0===r?(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|r,this._a48=0|p,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 r=o[t]||new s(Math.pow(t,5)),p=0,i=e.length;p=0&&(r.div(t),p[o]=r.remainder.toNumber().toString(e),r.gt(t));o--);return p[o-1]=r.toNumber().toString(e),p.join("")},s.prototype.add=function(e){var t=this._a00+e._a00,r=t>>>16,p=(r+=this._a16+e._a16)>>>16,o=(p+=this._a32+e._a32)>>>16;return o+=this._a48+e._a48,this._a00=65535&t,this._a16=65535&r,this._a32=65535&p,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,r=this._a16,p=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+=r*i)>>>16;var u=(c+=t*n)>>>16;return c&=65535,u+=(c+=r*s)>>>16,c&=65535,u+=(c+=p*i)>>>16,u+=t*e._a48,u&=65535,u+=r*n,u&=65535,u+=p*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(),r=-1;!this.lt(t);)t.shiftLeft(1,!0),r++;for(this.remainder=this.clone(),this._a00=0,this._a16=0,this._a32=0,this._a48=0;r>=0;r--)t.shiftRight(1),this.remainder.lt(t)||(this.remainder.subtract(t),r>=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 r=this._a48<<16|this._a32,p=this._a16<<16|this._a00,o=r<>>32-e,i=p<>>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 r=this._a48<<16|this._a32,p=this._a16<<16|this._a00,o=r>>>e|p<<32-e,i=p>>>e|r<<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===(p=function(){return s}.apply(t,[]))||(e.exports=p)}()},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=r(0).GnssSignalDep,n=(r(0).GPSTime,r(0).CarrierPhase,r(0).GPSTime,r(0).GPSTimeSec,r(0).GPSTimeDep,r(0).SvId,function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_RESULT",this.fields=t||this.parser.parse(e.payload),this});(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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]);var u=function(e,t){return p.call(this,e),this.messageType="AcqSvProfile",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="AcqSvProfileDep",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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]);var h=function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_SV_PROFILE",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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]);var f=function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_SV_PROFILE_DEP",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_REQ",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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=[];var s=function(e,t){return p.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_RESP",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_BOOTLOADER_JUMP_TO_APP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_NAP_DEVICE_DNA_REQ",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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=[];var l=function(e,t){return p.call(this,e),this.messageType="MSG_NAP_DEVICE_DNA_RESP",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_EXT_EVENT",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_READ_REQ",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_READ_DIR_REQ",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_READ_DIR_RESP",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_REMOVE",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_WRITE_REQ",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_WRITE_RESP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_CONFIG_REQ",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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]);var h=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_CONFIG_RESP",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_FLASH_PROGRAM",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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"]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_FLASH_DONE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_FLASH_READ_REQ",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_FLASH_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_FLASH_ERASE",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_STM_FLASH_LOCK_SECTOR",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_STM_FLASH_UNLOCK_SECTOR",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_STM_UNIQUE_ID_REQ",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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=[];var h=function(e,t){return p.call(this,e),this.messageType="MSG_STM_UNIQUE_ID_RESP",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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]);var f=function(e,t){return p.call(this,e),this.messageType="MSG_M25_FLASH_WRITE_STATUS",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_IMU_RAW",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_IMU_AUX",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_CPU_STATE",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.prototype)).messageType="MSG_LINUX_CPU_STATE",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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_MEM_STATE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.prototype)).messageType="MSG_LINUX_MEM_STATE",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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_SYS_STATE",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.prototype)).messageType="MSG_LINUX_SYS_STATE",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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_PROCESS_SOCKET_COUNTS",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_PROCESS_SOCKET_QUEUES",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_SOCKET_USAGE",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_PROCESS_FD_COUNT",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_PROCESS_FD_SUMMARY",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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]),e.exports={32512:i,MsgLinuxCpuState:i,32513:s,MsgLinuxMemState:s,32514:n,MsgLinuxSysState:n,32515:a,MsgLinuxProcessSocketCounts:a,32516:l,MsgLinuxProcessSocketQueues:l,32517:c,MsgLinuxSocketUsage:c,32518:u,MsgLinuxProcessFdCount:u,32519:y,MsgLinuxProcessFdSummary:y}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_LOG",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_FWD",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.prototype)).messageType="MSG_FWD",s.prototype.msg_type=1026,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("source").uint8("protocol").string("fwd_payload",{greedy:!0}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["source","writeUInt8",1]),s.prototype.fieldSpec.push(["protocol","writeUInt8",1]),s.prototype.fieldSpec.push(["fwd_payload","string",null]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_PRINT_DEP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_MAG_RAW",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_GPS_TIME",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_UTC_TIME",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.prototype)).messageType="MSG_UTC_TIME",s.prototype.msg_type=259,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("flags").uint32("tow").uint16("year").uint8("month").uint8("day").uint8("hours").uint8("minutes").uint8("seconds").uint32("ns"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["flags","writeUInt8",1]),s.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["year","writeUInt16LE",2]),s.prototype.fieldSpec.push(["month","writeUInt8",1]),s.prototype.fieldSpec.push(["day","writeUInt8",1]),s.prototype.fieldSpec.push(["hours","writeUInt8",1]),s.prototype.fieldSpec.push(["minutes","writeUInt8",1]),s.prototype.fieldSpec.push(["seconds","writeUInt8",1]),s.prototype.fieldSpec.push(["ns","writeUInt32LE",4]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_DOPS",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.prototype)).messageType="MSG_DOPS",n.prototype.msg_type=520,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint32("tow").uint16("gdop").uint16("pdop").uint16("tdop").uint16("hdop").uint16("vdop").uint8("flags"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),n.prototype.fieldSpec.push(["gdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["tdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["flags","writeUInt8",1]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_POS_ECEF",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.prototype)).messageType="MSG_POS_ECEF",a.prototype.msg_type=521,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),a.prototype.fieldSpec.push(["x","writeDoubleLE",8]),a.prototype.fieldSpec.push(["y","writeDoubleLE",8]),a.prototype.fieldSpec.push(["z","writeDoubleLE",8]),a.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),a.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),a.prototype.fieldSpec.push(["flags","writeUInt8",1]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_POS_ECEF_COV",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.prototype)).messageType="MSG_POS_ECEF_COV",l.prototype.msg_type=532,l.prototype.constructor=l,l.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"),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),l.prototype.fieldSpec.push(["x","writeDoubleLE",8]),l.prototype.fieldSpec.push(["y","writeDoubleLE",8]),l.prototype.fieldSpec.push(["z","writeDoubleLE",8]),l.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),l.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),l.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),l.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),l.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),l.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),l.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),l.prototype.fieldSpec.push(["flags","writeUInt8",1]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_POS_LLH",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.prototype)).messageType="MSG_POS_LLH",c.prototype.msg_type=522,c.prototype.constructor=c,c.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"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),c.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),c.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),c.prototype.fieldSpec.push(["height","writeDoubleLE",8]),c.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),c.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),c.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),c.prototype.fieldSpec.push(["flags","writeUInt8",1]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_POS_LLH_COV",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.prototype)).messageType="MSG_POS_LLH_COV",u.prototype.msg_type=529,u.prototype.constructor=u,u.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"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),u.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),u.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),u.prototype.fieldSpec.push(["height","writeDoubleLE",8]),u.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),u.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),u.prototype.fieldSpec.push(["flags","writeUInt8",1]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_ECEF",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.prototype)).messageType="MSG_BASELINE_ECEF",y.prototype.msg_type=523,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["tow","writeUInt32LE",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(["accuracy","writeUInt16LE",2]),y.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),y.prototype.fieldSpec.push(["flags","writeUInt8",1]);var h=function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_NED",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.prototype)).messageType="MSG_BASELINE_NED",h.prototype.msg_type=524,h.prototype.constructor=h,h.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"),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),h.prototype.fieldSpec.push(["n","writeInt32LE",4]),h.prototype.fieldSpec.push(["e","writeInt32LE",4]),h.prototype.fieldSpec.push(["d","writeInt32LE",4]),h.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),h.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),h.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),h.prototype.fieldSpec.push(["flags","writeUInt8",1]);var f=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_ECEF",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.prototype)).messageType="MSG_VEL_ECEF",f.prototype.msg_type=525,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]);var d=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_ECEF_COV",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(p.prototype)).messageType="MSG_VEL_ECEF_COV",d.prototype.msg_type=533,d.prototype.constructor=d,d.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"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),d.prototype.fieldSpec.push(["x","writeInt32LE",4]),d.prototype.fieldSpec.push(["y","writeInt32LE",4]),d.prototype.fieldSpec.push(["z","writeInt32LE",4]),d.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),d.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),d.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),d.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),d.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),d.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),d.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),d.prototype.fieldSpec.push(["flags","writeUInt8",1]);var _=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_NED",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(p.prototype)).messageType="MSG_VEL_NED",_.prototype.msg_type=526,_.prototype.constructor=_,_.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"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),_.prototype.fieldSpec.push(["n","writeInt32LE",4]),_.prototype.fieldSpec.push(["e","writeInt32LE",4]),_.prototype.fieldSpec.push(["d","writeInt32LE",4]),_.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),_.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),_.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),_.prototype.fieldSpec.push(["flags","writeUInt8",1]);var S=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_NED_COV",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(p.prototype)).messageType="MSG_VEL_NED_COV",S.prototype.msg_type=530,S.prototype.constructor=S,S.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"),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(["cov_n_n","writeFloatLE",4]),S.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),S.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),S.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),S.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),S.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),S.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),S.prototype.fieldSpec.push(["flags","writeUInt8",1]);var g=function(e,t){return p.call(this,e),this.messageType="MSG_POS_ECEF_GNSS",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(p.prototype)).messageType="MSG_POS_ECEF_GNSS",g.prototype.msg_type=553,g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),g.prototype.fieldSpec.push(["x","writeDoubleLE",8]),g.prototype.fieldSpec.push(["y","writeDoubleLE",8]),g.prototype.fieldSpec.push(["z","writeDoubleLE",8]),g.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),g.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),g.prototype.fieldSpec.push(["flags","writeUInt8",1]);var w=function(e,t){return p.call(this,e),this.messageType="MSG_POS_ECEF_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(p.prototype)).messageType="MSG_POS_ECEF_COV_GNSS",w.prototype.msg_type=564,w.prototype.constructor=w,w.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"),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),w.prototype.fieldSpec.push(["x","writeDoubleLE",8]),w.prototype.fieldSpec.push(["y","writeDoubleLE",8]),w.prototype.fieldSpec.push(["z","writeDoubleLE",8]),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]);var E=function(e,t){return p.call(this,e),this.messageType="MSG_POS_LLH_GNSS",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(p.prototype)).messageType="MSG_POS_LLH_GNSS",E.prototype.msg_type=554,E.prototype.constructor=E,E.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"),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),E.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),E.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),E.prototype.fieldSpec.push(["height","writeDoubleLE",8]),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]);var m=function(e,t){return p.call(this,e),this.messageType="MSG_POS_LLH_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(p.prototype)).messageType="MSG_POS_LLH_COV_GNSS",m.prototype.msg_type=561,m.prototype.constructor=m,m.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"),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),m.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),m.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),m.prototype.fieldSpec.push(["height","writeDoubleLE",8]),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]);var b=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_ECEF_GNSS",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(p.prototype)).messageType="MSG_VEL_ECEF_GNSS",b.prototype.msg_type=557,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),b.prototype.fieldSpec.push(["x","writeInt32LE",4]),b.prototype.fieldSpec.push(["y","writeInt32LE",4]),b.prototype.fieldSpec.push(["z","writeInt32LE",4]),b.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),b.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),b.prototype.fieldSpec.push(["flags","writeUInt8",1]);var v=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_ECEF_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(p.prototype)).messageType="MSG_VEL_ECEF_COV_GNSS",v.prototype.msg_type=565,v.prototype.constructor=v,v.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"),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(["cov_x_x","writeFloatLE",4]),v.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),v.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),v.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),v.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),v.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),v.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),v.prototype.fieldSpec.push(["flags","writeUInt8",1]);var L=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_NED_GNSS",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(p.prototype)).messageType="MSG_VEL_NED_GNSS",L.prototype.msg_type=558,L.prototype.constructor=L,L.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"),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),L.prototype.fieldSpec.push(["n","writeInt32LE",4]),L.prototype.fieldSpec.push(["e","writeInt32LE",4]),L.prototype.fieldSpec.push(["d","writeInt32LE",4]),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]);var I=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_NED_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(p.prototype)).messageType="MSG_VEL_NED_COV_GNSS",I.prototype.msg_type=562,I.prototype.constructor=I,I.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"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),I.prototype.fieldSpec.push(["n","writeInt32LE",4]),I.prototype.fieldSpec.push(["e","writeInt32LE",4]),I.prototype.fieldSpec.push(["d","writeInt32LE",4]),I.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),I.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),I.prototype.fieldSpec.push(["flags","writeUInt8",1]);var T=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_BODY",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(p.prototype)).messageType="MSG_VEL_BODY",T.prototype.msg_type=531,T.prototype.constructor=T,T.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"),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),T.prototype.fieldSpec.push(["x","writeInt32LE",4]),T.prototype.fieldSpec.push(["y","writeInt32LE",4]),T.prototype.fieldSpec.push(["z","writeInt32LE",4]),T.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),T.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),T.prototype.fieldSpec.push(["flags","writeUInt8",1]);var M=function(e,t){return p.call(this,e),this.messageType="MSG_AGE_CORRECTIONS",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(p.prototype)).messageType="MSG_AGE_CORRECTIONS",M.prototype.msg_type=528,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").uint32("tow").uint16("age"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),M.prototype.fieldSpec.push(["age","writeUInt16LE",2]);var U=function(e,t){return p.call(this,e),this.messageType="MSG_GPS_TIME_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(p.prototype)).messageType="MSG_GPS_TIME_DEP_A",U.prototype.msg_type=256,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tow").int32("ns_residual").uint8("flags"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),U.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),U.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),U.prototype.fieldSpec.push(["flags","writeUInt8",1]);var D=function(e,t){return p.call(this,e),this.messageType="MSG_DOPS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(p.prototype)).messageType="MSG_DOPS_DEP_A",D.prototype.msg_type=518,D.prototype.constructor=D,D.prototype.parser=(new o).endianess("little").uint32("tow").uint16("gdop").uint16("pdop").uint16("tdop").uint16("hdop").uint16("vdop"),D.prototype.fieldSpec=[],D.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),D.prototype.fieldSpec.push(["gdop","writeUInt16LE",2]),D.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),D.prototype.fieldSpec.push(["tdop","writeUInt16LE",2]),D.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),D.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]);var O=function(e,t){return p.call(this,e),this.messageType="MSG_POS_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(p.prototype)).messageType="MSG_POS_ECEF_DEP_A",O.prototype.msg_type=512,O.prototype.constructor=O,O.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),O.prototype.fieldSpec=[],O.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),O.prototype.fieldSpec.push(["x","writeDoubleLE",8]),O.prototype.fieldSpec.push(["y","writeDoubleLE",8]),O.prototype.fieldSpec.push(["z","writeDoubleLE",8]),O.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),O.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),O.prototype.fieldSpec.push(["flags","writeUInt8",1]);var G=function(e,t){return p.call(this,e),this.messageType="MSG_POS_LLH_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(p.prototype)).messageType="MSG_POS_LLH_DEP_A",G.prototype.msg_type=513,G.prototype.constructor=G,G.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"),G.prototype.fieldSpec=[],G.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),G.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),G.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),G.prototype.fieldSpec.push(["height","writeDoubleLE",8]),G.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),G.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),G.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),G.prototype.fieldSpec.push(["flags","writeUInt8",1]);var A=function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(p.prototype)).messageType="MSG_BASELINE_ECEF_DEP_A",A.prototype.msg_type=514,A.prototype.constructor=A,A.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").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(["accuracy","writeUInt16LE",2]),A.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),A.prototype.fieldSpec.push(["flags","writeUInt8",1]);var R=function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_NED_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(p.prototype)).messageType="MSG_BASELINE_NED_DEP_A",R.prototype.msg_type=515,R.prototype.constructor=R,R.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"),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),R.prototype.fieldSpec.push(["n","writeInt32LE",4]),R.prototype.fieldSpec.push(["e","writeInt32LE",4]),R.prototype.fieldSpec.push(["d","writeInt32LE",4]),R.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),R.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),R.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),R.prototype.fieldSpec.push(["flags","writeUInt8",1]);var C=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(p.prototype)).messageType="MSG_VEL_ECEF_DEP_A",C.prototype.msg_type=516,C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),C.prototype.fieldSpec.push(["x","writeInt32LE",4]),C.prototype.fieldSpec.push(["y","writeInt32LE",4]),C.prototype.fieldSpec.push(["z","writeInt32LE",4]),C.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),C.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),C.prototype.fieldSpec.push(["flags","writeUInt8",1]);var P=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_NED_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(p.prototype)).messageType="MSG_VEL_NED_DEP_A",P.prototype.msg_type=517,P.prototype.constructor=P,P.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"),P.prototype.fieldSpec=[],P.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),P.prototype.fieldSpec.push(["n","writeInt32LE",4]),P.prototype.fieldSpec.push(["e","writeInt32LE",4]),P.prototype.fieldSpec.push(["d","writeInt32LE",4]),P.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),P.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),P.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),P.prototype.fieldSpec.push(["flags","writeUInt8",1]);var N=function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_HEADING_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(p.prototype)).messageType="MSG_BASELINE_HEADING_DEP_A",N.prototype.msg_type=519,N.prototype.constructor=N,N.prototype.parser=(new o).endianess("little").uint32("tow").uint32("heading").uint8("n_sats").uint8("flags"),N.prototype.fieldSpec=[],N.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),N.prototype.fieldSpec.push(["heading","writeUInt32LE",4]),N.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),N.prototype.fieldSpec.push(["flags","writeUInt8",1]);var j=function(e,t){return p.call(this,e),this.messageType="MSG_PROTECTION_LEVEL",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(p.prototype)).messageType="MSG_PROTECTION_LEVEL",j.prototype.msg_type=534,j.prototype.constructor=j,j.prototype.parser=(new o).endianess("little").uint32("tow").uint16("vpl").uint16("hpl").doublele("lat").doublele("lon").doublele("height").uint8("flags"),j.prototype.fieldSpec=[],j.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),j.prototype.fieldSpec.push(["vpl","writeUInt16LE",2]),j.prototype.fieldSpec.push(["hpl","writeUInt16LE",2]),j.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),j.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),j.prototype.fieldSpec.push(["height","writeDoubleLE",8]),j.prototype.fieldSpec.push(["flags","writeUInt8",1]),e.exports={258:i,MsgGpsTime:i,259:s,MsgUtcTime:s,520:n,MsgDops:n,521:a,MsgPosEcef:a,532:l,MsgPosEcefCov:l,522:c,MsgPosLlh:c,529:u,MsgPosLlhCov:u,523:y,MsgBaselineEcef:y,524:h,MsgBaselineNed:h,525:f,MsgVelEcef:f,533:d,MsgVelEcefCov:d,526:_,MsgVelNed:_,530:S,MsgVelNedCov:S,553:g,MsgPosEcefGnss:g,564:w,MsgPosEcefCovGnss:w,554:E,MsgPosLlhGnss:E,561:m,MsgPosLlhCovGnss:m,557:b,MsgVelEcefGnss:b,565:v,MsgVelEcefCovGnss:v,558:L,MsgVelNedGnss:L,562:I,MsgVelNedCovGnss:I,531:T,MsgVelBody:T,528:M,MsgAgeCorrections:M,256:U,MsgGpsTimeDepA:U,518:D,MsgDopsDepA:D,512:O,MsgPosEcefDepA:O,513:G,MsgPosLlhDepA:G,514:A,MsgBaselineEcefDepA:A,515:R,MsgBaselineNedDepA:R,516:C,MsgVelEcefDepA:C,517:P,MsgVelNedDepA:P,519:N,MsgBaselineHeadingDepA:N,534:j,MsgProtectionLevel:j}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=(r(0).GnssSignalDep,r(0).GPSTime,r(0).CarrierPhase,r(0).GPSTime,r(0).GPSTimeSec,r(0).GPSTimeDep,r(0).SvId,function(e,t){return p.call(this,e),this.messageType="MSG_NDB_EVENT",this.fields=t||this.parser.parse(e.payload),this});(s.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=r(0).GnssSignalDep,n=r(0).GPSTime,a=r(0).CarrierPhase,l=(n=r(0).GPSTime,r(0).GPSTimeSec),c=r(0).GPSTimeDep,u=(r(0).SvId,function(e,t){return p.call(this,e),this.messageType="ObservationHeader",this.fields=t||this.parser.parse(e.payload),this});(u.prototype=Object.create(p.prototype)).messageType="ObservationHeader",u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").nest("t",{type:n.prototype.parser}).uint8("n_obs"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["t",n.prototype.fieldSpec]),u.prototype.fieldSpec.push(["n_obs","writeUInt8",1]);var y=function(e,t){return p.call(this,e),this.messageType="Doppler",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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]);var h=function(e,t){return p.call(this,e),this.messageType="PackedObsContent",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.prototype)).messageType="PackedObsContent",h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:a.prototype.parser}).nest("D",{type:y.prototype.parser}).uint8("cn0").uint8("lock").uint8("flags").nest("sid",{type:i.prototype.parser}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["P","writeUInt32LE",4]),h.prototype.fieldSpec.push(["L",a.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",i.prototype.fieldSpec]);var f=function(e,t){return p.call(this,e),this.messageType="PackedOsrContent",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.prototype)).messageType="PackedOsrContent",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:a.prototype.parser}).uint8("lock").uint8("flags").nest("sid",{type:i.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",a.prototype.fieldSpec]),f.prototype.fieldSpec.push(["lock","writeUInt8",1]),f.prototype.fieldSpec.push(["flags","writeUInt8",1]),f.prototype.fieldSpec.push(["sid",i.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]);var d=function(e,t){return p.call(this,e),this.messageType="MSG_OBS",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(p.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]);var _=function(e,t){return p.call(this,e),this.messageType="MSG_BASE_POS_LLH",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(p.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]);var S=function(e,t){return p.call(this,e),this.messageType="MSG_BASE_POS_ECEF",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(p.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]);var g=function(e,t){return p.call(this,e),this.messageType="EphemerisCommonContent",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(p.prototype)).messageType="EphemerisCommonContent",g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).nest("toe",{type:l.prototype.parser}).floatle("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),g.prototype.fieldSpec.push(["toe",l.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]);var w=function(e,t){return p.call(this,e),this.messageType="EphemerisCommonContentDepB",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(p.prototype)).messageType="EphemerisCommonContentDepB",w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).nest("toe",{type:l.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),w.prototype.fieldSpec.push(["toe",l.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]);var E=function(e,t){return p.call(this,e),this.messageType="EphemerisCommonContentDepA",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(p.prototype)).messageType="EphemerisCommonContentDepA",E.prototype.constructor=E,E.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"),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),E.prototype.fieldSpec.push(["toe",c.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]);var m=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GPS_DEP_E",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(p.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:c.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",c.prototype.fieldSpec]),m.prototype.fieldSpec.push(["iode","writeUInt8",1]),m.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var b=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GPS_DEP_F",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(p.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:l.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",l.prototype.fieldSpec]),b.prototype.fieldSpec.push(["iode","writeUInt8",1]),b.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var v=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GPS",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_GPS",v.prototype.msg_type=138,v.prototype.constructor=v,v.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:l.prototype.parser}).uint8("iode").uint16("iodc"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),v.prototype.fieldSpec.push(["tgd","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","writeFloatLE",4]),v.prototype.fieldSpec.push(["af1","writeFloatLE",4]),v.prototype.fieldSpec.push(["af2","writeFloatLE",4]),v.prototype.fieldSpec.push(["toc",l.prototype.fieldSpec]),v.prototype.fieldSpec.push(["iode","writeUInt8",1]),v.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var L=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_QZSS",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(p.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:l.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",l.prototype.fieldSpec]),L.prototype.fieldSpec.push(["iode","writeUInt8",1]),L.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var I=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_BDS",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_BDS",I.prototype.msg_type=137,I.prototype.constructor=I,I.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:l.prototype.parser}).uint8("iode").uint16("iodc"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),I.prototype.fieldSpec.push(["tgd1","writeFloatLE",4]),I.prototype.fieldSpec.push(["tgd2","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","writeDoubleLE",8]),I.prototype.fieldSpec.push(["af1","writeFloatLE",4]),I.prototype.fieldSpec.push(["af2","writeFloatLE",4]),I.prototype.fieldSpec.push(["toc",l.prototype.fieldSpec]),I.prototype.fieldSpec.push(["iode","writeUInt8",1]),I.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var T=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GAL_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_GAL_DEP_A",T.prototype.msg_type=149,T.prototype.constructor=T,T.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:l.prototype.parser}).uint16("iode").uint16("iodc"),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),T.prototype.fieldSpec.push(["bgd_e1e5a","writeFloatLE",4]),T.prototype.fieldSpec.push(["bgd_e1e5b","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","writeDoubleLE",8]),T.prototype.fieldSpec.push(["af2","writeFloatLE",4]),T.prototype.fieldSpec.push(["toc",l.prototype.fieldSpec]),T.prototype.fieldSpec.push(["iode","writeUInt16LE",2]),T.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var M=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GAL",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_GAL",M.prototype.msg_type=141,M.prototype.constructor=M,M.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:l.prototype.parser}).uint16("iode").uint16("iodc").uint8("source"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),M.prototype.fieldSpec.push(["bgd_e1e5a","writeFloatLE",4]),M.prototype.fieldSpec.push(["bgd_e1e5b","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),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","writeFloatLE",4]),M.prototype.fieldSpec.push(["toc",l.prototype.fieldSpec]),M.prototype.fieldSpec.push(["iode","writeUInt16LE",2]),M.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),M.prototype.fieldSpec.push(["source","writeUInt8",1]);var U=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_SBAS_DEP_A",U.prototype.msg_type=130,U.prototype.constructor=U,U.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"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["common",E.prototype.fieldSpec]),U.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),U.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),U.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]),U.prototype.fieldSpec.push(["a_gf0","writeDoubleLE",8]),U.prototype.fieldSpec.push(["a_gf1","writeDoubleLE",8]);var D=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(p.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]);var O=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(p.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]);var G=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(p.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]);var A=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(p.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]);var R=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_C",R.prototype.msg_type=135,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"),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]);var C=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_D",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_D",C.prototype.msg_type=136,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").uint8("iod"),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]),C.prototype.fieldSpec.push(["iod","writeUInt8",1]);var P=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GLO",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(p.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]);var N=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_D",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(p.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:s.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",s.prototype.fieldSpec]),N.prototype.fieldSpec.push(["iode","writeUInt8",1]),N.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),N.prototype.fieldSpec.push(["reserved","writeUInt32LE",4]);var j=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(p.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]);var x=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(x.prototype=Object.create(p.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]);var F=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(F.prototype=Object.create(p.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:s.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",s.prototype.fieldSpec]),F.prototype.fieldSpec.push(["iode","writeUInt8",1]),F.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),F.prototype.fieldSpec.push(["reserved","writeUInt32LE",4]);var k=function(e,t){return p.call(this,e),this.messageType="ObservationHeaderDep",this.fields=t||this.parser.parse(e.payload),this};(k.prototype=Object.create(p.prototype)).messageType="ObservationHeaderDep",k.prototype.constructor=k,k.prototype.parser=(new o).endianess("little").nest("t",{type:c.prototype.parser}).uint8("n_obs"),k.prototype.fieldSpec=[],k.prototype.fieldSpec.push(["t",c.prototype.fieldSpec]),k.prototype.fieldSpec.push(["n_obs","writeUInt8",1]);var B=function(e,t){return p.call(this,e),this.messageType="CarrierPhaseDepA",this.fields=t||this.parser.parse(e.payload),this};(B.prototype=Object.create(p.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]);var q=function(e,t){return p.call(this,e),this.messageType="PackedObsContentDepA",this.fields=t||this.parser.parse(e.payload),this};(q.prototype=Object.create(p.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]);var z=function(e,t){return p.call(this,e),this.messageType="PackedObsContentDepB",this.fields=t||this.parser.parse(e.payload),this};(z.prototype=Object.create(p.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:s.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",s.prototype.fieldSpec]);var H=function(e,t){return p.call(this,e),this.messageType="PackedObsContentDepC",this.fields=t||this.parser.parse(e.payload),this};(H.prototype=Object.create(p.prototype)).messageType="PackedObsContentDepC",H.prototype.constructor=H,H.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:a.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:s.prototype.parser}),H.prototype.fieldSpec=[],H.prototype.fieldSpec.push(["P","writeUInt32LE",4]),H.prototype.fieldSpec.push(["L",a.prototype.fieldSpec]),H.prototype.fieldSpec.push(["cn0","writeUInt8",1]),H.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),H.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);var V=function(e,t){return p.call(this,e),this.messageType="MSG_OBS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(V.prototype=Object.create(p.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]);var W=function(e,t){return p.call(this,e),this.messageType="MSG_OBS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(W.prototype=Object.create(p.prototype)).messageType="MSG_OBS_DEP_B",W.prototype.msg_type=67,W.prototype.constructor=W,W.prototype.parser=(new o).endianess("little").nest("header",{type:k.prototype.parser}).array("obs",{type:z.prototype.parser,readUntil:"eof"}),W.prototype.fieldSpec=[],W.prototype.fieldSpec.push(["header",k.prototype.fieldSpec]),W.prototype.fieldSpec.push(["obs","array",z.prototype.fieldSpec,function(){return this.fields.array.length},null]);var Y=function(e,t){return p.call(this,e),this.messageType="MSG_OBS_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(Y.prototype=Object.create(p.prototype)).messageType="MSG_OBS_DEP_C",Y.prototype.msg_type=73,Y.prototype.constructor=Y,Y.prototype.parser=(new o).endianess("little").nest("header",{type:k.prototype.parser}).array("obs",{type:H.prototype.parser,readUntil:"eof"}),Y.prototype.fieldSpec=[],Y.prototype.fieldSpec.push(["header",k.prototype.fieldSpec]),Y.prototype.fieldSpec.push(["obs","array",H.prototype.fieldSpec,function(){return this.fields.array.length},null]);var Q=function(e,t){return p.call(this,e),this.messageType="MSG_IONO",this.fields=t||this.parser.parse(e.payload),this};(Q.prototype=Object.create(p.prototype)).messageType="MSG_IONO",Q.prototype.msg_type=144,Q.prototype.constructor=Q,Q.prototype.parser=(new o).endianess("little").nest("t_nmct",{type:l.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",l.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]);var K=function(e,t){return p.call(this,e),this.messageType="MSG_SV_CONFIGURATION_GPS_DEP",this.fields=t||this.parser.parse(e.payload),this};(K.prototype=Object.create(p.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:l.prototype.parser}).uint32("l2c_mask"),K.prototype.fieldSpec=[],K.prototype.fieldSpec.push(["t_nmct",l.prototype.fieldSpec]),K.prototype.fieldSpec.push(["l2c_mask","writeUInt32LE",4]);var X=function(e,t){return p.call(this,e),this.messageType="GnssCapb",this.fields=t||this.parser.parse(e.payload),this};(X.prototype=Object.create(p.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]);var J=function(e,t){return p.call(this,e),this.messageType="MSG_GNSS_CAPB",this.fields=t||this.parser.parse(e.payload),this};(J.prototype=Object.create(p.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:l.prototype.parser}).nest("gc",{type:X.prototype.parser}),J.prototype.fieldSpec=[],J.prototype.fieldSpec.push(["t_nmct",l.prototype.fieldSpec]),J.prototype.fieldSpec.push(["gc",X.prototype.fieldSpec]);var $=function(e,t){return p.call(this,e),this.messageType="MSG_GROUP_DELAY_DEP_A",this.fields=t||this.parser.parse(e.payload),this};($.prototype=Object.create(p.prototype)).messageType="MSG_GROUP_DELAY_DEP_A",$.prototype.msg_type=146,$.prototype.constructor=$,$.prototype.parser=(new o).endianess("little").nest("t_op",{type:c.prototype.parser}).uint8("prn").uint8("valid").int16("tgd").int16("isc_l1ca").int16("isc_l2c"),$.prototype.fieldSpec=[],$.prototype.fieldSpec.push(["t_op",c.prototype.fieldSpec]),$.prototype.fieldSpec.push(["prn","writeUInt8",1]),$.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]);var Z=function(e,t){return p.call(this,e),this.messageType="MSG_GROUP_DELAY_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(Z.prototype=Object.create(p.prototype)).messageType="MSG_GROUP_DELAY_DEP_B",Z.prototype.msg_type=147,Z.prototype.constructor=Z,Z.prototype.parser=(new o).endianess("little").nest("t_op",{type:l.prototype.parser}).nest("sid",{type:s.prototype.parser}).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(["sid",s.prototype.fieldSpec]),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]);var ee=function(e,t){return p.call(this,e),this.messageType="MSG_GROUP_DELAY",this.fields=t||this.parser.parse(e.payload),this};(ee.prototype=Object.create(p.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:l.prototype.parser}).nest("sid",{type:i.prototype.parser}).uint8("valid").int16("tgd").int16("isc_l1ca").int16("isc_l2c"),ee.prototype.fieldSpec=[],ee.prototype.fieldSpec.push(["t_op",l.prototype.fieldSpec]),ee.prototype.fieldSpec.push(["sid",i.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]);var te=function(e,t){return p.call(this,e),this.messageType="AlmanacCommonContent",this.fields=t||this.parser.parse(e.payload),this};(te.prototype=Object.create(p.prototype)).messageType="AlmanacCommonContent",te.prototype.constructor=te,te.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).nest("toa",{type:l.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),te.prototype.fieldSpec=[],te.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),te.prototype.fieldSpec.push(["toa",l.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]);var re=function(e,t){return p.call(this,e),this.messageType="AlmanacCommonContentDep",this.fields=t||this.parser.parse(e.payload),this};(re.prototype=Object.create(p.prototype)).messageType="AlmanacCommonContentDep",re.prototype.constructor=re,re.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).nest("toa",{type:l.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),re.prototype.fieldSpec=[],re.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),re.prototype.fieldSpec.push(["toa",l.prototype.fieldSpec]),re.prototype.fieldSpec.push(["ura","writeDoubleLE",8]),re.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),re.prototype.fieldSpec.push(["valid","writeUInt8",1]),re.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);var pe=function(e,t){return p.call(this,e),this.messageType="MSG_ALMANAC_GPS_DEP",this.fields=t||this.parser.parse(e.payload),this};(pe.prototype=Object.create(p.prototype)).messageType="MSG_ALMANAC_GPS_DEP",pe.prototype.msg_type=112,pe.prototype.constructor=pe,pe.prototype.parser=(new o).endianess("little").nest("common",{type:re.prototype.parser}).doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("af0").doublele("af1"),pe.prototype.fieldSpec=[],pe.prototype.fieldSpec.push(["common",re.prototype.fieldSpec]),pe.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["w","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["af1","writeDoubleLE",8]);var oe=function(e,t){return p.call(this,e),this.messageType="MSG_ALMANAC_GPS",this.fields=t||this.parser.parse(e.payload),this};(oe.prototype=Object.create(p.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]);var ie=function(e,t){return p.call(this,e),this.messageType="MSG_ALMANAC_GLO_DEP",this.fields=t||this.parser.parse(e.payload),this};(ie.prototype=Object.create(p.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:re.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",re.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]);var se=function(e,t){return p.call(this,e),this.messageType="MSG_ALMANAC_GLO",this.fields=t||this.parser.parse(e.payload),this};(se.prototype=Object.create(p.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]);var ne=function(e,t){return p.call(this,e),this.messageType="MSG_GLO_BIASES",this.fields=t||this.parser.parse(e.payload),this};(ne.prototype=Object.create(p.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]);var ae=function(e,t){return p.call(this,e),this.messageType="SvAzEl",this.fields=t||this.parser.parse(e.payload),this};(ae.prototype=Object.create(p.prototype)).messageType="SvAzEl",ae.prototype.constructor=ae,ae.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).uint8("az").int8("el"),ae.prototype.fieldSpec=[],ae.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),ae.prototype.fieldSpec.push(["az","writeUInt8",1]),ae.prototype.fieldSpec.push(["el","writeInt8",1]);var le=function(e,t){return p.call(this,e),this.messageType="MSG_SV_AZ_EL",this.fields=t||this.parser.parse(e.payload),this};(le.prototype=Object.create(p.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]);var ce=function(e,t){return p.call(this,e),this.messageType="MSG_OSR",this.fields=t||this.parser.parse(e.payload),this};(ce.prototype=Object.create(p.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:v,MsgEphemerisGps:v,142:L,MsgEphemerisQzss:L,137:I,MsgEphemerisBds:I,149:T,MsgEphemerisGalDepA:T,141:M,MsgEphemerisGal:M,130:U,MsgEphemerisSbasDepA:U,131:D,MsgEphemerisGloDepA:D,132:O,MsgEphemerisSbasDepB:O,140:G,MsgEphemerisSbas:G,133:A,MsgEphemerisGloDepB:A,135:R,MsgEphemerisGloDepC:R,136:C,MsgEphemerisGloDepD:C,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:W,MsgObsDepB:W,73:Y,MsgObsDepC:Y,144:Q,MsgIono:Q,145:K,MsgSvConfigurationGpsDep:K,GnssCapb:X,150:J,MsgGnssCapb:J,146:$,MsgGroupDelayDepA:$,147:Z,MsgGroupDelayDepB:Z,148:ee,MsgGroupDelay:ee,AlmanacCommonContent:te,AlmanacCommonContentDep:re,112:pe,MsgAlmanacGpsDep:pe,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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=r(0).GnssSignalDep,n=r(0).GPSTime,a=(r(0).CarrierPhase,n=r(0).GPSTime,r(0).GPSTimeSec,r(0).GPSTimeDep),l=(r(0).SvId,function(e,t){return p.call(this,e),this.messageType="MSG_ALMANAC",this.fields=t||this.parser.parse(e.payload),this});(l.prototype=Object.create(p.prototype)).messageType="MSG_ALMANAC",l.prototype.msg_type=105,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little"),l.prototype.fieldSpec=[];var c=function(e,t){return p.call(this,e),this.messageType="MSG_SET_TIME",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.prototype)).messageType="MSG_SET_TIME",c.prototype.msg_type=104,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little"),c.prototype.fieldSpec=[];var u=function(e,t){return p.call(this,e),this.messageType="MSG_RESET",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_RESET_DEP",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.prototype)).messageType="MSG_RESET_DEP",y.prototype.msg_type=178,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little"),y.prototype.fieldSpec=[];var h=function(e,t){return p.call(this,e),this.messageType="MSG_CW_RESULTS",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.prototype)).messageType="MSG_CW_RESULTS",h.prototype.msg_type=192,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little"),h.prototype.fieldSpec=[];var f=function(e,t){return p.call(this,e),this.messageType="MSG_CW_START",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.prototype)).messageType="MSG_CW_START",f.prototype.msg_type=193,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little"),f.prototype.fieldSpec=[];var d=function(e,t){return p.call(this,e),this.messageType="MSG_RESET_FILTERS",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(p.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]);var _=function(e,t){return p.call(this,e),this.messageType="MSG_INIT_BASE_DEP",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(p.prototype)).messageType="MSG_INIT_BASE_DEP",_.prototype.msg_type=35,_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little"),_.prototype.fieldSpec=[];var S=function(e,t){return p.call(this,e),this.messageType="MSG_THREAD_STATE",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(p.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]);var g=function(e,t){return p.call(this,e),this.messageType="UARTChannel",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(p.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]);var w=function(e,t){return p.call(this,e),this.messageType="Period",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(p.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]);var E=function(e,t){return p.call(this,e),this.messageType="Latency",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(p.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]);var m=function(e,t){return p.call(this,e),this.messageType="MSG_UART_STATE",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(p.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]);var b=function(e,t){return p.call(this,e),this.messageType="MSG_UART_STATE_DEPA",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(p.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]);var v=function(e,t){return p.call(this,e),this.messageType="MSG_IAR_STATE",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(p.prototype)).messageType="MSG_IAR_STATE",v.prototype.msg_type=25,v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").uint32("num_hyps"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["num_hyps","writeUInt32LE",4]);var L=function(e,t){return p.call(this,e),this.messageType="MSG_MASK_SATELLITE",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(p.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]);var I=function(e,t){return p.call(this,e),this.messageType="MSG_MASK_SATELLITE_DEP",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(p.prototype)).messageType="MSG_MASK_SATELLITE_DEP",I.prototype.msg_type=27,I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").uint8("mask").nest("sid",{type:s.prototype.parser}),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["mask","writeUInt8",1]),I.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);var T=function(e,t){return p.call(this,e),this.messageType="MSG_DEVICE_MONITOR",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(p.prototype)).messageType="MSG_DEVICE_MONITOR",T.prototype.msg_type=181,T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").int16("dev_vin").int16("cpu_vint").int16("cpu_vaux").int16("cpu_temperature").int16("fe_temperature"),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["dev_vin","writeInt16LE",2]),T.prototype.fieldSpec.push(["cpu_vint","writeInt16LE",2]),T.prototype.fieldSpec.push(["cpu_vaux","writeInt16LE",2]),T.prototype.fieldSpec.push(["cpu_temperature","writeInt16LE",2]),T.prototype.fieldSpec.push(["fe_temperature","writeInt16LE",2]);var M=function(e,t){return p.call(this,e),this.messageType="MSG_COMMAND_REQ",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(p.prototype)).messageType="MSG_COMMAND_REQ",M.prototype.msg_type=184,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").uint32("sequence").string("command",{greedy:!0}),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),M.prototype.fieldSpec.push(["command","string",null]);var U=function(e,t){return p.call(this,e),this.messageType="MSG_COMMAND_RESP",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(p.prototype)).messageType="MSG_COMMAND_RESP",U.prototype.msg_type=185,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").uint32("sequence").int32("code"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),U.prototype.fieldSpec.push(["code","writeInt32LE",4]);var D=function(e,t){return p.call(this,e),this.messageType="MSG_COMMAND_OUTPUT",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(p.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]);var O=function(e,t){return p.call(this,e),this.messageType="MSG_NETWORK_STATE_REQ",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(p.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=[];var G=function(e,t){return p.call(this,e),this.messageType="MSG_NETWORK_STATE_RESP",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(p.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]);var A=function(e,t){return p.call(this,e),this.messageType="NetworkUsage",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(p.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]);var R=function(e,t){return p.call(this,e),this.messageType="MSG_NETWORK_BANDWIDTH_USAGE",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(p.prototype)).messageType="MSG_NETWORK_BANDWIDTH_USAGE",R.prototype.msg_type=189,R.prototype.constructor=R,R.prototype.parser=(new o).endianess("little").array("interfaces",{type:A.prototype.parser,readUntil:"eof"}),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["interfaces","array",A.prototype.fieldSpec,function(){return this.fields.array.length},null]);var C=function(e,t){return p.call(this,e),this.messageType="MSG_CELL_MODEM_STATUS",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(p.prototype)).messageType="MSG_CELL_MODEM_STATUS",C.prototype.msg_type=190,C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").int8("signal_strength").floatle("signal_error_rate").array("reserved",{type:"uint8",readUntil:"eof"}),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["signal_strength","writeInt8",1]),C.prototype.fieldSpec.push(["signal_error_rate","writeFloatLE",4]),C.prototype.fieldSpec.push(["reserved","array","writeUInt8",function(){return 1},null]);var P=function(e,t){return p.call(this,e),this.messageType="MSG_SPECAN_DEP",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(p.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]);var N=function(e,t){return p.call(this,e),this.messageType="MSG_SPECAN",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(p.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]);var j=function(e,t){return p.call(this,e),this.messageType="MSG_FRONT_END_GAIN",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(p.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:v,MsgIarState:v,43:L,MsgMaskSatellite:L,27:I,MsgMaskSatelliteDep:I,181:T,MsgDeviceMonitor:T,184:M,MsgCommandReq:M,185:U,MsgCommandResp:U,188:D,MsgCommandOutput:D,186:O,MsgNetworkStateReq:O,187:G,MsgNetworkStateResp:G,NetworkUsage:A,189:R,MsgNetworkBandwidthUsage:R,190:C,MsgCellModemStatus:C,80:P,MsgSpecanDep:P,81:N,MsgSpecan:N,191:j,MsgFrontEndGain:j}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=(r(0).GnssSignalDep,r(0).GPSTime,r(0).CarrierPhase,r(0).GPSTime,r(0).GPSTimeSec,r(0).GPSTimeDep,r(0).SvId,function(e,t){return p.call(this,e),this.messageType="MSG_SBAS_RAW",this.fields=t||this.parser.parse(e.payload),this});(s.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_SAVE",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.prototype)).messageType="MSG_SETTINGS_SAVE",i.prototype.msg_type=161,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little"),i.prototype.fieldSpec=[];var s=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_WRITE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_WRITE_RESP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_READ_REQ",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_REQ",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_RESP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_DONE",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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=[];var h=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_REGISTER",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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]);var f=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_REGISTER_RESP",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.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,r){var p=r(2),o=r(13).Parser,i=function(e){return p.call(this,e),this.messageType="SBPSignal",this.fields=this.parser.parse(e.payload),this};(i.prototype=Object.create(p.prototype)).constructor=i,i.prototype.parser=(new o).endianess("little").uint16("sat").uint8("band").uint8("constellation"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["sat","writeUInt16LE",2]),i.prototype.fieldSpec.push(["band","writeUInt8",1]),i.prototype.fieldSpec.push(["constellation","writeUInt8",1]),e.exports={SBPSignal:i}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=(r(0).GnssSignalDep,r(0).GPSTime,r(0).CarrierPhase,r(0).GPSTime,r(0).GPSTimeSec),n=(r(0).GPSTimeDep,r(0).SvId),a=function(e,t){return p.call(this,e),this.messageType="CodeBiasesContent",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="PhaseBiasesContent",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="STECHeader",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.prototype)).messageType="STECHeader",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]);var u=function(e,t){return p.call(this,e),this.messageType="GriddedCorrectionHeader",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.prototype)).messageType="GriddedCorrectionHeader",u.prototype.constructor=u,u.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"),u.prototype.fieldSpec=[],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]);var y=function(e,t){return p.call(this,e),this.messageType="STECSatElement",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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]);var h=function(e,t){return p.call(this,e),this.messageType="TroposphericDelayCorrectionNoStd",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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]);var f=function(e,t){return p.call(this,e),this.messageType="TroposphericDelayCorrection",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.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]);var d=function(e,t){return p.call(this,e),this.messageType="STECResidualNoStd",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(p.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]);var _=function(e,t){return p.call(this,e),this.messageType="STECResidual",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(p.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]);var S=function(e,t){return p.call(this,e),this.messageType="GridElementNoStd",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(p.prototype)).messageType="GridElementNoStd",S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").uint16("index").nest("tropo_delay_correction",{type:h.prototype.parser}).array("stec_residuals",{type:d.prototype.parser,readUntil:"eof"}),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["index","writeUInt16LE",2]),S.prototype.fieldSpec.push(["tropo_delay_correction",h.prototype.fieldSpec]),S.prototype.fieldSpec.push(["stec_residuals","array",d.prototype.fieldSpec,function(){return this.fields.array.length},null]);var g=function(e,t){return p.call(this,e),this.messageType="GridElement",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(p.prototype)).messageType="GridElement",g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").uint16("index").nest("tropo_delay_correction",{type:f.prototype.parser}).array("stec_residuals",{type:_.prototype.parser,readUntil:"eof"}),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["index","writeUInt16LE",2]),g.prototype.fieldSpec.push(["tropo_delay_correction",f.prototype.fieldSpec]),g.prototype.fieldSpec.push(["stec_residuals","array",_.prototype.fieldSpec,function(){return this.fields.array.length},null]);var w=function(e,t){return p.call(this,e),this.messageType="GridDefinitionHeader",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(p.prototype)).messageType="GridDefinitionHeader",w.prototype.constructor=w,w.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"),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["region_size_inverse","writeUInt8",1]),w.prototype.fieldSpec.push(["area_width","writeUInt16LE",2]),w.prototype.fieldSpec.push(["lat_nw_corner_enc","writeUInt16LE",2]),w.prototype.fieldSpec.push(["lon_nw_corner_enc","writeUInt16LE",2]),w.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),w.prototype.fieldSpec.push(["seq_num","writeUInt8",1]);var E=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(p.prototype)).messageType="MSG_SSR_ORBIT_CLOCK",E.prototype.msg_type=1501,E.prototype.constructor=E,E.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"),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),E.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),E.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),E.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),E.prototype.fieldSpec.push(["iod","writeUInt32LE",4]),E.prototype.fieldSpec.push(["radial","writeInt32LE",4]),E.prototype.fieldSpec.push(["along","writeInt32LE",4]),E.prototype.fieldSpec.push(["cross","writeInt32LE",4]),E.prototype.fieldSpec.push(["dot_radial","writeInt32LE",4]),E.prototype.fieldSpec.push(["dot_along","writeInt32LE",4]),E.prototype.fieldSpec.push(["dot_cross","writeInt32LE",4]),E.prototype.fieldSpec.push(["c0","writeInt32LE",4]),E.prototype.fieldSpec.push(["c1","writeInt32LE",4]),E.prototype.fieldSpec.push(["c2","writeInt32LE",4]);var m=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(p.prototype)).messageType="MSG_SSR_ORBIT_CLOCK_DEP_A",m.prototype.msg_type=1500,m.prototype.constructor=m,m.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"),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),m.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),m.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),m.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),m.prototype.fieldSpec.push(["iod","writeUInt8",1]),m.prototype.fieldSpec.push(["radial","writeInt32LE",4]),m.prototype.fieldSpec.push(["along","writeInt32LE",4]),m.prototype.fieldSpec.push(["cross","writeInt32LE",4]),m.prototype.fieldSpec.push(["dot_radial","writeInt32LE",4]),m.prototype.fieldSpec.push(["dot_along","writeInt32LE",4]),m.prototype.fieldSpec.push(["dot_cross","writeInt32LE",4]),m.prototype.fieldSpec.push(["c0","writeInt32LE",4]),m.prototype.fieldSpec.push(["c1","writeInt32LE",4]),m.prototype.fieldSpec.push(["c2","writeInt32LE",4]);var b=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_CODE_BIASES",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(p.prototype)).messageType="MSG_SSR_CODE_BIASES",b.prototype.msg_type=1505,b.prototype.constructor=b,b.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"}),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),b.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),b.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),b.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),b.prototype.fieldSpec.push(["biases","array",a.prototype.fieldSpec,function(){return this.fields.array.length},null]);var v=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_PHASE_BIASES",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(p.prototype)).messageType="MSG_SSR_PHASE_BIASES",v.prototype.msg_type=1510,v.prototype.constructor=v,v.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"}),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),v.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),v.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),v.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),v.prototype.fieldSpec.push(["dispersive_bias","writeUInt8",1]),v.prototype.fieldSpec.push(["mw_consistency","writeUInt8",1]),v.prototype.fieldSpec.push(["yaw","writeUInt16LE",2]),v.prototype.fieldSpec.push(["yaw_rate","writeInt8",1]),v.prototype.fieldSpec.push(["biases","array",l.prototype.fieldSpec,function(){return this.fields.array.length},null]);var L=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_STEC_CORRECTION",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(p.prototype)).messageType="MSG_SSR_STEC_CORRECTION",L.prototype.msg_type=1515,L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").nest("header",{type:c.prototype.parser}).array("stec_sat_list",{type:y.prototype.parser,readUntil:"eof"}),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["header",c.prototype.fieldSpec]),L.prototype.fieldSpec.push(["stec_sat_list","array",y.prototype.fieldSpec,function(){return this.fields.array.length},null]);var I=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION_NO_STD",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(p.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION_NO_STD",I.prototype.msg_type=1520,I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").nest("header",{type:u.prototype.parser}).nest("element",{type:S.prototype.parser}),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["header",u.prototype.fieldSpec]),I.prototype.fieldSpec.push(["element",S.prototype.fieldSpec]);var T=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(p.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION",T.prototype.msg_type=1530,T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").nest("header",{type:u.prototype.parser}).nest("element",{type:g.prototype.parser}),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["header",u.prototype.fieldSpec]),T.prototype.fieldSpec.push(["element",g.prototype.fieldSpec]);var M=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_GRID_DEFINITION",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(p.prototype)).messageType="MSG_SSR_GRID_DEFINITION",M.prototype.msg_type=1525,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").nest("header",{type:w.prototype.parser}).array("rle_list",{type:"uint8",readUntil:"eof"}),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["header",w.prototype.fieldSpec]),M.prototype.fieldSpec.push(["rle_list","array","writeUInt8",function(){return 1},null]),e.exports={CodeBiasesContent:a,PhaseBiasesContent:l,STECHeader:c,GriddedCorrectionHeader:u,STECSatElement:y,TroposphericDelayCorrectionNoStd:h,TroposphericDelayCorrection:f,STECResidualNoStd:d,STECResidual:_,GridElementNoStd:S,GridElement:g,GridDefinitionHeader:w,1501:E,MsgSsrOrbitClock:E,1500:m,MsgSsrOrbitClockDepA:m,1505:b,MsgSsrCodeBiases:b,1510:v,MsgSsrPhaseBiases:v,1515:L,MsgSsrStecCorrection:L,1520:I,MsgSsrGriddedCorrectionNoStd:I,1530:T,MsgSsrGriddedCorrection:T,1525:M,MsgSsrGridDefinition:M}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_STARTUP",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_DGNSS_STATUS",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_HEARTBEAT",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_INS_STATUS",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.prototype)).messageType="MSG_INS_STATUS",a.prototype.msg_type=65283,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint32("flags"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_CSAC_TELEMETRY",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.prototype)).messageType="MSG_CSAC_TELEMETRY",l.prototype.msg_type=65284,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint8("id").string("telemetry",{greedy:!0}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["id","writeUInt8",1]),l.prototype.fieldSpec.push(["telemetry","string",null]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_CSAC_TELEMETRY_LABELS",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.prototype)).messageType="MSG_CSAC_TELEMETRY_LABELS",c.prototype.msg_type=65285,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint8("id").string("telemetry_labels",{greedy:!0}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["id","writeUInt8",1]),c.prototype.fieldSpec.push(["telemetry_labels","string",null]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_INS_UPDATES",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.prototype)).messageType="MSG_INS_UPDATES",u.prototype.msg_type=65286,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint32("tow").uint8("gnsspos").uint8("gnssvel").uint8("wheelticks").uint8("speed").uint8("nhc").uint8("zerovel"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),u.prototype.fieldSpec.push(["gnsspos","writeUInt8",1]),u.prototype.fieldSpec.push(["gnssvel","writeUInt8",1]),u.prototype.fieldSpec.push(["wheelticks","writeUInt8",1]),u.prototype.fieldSpec.push(["speed","writeUInt8",1]),u.prototype.fieldSpec.push(["nhc","writeUInt8",1]),u.prototype.fieldSpec.push(["zerovel","writeUInt8",1]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_GNSS_TIME_OFFSET",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.prototype)).messageType="MSG_GNSS_TIME_OFFSET",y.prototype.msg_type=65287,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").int16("weeks").int32("milliseconds").int16("microseconds").uint8("flags"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["weeks","writeInt16LE",2]),y.prototype.fieldSpec.push(["milliseconds","writeInt32LE",4]),y.prototype.fieldSpec.push(["microseconds","writeInt16LE",2]),y.prototype.fieldSpec.push(["flags","writeUInt8",1]);var h=function(e,t){return p.call(this,e),this.messageType="MSG_GROUP_META",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.prototype)).messageType="MSG_GROUP_META",h.prototype.msg_type=65290,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tom").int32("ns_residual").uint8("flags").array("group_msgs",{type:"uint16le",readUntil:"eof"}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),h.prototype.fieldSpec.push(["tom","writeUInt32LE",4]),h.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),h.prototype.fieldSpec.push(["flags","writeUInt8",1]),h.prototype.fieldSpec.push(["group_msgs","array","writeUInt16LE",function(){return 2},null]),e.exports={65280:i,MsgStartup:i,65282:s,MsgDgnssStatus:s,65535:n,MsgHeartbeat:n,65283:a,MsgInsStatus:a,65284:l,MsgCsacTelemetry:l,65285:c,MsgCsacTelemetryLabels:c,65286:u,MsgInsUpdates:u,65287:y,MsgGnssTimeOffset:y,65290:h,MsgGroupMeta:h}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=r(0).GnssSignalDep,n=r(0).GPSTime,a=r(0).CarrierPhase,l=(n=r(0).GPSTime,r(0).GPSTimeSec,r(0).GPSTimeDep),c=(r(0).SvId,function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_STATE_DETAILED_DEP_A",this.fields=t||this.parser.parse(e.payload),this});(c.prototype=Object.create(p.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:n.prototype.parser}).uint32("P").uint16("P_std").nest("L",{type:a.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:i.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",n.prototype.fieldSpec]),c.prototype.fieldSpec.push(["P","writeUInt32LE",4]),c.prototype.fieldSpec.push(["P_std","writeUInt16LE",2]),c.prototype.fieldSpec.push(["L",a.prototype.fieldSpec]),c.prototype.fieldSpec.push(["cn0","writeUInt8",1]),c.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),c.prototype.fieldSpec.push(["sid",i.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]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_STATE_DETAILED_DEP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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:a.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"),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",a.prototype.fieldSpec]),u.prototype.fieldSpec.push(["cn0","writeUInt8",1]),u.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),u.prototype.fieldSpec.push(["sid",s.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]);var y=function(e,t){return p.call(this,e),this.messageType="TrackingChannelState",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.prototype)).messageType="TrackingChannelState",y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).uint8("fcn").uint8("cn0"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),y.prototype.fieldSpec.push(["fcn","writeUInt8",1]),y.prototype.fieldSpec.push(["cn0","writeUInt8",1]);var h=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_STATE",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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]);var f=function(e,t){return p.call(this,e),this.messageType="MeasurementState",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.prototype)).messageType="MeasurementState",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").nest("mesid",{type:i.prototype.parser}).uint8("cn0"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["mesid",i.prototype.fieldSpec]),f.prototype.fieldSpec.push(["cn0","writeUInt8",1]);var d=function(e,t){return p.call(this,e),this.messageType="MSG_MEASUREMENT_STATE",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(p.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]);var _=function(e,t){return p.call(this,e),this.messageType="TrackingChannelCorrelation",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(p.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]);var S=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_IQ",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(p.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:i.prototype.parser}).array("corrs",{length:3,type:_.prototype.parser}),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["channel","writeUInt8",1]),S.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),S.prototype.fieldSpec.push(["corrs","array",_.prototype.fieldSpec,function(){return this.fields.array.length},3]);var g=function(e,t){return p.call(this,e),this.messageType="TrackingChannelCorrelationDep",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(p.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]);var w=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_IQ_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(p.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:i.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",i.prototype.fieldSpec]),w.prototype.fieldSpec.push(["corrs","array",g.prototype.fieldSpec,function(){return this.fields.array.length},3]);var E=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_IQ_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(p.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:s.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",s.prototype.fieldSpec]),E.prototype.fieldSpec.push(["corrs","array",g.prototype.fieldSpec,function(){return this.fields.array.length},3]);var m=function(e,t){return p.call(this,e),this.messageType="TrackingChannelStateDepA",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(p.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]);var b=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_STATE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(p.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]);var v=function(e,t){return p.call(this,e),this.messageType="TrackingChannelStateDepB",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(p.prototype)).messageType="TrackingChannelStateDepB",v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").uint8("state").nest("sid",{type:s.prototype.parser}).floatle("cn0"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["state","writeUInt8",1]),v.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),v.prototype.fieldSpec.push(["cn0","writeFloatLE",4]);var L=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_STATE_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(p.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:v.prototype.parser,readUntil:"eof"}),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["states","array",v.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:v,19:L,MsgTrackingStateDepB:L}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_USER_DATA",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_ODOMETRY",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_WHEELTICK",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_HEADING",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_ORIENT_QUAT",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_ORIENT_EULER",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_ANGULAR_RATE",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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}}]); \ No newline at end of file +function p(e,t){if(e===t)return 0;for(var r=e.length,p=t.length,o=0,i=Math.min(r,p);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],r,p))return!1;return!0}(e,t,r,s))}return r?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,r,p){var o;if("function"!=typeof t)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(p=r,r=null),o=function(e){var t;try{e()}catch(e){t=e}return t}(t),p=(r&&r.name?" ("+r.name+").":".")+(p?" "+p:"."),e&&!o&&_(o,r,"Missing expected exception"+p);var s="string"==typeof p,n=!e&&o&&!r;if((!e&&i.isError(o)&&s&&E(o,r)||n)&&_(o,r,"Got unwanted exception"+p),e&&o&&r&&!E(o,r)||!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 r=new Error;if(r.stack){var p=r.stack,o=h(t),i=p.indexOf("\n"+o);if(i>=0){var s=p.indexOf("\n",i+1);p=p.substring(s+1)}this.stack=p}}},i.inherits(u.AssertionError,Error),u.fail=_,u.ok=S,u.equal=function(e,t,r){e!=t&&_(e,t,r,"==",u.equal)},u.notEqual=function(e,t,r){e==t&&_(e,t,r,"!=",u.notEqual)},u.deepEqual=function(e,t,r){g(e,t,!1)||_(e,t,r,"deepEqual",u.deepEqual)},u.deepStrictEqual=function(e,t,r){g(e,t,!0)||_(e,t,r,"deepStrictEqual",u.deepStrictEqual)},u.notDeepEqual=function(e,t,r){g(e,t,!1)&&_(e,t,r,"notDeepEqual",u.notDeepEqual)},u.notDeepStrictEqual=function e(t,r,p){g(t,r,!0)&&_(t,r,p,"notDeepStrictEqual",e)},u.strictEqual=function(e,t,r){e!==t&&_(e,t,r,"===",u.strictEqual)},u.notStrictEqual=function(e,t,r){e===t&&_(e,t,r,"!==",u.notStrictEqual)},u.throws=function(e,t,r){m(!0,e,t,r)},u.doesNotThrow=function(e,t,r){m(!1,e,t,r)},u.ifError=function(e){if(e)throw e};var b=Object.keys||function(e){var t=[];for(var r in e)s.call(e,r)&&t.push(r);return t}}).call(this,r(5))},function(e,t,r){(function(e,p){var o=/%[sdj%]/g;t.format=function(e){if(!S(e)){for(var t=[],r=0;r=i)return e;switch(e){case"%s":return String(p[r++]);case"%d":return Number(p[r++]);case"%j":try{return JSON.stringify(p[r++])}catch(e){return"[Circular]"}default:return e}})),a=p[r];r=3&&(p.depth=arguments[2]),arguments.length>=4&&(p.colors=arguments[3]),f(r)?p.showHidden=r:r&&t._extend(p,r),g(p.showHidden)&&(p.showHidden=!1),g(p.depth)&&(p.depth=2),g(p.colors)&&(p.colors=!1),g(p.customInspect)&&(p.customInspect=!0),p.colors&&(p.stylize=a),c(p,e,p.depth)}function a(e,t){var r=n.styles[t];return r?"["+n.colors[r][0]+"m"+e+"["+n.colors[r][1]+"m":e}function l(e,t){return e}function c(e,r,p){if(e.customInspect&&r&&v(r.inspect)&&r.inspect!==t.inspect&&(!r.constructor||r.constructor.prototype!==r)){var o=r.inspect(p,e);return S(o)||(o=c(e,o,p)),o}var i=function(e,t){if(g(t))return e.stylize("undefined","undefined");if(S(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}if(_(t))return e.stylize(""+t,"number");if(f(t))return e.stylize(""+t,"boolean");if(d(t))return e.stylize("null","null")}(e,r);if(i)return i;var s=Object.keys(r),n=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(s);if(e.showHidden&&(s=Object.getOwnPropertyNames(r)),b(r)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return u(r);if(0===s.length){if(v(r)){var a=r.name?": "+r.name:"";return e.stylize("[Function"+a+"]","special")}if(w(r))return e.stylize(RegExp.prototype.toString.call(r),"regexp");if(m(r))return e.stylize(Date.prototype.toString.call(r),"date");if(b(r))return u(r)}var l,E="",L=!1,I=["{","}"];(h(r)&&(L=!0,I=["[","]"]),v(r))&&(E=" [Function"+(r.name?": "+r.name:"")+"]");return w(r)&&(E=" "+RegExp.prototype.toString.call(r)),m(r)&&(E=" "+Date.prototype.toUTCString.call(r)),b(r)&&(E=" "+u(r)),0!==s.length||L&&0!=r.length?p<0?w(r)?e.stylize(RegExp.prototype.toString.call(r),"regexp"):e.stylize("[Object]","special"):(e.seen.push(r),l=L?function(e,t,r,p,o){for(var i=[],s=0,n=t.length;s=0&&0,e+t.replace(/\u001b\[\d\d?m/g,"").length+1}),0)>60)return r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1];return r[0]+t+" "+e.join(", ")+" "+r[1]}(l,E,I)):I[0]+E+I[1]}function u(e){return"["+Error.prototype.toString.call(e)+"]"}function y(e,t,r,p,o,i){var s,n,a;if((a=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?n=a.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):a.set&&(n=e.stylize("[Setter]","special")),U(p,o)||(s="["+o+"]"),n||(e.seen.indexOf(a.value)<0?(n=d(r)?c(e,a.value,null):c(e,a.value,r-1)).indexOf("\n")>-1&&(n=i?n.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+n.split("\n").map((function(e){return" "+e})).join("\n")):n=e.stylize("[Circular]","special")),g(s)){if(i&&o.match(/^\d+$/))return n;(s=JSON.stringify(""+o)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+n}function h(e){return Array.isArray(e)}function f(e){return"boolean"==typeof e}function d(e){return null===e}function _(e){return"number"==typeof e}function S(e){return"string"==typeof e}function g(e){return void 0===e}function w(e){return E(e)&&"[object RegExp]"===L(e)}function E(e){return"object"==typeof e&&null!==e}function m(e){return E(e)&&"[object Date]"===L(e)}function b(e){return E(e)&&("[object Error]"===L(e)||e instanceof Error)}function v(e){return"function"==typeof e}function L(e){return Object.prototype.toString.call(e)}function I(e){return e<10?"0"+e.toString(10):e.toString(10)}t.debuglog=function(e){if(g(i)&&(i=p.env.NODE_DEBUG||""),e=e.toUpperCase(),!s[e])if(new RegExp("\\b"+e+"\\b","i").test(i)){var r=p.pid;s[e]=function(){var p=t.format.apply(t,arguments);console.error("%s %d: %s",e,r,p)}}else s[e]=function(){};return s[e]},t.inspect=n,n.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},n.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=h,t.isBoolean=f,t.isNull=d,t.isNullOrUndefined=function(e){return null==e},t.isNumber=_,t.isString=S,t.isSymbol=function(e){return"symbol"==typeof e},t.isUndefined=g,t.isRegExp=w,t.isObject=E,t.isDate=m,t.isError=b,t.isFunction=v,t.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},t.isBuffer=r(43);var T=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function M(){var e=new Date,t=[I(e.getHours()),I(e.getMinutes()),I(e.getSeconds())].join(":");return[e.getDate(),T[e.getMonth()],t].join(" ")}function U(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.log=function(){console.log("%s - %s",M(),t.format.apply(t,arguments))},t.inherits=r(6),t._extend=function(e,t){if(!t||!E(t))return e;for(var r=Object.keys(t),p=r.length;p--;)e[r[p]]=t[r[p]];return e}}).call(this,r(5),r(9))},function(e,t){e.exports=function(e){return e&&"object"==typeof e&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},function(e,t,r){var p;!function(r){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 r=parseInt(e,t||10);return this._low=65535&r,this._high=r>>>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,r=t>>>16;return r+=this._high+e._high,this._low=65535&t,this._high=65535&r,this},o.prototype.subtract=function(e){return this.add(e.clone().negate())},o.prototype.multiply=function(e){var t,r,p=this._high,o=this._low,i=e._high,s=e._low;return t=(r=o*s)>>>16,t+=p*s,t&=65535,t+=o*i,this._low=65535&r,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(),r=-1;!this.lt(t);)t.shiftLeft(1,!0),r++;for(this.remainder=this.clone(),this._low=0,this._high=0;r>=0;r--)t.shiftRight(1),this.remainder.lt(t)||(this.remainder.subtract(t),r>=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===(p=function(){return o}.apply(t,[]))||(e.exports=p)}()},function(e,t,r){var p;!function(r){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,r,p){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,r,p)}function n(e,t,r,p){return void 0===r?(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|r,this._a48=0|p,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 r=o[t]||new s(Math.pow(t,5)),p=0,i=e.length;p=0&&(r.div(t),p[o]=r.remainder.toNumber().toString(e),r.gt(t));o--);return p[o-1]=r.toNumber().toString(e),p.join("")},s.prototype.add=function(e){var t=this._a00+e._a00,r=t>>>16,p=(r+=this._a16+e._a16)>>>16,o=(p+=this._a32+e._a32)>>>16;return o+=this._a48+e._a48,this._a00=65535&t,this._a16=65535&r,this._a32=65535&p,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,r=this._a16,p=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+=r*i)>>>16;var u=(c+=t*n)>>>16;return c&=65535,u+=(c+=r*s)>>>16,c&=65535,u+=(c+=p*i)>>>16,u+=t*e._a48,u&=65535,u+=r*n,u&=65535,u+=p*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(),r=-1;!this.lt(t);)t.shiftLeft(1,!0),r++;for(this.remainder=this.clone(),this._a00=0,this._a16=0,this._a32=0,this._a48=0;r>=0;r--)t.shiftRight(1),this.remainder.lt(t)||(this.remainder.subtract(t),r>=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 r=this._a48<<16|this._a32,p=this._a16<<16|this._a00,o=r<>>32-e,i=p<>>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 r=this._a48<<16|this._a32,p=this._a16<<16|this._a00,o=r>>>e|p<<32-e,i=p>>>e|r<<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===(p=function(){return s}.apply(t,[]))||(e.exports=p)}()},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=r(0).GnssSignalDep,n=(r(0).GPSTime,r(0).CarrierPhase,r(0).GPSTime,r(0).GPSTimeSec,r(0).GPSTimeDep,r(0).SvId,function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_RESULT",this.fields=t||this.parser.parse(e.payload),this});(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_RESULT_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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]);var u=function(e,t){return p.call(this,e),this.messageType="AcqSvProfile",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="AcqSvProfileDep",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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]);var h=function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_SV_PROFILE",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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]);var f=function(e,t){return p.call(this,e),this.messageType="MSG_ACQ_SV_PROFILE_DEP",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_REQ",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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=[];var s=function(e,t){return p.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_RESP",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_BOOTLOADER_JUMP_TO_APP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_NAP_DEVICE_DNA_REQ",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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=[];var l=function(e,t){return p.call(this,e),this.messageType="MSG_NAP_DEVICE_DNA_RESP",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_BOOTLOADER_HANDSHAKE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_EXT_EVENT",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_READ_REQ",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_READ_DIR_REQ",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_READ_DIR_RESP",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_REMOVE",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_WRITE_REQ",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_WRITE_RESP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_CONFIG_REQ",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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]);var h=function(e,t){return p.call(this,e),this.messageType="MSG_FILEIO_CONFIG_RESP",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_FLASH_PROGRAM",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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"]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_FLASH_DONE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_FLASH_READ_REQ",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_FLASH_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_FLASH_ERASE",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_STM_FLASH_LOCK_SECTOR",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_STM_FLASH_UNLOCK_SECTOR",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_STM_UNIQUE_ID_REQ",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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=[];var h=function(e,t){return p.call(this,e),this.messageType="MSG_STM_UNIQUE_ID_RESP",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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]);var f=function(e,t){return p.call(this,e),this.messageType="MSG_M25_FLASH_WRITE_STATUS",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_IMU_RAW",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_IMU_AUX",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_CPU_STATE",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.prototype)).messageType="MSG_LINUX_CPU_STATE",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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_MEM_STATE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.prototype)).messageType="MSG_LINUX_MEM_STATE",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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_SYS_STATE",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.prototype)).messageType="MSG_LINUX_SYS_STATE",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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_PROCESS_SOCKET_COUNTS",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_PROCESS_SOCKET_QUEUES",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_SOCKET_USAGE",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_PROCESS_FD_COUNT",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_LINUX_PROCESS_FD_SUMMARY",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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]),e.exports={32512:i,MsgLinuxCpuState:i,32513:s,MsgLinuxMemState:s,32514:n,MsgLinuxSysState:n,32515:a,MsgLinuxProcessSocketCounts:a,32516:l,MsgLinuxProcessSocketQueues:l,32517:c,MsgLinuxSocketUsage:c,32518:u,MsgLinuxProcessFdCount:u,32519:y,MsgLinuxProcessFdSummary:y}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_LOG",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_FWD",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.prototype)).messageType="MSG_FWD",s.prototype.msg_type=1026,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("source").uint8("protocol").string("fwd_payload",{greedy:!0}),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["source","writeUInt8",1]),s.prototype.fieldSpec.push(["protocol","writeUInt8",1]),s.prototype.fieldSpec.push(["fwd_payload","string",null]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_PRINT_DEP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_MAG_RAW",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_GPS_TIME",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_UTC_TIME",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.prototype)).messageType="MSG_UTC_TIME",s.prototype.msg_type=259,s.prototype.constructor=s,s.prototype.parser=(new o).endianess("little").uint8("flags").uint32("tow").uint16("year").uint8("month").uint8("day").uint8("hours").uint8("minutes").uint8("seconds").uint32("ns"),s.prototype.fieldSpec=[],s.prototype.fieldSpec.push(["flags","writeUInt8",1]),s.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),s.prototype.fieldSpec.push(["year","writeUInt16LE",2]),s.prototype.fieldSpec.push(["month","writeUInt8",1]),s.prototype.fieldSpec.push(["day","writeUInt8",1]),s.prototype.fieldSpec.push(["hours","writeUInt8",1]),s.prototype.fieldSpec.push(["minutes","writeUInt8",1]),s.prototype.fieldSpec.push(["seconds","writeUInt8",1]),s.prototype.fieldSpec.push(["ns","writeUInt32LE",4]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_DOPS",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.prototype)).messageType="MSG_DOPS",n.prototype.msg_type=520,n.prototype.constructor=n,n.prototype.parser=(new o).endianess("little").uint32("tow").uint16("gdop").uint16("pdop").uint16("tdop").uint16("hdop").uint16("vdop").uint8("flags"),n.prototype.fieldSpec=[],n.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),n.prototype.fieldSpec.push(["gdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["tdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]),n.prototype.fieldSpec.push(["flags","writeUInt8",1]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_POS_ECEF",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.prototype)).messageType="MSG_POS_ECEF",a.prototype.msg_type=521,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),a.prototype.fieldSpec.push(["x","writeDoubleLE",8]),a.prototype.fieldSpec.push(["y","writeDoubleLE",8]),a.prototype.fieldSpec.push(["z","writeDoubleLE",8]),a.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),a.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),a.prototype.fieldSpec.push(["flags","writeUInt8",1]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_POS_ECEF_COV",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.prototype)).messageType="MSG_POS_ECEF_COV",l.prototype.msg_type=532,l.prototype.constructor=l,l.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"),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),l.prototype.fieldSpec.push(["x","writeDoubleLE",8]),l.prototype.fieldSpec.push(["y","writeDoubleLE",8]),l.prototype.fieldSpec.push(["z","writeDoubleLE",8]),l.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),l.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),l.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),l.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),l.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),l.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),l.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),l.prototype.fieldSpec.push(["flags","writeUInt8",1]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_POS_LLH",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.prototype)).messageType="MSG_POS_LLH",c.prototype.msg_type=522,c.prototype.constructor=c,c.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"),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),c.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),c.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),c.prototype.fieldSpec.push(["height","writeDoubleLE",8]),c.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),c.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),c.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),c.prototype.fieldSpec.push(["flags","writeUInt8",1]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_POS_LLH_COV",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.prototype)).messageType="MSG_POS_LLH_COV",u.prototype.msg_type=529,u.prototype.constructor=u,u.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"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),u.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),u.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),u.prototype.fieldSpec.push(["height","writeDoubleLE",8]),u.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),u.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),u.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),u.prototype.fieldSpec.push(["flags","writeUInt8",1]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_ECEF",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.prototype)).messageType="MSG_BASELINE_ECEF",y.prototype.msg_type=523,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["tow","writeUInt32LE",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(["accuracy","writeUInt16LE",2]),y.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),y.prototype.fieldSpec.push(["flags","writeUInt8",1]);var h=function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_NED",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.prototype)).messageType="MSG_BASELINE_NED",h.prototype.msg_type=524,h.prototype.constructor=h,h.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"),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),h.prototype.fieldSpec.push(["n","writeInt32LE",4]),h.prototype.fieldSpec.push(["e","writeInt32LE",4]),h.prototype.fieldSpec.push(["d","writeInt32LE",4]),h.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),h.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),h.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),h.prototype.fieldSpec.push(["flags","writeUInt8",1]);var f=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_ECEF",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.prototype)).messageType="MSG_VEL_ECEF",f.prototype.msg_type=525,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]);var d=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_ECEF_COV",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(p.prototype)).messageType="MSG_VEL_ECEF_COV",d.prototype.msg_type=533,d.prototype.constructor=d,d.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"),d.prototype.fieldSpec=[],d.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),d.prototype.fieldSpec.push(["x","writeInt32LE",4]),d.prototype.fieldSpec.push(["y","writeInt32LE",4]),d.prototype.fieldSpec.push(["z","writeInt32LE",4]),d.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),d.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),d.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),d.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),d.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),d.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),d.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),d.prototype.fieldSpec.push(["flags","writeUInt8",1]);var _=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_NED",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(p.prototype)).messageType="MSG_VEL_NED",_.prototype.msg_type=526,_.prototype.constructor=_,_.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"),_.prototype.fieldSpec=[],_.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),_.prototype.fieldSpec.push(["n","writeInt32LE",4]),_.prototype.fieldSpec.push(["e","writeInt32LE",4]),_.prototype.fieldSpec.push(["d","writeInt32LE",4]),_.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),_.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),_.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),_.prototype.fieldSpec.push(["flags","writeUInt8",1]);var S=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_NED_COV",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(p.prototype)).messageType="MSG_VEL_NED_COV",S.prototype.msg_type=530,S.prototype.constructor=S,S.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"),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(["cov_n_n","writeFloatLE",4]),S.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),S.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),S.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),S.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),S.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),S.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),S.prototype.fieldSpec.push(["flags","writeUInt8",1]);var g=function(e,t){return p.call(this,e),this.messageType="MSG_POS_ECEF_GNSS",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(p.prototype)).messageType="MSG_POS_ECEF_GNSS",g.prototype.msg_type=553,g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),g.prototype.fieldSpec.push(["x","writeDoubleLE",8]),g.prototype.fieldSpec.push(["y","writeDoubleLE",8]),g.prototype.fieldSpec.push(["z","writeDoubleLE",8]),g.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),g.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),g.prototype.fieldSpec.push(["flags","writeUInt8",1]);var w=function(e,t){return p.call(this,e),this.messageType="MSG_POS_ECEF_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(p.prototype)).messageType="MSG_POS_ECEF_COV_GNSS",w.prototype.msg_type=564,w.prototype.constructor=w,w.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"),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),w.prototype.fieldSpec.push(["x","writeDoubleLE",8]),w.prototype.fieldSpec.push(["y","writeDoubleLE",8]),w.prototype.fieldSpec.push(["z","writeDoubleLE",8]),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]);var E=function(e,t){return p.call(this,e),this.messageType="MSG_POS_LLH_GNSS",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(p.prototype)).messageType="MSG_POS_LLH_GNSS",E.prototype.msg_type=554,E.prototype.constructor=E,E.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"),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),E.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),E.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),E.prototype.fieldSpec.push(["height","writeDoubleLE",8]),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]);var m=function(e,t){return p.call(this,e),this.messageType="MSG_POS_LLH_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(p.prototype)).messageType="MSG_POS_LLH_COV_GNSS",m.prototype.msg_type=561,m.prototype.constructor=m,m.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"),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),m.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),m.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),m.prototype.fieldSpec.push(["height","writeDoubleLE",8]),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]);var b=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_ECEF_GNSS",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(p.prototype)).messageType="MSG_VEL_ECEF_GNSS",b.prototype.msg_type=557,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),b.prototype.fieldSpec.push(["x","writeInt32LE",4]),b.prototype.fieldSpec.push(["y","writeInt32LE",4]),b.prototype.fieldSpec.push(["z","writeInt32LE",4]),b.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),b.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),b.prototype.fieldSpec.push(["flags","writeUInt8",1]);var v=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_ECEF_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(p.prototype)).messageType="MSG_VEL_ECEF_COV_GNSS",v.prototype.msg_type=565,v.prototype.constructor=v,v.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"),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(["cov_x_x","writeFloatLE",4]),v.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),v.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),v.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),v.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),v.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),v.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),v.prototype.fieldSpec.push(["flags","writeUInt8",1]);var L=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_NED_GNSS",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(p.prototype)).messageType="MSG_VEL_NED_GNSS",L.prototype.msg_type=558,L.prototype.constructor=L,L.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"),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),L.prototype.fieldSpec.push(["n","writeInt32LE",4]),L.prototype.fieldSpec.push(["e","writeInt32LE",4]),L.prototype.fieldSpec.push(["d","writeInt32LE",4]),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]);var I=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_NED_COV_GNSS",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(p.prototype)).messageType="MSG_VEL_NED_COV_GNSS",I.prototype.msg_type=562,I.prototype.constructor=I,I.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"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),I.prototype.fieldSpec.push(["n","writeInt32LE",4]),I.prototype.fieldSpec.push(["e","writeInt32LE",4]),I.prototype.fieldSpec.push(["d","writeInt32LE",4]),I.prototype.fieldSpec.push(["cov_n_n","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_n_e","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_n_d","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_e_e","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_e_d","writeFloatLE",4]),I.prototype.fieldSpec.push(["cov_d_d","writeFloatLE",4]),I.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),I.prototype.fieldSpec.push(["flags","writeUInt8",1]);var T=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_BODY",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(p.prototype)).messageType="MSG_VEL_BODY",T.prototype.msg_type=531,T.prototype.constructor=T,T.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"),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),T.prototype.fieldSpec.push(["x","writeInt32LE",4]),T.prototype.fieldSpec.push(["y","writeInt32LE",4]),T.prototype.fieldSpec.push(["z","writeInt32LE",4]),T.prototype.fieldSpec.push(["cov_x_x","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_x_y","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_x_z","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_y_y","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_y_z","writeFloatLE",4]),T.prototype.fieldSpec.push(["cov_z_z","writeFloatLE",4]),T.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),T.prototype.fieldSpec.push(["flags","writeUInt8",1]);var M=function(e,t){return p.call(this,e),this.messageType="MSG_AGE_CORRECTIONS",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(p.prototype)).messageType="MSG_AGE_CORRECTIONS",M.prototype.msg_type=528,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").uint32("tow").uint16("age"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),M.prototype.fieldSpec.push(["age","writeUInt16LE",2]);var U=function(e,t){return p.call(this,e),this.messageType="MSG_GPS_TIME_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(p.prototype)).messageType="MSG_GPS_TIME_DEP_A",U.prototype.msg_type=256,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tow").int32("ns_residual").uint8("flags"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),U.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),U.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),U.prototype.fieldSpec.push(["flags","writeUInt8",1]);var D=function(e,t){return p.call(this,e),this.messageType="MSG_DOPS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(p.prototype)).messageType="MSG_DOPS_DEP_A",D.prototype.msg_type=518,D.prototype.constructor=D,D.prototype.parser=(new o).endianess("little").uint32("tow").uint16("gdop").uint16("pdop").uint16("tdop").uint16("hdop").uint16("vdop"),D.prototype.fieldSpec=[],D.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),D.prototype.fieldSpec.push(["gdop","writeUInt16LE",2]),D.prototype.fieldSpec.push(["pdop","writeUInt16LE",2]),D.prototype.fieldSpec.push(["tdop","writeUInt16LE",2]),D.prototype.fieldSpec.push(["hdop","writeUInt16LE",2]),D.prototype.fieldSpec.push(["vdop","writeUInt16LE",2]);var O=function(e,t){return p.call(this,e),this.messageType="MSG_POS_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(p.prototype)).messageType="MSG_POS_ECEF_DEP_A",O.prototype.msg_type=512,O.prototype.constructor=O,O.prototype.parser=(new o).endianess("little").uint32("tow").doublele("x").doublele("y").doublele("z").uint16("accuracy").uint8("n_sats").uint8("flags"),O.prototype.fieldSpec=[],O.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),O.prototype.fieldSpec.push(["x","writeDoubleLE",8]),O.prototype.fieldSpec.push(["y","writeDoubleLE",8]),O.prototype.fieldSpec.push(["z","writeDoubleLE",8]),O.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),O.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),O.prototype.fieldSpec.push(["flags","writeUInt8",1]);var G=function(e,t){return p.call(this,e),this.messageType="MSG_POS_LLH_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(p.prototype)).messageType="MSG_POS_LLH_DEP_A",G.prototype.msg_type=513,G.prototype.constructor=G,G.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"),G.prototype.fieldSpec=[],G.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),G.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),G.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),G.prototype.fieldSpec.push(["height","writeDoubleLE",8]),G.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),G.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),G.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),G.prototype.fieldSpec.push(["flags","writeUInt8",1]);var A=function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(p.prototype)).messageType="MSG_BASELINE_ECEF_DEP_A",A.prototype.msg_type=514,A.prototype.constructor=A,A.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").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(["accuracy","writeUInt16LE",2]),A.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),A.prototype.fieldSpec.push(["flags","writeUInt8",1]);var R=function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_NED_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(p.prototype)).messageType="MSG_BASELINE_NED_DEP_A",R.prototype.msg_type=515,R.prototype.constructor=R,R.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"),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),R.prototype.fieldSpec.push(["n","writeInt32LE",4]),R.prototype.fieldSpec.push(["e","writeInt32LE",4]),R.prototype.fieldSpec.push(["d","writeInt32LE",4]),R.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),R.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),R.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),R.prototype.fieldSpec.push(["flags","writeUInt8",1]);var C=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_ECEF_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(p.prototype)).messageType="MSG_VEL_ECEF_DEP_A",C.prototype.msg_type=516,C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").uint32("tow").int32("x").int32("y").int32("z").uint16("accuracy").uint8("n_sats").uint8("flags"),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),C.prototype.fieldSpec.push(["x","writeInt32LE",4]),C.prototype.fieldSpec.push(["y","writeInt32LE",4]),C.prototype.fieldSpec.push(["z","writeInt32LE",4]),C.prototype.fieldSpec.push(["accuracy","writeUInt16LE",2]),C.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),C.prototype.fieldSpec.push(["flags","writeUInt8",1]);var P=function(e,t){return p.call(this,e),this.messageType="MSG_VEL_NED_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(p.prototype)).messageType="MSG_VEL_NED_DEP_A",P.prototype.msg_type=517,P.prototype.constructor=P,P.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"),P.prototype.fieldSpec=[],P.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),P.prototype.fieldSpec.push(["n","writeInt32LE",4]),P.prototype.fieldSpec.push(["e","writeInt32LE",4]),P.prototype.fieldSpec.push(["d","writeInt32LE",4]),P.prototype.fieldSpec.push(["h_accuracy","writeUInt16LE",2]),P.prototype.fieldSpec.push(["v_accuracy","writeUInt16LE",2]),P.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),P.prototype.fieldSpec.push(["flags","writeUInt8",1]);var N=function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_HEADING_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(p.prototype)).messageType="MSG_BASELINE_HEADING_DEP_A",N.prototype.msg_type=519,N.prototype.constructor=N,N.prototype.parser=(new o).endianess("little").uint32("tow").uint32("heading").uint8("n_sats").uint8("flags"),N.prototype.fieldSpec=[],N.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),N.prototype.fieldSpec.push(["heading","writeUInt32LE",4]),N.prototype.fieldSpec.push(["n_sats","writeUInt8",1]),N.prototype.fieldSpec.push(["flags","writeUInt8",1]);var j=function(e,t){return p.call(this,e),this.messageType="MSG_PROTECTION_LEVEL",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(p.prototype)).messageType="MSG_PROTECTION_LEVEL",j.prototype.msg_type=534,j.prototype.constructor=j,j.prototype.parser=(new o).endianess("little").uint32("tow").uint16("vpl").uint16("hpl").doublele("lat").doublele("lon").doublele("height").uint8("flags"),j.prototype.fieldSpec=[],j.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),j.prototype.fieldSpec.push(["vpl","writeUInt16LE",2]),j.prototype.fieldSpec.push(["hpl","writeUInt16LE",2]),j.prototype.fieldSpec.push(["lat","writeDoubleLE",8]),j.prototype.fieldSpec.push(["lon","writeDoubleLE",8]),j.prototype.fieldSpec.push(["height","writeDoubleLE",8]),j.prototype.fieldSpec.push(["flags","writeUInt8",1]),e.exports={258:i,MsgGpsTime:i,259:s,MsgUtcTime:s,520:n,MsgDops:n,521:a,MsgPosEcef:a,532:l,MsgPosEcefCov:l,522:c,MsgPosLlh:c,529:u,MsgPosLlhCov:u,523:y,MsgBaselineEcef:y,524:h,MsgBaselineNed:h,525:f,MsgVelEcef:f,533:d,MsgVelEcefCov:d,526:_,MsgVelNed:_,530:S,MsgVelNedCov:S,553:g,MsgPosEcefGnss:g,564:w,MsgPosEcefCovGnss:w,554:E,MsgPosLlhGnss:E,561:m,MsgPosLlhCovGnss:m,557:b,MsgVelEcefGnss:b,565:v,MsgVelEcefCovGnss:v,558:L,MsgVelNedGnss:L,562:I,MsgVelNedCovGnss:I,531:T,MsgVelBody:T,528:M,MsgAgeCorrections:M,256:U,MsgGpsTimeDepA:U,518:D,MsgDopsDepA:D,512:O,MsgPosEcefDepA:O,513:G,MsgPosLlhDepA:G,514:A,MsgBaselineEcefDepA:A,515:R,MsgBaselineNedDepA:R,516:C,MsgVelEcefDepA:C,517:P,MsgVelNedDepA:P,519:N,MsgBaselineHeadingDepA:N,534:j,MsgProtectionLevel:j}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=(r(0).GnssSignalDep,r(0).GPSTime,r(0).CarrierPhase,r(0).GPSTime,r(0).GPSTimeSec,r(0).GPSTimeDep,r(0).SvId,function(e,t){return p.call(this,e),this.messageType="MSG_NDB_EVENT",this.fields=t||this.parser.parse(e.payload),this});(s.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=r(0).GnssSignalDep,n=r(0).GPSTime,a=r(0).CarrierPhase,l=(n=r(0).GPSTime,r(0).GPSTimeSec),c=r(0).GPSTimeDep,u=(r(0).SvId,function(e,t){return p.call(this,e),this.messageType="ObservationHeader",this.fields=t||this.parser.parse(e.payload),this});(u.prototype=Object.create(p.prototype)).messageType="ObservationHeader",u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").nest("t",{type:n.prototype.parser}).uint8("n_obs"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["t",n.prototype.fieldSpec]),u.prototype.fieldSpec.push(["n_obs","writeUInt8",1]);var y=function(e,t){return p.call(this,e),this.messageType="Doppler",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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]);var h=function(e,t){return p.call(this,e),this.messageType="PackedObsContent",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.prototype)).messageType="PackedObsContent",h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:a.prototype.parser}).nest("D",{type:y.prototype.parser}).uint8("cn0").uint8("lock").uint8("flags").nest("sid",{type:i.prototype.parser}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["P","writeUInt32LE",4]),h.prototype.fieldSpec.push(["L",a.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",i.prototype.fieldSpec]);var f=function(e,t){return p.call(this,e),this.messageType="PackedOsrContent",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.prototype)).messageType="PackedOsrContent",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:a.prototype.parser}).uint8("lock").uint8("flags").nest("sid",{type:i.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",a.prototype.fieldSpec]),f.prototype.fieldSpec.push(["lock","writeUInt8",1]),f.prototype.fieldSpec.push(["flags","writeUInt8",1]),f.prototype.fieldSpec.push(["sid",i.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]);var d=function(e,t){return p.call(this,e),this.messageType="MSG_OBS",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(p.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]);var _=function(e,t){return p.call(this,e),this.messageType="MSG_BASE_POS_LLH",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(p.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]);var S=function(e,t){return p.call(this,e),this.messageType="MSG_BASE_POS_ECEF",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(p.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]);var g=function(e,t){return p.call(this,e),this.messageType="EphemerisCommonContent",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(p.prototype)).messageType="EphemerisCommonContent",g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).nest("toe",{type:l.prototype.parser}).floatle("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),g.prototype.fieldSpec.push(["toe",l.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]);var w=function(e,t){return p.call(this,e),this.messageType="EphemerisCommonContentDepB",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(p.prototype)).messageType="EphemerisCommonContentDepB",w.prototype.constructor=w,w.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).nest("toe",{type:l.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),w.prototype.fieldSpec=[],w.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),w.prototype.fieldSpec.push(["toe",l.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]);var E=function(e,t){return p.call(this,e),this.messageType="EphemerisCommonContentDepA",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(p.prototype)).messageType="EphemerisCommonContentDepA",E.prototype.constructor=E,E.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"),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),E.prototype.fieldSpec.push(["toe",c.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]);var m=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GPS_DEP_E",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(p.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:c.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",c.prototype.fieldSpec]),m.prototype.fieldSpec.push(["iode","writeUInt8",1]),m.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var b=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GPS_DEP_F",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(p.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:l.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",l.prototype.fieldSpec]),b.prototype.fieldSpec.push(["iode","writeUInt8",1]),b.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var v=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GPS",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_GPS",v.prototype.msg_type=138,v.prototype.constructor=v,v.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:l.prototype.parser}).uint8("iode").uint16("iodc"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),v.prototype.fieldSpec.push(["tgd","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","writeFloatLE",4]),v.prototype.fieldSpec.push(["af1","writeFloatLE",4]),v.prototype.fieldSpec.push(["af2","writeFloatLE",4]),v.prototype.fieldSpec.push(["toc",l.prototype.fieldSpec]),v.prototype.fieldSpec.push(["iode","writeUInt8",1]),v.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var L=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_QZSS",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(p.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:l.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",l.prototype.fieldSpec]),L.prototype.fieldSpec.push(["iode","writeUInt8",1]),L.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var I=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_BDS",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_BDS",I.prototype.msg_type=137,I.prototype.constructor=I,I.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:l.prototype.parser}).uint8("iode").uint16("iodc"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),I.prototype.fieldSpec.push(["tgd1","writeFloatLE",4]),I.prototype.fieldSpec.push(["tgd2","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","writeDoubleLE",8]),I.prototype.fieldSpec.push(["af1","writeFloatLE",4]),I.prototype.fieldSpec.push(["af2","writeFloatLE",4]),I.prototype.fieldSpec.push(["toc",l.prototype.fieldSpec]),I.prototype.fieldSpec.push(["iode","writeUInt8",1]),I.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var T=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GAL_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_GAL_DEP_A",T.prototype.msg_type=149,T.prototype.constructor=T,T.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:l.prototype.parser}).uint16("iode").uint16("iodc"),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),T.prototype.fieldSpec.push(["bgd_e1e5a","writeFloatLE",4]),T.prototype.fieldSpec.push(["bgd_e1e5b","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","writeDoubleLE",8]),T.prototype.fieldSpec.push(["af2","writeFloatLE",4]),T.prototype.fieldSpec.push(["toc",l.prototype.fieldSpec]),T.prototype.fieldSpec.push(["iode","writeUInt16LE",2]),T.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]);var M=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GAL",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_GAL",M.prototype.msg_type=141,M.prototype.constructor=M,M.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:l.prototype.parser}).uint16("iode").uint16("iodc").uint8("source"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["common",g.prototype.fieldSpec]),M.prototype.fieldSpec.push(["bgd_e1e5a","writeFloatLE",4]),M.prototype.fieldSpec.push(["bgd_e1e5b","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_rs","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_rc","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_uc","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_us","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_ic","writeFloatLE",4]),M.prototype.fieldSpec.push(["c_is","writeFloatLE",4]),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","writeFloatLE",4]),M.prototype.fieldSpec.push(["toc",l.prototype.fieldSpec]),M.prototype.fieldSpec.push(["iode","writeUInt16LE",2]),M.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),M.prototype.fieldSpec.push(["source","writeUInt8",1]);var U=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_SBAS_DEP_A",U.prototype.msg_type=130,U.prototype.constructor=U,U.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"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["common",E.prototype.fieldSpec]),U.prototype.fieldSpec.push(["pos","array","writeDoubleLE",function(){return 8},3]),U.prototype.fieldSpec.push(["vel","array","writeDoubleLE",function(){return 8},3]),U.prototype.fieldSpec.push(["acc","array","writeDoubleLE",function(){return 8},3]),U.prototype.fieldSpec.push(["a_gf0","writeDoubleLE",8]),U.prototype.fieldSpec.push(["a_gf1","writeDoubleLE",8]);var D=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(p.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]);var O=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(p.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]);var G=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_SBAS",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(p.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]);var A=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(p.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]);var R=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_C",R.prototype.msg_type=135,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"),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]);var C=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GLO_DEP_D",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(p.prototype)).messageType="MSG_EPHEMERIS_GLO_DEP_D",C.prototype.msg_type=136,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").uint8("iod"),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]),C.prototype.fieldSpec.push(["iod","writeUInt8",1]);var P=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_GLO",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(p.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]);var N=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_D",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(p.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:s.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",s.prototype.fieldSpec]),N.prototype.fieldSpec.push(["iode","writeUInt8",1]),N.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),N.prototype.fieldSpec.push(["reserved","writeUInt32LE",4]);var j=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(p.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]);var x=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(x.prototype=Object.create(p.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]);var F=function(e,t){return p.call(this,e),this.messageType="MSG_EPHEMERIS_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(F.prototype=Object.create(p.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:s.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",s.prototype.fieldSpec]),F.prototype.fieldSpec.push(["iode","writeUInt8",1]),F.prototype.fieldSpec.push(["iodc","writeUInt16LE",2]),F.prototype.fieldSpec.push(["reserved","writeUInt32LE",4]);var k=function(e,t){return p.call(this,e),this.messageType="ObservationHeaderDep",this.fields=t||this.parser.parse(e.payload),this};(k.prototype=Object.create(p.prototype)).messageType="ObservationHeaderDep",k.prototype.constructor=k,k.prototype.parser=(new o).endianess("little").nest("t",{type:c.prototype.parser}).uint8("n_obs"),k.prototype.fieldSpec=[],k.prototype.fieldSpec.push(["t",c.prototype.fieldSpec]),k.prototype.fieldSpec.push(["n_obs","writeUInt8",1]);var B=function(e,t){return p.call(this,e),this.messageType="CarrierPhaseDepA",this.fields=t||this.parser.parse(e.payload),this};(B.prototype=Object.create(p.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]);var q=function(e,t){return p.call(this,e),this.messageType="PackedObsContentDepA",this.fields=t||this.parser.parse(e.payload),this};(q.prototype=Object.create(p.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]);var z=function(e,t){return p.call(this,e),this.messageType="PackedObsContentDepB",this.fields=t||this.parser.parse(e.payload),this};(z.prototype=Object.create(p.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:s.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",s.prototype.fieldSpec]);var H=function(e,t){return p.call(this,e),this.messageType="PackedObsContentDepC",this.fields=t||this.parser.parse(e.payload),this};(H.prototype=Object.create(p.prototype)).messageType="PackedObsContentDepC",H.prototype.constructor=H,H.prototype.parser=(new o).endianess("little").uint32("P").nest("L",{type:a.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:s.prototype.parser}),H.prototype.fieldSpec=[],H.prototype.fieldSpec.push(["P","writeUInt32LE",4]),H.prototype.fieldSpec.push(["L",a.prototype.fieldSpec]),H.prototype.fieldSpec.push(["cn0","writeUInt8",1]),H.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),H.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);var V=function(e,t){return p.call(this,e),this.messageType="MSG_OBS_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(V.prototype=Object.create(p.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]);var W=function(e,t){return p.call(this,e),this.messageType="MSG_OBS_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(W.prototype=Object.create(p.prototype)).messageType="MSG_OBS_DEP_B",W.prototype.msg_type=67,W.prototype.constructor=W,W.prototype.parser=(new o).endianess("little").nest("header",{type:k.prototype.parser}).array("obs",{type:z.prototype.parser,readUntil:"eof"}),W.prototype.fieldSpec=[],W.prototype.fieldSpec.push(["header",k.prototype.fieldSpec]),W.prototype.fieldSpec.push(["obs","array",z.prototype.fieldSpec,function(){return this.fields.array.length},null]);var Y=function(e,t){return p.call(this,e),this.messageType="MSG_OBS_DEP_C",this.fields=t||this.parser.parse(e.payload),this};(Y.prototype=Object.create(p.prototype)).messageType="MSG_OBS_DEP_C",Y.prototype.msg_type=73,Y.prototype.constructor=Y,Y.prototype.parser=(new o).endianess("little").nest("header",{type:k.prototype.parser}).array("obs",{type:H.prototype.parser,readUntil:"eof"}),Y.prototype.fieldSpec=[],Y.prototype.fieldSpec.push(["header",k.prototype.fieldSpec]),Y.prototype.fieldSpec.push(["obs","array",H.prototype.fieldSpec,function(){return this.fields.array.length},null]);var Q=function(e,t){return p.call(this,e),this.messageType="MSG_IONO",this.fields=t||this.parser.parse(e.payload),this};(Q.prototype=Object.create(p.prototype)).messageType="MSG_IONO",Q.prototype.msg_type=144,Q.prototype.constructor=Q,Q.prototype.parser=(new o).endianess("little").nest("t_nmct",{type:l.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",l.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]);var K=function(e,t){return p.call(this,e),this.messageType="MSG_SV_CONFIGURATION_GPS_DEP",this.fields=t||this.parser.parse(e.payload),this};(K.prototype=Object.create(p.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:l.prototype.parser}).uint32("l2c_mask"),K.prototype.fieldSpec=[],K.prototype.fieldSpec.push(["t_nmct",l.prototype.fieldSpec]),K.prototype.fieldSpec.push(["l2c_mask","writeUInt32LE",4]);var X=function(e,t){return p.call(this,e),this.messageType="GnssCapb",this.fields=t||this.parser.parse(e.payload),this};(X.prototype=Object.create(p.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]);var J=function(e,t){return p.call(this,e),this.messageType="MSG_GNSS_CAPB",this.fields=t||this.parser.parse(e.payload),this};(J.prototype=Object.create(p.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:l.prototype.parser}).nest("gc",{type:X.prototype.parser}),J.prototype.fieldSpec=[],J.prototype.fieldSpec.push(["t_nmct",l.prototype.fieldSpec]),J.prototype.fieldSpec.push(["gc",X.prototype.fieldSpec]);var $=function(e,t){return p.call(this,e),this.messageType="MSG_GROUP_DELAY_DEP_A",this.fields=t||this.parser.parse(e.payload),this};($.prototype=Object.create(p.prototype)).messageType="MSG_GROUP_DELAY_DEP_A",$.prototype.msg_type=146,$.prototype.constructor=$,$.prototype.parser=(new o).endianess("little").nest("t_op",{type:c.prototype.parser}).uint8("prn").uint8("valid").int16("tgd").int16("isc_l1ca").int16("isc_l2c"),$.prototype.fieldSpec=[],$.prototype.fieldSpec.push(["t_op",c.prototype.fieldSpec]),$.prototype.fieldSpec.push(["prn","writeUInt8",1]),$.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]);var Z=function(e,t){return p.call(this,e),this.messageType="MSG_GROUP_DELAY_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(Z.prototype=Object.create(p.prototype)).messageType="MSG_GROUP_DELAY_DEP_B",Z.prototype.msg_type=147,Z.prototype.constructor=Z,Z.prototype.parser=(new o).endianess("little").nest("t_op",{type:l.prototype.parser}).nest("sid",{type:s.prototype.parser}).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(["sid",s.prototype.fieldSpec]),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]);var ee=function(e,t){return p.call(this,e),this.messageType="MSG_GROUP_DELAY",this.fields=t||this.parser.parse(e.payload),this};(ee.prototype=Object.create(p.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:l.prototype.parser}).nest("sid",{type:i.prototype.parser}).uint8("valid").int16("tgd").int16("isc_l1ca").int16("isc_l2c"),ee.prototype.fieldSpec=[],ee.prototype.fieldSpec.push(["t_op",l.prototype.fieldSpec]),ee.prototype.fieldSpec.push(["sid",i.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]);var te=function(e,t){return p.call(this,e),this.messageType="AlmanacCommonContent",this.fields=t||this.parser.parse(e.payload),this};(te.prototype=Object.create(p.prototype)).messageType="AlmanacCommonContent",te.prototype.constructor=te,te.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).nest("toa",{type:l.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),te.prototype.fieldSpec=[],te.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),te.prototype.fieldSpec.push(["toa",l.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]);var re=function(e,t){return p.call(this,e),this.messageType="AlmanacCommonContentDep",this.fields=t||this.parser.parse(e.payload),this};(re.prototype=Object.create(p.prototype)).messageType="AlmanacCommonContentDep",re.prototype.constructor=re,re.prototype.parser=(new o).endianess("little").nest("sid",{type:s.prototype.parser}).nest("toa",{type:l.prototype.parser}).doublele("ura").uint32("fit_interval").uint8("valid").uint8("health_bits"),re.prototype.fieldSpec=[],re.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),re.prototype.fieldSpec.push(["toa",l.prototype.fieldSpec]),re.prototype.fieldSpec.push(["ura","writeDoubleLE",8]),re.prototype.fieldSpec.push(["fit_interval","writeUInt32LE",4]),re.prototype.fieldSpec.push(["valid","writeUInt8",1]),re.prototype.fieldSpec.push(["health_bits","writeUInt8",1]);var pe=function(e,t){return p.call(this,e),this.messageType="MSG_ALMANAC_GPS_DEP",this.fields=t||this.parser.parse(e.payload),this};(pe.prototype=Object.create(p.prototype)).messageType="MSG_ALMANAC_GPS_DEP",pe.prototype.msg_type=112,pe.prototype.constructor=pe,pe.prototype.parser=(new o).endianess("little").nest("common",{type:re.prototype.parser}).doublele("m0").doublele("ecc").doublele("sqrta").doublele("omega0").doublele("omegadot").doublele("w").doublele("inc").doublele("af0").doublele("af1"),pe.prototype.fieldSpec=[],pe.prototype.fieldSpec.push(["common",re.prototype.fieldSpec]),pe.prototype.fieldSpec.push(["m0","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["ecc","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["sqrta","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["omega0","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["omegadot","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["w","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["inc","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["af0","writeDoubleLE",8]),pe.prototype.fieldSpec.push(["af1","writeDoubleLE",8]);var oe=function(e,t){return p.call(this,e),this.messageType="MSG_ALMANAC_GPS",this.fields=t||this.parser.parse(e.payload),this};(oe.prototype=Object.create(p.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]);var ie=function(e,t){return p.call(this,e),this.messageType="MSG_ALMANAC_GLO_DEP",this.fields=t||this.parser.parse(e.payload),this};(ie.prototype=Object.create(p.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:re.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",re.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]);var se=function(e,t){return p.call(this,e),this.messageType="MSG_ALMANAC_GLO",this.fields=t||this.parser.parse(e.payload),this};(se.prototype=Object.create(p.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]);var ne=function(e,t){return p.call(this,e),this.messageType="MSG_GLO_BIASES",this.fields=t||this.parser.parse(e.payload),this};(ne.prototype=Object.create(p.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]);var ae=function(e,t){return p.call(this,e),this.messageType="SvAzEl",this.fields=t||this.parser.parse(e.payload),this};(ae.prototype=Object.create(p.prototype)).messageType="SvAzEl",ae.prototype.constructor=ae,ae.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).uint8("az").int8("el"),ae.prototype.fieldSpec=[],ae.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),ae.prototype.fieldSpec.push(["az","writeUInt8",1]),ae.prototype.fieldSpec.push(["el","writeInt8",1]);var le=function(e,t){return p.call(this,e),this.messageType="MSG_SV_AZ_EL",this.fields=t||this.parser.parse(e.payload),this};(le.prototype=Object.create(p.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]);var ce=function(e,t){return p.call(this,e),this.messageType="MSG_OSR",this.fields=t||this.parser.parse(e.payload),this};(ce.prototype=Object.create(p.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:v,MsgEphemerisGps:v,142:L,MsgEphemerisQzss:L,137:I,MsgEphemerisBds:I,149:T,MsgEphemerisGalDepA:T,141:M,MsgEphemerisGal:M,130:U,MsgEphemerisSbasDepA:U,131:D,MsgEphemerisGloDepA:D,132:O,MsgEphemerisSbasDepB:O,140:G,MsgEphemerisSbas:G,133:A,MsgEphemerisGloDepB:A,135:R,MsgEphemerisGloDepC:R,136:C,MsgEphemerisGloDepD:C,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:W,MsgObsDepB:W,73:Y,MsgObsDepC:Y,144:Q,MsgIono:Q,145:K,MsgSvConfigurationGpsDep:K,GnssCapb:X,150:J,MsgGnssCapb:J,146:$,MsgGroupDelayDepA:$,147:Z,MsgGroupDelayDepB:Z,148:ee,MsgGroupDelay:ee,AlmanacCommonContent:te,AlmanacCommonContentDep:re,112:pe,MsgAlmanacGpsDep:pe,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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=r(0).GnssSignalDep,n=r(0).GPSTime,a=(r(0).CarrierPhase,n=r(0).GPSTime,r(0).GPSTimeSec,r(0).GPSTimeDep),l=(r(0).SvId,function(e,t){return p.call(this,e),this.messageType="MSG_ALMANAC",this.fields=t||this.parser.parse(e.payload),this});(l.prototype=Object.create(p.prototype)).messageType="MSG_ALMANAC",l.prototype.msg_type=105,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little"),l.prototype.fieldSpec=[];var c=function(e,t){return p.call(this,e),this.messageType="MSG_SET_TIME",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.prototype)).messageType="MSG_SET_TIME",c.prototype.msg_type=104,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little"),c.prototype.fieldSpec=[];var u=function(e,t){return p.call(this,e),this.messageType="MSG_RESET",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_RESET_DEP",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.prototype)).messageType="MSG_RESET_DEP",y.prototype.msg_type=178,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little"),y.prototype.fieldSpec=[];var h=function(e,t){return p.call(this,e),this.messageType="MSG_CW_RESULTS",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.prototype)).messageType="MSG_CW_RESULTS",h.prototype.msg_type=192,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little"),h.prototype.fieldSpec=[];var f=function(e,t){return p.call(this,e),this.messageType="MSG_CW_START",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.prototype)).messageType="MSG_CW_START",f.prototype.msg_type=193,f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little"),f.prototype.fieldSpec=[];var d=function(e,t){return p.call(this,e),this.messageType="MSG_RESET_FILTERS",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(p.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]);var _=function(e,t){return p.call(this,e),this.messageType="MSG_INIT_BASE_DEP",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(p.prototype)).messageType="MSG_INIT_BASE_DEP",_.prototype.msg_type=35,_.prototype.constructor=_,_.prototype.parser=(new o).endianess("little"),_.prototype.fieldSpec=[];var S=function(e,t){return p.call(this,e),this.messageType="MSG_THREAD_STATE",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(p.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]);var g=function(e,t){return p.call(this,e),this.messageType="UARTChannel",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(p.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]);var w=function(e,t){return p.call(this,e),this.messageType="Period",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(p.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]);var E=function(e,t){return p.call(this,e),this.messageType="Latency",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(p.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]);var m=function(e,t){return p.call(this,e),this.messageType="MSG_UART_STATE",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(p.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]);var b=function(e,t){return p.call(this,e),this.messageType="MSG_UART_STATE_DEPA",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(p.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]);var v=function(e,t){return p.call(this,e),this.messageType="MSG_IAR_STATE",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(p.prototype)).messageType="MSG_IAR_STATE",v.prototype.msg_type=25,v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").uint32("num_hyps"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["num_hyps","writeUInt32LE",4]);var L=function(e,t){return p.call(this,e),this.messageType="MSG_MASK_SATELLITE",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(p.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]);var I=function(e,t){return p.call(this,e),this.messageType="MSG_MASK_SATELLITE_DEP",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(p.prototype)).messageType="MSG_MASK_SATELLITE_DEP",I.prototype.msg_type=27,I.prototype.constructor=I,I.prototype.parser=(new o).endianess("little").uint8("mask").nest("sid",{type:s.prototype.parser}),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["mask","writeUInt8",1]),I.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]);var T=function(e,t){return p.call(this,e),this.messageType="MSG_DEVICE_MONITOR",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(p.prototype)).messageType="MSG_DEVICE_MONITOR",T.prototype.msg_type=181,T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").int16("dev_vin").int16("cpu_vint").int16("cpu_vaux").int16("cpu_temperature").int16("fe_temperature"),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["dev_vin","writeInt16LE",2]),T.prototype.fieldSpec.push(["cpu_vint","writeInt16LE",2]),T.prototype.fieldSpec.push(["cpu_vaux","writeInt16LE",2]),T.prototype.fieldSpec.push(["cpu_temperature","writeInt16LE",2]),T.prototype.fieldSpec.push(["fe_temperature","writeInt16LE",2]);var M=function(e,t){return p.call(this,e),this.messageType="MSG_COMMAND_REQ",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(p.prototype)).messageType="MSG_COMMAND_REQ",M.prototype.msg_type=184,M.prototype.constructor=M,M.prototype.parser=(new o).endianess("little").uint32("sequence").string("command",{greedy:!0}),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),M.prototype.fieldSpec.push(["command","string",null]);var U=function(e,t){return p.call(this,e),this.messageType="MSG_COMMAND_RESP",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(p.prototype)).messageType="MSG_COMMAND_RESP",U.prototype.msg_type=185,U.prototype.constructor=U,U.prototype.parser=(new o).endianess("little").uint32("sequence").int32("code"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["sequence","writeUInt32LE",4]),U.prototype.fieldSpec.push(["code","writeInt32LE",4]);var D=function(e,t){return p.call(this,e),this.messageType="MSG_COMMAND_OUTPUT",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(p.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]);var O=function(e,t){return p.call(this,e),this.messageType="MSG_NETWORK_STATE_REQ",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(p.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=[];var G=function(e,t){return p.call(this,e),this.messageType="MSG_NETWORK_STATE_RESP",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(p.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]);var A=function(e,t){return p.call(this,e),this.messageType="NetworkUsage",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(p.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]);var R=function(e,t){return p.call(this,e),this.messageType="MSG_NETWORK_BANDWIDTH_USAGE",this.fields=t||this.parser.parse(e.payload),this};(R.prototype=Object.create(p.prototype)).messageType="MSG_NETWORK_BANDWIDTH_USAGE",R.prototype.msg_type=189,R.prototype.constructor=R,R.prototype.parser=(new o).endianess("little").array("interfaces",{type:A.prototype.parser,readUntil:"eof"}),R.prototype.fieldSpec=[],R.prototype.fieldSpec.push(["interfaces","array",A.prototype.fieldSpec,function(){return this.fields.array.length},null]);var C=function(e,t){return p.call(this,e),this.messageType="MSG_CELL_MODEM_STATUS",this.fields=t||this.parser.parse(e.payload),this};(C.prototype=Object.create(p.prototype)).messageType="MSG_CELL_MODEM_STATUS",C.prototype.msg_type=190,C.prototype.constructor=C,C.prototype.parser=(new o).endianess("little").int8("signal_strength").floatle("signal_error_rate").array("reserved",{type:"uint8",readUntil:"eof"}),C.prototype.fieldSpec=[],C.prototype.fieldSpec.push(["signal_strength","writeInt8",1]),C.prototype.fieldSpec.push(["signal_error_rate","writeFloatLE",4]),C.prototype.fieldSpec.push(["reserved","array","writeUInt8",function(){return 1},null]);var P=function(e,t){return p.call(this,e),this.messageType="MSG_SPECAN_DEP",this.fields=t||this.parser.parse(e.payload),this};(P.prototype=Object.create(p.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]);var N=function(e,t){return p.call(this,e),this.messageType="MSG_SPECAN",this.fields=t||this.parser.parse(e.payload),this};(N.prototype=Object.create(p.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]);var j=function(e,t){return p.call(this,e),this.messageType="MSG_FRONT_END_GAIN",this.fields=t||this.parser.parse(e.payload),this};(j.prototype=Object.create(p.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:v,MsgIarState:v,43:L,MsgMaskSatellite:L,27:I,MsgMaskSatelliteDep:I,181:T,MsgDeviceMonitor:T,184:M,MsgCommandReq:M,185:U,MsgCommandResp:U,188:D,MsgCommandOutput:D,186:O,MsgNetworkStateReq:O,187:G,MsgNetworkStateResp:G,NetworkUsage:A,189:R,MsgNetworkBandwidthUsage:R,190:C,MsgCellModemStatus:C,80:P,MsgSpecanDep:P,81:N,MsgSpecan:N,191:j,MsgFrontEndGain:j}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=(r(0).GnssSignalDep,r(0).GPSTime,r(0).CarrierPhase,r(0).GPSTime,r(0).GPSTimeSec,r(0).GPSTimeDep,r(0).SvId,function(e,t){return p.call(this,e),this.messageType="MSG_SBAS_RAW",this.fields=t||this.parser.parse(e.payload),this});(s.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_SAVE",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.prototype)).messageType="MSG_SETTINGS_SAVE",i.prototype.msg_type=161,i.prototype.constructor=i,i.prototype.parser=(new o).endianess("little"),i.prototype.fieldSpec=[];var s=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_WRITE",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_WRITE_RESP",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_READ_REQ",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_READ_RESP",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_REQ",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.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]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_RESP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_READ_BY_INDEX_DONE",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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=[];var h=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_REGISTER",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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]);var f=function(e,t){return p.call(this,e),this.messageType="MSG_SETTINGS_REGISTER_RESP",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.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,r){var p=r(2),o=r(13).Parser,i=function(e){return p.call(this,e),this.messageType="SBPSignal",this.fields=this.parser.parse(e.payload),this};(i.prototype=Object.create(p.prototype)).constructor=i,i.prototype.parser=(new o).endianess("little").uint16("sat").uint8("band").uint8("constellation"),i.prototype.fieldSpec=[],i.prototype.fieldSpec.push(["sat","writeUInt16LE",2]),i.prototype.fieldSpec.push(["band","writeUInt8",1]),i.prototype.fieldSpec.push(["constellation","writeUInt8",1]),e.exports={SBPSignal:i}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=(r(0).GnssSignalDep,r(0).GPSTime,r(0).CarrierPhase,r(0).GPSTime,r(0).GPSTimeSec),n=(r(0).GPSTimeDep,r(0).SvId),a=function(e,t){return p.call(this,e),this.messageType="CodeBiasesContent",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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]);var l=function(e,t){return p.call(this,e),this.messageType="PhaseBiasesContent",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.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]);var c=function(e,t){return p.call(this,e),this.messageType="STECHeader",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.prototype)).messageType="STECHeader",c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint8("tile_set_id").uint8("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","writeUInt8",1]),c.prototype.fieldSpec.push(["tile_id","writeUInt8",1]),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]);var u=function(e,t){return p.call(this,e),this.messageType="GriddedCorrectionHeader",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.prototype)).messageType="GriddedCorrectionHeader",u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint8("tile_set_id").uint8("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","writeUInt8",1]),u.prototype.fieldSpec.push(["tile_id","writeUInt8",1]),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]);var y=function(e,t){return p.call(this,e),this.messageType="STECSatElement",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.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]);var h=function(e,t){return p.call(this,e),this.messageType="TroposphericDelayCorrectionNoStd",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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]);var f=function(e,t){return p.call(this,e),this.messageType="TroposphericDelayCorrection",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.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]);var d=function(e,t){return p.call(this,e),this.messageType="STECResidualNoStd",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(p.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]);var _=function(e,t){return p.call(this,e),this.messageType="STECResidual",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(p.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]);var S=function(e,t){return p.call(this,e),this.messageType="GridElementNoStd",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(p.prototype)).messageType="GridElementNoStd",S.prototype.constructor=S,S.prototype.parser=(new o).endianess("little").uint16("index").nest("tropo_delay_correction",{type:h.prototype.parser}).array("stec_residuals",{type:d.prototype.parser,readUntil:"eof"}),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["index","writeUInt16LE",2]),S.prototype.fieldSpec.push(["tropo_delay_correction",h.prototype.fieldSpec]),S.prototype.fieldSpec.push(["stec_residuals","array",d.prototype.fieldSpec,function(){return this.fields.array.length},null]);var g=function(e,t){return p.call(this,e),this.messageType="GridElement",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(p.prototype)).messageType="GridElement",g.prototype.constructor=g,g.prototype.parser=(new o).endianess("little").uint16("index").nest("tropo_delay_correction",{type:f.prototype.parser}).array("stec_residuals",{type:_.prototype.parser,readUntil:"eof"}),g.prototype.fieldSpec=[],g.prototype.fieldSpec.push(["index","writeUInt16LE",2]),g.prototype.fieldSpec.push(["tropo_delay_correction",f.prototype.fieldSpec]),g.prototype.fieldSpec.push(["stec_residuals","array",_.prototype.fieldSpec,function(){return this.fields.array.length},null]);var w=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(p.prototype)).messageType="MSG_SSR_ORBIT_CLOCK",w.prototype.msg_type=1501,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").uint32("iod").int32("radial").int32("along").int32("cross").int32("dot_radial").int32("dot_along").int32("dot_cross").int32("c0").int32("c1").int32("c2"),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(["iod","writeUInt32LE",4]),w.prototype.fieldSpec.push(["radial","writeInt32LE",4]),w.prototype.fieldSpec.push(["along","writeInt32LE",4]),w.prototype.fieldSpec.push(["cross","writeInt32LE",4]),w.prototype.fieldSpec.push(["dot_radial","writeInt32LE",4]),w.prototype.fieldSpec.push(["dot_along","writeInt32LE",4]),w.prototype.fieldSpec.push(["dot_cross","writeInt32LE",4]),w.prototype.fieldSpec.push(["c0","writeInt32LE",4]),w.prototype.fieldSpec.push(["c1","writeInt32LE",4]),w.prototype.fieldSpec.push(["c2","writeInt32LE",4]);var E=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_CODE_BIASES",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(p.prototype)).messageType="MSG_SSR_CODE_BIASES",E.prototype.msg_type=1505,E.prototype.constructor=E,E.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"}),E.prototype.fieldSpec=[],E.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),E.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),E.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),E.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),E.prototype.fieldSpec.push(["biases","array",a.prototype.fieldSpec,function(){return this.fields.array.length},null]);var m=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_PHASE_BIASES",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(p.prototype)).messageType="MSG_SSR_PHASE_BIASES",m.prototype.msg_type=1510,m.prototype.constructor=m,m.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"}),m.prototype.fieldSpec=[],m.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),m.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),m.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),m.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),m.prototype.fieldSpec.push(["dispersive_bias","writeUInt8",1]),m.prototype.fieldSpec.push(["mw_consistency","writeUInt8",1]),m.prototype.fieldSpec.push(["yaw","writeUInt16LE",2]),m.prototype.fieldSpec.push(["yaw_rate","writeInt8",1]),m.prototype.fieldSpec.push(["biases","array",l.prototype.fieldSpec,function(){return this.fields.array.length},null]);var b=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_STEC_CORRECTION",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(p.prototype)).messageType="MSG_SSR_STEC_CORRECTION",b.prototype.msg_type=1531,b.prototype.constructor=b,b.prototype.parser=(new o).endianess("little").nest("header",{type:c.prototype.parser}).array("stec_sat_list",{type:y.prototype.parser,readUntil:"eof"}),b.prototype.fieldSpec=[],b.prototype.fieldSpec.push(["header",c.prototype.fieldSpec]),b.prototype.fieldSpec.push(["stec_sat_list","array",y.prototype.fieldSpec,function(){return this.fields.array.length},null]);var v=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(p.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION",v.prototype.msg_type=1532,v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").nest("header",{type:u.prototype.parser}).nest("element",{type:g.prototype.parser}),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["header",u.prototype.fieldSpec]),v.prototype.fieldSpec.push(["element",g.prototype.fieldSpec]);var L=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_TILE_DEFINITION",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(p.prototype)).messageType="MSG_SSR_TILE_DEFINITION",L.prototype.msg_type=1526,L.prototype.constructor=L,L.prototype.parser=(new o).endianess("little").uint8("tile_set_id").uint8("tile_id").uint16("corner_nw_lat").uint16("corner_nw_lon").uint16("spacing_lat").uint16("spacing_lon").uint16("rows").uint16("cols").uint64("bitmask"),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["tile_set_id","writeUInt8",1]),L.prototype.fieldSpec.push(["tile_id","writeUInt8",1]),L.prototype.fieldSpec.push(["corner_nw_lat","writeUInt16LE",2]),L.prototype.fieldSpec.push(["corner_nw_lon","writeUInt16LE",2]),L.prototype.fieldSpec.push(["spacing_lat","writeUInt16LE",2]),L.prototype.fieldSpec.push(["spacing_lon","writeUInt16LE",2]),L.prototype.fieldSpec.push(["rows","writeUInt16LE",2]),L.prototype.fieldSpec.push(["cols","writeUInt16LE",2]),L.prototype.fieldSpec.push(["bitmask","writeUInt64LE",8]);var I=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_ORBIT_CLOCK_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(I.prototype=Object.create(p.prototype)).messageType="MSG_SSR_ORBIT_CLOCK_DEP_A",I.prototype.msg_type=1500,I.prototype.constructor=I,I.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"),I.prototype.fieldSpec=[],I.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),I.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),I.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),I.prototype.fieldSpec.push(["iod_ssr","writeUInt8",1]),I.prototype.fieldSpec.push(["iod","writeUInt8",1]),I.prototype.fieldSpec.push(["radial","writeInt32LE",4]),I.prototype.fieldSpec.push(["along","writeInt32LE",4]),I.prototype.fieldSpec.push(["cross","writeInt32LE",4]),I.prototype.fieldSpec.push(["dot_radial","writeInt32LE",4]),I.prototype.fieldSpec.push(["dot_along","writeInt32LE",4]),I.prototype.fieldSpec.push(["dot_cross","writeInt32LE",4]),I.prototype.fieldSpec.push(["c0","writeInt32LE",4]),I.prototype.fieldSpec.push(["c1","writeInt32LE",4]),I.prototype.fieldSpec.push(["c2","writeInt32LE",4]);var T=function(e,t){return p.call(this,e),this.messageType="STECHeaderDepA",this.fields=t||this.parser.parse(e.payload),this};(T.prototype=Object.create(p.prototype)).messageType="STECHeaderDepA",T.prototype.constructor=T,T.prototype.parser=(new o).endianess("little").nest("time",{type:s.prototype.parser}).uint8("num_msgs").uint8("seq_num").uint8("update_interval").uint8("iod_atmo"),T.prototype.fieldSpec=[],T.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),T.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),T.prototype.fieldSpec.push(["seq_num","writeUInt8",1]),T.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),T.prototype.fieldSpec.push(["iod_atmo","writeUInt8",1]);var M=function(e,t){return p.call(this,e),this.messageType="GriddedCorrectionHeaderDepA",this.fields=t||this.parser.parse(e.payload),this};(M.prototype=Object.create(p.prototype)).messageType="GriddedCorrectionHeaderDepA",M.prototype.constructor=M,M.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"),M.prototype.fieldSpec=[],M.prototype.fieldSpec.push(["time",s.prototype.fieldSpec]),M.prototype.fieldSpec.push(["num_msgs","writeUInt16LE",2]),M.prototype.fieldSpec.push(["seq_num","writeUInt16LE",2]),M.prototype.fieldSpec.push(["update_interval","writeUInt8",1]),M.prototype.fieldSpec.push(["iod_atmo","writeUInt8",1]),M.prototype.fieldSpec.push(["tropo_quality_indicator","writeUInt8",1]);var U=function(e,t){return p.call(this,e),this.messageType="GridDefinitionHeaderDepA",this.fields=t||this.parser.parse(e.payload),this};(U.prototype=Object.create(p.prototype)).messageType="GridDefinitionHeaderDepA",U.prototype.constructor=U,U.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"),U.prototype.fieldSpec=[],U.prototype.fieldSpec.push(["region_size_inverse","writeUInt8",1]),U.prototype.fieldSpec.push(["area_width","writeUInt16LE",2]),U.prototype.fieldSpec.push(["lat_nw_corner_enc","writeUInt16LE",2]),U.prototype.fieldSpec.push(["lon_nw_corner_enc","writeUInt16LE",2]),U.prototype.fieldSpec.push(["num_msgs","writeUInt8",1]),U.prototype.fieldSpec.push(["seq_num","writeUInt8",1]);var D=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_STEC_CORRECTION_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(D.prototype=Object.create(p.prototype)).messageType="MSG_SSR_STEC_CORRECTION_DEP_A",D.prototype.msg_type=1515,D.prototype.constructor=D,D.prototype.parser=(new o).endianess("little").nest("header",{type:T.prototype.parser}).array("stec_sat_list",{type:y.prototype.parser,readUntil:"eof"}),D.prototype.fieldSpec=[],D.prototype.fieldSpec.push(["header",T.prototype.fieldSpec]),D.prototype.fieldSpec.push(["stec_sat_list","array",y.prototype.fieldSpec,function(){return this.fields.array.length},null]);var O=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(O.prototype=Object.create(p.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A",O.prototype.msg_type=1520,O.prototype.constructor=O,O.prototype.parser=(new o).endianess("little").nest("header",{type:M.prototype.parser}).nest("element",{type:S.prototype.parser}),O.prototype.fieldSpec=[],O.prototype.fieldSpec.push(["header",M.prototype.fieldSpec]),O.prototype.fieldSpec.push(["element",S.prototype.fieldSpec]);var G=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_GRIDDED_CORRECTION_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(G.prototype=Object.create(p.prototype)).messageType="MSG_SSR_GRIDDED_CORRECTION_DEP_A",G.prototype.msg_type=1530,G.prototype.constructor=G,G.prototype.parser=(new o).endianess("little").nest("header",{type:M.prototype.parser}).nest("element",{type:g.prototype.parser}),G.prototype.fieldSpec=[],G.prototype.fieldSpec.push(["header",M.prototype.fieldSpec]),G.prototype.fieldSpec.push(["element",g.prototype.fieldSpec]);var A=function(e,t){return p.call(this,e),this.messageType="MSG_SSR_GRID_DEFINITION_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(A.prototype=Object.create(p.prototype)).messageType="MSG_SSR_GRID_DEFINITION_DEP_A",A.prototype.msg_type=1525,A.prototype.constructor=A,A.prototype.parser=(new o).endianess("little").nest("header",{type:U.prototype.parser}).array("rle_list",{type:"uint8",readUntil:"eof"}),A.prototype.fieldSpec=[],A.prototype.fieldSpec.push(["header",U.prototype.fieldSpec]),A.prototype.fieldSpec.push(["rle_list","array","writeUInt8",function(){return 1},null]),e.exports={CodeBiasesContent:a,PhaseBiasesContent:l,STECHeader:c,GriddedCorrectionHeader:u,STECSatElement:y,TroposphericDelayCorrectionNoStd:h,TroposphericDelayCorrection:f,STECResidualNoStd:d,STECResidual:_,GridElementNoStd:S,GridElement:g,1501:w,MsgSsrOrbitClock:w,1505:E,MsgSsrCodeBiases:E,1510:m,MsgSsrPhaseBiases:m,1531:b,MsgSsrStecCorrection:b,1532:v,MsgSsrGriddedCorrection:v,1526:L,MsgSsrTileDefinition:L,1500:I,MsgSsrOrbitClockDepA:I,STECHeaderDepA:T,GriddedCorrectionHeaderDepA:M,GridDefinitionHeaderDepA:U,1515:D,MsgSsrStecCorrectionDepA:D,1520:O,MsgSsrGriddedCorrectionNoStdDepA:O,1530:G,MsgSsrGriddedCorrectionDepA:G,1525:A,MsgSsrGridDefinitionDepA:A}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_STARTUP",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_DGNSS_STATUS",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_HEARTBEAT",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_INS_STATUS",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.prototype)).messageType="MSG_INS_STATUS",a.prototype.msg_type=65283,a.prototype.constructor=a,a.prototype.parser=(new o).endianess("little").uint32("flags"),a.prototype.fieldSpec=[],a.prototype.fieldSpec.push(["flags","writeUInt32LE",4]);var l=function(e,t){return p.call(this,e),this.messageType="MSG_CSAC_TELEMETRY",this.fields=t||this.parser.parse(e.payload),this};(l.prototype=Object.create(p.prototype)).messageType="MSG_CSAC_TELEMETRY",l.prototype.msg_type=65284,l.prototype.constructor=l,l.prototype.parser=(new o).endianess("little").uint8("id").string("telemetry",{greedy:!0}),l.prototype.fieldSpec=[],l.prototype.fieldSpec.push(["id","writeUInt8",1]),l.prototype.fieldSpec.push(["telemetry","string",null]);var c=function(e,t){return p.call(this,e),this.messageType="MSG_CSAC_TELEMETRY_LABELS",this.fields=t||this.parser.parse(e.payload),this};(c.prototype=Object.create(p.prototype)).messageType="MSG_CSAC_TELEMETRY_LABELS",c.prototype.msg_type=65285,c.prototype.constructor=c,c.prototype.parser=(new o).endianess("little").uint8("id").string("telemetry_labels",{greedy:!0}),c.prototype.fieldSpec=[],c.prototype.fieldSpec.push(["id","writeUInt8",1]),c.prototype.fieldSpec.push(["telemetry_labels","string",null]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_INS_UPDATES",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.prototype)).messageType="MSG_INS_UPDATES",u.prototype.msg_type=65286,u.prototype.constructor=u,u.prototype.parser=(new o).endianess("little").uint32("tow").uint8("gnsspos").uint8("gnssvel").uint8("wheelticks").uint8("speed").uint8("nhc").uint8("zerovel"),u.prototype.fieldSpec=[],u.prototype.fieldSpec.push(["tow","writeUInt32LE",4]),u.prototype.fieldSpec.push(["gnsspos","writeUInt8",1]),u.prototype.fieldSpec.push(["gnssvel","writeUInt8",1]),u.prototype.fieldSpec.push(["wheelticks","writeUInt8",1]),u.prototype.fieldSpec.push(["speed","writeUInt8",1]),u.prototype.fieldSpec.push(["nhc","writeUInt8",1]),u.prototype.fieldSpec.push(["zerovel","writeUInt8",1]);var y=function(e,t){return p.call(this,e),this.messageType="MSG_GNSS_TIME_OFFSET",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.prototype)).messageType="MSG_GNSS_TIME_OFFSET",y.prototype.msg_type=65287,y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").int16("weeks").int32("milliseconds").int16("microseconds").uint8("flags"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["weeks","writeInt16LE",2]),y.prototype.fieldSpec.push(["milliseconds","writeInt32LE",4]),y.prototype.fieldSpec.push(["microseconds","writeInt16LE",2]),y.prototype.fieldSpec.push(["flags","writeUInt8",1]);var h=function(e,t){return p.call(this,e),this.messageType="MSG_GROUP_META",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.prototype)).messageType="MSG_GROUP_META",h.prototype.msg_type=65290,h.prototype.constructor=h,h.prototype.parser=(new o).endianess("little").uint16("wn").uint32("tom").int32("ns_residual").uint8("flags").array("group_msgs",{type:"uint16le",readUntil:"eof"}),h.prototype.fieldSpec=[],h.prototype.fieldSpec.push(["wn","writeUInt16LE",2]),h.prototype.fieldSpec.push(["tom","writeUInt32LE",4]),h.prototype.fieldSpec.push(["ns_residual","writeInt32LE",4]),h.prototype.fieldSpec.push(["flags","writeUInt8",1]),h.prototype.fieldSpec.push(["group_msgs","array","writeUInt16LE",function(){return 2},null]),e.exports={65280:i,MsgStartup:i,65282:s,MsgDgnssStatus:s,65535:n,MsgHeartbeat:n,65283:a,MsgInsStatus:a,65284:l,MsgCsacTelemetry:l,65285:c,MsgCsacTelemetryLabels:c,65286:u,MsgInsUpdates:u,65287:y,MsgGnssTimeOffset:y,65290:h,MsgGroupMeta:h}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,r(0).GnssSignal),s=r(0).GnssSignalDep,n=r(0).GPSTime,a=r(0).CarrierPhase,l=(n=r(0).GPSTime,r(0).GPSTimeSec,r(0).GPSTimeDep),c=(r(0).SvId,function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_STATE_DETAILED_DEP_A",this.fields=t||this.parser.parse(e.payload),this});(c.prototype=Object.create(p.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:n.prototype.parser}).uint32("P").uint16("P_std").nest("L",{type:a.prototype.parser}).uint8("cn0").uint16("lock").nest("sid",{type:i.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",n.prototype.fieldSpec]),c.prototype.fieldSpec.push(["P","writeUInt32LE",4]),c.prototype.fieldSpec.push(["P_std","writeUInt16LE",2]),c.prototype.fieldSpec.push(["L",a.prototype.fieldSpec]),c.prototype.fieldSpec.push(["cn0","writeUInt8",1]),c.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),c.prototype.fieldSpec.push(["sid",i.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]);var u=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_STATE_DETAILED_DEP",this.fields=t||this.parser.parse(e.payload),this};(u.prototype=Object.create(p.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:a.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"),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",a.prototype.fieldSpec]),u.prototype.fieldSpec.push(["cn0","writeUInt8",1]),u.prototype.fieldSpec.push(["lock","writeUInt16LE",2]),u.prototype.fieldSpec.push(["sid",s.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]);var y=function(e,t){return p.call(this,e),this.messageType="TrackingChannelState",this.fields=t||this.parser.parse(e.payload),this};(y.prototype=Object.create(p.prototype)).messageType="TrackingChannelState",y.prototype.constructor=y,y.prototype.parser=(new o).endianess("little").nest("sid",{type:i.prototype.parser}).uint8("fcn").uint8("cn0"),y.prototype.fieldSpec=[],y.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),y.prototype.fieldSpec.push(["fcn","writeUInt8",1]),y.prototype.fieldSpec.push(["cn0","writeUInt8",1]);var h=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_STATE",this.fields=t||this.parser.parse(e.payload),this};(h.prototype=Object.create(p.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]);var f=function(e,t){return p.call(this,e),this.messageType="MeasurementState",this.fields=t||this.parser.parse(e.payload),this};(f.prototype=Object.create(p.prototype)).messageType="MeasurementState",f.prototype.constructor=f,f.prototype.parser=(new o).endianess("little").nest("mesid",{type:i.prototype.parser}).uint8("cn0"),f.prototype.fieldSpec=[],f.prototype.fieldSpec.push(["mesid",i.prototype.fieldSpec]),f.prototype.fieldSpec.push(["cn0","writeUInt8",1]);var d=function(e,t){return p.call(this,e),this.messageType="MSG_MEASUREMENT_STATE",this.fields=t||this.parser.parse(e.payload),this};(d.prototype=Object.create(p.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]);var _=function(e,t){return p.call(this,e),this.messageType="TrackingChannelCorrelation",this.fields=t||this.parser.parse(e.payload),this};(_.prototype=Object.create(p.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]);var S=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_IQ",this.fields=t||this.parser.parse(e.payload),this};(S.prototype=Object.create(p.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:i.prototype.parser}).array("corrs",{length:3,type:_.prototype.parser}),S.prototype.fieldSpec=[],S.prototype.fieldSpec.push(["channel","writeUInt8",1]),S.prototype.fieldSpec.push(["sid",i.prototype.fieldSpec]),S.prototype.fieldSpec.push(["corrs","array",_.prototype.fieldSpec,function(){return this.fields.array.length},3]);var g=function(e,t){return p.call(this,e),this.messageType="TrackingChannelCorrelationDep",this.fields=t||this.parser.parse(e.payload),this};(g.prototype=Object.create(p.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]);var w=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_IQ_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(w.prototype=Object.create(p.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:i.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",i.prototype.fieldSpec]),w.prototype.fieldSpec.push(["corrs","array",g.prototype.fieldSpec,function(){return this.fields.array.length},3]);var E=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_IQ_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(E.prototype=Object.create(p.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:s.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",s.prototype.fieldSpec]),E.prototype.fieldSpec.push(["corrs","array",g.prototype.fieldSpec,function(){return this.fields.array.length},3]);var m=function(e,t){return p.call(this,e),this.messageType="TrackingChannelStateDepA",this.fields=t||this.parser.parse(e.payload),this};(m.prototype=Object.create(p.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]);var b=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_STATE_DEP_A",this.fields=t||this.parser.parse(e.payload),this};(b.prototype=Object.create(p.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]);var v=function(e,t){return p.call(this,e),this.messageType="TrackingChannelStateDepB",this.fields=t||this.parser.parse(e.payload),this};(v.prototype=Object.create(p.prototype)).messageType="TrackingChannelStateDepB",v.prototype.constructor=v,v.prototype.parser=(new o).endianess("little").uint8("state").nest("sid",{type:s.prototype.parser}).floatle("cn0"),v.prototype.fieldSpec=[],v.prototype.fieldSpec.push(["state","writeUInt8",1]),v.prototype.fieldSpec.push(["sid",s.prototype.fieldSpec]),v.prototype.fieldSpec.push(["cn0","writeFloatLE",4]);var L=function(e,t){return p.call(this,e),this.messageType="MSG_TRACKING_STATE_DEP_B",this.fields=t||this.parser.parse(e.payload),this};(L.prototype=Object.create(p.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:v.prototype.parser,readUntil:"eof"}),L.prototype.fieldSpec=[],L.prototype.fieldSpec.push(["states","array",v.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:v,19:L,MsgTrackingStateDepB:L}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_USER_DATA",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_ODOMETRY",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_WHEELTICK",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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}},function(e,t,r){var p=r(2),o=r(4),i=(r(3),r(1).UINT64,function(e,t){return p.call(this,e),this.messageType="MSG_BASELINE_HEADING",this.fields=t||this.parser.parse(e.payload),this});(i.prototype=Object.create(p.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]);var s=function(e,t){return p.call(this,e),this.messageType="MSG_ORIENT_QUAT",this.fields=t||this.parser.parse(e.payload),this};(s.prototype=Object.create(p.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]);var n=function(e,t){return p.call(this,e),this.messageType="MSG_ORIENT_EULER",this.fields=t||this.parser.parse(e.payload),this};(n.prototype=Object.create(p.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]);var a=function(e,t){return p.call(this,e),this.messageType="MSG_ANGULAR_RATE",this.fields=t||this.parser.parse(e.payload),this};(a.prototype=Object.create(p.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}}]); \ No newline at end of file diff --git a/javascript/sbp/observation.js b/javascript/sbp/observation.js index 34972c9a30..a951e4b12b 100644 --- a/javascript/sbp/observation.js +++ b/javascript/sbp/observation.js @@ -839,8 +839,10 @@ MsgEphemerisQzss.prototype.fieldSpec.push(['iodc', 'writeUInt16LE', 2]); * @field af1 number (float, 4 bytes) Polynomial clock correction coefficient (clock drift) * @field af2 number (float, 4 bytes) Polynomial clock correction coefficient (rate of clock drift) * @field toc GPSTimeSec Clock reference - * @field iode number (unsigned 8-bit int, 1 byte) Issue of ephemeris data - * @field iodc number (unsigned 16-bit int, 2 bytes) Issue of clock data + * @field iode number (unsigned 8-bit int, 1 byte) Issue of ephemeris data Calculated from the navigation data parameter t_oe per + * RTCM/CSNO recommendation: IODE = mod (t_oe / 720, 240) + * @field iodc number (unsigned 16-bit int, 2 bytes) Issue of clock data Calculated from the navigation data parameter t_oe per + * RTCM/CSNO recommendation: IODE = mod (t_oc / 720, 240) * * @param sbp An SBP object with a payload to be decoded. */ @@ -936,8 +938,8 @@ MsgEphemerisBds.prototype.fieldSpec.push(['iodc', 'writeUInt16LE', 2]); * @field af1 number (float, 8 bytes) Polynomial clock correction coefficient (clock drift) * @field af2 number (float, 4 bytes) Polynomial clock correction coefficient (rate of clock drift) * @field toc GPSTimeSec Clock reference - * @field iode number (unsigned 16-bit int, 2 bytes) Issue of ephemeris data - * @field iodc number (unsigned 16-bit int, 2 bytes) Issue of clock data + * @field iode number (unsigned 16-bit int, 2 bytes) Issue of data (IODnav) + * @field iodc number (unsigned 16-bit int, 2 bytes) Issue of data (IODnav). Always equal to iode * * @param sbp An SBP object with a payload to be decoded. */ @@ -1034,9 +1036,9 @@ MsgEphemerisGalDepA.prototype.fieldSpec.push(['iodc', 'writeUInt16LE', 2]); * @field af1 number (float, 8 bytes) Polynomial clock correction coefficient (clock drift) * @field af2 number (float, 4 bytes) Polynomial clock correction coefficient (rate of clock drift) * @field toc GPSTimeSec Clock reference - * @field iode number (unsigned 16-bit int, 2 bytes) Issue of ephemeris data - * @field iodc number (unsigned 16-bit int, 2 bytes) Issue of clock data - * @field source number (unsigned 8-bit int, 1 byte) 0=I/NAV, 1=F/NAV, ... + * @field iode number (unsigned 16-bit int, 2 bytes) Issue of data (IODnav) + * @field iodc number (unsigned 16-bit int, 2 bytes) Issue of data (IODnav). Always equal to iode + * @field source number (unsigned 8-bit int, 1 byte) 0=I/NAV, 1=F/NAV * * @param sbp An SBP object with a payload to be decoded. */ @@ -1386,7 +1388,7 @@ MsgEphemerisGloDepC.prototype.fieldSpec.push(['fcn', 'writeUInt8', 1]); * @field vel array Velocity vector of the SV at tb in PZ-90.02 coordinates system * @field acc array Acceleration vector of the SV at tb in PZ-90.02 coordinates sys * @field fcn number (unsigned 8-bit int, 1 byte) Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid - * @field iod number (unsigned 8-bit int, 1 byte) Issue of ephemeris data + * @field iod number (unsigned 8-bit int, 1 byte) Issue of data. Equal to the 7 bits of the immediate data word t_b * * @param sbp An SBP object with a payload to be decoded. */ @@ -1440,7 +1442,7 @@ MsgEphemerisGloDepD.prototype.fieldSpec.push(['iod', 'writeUInt8', 1]); * @field vel array Velocity vector of the SV at tb in PZ-90.02 coordinates system * @field acc array Acceleration vector of the SV at tb in PZ-90.02 coordinates sys * @field fcn number (unsigned 8-bit int, 1 byte) Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid - * @field iod number (unsigned 8-bit int, 1 byte) Issue of ephemeris data + * @field iod number (unsigned 8-bit int, 1 byte) Issue of data. Equal to the 7 bits of the immediate data word t_b * * @param sbp An SBP object with a payload to be decoded. */ diff --git a/javascript/sbp/ssr.js b/javascript/sbp/ssr.js index ab29a69f3c..c407ae1632 100644 --- a/javascript/sbp/ssr.js +++ b/javascript/sbp/ssr.js @@ -108,6 +108,8 @@ PhaseBiasesContent.prototype.fieldSpec.push(['bias', 'writeInt32LE', 4]); * into a sequence. * * Fields in the SBP payload (`sbp.payload`): + * @field tile_set_id number (unsigned 8-bit int, 1 byte) Unique identifier of the tile set this tile belongs to. + * @field tile_id number (unsigned 8-bit int, 1 byte) Unique identifier of this tile in the tile set. * @field time GPSTimeSec GNSS reference time of the correction * @field num_msgs number (unsigned 8-bit int, 1 byte) Number of messages in the dataset * @field seq_num number (unsigned 8-bit int, 1 byte) Position of this message in the dataset @@ -129,12 +131,16 @@ STECHeader.prototype.messageType = "STECHeader"; STECHeader.prototype.constructor = STECHeader; STECHeader.prototype.parser = new Parser() .endianess('little') + .uint8('tile_set_id') + .uint8('tile_id') .nest('time', { type: GPSTimeSec.prototype.parser }) .uint8('num_msgs') .uint8('seq_num') .uint8('update_interval') .uint8('iod_atmo'); STECHeader.prototype.fieldSpec = []; +STECHeader.prototype.fieldSpec.push(['tile_set_id', 'writeUInt8', 1]); +STECHeader.prototype.fieldSpec.push(['tile_id', 'writeUInt8', 1]); STECHeader.prototype.fieldSpec.push(['time', GPSTimeSec.prototype.fieldSpec]); STECHeader.prototype.fieldSpec.push(['num_msgs', 'writeUInt8', 1]); STECHeader.prototype.fieldSpec.push(['seq_num', 'writeUInt8', 1]); @@ -144,10 +150,12 @@ STECHeader.prototype.fieldSpec.push(['iod_atmo', 'writeUInt8', 1]); /** * SBP class for message fragment GriddedCorrectionHeader * - * The 3GPP message contains nested variable length arrays which are not suppported + * The LPP message contains nested variable length arrays which are not suppported * in SBP, so each grid point will be identified by the index. * * Fields in the SBP payload (`sbp.payload`): + * @field tile_set_id number (unsigned 8-bit int, 1 byte) Unique identifier of the tile set this tile belongs to. + * @field tile_id number (unsigned 8-bit int, 1 byte) Unique identifier of this tile in the tile set. * @field time GPSTimeSec GNSS reference time of the correction * @field num_msgs number (unsigned 16-bit int, 2 bytes) Number of messages in the dataset * @field seq_num number (unsigned 16-bit int, 2 bytes) Position of this message in the dataset @@ -171,6 +179,8 @@ GriddedCorrectionHeader.prototype.messageType = "GriddedCorrectionHeader"; GriddedCorrectionHeader.prototype.constructor = GriddedCorrectionHeader; GriddedCorrectionHeader.prototype.parser = new Parser() .endianess('little') + .uint8('tile_set_id') + .uint8('tile_id') .nest('time', { type: GPSTimeSec.prototype.parser }) .uint16('num_msgs') .uint16('seq_num') @@ -178,6 +188,8 @@ GriddedCorrectionHeader.prototype.parser = new Parser() .uint8('iod_atmo') .uint8('tropo_quality_indicator'); GriddedCorrectionHeader.prototype.fieldSpec = []; +GriddedCorrectionHeader.prototype.fieldSpec.push(['tile_set_id', 'writeUInt8', 1]); +GriddedCorrectionHeader.prototype.fieldSpec.push(['tile_id', 'writeUInt8', 1]); GriddedCorrectionHeader.prototype.fieldSpec.push(['time', GPSTimeSec.prototype.fieldSpec]); GriddedCorrectionHeader.prototype.fieldSpec.push(['num_msgs', 'writeUInt16LE', 2]); GriddedCorrectionHeader.prototype.fieldSpec.push(['seq_num', 'writeUInt16LE', 2]); @@ -407,49 +419,6 @@ GridElement.prototype.fieldSpec.push(['index', 'writeUInt16LE', 2]); GridElement.prototype.fieldSpec.push(['tropo_delay_correction', TroposphericDelayCorrection.prototype.fieldSpec]); GridElement.prototype.fieldSpec.push(['stec_residuals', 'array', STECResidual.prototype.fieldSpec, function () { return this.fields.array.length; }, null]); -/** - * SBP class for message fragment GridDefinitionHeader - * - * Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. Also includes an RLE - * encoded validity list. - * - * Fields in the SBP payload (`sbp.payload`): - * @field region_size_inverse number (unsigned 8-bit int, 1 byte) region_size (deg) = 10 / region_size_inverse 0 is an invalid value. - * @field area_width number (unsigned 16-bit int, 2 bytes) grid height (deg) = grid idth (deg) = area_width / region_size 0 is an invalid - * value. - * @field lat_nw_corner_enc number (unsigned 16-bit int, 2 bytes) North-West corner latitdue (deg) = region_size * lat_nw_corner_enc - 90 - * @field lon_nw_corner_enc number (unsigned 16-bit int, 2 bytes) North-West corner longtitude (deg) = region_size * lon_nw_corner_enc - 180 - * @field num_msgs number (unsigned 8-bit int, 1 byte) Number of messages in the dataset - * @field seq_num number (unsigned 8-bit int, 1 byte) Postion of this message in the dataset - * - * @param sbp An SBP object with a payload to be decoded. - */ -var GridDefinitionHeader = function (sbp, fields) { - SBP.call(this, sbp); - this.messageType = "GridDefinitionHeader"; - this.fields = (fields || this.parser.parse(sbp.payload)); - - return this; -}; -GridDefinitionHeader.prototype = Object.create(SBP.prototype); -GridDefinitionHeader.prototype.messageType = "GridDefinitionHeader"; -GridDefinitionHeader.prototype.constructor = GridDefinitionHeader; -GridDefinitionHeader.prototype.parser = new Parser() - .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'); -GridDefinitionHeader.prototype.fieldSpec = []; -GridDefinitionHeader.prototype.fieldSpec.push(['region_size_inverse', 'writeUInt8', 1]); -GridDefinitionHeader.prototype.fieldSpec.push(['area_width', 'writeUInt16LE', 2]); -GridDefinitionHeader.prototype.fieldSpec.push(['lat_nw_corner_enc', 'writeUInt16LE', 2]); -GridDefinitionHeader.prototype.fieldSpec.push(['lon_nw_corner_enc', 'writeUInt16LE', 2]); -GridDefinitionHeader.prototype.fieldSpec.push(['num_msgs', 'writeUInt8', 1]); -GridDefinitionHeader.prototype.fieldSpec.push(['seq_num', 'writeUInt8', 1]); - /** * SBP class for message MSG_SSR_ORBIT_CLOCK (0x05DD). * @@ -520,76 +489,6 @@ MsgSsrOrbitClock.prototype.fieldSpec.push(['c0', 'writeInt32LE', 4]); MsgSsrOrbitClock.prototype.fieldSpec.push(['c1', 'writeInt32LE', 4]); MsgSsrOrbitClock.prototype.fieldSpec.push(['c2', 'writeInt32LE', 4]); -/** - * SBP class for message MSG_SSR_ORBIT_CLOCK_DEP_A (0x05DC). - * - * The precise orbit and clock correction message is to be applied as a delta - * correction to broadcast ephemeris and is typically an equivalent to the 1060 and - * 1066 RTCM message types - * - * Fields in the SBP payload (`sbp.payload`): - * @field time GPSTimeSec GNSS reference time of the correction - * @field sid GnssSignal GNSS signal identifier (16 bit) - * @field update_interval number (unsigned 8-bit int, 1 byte) Update interval between consecutive corrections. Encoded following RTCM DF391 - * specification. - * @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 iod number (unsigned 8-bit int, 1 byte) Issue of broadcast ephemeris data - * @field radial number (signed 32-bit int, 4 bytes) Orbit radial delta correction - * @field along number (signed 32-bit int, 4 bytes) Orbit along delta correction - * @field cross number (signed 32-bit int, 4 bytes) Orbit along delta correction - * @field dot_radial number (signed 32-bit int, 4 bytes) Velocity of orbit radial delta correction - * @field dot_along number (signed 32-bit int, 4 bytes) Velocity of orbit along delta correction - * @field dot_cross number (signed 32-bit int, 4 bytes) Velocity of orbit cross delta correction - * @field c0 number (signed 32-bit int, 4 bytes) C0 polynomial coefficient for correction of broadcast satellite clock - * @field c1 number (signed 32-bit int, 4 bytes) C1 polynomial coefficient for correction of broadcast satellite clock - * @field c2 number (signed 32-bit int, 4 bytes) C2 polynomial coefficient for correction of broadcast satellite clock - * - * @param sbp An SBP object with a payload to be decoded. - */ -var MsgSsrOrbitClockDepA = function (sbp, fields) { - SBP.call(this, sbp); - this.messageType = "MSG_SSR_ORBIT_CLOCK_DEP_A"; - this.fields = (fields || this.parser.parse(sbp.payload)); - - return this; -}; -MsgSsrOrbitClockDepA.prototype = Object.create(SBP.prototype); -MsgSsrOrbitClockDepA.prototype.messageType = "MSG_SSR_ORBIT_CLOCK_DEP_A"; -MsgSsrOrbitClockDepA.prototype.msg_type = 0x05DC; -MsgSsrOrbitClockDepA.prototype.constructor = MsgSsrOrbitClockDepA; -MsgSsrOrbitClockDepA.prototype.parser = new Parser() - .endianess('little') - .nest('time', { type: GPSTimeSec.prototype.parser }) - .nest('sid', { type: GnssSignal.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'); -MsgSsrOrbitClockDepA.prototype.fieldSpec = []; -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['time', GPSTimeSec.prototype.fieldSpec]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['sid', GnssSignal.prototype.fieldSpec]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['update_interval', 'writeUInt8', 1]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['iod_ssr', 'writeUInt8', 1]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['iod', 'writeUInt8', 1]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['radial', 'writeInt32LE', 4]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['along', 'writeInt32LE', 4]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['cross', 'writeInt32LE', 4]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['dot_radial', 'writeInt32LE', 4]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['dot_along', 'writeInt32LE', 4]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['dot_cross', 'writeInt32LE', 4]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['c0', 'writeInt32LE', 4]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['c1', 'writeInt32LE', 4]); -MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['c2', 'writeInt32LE', 4]); - /** * SBP class for message MSG_SSR_CODE_BIASES (0x05E1). * @@ -690,16 +589,17 @@ MsgSsrPhaseBiases.prototype.fieldSpec.push(['yaw_rate', 'writeInt8', 1]); MsgSsrPhaseBiases.prototype.fieldSpec.push(['biases', 'array', PhaseBiasesContent.prototype.fieldSpec, function () { return this.fields.array.length; }, null]); /** - * SBP class for message MSG_SSR_STEC_CORRECTION (0x05EB). + * SBP class for message MSG_SSR_STEC_CORRECTION (0x05FB). * - * The STEC per space vehicle, given as polynomial approximation for a given grid. - * This should be combined with MSG_SSR_GRIDDED_CORRECTION message to get the state - * space representation of the atmospheric delay. It is typically equivalent to the - * QZSS CLAS Sub Type 8 messages + * The Slant Total Electron Content per space vehicle, given as polynomial + * approximation for a given tile. This should be combined with the + * MSG_SSR_GRIDDED_CORRECTION message to get the state space representation of the + * atmospheric delay. It is typically equivalent to the QZSS CLAS Sub Type 8 + * messages. * * Fields in the SBP payload (`sbp.payload`): - * @field header STECHeader Header of a STEC message - * @field stec_sat_list array Array of STEC information for each space vehicle + * @field header STECHeader Header of a STEC polynomial coeffcient message. + * @field stec_sat_list array Array of STEC polynomial coeffcients for each space vehicle. * * @param sbp An SBP object with a payload to be decoded. */ @@ -712,7 +612,7 @@ var MsgSsrStecCorrection = function (sbp, fields) { }; MsgSsrStecCorrection.prototype = Object.create(SBP.prototype); MsgSsrStecCorrection.prototype.messageType = "MSG_SSR_STEC_CORRECTION"; -MsgSsrStecCorrection.prototype.msg_type = 0x05EB; +MsgSsrStecCorrection.prototype.msg_type = 0x05FB; MsgSsrStecCorrection.prototype.constructor = MsgSsrStecCorrection; MsgSsrStecCorrection.prototype.parser = new Parser() .endianess('little') @@ -723,74 +623,397 @@ MsgSsrStecCorrection.prototype.fieldSpec.push(['header', STECHeader.prototype.fi MsgSsrStecCorrection.prototype.fieldSpec.push(['stec_sat_list', 'array', STECSatElement.prototype.fieldSpec, function () { return this.fields.array.length; }, null]); /** - * SBP class for message MSG_SSR_GRIDDED_CORRECTION_NO_STD (0x05F0). + * SBP class for message MSG_SSR_GRIDDED_CORRECTION (0x05FC). * - * This message was deprecated when variances (stddev) were added. + * STEC residuals are per space vehicle, troposphere is not. It is typically + * equivalent to the QZSS CLAS Sub Type 9 messages * * Fields in the SBP payload (`sbp.payload`): - * @field header GriddedCorrectionHeader Header of a Gridded Correction message - * @field element GridElementNoStd Tropo and STEC residuals for the given grid point + * @field header GriddedCorrectionHeader Header of a gridded correction message + * @field element GridElement Tropo and STEC residuals for the given grid point. * * @param sbp An SBP object with a payload to be decoded. */ -var MsgSsrGriddedCorrectionNoStd = function (sbp, fields) { +var MsgSsrGriddedCorrection = function (sbp, fields) { SBP.call(this, sbp); - this.messageType = "MSG_SSR_GRIDDED_CORRECTION_NO_STD"; + this.messageType = "MSG_SSR_GRIDDED_CORRECTION"; this.fields = (fields || this.parser.parse(sbp.payload)); return this; }; -MsgSsrGriddedCorrectionNoStd.prototype = Object.create(SBP.prototype); -MsgSsrGriddedCorrectionNoStd.prototype.messageType = "MSG_SSR_GRIDDED_CORRECTION_NO_STD"; -MsgSsrGriddedCorrectionNoStd.prototype.msg_type = 0x05F0; -MsgSsrGriddedCorrectionNoStd.prototype.constructor = MsgSsrGriddedCorrectionNoStd; -MsgSsrGriddedCorrectionNoStd.prototype.parser = new Parser() +MsgSsrGriddedCorrection.prototype = Object.create(SBP.prototype); +MsgSsrGriddedCorrection.prototype.messageType = "MSG_SSR_GRIDDED_CORRECTION"; +MsgSsrGriddedCorrection.prototype.msg_type = 0x05FC; +MsgSsrGriddedCorrection.prototype.constructor = MsgSsrGriddedCorrection; +MsgSsrGriddedCorrection.prototype.parser = new Parser() .endianess('little') .nest('header', { type: GriddedCorrectionHeader.prototype.parser }) - .nest('element', { type: GridElementNoStd.prototype.parser }); -MsgSsrGriddedCorrectionNoStd.prototype.fieldSpec = []; -MsgSsrGriddedCorrectionNoStd.prototype.fieldSpec.push(['header', GriddedCorrectionHeader.prototype.fieldSpec]); -MsgSsrGriddedCorrectionNoStd.prototype.fieldSpec.push(['element', GridElementNoStd.prototype.fieldSpec]); + .nest('element', { type: GridElement.prototype.parser }); +MsgSsrGriddedCorrection.prototype.fieldSpec = []; +MsgSsrGriddedCorrection.prototype.fieldSpec.push(['header', GriddedCorrectionHeader.prototype.fieldSpec]); +MsgSsrGriddedCorrection.prototype.fieldSpec.push(['element', GridElement.prototype.fieldSpec]); + +/** + * SBP class for message MSG_SSR_TILE_DEFINITION (0x05F6). + * + * 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 tile_set_id number (unsigned 8-bit int, 1 byte) Unique identifier of the tile set this tile belongs to. + * @field tile_id number (unsigned 8-bit int, 1 byte) Unique identifier of this tile in the tile set. See GNSS-SSR- + * ArrayOfCorrectionPoints field correctionPointSetID. + * @field corner_nw_lat number (unsigned 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 (unsigned 16-bit int, 2 bytes) North-West corner correction point longtitude. The relation between the + * longtitude 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 longtitude direction. See GNSS-SSR- + * ArrayOfCorrectionPoints field stepOfLongtitude. + * @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 longtitude direction. See GNSS-SSR- + * ArrayOfCorrectionPoints field numberOfStepsLongtitude. + * @field bitmask number (unsigned 64-bit int, 8 bytes) 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. + * + * @param sbp An SBP object with a payload to be decoded. + */ +var MsgSsrTileDefinition = function (sbp, fields) { + SBP.call(this, sbp); + this.messageType = "MSG_SSR_TILE_DEFINITION"; + this.fields = (fields || this.parser.parse(sbp.payload)); + + return this; +}; +MsgSsrTileDefinition.prototype = Object.create(SBP.prototype); +MsgSsrTileDefinition.prototype.messageType = "MSG_SSR_TILE_DEFINITION"; +MsgSsrTileDefinition.prototype.msg_type = 0x05F6; +MsgSsrTileDefinition.prototype.constructor = MsgSsrTileDefinition; +MsgSsrTileDefinition.prototype.parser = new Parser() + .endianess('little') + .uint8('tile_set_id') + .uint8('tile_id') + .uint16('corner_nw_lat') + .uint16('corner_nw_lon') + .uint16('spacing_lat') + .uint16('spacing_lon') + .uint16('rows') + .uint16('cols') + .uint64('bitmask'); +MsgSsrTileDefinition.prototype.fieldSpec = []; +MsgSsrTileDefinition.prototype.fieldSpec.push(['tile_set_id', 'writeUInt8', 1]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['tile_id', 'writeUInt8', 1]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['corner_nw_lat', 'writeUInt16LE', 2]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['corner_nw_lon', 'writeUInt16LE', 2]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['spacing_lat', 'writeUInt16LE', 2]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['spacing_lon', 'writeUInt16LE', 2]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['rows', 'writeUInt16LE', 2]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['cols', 'writeUInt16LE', 2]); +MsgSsrTileDefinition.prototype.fieldSpec.push(['bitmask', 'writeUInt64LE', 8]); + +/** + * SBP class for message MSG_SSR_ORBIT_CLOCK_DEP_A (0x05DC). + * + + * Fields in the SBP payload (`sbp.payload`): + * @field time GPSTimeSec GNSS reference time of the correction + * @field sid GnssSignal GNSS signal identifier (16 bit) + * @field update_interval number (unsigned 8-bit int, 1 byte) Update interval between consecutive corrections. Encoded following RTCM DF391 + * specification. + * @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 iod number (unsigned 8-bit int, 1 byte) Issue of broadcast ephemeris data + * @field radial number (signed 32-bit int, 4 bytes) Orbit radial delta correction + * @field along number (signed 32-bit int, 4 bytes) Orbit along delta correction + * @field cross number (signed 32-bit int, 4 bytes) Orbit along delta correction + * @field dot_radial number (signed 32-bit int, 4 bytes) Velocity of orbit radial delta correction + * @field dot_along number (signed 32-bit int, 4 bytes) Velocity of orbit along delta correction + * @field dot_cross number (signed 32-bit int, 4 bytes) Velocity of orbit cross delta correction + * @field c0 number (signed 32-bit int, 4 bytes) C0 polynomial coefficient for correction of broadcast satellite clock + * @field c1 number (signed 32-bit int, 4 bytes) C1 polynomial coefficient for correction of broadcast satellite clock + * @field c2 number (signed 32-bit int, 4 bytes) C2 polynomial coefficient for correction of broadcast satellite clock + * + * @param sbp An SBP object with a payload to be decoded. + */ +var MsgSsrOrbitClockDepA = function (sbp, fields) { + SBP.call(this, sbp); + this.messageType = "MSG_SSR_ORBIT_CLOCK_DEP_A"; + this.fields = (fields || this.parser.parse(sbp.payload)); + + return this; +}; +MsgSsrOrbitClockDepA.prototype = Object.create(SBP.prototype); +MsgSsrOrbitClockDepA.prototype.messageType = "MSG_SSR_ORBIT_CLOCK_DEP_A"; +MsgSsrOrbitClockDepA.prototype.msg_type = 0x05DC; +MsgSsrOrbitClockDepA.prototype.constructor = MsgSsrOrbitClockDepA; +MsgSsrOrbitClockDepA.prototype.parser = new Parser() + .endianess('little') + .nest('time', { type: GPSTimeSec.prototype.parser }) + .nest('sid', { type: GnssSignal.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'); +MsgSsrOrbitClockDepA.prototype.fieldSpec = []; +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['time', GPSTimeSec.prototype.fieldSpec]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['sid', GnssSignal.prototype.fieldSpec]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['update_interval', 'writeUInt8', 1]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['iod_ssr', 'writeUInt8', 1]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['iod', 'writeUInt8', 1]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['radial', 'writeInt32LE', 4]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['along', 'writeInt32LE', 4]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['cross', 'writeInt32LE', 4]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['dot_radial', 'writeInt32LE', 4]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['dot_along', 'writeInt32LE', 4]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['dot_cross', 'writeInt32LE', 4]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['c0', 'writeInt32LE', 4]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['c1', 'writeInt32LE', 4]); +MsgSsrOrbitClockDepA.prototype.fieldSpec.push(['c2', 'writeInt32LE', 4]); + +/** + * SBP class for message fragment STECHeaderDepA + * + * A full set of STEC information will likely span multiple SBP messages, since SBP + * message a limited to 255 bytes. The header is used to tie multiple SBP messages + * into a sequence. + * + * Fields in the SBP payload (`sbp.payload`): + * @field time GPSTimeSec GNSS reference time of the correction + * @field num_msgs number (unsigned 8-bit int, 1 byte) Number of messages in the dataset + * @field seq_num number (unsigned 8-bit int, 1 byte) Position of this message in the dataset + * @field update_interval number (unsigned 8-bit int, 1 byte) Update interval between consecutive corrections. Encoded following RTCM DF391 + * specification. + * @field iod_atmo number (unsigned 8-bit int, 1 byte) IOD of the SSR atmospheric correction + * + * @param sbp An SBP object with a payload to be decoded. + */ +var STECHeaderDepA = function (sbp, fields) { + SBP.call(this, sbp); + this.messageType = "STECHeaderDepA"; + this.fields = (fields || this.parser.parse(sbp.payload)); + + return this; +}; +STECHeaderDepA.prototype = Object.create(SBP.prototype); +STECHeaderDepA.prototype.messageType = "STECHeaderDepA"; +STECHeaderDepA.prototype.constructor = STECHeaderDepA; +STECHeaderDepA.prototype.parser = new Parser() + .endianess('little') + .nest('time', { type: GPSTimeSec.prototype.parser }) + .uint8('num_msgs') + .uint8('seq_num') + .uint8('update_interval') + .uint8('iod_atmo'); +STECHeaderDepA.prototype.fieldSpec = []; +STECHeaderDepA.prototype.fieldSpec.push(['time', GPSTimeSec.prototype.fieldSpec]); +STECHeaderDepA.prototype.fieldSpec.push(['num_msgs', 'writeUInt8', 1]); +STECHeaderDepA.prototype.fieldSpec.push(['seq_num', 'writeUInt8', 1]); +STECHeaderDepA.prototype.fieldSpec.push(['update_interval', 'writeUInt8', 1]); +STECHeaderDepA.prototype.fieldSpec.push(['iod_atmo', 'writeUInt8', 1]); + +/** + * SBP class for message fragment GriddedCorrectionHeaderDepA + * + * The 3GPP message contains nested variable length arrays which are not suppported + * in SBP, so each grid point will be identified by the index. + * + * Fields in the SBP payload (`sbp.payload`): + * @field time GPSTimeSec GNSS reference time of the correction + * @field num_msgs number (unsigned 16-bit int, 2 bytes) Number of messages in the dataset + * @field seq_num number (unsigned 16-bit int, 2 bytes) Position of this message in the dataset + * @field update_interval number (unsigned 8-bit int, 1 byte) Update interval between consecutive corrections. Encoded following RTCM DF391 + * specification. + * @field iod_atmo number (unsigned 8-bit int, 1 byte) IOD of the SSR atmospheric correction + * @field tropo_quality_indicator number (unsigned 8-bit int, 1 byte) Quality of the troposphere data. Encoded following RTCM DF389 specifcation in + * units of m. + * + * @param sbp An SBP object with a payload to be decoded. + */ +var GriddedCorrectionHeaderDepA = function (sbp, fields) { + SBP.call(this, sbp); + this.messageType = "GriddedCorrectionHeaderDepA"; + this.fields = (fields || this.parser.parse(sbp.payload)); + + return this; +}; +GriddedCorrectionHeaderDepA.prototype = Object.create(SBP.prototype); +GriddedCorrectionHeaderDepA.prototype.messageType = "GriddedCorrectionHeaderDepA"; +GriddedCorrectionHeaderDepA.prototype.constructor = GriddedCorrectionHeaderDepA; +GriddedCorrectionHeaderDepA.prototype.parser = new Parser() + .endianess('little') + .nest('time', { type: GPSTimeSec.prototype.parser }) + .uint16('num_msgs') + .uint16('seq_num') + .uint8('update_interval') + .uint8('iod_atmo') + .uint8('tropo_quality_indicator'); +GriddedCorrectionHeaderDepA.prototype.fieldSpec = []; +GriddedCorrectionHeaderDepA.prototype.fieldSpec.push(['time', GPSTimeSec.prototype.fieldSpec]); +GriddedCorrectionHeaderDepA.prototype.fieldSpec.push(['num_msgs', 'writeUInt16LE', 2]); +GriddedCorrectionHeaderDepA.prototype.fieldSpec.push(['seq_num', 'writeUInt16LE', 2]); +GriddedCorrectionHeaderDepA.prototype.fieldSpec.push(['update_interval', 'writeUInt8', 1]); +GriddedCorrectionHeaderDepA.prototype.fieldSpec.push(['iod_atmo', 'writeUInt8', 1]); +GriddedCorrectionHeaderDepA.prototype.fieldSpec.push(['tropo_quality_indicator', 'writeUInt8', 1]); + +/** + * SBP class for message fragment GridDefinitionHeaderDepA + * + * Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. Also includes an RLE + * encoded validity list. + * + * Fields in the SBP payload (`sbp.payload`): + * @field region_size_inverse number (unsigned 8-bit int, 1 byte) region_size (deg) = 10 / region_size_inverse 0 is an invalid value. + * @field area_width number (unsigned 16-bit int, 2 bytes) grid height (deg) = grid width (deg) = area_width / region_size 0 is an invalid + * value. + * @field lat_nw_corner_enc number (unsigned 16-bit int, 2 bytes) North-West corner latitude (deg) = region_size * lat_nw_corner_enc - 90 + * @field lon_nw_corner_enc number (unsigned 16-bit int, 2 bytes) North-West corner longtitude (deg) = region_size * lon_nw_corner_enc - 180 + * @field num_msgs number (unsigned 8-bit int, 1 byte) Number of messages in the dataset + * @field seq_num number (unsigned 8-bit int, 1 byte) Postion of this message in the dataset + * + * @param sbp An SBP object with a payload to be decoded. + */ +var GridDefinitionHeaderDepA = function (sbp, fields) { + SBP.call(this, sbp); + this.messageType = "GridDefinitionHeaderDepA"; + this.fields = (fields || this.parser.parse(sbp.payload)); + + return this; +}; +GridDefinitionHeaderDepA.prototype = Object.create(SBP.prototype); +GridDefinitionHeaderDepA.prototype.messageType = "GridDefinitionHeaderDepA"; +GridDefinitionHeaderDepA.prototype.constructor = GridDefinitionHeaderDepA; +GridDefinitionHeaderDepA.prototype.parser = new Parser() + .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'); +GridDefinitionHeaderDepA.prototype.fieldSpec = []; +GridDefinitionHeaderDepA.prototype.fieldSpec.push(['region_size_inverse', 'writeUInt8', 1]); +GridDefinitionHeaderDepA.prototype.fieldSpec.push(['area_width', 'writeUInt16LE', 2]); +GridDefinitionHeaderDepA.prototype.fieldSpec.push(['lat_nw_corner_enc', 'writeUInt16LE', 2]); +GridDefinitionHeaderDepA.prototype.fieldSpec.push(['lon_nw_corner_enc', 'writeUInt16LE', 2]); +GridDefinitionHeaderDepA.prototype.fieldSpec.push(['num_msgs', 'writeUInt8', 1]); +GridDefinitionHeaderDepA.prototype.fieldSpec.push(['seq_num', 'writeUInt8', 1]); + +/** + * SBP class for message MSG_SSR_STEC_CORRECTION_DEP_A (0x05EB). + * + + * Fields in the SBP payload (`sbp.payload`): + * @field header STECHeaderDepA Header of a STEC message + * @field stec_sat_list array Array of STEC information for each space vehicle + * + * @param sbp An SBP object with a payload to be decoded. + */ +var MsgSsrStecCorrectionDepA = function (sbp, fields) { + SBP.call(this, sbp); + this.messageType = "MSG_SSR_STEC_CORRECTION_DEP_A"; + this.fields = (fields || this.parser.parse(sbp.payload)); + + return this; +}; +MsgSsrStecCorrectionDepA.prototype = Object.create(SBP.prototype); +MsgSsrStecCorrectionDepA.prototype.messageType = "MSG_SSR_STEC_CORRECTION_DEP_A"; +MsgSsrStecCorrectionDepA.prototype.msg_type = 0x05EB; +MsgSsrStecCorrectionDepA.prototype.constructor = MsgSsrStecCorrectionDepA; +MsgSsrStecCorrectionDepA.prototype.parser = new Parser() + .endianess('little') + .nest('header', { type: STECHeaderDepA.prototype.parser }) + .array('stec_sat_list', { type: STECSatElement.prototype.parser, readUntil: 'eof' }); +MsgSsrStecCorrectionDepA.prototype.fieldSpec = []; +MsgSsrStecCorrectionDepA.prototype.fieldSpec.push(['header', STECHeaderDepA.prototype.fieldSpec]); +MsgSsrStecCorrectionDepA.prototype.fieldSpec.push(['stec_sat_list', 'array', STECSatElement.prototype.fieldSpec, function () { return this.fields.array.length; }, null]); /** - * SBP class for message MSG_SSR_GRIDDED_CORRECTION (0x05FA). + * SBP class for message MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A (0x05F0). * - * STEC residuals are per space vehicle, tropo is not. It is typically equivalent - * to the QZSS CLAS Sub Type 9 messages + + * Fields in the SBP payload (`sbp.payload`): + * @field header GriddedCorrectionHeaderDepA Header of a Gridded Correction message + * @field element GridElementNoStd Tropo and STEC residuals for the given grid point + * + * @param sbp An SBP object with a payload to be decoded. + */ +var MsgSsrGriddedCorrectionNoStdDepA = function (sbp, fields) { + SBP.call(this, sbp); + this.messageType = "MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A"; + this.fields = (fields || this.parser.parse(sbp.payload)); + + return this; +}; +MsgSsrGriddedCorrectionNoStdDepA.prototype = Object.create(SBP.prototype); +MsgSsrGriddedCorrectionNoStdDepA.prototype.messageType = "MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A"; +MsgSsrGriddedCorrectionNoStdDepA.prototype.msg_type = 0x05F0; +MsgSsrGriddedCorrectionNoStdDepA.prototype.constructor = MsgSsrGriddedCorrectionNoStdDepA; +MsgSsrGriddedCorrectionNoStdDepA.prototype.parser = new Parser() + .endianess('little') + .nest('header', { type: GriddedCorrectionHeaderDepA.prototype.parser }) + .nest('element', { type: GridElementNoStd.prototype.parser }); +MsgSsrGriddedCorrectionNoStdDepA.prototype.fieldSpec = []; +MsgSsrGriddedCorrectionNoStdDepA.prototype.fieldSpec.push(['header', GriddedCorrectionHeaderDepA.prototype.fieldSpec]); +MsgSsrGriddedCorrectionNoStdDepA.prototype.fieldSpec.push(['element', GridElementNoStd.prototype.fieldSpec]); + +/** + * SBP class for message MSG_SSR_GRIDDED_CORRECTION_DEP_A (0x05FA). * + * Fields in the SBP payload (`sbp.payload`): - * @field header GriddedCorrectionHeader Header of a Gridded Correction message + * @field header GriddedCorrectionHeaderDepA Header of a Gridded Correction message * @field element GridElement Tropo and STEC residuals for the given grid point (mean and standard deviation) * * @param sbp An SBP object with a payload to be decoded. */ -var MsgSsrGriddedCorrection = function (sbp, fields) { +var MsgSsrGriddedCorrectionDepA = function (sbp, fields) { SBP.call(this, sbp); - this.messageType = "MSG_SSR_GRIDDED_CORRECTION"; + this.messageType = "MSG_SSR_GRIDDED_CORRECTION_DEP_A"; this.fields = (fields || this.parser.parse(sbp.payload)); return this; }; -MsgSsrGriddedCorrection.prototype = Object.create(SBP.prototype); -MsgSsrGriddedCorrection.prototype.messageType = "MSG_SSR_GRIDDED_CORRECTION"; -MsgSsrGriddedCorrection.prototype.msg_type = 0x05FA; -MsgSsrGriddedCorrection.prototype.constructor = MsgSsrGriddedCorrection; -MsgSsrGriddedCorrection.prototype.parser = new Parser() +MsgSsrGriddedCorrectionDepA.prototype = Object.create(SBP.prototype); +MsgSsrGriddedCorrectionDepA.prototype.messageType = "MSG_SSR_GRIDDED_CORRECTION_DEP_A"; +MsgSsrGriddedCorrectionDepA.prototype.msg_type = 0x05FA; +MsgSsrGriddedCorrectionDepA.prototype.constructor = MsgSsrGriddedCorrectionDepA; +MsgSsrGriddedCorrectionDepA.prototype.parser = new Parser() .endianess('little') - .nest('header', { type: GriddedCorrectionHeader.prototype.parser }) + .nest('header', { type: GriddedCorrectionHeaderDepA.prototype.parser }) .nest('element', { type: GridElement.prototype.parser }); -MsgSsrGriddedCorrection.prototype.fieldSpec = []; -MsgSsrGriddedCorrection.prototype.fieldSpec.push(['header', GriddedCorrectionHeader.prototype.fieldSpec]); -MsgSsrGriddedCorrection.prototype.fieldSpec.push(['element', GridElement.prototype.fieldSpec]); +MsgSsrGriddedCorrectionDepA.prototype.fieldSpec = []; +MsgSsrGriddedCorrectionDepA.prototype.fieldSpec.push(['header', GriddedCorrectionHeaderDepA.prototype.fieldSpec]); +MsgSsrGriddedCorrectionDepA.prototype.fieldSpec.push(['element', GridElement.prototype.fieldSpec]); /** - * SBP class for message MSG_SSR_GRID_DEFINITION (0x05F5). - * - * Based on the 3GPP proposal R2-1906781 which is in turn based on OMA-LPPe- - * ValidityArea from OMA-TS-LPPe-V2_0-20141202-C + * SBP class for message MSG_SSR_GRID_DEFINITION_DEP_A (0x05F5). * + * Fields in the SBP payload (`sbp.payload`): - * @field header GridDefinitionHeader Header of a Gridded Correction message + * @field header GridDefinitionHeaderDepA Header of a Gridded Correction message * @field rle_list array Run Length Encode list of quadrants that contain valid data. The spec describes * the encoding scheme in detail, but essentially the index of the quadrants that * contain transitions between valid and invalid (and vice versa) are encoded as u8 @@ -798,24 +1021,24 @@ MsgSsrGriddedCorrection.prototype.fieldSpec.push(['element', GridElement.prototy * * @param sbp An SBP object with a payload to be decoded. */ -var MsgSsrGridDefinition = function (sbp, fields) { +var MsgSsrGridDefinitionDepA = function (sbp, fields) { SBP.call(this, sbp); - this.messageType = "MSG_SSR_GRID_DEFINITION"; + this.messageType = "MSG_SSR_GRID_DEFINITION_DEP_A"; this.fields = (fields || this.parser.parse(sbp.payload)); return this; }; -MsgSsrGridDefinition.prototype = Object.create(SBP.prototype); -MsgSsrGridDefinition.prototype.messageType = "MSG_SSR_GRID_DEFINITION"; -MsgSsrGridDefinition.prototype.msg_type = 0x05F5; -MsgSsrGridDefinition.prototype.constructor = MsgSsrGridDefinition; -MsgSsrGridDefinition.prototype.parser = new Parser() +MsgSsrGridDefinitionDepA.prototype = Object.create(SBP.prototype); +MsgSsrGridDefinitionDepA.prototype.messageType = "MSG_SSR_GRID_DEFINITION_DEP_A"; +MsgSsrGridDefinitionDepA.prototype.msg_type = 0x05F5; +MsgSsrGridDefinitionDepA.prototype.constructor = MsgSsrGridDefinitionDepA; +MsgSsrGridDefinitionDepA.prototype.parser = new Parser() .endianess('little') - .nest('header', { type: GridDefinitionHeader.prototype.parser }) + .nest('header', { type: GridDefinitionHeaderDepA.prototype.parser }) .array('rle_list', { type: 'uint8', readUntil: 'eof' }); -MsgSsrGridDefinition.prototype.fieldSpec = []; -MsgSsrGridDefinition.prototype.fieldSpec.push(['header', GridDefinitionHeader.prototype.fieldSpec]); -MsgSsrGridDefinition.prototype.fieldSpec.push(['rle_list', 'array', 'writeUInt8', function () { return 1; }, null]); +MsgSsrGridDefinitionDepA.prototype.fieldSpec = []; +MsgSsrGridDefinitionDepA.prototype.fieldSpec.push(['header', GridDefinitionHeaderDepA.prototype.fieldSpec]); +MsgSsrGridDefinitionDepA.prototype.fieldSpec.push(['rle_list', 'array', 'writeUInt8', function () { return 1; }, null]); module.exports = { CodeBiasesContent: CodeBiasesContent, @@ -829,21 +1052,29 @@ module.exports = { STECResidual: STECResidual, GridElementNoStd: GridElementNoStd, GridElement: GridElement, - GridDefinitionHeader: GridDefinitionHeader, 0x05DD: MsgSsrOrbitClock, MsgSsrOrbitClock: MsgSsrOrbitClock, - 0x05DC: MsgSsrOrbitClockDepA, - MsgSsrOrbitClockDepA: MsgSsrOrbitClockDepA, 0x05E1: MsgSsrCodeBiases, MsgSsrCodeBiases: MsgSsrCodeBiases, 0x05E6: MsgSsrPhaseBiases, MsgSsrPhaseBiases: MsgSsrPhaseBiases, - 0x05EB: MsgSsrStecCorrection, + 0x05FB: MsgSsrStecCorrection, MsgSsrStecCorrection: MsgSsrStecCorrection, - 0x05F0: MsgSsrGriddedCorrectionNoStd, - MsgSsrGriddedCorrectionNoStd: MsgSsrGriddedCorrectionNoStd, - 0x05FA: MsgSsrGriddedCorrection, + 0x05FC: MsgSsrGriddedCorrection, MsgSsrGriddedCorrection: MsgSsrGriddedCorrection, - 0x05F5: MsgSsrGridDefinition, - MsgSsrGridDefinition: MsgSsrGridDefinition, + 0x05F6: MsgSsrTileDefinition, + MsgSsrTileDefinition: MsgSsrTileDefinition, + 0x05DC: MsgSsrOrbitClockDepA, + MsgSsrOrbitClockDepA: MsgSsrOrbitClockDepA, + STECHeaderDepA: STECHeaderDepA, + GriddedCorrectionHeaderDepA: GriddedCorrectionHeaderDepA, + GridDefinitionHeaderDepA: GridDefinitionHeaderDepA, + 0x05EB: MsgSsrStecCorrectionDepA, + MsgSsrStecCorrectionDepA: MsgSsrStecCorrectionDepA, + 0x05F0: MsgSsrGriddedCorrectionNoStdDepA, + MsgSsrGriddedCorrectionNoStdDepA: MsgSsrGriddedCorrectionNoStdDepA, + 0x05FA: MsgSsrGriddedCorrectionDepA, + MsgSsrGriddedCorrectionDepA: MsgSsrGriddedCorrectionDepA, + 0x05F5: MsgSsrGridDefinitionDepA, + MsgSsrGridDefinitionDepA: MsgSsrGridDefinitionDepA, } \ No newline at end of file diff --git a/jsonschema/GriddedCorrectionHeader.json b/jsonschema/GriddedCorrectionHeader.json index c7e5f6c7c6..980be5577f 100644 --- a/jsonschema/GriddedCorrectionHeader.json +++ b/jsonschema/GriddedCorrectionHeader.json @@ -13,9 +13,11 @@ "$schema": "http://json-schema.org/draft-06/schema#", "$id": "#GriddedCorrectionHeader", "title":"GriddedCorrectionHeader", - "description":"The 3GPP message contains nested variable length arrays,\nwhich are not suppported in SBP, so each grid point will,\nbe identified by the index.\n", + "description":"The LPP message contains nested variable length arrays,\nwhich are not suppported in SBP, so each grid point will,\nbe identified by the index.\n", "type": "object", "properties": { + "tile_set_id": {"type": "integer"}, + "tile_id": {"type": "integer"}, "time": {"$ref": "GpsTimeSec.json"}, "num_msgs": {"type": "integer"}, "seq_num": {"type": "integer"}, @@ -24,6 +26,8 @@ "tropo_quality_indicator": {"type": "integer"} }, "required": [ + "tile_set_id", + "tile_id", "time", "num_msgs", "seq_num", diff --git a/jsonschema/MsgSsrGriddedCorrection.json b/jsonschema/MsgSsrGriddedCorrection.json index 634bdd4a80..8fd91c2d17 100644 --- a/jsonschema/MsgSsrGriddedCorrection.json +++ b/jsonschema/MsgSsrGriddedCorrection.json @@ -13,7 +13,7 @@ "$schema": "http://json-schema.org/draft-06/schema#", "$id": "#MsgSsrGriddedCorrection", "title":"MsgSsrGriddedCorrection", - "description":"STEC residuals are per space vehicle, tropo is not.,\nIt is typically equivalent to the QZSS CLAS Sub Type 9 messages\n", + "description":"STEC residuals are per space vehicle, troposphere is not.,\n,\nIt is typically equivalent to the QZSS CLAS Sub Type 9 messages\n", "type": "object", "properties": { "header": {"$ref": "GriddedCorrectionHeader.json"}, diff --git a/jsonschema/MsgSsrStecCorrection.json b/jsonschema/MsgSsrStecCorrection.json index 98cf158484..901204a35c 100644 --- a/jsonschema/MsgSsrStecCorrection.json +++ b/jsonschema/MsgSsrStecCorrection.json @@ -13,7 +13,7 @@ "$schema": "http://json-schema.org/draft-06/schema#", "$id": "#MsgSsrStecCorrection", "title":"MsgSsrStecCorrection", - "description":"The STEC per space vehicle, given as polynomial approximation for,\na given grid. This should be combined with MSG_SSR_GRIDDED_CORRECTION,\nmessage to get the state space representation of the atmospheric,\ndelay. It is typically equivalent to the QZSS CLAS Sub Type 8 messages\n", + "description":"The Slant Total Electron Content per space vehicle, given as polynomial,\napproximation for a given tile. This should be combined with the,\nMSG_SSR_GRIDDED_CORRECTION message to get the state space representation,\nof the atmospheric delay.,\n,\nIt is typically equivalent to the QZSS CLAS Sub Type 8 messages.\n", "type": "object", "properties": { "header": {"$ref": "STECHeader.json"}, diff --git a/jsonschema/MsgSsrTileDefinition.json b/jsonschema/MsgSsrTileDefinition.json new file mode 100644 index 0000000000..c8b27d90ec --- /dev/null +++ b/jsonschema/MsgSsrTileDefinition.json @@ -0,0 +1,40 @@ +{ + "copyright": [ + "Copyright (C) 2019 Swift Navigation Inc.", + "Contact: Swift Navigation ", + "", + "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." + ], + "$schema": "http://json-schema.org/draft-06/schema#", + "$id": "#MsgSsrTileDefinition", + "title":"MsgSsrTileDefinition", + "description":"Provides the correction point coordinates for the atmospheric correction,\nvalues in the MSG_SSR_STEC_CORRECTION and MSG_SSR_GRIDDED_CORRECTION,\nmessages.,\n,\nBased on ETSI TS 137 355 V16.1.0 (LTE Positioning Protocol) information,\nelement GNSS-SSR-CorrectionPoints. SBP only supports gridded arrays of,\ncorrection points, not lists of points.\n", + "type": "object", + "properties": { + "tile_set_id": {"type": "integer"}, + "tile_id": {"type": "integer"}, + "corner_nw_lat": {"type": "integer"}, + "corner_nw_lon": {"type": "integer"}, + "spacing_lat": {"type": "integer"}, + "spacing_lon": {"type": "integer"}, + "rows": {"type": "integer"}, + "cols": {"type": "integer"}, + "bitmask": {"type": "integer"} + }, + "required": [ + "tile_set_id", + "tile_id", + "corner_nw_lat", + "corner_nw_lon", + "spacing_lat", + "spacing_lon", + "rows", + "cols", + "bitmask" + ] +} \ No newline at end of file diff --git a/jsonschema/STECHeader.json b/jsonschema/STECHeader.json index b7169d2010..18387f4945 100644 --- a/jsonschema/STECHeader.json +++ b/jsonschema/STECHeader.json @@ -16,6 +16,8 @@ "description":"A full set of STEC information will likely span multiple SBP,\nmessages, since SBP message a limited to 255 bytes. The header,\nis used to tie multiple SBP messages into a sequence.\n", "type": "object", "properties": { + "tile_set_id": {"type": "integer"}, + "tile_id": {"type": "integer"}, "time": {"$ref": "GpsTimeSec.json"}, "num_msgs": {"type": "integer"}, "seq_num": {"type": "integer"}, @@ -23,6 +25,8 @@ "iod_atmo": {"type": "integer"} }, "required": [ + "tile_set_id", + "tile_id", "time", "num_msgs", "seq_num", diff --git a/proto/ssr.proto b/proto/ssr.proto index 49506f9ea0..a90c246073 100644 --- a/proto/ssr.proto +++ b/proto/ssr.proto @@ -44,33 +44,37 @@ message PhaseBiasesContent { sint32 bias = 5; } -/** Header for MSG_SSR_STEC_CORRECTION message +/** Header for the MSG_SSR_STEC_CORRECTION message. * * A full set of STEC information will likely span multiple SBP * messages, since SBP message a limited to 255 bytes. The header * is used to tie multiple SBP messages into a sequence. */ message STECHeader { - gnss.GpsTimeSec time = 1; - uint32 num_msgs = 2; - uint32 seq_num = 3; - uint32 update_interval = 4; - uint32 iod_atmo = 5; + uint32 tile_set_id = 1; + uint32 tile_id = 2; + gnss.GpsTimeSec time = 3; + uint32 num_msgs = 4; + uint32 seq_num = 5; + uint32 update_interval = 6; + uint32 iod_atmo = 7; } -/** Header for MSG_SSR_GRIDDED_CORRECTION +/** Header for the MSG_SSR_GRIDDED_CORRECTION message. * - * The 3GPP message contains nested variable length arrays + * The LPP message contains nested variable length arrays * which are not suppported in SBP, so each grid point will * be identified by the index. */ message GriddedCorrectionHeader { - gnss.GpsTimeSec time = 1; - uint32 num_msgs = 2; - uint32 seq_num = 3; - uint32 update_interval = 4; - uint32 iod_atmo = 5; - uint32 tropo_quality_indicator = 6; + uint32 tile_set_id = 1; + uint32 tile_id = 2; + gnss.GpsTimeSec time = 3; + uint32 num_msgs = 4; + uint32 seq_num = 5; + uint32 update_interval = 6; + uint32 iod_atmo = 7; + uint32 tropo_quality_indicator = 8; } /** None @@ -145,20 +149,6 @@ message GridElement { repeated STECResidual stec_residuals = 3; } -/** Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. - * - * Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. - * Also includes an RLE encoded validity list. - */ -message GridDefinitionHeader { - uint32 region_size_inverse = 1; - uint32 area_width = 2; - uint32 lat_nw_corner_enc = 3; - uint32 lon_nw_corner_enc = 4; - uint32 num_msgs = 5; - uint32 seq_num = 6; -} - /** Precise orbit and clock correction * * The precise orbit and clock correction message is @@ -219,31 +209,24 @@ message MsgSsrPhaseBiases { repeated PhaseBiasesContent biases = 9; } -/** Slant Total Electron Content +/** STEC correction polynomial coeffcients. * - * The STEC per space vehicle, given as polynomial approximation for - * a given grid. This should be combined with MSG_SSR_GRIDDED_CORRECTION - * message to get the state space representation of the atmospheric - * delay. It is typically equivalent to the QZSS CLAS Sub Type 8 messages + * The Slant Total Electron Content per space vehicle, given as polynomial + * approximation for a given tile. This should be combined with the + * MSG_SSR_GRIDDED_CORRECTION message to get the state space representation + * of the atmospheric delay. + * + * It is typically equivalent to the QZSS CLAS Sub Type 8 messages. */ message MsgSsrStecCorrection { STECHeader header = 1; repeated STECSatElement stec_sat_list = 2; } -/** Gridded troposphere and STEC residuals +/** Gridded troposphere and STEC correction residuals. * - * This message was deprecated when variances (stddev) - * were added. - */ -message MsgSsrGriddedCorrectionNoStd { - GriddedCorrectionHeader header = 1; - GridElementNoStd element = 2; -} - -/** Gridded troposphere and STEC residuals - * - * STEC residuals are per space vehicle, tropo is not. + * STEC residuals are per space vehicle, troposphere is not. + * * It is typically equivalent to the QZSS CLAS Sub Type 9 messages */ message MsgSsrGriddedCorrection { @@ -251,12 +234,25 @@ message MsgSsrGriddedCorrection { GridElement element = 2; } -/** Definition of the grid for STEC and tropo messages +/** Definition of a SSR atmospheric correction tile. + * - * Based on the 3GPP proposal R2-1906781 which is in turn based on - * OMA-LPPe-ValidityArea from OMA-TS-LPPe-V2_0-20141202-C + * 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. */ -message MsgSsrGridDefinition { - GridDefinitionHeader header = 1; - repeated uint32 rle_list = 2; +message MsgSsrTileDefinition { + uint32 tile_set_id = 1; + uint32 tile_id = 2; + uint32 corner_nw_lat = 3; + uint32 corner_nw_lon = 4; + uint32 spacing_lat = 5; + uint32 spacing_lon = 6; + uint32 rows = 7; + uint32 cols = 8; + uint64 bitmask = 9; } \ No newline at end of file diff --git a/python/sbp/jit/ssr.py b/python/sbp/jit/ssr.py index 25c5b107d7..f606599d4a 100644 --- a/python/sbp/jit/ssr.py +++ b/python/sbp/jit/ssr.py @@ -122,7 +122,9 @@ class STECHeader(object): """ - __slots__ = ['time', + __slots__ = ['tile_set_id', + 'tile_id', + 'time', 'num_msgs', 'seq_num', 'update_interval', @@ -131,6 +133,10 @@ class STECHeader(object): @classmethod def parse_members(cls, buf, offset, length): ret = {} + (__tile_set_id, offset, length) = get_u8(buf, offset, length) + ret['tile_set_id'] = __tile_set_id + (__tile_id, offset, length) = get_u8(buf, offset, length) + ret['tile_id'] = __tile_id (__time, offset, length) = GPSTimeSec.parse_members(buf, offset, length) ret['time'] = __time (__num_msgs, offset, length) = get_u8(buf, offset, length) @@ -147,6 +153,8 @@ def _unpack_members(self, buf, offset, length): res, off, length = self.parse_members(buf, offset, length) if off == offset: return {}, offset, length + self.tile_set_id = res['tile_set_id'] + self.tile_id = res['tile_id'] self.time = res['time'] self.num_msgs = res['num_msgs'] self.seq_num = res['seq_num'] @@ -163,13 +171,15 @@ class GriddedCorrectionHeader(object): of its fields. - The 3GPP message contains nested variable length arrays + The LPP message contains nested variable length arrays which are not suppported in SBP, so each grid point will be identified by the index. """ - __slots__ = ['time', + __slots__ = ['tile_set_id', + 'tile_id', + 'time', 'num_msgs', 'seq_num', 'update_interval', @@ -179,6 +189,10 @@ class GriddedCorrectionHeader(object): @classmethod def parse_members(cls, buf, offset, length): ret = {} + (__tile_set_id, offset, length) = get_u8(buf, offset, length) + ret['tile_set_id'] = __tile_set_id + (__tile_id, offset, length) = get_u8(buf, offset, length) + ret['tile_id'] = __tile_id (__time, offset, length) = GPSTimeSec.parse_members(buf, offset, length) ret['time'] = __time (__num_msgs, offset, length) = get_u16(buf, offset, length) @@ -197,6 +211,8 @@ def _unpack_members(self, buf, offset, length): res, off, length = self.parse_members(buf, offset, length) if off == offset: return {}, offset, length + self.tile_set_id = res['tile_set_id'] + self.tile_id = res['tile_id'] self.time = res['time'] self.num_msgs = res['num_msgs'] self.seq_num = res['seq_num'] @@ -459,56 +475,6 @@ def _unpack_members(self, buf, offset, length): return res, off, length -class GridDefinitionHeader(object): - """SBP class for message GridDefinitionHeader - - You can have GridDefinitionHeader inherit its fields directly - from an inherited SBP object, or construct it inline using a dict - of its fields. - - - Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. -Also includes an RLE encoded validity list. - - - """ - __slots__ = ['region_size_inverse', - 'area_width', - 'lat_nw_corner_enc', - 'lon_nw_corner_enc', - 'num_msgs', - 'seq_num', - ] - @classmethod - def parse_members(cls, buf, offset, length): - ret = {} - (__region_size_inverse, offset, length) = get_u8(buf, offset, length) - ret['region_size_inverse'] = __region_size_inverse - (__area_width, offset, length) = get_u16(buf, offset, length) - ret['area_width'] = __area_width - (__lat_nw_corner_enc, offset, length) = get_u16(buf, offset, length) - ret['lat_nw_corner_enc'] = __lat_nw_corner_enc - (__lon_nw_corner_enc, offset, length) = get_u16(buf, offset, length) - ret['lon_nw_corner_enc'] = __lon_nw_corner_enc - (__num_msgs, offset, length) = get_u8(buf, offset, length) - ret['num_msgs'] = __num_msgs - (__seq_num, offset, length) = get_u8(buf, offset, length) - ret['seq_num'] = __seq_num - return ret, offset, length - - def _unpack_members(self, buf, offset, length): - res, off, length = self.parse_members(buf, offset, length) - if off == offset: - return {}, offset, length - self.region_size_inverse = res['region_size_inverse'] - self.area_width = res['area_width'] - self.lat_nw_corner_enc = res['lat_nw_corner_enc'] - self.lon_nw_corner_enc = res['lon_nw_corner_enc'] - self.num_msgs = res['num_msgs'] - self.seq_num = res['seq_num'] - return res, off, length - - SBP_MSG_SSR_ORBIT_CLOCK = 0x05DD class MsgSsrOrbitClock(SBP): """SBP class for message MSG_SSR_ORBIT_CLOCK (0x05DD). @@ -594,6 +560,265 @@ def _unpack_members(self, buf, offset, length): return res, off, length +SBP_MSG_SSR_CODE_BIASES = 0x05E1 +class MsgSsrCodeBiases(SBP): + """SBP class for message MSG_SSR_CODE_BIASES (0x05E1). + + You can have MSG_SSR_CODE_BIASES inherit its fields directly + from an inherited SBP object, or construct it inline using a dict + of its fields. + + + The precise code biases message is to be added +to the pseudorange of the corresponding signal +to get corrected pseudorange. It is typically +an equivalent to the 1059 and 1065 RTCM message types + + + """ + __slots__ = ['time', + 'sid', + 'update_interval', + 'iod_ssr', + 'biases', + ] + @classmethod + def parse_members(cls, buf, offset, length): + ret = {} + (__time, offset, length) = GPSTimeSec.parse_members(buf, offset, length) + ret['time'] = __time + (__sid, offset, length) = GnssSignal.parse_members(buf, offset, length) + ret['sid'] = __sid + (__update_interval, offset, length) = get_u8(buf, offset, length) + ret['update_interval'] = __update_interval + (__iod_ssr, offset, length) = get_u8(buf, offset, length) + ret['iod_ssr'] = __iod_ssr + (__biases, offset, length) = get_array(CodeBiasesContent.parse_members)(buf, offset, length) + ret['biases'] = __biases + return ret, offset, length + + def _unpack_members(self, buf, offset, length): + res, off, length = self.parse_members(buf, offset, length) + if off == offset: + return {}, offset, length + self.time = res['time'] + self.sid = res['sid'] + self.update_interval = res['update_interval'] + self.iod_ssr = res['iod_ssr'] + self.biases = res['biases'] + return res, off, length + + +SBP_MSG_SSR_PHASE_BIASES = 0x05E6 +class MsgSsrPhaseBiases(SBP): + """SBP class for message MSG_SSR_PHASE_BIASES (0x05E6). + + You can have MSG_SSR_PHASE_BIASES inherit its fields directly + from an inherited SBP object, or construct it inline using a dict + of its fields. + + + The precise phase biases message contains the biases +to be added to the carrier phase of the corresponding +signal to get corrected carrier phase measurement, as +well as the satellite yaw angle to be applied to compute +the phase wind-up correction. +It is typically an equivalent to the 1265 RTCM message types + + + """ + __slots__ = ['time', + 'sid', + 'update_interval', + 'iod_ssr', + 'dispersive_bias', + 'mw_consistency', + 'yaw', + 'yaw_rate', + 'biases', + ] + @classmethod + def parse_members(cls, buf, offset, length): + ret = {} + (__time, offset, length) = GPSTimeSec.parse_members(buf, offset, length) + ret['time'] = __time + (__sid, offset, length) = GnssSignal.parse_members(buf, offset, length) + ret['sid'] = __sid + (__update_interval, offset, length) = get_u8(buf, offset, length) + ret['update_interval'] = __update_interval + (__iod_ssr, offset, length) = get_u8(buf, offset, length) + ret['iod_ssr'] = __iod_ssr + (__dispersive_bias, offset, length) = get_u8(buf, offset, length) + ret['dispersive_bias'] = __dispersive_bias + (__mw_consistency, offset, length) = get_u8(buf, offset, length) + ret['mw_consistency'] = __mw_consistency + (__yaw, offset, length) = get_u16(buf, offset, length) + ret['yaw'] = __yaw + (__yaw_rate, offset, length) = get_s8(buf, offset, length) + ret['yaw_rate'] = __yaw_rate + (__biases, offset, length) = get_array(PhaseBiasesContent.parse_members)(buf, offset, length) + ret['biases'] = __biases + return ret, offset, length + + def _unpack_members(self, buf, offset, length): + res, off, length = self.parse_members(buf, offset, length) + if off == offset: + return {}, offset, length + self.time = res['time'] + self.sid = res['sid'] + self.update_interval = res['update_interval'] + self.iod_ssr = res['iod_ssr'] + self.dispersive_bias = res['dispersive_bias'] + self.mw_consistency = res['mw_consistency'] + self.yaw = res['yaw'] + self.yaw_rate = res['yaw_rate'] + self.biases = res['biases'] + return res, off, length + + +SBP_MSG_SSR_STEC_CORRECTION = 0x05FB +class MsgSsrStecCorrection(SBP): + """SBP class for message MSG_SSR_STEC_CORRECTION (0x05FB). + + You can have MSG_SSR_STEC_CORRECTION inherit its fields directly + from an inherited SBP object, or construct it inline using a dict + of its fields. + + + The Slant Total Electron Content per space vehicle, given as polynomial +approximation for a given tile. This should be combined with the +MSG_SSR_GRIDDED_CORRECTION message to get the state space representation +of the atmospheric delay. + +It is typically equivalent to the QZSS CLAS Sub Type 8 messages. + + + """ + __slots__ = ['header', + 'stec_sat_list', + ] + @classmethod + def parse_members(cls, buf, offset, length): + ret = {} + (__header, offset, length) = STECHeader.parse_members(buf, offset, length) + ret['header'] = __header + (__stec_sat_list, offset, length) = get_array(STECSatElement.parse_members)(buf, offset, length) + ret['stec_sat_list'] = __stec_sat_list + return ret, offset, length + + def _unpack_members(self, buf, offset, length): + res, off, length = self.parse_members(buf, offset, length) + if off == offset: + return {}, offset, length + self.header = res['header'] + self.stec_sat_list = res['stec_sat_list'] + return res, off, length + + +SBP_MSG_SSR_GRIDDED_CORRECTION = 0x05FC +class MsgSsrGriddedCorrection(SBP): + """SBP class for message MSG_SSR_GRIDDED_CORRECTION (0x05FC). + + You can have MSG_SSR_GRIDDED_CORRECTION inherit its fields directly + from an inherited SBP object, or construct it inline using a dict + of its fields. + + + STEC residuals are per space vehicle, troposphere is not. + +It is typically equivalent to the QZSS CLAS Sub Type 9 messages + + + """ + __slots__ = ['header', + 'element', + ] + @classmethod + def parse_members(cls, buf, offset, length): + ret = {} + (__header, offset, length) = GriddedCorrectionHeader.parse_members(buf, offset, length) + ret['header'] = __header + (__element, offset, length) = GridElement.parse_members(buf, offset, length) + ret['element'] = __element + return ret, offset, length + + def _unpack_members(self, buf, offset, length): + res, off, length = self.parse_members(buf, offset, length) + if off == offset: + return {}, offset, length + self.header = res['header'] + self.element = res['element'] + return res, off, length + + +SBP_MSG_SSR_TILE_DEFINITION = 0x05F6 +class MsgSsrTileDefinition(SBP): + """SBP class for message MSG_SSR_TILE_DEFINITION (0x05F6). + + 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. + + + """ + __slots__ = ['tile_set_id', + 'tile_id', + 'corner_nw_lat', + 'corner_nw_lon', + 'spacing_lat', + 'spacing_lon', + 'rows', + 'cols', + 'bitmask', + ] + @classmethod + def parse_members(cls, buf, offset, length): + ret = {} + (__tile_set_id, offset, length) = get_u8(buf, offset, length) + ret['tile_set_id'] = __tile_set_id + (__tile_id, offset, length) = get_u8(buf, offset, length) + ret['tile_id'] = __tile_id + (__corner_nw_lat, offset, length) = get_u16(buf, offset, length) + ret['corner_nw_lat'] = __corner_nw_lat + (__corner_nw_lon, offset, length) = get_u16(buf, offset, length) + ret['corner_nw_lon'] = __corner_nw_lon + (__spacing_lat, offset, length) = get_u16(buf, offset, length) + ret['spacing_lat'] = __spacing_lat + (__spacing_lon, offset, length) = get_u16(buf, offset, length) + ret['spacing_lon'] = __spacing_lon + (__rows, offset, length) = get_u16(buf, offset, length) + ret['rows'] = __rows + (__cols, offset, length) = get_u16(buf, offset, length) + ret['cols'] = __cols + (__bitmask, offset, length) = get_u64(buf, offset, length) + ret['bitmask'] = __bitmask + return ret, offset, length + + def _unpack_members(self, buf, offset, length): + res, off, length = self.parse_members(buf, offset, length) + if off == offset: + return {}, offset, length + self.tile_set_id = res['tile_set_id'] + self.tile_id = res['tile_id'] + self.corner_nw_lat = res['corner_nw_lat'] + self.corner_nw_lon = res['corner_nw_lon'] + self.spacing_lat = res['spacing_lat'] + self.spacing_lon = res['spacing_lon'] + self.rows = res['rows'] + self.cols = res['cols'] + self.bitmask = res['bitmask'] + return res, off, length + + SBP_MSG_SSR_ORBIT_CLOCK_DEP_A = 0x05DC class MsgSsrOrbitClockDepA(SBP): """SBP class for message MSG_SSR_ORBIT_CLOCK_DEP_A (0x05DC). @@ -603,11 +828,6 @@ class MsgSsrOrbitClockDepA(SBP): of its fields. - The precise orbit and clock correction message is -to be applied as a delta correction to broadcast -ephemeris and is typically an equivalent to the 1060 -and 1066 RTCM message types - """ __slots__ = ['time', @@ -679,41 +899,39 @@ def _unpack_members(self, buf, offset, length): return res, off, length -SBP_MSG_SSR_CODE_BIASES = 0x05E1 -class MsgSsrCodeBiases(SBP): - """SBP class for message MSG_SSR_CODE_BIASES (0x05E1). +class STECHeaderDepA(object): + """SBP class for message STECHeaderDepA - You can have MSG_SSR_CODE_BIASES inherit its fields directly + You can have STECHeaderDepA inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - The precise code biases message is to be added -to the pseudorange of the corresponding signal -to get corrected pseudorange. It is typically -an equivalent to the 1059 and 1065 RTCM message types + A full set of STEC information will likely span multiple SBP +messages, since SBP message a limited to 255 bytes. The header +is used to tie multiple SBP messages into a sequence. """ __slots__ = ['time', - 'sid', + 'num_msgs', + 'seq_num', 'update_interval', - 'iod_ssr', - 'biases', + 'iod_atmo', ] @classmethod def parse_members(cls, buf, offset, length): ret = {} (__time, offset, length) = GPSTimeSec.parse_members(buf, offset, length) ret['time'] = __time - (__sid, offset, length) = GnssSignal.parse_members(buf, offset, length) - ret['sid'] = __sid + (__num_msgs, offset, length) = get_u8(buf, offset, length) + ret['num_msgs'] = __num_msgs + (__seq_num, offset, length) = get_u8(buf, offset, length) + ret['seq_num'] = __seq_num (__update_interval, offset, length) = get_u8(buf, offset, length) ret['update_interval'] = __update_interval - (__iod_ssr, offset, length) = get_u8(buf, offset, length) - ret['iod_ssr'] = __iod_ssr - (__biases, offset, length) = get_array(CodeBiasesContent.parse_members)(buf, offset, length) - ret['biases'] = __biases + (__iod_atmo, offset, length) = get_u8(buf, offset, length) + ret['iod_atmo'] = __iod_atmo return ret, offset, length def _unpack_members(self, buf, offset, length): @@ -721,62 +939,49 @@ def _unpack_members(self, buf, offset, length): if off == offset: return {}, offset, length self.time = res['time'] - self.sid = res['sid'] + self.num_msgs = res['num_msgs'] + self.seq_num = res['seq_num'] self.update_interval = res['update_interval'] - self.iod_ssr = res['iod_ssr'] - self.biases = res['biases'] + self.iod_atmo = res['iod_atmo'] return res, off, length -SBP_MSG_SSR_PHASE_BIASES = 0x05E6 -class MsgSsrPhaseBiases(SBP): - """SBP class for message MSG_SSR_PHASE_BIASES (0x05E6). +class GriddedCorrectionHeaderDepA(object): + """SBP class for message GriddedCorrectionHeaderDepA - You can have MSG_SSR_PHASE_BIASES inherit its fields directly + You can have GriddedCorrectionHeaderDepA inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - The precise phase biases message contains the biases -to be added to the carrier phase of the corresponding -signal to get corrected carrier phase measurement, as -well as the satellite yaw angle to be applied to compute -the phase wind-up correction. -It is typically an equivalent to the 1265 RTCM message types + The 3GPP message contains nested variable length arrays +which are not suppported in SBP, so each grid point will +be identified by the index. """ __slots__ = ['time', - 'sid', + 'num_msgs', + 'seq_num', 'update_interval', - 'iod_ssr', - 'dispersive_bias', - 'mw_consistency', - 'yaw', - 'yaw_rate', - 'biases', + 'iod_atmo', + 'tropo_quality_indicator', ] @classmethod def parse_members(cls, buf, offset, length): ret = {} (__time, offset, length) = GPSTimeSec.parse_members(buf, offset, length) ret['time'] = __time - (__sid, offset, length) = GnssSignal.parse_members(buf, offset, length) - ret['sid'] = __sid + (__num_msgs, offset, length) = get_u16(buf, offset, length) + ret['num_msgs'] = __num_msgs + (__seq_num, offset, length) = get_u16(buf, offset, length) + ret['seq_num'] = __seq_num (__update_interval, offset, length) = get_u8(buf, offset, length) ret['update_interval'] = __update_interval - (__iod_ssr, offset, length) = get_u8(buf, offset, length) - ret['iod_ssr'] = __iod_ssr - (__dispersive_bias, offset, length) = get_u8(buf, offset, length) - ret['dispersive_bias'] = __dispersive_bias - (__mw_consistency, offset, length) = get_u8(buf, offset, length) - ret['mw_consistency'] = __mw_consistency - (__yaw, offset, length) = get_u16(buf, offset, length) - ret['yaw'] = __yaw - (__yaw_rate, offset, length) = get_s8(buf, offset, length) - ret['yaw_rate'] = __yaw_rate - (__biases, offset, length) = get_array(PhaseBiasesContent.parse_members)(buf, offset, length) - ret['biases'] = __biases + (__iod_atmo, offset, length) = get_u8(buf, offset, length) + ret['iod_atmo'] = __iod_atmo + (__tropo_quality_indicator, offset, length) = get_u8(buf, offset, length) + ret['tropo_quality_indicator'] = __tropo_quality_indicator return ret, offset, length def _unpack_members(self, buf, offset, length): @@ -784,31 +989,73 @@ def _unpack_members(self, buf, offset, length): if off == offset: return {}, offset, length self.time = res['time'] - self.sid = res['sid'] + self.num_msgs = res['num_msgs'] + self.seq_num = res['seq_num'] self.update_interval = res['update_interval'] - self.iod_ssr = res['iod_ssr'] - self.dispersive_bias = res['dispersive_bias'] - self.mw_consistency = res['mw_consistency'] - self.yaw = res['yaw'] - self.yaw_rate = res['yaw_rate'] - self.biases = res['biases'] + self.iod_atmo = res['iod_atmo'] + self.tropo_quality_indicator = res['tropo_quality_indicator'] return res, off, length -SBP_MSG_SSR_STEC_CORRECTION = 0x05EB -class MsgSsrStecCorrection(SBP): - """SBP class for message MSG_SSR_STEC_CORRECTION (0x05EB). +class GridDefinitionHeaderDepA(object): + """SBP class for message GridDefinitionHeaderDepA - You can have MSG_SSR_STEC_CORRECTION inherit its fields directly + You can have GridDefinitionHeaderDepA inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - The STEC per space vehicle, given as polynomial approximation for -a given grid. This should be combined with MSG_SSR_GRIDDED_CORRECTION -message to get the state space representation of the atmospheric -delay. It is typically equivalent to the QZSS CLAS Sub Type 8 messages + Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. +Also includes an RLE encoded validity list. + + + """ + __slots__ = ['region_size_inverse', + 'area_width', + 'lat_nw_corner_enc', + 'lon_nw_corner_enc', + 'num_msgs', + 'seq_num', + ] + @classmethod + def parse_members(cls, buf, offset, length): + ret = {} + (__region_size_inverse, offset, length) = get_u8(buf, offset, length) + ret['region_size_inverse'] = __region_size_inverse + (__area_width, offset, length) = get_u16(buf, offset, length) + ret['area_width'] = __area_width + (__lat_nw_corner_enc, offset, length) = get_u16(buf, offset, length) + ret['lat_nw_corner_enc'] = __lat_nw_corner_enc + (__lon_nw_corner_enc, offset, length) = get_u16(buf, offset, length) + ret['lon_nw_corner_enc'] = __lon_nw_corner_enc + (__num_msgs, offset, length) = get_u8(buf, offset, length) + ret['num_msgs'] = __num_msgs + (__seq_num, offset, length) = get_u8(buf, offset, length) + ret['seq_num'] = __seq_num + return ret, offset, length + + def _unpack_members(self, buf, offset, length): + res, off, length = self.parse_members(buf, offset, length) + if off == offset: + return {}, offset, length + self.region_size_inverse = res['region_size_inverse'] + self.area_width = res['area_width'] + self.lat_nw_corner_enc = res['lat_nw_corner_enc'] + self.lon_nw_corner_enc = res['lon_nw_corner_enc'] + self.num_msgs = res['num_msgs'] + self.seq_num = res['seq_num'] + return res, off, length + + +SBP_MSG_SSR_STEC_CORRECTION_DEP_A = 0x05EB +class MsgSsrStecCorrectionDepA(SBP): + """SBP class for message MSG_SSR_STEC_CORRECTION_DEP_A (0x05EB). + You can have MSG_SSR_STEC_CORRECTION_DEP_A inherit its fields directly + from an inherited SBP object, or construct it inline using a dict + of its fields. + + """ __slots__ = ['header', @@ -817,7 +1064,7 @@ class MsgSsrStecCorrection(SBP): @classmethod def parse_members(cls, buf, offset, length): ret = {} - (__header, offset, length) = STECHeader.parse_members(buf, offset, length) + (__header, offset, length) = STECHeaderDepA.parse_members(buf, offset, length) ret['header'] = __header (__stec_sat_list, offset, length) = get_array(STECSatElement.parse_members)(buf, offset, length) ret['stec_sat_list'] = __stec_sat_list @@ -832,18 +1079,15 @@ def _unpack_members(self, buf, offset, length): return res, off, length -SBP_MSG_SSR_GRIDDED_CORRECTION_NO_STD = 0x05F0 -class MsgSsrGriddedCorrectionNoStd(SBP): - """SBP class for message MSG_SSR_GRIDDED_CORRECTION_NO_STD (0x05F0). +SBP_MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A = 0x05F0 +class MsgSsrGriddedCorrectionNoStdDepA(SBP): + """SBP class for message MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A (0x05F0). - You can have MSG_SSR_GRIDDED_CORRECTION_NO_STD inherit its fields directly + You can have MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - This message was deprecated when variances (stddev) -were added. - """ __slots__ = ['header', @@ -852,7 +1096,7 @@ class MsgSsrGriddedCorrectionNoStd(SBP): @classmethod def parse_members(cls, buf, offset, length): ret = {} - (__header, offset, length) = GriddedCorrectionHeader.parse_members(buf, offset, length) + (__header, offset, length) = GriddedCorrectionHeaderDepA.parse_members(buf, offset, length) ret['header'] = __header (__element, offset, length) = GridElementNoStd.parse_members(buf, offset, length) ret['element'] = __element @@ -867,18 +1111,15 @@ def _unpack_members(self, buf, offset, length): return res, off, length -SBP_MSG_SSR_GRIDDED_CORRECTION = 0x05FA -class MsgSsrGriddedCorrection(SBP): - """SBP class for message MSG_SSR_GRIDDED_CORRECTION (0x05FA). +SBP_MSG_SSR_GRIDDED_CORRECTION_DEP_A = 0x05FA +class MsgSsrGriddedCorrectionDepA(SBP): + """SBP class for message MSG_SSR_GRIDDED_CORRECTION_DEP_A (0x05FA). - You can have MSG_SSR_GRIDDED_CORRECTION inherit its fields directly + You can have MSG_SSR_GRIDDED_CORRECTION_DEP_A inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - STEC residuals are per space vehicle, tropo is not. -It is typically equivalent to the QZSS CLAS Sub Type 9 messages - """ __slots__ = ['header', @@ -887,7 +1128,7 @@ class MsgSsrGriddedCorrection(SBP): @classmethod def parse_members(cls, buf, offset, length): ret = {} - (__header, offset, length) = GriddedCorrectionHeader.parse_members(buf, offset, length) + (__header, offset, length) = GriddedCorrectionHeaderDepA.parse_members(buf, offset, length) ret['header'] = __header (__element, offset, length) = GridElement.parse_members(buf, offset, length) ret['element'] = __element @@ -902,18 +1143,15 @@ def _unpack_members(self, buf, offset, length): return res, off, length -SBP_MSG_SSR_GRID_DEFINITION = 0x05F5 -class MsgSsrGridDefinition(SBP): - """SBP class for message MSG_SSR_GRID_DEFINITION (0x05F5). +SBP_MSG_SSR_GRID_DEFINITION_DEP_A = 0x05F5 +class MsgSsrGridDefinitionDepA(SBP): + """SBP class for message MSG_SSR_GRID_DEFINITION_DEP_A (0x05F5). - You can have MSG_SSR_GRID_DEFINITION inherit its fields directly + You can have MSG_SSR_GRID_DEFINITION_DEP_A inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - Based on the 3GPP proposal R2-1906781 which is in turn based on -OMA-LPPe-ValidityArea from OMA-TS-LPPe-V2_0-20141202-C - """ __slots__ = ['header', @@ -922,7 +1160,7 @@ class MsgSsrGridDefinition(SBP): @classmethod def parse_members(cls, buf, offset, length): ret = {} - (__header, offset, length) = GridDefinitionHeader.parse_members(buf, offset, length) + (__header, offset, length) = GridDefinitionHeaderDepA.parse_members(buf, offset, length) ret['header'] = __header (__rle_list, offset, length) = get_array(get_u8)(buf, offset, length) ret['rle_list'] = __rle_list @@ -940,11 +1178,14 @@ def _unpack_members(self, buf, offset, length): msg_classes = { 0x05DD: MsgSsrOrbitClock, - 0x05DC: MsgSsrOrbitClockDepA, 0x05E1: MsgSsrCodeBiases, 0x05E6: MsgSsrPhaseBiases, - 0x05EB: MsgSsrStecCorrection, - 0x05F0: MsgSsrGriddedCorrectionNoStd, - 0x05FA: MsgSsrGriddedCorrection, - 0x05F5: MsgSsrGridDefinition, + 0x05FB: MsgSsrStecCorrection, + 0x05FC: MsgSsrGriddedCorrection, + 0x05F6: MsgSsrTileDefinition, + 0x05DC: MsgSsrOrbitClockDepA, + 0x05EB: MsgSsrStecCorrectionDepA, + 0x05F0: MsgSsrGriddedCorrectionNoStdDepA, + 0x05FA: MsgSsrGriddedCorrectionDepA, + 0x05F5: MsgSsrGridDefinitionDepA, } \ No newline at end of file diff --git a/python/sbp/observation.py b/python/sbp/observation.py index cce93bcb13..680f80c17f 100644 --- a/python/sbp/observation.py +++ b/python/sbp/observation.py @@ -2216,8 +2216,16 @@ class MsgEphemerisBds(SBP): Clock reference iode : int Issue of ephemeris data + +Calculated from the navigation data parameter t_oe per RTCM/CSNO recommendation: +IODE = mod (t_oe / 720, 240) + iodc : int Issue of clock data + +Calculated from the navigation data parameter t_oe per RTCM/CSNO recommendation: +IODE = mod (t_oc / 720, 240) + sender : int Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). @@ -2421,9 +2429,9 @@ class MsgEphemerisGalDepA(SBP): toc : GPSTimeSec Clock reference iode : int - Issue of ephemeris data + Issue of data (IODnav) iodc : int - Issue of clock data + Issue of data (IODnav). Always equal to iode sender : int Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). @@ -2629,11 +2637,11 @@ class MsgEphemerisGal(SBP): toc : GPSTimeSec Clock reference iode : int - Issue of ephemeris data + Issue of data (IODnav) iodc : int - Issue of clock data + Issue of data (IODnav). Always equal to iode source : int - 0=I/NAV, 1=F/NAV, ... + 0=I/NAV, 1=F/NAV sender : int Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). @@ -3521,7 +3529,7 @@ class MsgEphemerisGloDepD(SBP): fcn : int Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid iod : int - Issue of ephemeris data + Issue of data. Equal to the 7 bits of the immediate data word t_b sender : int Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). @@ -3655,7 +3663,7 @@ class MsgEphemerisGlo(SBP): fcn : int Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid iod : int - Issue of ephemeris data + Issue of data. Equal to the 7 bits of the immediate data word t_b sender : int Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). diff --git a/python/sbp/ssr.py b/python/sbp/ssr.py index 9abe9bdd58..fcd41358cd 100644 --- a/python/sbp/ssr.py +++ b/python/sbp/ssr.py @@ -137,6 +137,10 @@ class STECHeader(object): Parameters ---------- + 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. time : GPSTimeSec GNSS reference time of the correction num_msgs : int @@ -153,12 +157,16 @@ class STECHeader(object): """ _parser = construct.Embedded(construct.Struct( + 'tile_set_id' / construct.Int8ul, + 'tile_id' / construct.Int8ul, 'time' / construct.Struct(GPSTimeSec._parser), 'num_msgs' / construct.Int8ul, 'seq_num' / construct.Int8ul, 'update_interval' / construct.Int8ul, 'iod_atmo' / construct.Int8ul,)) __slots__ = [ + 'tile_set_id', + 'tile_id', 'time', 'num_msgs', 'seq_num', @@ -170,6 +178,8 @@ def __init__(self, payload=None, **kwargs): if payload: self.from_binary(payload) else: + self.tile_set_id = kwargs.pop('tile_set_id') + self.tile_id = kwargs.pop('tile_id') self.time = kwargs.pop('time') self.num_msgs = kwargs.pop('num_msgs') self.seq_num = kwargs.pop('seq_num') @@ -191,13 +201,17 @@ def to_binary(self): class GriddedCorrectionHeader(object): """GriddedCorrectionHeader. - The 3GPP message contains nested variable length arrays + The LPP message contains nested variable length arrays which are not suppported in SBP, so each grid point will be identified by the index. Parameters ---------- + 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. time : GPSTimeSec GNSS reference time of the correction num_msgs : int @@ -218,6 +232,8 @@ class GriddedCorrectionHeader(object): """ _parser = construct.Embedded(construct.Struct( + 'tile_set_id' / construct.Int8ul, + 'tile_id' / construct.Int8ul, 'time' / construct.Struct(GPSTimeSec._parser), 'num_msgs' / construct.Int16ul, 'seq_num' / construct.Int16ul, @@ -225,6 +241,8 @@ class GriddedCorrectionHeader(object): 'iod_atmo' / construct.Int8ul, 'tropo_quality_indicator' / construct.Int8ul,)) __slots__ = [ + 'tile_set_id', + 'tile_id', 'time', 'num_msgs', 'seq_num', @@ -237,6 +255,8 @@ def __init__(self, payload=None, **kwargs): if payload: self.from_binary(payload) else: + self.tile_set_id = kwargs.pop('tile_set_id') + self.tile_id = kwargs.pop('tile_id') self.time = kwargs.pop('time') self.num_msgs = kwargs.pop('num_msgs') self.seq_num = kwargs.pop('seq_num') @@ -573,8 +593,137 @@ def to_binary(self): d = dict([(k, getattr(obj, k)) for k in self.__slots__]) return GridElement.build(d) -class GridDefinitionHeader(object): - """GridDefinitionHeader. +class STECHeaderDepA(object): + """STECHeaderDepA. + + A full set of STEC information will likely span multiple SBP +messages, since SBP message a limited to 255 bytes. The header +is used to tie multiple SBP messages into a sequence. + + + Parameters + ---------- + time : GPSTimeSec + GNSS reference time of the correction + num_msgs : int + Number of messages in the dataset + seq_num : int + Position of this message in the dataset + update_interval : int + Update interval between consecutive corrections. Encoded +following RTCM DF391 specification. + + iod_atmo : int + IOD of the SSR atmospheric correction + + + """ + _parser = construct.Embedded(construct.Struct( + 'time' / construct.Struct(GPSTimeSec._parser), + 'num_msgs' / construct.Int8ul, + 'seq_num' / construct.Int8ul, + 'update_interval' / construct.Int8ul, + 'iod_atmo' / construct.Int8ul,)) + __slots__ = [ + 'time', + 'num_msgs', + 'seq_num', + 'update_interval', + 'iod_atmo', + ] + + def __init__(self, payload=None, **kwargs): + if payload: + self.from_binary(payload) + else: + self.time = kwargs.pop('time') + self.num_msgs = kwargs.pop('num_msgs') + self.seq_num = kwargs.pop('seq_num') + self.update_interval = kwargs.pop('update_interval') + self.iod_atmo = kwargs.pop('iod_atmo') + + def __repr__(self): + return fmt_repr(self) + + def from_binary(self, d): + p = STECHeaderDepA._parser.parse(d) + for n in self.__class__.__slots__: + setattr(self, n, getattr(p, n)) + + def to_binary(self): + d = dict([(k, getattr(obj, k)) for k in self.__slots__]) + return STECHeaderDepA.build(d) + +class GriddedCorrectionHeaderDepA(object): + """GriddedCorrectionHeaderDepA. + + The 3GPP message contains nested variable length arrays +which are not suppported in SBP, so each grid point will +be identified by the index. + + + Parameters + ---------- + time : GPSTimeSec + GNSS reference time of the correction + num_msgs : int + Number of messages in the dataset + seq_num : int + Position of this message in the dataset + update_interval : int + Update interval between consecutive corrections. Encoded +following RTCM DF391 specification. + + iod_atmo : int + IOD of the SSR atmospheric correction + + tropo_quality_indicator : int + Quality of the troposphere data. Encoded following RTCM DF389 +specifcation in units of m. + + + """ + _parser = construct.Embedded(construct.Struct( + 'time' / construct.Struct(GPSTimeSec._parser), + 'num_msgs' / construct.Int16ul, + 'seq_num' / construct.Int16ul, + 'update_interval' / construct.Int8ul, + 'iod_atmo' / construct.Int8ul, + 'tropo_quality_indicator' / construct.Int8ul,)) + __slots__ = [ + 'time', + 'num_msgs', + 'seq_num', + 'update_interval', + 'iod_atmo', + 'tropo_quality_indicator', + ] + + def __init__(self, payload=None, **kwargs): + if payload: + self.from_binary(payload) + else: + self.time = kwargs.pop('time') + self.num_msgs = kwargs.pop('num_msgs') + self.seq_num = kwargs.pop('seq_num') + self.update_interval = kwargs.pop('update_interval') + self.iod_atmo = kwargs.pop('iod_atmo') + self.tropo_quality_indicator = kwargs.pop('tropo_quality_indicator') + + def __repr__(self): + return fmt_repr(self) + + def from_binary(self, d): + p = GriddedCorrectionHeaderDepA._parser.parse(d) + for n in self.__class__.__slots__: + setattr(self, n, getattr(p, n)) + + def to_binary(self): + d = dict([(k, getattr(obj, k)) for k in self.__slots__]) + return GriddedCorrectionHeaderDepA.build(d) + +class GridDefinitionHeaderDepA(object): + """GridDefinitionHeaderDepA. Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. Also includes an RLE encoded validity list. @@ -587,11 +736,11 @@ class GridDefinitionHeader(object): 0 is an invalid value. area_width : int - grid height (deg) = grid idth (deg) = area_width / region_size + grid height (deg) = grid width (deg) = area_width / region_size 0 is an invalid value. lat_nw_corner_enc : int - North-West corner latitdue (deg) = region_size * lat_nw_corner_enc - 90 + North-West corner latitude (deg) = region_size * lat_nw_corner_enc - 90 lon_nw_corner_enc : int North-West corner longtitude (deg) = region_size * lon_nw_corner_enc - 180 num_msgs : int @@ -631,13 +780,13 @@ def __repr__(self): return fmt_repr(self) def from_binary(self, d): - p = GridDefinitionHeader._parser.parse(d) + p = GridDefinitionHeaderDepA._parser.parse(d) for n in self.__class__.__slots__: setattr(self, n, getattr(p, n)) def to_binary(self): d = dict([(k, getattr(obj, k)) for k in self.__slots__]) - return GridDefinitionHeader.build(d) + return GridDefinitionHeaderDepA.build(d) SBP_MSG_SSR_ORBIT_CLOCK = 0x05DD class MsgSsrOrbitClock(SBP): @@ -802,19 +951,19 @@ def to_json_dict(self): d.update(j) return d -SBP_MSG_SSR_ORBIT_CLOCK_DEP_A = 0x05DC -class MsgSsrOrbitClockDepA(SBP): - """SBP class for message MSG_SSR_ORBIT_CLOCK_DEP_A (0x05DC). +SBP_MSG_SSR_CODE_BIASES = 0x05E1 +class MsgSsrCodeBiases(SBP): + """SBP class for message MSG_SSR_CODE_BIASES (0x05E1). - You can have MSG_SSR_ORBIT_CLOCK_DEP_A inherit its fields directly + You can have MSG_SSR_CODE_BIASES inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - The precise orbit and clock correction message is -to be applied as a delta correction to broadcast -ephemeris and is typically an equivalent to the 1060 -and 1066 RTCM message types + The precise code biases message is to be added +to the pseudorange of the corresponding signal +to get corrected pseudorange. It is typically +an equivalent to the 1059 and 1065 RTCM message types Parameters @@ -834,26 +983,8 @@ class MsgSsrOrbitClockDepA(SBP): SSR is used to indicate a change in the SSR generating configuration - iod : int - Issue of broadcast ephemeris data - radial : int - Orbit radial delta correction - along : int - Orbit along delta correction - cross : int - Orbit along delta correction - dot_radial : int - Velocity of orbit radial delta correction - dot_along : int - Velocity of orbit along delta correction - dot_cross : int - Velocity of orbit cross delta correction - c0 : int - C0 polynomial coefficient for correction of broadcast satellite clock - c1 : int - C1 polynomial coefficient for correction of broadcast satellite clock - c2 : int - C2 polynomial coefficient for correction of broadcast satellite clock + biases : array + Code biases for the different satellite signals sender : int Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). @@ -863,57 +994,30 @@ class MsgSsrOrbitClockDepA(SBP): 'sid' / construct.Struct(GnssSignal._parser), 'update_interval' / construct.Int8ul, 'iod_ssr' / construct.Int8ul, - 'iod' / construct.Int8ul, - 'radial' / construct.Int32sl, - 'along' / construct.Int32sl, - 'cross' / construct.Int32sl, - 'dot_radial' / construct.Int32sl, - 'dot_along' / construct.Int32sl, - 'dot_cross' / construct.Int32sl, - 'c0' / construct.Int32sl, - 'c1' / construct.Int32sl, - 'c2' / construct.Int32sl,) + construct.GreedyRange('biases' / construct.Struct(CodeBiasesContent._parser)),) __slots__ = [ 'time', 'sid', 'update_interval', 'iod_ssr', - 'iod', - 'radial', - 'along', - 'cross', - 'dot_radial', - 'dot_along', - 'dot_cross', - 'c0', - 'c1', - 'c2', + 'biases', ] def __init__(self, sbp=None, **kwargs): if sbp: - super( MsgSsrOrbitClockDepA, + super( MsgSsrCodeBiases, self).__init__(sbp.msg_type, sbp.sender, sbp.length, sbp.payload, sbp.crc) self.from_binary(sbp.payload) else: - super( MsgSsrOrbitClockDepA, self).__init__() - self.msg_type = SBP_MSG_SSR_ORBIT_CLOCK_DEP_A + super( MsgSsrCodeBiases, self).__init__() + self.msg_type = SBP_MSG_SSR_CODE_BIASES self.sender = kwargs.pop('sender', SENDER_ID) self.time = kwargs.pop('time') self.sid = kwargs.pop('sid') self.update_interval = kwargs.pop('update_interval') self.iod_ssr = kwargs.pop('iod_ssr') - self.iod = kwargs.pop('iod') - self.radial = kwargs.pop('radial') - self.along = kwargs.pop('along') - self.cross = kwargs.pop('cross') - self.dot_radial = kwargs.pop('dot_radial') - self.dot_along = kwargs.pop('dot_along') - self.dot_cross = kwargs.pop('dot_cross') - self.c0 = kwargs.pop('c0') - self.c1 = kwargs.pop('c1') - self.c2 = kwargs.pop('c2') + self.biases = kwargs.pop('biases') def __repr__(self): return fmt_repr(self) @@ -924,12 +1028,12 @@ def from_json(s): """ d = json.loads(s) - return MsgSsrOrbitClockDepA.from_json_dict(d) + return MsgSsrCodeBiases.from_json_dict(d) @staticmethod def from_json_dict(d): sbp = SBP.from_json_dict(d) - return MsgSsrOrbitClockDepA(sbp, **d) + return MsgSsrCodeBiases(sbp, **d) def from_binary(self, d): @@ -937,7 +1041,7 @@ def from_binary(self, d): the message. """ - p = MsgSsrOrbitClockDepA._parser.parse(d) + p = MsgSsrCodeBiases._parser.parse(d) for n in self.__class__.__slots__: setattr(self, n, getattr(p, n)) @@ -946,7 +1050,7 @@ def to_binary(self): """ c = containerize(exclude_fields(self)) - self.payload = MsgSsrOrbitClockDepA._parser.build(c) + self.payload = MsgSsrCodeBiases._parser.build(c) return self.pack() def into_buffer(self, buf, offset): @@ -954,30 +1058,32 @@ def into_buffer(self, buf, offset): """ self.payload = containerize(exclude_fields(self)) - self.parser = MsgSsrOrbitClockDepA._parser + self.parser = MsgSsrCodeBiases._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( MsgSsrOrbitClockDepA, self).to_json_dict() + d = super( MsgSsrCodeBiases, self).to_json_dict() j = walk_json_dict(exclude_fields(self)) d.update(j) return d -SBP_MSG_SSR_CODE_BIASES = 0x05E1 -class MsgSsrCodeBiases(SBP): - """SBP class for message MSG_SSR_CODE_BIASES (0x05E1). +SBP_MSG_SSR_PHASE_BIASES = 0x05E6 +class MsgSsrPhaseBiases(SBP): + """SBP class for message MSG_SSR_PHASE_BIASES (0x05E6). - You can have MSG_SSR_CODE_BIASES inherit its fields directly + You can have MSG_SSR_PHASE_BIASES inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - The precise code biases message is to be added -to the pseudorange of the corresponding signal -to get corrected pseudorange. It is typically -an equivalent to the 1059 and 1065 RTCM message types + The precise phase biases message contains the biases +to be added to the carrier phase of the corresponding +signal to get corrected carrier phase measurement, as +well as the satellite yaw angle to be applied to compute +the phase wind-up correction. +It is typically an equivalent to the 1265 RTCM message types Parameters @@ -997,8 +1103,20 @@ class MsgSsrCodeBiases(SBP): SSR is used to indicate a change in the SSR generating configuration + dispersive_bias : int + Indicator for the dispersive phase biases property. + + mw_consistency : int + Consistency indicator for Melbourne-Wubbena linear combinations + + yaw : int + Satellite yaw angle + yaw_rate : int + Satellite yaw angle rate biases : array - Code biases for the different satellite signals + Phase biases corrections for a +satellite being tracked. + sender : int Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). @@ -1008,29 +1126,41 @@ class MsgSsrCodeBiases(SBP): 'sid' / construct.Struct(GnssSignal._parser), 'update_interval' / construct.Int8ul, 'iod_ssr' / construct.Int8ul, - construct.GreedyRange('biases' / construct.Struct(CodeBiasesContent._parser)),) + 'dispersive_bias' / construct.Int8ul, + 'mw_consistency' / construct.Int8ul, + 'yaw' / construct.Int16ul, + 'yaw_rate' / construct.Int8sl, + construct.GreedyRange('biases' / construct.Struct(PhaseBiasesContent._parser)),) __slots__ = [ 'time', 'sid', 'update_interval', 'iod_ssr', + 'dispersive_bias', + 'mw_consistency', + 'yaw', + 'yaw_rate', 'biases', ] def __init__(self, sbp=None, **kwargs): if sbp: - super( MsgSsrCodeBiases, + super( MsgSsrPhaseBiases, self).__init__(sbp.msg_type, sbp.sender, sbp.length, sbp.payload, sbp.crc) self.from_binary(sbp.payload) else: - super( MsgSsrCodeBiases, self).__init__() - self.msg_type = SBP_MSG_SSR_CODE_BIASES + super( MsgSsrPhaseBiases, self).__init__() + self.msg_type = SBP_MSG_SSR_PHASE_BIASES self.sender = kwargs.pop('sender', SENDER_ID) self.time = kwargs.pop('time') self.sid = kwargs.pop('sid') self.update_interval = kwargs.pop('update_interval') self.iod_ssr = kwargs.pop('iod_ssr') + self.dispersive_bias = kwargs.pop('dispersive_bias') + self.mw_consistency = kwargs.pop('mw_consistency') + self.yaw = kwargs.pop('yaw') + self.yaw_rate = kwargs.pop('yaw_rate') self.biases = kwargs.pop('biases') def __repr__(self): @@ -1042,12 +1172,12 @@ def from_json(s): """ d = json.loads(s) - return MsgSsrCodeBiases.from_json_dict(d) + return MsgSsrPhaseBiases.from_json_dict(d) @staticmethod def from_json_dict(d): sbp = SBP.from_json_dict(d) - return MsgSsrCodeBiases(sbp, **d) + return MsgSsrPhaseBiases(sbp, **d) def from_binary(self, d): @@ -1055,7 +1185,7 @@ def from_binary(self, d): the message. """ - p = MsgSsrCodeBiases._parser.parse(d) + p = MsgSsrPhaseBiases._parser.parse(d) for n in self.__class__.__slots__: setattr(self, n, getattr(p, n)) @@ -1064,7 +1194,7 @@ def to_binary(self): """ c = containerize(exclude_fields(self)) - self.payload = MsgSsrCodeBiases._parser.build(c) + self.payload = MsgSsrPhaseBiases._parser.build(c) return self.pack() def into_buffer(self, buf, offset): @@ -1072,33 +1202,407 @@ def into_buffer(self, buf, offset): """ self.payload = containerize(exclude_fields(self)) - self.parser = MsgSsrCodeBiases._parser + self.parser = MsgSsrPhaseBiases._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( MsgSsrCodeBiases, self).to_json_dict() + d = super( MsgSsrPhaseBiases, self).to_json_dict() j = walk_json_dict(exclude_fields(self)) d.update(j) return d -SBP_MSG_SSR_PHASE_BIASES = 0x05E6 -class MsgSsrPhaseBiases(SBP): - """SBP class for message MSG_SSR_PHASE_BIASES (0x05E6). +SBP_MSG_SSR_STEC_CORRECTION = 0x05FB +class MsgSsrStecCorrection(SBP): + """SBP class for message MSG_SSR_STEC_CORRECTION (0x05FB). - You can have MSG_SSR_PHASE_BIASES inherit its fields directly + You can have MSG_SSR_STEC_CORRECTION inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - The precise phase biases message contains the biases -to be added to the carrier phase of the corresponding -signal to get corrected carrier phase measurement, as -well as the satellite yaw angle to be applied to compute -the phase wind-up correction. -It is typically an equivalent to the 1265 RTCM message types + The Slant Total Electron Content per space vehicle, given as polynomial +approximation for a given tile. This should be combined with the +MSG_SSR_GRIDDED_CORRECTION message to get the state space representation +of the atmospheric delay. + +It is typically equivalent to the QZSS CLAS Sub Type 8 messages. + + + Parameters + ---------- + sbp : SBP + SBP parent object to inherit from. + header : STECHeader + Header of a STEC polynomial coeffcient message. + stec_sat_list : array + Array of STEC polynomial coeffcients for each space vehicle. + sender : int + Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). + + """ + _parser = construct.Struct( + 'header' / construct.Struct(STECHeader._parser), + construct.GreedyRange('stec_sat_list' / construct.Struct(STECSatElement._parser)),) + __slots__ = [ + 'header', + 'stec_sat_list', + ] + + def __init__(self, sbp=None, **kwargs): + if sbp: + super( MsgSsrStecCorrection, + self).__init__(sbp.msg_type, sbp.sender, sbp.length, + sbp.payload, sbp.crc) + self.from_binary(sbp.payload) + else: + super( MsgSsrStecCorrection, self).__init__() + self.msg_type = SBP_MSG_SSR_STEC_CORRECTION + self.sender = kwargs.pop('sender', SENDER_ID) + self.header = kwargs.pop('header') + self.stec_sat_list = kwargs.pop('stec_sat_list') + + 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 MsgSsrStecCorrection.from_json_dict(d) + + @staticmethod + def from_json_dict(d): + sbp = SBP.from_json_dict(d) + return MsgSsrStecCorrection(sbp, **d) + + + def from_binary(self, d): + """Given a binary payload d, update the appropriate payload fields of + the message. + + """ + p = MsgSsrStecCorrection._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 = MsgSsrStecCorrection._parser.build(c) + return self.pack() + + 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 = MsgSsrStecCorrection._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( MsgSsrStecCorrection, self).to_json_dict() + j = walk_json_dict(exclude_fields(self)) + d.update(j) + return d + +SBP_MSG_SSR_GRIDDED_CORRECTION = 0x05FC +class MsgSsrGriddedCorrection(SBP): + """SBP class for message MSG_SSR_GRIDDED_CORRECTION (0x05FC). + + You can have MSG_SSR_GRIDDED_CORRECTION inherit its fields directly + from an inherited SBP object, or construct it inline using a dict + of its fields. + + + STEC residuals are per space vehicle, troposphere is not. + +It is typically equivalent to the QZSS CLAS Sub Type 9 messages + + + Parameters + ---------- + sbp : SBP + SBP parent object to inherit from. + header : GriddedCorrectionHeader + Header of a gridded correction message + element : GridElement + Tropo and STEC residuals for the given grid point. + + sender : int + Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). + + """ + _parser = construct.Struct( + 'header' / construct.Struct(GriddedCorrectionHeader._parser), + 'element' / construct.Struct(GridElement._parser),) + __slots__ = [ + 'header', + 'element', + ] + + def __init__(self, sbp=None, **kwargs): + if sbp: + super( MsgSsrGriddedCorrection, + self).__init__(sbp.msg_type, sbp.sender, sbp.length, + sbp.payload, sbp.crc) + self.from_binary(sbp.payload) + else: + super( MsgSsrGriddedCorrection, self).__init__() + self.msg_type = SBP_MSG_SSR_GRIDDED_CORRECTION + self.sender = kwargs.pop('sender', SENDER_ID) + self.header = kwargs.pop('header') + self.element = kwargs.pop('element') + + 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 MsgSsrGriddedCorrection.from_json_dict(d) + + @staticmethod + def from_json_dict(d): + sbp = SBP.from_json_dict(d) + return MsgSsrGriddedCorrection(sbp, **d) + + + def from_binary(self, d): + """Given a binary payload d, update the appropriate payload fields of + the message. + + """ + p = MsgSsrGriddedCorrection._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 = MsgSsrGriddedCorrection._parser.build(c) + return self.pack() + + 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 = MsgSsrGriddedCorrection._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( MsgSsrGriddedCorrection, self).to_json_dict() + j = walk_json_dict(exclude_fields(self)) + d.update(j) + return d + +SBP_MSG_SSR_TILE_DEFINITION = 0x05F6 +class MsgSsrTileDefinition(SBP): + """SBP class for message MSG_SSR_TILE_DEFINITION (0x05F6). + + 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. + 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 longtitude. + +The relation between the longtitude 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 longtitude direction. + +See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongtitude. + + rows : int + Number of steps in the latitude direction. + +See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLatitude. + + cols : int + Number of steps in the longtitude direction. + +See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongtitude. + + bitmask : int + 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. + + sender : int + Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). + + """ + _parser = construct.Struct( + 'tile_set_id' / construct.Int8ul, + 'tile_id' / construct.Int8ul, + 'corner_nw_lat' / construct.Int16ul, + 'corner_nw_lon' / construct.Int16ul, + 'spacing_lat' / construct.Int16ul, + 'spacing_lon' / construct.Int16ul, + 'rows' / construct.Int16ul, + 'cols' / construct.Int16ul, + 'bitmask' / construct.Int64ul,) + __slots__ = [ + '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, + self).__init__(sbp.msg_type, sbp.sender, sbp.length, + sbp.payload, sbp.crc) + self.from_binary(sbp.payload) + else: + super( MsgSsrTileDefinition, self).__init__() + self.msg_type = SBP_MSG_SSR_TILE_DEFINITION + self.sender = kwargs.pop('sender', SENDER_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 MsgSsrTileDefinition.from_json_dict(d) + + @staticmethod + def from_json_dict(d): + sbp = SBP.from_json_dict(d) + return MsgSsrTileDefinition(sbp, **d) + + + def from_binary(self, d): + """Given a binary payload d, update the appropriate payload fields of + the message. + + """ + p = MsgSsrTileDefinition._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 = MsgSsrTileDefinition._parser.build(c) + return self.pack() + + 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 = MsgSsrTileDefinition._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( MsgSsrTileDefinition, self).to_json_dict() + j = walk_json_dict(exclude_fields(self)) + d.update(j) + return d + +SBP_MSG_SSR_ORBIT_CLOCK_DEP_A = 0x05DC +class MsgSsrOrbitClockDepA(SBP): + """SBP class for message MSG_SSR_ORBIT_CLOCK_DEP_A (0x05DC). + + You can have MSG_SSR_ORBIT_CLOCK_DEP_A inherit its fields directly + from an inherited SBP object, or construct it inline using a dict + of its fields. + + Parameters ---------- @@ -1117,20 +1621,26 @@ class MsgSsrPhaseBiases(SBP): SSR is used to indicate a change in the SSR generating configuration - dispersive_bias : int - Indicator for the dispersive phase biases property. - - mw_consistency : int - Consistency indicator for Melbourne-Wubbena linear combinations - - yaw : int - Satellite yaw angle - yaw_rate : int - Satellite yaw angle rate - biases : array - Phase biases corrections for a -satellite being tracked. - + iod : int + Issue of broadcast ephemeris data + radial : int + Orbit radial delta correction + along : int + Orbit along delta correction + cross : int + Orbit along delta correction + dot_radial : int + Velocity of orbit radial delta correction + dot_along : int + Velocity of orbit along delta correction + dot_cross : int + Velocity of orbit cross delta correction + c0 : int + C0 polynomial coefficient for correction of broadcast satellite clock + c1 : int + C1 polynomial coefficient for correction of broadcast satellite clock + c2 : int + C2 polynomial coefficient for correction of broadcast satellite clock sender : int Optional sender ID, defaults to SENDER_ID (see sbp/msg.py). @@ -1140,42 +1650,57 @@ class MsgSsrPhaseBiases(SBP): 'sid' / construct.Struct(GnssSignal._parser), 'update_interval' / construct.Int8ul, 'iod_ssr' / construct.Int8ul, - 'dispersive_bias' / construct.Int8ul, - 'mw_consistency' / construct.Int8ul, - 'yaw' / construct.Int16ul, - 'yaw_rate' / construct.Int8sl, - construct.GreedyRange('biases' / construct.Struct(PhaseBiasesContent._parser)),) + 'iod' / construct.Int8ul, + 'radial' / construct.Int32sl, + 'along' / construct.Int32sl, + 'cross' / construct.Int32sl, + 'dot_radial' / construct.Int32sl, + 'dot_along' / construct.Int32sl, + 'dot_cross' / construct.Int32sl, + 'c0' / construct.Int32sl, + 'c1' / construct.Int32sl, + 'c2' / construct.Int32sl,) __slots__ = [ 'time', 'sid', 'update_interval', 'iod_ssr', - 'dispersive_bias', - 'mw_consistency', - 'yaw', - 'yaw_rate', - 'biases', + 'iod', + 'radial', + 'along', + 'cross', + 'dot_radial', + 'dot_along', + 'dot_cross', + 'c0', + 'c1', + 'c2', ] def __init__(self, sbp=None, **kwargs): if sbp: - super( MsgSsrPhaseBiases, + super( MsgSsrOrbitClockDepA, self).__init__(sbp.msg_type, sbp.sender, sbp.length, sbp.payload, sbp.crc) self.from_binary(sbp.payload) else: - super( MsgSsrPhaseBiases, self).__init__() - self.msg_type = SBP_MSG_SSR_PHASE_BIASES + super( MsgSsrOrbitClockDepA, self).__init__() + self.msg_type = SBP_MSG_SSR_ORBIT_CLOCK_DEP_A self.sender = kwargs.pop('sender', SENDER_ID) self.time = kwargs.pop('time') self.sid = kwargs.pop('sid') self.update_interval = kwargs.pop('update_interval') self.iod_ssr = kwargs.pop('iod_ssr') - self.dispersive_bias = kwargs.pop('dispersive_bias') - self.mw_consistency = kwargs.pop('mw_consistency') - self.yaw = kwargs.pop('yaw') - self.yaw_rate = kwargs.pop('yaw_rate') - self.biases = kwargs.pop('biases') + self.iod = kwargs.pop('iod') + self.radial = kwargs.pop('radial') + self.along = kwargs.pop('along') + self.cross = kwargs.pop('cross') + self.dot_radial = kwargs.pop('dot_radial') + self.dot_along = kwargs.pop('dot_along') + self.dot_cross = kwargs.pop('dot_cross') + self.c0 = kwargs.pop('c0') + self.c1 = kwargs.pop('c1') + self.c2 = kwargs.pop('c2') def __repr__(self): return fmt_repr(self) @@ -1186,12 +1711,12 @@ def from_json(s): """ d = json.loads(s) - return MsgSsrPhaseBiases.from_json_dict(d) + return MsgSsrOrbitClockDepA.from_json_dict(d) @staticmethod def from_json_dict(d): sbp = SBP.from_json_dict(d) - return MsgSsrPhaseBiases(sbp, **d) + return MsgSsrOrbitClockDepA(sbp, **d) def from_binary(self, d): @@ -1199,7 +1724,7 @@ def from_binary(self, d): the message. """ - p = MsgSsrPhaseBiases._parser.parse(d) + p = MsgSsrOrbitClockDepA._parser.parse(d) for n in self.__class__.__slots__: setattr(self, n, getattr(p, n)) @@ -1208,7 +1733,7 @@ def to_binary(self): """ c = containerize(exclude_fields(self)) - self.payload = MsgSsrPhaseBiases._parser.build(c) + self.payload = MsgSsrOrbitClockDepA._parser.build(c) return self.pack() def into_buffer(self, buf, offset): @@ -1216,37 +1741,32 @@ def into_buffer(self, buf, offset): """ self.payload = containerize(exclude_fields(self)) - self.parser = MsgSsrPhaseBiases._parser + self.parser = MsgSsrOrbitClockDepA._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( MsgSsrPhaseBiases, self).to_json_dict() + d = super( MsgSsrOrbitClockDepA, self).to_json_dict() j = walk_json_dict(exclude_fields(self)) d.update(j) return d -SBP_MSG_SSR_STEC_CORRECTION = 0x05EB -class MsgSsrStecCorrection(SBP): - """SBP class for message MSG_SSR_STEC_CORRECTION (0x05EB). +SBP_MSG_SSR_STEC_CORRECTION_DEP_A = 0x05EB +class MsgSsrStecCorrectionDepA(SBP): + """SBP class for message MSG_SSR_STEC_CORRECTION_DEP_A (0x05EB). - You can have MSG_SSR_STEC_CORRECTION inherit its fields directly + You can have MSG_SSR_STEC_CORRECTION_DEP_A inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - The STEC per space vehicle, given as polynomial approximation for -a given grid. This should be combined with MSG_SSR_GRIDDED_CORRECTION -message to get the state space representation of the atmospheric -delay. It is typically equivalent to the QZSS CLAS Sub Type 8 messages - Parameters ---------- sbp : SBP SBP parent object to inherit from. - header : STECHeader + header : STECHeaderDepA Header of a STEC message stec_sat_list : array Array of STEC information for each space vehicle @@ -1255,7 +1775,7 @@ class MsgSsrStecCorrection(SBP): """ _parser = construct.Struct( - 'header' / construct.Struct(STECHeader._parser), + 'header' / construct.Struct(STECHeaderDepA._parser), construct.GreedyRange('stec_sat_list' / construct.Struct(STECSatElement._parser)),) __slots__ = [ 'header', @@ -1264,13 +1784,13 @@ class MsgSsrStecCorrection(SBP): def __init__(self, sbp=None, **kwargs): if sbp: - super( MsgSsrStecCorrection, + super( MsgSsrStecCorrectionDepA, self).__init__(sbp.msg_type, sbp.sender, sbp.length, sbp.payload, sbp.crc) self.from_binary(sbp.payload) else: - super( MsgSsrStecCorrection, self).__init__() - self.msg_type = SBP_MSG_SSR_STEC_CORRECTION + super( MsgSsrStecCorrectionDepA, self).__init__() + self.msg_type = SBP_MSG_SSR_STEC_CORRECTION_DEP_A self.sender = kwargs.pop('sender', SENDER_ID) self.header = kwargs.pop('header') self.stec_sat_list = kwargs.pop('stec_sat_list') @@ -1284,12 +1804,12 @@ def from_json(s): """ d = json.loads(s) - return MsgSsrStecCorrection.from_json_dict(d) + return MsgSsrStecCorrectionDepA.from_json_dict(d) @staticmethod def from_json_dict(d): sbp = SBP.from_json_dict(d) - return MsgSsrStecCorrection(sbp, **d) + return MsgSsrStecCorrectionDepA(sbp, **d) def from_binary(self, d): @@ -1297,7 +1817,7 @@ def from_binary(self, d): the message. """ - p = MsgSsrStecCorrection._parser.parse(d) + p = MsgSsrStecCorrectionDepA._parser.parse(d) for n in self.__class__.__slots__: setattr(self, n, getattr(p, n)) @@ -1306,7 +1826,7 @@ def to_binary(self): """ c = containerize(exclude_fields(self)) - self.payload = MsgSsrStecCorrection._parser.build(c) + self.payload = MsgSsrStecCorrectionDepA._parser.build(c) return self.pack() def into_buffer(self, buf, offset): @@ -1314,35 +1834,32 @@ def into_buffer(self, buf, offset): """ self.payload = containerize(exclude_fields(self)) - self.parser = MsgSsrStecCorrection._parser + self.parser = MsgSsrStecCorrectionDepA._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( MsgSsrStecCorrection, self).to_json_dict() + d = super( MsgSsrStecCorrectionDepA, self).to_json_dict() j = walk_json_dict(exclude_fields(self)) d.update(j) return d -SBP_MSG_SSR_GRIDDED_CORRECTION_NO_STD = 0x05F0 -class MsgSsrGriddedCorrectionNoStd(SBP): - """SBP class for message MSG_SSR_GRIDDED_CORRECTION_NO_STD (0x05F0). +SBP_MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A = 0x05F0 +class MsgSsrGriddedCorrectionNoStdDepA(SBP): + """SBP class for message MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A (0x05F0). - You can have MSG_SSR_GRIDDED_CORRECTION_NO_STD inherit its fields directly + You can have MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - This message was deprecated when variances (stddev) -were added. - Parameters ---------- sbp : SBP SBP parent object to inherit from. - header : GriddedCorrectionHeader + header : GriddedCorrectionHeaderDepA Header of a Gridded Correction message element : GridElementNoStd Tropo and STEC residuals for the given grid point @@ -1351,7 +1868,7 @@ class MsgSsrGriddedCorrectionNoStd(SBP): """ _parser = construct.Struct( - 'header' / construct.Struct(GriddedCorrectionHeader._parser), + 'header' / construct.Struct(GriddedCorrectionHeaderDepA._parser), 'element' / construct.Struct(GridElementNoStd._parser),) __slots__ = [ 'header', @@ -1360,13 +1877,13 @@ class MsgSsrGriddedCorrectionNoStd(SBP): def __init__(self, sbp=None, **kwargs): if sbp: - super( MsgSsrGriddedCorrectionNoStd, + super( MsgSsrGriddedCorrectionNoStdDepA, self).__init__(sbp.msg_type, sbp.sender, sbp.length, sbp.payload, sbp.crc) self.from_binary(sbp.payload) else: - super( MsgSsrGriddedCorrectionNoStd, self).__init__() - self.msg_type = SBP_MSG_SSR_GRIDDED_CORRECTION_NO_STD + super( MsgSsrGriddedCorrectionNoStdDepA, self).__init__() + self.msg_type = SBP_MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A self.sender = kwargs.pop('sender', SENDER_ID) self.header = kwargs.pop('header') self.element = kwargs.pop('element') @@ -1380,12 +1897,12 @@ def from_json(s): """ d = json.loads(s) - return MsgSsrGriddedCorrectionNoStd.from_json_dict(d) + return MsgSsrGriddedCorrectionNoStdDepA.from_json_dict(d) @staticmethod def from_json_dict(d): sbp = SBP.from_json_dict(d) - return MsgSsrGriddedCorrectionNoStd(sbp, **d) + return MsgSsrGriddedCorrectionNoStdDepA(sbp, **d) def from_binary(self, d): @@ -1393,7 +1910,7 @@ def from_binary(self, d): the message. """ - p = MsgSsrGriddedCorrectionNoStd._parser.parse(d) + p = MsgSsrGriddedCorrectionNoStdDepA._parser.parse(d) for n in self.__class__.__slots__: setattr(self, n, getattr(p, n)) @@ -1402,7 +1919,7 @@ def to_binary(self): """ c = containerize(exclude_fields(self)) - self.payload = MsgSsrGriddedCorrectionNoStd._parser.build(c) + self.payload = MsgSsrGriddedCorrectionNoStdDepA._parser.build(c) return self.pack() def into_buffer(self, buf, offset): @@ -1410,35 +1927,32 @@ def into_buffer(self, buf, offset): """ self.payload = containerize(exclude_fields(self)) - self.parser = MsgSsrGriddedCorrectionNoStd._parser + self.parser = MsgSsrGriddedCorrectionNoStdDepA._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( MsgSsrGriddedCorrectionNoStd, self).to_json_dict() + d = super( MsgSsrGriddedCorrectionNoStdDepA, self).to_json_dict() j = walk_json_dict(exclude_fields(self)) d.update(j) return d -SBP_MSG_SSR_GRIDDED_CORRECTION = 0x05FA -class MsgSsrGriddedCorrection(SBP): - """SBP class for message MSG_SSR_GRIDDED_CORRECTION (0x05FA). +SBP_MSG_SSR_GRIDDED_CORRECTION_DEP_A = 0x05FA +class MsgSsrGriddedCorrectionDepA(SBP): + """SBP class for message MSG_SSR_GRIDDED_CORRECTION_DEP_A (0x05FA). - You can have MSG_SSR_GRIDDED_CORRECTION inherit its fields directly + You can have MSG_SSR_GRIDDED_CORRECTION_DEP_A inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - STEC residuals are per space vehicle, tropo is not. -It is typically equivalent to the QZSS CLAS Sub Type 9 messages - Parameters ---------- sbp : SBP SBP parent object to inherit from. - header : GriddedCorrectionHeader + header : GriddedCorrectionHeaderDepA Header of a Gridded Correction message element : GridElement Tropo and STEC residuals for the given grid point (mean @@ -1449,7 +1963,7 @@ class MsgSsrGriddedCorrection(SBP): """ _parser = construct.Struct( - 'header' / construct.Struct(GriddedCorrectionHeader._parser), + 'header' / construct.Struct(GriddedCorrectionHeaderDepA._parser), 'element' / construct.Struct(GridElement._parser),) __slots__ = [ 'header', @@ -1458,13 +1972,13 @@ class MsgSsrGriddedCorrection(SBP): def __init__(self, sbp=None, **kwargs): if sbp: - super( MsgSsrGriddedCorrection, + super( MsgSsrGriddedCorrectionDepA, self).__init__(sbp.msg_type, sbp.sender, sbp.length, sbp.payload, sbp.crc) self.from_binary(sbp.payload) else: - super( MsgSsrGriddedCorrection, self).__init__() - self.msg_type = SBP_MSG_SSR_GRIDDED_CORRECTION + super( MsgSsrGriddedCorrectionDepA, self).__init__() + self.msg_type = SBP_MSG_SSR_GRIDDED_CORRECTION_DEP_A self.sender = kwargs.pop('sender', SENDER_ID) self.header = kwargs.pop('header') self.element = kwargs.pop('element') @@ -1478,12 +1992,12 @@ def from_json(s): """ d = json.loads(s) - return MsgSsrGriddedCorrection.from_json_dict(d) + return MsgSsrGriddedCorrectionDepA.from_json_dict(d) @staticmethod def from_json_dict(d): sbp = SBP.from_json_dict(d) - return MsgSsrGriddedCorrection(sbp, **d) + return MsgSsrGriddedCorrectionDepA(sbp, **d) def from_binary(self, d): @@ -1491,7 +2005,7 @@ def from_binary(self, d): the message. """ - p = MsgSsrGriddedCorrection._parser.parse(d) + p = MsgSsrGriddedCorrectionDepA._parser.parse(d) for n in self.__class__.__slots__: setattr(self, n, getattr(p, n)) @@ -1500,7 +2014,7 @@ def to_binary(self): """ c = containerize(exclude_fields(self)) - self.payload = MsgSsrGriddedCorrection._parser.build(c) + self.payload = MsgSsrGriddedCorrectionDepA._parser.build(c) return self.pack() def into_buffer(self, buf, offset): @@ -1508,35 +2022,32 @@ def into_buffer(self, buf, offset): """ self.payload = containerize(exclude_fields(self)) - self.parser = MsgSsrGriddedCorrection._parser + self.parser = MsgSsrGriddedCorrectionDepA._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( MsgSsrGriddedCorrection, self).to_json_dict() + d = super( MsgSsrGriddedCorrectionDepA, self).to_json_dict() j = walk_json_dict(exclude_fields(self)) d.update(j) return d -SBP_MSG_SSR_GRID_DEFINITION = 0x05F5 -class MsgSsrGridDefinition(SBP): - """SBP class for message MSG_SSR_GRID_DEFINITION (0x05F5). +SBP_MSG_SSR_GRID_DEFINITION_DEP_A = 0x05F5 +class MsgSsrGridDefinitionDepA(SBP): + """SBP class for message MSG_SSR_GRID_DEFINITION_DEP_A (0x05F5). - You can have MSG_SSR_GRID_DEFINITION inherit its fields directly + You can have MSG_SSR_GRID_DEFINITION_DEP_A inherit its fields directly from an inherited SBP object, or construct it inline using a dict of its fields. - Based on the 3GPP proposal R2-1906781 which is in turn based on -OMA-LPPe-ValidityArea from OMA-TS-LPPe-V2_0-20141202-C - Parameters ---------- sbp : SBP SBP parent object to inherit from. - header : GridDefinitionHeader + header : GridDefinitionHeaderDepA Header of a Gridded Correction message rle_list : array Run Length Encode list of quadrants that contain valid data. @@ -1549,7 +2060,7 @@ class MsgSsrGridDefinition(SBP): """ _parser = construct.Struct( - 'header' / construct.Struct(GridDefinitionHeader._parser), + 'header' / construct.Struct(GridDefinitionHeaderDepA._parser), construct.GreedyRange('rle_list' / construct.Int8ul),) __slots__ = [ 'header', @@ -1558,13 +2069,13 @@ class MsgSsrGridDefinition(SBP): def __init__(self, sbp=None, **kwargs): if sbp: - super( MsgSsrGridDefinition, + super( MsgSsrGridDefinitionDepA, self).__init__(sbp.msg_type, sbp.sender, sbp.length, sbp.payload, sbp.crc) self.from_binary(sbp.payload) else: - super( MsgSsrGridDefinition, self).__init__() - self.msg_type = SBP_MSG_SSR_GRID_DEFINITION + super( MsgSsrGridDefinitionDepA, self).__init__() + self.msg_type = SBP_MSG_SSR_GRID_DEFINITION_DEP_A self.sender = kwargs.pop('sender', SENDER_ID) self.header = kwargs.pop('header') self.rle_list = kwargs.pop('rle_list') @@ -1578,12 +2089,12 @@ def from_json(s): """ d = json.loads(s) - return MsgSsrGridDefinition.from_json_dict(d) + return MsgSsrGridDefinitionDepA.from_json_dict(d) @staticmethod def from_json_dict(d): sbp = SBP.from_json_dict(d) - return MsgSsrGridDefinition(sbp, **d) + return MsgSsrGridDefinitionDepA(sbp, **d) def from_binary(self, d): @@ -1591,7 +2102,7 @@ def from_binary(self, d): the message. """ - p = MsgSsrGridDefinition._parser.parse(d) + p = MsgSsrGridDefinitionDepA._parser.parse(d) for n in self.__class__.__slots__: setattr(self, n, getattr(p, n)) @@ -1600,7 +2111,7 @@ def to_binary(self): """ c = containerize(exclude_fields(self)) - self.payload = MsgSsrGridDefinition._parser.build(c) + self.payload = MsgSsrGridDefinitionDepA._parser.build(c) return self.pack() def into_buffer(self, buf, offset): @@ -1608,13 +2119,13 @@ def into_buffer(self, buf, offset): """ self.payload = containerize(exclude_fields(self)) - self.parser = MsgSsrGridDefinition._parser + self.parser = MsgSsrGridDefinitionDepA._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( MsgSsrGridDefinition, self).to_json_dict() + d = super( MsgSsrGridDefinitionDepA, self).to_json_dict() j = walk_json_dict(exclude_fields(self)) d.update(j) return d @@ -1622,11 +2133,14 @@ def to_json_dict(self): msg_classes = { 0x05DD: MsgSsrOrbitClock, - 0x05DC: MsgSsrOrbitClockDepA, 0x05E1: MsgSsrCodeBiases, 0x05E6: MsgSsrPhaseBiases, - 0x05EB: MsgSsrStecCorrection, - 0x05F0: MsgSsrGriddedCorrectionNoStd, - 0x05FA: MsgSsrGriddedCorrection, - 0x05F5: MsgSsrGridDefinition, + 0x05FB: MsgSsrStecCorrection, + 0x05FC: MsgSsrGriddedCorrection, + 0x05F6: MsgSsrTileDefinition, + 0x05DC: MsgSsrOrbitClockDepA, + 0x05EB: MsgSsrStecCorrectionDepA, + 0x05F0: MsgSsrGriddedCorrectionNoStdDepA, + 0x05FA: MsgSsrGriddedCorrectionDepA, + 0x05F5: MsgSsrGridDefinitionDepA, } \ No newline at end of file diff --git a/python/tests/sbp/test_table.py b/python/tests/sbp/test_table.py index 1256bd7390..f0f7399c2e 100644 --- a/python/tests/sbp/test_table.py +++ b/python/tests/sbp/test_table.py @@ -45,7 +45,7 @@ def test_table_count(): Test number of available messages to deserialize. """ - number_of_messages = 191 + number_of_messages = 194 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 01b8be5f4d..27cc79272b 100644 --- a/rust/sbp/src/messages/mod.rs +++ b/rust/sbp/src/messages/mod.rs @@ -194,13 +194,16 @@ use self::solution_meta::IMUInputType; use self::solution_meta::MsgSolnMeta; use self::solution_meta::OdoInputType; use self::ssr::MsgSsrCodeBiases; -use self::ssr::MsgSsrGridDefinition; +use self::ssr::MsgSsrGridDefinitionDepA; use self::ssr::MsgSsrGriddedCorrection; -use self::ssr::MsgSsrGriddedCorrectionNoStd; +use self::ssr::MsgSsrGriddedCorrectionDepA; +use self::ssr::MsgSsrGriddedCorrectionNoStdDepA; use self::ssr::MsgSsrOrbitClock; use self::ssr::MsgSsrOrbitClockDepA; use self::ssr::MsgSsrPhaseBiases; use self::ssr::MsgSsrStecCorrection; +use self::ssr::MsgSsrStecCorrectionDepA; +use self::ssr::MsgSsrTileDefinition; use self::system::MsgCsacTelemetry; use self::system::MsgCsacTelemetryLabels; use self::system::MsgDgnssStatus; @@ -395,9 +398,12 @@ pub enum SBP { MsgSsrOrbitClock(MsgSsrOrbitClock), MsgSsrCodeBiases(MsgSsrCodeBiases), MsgSsrPhaseBiases(MsgSsrPhaseBiases), + MsgSsrStecCorrectionDepA(MsgSsrStecCorrectionDepA), + MsgSsrGriddedCorrectionNoStdDepA(MsgSsrGriddedCorrectionNoStdDepA), + MsgSsrGridDefinitionDepA(MsgSsrGridDefinitionDepA), + MsgSsrTileDefinition(MsgSsrTileDefinition), + MsgSsrGriddedCorrectionDepA(MsgSsrGriddedCorrectionDepA), MsgSsrStecCorrection(MsgSsrStecCorrection), - MsgSsrGriddedCorrectionNoStd(MsgSsrGriddedCorrectionNoStd), - MsgSsrGridDefinition(MsgSsrGridDefinition), MsgSsrGriddedCorrection(MsgSsrGriddedCorrection), MsgOsr(MsgOsr), MsgUserData(MsgUserData), @@ -1217,21 +1223,36 @@ impl SBP { Ok(SBP::MsgSsrPhaseBiases(msg)) } 1515 => { - let mut msg = MsgSsrStecCorrection::parse(payload)?; + let mut msg = MsgSsrStecCorrectionDepA::parse(payload)?; msg.set_sender_id(sender_id); - Ok(SBP::MsgSsrStecCorrection(msg)) + Ok(SBP::MsgSsrStecCorrectionDepA(msg)) } 1520 => { - let mut msg = MsgSsrGriddedCorrectionNoStd::parse(payload)?; + let mut msg = MsgSsrGriddedCorrectionNoStdDepA::parse(payload)?; msg.set_sender_id(sender_id); - Ok(SBP::MsgSsrGriddedCorrectionNoStd(msg)) + Ok(SBP::MsgSsrGriddedCorrectionNoStdDepA(msg)) } 1525 => { - let mut msg = MsgSsrGridDefinition::parse(payload)?; + let mut msg = MsgSsrGridDefinitionDepA::parse(payload)?; msg.set_sender_id(sender_id); - Ok(SBP::MsgSsrGridDefinition(msg)) + Ok(SBP::MsgSsrGridDefinitionDepA(msg)) + } + 1526 => { + let mut msg = MsgSsrTileDefinition::parse(payload)?; + msg.set_sender_id(sender_id); + Ok(SBP::MsgSsrTileDefinition(msg)) } 1530 => { + let mut msg = MsgSsrGriddedCorrectionDepA::parse(payload)?; + msg.set_sender_id(sender_id); + Ok(SBP::MsgSsrGriddedCorrectionDepA(msg)) + } + 1531 => { + let mut msg = MsgSsrStecCorrection::parse(payload)?; + msg.set_sender_id(sender_id); + Ok(SBP::MsgSsrStecCorrection(msg)) + } + 1532 => { let mut msg = MsgSsrGriddedCorrection::parse(payload)?; msg.set_sender_id(sender_id); Ok(SBP::MsgSsrGriddedCorrection(msg)) @@ -1561,9 +1582,12 @@ impl SBP { SBP::MsgSsrOrbitClock(msg) => msg, SBP::MsgSsrCodeBiases(msg) => msg, SBP::MsgSsrPhaseBiases(msg) => msg, + SBP::MsgSsrStecCorrectionDepA(msg) => msg, + SBP::MsgSsrGriddedCorrectionNoStdDepA(msg) => msg, + SBP::MsgSsrGridDefinitionDepA(msg) => msg, + SBP::MsgSsrTileDefinition(msg) => msg, + SBP::MsgSsrGriddedCorrectionDepA(msg) => msg, SBP::MsgSsrStecCorrection(msg) => msg, - SBP::MsgSsrGriddedCorrectionNoStd(msg) => msg, - SBP::MsgSsrGridDefinition(msg) => msg, SBP::MsgSsrGriddedCorrection(msg) => msg, SBP::MsgOsr(msg) => msg, SBP::MsgUserData(msg) => msg, diff --git a/rust/sbp/src/messages/observation.rs b/rust/sbp/src/messages/observation.rs index 951794860d..fe7c5745f9 100644 --- a/rust/sbp/src/messages/observation.rs +++ b/rust/sbp/src/messages/observation.rs @@ -1232,9 +1232,11 @@ pub struct MsgEphemerisBds { pub af2: f32, /// Clock reference pub toc: GPSTimeSec, - /// Issue of ephemeris data + /// Issue of ephemeris data Calculated from the navigation data parameter + /// t_oe per RTCM/CSNO recommendation: IODE = mod (t_oe / 720, 240) pub iode: u8, - /// Issue of clock data + /// Issue of clock data Calculated from the navigation data parameter t_oe + /// per RTCM/CSNO recommendation: IODE = mod (t_oc / 720, 240) pub iodc: u16, } @@ -2183,11 +2185,11 @@ pub struct MsgEphemerisGal { pub af2: f32, /// Clock reference pub toc: GPSTimeSec, - /// Issue of ephemeris data + /// Issue of data (IODnav) pub iode: u16, - /// Issue of clock data + /// Issue of data (IODnav). Always equal to iode pub iodc: u16, - /// 0=I/NAV, 1=F/NAV, ... + /// 0=I/NAV, 1=F/NAV pub source: u8, } @@ -2362,9 +2364,9 @@ pub struct MsgEphemerisGalDepA { pub af2: f32, /// Clock reference pub toc: GPSTimeSec, - /// Issue of ephemeris data + /// Issue of data (IODnav) pub iode: u16, - /// Issue of clock data + /// Issue of data (IODnav). Always equal to iode pub iodc: u16, } @@ -2507,7 +2509,7 @@ pub struct MsgEphemerisGlo { pub acc: Vec, /// Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid pub fcn: u8, - /// Issue of ephemeris data + /// Issue of data. Equal to the 7 bits of the immediate data word t_b pub iod: u8, } @@ -2861,7 +2863,7 @@ pub struct MsgEphemerisGloDepD { pub acc: Vec, /// Frequency slot. FCN+8 (that is [1..14]). 0 or 0xFF for invalid pub fcn: u8, - /// Issue of ephemeris data + /// Issue of data. Equal to the 7 bits of the immediate data word t_b pub iod: u8, } diff --git a/rust/sbp/src/messages/ssr.rs b/rust/sbp/src/messages/ssr.rs index 60ef35fefa..99b6b71928 100644 --- a/rust/sbp/src/messages/ssr.rs +++ b/rust/sbp/src/messages/ssr.rs @@ -90,13 +90,13 @@ impl crate::serialize::SbpSerialize for CodeBiasesContent { #[cfg_attr(feature = "sbp_serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone)] #[allow(non_snake_case)] -pub struct GridDefinitionHeader { +pub struct GridDefinitionHeaderDepA { /// region_size (deg) = 10 / region_size_inverse 0 is an invalid value. pub region_size_inverse: u8, - /// grid height (deg) = grid idth (deg) = area_width / region_size 0 is an + /// grid height (deg) = grid width (deg) = area_width / region_size 0 is an /// invalid value. pub area_width: u16, - /// North-West corner latitdue (deg) = region_size * lat_nw_corner_enc - 90 + /// North-West corner latitude (deg) = region_size * lat_nw_corner_enc - 90 pub lat_nw_corner_enc: u16, /// North-West corner longtitude (deg) = region_size * lon_nw_corner_enc - /// 180 @@ -107,10 +107,10 @@ pub struct GridDefinitionHeader { pub seq_num: u8, } -impl GridDefinitionHeader { +impl GridDefinitionHeaderDepA { #[rustfmt::skip] - pub fn parse(_buf: &mut &[u8]) -> Result { - Ok( GridDefinitionHeader{ + pub fn parse(_buf: &mut &[u8]) -> Result { + Ok( GridDefinitionHeaderDepA{ region_size_inverse: _buf.read_u8()?, area_width: _buf.read_u16::()?, lat_nw_corner_enc: _buf.read_u16::()?, @@ -119,10 +119,10 @@ impl GridDefinitionHeader { seq_num: _buf.read_u8()?, } ) } - pub fn parse_array(buf: &mut &[u8]) -> Result, crate::Error> { + pub fn parse_array(buf: &mut &[u8]) -> Result, crate::Error> { let mut v = Vec::new(); while buf.len() > 0 { - v.push(GridDefinitionHeader::parse(buf)?); + v.push(GridDefinitionHeaderDepA::parse(buf)?); } Ok(v) } @@ -130,16 +130,16 @@ impl GridDefinitionHeader { pub fn parse_array_limit( buf: &mut &[u8], n: usize, - ) -> Result, crate::Error> { + ) -> Result, crate::Error> { let mut v = Vec::new(); for _ in 0..n { - v.push(GridDefinitionHeader::parse(buf)?); + v.push(GridDefinitionHeaderDepA::parse(buf)?); } Ok(v) } } -impl crate::serialize::SbpSerialize for GridDefinitionHeader { +impl crate::serialize::SbpSerialize for GridDefinitionHeaderDepA { #[allow(unused_variables)] fn append_to_sbp_buffer(&self, buf: &mut Vec) { self.region_size_inverse.append_to_sbp_buffer(buf); @@ -285,9 +285,9 @@ impl crate::serialize::SbpSerialize for GridElementNoStd { } } -/// Header for MSG_SSR_GRIDDED_CORRECTION +/// Header for the MSG_SSR_GRIDDED_CORRECTION message. /// -/// The 3GPP message contains nested variable length arrays +/// The LPP message contains nested variable length arrays /// which are not suppported in SBP, so each grid point will /// be identified by the index. /// @@ -295,6 +295,10 @@ impl crate::serialize::SbpSerialize for GridElementNoStd { #[derive(Debug, Clone)] #[allow(non_snake_case)] pub struct GriddedCorrectionHeader { + /// Unique identifier of the tile set this tile belongs to. + pub tile_set_id: u8, + /// Unique identifier of this tile in the tile set. + pub tile_id: u8, /// GNSS reference time of the correction pub time: GPSTimeSec, /// Number of messages in the dataset @@ -315,6 +319,8 @@ impl GriddedCorrectionHeader { #[rustfmt::skip] pub fn parse(_buf: &mut &[u8]) -> Result { Ok( GriddedCorrectionHeader{ + tile_set_id: _buf.read_u8()?, + tile_id: _buf.read_u8()?, time: GPSTimeSec::parse(_buf)?, num_msgs: _buf.read_u16::()?, seq_num: _buf.read_u16::()?, @@ -344,6 +350,91 @@ impl GriddedCorrectionHeader { } impl crate::serialize::SbpSerialize for GriddedCorrectionHeader { + #[allow(unused_variables)] + fn append_to_sbp_buffer(&self, buf: &mut Vec) { + self.tile_set_id.append_to_sbp_buffer(buf); + self.tile_id.append_to_sbp_buffer(buf); + self.time.append_to_sbp_buffer(buf); + self.num_msgs.append_to_sbp_buffer(buf); + self.seq_num.append_to_sbp_buffer(buf); + self.update_interval.append_to_sbp_buffer(buf); + self.iod_atmo.append_to_sbp_buffer(buf); + self.tropo_quality_indicator.append_to_sbp_buffer(buf); + } + + fn sbp_size(&self) -> usize { + let mut size = 0; + size += self.tile_set_id.sbp_size(); + size += self.tile_id.sbp_size(); + size += self.time.sbp_size(); + size += self.num_msgs.sbp_size(); + size += self.seq_num.sbp_size(); + size += self.update_interval.sbp_size(); + size += self.iod_atmo.sbp_size(); + size += self.tropo_quality_indicator.sbp_size(); + size + } +} + +/// Header for MSG_SSR_GRIDDED_CORRECTION_DEP +/// +/// The 3GPP message contains nested variable length arrays +/// which are not suppported in SBP, so each grid point will +/// be identified by the index. +/// +#[cfg_attr(feature = "sbp_serde", derive(Serialize, Deserialize))] +#[derive(Debug, Clone)] +#[allow(non_snake_case)] +pub struct GriddedCorrectionHeaderDepA { + /// GNSS reference time of the correction + pub time: GPSTimeSec, + /// Number of messages in the dataset + pub num_msgs: u16, + /// Position of this message in the dataset + pub seq_num: u16, + /// Update interval between consecutive corrections. Encoded following RTCM + /// DF391 specification. + pub update_interval: u8, + /// IOD of the SSR atmospheric correction + pub iod_atmo: u8, + /// Quality of the troposphere data. Encoded following RTCM DF389 + /// specifcation in units of m. + pub tropo_quality_indicator: u8, +} + +impl GriddedCorrectionHeaderDepA { + #[rustfmt::skip] + pub fn parse(_buf: &mut &[u8]) -> Result { + Ok( GriddedCorrectionHeaderDepA{ + time: GPSTimeSec::parse(_buf)?, + num_msgs: _buf.read_u16::()?, + seq_num: _buf.read_u16::()?, + update_interval: _buf.read_u8()?, + iod_atmo: _buf.read_u8()?, + tropo_quality_indicator: _buf.read_u8()?, + } ) + } + pub fn parse_array(buf: &mut &[u8]) -> Result, crate::Error> { + let mut v = Vec::new(); + while buf.len() > 0 { + v.push(GriddedCorrectionHeaderDepA::parse(buf)?); + } + Ok(v) + } + + pub fn parse_array_limit( + buf: &mut &[u8], + n: usize, + ) -> Result, crate::Error> { + let mut v = Vec::new(); + for _ in 0..n { + v.push(GriddedCorrectionHeaderDepA::parse(buf)?); + } + Ok(v) + } +} + +impl crate::serialize::SbpSerialize for GriddedCorrectionHeaderDepA { #[allow(unused_variables)] fn append_to_sbp_buffer(&self, buf: &mut Vec) { self.time.append_to_sbp_buffer(buf); @@ -445,9 +536,10 @@ impl crate::serialize::SbpSerialize for MsgSsrCodeBiases { } } -/// Gridded troposphere and STEC residuals +/// Gridded troposphere and STEC correction residuals. +/// +/// STEC residuals are per space vehicle, troposphere is not. /// -/// STEC residuals are per space vehicle, tropo is not. /// It is typically equivalent to the QZSS CLAS Sub Type 9 messages /// #[cfg_attr(feature = "sbp_serde", derive(Serialize, Deserialize))] @@ -455,10 +547,9 @@ impl crate::serialize::SbpSerialize for MsgSsrCodeBiases { #[allow(non_snake_case)] pub struct MsgSsrGriddedCorrection { pub sender_id: Option, - /// Header of a Gridded Correction message + /// Header of a gridded correction message pub header: GriddedCorrectionHeader, - /// Tropo and STEC residuals for the given grid point (mean and standard - /// deviation) + /// Tropo and STEC residuals for the given grid point. pub element: GridElement, } @@ -474,7 +565,7 @@ impl MsgSsrGriddedCorrection { } impl super::SBPMessage for MsgSsrGriddedCorrection { fn get_message_type(&self) -> u16 { - 1530 + 1532 } fn get_sender_id(&self) -> Option { @@ -506,33 +597,84 @@ impl crate::serialize::SbpSerialize for MsgSsrGriddedCorrection { } } -/// Gridded troposphere and STEC residuals -/// -/// This message was deprecated when variances (stddev) -/// were added. -/// #[cfg_attr(feature = "sbp_serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone)] #[allow(non_snake_case)] -pub struct MsgSsrGriddedCorrectionNoStd { +pub struct MsgSsrGriddedCorrectionDepA { pub sender_id: Option, /// Header of a Gridded Correction message - pub header: GriddedCorrectionHeader, + pub header: GriddedCorrectionHeaderDepA, + /// Tropo and STEC residuals for the given grid point (mean and standard + /// deviation) + pub element: GridElement, +} + +impl MsgSsrGriddedCorrectionDepA { + #[rustfmt::skip] + pub fn parse(_buf: &mut &[u8]) -> Result { + Ok( MsgSsrGriddedCorrectionDepA{ + sender_id: None, + header: GriddedCorrectionHeaderDepA::parse(_buf)?, + element: GridElement::parse(_buf)?, + } ) + } +} +impl super::SBPMessage for MsgSsrGriddedCorrectionDepA { + fn get_message_type(&self) -> u16 { + 1530 + } + + fn get_sender_id(&self) -> Option { + self.sender_id + } + + fn set_sender_id(&mut self, new_id: u16) { + self.sender_id = Some(new_id); + } + + fn to_frame(&self) -> std::result::Result, crate::framer::FramerError> { + let trait_object = self as &dyn super::SBPMessage; + crate::framer::to_frame(trait_object) + } +} + +impl crate::serialize::SbpSerialize for MsgSsrGriddedCorrectionDepA { + #[allow(unused_variables)] + fn append_to_sbp_buffer(&self, buf: &mut Vec) { + self.header.append_to_sbp_buffer(buf); + self.element.append_to_sbp_buffer(buf); + } + + fn sbp_size(&self) -> usize { + let mut size = 0; + size += self.header.sbp_size(); + size += self.element.sbp_size(); + size + } +} + +#[cfg_attr(feature = "sbp_serde", derive(Serialize, Deserialize))] +#[derive(Debug, Clone)] +#[allow(non_snake_case)] +pub struct MsgSsrGriddedCorrectionNoStdDepA { + pub sender_id: Option, + /// Header of a Gridded Correction message + pub header: GriddedCorrectionHeaderDepA, /// Tropo and STEC residuals for the given grid point pub element: GridElementNoStd, } -impl MsgSsrGriddedCorrectionNoStd { +impl MsgSsrGriddedCorrectionNoStdDepA { #[rustfmt::skip] - pub fn parse(_buf: &mut &[u8]) -> Result { - Ok( MsgSsrGriddedCorrectionNoStd{ + pub fn parse(_buf: &mut &[u8]) -> Result { + Ok( MsgSsrGriddedCorrectionNoStdDepA{ sender_id: None, - header: GriddedCorrectionHeader::parse(_buf)?, + header: GriddedCorrectionHeaderDepA::parse(_buf)?, element: GridElementNoStd::parse(_buf)?, } ) } } -impl super::SBPMessage for MsgSsrGriddedCorrectionNoStd { +impl super::SBPMessage for MsgSsrGriddedCorrectionNoStdDepA { fn get_message_type(&self) -> u16 { 1520 } @@ -551,7 +693,7 @@ impl super::SBPMessage for MsgSsrGriddedCorrectionNoStd { } } -impl crate::serialize::SbpSerialize for MsgSsrGriddedCorrectionNoStd { +impl crate::serialize::SbpSerialize for MsgSsrGriddedCorrectionNoStdDepA { #[allow(unused_variables)] fn append_to_sbp_buffer(&self, buf: &mut Vec) { self.header.append_to_sbp_buffer(buf); @@ -566,18 +708,13 @@ impl crate::serialize::SbpSerialize for MsgSsrGriddedCorrectionNoStd { } } -/// Definition of the grid for STEC and tropo messages -/// -/// Based on the 3GPP proposal R2-1906781 which is in turn based on -/// OMA-LPPe-ValidityArea from OMA-TS-LPPe-V2_0-20141202-C -/// #[cfg_attr(feature = "sbp_serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone)] #[allow(non_snake_case)] -pub struct MsgSsrGridDefinition { +pub struct MsgSsrGridDefinitionDepA { pub sender_id: Option, /// Header of a Gridded Correction message - pub header: GridDefinitionHeader, + pub header: GridDefinitionHeaderDepA, /// Run Length Encode list of quadrants that contain valid data. The spec /// describes the encoding scheme in detail, but essentially the index of /// the quadrants that contain transitions between valid and invalid (and @@ -585,17 +722,17 @@ pub struct MsgSsrGridDefinition { pub rle_list: Vec, } -impl MsgSsrGridDefinition { +impl MsgSsrGridDefinitionDepA { #[rustfmt::skip] - pub fn parse(_buf: &mut &[u8]) -> Result { - Ok( MsgSsrGridDefinition{ + pub fn parse(_buf: &mut &[u8]) -> Result { + Ok( MsgSsrGridDefinitionDepA{ sender_id: None, - header: GridDefinitionHeader::parse(_buf)?, + header: GridDefinitionHeaderDepA::parse(_buf)?, rle_list: crate::parser::read_u8_array(_buf)?, } ) } } -impl super::SBPMessage for MsgSsrGridDefinition { +impl super::SBPMessage for MsgSsrGridDefinitionDepA { fn get_message_type(&self) -> u16 { 1525 } @@ -614,7 +751,7 @@ impl super::SBPMessage for MsgSsrGridDefinition { } } -impl crate::serialize::SbpSerialize for MsgSsrGridDefinition { +impl crate::serialize::SbpSerialize for MsgSsrGridDefinitionDepA { #[allow(unused_variables)] fn append_to_sbp_buffer(&self, buf: &mut Vec) { self.header.append_to_sbp_buffer(buf); @@ -753,13 +890,6 @@ impl crate::serialize::SbpSerialize for MsgSsrOrbitClock { } } -/// Precise orbit and clock correction -/// -/// The precise orbit and clock correction message is -/// to be applied as a delta correction to broadcast -/// ephemeris and is typically an equivalent to the 1060 -/// and 1066 RTCM message types -/// #[cfg_attr(feature = "sbp_serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone)] #[allow(non_snake_case)] @@ -978,21 +1108,23 @@ impl crate::serialize::SbpSerialize for MsgSsrPhaseBiases { } } -/// Slant Total Electron Content +/// STEC correction polynomial coeffcients. /// -/// The STEC per space vehicle, given as polynomial approximation for -/// a given grid. This should be combined with MSG_SSR_GRIDDED_CORRECTION -/// message to get the state space representation of the atmospheric -/// delay. It is typically equivalent to the QZSS CLAS Sub Type 8 messages +/// The Slant Total Electron Content per space vehicle, given as polynomial +/// approximation for a given tile. This should be combined with the +/// MSG_SSR_GRIDDED_CORRECTION message to get the state space representation +/// of the atmospheric delay. +/// +/// It is typically equivalent to the QZSS CLAS Sub Type 8 messages. /// #[cfg_attr(feature = "sbp_serde", derive(Serialize, Deserialize))] #[derive(Debug, Clone)] #[allow(non_snake_case)] pub struct MsgSsrStecCorrection { pub sender_id: Option, - /// Header of a STEC message + /// Header of a STEC polynomial coeffcient message. pub header: STECHeader, - /// Array of STEC information for each space vehicle + /// Array of STEC polynomial coeffcients for each space vehicle. pub stec_sat_list: Vec, } @@ -1008,7 +1140,7 @@ impl MsgSsrStecCorrection { } impl super::SBPMessage for MsgSsrStecCorrection { fn get_message_type(&self) -> u16 { - 1515 + 1531 } fn get_sender_id(&self) -> Option { @@ -1040,6 +1172,182 @@ impl crate::serialize::SbpSerialize for MsgSsrStecCorrection { } } +#[cfg_attr(feature = "sbp_serde", derive(Serialize, Deserialize))] +#[derive(Debug, Clone)] +#[allow(non_snake_case)] +pub struct MsgSsrStecCorrectionDepA { + pub sender_id: Option, + /// Header of a STEC message + pub header: STECHeaderDepA, + /// Array of STEC information for each space vehicle + pub stec_sat_list: Vec, +} + +impl MsgSsrStecCorrectionDepA { + #[rustfmt::skip] + pub fn parse(_buf: &mut &[u8]) -> Result { + Ok( MsgSsrStecCorrectionDepA{ + sender_id: None, + header: STECHeaderDepA::parse(_buf)?, + stec_sat_list: STECSatElement::parse_array(_buf)?, + } ) + } +} +impl super::SBPMessage for MsgSsrStecCorrectionDepA { + fn get_message_type(&self) -> u16 { + 1515 + } + + fn get_sender_id(&self) -> Option { + self.sender_id + } + + fn set_sender_id(&mut self, new_id: u16) { + self.sender_id = Some(new_id); + } + + fn to_frame(&self) -> std::result::Result, crate::framer::FramerError> { + let trait_object = self as &dyn super::SBPMessage; + crate::framer::to_frame(trait_object) + } +} + +impl crate::serialize::SbpSerialize for MsgSsrStecCorrectionDepA { + #[allow(unused_variables)] + fn append_to_sbp_buffer(&self, buf: &mut Vec) { + self.header.append_to_sbp_buffer(buf); + self.stec_sat_list.append_to_sbp_buffer(buf); + } + + fn sbp_size(&self) -> usize { + let mut size = 0; + size += self.header.sbp_size(); + size += self.stec_sat_list.sbp_size(); + size + } +} + +/// 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. +/// +#[cfg_attr(feature = "sbp_serde", derive(Serialize, Deserialize))] +#[derive(Debug, Clone)] +#[allow(non_snake_case)] +pub struct MsgSsrTileDefinition { + pub sender_id: Option, + /// Unique identifier of the tile set this tile belongs to. + pub tile_set_id: u8, + /// Unique identifier of this tile in the tile set. See GNSS-SSR- + /// ArrayOfCorrectionPoints field correctionPointSetID. + pub tile_id: u8, + /// 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. + pub corner_nw_lat: u16, + /// North-West corner correction point longtitude. The relation between the + /// longtitude X in the range [-180, 180] and the coded number N is: N = + /// floor((X / 180) * 2^15) See GNSS-SSR-ArrayOfCorrectionPoints field + /// referencePointLongitude. + pub corner_nw_lon: u16, + /// Spacing of the correction points in the latitude direction. See GNSS- + /// SSR-ArrayOfCorrectionPoints field stepOfLatitude. + pub spacing_lat: u16, + /// Spacing of the correction points in the longtitude direction. See GNSS- + /// SSR-ArrayOfCorrectionPoints field stepOfLongtitude. + pub spacing_lon: u16, + /// Number of steps in the latitude direction. See GNSS-SSR- + /// ArrayOfCorrectionPoints field numberOfStepsLatitude. + pub rows: u16, + /// Number of steps in the longtitude direction. See GNSS-SSR- + /// ArrayOfCorrectionPoints field numberOfStepsLongtitude. + pub cols: u16, + /// 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. + pub bitmask: u64, +} + +impl MsgSsrTileDefinition { + #[rustfmt::skip] + pub fn parse(_buf: &mut &[u8]) -> Result { + Ok( MsgSsrTileDefinition{ + sender_id: None, + tile_set_id: _buf.read_u8()?, + tile_id: _buf.read_u8()?, + corner_nw_lat: _buf.read_u16::()?, + corner_nw_lon: _buf.read_u16::()?, + spacing_lat: _buf.read_u16::()?, + spacing_lon: _buf.read_u16::()?, + rows: _buf.read_u16::()?, + cols: _buf.read_u16::()?, + bitmask: _buf.read_u64::()?, + } ) + } +} +impl super::SBPMessage for MsgSsrTileDefinition { + fn get_message_type(&self) -> u16 { + 1526 + } + + fn get_sender_id(&self) -> Option { + self.sender_id + } + + fn set_sender_id(&mut self, new_id: u16) { + self.sender_id = Some(new_id); + } + + fn to_frame(&self) -> std::result::Result, crate::framer::FramerError> { + let trait_object = self as &dyn super::SBPMessage; + crate::framer::to_frame(trait_object) + } +} + +impl crate::serialize::SbpSerialize for MsgSsrTileDefinition { + #[allow(unused_variables)] + fn append_to_sbp_buffer(&self, buf: &mut Vec) { + self.tile_set_id.append_to_sbp_buffer(buf); + self.tile_id.append_to_sbp_buffer(buf); + self.corner_nw_lat.append_to_sbp_buffer(buf); + self.corner_nw_lon.append_to_sbp_buffer(buf); + self.spacing_lat.append_to_sbp_buffer(buf); + self.spacing_lon.append_to_sbp_buffer(buf); + self.rows.append_to_sbp_buffer(buf); + self.cols.append_to_sbp_buffer(buf); + self.bitmask.append_to_sbp_buffer(buf); + } + + fn sbp_size(&self) -> usize { + let mut size = 0; + size += self.tile_set_id.sbp_size(); + size += self.tile_id.sbp_size(); + size += self.corner_nw_lat.sbp_size(); + size += self.corner_nw_lon.sbp_size(); + size += self.spacing_lat.sbp_size(); + size += self.spacing_lon.sbp_size(); + size += self.rows.sbp_size(); + size += self.cols.sbp_size(); + size += self.bitmask.sbp_size(); + size + } +} + /// SSR phase biases corrections for a particular satellite. /// /// Phase biases are to be added to carrier phase measurements. @@ -1114,7 +1422,7 @@ impl crate::serialize::SbpSerialize for PhaseBiasesContent { } } -/// Header for MSG_SSR_STEC_CORRECTION message +/// Header for the MSG_SSR_STEC_CORRECTION message. /// /// A full set of STEC information will likely span multiple SBP /// messages, since SBP message a limited to 255 bytes. The header @@ -1124,6 +1432,10 @@ impl crate::serialize::SbpSerialize for PhaseBiasesContent { #[derive(Debug, Clone)] #[allow(non_snake_case)] pub struct STECHeader { + /// Unique identifier of the tile set this tile belongs to. + pub tile_set_id: u8, + /// Unique identifier of this tile in the tile set. + pub tile_id: u8, /// GNSS reference time of the correction pub time: GPSTimeSec, /// Number of messages in the dataset @@ -1141,6 +1453,8 @@ impl STECHeader { #[rustfmt::skip] pub fn parse(_buf: &mut &[u8]) -> Result { Ok( STECHeader{ + tile_set_id: _buf.read_u8()?, + tile_id: _buf.read_u8()?, time: GPSTimeSec::parse(_buf)?, num_msgs: _buf.read_u8()?, seq_num: _buf.read_u8()?, @@ -1166,6 +1480,85 @@ impl STECHeader { } impl crate::serialize::SbpSerialize for STECHeader { + #[allow(unused_variables)] + fn append_to_sbp_buffer(&self, buf: &mut Vec) { + self.tile_set_id.append_to_sbp_buffer(buf); + self.tile_id.append_to_sbp_buffer(buf); + self.time.append_to_sbp_buffer(buf); + self.num_msgs.append_to_sbp_buffer(buf); + self.seq_num.append_to_sbp_buffer(buf); + self.update_interval.append_to_sbp_buffer(buf); + self.iod_atmo.append_to_sbp_buffer(buf); + } + + fn sbp_size(&self) -> usize { + let mut size = 0; + size += self.tile_set_id.sbp_size(); + size += self.tile_id.sbp_size(); + size += self.time.sbp_size(); + size += self.num_msgs.sbp_size(); + size += self.seq_num.sbp_size(); + size += self.update_interval.sbp_size(); + size += self.iod_atmo.sbp_size(); + size + } +} + +/// Header for MSG_SSR_STEC_CORRECTION_DEP message +/// +/// A full set of STEC information will likely span multiple SBP +/// messages, since SBP message a limited to 255 bytes. The header +/// is used to tie multiple SBP messages into a sequence. +/// +#[cfg_attr(feature = "sbp_serde", derive(Serialize, Deserialize))] +#[derive(Debug, Clone)] +#[allow(non_snake_case)] +pub struct STECHeaderDepA { + /// GNSS reference time of the correction + pub time: GPSTimeSec, + /// Number of messages in the dataset + pub num_msgs: u8, + /// Position of this message in the dataset + pub seq_num: u8, + /// Update interval between consecutive corrections. Encoded following RTCM + /// DF391 specification. + pub update_interval: u8, + /// IOD of the SSR atmospheric correction + pub iod_atmo: u8, +} + +impl STECHeaderDepA { + #[rustfmt::skip] + pub fn parse(_buf: &mut &[u8]) -> Result { + Ok( STECHeaderDepA{ + time: GPSTimeSec::parse(_buf)?, + num_msgs: _buf.read_u8()?, + seq_num: _buf.read_u8()?, + update_interval: _buf.read_u8()?, + iod_atmo: _buf.read_u8()?, + } ) + } + pub fn parse_array(buf: &mut &[u8]) -> Result, crate::Error> { + let mut v = Vec::new(); + while buf.len() > 0 { + v.push(STECHeaderDepA::parse(buf)?); + } + Ok(v) + } + + pub fn parse_array_limit( + buf: &mut &[u8], + n: usize, + ) -> Result, crate::Error> { + let mut v = Vec::new(); + for _ in 0..n { + v.push(STECHeaderDepA::parse(buf)?); + } + Ok(v) + } +} + +impl crate::serialize::SbpSerialize for STECHeaderDepA { #[allow(unused_variables)] fn append_to_sbp_buffer(&self, buf: &mut Vec) { self.time.append_to_sbp_buffer(buf); diff --git a/spec/yaml/swiftnav/sbp/ssr.yaml b/spec/yaml/swiftnav/sbp/ssr.yaml index 3236f94eb1..1e50c2068c 100644 --- a/spec/yaml/swiftnav/sbp/ssr.yaml +++ b/spec/yaml/swiftnav/sbp/ssr.yaml @@ -29,6 +29,7 @@ definitions: type: s16 units: 0.01 m desc: Code bias value + - PhaseBiasesContent: short_desc: SSR phase biases corrections for a particular satellite. desc: | @@ -55,12 +56,18 @@ definitions: desc: Phase bias for specified signal - STECHeader: - short_desc: Header for MSG_SSR_STEC_CORRECTION message + short_desc: Header for the MSG_SSR_STEC_CORRECTION message. desc: | A full set of STEC information will likely span multiple SBP messages, since SBP message a limited to 255 bytes. The header is used to tie multiple SBP messages into a sequence. fields: + - tile_set_id: + type: u8 + desc: Unique identifier of the tile set this tile belongs to. + - tile_id: + type: u8 + desc: Unique identifier of this tile in the tile set. - time: type: GPSTimeSec desc: GNSS reference time of the correction @@ -81,12 +88,18 @@ definitions: IOD of the SSR atmospheric correction - GriddedCorrectionHeader: - short_desc: Header for MSG_SSR_GRIDDED_CORRECTION + short_desc: Header for the MSG_SSR_GRIDDED_CORRECTION message. desc: | - The 3GPP message contains nested variable length arrays + The LPP message contains nested variable length arrays which are not suppported in SBP, so each grid point will be identified by the index. fields: + - tile_set_id: + type: u8 + desc: Unique identifier of the tile set this tile belongs to. + - tile_id: + type: u8 + desc: Unique identifier of this tile in the tile set. - time: type: GPSTimeSec desc: GNSS reference time of the correction @@ -227,36 +240,6 @@ definitions: fill: STECResidual desc: STEC residuals for each satellite (mean, stddev) - - GridDefinitionHeader: - short_desc: Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. - desc: | - Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. - Also includes an RLE encoded validity list. - fields: - - region_size_inverse: - type: u8 - units: inverse degrees - desc: | - region_size (deg) = 10 / region_size_inverse - 0 is an invalid value. - - area_width: - type: u16 - desc: | - grid height (deg) = grid idth (deg) = area_width / region_size - 0 is an invalid value. - - lat_nw_corner_enc: - type: u16 - desc: North-West corner latitdue (deg) = region_size * lat_nw_corner_enc - 90 - - lon_nw_corner_enc: - type: u16 - desc: North-West corner longtitude (deg) = region_size * lon_nw_corner_enc - 180 - - num_msgs: - type: u8 - desc: Number of messages in the dataset - - seq_num: - type: u8 - desc: Postion of this message in the dataset - - MSG_SSR_ORBIT_CLOCK: id: 0x05DD short_desc: Precise orbit and clock correction @@ -323,72 +306,6 @@ definitions: units: 0.00002 mm/s^-2 desc: C2 polynomial coefficient for correction of broadcast satellite clock - - MSG_SSR_ORBIT_CLOCK_DEP_A: - id: 0x05DC - short_desc: Precise orbit and clock correction - desc: | - The precise orbit and clock correction message is - to be applied as a delta correction to broadcast - ephemeris and is typically an equivalent to the 1060 - and 1066 RTCM message types - fields: - - time: - type: GPSTimeSec - desc: GNSS reference time of the correction - - sid: - type: GnssSignal - desc: GNSS signal identifier (16 bit) - - update_interval: - type: u8 - desc: | - Update interval between consecutive corrections. Encoded - following RTCM DF391 specification. - - 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 - - iod: - type: u8 - desc: Issue of broadcast ephemeris data - - radial: - type: s32 - units: 0.1 mm - desc: Orbit radial delta correction - - along: - type: s32 - units: 0.4 mm - desc: Orbit along delta correction - - cross: - type: s32 - units: 0.4 mm - desc: Orbit along delta correction - - dot_radial: - type: s32 - units: 0.001 mm/s - desc: Velocity of orbit radial delta correction - - dot_along: - type: s32 - units: 0.004 mm/s - desc: Velocity of orbit along delta correction - - dot_cross: - type: s32 - units: 0.004 mm/s - desc: Velocity of orbit cross delta correction - - c0: - type: s32 - units: 0.1 mm - desc: C0 polynomial coefficient for correction of broadcast satellite clock - - c1: - type: s32 - units: 0.001 mm/s - desc: C1 polynomial coefficient for correction of broadcast satellite clock - - c2: - type: s32 - units: 0.00002 mm/s^-2 - desc: C2 polynomial coefficient for correction of broadcast satellite clock - - MSG_SSR_CODE_BIASES: id: 0x05E1 short_desc: Precise code biases correction @@ -474,45 +391,317 @@ definitions: satellite being tracked. - MSG_SSR_STEC_CORRECTION: - id: 0x05EB - short_desc: Slant Total Electron Content + id: 0x05FB + short_desc: STEC correction polynomial coeffcients. desc: | - The STEC per space vehicle, given as polynomial approximation for - a given grid. This should be combined with MSG_SSR_GRIDDED_CORRECTION - message to get the state space representation of the atmospheric - delay. It is typically equivalent to the QZSS CLAS Sub Type 8 messages + The Slant Total Electron Content per space vehicle, given as polynomial + approximation for a given tile. This should be combined with the + MSG_SSR_GRIDDED_CORRECTION message to get the state space representation + of the atmospheric delay. + + It is typically equivalent to the QZSS CLAS Sub Type 8 messages. fields: - header: type: STECHeader + desc: Header of a STEC polynomial coeffcient message. + - stec_sat_list: + type: array + fill: STECSatElement + desc: Array of STEC polynomial coeffcients for each space vehicle. + + - MSG_SSR_GRIDDED_CORRECTION: + id: 0x05FC + short_desc: Gridded troposphere and STEC correction residuals. + desc: | + STEC residuals are per space vehicle, troposphere is not. + + It is typically equivalent to the QZSS CLAS Sub Type 9 messages + fields: + - header: + type: GriddedCorrectionHeader + desc: Header of a gridded correction message + - element: + type: GridElement + desc: | + Tropo and STEC residuals for the given grid point. + + - MSG_SSR_TILE_DEFINITION: + id: 0x05F6 + 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: + - tile_set_id: + type: u8 + desc: Unique identifier of the tile set this tile belongs to. + - tile_id: + type: u8 + desc: | + Unique identifier of this tile in the tile set. + + See GNSS-SSR-ArrayOfCorrectionPoints field correctionPointSetID. + - corner_nw_lat: + type: u16 + 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: u16 + units: encoded degrees + desc: | + North-West corner correction point longtitude. + + The relation between the longtitude 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 longtitude direction. + + See GNSS-SSR-ArrayOfCorrectionPoints field stepOfLongtitude. + - 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 longtitude direction. + + See GNSS-SSR-ArrayOfCorrectionPoints field numberOfStepsLongtitude. + - bitmask: + type: u64 + desc: | + 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. + + - MSG_SSR_ORBIT_CLOCK_DEP_A: + id: 0x05DC + short_desc: Deprecated + replaced_by: + - MSG_SSR_ORBIT_CLOCK + fields: + - time: + type: GPSTimeSec + desc: GNSS reference time of the correction + - sid: + type: GnssSignal + desc: GNSS signal identifier (16 bit) + - update_interval: + type: u8 + desc: | + Update interval between consecutive corrections. Encoded + following RTCM DF391 specification. + - 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 + - iod: + type: u8 + desc: Issue of broadcast ephemeris data + - radial: + type: s32 + units: 0.1 mm + desc: Orbit radial delta correction + - along: + type: s32 + units: 0.4 mm + desc: Orbit along delta correction + - cross: + type: s32 + units: 0.4 mm + desc: Orbit along delta correction + - dot_radial: + type: s32 + units: 0.001 mm/s + desc: Velocity of orbit radial delta correction + - dot_along: + type: s32 + units: 0.004 mm/s + desc: Velocity of orbit along delta correction + - dot_cross: + type: s32 + units: 0.004 mm/s + desc: Velocity of orbit cross delta correction + - c0: + type: s32 + units: 0.1 mm + desc: C0 polynomial coefficient for correction of broadcast satellite clock + - c1: + type: s32 + units: 0.001 mm/s + desc: C1 polynomial coefficient for correction of broadcast satellite clock + - c2: + type: s32 + units: 0.00002 mm/s^-2 + desc: C2 polynomial coefficient for correction of broadcast satellite clock + + - STECHeaderDepA: + short_desc: Header for MSG_SSR_STEC_CORRECTION_DEP message + desc: | + A full set of STEC information will likely span multiple SBP + messages, since SBP message a limited to 255 bytes. The header + is used to tie multiple SBP messages into a sequence. + fields: + - time: + type: GPSTimeSec + desc: GNSS reference time of the correction + - num_msgs: + type: u8 + desc: Number of messages in the dataset + - seq_num: + type: u8 + desc: Position of this message in the dataset + - update_interval: + type: u8 + desc: | + Update interval between consecutive corrections. Encoded + following RTCM DF391 specification. + - iod_atmo: + type: u8 + desc: | + IOD of the SSR atmospheric correction + + - GriddedCorrectionHeaderDepA: + short_desc: Header for MSG_SSR_GRIDDED_CORRECTION_DEP + desc: | + The 3GPP message contains nested variable length arrays + which are not suppported in SBP, so each grid point will + be identified by the index. + fields: + - time: + type: GPSTimeSec + desc: GNSS reference time of the correction + - num_msgs: + type: u16 + desc: Number of messages in the dataset + - seq_num: + type: u16 + desc: Position of this message in the dataset + - update_interval: + type: u8 + desc: | + Update interval between consecutive corrections. Encoded + following RTCM DF391 specification. + - iod_atmo: + type: u8 + desc: | + IOD of the SSR atmospheric correction + - tropo_quality_indicator: + type: u8 + desc: | + Quality of the troposphere data. Encoded following RTCM DF389 + specifcation in units of m. + + - GridDefinitionHeaderDepA: + short_desc: Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. + desc: | + Defines the grid for MSG_SSR_GRIDDED_CORRECTION messages. + Also includes an RLE encoded validity list. + fields: + - region_size_inverse: + type: u8 + units: inverse degrees + desc: | + region_size (deg) = 10 / region_size_inverse + 0 is an invalid value. + - area_width: + type: u16 + desc: | + grid height (deg) = grid width (deg) = area_width / region_size + 0 is an invalid value. + - lat_nw_corner_enc: + type: u16 + desc: North-West corner latitude (deg) = region_size * lat_nw_corner_enc - 90 + - lon_nw_corner_enc: + type: u16 + desc: North-West corner longtitude (deg) = region_size * lon_nw_corner_enc - 180 + - num_msgs: + type: u8 + desc: Number of messages in the dataset + - seq_num: + type: u8 + desc: Postion of this message in the dataset + + - MSG_SSR_STEC_CORRECTION_DEP_A: + id: 0x05EB + short_desc: Deprecated + replaced_by: + - MSG_SSR_STEC_CORRECTION + fields: + - header: + type: STECHeaderDepA desc: Header of a STEC message - stec_sat_list: type: array fill: STECSatElement desc: Array of STEC information for each space vehicle - - MSG_SSR_GRIDDED_CORRECTION_NO_STD: + - MSG_SSR_GRIDDED_CORRECTION_NO_STD_DEP_A: id: 0x05F0 - short_desc: Gridded troposphere and STEC residuals - desc: | - This message was deprecated when variances (stddev) - were added. + short_desc: Deprecated + replaced_by: + - MSG_SSR_STEC_CORRECTION_DEP fields: - header: - type: GriddedCorrectionHeader + type: GriddedCorrectionHeaderDepA desc: Header of a Gridded Correction message - element: type: GridElementNoStd desc: Tropo and STEC residuals for the given grid point - - MSG_SSR_GRIDDED_CORRECTION: + - MSG_SSR_GRIDDED_CORRECTION_DEP_A: id: 0x05FA - short_desc: Gridded troposphere and STEC residuals - desc: | - STEC residuals are per space vehicle, tropo is not. - It is typically equivalent to the QZSS CLAS Sub Type 9 messages + short_desc: Deprecated + replaced_by: + - MSG_SSR_GRIDDED_CORRECTION fields: - header: - type: GriddedCorrectionHeader + type: GriddedCorrectionHeaderDepA desc: Header of a Gridded Correction message - element: type: GridElement @@ -520,15 +709,14 @@ definitions: Tropo and STEC residuals for the given grid point (mean and standard deviation) - - MSG_SSR_GRID_DEFINITION: + - MSG_SSR_GRID_DEFINITION_DEP_A: id: 0x05F5 - short_desc: Definition of the grid for STEC and tropo messages - desc: | - Based on the 3GPP proposal R2-1906781 which is in turn based on - OMA-LPPe-ValidityArea from OMA-TS-LPPe-V2_0-20141202-C + short_desc: Deprecated + replaced_by: + - MSG_SSR_TILE_DEFINITION fields: - header: - type: GridDefinitionHeader + type: GridDefinitionHeaderDepA desc: Header of a Gridded Correction message - rle_list: type: array