diff options
Diffstat (limited to 'epan/dissectors/packet-sbas_l1.c')
-rw-r--r-- | epan/dissectors/packet-sbas_l1.c | 1882 |
1 files changed, 1414 insertions, 468 deletions
diff --git a/epan/dissectors/packet-sbas_l1.c b/epan/dissectors/packet-sbas_l1.c index e60ada35..b739e758 100644 --- a/epan/dissectors/packet-sbas_l1.c +++ b/epan/dissectors/packet-sbas_l1.c @@ -16,7 +16,14 @@ #include <epan/expert.h> #include <epan/packet.h> +#include <epan/tfs.h> +#include <epan/unit_strings.h> + +#include <wsutil/array.h> +#include <wsutil/utf8_entities.h> + #include "packet-ubx.h" +#include "packet-sbas_l1.h" /* * Dissects navigation messages of the Satellite Based Augmentation System @@ -28,52 +35,83 @@ #define SBAS_L1_PREAMBLE_2 0x9a #define SBAS_L1_PREAMBLE_3 0xc6 +// SBAS service provider identifier mapping +// see ICAO Annex 10, Vol I, Table B-27 +static const value_string SBAS_SPID[] = { + {0, "WAAS"}, + {1, "EGNOS"}, + {2, "MSAS"}, + {0, NULL} +}; + // UDREI_i mapping // see ICAO Annex 10, Vol I, Table B-29 -static const value_string UDREI_EVALUATION[] = { - {0, "0.0520 m^2"}, - {1, "0.0924 m^2"}, - {2, "0.1444 m^2"}, - {3, "0.2830 m^2"}, - {4, "0.4678 m^2"}, - {5, "0.8313 m^2"}, - {6, "1.2992 m^2"}, - {7, "1.8709 m^2"}, - {8, "2.5465 m^2"}, - {9, "3.3260 m^2"}, - {10, "5.1968 m^2"}, - {11, "20.7870 m^2"}, - {12, "230.9661 m^2"}, - {13, "2078.695 m^2"}, +const value_string UDREI_EVALUATION[] = { + {0, "0.0520 m" UTF8_SUPERSCRIPT_TWO}, + {1, "0.0924 m" UTF8_SUPERSCRIPT_TWO}, + {2, "0.1444 m" UTF8_SUPERSCRIPT_TWO}, + {3, "0.2830 m" UTF8_SUPERSCRIPT_TWO}, + {4, "0.4678 m" UTF8_SUPERSCRIPT_TWO}, + {5, "0.8315 m" UTF8_SUPERSCRIPT_TWO}, + {6, "1.2992 m" UTF8_SUPERSCRIPT_TWO}, + {7, "1.8709 m" UTF8_SUPERSCRIPT_TWO}, + {8, "2.5465 m" UTF8_SUPERSCRIPT_TWO}, + {9, "3.3260 m" UTF8_SUPERSCRIPT_TWO}, + {10, "5.1968 m" UTF8_SUPERSCRIPT_TWO}, + {11, "20.7870 m" UTF8_SUPERSCRIPT_TWO}, + {12, "230.9661 m" UTF8_SUPERSCRIPT_TWO}, + {13, "2078.695 m" UTF8_SUPERSCRIPT_TWO}, {14, "Not Monitored"}, {15, "Do Not Use"}, {0, NULL} }; +// GIVEI_i mapping +// see ICAO Annex 10, Vol I, Table B-33 +static const value_string GIVEI_EVALUATION[] = { + {0, "0.0084 m" UTF8_SUPERSCRIPT_TWO}, + {1, "0.0333 m" UTF8_SUPERSCRIPT_TWO}, + {2, "0.0749 m" UTF8_SUPERSCRIPT_TWO}, + {3, "0.1331 m" UTF8_SUPERSCRIPT_TWO}, + {4, "0.2079 m" UTF8_SUPERSCRIPT_TWO}, + {5, "0.2994 m" UTF8_SUPERSCRIPT_TWO}, + {6, "0.4075 m" UTF8_SUPERSCRIPT_TWO}, + {7, "0.5322 m" UTF8_SUPERSCRIPT_TWO}, + {8, "0.6735 m" UTF8_SUPERSCRIPT_TWO}, + {9, "0.8315 m" UTF8_SUPERSCRIPT_TWO}, + {10, "1.1974 m" UTF8_SUPERSCRIPT_TWO}, + {11, "1.8709 m" UTF8_SUPERSCRIPT_TWO}, + {12, "3.3260 m" UTF8_SUPERSCRIPT_TWO}, + {13, "20.787 m" UTF8_SUPERSCRIPT_TWO}, + {14, "187.0826 m" UTF8_SUPERSCRIPT_TWO}, + {15, "Not Monitored"}, + {0, NULL} +}; + // Mapping for fast correction degradation factor // see ICAO Annex 10, Vol I, Table B-34 static const value_string DEGRADATION_FACTOR_INDICATOR[] = { - {0, "0.0 mm/s^2"}, - {1, "0.05 mm/s^2"}, - {2, "0.09 mm/s^2"}, - {3, "0.12 mm/s^2"}, - {4, "0.15 mm/s^2"}, - {5, "0.20 mm/s^2"}, - {6, "0.30 mm/s^2"}, - {7, "0.45 mm/s^2"}, - {8, "0.60 mm/s^2"}, - {9, "0.90 mm/s^2"}, - {10, "1.50 mm/s^2"}, - {11, "2.10 mm/s^2"}, - {12, "2.70 mm/s^2"}, - {13, "3.30 mm/s^2"}, - {14, "4.60 mm/s^2"}, - {15, "5.80 mm/s^2"}, + {0, "0.0 mm/s" UTF8_SUPERSCRIPT_TWO}, + {1, "0.05 mm/s" UTF8_SUPERSCRIPT_TWO}, + {2, "0.09 mm/s" UTF8_SUPERSCRIPT_TWO}, + {3, "0.12 mm/s" UTF8_SUPERSCRIPT_TWO}, + {4, "0.15 mm/s" UTF8_SUPERSCRIPT_TWO}, + {5, "0.20 mm/s" UTF8_SUPERSCRIPT_TWO}, + {6, "0.30 mm/s" UTF8_SUPERSCRIPT_TWO}, + {7, "0.45 mm/s" UTF8_SUPERSCRIPT_TWO}, + {8, "0.60 mm/s" UTF8_SUPERSCRIPT_TWO}, + {9, "0.90 mm/s" UTF8_SUPERSCRIPT_TWO}, + {10, "1.50 mm/s" UTF8_SUPERSCRIPT_TWO}, + {11, "2.10 mm/s" UTF8_SUPERSCRIPT_TWO}, + {12, "2.70 mm/s" UTF8_SUPERSCRIPT_TWO}, + {13, "3.30 mm/s" UTF8_SUPERSCRIPT_TWO}, + {14, "4.60 mm/s" UTF8_SUPERSCRIPT_TWO}, + {15, "5.80 mm/s" UTF8_SUPERSCRIPT_TWO}, {0, NULL} }; // table for SBAS L1 CRC24Q computation -static const guint32 CRC24Q_TBL[] = { +static const uint32_t CRC24Q_TBL[] = { 0x000000, 0x864CFB, 0x8AD50D, 0x0C99F6, 0x93E6E1, 0x15AA1A, 0x1933EC, 0x9F7F17, 0xA18139, 0x27CDC2, 0x2B5434, 0xAD18CF, 0x3267D8, 0xB42B23, 0xB8B2D5, 0x3EFE2E, 0xC54E89, 0x430272, 0x4F9B84, 0xC9D77F, 0x56A868, 0xD0E493, 0xDC7D65, 0x5A319E, @@ -109,323 +147,569 @@ static const guint32 CRC24Q_TBL[] = { }; /* Initialize the protocol and registered fields */ -static int proto_sbas_l1 = -1; +static int proto_sbas_l1; // see ICAO Annex 10, Vol I, Appendix B, Section 3.5.3 -static int hf_sbas_l1_preamble = -1; -static int hf_sbas_l1_mt = -1; -static int hf_sbas_l1_chksum = -1; +static int hf_sbas_l1_preamble; +static int hf_sbas_l1_mt; +static int hf_sbas_l1_chksum; + +static int hf_sbas_l1_mt0; +static int hf_sbas_l1_mt0_spare_1; +static int hf_sbas_l1_mt0_spare_2; +static int hf_sbas_l1_mt0_spare_3; // see ICAO Annex 10, Vol I, Table B-38 -static int hf_sbas_l1_mt1 = -1; -static int hf_sbas_l1_mt1_prn_mask_gps = -1; -static int hf_sbas_l1_mt1_prn_mask_glonass = -1; -static int hf_sbas_l1_mt1_prn_mask_spare_1 = -1; -static int hf_sbas_l1_mt1_prn_mask_sbas = -1; -static int hf_sbas_l1_mt1_prn_mask_spare_2 = -1; -static int hf_sbas_l1_mt1_iodp = -1; +static int hf_sbas_l1_mt1; +static int hf_sbas_l1_mt1_prn_mask_gps; +static int hf_sbas_l1_mt1_prn_mask_glonass; +static int hf_sbas_l1_mt1_prn_mask_spare_1; +static int hf_sbas_l1_mt1_prn_mask_sbas; +static int hf_sbas_l1_mt1_prn_mask_spare_2; +static int hf_sbas_l1_mt1_iodp; // see ICAO Annex 10, Vol I, Table B-39 -static int hf_sbas_l1_mt2 = -1; -static int hf_sbas_l1_mt2_iodf_j = -1; -static int hf_sbas_l1_mt2_iodp = -1; -static int hf_sbas_l1_mt2_fc_1 = -1; -static int hf_sbas_l1_mt2_fc_2 = -1; -static int hf_sbas_l1_mt2_fc_3 = -1; -static int hf_sbas_l1_mt2_fc_4 = -1; -static int hf_sbas_l1_mt2_fc_5 = -1; -static int hf_sbas_l1_mt2_fc_6 = -1; -static int hf_sbas_l1_mt2_fc_7 = -1; -static int hf_sbas_l1_mt2_fc_8 = -1; -static int hf_sbas_l1_mt2_fc_9 = -1; -static int hf_sbas_l1_mt2_fc_10 = -1; -static int hf_sbas_l1_mt2_fc_11 = -1; -static int hf_sbas_l1_mt2_fc_12 = -1; -static int hf_sbas_l1_mt2_fc_13 = -1; -static int hf_sbas_l1_mt2_udrei_1 = -1; -static int hf_sbas_l1_mt2_udrei_2 = -1; -static int hf_sbas_l1_mt2_udrei_3 = -1; -static int hf_sbas_l1_mt2_udrei_4 = -1; -static int hf_sbas_l1_mt2_udrei_5 = -1; -static int hf_sbas_l1_mt2_udrei_6 = -1; -static int hf_sbas_l1_mt2_udrei_7 = -1; -static int hf_sbas_l1_mt2_udrei_8 = -1; -static int hf_sbas_l1_mt2_udrei_9 = -1; -static int hf_sbas_l1_mt2_udrei_10 = -1; -static int hf_sbas_l1_mt2_udrei_11 = -1; -static int hf_sbas_l1_mt2_udrei_12 = -1; -static int hf_sbas_l1_mt2_udrei_13 = -1; +static int hf_sbas_l1_mt2; +static int hf_sbas_l1_mt2_iodf_2; +static int hf_sbas_l1_mt2_iodp; +static int hf_sbas_l1_mt2_fc_1; +static int hf_sbas_l1_mt2_fc_2; +static int hf_sbas_l1_mt2_fc_3; +static int hf_sbas_l1_mt2_fc_4; +static int hf_sbas_l1_mt2_fc_5; +static int hf_sbas_l1_mt2_fc_6; +static int hf_sbas_l1_mt2_fc_7; +static int hf_sbas_l1_mt2_fc_8; +static int hf_sbas_l1_mt2_fc_9; +static int hf_sbas_l1_mt2_fc_10; +static int hf_sbas_l1_mt2_fc_11; +static int hf_sbas_l1_mt2_fc_12; +static int hf_sbas_l1_mt2_fc_13; +static int hf_sbas_l1_mt2_udrei_1; +static int hf_sbas_l1_mt2_udrei_2; +static int hf_sbas_l1_mt2_udrei_3; +static int hf_sbas_l1_mt2_udrei_4; +static int hf_sbas_l1_mt2_udrei_5; +static int hf_sbas_l1_mt2_udrei_6; +static int hf_sbas_l1_mt2_udrei_7; +static int hf_sbas_l1_mt2_udrei_8; +static int hf_sbas_l1_mt2_udrei_9; +static int hf_sbas_l1_mt2_udrei_10; +static int hf_sbas_l1_mt2_udrei_11; +static int hf_sbas_l1_mt2_udrei_12; +static int hf_sbas_l1_mt2_udrei_13; // see ICAO Annex 10, Vol I, Table B-39 -static int hf_sbas_l1_mt3 = -1; -static int hf_sbas_l1_mt3_iodf_j = -1; -static int hf_sbas_l1_mt3_iodp = -1; -static int hf_sbas_l1_mt3_fc_14 = -1; -static int hf_sbas_l1_mt3_fc_15 = -1; -static int hf_sbas_l1_mt3_fc_16 = -1; -static int hf_sbas_l1_mt3_fc_17 = -1; -static int hf_sbas_l1_mt3_fc_18 = -1; -static int hf_sbas_l1_mt3_fc_19 = -1; -static int hf_sbas_l1_mt3_fc_20 = -1; -static int hf_sbas_l1_mt3_fc_21 = -1; -static int hf_sbas_l1_mt3_fc_22 = -1; -static int hf_sbas_l1_mt3_fc_23 = -1; -static int hf_sbas_l1_mt3_fc_24 = -1; -static int hf_sbas_l1_mt3_fc_25 = -1; -static int hf_sbas_l1_mt3_fc_26 = -1; -static int hf_sbas_l1_mt3_udrei_14 = -1; -static int hf_sbas_l1_mt3_udrei_15 = -1; -static int hf_sbas_l1_mt3_udrei_16 = -1; -static int hf_sbas_l1_mt3_udrei_17 = -1; -static int hf_sbas_l1_mt3_udrei_18 = -1; -static int hf_sbas_l1_mt3_udrei_19 = -1; -static int hf_sbas_l1_mt3_udrei_20 = -1; -static int hf_sbas_l1_mt3_udrei_21 = -1; -static int hf_sbas_l1_mt3_udrei_22 = -1; -static int hf_sbas_l1_mt3_udrei_23 = -1; -static int hf_sbas_l1_mt3_udrei_24 = -1; -static int hf_sbas_l1_mt3_udrei_25 = -1; -static int hf_sbas_l1_mt3_udrei_26 = -1; +static int hf_sbas_l1_mt3; +static int hf_sbas_l1_mt3_iodf_3; +static int hf_sbas_l1_mt3_iodp; +static int hf_sbas_l1_mt3_fc_14; +static int hf_sbas_l1_mt3_fc_15; +static int hf_sbas_l1_mt3_fc_16; +static int hf_sbas_l1_mt3_fc_17; +static int hf_sbas_l1_mt3_fc_18; +static int hf_sbas_l1_mt3_fc_19; +static int hf_sbas_l1_mt3_fc_20; +static int hf_sbas_l1_mt3_fc_21; +static int hf_sbas_l1_mt3_fc_22; +static int hf_sbas_l1_mt3_fc_23; +static int hf_sbas_l1_mt3_fc_24; +static int hf_sbas_l1_mt3_fc_25; +static int hf_sbas_l1_mt3_fc_26; +static int hf_sbas_l1_mt3_udrei_14; +static int hf_sbas_l1_mt3_udrei_15; +static int hf_sbas_l1_mt3_udrei_16; +static int hf_sbas_l1_mt3_udrei_17; +static int hf_sbas_l1_mt3_udrei_18; +static int hf_sbas_l1_mt3_udrei_19; +static int hf_sbas_l1_mt3_udrei_20; +static int hf_sbas_l1_mt3_udrei_21; +static int hf_sbas_l1_mt3_udrei_22; +static int hf_sbas_l1_mt3_udrei_23; +static int hf_sbas_l1_mt3_udrei_24; +static int hf_sbas_l1_mt3_udrei_25; +static int hf_sbas_l1_mt3_udrei_26; // see ICAO Annex 10, Vol I, Table B-39 -static int hf_sbas_l1_mt4 = -1; -static int hf_sbas_l1_mt4_iodf_j = -1; -static int hf_sbas_l1_mt4_iodp = -1; -static int hf_sbas_l1_mt4_fc_27 = -1; -static int hf_sbas_l1_mt4_fc_28 = -1; -static int hf_sbas_l1_mt4_fc_29 = -1; -static int hf_sbas_l1_mt4_fc_30 = -1; -static int hf_sbas_l1_mt4_fc_31 = -1; -static int hf_sbas_l1_mt4_fc_32 = -1; -static int hf_sbas_l1_mt4_fc_33 = -1; -static int hf_sbas_l1_mt4_fc_34 = -1; -static int hf_sbas_l1_mt4_fc_35 = -1; -static int hf_sbas_l1_mt4_fc_36 = -1; -static int hf_sbas_l1_mt4_fc_37 = -1; -static int hf_sbas_l1_mt4_fc_38 = -1; -static int hf_sbas_l1_mt4_fc_39 = -1; -static int hf_sbas_l1_mt4_udrei_27 = -1; -static int hf_sbas_l1_mt4_udrei_28 = -1; -static int hf_sbas_l1_mt4_udrei_29 = -1; -static int hf_sbas_l1_mt4_udrei_30 = -1; -static int hf_sbas_l1_mt4_udrei_31 = -1; -static int hf_sbas_l1_mt4_udrei_32 = -1; -static int hf_sbas_l1_mt4_udrei_33 = -1; -static int hf_sbas_l1_mt4_udrei_34 = -1; -static int hf_sbas_l1_mt4_udrei_35 = -1; -static int hf_sbas_l1_mt4_udrei_36 = -1; -static int hf_sbas_l1_mt4_udrei_37 = -1; -static int hf_sbas_l1_mt4_udrei_38 = -1; -static int hf_sbas_l1_mt4_udrei_39 = -1; +static int hf_sbas_l1_mt4; +static int hf_sbas_l1_mt4_iodf_4; +static int hf_sbas_l1_mt4_iodp; +static int hf_sbas_l1_mt4_fc_27; +static int hf_sbas_l1_mt4_fc_28; +static int hf_sbas_l1_mt4_fc_29; +static int hf_sbas_l1_mt4_fc_30; +static int hf_sbas_l1_mt4_fc_31; +static int hf_sbas_l1_mt4_fc_32; +static int hf_sbas_l1_mt4_fc_33; +static int hf_sbas_l1_mt4_fc_34; +static int hf_sbas_l1_mt4_fc_35; +static int hf_sbas_l1_mt4_fc_36; +static int hf_sbas_l1_mt4_fc_37; +static int hf_sbas_l1_mt4_fc_38; +static int hf_sbas_l1_mt4_fc_39; +static int hf_sbas_l1_mt4_udrei_27; +static int hf_sbas_l1_mt4_udrei_28; +static int hf_sbas_l1_mt4_udrei_29; +static int hf_sbas_l1_mt4_udrei_30; +static int hf_sbas_l1_mt4_udrei_31; +static int hf_sbas_l1_mt4_udrei_32; +static int hf_sbas_l1_mt4_udrei_33; +static int hf_sbas_l1_mt4_udrei_34; +static int hf_sbas_l1_mt4_udrei_35; +static int hf_sbas_l1_mt4_udrei_36; +static int hf_sbas_l1_mt4_udrei_37; +static int hf_sbas_l1_mt4_udrei_38; +static int hf_sbas_l1_mt4_udrei_39; // see ICAO Annex 10, Vol I, Table B-39 -static int hf_sbas_l1_mt5 = -1; -static int hf_sbas_l1_mt5_iodf_j = -1; -static int hf_sbas_l1_mt5_iodp = -1; -static int hf_sbas_l1_mt5_fc_40 = -1; -static int hf_sbas_l1_mt5_fc_41 = -1; -static int hf_sbas_l1_mt5_fc_42 = -1; -static int hf_sbas_l1_mt5_fc_43 = -1; -static int hf_sbas_l1_mt5_fc_44 = -1; -static int hf_sbas_l1_mt5_fc_45 = -1; -static int hf_sbas_l1_mt5_fc_46 = -1; -static int hf_sbas_l1_mt5_fc_47 = -1; -static int hf_sbas_l1_mt5_fc_48 = -1; -static int hf_sbas_l1_mt5_fc_49 = -1; -static int hf_sbas_l1_mt5_fc_50 = -1; -static int hf_sbas_l1_mt5_fc_51 = -1; -static int hf_sbas_l1_mt5_fc_52 = -1; -static int hf_sbas_l1_mt5_udrei_40 = -1; -static int hf_sbas_l1_mt5_udrei_41 = -1; -static int hf_sbas_l1_mt5_udrei_42 = -1; -static int hf_sbas_l1_mt5_udrei_43 = -1; -static int hf_sbas_l1_mt5_udrei_44 = -1; -static int hf_sbas_l1_mt5_udrei_45 = -1; -static int hf_sbas_l1_mt5_udrei_46 = -1; -static int hf_sbas_l1_mt5_udrei_47 = -1; -static int hf_sbas_l1_mt5_udrei_48 = -1; -static int hf_sbas_l1_mt5_udrei_49 = -1; -static int hf_sbas_l1_mt5_udrei_50 = -1; -static int hf_sbas_l1_mt5_udrei_51 = -1; -static int hf_sbas_l1_mt5_udrei_52 = -1; +static int hf_sbas_l1_mt5; +static int hf_sbas_l1_mt5_iodf_5; +static int hf_sbas_l1_mt5_iodp; +static int hf_sbas_l1_mt5_fc_40; +static int hf_sbas_l1_mt5_fc_41; +static int hf_sbas_l1_mt5_fc_42; +static int hf_sbas_l1_mt5_fc_43; +static int hf_sbas_l1_mt5_fc_44; +static int hf_sbas_l1_mt5_fc_45; +static int hf_sbas_l1_mt5_fc_46; +static int hf_sbas_l1_mt5_fc_47; +static int hf_sbas_l1_mt5_fc_48; +static int hf_sbas_l1_mt5_fc_49; +static int hf_sbas_l1_mt5_fc_50; +static int hf_sbas_l1_mt5_fc_51; +static int hf_sbas_l1_mt5_fc_52; +static int hf_sbas_l1_mt5_udrei_40; +static int hf_sbas_l1_mt5_udrei_41; +static int hf_sbas_l1_mt5_udrei_42; +static int hf_sbas_l1_mt5_udrei_43; +static int hf_sbas_l1_mt5_udrei_44; +static int hf_sbas_l1_mt5_udrei_45; +static int hf_sbas_l1_mt5_udrei_46; +static int hf_sbas_l1_mt5_udrei_47; +static int hf_sbas_l1_mt5_udrei_48; +static int hf_sbas_l1_mt5_udrei_49; +static int hf_sbas_l1_mt5_udrei_50; +static int hf_sbas_l1_mt5_udrei_51; +static int hf_sbas_l1_mt5_udrei_52; // see ICAO Annex 10, Vol I, Table B-40 -static int hf_sbas_l1_mt6 = -1; -static int hf_sbas_l1_mt6_iodf_2 = -1; -static int hf_sbas_l1_mt6_iodf_3 = -1; -static int hf_sbas_l1_mt6_iodf_4 = -1; -static int hf_sbas_l1_mt6_iodf_5 = -1; -static int hf_sbas_l1_mt6_udrei_1 = -1; -static int hf_sbas_l1_mt6_udrei_2 = -1; -static int hf_sbas_l1_mt6_udrei_3 = -1; -static int hf_sbas_l1_mt6_udrei_4 = -1; -static int hf_sbas_l1_mt6_udrei_5 = -1; -static int hf_sbas_l1_mt6_udrei_6 = -1; -static int hf_sbas_l1_mt6_udrei_7 = -1; -static int hf_sbas_l1_mt6_udrei_8 = -1; -static int hf_sbas_l1_mt6_udrei_9 = -1; -static int hf_sbas_l1_mt6_udrei_10 = -1; -static int hf_sbas_l1_mt6_udrei_11 = -1; -static int hf_sbas_l1_mt6_udrei_12 = -1; -static int hf_sbas_l1_mt6_udrei_13 = -1; -static int hf_sbas_l1_mt6_udrei_14 = -1; -static int hf_sbas_l1_mt6_udrei_15 = -1; -static int hf_sbas_l1_mt6_udrei_16 = -1; -static int hf_sbas_l1_mt6_udrei_17 = -1; -static int hf_sbas_l1_mt6_udrei_18 = -1; -static int hf_sbas_l1_mt6_udrei_19 = -1; -static int hf_sbas_l1_mt6_udrei_20 = -1; -static int hf_sbas_l1_mt6_udrei_21 = -1; -static int hf_sbas_l1_mt6_udrei_22 = -1; -static int hf_sbas_l1_mt6_udrei_23 = -1; -static int hf_sbas_l1_mt6_udrei_24 = -1; -static int hf_sbas_l1_mt6_udrei_25 = -1; -static int hf_sbas_l1_mt6_udrei_26 = -1; -static int hf_sbas_l1_mt6_udrei_27 = -1; -static int hf_sbas_l1_mt6_udrei_28 = -1; -static int hf_sbas_l1_mt6_udrei_29 = -1; -static int hf_sbas_l1_mt6_udrei_30 = -1; -static int hf_sbas_l1_mt6_udrei_31 = -1; -static int hf_sbas_l1_mt6_udrei_32 = -1; -static int hf_sbas_l1_mt6_udrei_33 = -1; -static int hf_sbas_l1_mt6_udrei_34 = -1; -static int hf_sbas_l1_mt6_udrei_35 = -1; -static int hf_sbas_l1_mt6_udrei_36 = -1; -static int hf_sbas_l1_mt6_udrei_37 = -1; -static int hf_sbas_l1_mt6_udrei_38 = -1; -static int hf_sbas_l1_mt6_udrei_39 = -1; -static int hf_sbas_l1_mt6_udrei_40 = -1; -static int hf_sbas_l1_mt6_udrei_41 = -1; -static int hf_sbas_l1_mt6_udrei_42 = -1; -static int hf_sbas_l1_mt6_udrei_43 = -1; -static int hf_sbas_l1_mt6_udrei_44 = -1; -static int hf_sbas_l1_mt6_udrei_45 = -1; -static int hf_sbas_l1_mt6_udrei_46 = -1; -static int hf_sbas_l1_mt6_udrei_47 = -1; -static int hf_sbas_l1_mt6_udrei_48 = -1; -static int hf_sbas_l1_mt6_udrei_49 = -1; -static int hf_sbas_l1_mt6_udrei_50 = -1; -static int hf_sbas_l1_mt6_udrei_51 = -1; +static int hf_sbas_l1_mt6; +static int hf_sbas_l1_mt6_iodf_2; +static int hf_sbas_l1_mt6_iodf_3; +static int hf_sbas_l1_mt6_iodf_4; +static int hf_sbas_l1_mt6_iodf_5; +static int hf_sbas_l1_mt6_udrei_1; +static int hf_sbas_l1_mt6_udrei_2; +static int hf_sbas_l1_mt6_udrei_3; +static int hf_sbas_l1_mt6_udrei_4; +static int hf_sbas_l1_mt6_udrei_5; +static int hf_sbas_l1_mt6_udrei_6; +static int hf_sbas_l1_mt6_udrei_7; +static int hf_sbas_l1_mt6_udrei_8; +static int hf_sbas_l1_mt6_udrei_9; +static int hf_sbas_l1_mt6_udrei_10; +static int hf_sbas_l1_mt6_udrei_11; +static int hf_sbas_l1_mt6_udrei_12; +static int hf_sbas_l1_mt6_udrei_13; +static int hf_sbas_l1_mt6_udrei_14; +static int hf_sbas_l1_mt6_udrei_15; +static int hf_sbas_l1_mt6_udrei_16; +static int hf_sbas_l1_mt6_udrei_17; +static int hf_sbas_l1_mt6_udrei_18; +static int hf_sbas_l1_mt6_udrei_19; +static int hf_sbas_l1_mt6_udrei_20; +static int hf_sbas_l1_mt6_udrei_21; +static int hf_sbas_l1_mt6_udrei_22; +static int hf_sbas_l1_mt6_udrei_23; +static int hf_sbas_l1_mt6_udrei_24; +static int hf_sbas_l1_mt6_udrei_25; +static int hf_sbas_l1_mt6_udrei_26; +static int hf_sbas_l1_mt6_udrei_27; +static int hf_sbas_l1_mt6_udrei_28; +static int hf_sbas_l1_mt6_udrei_29; +static int hf_sbas_l1_mt6_udrei_30; +static int hf_sbas_l1_mt6_udrei_31; +static int hf_sbas_l1_mt6_udrei_32; +static int hf_sbas_l1_mt6_udrei_33; +static int hf_sbas_l1_mt6_udrei_34; +static int hf_sbas_l1_mt6_udrei_35; +static int hf_sbas_l1_mt6_udrei_36; +static int hf_sbas_l1_mt6_udrei_37; +static int hf_sbas_l1_mt6_udrei_38; +static int hf_sbas_l1_mt6_udrei_39; +static int hf_sbas_l1_mt6_udrei_40; +static int hf_sbas_l1_mt6_udrei_41; +static int hf_sbas_l1_mt6_udrei_42; +static int hf_sbas_l1_mt6_udrei_43; +static int hf_sbas_l1_mt6_udrei_44; +static int hf_sbas_l1_mt6_udrei_45; +static int hf_sbas_l1_mt6_udrei_46; +static int hf_sbas_l1_mt6_udrei_47; +static int hf_sbas_l1_mt6_udrei_48; +static int hf_sbas_l1_mt6_udrei_49; +static int hf_sbas_l1_mt6_udrei_50; +static int hf_sbas_l1_mt6_udrei_51; // see ICAO Annex 10, Vol I, Table B-41 -static int hf_sbas_l1_mt7 = -1; -static int hf_sbas_l1_mt7_t_lat = -1; -static int hf_sbas_l1_mt7_iodp = -1; -static int hf_sbas_l1_mt7_spare = -1; -static int hf_sbas_l1_mt7_ai_1 = -1; -static int hf_sbas_l1_mt7_ai_2 = -1; -static int hf_sbas_l1_mt7_ai_3 = -1; -static int hf_sbas_l1_mt7_ai_4 = -1; -static int hf_sbas_l1_mt7_ai_5 = -1; -static int hf_sbas_l1_mt7_ai_6 = -1; -static int hf_sbas_l1_mt7_ai_7 = -1; -static int hf_sbas_l1_mt7_ai_8 = -1; -static int hf_sbas_l1_mt7_ai_9 = -1; -static int hf_sbas_l1_mt7_ai_10 = -1; -static int hf_sbas_l1_mt7_ai_11 = -1; -static int hf_sbas_l1_mt7_ai_12 = -1; -static int hf_sbas_l1_mt7_ai_13 = -1; -static int hf_sbas_l1_mt7_ai_14 = -1; -static int hf_sbas_l1_mt7_ai_15 = -1; -static int hf_sbas_l1_mt7_ai_16 = -1; -static int hf_sbas_l1_mt7_ai_17 = -1; -static int hf_sbas_l1_mt7_ai_18 = -1; -static int hf_sbas_l1_mt7_ai_19 = -1; -static int hf_sbas_l1_mt7_ai_20 = -1; -static int hf_sbas_l1_mt7_ai_21 = -1; -static int hf_sbas_l1_mt7_ai_22 = -1; -static int hf_sbas_l1_mt7_ai_23 = -1; -static int hf_sbas_l1_mt7_ai_24 = -1; -static int hf_sbas_l1_mt7_ai_25 = -1; -static int hf_sbas_l1_mt7_ai_26 = -1; -static int hf_sbas_l1_mt7_ai_27 = -1; -static int hf_sbas_l1_mt7_ai_28 = -1; -static int hf_sbas_l1_mt7_ai_29 = -1; -static int hf_sbas_l1_mt7_ai_30 = -1; -static int hf_sbas_l1_mt7_ai_31 = -1; -static int hf_sbas_l1_mt7_ai_32 = -1; -static int hf_sbas_l1_mt7_ai_33 = -1; -static int hf_sbas_l1_mt7_ai_34 = -1; -static int hf_sbas_l1_mt7_ai_35 = -1; -static int hf_sbas_l1_mt7_ai_36 = -1; -static int hf_sbas_l1_mt7_ai_37 = -1; -static int hf_sbas_l1_mt7_ai_38 = -1; -static int hf_sbas_l1_mt7_ai_39 = -1; -static int hf_sbas_l1_mt7_ai_40 = -1; -static int hf_sbas_l1_mt7_ai_41 = -1; -static int hf_sbas_l1_mt7_ai_42 = -1; -static int hf_sbas_l1_mt7_ai_43 = -1; -static int hf_sbas_l1_mt7_ai_44 = -1; -static int hf_sbas_l1_mt7_ai_45 = -1; -static int hf_sbas_l1_mt7_ai_46 = -1; -static int hf_sbas_l1_mt7_ai_47 = -1; -static int hf_sbas_l1_mt7_ai_48 = -1; -static int hf_sbas_l1_mt7_ai_49 = -1; -static int hf_sbas_l1_mt7_ai_50 = -1; -static int hf_sbas_l1_mt7_ai_51 = -1; +static int hf_sbas_l1_mt7; +static int hf_sbas_l1_mt7_t_lat; +static int hf_sbas_l1_mt7_iodp; +static int hf_sbas_l1_mt7_spare; +static int hf_sbas_l1_mt7_ai_1; +static int hf_sbas_l1_mt7_ai_2; +static int hf_sbas_l1_mt7_ai_3; +static int hf_sbas_l1_mt7_ai_4; +static int hf_sbas_l1_mt7_ai_5; +static int hf_sbas_l1_mt7_ai_6; +static int hf_sbas_l1_mt7_ai_7; +static int hf_sbas_l1_mt7_ai_8; +static int hf_sbas_l1_mt7_ai_9; +static int hf_sbas_l1_mt7_ai_10; +static int hf_sbas_l1_mt7_ai_11; +static int hf_sbas_l1_mt7_ai_12; +static int hf_sbas_l1_mt7_ai_13; +static int hf_sbas_l1_mt7_ai_14; +static int hf_sbas_l1_mt7_ai_15; +static int hf_sbas_l1_mt7_ai_16; +static int hf_sbas_l1_mt7_ai_17; +static int hf_sbas_l1_mt7_ai_18; +static int hf_sbas_l1_mt7_ai_19; +static int hf_sbas_l1_mt7_ai_20; +static int hf_sbas_l1_mt7_ai_21; +static int hf_sbas_l1_mt7_ai_22; +static int hf_sbas_l1_mt7_ai_23; +static int hf_sbas_l1_mt7_ai_24; +static int hf_sbas_l1_mt7_ai_25; +static int hf_sbas_l1_mt7_ai_26; +static int hf_sbas_l1_mt7_ai_27; +static int hf_sbas_l1_mt7_ai_28; +static int hf_sbas_l1_mt7_ai_29; +static int hf_sbas_l1_mt7_ai_30; +static int hf_sbas_l1_mt7_ai_31; +static int hf_sbas_l1_mt7_ai_32; +static int hf_sbas_l1_mt7_ai_33; +static int hf_sbas_l1_mt7_ai_34; +static int hf_sbas_l1_mt7_ai_35; +static int hf_sbas_l1_mt7_ai_36; +static int hf_sbas_l1_mt7_ai_37; +static int hf_sbas_l1_mt7_ai_38; +static int hf_sbas_l1_mt7_ai_39; +static int hf_sbas_l1_mt7_ai_40; +static int hf_sbas_l1_mt7_ai_41; +static int hf_sbas_l1_mt7_ai_42; +static int hf_sbas_l1_mt7_ai_43; +static int hf_sbas_l1_mt7_ai_44; +static int hf_sbas_l1_mt7_ai_45; +static int hf_sbas_l1_mt7_ai_46; +static int hf_sbas_l1_mt7_ai_47; +static int hf_sbas_l1_mt7_ai_48; +static int hf_sbas_l1_mt7_ai_49; +static int hf_sbas_l1_mt7_ai_50; +static int hf_sbas_l1_mt7_ai_51; + +// see ICAO Annex 10, Vol I, Table B-45 +static int hf_sbas_l1_mt17; +static int hf_sbas_l1_mt17_reserved; +static int hf_sbas_l1_mt17_prn; +static int hf_sbas_l1_mt17_health_and_status; +static int hf_sbas_l1_mt17_health_and_status_spid; +static int hf_sbas_l1_mt17_health_and_status_spare; +static int hf_sbas_l1_mt17_health_and_status_sat_status_basic_corrections; +static int hf_sbas_l1_mt17_health_and_status_precision_corrections; +static int hf_sbas_l1_mt17_health_and_status_ranging; +static int hf_sbas_l1_mt17_x_ga; +static int hf_sbas_l1_mt17_y_ga; +static int hf_sbas_l1_mt17_z_ga; +static int hf_sbas_l1_mt17_x_ga_vel; +static int hf_sbas_l1_mt17_y_ga_vel; +static int hf_sbas_l1_mt17_z_ga_vel; +static int hf_sbas_l1_mt17_t_a; + +static int * const sbas_l1_mt17_health_and_status_fields[] = { + &hf_sbas_l1_mt17_health_and_status_spid, + &hf_sbas_l1_mt17_health_and_status_spare, + &hf_sbas_l1_mt17_health_and_status_sat_status_basic_corrections, + &hf_sbas_l1_mt17_health_and_status_precision_corrections, + &hf_sbas_l1_mt17_health_and_status_ranging, + NULL +}; + +// see ICAO Annex 10, Vol I, Table B-46 +static int hf_sbas_l1_mt18; +static int hf_sbas_l1_mt18_nr_igp_bands; +static int hf_sbas_l1_mt18_igp_band_id; +static int hf_sbas_l1_mt18_iodi_k; +static int hf_sbas_l1_mt18_igp_mask_180w; +static int hf_sbas_l1_mt18_igp_mask_175w; +static int hf_sbas_l1_mt18_igp_mask_170w; +static int hf_sbas_l1_mt18_igp_mask_165w; +static int hf_sbas_l1_mt18_igp_mask_160w; +static int hf_sbas_l1_mt18_igp_mask_155w; +static int hf_sbas_l1_mt18_igp_mask_150w; +static int hf_sbas_l1_mt18_igp_mask_145w; +static int hf_sbas_l1_mt18_igp_mask_140w; +static int hf_sbas_l1_mt18_igp_mask_135w; +static int hf_sbas_l1_mt18_igp_mask_130w; +static int hf_sbas_l1_mt18_igp_mask_125w; +static int hf_sbas_l1_mt18_igp_mask_120w; +static int hf_sbas_l1_mt18_igp_mask_115w; +static int hf_sbas_l1_mt18_igp_mask_110w; +static int hf_sbas_l1_mt18_igp_mask_105w; +static int hf_sbas_l1_mt18_igp_mask_100w; +static int hf_sbas_l1_mt18_igp_mask_95w; +static int hf_sbas_l1_mt18_igp_mask_90w; +static int hf_sbas_l1_mt18_igp_mask_85w; +static int hf_sbas_l1_mt18_igp_mask_80w; +static int hf_sbas_l1_mt18_igp_mask_75w; +static int hf_sbas_l1_mt18_igp_mask_70w; +static int hf_sbas_l1_mt18_igp_mask_65w; +static int hf_sbas_l1_mt18_igp_mask_60w; +static int hf_sbas_l1_mt18_igp_mask_55w; +static int hf_sbas_l1_mt18_igp_mask_50w; +static int hf_sbas_l1_mt18_igp_mask_45w; +static int hf_sbas_l1_mt18_igp_mask_40w; +static int hf_sbas_l1_mt18_igp_mask_35w; +static int hf_sbas_l1_mt18_igp_mask_30w; +static int hf_sbas_l1_mt18_igp_mask_25w; +static int hf_sbas_l1_mt18_igp_mask_20w; +static int hf_sbas_l1_mt18_igp_mask_15w; +static int hf_sbas_l1_mt18_igp_mask_10w; +static int hf_sbas_l1_mt18_igp_mask_5w; +static int hf_sbas_l1_mt18_igp_mask_0; +static int hf_sbas_l1_mt18_igp_mask_5e; +static int hf_sbas_l1_mt18_igp_mask_10e; +static int hf_sbas_l1_mt18_igp_mask_15e; +static int hf_sbas_l1_mt18_igp_mask_20e; +static int hf_sbas_l1_mt18_igp_mask_25e; +static int hf_sbas_l1_mt18_igp_mask_30e; +static int hf_sbas_l1_mt18_igp_mask_35e; +static int hf_sbas_l1_mt18_igp_mask_40e; +static int hf_sbas_l1_mt18_igp_mask_45e; +static int hf_sbas_l1_mt18_igp_mask_50e; +static int hf_sbas_l1_mt18_igp_mask_55e; +static int hf_sbas_l1_mt18_igp_mask_60e; +static int hf_sbas_l1_mt18_igp_mask_65e; +static int hf_sbas_l1_mt18_igp_mask_70e; +static int hf_sbas_l1_mt18_igp_mask_75e; +static int hf_sbas_l1_mt18_igp_mask_80e; +static int hf_sbas_l1_mt18_igp_mask_85e; +static int hf_sbas_l1_mt18_igp_mask_90e; +static int hf_sbas_l1_mt18_igp_mask_95e; +static int hf_sbas_l1_mt18_igp_mask_100e; +static int hf_sbas_l1_mt18_igp_mask_105e; +static int hf_sbas_l1_mt18_igp_mask_110e; +static int hf_sbas_l1_mt18_igp_mask_115e; +static int hf_sbas_l1_mt18_igp_mask_120e; +static int hf_sbas_l1_mt18_igp_mask_125e; +static int hf_sbas_l1_mt18_igp_mask_130e; +static int hf_sbas_l1_mt18_igp_mask_135e; +static int hf_sbas_l1_mt18_igp_mask_140e; +static int hf_sbas_l1_mt18_igp_mask_145e; +static int hf_sbas_l1_mt18_igp_mask_150e; +static int hf_sbas_l1_mt18_igp_mask_155e; +static int hf_sbas_l1_mt18_igp_mask_160e; +static int hf_sbas_l1_mt18_igp_mask_165e; +static int hf_sbas_l1_mt18_igp_mask_170e; +static int hf_sbas_l1_mt18_igp_mask_175e; +static int hf_sbas_l1_mt18_igp_mask_60n_1; +static int hf_sbas_l1_mt18_igp_mask_60n_2; +static int hf_sbas_l1_mt18_igp_mask_65n; +static int hf_sbas_l1_mt18_igp_mask_70n; +static int hf_sbas_l1_mt18_igp_mask_75n; +static int hf_sbas_l1_mt18_igp_mask_85n; +static int hf_sbas_l1_mt18_igp_mask_60s_1; +static int hf_sbas_l1_mt18_igp_mask_60s_2; +static int hf_sbas_l1_mt18_igp_mask_65s; +static int hf_sbas_l1_mt18_igp_mask_70s; +static int hf_sbas_l1_mt18_igp_mask_75s; +static int hf_sbas_l1_mt18_igp_mask_85s; +static int hf_sbas_l1_mt18_spare; + +// see ICAO Annex 10, Vol I, Table B-47 +static int hf_sbas_l1_mt24; +static int hf_sbas_l1_mt24_fc_i1; +static int hf_sbas_l1_mt24_fc_i2; +static int hf_sbas_l1_mt24_fc_i3; +static int hf_sbas_l1_mt24_fc_i4; +static int hf_sbas_l1_mt24_fc_i5; +static int hf_sbas_l1_mt24_fc_i6; +static int hf_sbas_l1_mt24_udrei_i1; +static int hf_sbas_l1_mt24_udrei_i2; +static int hf_sbas_l1_mt24_udrei_i3; +static int hf_sbas_l1_mt24_udrei_i4; +static int hf_sbas_l1_mt24_udrei_i5; +static int hf_sbas_l1_mt24_udrei_i6; +static int hf_sbas_l1_mt24_iodp; +static int hf_sbas_l1_mt24_fc_type; +static int hf_sbas_l1_mt24_iodf_j; +static int hf_sbas_l1_mt24_spare; +static int hf_sbas_l1_mt24_velocity_code; +static int hf_sbas_l1_mt24_v0_prn_mask_nr_1; +static int hf_sbas_l1_mt24_v0_iod_1; +static int hf_sbas_l1_mt24_v0_delta_x_1; +static int hf_sbas_l1_mt24_v0_delta_y_1; +static int hf_sbas_l1_mt24_v0_delta_z_1; +static int hf_sbas_l1_mt24_v0_delta_a_1_f0; +static int hf_sbas_l1_mt24_v0_prn_mask_nr_2; +static int hf_sbas_l1_mt24_v0_iod_2; +static int hf_sbas_l1_mt24_v0_delta_x_2; +static int hf_sbas_l1_mt24_v0_delta_y_2; +static int hf_sbas_l1_mt24_v0_delta_z_2; +static int hf_sbas_l1_mt24_v0_delta_a_2_f0; +static int hf_sbas_l1_mt24_v0_iodp; +static int hf_sbas_l1_mt24_v0_spare; +static int hf_sbas_l1_mt24_v1_prn_mask_nr; +static int hf_sbas_l1_mt24_v1_iod; +static int hf_sbas_l1_mt24_v1_delta_x; +static int hf_sbas_l1_mt24_v1_delta_y; +static int hf_sbas_l1_mt24_v1_delta_z; +static int hf_sbas_l1_mt24_v1_delta_a_f0; +static int hf_sbas_l1_mt24_v1_delta_x_vel; +static int hf_sbas_l1_mt24_v1_delta_y_vel; +static int hf_sbas_l1_mt24_v1_delta_z_vel; +static int hf_sbas_l1_mt24_v1_delta_a_f1; +static int hf_sbas_l1_mt24_v1_t_lt; +static int hf_sbas_l1_mt24_v1_iodp; // see ICAO Annex 10, Vol I, Table B-48 -static int hf_sbas_l1_mt25 = -1; -static int hf_sbas_l1_mt25_h1_velocity_code = -1; -static int hf_sbas_l1_mt25_h1_v0_prn_mask_nr_1 = -1; -static int hf_sbas_l1_mt25_h1_v0_iod_1 = -1; -static int hf_sbas_l1_mt25_h1_v0_delta_x_1 = -1; -static int hf_sbas_l1_mt25_h1_v0_delta_y_1 = -1; -static int hf_sbas_l1_mt25_h1_v0_delta_z_1 = -1; -static int hf_sbas_l1_mt25_h1_v0_delta_a_1_f0 = -1; -static int hf_sbas_l1_mt25_h1_v0_prn_mask_nr_2 = -1; -static int hf_sbas_l1_mt25_h1_v0_iod_2 = -1; -static int hf_sbas_l1_mt25_h1_v0_delta_x_2 = -1; -static int hf_sbas_l1_mt25_h1_v0_delta_y_2 = -1; -static int hf_sbas_l1_mt25_h1_v0_delta_z_2 = -1; -static int hf_sbas_l1_mt25_h1_v0_delta_a_2_f0 = -1; -static int hf_sbas_l1_mt25_h1_v0_iodp = -1; -static int hf_sbas_l1_mt25_h1_v0_spare = -1; -static int hf_sbas_l1_mt25_h2_velocity_code = -1; -static int hf_sbas_l1_mt25_h2_v0_prn_mask_nr_1 = -1; -static int hf_sbas_l1_mt25_h2_v0_iod_1 = -1; -static int hf_sbas_l1_mt25_h2_v0_delta_x_1 = -1; -static int hf_sbas_l1_mt25_h2_v0_delta_y_1 = -1; -static int hf_sbas_l1_mt25_h2_v0_delta_z_1 = -1; -static int hf_sbas_l1_mt25_h2_v0_delta_a_1_f0 = -1; -static int hf_sbas_l1_mt25_h2_v0_prn_mask_nr_2 = -1; -static int hf_sbas_l1_mt25_h2_v0_iod_2 = -1; -static int hf_sbas_l1_mt25_h2_v0_delta_x_2 = -1; -static int hf_sbas_l1_mt25_h2_v0_delta_y_2 = -1; -static int hf_sbas_l1_mt25_h2_v0_delta_z_2 = -1; -static int hf_sbas_l1_mt25_h2_v0_delta_a_2_f0 = -1; -static int hf_sbas_l1_mt25_h2_v0_iodp = -1; -static int hf_sbas_l1_mt25_h2_v0_spare = -1; +static int hf_sbas_l1_mt25; +static int hf_sbas_l1_mt25_h1_velocity_code; +static int hf_sbas_l1_mt25_h1_v0_prn_mask_nr_1; +static int hf_sbas_l1_mt25_h1_v0_iod_1; +static int hf_sbas_l1_mt25_h1_v0_delta_x_1; +static int hf_sbas_l1_mt25_h1_v0_delta_y_1; +static int hf_sbas_l1_mt25_h1_v0_delta_z_1; +static int hf_sbas_l1_mt25_h1_v0_delta_a_1_f0; +static int hf_sbas_l1_mt25_h1_v0_prn_mask_nr_2; +static int hf_sbas_l1_mt25_h1_v0_iod_2; +static int hf_sbas_l1_mt25_h1_v0_delta_x_2; +static int hf_sbas_l1_mt25_h1_v0_delta_y_2; +static int hf_sbas_l1_mt25_h1_v0_delta_z_2; +static int hf_sbas_l1_mt25_h1_v0_delta_a_2_f0; +static int hf_sbas_l1_mt25_h1_v0_iodp; +static int hf_sbas_l1_mt25_h1_v0_spare; +static int hf_sbas_l1_mt25_h1_v1_prn_mask_nr; +static int hf_sbas_l1_mt25_h1_v1_iod; +static int hf_sbas_l1_mt25_h1_v1_delta_x; +static int hf_sbas_l1_mt25_h1_v1_delta_y; +static int hf_sbas_l1_mt25_h1_v1_delta_z; +static int hf_sbas_l1_mt25_h1_v1_delta_a_f0; +static int hf_sbas_l1_mt25_h1_v1_delta_x_vel; +static int hf_sbas_l1_mt25_h1_v1_delta_y_vel; +static int hf_sbas_l1_mt25_h1_v1_delta_z_vel; +static int hf_sbas_l1_mt25_h1_v1_delta_a_f1; +static int hf_sbas_l1_mt25_h1_v1_t_lt; +static int hf_sbas_l1_mt25_h1_v1_iodp; +static int hf_sbas_l1_mt25_h2_velocity_code; +static int hf_sbas_l1_mt25_h2_v0_prn_mask_nr_1; +static int hf_sbas_l1_mt25_h2_v0_iod_1; +static int hf_sbas_l1_mt25_h2_v0_delta_x_1; +static int hf_sbas_l1_mt25_h2_v0_delta_y_1; +static int hf_sbas_l1_mt25_h2_v0_delta_z_1; +static int hf_sbas_l1_mt25_h2_v0_delta_a_1_f0; +static int hf_sbas_l1_mt25_h2_v0_prn_mask_nr_2; +static int hf_sbas_l1_mt25_h2_v0_iod_2; +static int hf_sbas_l1_mt25_h2_v0_delta_x_2; +static int hf_sbas_l1_mt25_h2_v0_delta_y_2; +static int hf_sbas_l1_mt25_h2_v0_delta_z_2; +static int hf_sbas_l1_mt25_h2_v0_delta_a_2_f0; +static int hf_sbas_l1_mt25_h2_v0_iodp; +static int hf_sbas_l1_mt25_h2_v0_spare; +static int hf_sbas_l1_mt25_h2_v1_prn_mask_nr; +static int hf_sbas_l1_mt25_h2_v1_iod; +static int hf_sbas_l1_mt25_h2_v1_delta_x; +static int hf_sbas_l1_mt25_h2_v1_delta_y; +static int hf_sbas_l1_mt25_h2_v1_delta_z; +static int hf_sbas_l1_mt25_h2_v1_delta_a_f0; +static int hf_sbas_l1_mt25_h2_v1_delta_x_vel; +static int hf_sbas_l1_mt25_h2_v1_delta_y_vel; +static int hf_sbas_l1_mt25_h2_v1_delta_z_vel; +static int hf_sbas_l1_mt25_h2_v1_delta_a_f1; +static int hf_sbas_l1_mt25_h2_v1_t_lt; +static int hf_sbas_l1_mt25_h2_v1_iodp; + +// see ICAO Annex 10, Vol I, Table B-50 +static int hf_sbas_l1_mt26; +static int hf_sbas_l1_mt26_igp_band_id; +static int hf_sbas_l1_mt26_igp_block_id; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_1; +static int hf_sbas_l1_mt26_givei_1; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_2; +static int hf_sbas_l1_mt26_givei_2; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_3; +static int hf_sbas_l1_mt26_givei_3; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_4; +static int hf_sbas_l1_mt26_givei_4; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_5; +static int hf_sbas_l1_mt26_givei_5; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_6; +static int hf_sbas_l1_mt26_givei_6; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_7; +static int hf_sbas_l1_mt26_givei_7; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_8; +static int hf_sbas_l1_mt26_givei_8; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_9; +static int hf_sbas_l1_mt26_givei_9; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_10; +static int hf_sbas_l1_mt26_givei_10; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_11; +static int hf_sbas_l1_mt26_givei_11; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_12; +static int hf_sbas_l1_mt26_givei_12; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_13; +static int hf_sbas_l1_mt26_givei_13; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_14; +static int hf_sbas_l1_mt26_givei_14; +static int hf_sbas_l1_mt26_igp_vertical_delay_est_15; +static int hf_sbas_l1_mt26_givei_15; +static int hf_sbas_l1_mt26_iodi_k; +static int hf_sbas_l1_mt26_spare; + +// see ICAO Annex 10, Vol I, Table B-52 +static int hf_sbas_l1_mt63; +static int hf_sbas_l1_mt63_spare_1; +static int hf_sbas_l1_mt63_spare_2; +static int hf_sbas_l1_mt63_spare_3; static dissector_table_t sbas_l1_mt_dissector_table; -static expert_field ei_sbas_l1_preamble = EI_INIT; -static expert_field ei_sbas_l1_mt0 = EI_INIT; -static expert_field ei_sbas_l1_crc = EI_INIT; - -static int ett_sbas_l1 = -1; -static int ett_sbas_l1_mt1 = -1; -static int ett_sbas_l1_mt2 = -1; -static int ett_sbas_l1_mt3 = -1; -static int ett_sbas_l1_mt4 = -1; -static int ett_sbas_l1_mt5 = -1; -static int ett_sbas_l1_mt6 = -1; -static int ett_sbas_l1_mt7 = -1; -static int ett_sbas_l1_mt25 = -1; +static expert_field ei_sbas_l1_preamble; +static expert_field ei_sbas_l1_mt0; +static expert_field ei_sbas_l1_crc; +static expert_field ei_sbas_l1_mt26_igp_band_id; +static expert_field ei_sbas_l1_mt26_igp_block_id; + +static int ett_sbas_l1; +static int ett_sbas_l1_mt0; +static int ett_sbas_l1_mt1; +static int ett_sbas_l1_mt2; +static int ett_sbas_l1_mt3; +static int ett_sbas_l1_mt4; +static int ett_sbas_l1_mt5; +static int ett_sbas_l1_mt6; +static int ett_sbas_l1_mt7; +static int ett_sbas_l1_mt17; +static int ett_sbas_l1_mt17_prn_data[3]; +static int ett_sbas_l1_mt17_health_and_status; +static int ett_sbas_l1_mt18; +static int ett_sbas_l1_mt24; +static int ett_sbas_l1_mt25; +static int ett_sbas_l1_mt26; +static int ett_sbas_l1_mt63; // compute the CRC24Q checksum for an SBAS L1 nav msg // see ICAO Annex 10, Vol I, Appendix B, Section 3.5.3.5 -static guint32 sbas_crc24q(const guint8 *data) { - guint32 crc = 0; +static uint32_t sbas_crc24q(const uint8_t *data) { + uint32_t crc = 0; // source byte and bit level index - gint s8 = 0, s1 = 7; + int s8 = 0, s1 = 7; - guint8 s,d = 0; + uint8_t s,d = 0; // At byte level, nav msg needs to be right aligned. // So, pretend that 6 bits (with value zero) have been processed. - guint8 d1 = 6; + uint8_t d1 = 6; // process 226 bits nav msg (= 28 bytes + 2 bits) while ((s8 < 28) || (s8 == 28 && s1 > 5)) { @@ -460,13 +744,39 @@ static guint32 sbas_crc24q(const guint8 *data) { return crc; } +/* Format GEO position (X or Y axis) with 2600m resolution */ +static void fmt_geo_xy_position(char *label, int32_t c) { + snprintf(label, ITEM_LABEL_LENGTH, "%d m", c * 2600); +} + +/* Format GEO position (Z axis) with 26000m resolution */ +static void fmt_geo_z_position(char *label, int32_t c) { + snprintf(label, ITEM_LABEL_LENGTH, "%d m", c * 26000); +} + +/* Format GEO velocity (X or Y axis) with 10m/s resolution */ +static void fmt_geo_xy_velocity(char *label, int32_t c) { + snprintf(label, ITEM_LABEL_LENGTH, "%d m/s", c * 10); +} + +/* Format GEO velocity (Z axis) with 60m/s resolution */ +static void fmt_geo_z_velocity(char *label, int32_t c) { + snprintf(label, ITEM_LABEL_LENGTH, "%d m/s", c * 60); +} + +/* Format time of almanac with 64s resolution */ +static void fmt_time_of_almanac(char *label, uint32_t c) { + c = c * 64; + snprintf(label, ITEM_LABEL_LENGTH, "%us (%02u:%02u:%02u)", c, c / 3600, (c / 60) % 60, c % 60); +} + /* Format clock corrections */ -static void fmt_clock_correction(gchar *label, gint32 c) { +static void fmt_clock_correction(char *label, int32_t c) { snprintf(label, ITEM_LABEL_LENGTH, "%d * 2^-31 s", c); } /* Format corrections with 0.125m resolution */ -static void fmt_correction_125m(gchar *label, gint32 c) { +static void fmt_correction_125m(char *label, int32_t c) { c = c * 125; if (c >= 0) { snprintf(label, ITEM_LABEL_LENGTH, "%d.%03dm", c / 1000, c % 1000); @@ -476,10 +786,32 @@ static void fmt_correction_125m(gchar *label, gint32 c) { } } +/* Format velocity corrections with 2^-11 m/s resolution */ +static void fmt_velo_correction(char *label, int32_t c) { + int64_t temp = c * INT64_C(48828125); + if (c >= 0) { + snprintf(label, ITEM_LABEL_LENGTH, " %" PRId64 ".%011" PRId64 "m/s", temp / 100000000000, temp % 100000000000); + } + else { + snprintf(label, ITEM_LABEL_LENGTH, "-%" PRId64 ".%011" PRId64 "m/s", -temp / 100000000000, -temp % 100000000000); + } +} + +/* Format clock rate corrections with 2^-39 s/s resolution */ +static void fmt_clk_rate_correction(char *label, int32_t c) { + snprintf(label, ITEM_LABEL_LENGTH, "%d * 2^-39s/s", c); +} + +/* Format time of applicability with 16s resolution */ +static void fmt_time_of_applicability(char *label, uint32_t c) { + c = c * 16; + snprintf(label, ITEM_LABEL_LENGTH, "%us (%02u:%02u:%02u)", c, c / 3600, (c / 60) % 60, c % 60); +} + /* Dissect SBAS L1 message */ static int dissect_sbas_l1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { tvbuff_t *next_tvb; - guint32 preamble, mt, cmp_crc; + uint32_t preamble, mt, cmp_crc; col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1"); col_clear(pinfo->cinfo, COL_INFO); @@ -509,7 +841,7 @@ static int dissect_sbas_l1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, } // checksum - cmp_crc = sbas_crc24q((guint8 *)tvb_memdup(pinfo->pool, tvb, 0, 29)); + cmp_crc = sbas_crc24q((uint8_t *)tvb_memdup(pinfo->pool, tvb, 0, 29)); proto_tree_add_checksum(sbas_l1_tree, tvb, 28, hf_sbas_l1_chksum, -1, &ei_sbas_l1_crc, NULL, cmp_crc, ENC_BIG_ENDIAN, PROTO_CHECKSUM_VERIFY); @@ -522,6 +854,21 @@ static int dissect_sbas_l1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, return tvb_captured_length(tvb); } +/* Dissect SBAS L1 MT 0 */ +static int dissect_sbas_l1_mt0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { + col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT0"); + col_clear(pinfo->cinfo, COL_INFO); + + proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt0, tvb, 0, 32, ENC_NA); + proto_tree *sbas_l1_mt0_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt0); + + proto_tree_add_item(sbas_l1_mt0_tree, hf_sbas_l1_mt0_spare_1, tvb, 0, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt0_tree, hf_sbas_l1_mt0_spare_2, tvb, 1, 26, ENC_NA); + proto_tree_add_item(sbas_l1_mt0_tree, hf_sbas_l1_mt0_spare_3, tvb, 27, 1, ENC_NA); + + return tvb_captured_length(tvb); +} + /* Dissect SBAS L1 MT 1 */ static int dissect_sbas_l1_mt1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT1"); @@ -530,12 +877,12 @@ static int dissect_sbas_l1_mt1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt1, tvb, 0, 32, ENC_NA); proto_tree *sbas_l1_mt1_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt1); - proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_gps, tvb, 0, 6, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_glonass, tvb, 5, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_spare_1, tvb, 8, 8, ENC_NA); - proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_sbas, tvb, 15, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_spare_2, tvb, 18, 9, ENC_NA); - proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_iodp, tvb, 26, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_gps, tvb, 0, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_glonass, tvb, 5, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_spare_1, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_sbas, tvb, 15, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_spare_2, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_iodp, tvb, 27, 1, ENC_NA); return tvb_captured_length(tvb); } @@ -548,33 +895,33 @@ static int dissect_sbas_l1_mt2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt2, tvb, 0, 32, ENC_NA); proto_tree *sbas_l1_mt2_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt2); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_iodf_j, tvb, 0, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_iodf_2, tvb, 0, 1, ENC_NA); proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_iodp, tvb, 1, 1, ENC_NA); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_1, tvb, 1, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_2, tvb, 2, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_3, tvb, 4, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_4, tvb, 5, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_5, tvb, 7, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_6, tvb, 8, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_7, tvb, 10, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_8, tvb, 11, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_9, tvb, 13, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_10, tvb, 14, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_11, tvb, 16, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_12, tvb, 17, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_13, tvb, 19, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_1, tvb, 1, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_2, tvb, 2, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_3, tvb, 4, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_4, tvb, 5, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_5, tvb, 7, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_6, tvb, 8, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_7, tvb, 10, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_8, tvb, 11, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_9, tvb, 13, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_10, tvb, 14, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_11, tvb, 16, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_12, tvb, 17, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_13, tvb, 19, 4, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_1, tvb, 20, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_2, tvb, 21, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_2, tvb, 21, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_3, tvb, 21, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_4, tvb, 22, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_4, tvb, 22, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_5, tvb, 22, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_6, tvb, 23, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_6, tvb, 23, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_7, tvb, 23, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_8, tvb, 24, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_8, tvb, 24, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_9, tvb, 24, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_10, tvb, 25, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_10, tvb, 25, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_11, tvb, 25, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_12, tvb, 26, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_12, tvb, 26, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_13, tvb, 26, 2, ENC_BIG_ENDIAN); return tvb_captured_length(tvb); @@ -588,33 +935,33 @@ static int dissect_sbas_l1_mt3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt3, tvb, 0, 32, ENC_NA); proto_tree *sbas_l1_mt3_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt3); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_iodf_j, tvb, 0, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_iodf_3, tvb, 0, 1, ENC_NA); proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_iodp, tvb, 1, 1, ENC_NA); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_14, tvb, 1, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_15, tvb, 2, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_16, tvb, 4, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_17, tvb, 5, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_18, tvb, 7, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_19, tvb, 8, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_20, tvb, 10, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_21, tvb, 11, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_22, tvb, 13, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_23, tvb, 14, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_24, tvb, 16, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_25, tvb, 17, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_26, tvb, 19, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_14, tvb, 1, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_15, tvb, 2, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_16, tvb, 4, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_17, tvb, 5, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_18, tvb, 7, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_19, tvb, 8, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_20, tvb, 10, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_21, tvb, 11, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_22, tvb, 13, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_23, tvb, 14, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_24, tvb, 16, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_25, tvb, 17, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_26, tvb, 19, 4, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_14, tvb, 20, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_15, tvb, 21, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_15, tvb, 21, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_16, tvb, 21, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_17, tvb, 22, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_17, tvb, 22, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_18, tvb, 22, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_19, tvb, 23, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_19, tvb, 23, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_20, tvb, 23, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_21, tvb, 24, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_21, tvb, 24, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_22, tvb, 24, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_23, tvb, 25, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_23, tvb, 25, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_24, tvb, 25, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_25, tvb, 26, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_25, tvb, 26, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_26, tvb, 26, 2, ENC_BIG_ENDIAN); return tvb_captured_length(tvb); @@ -628,33 +975,33 @@ static int dissect_sbas_l1_mt4(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt4, tvb, 0, 32, ENC_NA); proto_tree *sbas_l1_mt4_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt4); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_iodf_j, tvb, 0, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_iodf_4, tvb, 0, 1, ENC_NA); proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_iodp, tvb, 1, 1, ENC_NA); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_27, tvb, 1, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_28, tvb, 2, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_29, tvb, 4, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_30, tvb, 5, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_31, tvb, 7, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_32, tvb, 8, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_33, tvb, 10, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_34, tvb, 11, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_35, tvb, 13, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_36, tvb, 14, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_37, tvb, 16, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_38, tvb, 17, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_39, tvb, 19, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_27, tvb, 1, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_28, tvb, 2, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_29, tvb, 4, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_30, tvb, 5, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_31, tvb, 7, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_32, tvb, 8, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_33, tvb, 10, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_34, tvb, 11, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_35, tvb, 13, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_36, tvb, 14, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_37, tvb, 16, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_38, tvb, 17, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_39, tvb, 19, 4, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_27, tvb, 20, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_28, tvb, 21, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_28, tvb, 21, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_29, tvb, 21, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_30, tvb, 22, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_30, tvb, 22, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_31, tvb, 22, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_32, tvb, 23, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_32, tvb, 23, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_33, tvb, 23, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_34, tvb, 24, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_34, tvb, 24, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_35, tvb, 24, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_36, tvb, 25, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_36, tvb, 25, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_37, tvb, 25, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_38, tvb, 26, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_38, tvb, 26, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_39, tvb, 26, 2, ENC_BIG_ENDIAN); return tvb_captured_length(tvb); @@ -668,33 +1015,33 @@ static int dissect_sbas_l1_mt5(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt5, tvb, 0, 32, ENC_NA); proto_tree *sbas_l1_mt5_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt5); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_iodf_j, tvb, 0, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_iodf_5, tvb, 0, 1, ENC_NA); proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_iodp, tvb, 1, 1, ENC_NA); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_40, tvb, 1, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_41, tvb, 2, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_42, tvb, 4, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_43, tvb, 5, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_44, tvb, 7, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_45, tvb, 8, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_46, tvb, 10, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_47, tvb, 11, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_48, tvb, 13, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_49, tvb, 14, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_50, tvb, 16, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_51, tvb, 17, 3, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_52, tvb, 19, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_40, tvb, 1, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_41, tvb, 2, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_42, tvb, 4, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_43, tvb, 5, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_44, tvb, 7, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_45, tvb, 8, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_46, tvb, 10, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_47, tvb, 11, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_48, tvb, 13, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_49, tvb, 14, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_50, tvb, 16, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_51, tvb, 17, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_52, tvb, 19, 4, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_40, tvb, 20, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_41, tvb, 21, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_41, tvb, 21, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_42, tvb, 21, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_43, tvb, 22, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_43, tvb, 22, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_44, tvb, 22, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_45, tvb, 23, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_45, tvb, 23, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_46, tvb, 23, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_47, tvb, 24, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_47, tvb, 24, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_48, tvb, 24, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_49, tvb, 25, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_49, tvb, 25, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_50, tvb, 25, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_51, tvb, 26, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_51, tvb, 26, 2, ENC_BIG_ENDIAN); proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_52, tvb, 26, 2, ENC_BIG_ENDIAN); return tvb_captured_length(tvb); @@ -709,10 +1056,10 @@ static int dissect_sbas_l1_mt6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr proto_tree *sbas_l1_mt6_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt6); // IODF_2 to IODF_5 - proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_2, tvb, 0, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_3, tvb, 1, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_4, tvb, 1, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_5, tvb, 1, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_2, tvb, 0, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_3, tvb, 1, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_4, tvb, 1, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_5, tvb, 1, 1, ENC_NA); // UDREI_i proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_1, tvb, 1, 2, ENC_BIG_ENDIAN); @@ -838,9 +1185,239 @@ static int dissect_sbas_l1_mt7(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr return tvb_captured_length(tvb); } +/* Dissect SBAS L1 MT 17 */ +static int dissect_sbas_l1_mt17(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { + uint8_t i; + tvbuff_t *prn_tvb; + + col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT17"); + col_clear(pinfo->cinfo, COL_INFO); + + proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt17, tvb, 0, 32, ENC_NA); + proto_tree *sbas_l1_mt17_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt17); + + // dissect data for each of 3 PRNs + for (i = 0; i < 3; i++) { + prn_tvb = tvb_new_octet_aligned(tvb, 6 + i*67, 67); + if (prn_tvb) { + add_new_data_source(pinfo, prn_tvb, "PRN data"); + + uint16_t prn = (tvb_get_uint16(prn_tvb, 0, ENC_BIG_ENDIAN) >> 6) & 0xff; + + proto_tree *prn_tree = proto_tree_add_subtree_format(sbas_l1_mt17_tree, tvb, (6 + i * 67) / 8, (i == 0) ? 10 : 9, ett_sbas_l1_mt17_prn_data[i], NULL, "PRN %u", prn); + + proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_reserved, prn_tvb, 0, 1, ENC_NA); + proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_prn, prn_tvb, 0, 2, ENC_BIG_ENDIAN); + + proto_tree_add_bitmask(prn_tree, prn_tvb, 1, hf_sbas_l1_mt17_health_and_status, ett_sbas_l1_mt17_health_and_status, sbas_l1_mt17_health_and_status_fields, ENC_NA); + + proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_x_ga, prn_tvb, 2, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_y_ga, prn_tvb, 4, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_z_ga, prn_tvb, 4, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_x_ga_vel, prn_tvb, 4, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_y_ga_vel, prn_tvb, 4, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_z_ga_vel, prn_tvb, 5, 4, ENC_BIG_ENDIAN); + } + } + + proto_tree_add_item(sbas_l1_mt17_tree, hf_sbas_l1_mt17_t_a, tvb, 24, 4, ENC_BIG_ENDIAN); + + return tvb_captured_length(tvb); +} + +/* Dissect SBAS L1 MT 18 */ +static int dissect_sbas_l1_mt18(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { + guint32 band_id; + + col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT18"); + col_clear(pinfo->cinfo, COL_INFO); + + proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt18, tvb, 0, 32, ENC_NA); + proto_tree *sbas_l1_mt18_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt18); + + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_nr_igp_bands, tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item_ret_uint(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_band_id, tvb, 0, 2, ENC_BIG_ENDIAN, &band_id); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_iodi_k, tvb, 0, 2, ENC_BIG_ENDIAN); + + if (band_id == 0) { + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_180w, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_175w, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_170w, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_165w, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_160w, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_155w, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_150w, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_145w, tvb, 20, 8, ENC_BIG_ENDIAN); + } + else if (band_id == 1) { + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_140w, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_135w, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_130w, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_125w, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_120w, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_115w, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_110w, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_105w, tvb, 20, 8, ENC_BIG_ENDIAN); + } + else if (band_id == 2) { + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_100w, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_95w, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_90w, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85w, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_80w, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75w, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70w, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65w, tvb, 20, 8, ENC_BIG_ENDIAN); + } + else if (band_id == 3) { + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60w, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_55w, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_50w, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_45w, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_40w, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_35w, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_30w, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_25w, tvb, 20, 8, ENC_BIG_ENDIAN); + } + else if (band_id == 4) { + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_20w, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_15w, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_10w, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_5w, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_0, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_5e, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_10e, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_15e, tvb, 20, 8, ENC_BIG_ENDIAN); + } + else if (band_id == 5) { + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_20e, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_25e, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_30e, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_35e, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_40e, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_45e, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_50e, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_55e, tvb, 20, 8, ENC_BIG_ENDIAN); + } + else if (band_id == 6) { + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60e, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65e, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70e, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75e, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_80e, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85e, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_90e, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_95e, tvb, 20, 8, ENC_BIG_ENDIAN); + } + else if (band_id == 7) { + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_100e, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_105e, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_110e, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_115e, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_120e, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_125e, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_130e, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_135e, tvb, 20, 8, ENC_BIG_ENDIAN); + } + else if (band_id == 8) { + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_140e, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_145e, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_150e, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_155e, tvb, 8, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_160e, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_165e, tvb, 14, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_170e, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_175e, tvb, 20, 8, ENC_BIG_ENDIAN); + } + else if (band_id == 9) { + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60n_1, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60n_2, tvb, 3, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65n, tvb, 11, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70n, tvb, 12, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75n, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85n, tvb, 20, 8, ENC_BIG_ENDIAN); + } + else if (band_id == 10) { + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60s_1, tvb, 2, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60s_2, tvb, 3, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65s, tvb, 11, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70s, tvb, 12, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75s, tvb, 20, 8, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85s, tvb, 20, 8, ENC_BIG_ENDIAN); + } + + proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_spare, tvb, 27, 1, ENC_NA); + + return tvb_captured_length(tvb); +} + +/* Dissect SBAS L1 MT 24 */ +static int dissect_sbas_l1_mt24(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { + uint32_t velocity_code; + + col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT24"); + col_clear(pinfo->cinfo, COL_INFO); + + proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt24, tvb, 0, 32, ENC_NA); + proto_tree *sbas_l1_mt24_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt24); + + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i1, tvb, 0, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i2, tvb, 2, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i3, tvb, 3, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i4, tvb, 5, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i5, tvb, 6, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i6, tvb, 8, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i1, tvb, 9, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i2, tvb, 10, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i3, tvb, 10, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i4, tvb, 11, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i5, tvb, 11, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i6, tvb, 12, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_iodp, tvb, 12, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_type, tvb, 13, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_iodf_j, tvb, 13, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_spare, tvb, 13, 1, ENC_NA); + + proto_tree_add_item_ret_uint(sbas_l1_mt24_tree, hf_sbas_l1_mt24_velocity_code, tvb, 14, 1, ENC_NA, &velocity_code); + + if (velocity_code == 0) { + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_prn_mask_nr_1, tvb, 14, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_iod_1, tvb, 14, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_x_1, tvb, 15, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_y_1, tvb, 17, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_z_1, tvb, 18, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_a_1_f0, tvb, 19, 2, ENC_BIG_ENDIAN); + + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_prn_mask_nr_2, tvb, 20, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_iod_2, tvb, 21, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_x_2, tvb, 22, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_y_2, tvb, 23, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_z_2, tvb, 24, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_a_2_f0, tvb, 25, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_iodp, tvb, 26, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_spare, tvb, 27, 1, ENC_NA); + } + else { + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_prn_mask_nr, tvb, 14, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_iod, tvb, 14, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_x, tvb, 15, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_y, tvb, 17, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_z, tvb, 18, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_a_f0, tvb, 20, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_x_vel, tvb, 21, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_y_vel, tvb, 22, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_z_vel, tvb, 23, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_a_f1, tvb, 24, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_t_lt, tvb, 25, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_iodp, tvb, 27, 1, ENC_NA); + } + + return tvb_captured_length(tvb); +} + /* Dissect SBAS L1 MT 25 */ static int dissect_sbas_l1_mt25(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { - guint32 velocity_code; + uint32_t velocity_code; col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT25"); col_clear(pinfo->cinfo, COL_INFO); @@ -882,7 +1459,32 @@ static int dissect_sbas_l1_mt25(tvbuff_t *tvb, packet_info *pinfo, proto_tree *t proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_spare, tvb, 13, 1, ENC_NA); } - // TODO: add dissection for vel code = 1 + else { // velocity_code == 1 + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_prn_mask_nr, + tvb, 0, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_iod, + tvb, 1, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_x, + tvb, 2, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_y, + tvb, 4, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_z, + tvb, 5, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_a_f0, + tvb, 6, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_x_vel, + tvb, 8, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_y_vel, + tvb, 9, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_z_vel, + tvb, 10, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_a_f1, + tvb, 11, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_t_lt, + tvb, 12, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_iodp, + tvb, 13, 1, ENC_NA); + } // second half message proto_tree_add_item_ret_uint(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_velocity_code, @@ -918,7 +1520,105 @@ static int dissect_sbas_l1_mt25(tvbuff_t *tvb, packet_info *pinfo, proto_tree *t proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_spare, tvb, 27, 1, ENC_NA); } - // TODO: add dissection for vel code = 1 + else { // velocity_code == 1 + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_prn_mask_nr, + tvb, 14, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_iod, + tvb, 14, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_x, + tvb, 15, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_y, + tvb, 17, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_z, + tvb, 18, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_a_f0, + tvb, 20, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_x_vel, + tvb, 21, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_y_vel, + tvb, 22, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_z_vel, + tvb, 23, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_a_f1, + tvb, 24, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_t_lt, + tvb, 25, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_iodp, + tvb, 27, 1, ENC_NA); + } + + return tvb_captured_length(tvb); +} + +/* Dissect SBAS L1 MT 26 */ +static int dissect_sbas_l1_mt26(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { + col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT26"); + col_clear(pinfo->cinfo, COL_INFO); + + proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt26, tvb, 0, 32, ENC_NA); + proto_tree *sbas_l1_mt26_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt26); + + uint32_t igp_band_id; + proto_item* pi_igp_band_id = proto_tree_add_item_ret_uint(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_band_id, + tvb, 0, 2, ENC_BIG_ENDIAN, &igp_band_id); + if (igp_band_id > 10) { + expert_add_info_format(pinfo, pi_igp_band_id, &ei_sbas_l1_mt26_igp_band_id, "Invalid IGP Band Identifier"); + } + + uint32_t igp_block_id; + proto_item* pi_igp_block_id = proto_tree_add_item_ret_uint(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_block_id, + tvb, 1, 1, ENC_NA, &igp_block_id); + if (igp_block_id > 13) { + expert_add_info_format(pinfo, pi_igp_block_id, &ei_sbas_l1_mt26_igp_block_id, "Invalid IGP Block Identifier"); + } + + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_1, tvb, 1, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_1, tvb, 2, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_2, tvb, 3, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_2, tvb, 4, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_3, tvb, 5, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_3, tvb, 6, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_4, tvb, 6, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_4, tvb, 7, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_5, tvb, 8, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_5, tvb, 9, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_6, tvb, 9, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_6, tvb, 11, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_7, tvb, 11, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_7, tvb, 12, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_8, tvb, 13, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_8, tvb, 14, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_9, tvb, 14, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_9, tvb, 15, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_10, tvb, 16, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_10, tvb, 17, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_11, tvb, 18, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_11, tvb, 19, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_12, tvb, 19, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_12, tvb, 20, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_13, tvb, 21, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_13, tvb, 22, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_14, tvb, 22, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_14, tvb, 24, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_15, tvb, 24, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_15, tvb, 25, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_iodi_k, tvb, 26, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_spare, tvb, 26, 2, ENC_BIG_ENDIAN); + + return tvb_captured_length(tvb); +} + +/* Dissect SBAS L1 MT 63 */ +static int dissect_sbas_l1_mt63(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { + col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT63"); + col_clear(pinfo->cinfo, COL_INFO); + + proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt63, tvb, 0, 32, ENC_NA); + proto_tree *sbas_l1_mt63_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt63); + + proto_tree_add_item(sbas_l1_mt63_tree, hf_sbas_l1_mt63_spare_1, tvb, 0, 1, ENC_NA); + proto_tree_add_item(sbas_l1_mt63_tree, hf_sbas_l1_mt63_spare_2, tvb, 1, 26, ENC_NA); + proto_tree_add_item(sbas_l1_mt63_tree, hf_sbas_l1_mt63_spare_3, tvb, 27, 1, ENC_NA); return tvb_captured_length(tvb); } @@ -930,19 +1630,25 @@ void proto_register_sbas_l1(void) { {&hf_sbas_l1_mt, {"Message Type", "sbas_l1.mt" , FT_UINT8, BASE_DEC, NULL, 0xfc, NULL, HFILL}}, {&hf_sbas_l1_chksum, {"Checksum", "sbas_l1.chksum" , FT_UINT32, BASE_HEX, NULL, 0x3fffffc0, NULL, HFILL}}, + // MT0 + {&hf_sbas_l1_mt0, {"MT0", "sbas_l1.mt0", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL}}, + {&hf_sbas_l1_mt0_spare_1, {"Spare 1", "sbas_l1.mt0.spare_1", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL}}, + {&hf_sbas_l1_mt0_spare_2, {"Spare 2", "sbas_l1.mt0.spare_2", FT_BYTES, SEP_SPACE, NULL, 0x00, NULL, HFILL}}, + {&hf_sbas_l1_mt0_spare_3, {"Spare 3", "sbas_l1.mt0.spare_3", FT_UINT8, BASE_HEX, NULL, 0xc0, NULL, HFILL}}, + // MT1 - {&hf_sbas_l1_mt1, {"MT1", "sbas_l1.mt1", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - {&hf_sbas_l1_mt1_prn_mask_gps, {"PRN Mask GPS", "sbas_l1.mt1.prn_mask_gps", FT_UINT64, BASE_HEX, NULL, 0x03ffffffffe0, NULL, HFILL}}, - {&hf_sbas_l1_mt1_prn_mask_glonass, {"PRN Mask Glonass", "sbas_l1.mt1.prn_mask_glonass", FT_UINT32, BASE_HEX, NULL, 0x1fffffe0, NULL, HFILL}}, - {&hf_sbas_l1_mt1_prn_mask_spare_1, {"PRN Mask spare", "sbas_l1.mt1.prn_mask_spare_1", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - {&hf_sbas_l1_mt1_prn_mask_sbas, {"PRN Mask SBAS", "sbas_l1.mt1.prn_mask_sbas", FT_UINT32, BASE_HEX, NULL, 0x07ffff, NULL, HFILL}}, - {&hf_sbas_l1_mt1_prn_mask_spare_2, {"PRN Mask spare", "sbas_l1.mt1.prn_mask_spare_2", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - {&hf_sbas_l1_mt1_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt1.iodp", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}}, + {&hf_sbas_l1_mt1, {"MT1", "sbas_l1.mt1", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, + {&hf_sbas_l1_mt1_prn_mask_gps, {"PRN Mask GPS", "sbas_l1.mt1.prn_mask_gps", FT_UINT64, BASE_HEX, NULL, UINT64_C(0x03ffffffffe00000), NULL, HFILL}}, + {&hf_sbas_l1_mt1_prn_mask_glonass, {"PRN Mask Glonass", "sbas_l1.mt1.prn_mask_glonass", FT_UINT64, BASE_HEX, NULL, UINT64_C(0x1fffffe000000000), NULL, HFILL}}, + {&hf_sbas_l1_mt1_prn_mask_spare_1, {"PRN Mask spare", "sbas_l1.mt1.prn_mask_spare_1", FT_UINT64, BASE_HEX, NULL, UINT64_C(0x1ffffffffffffff8), NULL, HFILL}}, + {&hf_sbas_l1_mt1_prn_mask_sbas, {"PRN Mask SBAS", "sbas_l1.mt1.prn_mask_sbas", FT_UINT64, BASE_HEX, NULL, UINT64_C(0x07fffffffff00000), NULL, HFILL}}, + {&hf_sbas_l1_mt1_prn_mask_spare_2, {"PRN Mask spare", "sbas_l1.mt1.prn_mask_spare_2", FT_UINT64, BASE_HEX, NULL, UINT64_C(0x0fffffffffffff00), NULL, HFILL}}, + {&hf_sbas_l1_mt1_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt1.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, // MT2 {&hf_sbas_l1_mt2, {"MT2", "sbas_l1.mt2", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - {&hf_sbas_l1_mt2_iodf_j, {"Issue of Data - Fast Correction (IODF_j)", "sbas_l1.mt2.iodf_j", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}}, - {&hf_sbas_l1_mt2_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt2.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, + {&hf_sbas_l1_mt2_iodf_2, {"Issue of Data - Fast Correction (IODF_2)", "sbas_l1.mt2.iodf_2", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}}, + {&hf_sbas_l1_mt2_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt2.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, {&hf_sbas_l1_mt2_fc_1, {"Fast Correction Satellite 1 (FC_1)", "sbas_l1.mt2.fc_1", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}}, {&hf_sbas_l1_mt2_fc_2, {"Fast Correction Satellite 2 (FC_2)", "sbas_l1.mt2.fc_2", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}}, {&hf_sbas_l1_mt2_fc_3, {"Fast Correction Satellite 3 (FC_3)", "sbas_l1.mt2.fc_3", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}}, @@ -972,8 +1678,8 @@ void proto_register_sbas_l1(void) { // MT3 {&hf_sbas_l1_mt3, {"MT3", "sbas_l1.mt3", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - {&hf_sbas_l1_mt3_iodf_j, {"Issue of Data - Fast Correction (IODF_j)", "sbas_l1.mt3.iodf_j", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}}, - {&hf_sbas_l1_mt3_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt3.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, + {&hf_sbas_l1_mt3_iodf_3, {"Issue of Data - Fast Correction (IODF_3)", "sbas_l1.mt3.iodf_3", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}}, + {&hf_sbas_l1_mt3_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt3.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, {&hf_sbas_l1_mt3_fc_14, {"Fast Correction Satellite 14 (FC_14)", "sbas_l1.mt3.fc_14", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}}, {&hf_sbas_l1_mt3_fc_15, {"Fast Correction Satellite 15 (FC_15)", "sbas_l1.mt3.fc_15", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}}, {&hf_sbas_l1_mt3_fc_16, {"Fast Correction Satellite 16 (FC_16)", "sbas_l1.mt3.fc_16", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}}, @@ -1003,8 +1709,8 @@ void proto_register_sbas_l1(void) { // MT4 {&hf_sbas_l1_mt4, {"MT4", "sbas_l1.mt4", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - {&hf_sbas_l1_mt4_iodf_j, {"Issue of Data - Fast Correction (IODF_j)", "sbas_l1.mt4.iodf_j", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}}, - {&hf_sbas_l1_mt4_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt4.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, + {&hf_sbas_l1_mt4_iodf_4, {"Issue of Data - Fast Correction (IODF_4)", "sbas_l1.mt4.iodf_4", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}}, + {&hf_sbas_l1_mt4_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt4.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, {&hf_sbas_l1_mt4_fc_27, {"Fast Correction Satellite 27 (FC_27)", "sbas_l1.mt4.fc_27", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}}, {&hf_sbas_l1_mt4_fc_28, {"Fast Correction Satellite 28 (FC_28)", "sbas_l1.mt4.fc_28", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}}, {&hf_sbas_l1_mt4_fc_29, {"Fast Correction Satellite 29 (FC_29)", "sbas_l1.mt4.fc_29", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}}, @@ -1034,8 +1740,8 @@ void proto_register_sbas_l1(void) { // MT5 {&hf_sbas_l1_mt5, {"MT5", "sbas_l1.mt5", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - {&hf_sbas_l1_mt5_iodf_j, {"Issue of Data - Fast Correction (IODF_j)", "sbas_l1.mt5.iodf_j", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}}, - {&hf_sbas_l1_mt5_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt5.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, + {&hf_sbas_l1_mt5_iodf_5, {"Issue of Data - Fast Correction (IODF_5)", "sbas_l1.mt5.iodf_5", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}}, + {&hf_sbas_l1_mt5_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt5.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, {&hf_sbas_l1_mt5_fc_40, {"Fast Correction Satellite 40 (FC_40)", "sbas_l1.mt5.fc_40", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}}, {&hf_sbas_l1_mt5_fc_41, {"Fast Correction Satellite 41 (FC_41)", "sbas_l1.mt5.fc_41", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}}, {&hf_sbas_l1_mt5_fc_42, {"Fast Correction Satellite 42 (FC_42)", "sbas_l1.mt5.fc_42", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}}, @@ -1123,8 +1829,8 @@ void proto_register_sbas_l1(void) { // MT7 {&hf_sbas_l1_mt7, {"MT7", "sbas_l1.mt7", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - {&hf_sbas_l1_mt7_t_lat, {"System Latency (t_lat)", "sbas_l1.mt7.t_lat", FT_UINT16, BASE_DEC|BASE_UNIT_STRING, &units_seconds, 0x03c0, NULL, HFILL}}, - {&hf_sbas_l1_mt7_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt7.iodp", FT_UINT8, BASE_DEC, NULL, 0x30, NULL, HFILL}}, + {&hf_sbas_l1_mt7_t_lat, {"System Latency (t_lat)", "sbas_l1.mt7.t_lat", FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x03c0, NULL, HFILL}}, + {&hf_sbas_l1_mt7_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt7.iodp", FT_UINT8, BASE_DEC, NULL, 0x30, NULL, HFILL}}, {&hf_sbas_l1_mt7_spare, {"Spare", "sbas_l1.mt7.spare", FT_UINT8, BASE_DEC, NULL, 0x0c, NULL, HFILL}}, {&hf_sbas_l1_mt7_ai_1, {"Degradation Factor Indicator ai_1", "sbas_l1.mt7.ai_1", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}}, {&hf_sbas_l1_mt7_ai_2, {"Degradation Factor Indicator ai_2", "sbas_l1.mt7.ai_2", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}}, @@ -1178,50 +1884,275 @@ void proto_register_sbas_l1(void) { {&hf_sbas_l1_mt7_ai_50, {"Degradation Factor Indicator ai_50", "sbas_l1.mt7.ai_50", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}}, {&hf_sbas_l1_mt7_ai_51, {"Degradation Factor Indicator ai_51", "sbas_l1.mt7.ai_51", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}}, + // MT17 + {&hf_sbas_l1_mt17, {"MT17", "sbas_l1.mt17", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, + {&hf_sbas_l1_mt17_reserved, {"Reserved", "sbas_l1.mt17.reserved", FT_UINT8, BASE_HEX, NULL, 0xc0, NULL, HFILL}}, + {&hf_sbas_l1_mt17_prn, {"PRN", "sbas_l1.mt17.prn", FT_UINT16, BASE_DEC, NULL, 0x3fc0, NULL, HFILL}}, + {&hf_sbas_l1_mt17_health_and_status, {"Health and Status", "sbas_l1.mt17.health_and_status", FT_UINT16, BASE_HEX, NULL, 0x3fc0, NULL, HFILL}}, + {&hf_sbas_l1_mt17_health_and_status_spid, {"Service Provider Identifier", "sbas_l1.mt17.health_and_status.spid", FT_UINT16, BASE_DEC, VALS(SBAS_SPID), 0x3c00, NULL, HFILL}}, + {&hf_sbas_l1_mt17_health_and_status_spare, {"Spare", "sbas_l1.mt17.health_and_status.spare", FT_UINT16, BASE_HEX, NULL, 0x0200, NULL, HFILL}}, + {&hf_sbas_l1_mt17_health_and_status_sat_status_basic_corrections, {"Satellite Status and Basic Corrections", "sbas_l1.mt17.health_and_status.sat_status_basic_corrections", FT_BOOLEAN, 16, TFS(&tfs_off_on), 0x0100, NULL, HFILL}}, + {&hf_sbas_l1_mt17_health_and_status_precision_corrections, {"Precision Corrections", "sbas_l1.mt17.health_and_status.precision_corrections", FT_BOOLEAN, 16, TFS(&tfs_off_on), 0x0080, NULL, HFILL}}, + {&hf_sbas_l1_mt17_health_and_status_ranging, {"Ranging", "sbas_l1.mt17.health_and_status.ranging", FT_BOOLEAN, 16, TFS(&tfs_off_on), 0x0040, NULL, HFILL}}, + {&hf_sbas_l1_mt17_x_ga, {"X_G,A", "sbas_l1.mt17.x_ga", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_geo_xy_position), 0x3fff8000, NULL, HFILL}}, + {&hf_sbas_l1_mt17_y_ga, {"Y_G,A", "sbas_l1.mt17.y_ga", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_geo_xy_position), 0x7fff0000, NULL, HFILL}}, + {&hf_sbas_l1_mt17_z_ga, {"Z_G,A", "sbas_l1.mt17.z_ga", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_geo_z_position), 0x0000ff80, NULL, HFILL}}, + {&hf_sbas_l1_mt17_x_ga_vel, {"X_G,A velocity", "sbas_l1.mt17.x_ga_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_geo_xy_velocity), 0x00000070, NULL, HFILL}}, + {&hf_sbas_l1_mt17_y_ga_vel, {"Y_G,A velocity", "sbas_l1.mt17.y_ga_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_geo_xy_velocity), 0x0000000e, NULL, HFILL}}, + {&hf_sbas_l1_mt17_z_ga_vel, {"Z_G,A velocity", "sbas_l1.mt17.z_ga_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_geo_z_velocity), 0x000001e0, NULL, HFILL}}, + {&hf_sbas_l1_mt17_t_a, {"t_almanac", "sbas_l1.mt17.t_a", FT_UINT32, BASE_CUSTOM, CF_FUNC(&fmt_time_of_almanac), 0x0001ffc0, NULL, HFILL}}, + + // MT18 + {&hf_sbas_l1_mt18, {"MT18", "sbas_l1.mt18", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, + {&hf_sbas_l1_mt18_nr_igp_bands, {"Number of IGP Bands", "sbas_l1.mt18.nr_igp_bands", FT_UINT16, BASE_DEC, NULL, 0x03c0, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_band_id, {"IGP Band ID", "sbas_l1.mt18.igp_band_id", FT_UINT16, BASE_DEC, NULL, 0x003c, NULL, HFILL}}, + {&hf_sbas_l1_mt18_iodi_k, {"Issue of Data - Ionosphere (IODI_k)", "sbas_l1.mt18.iodi_k", FT_UINT16, BASE_DEC, NULL, 0x0003, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_180w, {"IGP Mask 180W / 75S - 85N", "sbas_l1.mt18.igp_mask_180w", FT_UINT64, BASE_HEX, NULL, 0xfffffff000000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_175w, {"IGP Mask 175W / 55S - 55N", "sbas_l1.mt18.igp_mask_175w", FT_UINT64, BASE_HEX, NULL, 0x0000000fffffe000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_170w, {"IGP Mask 170W / 75S - 75N", "sbas_l1.mt18.igp_mask_170w", FT_UINT64, BASE_HEX, NULL, 0x1ffffffc00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_165w, {"IGP Mask 165W / 55S - 55N", "sbas_l1.mt18.igp_mask_165w", FT_UINT64, BASE_HEX, NULL, 0x00000003fffff800, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_160w, {"IGP Mask 160W / 75S - 75N", "sbas_l1.mt18.igp_mask_160w", FT_UINT64, BASE_HEX, NULL, 0x07ffffff00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_155w, {"IGP Mask 155W / 55S - 55N", "sbas_l1.mt18.igp_mask_155w", FT_UINT64, BASE_HEX, NULL, 0x00000000fffffe00, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_150w, {"IGP Mask 150W / 75S - 75N", "sbas_l1.mt18.igp_mask_150w", FT_UINT64, BASE_HEX, NULL, 0x01ffffffc0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_145w, {"IGP Mask 145W / 55S - 55N", "sbas_l1.mt18.igp_mask_145w", FT_UINT64, BASE_HEX, NULL, 0x000000003fffff80, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_140w, {"IGP Mask 140W / 85S - 75N", "sbas_l1.mt18.igp_mask_i40w", FT_UINT64, BASE_HEX, NULL, 0xfffffff000000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_135w, {"IGP Mask 135W / 55S - 55N", "sbas_l1.mt18.igp_mask_135w", FT_UINT64, BASE_HEX, NULL, 0x0000000fffffe000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_130w, {"IGP Mask 130W / 75S - 75N", "sbas_l1.mt18.igp_mask_130w", FT_UINT64, BASE_HEX, NULL, 0x1ffffffc00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_125w, {"IGP Mask 125W / 55S - 55N", "sbas_l1.mt18.igp_mask_125w", FT_UINT64, BASE_HEX, NULL, 0x00000003fffff800, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_120w, {"IGP Mask 120W / 75S - 75N", "sbas_l1.mt18.igp_mask_120w", FT_UINT64, BASE_HEX, NULL, 0x07ffffff00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_115w, {"IGP Mask 115W / 55S - 55N", "sbas_l1.mt18.igp_mask_115w", FT_UINT64, BASE_HEX, NULL, 0x00000000fffffe00, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_110w, {"IGP Mask 110W / 75S - 75N", "sbas_l1.mt18.igp_mask_110w", FT_UINT64, BASE_HEX, NULL, 0x01ffffffc0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_105w, {"IGP Mask 105W / 55S - 55N", "sbas_l1.mt18.igp_mask_105w", FT_UINT64, BASE_HEX, NULL, 0x000000003fffff80, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_100w, {"IGP Mask 100W / 75S - 75N", "sbas_l1.mt18.igp_mask_i00w", FT_UINT64, BASE_HEX, NULL, 0xffffffe000000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_95w, {"IGP Mask 95W / 55S - 55N", "sbas_l1.mt18.igp_mask_95w", FT_UINT64, BASE_HEX, NULL, 0x0000001fffffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_90w, {"IGP Mask 90W / 75S - 85N", "sbas_l1.mt18.igp_mask_90w", FT_UINT64, BASE_HEX, NULL, 0x3ffffffc00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_85w, {"IGP Mask 85W / 55S - 55N", "sbas_l1.mt18.igp_mask_85w", FT_UINT64, BASE_HEX, NULL, 0x00000003fffff800, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_80w, {"IGP Mask 80W / 75S - 75N", "sbas_l1.mt18.igp_mask_80w", FT_UINT64, BASE_HEX, NULL, 0x07ffffff00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_75w, {"IGP Mask 75W / 55S - 55N", "sbas_l1.mt18.igp_mask_75w", FT_UINT64, BASE_HEX, NULL, 0x00000000fffffe00, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_70w, {"IGP Mask 70W / 75S - 75N", "sbas_l1.mt18.igp_mask_70w", FT_UINT64, BASE_HEX, NULL, 0x01ffffffc0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_65w, {"IGP Mask 65W / 55S - 55N", "sbas_l1.mt18.igp_mask_65w", FT_UINT64, BASE_HEX, NULL, 0x000000003fffff80, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_60w, {"IGP Mask 60W / 75S - 75N", "sbas_l1.mt18.igp_mask_60w", FT_UINT64, BASE_HEX, NULL, 0xffffffe000000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_55w, {"IGP Mask 55W / 55S - 55N", "sbas_l1.mt18.igp_mask_55w", FT_UINT64, BASE_HEX, NULL, 0x0000001fffffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_50w, {"IGP Mask 50W / 85S - 75N", "sbas_l1.mt18.igp_mask_50w", FT_UINT64, BASE_HEX, NULL, 0x3ffffffc00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_45w, {"IGP Mask 45W / 55S - 55N", "sbas_l1.mt18.igp_mask_45w", FT_UINT64, BASE_HEX, NULL, 0x00000003fffff800, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_40w, {"IGP Mask 40W / 75S - 75N", "sbas_l1.mt18.igp_mask_40w", FT_UINT64, BASE_HEX, NULL, 0x07ffffff00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_35w, {"IGP Mask 35W / 55S - 55N", "sbas_l1.mt18.igp_mask_35w", FT_UINT64, BASE_HEX, NULL, 0x00000000fffffe00, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_30w, {"IGP Mask 30W / 75S - 75N", "sbas_l1.mt18.igp_mask_30w", FT_UINT64, BASE_HEX, NULL, 0x01ffffffc0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_25w, {"IGP Mask 25W / 55S - 55N", "sbas_l1.mt18.igp_mask_25w", FT_UINT64, BASE_HEX, NULL, 0x000000003fffff80, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_20w, {"IGP Mask 20W / 75S - 75N", "sbas_l1.mt18.igp_mask_20w", FT_UINT64, BASE_HEX, NULL, 0xffffffe000000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_15w, {"IGP Mask 15W / 55S - 55N", "sbas_l1.mt18.igp_mask_15w", FT_UINT64, BASE_HEX, NULL, 0x0000001fffffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_10w, {"IGP Mask 10W / 75S - 75N", "sbas_l1.mt18.igp_mask_10w", FT_UINT64, BASE_HEX, NULL, 0x3ffffff800000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_5w, {"IGP Mask 5W / 55S - 55N", "sbas_l1.mt18.igp_mask_5w", FT_UINT64, BASE_HEX, NULL, 0x00000007fffff000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_0, {"IGP Mask 0 / 75S - 85N", "sbas_l1.mt18.igp_mask_0", FT_UINT64, BASE_HEX, NULL, 0x0fffffff00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_5e, {"IGP Mask 5E / 55S - 55N", "sbas_l1.mt18.igp_mask_5e", FT_UINT64, BASE_HEX, NULL, 0x00000000fffffe00, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_10e, {"IGP Mask 10E / 75S - 75N", "sbas_l1.mt18.igp_mask_10e", FT_UINT64, BASE_HEX, NULL, 0x01ffffffc0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_15e, {"IGP Mask 15E / 55S - 55N", "sbas_l1.mt18.igp_mask_15e", FT_UINT64, BASE_HEX, NULL, 0x000000003fffff80, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_20e, {"IGP Mask 20E / 75S - 75N", "sbas_l1.mt18.igp_mask_20e", FT_UINT64, BASE_HEX, NULL, 0xffffffe000000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_25e, {"IGP Mask 25E / 55S - 55N", "sbas_l1.mt18.igp_mask_25e", FT_UINT64, BASE_HEX, NULL, 0x0000001fffffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_30e, {"IGP Mask 30E / 75S - 75N", "sbas_l1.mt18.igp_mask_30e", FT_UINT64, BASE_HEX, NULL, 0x3ffffff800000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_35e, {"IGP Mask 35E / 55S - 55N", "sbas_l1.mt18.igp_mask_35e", FT_UINT64, BASE_HEX, NULL, 0x00000007fffff000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_40e, {"IGP Mask 40E / 85S - 75N", "sbas_l1.mt18.igp_mask_40e", FT_UINT64, BASE_HEX, NULL, 0x0fffffff00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_45e, {"IGP Mask 45E / 55S - 55N", "sbas_l1.mt18.igp_mask_45e", FT_UINT64, BASE_HEX, NULL, 0x00000000fffffe00, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_50e, {"IGP Mask 50E / 75S - 75N", "sbas_l1.mt18.igp_mask_50e", FT_UINT64, BASE_HEX, NULL, 0x01ffffffc0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_55e, {"IGP Mask 55E / 55S - 55N", "sbas_l1.mt18.igp_mask_55e", FT_UINT64, BASE_HEX, NULL, 0x000000003fffff80, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_60e, {"IGP Mask 60E / 75S - 75N", "sbas_l1.mt18.igp_mask_60e", FT_UINT64, BASE_HEX, NULL, 0xffffffe000000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_65e, {"IGP Mask 65E / 55S - 55N", "sbas_l1.mt18.igp_mask_65e", FT_UINT64, BASE_HEX, NULL, 0x0000001fffffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_70e, {"IGP Mask 70E / 75S - 75N", "sbas_l1.mt18.igp_mask_70e", FT_UINT64, BASE_HEX, NULL, 0x3ffffff800000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_75e, {"IGP Mask 75E / 55S - 55N", "sbas_l1.mt18.igp_mask_75e", FT_UINT64, BASE_HEX, NULL, 0x00000007fffff000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_80e, {"IGP Mask 80E / 75S - 75N", "sbas_l1.mt18.igp_mask_80e", FT_UINT64, BASE_HEX, NULL, 0x0ffffffe00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_85e, {"IGP Mask 85E / 55S - 55N", "sbas_l1.mt18.igp_mask_85e", FT_UINT64, BASE_HEX, NULL, 0x00000001fffffc00, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_90e, {"IGP Mask 90E / 75S - 85N", "sbas_l1.mt18.igp_mask_90e", FT_UINT64, BASE_HEX, NULL, 0x03ffffffc0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_95e, {"IGP Mask 95E / 55S - 55N", "sbas_l1.mt18.igp_mask_95e", FT_UINT64, BASE_HEX, NULL, 0x000000003fffff80, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_100e, {"IGP Mask 100E / 75S - 75N", "sbas_l1.mt18.igp_mask_100e", FT_UINT64, BASE_HEX, NULL, 0xffffffe000000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_105e, {"IGP Mask 105E / 55S - 55N", "sbas_l1.mt18.igp_mask_105e", FT_UINT64, BASE_HEX, NULL, 0x0000001fffffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_110e, {"IGP Mask 110E / 75S - 75N", "sbas_l1.mt18.igp_mask_110e", FT_UINT64, BASE_HEX, NULL, 0x3ffffff800000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_115e, {"IGP Mask 115E / 55S - 55N", "sbas_l1.mt18.igp_mask_115e", FT_UINT64, BASE_HEX, NULL, 0x00000007fffff000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_120e, {"IGP Mask 120E / 75S - 75N", "sbas_l1.mt18.igp_mask_120e", FT_UINT64, BASE_HEX, NULL, 0x0ffffffe00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_125e, {"IGP Mask 125E / 55S - 55N", "sbas_l1.mt18.igp_mask_125e", FT_UINT64, BASE_HEX, NULL, 0x00000001fffffc00, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_130e, {"IGP Mask 130E / 85S - 75N", "sbas_l1.mt18.igp_mask_130e", FT_UINT64, BASE_HEX, NULL, 0x03ffffffc0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_135e, {"IGP Mask 135E / 55S - 55N", "sbas_l1.mt18.igp_mask_135e", FT_UINT64, BASE_HEX, NULL, 0x000000003fffff80, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_140e, {"IGP Mask 140E / 75S - 75N", "sbas_l1.mt18.igp_mask_140e", FT_UINT64, BASE_HEX, NULL, 0xffffffe000000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_145e, {"IGP Mask 145E / 55S - 55N", "sbas_l1.mt18.igp_mask_145e", FT_UINT64, BASE_HEX, NULL, 0x0000001fffffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_150e, {"IGP Mask 150E / 75S - 75N", "sbas_l1.mt18.igp_mask_150e", FT_UINT64, BASE_HEX, NULL, 0x3ffffff800000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_155e, {"IGP Mask 155E / 55S - 55N", "sbas_l1.mt18.igp_mask_155e", FT_UINT64, BASE_HEX, NULL, 0x00000007fffff000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_160e, {"IGP Mask 160E / 75S - 75N", "sbas_l1.mt18.igp_mask_160e", FT_UINT64, BASE_HEX, NULL, 0x0ffffffe00000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_165e, {"IGP Mask 165E / 55S - 55N", "sbas_l1.mt18.igp_mask_165e", FT_UINT64, BASE_HEX, NULL, 0x00000001fffffc00, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_170e, {"IGP Mask 170E / 75S - 75N", "sbas_l1.mt18.igp_mask_170e", FT_UINT64, BASE_HEX, NULL, 0x03ffffff80000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_175e, {"IGP Mask 175E / 55S - 55N", "sbas_l1.mt18.igp_mask_175e", FT_UINT64, BASE_HEX, NULL, 0x000000007fffff00, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_60n_1, {"IGP Mask 60N / 180W - 5W", "sbas_l1.mt18.igp_mask_60n_1", FT_UINT64, BASE_HEX, NULL, 0xfffffffff0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_60n_2, {"IGP Mask 60N / 5E - 175E", "sbas_l1.mt18.igp_mask_60n_2", FT_UINT64, BASE_HEX, NULL, 0x0000000fffffffff, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_65n, {"IGP Mask 65N / 180W - 170E", "sbas_l1.mt18.igp_mask_65n", FT_UINT64, BASE_HEX, NULL, 0xfffffffff0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_70n, {"IGP Mask 70N / 180W - 170E", "sbas_l1.mt18.igp_mask_70n", FT_UINT64, BASE_HEX, NULL, 0x0000000fffffffff, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_75n, {"IGP Mask 75N / 180W - 170E", "sbas_l1.mt18.igp_mask_75n", FT_UINT64, BASE_HEX, NULL, 0xfffffffff0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_85n, {"IGP Mask 85N / 180W - 150E", "sbas_l1.mt18.igp_mask_85n", FT_UINT64, BASE_HEX, NULL, 0x000000000fff0000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_60s_1, {"IGP Mask 60S / 180W - 5W", "sbas_l1.mt18.igp_mask_60s_1", FT_UINT64, BASE_HEX, NULL, 0xfffffffff0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_60s_2, {"IGP Mask 60S / 5E - 175E", "sbas_l1.mt18.igp_mask_60s_2", FT_UINT64, BASE_HEX, NULL, 0x0000000fffffffff, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_65s, {"IGP Mask 65S / 180W - 170E", "sbas_l1.mt18.igp_mask_65s", FT_UINT64, BASE_HEX, NULL, 0xfffffffff0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_70s, {"IGP Mask 70S / 180W - 170E", "sbas_l1.mt18.igp_mask_70s", FT_UINT64, BASE_HEX, NULL, 0x0000000fffffffff, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_75s, {"IGP Mask 75S / 180W - 170E", "sbas_l1.mt18.igp_mask_75s", FT_UINT64, BASE_HEX, NULL, 0xfffffffff0000000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_igp_mask_85s, {"IGP Mask 85S / 170W - 160E", "sbas_l1.mt18.igp_mask_85s", FT_UINT64, BASE_HEX, NULL, 0x000000000fff0000, NULL, HFILL}}, + {&hf_sbas_l1_mt18_spare, {"Spare", "sbas_l1.mt18.spare", FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL}}, + + // MT24 + {&hf_sbas_l1_mt24, {"MT24", "sbas_l1.mt24", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, + {&hf_sbas_l1_mt24_fc_i1, {"Fast Correction i1 (FC_i1)", "sbas_l1.mt24.fc_i1", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_fc_i2, {"Fast Correction i2 (FC_i2)", "sbas_l1.mt24.fc_i2", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_fc_i3, {"Fast Correction i3 (FC_i3)", "sbas_l1.mt24.fc_i3", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_fc_i4, {"Fast Correction i4 (FC_i4)", "sbas_l1.mt24.fc_i4", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_fc_i5, {"Fast Correction i5 (FC_i5)", "sbas_l1.mt24.fc_i5", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_fc_i6, {"Fast Correction i6 (FC_i6)", "sbas_l1.mt24.fc_i6", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_udrei_i1, {"UDREI_i1", "sbas_l1.mt24.udrei_i1", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}}, + {&hf_sbas_l1_mt24_udrei_i2, {"UDREI_i2", "sbas_l1.mt24.udrei_i2", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}}, + {&hf_sbas_l1_mt24_udrei_i3, {"UDREI_i3", "sbas_l1.mt24.udrei_i3", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}}, + {&hf_sbas_l1_mt24_udrei_i4, {"UDREI_i4", "sbas_l1.mt24.udrei_i4", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}}, + {&hf_sbas_l1_mt24_udrei_i5, {"UDREI_i5", "sbas_l1.mt24.udrei_i5", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}}, + {&hf_sbas_l1_mt24_udrei_i6, {"UDREI_i6", "sbas_l1.mt24.udrei_i6", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}}, + {&hf_sbas_l1_mt24_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt24.iodp", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}}, + {&hf_sbas_l1_mt24_fc_type, {"Fast Correction Type ID", "sbas_l1.mt24.fc_type", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, + {&hf_sbas_l1_mt24_iodf_j, {"Issue of Data - Fast Correction (IODF_j)", "sbas_l1.mt24.iodf_j", FT_UINT8, BASE_DEC, NULL, 0x30, NULL, HFILL}}, + {&hf_sbas_l1_mt24_spare, {"Spare", "sbas_l1.mt24.spare", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL}}, + {&hf_sbas_l1_mt24_velocity_code, {"Velocity Code", "sbas_l1.mt24.velocity_code", FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_prn_mask_nr_1, {"PRN Mask Number", "sbas_l1.mt24.v0.prn_mask_nr_1", FT_UINT8, BASE_DEC, NULL, 0x7e, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_iod_1, {"Issue of Data (IOD_i)", "sbas_l1.mt24.v0.iod_1", FT_UINT16, BASE_DEC, NULL, 0x01fe, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_delta_x_1, {"dx_i", "sbas_l1.mt24.v0.dx_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x01ff, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_delta_y_1, {"dy_i", "sbas_l1.mt24.v0.dy_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0xff80, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_delta_z_1, {"dz_i", "sbas_l1.mt24.v0.dz_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x7fc0, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_delta_a_1_f0, {"da_i_f0", "sbas_l1.mt24.v0.da_f0_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0x3ff0, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_prn_mask_nr_2, {"PRN Mask Number", "sbas_l1.mt24.v0.prn_mask_nr_2", FT_UINT16, BASE_DEC, NULL, 0x0fc0, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_iod_2, {"Issue of Data (IOD_i)", "sbas_l1.mt24.v0.iod_2", FT_UINT16, BASE_DEC, NULL, 0x3fc0, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_delta_x_2, {"dx_i", "sbas_l1.mt24.v0.dx_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3fe0, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_delta_y_2, {"dy_i", "sbas_l1.mt24.v0.dy_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x1ff0, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_delta_z_2, {"dz_i", "sbas_l1.mt24.v0.dz_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x0ff8, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_delta_a_2_f0, {"da_i_f0", "sbas_l1.mt24.v0.da_f0_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0x07fe, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt24.v0.iodp", FT_UINT16, BASE_DEC, NULL, 0x0180, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v0_spare, {"Spare", "sbas_l1.mt24.v0.spare", FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_prn_mask_nr, {"PRN Mask Number", "sbas_l1.mt24.v1.prn_mask_nr", FT_UINT8, BASE_DEC, NULL, 0x7e, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_iod, {"Issue of Data (IOD_i)", "sbas_l1.mt24.v1.iod", FT_UINT16, BASE_DEC, NULL, 0x01fe, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_delta_x, {"dx_i", "sbas_l1.mt24.v1.dx", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x01ffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_delta_y, {"dy_i", "sbas_l1.mt24.v1.dy", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ff80000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_delta_z, {"dz_i", "sbas_l1.mt24.v1.dz", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x07ff0000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_delta_a_f0, {"da_i_f0", "sbas_l1.mt24.v1.da_f0", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0xffe00000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_delta_x_vel, {"dx_vel_i", "sbas_l1.mt24.v1.dx_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_velo_correction), 0x1fe00000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_delta_y_vel, {"dy_vel_i", "sbas_l1.mt24.v1.dy_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_velo_correction), 0x1fe00000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_delta_z_vel, {"dz_vel_i", "sbas_l1.mt24.v1.dz_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_velo_correction), 0x1fe00000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_delta_a_f1, {"da_i_f1", "sbas_l1.mt24.v1.da_f1", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_clk_rate_correction), 0x1fe00000, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_t_lt, {"t_i_lt", "sbas_l1.mt24.v1.t_lt", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_time_of_applicability),0x1fff, NULL, HFILL}}, + {&hf_sbas_l1_mt24_v1_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt24.v1.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, + // MT25 - {&hf_sbas_l1_mt25, {"MT25", "sbas_l1.mt25", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_velocity_code, {"Velocity Code", "sbas_l1.mt25.h1.velocity_code", FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_prn_mask_nr_1, {"PRN Mask Number", "sbas_l1.mt25.h1.v0.prn_mask_nr_1", FT_UINT16, BASE_DEC, NULL, 0x01f8, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_iod_1, {"Issue of Data (IOD_i)", "sbas_l1.mt25.h1.v0.iod_1", FT_UINT16, BASE_DEC, NULL, 0x07f8, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_delta_x_1, {"dx_i", "sbas_l1.mt25.h1.v0.dx_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x07fc, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_delta_y_1, {"dy_i", "sbas_l1.mt25.h1.v0.dy_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03fe, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_delta_z_1, {"dz_i", "sbas_l1.mt25.h1.v0.dz_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x01ff, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_delta_a_1_f0, {"da_i_f0", "sbas_l1.mt25.h1.v0.da_1_f0", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0xffc0, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_prn_mask_nr_2, {"PRN Mask Number", "sbas_l1.mt25.h1.v0.prn_mask_nr_2", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_iod_2, {"Issue of Data (IOD_i)", "sbas_l1.mt25.h1.v0.iod_2", FT_UINT8, BASE_DEC, NULL, 0xff, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_delta_x_2, {"dx_i", "sbas_l1.mt25.h1.v0.dx_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0xff80, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_delta_y_2, {"dy_i", "sbas_l1.mt25.h1.v0.dy_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x7fc0, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_delta_z_2, {"dz_i", "sbas_l1.mt25.h1.v0.dz_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3fe0, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_delta_a_2_f0, {"da_i_f0", "sbas_l1.mt25.h1.v0.da_2_f0", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0x1ff8, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt25.h1.v0.iodp", FT_UINT8, BASE_DEC, NULL, 0x06, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h1_v0_spare, {"Spare", "sbas_l1.mt25.h1.v0.spare", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_velocity_code, {"Velocity Code", "sbas_l1.mt25.h2.velocity_code", FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_prn_mask_nr_1, {"PRN Mask Number", "sbas_l1.mt25.h2.v0.prn_mask_nr_1", FT_UINT8, BASE_DEC, NULL, 0x7e, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_iod_1, {"Issue of Data (IOD_i)", "sbas_l1.mt25.h2.v0.iod_1", FT_UINT16, BASE_DEC, NULL, 0x01fe, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_delta_x_1, {"dx_i", "sbas_l1.mt25.h2.v0.dx_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x01ff, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_delta_y_1, {"dy_i", "sbas_l1.mt25.h2.v0.dy_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0xff80, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_delta_z_1, {"dz_i", "sbas_l1.mt25.h2.v0.dz_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x7fc0, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_delta_a_1_f0, {"da_i_f0", "sbas_l1.mt25.h2.v0.da_1_f0", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0x3ff0, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_prn_mask_nr_2, {"PRN Mask Number", "sbas_l1.mt25.h2.v0.prn_mask_nr_2", FT_UINT16, BASE_DEC, NULL, 0x0fc0, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_iod_2, {"Issue of Data (IOD_i)", "sbas_l1.mt25.h2.v0.iod_2", FT_UINT16, BASE_DEC, NULL, 0x3fc0, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_delta_x_2, {"dx_i", "sbas_l1.mt25.h2.v0.dx_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3fe0, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_delta_y_2, {"dy_i", "sbas_l1.mt25.h2.v0.dy_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x1ff0, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_delta_z_2, {"dz_i", "sbas_l1.mt25.h2.v0.dz_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x0ff8, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_delta_a_2_f0, {"da_i_f0", "sbas_l1.mt25.h2.v0.da_2_f0", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0x07fe, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt25.h2.v0.iodp", FT_UINT16, BASE_DEC, NULL, 0x0180, NULL, HFILL}}, - {&hf_sbas_l1_mt25_h2_v0_spare, {"Spare", "sbas_l1.mt25.h2.v0.spare", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, + {&hf_sbas_l1_mt25, {"MT25", "sbas_l1.mt25", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_velocity_code, {"Velocity Code", "sbas_l1.mt25.h1.velocity_code", FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_prn_mask_nr_1, {"PRN Mask Number", "sbas_l1.mt25.h1.v0.prn_mask_nr_1", FT_UINT16, BASE_DEC, NULL, 0x01f8, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_iod_1, {"Issue of Data (IOD_i)", "sbas_l1.mt25.h1.v0.iod_1", FT_UINT16, BASE_DEC, NULL, 0x07f8, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_delta_x_1, {"dx_i", "sbas_l1.mt25.h1.v0.dx_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x07fc, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_delta_y_1, {"dy_i", "sbas_l1.mt25.h1.v0.dy_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03fe, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_delta_z_1, {"dz_i", "sbas_l1.mt25.h1.v0.dz_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x01ff, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_delta_a_1_f0, {"da_i_f0", "sbas_l1.mt25.h1.v0.da_f0_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0xffc0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_prn_mask_nr_2, {"PRN Mask Number", "sbas_l1.mt25.h1.v0.prn_mask_nr_2", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_iod_2, {"Issue of Data (IOD_i)", "sbas_l1.mt25.h1.v0.iod_2", FT_UINT8, BASE_DEC, NULL, 0xff, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_delta_x_2, {"dx_i", "sbas_l1.mt25.h1.v0.dx_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0xff80, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_delta_y_2, {"dy_i", "sbas_l1.mt25.h1.v0.dy_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x7fc0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_delta_z_2, {"dz_i", "sbas_l1.mt25.h1.v0.dz_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3fe0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_delta_a_2_f0, {"da_i_f0", "sbas_l1.mt25.h1.v0.da_f0_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0x1ff8, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt25.h1.v0.iodp", FT_UINT8, BASE_DEC, NULL, 0x06, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v0_spare, {"Spare", "sbas_l1.mt25.h1.v0.spare", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_prn_mask_nr, {"PRN Mask Number", "sbas_l1.mt25.h1.v1.prn_mask_nr_1", FT_UINT16, BASE_DEC, NULL, 0x01f8, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_iod, {"Issue of Data (IOD_i)", "sbas_l1.mt25.h1.v1.iod", FT_UINT16, BASE_DEC, NULL, 0x07f8, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_delta_x, {"dx_i", "sbas_l1.mt25.h1.v1.dx", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x07ff0000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_delta_y, {"dy_i", "sbas_l1.mt25.h1.v1.dy", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0xffe00000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_delta_z, {"dz_i", "sbas_l1.mt25.h1.v1.dz", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x1ffc0000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_delta_a_f0, {"da_i_f0", "sbas_l1.mt25.h1.v1.da_f0", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0x03ff8000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_delta_x_vel, {"dx_vel_i", "sbas_l1.mt25.h1.v1.dx_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_velo_correction), 0x7f800000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_delta_y_vel, {"dy_vel_i", "sbas_l1.mt25.h1.v1.dy_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_velo_correction), 0x7f800000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_delta_z_vel, {"dz_vel_i", "sbas_l1.mt25.h1.v1.dz_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_velo_correction), 0x7f800000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_delta_a_f1, {"da_i_f1", "sbas_l1.mt25.h1.v1.da_f1", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_clk_rate_correction), 0x7f800000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_t_lt, {"t_i_lt", "sbas_l1.mt25.h1.v1.t_lt", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_time_of_applicability),0x7ffc, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h1_v1_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt25.h1.v1.iodp", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_velocity_code, {"Velocity Code", "sbas_l1.mt25.h2.velocity_code", FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_prn_mask_nr_1, {"PRN Mask Number", "sbas_l1.mt25.h2.v0.prn_mask_nr_1", FT_UINT8, BASE_DEC, NULL, 0x7e, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_iod_1, {"Issue of Data (IOD_i)", "sbas_l1.mt25.h2.v0.iod_1", FT_UINT16, BASE_DEC, NULL, 0x01fe, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_delta_x_1, {"dx_i", "sbas_l1.mt25.h2.v0.dx_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x01ff, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_delta_y_1, {"dy_i", "sbas_l1.mt25.h2.v0.dy_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0xff80, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_delta_z_1, {"dz_i", "sbas_l1.mt25.h2.v0.dz_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x7fc0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_delta_a_1_f0, {"da_i_f0", "sbas_l1.mt25.h2.v0.da_f0_1", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0x3ff0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_prn_mask_nr_2, {"PRN Mask Number", "sbas_l1.mt25.h2.v0.prn_mask_nr_2", FT_UINT16, BASE_DEC, NULL, 0x0fc0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_iod_2, {"Issue of Data (IOD_i)", "sbas_l1.mt25.h2.v0.iod_2", FT_UINT16, BASE_DEC, NULL, 0x3fc0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_delta_x_2, {"dx_i", "sbas_l1.mt25.h2.v0.dx_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3fe0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_delta_y_2, {"dy_i", "sbas_l1.mt25.h2.v0.dy_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x1ff0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_delta_z_2, {"dz_i", "sbas_l1.mt25.h2.v0.dz_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x0ff8, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_delta_a_2_f0, {"da_i_f0", "sbas_l1.mt25.h2.v0.da_f0_2", FT_INT16, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0x07fe, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt25.h2.v0.iodp", FT_UINT16, BASE_DEC, NULL, 0x0180, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v0_spare, {"Spare", "sbas_l1.mt25.h2.v0.spare", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_prn_mask_nr, {"PRN Mask Number", "sbas_l1.mt25.h2.v1.prn_mask_nr", FT_UINT8, BASE_DEC, NULL, 0x7e, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_iod, {"Issue of Data (IOD_i)", "sbas_l1.mt25.h2.v1.iod", FT_UINT16, BASE_DEC, NULL, 0x01fe, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_delta_x, {"dx_i", "sbas_l1.mt25.h2.v1.dx", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x01ffc000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_delta_y, {"dy_i", "sbas_l1.mt25.h2.v1.dy", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ff80000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_delta_z, {"dz_i", "sbas_l1.mt25.h2.v1.dz", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x07ff0000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_delta_a_f0, {"da_i_f0", "sbas_l1.mt25.h2.v1.da_f0", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_clock_correction), 0xffe00000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_delta_x_vel, {"dx_vel_i", "sbas_l1.mt25.h2.v1.dx_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_velo_correction), 0x1fe00000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_delta_y_vel, {"dy_vel_i", "sbas_l1.mt25.h2.v1.dy_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_velo_correction), 0x1fe00000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_delta_z_vel, {"dz_vel_i", "sbas_l1.mt25.h2.v1.dz_vel", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_velo_correction), 0x1fe00000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_delta_a_f1, {"da_i_f1", "sbas_l1.mt25.h2.v1.da_f1", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_clk_rate_correction), 0x1fe00000, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_t_lt, {"t_i_lt", "sbas_l1.mt25.h2.v1.t_lt", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_time_of_applicability),0x1fff, NULL, HFILL}}, + {&hf_sbas_l1_mt25_h2_v1_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt25.h2.v1.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}}, + + // MT26 + {&hf_sbas_l1_mt26, {"MT26", "sbas_l1.mt26", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_band_id, {"IGP Band Identifier", "sbas_l1.mt26.igp_band_id", FT_UINT16, BASE_DEC, NULL, 0x03c0, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_block_id, {"IGP Block Identifier", "sbas_l1.mt26.igp_block_id", FT_UINT16, BASE_DEC, NULL, 0x3c, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_1, {"IGP Vertical Delay Estimate 1", "sbas_l1.mt26.igp_vertical_delay_est_1", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03fe, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_1, {"Grid Ionospheric Vertical Error Indicator 1 (GIVEI_1)", "sbas_l1.mt26.givei_1", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x01e0, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_2, {"IGP Vertical Delay Estimate 2", "sbas_l1.mt26.igp_vertical_delay_est_2", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x1ff0, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_2, {"Grid Ionospheric Vertical Error Indicator 2 (GIVEI_2)", "sbas_l1.mt26.givei_2", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x0f00, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_3, {"IGP Vertical Delay Estimate 3", "sbas_l1.mt26.igp_vertical_delay_est_3", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0xff80, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_3, {"Grid Ionospheric Vertical Error Indicator 3 (GIVEI_3)", "sbas_l1.mt26.givei_3", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x7800, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_4, {"IGP Vertical Delay Estimate 4", "sbas_l1.mt26.igp_vertical_delay_est_4", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x07fc, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_4, {"Grid Ionospheric Vertical Error Indicator 4 (GIVEI_4)", "sbas_l1.mt26.givei_4", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x03c0, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_5, {"IGP Vertical Delay Estimate 5", "sbas_l1.mt26.igp_vertical_delay_est_5", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3fe0, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_5, {"Grid Ionospheric Vertical Error Indicator 5 (GIVEI_5)", "sbas_l1.mt26.givei_5", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x1e00, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_6, {"IGP Vertical Delay Estimate 6", "sbas_l1.mt26.igp_vertical_delay_est_6", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x01ff, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_6, {"Grid Ionospheric Vertical Error Indicator 6 (GIVEI_6)", "sbas_l1.mt26.givei_6", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0xf000, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_7, {"IGP Vertical Delay Estimate 7", "sbas_l1.mt26.igp_vertical_delay_est_7", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x0ff8, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_7, {"Grid Ionospheric Vertical Error Indicator 7 (GIVEI_7)", "sbas_l1.mt26.givei_7", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x0780, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_8, {"IGP Vertical Delay Estimate 8", "sbas_l1.mt26.igp_vertical_delay_est_8", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x7fc0, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_8, {"Grid Ionospheric Vertical Error Indicator 8 (GIVEI_8)", "sbas_l1.mt26.givei_8", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x3c00, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_9, {"IGP Vertical Delay Estimate 9", "sbas_l1.mt26.igp_vertical_delay_est_9", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03fe, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_9, {"Grid Ionospheric Vertical Error Indicator 9 (GIVEI_9)", "sbas_l1.mt26.givei_9", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x01e0, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_10, {"IGP Vertical Delay Estimate 10", "sbas_l1.mt26.igp_vertical_delay_est_10", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x1ff0, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_10, {"Grid Ionospheric Vertical Error Indicator 10 (GIVEI_10)", "sbas_l1.mt26.givei_10", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x0f00, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_11, {"IGP Vertical Delay Estimate 11", "sbas_l1.mt26.igp_vertical_delay_est_11", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0xff80, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_11, {"Grid Ionospheric Vertical Error Indicator 11 (GIVEI_11)", "sbas_l1.mt26.givei_11", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x7800, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_12, {"IGP Vertical Delay Estimate 12", "sbas_l1.mt26.igp_vertical_delay_est_12", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x07fc, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_12, {"Grid Ionospheric Vertical Error Indicator 12 (GIVEI_12)", "sbas_l1.mt26.givei_12", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x03c0, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_13, {"IGP Vertical Delay Estimate 13", "sbas_l1.mt26.igp_vertical_delay_est_13", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3fe0, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_13, {"Grid Ionospheric Vertical Error Indicator 13 (GIVEI_13)", "sbas_l1.mt26.givei_13", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x1e00, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_14, {"IGP Vertical Delay Estimate 14", "sbas_l1.mt26.igp_vertical_delay_est_14", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x01ff, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_14, {"Grid Ionospheric Vertical Error Indicator 14 (GIVEI_14)", "sbas_l1.mt26.givei_14", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0xf000, NULL, HFILL}}, + {&hf_sbas_l1_mt26_igp_vertical_delay_est_15, {"IGP Vertical Delay Estimate 15", "sbas_l1.mt26.igp_vertical_delay_est_15", FT_UINT16, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x0ff8, NULL, HFILL}}, + {&hf_sbas_l1_mt26_givei_15, {"Grid Ionospheric Vertical Error Indicator 15 (GIVEI_15)", "sbas_l1.mt26.givei_15", FT_UINT16, BASE_DEC, VALS(GIVEI_EVALUATION), 0x0780, NULL, HFILL}}, + {&hf_sbas_l1_mt26_iodi_k, {"Issue of Data - IGP (IODI_k)", "sbas_l1.mt26.iodi_k", FT_UINT8, BASE_DEC, NULL, 0x60, NULL, HFILL}}, + {&hf_sbas_l1_mt26_spare, {"Spare", "sbas_l1.mt26.spare", FT_UINT16, BASE_DEC, NULL, 0x1fc0, NULL, HFILL}}, + + // MT63 + {&hf_sbas_l1_mt63, {"MT63", "sbas_l1.mt63", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL}}, + {&hf_sbas_l1_mt63_spare_1, {"Spare 1", "sbas_l1.mt63.spare_1", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL}}, + {&hf_sbas_l1_mt63_spare_2, {"Spare 2", "sbas_l1.mt63.spare_2", FT_BYTES, SEP_SPACE, NULL, 0x00, NULL, HFILL}}, + {&hf_sbas_l1_mt63_spare_3, {"Spare 3", "sbas_l1.mt63.spare_3", FT_UINT8, BASE_HEX, NULL, 0xc0, NULL, HFILL}}, }; expert_module_t *expert_sbas_l1; static ei_register_info ei[] = { - {&ei_sbas_l1_preamble, {"sbas_l1.illegal_preamble", PI_PROTOCOL, PI_WARN, "Illegal preamble", EXPFILL}}, - {&ei_sbas_l1_mt0, {"sbas_l1.mt0", PI_PROTOCOL, PI_WARN, "MT is 0", EXPFILL}}, - {&ei_sbas_l1_crc, {"sbas_l1.crc", PI_CHECKSUM, PI_WARN, "CRC", EXPFILL}}, + {&ei_sbas_l1_preamble, {"sbas_l1.illegal_preamble", PI_PROTOCOL, PI_WARN, "Illegal preamble", EXPFILL}}, + {&ei_sbas_l1_mt0, {"sbas_l1.mt0", PI_PROTOCOL, PI_WARN, "MT is 0", EXPFILL}}, + {&ei_sbas_l1_crc, {"sbas_l1.crc", PI_CHECKSUM, PI_WARN, "CRC", EXPFILL}}, + {&ei_sbas_l1_mt26_igp_band_id, {"sbas_l1.mt26.illegal_igp_band_id", PI_PROTOCOL, PI_WARN, "Illegal IGP Band Identifier", EXPFILL}}, + {&ei_sbas_l1_mt26_igp_block_id, {"sbas_l1.mt26.illegal_igp_block_id", PI_PROTOCOL, PI_WARN, "Illegal IGP Block Identifier", EXPFILL}}, }; - static gint *ett[] = { + static int *ett[] = { &ett_sbas_l1, + &ett_sbas_l1_mt0, &ett_sbas_l1_mt1, &ett_sbas_l1_mt2, &ett_sbas_l1_mt3, @@ -1229,7 +2160,16 @@ void proto_register_sbas_l1(void) { &ett_sbas_l1_mt5, &ett_sbas_l1_mt6, &ett_sbas_l1_mt7, + &ett_sbas_l1_mt17, + &ett_sbas_l1_mt17_prn_data[0], + &ett_sbas_l1_mt17_prn_data[1], + &ett_sbas_l1_mt17_prn_data[2], + &ett_sbas_l1_mt17_health_and_status, + &ett_sbas_l1_mt18, + &ett_sbas_l1_mt24, &ett_sbas_l1_mt25, + &ett_sbas_l1_mt26, + &ett_sbas_l1_mt63, }; proto_sbas_l1 = proto_register_protocol("SBAS L1 Navigation Message", "SBAS L1", "sbas_l1"); @@ -1251,6 +2191,7 @@ void proto_reg_handoff_sbas_l1(void) { dissector_add_uint("ubx.rxm.sfrbx.gnssid", GNSS_ID_SBAS, create_dissector_handle(dissect_sbas_l1, proto_sbas_l1)); + dissector_add_uint("sbas_l1.mt", 0, create_dissector_handle(dissect_sbas_l1_mt0, proto_sbas_l1)); dissector_add_uint("sbas_l1.mt", 1, create_dissector_handle(dissect_sbas_l1_mt1, proto_sbas_l1)); dissector_add_uint("sbas_l1.mt", 2, create_dissector_handle(dissect_sbas_l1_mt2, proto_sbas_l1)); dissector_add_uint("sbas_l1.mt", 3, create_dissector_handle(dissect_sbas_l1_mt3, proto_sbas_l1)); @@ -1258,5 +2199,10 @@ void proto_reg_handoff_sbas_l1(void) { dissector_add_uint("sbas_l1.mt", 5, create_dissector_handle(dissect_sbas_l1_mt5, proto_sbas_l1)); dissector_add_uint("sbas_l1.mt", 6, create_dissector_handle(dissect_sbas_l1_mt6, proto_sbas_l1)); dissector_add_uint("sbas_l1.mt", 7, create_dissector_handle(dissect_sbas_l1_mt7, proto_sbas_l1)); + dissector_add_uint("sbas_l1.mt", 17, create_dissector_handle(dissect_sbas_l1_mt17, proto_sbas_l1)); + dissector_add_uint("sbas_l1.mt", 18, create_dissector_handle(dissect_sbas_l1_mt18, proto_sbas_l1)); + dissector_add_uint("sbas_l1.mt", 24, create_dissector_handle(dissect_sbas_l1_mt24, proto_sbas_l1)); dissector_add_uint("sbas_l1.mt", 25, create_dissector_handle(dissect_sbas_l1_mt25, proto_sbas_l1)); + dissector_add_uint("sbas_l1.mt", 26, create_dissector_handle(dissect_sbas_l1_mt26, proto_sbas_l1)); + dissector_add_uint("sbas_l1.mt", 63, create_dissector_handle(dissect_sbas_l1_mt63, proto_sbas_l1)); } |