summaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-sbas_l1.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-sbas_l1.c')
-rw-r--r--epan/dissectors/packet-sbas_l1.c1882
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));
}