epan/dissectors/pidl/samr/samr.cnf cnf_dissect_lsa_BinaryString => lsarpc_dissect_str...
[wireshark-sm.git] / epan / dissectors / packet-sbas_l1.c
blobb739e75811e8182e37a1481c139978ec3b3ce8b4
1 /* packet-sbas_l1.c
2 * SBAS L1 protocol dissection.
4 * By Timo Warns <timo.warns@gmail.com>
5 * Copyright 2023 Timo Warns
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@unicom.net>
9 * Copyright 1998 Gerald Combs
11 * SPDX-License-Identifier: GPL-2.0-or-later
14 #include "config.h"
16 #include <epan/expert.h>
17 #include <epan/packet.h>
19 #include <epan/tfs.h>
20 #include <epan/unit_strings.h>
22 #include <wsutil/array.h>
23 #include <wsutil/utf8_entities.h>
25 #include "packet-ubx.h"
26 #include "packet-sbas_l1.h"
29 * Dissects navigation messages of the Satellite Based Augmentation System
30 * (SBAS) sent on L1 frequency as defined by ICAO Annex 10, Vol I.
33 // SBAS L1 preamble values
34 #define SBAS_L1_PREAMBLE_1 0x53
35 #define SBAS_L1_PREAMBLE_2 0x9a
36 #define SBAS_L1_PREAMBLE_3 0xc6
38 // SBAS service provider identifier mapping
39 // see ICAO Annex 10, Vol I, Table B-27
40 static const value_string SBAS_SPID[] = {
41 {0, "WAAS"},
42 {1, "EGNOS"},
43 {2, "MSAS"},
44 {0, NULL}
47 // UDREI_i mapping
48 // see ICAO Annex 10, Vol I, Table B-29
49 const value_string UDREI_EVALUATION[] = {
50 {0, "0.0520 m" UTF8_SUPERSCRIPT_TWO},
51 {1, "0.0924 m" UTF8_SUPERSCRIPT_TWO},
52 {2, "0.1444 m" UTF8_SUPERSCRIPT_TWO},
53 {3, "0.2830 m" UTF8_SUPERSCRIPT_TWO},
54 {4, "0.4678 m" UTF8_SUPERSCRIPT_TWO},
55 {5, "0.8315 m" UTF8_SUPERSCRIPT_TWO},
56 {6, "1.2992 m" UTF8_SUPERSCRIPT_TWO},
57 {7, "1.8709 m" UTF8_SUPERSCRIPT_TWO},
58 {8, "2.5465 m" UTF8_SUPERSCRIPT_TWO},
59 {9, "3.3260 m" UTF8_SUPERSCRIPT_TWO},
60 {10, "5.1968 m" UTF8_SUPERSCRIPT_TWO},
61 {11, "20.7870 m" UTF8_SUPERSCRIPT_TWO},
62 {12, "230.9661 m" UTF8_SUPERSCRIPT_TWO},
63 {13, "2078.695 m" UTF8_SUPERSCRIPT_TWO},
64 {14, "Not Monitored"},
65 {15, "Do Not Use"},
66 {0, NULL}
69 // GIVEI_i mapping
70 // see ICAO Annex 10, Vol I, Table B-33
71 static const value_string GIVEI_EVALUATION[] = {
72 {0, "0.0084 m" UTF8_SUPERSCRIPT_TWO},
73 {1, "0.0333 m" UTF8_SUPERSCRIPT_TWO},
74 {2, "0.0749 m" UTF8_SUPERSCRIPT_TWO},
75 {3, "0.1331 m" UTF8_SUPERSCRIPT_TWO},
76 {4, "0.2079 m" UTF8_SUPERSCRIPT_TWO},
77 {5, "0.2994 m" UTF8_SUPERSCRIPT_TWO},
78 {6, "0.4075 m" UTF8_SUPERSCRIPT_TWO},
79 {7, "0.5322 m" UTF8_SUPERSCRIPT_TWO},
80 {8, "0.6735 m" UTF8_SUPERSCRIPT_TWO},
81 {9, "0.8315 m" UTF8_SUPERSCRIPT_TWO},
82 {10, "1.1974 m" UTF8_SUPERSCRIPT_TWO},
83 {11, "1.8709 m" UTF8_SUPERSCRIPT_TWO},
84 {12, "3.3260 m" UTF8_SUPERSCRIPT_TWO},
85 {13, "20.787 m" UTF8_SUPERSCRIPT_TWO},
86 {14, "187.0826 m" UTF8_SUPERSCRIPT_TWO},
87 {15, "Not Monitored"},
88 {0, NULL}
91 // Mapping for fast correction degradation factor
92 // see ICAO Annex 10, Vol I, Table B-34
93 static const value_string DEGRADATION_FACTOR_INDICATOR[] = {
94 {0, "0.0 mm/s" UTF8_SUPERSCRIPT_TWO},
95 {1, "0.05 mm/s" UTF8_SUPERSCRIPT_TWO},
96 {2, "0.09 mm/s" UTF8_SUPERSCRIPT_TWO},
97 {3, "0.12 mm/s" UTF8_SUPERSCRIPT_TWO},
98 {4, "0.15 mm/s" UTF8_SUPERSCRIPT_TWO},
99 {5, "0.20 mm/s" UTF8_SUPERSCRIPT_TWO},
100 {6, "0.30 mm/s" UTF8_SUPERSCRIPT_TWO},
101 {7, "0.45 mm/s" UTF8_SUPERSCRIPT_TWO},
102 {8, "0.60 mm/s" UTF8_SUPERSCRIPT_TWO},
103 {9, "0.90 mm/s" UTF8_SUPERSCRIPT_TWO},
104 {10, "1.50 mm/s" UTF8_SUPERSCRIPT_TWO},
105 {11, "2.10 mm/s" UTF8_SUPERSCRIPT_TWO},
106 {12, "2.70 mm/s" UTF8_SUPERSCRIPT_TWO},
107 {13, "3.30 mm/s" UTF8_SUPERSCRIPT_TWO},
108 {14, "4.60 mm/s" UTF8_SUPERSCRIPT_TWO},
109 {15, "5.80 mm/s" UTF8_SUPERSCRIPT_TWO},
110 {0, NULL}
113 // table for SBAS L1 CRC24Q computation
114 static const uint32_t CRC24Q_TBL[] = {
115 0x000000, 0x864CFB, 0x8AD50D, 0x0C99F6, 0x93E6E1, 0x15AA1A, 0x1933EC, 0x9F7F17,
116 0xA18139, 0x27CDC2, 0x2B5434, 0xAD18CF, 0x3267D8, 0xB42B23, 0xB8B2D5, 0x3EFE2E,
117 0xC54E89, 0x430272, 0x4F9B84, 0xC9D77F, 0x56A868, 0xD0E493, 0xDC7D65, 0x5A319E,
118 0x64CFB0, 0xE2834B, 0xEE1ABD, 0x685646, 0xF72951, 0x7165AA, 0x7DFC5C, 0xFBB0A7,
119 0x0CD1E9, 0x8A9D12, 0x8604E4, 0x00481F, 0x9F3708, 0x197BF3, 0x15E205, 0x93AEFE,
120 0xAD50D0, 0x2B1C2B, 0x2785DD, 0xA1C926, 0x3EB631, 0xB8FACA, 0xB4633C, 0x322FC7,
121 0xC99F60, 0x4FD39B, 0x434A6D, 0xC50696, 0x5A7981, 0xDC357A, 0xD0AC8C, 0x56E077,
122 0x681E59, 0xEE52A2, 0xE2CB54, 0x6487AF, 0xFBF8B8, 0x7DB443, 0x712DB5, 0xF7614E,
123 0x19A3D2, 0x9FEF29, 0x9376DF, 0x153A24, 0x8A4533, 0x0C09C8, 0x00903E, 0x86DCC5,
124 0xB822EB, 0x3E6E10, 0x32F7E6, 0xB4BB1D, 0x2BC40A, 0xAD88F1, 0xA11107, 0x275DFC,
125 0xDCED5B, 0x5AA1A0, 0x563856, 0xD074AD, 0x4F0BBA, 0xC94741, 0xC5DEB7, 0x43924C,
126 0x7D6C62, 0xFB2099, 0xF7B96F, 0x71F594, 0xEE8A83, 0x68C678, 0x645F8E, 0xE21375,
127 0x15723B, 0x933EC0, 0x9FA736, 0x19EBCD, 0x8694DA, 0x00D821, 0x0C41D7, 0x8A0D2C,
128 0xB4F302, 0x32BFF9, 0x3E260F, 0xB86AF4, 0x2715E3, 0xA15918, 0xADC0EE, 0x2B8C15,
129 0xD03CB2, 0x567049, 0x5AE9BF, 0xDCA544, 0x43DA53, 0xC596A8, 0xC90F5E, 0x4F43A5,
130 0x71BD8B, 0xF7F170, 0xFB6886, 0x7D247D, 0xE25B6A, 0x641791, 0x688E67, 0xEEC29C,
131 0x3347A4, 0xB50B5F, 0xB992A9, 0x3FDE52, 0xA0A145, 0x26EDBE, 0x2A7448, 0xAC38B3,
132 0x92C69D, 0x148A66, 0x181390, 0x9E5F6B, 0x01207C, 0x876C87, 0x8BF571, 0x0DB98A,
133 0xF6092D, 0x7045D6, 0x7CDC20, 0xFA90DB, 0x65EFCC, 0xE3A337, 0xEF3AC1, 0x69763A,
134 0x578814, 0xD1C4EF, 0xDD5D19, 0x5B11E2, 0xC46EF5, 0x42220E, 0x4EBBF8, 0xC8F703,
135 0x3F964D, 0xB9DAB6, 0xB54340, 0x330FBB, 0xAC70AC, 0x2A3C57, 0x26A5A1, 0xA0E95A,
136 0x9E1774, 0x185B8F, 0x14C279, 0x928E82, 0x0DF195, 0x8BBD6E, 0x872498, 0x016863,
137 0xFAD8C4, 0x7C943F, 0x700DC9, 0xF64132, 0x693E25, 0xEF72DE, 0xE3EB28, 0x65A7D3,
138 0x5B59FD, 0xDD1506, 0xD18CF0, 0x57C00B, 0xC8BF1C, 0x4EF3E7, 0x426A11, 0xC426EA,
139 0x2AE476, 0xACA88D, 0xA0317B, 0x267D80, 0xB90297, 0x3F4E6C, 0x33D79A, 0xB59B61,
140 0x8B654F, 0x0D29B4, 0x01B042, 0x87FCB9, 0x1883AE, 0x9ECF55, 0x9256A3, 0x141A58,
141 0xEFAAFF, 0x69E604, 0x657FF2, 0xE33309, 0x7C4C1E, 0xFA00E5, 0xF69913, 0x70D5E8,
142 0x4E2BC6, 0xC8673D, 0xC4FECB, 0x42B230, 0xDDCD27, 0x5B81DC, 0x57182A, 0xD154D1,
143 0x26359F, 0xA07964, 0xACE092, 0x2AAC69, 0xB5D37E, 0x339F85, 0x3F0673, 0xB94A88,
144 0x87B4A6, 0x01F85D, 0x0D61AB, 0x8B2D50, 0x145247, 0x921EBC, 0x9E874A, 0x18CBB1,
145 0xE37B16, 0x6537ED, 0x69AE1B, 0xEFE2E0, 0x709DF7, 0xF6D10C, 0xFA48FA, 0x7C0401,
146 0x42FA2F, 0xC4B6D4, 0xC82F22, 0x4E63D9, 0xD11CCE, 0x575035, 0x5BC9C3, 0xDD8538
149 /* Initialize the protocol and registered fields */
150 static int proto_sbas_l1;
152 // see ICAO Annex 10, Vol I, Appendix B, Section 3.5.3
153 static int hf_sbas_l1_preamble;
154 static int hf_sbas_l1_mt;
155 static int hf_sbas_l1_chksum;
157 static int hf_sbas_l1_mt0;
158 static int hf_sbas_l1_mt0_spare_1;
159 static int hf_sbas_l1_mt0_spare_2;
160 static int hf_sbas_l1_mt0_spare_3;
162 // see ICAO Annex 10, Vol I, Table B-38
163 static int hf_sbas_l1_mt1;
164 static int hf_sbas_l1_mt1_prn_mask_gps;
165 static int hf_sbas_l1_mt1_prn_mask_glonass;
166 static int hf_sbas_l1_mt1_prn_mask_spare_1;
167 static int hf_sbas_l1_mt1_prn_mask_sbas;
168 static int hf_sbas_l1_mt1_prn_mask_spare_2;
169 static int hf_sbas_l1_mt1_iodp;
171 // see ICAO Annex 10, Vol I, Table B-39
172 static int hf_sbas_l1_mt2;
173 static int hf_sbas_l1_mt2_iodf_2;
174 static int hf_sbas_l1_mt2_iodp;
175 static int hf_sbas_l1_mt2_fc_1;
176 static int hf_sbas_l1_mt2_fc_2;
177 static int hf_sbas_l1_mt2_fc_3;
178 static int hf_sbas_l1_mt2_fc_4;
179 static int hf_sbas_l1_mt2_fc_5;
180 static int hf_sbas_l1_mt2_fc_6;
181 static int hf_sbas_l1_mt2_fc_7;
182 static int hf_sbas_l1_mt2_fc_8;
183 static int hf_sbas_l1_mt2_fc_9;
184 static int hf_sbas_l1_mt2_fc_10;
185 static int hf_sbas_l1_mt2_fc_11;
186 static int hf_sbas_l1_mt2_fc_12;
187 static int hf_sbas_l1_mt2_fc_13;
188 static int hf_sbas_l1_mt2_udrei_1;
189 static int hf_sbas_l1_mt2_udrei_2;
190 static int hf_sbas_l1_mt2_udrei_3;
191 static int hf_sbas_l1_mt2_udrei_4;
192 static int hf_sbas_l1_mt2_udrei_5;
193 static int hf_sbas_l1_mt2_udrei_6;
194 static int hf_sbas_l1_mt2_udrei_7;
195 static int hf_sbas_l1_mt2_udrei_8;
196 static int hf_sbas_l1_mt2_udrei_9;
197 static int hf_sbas_l1_mt2_udrei_10;
198 static int hf_sbas_l1_mt2_udrei_11;
199 static int hf_sbas_l1_mt2_udrei_12;
200 static int hf_sbas_l1_mt2_udrei_13;
202 // see ICAO Annex 10, Vol I, Table B-39
203 static int hf_sbas_l1_mt3;
204 static int hf_sbas_l1_mt3_iodf_3;
205 static int hf_sbas_l1_mt3_iodp;
206 static int hf_sbas_l1_mt3_fc_14;
207 static int hf_sbas_l1_mt3_fc_15;
208 static int hf_sbas_l1_mt3_fc_16;
209 static int hf_sbas_l1_mt3_fc_17;
210 static int hf_sbas_l1_mt3_fc_18;
211 static int hf_sbas_l1_mt3_fc_19;
212 static int hf_sbas_l1_mt3_fc_20;
213 static int hf_sbas_l1_mt3_fc_21;
214 static int hf_sbas_l1_mt3_fc_22;
215 static int hf_sbas_l1_mt3_fc_23;
216 static int hf_sbas_l1_mt3_fc_24;
217 static int hf_sbas_l1_mt3_fc_25;
218 static int hf_sbas_l1_mt3_fc_26;
219 static int hf_sbas_l1_mt3_udrei_14;
220 static int hf_sbas_l1_mt3_udrei_15;
221 static int hf_sbas_l1_mt3_udrei_16;
222 static int hf_sbas_l1_mt3_udrei_17;
223 static int hf_sbas_l1_mt3_udrei_18;
224 static int hf_sbas_l1_mt3_udrei_19;
225 static int hf_sbas_l1_mt3_udrei_20;
226 static int hf_sbas_l1_mt3_udrei_21;
227 static int hf_sbas_l1_mt3_udrei_22;
228 static int hf_sbas_l1_mt3_udrei_23;
229 static int hf_sbas_l1_mt3_udrei_24;
230 static int hf_sbas_l1_mt3_udrei_25;
231 static int hf_sbas_l1_mt3_udrei_26;
233 // see ICAO Annex 10, Vol I, Table B-39
234 static int hf_sbas_l1_mt4;
235 static int hf_sbas_l1_mt4_iodf_4;
236 static int hf_sbas_l1_mt4_iodp;
237 static int hf_sbas_l1_mt4_fc_27;
238 static int hf_sbas_l1_mt4_fc_28;
239 static int hf_sbas_l1_mt4_fc_29;
240 static int hf_sbas_l1_mt4_fc_30;
241 static int hf_sbas_l1_mt4_fc_31;
242 static int hf_sbas_l1_mt4_fc_32;
243 static int hf_sbas_l1_mt4_fc_33;
244 static int hf_sbas_l1_mt4_fc_34;
245 static int hf_sbas_l1_mt4_fc_35;
246 static int hf_sbas_l1_mt4_fc_36;
247 static int hf_sbas_l1_mt4_fc_37;
248 static int hf_sbas_l1_mt4_fc_38;
249 static int hf_sbas_l1_mt4_fc_39;
250 static int hf_sbas_l1_mt4_udrei_27;
251 static int hf_sbas_l1_mt4_udrei_28;
252 static int hf_sbas_l1_mt4_udrei_29;
253 static int hf_sbas_l1_mt4_udrei_30;
254 static int hf_sbas_l1_mt4_udrei_31;
255 static int hf_sbas_l1_mt4_udrei_32;
256 static int hf_sbas_l1_mt4_udrei_33;
257 static int hf_sbas_l1_mt4_udrei_34;
258 static int hf_sbas_l1_mt4_udrei_35;
259 static int hf_sbas_l1_mt4_udrei_36;
260 static int hf_sbas_l1_mt4_udrei_37;
261 static int hf_sbas_l1_mt4_udrei_38;
262 static int hf_sbas_l1_mt4_udrei_39;
264 // see ICAO Annex 10, Vol I, Table B-39
265 static int hf_sbas_l1_mt5;
266 static int hf_sbas_l1_mt5_iodf_5;
267 static int hf_sbas_l1_mt5_iodp;
268 static int hf_sbas_l1_mt5_fc_40;
269 static int hf_sbas_l1_mt5_fc_41;
270 static int hf_sbas_l1_mt5_fc_42;
271 static int hf_sbas_l1_mt5_fc_43;
272 static int hf_sbas_l1_mt5_fc_44;
273 static int hf_sbas_l1_mt5_fc_45;
274 static int hf_sbas_l1_mt5_fc_46;
275 static int hf_sbas_l1_mt5_fc_47;
276 static int hf_sbas_l1_mt5_fc_48;
277 static int hf_sbas_l1_mt5_fc_49;
278 static int hf_sbas_l1_mt5_fc_50;
279 static int hf_sbas_l1_mt5_fc_51;
280 static int hf_sbas_l1_mt5_fc_52;
281 static int hf_sbas_l1_mt5_udrei_40;
282 static int hf_sbas_l1_mt5_udrei_41;
283 static int hf_sbas_l1_mt5_udrei_42;
284 static int hf_sbas_l1_mt5_udrei_43;
285 static int hf_sbas_l1_mt5_udrei_44;
286 static int hf_sbas_l1_mt5_udrei_45;
287 static int hf_sbas_l1_mt5_udrei_46;
288 static int hf_sbas_l1_mt5_udrei_47;
289 static int hf_sbas_l1_mt5_udrei_48;
290 static int hf_sbas_l1_mt5_udrei_49;
291 static int hf_sbas_l1_mt5_udrei_50;
292 static int hf_sbas_l1_mt5_udrei_51;
293 static int hf_sbas_l1_mt5_udrei_52;
295 // see ICAO Annex 10, Vol I, Table B-40
296 static int hf_sbas_l1_mt6;
297 static int hf_sbas_l1_mt6_iodf_2;
298 static int hf_sbas_l1_mt6_iodf_3;
299 static int hf_sbas_l1_mt6_iodf_4;
300 static int hf_sbas_l1_mt6_iodf_5;
301 static int hf_sbas_l1_mt6_udrei_1;
302 static int hf_sbas_l1_mt6_udrei_2;
303 static int hf_sbas_l1_mt6_udrei_3;
304 static int hf_sbas_l1_mt6_udrei_4;
305 static int hf_sbas_l1_mt6_udrei_5;
306 static int hf_sbas_l1_mt6_udrei_6;
307 static int hf_sbas_l1_mt6_udrei_7;
308 static int hf_sbas_l1_mt6_udrei_8;
309 static int hf_sbas_l1_mt6_udrei_9;
310 static int hf_sbas_l1_mt6_udrei_10;
311 static int hf_sbas_l1_mt6_udrei_11;
312 static int hf_sbas_l1_mt6_udrei_12;
313 static int hf_sbas_l1_mt6_udrei_13;
314 static int hf_sbas_l1_mt6_udrei_14;
315 static int hf_sbas_l1_mt6_udrei_15;
316 static int hf_sbas_l1_mt6_udrei_16;
317 static int hf_sbas_l1_mt6_udrei_17;
318 static int hf_sbas_l1_mt6_udrei_18;
319 static int hf_sbas_l1_mt6_udrei_19;
320 static int hf_sbas_l1_mt6_udrei_20;
321 static int hf_sbas_l1_mt6_udrei_21;
322 static int hf_sbas_l1_mt6_udrei_22;
323 static int hf_sbas_l1_mt6_udrei_23;
324 static int hf_sbas_l1_mt6_udrei_24;
325 static int hf_sbas_l1_mt6_udrei_25;
326 static int hf_sbas_l1_mt6_udrei_26;
327 static int hf_sbas_l1_mt6_udrei_27;
328 static int hf_sbas_l1_mt6_udrei_28;
329 static int hf_sbas_l1_mt6_udrei_29;
330 static int hf_sbas_l1_mt6_udrei_30;
331 static int hf_sbas_l1_mt6_udrei_31;
332 static int hf_sbas_l1_mt6_udrei_32;
333 static int hf_sbas_l1_mt6_udrei_33;
334 static int hf_sbas_l1_mt6_udrei_34;
335 static int hf_sbas_l1_mt6_udrei_35;
336 static int hf_sbas_l1_mt6_udrei_36;
337 static int hf_sbas_l1_mt6_udrei_37;
338 static int hf_sbas_l1_mt6_udrei_38;
339 static int hf_sbas_l1_mt6_udrei_39;
340 static int hf_sbas_l1_mt6_udrei_40;
341 static int hf_sbas_l1_mt6_udrei_41;
342 static int hf_sbas_l1_mt6_udrei_42;
343 static int hf_sbas_l1_mt6_udrei_43;
344 static int hf_sbas_l1_mt6_udrei_44;
345 static int hf_sbas_l1_mt6_udrei_45;
346 static int hf_sbas_l1_mt6_udrei_46;
347 static int hf_sbas_l1_mt6_udrei_47;
348 static int hf_sbas_l1_mt6_udrei_48;
349 static int hf_sbas_l1_mt6_udrei_49;
350 static int hf_sbas_l1_mt6_udrei_50;
351 static int hf_sbas_l1_mt6_udrei_51;
353 // see ICAO Annex 10, Vol I, Table B-41
354 static int hf_sbas_l1_mt7;
355 static int hf_sbas_l1_mt7_t_lat;
356 static int hf_sbas_l1_mt7_iodp;
357 static int hf_sbas_l1_mt7_spare;
358 static int hf_sbas_l1_mt7_ai_1;
359 static int hf_sbas_l1_mt7_ai_2;
360 static int hf_sbas_l1_mt7_ai_3;
361 static int hf_sbas_l1_mt7_ai_4;
362 static int hf_sbas_l1_mt7_ai_5;
363 static int hf_sbas_l1_mt7_ai_6;
364 static int hf_sbas_l1_mt7_ai_7;
365 static int hf_sbas_l1_mt7_ai_8;
366 static int hf_sbas_l1_mt7_ai_9;
367 static int hf_sbas_l1_mt7_ai_10;
368 static int hf_sbas_l1_mt7_ai_11;
369 static int hf_sbas_l1_mt7_ai_12;
370 static int hf_sbas_l1_mt7_ai_13;
371 static int hf_sbas_l1_mt7_ai_14;
372 static int hf_sbas_l1_mt7_ai_15;
373 static int hf_sbas_l1_mt7_ai_16;
374 static int hf_sbas_l1_mt7_ai_17;
375 static int hf_sbas_l1_mt7_ai_18;
376 static int hf_sbas_l1_mt7_ai_19;
377 static int hf_sbas_l1_mt7_ai_20;
378 static int hf_sbas_l1_mt7_ai_21;
379 static int hf_sbas_l1_mt7_ai_22;
380 static int hf_sbas_l1_mt7_ai_23;
381 static int hf_sbas_l1_mt7_ai_24;
382 static int hf_sbas_l1_mt7_ai_25;
383 static int hf_sbas_l1_mt7_ai_26;
384 static int hf_sbas_l1_mt7_ai_27;
385 static int hf_sbas_l1_mt7_ai_28;
386 static int hf_sbas_l1_mt7_ai_29;
387 static int hf_sbas_l1_mt7_ai_30;
388 static int hf_sbas_l1_mt7_ai_31;
389 static int hf_sbas_l1_mt7_ai_32;
390 static int hf_sbas_l1_mt7_ai_33;
391 static int hf_sbas_l1_mt7_ai_34;
392 static int hf_sbas_l1_mt7_ai_35;
393 static int hf_sbas_l1_mt7_ai_36;
394 static int hf_sbas_l1_mt7_ai_37;
395 static int hf_sbas_l1_mt7_ai_38;
396 static int hf_sbas_l1_mt7_ai_39;
397 static int hf_sbas_l1_mt7_ai_40;
398 static int hf_sbas_l1_mt7_ai_41;
399 static int hf_sbas_l1_mt7_ai_42;
400 static int hf_sbas_l1_mt7_ai_43;
401 static int hf_sbas_l1_mt7_ai_44;
402 static int hf_sbas_l1_mt7_ai_45;
403 static int hf_sbas_l1_mt7_ai_46;
404 static int hf_sbas_l1_mt7_ai_47;
405 static int hf_sbas_l1_mt7_ai_48;
406 static int hf_sbas_l1_mt7_ai_49;
407 static int hf_sbas_l1_mt7_ai_50;
408 static int hf_sbas_l1_mt7_ai_51;
410 // see ICAO Annex 10, Vol I, Table B-45
411 static int hf_sbas_l1_mt17;
412 static int hf_sbas_l1_mt17_reserved;
413 static int hf_sbas_l1_mt17_prn;
414 static int hf_sbas_l1_mt17_health_and_status;
415 static int hf_sbas_l1_mt17_health_and_status_spid;
416 static int hf_sbas_l1_mt17_health_and_status_spare;
417 static int hf_sbas_l1_mt17_health_and_status_sat_status_basic_corrections;
418 static int hf_sbas_l1_mt17_health_and_status_precision_corrections;
419 static int hf_sbas_l1_mt17_health_and_status_ranging;
420 static int hf_sbas_l1_mt17_x_ga;
421 static int hf_sbas_l1_mt17_y_ga;
422 static int hf_sbas_l1_mt17_z_ga;
423 static int hf_sbas_l1_mt17_x_ga_vel;
424 static int hf_sbas_l1_mt17_y_ga_vel;
425 static int hf_sbas_l1_mt17_z_ga_vel;
426 static int hf_sbas_l1_mt17_t_a;
428 static int * const sbas_l1_mt17_health_and_status_fields[] = {
429 &hf_sbas_l1_mt17_health_and_status_spid,
430 &hf_sbas_l1_mt17_health_and_status_spare,
431 &hf_sbas_l1_mt17_health_and_status_sat_status_basic_corrections,
432 &hf_sbas_l1_mt17_health_and_status_precision_corrections,
433 &hf_sbas_l1_mt17_health_and_status_ranging,
434 NULL
437 // see ICAO Annex 10, Vol I, Table B-46
438 static int hf_sbas_l1_mt18;
439 static int hf_sbas_l1_mt18_nr_igp_bands;
440 static int hf_sbas_l1_mt18_igp_band_id;
441 static int hf_sbas_l1_mt18_iodi_k;
442 static int hf_sbas_l1_mt18_igp_mask_180w;
443 static int hf_sbas_l1_mt18_igp_mask_175w;
444 static int hf_sbas_l1_mt18_igp_mask_170w;
445 static int hf_sbas_l1_mt18_igp_mask_165w;
446 static int hf_sbas_l1_mt18_igp_mask_160w;
447 static int hf_sbas_l1_mt18_igp_mask_155w;
448 static int hf_sbas_l1_mt18_igp_mask_150w;
449 static int hf_sbas_l1_mt18_igp_mask_145w;
450 static int hf_sbas_l1_mt18_igp_mask_140w;
451 static int hf_sbas_l1_mt18_igp_mask_135w;
452 static int hf_sbas_l1_mt18_igp_mask_130w;
453 static int hf_sbas_l1_mt18_igp_mask_125w;
454 static int hf_sbas_l1_mt18_igp_mask_120w;
455 static int hf_sbas_l1_mt18_igp_mask_115w;
456 static int hf_sbas_l1_mt18_igp_mask_110w;
457 static int hf_sbas_l1_mt18_igp_mask_105w;
458 static int hf_sbas_l1_mt18_igp_mask_100w;
459 static int hf_sbas_l1_mt18_igp_mask_95w;
460 static int hf_sbas_l1_mt18_igp_mask_90w;
461 static int hf_sbas_l1_mt18_igp_mask_85w;
462 static int hf_sbas_l1_mt18_igp_mask_80w;
463 static int hf_sbas_l1_mt18_igp_mask_75w;
464 static int hf_sbas_l1_mt18_igp_mask_70w;
465 static int hf_sbas_l1_mt18_igp_mask_65w;
466 static int hf_sbas_l1_mt18_igp_mask_60w;
467 static int hf_sbas_l1_mt18_igp_mask_55w;
468 static int hf_sbas_l1_mt18_igp_mask_50w;
469 static int hf_sbas_l1_mt18_igp_mask_45w;
470 static int hf_sbas_l1_mt18_igp_mask_40w;
471 static int hf_sbas_l1_mt18_igp_mask_35w;
472 static int hf_sbas_l1_mt18_igp_mask_30w;
473 static int hf_sbas_l1_mt18_igp_mask_25w;
474 static int hf_sbas_l1_mt18_igp_mask_20w;
475 static int hf_sbas_l1_mt18_igp_mask_15w;
476 static int hf_sbas_l1_mt18_igp_mask_10w;
477 static int hf_sbas_l1_mt18_igp_mask_5w;
478 static int hf_sbas_l1_mt18_igp_mask_0;
479 static int hf_sbas_l1_mt18_igp_mask_5e;
480 static int hf_sbas_l1_mt18_igp_mask_10e;
481 static int hf_sbas_l1_mt18_igp_mask_15e;
482 static int hf_sbas_l1_mt18_igp_mask_20e;
483 static int hf_sbas_l1_mt18_igp_mask_25e;
484 static int hf_sbas_l1_mt18_igp_mask_30e;
485 static int hf_sbas_l1_mt18_igp_mask_35e;
486 static int hf_sbas_l1_mt18_igp_mask_40e;
487 static int hf_sbas_l1_mt18_igp_mask_45e;
488 static int hf_sbas_l1_mt18_igp_mask_50e;
489 static int hf_sbas_l1_mt18_igp_mask_55e;
490 static int hf_sbas_l1_mt18_igp_mask_60e;
491 static int hf_sbas_l1_mt18_igp_mask_65e;
492 static int hf_sbas_l1_mt18_igp_mask_70e;
493 static int hf_sbas_l1_mt18_igp_mask_75e;
494 static int hf_sbas_l1_mt18_igp_mask_80e;
495 static int hf_sbas_l1_mt18_igp_mask_85e;
496 static int hf_sbas_l1_mt18_igp_mask_90e;
497 static int hf_sbas_l1_mt18_igp_mask_95e;
498 static int hf_sbas_l1_mt18_igp_mask_100e;
499 static int hf_sbas_l1_mt18_igp_mask_105e;
500 static int hf_sbas_l1_mt18_igp_mask_110e;
501 static int hf_sbas_l1_mt18_igp_mask_115e;
502 static int hf_sbas_l1_mt18_igp_mask_120e;
503 static int hf_sbas_l1_mt18_igp_mask_125e;
504 static int hf_sbas_l1_mt18_igp_mask_130e;
505 static int hf_sbas_l1_mt18_igp_mask_135e;
506 static int hf_sbas_l1_mt18_igp_mask_140e;
507 static int hf_sbas_l1_mt18_igp_mask_145e;
508 static int hf_sbas_l1_mt18_igp_mask_150e;
509 static int hf_sbas_l1_mt18_igp_mask_155e;
510 static int hf_sbas_l1_mt18_igp_mask_160e;
511 static int hf_sbas_l1_mt18_igp_mask_165e;
512 static int hf_sbas_l1_mt18_igp_mask_170e;
513 static int hf_sbas_l1_mt18_igp_mask_175e;
514 static int hf_sbas_l1_mt18_igp_mask_60n_1;
515 static int hf_sbas_l1_mt18_igp_mask_60n_2;
516 static int hf_sbas_l1_mt18_igp_mask_65n;
517 static int hf_sbas_l1_mt18_igp_mask_70n;
518 static int hf_sbas_l1_mt18_igp_mask_75n;
519 static int hf_sbas_l1_mt18_igp_mask_85n;
520 static int hf_sbas_l1_mt18_igp_mask_60s_1;
521 static int hf_sbas_l1_mt18_igp_mask_60s_2;
522 static int hf_sbas_l1_mt18_igp_mask_65s;
523 static int hf_sbas_l1_mt18_igp_mask_70s;
524 static int hf_sbas_l1_mt18_igp_mask_75s;
525 static int hf_sbas_l1_mt18_igp_mask_85s;
526 static int hf_sbas_l1_mt18_spare;
528 // see ICAO Annex 10, Vol I, Table B-47
529 static int hf_sbas_l1_mt24;
530 static int hf_sbas_l1_mt24_fc_i1;
531 static int hf_sbas_l1_mt24_fc_i2;
532 static int hf_sbas_l1_mt24_fc_i3;
533 static int hf_sbas_l1_mt24_fc_i4;
534 static int hf_sbas_l1_mt24_fc_i5;
535 static int hf_sbas_l1_mt24_fc_i6;
536 static int hf_sbas_l1_mt24_udrei_i1;
537 static int hf_sbas_l1_mt24_udrei_i2;
538 static int hf_sbas_l1_mt24_udrei_i3;
539 static int hf_sbas_l1_mt24_udrei_i4;
540 static int hf_sbas_l1_mt24_udrei_i5;
541 static int hf_sbas_l1_mt24_udrei_i6;
542 static int hf_sbas_l1_mt24_iodp;
543 static int hf_sbas_l1_mt24_fc_type;
544 static int hf_sbas_l1_mt24_iodf_j;
545 static int hf_sbas_l1_mt24_spare;
546 static int hf_sbas_l1_mt24_velocity_code;
547 static int hf_sbas_l1_mt24_v0_prn_mask_nr_1;
548 static int hf_sbas_l1_mt24_v0_iod_1;
549 static int hf_sbas_l1_mt24_v0_delta_x_1;
550 static int hf_sbas_l1_mt24_v0_delta_y_1;
551 static int hf_sbas_l1_mt24_v0_delta_z_1;
552 static int hf_sbas_l1_mt24_v0_delta_a_1_f0;
553 static int hf_sbas_l1_mt24_v0_prn_mask_nr_2;
554 static int hf_sbas_l1_mt24_v0_iod_2;
555 static int hf_sbas_l1_mt24_v0_delta_x_2;
556 static int hf_sbas_l1_mt24_v0_delta_y_2;
557 static int hf_sbas_l1_mt24_v0_delta_z_2;
558 static int hf_sbas_l1_mt24_v0_delta_a_2_f0;
559 static int hf_sbas_l1_mt24_v0_iodp;
560 static int hf_sbas_l1_mt24_v0_spare;
561 static int hf_sbas_l1_mt24_v1_prn_mask_nr;
562 static int hf_sbas_l1_mt24_v1_iod;
563 static int hf_sbas_l1_mt24_v1_delta_x;
564 static int hf_sbas_l1_mt24_v1_delta_y;
565 static int hf_sbas_l1_mt24_v1_delta_z;
566 static int hf_sbas_l1_mt24_v1_delta_a_f0;
567 static int hf_sbas_l1_mt24_v1_delta_x_vel;
568 static int hf_sbas_l1_mt24_v1_delta_y_vel;
569 static int hf_sbas_l1_mt24_v1_delta_z_vel;
570 static int hf_sbas_l1_mt24_v1_delta_a_f1;
571 static int hf_sbas_l1_mt24_v1_t_lt;
572 static int hf_sbas_l1_mt24_v1_iodp;
574 // see ICAO Annex 10, Vol I, Table B-48
575 static int hf_sbas_l1_mt25;
576 static int hf_sbas_l1_mt25_h1_velocity_code;
577 static int hf_sbas_l1_mt25_h1_v0_prn_mask_nr_1;
578 static int hf_sbas_l1_mt25_h1_v0_iod_1;
579 static int hf_sbas_l1_mt25_h1_v0_delta_x_1;
580 static int hf_sbas_l1_mt25_h1_v0_delta_y_1;
581 static int hf_sbas_l1_mt25_h1_v0_delta_z_1;
582 static int hf_sbas_l1_mt25_h1_v0_delta_a_1_f0;
583 static int hf_sbas_l1_mt25_h1_v0_prn_mask_nr_2;
584 static int hf_sbas_l1_mt25_h1_v0_iod_2;
585 static int hf_sbas_l1_mt25_h1_v0_delta_x_2;
586 static int hf_sbas_l1_mt25_h1_v0_delta_y_2;
587 static int hf_sbas_l1_mt25_h1_v0_delta_z_2;
588 static int hf_sbas_l1_mt25_h1_v0_delta_a_2_f0;
589 static int hf_sbas_l1_mt25_h1_v0_iodp;
590 static int hf_sbas_l1_mt25_h1_v0_spare;
591 static int hf_sbas_l1_mt25_h1_v1_prn_mask_nr;
592 static int hf_sbas_l1_mt25_h1_v1_iod;
593 static int hf_sbas_l1_mt25_h1_v1_delta_x;
594 static int hf_sbas_l1_mt25_h1_v1_delta_y;
595 static int hf_sbas_l1_mt25_h1_v1_delta_z;
596 static int hf_sbas_l1_mt25_h1_v1_delta_a_f0;
597 static int hf_sbas_l1_mt25_h1_v1_delta_x_vel;
598 static int hf_sbas_l1_mt25_h1_v1_delta_y_vel;
599 static int hf_sbas_l1_mt25_h1_v1_delta_z_vel;
600 static int hf_sbas_l1_mt25_h1_v1_delta_a_f1;
601 static int hf_sbas_l1_mt25_h1_v1_t_lt;
602 static int hf_sbas_l1_mt25_h1_v1_iodp;
603 static int hf_sbas_l1_mt25_h2_velocity_code;
604 static int hf_sbas_l1_mt25_h2_v0_prn_mask_nr_1;
605 static int hf_sbas_l1_mt25_h2_v0_iod_1;
606 static int hf_sbas_l1_mt25_h2_v0_delta_x_1;
607 static int hf_sbas_l1_mt25_h2_v0_delta_y_1;
608 static int hf_sbas_l1_mt25_h2_v0_delta_z_1;
609 static int hf_sbas_l1_mt25_h2_v0_delta_a_1_f0;
610 static int hf_sbas_l1_mt25_h2_v0_prn_mask_nr_2;
611 static int hf_sbas_l1_mt25_h2_v0_iod_2;
612 static int hf_sbas_l1_mt25_h2_v0_delta_x_2;
613 static int hf_sbas_l1_mt25_h2_v0_delta_y_2;
614 static int hf_sbas_l1_mt25_h2_v0_delta_z_2;
615 static int hf_sbas_l1_mt25_h2_v0_delta_a_2_f0;
616 static int hf_sbas_l1_mt25_h2_v0_iodp;
617 static int hf_sbas_l1_mt25_h2_v0_spare;
618 static int hf_sbas_l1_mt25_h2_v1_prn_mask_nr;
619 static int hf_sbas_l1_mt25_h2_v1_iod;
620 static int hf_sbas_l1_mt25_h2_v1_delta_x;
621 static int hf_sbas_l1_mt25_h2_v1_delta_y;
622 static int hf_sbas_l1_mt25_h2_v1_delta_z;
623 static int hf_sbas_l1_mt25_h2_v1_delta_a_f0;
624 static int hf_sbas_l1_mt25_h2_v1_delta_x_vel;
625 static int hf_sbas_l1_mt25_h2_v1_delta_y_vel;
626 static int hf_sbas_l1_mt25_h2_v1_delta_z_vel;
627 static int hf_sbas_l1_mt25_h2_v1_delta_a_f1;
628 static int hf_sbas_l1_mt25_h2_v1_t_lt;
629 static int hf_sbas_l1_mt25_h2_v1_iodp;
631 // see ICAO Annex 10, Vol I, Table B-50
632 static int hf_sbas_l1_mt26;
633 static int hf_sbas_l1_mt26_igp_band_id;
634 static int hf_sbas_l1_mt26_igp_block_id;
635 static int hf_sbas_l1_mt26_igp_vertical_delay_est_1;
636 static int hf_sbas_l1_mt26_givei_1;
637 static int hf_sbas_l1_mt26_igp_vertical_delay_est_2;
638 static int hf_sbas_l1_mt26_givei_2;
639 static int hf_sbas_l1_mt26_igp_vertical_delay_est_3;
640 static int hf_sbas_l1_mt26_givei_3;
641 static int hf_sbas_l1_mt26_igp_vertical_delay_est_4;
642 static int hf_sbas_l1_mt26_givei_4;
643 static int hf_sbas_l1_mt26_igp_vertical_delay_est_5;
644 static int hf_sbas_l1_mt26_givei_5;
645 static int hf_sbas_l1_mt26_igp_vertical_delay_est_6;
646 static int hf_sbas_l1_mt26_givei_6;
647 static int hf_sbas_l1_mt26_igp_vertical_delay_est_7;
648 static int hf_sbas_l1_mt26_givei_7;
649 static int hf_sbas_l1_mt26_igp_vertical_delay_est_8;
650 static int hf_sbas_l1_mt26_givei_8;
651 static int hf_sbas_l1_mt26_igp_vertical_delay_est_9;
652 static int hf_sbas_l1_mt26_givei_9;
653 static int hf_sbas_l1_mt26_igp_vertical_delay_est_10;
654 static int hf_sbas_l1_mt26_givei_10;
655 static int hf_sbas_l1_mt26_igp_vertical_delay_est_11;
656 static int hf_sbas_l1_mt26_givei_11;
657 static int hf_sbas_l1_mt26_igp_vertical_delay_est_12;
658 static int hf_sbas_l1_mt26_givei_12;
659 static int hf_sbas_l1_mt26_igp_vertical_delay_est_13;
660 static int hf_sbas_l1_mt26_givei_13;
661 static int hf_sbas_l1_mt26_igp_vertical_delay_est_14;
662 static int hf_sbas_l1_mt26_givei_14;
663 static int hf_sbas_l1_mt26_igp_vertical_delay_est_15;
664 static int hf_sbas_l1_mt26_givei_15;
665 static int hf_sbas_l1_mt26_iodi_k;
666 static int hf_sbas_l1_mt26_spare;
668 // see ICAO Annex 10, Vol I, Table B-52
669 static int hf_sbas_l1_mt63;
670 static int hf_sbas_l1_mt63_spare_1;
671 static int hf_sbas_l1_mt63_spare_2;
672 static int hf_sbas_l1_mt63_spare_3;
674 static dissector_table_t sbas_l1_mt_dissector_table;
676 static expert_field ei_sbas_l1_preamble;
677 static expert_field ei_sbas_l1_mt0;
678 static expert_field ei_sbas_l1_crc;
679 static expert_field ei_sbas_l1_mt26_igp_band_id;
680 static expert_field ei_sbas_l1_mt26_igp_block_id;
682 static int ett_sbas_l1;
683 static int ett_sbas_l1_mt0;
684 static int ett_sbas_l1_mt1;
685 static int ett_sbas_l1_mt2;
686 static int ett_sbas_l1_mt3;
687 static int ett_sbas_l1_mt4;
688 static int ett_sbas_l1_mt5;
689 static int ett_sbas_l1_mt6;
690 static int ett_sbas_l1_mt7;
691 static int ett_sbas_l1_mt17;
692 static int ett_sbas_l1_mt17_prn_data[3];
693 static int ett_sbas_l1_mt17_health_and_status;
694 static int ett_sbas_l1_mt18;
695 static int ett_sbas_l1_mt24;
696 static int ett_sbas_l1_mt25;
697 static int ett_sbas_l1_mt26;
698 static int ett_sbas_l1_mt63;
700 // compute the CRC24Q checksum for an SBAS L1 nav msg
701 // see ICAO Annex 10, Vol I, Appendix B, Section 3.5.3.5
702 static uint32_t sbas_crc24q(const uint8_t *data) {
703 uint32_t crc = 0;
705 // source byte and bit level index
706 int s8 = 0, s1 = 7;
708 uint8_t s,d = 0;
710 // At byte level, nav msg needs to be right aligned.
711 // So, pretend that 6 bits (with value zero) have been processed.
712 uint8_t d1 = 6;
714 // process 226 bits nav msg (= 28 bytes + 2 bits)
715 while ((s8 < 28) || (s8 == 28 && s1 > 5)) {
717 // get next bit from nav msg
718 s = (data[s8] >> s1) & 0x01;
720 // include next bit
721 d = (d << 1) ^ s;
723 // 8 bits included?
724 if (d1 == 7) {
725 // do crc update
726 crc=((crc<<8) & 0xffffff) ^ CRC24Q_TBL[(crc>>16) ^ d];
728 d1 = 0;
730 else {
731 d1++;
734 // move to next byte if the last bit of current one was processed.
735 if (s1 == 0) {
736 s8++;
737 s1 = 7;
739 else {
740 s1--;
744 return crc;
747 /* Format GEO position (X or Y axis) with 2600m resolution */
748 static void fmt_geo_xy_position(char *label, int32_t c) {
749 snprintf(label, ITEM_LABEL_LENGTH, "%d m", c * 2600);
752 /* Format GEO position (Z axis) with 26000m resolution */
753 static void fmt_geo_z_position(char *label, int32_t c) {
754 snprintf(label, ITEM_LABEL_LENGTH, "%d m", c * 26000);
757 /* Format GEO velocity (X or Y axis) with 10m/s resolution */
758 static void fmt_geo_xy_velocity(char *label, int32_t c) {
759 snprintf(label, ITEM_LABEL_LENGTH, "%d m/s", c * 10);
762 /* Format GEO velocity (Z axis) with 60m/s resolution */
763 static void fmt_geo_z_velocity(char *label, int32_t c) {
764 snprintf(label, ITEM_LABEL_LENGTH, "%d m/s", c * 60);
767 /* Format time of almanac with 64s resolution */
768 static void fmt_time_of_almanac(char *label, uint32_t c) {
769 c = c * 64;
770 snprintf(label, ITEM_LABEL_LENGTH, "%us (%02u:%02u:%02u)", c, c / 3600, (c / 60) % 60, c % 60);
773 /* Format clock corrections */
774 static void fmt_clock_correction(char *label, int32_t c) {
775 snprintf(label, ITEM_LABEL_LENGTH, "%d * 2^-31 s", c);
778 /* Format corrections with 0.125m resolution */
779 static void fmt_correction_125m(char *label, int32_t c) {
780 c = c * 125;
781 if (c >= 0) {
782 snprintf(label, ITEM_LABEL_LENGTH, "%d.%03dm", c / 1000, c % 1000);
784 else {
785 snprintf(label, ITEM_LABEL_LENGTH, "-%d.%03dm", -c / 1000, -c % 1000);
789 /* Format velocity corrections with 2^-11 m/s resolution */
790 static void fmt_velo_correction(char *label, int32_t c) {
791 int64_t temp = c * INT64_C(48828125);
792 if (c >= 0) {
793 snprintf(label, ITEM_LABEL_LENGTH, " %" PRId64 ".%011" PRId64 "m/s", temp / 100000000000, temp % 100000000000);
795 else {
796 snprintf(label, ITEM_LABEL_LENGTH, "-%" PRId64 ".%011" PRId64 "m/s", -temp / 100000000000, -temp % 100000000000);
800 /* Format clock rate corrections with 2^-39 s/s resolution */
801 static void fmt_clk_rate_correction(char *label, int32_t c) {
802 snprintf(label, ITEM_LABEL_LENGTH, "%d * 2^-39s/s", c);
805 /* Format time of applicability with 16s resolution */
806 static void fmt_time_of_applicability(char *label, uint32_t c) {
807 c = c * 16;
808 snprintf(label, ITEM_LABEL_LENGTH, "%us (%02u:%02u:%02u)", c, c / 3600, (c / 60) % 60, c % 60);
811 /* Dissect SBAS L1 message */
812 static int dissect_sbas_l1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
813 tvbuff_t *next_tvb;
814 uint32_t preamble, mt, cmp_crc;
816 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1");
817 col_clear(pinfo->cinfo, COL_INFO);
819 proto_item *ti = proto_tree_add_item(tree, proto_sbas_l1, tvb, 0, 32, ENC_NA);
820 proto_tree *sbas_l1_tree = proto_item_add_subtree(ti, ett_sbas_l1);
822 // preamble
823 proto_item* pi_preamble = proto_tree_add_item_ret_uint(
824 sbas_l1_tree, hf_sbas_l1_preamble,
825 tvb, 0, 1, ENC_BIG_ENDIAN,
826 &preamble);
827 if (preamble != SBAS_L1_PREAMBLE_1 &&
828 preamble != SBAS_L1_PREAMBLE_2 &&
829 preamble != SBAS_L1_PREAMBLE_3) {
830 expert_add_info_format(pinfo, pi_preamble, &ei_sbas_l1_preamble,
831 "Erroneous preamble");
834 // message type
835 proto_item* pi_mt = proto_tree_add_item_ret_uint(
836 sbas_l1_tree, hf_sbas_l1_mt,
837 tvb, 1, 1, ENC_BIG_ENDIAN,
838 &mt);
839 if (mt == 0) { // flag "Do Not Use" MT0 messages
840 expert_add_info(pinfo, pi_mt, &ei_sbas_l1_mt0);
843 // checksum
844 cmp_crc = sbas_crc24q((uint8_t *)tvb_memdup(pinfo->pool, tvb, 0, 29));
845 proto_tree_add_checksum(sbas_l1_tree, tvb, 28, hf_sbas_l1_chksum, -1,
846 &ei_sbas_l1_crc, NULL, cmp_crc, ENC_BIG_ENDIAN, PROTO_CHECKSUM_VERIFY);
848 // try to dissect MT data
849 next_tvb = tvb_new_subset_length(tvb, 1, 28);
850 if (!dissector_try_uint(sbas_l1_mt_dissector_table, mt, next_tvb, pinfo, tree)) {
851 call_data_dissector(next_tvb, pinfo, tree);
854 return tvb_captured_length(tvb);
857 /* Dissect SBAS L1 MT 0 */
858 static int dissect_sbas_l1_mt0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
859 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT0");
860 col_clear(pinfo->cinfo, COL_INFO);
862 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt0, tvb, 0, 32, ENC_NA);
863 proto_tree *sbas_l1_mt0_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt0);
865 proto_tree_add_item(sbas_l1_mt0_tree, hf_sbas_l1_mt0_spare_1, tvb, 0, 1, ENC_NA);
866 proto_tree_add_item(sbas_l1_mt0_tree, hf_sbas_l1_mt0_spare_2, tvb, 1, 26, ENC_NA);
867 proto_tree_add_item(sbas_l1_mt0_tree, hf_sbas_l1_mt0_spare_3, tvb, 27, 1, ENC_NA);
869 return tvb_captured_length(tvb);
872 /* Dissect SBAS L1 MT 1 */
873 static int dissect_sbas_l1_mt1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
874 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT1");
875 col_clear(pinfo->cinfo, COL_INFO);
877 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt1, tvb, 0, 32, ENC_NA);
878 proto_tree *sbas_l1_mt1_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt1);
880 proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_gps, tvb, 0, 8, ENC_BIG_ENDIAN);
881 proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_glonass, tvb, 5, 8, ENC_BIG_ENDIAN);
882 proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_spare_1, tvb, 8, 8, ENC_BIG_ENDIAN);
883 proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_sbas, tvb, 15, 8, ENC_BIG_ENDIAN);
884 proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_spare_2, tvb, 20, 8, ENC_BIG_ENDIAN);
885 proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_iodp, tvb, 27, 1, ENC_NA);
887 return tvb_captured_length(tvb);
890 /* Dissect SBAS L1 MT 2 */
891 static int dissect_sbas_l1_mt2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
892 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT2");
893 col_clear(pinfo->cinfo, COL_INFO);
895 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt2, tvb, 0, 32, ENC_NA);
896 proto_tree *sbas_l1_mt2_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt2);
898 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_iodf_2, tvb, 0, 1, ENC_NA);
899 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_iodp, tvb, 1, 1, ENC_NA);
900 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_1, tvb, 1, 4, ENC_BIG_ENDIAN);
901 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_2, tvb, 2, 4, ENC_BIG_ENDIAN);
902 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_3, tvb, 4, 4, ENC_BIG_ENDIAN);
903 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_4, tvb, 5, 4, ENC_BIG_ENDIAN);
904 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_5, tvb, 7, 4, ENC_BIG_ENDIAN);
905 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_6, tvb, 8, 4, ENC_BIG_ENDIAN);
906 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_7, tvb, 10, 4, ENC_BIG_ENDIAN);
907 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_8, tvb, 11, 4, ENC_BIG_ENDIAN);
908 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_9, tvb, 13, 4, ENC_BIG_ENDIAN);
909 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_10, tvb, 14, 4, ENC_BIG_ENDIAN);
910 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_11, tvb, 16, 4, ENC_BIG_ENDIAN);
911 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_12, tvb, 17, 4, ENC_BIG_ENDIAN);
912 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_13, tvb, 19, 4, ENC_BIG_ENDIAN);
913 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_1, tvb, 20, 2, ENC_BIG_ENDIAN);
914 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_2, tvb, 21, 2, ENC_BIG_ENDIAN);
915 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_3, tvb, 21, 2, ENC_BIG_ENDIAN);
916 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_4, tvb, 22, 2, ENC_BIG_ENDIAN);
917 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_5, tvb, 22, 2, ENC_BIG_ENDIAN);
918 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_6, tvb, 23, 2, ENC_BIG_ENDIAN);
919 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_7, tvb, 23, 2, ENC_BIG_ENDIAN);
920 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_8, tvb, 24, 2, ENC_BIG_ENDIAN);
921 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_9, tvb, 24, 2, ENC_BIG_ENDIAN);
922 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_10, tvb, 25, 2, ENC_BIG_ENDIAN);
923 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_11, tvb, 25, 2, ENC_BIG_ENDIAN);
924 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_12, tvb, 26, 2, ENC_BIG_ENDIAN);
925 proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_13, tvb, 26, 2, ENC_BIG_ENDIAN);
927 return tvb_captured_length(tvb);
930 /* Dissect SBAS L1 MT 3 */
931 static int dissect_sbas_l1_mt3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
932 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT3");
933 col_clear(pinfo->cinfo, COL_INFO);
935 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt3, tvb, 0, 32, ENC_NA);
936 proto_tree *sbas_l1_mt3_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt3);
938 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_iodf_3, tvb, 0, 1, ENC_NA);
939 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_iodp, tvb, 1, 1, ENC_NA);
940 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_14, tvb, 1, 4, ENC_BIG_ENDIAN);
941 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_15, tvb, 2, 4, ENC_BIG_ENDIAN);
942 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_16, tvb, 4, 4, ENC_BIG_ENDIAN);
943 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_17, tvb, 5, 4, ENC_BIG_ENDIAN);
944 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_18, tvb, 7, 4, ENC_BIG_ENDIAN);
945 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_19, tvb, 8, 4, ENC_BIG_ENDIAN);
946 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_20, tvb, 10, 4, ENC_BIG_ENDIAN);
947 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_21, tvb, 11, 4, ENC_BIG_ENDIAN);
948 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_22, tvb, 13, 4, ENC_BIG_ENDIAN);
949 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_23, tvb, 14, 4, ENC_BIG_ENDIAN);
950 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_24, tvb, 16, 4, ENC_BIG_ENDIAN);
951 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_25, tvb, 17, 4, ENC_BIG_ENDIAN);
952 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_26, tvb, 19, 4, ENC_BIG_ENDIAN);
953 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_14, tvb, 20, 2, ENC_BIG_ENDIAN);
954 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_15, tvb, 21, 2, ENC_BIG_ENDIAN);
955 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_16, tvb, 21, 2, ENC_BIG_ENDIAN);
956 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_17, tvb, 22, 2, ENC_BIG_ENDIAN);
957 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_18, tvb, 22, 2, ENC_BIG_ENDIAN);
958 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_19, tvb, 23, 2, ENC_BIG_ENDIAN);
959 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_20, tvb, 23, 2, ENC_BIG_ENDIAN);
960 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_21, tvb, 24, 2, ENC_BIG_ENDIAN);
961 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_22, tvb, 24, 2, ENC_BIG_ENDIAN);
962 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_23, tvb, 25, 2, ENC_BIG_ENDIAN);
963 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_24, tvb, 25, 2, ENC_BIG_ENDIAN);
964 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_25, tvb, 26, 2, ENC_BIG_ENDIAN);
965 proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_26, tvb, 26, 2, ENC_BIG_ENDIAN);
967 return tvb_captured_length(tvb);
970 /* Dissect SBAS L1 MT 4 */
971 static int dissect_sbas_l1_mt4(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
972 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT4");
973 col_clear(pinfo->cinfo, COL_INFO);
975 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt4, tvb, 0, 32, ENC_NA);
976 proto_tree *sbas_l1_mt4_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt4);
978 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_iodf_4, tvb, 0, 1, ENC_NA);
979 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_iodp, tvb, 1, 1, ENC_NA);
980 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_27, tvb, 1, 4, ENC_BIG_ENDIAN);
981 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_28, tvb, 2, 4, ENC_BIG_ENDIAN);
982 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_29, tvb, 4, 4, ENC_BIG_ENDIAN);
983 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_30, tvb, 5, 4, ENC_BIG_ENDIAN);
984 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_31, tvb, 7, 4, ENC_BIG_ENDIAN);
985 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_32, tvb, 8, 4, ENC_BIG_ENDIAN);
986 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_33, tvb, 10, 4, ENC_BIG_ENDIAN);
987 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_34, tvb, 11, 4, ENC_BIG_ENDIAN);
988 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_35, tvb, 13, 4, ENC_BIG_ENDIAN);
989 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_36, tvb, 14, 4, ENC_BIG_ENDIAN);
990 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_37, tvb, 16, 4, ENC_BIG_ENDIAN);
991 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_38, tvb, 17, 4, ENC_BIG_ENDIAN);
992 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_39, tvb, 19, 4, ENC_BIG_ENDIAN);
993 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_27, tvb, 20, 2, ENC_BIG_ENDIAN);
994 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_28, tvb, 21, 2, ENC_BIG_ENDIAN);
995 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_29, tvb, 21, 2, ENC_BIG_ENDIAN);
996 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_30, tvb, 22, 2, ENC_BIG_ENDIAN);
997 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_31, tvb, 22, 2, ENC_BIG_ENDIAN);
998 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_32, tvb, 23, 2, ENC_BIG_ENDIAN);
999 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_33, tvb, 23, 2, ENC_BIG_ENDIAN);
1000 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_34, tvb, 24, 2, ENC_BIG_ENDIAN);
1001 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_35, tvb, 24, 2, ENC_BIG_ENDIAN);
1002 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_36, tvb, 25, 2, ENC_BIG_ENDIAN);
1003 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_37, tvb, 25, 2, ENC_BIG_ENDIAN);
1004 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_38, tvb, 26, 2, ENC_BIG_ENDIAN);
1005 proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_39, tvb, 26, 2, ENC_BIG_ENDIAN);
1007 return tvb_captured_length(tvb);
1010 /* Dissect SBAS L1 MT 5 */
1011 static int dissect_sbas_l1_mt5(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1012 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT5");
1013 col_clear(pinfo->cinfo, COL_INFO);
1015 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt5, tvb, 0, 32, ENC_NA);
1016 proto_tree *sbas_l1_mt5_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt5);
1018 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_iodf_5, tvb, 0, 1, ENC_NA);
1019 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_iodp, tvb, 1, 1, ENC_NA);
1020 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_40, tvb, 1, 4, ENC_BIG_ENDIAN);
1021 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_41, tvb, 2, 4, ENC_BIG_ENDIAN);
1022 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_42, tvb, 4, 4, ENC_BIG_ENDIAN);
1023 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_43, tvb, 5, 4, ENC_BIG_ENDIAN);
1024 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_44, tvb, 7, 4, ENC_BIG_ENDIAN);
1025 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_45, tvb, 8, 4, ENC_BIG_ENDIAN);
1026 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_46, tvb, 10, 4, ENC_BIG_ENDIAN);
1027 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_47, tvb, 11, 4, ENC_BIG_ENDIAN);
1028 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_48, tvb, 13, 4, ENC_BIG_ENDIAN);
1029 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_49, tvb, 14, 4, ENC_BIG_ENDIAN);
1030 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_50, tvb, 16, 4, ENC_BIG_ENDIAN);
1031 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_51, tvb, 17, 4, ENC_BIG_ENDIAN);
1032 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_52, tvb, 19, 4, ENC_BIG_ENDIAN);
1033 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_40, tvb, 20, 2, ENC_BIG_ENDIAN);
1034 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_41, tvb, 21, 2, ENC_BIG_ENDIAN);
1035 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_42, tvb, 21, 2, ENC_BIG_ENDIAN);
1036 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_43, tvb, 22, 2, ENC_BIG_ENDIAN);
1037 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_44, tvb, 22, 2, ENC_BIG_ENDIAN);
1038 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_45, tvb, 23, 2, ENC_BIG_ENDIAN);
1039 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_46, tvb, 23, 2, ENC_BIG_ENDIAN);
1040 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_47, tvb, 24, 2, ENC_BIG_ENDIAN);
1041 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_48, tvb, 24, 2, ENC_BIG_ENDIAN);
1042 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_49, tvb, 25, 2, ENC_BIG_ENDIAN);
1043 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_50, tvb, 25, 2, ENC_BIG_ENDIAN);
1044 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_51, tvb, 26, 2, ENC_BIG_ENDIAN);
1045 proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_52, tvb, 26, 2, ENC_BIG_ENDIAN);
1047 return tvb_captured_length(tvb);
1050 /* Dissect SBAS L1 MT 6 */
1051 static int dissect_sbas_l1_mt6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1052 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT6");
1053 col_clear(pinfo->cinfo, COL_INFO);
1055 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt6, tvb, 0, 32, ENC_NA);
1056 proto_tree *sbas_l1_mt6_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt6);
1058 // IODF_2 to IODF_5
1059 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_2, tvb, 0, 1, ENC_NA);
1060 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_3, tvb, 1, 1, ENC_NA);
1061 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_4, tvb, 1, 1, ENC_NA);
1062 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_5, tvb, 1, 1, ENC_NA);
1064 // UDREI_i
1065 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_1, tvb, 1, 2, ENC_BIG_ENDIAN);
1066 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_2, tvb, 2, 2, ENC_BIG_ENDIAN);
1067 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_3, tvb, 2, 2, ENC_BIG_ENDIAN);
1068 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_4, tvb, 3, 2, ENC_BIG_ENDIAN);
1069 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_5, tvb, 3, 2, ENC_BIG_ENDIAN);
1070 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_6, tvb, 4, 2, ENC_BIG_ENDIAN);
1071 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_7, tvb, 4, 2, ENC_BIG_ENDIAN);
1072 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_8, tvb, 5, 2, ENC_BIG_ENDIAN);
1073 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_9, tvb, 5, 2, ENC_BIG_ENDIAN);
1074 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_10, tvb, 6, 2, ENC_BIG_ENDIAN);
1075 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_11, tvb, 6, 2, ENC_BIG_ENDIAN);
1076 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_12, tvb, 7, 2, ENC_BIG_ENDIAN);
1077 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_13, tvb, 7, 2, ENC_BIG_ENDIAN);
1078 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_14, tvb, 8, 2, ENC_BIG_ENDIAN);
1079 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_15, tvb, 8, 2, ENC_BIG_ENDIAN);
1080 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_16, tvb, 9, 2, ENC_BIG_ENDIAN);
1081 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_17, tvb, 9, 2, ENC_BIG_ENDIAN);
1082 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_18, tvb, 10, 2, ENC_BIG_ENDIAN);
1083 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_19, tvb, 10, 2, ENC_BIG_ENDIAN);
1084 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_20, tvb, 11, 2, ENC_BIG_ENDIAN);
1085 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_21, tvb, 11, 2, ENC_BIG_ENDIAN);
1086 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_22, tvb, 12, 2, ENC_BIG_ENDIAN);
1087 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_23, tvb, 12, 2, ENC_BIG_ENDIAN);
1088 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_24, tvb, 13, 2, ENC_BIG_ENDIAN);
1089 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_25, tvb, 13, 2, ENC_BIG_ENDIAN);
1090 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_26, tvb, 14, 2, ENC_BIG_ENDIAN);
1091 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_27, tvb, 14, 2, ENC_BIG_ENDIAN);
1092 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_28, tvb, 15, 2, ENC_BIG_ENDIAN);
1093 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_29, tvb, 15, 2, ENC_BIG_ENDIAN);
1094 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_30, tvb, 16, 2, ENC_BIG_ENDIAN);
1095 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_31, tvb, 16, 2, ENC_BIG_ENDIAN);
1096 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_32, tvb, 17, 2, ENC_BIG_ENDIAN);
1097 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_33, tvb, 17, 2, ENC_BIG_ENDIAN);
1098 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_34, tvb, 18, 2, ENC_BIG_ENDIAN);
1099 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_35, tvb, 18, 2, ENC_BIG_ENDIAN);
1100 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_36, tvb, 19, 2, ENC_BIG_ENDIAN);
1101 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_37, tvb, 19, 2, ENC_BIG_ENDIAN);
1102 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_38, tvb, 20, 2, ENC_BIG_ENDIAN);
1103 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_39, tvb, 20, 2, ENC_BIG_ENDIAN);
1104 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_40, tvb, 21, 2, ENC_BIG_ENDIAN);
1105 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_41, tvb, 21, 2, ENC_BIG_ENDIAN);
1106 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_42, tvb, 22, 2, ENC_BIG_ENDIAN);
1107 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_43, tvb, 22, 2, ENC_BIG_ENDIAN);
1108 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_44, tvb, 23, 2, ENC_BIG_ENDIAN);
1109 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_45, tvb, 23, 2, ENC_BIG_ENDIAN);
1110 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_46, tvb, 24, 2, ENC_BIG_ENDIAN);
1111 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_47, tvb, 24, 2, ENC_BIG_ENDIAN);
1112 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_48, tvb, 25, 2, ENC_BIG_ENDIAN);
1113 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_49, tvb, 25, 2, ENC_BIG_ENDIAN);
1114 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_50, tvb, 26, 2, ENC_BIG_ENDIAN);
1115 proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_51, tvb, 26, 2, ENC_BIG_ENDIAN);
1117 return tvb_captured_length(tvb);
1120 /* Dissect SBAS L1 MT 7 */
1121 static int dissect_sbas_l1_mt7(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1122 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT7");
1123 col_clear(pinfo->cinfo, COL_INFO);
1125 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt7, tvb, 0, 32, ENC_NA);
1126 proto_tree *sbas_l1_mt7_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt7);
1128 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_t_lat, tvb, 0, 2, ENC_BIG_ENDIAN);
1129 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_iodp, tvb, 1, 1, ENC_NA);
1130 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_spare, tvb, 1, 1, ENC_NA);
1132 // Degradation factor indicator ai_i
1133 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_1, tvb, 1, 2, ENC_BIG_ENDIAN);
1134 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_2, tvb, 2, 2, ENC_BIG_ENDIAN);
1135 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_3, tvb, 2, 2, ENC_BIG_ENDIAN);
1136 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_4, tvb, 3, 2, ENC_BIG_ENDIAN);
1137 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_5, tvb, 3, 2, ENC_BIG_ENDIAN);
1138 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_6, tvb, 4, 2, ENC_BIG_ENDIAN);
1139 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_7, tvb, 4, 2, ENC_BIG_ENDIAN);
1140 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_8, tvb, 5, 2, ENC_BIG_ENDIAN);
1141 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_9, tvb, 5, 2, ENC_BIG_ENDIAN);
1142 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_10, tvb, 6, 2, ENC_BIG_ENDIAN);
1143 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_11, tvb, 6, 2, ENC_BIG_ENDIAN);
1144 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_12, tvb, 7, 2, ENC_BIG_ENDIAN);
1145 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_13, tvb, 7, 2, ENC_BIG_ENDIAN);
1146 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_14, tvb, 8, 2, ENC_BIG_ENDIAN);
1147 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_15, tvb, 8, 2, ENC_BIG_ENDIAN);
1148 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_16, tvb, 9, 2, ENC_BIG_ENDIAN);
1149 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_17, tvb, 9, 2, ENC_BIG_ENDIAN);
1150 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_18, tvb, 10, 2, ENC_BIG_ENDIAN);
1151 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_19, tvb, 10, 2, ENC_BIG_ENDIAN);
1152 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_20, tvb, 11, 2, ENC_BIG_ENDIAN);
1153 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_21, tvb, 11, 2, ENC_BIG_ENDIAN);
1154 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_22, tvb, 12, 2, ENC_BIG_ENDIAN);
1155 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_23, tvb, 12, 2, ENC_BIG_ENDIAN);
1156 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_24, tvb, 13, 2, ENC_BIG_ENDIAN);
1157 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_25, tvb, 13, 2, ENC_BIG_ENDIAN);
1158 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_26, tvb, 14, 2, ENC_BIG_ENDIAN);
1159 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_27, tvb, 14, 2, ENC_BIG_ENDIAN);
1160 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_28, tvb, 15, 2, ENC_BIG_ENDIAN);
1161 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_29, tvb, 15, 2, ENC_BIG_ENDIAN);
1162 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_30, tvb, 16, 2, ENC_BIG_ENDIAN);
1163 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_31, tvb, 16, 2, ENC_BIG_ENDIAN);
1164 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_32, tvb, 17, 2, ENC_BIG_ENDIAN);
1165 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_33, tvb, 17, 2, ENC_BIG_ENDIAN);
1166 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_34, tvb, 18, 2, ENC_BIG_ENDIAN);
1167 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_35, tvb, 18, 2, ENC_BIG_ENDIAN);
1168 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_36, tvb, 19, 2, ENC_BIG_ENDIAN);
1169 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_37, tvb, 19, 2, ENC_BIG_ENDIAN);
1170 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_38, tvb, 20, 2, ENC_BIG_ENDIAN);
1171 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_39, tvb, 20, 2, ENC_BIG_ENDIAN);
1172 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_40, tvb, 21, 2, ENC_BIG_ENDIAN);
1173 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_41, tvb, 21, 2, ENC_BIG_ENDIAN);
1174 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_42, tvb, 22, 2, ENC_BIG_ENDIAN);
1175 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_43, tvb, 22, 2, ENC_BIG_ENDIAN);
1176 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_44, tvb, 23, 2, ENC_BIG_ENDIAN);
1177 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_45, tvb, 23, 2, ENC_BIG_ENDIAN);
1178 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_46, tvb, 24, 2, ENC_BIG_ENDIAN);
1179 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_47, tvb, 24, 2, ENC_BIG_ENDIAN);
1180 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_48, tvb, 25, 2, ENC_BIG_ENDIAN);
1181 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_49, tvb, 25, 2, ENC_BIG_ENDIAN);
1182 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_50, tvb, 26, 2, ENC_BIG_ENDIAN);
1183 proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_51, tvb, 26, 2, ENC_BIG_ENDIAN);
1185 return tvb_captured_length(tvb);
1188 /* Dissect SBAS L1 MT 17 */
1189 static int dissect_sbas_l1_mt17(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1190 uint8_t i;
1191 tvbuff_t *prn_tvb;
1193 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT17");
1194 col_clear(pinfo->cinfo, COL_INFO);
1196 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt17, tvb, 0, 32, ENC_NA);
1197 proto_tree *sbas_l1_mt17_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt17);
1199 // dissect data for each of 3 PRNs
1200 for (i = 0; i < 3; i++) {
1201 prn_tvb = tvb_new_octet_aligned(tvb, 6 + i*67, 67);
1202 if (prn_tvb) {
1203 add_new_data_source(pinfo, prn_tvb, "PRN data");
1205 uint16_t prn = (tvb_get_uint16(prn_tvb, 0, ENC_BIG_ENDIAN) >> 6) & 0xff;
1207 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);
1209 proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_reserved, prn_tvb, 0, 1, ENC_NA);
1210 proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_prn, prn_tvb, 0, 2, ENC_BIG_ENDIAN);
1212 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);
1214 proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_x_ga, prn_tvb, 2, 4, ENC_BIG_ENDIAN);
1215 proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_y_ga, prn_tvb, 4, 4, ENC_BIG_ENDIAN);
1216 proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_z_ga, prn_tvb, 4, 4, ENC_BIG_ENDIAN);
1217 proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_x_ga_vel, prn_tvb, 4, 4, ENC_BIG_ENDIAN);
1218 proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_y_ga_vel, prn_tvb, 4, 4, ENC_BIG_ENDIAN);
1219 proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_z_ga_vel, prn_tvb, 5, 4, ENC_BIG_ENDIAN);
1223 proto_tree_add_item(sbas_l1_mt17_tree, hf_sbas_l1_mt17_t_a, tvb, 24, 4, ENC_BIG_ENDIAN);
1225 return tvb_captured_length(tvb);
1228 /* Dissect SBAS L1 MT 18 */
1229 static int dissect_sbas_l1_mt18(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1230 guint32 band_id;
1232 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT18");
1233 col_clear(pinfo->cinfo, COL_INFO);
1235 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt18, tvb, 0, 32, ENC_NA);
1236 proto_tree *sbas_l1_mt18_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt18);
1238 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_nr_igp_bands, tvb, 0, 2, ENC_BIG_ENDIAN);
1239 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);
1240 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_iodi_k, tvb, 0, 2, ENC_BIG_ENDIAN);
1242 if (band_id == 0) {
1243 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_180w, tvb, 2, 8, ENC_BIG_ENDIAN);
1244 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_175w, tvb, 2, 8, ENC_BIG_ENDIAN);
1245 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_170w, tvb, 8, 8, ENC_BIG_ENDIAN);
1246 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_165w, tvb, 8, 8, ENC_BIG_ENDIAN);
1247 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_160w, tvb, 14, 8, ENC_BIG_ENDIAN);
1248 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_155w, tvb, 14, 8, ENC_BIG_ENDIAN);
1249 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_150w, tvb, 20, 8, ENC_BIG_ENDIAN);
1250 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_145w, tvb, 20, 8, ENC_BIG_ENDIAN);
1252 else if (band_id == 1) {
1253 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_140w, tvb, 2, 8, ENC_BIG_ENDIAN);
1254 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_135w, tvb, 2, 8, ENC_BIG_ENDIAN);
1255 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_130w, tvb, 8, 8, ENC_BIG_ENDIAN);
1256 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_125w, tvb, 8, 8, ENC_BIG_ENDIAN);
1257 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_120w, tvb, 14, 8, ENC_BIG_ENDIAN);
1258 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_115w, tvb, 14, 8, ENC_BIG_ENDIAN);
1259 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_110w, tvb, 20, 8, ENC_BIG_ENDIAN);
1260 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_105w, tvb, 20, 8, ENC_BIG_ENDIAN);
1262 else if (band_id == 2) {
1263 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_100w, tvb, 2, 8, ENC_BIG_ENDIAN);
1264 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_95w, tvb, 2, 8, ENC_BIG_ENDIAN);
1265 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_90w, tvb, 8, 8, ENC_BIG_ENDIAN);
1266 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85w, tvb, 8, 8, ENC_BIG_ENDIAN);
1267 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_80w, tvb, 14, 8, ENC_BIG_ENDIAN);
1268 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75w, tvb, 14, 8, ENC_BIG_ENDIAN);
1269 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70w, tvb, 20, 8, ENC_BIG_ENDIAN);
1270 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65w, tvb, 20, 8, ENC_BIG_ENDIAN);
1272 else if (band_id == 3) {
1273 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60w, tvb, 2, 8, ENC_BIG_ENDIAN);
1274 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_55w, tvb, 2, 8, ENC_BIG_ENDIAN);
1275 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_50w, tvb, 8, 8, ENC_BIG_ENDIAN);
1276 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_45w, tvb, 8, 8, ENC_BIG_ENDIAN);
1277 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_40w, tvb, 14, 8, ENC_BIG_ENDIAN);
1278 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_35w, tvb, 14, 8, ENC_BIG_ENDIAN);
1279 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_30w, tvb, 20, 8, ENC_BIG_ENDIAN);
1280 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_25w, tvb, 20, 8, ENC_BIG_ENDIAN);
1282 else if (band_id == 4) {
1283 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_20w, tvb, 2, 8, ENC_BIG_ENDIAN);
1284 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_15w, tvb, 2, 8, ENC_BIG_ENDIAN);
1285 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_10w, tvb, 8, 8, ENC_BIG_ENDIAN);
1286 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_5w, tvb, 8, 8, ENC_BIG_ENDIAN);
1287 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_0, tvb, 14, 8, ENC_BIG_ENDIAN);
1288 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_5e, tvb, 14, 8, ENC_BIG_ENDIAN);
1289 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_10e, tvb, 20, 8, ENC_BIG_ENDIAN);
1290 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_15e, tvb, 20, 8, ENC_BIG_ENDIAN);
1292 else if (band_id == 5) {
1293 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_20e, tvb, 2, 8, ENC_BIG_ENDIAN);
1294 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_25e, tvb, 2, 8, ENC_BIG_ENDIAN);
1295 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_30e, tvb, 8, 8, ENC_BIG_ENDIAN);
1296 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_35e, tvb, 8, 8, ENC_BIG_ENDIAN);
1297 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_40e, tvb, 14, 8, ENC_BIG_ENDIAN);
1298 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_45e, tvb, 14, 8, ENC_BIG_ENDIAN);
1299 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_50e, tvb, 20, 8, ENC_BIG_ENDIAN);
1300 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_55e, tvb, 20, 8, ENC_BIG_ENDIAN);
1302 else if (band_id == 6) {
1303 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60e, tvb, 2, 8, ENC_BIG_ENDIAN);
1304 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65e, tvb, 2, 8, ENC_BIG_ENDIAN);
1305 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70e, tvb, 8, 8, ENC_BIG_ENDIAN);
1306 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75e, tvb, 8, 8, ENC_BIG_ENDIAN);
1307 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_80e, tvb, 14, 8, ENC_BIG_ENDIAN);
1308 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85e, tvb, 14, 8, ENC_BIG_ENDIAN);
1309 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_90e, tvb, 20, 8, ENC_BIG_ENDIAN);
1310 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_95e, tvb, 20, 8, ENC_BIG_ENDIAN);
1312 else if (band_id == 7) {
1313 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_100e, tvb, 2, 8, ENC_BIG_ENDIAN);
1314 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_105e, tvb, 2, 8, ENC_BIG_ENDIAN);
1315 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_110e, tvb, 8, 8, ENC_BIG_ENDIAN);
1316 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_115e, tvb, 8, 8, ENC_BIG_ENDIAN);
1317 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_120e, tvb, 14, 8, ENC_BIG_ENDIAN);
1318 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_125e, tvb, 14, 8, ENC_BIG_ENDIAN);
1319 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_130e, tvb, 20, 8, ENC_BIG_ENDIAN);
1320 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_135e, tvb, 20, 8, ENC_BIG_ENDIAN);
1322 else if (band_id == 8) {
1323 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_140e, tvb, 2, 8, ENC_BIG_ENDIAN);
1324 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_145e, tvb, 2, 8, ENC_BIG_ENDIAN);
1325 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_150e, tvb, 8, 8, ENC_BIG_ENDIAN);
1326 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_155e, tvb, 8, 8, ENC_BIG_ENDIAN);
1327 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_160e, tvb, 14, 8, ENC_BIG_ENDIAN);
1328 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_165e, tvb, 14, 8, ENC_BIG_ENDIAN);
1329 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_170e, tvb, 20, 8, ENC_BIG_ENDIAN);
1330 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_175e, tvb, 20, 8, ENC_BIG_ENDIAN);
1332 else if (band_id == 9) {
1333 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60n_1, tvb, 2, 8, ENC_BIG_ENDIAN);
1334 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60n_2, tvb, 3, 8, ENC_BIG_ENDIAN);
1335 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65n, tvb, 11, 8, ENC_BIG_ENDIAN);
1336 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70n, tvb, 12, 8, ENC_BIG_ENDIAN);
1337 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75n, tvb, 20, 8, ENC_BIG_ENDIAN);
1338 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85n, tvb, 20, 8, ENC_BIG_ENDIAN);
1340 else if (band_id == 10) {
1341 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60s_1, tvb, 2, 8, ENC_BIG_ENDIAN);
1342 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60s_2, tvb, 3, 8, ENC_BIG_ENDIAN);
1343 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65s, tvb, 11, 8, ENC_BIG_ENDIAN);
1344 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70s, tvb, 12, 8, ENC_BIG_ENDIAN);
1345 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75s, tvb, 20, 8, ENC_BIG_ENDIAN);
1346 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85s, tvb, 20, 8, ENC_BIG_ENDIAN);
1349 proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_spare, tvb, 27, 1, ENC_NA);
1351 return tvb_captured_length(tvb);
1354 /* Dissect SBAS L1 MT 24 */
1355 static int dissect_sbas_l1_mt24(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1356 uint32_t velocity_code;
1358 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT24");
1359 col_clear(pinfo->cinfo, COL_INFO);
1361 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt24, tvb, 0, 32, ENC_NA);
1362 proto_tree *sbas_l1_mt24_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt24);
1364 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i1, tvb, 0, 4, ENC_BIG_ENDIAN);
1365 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i2, tvb, 2, 4, ENC_BIG_ENDIAN);
1366 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i3, tvb, 3, 4, ENC_BIG_ENDIAN);
1367 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i4, tvb, 5, 4, ENC_BIG_ENDIAN);
1368 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i5, tvb, 6, 4, ENC_BIG_ENDIAN);
1369 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i6, tvb, 8, 4, ENC_BIG_ENDIAN);
1370 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i1, tvb, 9, 2, ENC_BIG_ENDIAN);
1371 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i2, tvb, 10, 2, ENC_BIG_ENDIAN);
1372 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i3, tvb, 10, 2, ENC_BIG_ENDIAN);
1373 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i4, tvb, 11, 2, ENC_BIG_ENDIAN);
1374 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i5, tvb, 11, 2, ENC_BIG_ENDIAN);
1375 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i6, tvb, 12, 2, ENC_BIG_ENDIAN);
1376 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_iodp, tvb, 12, 1, ENC_NA);
1377 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_type, tvb, 13, 1, ENC_NA);
1378 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_iodf_j, tvb, 13, 1, ENC_NA);
1379 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_spare, tvb, 13, 1, ENC_NA);
1381 proto_tree_add_item_ret_uint(sbas_l1_mt24_tree, hf_sbas_l1_mt24_velocity_code, tvb, 14, 1, ENC_NA, &velocity_code);
1383 if (velocity_code == 0) {
1384 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_prn_mask_nr_1, tvb, 14, 1, ENC_NA);
1385 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_iod_1, tvb, 14, 2, ENC_BIG_ENDIAN);
1386 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_x_1, tvb, 15, 2, ENC_BIG_ENDIAN);
1387 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_y_1, tvb, 17, 2, ENC_BIG_ENDIAN);
1388 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_z_1, tvb, 18, 2, ENC_BIG_ENDIAN);
1389 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_a_1_f0, tvb, 19, 2, ENC_BIG_ENDIAN);
1391 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_prn_mask_nr_2, tvb, 20, 2, ENC_BIG_ENDIAN);
1392 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_iod_2, tvb, 21, 2, ENC_BIG_ENDIAN);
1393 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_x_2, tvb, 22, 2, ENC_BIG_ENDIAN);
1394 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_y_2, tvb, 23, 2, ENC_BIG_ENDIAN);
1395 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_z_2, tvb, 24, 2, ENC_BIG_ENDIAN);
1396 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_a_2_f0, tvb, 25, 2, ENC_BIG_ENDIAN);
1397 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_iodp, tvb, 26, 2, ENC_BIG_ENDIAN);
1398 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_spare, tvb, 27, 1, ENC_NA);
1400 else {
1401 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_prn_mask_nr, tvb, 14, 1, ENC_NA);
1402 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_iod, tvb, 14, 2, ENC_BIG_ENDIAN);
1403 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_x, tvb, 15, 4, ENC_BIG_ENDIAN);
1404 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_y, tvb, 17, 4, ENC_BIG_ENDIAN);
1405 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_z, tvb, 18, 4, ENC_BIG_ENDIAN);
1406 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_a_f0, tvb, 20, 4, ENC_BIG_ENDIAN);
1407 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_x_vel, tvb, 21, 4, ENC_BIG_ENDIAN);
1408 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_y_vel, tvb, 22, 4, ENC_BIG_ENDIAN);
1409 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_z_vel, tvb, 23, 4, ENC_BIG_ENDIAN);
1410 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_a_f1, tvb, 24, 4, ENC_BIG_ENDIAN);
1411 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_t_lt, tvb, 25, 2, ENC_BIG_ENDIAN);
1412 proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_iodp, tvb, 27, 1, ENC_NA);
1415 return tvb_captured_length(tvb);
1418 /* Dissect SBAS L1 MT 25 */
1419 static int dissect_sbas_l1_mt25(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1420 uint32_t velocity_code;
1422 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT25");
1423 col_clear(pinfo->cinfo, COL_INFO);
1425 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt25, tvb, 0, 32, ENC_NA);
1426 proto_tree *sbas_l1_mt25_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt25);
1428 // first half message
1429 proto_tree_add_item_ret_uint(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_velocity_code,
1430 tvb, 0, 1, ENC_NA, &velocity_code);
1431 if (velocity_code == 0) {
1432 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_prn_mask_nr_1,
1433 tvb, 0, 2, ENC_BIG_ENDIAN);
1434 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_iod_1,
1435 tvb, 1, 2, ENC_BIG_ENDIAN);
1436 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_x_1,
1437 tvb, 2, 2, ENC_BIG_ENDIAN);
1438 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_y_1,
1439 tvb, 3, 2, ENC_BIG_ENDIAN);
1440 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_z_1,
1441 tvb, 4, 2, ENC_BIG_ENDIAN);
1442 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_a_1_f0,
1443 tvb, 6, 2, ENC_BIG_ENDIAN);
1445 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_prn_mask_nr_2,
1446 tvb, 7, 1, ENC_NA);
1447 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_iod_2,
1448 tvb, 8, 1, ENC_NA);
1449 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_x_2,
1450 tvb, 9, 2, ENC_BIG_ENDIAN);
1451 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_y_2,
1452 tvb, 10, 2, ENC_BIG_ENDIAN);
1453 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_z_2,
1454 tvb, 11, 2, ENC_BIG_ENDIAN);
1455 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_a_2_f0,
1456 tvb, 12, 2, ENC_BIG_ENDIAN);
1457 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_iodp,
1458 tvb, 13, 1, ENC_NA);
1459 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_spare,
1460 tvb, 13, 1, ENC_NA);
1462 else { // velocity_code == 1
1463 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_prn_mask_nr,
1464 tvb, 0, 2, ENC_BIG_ENDIAN);
1465 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_iod,
1466 tvb, 1, 2, ENC_BIG_ENDIAN);
1467 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_x,
1468 tvb, 2, 4, ENC_BIG_ENDIAN);
1469 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_y,
1470 tvb, 4, 4, ENC_BIG_ENDIAN);
1471 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_z,
1472 tvb, 5, 4, ENC_BIG_ENDIAN);
1473 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_a_f0,
1474 tvb, 6, 4, ENC_BIG_ENDIAN);
1475 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_x_vel,
1476 tvb, 8, 4, ENC_BIG_ENDIAN);
1477 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_y_vel,
1478 tvb, 9, 4, ENC_BIG_ENDIAN);
1479 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_z_vel,
1480 tvb, 10, 4, ENC_BIG_ENDIAN);
1481 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_a_f1,
1482 tvb, 11, 4, ENC_BIG_ENDIAN);
1483 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_t_lt,
1484 tvb, 12, 2, ENC_BIG_ENDIAN);
1485 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_iodp,
1486 tvb, 13, 1, ENC_NA);
1489 // second half message
1490 proto_tree_add_item_ret_uint(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_velocity_code,
1491 tvb, 14, 1, ENC_NA, &velocity_code);
1492 if (velocity_code == 0) {
1493 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_prn_mask_nr_1,
1494 tvb, 14, 1, ENC_NA);
1495 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_iod_1,
1496 tvb, 14, 2, ENC_BIG_ENDIAN);
1497 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_x_1,
1498 tvb, 15, 2, ENC_BIG_ENDIAN);
1499 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_y_1,
1500 tvb, 17, 2, ENC_BIG_ENDIAN);
1501 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_z_1,
1502 tvb, 18, 2, ENC_BIG_ENDIAN);
1503 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_a_1_f0,
1504 tvb, 19, 2, ENC_BIG_ENDIAN);
1506 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_prn_mask_nr_2,
1507 tvb, 20, 2, ENC_BIG_ENDIAN);
1508 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_iod_2,
1509 tvb, 21, 2, ENC_BIG_ENDIAN);
1510 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_x_2,
1511 tvb, 22, 2, ENC_BIG_ENDIAN);
1512 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_y_2,
1513 tvb, 23, 2, ENC_BIG_ENDIAN);
1514 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_z_2,
1515 tvb, 24, 2, ENC_BIG_ENDIAN);
1516 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_a_2_f0,
1517 tvb, 25, 2, ENC_BIG_ENDIAN);
1518 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_iodp,
1519 tvb, 26, 2, ENC_BIG_ENDIAN);
1520 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_spare,
1521 tvb, 27, 1, ENC_NA);
1523 else { // velocity_code == 1
1524 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_prn_mask_nr,
1525 tvb, 14, 1, ENC_NA);
1526 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_iod,
1527 tvb, 14, 2, ENC_BIG_ENDIAN);
1528 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_x,
1529 tvb, 15, 4, ENC_BIG_ENDIAN);
1530 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_y,
1531 tvb, 17, 4, ENC_BIG_ENDIAN);
1532 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_z,
1533 tvb, 18, 4, ENC_BIG_ENDIAN);
1534 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_a_f0,
1535 tvb, 20, 4, ENC_BIG_ENDIAN);
1536 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_x_vel,
1537 tvb, 21, 4, ENC_BIG_ENDIAN);
1538 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_y_vel,
1539 tvb, 22, 4, ENC_BIG_ENDIAN);
1540 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_z_vel,
1541 tvb, 23, 4, ENC_BIG_ENDIAN);
1542 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_a_f1,
1543 tvb, 24, 4, ENC_BIG_ENDIAN);
1544 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_t_lt,
1545 tvb, 25, 2, ENC_BIG_ENDIAN);
1546 proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_iodp,
1547 tvb, 27, 1, ENC_NA);
1550 return tvb_captured_length(tvb);
1553 /* Dissect SBAS L1 MT 26 */
1554 static int dissect_sbas_l1_mt26(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1555 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT26");
1556 col_clear(pinfo->cinfo, COL_INFO);
1558 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt26, tvb, 0, 32, ENC_NA);
1559 proto_tree *sbas_l1_mt26_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt26);
1561 uint32_t igp_band_id;
1562 proto_item* pi_igp_band_id = proto_tree_add_item_ret_uint(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_band_id,
1563 tvb, 0, 2, ENC_BIG_ENDIAN, &igp_band_id);
1564 if (igp_band_id > 10) {
1565 expert_add_info_format(pinfo, pi_igp_band_id, &ei_sbas_l1_mt26_igp_band_id, "Invalid IGP Band Identifier");
1568 uint32_t igp_block_id;
1569 proto_item* pi_igp_block_id = proto_tree_add_item_ret_uint(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_block_id,
1570 tvb, 1, 1, ENC_NA, &igp_block_id);
1571 if (igp_block_id > 13) {
1572 expert_add_info_format(pinfo, pi_igp_block_id, &ei_sbas_l1_mt26_igp_block_id, "Invalid IGP Block Identifier");
1575 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_1, tvb, 1, 2, ENC_BIG_ENDIAN);
1576 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_1, tvb, 2, 2, ENC_BIG_ENDIAN);
1577 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_2, tvb, 3, 2, ENC_BIG_ENDIAN);
1578 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_2, tvb, 4, 2, ENC_BIG_ENDIAN);
1579 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_3, tvb, 5, 2, ENC_BIG_ENDIAN);
1580 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_3, tvb, 6, 2, ENC_BIG_ENDIAN);
1581 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_4, tvb, 6, 2, ENC_BIG_ENDIAN);
1582 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_4, tvb, 7, 2, ENC_BIG_ENDIAN);
1583 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_5, tvb, 8, 2, ENC_BIG_ENDIAN);
1584 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_5, tvb, 9, 2, ENC_BIG_ENDIAN);
1585 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_6, tvb, 9, 2, ENC_BIG_ENDIAN);
1586 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_6, tvb, 11, 2, ENC_BIG_ENDIAN);
1587 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_7, tvb, 11, 2, ENC_BIG_ENDIAN);
1588 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_7, tvb, 12, 2, ENC_BIG_ENDIAN);
1589 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_8, tvb, 13, 2, ENC_BIG_ENDIAN);
1590 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_8, tvb, 14, 2, ENC_BIG_ENDIAN);
1591 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_9, tvb, 14, 2, ENC_BIG_ENDIAN);
1592 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_9, tvb, 15, 2, ENC_BIG_ENDIAN);
1593 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_10, tvb, 16, 2, ENC_BIG_ENDIAN);
1594 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_10, tvb, 17, 2, ENC_BIG_ENDIAN);
1595 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_11, tvb, 18, 2, ENC_BIG_ENDIAN);
1596 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_11, tvb, 19, 2, ENC_BIG_ENDIAN);
1597 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_12, tvb, 19, 2, ENC_BIG_ENDIAN);
1598 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_12, tvb, 20, 2, ENC_BIG_ENDIAN);
1599 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_13, tvb, 21, 2, ENC_BIG_ENDIAN);
1600 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_13, tvb, 22, 2, ENC_BIG_ENDIAN);
1601 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_14, tvb, 22, 2, ENC_BIG_ENDIAN);
1602 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_14, tvb, 24, 2, ENC_BIG_ENDIAN);
1603 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_15, tvb, 24, 2, ENC_BIG_ENDIAN);
1604 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_15, tvb, 25, 2, ENC_BIG_ENDIAN);
1605 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_iodi_k, tvb, 26, 1, ENC_NA);
1606 proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_spare, tvb, 26, 2, ENC_BIG_ENDIAN);
1608 return tvb_captured_length(tvb);
1611 /* Dissect SBAS L1 MT 63 */
1612 static int dissect_sbas_l1_mt63(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1613 col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT63");
1614 col_clear(pinfo->cinfo, COL_INFO);
1616 proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt63, tvb, 0, 32, ENC_NA);
1617 proto_tree *sbas_l1_mt63_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt63);
1619 proto_tree_add_item(sbas_l1_mt63_tree, hf_sbas_l1_mt63_spare_1, tvb, 0, 1, ENC_NA);
1620 proto_tree_add_item(sbas_l1_mt63_tree, hf_sbas_l1_mt63_spare_2, tvb, 1, 26, ENC_NA);
1621 proto_tree_add_item(sbas_l1_mt63_tree, hf_sbas_l1_mt63_spare_3, tvb, 27, 1, ENC_NA);
1623 return tvb_captured_length(tvb);
1626 void proto_register_sbas_l1(void) {
1628 static hf_register_info hf[] = {
1629 {&hf_sbas_l1_preamble, {"Preamble", "sbas_l1.preamble", FT_UINT8, BASE_HEX, NULL, 0xff, NULL, HFILL}},
1630 {&hf_sbas_l1_mt, {"Message Type", "sbas_l1.mt" , FT_UINT8, BASE_DEC, NULL, 0xfc, NULL, HFILL}},
1631 {&hf_sbas_l1_chksum, {"Checksum", "sbas_l1.chksum" , FT_UINT32, BASE_HEX, NULL, 0x3fffffc0, NULL, HFILL}},
1633 // MT0
1634 {&hf_sbas_l1_mt0, {"MT0", "sbas_l1.mt0", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL}},
1635 {&hf_sbas_l1_mt0_spare_1, {"Spare 1", "sbas_l1.mt0.spare_1", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL}},
1636 {&hf_sbas_l1_mt0_spare_2, {"Spare 2", "sbas_l1.mt0.spare_2", FT_BYTES, SEP_SPACE, NULL, 0x00, NULL, HFILL}},
1637 {&hf_sbas_l1_mt0_spare_3, {"Spare 3", "sbas_l1.mt0.spare_3", FT_UINT8, BASE_HEX, NULL, 0xc0, NULL, HFILL}},
1639 // MT1
1640 {&hf_sbas_l1_mt1, {"MT1", "sbas_l1.mt1", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
1641 {&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}},
1642 {&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}},
1643 {&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}},
1644 {&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}},
1645 {&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}},
1646 {&hf_sbas_l1_mt1_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt1.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}},
1648 // MT2
1649 {&hf_sbas_l1_mt2, {"MT2", "sbas_l1.mt2", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
1650 {&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}},
1651 {&hf_sbas_l1_mt2_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt2.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}},
1652 {&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}},
1653 {&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}},
1654 {&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}},
1655 {&hf_sbas_l1_mt2_fc_4, {"Fast Correction Satellite 4 (FC_4)", "sbas_l1.mt2.fc_4", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1656 {&hf_sbas_l1_mt2_fc_5, {"Fast Correction Satellite 5 (FC_5)", "sbas_l1.mt2.fc_5", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1657 {&hf_sbas_l1_mt2_fc_6, {"Fast Correction Satellite 6 (FC_6)", "sbas_l1.mt2.fc_6", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1658 {&hf_sbas_l1_mt2_fc_7, {"Fast Correction Satellite 7 (FC_7)", "sbas_l1.mt2.fc_7", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1659 {&hf_sbas_l1_mt2_fc_8, {"Fast Correction Satellite 8 (FC_8)", "sbas_l1.mt2.fc_8", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1660 {&hf_sbas_l1_mt2_fc_9, {"Fast Correction Satellite 9 (FC_9)", "sbas_l1.mt2.fc_9", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1661 {&hf_sbas_l1_mt2_fc_10, {"Fast Correction Satellite 10 (FC_10)", "sbas_l1.mt2.fc_10", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1662 {&hf_sbas_l1_mt2_fc_11, {"Fast Correction Satellite 11 (FC_11)", "sbas_l1.mt2.fc_11", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1663 {&hf_sbas_l1_mt2_fc_12, {"Fast Correction Satellite 12 (FC_12)", "sbas_l1.mt2.fc_12", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1664 {&hf_sbas_l1_mt2_fc_13, {"Fast Correction Satellite 13 (FC_13)", "sbas_l1.mt2.fc_13", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1665 {&hf_sbas_l1_mt2_udrei_1, {"UDREI_1", "sbas_l1.mt2.udrei_1", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1666 {&hf_sbas_l1_mt2_udrei_2, {"UDREI_2", "sbas_l1.mt2.udrei_2", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1667 {&hf_sbas_l1_mt2_udrei_3, {"UDREI_3", "sbas_l1.mt2.udrei_3", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1668 {&hf_sbas_l1_mt2_udrei_4, {"UDREI_4", "sbas_l1.mt2.udrei_4", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1669 {&hf_sbas_l1_mt2_udrei_5, {"UDREI_5", "sbas_l1.mt2.udrei_5", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1670 {&hf_sbas_l1_mt2_udrei_6, {"UDREI_6", "sbas_l1.mt2.udrei_6", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1671 {&hf_sbas_l1_mt2_udrei_7, {"UDREI_7", "sbas_l1.mt2.udrei_7", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1672 {&hf_sbas_l1_mt2_udrei_8, {"UDREI_8", "sbas_l1.mt2.udrei_8", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1673 {&hf_sbas_l1_mt2_udrei_9, {"UDREI_9", "sbas_l1.mt2.udrei_9", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1674 {&hf_sbas_l1_mt2_udrei_10, {"UDREI_10", "sbas_l1.mt2.udrei_10", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1675 {&hf_sbas_l1_mt2_udrei_11, {"UDREI_11", "sbas_l1.mt2.udrei_11", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1676 {&hf_sbas_l1_mt2_udrei_12, {"UDREI_12", "sbas_l1.mt2.udrei_12", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1677 {&hf_sbas_l1_mt2_udrei_13, {"UDREI_13", "sbas_l1.mt2.udrei_13", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1679 // MT3
1680 {&hf_sbas_l1_mt3, {"MT3", "sbas_l1.mt3", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
1681 {&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}},
1682 {&hf_sbas_l1_mt3_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt3.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}},
1683 {&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}},
1684 {&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}},
1685 {&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}},
1686 {&hf_sbas_l1_mt3_fc_17, {"Fast Correction Satellite 17 (FC_17)", "sbas_l1.mt3.fc_17", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1687 {&hf_sbas_l1_mt3_fc_18, {"Fast Correction Satellite 18 (FC_18)", "sbas_l1.mt3.fc_18", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1688 {&hf_sbas_l1_mt3_fc_19, {"Fast Correction Satellite 19 (FC_19)", "sbas_l1.mt3.fc_19", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1689 {&hf_sbas_l1_mt3_fc_20, {"Fast Correction Satellite 20 (FC_20)", "sbas_l1.mt3.fc_20", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1690 {&hf_sbas_l1_mt3_fc_21, {"Fast Correction Satellite 21 (FC_21)", "sbas_l1.mt3.fc_21", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1691 {&hf_sbas_l1_mt3_fc_22, {"Fast Correction Satellite 22 (FC_22)", "sbas_l1.mt3.fc_22", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1692 {&hf_sbas_l1_mt3_fc_23, {"Fast Correction Satellite 23 (FC_23)", "sbas_l1.mt3.fc_23", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1693 {&hf_sbas_l1_mt3_fc_24, {"Fast Correction Satellite 24 (FC_24)", "sbas_l1.mt3.fc_24", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1694 {&hf_sbas_l1_mt3_fc_25, {"Fast Correction Satellite 25 (FC_25)", "sbas_l1.mt3.fc_25", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1695 {&hf_sbas_l1_mt3_fc_26, {"Fast Correction Satellite 26 (FC_26)", "sbas_l1.mt3.fc_26", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1696 {&hf_sbas_l1_mt3_udrei_14, {"UDREI_14", "sbas_l1.mt3.udrei_14", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1697 {&hf_sbas_l1_mt3_udrei_15, {"UDREI_15", "sbas_l1.mt3.udrei_15", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1698 {&hf_sbas_l1_mt3_udrei_16, {"UDREI_16", "sbas_l1.mt3.udrei_16", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1699 {&hf_sbas_l1_mt3_udrei_17, {"UDREI_17", "sbas_l1.mt3.udrei_17", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1700 {&hf_sbas_l1_mt3_udrei_18, {"UDREI_18", "sbas_l1.mt3.udrei_18", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1701 {&hf_sbas_l1_mt3_udrei_19, {"UDREI_19", "sbas_l1.mt3.udrei_19", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1702 {&hf_sbas_l1_mt3_udrei_20, {"UDREI_20", "sbas_l1.mt3.udrei_20", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1703 {&hf_sbas_l1_mt3_udrei_21, {"UDREI_21", "sbas_l1.mt3.udrei_21", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1704 {&hf_sbas_l1_mt3_udrei_22, {"UDREI_22", "sbas_l1.mt3.udrei_22", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1705 {&hf_sbas_l1_mt3_udrei_23, {"UDREI_23", "sbas_l1.mt3.udrei_23", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1706 {&hf_sbas_l1_mt3_udrei_24, {"UDREI_24", "sbas_l1.mt3.udrei_24", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1707 {&hf_sbas_l1_mt3_udrei_25, {"UDREI_25", "sbas_l1.mt3.udrei_25", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1708 {&hf_sbas_l1_mt3_udrei_26, {"UDREI_26", "sbas_l1.mt3.udrei_26", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1710 // MT4
1711 {&hf_sbas_l1_mt4, {"MT4", "sbas_l1.mt4", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
1712 {&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}},
1713 {&hf_sbas_l1_mt4_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt4.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}},
1714 {&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}},
1715 {&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}},
1716 {&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}},
1717 {&hf_sbas_l1_mt4_fc_30, {"Fast Correction Satellite 30 (FC_30)", "sbas_l1.mt4.fc_30", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1718 {&hf_sbas_l1_mt4_fc_31, {"Fast Correction Satellite 31 (FC_31)", "sbas_l1.mt4.fc_31", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1719 {&hf_sbas_l1_mt4_fc_32, {"Fast Correction Satellite 32 (FC_32)", "sbas_l1.mt4.fc_32", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1720 {&hf_sbas_l1_mt4_fc_33, {"Fast Correction Satellite 33 (FC_33)", "sbas_l1.mt4.fc_33", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1721 {&hf_sbas_l1_mt4_fc_34, {"Fast Correction Satellite 34 (FC_34)", "sbas_l1.mt4.fc_34", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1722 {&hf_sbas_l1_mt4_fc_35, {"Fast Correction Satellite 35 (FC_35)", "sbas_l1.mt4.fc_35", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1723 {&hf_sbas_l1_mt4_fc_36, {"Fast Correction Satellite 36 (FC_36)", "sbas_l1.mt4.fc_36", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1724 {&hf_sbas_l1_mt4_fc_37, {"Fast Correction Satellite 37 (FC_37)", "sbas_l1.mt4.fc_37", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1725 {&hf_sbas_l1_mt4_fc_38, {"Fast Correction Satellite 38 (FC_38)", "sbas_l1.mt4.fc_38", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1726 {&hf_sbas_l1_mt4_fc_39, {"Fast Correction Satellite 39 (FC_39)", "sbas_l1.mt4.fc_39", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1727 {&hf_sbas_l1_mt4_udrei_27, {"UDREI_27", "sbas_l1.mt4.udrei_27", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1728 {&hf_sbas_l1_mt4_udrei_28, {"UDREI_28", "sbas_l1.mt4.udrei_28", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1729 {&hf_sbas_l1_mt4_udrei_29, {"UDREI_29", "sbas_l1.mt4.udrei_29", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1730 {&hf_sbas_l1_mt4_udrei_30, {"UDREI_30", "sbas_l1.mt4.udrei_30", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1731 {&hf_sbas_l1_mt4_udrei_31, {"UDREI_31", "sbas_l1.mt4.udrei_31", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1732 {&hf_sbas_l1_mt4_udrei_32, {"UDREI_32", "sbas_l1.mt4.udrei_32", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1733 {&hf_sbas_l1_mt4_udrei_33, {"UDREI_33", "sbas_l1.mt4.udrei_33", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1734 {&hf_sbas_l1_mt4_udrei_34, {"UDREI_34", "sbas_l1.mt4.udrei_34", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1735 {&hf_sbas_l1_mt4_udrei_35, {"UDREI_35", "sbas_l1.mt4.udrei_35", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1736 {&hf_sbas_l1_mt4_udrei_36, {"UDREI_36", "sbas_l1.mt4.udrei_36", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1737 {&hf_sbas_l1_mt4_udrei_37, {"UDREI_37", "sbas_l1.mt4.udrei_37", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1738 {&hf_sbas_l1_mt4_udrei_38, {"UDREI_38", "sbas_l1.mt4.udrei_38", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1739 {&hf_sbas_l1_mt4_udrei_39, {"UDREI_39", "sbas_l1.mt4.udrei_39", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1741 // MT5
1742 {&hf_sbas_l1_mt5, {"MT5", "sbas_l1.mt5", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
1743 {&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}},
1744 {&hf_sbas_l1_mt5_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt5.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}},
1745 {&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}},
1746 {&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}},
1747 {&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}},
1748 {&hf_sbas_l1_mt5_fc_43, {"Fast Correction Satellite 43 (FC_43)", "sbas_l1.mt5.fc_43", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1749 {&hf_sbas_l1_mt5_fc_44, {"Fast Correction Satellite 44 (FC_44)", "sbas_l1.mt5.fc_44", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1750 {&hf_sbas_l1_mt5_fc_45, {"Fast Correction Satellite 45 (FC_45)", "sbas_l1.mt5.fc_45", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1751 {&hf_sbas_l1_mt5_fc_46, {"Fast Correction Satellite 46 (FC_46)", "sbas_l1.mt5.fc_46", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1752 {&hf_sbas_l1_mt5_fc_47, {"Fast Correction Satellite 47 (FC_47)", "sbas_l1.mt5.fc_47", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1753 {&hf_sbas_l1_mt5_fc_48, {"Fast Correction Satellite 48 (FC_48)", "sbas_l1.mt5.fc_48", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1754 {&hf_sbas_l1_mt5_fc_49, {"Fast Correction Satellite 49 (FC_49)", "sbas_l1.mt5.fc_49", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1755 {&hf_sbas_l1_mt5_fc_50, {"Fast Correction Satellite 50 (FC_50)", "sbas_l1.mt5.fc_50", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1756 {&hf_sbas_l1_mt5_fc_51, {"Fast Correction Satellite 51 (FC_51)", "sbas_l1.mt5.fc_51", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x03ffc000, NULL, HFILL}},
1757 {&hf_sbas_l1_mt5_fc_52, {"Fast Correction Satellite 52 (FC_52)", "sbas_l1.mt5.fc_52", FT_INT32, BASE_CUSTOM, CF_FUNC(&fmt_correction_125m), 0x3ffc0000, NULL, HFILL}},
1758 {&hf_sbas_l1_mt5_udrei_40, {"UDREI_40", "sbas_l1.mt5.udrei_40", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1759 {&hf_sbas_l1_mt5_udrei_41, {"UDREI_41", "sbas_l1.mt5.udrei_41", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1760 {&hf_sbas_l1_mt5_udrei_42, {"UDREI_42", "sbas_l1.mt5.udrei_42", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1761 {&hf_sbas_l1_mt5_udrei_43, {"UDREI_43", "sbas_l1.mt5.udrei_43", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1762 {&hf_sbas_l1_mt5_udrei_44, {"UDREI_44", "sbas_l1.mt5.udrei_44", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1763 {&hf_sbas_l1_mt5_udrei_45, {"UDREI_45", "sbas_l1.mt5.udrei_45", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1764 {&hf_sbas_l1_mt5_udrei_46, {"UDREI_46", "sbas_l1.mt5.udrei_46", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1765 {&hf_sbas_l1_mt5_udrei_47, {"UDREI_47", "sbas_l1.mt5.udrei_47", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1766 {&hf_sbas_l1_mt5_udrei_48, {"UDREI_48", "sbas_l1.mt5.udrei_48", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1767 {&hf_sbas_l1_mt5_udrei_49, {"UDREI_49", "sbas_l1.mt5.udrei_49", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1768 {&hf_sbas_l1_mt5_udrei_50, {"UDREI_50", "sbas_l1.mt5.udrei_50", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1769 {&hf_sbas_l1_mt5_udrei_51, {"UDREI_51", "sbas_l1.mt5.udrei_51", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1770 {&hf_sbas_l1_mt5_udrei_52, {"UDREI_52", "sbas_l1.mt5.udrei_52", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1772 // MT6
1773 {&hf_sbas_l1_mt6, {"MT6", "sbas_l1.mt6", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
1774 {&hf_sbas_l1_mt6_iodf_2, {"Issue of Data - Fast Correction (IODF_2)", "sbas_l1.mt6.iodf_2", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}},
1775 {&hf_sbas_l1_mt6_iodf_3, {"Issue of Data - Fast Correction (IODF_3)", "sbas_l1.mt6.iodf_3", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}},
1776 {&hf_sbas_l1_mt6_iodf_4, {"Issue of Data - Fast Correction (IODF_4)", "sbas_l1.mt6.iodf_4", FT_UINT8, BASE_DEC, NULL, 0x30, NULL, HFILL}},
1777 {&hf_sbas_l1_mt6_iodf_5, {"Issue of Data - Fast Correction (IODF_5)", "sbas_l1.mt6.iodf_5", FT_UINT8, BASE_DEC, NULL, 0x0c, NULL, HFILL}},
1778 {&hf_sbas_l1_mt6_udrei_1, {"UDREI_1", "sbas_l1.mt6.udrei_1", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1779 {&hf_sbas_l1_mt6_udrei_2, {"UDREI_2", "sbas_l1.mt6.udrei_2", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1780 {&hf_sbas_l1_mt6_udrei_3, {"UDREI_3", "sbas_l1.mt6.udrei_3", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1781 {&hf_sbas_l1_mt6_udrei_4, {"UDREI_4", "sbas_l1.mt6.udrei_4", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1782 {&hf_sbas_l1_mt6_udrei_5, {"UDREI_5", "sbas_l1.mt6.udrei_5", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1783 {&hf_sbas_l1_mt6_udrei_6, {"UDREI_6", "sbas_l1.mt6.udrei_6", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1784 {&hf_sbas_l1_mt6_udrei_7, {"UDREI_7", "sbas_l1.mt6.udrei_7", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1785 {&hf_sbas_l1_mt6_udrei_8, {"UDREI_8", "sbas_l1.mt6.udrei_8", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1786 {&hf_sbas_l1_mt6_udrei_9, {"UDREI_9", "sbas_l1.mt6.udrei_9", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1787 {&hf_sbas_l1_mt6_udrei_10, {"UDREI_10", "sbas_l1.mt6.udrei_10", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1788 {&hf_sbas_l1_mt6_udrei_11, {"UDREI_11", "sbas_l1.mt6.udrei_11", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1789 {&hf_sbas_l1_mt6_udrei_12, {"UDREI_12", "sbas_l1.mt6.udrei_12", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1790 {&hf_sbas_l1_mt6_udrei_13, {"UDREI_13", "sbas_l1.mt6.udrei_13", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1791 {&hf_sbas_l1_mt6_udrei_14, {"UDREI_14", "sbas_l1.mt6.udrei_14", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1792 {&hf_sbas_l1_mt6_udrei_15, {"UDREI_15", "sbas_l1.mt6.udrei_15", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1793 {&hf_sbas_l1_mt6_udrei_16, {"UDREI_16", "sbas_l1.mt6.udrei_16", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1794 {&hf_sbas_l1_mt6_udrei_17, {"UDREI_17", "sbas_l1.mt6.udrei_17", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1795 {&hf_sbas_l1_mt6_udrei_18, {"UDREI_18", "sbas_l1.mt6.udrei_18", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1796 {&hf_sbas_l1_mt6_udrei_19, {"UDREI_19", "sbas_l1.mt6.udrei_19", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1797 {&hf_sbas_l1_mt6_udrei_20, {"UDREI_20", "sbas_l1.mt6.udrei_20", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1798 {&hf_sbas_l1_mt6_udrei_21, {"UDREI_21", "sbas_l1.mt6.udrei_21", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1799 {&hf_sbas_l1_mt6_udrei_22, {"UDREI_22", "sbas_l1.mt6.udrei_22", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1800 {&hf_sbas_l1_mt6_udrei_23, {"UDREI_23", "sbas_l1.mt6.udrei_23", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1801 {&hf_sbas_l1_mt6_udrei_24, {"UDREI_24", "sbas_l1.mt6.udrei_24", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1802 {&hf_sbas_l1_mt6_udrei_25, {"UDREI_25", "sbas_l1.mt6.udrei_25", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1803 {&hf_sbas_l1_mt6_udrei_26, {"UDREI_26", "sbas_l1.mt6.udrei_26", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1804 {&hf_sbas_l1_mt6_udrei_27, {"UDREI_27", "sbas_l1.mt6.udrei_27", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1805 {&hf_sbas_l1_mt6_udrei_28, {"UDREI_28", "sbas_l1.mt6.udrei_28", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1806 {&hf_sbas_l1_mt6_udrei_29, {"UDREI_29", "sbas_l1.mt6.udrei_29", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1807 {&hf_sbas_l1_mt6_udrei_30, {"UDREI_30", "sbas_l1.mt6.udrei_30", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1808 {&hf_sbas_l1_mt6_udrei_31, {"UDREI_31", "sbas_l1.mt6.udrei_31", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1809 {&hf_sbas_l1_mt6_udrei_32, {"UDREI_32", "sbas_l1.mt6.udrei_32", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1810 {&hf_sbas_l1_mt6_udrei_33, {"UDREI_33", "sbas_l1.mt6.udrei_33", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1811 {&hf_sbas_l1_mt6_udrei_34, {"UDREI_34", "sbas_l1.mt6.udrei_34", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1812 {&hf_sbas_l1_mt6_udrei_35, {"UDREI_35", "sbas_l1.mt6.udrei_35", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1813 {&hf_sbas_l1_mt6_udrei_36, {"UDREI_36", "sbas_l1.mt6.udrei_36", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1814 {&hf_sbas_l1_mt6_udrei_37, {"UDREI_37", "sbas_l1.mt6.udrei_37", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1815 {&hf_sbas_l1_mt6_udrei_38, {"UDREI_38", "sbas_l1.mt6.udrei_38", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1816 {&hf_sbas_l1_mt6_udrei_39, {"UDREI_39", "sbas_l1.mt6.udrei_39", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1817 {&hf_sbas_l1_mt6_udrei_40, {"UDREI_40", "sbas_l1.mt6.udrei_40", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1818 {&hf_sbas_l1_mt6_udrei_41, {"UDREI_41", "sbas_l1.mt6.udrei_41", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1819 {&hf_sbas_l1_mt6_udrei_42, {"UDREI_42", "sbas_l1.mt6.udrei_42", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1820 {&hf_sbas_l1_mt6_udrei_43, {"UDREI_43", "sbas_l1.mt6.udrei_43", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1821 {&hf_sbas_l1_mt6_udrei_44, {"UDREI_44", "sbas_l1.mt6.udrei_44", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1822 {&hf_sbas_l1_mt6_udrei_45, {"UDREI_45", "sbas_l1.mt6.udrei_45", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1823 {&hf_sbas_l1_mt6_udrei_46, {"UDREI_46", "sbas_l1.mt6.udrei_46", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1824 {&hf_sbas_l1_mt6_udrei_47, {"UDREI_47", "sbas_l1.mt6.udrei_47", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1825 {&hf_sbas_l1_mt6_udrei_48, {"UDREI_48", "sbas_l1.mt6.udrei_48", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1826 {&hf_sbas_l1_mt6_udrei_49, {"UDREI_49", "sbas_l1.mt6.udrei_49", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1827 {&hf_sbas_l1_mt6_udrei_50, {"UDREI_50", "sbas_l1.mt6.udrei_50", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
1828 {&hf_sbas_l1_mt6_udrei_51, {"UDREI_51", "sbas_l1.mt6.udrei_51", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
1830 // MT7
1831 {&hf_sbas_l1_mt7, {"MT7", "sbas_l1.mt7", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
1832 {&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}},
1833 {&hf_sbas_l1_mt7_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt7.iodp", FT_UINT8, BASE_DEC, NULL, 0x30, NULL, HFILL}},
1834 {&hf_sbas_l1_mt7_spare, {"Spare", "sbas_l1.mt7.spare", FT_UINT8, BASE_DEC, NULL, 0x0c, NULL, HFILL}},
1835 {&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}},
1836 {&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}},
1837 {&hf_sbas_l1_mt7_ai_3, {"Degradation Factor Indicator ai_3", "sbas_l1.mt7.ai_3", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1838 {&hf_sbas_l1_mt7_ai_4, {"Degradation Factor Indicator ai_4", "sbas_l1.mt7.ai_4", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1839 {&hf_sbas_l1_mt7_ai_5, {"Degradation Factor Indicator ai_5", "sbas_l1.mt7.ai_5", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1840 {&hf_sbas_l1_mt7_ai_6, {"Degradation Factor Indicator ai_6", "sbas_l1.mt7.ai_6", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1841 {&hf_sbas_l1_mt7_ai_7, {"Degradation Factor Indicator ai_7", "sbas_l1.mt7.ai_7", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1842 {&hf_sbas_l1_mt7_ai_8, {"Degradation Factor Indicator ai_8", "sbas_l1.mt7.ai_8", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1843 {&hf_sbas_l1_mt7_ai_9, {"Degradation Factor Indicator ai_9", "sbas_l1.mt7.ai_9", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1844 {&hf_sbas_l1_mt7_ai_10, {"Degradation Factor Indicator ai_10", "sbas_l1.mt7.ai_10", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1845 {&hf_sbas_l1_mt7_ai_11, {"Degradation Factor Indicator ai_11", "sbas_l1.mt7.ai_11", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1846 {&hf_sbas_l1_mt7_ai_12, {"Degradation Factor Indicator ai_12", "sbas_l1.mt7.ai_12", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1847 {&hf_sbas_l1_mt7_ai_13, {"Degradation Factor Indicator ai_13", "sbas_l1.mt7.ai_13", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1848 {&hf_sbas_l1_mt7_ai_14, {"Degradation Factor Indicator ai_14", "sbas_l1.mt7.ai_14", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1849 {&hf_sbas_l1_mt7_ai_15, {"Degradation Factor Indicator ai_15", "sbas_l1.mt7.ai_15", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1850 {&hf_sbas_l1_mt7_ai_16, {"Degradation Factor Indicator ai_16", "sbas_l1.mt7.ai_16", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1851 {&hf_sbas_l1_mt7_ai_17, {"Degradation Factor Indicator ai_17", "sbas_l1.mt7.ai_17", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1852 {&hf_sbas_l1_mt7_ai_18, {"Degradation Factor Indicator ai_18", "sbas_l1.mt7.ai_18", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1853 {&hf_sbas_l1_mt7_ai_19, {"Degradation Factor Indicator ai_19", "sbas_l1.mt7.ai_19", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1854 {&hf_sbas_l1_mt7_ai_20, {"Degradation Factor Indicator ai_20", "sbas_l1.mt7.ai_20", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1855 {&hf_sbas_l1_mt7_ai_21, {"Degradation Factor Indicator ai_21", "sbas_l1.mt7.ai_21", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1856 {&hf_sbas_l1_mt7_ai_22, {"Degradation Factor Indicator ai_22", "sbas_l1.mt7.ai_22", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1857 {&hf_sbas_l1_mt7_ai_23, {"Degradation Factor Indicator ai_23", "sbas_l1.mt7.ai_23", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1858 {&hf_sbas_l1_mt7_ai_24, {"Degradation Factor Indicator ai_24", "sbas_l1.mt7.ai_24", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1859 {&hf_sbas_l1_mt7_ai_25, {"Degradation Factor Indicator ai_25", "sbas_l1.mt7.ai_25", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1860 {&hf_sbas_l1_mt7_ai_26, {"Degradation Factor Indicator ai_26", "sbas_l1.mt7.ai_26", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1861 {&hf_sbas_l1_mt7_ai_27, {"Degradation Factor Indicator ai_27", "sbas_l1.mt7.ai_27", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1862 {&hf_sbas_l1_mt7_ai_28, {"Degradation Factor Indicator ai_28", "sbas_l1.mt7.ai_28", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1863 {&hf_sbas_l1_mt7_ai_29, {"Degradation Factor Indicator ai_29", "sbas_l1.mt7.ai_29", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1864 {&hf_sbas_l1_mt7_ai_30, {"Degradation Factor Indicator ai_30", "sbas_l1.mt7.ai_30", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1865 {&hf_sbas_l1_mt7_ai_31, {"Degradation Factor Indicator ai_31", "sbas_l1.mt7.ai_31", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1866 {&hf_sbas_l1_mt7_ai_32, {"Degradation Factor Indicator ai_32", "sbas_l1.mt7.ai_32", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1867 {&hf_sbas_l1_mt7_ai_33, {"Degradation Factor Indicator ai_33", "sbas_l1.mt7.ai_33", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1868 {&hf_sbas_l1_mt7_ai_34, {"Degradation Factor Indicator ai_34", "sbas_l1.mt7.ai_34", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1869 {&hf_sbas_l1_mt7_ai_35, {"Degradation Factor Indicator ai_35", "sbas_l1.mt7.ai_35", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1870 {&hf_sbas_l1_mt7_ai_36, {"Degradation Factor Indicator ai_36", "sbas_l1.mt7.ai_36", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1871 {&hf_sbas_l1_mt7_ai_37, {"Degradation Factor Indicator ai_37", "sbas_l1.mt7.ai_37", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1872 {&hf_sbas_l1_mt7_ai_38, {"Degradation Factor Indicator ai_38", "sbas_l1.mt7.ai_38", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1873 {&hf_sbas_l1_mt7_ai_39, {"Degradation Factor Indicator ai_39", "sbas_l1.mt7.ai_39", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1874 {&hf_sbas_l1_mt7_ai_40, {"Degradation Factor Indicator ai_40", "sbas_l1.mt7.ai_40", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1875 {&hf_sbas_l1_mt7_ai_41, {"Degradation Factor Indicator ai_41", "sbas_l1.mt7.ai_41", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1876 {&hf_sbas_l1_mt7_ai_42, {"Degradation Factor Indicator ai_42", "sbas_l1.mt7.ai_42", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1877 {&hf_sbas_l1_mt7_ai_43, {"Degradation Factor Indicator ai_43", "sbas_l1.mt7.ai_43", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1878 {&hf_sbas_l1_mt7_ai_44, {"Degradation Factor Indicator ai_44", "sbas_l1.mt7.ai_44", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1879 {&hf_sbas_l1_mt7_ai_45, {"Degradation Factor Indicator ai_45", "sbas_l1.mt7.ai_45", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1880 {&hf_sbas_l1_mt7_ai_46, {"Degradation Factor Indicator ai_46", "sbas_l1.mt7.ai_46", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1881 {&hf_sbas_l1_mt7_ai_47, {"Degradation Factor Indicator ai_47", "sbas_l1.mt7.ai_47", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1882 {&hf_sbas_l1_mt7_ai_48, {"Degradation Factor Indicator ai_48", "sbas_l1.mt7.ai_48", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x3c00, NULL, HFILL}},
1883 {&hf_sbas_l1_mt7_ai_49, {"Degradation Factor Indicator ai_49", "sbas_l1.mt7.ai_49", FT_UINT16, BASE_DEC, VALS(DEGRADATION_FACTOR_INDICATOR), 0x03c0, NULL, HFILL}},
1884 {&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}},
1885 {&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}},
1887 // MT17
1888 {&hf_sbas_l1_mt17, {"MT17", "sbas_l1.mt17", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
1889 {&hf_sbas_l1_mt17_reserved, {"Reserved", "sbas_l1.mt17.reserved", FT_UINT8, BASE_HEX, NULL, 0xc0, NULL, HFILL}},
1890 {&hf_sbas_l1_mt17_prn, {"PRN", "sbas_l1.mt17.prn", FT_UINT16, BASE_DEC, NULL, 0x3fc0, NULL, HFILL}},
1891 {&hf_sbas_l1_mt17_health_and_status, {"Health and Status", "sbas_l1.mt17.health_and_status", FT_UINT16, BASE_HEX, NULL, 0x3fc0, NULL, HFILL}},
1892 {&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}},
1893 {&hf_sbas_l1_mt17_health_and_status_spare, {"Spare", "sbas_l1.mt17.health_and_status.spare", FT_UINT16, BASE_HEX, NULL, 0x0200, NULL, HFILL}},
1894 {&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}},
1895 {&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}},
1896 {&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}},
1897 {&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}},
1898 {&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}},
1899 {&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}},
1900 {&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}},
1901 {&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}},
1902 {&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}},
1903 {&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}},
1905 // MT18
1906 {&hf_sbas_l1_mt18, {"MT18", "sbas_l1.mt18", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
1907 {&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}},
1908 {&hf_sbas_l1_mt18_igp_band_id, {"IGP Band ID", "sbas_l1.mt18.igp_band_id", FT_UINT16, BASE_DEC, NULL, 0x003c, NULL, HFILL}},
1909 {&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}},
1910 {&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}},
1911 {&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}},
1912 {&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}},
1913 {&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}},
1914 {&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}},
1915 {&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}},
1916 {&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}},
1917 {&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}},
1918 {&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}},
1919 {&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}},
1920 {&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}},
1921 {&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}},
1922 {&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}},
1923 {&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}},
1924 {&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}},
1925 {&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}},
1926 {&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}},
1927 {&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}},
1928 {&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}},
1929 {&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}},
1930 {&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}},
1931 {&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}},
1932 {&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}},
1933 {&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}},
1934 {&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}},
1935 {&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}},
1936 {&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}},
1937 {&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}},
1938 {&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}},
1939 {&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}},
1940 {&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}},
1941 {&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}},
1942 {&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}},
1943 {&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}},
1944 {&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}},
1945 {&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}},
1946 {&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}},
1947 {&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}},
1948 {&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}},
1949 {&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}},
1950 {&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}},
1951 {&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}},
1952 {&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}},
1953 {&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}},
1954 {&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}},
1955 {&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}},
1956 {&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}},
1957 {&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}},
1958 {&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}},
1959 {&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}},
1960 {&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}},
1961 {&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}},
1962 {&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}},
1963 {&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}},
1964 {&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}},
1965 {&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}},
1966 {&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}},
1967 {&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}},
1968 {&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}},
1969 {&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}},
1970 {&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}},
1971 {&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}},
1972 {&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}},
1973 {&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}},
1974 {&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}},
1975 {&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}},
1976 {&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}},
1977 {&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}},
1978 {&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}},
1979 {&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}},
1980 {&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}},
1981 {&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}},
1982 {&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}},
1983 {&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}},
1984 {&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}},
1985 {&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}},
1986 {&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}},
1987 {&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}},
1988 {&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}},
1989 {&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}},
1990 {&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}},
1991 {&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}},
1992 {&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}},
1993 {&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}},
1994 {&hf_sbas_l1_mt18_spare, {"Spare", "sbas_l1.mt18.spare", FT_UINT8, BASE_HEX, NULL, 0x40, NULL, HFILL}},
1996 // MT24
1997 {&hf_sbas_l1_mt24, {"MT24", "sbas_l1.mt24", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
1998 {&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}},
1999 {&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}},
2000 {&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}},
2001 {&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}},
2002 {&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}},
2003 {&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}},
2004 {&hf_sbas_l1_mt24_udrei_i1, {"UDREI_i1", "sbas_l1.mt24.udrei_i1", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2005 {&hf_sbas_l1_mt24_udrei_i2, {"UDREI_i2", "sbas_l1.mt24.udrei_i2", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2006 {&hf_sbas_l1_mt24_udrei_i3, {"UDREI_i3", "sbas_l1.mt24.udrei_i3", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2007 {&hf_sbas_l1_mt24_udrei_i4, {"UDREI_i4", "sbas_l1.mt24.udrei_i4", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2008 {&hf_sbas_l1_mt24_udrei_i5, {"UDREI_i5", "sbas_l1.mt24.udrei_i5", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2009 {&hf_sbas_l1_mt24_udrei_i6, {"UDREI_i6", "sbas_l1.mt24.udrei_i6", FT_UINT16, BASE_DEC, VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2010 {&hf_sbas_l1_mt24_iodp, {"Issue of Data - PRN (IODP)", "sbas_l1.mt24.iodp", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL}},
2011 {&hf_sbas_l1_mt24_fc_type, {"Fast Correction Type ID", "sbas_l1.mt24.fc_type", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}},
2012 {&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}},
2013 {&hf_sbas_l1_mt24_spare, {"Spare", "sbas_l1.mt24.spare", FT_UINT8, BASE_DEC, NULL, 0x0f, NULL, HFILL}},
2014 {&hf_sbas_l1_mt24_velocity_code, {"Velocity Code", "sbas_l1.mt24.velocity_code", FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL}},
2015 {&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}},
2016 {&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}},
2017 {&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}},
2018 {&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}},
2019 {&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}},
2020 {&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}},
2021 {&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}},
2022 {&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}},
2023 {&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}},
2024 {&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}},
2025 {&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}},
2026 {&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}},
2027 {&hf_sbas_l1_mt24_v0_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt24.v0.iodp", FT_UINT16, BASE_DEC, NULL, 0x0180, NULL, HFILL}},
2028 {&hf_sbas_l1_mt24_v0_spare, {"Spare", "sbas_l1.mt24.v0.spare", FT_UINT8, BASE_DEC, NULL, 0x40, NULL, HFILL}},
2029 {&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}},
2030 {&hf_sbas_l1_mt24_v1_iod, {"Issue of Data (IOD_i)", "sbas_l1.mt24.v1.iod", FT_UINT16, BASE_DEC, NULL, 0x01fe, NULL, HFILL}},
2031 {&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}},
2032 {&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}},
2033 {&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}},
2034 {&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}},
2035 {&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}},
2036 {&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}},
2037 {&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}},
2038 {&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}},
2039 {&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}},
2040 {&hf_sbas_l1_mt24_v1_iodp, {"Issue of Data PRN (IODP)", "sbas_l1.mt24.v1.iodp", FT_UINT8, BASE_DEC, NULL, 0xc0, NULL, HFILL}},
2042 // MT25
2043 {&hf_sbas_l1_mt25, {"MT25", "sbas_l1.mt25", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
2044 {&hf_sbas_l1_mt25_h1_velocity_code, {"Velocity Code", "sbas_l1.mt25.h1.velocity_code", FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL}},
2045 {&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}},
2046 {&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}},
2047 {&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}},
2048 {&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}},
2049 {&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}},
2050 {&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}},
2051 {&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}},
2052 {&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}},
2053 {&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}},
2054 {&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}},
2055 {&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}},
2056 {&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}},
2057 {&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}},
2058 {&hf_sbas_l1_mt25_h1_v0_spare, {"Spare", "sbas_l1.mt25.h1.v0.spare", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
2059 {&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}},
2060 {&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}},
2061 {&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}},
2062 {&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}},
2063 {&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}},
2064 {&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}},
2065 {&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}},
2066 {&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}},
2067 {&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}},
2068 {&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}},
2069 {&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}},
2070 {&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}},
2071 {&hf_sbas_l1_mt25_h2_velocity_code, {"Velocity Code", "sbas_l1.mt25.h2.velocity_code", FT_UINT8, BASE_DEC, NULL, 0x80, NULL, HFILL}},
2072 {&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}},
2073 {&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}},
2074 {&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}},
2075 {&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}},
2076 {&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}},
2077 {&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}},
2078 {&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}},
2079 {&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}},
2080 {&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}},
2081 {&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}},
2082 {&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}},
2083 {&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}},
2084 {&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}},
2085 {&hf_sbas_l1_mt25_h2_v0_spare, {"Spare", "sbas_l1.mt25.h2.v0.spare", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
2086 {&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}},
2087 {&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}},
2088 {&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}},
2089 {&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}},
2090 {&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}},
2091 {&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}},
2092 {&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}},
2093 {&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}},
2094 {&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}},
2095 {&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}},
2096 {&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}},
2097 {&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}},
2099 // MT26
2100 {&hf_sbas_l1_mt26, {"MT26", "sbas_l1.mt26", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL}},
2101 {&hf_sbas_l1_mt26_igp_band_id, {"IGP Band Identifier", "sbas_l1.mt26.igp_band_id", FT_UINT16, BASE_DEC, NULL, 0x03c0, NULL, HFILL}},
2102 {&hf_sbas_l1_mt26_igp_block_id, {"IGP Block Identifier", "sbas_l1.mt26.igp_block_id", FT_UINT16, BASE_DEC, NULL, 0x3c, NULL, HFILL}},
2103 {&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}},
2104 {&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}},
2105 {&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}},
2106 {&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}},
2107 {&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}},
2108 {&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}},
2109 {&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}},
2110 {&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}},
2111 {&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}},
2112 {&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}},
2113 {&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}},
2114 {&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}},
2115 {&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}},
2116 {&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}},
2117 {&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}},
2118 {&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}},
2119 {&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}},
2120 {&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}},
2121 {&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}},
2122 {&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}},
2123 {&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}},
2124 {&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}},
2125 {&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}},
2126 {&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}},
2127 {&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}},
2128 {&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}},
2129 {&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}},
2130 {&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}},
2131 {&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}},
2132 {&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}},
2133 {&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}},
2134 {&hf_sbas_l1_mt26_spare, {"Spare", "sbas_l1.mt26.spare", FT_UINT16, BASE_DEC, NULL, 0x1fc0, NULL, HFILL}},
2136 // MT63
2137 {&hf_sbas_l1_mt63, {"MT63", "sbas_l1.mt63", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL}},
2138 {&hf_sbas_l1_mt63_spare_1, {"Spare 1", "sbas_l1.mt63.spare_1", FT_UINT8, BASE_HEX, NULL, 0x03, NULL, HFILL}},
2139 {&hf_sbas_l1_mt63_spare_2, {"Spare 2", "sbas_l1.mt63.spare_2", FT_BYTES, SEP_SPACE, NULL, 0x00, NULL, HFILL}},
2140 {&hf_sbas_l1_mt63_spare_3, {"Spare 3", "sbas_l1.mt63.spare_3", FT_UINT8, BASE_HEX, NULL, 0xc0, NULL, HFILL}},
2143 expert_module_t *expert_sbas_l1;
2145 static ei_register_info ei[] = {
2146 {&ei_sbas_l1_preamble, {"sbas_l1.illegal_preamble", PI_PROTOCOL, PI_WARN, "Illegal preamble", EXPFILL}},
2147 {&ei_sbas_l1_mt0, {"sbas_l1.mt0", PI_PROTOCOL, PI_WARN, "MT is 0", EXPFILL}},
2148 {&ei_sbas_l1_crc, {"sbas_l1.crc", PI_CHECKSUM, PI_WARN, "CRC", EXPFILL}},
2149 {&ei_sbas_l1_mt26_igp_band_id, {"sbas_l1.mt26.illegal_igp_band_id", PI_PROTOCOL, PI_WARN, "Illegal IGP Band Identifier", EXPFILL}},
2150 {&ei_sbas_l1_mt26_igp_block_id, {"sbas_l1.mt26.illegal_igp_block_id", PI_PROTOCOL, PI_WARN, "Illegal IGP Block Identifier", EXPFILL}},
2153 static int *ett[] = {
2154 &ett_sbas_l1,
2155 &ett_sbas_l1_mt0,
2156 &ett_sbas_l1_mt1,
2157 &ett_sbas_l1_mt2,
2158 &ett_sbas_l1_mt3,
2159 &ett_sbas_l1_mt4,
2160 &ett_sbas_l1_mt5,
2161 &ett_sbas_l1_mt6,
2162 &ett_sbas_l1_mt7,
2163 &ett_sbas_l1_mt17,
2164 &ett_sbas_l1_mt17_prn_data[0],
2165 &ett_sbas_l1_mt17_prn_data[1],
2166 &ett_sbas_l1_mt17_prn_data[2],
2167 &ett_sbas_l1_mt17_health_and_status,
2168 &ett_sbas_l1_mt18,
2169 &ett_sbas_l1_mt24,
2170 &ett_sbas_l1_mt25,
2171 &ett_sbas_l1_mt26,
2172 &ett_sbas_l1_mt63,
2175 proto_sbas_l1 = proto_register_protocol("SBAS L1 Navigation Message", "SBAS L1", "sbas_l1");
2177 proto_register_field_array(proto_sbas_l1, hf, array_length(hf));
2178 proto_register_subtree_array(ett, array_length(ett));
2180 expert_sbas_l1 = expert_register_protocol(proto_sbas_l1);
2181 expert_register_field_array(expert_sbas_l1, ei, array_length(ei));
2183 register_dissector("sbas_l1", dissect_sbas_l1, proto_sbas_l1);
2185 sbas_l1_mt_dissector_table = register_dissector_table("sbas_l1.mt",
2186 "SBAS L1 MT", proto_sbas_l1, FT_UINT8, BASE_DEC);
2190 void proto_reg_handoff_sbas_l1(void) {
2191 dissector_add_uint("ubx.rxm.sfrbx.gnssid", GNSS_ID_SBAS,
2192 create_dissector_handle(dissect_sbas_l1, proto_sbas_l1));
2194 dissector_add_uint("sbas_l1.mt", 0, create_dissector_handle(dissect_sbas_l1_mt0, proto_sbas_l1));
2195 dissector_add_uint("sbas_l1.mt", 1, create_dissector_handle(dissect_sbas_l1_mt1, proto_sbas_l1));
2196 dissector_add_uint("sbas_l1.mt", 2, create_dissector_handle(dissect_sbas_l1_mt2, proto_sbas_l1));
2197 dissector_add_uint("sbas_l1.mt", 3, create_dissector_handle(dissect_sbas_l1_mt3, proto_sbas_l1));
2198 dissector_add_uint("sbas_l1.mt", 4, create_dissector_handle(dissect_sbas_l1_mt4, proto_sbas_l1));
2199 dissector_add_uint("sbas_l1.mt", 5, create_dissector_handle(dissect_sbas_l1_mt5, proto_sbas_l1));
2200 dissector_add_uint("sbas_l1.mt", 6, create_dissector_handle(dissect_sbas_l1_mt6, proto_sbas_l1));
2201 dissector_add_uint("sbas_l1.mt", 7, create_dissector_handle(dissect_sbas_l1_mt7, proto_sbas_l1));
2202 dissector_add_uint("sbas_l1.mt", 17, create_dissector_handle(dissect_sbas_l1_mt17, proto_sbas_l1));
2203 dissector_add_uint("sbas_l1.mt", 18, create_dissector_handle(dissect_sbas_l1_mt18, proto_sbas_l1));
2204 dissector_add_uint("sbas_l1.mt", 24, create_dissector_handle(dissect_sbas_l1_mt24, proto_sbas_l1));
2205 dissector_add_uint("sbas_l1.mt", 25, create_dissector_handle(dissect_sbas_l1_mt25, proto_sbas_l1));
2206 dissector_add_uint("sbas_l1.mt", 26, create_dissector_handle(dissect_sbas_l1_mt26, proto_sbas_l1));
2207 dissector_add_uint("sbas_l1.mt", 63, create_dissector_handle(dissect_sbas_l1_mt63, proto_sbas_l1));