Coverage Report

Created: 2025-12-27 06:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-sbas_l1.c
Line
Count
Source
1
/* packet-sbas_l1.c
2
 * SBAS L1 protocol dissection.
3
 *
4
 * By Timo Warns <timo.warns@gmail.com>
5
 * Copyright 2023 Timo Warns
6
 *
7
 * Wireshark - Network traffic analyzer
8
 * By Gerald Combs <gerald@unicom.net>
9
 * Copyright 1998 Gerald Combs
10
 *
11
 * SPDX-License-Identifier: GPL-2.0-or-later
12
 */
13
14
#include "config.h"
15
16
#include <epan/expert.h>
17
#include <epan/packet.h>
18
19
#include <epan/tfs.h>
20
#include <epan/unit_strings.h>
21
22
#include <wsutil/array.h>
23
#include <wsutil/utf8_entities.h>
24
25
#include "packet-ubx.h"
26
#include "packet-sbas_l1.h"
27
#include "packet-ubx-galileo_e1b_inav.h"
28
29
/*
30
 * Dissects navigation messages of the Satellite Based Augmentation System
31
 * (SBAS) sent on L1 frequency as defined by ICAO Annex 10, Vol I, 8th edition.
32
 */
33
34
// SBAS L1 preamble values
35
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Section 3.5.3.2
36
0
#define SBAS_L1_PREAMBLE_1 0x53
37
0
#define SBAS_L1_PREAMBLE_2 0x9a
38
0
#define SBAS_L1_PREAMBLE_3 0xc6
39
40
const char *EMS_L1_SVC_FLAG = "L1";
41
42
// UTC standard identifier
43
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-37
44
static const value_string UTC_STD_ID[] = {
45
    {0,  "UTC as operated by the National Institute of Information and Communication Technology, Tokyo, Japan"},
46
    {1,  "UTC as operated by the U.S. National Institute of Standards and Technology"},
47
    {2,  "UTC as operated by the U.S. Naval Observatory"},
48
    {3,  "UTC as operated by the International Bureau of Weights and Measures"},
49
    {4,  "Reserved for UTC as operated by a European laboratory"},
50
    {5,  "UTC as operated by the National Time Service Center, Chinese Academy of Sciences"},
51
    {6,  "Reserved"},
52
    {7,  "UTC not provided"},
53
    {0, NULL}
54
};
55
56
// User Range Accuracy mapping
57
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-64
58
static const value_string URA[] = {
59
    {0,  "2 m"},
60
    {1,  "2.8 m"},
61
    {2,  "4 m"},
62
    {3,  "5.7 m"},
63
    {4,  "8 m"},
64
    {5,  "11.3 m"},
65
    {6,  "16 m"},
66
    {7,  "32 m"},
67
    {8,  "64 m"},
68
    {9,  "128 m"},
69
    {10, "256 m"},
70
    {11, "512 m"},
71
    {12, "1024 m"},
72
    {13, "2048 m"},
73
    {14, "4096 m"},
74
    {15, "Do Not Use"},
75
    {0, NULL}
76
};
77
78
// SBAS service provider identifier mapping
79
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-65
80
// Mapping redacted to 4-bit SPIDs as L1 MT17 SPID field has 4 bits only.
81
static const value_string SBAS_SPID[] = {
82
    {0,  "WAAS"},
83
    {1,  "EGNOS"},
84
    {2,  "MSAS"},
85
    {3,  "GAGAN"},
86
    {4,  "SDCM"},
87
    {5,  "BDSBAS"},
88
    {6,  "KASS"},
89
    {7,  "ANGA"},
90
    {8,  "SouthPAN"},
91
    {9,  "Reserved for SBAS"},
92
    {10, "Reserved for SBAS"},
93
    {11, "Reserved for SBAS"},
94
    {12, "Reserved for SBAS"},
95
    {13, "Reserved for SBAS"},
96
    {14, "Reserved"},
97
    {15, "Reserved"},
98
    {0, NULL}
99
};
100
101
// UDREI_i mapping
102
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-67
103
const value_string UDREI_EVALUATION[] = {
104
    {0,  "0.0520 m" UTF8_SUPERSCRIPT_TWO},
105
    {1,  "0.0924 m" UTF8_SUPERSCRIPT_TWO},
106
    {2,  "0.1444 m" UTF8_SUPERSCRIPT_TWO},
107
    {3,  "0.2830 m" UTF8_SUPERSCRIPT_TWO},
108
    {4,  "0.4678 m" UTF8_SUPERSCRIPT_TWO},
109
    {5,  "0.8315 m" UTF8_SUPERSCRIPT_TWO},
110
    {6,  "1.2992 m" UTF8_SUPERSCRIPT_TWO},
111
    {7,  "1.8709 m" UTF8_SUPERSCRIPT_TWO},
112
    {8,  "2.5465 m" UTF8_SUPERSCRIPT_TWO},
113
    {9,  "3.3260 m" UTF8_SUPERSCRIPT_TWO},
114
    {10, "5.1968 m" UTF8_SUPERSCRIPT_TWO},
115
    {11, "20.7870 m" UTF8_SUPERSCRIPT_TWO},
116
    {12, "230.9661 m" UTF8_SUPERSCRIPT_TWO},
117
    {13, "2078.695 m" UTF8_SUPERSCRIPT_TWO},
118
    {14, "Not Monitored"},
119
    {15, "Do Not Use"},
120
    {0,  NULL}
121
};
122
123
// GIVEI_i mapping
124
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-71
125
static const value_string GIVEI_EVALUATION[] = {
126
    {0,  "0.0084 m" UTF8_SUPERSCRIPT_TWO},
127
    {1,  "0.0333 m" UTF8_SUPERSCRIPT_TWO},
128
    {2,  "0.0749 m" UTF8_SUPERSCRIPT_TWO},
129
    {3,  "0.1331 m" UTF8_SUPERSCRIPT_TWO},
130
    {4,  "0.2079 m" UTF8_SUPERSCRIPT_TWO},
131
    {5,  "0.2994 m" UTF8_SUPERSCRIPT_TWO},
132
    {6,  "0.4075 m" UTF8_SUPERSCRIPT_TWO},
133
    {7,  "0.5322 m" UTF8_SUPERSCRIPT_TWO},
134
    {8,  "0.6735 m" UTF8_SUPERSCRIPT_TWO},
135
    {9,  "0.8315 m" UTF8_SUPERSCRIPT_TWO},
136
    {10, "1.1974 m" UTF8_SUPERSCRIPT_TWO},
137
    {11, "1.8709 m" UTF8_SUPERSCRIPT_TWO},
138
    {12, "3.3260 m" UTF8_SUPERSCRIPT_TWO},
139
    {13, "20.787 m" UTF8_SUPERSCRIPT_TWO},
140
    {14, "187.0826 m" UTF8_SUPERSCRIPT_TWO},
141
    {15, "Not Monitored"},
142
    {0,  NULL}
143
};
144
145
// Mapping for fast correction degradation factor
146
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-72
147
static const value_string DEGRADATION_FACTOR_INDICATOR[] = {
148
    {0,  "0.0 mm/s" UTF8_SUPERSCRIPT_TWO},
149
    {1,  "0.05 mm/s" UTF8_SUPERSCRIPT_TWO},
150
    {2,  "0.09 mm/s" UTF8_SUPERSCRIPT_TWO},
151
    {3,  "0.12 mm/s" UTF8_SUPERSCRIPT_TWO},
152
    {4,  "0.15 mm/s" UTF8_SUPERSCRIPT_TWO},
153
    {5,  "0.20 mm/s" UTF8_SUPERSCRIPT_TWO},
154
    {6,  "0.30 mm/s" UTF8_SUPERSCRIPT_TWO},
155
    {7,  "0.45 mm/s" UTF8_SUPERSCRIPT_TWO},
156
    {8,  "0.60 mm/s" UTF8_SUPERSCRIPT_TWO},
157
    {9,  "0.90 mm/s" UTF8_SUPERSCRIPT_TWO},
158
    {10, "1.50 mm/s" UTF8_SUPERSCRIPT_TWO},
159
    {11, "2.10 mm/s" UTF8_SUPERSCRIPT_TWO},
160
    {12, "2.70 mm/s" UTF8_SUPERSCRIPT_TWO},
161
    {13, "3.30 mm/s" UTF8_SUPERSCRIPT_TWO},
162
    {14, "4.60 mm/s" UTF8_SUPERSCRIPT_TWO},
163
    {15, "5.80 mm/s" UTF8_SUPERSCRIPT_TWO},
164
    {0,  NULL}
165
};
166
167
// Mapping for root-sum-square flags
168
// see ICAO Annex 10, Vol I, 8th edition, Section 3.5.4.7
169
static const value_string RSS_FLAG[] = {
170
    {0, "correction residuals are linearly summed"},
171
    {1, "correction residuals are root-sum-squared"},
172
    {0,  NULL}
173
};
174
175
// Mapping for delta UDRE indicator
176
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-74
177
static const value_string DELTA_UDRE_INDICATOR[] = {
178
    {0,  "1"},
179
    {1,  "1.1"},
180
    {2,  "1.25"},
181
    {3,  "1.5"},
182
    {4,  "2"},
183
    {5,  "3"},
184
    {6,  "4"},
185
    {7,  "5"},
186
    {8,  "6"},
187
    {9,  "8"},
188
    {10, "10"},
189
    {11, "20"},
190
    {12, "30"},
191
    {13, "40"},
192
    {14, "50"},
193
    {15, "100"},
194
    {0,  NULL}
195
};
196
197
// Mapping for region shape
198
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Section 3.5.4.9
199
static const val64_string REGION_SHAPE[] = {
200
    {0, "triangle"},
201
    {1, "quadrangle"},
202
    {0,  NULL}
203
};
204
205
// table for SBAS L1 CRC24Q computation
206
// cf. ICAO Annex 10, Vol I, 8th edition, Appendix B, Section 3.5.3.5
207
static const uint32_t CRC24Q_TBL[] = {
208
    0x000000, 0x864CFB, 0x8AD50D, 0x0C99F6, 0x93E6E1, 0x15AA1A, 0x1933EC, 0x9F7F17,
209
    0xA18139, 0x27CDC2, 0x2B5434, 0xAD18CF, 0x3267D8, 0xB42B23, 0xB8B2D5, 0x3EFE2E,
210
    0xC54E89, 0x430272, 0x4F9B84, 0xC9D77F, 0x56A868, 0xD0E493, 0xDC7D65, 0x5A319E,
211
    0x64CFB0, 0xE2834B, 0xEE1ABD, 0x685646, 0xF72951, 0x7165AA, 0x7DFC5C, 0xFBB0A7,
212
    0x0CD1E9, 0x8A9D12, 0x8604E4, 0x00481F, 0x9F3708, 0x197BF3, 0x15E205, 0x93AEFE,
213
    0xAD50D0, 0x2B1C2B, 0x2785DD, 0xA1C926, 0x3EB631, 0xB8FACA, 0xB4633C, 0x322FC7,
214
    0xC99F60, 0x4FD39B, 0x434A6D, 0xC50696, 0x5A7981, 0xDC357A, 0xD0AC8C, 0x56E077,
215
    0x681E59, 0xEE52A2, 0xE2CB54, 0x6487AF, 0xFBF8B8, 0x7DB443, 0x712DB5, 0xF7614E,
216
    0x19A3D2, 0x9FEF29, 0x9376DF, 0x153A24, 0x8A4533, 0x0C09C8, 0x00903E, 0x86DCC5,
217
    0xB822EB, 0x3E6E10, 0x32F7E6, 0xB4BB1D, 0x2BC40A, 0xAD88F1, 0xA11107, 0x275DFC,
218
    0xDCED5B, 0x5AA1A0, 0x563856, 0xD074AD, 0x4F0BBA, 0xC94741, 0xC5DEB7, 0x43924C,
219
    0x7D6C62, 0xFB2099, 0xF7B96F, 0x71F594, 0xEE8A83, 0x68C678, 0x645F8E, 0xE21375,
220
    0x15723B, 0x933EC0, 0x9FA736, 0x19EBCD, 0x8694DA, 0x00D821, 0x0C41D7, 0x8A0D2C,
221
    0xB4F302, 0x32BFF9, 0x3E260F, 0xB86AF4, 0x2715E3, 0xA15918, 0xADC0EE, 0x2B8C15,
222
    0xD03CB2, 0x567049, 0x5AE9BF, 0xDCA544, 0x43DA53, 0xC596A8, 0xC90F5E, 0x4F43A5,
223
    0x71BD8B, 0xF7F170, 0xFB6886, 0x7D247D, 0xE25B6A, 0x641791, 0x688E67, 0xEEC29C,
224
    0x3347A4, 0xB50B5F, 0xB992A9, 0x3FDE52, 0xA0A145, 0x26EDBE, 0x2A7448, 0xAC38B3,
225
    0x92C69D, 0x148A66, 0x181390, 0x9E5F6B, 0x01207C, 0x876C87, 0x8BF571, 0x0DB98A,
226
    0xF6092D, 0x7045D6, 0x7CDC20, 0xFA90DB, 0x65EFCC, 0xE3A337, 0xEF3AC1, 0x69763A,
227
    0x578814, 0xD1C4EF, 0xDD5D19, 0x5B11E2, 0xC46EF5, 0x42220E, 0x4EBBF8, 0xC8F703,
228
    0x3F964D, 0xB9DAB6, 0xB54340, 0x330FBB, 0xAC70AC, 0x2A3C57, 0x26A5A1, 0xA0E95A,
229
    0x9E1774, 0x185B8F, 0x14C279, 0x928E82, 0x0DF195, 0x8BBD6E, 0x872498, 0x016863,
230
    0xFAD8C4, 0x7C943F, 0x700DC9, 0xF64132, 0x693E25, 0xEF72DE, 0xE3EB28, 0x65A7D3,
231
    0x5B59FD, 0xDD1506, 0xD18CF0, 0x57C00B, 0xC8BF1C, 0x4EF3E7, 0x426A11, 0xC426EA,
232
    0x2AE476, 0xACA88D, 0xA0317B, 0x267D80, 0xB90297, 0x3F4E6C, 0x33D79A, 0xB59B61,
233
    0x8B654F, 0x0D29B4, 0x01B042, 0x87FCB9, 0x1883AE, 0x9ECF55, 0x9256A3, 0x141A58,
234
    0xEFAAFF, 0x69E604, 0x657FF2, 0xE33309, 0x7C4C1E, 0xFA00E5, 0xF69913, 0x70D5E8,
235
    0x4E2BC6, 0xC8673D, 0xC4FECB, 0x42B230, 0xDDCD27, 0x5B81DC, 0x57182A, 0xD154D1,
236
    0x26359F, 0xA07964, 0xACE092, 0x2AAC69, 0xB5D37E, 0x339F85, 0x3F0673, 0xB94A88,
237
    0x87B4A6, 0x01F85D, 0x0D61AB, 0x8B2D50, 0x145247, 0x921EBC, 0x9E874A, 0x18CBB1,
238
    0xE37B16, 0x6537ED, 0x69AE1B, 0xEFE2E0, 0x709DF7, 0xF6D10C, 0xFA48FA, 0x7C0401,
239
    0x42FA2F, 0xC4B6D4, 0xC82F22, 0x4E63D9, 0xD11CCE, 0x575035, 0x5BC9C3, 0xDD8538
240
};
241
242
/* Initialize the protocol and registered fields */
243
static int proto_sbas_l1;
244
245
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Section 3.5.3
246
static int hf_sbas_l1_preamble;
247
static int hf_sbas_l1_mt;
248
static int hf_sbas_l1_chksum;
249
250
static int hf_sbas_l1_mt0;
251
static int hf_sbas_l1_mt0_spare_1;
252
static int hf_sbas_l1_mt0_spare_2;
253
static int hf_sbas_l1_mt0_spare_3;
254
255
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-76
256
static int hf_sbas_l1_mt1;
257
static int hf_sbas_l1_mt1_prn_mask_gps;
258
static int hf_sbas_l1_mt1_prn_mask_glonass;
259
static int hf_sbas_l1_mt1_prn_mask_spare_1;
260
static int hf_sbas_l1_mt1_prn_mask_sbas;
261
static int hf_sbas_l1_mt1_prn_mask_spare_2;
262
static int hf_sbas_l1_mt1_iodp;
263
264
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-77
265
static int hf_sbas_l1_mt2;
266
static int hf_sbas_l1_mt2_iodf_2;
267
static int hf_sbas_l1_mt2_iodp;
268
static int hf_sbas_l1_mt2_fc_1;
269
static int hf_sbas_l1_mt2_fc_2;
270
static int hf_sbas_l1_mt2_fc_3;
271
static int hf_sbas_l1_mt2_fc_4;
272
static int hf_sbas_l1_mt2_fc_5;
273
static int hf_sbas_l1_mt2_fc_6;
274
static int hf_sbas_l1_mt2_fc_7;
275
static int hf_sbas_l1_mt2_fc_8;
276
static int hf_sbas_l1_mt2_fc_9;
277
static int hf_sbas_l1_mt2_fc_10;
278
static int hf_sbas_l1_mt2_fc_11;
279
static int hf_sbas_l1_mt2_fc_12;
280
static int hf_sbas_l1_mt2_fc_13;
281
static int hf_sbas_l1_mt2_udrei_1;
282
static int hf_sbas_l1_mt2_udrei_2;
283
static int hf_sbas_l1_mt2_udrei_3;
284
static int hf_sbas_l1_mt2_udrei_4;
285
static int hf_sbas_l1_mt2_udrei_5;
286
static int hf_sbas_l1_mt2_udrei_6;
287
static int hf_sbas_l1_mt2_udrei_7;
288
static int hf_sbas_l1_mt2_udrei_8;
289
static int hf_sbas_l1_mt2_udrei_9;
290
static int hf_sbas_l1_mt2_udrei_10;
291
static int hf_sbas_l1_mt2_udrei_11;
292
static int hf_sbas_l1_mt2_udrei_12;
293
static int hf_sbas_l1_mt2_udrei_13;
294
295
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-77
296
static int hf_sbas_l1_mt3;
297
static int hf_sbas_l1_mt3_iodf_3;
298
static int hf_sbas_l1_mt3_iodp;
299
static int hf_sbas_l1_mt3_fc_14;
300
static int hf_sbas_l1_mt3_fc_15;
301
static int hf_sbas_l1_mt3_fc_16;
302
static int hf_sbas_l1_mt3_fc_17;
303
static int hf_sbas_l1_mt3_fc_18;
304
static int hf_sbas_l1_mt3_fc_19;
305
static int hf_sbas_l1_mt3_fc_20;
306
static int hf_sbas_l1_mt3_fc_21;
307
static int hf_sbas_l1_mt3_fc_22;
308
static int hf_sbas_l1_mt3_fc_23;
309
static int hf_sbas_l1_mt3_fc_24;
310
static int hf_sbas_l1_mt3_fc_25;
311
static int hf_sbas_l1_mt3_fc_26;
312
static int hf_sbas_l1_mt3_udrei_14;
313
static int hf_sbas_l1_mt3_udrei_15;
314
static int hf_sbas_l1_mt3_udrei_16;
315
static int hf_sbas_l1_mt3_udrei_17;
316
static int hf_sbas_l1_mt3_udrei_18;
317
static int hf_sbas_l1_mt3_udrei_19;
318
static int hf_sbas_l1_mt3_udrei_20;
319
static int hf_sbas_l1_mt3_udrei_21;
320
static int hf_sbas_l1_mt3_udrei_22;
321
static int hf_sbas_l1_mt3_udrei_23;
322
static int hf_sbas_l1_mt3_udrei_24;
323
static int hf_sbas_l1_mt3_udrei_25;
324
static int hf_sbas_l1_mt3_udrei_26;
325
326
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-77
327
static int hf_sbas_l1_mt4;
328
static int hf_sbas_l1_mt4_iodf_4;
329
static int hf_sbas_l1_mt4_iodp;
330
static int hf_sbas_l1_mt4_fc_27;
331
static int hf_sbas_l1_mt4_fc_28;
332
static int hf_sbas_l1_mt4_fc_29;
333
static int hf_sbas_l1_mt4_fc_30;
334
static int hf_sbas_l1_mt4_fc_31;
335
static int hf_sbas_l1_mt4_fc_32;
336
static int hf_sbas_l1_mt4_fc_33;
337
static int hf_sbas_l1_mt4_fc_34;
338
static int hf_sbas_l1_mt4_fc_35;
339
static int hf_sbas_l1_mt4_fc_36;
340
static int hf_sbas_l1_mt4_fc_37;
341
static int hf_sbas_l1_mt4_fc_38;
342
static int hf_sbas_l1_mt4_fc_39;
343
static int hf_sbas_l1_mt4_udrei_27;
344
static int hf_sbas_l1_mt4_udrei_28;
345
static int hf_sbas_l1_mt4_udrei_29;
346
static int hf_sbas_l1_mt4_udrei_30;
347
static int hf_sbas_l1_mt4_udrei_31;
348
static int hf_sbas_l1_mt4_udrei_32;
349
static int hf_sbas_l1_mt4_udrei_33;
350
static int hf_sbas_l1_mt4_udrei_34;
351
static int hf_sbas_l1_mt4_udrei_35;
352
static int hf_sbas_l1_mt4_udrei_36;
353
static int hf_sbas_l1_mt4_udrei_37;
354
static int hf_sbas_l1_mt4_udrei_38;
355
static int hf_sbas_l1_mt4_udrei_39;
356
357
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-77
358
static int hf_sbas_l1_mt5;
359
static int hf_sbas_l1_mt5_iodf_5;
360
static int hf_sbas_l1_mt5_iodp;
361
static int hf_sbas_l1_mt5_fc_40;
362
static int hf_sbas_l1_mt5_fc_41;
363
static int hf_sbas_l1_mt5_fc_42;
364
static int hf_sbas_l1_mt5_fc_43;
365
static int hf_sbas_l1_mt5_fc_44;
366
static int hf_sbas_l1_mt5_fc_45;
367
static int hf_sbas_l1_mt5_fc_46;
368
static int hf_sbas_l1_mt5_fc_47;
369
static int hf_sbas_l1_mt5_fc_48;
370
static int hf_sbas_l1_mt5_fc_49;
371
static int hf_sbas_l1_mt5_fc_50;
372
static int hf_sbas_l1_mt5_fc_51;
373
static int hf_sbas_l1_mt5_fc_52;
374
static int hf_sbas_l1_mt5_udrei_40;
375
static int hf_sbas_l1_mt5_udrei_41;
376
static int hf_sbas_l1_mt5_udrei_42;
377
static int hf_sbas_l1_mt5_udrei_43;
378
static int hf_sbas_l1_mt5_udrei_44;
379
static int hf_sbas_l1_mt5_udrei_45;
380
static int hf_sbas_l1_mt5_udrei_46;
381
static int hf_sbas_l1_mt5_udrei_47;
382
static int hf_sbas_l1_mt5_udrei_48;
383
static int hf_sbas_l1_mt5_udrei_49;
384
static int hf_sbas_l1_mt5_udrei_50;
385
static int hf_sbas_l1_mt5_udrei_51;
386
static int hf_sbas_l1_mt5_udrei_52;
387
388
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-78
389
static int hf_sbas_l1_mt6;
390
static int hf_sbas_l1_mt6_iodf_2;
391
static int hf_sbas_l1_mt6_iodf_3;
392
static int hf_sbas_l1_mt6_iodf_4;
393
static int hf_sbas_l1_mt6_iodf_5;
394
static int hf_sbas_l1_mt6_udrei_1;
395
static int hf_sbas_l1_mt6_udrei_2;
396
static int hf_sbas_l1_mt6_udrei_3;
397
static int hf_sbas_l1_mt6_udrei_4;
398
static int hf_sbas_l1_mt6_udrei_5;
399
static int hf_sbas_l1_mt6_udrei_6;
400
static int hf_sbas_l1_mt6_udrei_7;
401
static int hf_sbas_l1_mt6_udrei_8;
402
static int hf_sbas_l1_mt6_udrei_9;
403
static int hf_sbas_l1_mt6_udrei_10;
404
static int hf_sbas_l1_mt6_udrei_11;
405
static int hf_sbas_l1_mt6_udrei_12;
406
static int hf_sbas_l1_mt6_udrei_13;
407
static int hf_sbas_l1_mt6_udrei_14;
408
static int hf_sbas_l1_mt6_udrei_15;
409
static int hf_sbas_l1_mt6_udrei_16;
410
static int hf_sbas_l1_mt6_udrei_17;
411
static int hf_sbas_l1_mt6_udrei_18;
412
static int hf_sbas_l1_mt6_udrei_19;
413
static int hf_sbas_l1_mt6_udrei_20;
414
static int hf_sbas_l1_mt6_udrei_21;
415
static int hf_sbas_l1_mt6_udrei_22;
416
static int hf_sbas_l1_mt6_udrei_23;
417
static int hf_sbas_l1_mt6_udrei_24;
418
static int hf_sbas_l1_mt6_udrei_25;
419
static int hf_sbas_l1_mt6_udrei_26;
420
static int hf_sbas_l1_mt6_udrei_27;
421
static int hf_sbas_l1_mt6_udrei_28;
422
static int hf_sbas_l1_mt6_udrei_29;
423
static int hf_sbas_l1_mt6_udrei_30;
424
static int hf_sbas_l1_mt6_udrei_31;
425
static int hf_sbas_l1_mt6_udrei_32;
426
static int hf_sbas_l1_mt6_udrei_33;
427
static int hf_sbas_l1_mt6_udrei_34;
428
static int hf_sbas_l1_mt6_udrei_35;
429
static int hf_sbas_l1_mt6_udrei_36;
430
static int hf_sbas_l1_mt6_udrei_37;
431
static int hf_sbas_l1_mt6_udrei_38;
432
static int hf_sbas_l1_mt6_udrei_39;
433
static int hf_sbas_l1_mt6_udrei_40;
434
static int hf_sbas_l1_mt6_udrei_41;
435
static int hf_sbas_l1_mt6_udrei_42;
436
static int hf_sbas_l1_mt6_udrei_43;
437
static int hf_sbas_l1_mt6_udrei_44;
438
static int hf_sbas_l1_mt6_udrei_45;
439
static int hf_sbas_l1_mt6_udrei_46;
440
static int hf_sbas_l1_mt6_udrei_47;
441
static int hf_sbas_l1_mt6_udrei_48;
442
static int hf_sbas_l1_mt6_udrei_49;
443
static int hf_sbas_l1_mt6_udrei_50;
444
static int hf_sbas_l1_mt6_udrei_51;
445
446
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-79
447
static int hf_sbas_l1_mt7;
448
static int hf_sbas_l1_mt7_t_lat;
449
static int hf_sbas_l1_mt7_iodp;
450
static int hf_sbas_l1_mt7_spare;
451
static int hf_sbas_l1_mt7_ai_1;
452
static int hf_sbas_l1_mt7_ai_2;
453
static int hf_sbas_l1_mt7_ai_3;
454
static int hf_sbas_l1_mt7_ai_4;
455
static int hf_sbas_l1_mt7_ai_5;
456
static int hf_sbas_l1_mt7_ai_6;
457
static int hf_sbas_l1_mt7_ai_7;
458
static int hf_sbas_l1_mt7_ai_8;
459
static int hf_sbas_l1_mt7_ai_9;
460
static int hf_sbas_l1_mt7_ai_10;
461
static int hf_sbas_l1_mt7_ai_11;
462
static int hf_sbas_l1_mt7_ai_12;
463
static int hf_sbas_l1_mt7_ai_13;
464
static int hf_sbas_l1_mt7_ai_14;
465
static int hf_sbas_l1_mt7_ai_15;
466
static int hf_sbas_l1_mt7_ai_16;
467
static int hf_sbas_l1_mt7_ai_17;
468
static int hf_sbas_l1_mt7_ai_18;
469
static int hf_sbas_l1_mt7_ai_19;
470
static int hf_sbas_l1_mt7_ai_20;
471
static int hf_sbas_l1_mt7_ai_21;
472
static int hf_sbas_l1_mt7_ai_22;
473
static int hf_sbas_l1_mt7_ai_23;
474
static int hf_sbas_l1_mt7_ai_24;
475
static int hf_sbas_l1_mt7_ai_25;
476
static int hf_sbas_l1_mt7_ai_26;
477
static int hf_sbas_l1_mt7_ai_27;
478
static int hf_sbas_l1_mt7_ai_28;
479
static int hf_sbas_l1_mt7_ai_29;
480
static int hf_sbas_l1_mt7_ai_30;
481
static int hf_sbas_l1_mt7_ai_31;
482
static int hf_sbas_l1_mt7_ai_32;
483
static int hf_sbas_l1_mt7_ai_33;
484
static int hf_sbas_l1_mt7_ai_34;
485
static int hf_sbas_l1_mt7_ai_35;
486
static int hf_sbas_l1_mt7_ai_36;
487
static int hf_sbas_l1_mt7_ai_37;
488
static int hf_sbas_l1_mt7_ai_38;
489
static int hf_sbas_l1_mt7_ai_39;
490
static int hf_sbas_l1_mt7_ai_40;
491
static int hf_sbas_l1_mt7_ai_41;
492
static int hf_sbas_l1_mt7_ai_42;
493
static int hf_sbas_l1_mt7_ai_43;
494
static int hf_sbas_l1_mt7_ai_44;
495
static int hf_sbas_l1_mt7_ai_45;
496
static int hf_sbas_l1_mt7_ai_46;
497
static int hf_sbas_l1_mt7_ai_47;
498
static int hf_sbas_l1_mt7_ai_48;
499
static int hf_sbas_l1_mt7_ai_49;
500
static int hf_sbas_l1_mt7_ai_50;
501
static int hf_sbas_l1_mt7_ai_51;
502
503
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-80
504
static int hf_sbas_l1_mt9;
505
static int hf_sbas_l1_mt9_reserved;
506
static int hf_sbas_l1_mt9_t_0_geo;
507
static int hf_sbas_l1_mt9_ura;
508
static int hf_sbas_l1_mt9_x_g;
509
static int hf_sbas_l1_mt9_y_g;
510
static int hf_sbas_l1_mt9_z_g;
511
static int hf_sbas_l1_mt9_x_g_vel;
512
static int hf_sbas_l1_mt9_y_g_vel;
513
static int hf_sbas_l1_mt9_z_g_vel;
514
static int hf_sbas_l1_mt9_x_g_acc;
515
static int hf_sbas_l1_mt9_y_g_acc;
516
static int hf_sbas_l1_mt9_z_g_acc;
517
static int hf_sbas_l1_mt9_a_gf0;
518
static int hf_sbas_l1_mt9_a_gf1;
519
520
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-81
521
static int hf_sbas_l1_mt10;
522
static int hf_sbas_l1_mt10_b_rrc;
523
static int hf_sbas_l1_mt10_c_ltc_lsb;
524
static int hf_sbas_l1_mt10_c_ltc_v1;
525
static int hf_sbas_l1_mt10_i_ltc_v1;
526
static int hf_sbas_l1_mt10_c_ltc_v0;
527
static int hf_sbas_l1_mt10_i_ltc_v0;
528
static int hf_sbas_l1_mt10_c_geo_lsb;
529
static int hf_sbas_l1_mt10_c_geo_v;
530
static int hf_sbas_l1_mt10_i_geo;
531
static int hf_sbas_l1_mt10_c_er;
532
static int hf_sbas_l1_mt10_c_iono_step;
533
static int hf_sbas_l1_mt10_i_iono;
534
static int hf_sbas_l1_mt10_c_iono_ramp;
535
static int hf_sbas_l1_mt10_rss_udre;
536
static int hf_sbas_l1_mt10_rss_iono;
537
static int hf_sbas_l1_mt10_c_covariance;
538
static int hf_sbas_l1_mt10_spare_1;
539
static int hf_sbas_l1_mt10_spare_2;
540
541
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-82
542
static int hf_sbas_l1_mt12;
543
static int hf_sbas_l1_mt12_a_1snt;
544
static int hf_sbas_l1_mt12_a_0snt;
545
static int hf_sbas_l1_mt12_t_0t;
546
static int hf_sbas_l1_mt12_wn_t;
547
static int hf_sbas_l1_mt12_delta_t_ls;
548
static int hf_sbas_l1_mt12_wn_lsf;
549
static int hf_sbas_l1_mt12_dn;
550
static int hf_sbas_l1_mt12_delta_t_lsf;
551
static int hf_sbas_l1_mt12_utc_std_id;
552
static int hf_sbas_l1_mt12_gps_tow;
553
static int hf_sbas_l1_mt12_gps_wn;
554
static int hf_sbas_l1_mt12_glo_ind;
555
static int hf_sbas_l1_mt12_delta_a_i_glo;
556
static int hf_sbas_l1_mt12_spare;
557
558
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-83
559
static int hf_sbas_l1_mt17;
560
static int hf_sbas_l1_mt17_reserved;
561
static int hf_sbas_l1_mt17_prn;
562
static int hf_sbas_l1_mt17_health_and_status;
563
static int hf_sbas_l1_mt17_health_and_status_spid;
564
static int hf_sbas_l1_mt17_health_and_status_spare;
565
static int hf_sbas_l1_mt17_health_and_status_sat_status_basic_corrections;
566
static int hf_sbas_l1_mt17_health_and_status_precision_corrections;
567
static int hf_sbas_l1_mt17_health_and_status_ranging;
568
static int hf_sbas_l1_mt17_x_ga;
569
static int hf_sbas_l1_mt17_y_ga;
570
static int hf_sbas_l1_mt17_z_ga;
571
static int hf_sbas_l1_mt17_x_ga_vel;
572
static int hf_sbas_l1_mt17_y_ga_vel;
573
static int hf_sbas_l1_mt17_z_ga_vel;
574
static int hf_sbas_l1_mt17_t_a;
575
576
static int * const sbas_l1_mt17_health_and_status_fields[] = {
577
    &hf_sbas_l1_mt17_health_and_status_spid,
578
    &hf_sbas_l1_mt17_health_and_status_spare,
579
    &hf_sbas_l1_mt17_health_and_status_sat_status_basic_corrections,
580
    &hf_sbas_l1_mt17_health_and_status_precision_corrections,
581
    &hf_sbas_l1_mt17_health_and_status_ranging,
582
    NULL
583
};
584
585
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-84
586
static int hf_sbas_l1_mt18;
587
static int hf_sbas_l1_mt18_nr_igp_bands;
588
static int hf_sbas_l1_mt18_igp_band_id;
589
static int hf_sbas_l1_mt18_iodi_k;
590
static int hf_sbas_l1_mt18_igp_mask_180w;
591
static int hf_sbas_l1_mt18_igp_mask_175w;
592
static int hf_sbas_l1_mt18_igp_mask_170w;
593
static int hf_sbas_l1_mt18_igp_mask_165w;
594
static int hf_sbas_l1_mt18_igp_mask_160w;
595
static int hf_sbas_l1_mt18_igp_mask_155w;
596
static int hf_sbas_l1_mt18_igp_mask_150w;
597
static int hf_sbas_l1_mt18_igp_mask_145w;
598
static int hf_sbas_l1_mt18_igp_mask_140w;
599
static int hf_sbas_l1_mt18_igp_mask_135w;
600
static int hf_sbas_l1_mt18_igp_mask_130w;
601
static int hf_sbas_l1_mt18_igp_mask_125w;
602
static int hf_sbas_l1_mt18_igp_mask_120w;
603
static int hf_sbas_l1_mt18_igp_mask_115w;
604
static int hf_sbas_l1_mt18_igp_mask_110w;
605
static int hf_sbas_l1_mt18_igp_mask_105w;
606
static int hf_sbas_l1_mt18_igp_mask_100w;
607
static int hf_sbas_l1_mt18_igp_mask_95w;
608
static int hf_sbas_l1_mt18_igp_mask_90w;
609
static int hf_sbas_l1_mt18_igp_mask_85w;
610
static int hf_sbas_l1_mt18_igp_mask_80w;
611
static int hf_sbas_l1_mt18_igp_mask_75w;
612
static int hf_sbas_l1_mt18_igp_mask_70w;
613
static int hf_sbas_l1_mt18_igp_mask_65w;
614
static int hf_sbas_l1_mt18_igp_mask_60w;
615
static int hf_sbas_l1_mt18_igp_mask_55w;
616
static int hf_sbas_l1_mt18_igp_mask_50w;
617
static int hf_sbas_l1_mt18_igp_mask_45w;
618
static int hf_sbas_l1_mt18_igp_mask_40w;
619
static int hf_sbas_l1_mt18_igp_mask_35w;
620
static int hf_sbas_l1_mt18_igp_mask_30w;
621
static int hf_sbas_l1_mt18_igp_mask_25w;
622
static int hf_sbas_l1_mt18_igp_mask_20w;
623
static int hf_sbas_l1_mt18_igp_mask_15w;
624
static int hf_sbas_l1_mt18_igp_mask_10w;
625
static int hf_sbas_l1_mt18_igp_mask_5w;
626
static int hf_sbas_l1_mt18_igp_mask_0;
627
static int hf_sbas_l1_mt18_igp_mask_5e;
628
static int hf_sbas_l1_mt18_igp_mask_10e;
629
static int hf_sbas_l1_mt18_igp_mask_15e;
630
static int hf_sbas_l1_mt18_igp_mask_20e;
631
static int hf_sbas_l1_mt18_igp_mask_25e;
632
static int hf_sbas_l1_mt18_igp_mask_30e;
633
static int hf_sbas_l1_mt18_igp_mask_35e;
634
static int hf_sbas_l1_mt18_igp_mask_40e;
635
static int hf_sbas_l1_mt18_igp_mask_45e;
636
static int hf_sbas_l1_mt18_igp_mask_50e;
637
static int hf_sbas_l1_mt18_igp_mask_55e;
638
static int hf_sbas_l1_mt18_igp_mask_60e;
639
static int hf_sbas_l1_mt18_igp_mask_65e;
640
static int hf_sbas_l1_mt18_igp_mask_70e;
641
static int hf_sbas_l1_mt18_igp_mask_75e;
642
static int hf_sbas_l1_mt18_igp_mask_80e;
643
static int hf_sbas_l1_mt18_igp_mask_85e;
644
static int hf_sbas_l1_mt18_igp_mask_90e;
645
static int hf_sbas_l1_mt18_igp_mask_95e;
646
static int hf_sbas_l1_mt18_igp_mask_100e;
647
static int hf_sbas_l1_mt18_igp_mask_105e;
648
static int hf_sbas_l1_mt18_igp_mask_110e;
649
static int hf_sbas_l1_mt18_igp_mask_115e;
650
static int hf_sbas_l1_mt18_igp_mask_120e;
651
static int hf_sbas_l1_mt18_igp_mask_125e;
652
static int hf_sbas_l1_mt18_igp_mask_130e;
653
static int hf_sbas_l1_mt18_igp_mask_135e;
654
static int hf_sbas_l1_mt18_igp_mask_140e;
655
static int hf_sbas_l1_mt18_igp_mask_145e;
656
static int hf_sbas_l1_mt18_igp_mask_150e;
657
static int hf_sbas_l1_mt18_igp_mask_155e;
658
static int hf_sbas_l1_mt18_igp_mask_160e;
659
static int hf_sbas_l1_mt18_igp_mask_165e;
660
static int hf_sbas_l1_mt18_igp_mask_170e;
661
static int hf_sbas_l1_mt18_igp_mask_175e;
662
static int hf_sbas_l1_mt18_igp_mask_60n_1;
663
static int hf_sbas_l1_mt18_igp_mask_60n_2;
664
static int hf_sbas_l1_mt18_igp_mask_65n;
665
static int hf_sbas_l1_mt18_igp_mask_70n;
666
static int hf_sbas_l1_mt18_igp_mask_75n;
667
static int hf_sbas_l1_mt18_igp_mask_85n;
668
static int hf_sbas_l1_mt18_igp_mask_60s_1;
669
static int hf_sbas_l1_mt18_igp_mask_60s_2;
670
static int hf_sbas_l1_mt18_igp_mask_65s;
671
static int hf_sbas_l1_mt18_igp_mask_70s;
672
static int hf_sbas_l1_mt18_igp_mask_75s;
673
static int hf_sbas_l1_mt18_igp_mask_85s;
674
static int hf_sbas_l1_mt18_spare;
675
676
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-85
677
static int hf_sbas_l1_mt24;
678
static int hf_sbas_l1_mt24_fc_i1;
679
static int hf_sbas_l1_mt24_fc_i2;
680
static int hf_sbas_l1_mt24_fc_i3;
681
static int hf_sbas_l1_mt24_fc_i4;
682
static int hf_sbas_l1_mt24_fc_i5;
683
static int hf_sbas_l1_mt24_fc_i6;
684
static int hf_sbas_l1_mt24_udrei_i1;
685
static int hf_sbas_l1_mt24_udrei_i2;
686
static int hf_sbas_l1_mt24_udrei_i3;
687
static int hf_sbas_l1_mt24_udrei_i4;
688
static int hf_sbas_l1_mt24_udrei_i5;
689
static int hf_sbas_l1_mt24_udrei_i6;
690
static int hf_sbas_l1_mt24_iodp;
691
static int hf_sbas_l1_mt24_fc_type;
692
static int hf_sbas_l1_mt24_iodf_j;
693
static int hf_sbas_l1_mt24_spare;
694
static int hf_sbas_l1_mt24_velocity_code;
695
static int hf_sbas_l1_mt24_v0_prn_mask_nr_1;
696
static int hf_sbas_l1_mt24_v0_iod_1;
697
static int hf_sbas_l1_mt24_v0_delta_x_1;
698
static int hf_sbas_l1_mt24_v0_delta_y_1;
699
static int hf_sbas_l1_mt24_v0_delta_z_1;
700
static int hf_sbas_l1_mt24_v0_delta_a_1_f0;
701
static int hf_sbas_l1_mt24_v0_prn_mask_nr_2;
702
static int hf_sbas_l1_mt24_v0_iod_2;
703
static int hf_sbas_l1_mt24_v0_delta_x_2;
704
static int hf_sbas_l1_mt24_v0_delta_y_2;
705
static int hf_sbas_l1_mt24_v0_delta_z_2;
706
static int hf_sbas_l1_mt24_v0_delta_a_2_f0;
707
static int hf_sbas_l1_mt24_v0_iodp;
708
static int hf_sbas_l1_mt24_v0_spare;
709
static int hf_sbas_l1_mt24_v1_prn_mask_nr;
710
static int hf_sbas_l1_mt24_v1_iod;
711
static int hf_sbas_l1_mt24_v1_delta_x;
712
static int hf_sbas_l1_mt24_v1_delta_y;
713
static int hf_sbas_l1_mt24_v1_delta_z;
714
static int hf_sbas_l1_mt24_v1_delta_a_f0;
715
static int hf_sbas_l1_mt24_v1_delta_x_vel;
716
static int hf_sbas_l1_mt24_v1_delta_y_vel;
717
static int hf_sbas_l1_mt24_v1_delta_z_vel;
718
static int hf_sbas_l1_mt24_v1_delta_a_f1;
719
static int hf_sbas_l1_mt24_v1_t_lt;
720
static int hf_sbas_l1_mt24_v1_iodp;
721
722
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-86 and B-87
723
static int hf_sbas_l1_mt25;
724
static int hf_sbas_l1_mt25_h1_velocity_code;
725
static int hf_sbas_l1_mt25_h1_v0_prn_mask_nr_1;
726
static int hf_sbas_l1_mt25_h1_v0_iod_1;
727
static int hf_sbas_l1_mt25_h1_v0_delta_x_1;
728
static int hf_sbas_l1_mt25_h1_v0_delta_y_1;
729
static int hf_sbas_l1_mt25_h1_v0_delta_z_1;
730
static int hf_sbas_l1_mt25_h1_v0_delta_a_1_f0;
731
static int hf_sbas_l1_mt25_h1_v0_prn_mask_nr_2;
732
static int hf_sbas_l1_mt25_h1_v0_iod_2;
733
static int hf_sbas_l1_mt25_h1_v0_delta_x_2;
734
static int hf_sbas_l1_mt25_h1_v0_delta_y_2;
735
static int hf_sbas_l1_mt25_h1_v0_delta_z_2;
736
static int hf_sbas_l1_mt25_h1_v0_delta_a_2_f0;
737
static int hf_sbas_l1_mt25_h1_v0_iodp;
738
static int hf_sbas_l1_mt25_h1_v0_spare;
739
static int hf_sbas_l1_mt25_h1_v1_prn_mask_nr;
740
static int hf_sbas_l1_mt25_h1_v1_iod;
741
static int hf_sbas_l1_mt25_h1_v1_delta_x;
742
static int hf_sbas_l1_mt25_h1_v1_delta_y;
743
static int hf_sbas_l1_mt25_h1_v1_delta_z;
744
static int hf_sbas_l1_mt25_h1_v1_delta_a_f0;
745
static int hf_sbas_l1_mt25_h1_v1_delta_x_vel;
746
static int hf_sbas_l1_mt25_h1_v1_delta_y_vel;
747
static int hf_sbas_l1_mt25_h1_v1_delta_z_vel;
748
static int hf_sbas_l1_mt25_h1_v1_delta_a_f1;
749
static int hf_sbas_l1_mt25_h1_v1_t_lt;
750
static int hf_sbas_l1_mt25_h1_v1_iodp;
751
static int hf_sbas_l1_mt25_h2_velocity_code;
752
static int hf_sbas_l1_mt25_h2_v0_prn_mask_nr_1;
753
static int hf_sbas_l1_mt25_h2_v0_iod_1;
754
static int hf_sbas_l1_mt25_h2_v0_delta_x_1;
755
static int hf_sbas_l1_mt25_h2_v0_delta_y_1;
756
static int hf_sbas_l1_mt25_h2_v0_delta_z_1;
757
static int hf_sbas_l1_mt25_h2_v0_delta_a_1_f0;
758
static int hf_sbas_l1_mt25_h2_v0_prn_mask_nr_2;
759
static int hf_sbas_l1_mt25_h2_v0_iod_2;
760
static int hf_sbas_l1_mt25_h2_v0_delta_x_2;
761
static int hf_sbas_l1_mt25_h2_v0_delta_y_2;
762
static int hf_sbas_l1_mt25_h2_v0_delta_z_2;
763
static int hf_sbas_l1_mt25_h2_v0_delta_a_2_f0;
764
static int hf_sbas_l1_mt25_h2_v0_iodp;
765
static int hf_sbas_l1_mt25_h2_v0_spare;
766
static int hf_sbas_l1_mt25_h2_v1_prn_mask_nr;
767
static int hf_sbas_l1_mt25_h2_v1_iod;
768
static int hf_sbas_l1_mt25_h2_v1_delta_x;
769
static int hf_sbas_l1_mt25_h2_v1_delta_y;
770
static int hf_sbas_l1_mt25_h2_v1_delta_z;
771
static int hf_sbas_l1_mt25_h2_v1_delta_a_f0;
772
static int hf_sbas_l1_mt25_h2_v1_delta_x_vel;
773
static int hf_sbas_l1_mt25_h2_v1_delta_y_vel;
774
static int hf_sbas_l1_mt25_h2_v1_delta_z_vel;
775
static int hf_sbas_l1_mt25_h2_v1_delta_a_f1;
776
static int hf_sbas_l1_mt25_h2_v1_t_lt;
777
static int hf_sbas_l1_mt25_h2_v1_iodp;
778
779
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-88
780
static int hf_sbas_l1_mt26;
781
static int hf_sbas_l1_mt26_igp_band_id;
782
static int hf_sbas_l1_mt26_igp_block_id;
783
static int hf_sbas_l1_mt26_igp_vertical_delay_est_1;
784
static int hf_sbas_l1_mt26_givei_1;
785
static int hf_sbas_l1_mt26_igp_vertical_delay_est_2;
786
static int hf_sbas_l1_mt26_givei_2;
787
static int hf_sbas_l1_mt26_igp_vertical_delay_est_3;
788
static int hf_sbas_l1_mt26_givei_3;
789
static int hf_sbas_l1_mt26_igp_vertical_delay_est_4;
790
static int hf_sbas_l1_mt26_givei_4;
791
static int hf_sbas_l1_mt26_igp_vertical_delay_est_5;
792
static int hf_sbas_l1_mt26_givei_5;
793
static int hf_sbas_l1_mt26_igp_vertical_delay_est_6;
794
static int hf_sbas_l1_mt26_givei_6;
795
static int hf_sbas_l1_mt26_igp_vertical_delay_est_7;
796
static int hf_sbas_l1_mt26_givei_7;
797
static int hf_sbas_l1_mt26_igp_vertical_delay_est_8;
798
static int hf_sbas_l1_mt26_givei_8;
799
static int hf_sbas_l1_mt26_igp_vertical_delay_est_9;
800
static int hf_sbas_l1_mt26_givei_9;
801
static int hf_sbas_l1_mt26_igp_vertical_delay_est_10;
802
static int hf_sbas_l1_mt26_givei_10;
803
static int hf_sbas_l1_mt26_igp_vertical_delay_est_11;
804
static int hf_sbas_l1_mt26_givei_11;
805
static int hf_sbas_l1_mt26_igp_vertical_delay_est_12;
806
static int hf_sbas_l1_mt26_givei_12;
807
static int hf_sbas_l1_mt26_igp_vertical_delay_est_13;
808
static int hf_sbas_l1_mt26_givei_13;
809
static int hf_sbas_l1_mt26_igp_vertical_delay_est_14;
810
static int hf_sbas_l1_mt26_givei_14;
811
static int hf_sbas_l1_mt26_igp_vertical_delay_est_15;
812
static int hf_sbas_l1_mt26_givei_15;
813
static int hf_sbas_l1_mt26_iodi_k;
814
static int hf_sbas_l1_mt26_spare;
815
816
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-89
817
static int hf_sbas_l1_mt27;
818
static int hf_sbas_l1_mt27_iods;
819
static int hf_sbas_l1_mt27_num_svc_msgs;
820
static int hf_sbas_l1_mt27_svc_msg_num;
821
static int hf_sbas_l1_mt27_num_regions;
822
static int hf_sbas_l1_mt27_prio_code;
823
static int hf_sbas_l1_mt27_dudre_in;
824
static int hf_sbas_l1_mt27_dudre_out;
825
static int hf_sbas_l1_mt27_region[5];
826
static int hf_sbas_l1_mt27_region_c1_lat[5];
827
static int hf_sbas_l1_mt27_region_c1_lon[5];
828
static int hf_sbas_l1_mt27_region_c2_lat[5];
829
static int hf_sbas_l1_mt27_region_c2_lon[5];
830
static int hf_sbas_l1_mt27_region_shape[5];
831
static int hf_sbas_l1_mt27_spare;
832
833
static int * const sbas_l1_mt27_region_fields[][6] = {
834
    {
835
        &hf_sbas_l1_mt27_region_c1_lat[0],
836
        &hf_sbas_l1_mt27_region_c1_lon[0],
837
        &hf_sbas_l1_mt27_region_c2_lat[0],
838
        &hf_sbas_l1_mt27_region_c2_lon[0],
839
        &hf_sbas_l1_mt27_region_shape[0],
840
        NULL
841
    },
842
    {
843
        &hf_sbas_l1_mt27_region_c1_lat[1],
844
        &hf_sbas_l1_mt27_region_c1_lon[1],
845
        &hf_sbas_l1_mt27_region_c2_lat[1],
846
        &hf_sbas_l1_mt27_region_c2_lon[1],
847
        &hf_sbas_l1_mt27_region_shape[1],
848
        NULL
849
    },
850
    {
851
        &hf_sbas_l1_mt27_region_c1_lat[2],
852
        &hf_sbas_l1_mt27_region_c1_lon[2],
853
        &hf_sbas_l1_mt27_region_c2_lat[2],
854
        &hf_sbas_l1_mt27_region_c2_lon[2],
855
        &hf_sbas_l1_mt27_region_shape[2],
856
        NULL
857
    },
858
    {
859
        &hf_sbas_l1_mt27_region_c1_lat[3],
860
        &hf_sbas_l1_mt27_region_c1_lon[3],
861
        &hf_sbas_l1_mt27_region_c2_lat[3],
862
        &hf_sbas_l1_mt27_region_c2_lon[3],
863
        &hf_sbas_l1_mt27_region_shape[3],
864
        NULL
865
    },
866
    {
867
        &hf_sbas_l1_mt27_region_c1_lat[4],
868
        &hf_sbas_l1_mt27_region_c1_lon[4],
869
        &hf_sbas_l1_mt27_region_c2_lat[4],
870
        &hf_sbas_l1_mt27_region_c2_lon[4],
871
        &hf_sbas_l1_mt27_region_shape[4],
872
        NULL
873
    },
874
};
875
876
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-91
877
static int hf_sbas_l1_mt28;
878
static int hf_sbas_l1_mt28_iodp;
879
static int hf_sbas_l1_mt28_prn_mask_nr_1;
880
static int hf_sbas_l1_mt28_scale_exp_1;
881
static int hf_sbas_l1_mt28_e_1_1_1;
882
static int hf_sbas_l1_mt28_e_2_2_1;
883
static int hf_sbas_l1_mt28_e_3_3_1;
884
static int hf_sbas_l1_mt28_e_4_4_1;
885
static int hf_sbas_l1_mt28_e_1_2_1;
886
static int hf_sbas_l1_mt28_e_1_3_1;
887
static int hf_sbas_l1_mt28_e_1_4_1;
888
static int hf_sbas_l1_mt28_e_2_3_1;
889
static int hf_sbas_l1_mt28_e_2_4_1;
890
static int hf_sbas_l1_mt28_e_3_4_1;
891
static int hf_sbas_l1_mt28_prn_mask_nr_2;
892
static int hf_sbas_l1_mt28_scale_exp_2;
893
static int hf_sbas_l1_mt28_e_1_1_2;
894
static int hf_sbas_l1_mt28_e_2_2_2;
895
static int hf_sbas_l1_mt28_e_3_3_2;
896
static int hf_sbas_l1_mt28_e_4_4_2;
897
static int hf_sbas_l1_mt28_e_1_2_2;
898
static int hf_sbas_l1_mt28_e_1_3_2;
899
static int hf_sbas_l1_mt28_e_1_4_2;
900
static int hf_sbas_l1_mt28_e_2_3_2;
901
static int hf_sbas_l1_mt28_e_2_4_2;
902
static int hf_sbas_l1_mt28_e_3_4_2;
903
904
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Table B-90
905
static int hf_sbas_l1_mt63;
906
static int hf_sbas_l1_mt63_spare_1;
907
static int hf_sbas_l1_mt63_spare_2;
908
static int hf_sbas_l1_mt63_spare_3;
909
910
static dissector_table_t sbas_l1_mt_dissector_table;
911
912
static expert_field ei_sbas_l1_preamble;
913
static expert_field ei_sbas_l1_mt0;
914
static expert_field ei_sbas_l1_crc;
915
static expert_field ei_sbas_l1_mt26_igp_band_id;
916
static expert_field ei_sbas_l1_mt26_igp_block_id;
917
918
static int ett_sbas_l1;
919
static int ett_sbas_l1_mt0;
920
static int ett_sbas_l1_mt1;
921
static int ett_sbas_l1_mt2;
922
static int ett_sbas_l1_mt3;
923
static int ett_sbas_l1_mt4;
924
static int ett_sbas_l1_mt5;
925
static int ett_sbas_l1_mt6;
926
static int ett_sbas_l1_mt7;
927
static int ett_sbas_l1_mt9;
928
static int ett_sbas_l1_mt10;
929
static int ett_sbas_l1_mt12;
930
static int ett_sbas_l1_mt17;
931
static int ett_sbas_l1_mt17_prn_data[3];
932
static int ett_sbas_l1_mt17_health_and_status;
933
static int ett_sbas_l1_mt18;
934
static int ett_sbas_l1_mt24;
935
static int ett_sbas_l1_mt25;
936
static int ett_sbas_l1_mt26;
937
static int ett_sbas_l1_mt27;
938
static int ett_sbas_l1_mt27_region[5];
939
static int ett_sbas_l1_mt28;
940
static int ett_sbas_l1_mt28_sv_1;
941
static int ett_sbas_l1_mt28_sv_2;
942
static int ett_sbas_l1_mt63;
943
944
// compute the CRC24Q checksum for an SBAS L1 nav msg
945
// see ICAO Annex 10, Vol I, 8th edition, Appendix B, Section 3.5.3.5
946
0
uint32_t sbas_crc24q(const uint8_t *data) {
947
0
    uint32_t crc = 0;
948
949
    // source byte and bit level index
950
0
    int s8 = 0, s1 = 7;
951
952
0
    uint8_t s,d = 0;
953
954
    // At byte level, nav msg needs to be right aligned.
955
    // So, pretend that 6 bits (with value zero) have been processed.
956
0
    uint8_t d1 = 6;
957
958
    // process 226 bits nav msg (= 28 bytes + 2 bits)
959
0
    while ((s8 < 28) || (s8 == 28 && s1 > 5)) {
960
961
        // get next bit from nav msg
962
0
        s = (data[s8] >> s1) & 0x01;
963
964
        // include next bit
965
0
        d = (d << 1) ^ s;
966
967
        // 8 bits included?
968
0
        if (d1 == 7) {
969
            // do crc update
970
0
            crc=((crc<<8) & 0xffffff) ^ CRC24Q_TBL[(crc>>16) ^ d];
971
972
0
            d1 = 0;
973
0
        }
974
0
        else {
975
0
            d1++;
976
0
        }
977
978
        // move to next byte if the last bit of current one was processed.
979
0
        if (s1 == 0) {
980
0
            s8++;
981
0
            s1 = 7;
982
0
        }
983
0
        else {
984
0
            s1--;
985
0
        }
986
0
    }
987
988
0
    return crc;
989
0
}
990
991
/* Format t_0t for SNT-UTC Conversion with 4096s resolution */
992
0
static void fmt_t_0t(char *label, uint32_t c) {
993
0
    snprintf(label, ITEM_LABEL_LENGTH, "%us", c * 4096);
994
0
}
995
996
/* Format GEO position (X or Y axis) with 2600m resolution */
997
0
static void fmt_geo_xy_position(char *label, int32_t c) {
998
0
    snprintf(label, ITEM_LABEL_LENGTH, "%d m", c * 2600);
999
0
}
1000
1001
/* Format GEO position (X or Y axis) with 0.08m resolution */
1002
0
static void fmt_geo_xy_position2(char *label, int64_t c) {
1003
0
    c = c * 8;
1004
0
    if (c >= 0) {
1005
0
        snprintf(label, ITEM_LABEL_LENGTH, "%" PRId64 ".%02" PRId64 "m", c / 100, c % 100);
1006
0
    }
1007
0
    else {
1008
0
        snprintf(label, ITEM_LABEL_LENGTH, "-%" PRId64 ".%02" PRId64 "m", -c / 100, -c % 100);
1009
0
    }
1010
0
}
1011
1012
/* Format GEO position (Z axis) with 26000m resolution */
1013
0
static void fmt_geo_z_position(char *label, int32_t c) {
1014
0
    snprintf(label, ITEM_LABEL_LENGTH, "%d m", c * 26000);
1015
0
}
1016
1017
/* Format GEO position (z axis) with 0.4m resolution */
1018
0
static void fmt_geo_z_position2(char *label, int64_t c) {
1019
0
    c = c * 4;
1020
0
    if (c >= 0) {
1021
0
        snprintf(label, ITEM_LABEL_LENGTH, "%" PRId64 ".%01" PRId64 "m", c / 10, c % 10);
1022
0
    }
1023
0
    else {
1024
0
        snprintf(label, ITEM_LABEL_LENGTH, "-%" PRId64 ".%01" PRId64 "m", -c / 10, -c % 10);
1025
0
    }
1026
0
}
1027
1028
/* Format GEO velocity (X or Y axis) with 10m/s resolution */
1029
0
static void fmt_geo_xy_velocity(char *label, int32_t c) {
1030
0
    snprintf(label, ITEM_LABEL_LENGTH, "%d m/s", c * 10);
1031
0
}
1032
1033
/* Format GEO velocity (X or Y axis) with 0.000625m/s resolution */
1034
0
static void fmt_geo_xy_velocity2(char *label, int32_t c) {
1035
0
    c = c * 625;
1036
0
    if (c >= 0) {
1037
0
        snprintf(label, ITEM_LABEL_LENGTH, "%d.%06d m/s", c / 1000000, c % 1000000);
1038
0
    }
1039
0
    else {
1040
0
        snprintf(label, ITEM_LABEL_LENGTH, "-%d.%06d m/s", -c / 1000000, -c % 1000000);
1041
0
    }
1042
0
}
1043
1044
/* Format GEO velocity (Z axis) with 60m/s resolution */
1045
0
static void fmt_geo_z_velocity(char *label, int32_t c) {
1046
0
    snprintf(label, ITEM_LABEL_LENGTH, "%d m/s", c * 60);
1047
0
}
1048
1049
/* Format GEO velocity (Z axis) with 0.004m/s resolution */
1050
0
static void fmt_geo_z_velocity2(char *label, int32_t c) {
1051
0
    c = c * 4;
1052
0
    if (c >= 0) {
1053
0
        snprintf(label, ITEM_LABEL_LENGTH, "%d.%03d m/s", c / 1000, c % 1000);
1054
0
    }
1055
0
    else {
1056
0
        snprintf(label, ITEM_LABEL_LENGTH, "-%d.%03d m/s", -c / 1000, -c % 1000);
1057
0
    }
1058
0
}
1059
1060
/* Format GEO acceleration (X or Y axis) with 0.0000125m/s^2 resolution */
1061
0
static void fmt_geo_xy_acceleration(char *label, int32_t c) {
1062
0
    c = c * 125;
1063
0
    if (c >= 0) {
1064
0
        snprintf(label, ITEM_LABEL_LENGTH, "%d.%07d m/s", c / 10000000, c % 10000000);
1065
0
    }
1066
0
    else {
1067
0
        snprintf(label, ITEM_LABEL_LENGTH, "-%d.%07d m/s", -c / 10000000, -c % 10000000);
1068
0
    }
1069
0
}
1070
1071
/* Format GEO acceleration (Z axis) with 0.0000625m/s^2 resolution */
1072
0
static void fmt_geo_z_acceleration(char *label, int32_t c) {
1073
0
    c = c * 625;
1074
0
    if (c >= 0) {
1075
0
        snprintf(label, ITEM_LABEL_LENGTH, "%d.%07d m/s", c / 10000000, c % 10000000);
1076
0
    }
1077
0
    else {
1078
0
        snprintf(label, ITEM_LABEL_LENGTH, "-%d.%07d m/s", -c / 10000000, -c % 10000000);
1079
0
    }
1080
0
}
1081
1082
/* Format time of almanac with 64s resolution */
1083
0
static void fmt_time_of_almanac(char *label, uint32_t c) {
1084
0
    c = c * 64;
1085
0
    snprintf(label, ITEM_LABEL_LENGTH, "%us (%02u:%02u:%02u)", c, c / 3600, (c / 60) % 60, c % 60);
1086
0
}
1087
1088
/* Format clock corrections */
1089
0
static void fmt_clock_correction(char *label, int32_t c) {
1090
0
    snprintf(label, ITEM_LABEL_LENGTH, "%d * 2^-31 s", c);
1091
0
}
1092
1093
/* Format corrections with 0.125m resolution */
1094
0
static void fmt_correction_125m(char *label, int32_t c) {
1095
0
    c = c * 125;
1096
0
    if (c >= 0) {
1097
0
        snprintf(label, ITEM_LABEL_LENGTH, "%d.%03dm", c / 1000, c % 1000);
1098
0
    }
1099
0
    else {
1100
0
        snprintf(label, ITEM_LABEL_LENGTH, "-%d.%03dm", -c / 1000, -c % 1000);
1101
0
    }
1102
0
}
1103
1104
/* Format velocity corrections with 2^-11 m/s resolution */
1105
0
static void fmt_velo_correction(char *label, int32_t c) {
1106
0
    int64_t temp = c * INT64_C(48828125);
1107
0
    if (c >= 0) {
1108
0
        snprintf(label, ITEM_LABEL_LENGTH, " %" PRId64 ".%011" PRId64 "m/s", temp / 100000000000, temp % 100000000000);
1109
0
    }
1110
0
    else {
1111
0
        snprintf(label, ITEM_LABEL_LENGTH, "-%" PRId64 ".%011" PRId64 "m/s", -temp / 100000000000, -temp % 100000000000);
1112
0
    }
1113
0
}
1114
1115
/* Format clock rate corrections with 2^-39 s/s resolution */
1116
0
static void fmt_clk_rate_correction(char *label, int32_t c) {
1117
0
    snprintf(label, ITEM_LABEL_LENGTH, "%d * 2^-39s/s", c);
1118
0
}
1119
1120
/* Format clock rate corrections with 2^-40 s/s resolution */
1121
0
static void fmt_clk_rate_correction2(char *label, int32_t c) {
1122
0
    snprintf(label, ITEM_LABEL_LENGTH, "%d * 2^-40s/s", c);
1123
0
}
1124
1125
/* Format time of applicability with 16s resolution */
1126
0
static void fmt_time_of_applicability(char *label, uint32_t c) {
1127
0
    c = c * 16;
1128
0
    snprintf(label, ITEM_LABEL_LENGTH, "%us (%02u:%02u:%02u)", c, c / 3600, (c / 60) % 60, c % 60);
1129
0
}
1130
1131
/* Format with 0.1 resolution */
1132
0
static void fmt_0_1(char *label, uint32_t c) {
1133
0
    snprintf(label, ITEM_LABEL_LENGTH, "%u.%01u", c / 10, c % 10);
1134
0
}
1135
1136
/* Format with 0.5m resolution */
1137
0
static void fmt_0_5m(char *label, uint32_t c) {
1138
0
    snprintf(label, ITEM_LABEL_LENGTH, "%u.%01um", c * 5 / 10, (c * 5) % 10);
1139
0
}
1140
1141
/* Format with 0.001m resolution */
1142
0
static void fmt_0_001m(char *label, uint32_t c) {
1143
0
    snprintf(label, ITEM_LABEL_LENGTH, "%u.%03um", c * 1 / 1000, (c * 1) % 1000);
1144
0
}
1145
1146
/* Format with 0.002m resolution */
1147
0
static void fmt_0_002m(char *label, uint32_t c) {
1148
0
    snprintf(label, ITEM_LABEL_LENGTH, "%u.%03um", c * 2 / 1000, (c * 2) % 1000);
1149
0
}
1150
1151
/* Format with 0.0005m resolution */
1152
0
static void fmt_0_0005m(char *label, uint32_t c) {
1153
0
    snprintf(label, ITEM_LABEL_LENGTH, "%u.%04um", c * 5 / 10000, (c * 5) % 10000);
1154
0
}
1155
1156
/* Format with 0.00005m/s resolution */
1157
0
static void fmt_0_00005ms(char *label, uint32_t c) {
1158
0
    snprintf(label, ITEM_LABEL_LENGTH, "%u.%05um/s", c * 5 / 100000, (c * 5) % 100000);
1159
0
}
1160
1161
/* Format with 0.000005m/s resolution */
1162
0
static void fmt_0_000005ms(char *label, uint32_t c) {
1163
0
    snprintf(label, ITEM_LABEL_LENGTH, "%u.%06um/s", c * 5 / 1000000, (c * 5) % 1000000);
1164
0
}
1165
1166
/* Format MT27 service message number data */
1167
0
static void fmt_num_svc_msg(char *label, uint32_t c) {
1168
0
    c = c + 1;
1169
0
    snprintf(label, ITEM_LABEL_LENGTH, "%u", c);
1170
0
}
1171
1172
/* Dissect SBAS L1 message */
1173
0
static int dissect_sbas_l1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1174
0
    tvbuff_t *next_tvb;
1175
0
    uint32_t preamble, mt, cmp_crc;
1176
1177
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1");
1178
0
    col_clear(pinfo->cinfo, COL_INFO);
1179
1180
0
    proto_item *ti = proto_tree_add_item(tree, proto_sbas_l1, tvb, 0, 32, ENC_NA);
1181
0
    proto_tree *sbas_l1_tree = proto_item_add_subtree(ti, ett_sbas_l1);
1182
1183
    // preamble
1184
0
    proto_item* pi_preamble = proto_tree_add_item_ret_uint(
1185
0
            sbas_l1_tree, hf_sbas_l1_preamble,
1186
0
            tvb, 0, 1, ENC_BIG_ENDIAN,
1187
0
            &preamble);
1188
0
    if (preamble != SBAS_L1_PREAMBLE_1 &&
1189
0
            preamble != SBAS_L1_PREAMBLE_2 &&
1190
0
            preamble != SBAS_L1_PREAMBLE_3) {
1191
0
        expert_add_info(pinfo, pi_preamble, &ei_sbas_l1_preamble);
1192
0
    }
1193
1194
    // message type
1195
0
    proto_item* pi_mt = proto_tree_add_item_ret_uint(
1196
0
            sbas_l1_tree, hf_sbas_l1_mt,
1197
0
            tvb, 1, 1, ENC_BIG_ENDIAN,
1198
0
            &mt);
1199
0
    if (mt == 0) { // flag "Do Not Use" MT0 messages
1200
0
        expert_add_info(pinfo, pi_mt, &ei_sbas_l1_mt0);
1201
0
    }
1202
1203
    // checksum
1204
0
    cmp_crc = sbas_crc24q((uint8_t *)tvb_memdup(pinfo->pool, tvb, 0, 29));
1205
0
    proto_tree_add_checksum(sbas_l1_tree, tvb, 28, hf_sbas_l1_chksum, -1,
1206
0
            &ei_sbas_l1_crc, NULL, cmp_crc, ENC_BIG_ENDIAN, PROTO_CHECKSUM_VERIFY);
1207
1208
    // try to dissect MT data
1209
0
    next_tvb = tvb_new_subset_length(tvb, 1, 28);
1210
0
    if (!dissector_try_uint(sbas_l1_mt_dissector_table, mt, next_tvb, pinfo, tree)) {
1211
0
        call_data_dissector(next_tvb, pinfo, tree);
1212
0
    }
1213
1214
0
    return tvb_captured_length(tvb);
1215
0
}
1216
1217
/* Dissect SBAS L1 MT 0 */
1218
0
static int dissect_sbas_l1_mt0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1219
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT0");
1220
0
    col_clear(pinfo->cinfo, COL_INFO);
1221
1222
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt0, tvb, 0, 32, ENC_NA);
1223
0
    proto_tree *sbas_l1_mt0_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt0);
1224
1225
0
    proto_tree_add_item(sbas_l1_mt0_tree, hf_sbas_l1_mt0_spare_1, tvb,  0,  1, ENC_NA);
1226
0
    proto_tree_add_item(sbas_l1_mt0_tree, hf_sbas_l1_mt0_spare_2, tvb,  1, 26, ENC_NA);
1227
0
    proto_tree_add_item(sbas_l1_mt0_tree, hf_sbas_l1_mt0_spare_3, tvb, 27,  1, ENC_NA);
1228
1229
0
    return tvb_captured_length(tvb);
1230
0
}
1231
1232
/* Dissect SBAS L1 MT 1 */
1233
0
static int dissect_sbas_l1_mt1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1234
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT1");
1235
0
    col_clear(pinfo->cinfo, COL_INFO);
1236
1237
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt1, tvb, 0, 32, ENC_NA);
1238
0
    proto_tree *sbas_l1_mt1_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt1);
1239
1240
0
    proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_gps,     tvb, 0,  8, ENC_BIG_ENDIAN);
1241
0
    proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_glonass, tvb, 5,  8, ENC_BIG_ENDIAN);
1242
0
    proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_spare_1, tvb, 8,  8, ENC_BIG_ENDIAN);
1243
0
    proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_sbas,    tvb, 15, 8, ENC_BIG_ENDIAN);
1244
0
    proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_prn_mask_spare_2, tvb, 20, 8, ENC_BIG_ENDIAN);
1245
0
    proto_tree_add_item(sbas_l1_mt1_tree, hf_sbas_l1_mt1_iodp,             tvb, 27, 1, ENC_NA);
1246
1247
0
    return tvb_captured_length(tvb);
1248
0
}
1249
1250
/* Dissect SBAS L1 MT 2 */
1251
0
static int dissect_sbas_l1_mt2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1252
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT2");
1253
0
    col_clear(pinfo->cinfo, COL_INFO);
1254
1255
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt2, tvb, 0, 32, ENC_NA);
1256
0
    proto_tree *sbas_l1_mt2_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt2);
1257
1258
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_iodf_2,   tvb, 0,  1, ENC_NA);
1259
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_iodp,     tvb, 1,  1, ENC_NA);
1260
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_1,     tvb, 1,  4, ENC_BIG_ENDIAN);
1261
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_2,     tvb, 2,  4, ENC_BIG_ENDIAN);
1262
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_3,     tvb, 4,  4, ENC_BIG_ENDIAN);
1263
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_4,     tvb, 5,  4, ENC_BIG_ENDIAN);
1264
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_5,     tvb, 7,  4, ENC_BIG_ENDIAN);
1265
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_6,     tvb, 8,  4, ENC_BIG_ENDIAN);
1266
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_7,     tvb, 10, 4, ENC_BIG_ENDIAN);
1267
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_8,     tvb, 11, 4, ENC_BIG_ENDIAN);
1268
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_9,     tvb, 13, 4, ENC_BIG_ENDIAN);
1269
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_10,    tvb, 14, 4, ENC_BIG_ENDIAN);
1270
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_11,    tvb, 16, 4, ENC_BIG_ENDIAN);
1271
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_12,    tvb, 17, 4, ENC_BIG_ENDIAN);
1272
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_fc_13,    tvb, 19, 4, ENC_BIG_ENDIAN);
1273
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_1,  tvb, 20, 2, ENC_BIG_ENDIAN);
1274
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_2,  tvb, 21, 2, ENC_BIG_ENDIAN);
1275
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_3,  tvb, 21, 2, ENC_BIG_ENDIAN);
1276
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_4,  tvb, 22, 2, ENC_BIG_ENDIAN);
1277
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_5,  tvb, 22, 2, ENC_BIG_ENDIAN);
1278
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_6,  tvb, 23, 2, ENC_BIG_ENDIAN);
1279
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_7,  tvb, 23, 2, ENC_BIG_ENDIAN);
1280
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_8,  tvb, 24, 2, ENC_BIG_ENDIAN);
1281
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_9,  tvb, 24, 2, ENC_BIG_ENDIAN);
1282
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_10, tvb, 25, 2, ENC_BIG_ENDIAN);
1283
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_11, tvb, 25, 2, ENC_BIG_ENDIAN);
1284
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_12, tvb, 26, 2, ENC_BIG_ENDIAN);
1285
0
    proto_tree_add_item(sbas_l1_mt2_tree, hf_sbas_l1_mt2_udrei_13, tvb, 26, 2, ENC_BIG_ENDIAN);
1286
1287
0
    return tvb_captured_length(tvb);
1288
0
}
1289
1290
/* Dissect SBAS L1 MT 3 */
1291
0
static int dissect_sbas_l1_mt3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1292
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT3");
1293
0
    col_clear(pinfo->cinfo, COL_INFO);
1294
1295
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt3, tvb, 0, 32, ENC_NA);
1296
0
    proto_tree *sbas_l1_mt3_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt3);
1297
1298
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_iodf_3,   tvb, 0,  1, ENC_NA);
1299
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_iodp,     tvb, 1,  1, ENC_NA);
1300
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_14,    tvb, 1,  4, ENC_BIG_ENDIAN);
1301
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_15,    tvb, 2,  4, ENC_BIG_ENDIAN);
1302
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_16,    tvb, 4,  4, ENC_BIG_ENDIAN);
1303
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_17,    tvb, 5,  4, ENC_BIG_ENDIAN);
1304
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_18,    tvb, 7,  4, ENC_BIG_ENDIAN);
1305
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_19,    tvb, 8,  4, ENC_BIG_ENDIAN);
1306
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_20,    tvb, 10, 4, ENC_BIG_ENDIAN);
1307
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_21,    tvb, 11, 4, ENC_BIG_ENDIAN);
1308
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_22,    tvb, 13, 4, ENC_BIG_ENDIAN);
1309
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_23,    tvb, 14, 4, ENC_BIG_ENDIAN);
1310
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_24,    tvb, 16, 4, ENC_BIG_ENDIAN);
1311
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_25,    tvb, 17, 4, ENC_BIG_ENDIAN);
1312
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_fc_26,    tvb, 19, 4, ENC_BIG_ENDIAN);
1313
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_14, tvb, 20, 2, ENC_BIG_ENDIAN);
1314
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_15, tvb, 21, 2, ENC_BIG_ENDIAN);
1315
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_16, tvb, 21, 2, ENC_BIG_ENDIAN);
1316
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_17, tvb, 22, 2, ENC_BIG_ENDIAN);
1317
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_18, tvb, 22, 2, ENC_BIG_ENDIAN);
1318
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_19, tvb, 23, 2, ENC_BIG_ENDIAN);
1319
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_20, tvb, 23, 2, ENC_BIG_ENDIAN);
1320
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_21, tvb, 24, 2, ENC_BIG_ENDIAN);
1321
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_22, tvb, 24, 2, ENC_BIG_ENDIAN);
1322
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_23, tvb, 25, 2, ENC_BIG_ENDIAN);
1323
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_24, tvb, 25, 2, ENC_BIG_ENDIAN);
1324
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_25, tvb, 26, 2, ENC_BIG_ENDIAN);
1325
0
    proto_tree_add_item(sbas_l1_mt3_tree, hf_sbas_l1_mt3_udrei_26, tvb, 26, 2, ENC_BIG_ENDIAN);
1326
1327
0
    return tvb_captured_length(tvb);
1328
0
}
1329
1330
/* Dissect SBAS L1 MT 4 */
1331
0
static int dissect_sbas_l1_mt4(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1332
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT4");
1333
0
    col_clear(pinfo->cinfo, COL_INFO);
1334
1335
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt4, tvb, 0, 32, ENC_NA);
1336
0
    proto_tree *sbas_l1_mt4_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt4);
1337
1338
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_iodf_4,   tvb, 0,  1, ENC_NA);
1339
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_iodp,     tvb, 1,  1, ENC_NA);
1340
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_27,    tvb, 1,  4, ENC_BIG_ENDIAN);
1341
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_28,    tvb, 2,  4, ENC_BIG_ENDIAN);
1342
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_29,    tvb, 4,  4, ENC_BIG_ENDIAN);
1343
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_30,    tvb, 5,  4, ENC_BIG_ENDIAN);
1344
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_31,    tvb, 7,  4, ENC_BIG_ENDIAN);
1345
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_32,    tvb, 8,  4, ENC_BIG_ENDIAN);
1346
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_33,    tvb, 10, 4, ENC_BIG_ENDIAN);
1347
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_34,    tvb, 11, 4, ENC_BIG_ENDIAN);
1348
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_35,    tvb, 13, 4, ENC_BIG_ENDIAN);
1349
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_36,    tvb, 14, 4, ENC_BIG_ENDIAN);
1350
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_37,    tvb, 16, 4, ENC_BIG_ENDIAN);
1351
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_38,    tvb, 17, 4, ENC_BIG_ENDIAN);
1352
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_fc_39,    tvb, 19, 4, ENC_BIG_ENDIAN);
1353
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_27, tvb, 20, 2, ENC_BIG_ENDIAN);
1354
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_28, tvb, 21, 2, ENC_BIG_ENDIAN);
1355
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_29, tvb, 21, 2, ENC_BIG_ENDIAN);
1356
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_30, tvb, 22, 2, ENC_BIG_ENDIAN);
1357
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_31, tvb, 22, 2, ENC_BIG_ENDIAN);
1358
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_32, tvb, 23, 2, ENC_BIG_ENDIAN);
1359
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_33, tvb, 23, 2, ENC_BIG_ENDIAN);
1360
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_34, tvb, 24, 2, ENC_BIG_ENDIAN);
1361
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_35, tvb, 24, 2, ENC_BIG_ENDIAN);
1362
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_36, tvb, 25, 2, ENC_BIG_ENDIAN);
1363
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_37, tvb, 25, 2, ENC_BIG_ENDIAN);
1364
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_38, tvb, 26, 2, ENC_BIG_ENDIAN);
1365
0
    proto_tree_add_item(sbas_l1_mt4_tree, hf_sbas_l1_mt4_udrei_39, tvb, 26, 2, ENC_BIG_ENDIAN);
1366
1367
0
    return tvb_captured_length(tvb);
1368
0
}
1369
1370
/* Dissect SBAS L1 MT 5 */
1371
0
static int dissect_sbas_l1_mt5(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1372
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT5");
1373
0
    col_clear(pinfo->cinfo, COL_INFO);
1374
1375
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt5, tvb, 0, 32, ENC_NA);
1376
0
    proto_tree *sbas_l1_mt5_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt5);
1377
1378
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_iodf_5,   tvb, 0,  1, ENC_NA);
1379
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_iodp,     tvb, 1,  1, ENC_NA);
1380
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_40,    tvb, 1,  4, ENC_BIG_ENDIAN);
1381
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_41,    tvb, 2,  4, ENC_BIG_ENDIAN);
1382
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_42,    tvb, 4,  4, ENC_BIG_ENDIAN);
1383
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_43,    tvb, 5,  4, ENC_BIG_ENDIAN);
1384
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_44,    tvb, 7,  4, ENC_BIG_ENDIAN);
1385
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_45,    tvb, 8,  4, ENC_BIG_ENDIAN);
1386
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_46,    tvb, 10, 4, ENC_BIG_ENDIAN);
1387
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_47,    tvb, 11, 4, ENC_BIG_ENDIAN);
1388
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_48,    tvb, 13, 4, ENC_BIG_ENDIAN);
1389
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_49,    tvb, 14, 4, ENC_BIG_ENDIAN);
1390
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_50,    tvb, 16, 4, ENC_BIG_ENDIAN);
1391
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_51,    tvb, 17, 4, ENC_BIG_ENDIAN);
1392
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_fc_52,    tvb, 19, 4, ENC_BIG_ENDIAN);
1393
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_40, tvb, 20, 2, ENC_BIG_ENDIAN);
1394
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_41, tvb, 21, 2, ENC_BIG_ENDIAN);
1395
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_42, tvb, 21, 2, ENC_BIG_ENDIAN);
1396
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_43, tvb, 22, 2, ENC_BIG_ENDIAN);
1397
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_44, tvb, 22, 2, ENC_BIG_ENDIAN);
1398
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_45, tvb, 23, 2, ENC_BIG_ENDIAN);
1399
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_46, tvb, 23, 2, ENC_BIG_ENDIAN);
1400
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_47, tvb, 24, 2, ENC_BIG_ENDIAN);
1401
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_48, tvb, 24, 2, ENC_BIG_ENDIAN);
1402
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_49, tvb, 25, 2, ENC_BIG_ENDIAN);
1403
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_50, tvb, 25, 2, ENC_BIG_ENDIAN);
1404
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_51, tvb, 26, 2, ENC_BIG_ENDIAN);
1405
0
    proto_tree_add_item(sbas_l1_mt5_tree, hf_sbas_l1_mt5_udrei_52, tvb, 26, 2, ENC_BIG_ENDIAN);
1406
1407
0
    return tvb_captured_length(tvb);
1408
0
}
1409
1410
/* Dissect SBAS L1 MT 6 */
1411
0
static int dissect_sbas_l1_mt6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1412
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT6");
1413
0
    col_clear(pinfo->cinfo, COL_INFO);
1414
1415
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt6, tvb, 0, 32, ENC_NA);
1416
0
    proto_tree *sbas_l1_mt6_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt6);
1417
1418
    // IODF_2 to IODF_5
1419
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_2, tvb, 0, 1, ENC_NA);
1420
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_3, tvb, 1, 1, ENC_NA);
1421
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_4, tvb, 1, 1, ENC_NA);
1422
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_iodf_5, tvb, 1, 1, ENC_NA);
1423
1424
    // UDREI_i
1425
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_1,  tvb, 1,  2, ENC_BIG_ENDIAN);
1426
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_2,  tvb, 2,  2, ENC_BIG_ENDIAN);
1427
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_3,  tvb, 2,  2, ENC_BIG_ENDIAN);
1428
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_4,  tvb, 3,  2, ENC_BIG_ENDIAN);
1429
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_5,  tvb, 3,  2, ENC_BIG_ENDIAN);
1430
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_6,  tvb, 4,  2, ENC_BIG_ENDIAN);
1431
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_7,  tvb, 4,  2, ENC_BIG_ENDIAN);
1432
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_8,  tvb, 5,  2, ENC_BIG_ENDIAN);
1433
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_9,  tvb, 5,  2, ENC_BIG_ENDIAN);
1434
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_10, tvb, 6,  2, ENC_BIG_ENDIAN);
1435
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_11, tvb, 6,  2, ENC_BIG_ENDIAN);
1436
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_12, tvb, 7,  2, ENC_BIG_ENDIAN);
1437
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_13, tvb, 7,  2, ENC_BIG_ENDIAN);
1438
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_14, tvb, 8,  2, ENC_BIG_ENDIAN);
1439
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_15, tvb, 8,  2, ENC_BIG_ENDIAN);
1440
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_16, tvb, 9,  2, ENC_BIG_ENDIAN);
1441
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_17, tvb, 9,  2, ENC_BIG_ENDIAN);
1442
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_18, tvb, 10, 2, ENC_BIG_ENDIAN);
1443
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_19, tvb, 10, 2, ENC_BIG_ENDIAN);
1444
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_20, tvb, 11, 2, ENC_BIG_ENDIAN);
1445
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_21, tvb, 11, 2, ENC_BIG_ENDIAN);
1446
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_22, tvb, 12, 2, ENC_BIG_ENDIAN);
1447
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_23, tvb, 12, 2, ENC_BIG_ENDIAN);
1448
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_24, tvb, 13, 2, ENC_BIG_ENDIAN);
1449
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_25, tvb, 13, 2, ENC_BIG_ENDIAN);
1450
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_26, tvb, 14, 2, ENC_BIG_ENDIAN);
1451
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_27, tvb, 14, 2, ENC_BIG_ENDIAN);
1452
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_28, tvb, 15, 2, ENC_BIG_ENDIAN);
1453
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_29, tvb, 15, 2, ENC_BIG_ENDIAN);
1454
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_30, tvb, 16, 2, ENC_BIG_ENDIAN);
1455
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_31, tvb, 16, 2, ENC_BIG_ENDIAN);
1456
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_32, tvb, 17, 2, ENC_BIG_ENDIAN);
1457
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_33, tvb, 17, 2, ENC_BIG_ENDIAN);
1458
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_34, tvb, 18, 2, ENC_BIG_ENDIAN);
1459
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_35, tvb, 18, 2, ENC_BIG_ENDIAN);
1460
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_36, tvb, 19, 2, ENC_BIG_ENDIAN);
1461
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_37, tvb, 19, 2, ENC_BIG_ENDIAN);
1462
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_38, tvb, 20, 2, ENC_BIG_ENDIAN);
1463
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_39, tvb, 20, 2, ENC_BIG_ENDIAN);
1464
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_40, tvb, 21, 2, ENC_BIG_ENDIAN);
1465
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_41, tvb, 21, 2, ENC_BIG_ENDIAN);
1466
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_42, tvb, 22, 2, ENC_BIG_ENDIAN);
1467
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_43, tvb, 22, 2, ENC_BIG_ENDIAN);
1468
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_44, tvb, 23, 2, ENC_BIG_ENDIAN);
1469
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_45, tvb, 23, 2, ENC_BIG_ENDIAN);
1470
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_46, tvb, 24, 2, ENC_BIG_ENDIAN);
1471
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_47, tvb, 24, 2, ENC_BIG_ENDIAN);
1472
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_48, tvb, 25, 2, ENC_BIG_ENDIAN);
1473
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_49, tvb, 25, 2, ENC_BIG_ENDIAN);
1474
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_50, tvb, 26, 2, ENC_BIG_ENDIAN);
1475
0
    proto_tree_add_item(sbas_l1_mt6_tree, hf_sbas_l1_mt6_udrei_51, tvb, 26, 2, ENC_BIG_ENDIAN);
1476
1477
0
    return tvb_captured_length(tvb);
1478
0
}
1479
1480
/* Dissect SBAS L1 MT 7 */
1481
0
static int dissect_sbas_l1_mt7(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1482
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT7");
1483
0
    col_clear(pinfo->cinfo, COL_INFO);
1484
1485
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt7, tvb, 0, 32, ENC_NA);
1486
0
    proto_tree *sbas_l1_mt7_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt7);
1487
1488
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_t_lat,  tvb, 0, 2, ENC_BIG_ENDIAN);
1489
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_iodp,   tvb, 1, 1, ENC_NA);
1490
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_spare,  tvb, 1, 1, ENC_NA);
1491
1492
    // Degradation factor indicator ai_i
1493
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_1,  tvb, 1,  2, ENC_BIG_ENDIAN);
1494
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_2,  tvb, 2,  2, ENC_BIG_ENDIAN);
1495
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_3,  tvb, 2,  2, ENC_BIG_ENDIAN);
1496
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_4,  tvb, 3,  2, ENC_BIG_ENDIAN);
1497
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_5,  tvb, 3,  2, ENC_BIG_ENDIAN);
1498
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_6,  tvb, 4,  2, ENC_BIG_ENDIAN);
1499
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_7,  tvb, 4,  2, ENC_BIG_ENDIAN);
1500
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_8,  tvb, 5,  2, ENC_BIG_ENDIAN);
1501
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_9,  tvb, 5,  2, ENC_BIG_ENDIAN);
1502
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_10, tvb, 6,  2, ENC_BIG_ENDIAN);
1503
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_11, tvb, 6,  2, ENC_BIG_ENDIAN);
1504
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_12, tvb, 7,  2, ENC_BIG_ENDIAN);
1505
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_13, tvb, 7,  2, ENC_BIG_ENDIAN);
1506
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_14, tvb, 8,  2, ENC_BIG_ENDIAN);
1507
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_15, tvb, 8,  2, ENC_BIG_ENDIAN);
1508
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_16, tvb, 9,  2, ENC_BIG_ENDIAN);
1509
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_17, tvb, 9,  2, ENC_BIG_ENDIAN);
1510
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_18, tvb, 10, 2, ENC_BIG_ENDIAN);
1511
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_19, tvb, 10, 2, ENC_BIG_ENDIAN);
1512
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_20, tvb, 11, 2, ENC_BIG_ENDIAN);
1513
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_21, tvb, 11, 2, ENC_BIG_ENDIAN);
1514
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_22, tvb, 12, 2, ENC_BIG_ENDIAN);
1515
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_23, tvb, 12, 2, ENC_BIG_ENDIAN);
1516
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_24, tvb, 13, 2, ENC_BIG_ENDIAN);
1517
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_25, tvb, 13, 2, ENC_BIG_ENDIAN);
1518
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_26, tvb, 14, 2, ENC_BIG_ENDIAN);
1519
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_27, tvb, 14, 2, ENC_BIG_ENDIAN);
1520
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_28, tvb, 15, 2, ENC_BIG_ENDIAN);
1521
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_29, tvb, 15, 2, ENC_BIG_ENDIAN);
1522
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_30, tvb, 16, 2, ENC_BIG_ENDIAN);
1523
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_31, tvb, 16, 2, ENC_BIG_ENDIAN);
1524
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_32, tvb, 17, 2, ENC_BIG_ENDIAN);
1525
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_33, tvb, 17, 2, ENC_BIG_ENDIAN);
1526
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_34, tvb, 18, 2, ENC_BIG_ENDIAN);
1527
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_35, tvb, 18, 2, ENC_BIG_ENDIAN);
1528
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_36, tvb, 19, 2, ENC_BIG_ENDIAN);
1529
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_37, tvb, 19, 2, ENC_BIG_ENDIAN);
1530
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_38, tvb, 20, 2, ENC_BIG_ENDIAN);
1531
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_39, tvb, 20, 2, ENC_BIG_ENDIAN);
1532
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_40, tvb, 21, 2, ENC_BIG_ENDIAN);
1533
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_41, tvb, 21, 2, ENC_BIG_ENDIAN);
1534
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_42, tvb, 22, 2, ENC_BIG_ENDIAN);
1535
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_43, tvb, 22, 2, ENC_BIG_ENDIAN);
1536
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_44, tvb, 23, 2, ENC_BIG_ENDIAN);
1537
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_45, tvb, 23, 2, ENC_BIG_ENDIAN);
1538
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_46, tvb, 24, 2, ENC_BIG_ENDIAN);
1539
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_47, tvb, 24, 2, ENC_BIG_ENDIAN);
1540
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_48, tvb, 25, 2, ENC_BIG_ENDIAN);
1541
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_49, tvb, 25, 2, ENC_BIG_ENDIAN);
1542
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_50, tvb, 26, 2, ENC_BIG_ENDIAN);
1543
0
    proto_tree_add_item(sbas_l1_mt7_tree, hf_sbas_l1_mt7_ai_51, tvb, 26, 2, ENC_BIG_ENDIAN);
1544
1545
0
    return tvb_captured_length(tvb);
1546
0
}
1547
1548
/* Dissect SBAS L1 MT 9 */
1549
0
static int dissect_sbas_l1_mt9(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1550
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT9");
1551
0
    col_clear(pinfo->cinfo, COL_INFO);
1552
1553
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt9, tvb, 0, 32, ENC_NA);
1554
0
    proto_tree *sbas_l1_mt9_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt9);
1555
1556
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_reserved, tvb,  0, 4, ENC_BIG_ENDIAN);
1557
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_t_0_geo,  tvb,  0, 4, ENC_BIG_ENDIAN);
1558
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_ura,      tvb,  0, 4, ENC_BIG_ENDIAN);
1559
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_x_g,      tvb,  3, 8, ENC_BIG_ENDIAN);
1560
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_y_g,      tvb,  7, 8, ENC_BIG_ENDIAN);
1561
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_z_g,      tvb, 11, 8, ENC_BIG_ENDIAN);
1562
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_x_g_vel,  tvb, 14, 4, ENC_BIG_ENDIAN);
1563
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_y_g_vel,  tvb, 16, 4, ENC_BIG_ENDIAN);
1564
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_z_g_vel,  tvb, 18, 4, ENC_BIG_ENDIAN);
1565
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_x_g_acc,  tvb, 21, 4, ENC_BIG_ENDIAN);
1566
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_y_g_acc,  tvb, 21, 4, ENC_BIG_ENDIAN);
1567
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_z_g_acc,  tvb, 21, 4, ENC_BIG_ENDIAN);
1568
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_a_gf0,    tvb, 24, 4, ENC_BIG_ENDIAN);
1569
0
    proto_tree_add_item(sbas_l1_mt9_tree, hf_sbas_l1_mt9_a_gf1,    tvb, 24, 4, ENC_BIG_ENDIAN);
1570
1571
0
    return tvb_captured_length(tvb);
1572
0
}
1573
1574
/* Dissect SBAS L1 MT 10 */
1575
0
static int dissect_sbas_l1_mt10(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1576
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT10");
1577
0
    col_clear(pinfo->cinfo, COL_INFO);
1578
1579
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt10, tvb, 0, 32, ENC_NA);
1580
0
    proto_tree *sbas_l1_mt10_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt10);
1581
1582
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_b_rrc,        tvb,  0, 4, ENC_BIG_ENDIAN);
1583
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_c_ltc_lsb,    tvb,  0, 4, ENC_BIG_ENDIAN);
1584
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_c_ltc_v1,     tvb,  3, 4, ENC_BIG_ENDIAN);
1585
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_i_ltc_v1,     tvb,  3, 4, ENC_BIG_ENDIAN);
1586
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_c_ltc_v0,     tvb,  3, 4, ENC_BIG_ENDIAN);
1587
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_i_ltc_v0,     tvb,  6, 4, ENC_BIG_ENDIAN);
1588
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_c_geo_lsb,    tvb,  6, 4, ENC_BIG_ENDIAN);
1589
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_c_geo_v,      tvb,  9, 4, ENC_BIG_ENDIAN);
1590
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_i_geo,        tvb,  9, 4, ENC_BIG_ENDIAN);
1591
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_c_er,         tvb,  9, 4, ENC_BIG_ENDIAN);
1592
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_c_iono_step,  tvb, 12, 4, ENC_BIG_ENDIAN);
1593
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_i_iono,       tvb, 12, 4, ENC_BIG_ENDIAN);
1594
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_c_iono_ramp,  tvb, 12, 4, ENC_BIG_ENDIAN);
1595
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_rss_udre,     tvb, 16, 4, ENC_BIG_ENDIAN);
1596
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_rss_iono,     tvb, 16, 4, ENC_BIG_ENDIAN);
1597
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_c_covariance, tvb, 16, 4, ENC_BIG_ENDIAN);
1598
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_spare_1,      tvb, 16, 4, ENC_BIG_ENDIAN);
1599
0
    proto_tree_add_item(sbas_l1_mt10_tree, hf_sbas_l1_mt10_spare_2,      tvb, 20, 8, ENC_BIG_ENDIAN);
1600
1601
0
    return tvb_captured_length(tvb);
1602
0
}
1603
1604
1605
/* Dissect SBAS L1 MT 12 */
1606
0
static int dissect_sbas_l1_mt12(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1607
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT12");
1608
0
    col_clear(pinfo->cinfo, COL_INFO);
1609
1610
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt12, tvb, 0, 32, ENC_NA);
1611
0
    proto_tree *sbas_l1_mt12_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt12);
1612
1613
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_a_1snt,        tvb,  0, 4, ENC_BIG_ENDIAN);
1614
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_a_0snt,        tvb,  3, 8, ENC_BIG_ENDIAN);
1615
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_t_0t,          tvb,  7, 2, ENC_BIG_ENDIAN);
1616
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_wn_t,          tvb,  8, 2, ENC_BIG_ENDIAN);
1617
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_delta_t_ls,    tvb,  9, 2, ENC_BIG_ENDIAN);
1618
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_wn_lsf,        tvb, 10, 2, ENC_BIG_ENDIAN);
1619
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_dn,            tvb, 11, 2, ENC_BIG_ENDIAN);
1620
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_delta_t_lsf,   tvb, 12, 2, ENC_BIG_ENDIAN);
1621
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_utc_std_id,    tvb, 13, 2, ENC_BIG_ENDIAN);
1622
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_gps_tow,       tvb, 14, 4, ENC_BIG_ENDIAN);
1623
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_gps_wn,        tvb, 16, 2, ENC_BIG_ENDIAN);
1624
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_glo_ind,       tvb, 17, 1, ENC_NA);
1625
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_delta_a_i_glo, tvb, 18, 3, ENC_BIG_ENDIAN);
1626
0
    proto_tree_add_item(sbas_l1_mt12_tree, hf_sbas_l1_mt12_spare,         tvb, 20, 8, ENC_BIG_ENDIAN);
1627
1628
0
    return tvb_captured_length(tvb);
1629
0
}
1630
1631
/* Dissect SBAS L1 MT 17 */
1632
0
static int dissect_sbas_l1_mt17(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1633
0
    uint8_t i;
1634
0
    tvbuff_t *prn_tvb;
1635
1636
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT17");
1637
0
    col_clear(pinfo->cinfo, COL_INFO);
1638
1639
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt17, tvb, 0, 32, ENC_NA);
1640
0
    proto_tree *sbas_l1_mt17_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt17);
1641
1642
    // dissect data for each of 3 PRNs
1643
0
    for (i = 0; i < 3; i++) {
1644
0
        prn_tvb = tvb_new_octet_aligned(tvb, 6 + i*67, 67);
1645
0
        if (prn_tvb) {
1646
0
            add_new_data_source(pinfo, prn_tvb, "PRN data");
1647
1648
0
            uint16_t prn = (tvb_get_uint16(prn_tvb, 0, ENC_BIG_ENDIAN) >> 6) & 0xff;
1649
1650
0
            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);
1651
1652
0
            proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_reserved, prn_tvb, 0,  1, ENC_NA);
1653
0
            proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_prn,      prn_tvb, 0,  2, ENC_BIG_ENDIAN);
1654
1655
0
            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_BIG_ENDIAN);
1656
1657
0
            proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_x_ga,     prn_tvb, 2,  4, ENC_BIG_ENDIAN);
1658
0
            proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_y_ga,     prn_tvb, 4,  4, ENC_BIG_ENDIAN);
1659
0
            proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_z_ga,     prn_tvb, 4,  4, ENC_BIG_ENDIAN);
1660
0
            proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_x_ga_vel, prn_tvb, 4,  4, ENC_BIG_ENDIAN);
1661
0
            proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_y_ga_vel, prn_tvb, 4,  4, ENC_BIG_ENDIAN);
1662
0
            proto_tree_add_item(prn_tree, hf_sbas_l1_mt17_z_ga_vel, prn_tvb, 5,  4, ENC_BIG_ENDIAN);
1663
0
        }
1664
0
    }
1665
1666
0
    proto_tree_add_item(sbas_l1_mt17_tree, hf_sbas_l1_mt17_t_a, tvb, 24, 4, ENC_BIG_ENDIAN);
1667
1668
0
    return tvb_captured_length(tvb);
1669
0
}
1670
1671
/* Dissect SBAS L1 MT 18 */
1672
0
static int dissect_sbas_l1_mt18(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1673
0
    uint32_t band_id;
1674
1675
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT18");
1676
0
    col_clear(pinfo->cinfo, COL_INFO);
1677
1678
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt18, tvb, 0, 32, ENC_NA);
1679
0
    proto_tree *sbas_l1_mt18_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt18);
1680
1681
0
    proto_tree_add_item(sbas_l1_mt18_tree,     hf_sbas_l1_mt18_nr_igp_bands,     tvb,  0, 2, ENC_BIG_ENDIAN);
1682
0
    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);
1683
0
    proto_tree_add_item(sbas_l1_mt18_tree,     hf_sbas_l1_mt18_iodi_k,           tvb,  0, 2, ENC_BIG_ENDIAN);
1684
1685
0
    if (band_id == 0) {
1686
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_180w,    tvb,  2, 8, ENC_BIG_ENDIAN);
1687
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_175w,    tvb,  2, 8, ENC_BIG_ENDIAN);
1688
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_170w,    tvb,  8, 8, ENC_BIG_ENDIAN);
1689
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_165w,    tvb,  8, 8, ENC_BIG_ENDIAN);
1690
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_160w,    tvb, 14, 8, ENC_BIG_ENDIAN);
1691
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_155w,    tvb, 14, 8, ENC_BIG_ENDIAN);
1692
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_150w,    tvb, 20, 8, ENC_BIG_ENDIAN);
1693
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_145w,    tvb, 20, 8, ENC_BIG_ENDIAN);
1694
0
    }
1695
0
    else if (band_id == 1) {
1696
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_140w,    tvb,  2, 8, ENC_BIG_ENDIAN);
1697
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_135w,    tvb,  2, 8, ENC_BIG_ENDIAN);
1698
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_130w,    tvb,  8, 8, ENC_BIG_ENDIAN);
1699
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_125w,    tvb,  8, 8, ENC_BIG_ENDIAN);
1700
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_120w,    tvb, 14, 8, ENC_BIG_ENDIAN);
1701
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_115w,    tvb, 14, 8, ENC_BIG_ENDIAN);
1702
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_110w,    tvb, 20, 8, ENC_BIG_ENDIAN);
1703
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_105w,    tvb, 20, 8, ENC_BIG_ENDIAN);
1704
0
    }
1705
0
    else if (band_id == 2) {
1706
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_100w,    tvb,  2, 8, ENC_BIG_ENDIAN);
1707
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_95w,     tvb,  2, 8, ENC_BIG_ENDIAN);
1708
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_90w,     tvb,  8, 8, ENC_BIG_ENDIAN);
1709
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85w,     tvb,  8, 8, ENC_BIG_ENDIAN);
1710
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_80w,     tvb, 14, 8, ENC_BIG_ENDIAN);
1711
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75w,     tvb, 14, 8, ENC_BIG_ENDIAN);
1712
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70w,     tvb, 20, 8, ENC_BIG_ENDIAN);
1713
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65w,     tvb, 20, 8, ENC_BIG_ENDIAN);
1714
0
    }
1715
0
    else if (band_id == 3) {
1716
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60w,     tvb,  2, 8, ENC_BIG_ENDIAN);
1717
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_55w,     tvb,  2, 8, ENC_BIG_ENDIAN);
1718
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_50w,     tvb,  8, 8, ENC_BIG_ENDIAN);
1719
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_45w,     tvb,  8, 8, ENC_BIG_ENDIAN);
1720
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_40w,     tvb, 14, 8, ENC_BIG_ENDIAN);
1721
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_35w,     tvb, 14, 8, ENC_BIG_ENDIAN);
1722
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_30w,     tvb, 20, 8, ENC_BIG_ENDIAN);
1723
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_25w,     tvb, 20, 8, ENC_BIG_ENDIAN);
1724
0
    }
1725
0
    else if (band_id == 4) {
1726
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_20w,     tvb,  2, 8, ENC_BIG_ENDIAN);
1727
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_15w,     tvb,  2, 8, ENC_BIG_ENDIAN);
1728
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_10w,     tvb,  8, 8, ENC_BIG_ENDIAN);
1729
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_5w,      tvb,  8, 8, ENC_BIG_ENDIAN);
1730
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_0,       tvb, 14, 8, ENC_BIG_ENDIAN);
1731
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_5e,      tvb, 14, 8, ENC_BIG_ENDIAN);
1732
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_10e,     tvb, 20, 8, ENC_BIG_ENDIAN);
1733
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_15e,     tvb, 20, 8, ENC_BIG_ENDIAN);
1734
0
    }
1735
0
    else if (band_id == 5) {
1736
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_20e,     tvb,  2, 8, ENC_BIG_ENDIAN);
1737
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_25e,     tvb,  2, 8, ENC_BIG_ENDIAN);
1738
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_30e,     tvb,  8, 8, ENC_BIG_ENDIAN);
1739
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_35e,     tvb,  8, 8, ENC_BIG_ENDIAN);
1740
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_40e,     tvb, 14, 8, ENC_BIG_ENDIAN);
1741
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_45e,     tvb, 14, 8, ENC_BIG_ENDIAN);
1742
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_50e,     tvb, 20, 8, ENC_BIG_ENDIAN);
1743
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_55e,     tvb, 20, 8, ENC_BIG_ENDIAN);
1744
0
    }
1745
0
    else if (band_id == 6) {
1746
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60e,     tvb,  2, 8, ENC_BIG_ENDIAN);
1747
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65e,     tvb,  2, 8, ENC_BIG_ENDIAN);
1748
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70e,     tvb,  8, 8, ENC_BIG_ENDIAN);
1749
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75e,     tvb,  8, 8, ENC_BIG_ENDIAN);
1750
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_80e,     tvb, 14, 8, ENC_BIG_ENDIAN);
1751
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85e,     tvb, 14, 8, ENC_BIG_ENDIAN);
1752
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_90e,     tvb, 20, 8, ENC_BIG_ENDIAN);
1753
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_95e,     tvb, 20, 8, ENC_BIG_ENDIAN);
1754
0
    }
1755
0
    else if (band_id == 7) {
1756
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_100e,    tvb,  2, 8, ENC_BIG_ENDIAN);
1757
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_105e,    tvb,  2, 8, ENC_BIG_ENDIAN);
1758
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_110e,    tvb,  8, 8, ENC_BIG_ENDIAN);
1759
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_115e,    tvb,  8, 8, ENC_BIG_ENDIAN);
1760
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_120e,    tvb, 14, 8, ENC_BIG_ENDIAN);
1761
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_125e,    tvb, 14, 8, ENC_BIG_ENDIAN);
1762
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_130e,    tvb, 20, 8, ENC_BIG_ENDIAN);
1763
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_135e,    tvb, 20, 8, ENC_BIG_ENDIAN);
1764
0
    }
1765
0
    else if (band_id == 8) {
1766
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_140e,    tvb,  2, 8, ENC_BIG_ENDIAN);
1767
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_145e,    tvb,  2, 8, ENC_BIG_ENDIAN);
1768
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_150e,    tvb,  8, 8, ENC_BIG_ENDIAN);
1769
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_155e,    tvb,  8, 8, ENC_BIG_ENDIAN);
1770
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_160e,    tvb, 14, 8, ENC_BIG_ENDIAN);
1771
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_165e,    tvb, 14, 8, ENC_BIG_ENDIAN);
1772
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_170e,    tvb, 20, 8, ENC_BIG_ENDIAN);
1773
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_175e,    tvb, 20, 8, ENC_BIG_ENDIAN);
1774
0
    }
1775
0
    else if (band_id == 9) {
1776
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60n_1,   tvb,  2, 8, ENC_BIG_ENDIAN);
1777
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60n_2,   tvb,  3, 8, ENC_BIG_ENDIAN);
1778
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65n,     tvb, 11, 8, ENC_BIG_ENDIAN);
1779
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70n,     tvb, 12, 8, ENC_BIG_ENDIAN);
1780
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75n,     tvb, 20, 8, ENC_BIG_ENDIAN);
1781
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85n,     tvb, 20, 8, ENC_BIG_ENDIAN);
1782
0
    }
1783
0
    else if (band_id == 10) {
1784
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60s_1,   tvb,  2, 8, ENC_BIG_ENDIAN);
1785
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_60s_2,   tvb,  3, 8, ENC_BIG_ENDIAN);
1786
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_65s,     tvb, 11, 8, ENC_BIG_ENDIAN);
1787
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_70s,     tvb, 12, 8, ENC_BIG_ENDIAN);
1788
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_75s,     tvb, 20, 8, ENC_BIG_ENDIAN);
1789
0
        proto_tree_add_item(sbas_l1_mt18_tree, hf_sbas_l1_mt18_igp_mask_85s,     tvb, 20, 8, ENC_BIG_ENDIAN);
1790
0
    }
1791
1792
0
    proto_tree_add_item(sbas_l1_mt18_tree,     hf_sbas_l1_mt18_spare,            tvb, 27, 1, ENC_NA);
1793
1794
0
    return tvb_captured_length(tvb);
1795
0
}
1796
1797
/* Dissect SBAS L1 MT 24 */
1798
0
static int dissect_sbas_l1_mt24(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1799
0
    uint32_t velocity_code;
1800
1801
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT24");
1802
0
    col_clear(pinfo->cinfo, COL_INFO);
1803
1804
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt24, tvb, 0, 32, ENC_NA);
1805
0
    proto_tree *sbas_l1_mt24_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt24);
1806
1807
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i1,     tvb, 0,  4, ENC_BIG_ENDIAN);
1808
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i2,     tvb, 2,  4, ENC_BIG_ENDIAN);
1809
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i3,     tvb, 3,  4, ENC_BIG_ENDIAN);
1810
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i4,     tvb, 5,  4, ENC_BIG_ENDIAN);
1811
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i5,     tvb, 6,  4, ENC_BIG_ENDIAN);
1812
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_i6,     tvb, 8,  4, ENC_BIG_ENDIAN);
1813
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i1,  tvb, 9,  2, ENC_BIG_ENDIAN);
1814
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i2,  tvb, 10, 2, ENC_BIG_ENDIAN);
1815
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i3,  tvb, 10, 2, ENC_BIG_ENDIAN);
1816
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i4,  tvb, 11, 2, ENC_BIG_ENDIAN);
1817
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i5,  tvb, 11, 2, ENC_BIG_ENDIAN);
1818
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_udrei_i6,  tvb, 12, 2, ENC_BIG_ENDIAN);
1819
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_iodp,      tvb, 12, 1, ENC_NA);
1820
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_fc_type,   tvb, 13, 1, ENC_NA);
1821
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_iodf_j,    tvb, 13, 1, ENC_NA);
1822
0
    proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_spare,     tvb, 13, 1, ENC_NA);
1823
1824
0
    proto_tree_add_item_ret_uint(sbas_l1_mt24_tree, hf_sbas_l1_mt24_velocity_code, tvb, 14, 1, ENC_NA, &velocity_code);
1825
1826
0
    if (velocity_code == 0) {
1827
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_prn_mask_nr_1, tvb, 14, 1, ENC_NA);
1828
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_iod_1,         tvb, 14, 2, ENC_BIG_ENDIAN);
1829
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_x_1,     tvb, 15, 2, ENC_BIG_ENDIAN);
1830
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_y_1,     tvb, 17, 2, ENC_BIG_ENDIAN);
1831
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_z_1,     tvb, 18, 2, ENC_BIG_ENDIAN);
1832
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_a_1_f0,  tvb, 19, 2, ENC_BIG_ENDIAN);
1833
1834
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_prn_mask_nr_2, tvb, 20, 2, ENC_BIG_ENDIAN);
1835
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_iod_2,         tvb, 21, 2, ENC_BIG_ENDIAN);
1836
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_x_2,     tvb, 22, 2, ENC_BIG_ENDIAN);
1837
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_y_2,     tvb, 23, 2, ENC_BIG_ENDIAN);
1838
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_z_2,     tvb, 24, 2, ENC_BIG_ENDIAN);
1839
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_delta_a_2_f0,  tvb, 25, 2, ENC_BIG_ENDIAN);
1840
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_iodp,          tvb, 26, 2, ENC_BIG_ENDIAN);
1841
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v0_spare,         tvb, 27, 1, ENC_NA);
1842
0
    }
1843
0
    else {
1844
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_prn_mask_nr, tvb, 14, 1, ENC_NA);
1845
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_iod,         tvb, 14, 2, ENC_BIG_ENDIAN);
1846
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_x,     tvb, 15, 4, ENC_BIG_ENDIAN);
1847
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_y,     tvb, 17, 4, ENC_BIG_ENDIAN);
1848
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_z,     tvb, 18, 4, ENC_BIG_ENDIAN);
1849
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_a_f0,  tvb, 20, 4, ENC_BIG_ENDIAN);
1850
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_x_vel, tvb, 21, 4, ENC_BIG_ENDIAN);
1851
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_y_vel, tvb, 22, 4, ENC_BIG_ENDIAN);
1852
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_z_vel, tvb, 23, 4, ENC_BIG_ENDIAN);
1853
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_delta_a_f1,  tvb, 24, 4, ENC_BIG_ENDIAN);
1854
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_t_lt,        tvb, 25, 2, ENC_BIG_ENDIAN);
1855
0
        proto_tree_add_item(sbas_l1_mt24_tree, hf_sbas_l1_mt24_v1_iodp,        tvb, 27, 1, ENC_NA);
1856
0
    }
1857
1858
0
    return tvb_captured_length(tvb);
1859
0
}
1860
1861
/* Dissect SBAS L1 MT 25 */
1862
0
static int dissect_sbas_l1_mt25(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1863
0
    uint32_t velocity_code;
1864
1865
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT25");
1866
0
    col_clear(pinfo->cinfo, COL_INFO);
1867
1868
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt25, tvb, 0, 32, ENC_NA);
1869
0
    proto_tree *sbas_l1_mt25_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt25);
1870
1871
    // first half message
1872
0
    proto_tree_add_item_ret_uint(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_velocity_code,
1873
0
            tvb, 0, 1, ENC_NA, &velocity_code);
1874
0
    if (velocity_code == 0) {
1875
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_prn_mask_nr_1,
1876
0
                tvb, 0, 2, ENC_BIG_ENDIAN);
1877
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_iod_1,
1878
0
                tvb, 1, 2, ENC_BIG_ENDIAN);
1879
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_x_1,
1880
0
                tvb, 2, 2, ENC_BIG_ENDIAN);
1881
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_y_1,
1882
0
                tvb, 3, 2, ENC_BIG_ENDIAN);
1883
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_z_1,
1884
0
                tvb, 4, 2, ENC_BIG_ENDIAN);
1885
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_a_1_f0,
1886
0
                tvb, 6, 2, ENC_BIG_ENDIAN);
1887
1888
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_prn_mask_nr_2,
1889
0
                tvb, 7, 1, ENC_NA);
1890
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_iod_2,
1891
0
                tvb, 8, 1, ENC_NA);
1892
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_x_2,
1893
0
                tvb, 9, 2, ENC_BIG_ENDIAN);
1894
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_y_2,
1895
0
                tvb, 10, 2, ENC_BIG_ENDIAN);
1896
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_z_2,
1897
0
                tvb, 11, 2, ENC_BIG_ENDIAN);
1898
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_delta_a_2_f0,
1899
0
                tvb, 12, 2, ENC_BIG_ENDIAN);
1900
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_iodp,
1901
0
                tvb, 13, 1, ENC_NA);
1902
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v0_spare,
1903
0
                tvb, 13, 1, ENC_NA);
1904
0
    }
1905
0
    else { // velocity_code == 1
1906
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_prn_mask_nr,
1907
0
                tvb, 0, 2, ENC_BIG_ENDIAN);
1908
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_iod,
1909
0
                tvb, 1, 2, ENC_BIG_ENDIAN);
1910
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_x,
1911
0
                tvb, 2, 4, ENC_BIG_ENDIAN);
1912
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_y,
1913
0
                tvb, 4, 4, ENC_BIG_ENDIAN);
1914
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_z,
1915
0
                tvb, 5, 4, ENC_BIG_ENDIAN);
1916
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_a_f0,
1917
0
                tvb, 6, 4, ENC_BIG_ENDIAN);
1918
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_x_vel,
1919
0
                tvb, 8, 4, ENC_BIG_ENDIAN);
1920
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_y_vel,
1921
0
                tvb, 9, 4, ENC_BIG_ENDIAN);
1922
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_z_vel,
1923
0
                tvb, 10, 4, ENC_BIG_ENDIAN);
1924
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_delta_a_f1,
1925
0
                tvb, 11, 4, ENC_BIG_ENDIAN);
1926
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_t_lt,
1927
0
                tvb, 12, 2, ENC_BIG_ENDIAN);
1928
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h1_v1_iodp,
1929
0
                tvb, 13, 1, ENC_NA);
1930
0
    }
1931
1932
    // second half message
1933
0
    proto_tree_add_item_ret_uint(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_velocity_code,
1934
0
            tvb, 14, 1, ENC_NA, &velocity_code);
1935
0
    if (velocity_code == 0) {
1936
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_prn_mask_nr_1,
1937
0
                tvb, 14, 1, ENC_NA);
1938
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_iod_1,
1939
0
                tvb, 14, 2, ENC_BIG_ENDIAN);
1940
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_x_1,
1941
0
                tvb, 15, 2, ENC_BIG_ENDIAN);
1942
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_y_1,
1943
0
                tvb, 17, 2, ENC_BIG_ENDIAN);
1944
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_z_1,
1945
0
                tvb, 18, 2, ENC_BIG_ENDIAN);
1946
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_a_1_f0,
1947
0
                tvb, 19, 2, ENC_BIG_ENDIAN);
1948
1949
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_prn_mask_nr_2,
1950
0
                tvb, 20, 2, ENC_BIG_ENDIAN);
1951
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_iod_2,
1952
0
                tvb, 21, 2, ENC_BIG_ENDIAN);
1953
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_x_2,
1954
0
                tvb, 22, 2, ENC_BIG_ENDIAN);
1955
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_y_2,
1956
0
                tvb, 23, 2, ENC_BIG_ENDIAN);
1957
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_z_2,
1958
0
                tvb, 24, 2, ENC_BIG_ENDIAN);
1959
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_delta_a_2_f0,
1960
0
                tvb, 25, 2, ENC_BIG_ENDIAN);
1961
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_iodp,
1962
0
                tvb, 26, 2, ENC_BIG_ENDIAN);
1963
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v0_spare,
1964
0
                tvb, 27, 1, ENC_NA);
1965
0
    }
1966
0
    else { // velocity_code == 1
1967
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_prn_mask_nr,
1968
0
                tvb, 14, 1, ENC_NA);
1969
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_iod,
1970
0
                tvb, 14, 2, ENC_BIG_ENDIAN);
1971
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_x,
1972
0
                tvb, 15, 4, ENC_BIG_ENDIAN);
1973
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_y,
1974
0
                tvb, 17, 4, ENC_BIG_ENDIAN);
1975
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_z,
1976
0
                tvb, 18, 4, ENC_BIG_ENDIAN);
1977
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_a_f0,
1978
0
                tvb, 20, 4, ENC_BIG_ENDIAN);
1979
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_x_vel,
1980
0
                tvb, 21, 4, ENC_BIG_ENDIAN);
1981
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_y_vel,
1982
0
                tvb, 22, 4, ENC_BIG_ENDIAN);
1983
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_z_vel,
1984
0
                tvb, 23, 4, ENC_BIG_ENDIAN);
1985
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_delta_a_f1,
1986
0
                tvb, 24, 4, ENC_BIG_ENDIAN);
1987
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_t_lt,
1988
0
                tvb, 25, 2, ENC_BIG_ENDIAN);
1989
0
        proto_tree_add_item(sbas_l1_mt25_tree, hf_sbas_l1_mt25_h2_v1_iodp,
1990
0
                tvb, 27, 1, ENC_NA);
1991
0
    }
1992
1993
0
    return tvb_captured_length(tvb);
1994
0
}
1995
1996
/* Dissect SBAS L1 MT 26 */
1997
0
static int dissect_sbas_l1_mt26(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
1998
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT26");
1999
0
    col_clear(pinfo->cinfo, COL_INFO);
2000
2001
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt26, tvb, 0, 32, ENC_NA);
2002
0
    proto_tree *sbas_l1_mt26_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt26);
2003
2004
0
    uint32_t igp_band_id;
2005
0
    proto_item* pi_igp_band_id = proto_tree_add_item_ret_uint(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_band_id,
2006
0
            tvb, 0, 2, ENC_BIG_ENDIAN, &igp_band_id);
2007
0
    if (igp_band_id > 10) {
2008
0
        expert_add_info_format(pinfo, pi_igp_band_id, &ei_sbas_l1_mt26_igp_band_id, "Invalid IGP Band Identifier");
2009
0
    }
2010
2011
0
    uint32_t igp_block_id;
2012
0
    proto_item* pi_igp_block_id = proto_tree_add_item_ret_uint(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_block_id,
2013
0
            tvb, 1, 1, ENC_BIG_ENDIAN, &igp_block_id);
2014
0
    if (igp_block_id > 13) {
2015
0
        expert_add_info_format(pinfo, pi_igp_block_id, &ei_sbas_l1_mt26_igp_block_id, "Invalid IGP Block Identifier");
2016
0
    }
2017
2018
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_1, tvb, 1, 2, ENC_BIG_ENDIAN);
2019
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_1, tvb, 2, 2, ENC_BIG_ENDIAN);
2020
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_2, tvb, 3, 2, ENC_BIG_ENDIAN);
2021
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_2, tvb, 4, 2, ENC_BIG_ENDIAN);
2022
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_3, tvb, 5, 2, ENC_BIG_ENDIAN);
2023
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_3, tvb, 6, 2, ENC_BIG_ENDIAN);
2024
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_4, tvb, 6, 2, ENC_BIG_ENDIAN);
2025
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_4, tvb, 7, 2, ENC_BIG_ENDIAN);
2026
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_5, tvb, 8, 2, ENC_BIG_ENDIAN);
2027
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_5, tvb, 9, 2, ENC_BIG_ENDIAN);
2028
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_6, tvb, 9, 2, ENC_BIG_ENDIAN);
2029
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_6, tvb, 11, 2, ENC_BIG_ENDIAN);
2030
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_7, tvb, 11, 2, ENC_BIG_ENDIAN);
2031
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_7, tvb, 12, 2, ENC_BIG_ENDIAN);
2032
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_8, tvb, 13, 2, ENC_BIG_ENDIAN);
2033
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_8, tvb, 14, 2, ENC_BIG_ENDIAN);
2034
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_9, tvb, 14, 2, ENC_BIG_ENDIAN);
2035
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_9, tvb, 15, 2, ENC_BIG_ENDIAN);
2036
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_10, tvb, 16, 2, ENC_BIG_ENDIAN);
2037
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_10, tvb, 17, 2, ENC_BIG_ENDIAN);
2038
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_11, tvb, 18, 2, ENC_BIG_ENDIAN);
2039
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_11, tvb, 19, 2, ENC_BIG_ENDIAN);
2040
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_12, tvb, 19, 2, ENC_BIG_ENDIAN);
2041
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_12, tvb, 20, 2, ENC_BIG_ENDIAN);
2042
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_13, tvb, 21, 2, ENC_BIG_ENDIAN);
2043
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_13, tvb, 22, 2, ENC_BIG_ENDIAN);
2044
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_14, tvb, 22, 2, ENC_BIG_ENDIAN);
2045
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_14, tvb, 24, 2, ENC_BIG_ENDIAN);
2046
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_igp_vertical_delay_est_15, tvb, 24, 2, ENC_BIG_ENDIAN);
2047
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_givei_15, tvb, 25, 2, ENC_BIG_ENDIAN);
2048
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_iodi_k, tvb, 26, 1, ENC_NA);
2049
0
    proto_tree_add_item(sbas_l1_mt26_tree, hf_sbas_l1_mt26_spare, tvb, 26, 2, ENC_BIG_ENDIAN);
2050
2051
0
    return tvb_captured_length(tvb);
2052
0
}
2053
2054
/* Dissect SBAS L1 MT 27 */
2055
0
static int dissect_sbas_l1_mt27(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
2056
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT27");
2057
0
    col_clear(pinfo->cinfo, COL_INFO);
2058
2059
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt27, tvb, 0, 32, ENC_NA);
2060
0
    proto_tree *sbas_l1_mt27_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt27);
2061
2062
0
    proto_tree_add_item(sbas_l1_mt27_tree, hf_sbas_l1_mt27_iods,         tvb, 0, 2, ENC_BIG_ENDIAN);
2063
0
    proto_tree_add_item(sbas_l1_mt27_tree, hf_sbas_l1_mt27_num_svc_msgs, tvb, 1, 2, ENC_BIG_ENDIAN);
2064
0
    proto_tree_add_item(sbas_l1_mt27_tree, hf_sbas_l1_mt27_svc_msg_num,  tvb, 1, 2, ENC_BIG_ENDIAN);
2065
0
    proto_tree_add_item(sbas_l1_mt27_tree, hf_sbas_l1_mt27_num_regions,  tvb, 1, 2, ENC_BIG_ENDIAN);
2066
0
    proto_tree_add_item(sbas_l1_mt27_tree, hf_sbas_l1_mt27_prio_code,    tvb, 1, 2, ENC_BIG_ENDIAN);
2067
0
    proto_tree_add_item(sbas_l1_mt27_tree, hf_sbas_l1_mt27_dudre_in,     tvb, 1, 2, ENC_BIG_ENDIAN);
2068
0
    proto_tree_add_item(sbas_l1_mt27_tree, hf_sbas_l1_mt27_dudre_out,    tvb, 3, 2, ENC_BIG_ENDIAN);
2069
2070
0
    proto_tree_add_bitmask(sbas_l1_mt27_tree, tvb,  3, hf_sbas_l1_mt27_region[0], ett_sbas_l1_mt27_region[0], sbas_l1_mt27_region_fields[0], ENC_BIG_ENDIAN);
2071
0
    proto_tree_add_bitmask(sbas_l1_mt27_tree, tvb,  7, hf_sbas_l1_mt27_region[1], ett_sbas_l1_mt27_region[1], sbas_l1_mt27_region_fields[1], ENC_BIG_ENDIAN);
2072
0
    proto_tree_add_bitmask(sbas_l1_mt27_tree, tvb, 12, hf_sbas_l1_mt27_region[2], ett_sbas_l1_mt27_region[2], sbas_l1_mt27_region_fields[2], ENC_BIG_ENDIAN);
2073
0
    proto_tree_add_bitmask(sbas_l1_mt27_tree, tvb, 16, hf_sbas_l1_mt27_region[3], ett_sbas_l1_mt27_region[3], sbas_l1_mt27_region_fields[3], ENC_BIG_ENDIAN);
2074
0
    proto_tree_add_bitmask(sbas_l1_mt27_tree, tvb, 20, hf_sbas_l1_mt27_region[4], ett_sbas_l1_mt27_region[4], sbas_l1_mt27_region_fields[4], ENC_BIG_ENDIAN);
2075
2076
0
    proto_tree_add_item(sbas_l1_mt27_tree, hf_sbas_l1_mt27_spare,        tvb, 24, 4, ENC_BIG_ENDIAN);
2077
2078
0
    return tvb_captured_length(tvb);
2079
0
}
2080
2081
/* Dissect SBAS L1 MT 28 */
2082
0
static int dissect_sbas_l1_mt28(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
2083
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT28");
2084
0
    col_clear(pinfo->cinfo, COL_INFO);
2085
2086
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt28, tvb, 0, 32, ENC_NA);
2087
0
    proto_tree *sbas_l1_mt28_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt28);
2088
2089
0
    proto_tree_add_item(sbas_l1_mt28_tree, hf_sbas_l1_mt28_iodp,           tvb, 0, 1, ENC_NA);
2090
2091
0
    proto_tree *sv1_tree = proto_tree_add_subtree(sbas_l1_mt28_tree, tvb, 1, 14, ett_sbas_l1_mt28_sv_1, NULL, "Satellite 1");
2092
2093
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_prn_mask_nr_1, tvb,  1, 1, ENC_NA);
2094
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_scale_exp_1,   tvb,  1, 2, ENC_BIG_ENDIAN);
2095
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_e_1_1_1,       tvb,  2, 4, ENC_BIG_ENDIAN);
2096
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_e_2_2_1,       tvb,  2, 4, ENC_BIG_ENDIAN);
2097
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_e_3_3_1,       tvb,  2, 4, ENC_BIG_ENDIAN);
2098
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_e_4_4_1,       tvb,  5, 4, ENC_BIG_ENDIAN);
2099
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_e_1_2_1,       tvb,  5, 4, ENC_BIG_ENDIAN);
2100
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_e_1_3_1,       tvb,  7, 4, ENC_BIG_ENDIAN);
2101
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_e_1_4_1,       tvb,  7, 4, ENC_BIG_ENDIAN);
2102
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_e_2_3_1,       tvb, 10, 4, ENC_BIG_ENDIAN);
2103
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_e_2_4_1,       tvb, 10, 4, ENC_BIG_ENDIAN);
2104
0
    proto_tree_add_item(sv1_tree, hf_sbas_l1_mt28_e_3_4_1,       tvb, 12, 4, ENC_BIG_ENDIAN);
2105
2106
0
    proto_tree *sv2_tree = proto_tree_add_subtree(sbas_l1_mt28_tree, tvb, 14, 14, ett_sbas_l1_mt28_sv_2, NULL, "Satellite 2");
2107
2108
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_prn_mask_nr_2, tvb, 14, 1, ENC_NA);
2109
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_scale_exp_2,   tvb, 14, 2, ENC_BIG_ENDIAN);
2110
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_e_1_1_2,       tvb, 15, 4, ENC_BIG_ENDIAN);
2111
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_e_2_2_2,       tvb, 15, 4, ENC_BIG_ENDIAN);
2112
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_e_3_3_2,       tvb, 15, 4, ENC_BIG_ENDIAN);
2113
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_e_4_4_2,       tvb, 18, 4, ENC_BIG_ENDIAN);
2114
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_e_1_2_2,       tvb, 18, 4, ENC_BIG_ENDIAN);
2115
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_e_1_3_2,       tvb, 21, 4, ENC_BIG_ENDIAN);
2116
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_e_1_4_2,       tvb, 21, 4, ENC_BIG_ENDIAN);
2117
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_e_2_3_2,       tvb, 21, 4, ENC_BIG_ENDIAN);
2118
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_e_2_4_2,       tvb, 24, 4, ENC_BIG_ENDIAN);
2119
0
    proto_tree_add_item(sv2_tree, hf_sbas_l1_mt28_e_3_4_2,       tvb, 24, 4, ENC_BIG_ENDIAN);
2120
2121
0
    return tvb_captured_length(tvb);
2122
0
}
2123
2124
2125
/* Dissect SBAS L1 MT 63 */
2126
0
static int dissect_sbas_l1_mt63(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) {
2127
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "SBAS L1 MT63");
2128
0
    col_clear(pinfo->cinfo, COL_INFO);
2129
2130
0
    proto_item *ti = proto_tree_add_item(tree, hf_sbas_l1_mt63, tvb, 0, 32, ENC_NA);
2131
0
    proto_tree *sbas_l1_mt63_tree = proto_item_add_subtree(ti, ett_sbas_l1_mt63);
2132
2133
0
    proto_tree_add_item(sbas_l1_mt63_tree, hf_sbas_l1_mt63_spare_1, tvb,  0,  1, ENC_NA);
2134
0
    proto_tree_add_item(sbas_l1_mt63_tree, hf_sbas_l1_mt63_spare_2, tvb,  1, 26, ENC_NA);
2135
0
    proto_tree_add_item(sbas_l1_mt63_tree, hf_sbas_l1_mt63_spare_3, tvb, 27,  1, ENC_NA);
2136
2137
0
    return tvb_captured_length(tvb);
2138
0
}
2139
2140
14
void proto_register_sbas_l1(void) {
2141
2142
14
    static hf_register_info hf[] = {
2143
14
        {&hf_sbas_l1_preamble, {"Preamble",     "sbas_l1.preamble", FT_UINT8,  BASE_HEX, NULL, 0xff,       NULL, HFILL}},
2144
14
        {&hf_sbas_l1_mt,       {"Message Type", "sbas_l1.mt"      , FT_UINT8,  BASE_DEC, NULL, 0xfc,       NULL, HFILL}},
2145
14
        {&hf_sbas_l1_chksum,   {"Checksum",     "sbas_l1.chksum"  , FT_UINT32, BASE_HEX, NULL, 0x3fffffc0, NULL, HFILL}},
2146
2147
        // MT0
2148
14
        {&hf_sbas_l1_mt0,         {"MT0",     "sbas_l1.mt0",         FT_NONE,  BASE_NONE, NULL, 0x00, NULL, HFILL}},
2149
14
        {&hf_sbas_l1_mt0_spare_1, {"Spare 1", "sbas_l1.mt0.spare_1", FT_UINT8, BASE_HEX,  NULL, 0x03, NULL, HFILL}},
2150
14
        {&hf_sbas_l1_mt0_spare_2, {"Spare 2", "sbas_l1.mt0.spare_2", FT_BYTES, SEP_SPACE, NULL, 0x00, NULL, HFILL}},
2151
14
        {&hf_sbas_l1_mt0_spare_3, {"Spare 3", "sbas_l1.mt0.spare_3", FT_UINT8, BASE_HEX,  NULL, 0xc0, NULL, HFILL}},
2152
2153
        // MT1
2154
14
        {&hf_sbas_l1_mt1,                  {"MT1",                        "sbas_l1.mt1",                  FT_NONE,   BASE_NONE, NULL, 0x0,                          NULL, HFILL}},
2155
14
        {&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}},
2156
14
        {&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}},
2157
14
        {&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}},
2158
14
        {&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}},
2159
14
        {&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}},
2160
14
        {&hf_sbas_l1_mt1_iodp,             {"Issue of Data - PRN (IODP)", "sbas_l1.mt1.iodp",             FT_UINT8,  BASE_DEC,  NULL, 0xc0,                         NULL, HFILL}},
2161
2162
        // MT2
2163
14
        {&hf_sbas_l1_mt2,          {"MT2",                                      "sbas_l1.mt2",          FT_NONE,   BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2164
14
        {&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}},
2165
14
        {&hf_sbas_l1_mt2_iodp,     {"Issue of Data - PRN (IODP)",               "sbas_l1.mt2.iodp",     FT_UINT8,  BASE_DEC,    NULL,                          0xc0,       NULL, HFILL}},
2166
14
        {&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}},
2167
14
        {&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}},
2168
14
        {&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}},
2169
14
        {&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}},
2170
14
        {&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}},
2171
14
        {&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}},
2172
14
        {&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}},
2173
14
        {&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}},
2174
14
        {&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}},
2175
14
        {&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}},
2176
14
        {&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}},
2177
14
        {&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}},
2178
14
        {&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}},
2179
14
        {&hf_sbas_l1_mt2_udrei_1,  {"UDREI_1",                                  "sbas_l1.mt2.udrei_1",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2180
14
        {&hf_sbas_l1_mt2_udrei_2,  {"UDREI_2",                                  "sbas_l1.mt2.udrei_2",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2181
14
        {&hf_sbas_l1_mt2_udrei_3,  {"UDREI_3",                                  "sbas_l1.mt2.udrei_3",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2182
14
        {&hf_sbas_l1_mt2_udrei_4,  {"UDREI_4",                                  "sbas_l1.mt2.udrei_4",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2183
14
        {&hf_sbas_l1_mt2_udrei_5,  {"UDREI_5",                                  "sbas_l1.mt2.udrei_5",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2184
14
        {&hf_sbas_l1_mt2_udrei_6,  {"UDREI_6",                                  "sbas_l1.mt2.udrei_6",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2185
14
        {&hf_sbas_l1_mt2_udrei_7,  {"UDREI_7",                                  "sbas_l1.mt2.udrei_7",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2186
14
        {&hf_sbas_l1_mt2_udrei_8,  {"UDREI_8",                                  "sbas_l1.mt2.udrei_8",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2187
14
        {&hf_sbas_l1_mt2_udrei_9,  {"UDREI_9",                                  "sbas_l1.mt2.udrei_9",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2188
14
        {&hf_sbas_l1_mt2_udrei_10, {"UDREI_10",                                 "sbas_l1.mt2.udrei_10", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2189
14
        {&hf_sbas_l1_mt2_udrei_11, {"UDREI_11",                                 "sbas_l1.mt2.udrei_11", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2190
14
        {&hf_sbas_l1_mt2_udrei_12, {"UDREI_12",                                 "sbas_l1.mt2.udrei_12", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2191
14
        {&hf_sbas_l1_mt2_udrei_13, {"UDREI_13",                                 "sbas_l1.mt2.udrei_13", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2192
2193
        // MT3
2194
14
        {&hf_sbas_l1_mt3,          {"MT3",                                      "sbas_l1.mt3",          FT_NONE,   BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2195
14
        {&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}},
2196
14
        {&hf_sbas_l1_mt3_iodp,     {"Issue of Data - PRN (IODP)",               "sbas_l1.mt3.iodp",     FT_UINT8,  BASE_DEC,    NULL,                          0xc0,       NULL, HFILL}},
2197
14
        {&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}},
2198
14
        {&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}},
2199
14
        {&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}},
2200
14
        {&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}},
2201
14
        {&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}},
2202
14
        {&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}},
2203
14
        {&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}},
2204
14
        {&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}},
2205
14
        {&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}},
2206
14
        {&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}},
2207
14
        {&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}},
2208
14
        {&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}},
2209
14
        {&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}},
2210
14
        {&hf_sbas_l1_mt3_udrei_14, {"UDREI_14",                                 "sbas_l1.mt3.udrei_14", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2211
14
        {&hf_sbas_l1_mt3_udrei_15, {"UDREI_15",                                 "sbas_l1.mt3.udrei_15", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2212
14
        {&hf_sbas_l1_mt3_udrei_16, {"UDREI_16",                                 "sbas_l1.mt3.udrei_16", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2213
14
        {&hf_sbas_l1_mt3_udrei_17, {"UDREI_17",                                 "sbas_l1.mt3.udrei_17", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2214
14
        {&hf_sbas_l1_mt3_udrei_18, {"UDREI_18",                                 "sbas_l1.mt3.udrei_18", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2215
14
        {&hf_sbas_l1_mt3_udrei_19, {"UDREI_19",                                 "sbas_l1.mt3.udrei_19", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2216
14
        {&hf_sbas_l1_mt3_udrei_20, {"UDREI_20",                                 "sbas_l1.mt3.udrei_20", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2217
14
        {&hf_sbas_l1_mt3_udrei_21, {"UDREI_21",                                 "sbas_l1.mt3.udrei_21", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2218
14
        {&hf_sbas_l1_mt3_udrei_22, {"UDREI_22",                                 "sbas_l1.mt3.udrei_22", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2219
14
        {&hf_sbas_l1_mt3_udrei_23, {"UDREI_23",                                 "sbas_l1.mt3.udrei_23", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2220
14
        {&hf_sbas_l1_mt3_udrei_24, {"UDREI_24",                                 "sbas_l1.mt3.udrei_24", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2221
14
        {&hf_sbas_l1_mt3_udrei_25, {"UDREI_25",                                 "sbas_l1.mt3.udrei_25", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2222
14
        {&hf_sbas_l1_mt3_udrei_26, {"UDREI_26",                                 "sbas_l1.mt3.udrei_26", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2223
2224
        // MT4
2225
14
        {&hf_sbas_l1_mt4,          {"MT4",                                      "sbas_l1.mt4",          FT_NONE,   BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2226
14
        {&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}},
2227
14
        {&hf_sbas_l1_mt4_iodp,     {"Issue of Data - PRN (IODP)",               "sbas_l1.mt4.iodp",     FT_UINT8,  BASE_DEC,    NULL,                          0xc0,       NULL, HFILL}},
2228
14
        {&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}},
2229
14
        {&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}},
2230
14
        {&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}},
2231
14
        {&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}},
2232
14
        {&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}},
2233
14
        {&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}},
2234
14
        {&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}},
2235
14
        {&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}},
2236
14
        {&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}},
2237
14
        {&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}},
2238
14
        {&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}},
2239
14
        {&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}},
2240
14
        {&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}},
2241
14
        {&hf_sbas_l1_mt4_udrei_27, {"UDREI_27",                                 "sbas_l1.mt4.udrei_27", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2242
14
        {&hf_sbas_l1_mt4_udrei_28, {"UDREI_28",                                 "sbas_l1.mt4.udrei_28", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2243
14
        {&hf_sbas_l1_mt4_udrei_29, {"UDREI_29",                                 "sbas_l1.mt4.udrei_29", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2244
14
        {&hf_sbas_l1_mt4_udrei_30, {"UDREI_30",                                 "sbas_l1.mt4.udrei_30", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2245
14
        {&hf_sbas_l1_mt4_udrei_31, {"UDREI_31",                                 "sbas_l1.mt4.udrei_31", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2246
14
        {&hf_sbas_l1_mt4_udrei_32, {"UDREI_32",                                 "sbas_l1.mt4.udrei_32", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2247
14
        {&hf_sbas_l1_mt4_udrei_33, {"UDREI_33",                                 "sbas_l1.mt4.udrei_33", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2248
14
        {&hf_sbas_l1_mt4_udrei_34, {"UDREI_34",                                 "sbas_l1.mt4.udrei_34", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2249
14
        {&hf_sbas_l1_mt4_udrei_35, {"UDREI_35",                                 "sbas_l1.mt4.udrei_35", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2250
14
        {&hf_sbas_l1_mt4_udrei_36, {"UDREI_36",                                 "sbas_l1.mt4.udrei_36", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2251
14
        {&hf_sbas_l1_mt4_udrei_37, {"UDREI_37",                                 "sbas_l1.mt4.udrei_37", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2252
14
        {&hf_sbas_l1_mt4_udrei_38, {"UDREI_38",                                 "sbas_l1.mt4.udrei_38", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2253
14
        {&hf_sbas_l1_mt4_udrei_39, {"UDREI_39",                                 "sbas_l1.mt4.udrei_39", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2254
2255
        // MT5
2256
14
        {&hf_sbas_l1_mt5,          {"MT5",                                      "sbas_l1.mt5",          FT_NONE,   BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2257
14
        {&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}},
2258
14
        {&hf_sbas_l1_mt5_iodp,     {"Issue of Data - PRN (IODP)",               "sbas_l1.mt5.iodp",     FT_UINT8,  BASE_DEC,    NULL,                          0xc0,       NULL, HFILL}},
2259
14
        {&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}},
2260
14
        {&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}},
2261
14
        {&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}},
2262
14
        {&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}},
2263
14
        {&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}},
2264
14
        {&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}},
2265
14
        {&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}},
2266
14
        {&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}},
2267
14
        {&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}},
2268
14
        {&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}},
2269
14
        {&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}},
2270
14
        {&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}},
2271
14
        {&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}},
2272
14
        {&hf_sbas_l1_mt5_udrei_40, {"UDREI_40",                                 "sbas_l1.mt5.udrei_40", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2273
14
        {&hf_sbas_l1_mt5_udrei_41, {"UDREI_41",                                 "sbas_l1.mt5.udrei_41", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2274
14
        {&hf_sbas_l1_mt5_udrei_42, {"UDREI_42",                                 "sbas_l1.mt5.udrei_42", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2275
14
        {&hf_sbas_l1_mt5_udrei_43, {"UDREI_43",                                 "sbas_l1.mt5.udrei_43", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2276
14
        {&hf_sbas_l1_mt5_udrei_44, {"UDREI_44",                                 "sbas_l1.mt5.udrei_44", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2277
14
        {&hf_sbas_l1_mt5_udrei_45, {"UDREI_45",                                 "sbas_l1.mt5.udrei_45", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2278
14
        {&hf_sbas_l1_mt5_udrei_46, {"UDREI_46",                                 "sbas_l1.mt5.udrei_46", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2279
14
        {&hf_sbas_l1_mt5_udrei_47, {"UDREI_47",                                 "sbas_l1.mt5.udrei_47", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2280
14
        {&hf_sbas_l1_mt5_udrei_48, {"UDREI_48",                                 "sbas_l1.mt5.udrei_48", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2281
14
        {&hf_sbas_l1_mt5_udrei_49, {"UDREI_49",                                 "sbas_l1.mt5.udrei_49", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2282
14
        {&hf_sbas_l1_mt5_udrei_50, {"UDREI_50",                                 "sbas_l1.mt5.udrei_50", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2283
14
        {&hf_sbas_l1_mt5_udrei_51, {"UDREI_51",                                 "sbas_l1.mt5.udrei_51", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2284
14
        {&hf_sbas_l1_mt5_udrei_52, {"UDREI_52",                                 "sbas_l1.mt5.udrei_52", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2285
2286
        // MT6
2287
14
        {&hf_sbas_l1_mt6,          {"MT6",                                      "sbas_l1.mt6",          FT_NONE,   BASE_NONE, NULL,                   0x0,    NULL, HFILL}},
2288
14
        {&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}},
2289
14
        {&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}},
2290
14
        {&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}},
2291
14
        {&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}},
2292
14
        {&hf_sbas_l1_mt6_udrei_1,  {"UDREI_1",                                  "sbas_l1.mt6.udrei_1",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2293
14
        {&hf_sbas_l1_mt6_udrei_2,  {"UDREI_2",                                  "sbas_l1.mt6.udrei_2",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2294
14
        {&hf_sbas_l1_mt6_udrei_3,  {"UDREI_3",                                  "sbas_l1.mt6.udrei_3",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2295
14
        {&hf_sbas_l1_mt6_udrei_4,  {"UDREI_4",                                  "sbas_l1.mt6.udrei_4",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2296
14
        {&hf_sbas_l1_mt6_udrei_5,  {"UDREI_5",                                  "sbas_l1.mt6.udrei_5",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2297
14
        {&hf_sbas_l1_mt6_udrei_6,  {"UDREI_6",                                  "sbas_l1.mt6.udrei_6",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2298
14
        {&hf_sbas_l1_mt6_udrei_7,  {"UDREI_7",                                  "sbas_l1.mt6.udrei_7",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2299
14
        {&hf_sbas_l1_mt6_udrei_8,  {"UDREI_8",                                  "sbas_l1.mt6.udrei_8",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2300
14
        {&hf_sbas_l1_mt6_udrei_9,  {"UDREI_9",                                  "sbas_l1.mt6.udrei_9",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2301
14
        {&hf_sbas_l1_mt6_udrei_10, {"UDREI_10",                                 "sbas_l1.mt6.udrei_10", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2302
14
        {&hf_sbas_l1_mt6_udrei_11, {"UDREI_11",                                 "sbas_l1.mt6.udrei_11", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2303
14
        {&hf_sbas_l1_mt6_udrei_12, {"UDREI_12",                                 "sbas_l1.mt6.udrei_12", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2304
14
        {&hf_sbas_l1_mt6_udrei_13, {"UDREI_13",                                 "sbas_l1.mt6.udrei_13", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2305
14
        {&hf_sbas_l1_mt6_udrei_14, {"UDREI_14",                                 "sbas_l1.mt6.udrei_14", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2306
14
        {&hf_sbas_l1_mt6_udrei_15, {"UDREI_15",                                 "sbas_l1.mt6.udrei_15", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2307
14
        {&hf_sbas_l1_mt6_udrei_16, {"UDREI_16",                                 "sbas_l1.mt6.udrei_16", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2308
14
        {&hf_sbas_l1_mt6_udrei_17, {"UDREI_17",                                 "sbas_l1.mt6.udrei_17", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2309
14
        {&hf_sbas_l1_mt6_udrei_18, {"UDREI_18",                                 "sbas_l1.mt6.udrei_18", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2310
14
        {&hf_sbas_l1_mt6_udrei_19, {"UDREI_19",                                 "sbas_l1.mt6.udrei_19", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2311
14
        {&hf_sbas_l1_mt6_udrei_20, {"UDREI_20",                                 "sbas_l1.mt6.udrei_20", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2312
14
        {&hf_sbas_l1_mt6_udrei_21, {"UDREI_21",                                 "sbas_l1.mt6.udrei_21", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2313
14
        {&hf_sbas_l1_mt6_udrei_22, {"UDREI_22",                                 "sbas_l1.mt6.udrei_22", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2314
14
        {&hf_sbas_l1_mt6_udrei_23, {"UDREI_23",                                 "sbas_l1.mt6.udrei_23", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2315
14
        {&hf_sbas_l1_mt6_udrei_24, {"UDREI_24",                                 "sbas_l1.mt6.udrei_24", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2316
14
        {&hf_sbas_l1_mt6_udrei_25, {"UDREI_25",                                 "sbas_l1.mt6.udrei_25", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2317
14
        {&hf_sbas_l1_mt6_udrei_26, {"UDREI_26",                                 "sbas_l1.mt6.udrei_26", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2318
14
        {&hf_sbas_l1_mt6_udrei_27, {"UDREI_27",                                 "sbas_l1.mt6.udrei_27", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2319
14
        {&hf_sbas_l1_mt6_udrei_28, {"UDREI_28",                                 "sbas_l1.mt6.udrei_28", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2320
14
        {&hf_sbas_l1_mt6_udrei_29, {"UDREI_29",                                 "sbas_l1.mt6.udrei_29", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2321
14
        {&hf_sbas_l1_mt6_udrei_30, {"UDREI_30",                                 "sbas_l1.mt6.udrei_30", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2322
14
        {&hf_sbas_l1_mt6_udrei_31, {"UDREI_31",                                 "sbas_l1.mt6.udrei_31", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2323
14
        {&hf_sbas_l1_mt6_udrei_32, {"UDREI_32",                                 "sbas_l1.mt6.udrei_32", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2324
14
        {&hf_sbas_l1_mt6_udrei_33, {"UDREI_33",                                 "sbas_l1.mt6.udrei_33", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2325
14
        {&hf_sbas_l1_mt6_udrei_34, {"UDREI_34",                                 "sbas_l1.mt6.udrei_34", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2326
14
        {&hf_sbas_l1_mt6_udrei_35, {"UDREI_35",                                 "sbas_l1.mt6.udrei_35", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2327
14
        {&hf_sbas_l1_mt6_udrei_36, {"UDREI_36",                                 "sbas_l1.mt6.udrei_36", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2328
14
        {&hf_sbas_l1_mt6_udrei_37, {"UDREI_37",                                 "sbas_l1.mt6.udrei_37", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2329
14
        {&hf_sbas_l1_mt6_udrei_38, {"UDREI_38",                                 "sbas_l1.mt6.udrei_38", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2330
14
        {&hf_sbas_l1_mt6_udrei_39, {"UDREI_39",                                 "sbas_l1.mt6.udrei_39", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2331
14
        {&hf_sbas_l1_mt6_udrei_40, {"UDREI_40",                                 "sbas_l1.mt6.udrei_40", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2332
14
        {&hf_sbas_l1_mt6_udrei_41, {"UDREI_41",                                 "sbas_l1.mt6.udrei_41", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2333
14
        {&hf_sbas_l1_mt6_udrei_42, {"UDREI_42",                                 "sbas_l1.mt6.udrei_42", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2334
14
        {&hf_sbas_l1_mt6_udrei_43, {"UDREI_43",                                 "sbas_l1.mt6.udrei_43", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2335
14
        {&hf_sbas_l1_mt6_udrei_44, {"UDREI_44",                                 "sbas_l1.mt6.udrei_44", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2336
14
        {&hf_sbas_l1_mt6_udrei_45, {"UDREI_45",                                 "sbas_l1.mt6.udrei_45", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2337
14
        {&hf_sbas_l1_mt6_udrei_46, {"UDREI_46",                                 "sbas_l1.mt6.udrei_46", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2338
14
        {&hf_sbas_l1_mt6_udrei_47, {"UDREI_47",                                 "sbas_l1.mt6.udrei_47", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2339
14
        {&hf_sbas_l1_mt6_udrei_48, {"UDREI_48",                                 "sbas_l1.mt6.udrei_48", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2340
14
        {&hf_sbas_l1_mt6_udrei_49, {"UDREI_49",                                 "sbas_l1.mt6.udrei_49", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2341
14
        {&hf_sbas_l1_mt6_udrei_50, {"UDREI_50",                                 "sbas_l1.mt6.udrei_50", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2342
14
        {&hf_sbas_l1_mt6_udrei_51, {"UDREI_51",                                 "sbas_l1.mt6.udrei_51", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2343
2344
        // MT7
2345
14
        {&hf_sbas_l1_mt7,          {"MT7",                                "sbas_l1.mt7",          FT_NONE,   BASE_NONE, NULL,                               0x0,    NULL, HFILL}},
2346
14
        {&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}},
2347
14
        {&hf_sbas_l1_mt7_iodp,     {"Issue of Data - PRN (IODP)",         "sbas_l1.mt7.iodp",     FT_UINT8,  BASE_DEC,  NULL,                               0x30,   NULL, HFILL}},
2348
14
        {&hf_sbas_l1_mt7_spare,    {"Spare",                              "sbas_l1.mt7.spare",    FT_UINT8,  BASE_DEC,  NULL,                               0x0c,   NULL, HFILL}},
2349
14
        {&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}},
2350
14
        {&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}},
2351
14
        {&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}},
2352
14
        {&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}},
2353
14
        {&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}},
2354
14
        {&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}},
2355
14
        {&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}},
2356
14
        {&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}},
2357
14
        {&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}},
2358
14
        {&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}},
2359
14
        {&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}},
2360
14
        {&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}},
2361
14
        {&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}},
2362
14
        {&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}},
2363
14
        {&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}},
2364
14
        {&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}},
2365
14
        {&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}},
2366
14
        {&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}},
2367
14
        {&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}},
2368
14
        {&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}},
2369
14
        {&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}},
2370
14
        {&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}},
2371
14
        {&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}},
2372
14
        {&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}},
2373
14
        {&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}},
2374
14
        {&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}},
2375
14
        {&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}},
2376
14
        {&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}},
2377
14
        {&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}},
2378
14
        {&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}},
2379
14
        {&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}},
2380
14
        {&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}},
2381
14
        {&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}},
2382
14
        {&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}},
2383
14
        {&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}},
2384
14
        {&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}},
2385
14
        {&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}},
2386
14
        {&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}},
2387
14
        {&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}},
2388
14
        {&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}},
2389
14
        {&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}},
2390
14
        {&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}},
2391
14
        {&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}},
2392
14
        {&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}},
2393
14
        {&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}},
2394
14
        {&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}},
2395
14
        {&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}},
2396
14
        {&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}},
2397
14
        {&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}},
2398
14
        {&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}},
2399
14
        {&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}},
2400
2401
        // MT9
2402
14
        {&hf_sbas_l1_mt9,          {"MT9",                                  "sbas_l1.mt9",          FT_NONE,   BASE_NONE,   NULL,                                0x0,        NULL, HFILL}},
2403
14
        {&hf_sbas_l1_mt9_reserved, {"Reserved",                             "sbas_l1.mt9.reserved", FT_UINT32, BASE_HEX,    NULL,                                0x03fc0000, NULL, HFILL}},
2404
14
        {&hf_sbas_l1_mt9_t_0_geo,  {"t_0,GEO",                              "sbas_l1.mt9.t_0_geo",  FT_UINT32, BASE_CUSTOM, CF_FUNC(&fmt_time_of_applicability), 0x0003ffe0, NULL, HFILL}},
2405
14
        {&hf_sbas_l1_mt9_ura,      {"User Range Accuracy (URA)",            "sbas_l1.mt9.ura",      FT_UINT32, BASE_DEC,    VALS(URA),                           0x0000001e, NULL, HFILL}},
2406
14
        {&hf_sbas_l1_mt9_x_g,      {"X_G",                                  "sbas_l1.mt9.x_g",      FT_INT64,  BASE_CUSTOM, CF_FUNC(&fmt_geo_xy_position2),      0x01fffffff8000000, NULL, HFILL}},
2407
14
        {&hf_sbas_l1_mt9_y_g,      {"Y_G",                                  "sbas_l1.mt9.y_g",      FT_INT64,  BASE_CUSTOM, CF_FUNC(&fmt_geo_xy_position2),      0x07ffffffe0000000, NULL, HFILL}},
2408
14
        {&hf_sbas_l1_mt9_z_g,      {"Z_G",                                  "sbas_l1.mt9.z_g",      FT_INT64,  BASE_CUSTOM, CF_FUNC(&fmt_geo_z_position2),       0x1ffffff000000000, NULL, HFILL}},
2409
14
        {&hf_sbas_l1_mt9_x_g_vel,  {"X_G velocity",                         "sbas_l1.mt9.x_g_vel",  FT_INT32,  BASE_CUSTOM, CF_FUNC(&fmt_geo_xy_velocity2),      0x0ffff800,         NULL, HFILL}},
2410
14
        {&hf_sbas_l1_mt9_y_g_vel,  {"Y_G velocity",                         "sbas_l1.mt9.y_g_vel",  FT_INT32,  BASE_CUSTOM, CF_FUNC(&fmt_geo_xy_velocity2),      0x07fffc00,         NULL, HFILL}},
2411
14
        {&hf_sbas_l1_mt9_z_g_vel,  {"Z_G velocity",                         "sbas_l1.mt9.z_g_vel",  FT_INT32,  BASE_CUSTOM, CF_FUNC(&fmt_geo_z_velocity2),       0x03ffff00,         NULL, HFILL}},
2412
14
        {&hf_sbas_l1_mt9_x_g_acc,  {"X_G acceleration",                     "sbas_l1.mt9.x_g_acc",  FT_INT32,  BASE_CUSTOM, CF_FUNC(&fmt_geo_xy_acceleration),   0xffc00000,         NULL, HFILL}},
2413
14
        {&hf_sbas_l1_mt9_y_g_acc,  {"Y_G acceleration",                     "sbas_l1.mt9.y_g_acc",  FT_INT32,  BASE_CUSTOM, CF_FUNC(&fmt_geo_xy_acceleration),   0x003ff000,         NULL, HFILL}},
2414
14
        {&hf_sbas_l1_mt9_z_g_acc,  {"Z_G acceleration",                     "sbas_l1.mt9.z_g_acc",  FT_INT32,  BASE_CUSTOM, CF_FUNC(&fmt_geo_z_acceleration),    0x00000ffc,         NULL, HFILL}},
2415
14
        {&hf_sbas_l1_mt9_a_gf0,    {"Time offset of the GEO clock (a_Gf0)", "sbas_l1.mt9.a_gf0",    FT_INT32,  BASE_CUSTOM, CF_FUNC(&fmt_clock_correction),      0x03ffc000,         NULL, HFILL}},
2416
14
        {&hf_sbas_l1_mt9_a_gf1,    {"Drift rate of the GEO clock (a_Gf1)",  "sbas_l1.mt9.a_gf1",    FT_INT32,  BASE_CUSTOM, CF_FUNC(&fmt_clk_rate_correction2),  0x00003fc0,         NULL, HFILL}},
2417
2418
        // MT10
2419
14
        {&hf_sbas_l1_mt10,              {"MT10",         "sbas_l1.mt10",              FT_NONE,   BASE_NONE,                 NULL,                       0x0,                NULL, HFILL}},
2420
14
        {&hf_sbas_l1_mt10_b_rrc,        {"B_rrc",        "sbas_l1.mt10.b_rrc",        FT_UINT32, BASE_CUSTOM,               CF_FUNC(&fmt_0_002m),       0x03ff0000,         NULL, HFILL}},
2421
14
        {&hf_sbas_l1_mt10_c_ltc_lsb,    {"C_ltc_lsb",    "sbas_l1.mt10.c_ltc_lsb",    FT_UINT32, BASE_CUSTOM,               CF_FUNC(&fmt_0_002m),       0x0000ffc0,         NULL, HFILL}},
2422
14
        {&hf_sbas_l1_mt10_c_ltc_v1,     {"C_ltc_v1",     "sbas_l1.mt10.c_ltc_v1",     FT_UINT32, BASE_CUSTOM,               CF_FUNC(&fmt_0_00005ms),    0x3ff00000,         NULL, HFILL}},
2423
14
        {&hf_sbas_l1_mt10_i_ltc_v1,     {"I_ltc_v1",     "sbas_l1.mt10.i_ltc_v1",     FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_second_seconds), 0x000ff800,         NULL, HFILL}},
2424
14
        {&hf_sbas_l1_mt10_c_ltc_v0,     {"C_ltc_v0",     "sbas_l1.mt10.c_ltc_v0",     FT_UINT32, BASE_CUSTOM,               CF_FUNC(&fmt_0_002m),       0x000007fe,         NULL, HFILL}},
2425
14
        {&hf_sbas_l1_mt10_i_ltc_v0,     {"I_ltc_v0",     "sbas_l1.mt10.i_ltc_v0",     FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_second_seconds), 0x01ff0000,         NULL, HFILL}},
2426
14
        {&hf_sbas_l1_mt10_c_geo_lsb,    {"C_geo_lsb",    "sbas_l1.mt10.c_geo_lsb",    FT_UINT32, BASE_CUSTOM,               CF_FUNC(&fmt_0_0005m),      0x0000ffc0,         NULL, HFILL}},
2427
14
        {&hf_sbas_l1_mt10_c_geo_v,      {"C_geo_v",      "sbas_l1.mt10.c_geo_v",      FT_UINT32, BASE_CUSTOM,               CF_FUNC(&fmt_0_00005ms),    0x3ff00000,         NULL, HFILL}},
2428
14
        {&hf_sbas_l1_mt10_i_geo,        {"I_geo",        "sbas_l1.mt10.i_geo",        FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_second_seconds), 0x000ff800,         NULL, HFILL}},
2429
14
        {&hf_sbas_l1_mt10_c_er,         {"C_er",         "sbas_l1.mt10.c_er",         FT_UINT32, BASE_CUSTOM,               CF_FUNC(&fmt_0_5m),         0x000007e0,         NULL, HFILL}},
2430
14
        {&hf_sbas_l1_mt10_c_iono_step,  {"C_iono_step",  "sbas_l1.mt10.c_iono_step",  FT_UINT32, BASE_CUSTOM,               CF_FUNC(&fmt_0_001m),       0x1ff80000,         NULL, HFILL}},
2431
14
        {&hf_sbas_l1_mt10_i_iono,       {"I_iono",       "sbas_l1.mt10.i_iono",       FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_second_seconds), 0x0007fc00,         NULL, HFILL}},
2432
14
        {&hf_sbas_l1_mt10_c_iono_ramp,  {"C_iono_ramp",  "sbas_l1.mt10.c_iono_ramp",  FT_UINT32, BASE_CUSTOM,               CF_FUNC(&fmt_0_000005ms),   0x000003ff,         NULL, HFILL}},
2433
14
        {&hf_sbas_l1_mt10_rss_udre,     {"RSS_UDRE",     "sbas_l1.mt10.rss_udre",     FT_UINT32, BASE_DEC,                  VALS(RSS_FLAG),             0x80000000,         NULL, HFILL}},
2434
14
        {&hf_sbas_l1_mt10_rss_iono,     {"RSS_IONO",     "sbas_l1.mt10.rss_iono",     FT_UINT32, BASE_DEC,                  VALS(RSS_FLAG),             0x40000000,         NULL, HFILL}},
2435
14
        {&hf_sbas_l1_mt10_c_covariance, {"C_covariance", "sbas_l1.mt10.c_covariance", FT_UINT32, BASE_CUSTOM,               CF_FUNC(&fmt_0_1),          0x3f800000,         NULL, HFILL}},
2436
14
        {&hf_sbas_l1_mt10_spare_1,      {"Spare",        "sbas_l1.mt10.spare_1",      FT_UINT32, BASE_HEX,                  NULL,                       0x007fffff,         NULL, HFILL}},
2437
14
        {&hf_sbas_l1_mt10_spare_2,      {"Spare",        "sbas_l1.mt10.spare_2",      FT_UINT64, BASE_HEX,                  NULL,                       0xffffffffffffffc0, NULL, HFILL}},
2438
2439
        // MT12
2440
14
        {&hf_sbas_l1_mt12,               {"MT12",                     "sbas_l1.mt12",               FT_NONE,   BASE_NONE,                 NULL,                       0x0,                NULL, HFILL}},
2441
14
        {&hf_sbas_l1_mt12_a_1snt,        {"A_1SNT",                   "sbas_l1.mt12.a_1snt",        FT_INT32,  BASE_CUSTOM,               CF_FUNC(&fmt_a1),           0x03fffffc,         NULL, HFILL}},
2442
14
        {&hf_sbas_l1_mt12_a_0snt,        {"A_0SNT",                   "sbas_l1.mt12.a_0snt",        FT_INT64,  BASE_CUSTOM,               CF_FUNC(&fmt_a0),           0x03fffffffc000000, NULL, HFILL}},
2443
14
        {&hf_sbas_l1_mt12_t_0t,          {"t_0t",                     "sbas_l1.mt12.t_0t",          FT_UINT16, BASE_CUSTOM,               CF_FUNC(&fmt_t_0t),         0x03fc,             NULL, HFILL}},
2444
14
        {&hf_sbas_l1_mt12_wn_t,          {"WN_t",                     "sbas_l1.mt12.wn_t",          FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_week_weeks),     0x03fc,             NULL, HFILL}},
2445
14
        {&hf_sbas_l1_mt12_delta_t_ls,    {UTF8_CAPITAL_DELTA "t_LS",  "sbas_l1.mt12.delta_t_ls",    FT_INT16,  BASE_DEC|BASE_UNIT_STRING, UNS(&units_second_seconds), 0x03fc,             NULL, HFILL}},
2446
14
        {&hf_sbas_l1_mt12_wn_lsf,        {"WN_LSF",                   "sbas_l1.mt12.wn_lsf",        FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_week_weeks),     0x03fc,             NULL, HFILL}},
2447
14
        {&hf_sbas_l1_mt12_dn,            {"DN",                       "sbas_l1.mt12.dn",            FT_UINT16, BASE_DEC,                  VALS(DAY_NUMBER),           0x03fc,             NULL, HFILL}},
2448
14
        {&hf_sbas_l1_mt12_delta_t_lsf,   {UTF8_CAPITAL_DELTA "t_LSF", "sbas_l1.mt12.delta_t_lsf",   FT_INT16,  BASE_DEC|BASE_UNIT_STRING, UNS(&units_second_seconds), 0x03fc,             NULL, HFILL}},
2449
14
        {&hf_sbas_l1_mt12_utc_std_id,    {"UTC standard identifier",  "sbas_l1.mt12.utc_std_id",    FT_UINT16, BASE_DEC,                  VALS(UTC_STD_ID),           0x0380,             NULL, HFILL}},
2450
14
        {&hf_sbas_l1_mt12_gps_tow,       {"GPS time-of-week (TOW)",   "sbas_l1.mt12.gps_tow",       FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_second_seconds), 0x7ffff800,         NULL, HFILL}},
2451
14
        {&hf_sbas_l1_mt12_gps_wn,        {"GPS week number (WN)",     "sbas_l1.mt12.gps_wn",        FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_week_weeks),     0x07fe,             NULL, HFILL}},
2452
14
        {&hf_sbas_l1_mt12_glo_ind,       {"GLONASS indicator",        "sbas_l1.mt12.glo_ind",       FT_UINT8,  BASE_HEX,                  NULL,                       0x01,               NULL, HFILL}},
2453
14
        {&hf_sbas_l1_mt12_delta_a_i_glo, {UTF8_DELTA "a_i,GLONASS",   "sbas_l1.mt12.delta_a_i_glo", FT_INT24,  BASE_DEC,                  NULL,                       0xffffff,           NULL, HFILL}},
2454
14
        {&hf_sbas_l1_mt12_spare,         {"Spare",                    "sbas_l1.mt12.spare",         FT_UINT64, BASE_HEX,                  NULL,                       0x00ffffffffffffc0, NULL, HFILL}},
2455
2456
        // MT17
2457
14
        {&hf_sbas_l1_mt17,                                                {"MT17",                                   "sbas_l1.mt17",                                                FT_NONE,    BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2458
14
        {&hf_sbas_l1_mt17_reserved,                                       {"Reserved",                               "sbas_l1.mt17.reserved",                                       FT_UINT8,   BASE_HEX,    NULL,                          0xc0,       NULL, HFILL}},
2459
14
        {&hf_sbas_l1_mt17_prn,                                            {"PRN",                                    "sbas_l1.mt17.prn",                                            FT_UINT16,  BASE_DEC,    NULL,                          0x3fc0,     NULL, HFILL}},
2460
14
        {&hf_sbas_l1_mt17_health_and_status,                              {"Health and Status",                      "sbas_l1.mt17.health_and_status",                              FT_UINT16,  BASE_HEX,    NULL,                          0x3fc0,     NULL, HFILL}},
2461
14
        {&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}},
2462
14
        {&hf_sbas_l1_mt17_health_and_status_spare,                        {"Spare",                                  "sbas_l1.mt17.health_and_status.spare",                        FT_UINT16,  BASE_HEX,    NULL,                          0x0200,     NULL, HFILL}},
2463
14
        {&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}},
2464
14
        {&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}},
2465
14
        {&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}},
2466
14
        {&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}},
2467
14
        {&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}},
2468
14
        {&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}},
2469
14
        {&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}},
2470
14
        {&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}},
2471
14
        {&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}},
2472
14
        {&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}},
2473
2474
        // MT18
2475
14
        {&hf_sbas_l1_mt18,                {"MT18",                                "sbas_l1.mt18",                FT_NONE,   BASE_NONE, NULL, 0x0,                NULL, HFILL}},
2476
14
        {&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}},
2477
14
        {&hf_sbas_l1_mt18_igp_band_id,    {"IGP Band ID",                         "sbas_l1.mt18.igp_band_id",    FT_UINT16, BASE_DEC,  NULL, 0x003c,             NULL, HFILL}},
2478
14
        {&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}},
2479
14
        {&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}},
2480
14
        {&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}},
2481
14
        {&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}},
2482
14
        {&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}},
2483
14
        {&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}},
2484
14
        {&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}},
2485
14
        {&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}},
2486
14
        {&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}},
2487
14
        {&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}},
2488
14
        {&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}},
2489
14
        {&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}},
2490
14
        {&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}},
2491
14
        {&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}},
2492
14
        {&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}},
2493
14
        {&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}},
2494
14
        {&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}},
2495
14
        {&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}},
2496
14
        {&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}},
2497
14
        {&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}},
2498
14
        {&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}},
2499
14
        {&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}},
2500
14
        {&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}},
2501
14
        {&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}},
2502
14
        {&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}},
2503
14
        {&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}},
2504
14
        {&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}},
2505
14
        {&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}},
2506
14
        {&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}},
2507
14
        {&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}},
2508
14
        {&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}},
2509
14
        {&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}},
2510
14
        {&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}},
2511
14
        {&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}},
2512
14
        {&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}},
2513
14
        {&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}},
2514
14
        {&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}},
2515
14
        {&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}},
2516
14
        {&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}},
2517
14
        {&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}},
2518
14
        {&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}},
2519
14
        {&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}},
2520
14
        {&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}},
2521
14
        {&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}},
2522
14
        {&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}},
2523
14
        {&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}},
2524
14
        {&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}},
2525
14
        {&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}},
2526
14
        {&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}},
2527
14
        {&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}},
2528
14
        {&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}},
2529
14
        {&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}},
2530
14
        {&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}},
2531
14
        {&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}},
2532
14
        {&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}},
2533
14
        {&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}},
2534
14
        {&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}},
2535
14
        {&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}},
2536
14
        {&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}},
2537
14
        {&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}},
2538
14
        {&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}},
2539
14
        {&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}},
2540
14
        {&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}},
2541
14
        {&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}},
2542
14
        {&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}},
2543
14
        {&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}},
2544
14
        {&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}},
2545
14
        {&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}},
2546
14
        {&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}},
2547
14
        {&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}},
2548
14
        {&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}},
2549
14
        {&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}},
2550
14
        {&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}},
2551
14
        {&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}},
2552
14
        {&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}},
2553
14
        {&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}},
2554
14
        {&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}},
2555
14
        {&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}},
2556
14
        {&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}},
2557
14
        {&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}},
2558
14
        {&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}},
2559
14
        {&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}},
2560
14
        {&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}},
2561
14
        {&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}},
2562
14
        {&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}},
2563
14
        {&hf_sbas_l1_mt18_spare,          {"Spare",                               "sbas_l1.mt18.spare",          FT_UINT8,  BASE_HEX,  NULL, 0x40,               NULL, HFILL}},
2564
2565
        // MT24
2566
14
        {&hf_sbas_l1_mt24,                  {"MT24",                                     "sbas_l1.mt24",                  FT_NONE,   BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2567
14
        {&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}},
2568
14
        {&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}},
2569
14
        {&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}},
2570
14
        {&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}},
2571
14
        {&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}},
2572
14
        {&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}},
2573
14
        {&hf_sbas_l1_mt24_udrei_i1,         {"UDREI_i1",                                 "sbas_l1.mt24.udrei_i1",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2574
14
        {&hf_sbas_l1_mt24_udrei_i2,         {"UDREI_i2",                                 "sbas_l1.mt24.udrei_i2",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2575
14
        {&hf_sbas_l1_mt24_udrei_i3,         {"UDREI_i3",                                 "sbas_l1.mt24.udrei_i3",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2576
14
        {&hf_sbas_l1_mt24_udrei_i4,         {"UDREI_i4",                                 "sbas_l1.mt24.udrei_i4",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2577
14
        {&hf_sbas_l1_mt24_udrei_i5,         {"UDREI_i5",                                 "sbas_l1.mt24.udrei_i5",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2578
14
        {&hf_sbas_l1_mt24_udrei_i6,         {"UDREI_i6",                                 "sbas_l1.mt24.udrei_i6",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2579
14
        {&hf_sbas_l1_mt24_iodp,             {"Issue of Data - PRN (IODP)",               "sbas_l1.mt24.iodp",             FT_UINT8,  BASE_DEC,    NULL,                          0x03,   NULL, HFILL}},
2580
14
        {&hf_sbas_l1_mt24_fc_type,          {"Fast Correction Type ID",                  "sbas_l1.mt24.fc_type",          FT_UINT8,  BASE_DEC,    NULL,                          0xc0,   NULL, HFILL}},
2581
14
        {&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}},
2582
14
        {&hf_sbas_l1_mt24_spare,            {"Spare",                                    "sbas_l1.mt24.spare",            FT_UINT8,  BASE_DEC,    NULL,                           0x0f,    NULL, HFILL}},
2583
14
        {&hf_sbas_l1_mt24_velocity_code,    {"Velocity Code",                            "sbas_l1.mt24.velocity_code",    FT_UINT8,  BASE_DEC,    NULL,                           0x80,   NULL, HFILL}},
2584
14
        {&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}},
2585
14
        {&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}},
2586
14
        {&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}},
2587
14
        {&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}},
2588
14
        {&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}},
2589
14
        {&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}},
2590
14
        {&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}},
2591
14
        {&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}},
2592
14
        {&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}},
2593
14
        {&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}},
2594
14
        {&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}},
2595
14
        {&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}},
2596
14
        {&hf_sbas_l1_mt24_v0_iodp,          {"Issue of Data PRN (IODP)",                 "sbas_l1.mt24.v0.iodp",          FT_UINT16, BASE_DEC,    NULL,                           0x0180,   NULL, HFILL}},
2597
14
        {&hf_sbas_l1_mt24_v0_spare,         {"Spare",                                    "sbas_l1.mt24.v0.spare",         FT_UINT8,  BASE_DEC,    NULL,                           0x40,   NULL, HFILL}},
2598
14
        {&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}},
2599
14
        {&hf_sbas_l1_mt24_v1_iod,           {"Issue of Data (IOD_i)",                    "sbas_l1.mt24.v1.iod",           FT_UINT16, BASE_DEC,    NULL,                           0x01fe, NULL, HFILL}},
2600
14
        {&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}},
2601
14
        {&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}},
2602
14
        {&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}},
2603
14
        {&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}},
2604
14
        {&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}},
2605
14
        {&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}},
2606
14
        {&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}},
2607
14
        {&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}},
2608
14
        {&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}},
2609
14
        {&hf_sbas_l1_mt24_v1_iodp,          {"Issue of Data PRN (IODP)",                 "sbas_l1.mt24.v1.iodp",          FT_UINT8,  BASE_DEC,    NULL,                               0xc0,       NULL, HFILL}},
2610
2611
        // MT25
2612
14
        {&hf_sbas_l1_mt25,                       {"MT25",                     "sbas_l1.mt25",                     FT_NONE,   BASE_NONE,   NULL,                               0x0,        NULL, HFILL}},
2613
14
        {&hf_sbas_l1_mt25_h1_velocity_code,      {"Velocity Code",            "sbas_l1.mt25.h1.velocity_code",    FT_UINT8,  BASE_DEC,    NULL,                               0x02,       NULL, HFILL}},
2614
14
        {&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}},
2615
14
        {&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}},
2616
14
        {&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}},
2617
14
        {&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}},
2618
14
        {&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}},
2619
14
        {&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}},
2620
14
        {&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}},
2621
14
        {&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,                               0x00,       NULL, HFILL}},
2622
14
        {&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}},
2623
14
        {&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}},
2624
14
        {&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}},
2625
14
        {&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}},
2626
14
        {&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}},
2627
14
        {&hf_sbas_l1_mt25_h1_v0_spare,           {"Spare",                    "sbas_l1.mt25.h1.v0.spare",         FT_NONE,   BASE_NONE,   NULL,                               0x0,        NULL, HFILL}},
2628
14
        {&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}},
2629
14
        {&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}},
2630
14
        {&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}},
2631
14
        {&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}},
2632
14
        {&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}},
2633
14
        {&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}},
2634
14
        {&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}},
2635
14
        {&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}},
2636
14
        {&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}},
2637
14
        {&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}},
2638
14
        {&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}},
2639
14
        {&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}},
2640
14
        {&hf_sbas_l1_mt25_h2_velocity_code,      {"Velocity Code",            "sbas_l1.mt25.h2.velocity_code",    FT_UINT8,  BASE_DEC,    NULL,                               0x80,       NULL, HFILL}},
2641
14
        {&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}},
2642
14
        {&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}},
2643
14
        {&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}},
2644
14
        {&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}},
2645
14
        {&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}},
2646
14
        {&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}},
2647
14
        {&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}},
2648
14
        {&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}},
2649
14
        {&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}},
2650
14
        {&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}},
2651
14
        {&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}},
2652
14
        {&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}},
2653
14
        {&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}},
2654
14
        {&hf_sbas_l1_mt25_h2_v0_spare,           {"Spare",                    "sbas_l1.mt25.h2.v0.spare",         FT_NONE,   BASE_NONE,   NULL,                               0x0,        NULL, HFILL}},
2655
14
        {&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}},
2656
14
        {&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}},
2657
14
        {&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}},
2658
14
        {&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}},
2659
14
        {&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}},
2660
14
        {&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}},
2661
14
        {&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}},
2662
14
        {&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}},
2663
14
        {&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}},
2664
14
        {&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}},
2665
14
        {&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}},
2666
14
        {&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}},
2667
2668
        // MT26
2669
14
        {&hf_sbas_l1_mt26,                           {"MT26",                          "sbas_l1.mt26",                                     FT_NONE,   BASE_NONE,   NULL,                          0x0,    NULL, HFILL}},
2670
14
        {&hf_sbas_l1_mt26_igp_band_id,               {"IGP Band Identifier",           "sbas_l1.mt26.igp_band_id",                         FT_UINT16, BASE_DEC,    NULL,                          0x03c0, NULL, HFILL}},
2671
14
        {&hf_sbas_l1_mt26_igp_block_id,              {"IGP Block Identifier",          "sbas_l1.mt26.igp_block_id",                        FT_UINT16, BASE_DEC,    NULL,                          0x3c,   NULL, HFILL}},
2672
14
        {&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}},
2673
14
        {&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}},
2674
14
        {&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}},
2675
14
        {&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}},
2676
14
        {&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}},
2677
14
        {&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}},
2678
14
        {&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}},
2679
14
        {&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}},
2680
14
        {&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}},
2681
14
        {&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}},
2682
14
        {&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}},
2683
14
        {&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}},
2684
14
        {&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}},
2685
14
        {&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}},
2686
14
        {&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}},
2687
14
        {&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}},
2688
14
        {&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}},
2689
14
        {&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}},
2690
14
        {&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}},
2691
14
        {&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}},
2692
14
        {&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}},
2693
14
        {&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}},
2694
14
        {&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}},
2695
14
        {&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}},
2696
14
        {&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}},
2697
14
        {&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}},
2698
14
        {&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}},
2699
14
        {&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}},
2700
14
        {&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}},
2701
14
        {&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}},
2702
14
        {&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}},
2703
14
        {&hf_sbas_l1_mt26_spare,                      {"Spare", "sbas_l1.mt26.spare",                                                      FT_UINT16, BASE_DEC,    NULL,                          0x1fc0, NULL, HFILL}},
2704
2705
        // MT27
2706
14
        {&hf_sbas_l1_mt27,                  {"MT27",                              "sbas_l1.mt27",              FT_NONE,   BASE_NONE,                  NULL,                       0x0,                NULL, HFILL}},
2707
14
        {&hf_sbas_l1_mt27_iods,             {"Issue of Data, service (IODS)",     "sbas_l1.mt27.iods",         FT_UINT16, BASE_DEC,                   NULL,                       0x0380,             NULL, HFILL}},
2708
14
        {&hf_sbas_l1_mt27_num_svc_msgs,     {"Number of Service Messages",        "sbas_l1.mt27.num_svc_msgs", FT_UINT16, BASE_CUSTOM,                CF_FUNC(&fmt_num_svc_msg),  0x7000,             NULL, HFILL}},
2709
14
        {&hf_sbas_l1_mt27_svc_msg_num,      {"Service Message Number",            "sbas_l1.mt27.svc_msg_num",  FT_UINT16, BASE_CUSTOM,                CF_FUNC(&fmt_num_svc_msg),  0x0e00,             NULL, HFILL}},
2710
14
        {&hf_sbas_l1_mt27_num_regions,      {"Number of Regions",                 "sbas_l1.mt27.num_regions",  FT_UINT16, BASE_DEC,                   NULL,                       0x01c0,             NULL, HFILL}},
2711
14
        {&hf_sbas_l1_mt27_prio_code,        {"Priority Code",                     "sbas_l1.mt27.prio_code",    FT_UINT16, BASE_DEC,                   NULL,                       0x0030,             NULL, HFILL}},
2712
14
        {&hf_sbas_l1_mt27_dudre_in,         {UTF8_DELTA "UDRE indicator-inside",  "sbas_l1.mt27.dudre_in",     FT_UINT16, BASE_DEC,                   VALS(DELTA_UDRE_INDICATOR), 0x000f,             NULL, HFILL}},
2713
14
        {&hf_sbas_l1_mt27_dudre_out,        {UTF8_DELTA "UDRE indicator-outside", "sbas_l1.mt27.dudre_out",    FT_UINT16, BASE_DEC,                   VALS(DELTA_UDRE_INDICATOR), 0xf000,             NULL, HFILL}},
2714
14
        {&hf_sbas_l1_mt27_region[0],        {"Region 1",                          "sbas_l1.mt27.r1",           FT_UINT64, BASE_HEX,                   NULL,                       0x0000000000000000, NULL, HFILL}},
2715
14
        {&hf_sbas_l1_mt27_region_c1_lat[0], {"Coordinate 1 Latitude",             "sbas_l1.mt27.r1.c1.lat",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x0ff0000000000000, NULL, HFILL}},
2716
14
        {&hf_sbas_l1_mt27_region_c1_lon[0], {"Coordinate 1 Longitude",            "sbas_l1.mt27.r1.c1.lon",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x000ff80000000000, NULL, HFILL}},
2717
14
        {&hf_sbas_l1_mt27_region_c2_lat[0], {"Coordinate 2 Latitude",             "sbas_l1.mt27.r1.c2.lat",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x000007f800000000, NULL, HFILL}},
2718
14
        {&hf_sbas_l1_mt27_region_c2_lon[0], {"Coordinate 2 Longitude",            "sbas_l1.mt27.r1.c2.lon",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x00000007fc000000, NULL, HFILL}},
2719
14
        {&hf_sbas_l1_mt27_region_shape[0],  {"Region Shape",                      "sbas_l1.mt27.r1.shape",     FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(REGION_SHAPE),       0x0000000002000000, NULL, HFILL}},
2720
14
        {&hf_sbas_l1_mt27_region[1],        {"Region 2",                          "sbas_l1.mt27.r2",           FT_UINT64, BASE_HEX,    NULL,                       0x0000000000000000, NULL, HFILL}},
2721
14
        {&hf_sbas_l1_mt27_region_c1_lat[1], {"Coordinate 1 Latitude",             "sbas_l1.mt27.r2.c1.lat",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x01fe000000000000, NULL, HFILL}},
2722
14
        {&hf_sbas_l1_mt27_region_c1_lon[1], {"Coordinate 1 Longitude",            "sbas_l1.mt27.r2.c1.lon",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x0001ff0000000000, NULL, HFILL}},
2723
14
        {&hf_sbas_l1_mt27_region_c2_lat[1], {"Coordinate 2 Latitude",             "sbas_l1.mt27.r2.c2.lat",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x000000ff00000000, NULL, HFILL}},
2724
14
        {&hf_sbas_l1_mt27_region_c2_lon[1], {"Coordinate 2 Longitude",            "sbas_l1.mt27.r2.c2.lon",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x00000000ff800000, NULL, HFILL}},
2725
14
        {&hf_sbas_l1_mt27_region_shape[1],  {"Region Shape",                      "sbas_l1.mt27.r2.shape",     FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(REGION_SHAPE),       0x0000000000400000, NULL, HFILL}},
2726
14
        {&hf_sbas_l1_mt27_region[2],        {"Region 3",                          "sbas_l1.mt27.r3",           FT_UINT64, BASE_HEX,    NULL,                       0x0000000000000000, NULL, HFILL}},
2727
14
        {&hf_sbas_l1_mt27_region_c1_lat[2], {"Coordinate 1 Latitude",             "sbas_l1.mt27.r3.c1.lat",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x3fc0000000000000, NULL, HFILL}},
2728
14
        {&hf_sbas_l1_mt27_region_c1_lon[2], {"Coordinate 1 Longitude",            "sbas_l1.mt27.r3.c1.lon",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x003fe00000000000, NULL, HFILL}},
2729
14
        {&hf_sbas_l1_mt27_region_c2_lat[2], {"Coordinate 2 Latitude",             "sbas_l1.mt27.r3.c2.lat",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x00001fe000000000, NULL, HFILL}},
2730
14
        {&hf_sbas_l1_mt27_region_c2_lon[2], {"Coordinate 2 Longitude",            "sbas_l1.mt27.r3.c2.lon",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x0000001ff0000000, NULL, HFILL}},
2731
14
        {&hf_sbas_l1_mt27_region_shape[2],  {"Region Shape",                      "sbas_l1.mt27.r3.shape",     FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(REGION_SHAPE),       0x0000000008000000, NULL, HFILL}},
2732
14
        {&hf_sbas_l1_mt27_region[3],        {"Region 4",                          "sbas_l1.mt27.r4",           FT_UINT64, BASE_HEX,    NULL,                       0x0000000000000000, NULL, HFILL}},
2733
14
        {&hf_sbas_l1_mt27_region_c1_lat[3], {"Coordinate 1 Latitude",             "sbas_l1.mt27.r4.c1.lat",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x07f8000000000000, NULL, HFILL}},
2734
14
        {&hf_sbas_l1_mt27_region_c1_lon[3], {"Coordinate 1 Longitude",            "sbas_l1.mt27.r4.c1.lon",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x0007fc0000000000, NULL, HFILL}},
2735
14
        {&hf_sbas_l1_mt27_region_c2_lat[3], {"Coordinate 2 Latitude",             "sbas_l1.mt27.r4.c2.lat",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x000003fc00000000, NULL, HFILL}},
2736
14
        {&hf_sbas_l1_mt27_region_c2_lon[3], {"Coordinate 2 Longitude",            "sbas_l1.mt27.r4.c2.lon",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x00000003fe000000, NULL, HFILL}},
2737
14
        {&hf_sbas_l1_mt27_region_shape[3],  {"Region Shape",                      "sbas_l1.mt27.r4.shape",     FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(REGION_SHAPE),       0x0000000001000000, NULL, HFILL}},
2738
14
        {&hf_sbas_l1_mt27_region[4],        {"Region 5",                          "sbas_l1.mt27.r5",           FT_UINT64, BASE_HEX,    NULL,                       0x0000000000000000, NULL, HFILL}},
2739
14
        {&hf_sbas_l1_mt27_region_c1_lat[4], {"Coordinate 1 Latitude",             "sbas_l1.mt27.r5.c1.lat",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x00ff000000000000, NULL, HFILL}},
2740
14
        {&hf_sbas_l1_mt27_region_c1_lon[4], {"Coordinate 1 Longitude",            "sbas_l1.mt27.r5.c1.lon",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x0000ff8000000000, NULL, HFILL}},
2741
14
        {&hf_sbas_l1_mt27_region_c2_lat[4], {"Coordinate 2 Latitude",             "sbas_l1.mt27.r5.c2.lat",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x0000007f80000000, NULL, HFILL}},
2742
14
        {&hf_sbas_l1_mt27_region_c2_lon[4], {"Coordinate 2 Longitude",            "sbas_l1.mt27.r5.c2.lon",    FT_INT64,  BASE_DEC|BASE_UNIT_STRING,  UNS(&units_degree_bearing), 0x000000007fc00000, NULL, HFILL}},
2743
14
        {&hf_sbas_l1_mt27_region_shape[4],  {"Region Shape",                      "sbas_l1.mt27.r5.shape",     FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(REGION_SHAPE),       0x0000000000200000, NULL, HFILL}},
2744
14
        {&hf_sbas_l1_mt27_spare,            {"Spare",                             "sbas_l1.mt27.spare",        FT_UINT32, BASE_HEX,                   NULL,                       0x001fffc0,         NULL, HFILL}},
2745
2746
        // MT28
2747
14
        {&hf_sbas_l1_mt28,                {"MT28",                       "sbas_l1.mt28",               FT_NONE,   BASE_NONE, NULL, 0x0,        NULL, HFILL}},
2748
14
        {&hf_sbas_l1_mt28_iodp,           {"Issue of Data - PRN (IODP)", "sbas_l1.mt28.iodp",          FT_UINT8,  BASE_DEC,  NULL, 0x03,       NULL, HFILL}},
2749
14
        {&hf_sbas_l1_mt28_prn_mask_nr_1, {"PRN Mask Number",             "sbas_l1.mt28.prn_mask_nr_1", FT_UINT8,  BASE_DEC,  NULL, 0xfc,       NULL, HFILL}},
2750
14
        {&hf_sbas_l1_mt28_scale_exp_1,   {"Scale Exponent",              "sbas_l1.mt28.scale_exp_1",   FT_UINT16, BASE_DEC,  NULL, 0x0380,     NULL, HFILL}},
2751
14
        {&hf_sbas_l1_mt28_e_1_1_1,       {"E_1,1",                       "sbas_l1.mt28.e_1_1_1",       FT_UINT32, BASE_DEC,  NULL, 0x7fc00000, NULL, HFILL}},
2752
14
        {&hf_sbas_l1_mt28_e_2_2_1,       {"E_2,2",                       "sbas_l1.mt28.e_2_2_1",       FT_UINT32, BASE_DEC,  NULL, 0x003fe000, NULL, HFILL}},
2753
14
        {&hf_sbas_l1_mt28_e_3_3_1,       {"E_3,3",                       "sbas_l1.mt28.e_3_3_1",       FT_UINT32, BASE_DEC,  NULL, 0x00001ff0, NULL, HFILL}},
2754
14
        {&hf_sbas_l1_mt28_e_4_4_1,       {"E_4,4",                       "sbas_l1.mt28.e_4_4_1",       FT_UINT32, BASE_DEC,  NULL, 0x0ff80000, NULL, HFILL}},
2755
14
        {&hf_sbas_l1_mt28_e_1_2_1,       {"E_1,2",                       "sbas_l1.mt28.e_1_2_1",       FT_INT32,  BASE_DEC,  NULL, 0x0007fe00, NULL, HFILL}},
2756
14
        {&hf_sbas_l1_mt28_e_1_3_1,       {"E_1,3",                       "sbas_l1.mt28.e_1_3_1",       FT_INT32,  BASE_DEC,  NULL, 0x01ff8000, NULL, HFILL}},
2757
14
        {&hf_sbas_l1_mt28_e_1_4_1,       {"E_1,4",                       "sbas_l1.mt28.e_1_4_1",       FT_INT32,  BASE_DEC,  NULL, 0x00007fe0, NULL, HFILL}},
2758
14
        {&hf_sbas_l1_mt28_e_2_3_1,       {"E_2,3",                       "sbas_l1.mt28.e_2_3_1",       FT_INT32,  BASE_DEC,  NULL, 0x1ff80000, NULL, HFILL}},
2759
14
        {&hf_sbas_l1_mt28_e_2_4_1,       {"E_2,4",                       "sbas_l1.mt28.e_2_4_1",       FT_INT32,  BASE_DEC,  NULL, 0x0007fe00, NULL, HFILL}},
2760
14
        {&hf_sbas_l1_mt28_e_3_4_1,       {"E_3,4",                       "sbas_l1.mt28.e_3_4_1",       FT_INT32,  BASE_DEC,  NULL, 0x01ff8000, NULL, HFILL}},
2761
14
        {&hf_sbas_l1_mt28_prn_mask_nr_2, {"PRN Mask Number",             "sbas_l1.mt28.prn_mask_nr_2", FT_UINT8,  BASE_DEC,  NULL, 0x7e,       NULL, HFILL}},
2762
14
        {&hf_sbas_l1_mt28_scale_exp_2,   {"Scale Exponent",              "sbas_l1.mt28.scale_exp_2",   FT_UINT16, BASE_DEC,  NULL, 0x01c0,     NULL, HFILL}},
2763
14
        {&hf_sbas_l1_mt28_e_1_1_2,       {"E_1,1",                       "sbas_l1.mt28.e_1_1_2",       FT_UINT32, BASE_DEC,  NULL, 0x3fe00000, NULL, HFILL}},
2764
14
        {&hf_sbas_l1_mt28_e_2_2_2,       {"E_2,2",                       "sbas_l1.mt28.e_2_2_2",       FT_UINT32, BASE_DEC,  NULL, 0x001ff000, NULL, HFILL}},
2765
14
        {&hf_sbas_l1_mt28_e_3_3_2,       {"E_3,3",                       "sbas_l1.mt28.e_3_3_2",       FT_UINT32, BASE_DEC,  NULL, 0x00000ff8, NULL, HFILL}},
2766
14
        {&hf_sbas_l1_mt28_e_4_4_2,       {"E_4,4",                       "sbas_l1.mt28.e_4_4_2",       FT_UINT32, BASE_DEC,  NULL, 0x07fc0000, NULL, HFILL}},
2767
14
        {&hf_sbas_l1_mt28_e_1_2_2,       {"E_1,2",                       "sbas_l1.mt28.e_1_2_2",       FT_INT32,  BASE_DEC,  NULL, 0x0003ff00, NULL, HFILL}},
2768
14
        {&hf_sbas_l1_mt28_e_1_3_2,       {"E_1,3",                       "sbas_l1.mt28.e_1_3_2",       FT_INT32,  BASE_DEC,  NULL, 0xffc00000, NULL, HFILL}},
2769
14
        {&hf_sbas_l1_mt28_e_1_4_2,       {"E_1,4",                       "sbas_l1.mt28.e_1_4_2",       FT_INT32,  BASE_DEC,  NULL, 0x003ff000, NULL, HFILL}},
2770
14
        {&hf_sbas_l1_mt28_e_2_3_2,       {"E_2,3",                       "sbas_l1.mt28.e_2_3_2",       FT_INT32,  BASE_DEC,  NULL, 0x00000ffc, NULL, HFILL}},
2771
14
        {&hf_sbas_l1_mt28_e_2_4_2,       {"E_2,4",                       "sbas_l1.mt28.e_2_4_2",       FT_INT32,  BASE_DEC,  NULL, 0x03ff0000, NULL, HFILL}},
2772
14
        {&hf_sbas_l1_mt28_e_3_4_2,       {"E_3,4",                       "sbas_l1.mt28.e_3_4_2",       FT_INT32,  BASE_DEC,  NULL, 0x0000ffc0, NULL, HFILL}},
2773
2774
        // MT63
2775
14
        {&hf_sbas_l1_mt63,         {"MT63",    "sbas_l1.mt63",         FT_NONE,  BASE_NONE, NULL, 0x00, NULL, HFILL}},
2776
14
        {&hf_sbas_l1_mt63_spare_1, {"Spare 1", "sbas_l1.mt63.spare_1", FT_UINT8, BASE_HEX,  NULL, 0x03, NULL, HFILL}},
2777
14
        {&hf_sbas_l1_mt63_spare_2, {"Spare 2", "sbas_l1.mt63.spare_2", FT_BYTES, SEP_SPACE, NULL, 0x00, NULL, HFILL}},
2778
14
        {&hf_sbas_l1_mt63_spare_3, {"Spare 3", "sbas_l1.mt63.spare_3", FT_UINT8, BASE_HEX,  NULL, 0xc0, NULL, HFILL}},
2779
14
    };
2780
2781
14
    expert_module_t *expert_sbas_l1;
2782
2783
14
    static ei_register_info ei[] = {
2784
14
        {&ei_sbas_l1_preamble,          {"sbas_l1.illegal_preamble",          PI_PROTOCOL, PI_WARN, "Erroneous preamble", EXPFILL}},
2785
14
        {&ei_sbas_l1_mt0,               {"sbas_l1.mt0",                       PI_PROTOCOL, PI_WARN, "MT is 0", EXPFILL}},
2786
14
        {&ei_sbas_l1_crc,               {"sbas_l1.crc",                       PI_CHECKSUM, PI_WARN, "CRC", EXPFILL}},
2787
14
        {&ei_sbas_l1_mt26_igp_band_id,  {"sbas_l1.mt26.illegal_igp_band_id",  PI_PROTOCOL, PI_WARN, "Illegal IGP Band Identifier", EXPFILL}},
2788
14
        {&ei_sbas_l1_mt26_igp_block_id, {"sbas_l1.mt26.illegal_igp_block_id", PI_PROTOCOL, PI_WARN, "Illegal IGP Block Identifier", EXPFILL}},
2789
14
    };
2790
2791
14
    static int *ett[] = {
2792
14
        &ett_sbas_l1,
2793
14
        &ett_sbas_l1_mt0,
2794
14
        &ett_sbas_l1_mt1,
2795
14
        &ett_sbas_l1_mt2,
2796
14
        &ett_sbas_l1_mt3,
2797
14
        &ett_sbas_l1_mt4,
2798
14
        &ett_sbas_l1_mt5,
2799
14
        &ett_sbas_l1_mt6,
2800
14
        &ett_sbas_l1_mt7,
2801
14
        &ett_sbas_l1_mt9,
2802
14
        &ett_sbas_l1_mt10,
2803
14
        &ett_sbas_l1_mt12,
2804
14
        &ett_sbas_l1_mt17,
2805
14
        &ett_sbas_l1_mt17_prn_data[0],
2806
14
        &ett_sbas_l1_mt17_prn_data[1],
2807
14
        &ett_sbas_l1_mt17_prn_data[2],
2808
14
        &ett_sbas_l1_mt17_health_and_status,
2809
14
        &ett_sbas_l1_mt18,
2810
14
        &ett_sbas_l1_mt24,
2811
14
        &ett_sbas_l1_mt25,
2812
14
        &ett_sbas_l1_mt26,
2813
14
        &ett_sbas_l1_mt27,
2814
14
        &ett_sbas_l1_mt27_region[0],
2815
14
        &ett_sbas_l1_mt27_region[1],
2816
14
        &ett_sbas_l1_mt27_region[2],
2817
14
        &ett_sbas_l1_mt27_region[3],
2818
14
        &ett_sbas_l1_mt27_region[4],
2819
14
        &ett_sbas_l1_mt28,
2820
14
        &ett_sbas_l1_mt28_sv_1,
2821
14
        &ett_sbas_l1_mt28_sv_2,
2822
14
        &ett_sbas_l1_mt63,
2823
14
    };
2824
2825
14
    proto_sbas_l1 = proto_register_protocol("SBAS L1 Navigation Message", "SBAS L1", "sbas_l1");
2826
2827
14
    proto_register_field_array(proto_sbas_l1, hf, array_length(hf));
2828
14
    proto_register_subtree_array(ett, array_length(ett));
2829
2830
14
    expert_sbas_l1 = expert_register_protocol(proto_sbas_l1);
2831
14
    expert_register_field_array(expert_sbas_l1, ei, array_length(ei));
2832
2833
14
    register_dissector("sbas_l1", dissect_sbas_l1, proto_sbas_l1);
2834
2835
14
    sbas_l1_mt_dissector_table = register_dissector_table("sbas_l1.mt",
2836
14
            "SBAS L1 MT", proto_sbas_l1, FT_UINT8, BASE_DEC);
2837
14
}
2838
2839
2840
14
void proto_reg_handoff_sbas_l1(void) {
2841
14
    dissector_handle_t sbas_l1_dissector_handle = create_dissector_handle(dissect_sbas_l1, proto_sbas_l1);
2842
2843
14
    dissector_add_uint("ubx.rxm.sfrbx.gnssid", GNSS_ID_SBAS, sbas_l1_dissector_handle);
2844
14
    dissector_add_string("ems.svc_flag", EMS_L1_SVC_FLAG, sbas_l1_dissector_handle);
2845
2846
14
    dissector_add_uint("sbas_l1.mt", 0,  create_dissector_handle(dissect_sbas_l1_mt0,  proto_sbas_l1));
2847
14
    dissector_add_uint("sbas_l1.mt", 1,  create_dissector_handle(dissect_sbas_l1_mt1,  proto_sbas_l1));
2848
14
    dissector_add_uint("sbas_l1.mt", 2,  create_dissector_handle(dissect_sbas_l1_mt2,  proto_sbas_l1));
2849
14
    dissector_add_uint("sbas_l1.mt", 3,  create_dissector_handle(dissect_sbas_l1_mt3,  proto_sbas_l1));
2850
14
    dissector_add_uint("sbas_l1.mt", 4,  create_dissector_handle(dissect_sbas_l1_mt4,  proto_sbas_l1));
2851
14
    dissector_add_uint("sbas_l1.mt", 5,  create_dissector_handle(dissect_sbas_l1_mt5,  proto_sbas_l1));
2852
14
    dissector_add_uint("sbas_l1.mt", 6,  create_dissector_handle(dissect_sbas_l1_mt6,  proto_sbas_l1));
2853
14
    dissector_add_uint("sbas_l1.mt", 7,  create_dissector_handle(dissect_sbas_l1_mt7,  proto_sbas_l1));
2854
14
    dissector_add_uint("sbas_l1.mt", 9,  create_dissector_handle(dissect_sbas_l1_mt9,  proto_sbas_l1));
2855
14
    dissector_add_uint("sbas_l1.mt", 10, create_dissector_handle(dissect_sbas_l1_mt10, proto_sbas_l1));
2856
14
    dissector_add_uint("sbas_l1.mt", 12, create_dissector_handle(dissect_sbas_l1_mt12, proto_sbas_l1));
2857
14
    dissector_add_uint("sbas_l1.mt", 17, create_dissector_handle(dissect_sbas_l1_mt17, proto_sbas_l1));
2858
14
    dissector_add_uint("sbas_l1.mt", 18, create_dissector_handle(dissect_sbas_l1_mt18, proto_sbas_l1));
2859
14
    dissector_add_uint("sbas_l1.mt", 24, create_dissector_handle(dissect_sbas_l1_mt24, proto_sbas_l1));
2860
14
    dissector_add_uint("sbas_l1.mt", 25, create_dissector_handle(dissect_sbas_l1_mt25, proto_sbas_l1));
2861
14
    dissector_add_uint("sbas_l1.mt", 26, create_dissector_handle(dissect_sbas_l1_mt26, proto_sbas_l1));
2862
14
    dissector_add_uint("sbas_l1.mt", 27, create_dissector_handle(dissect_sbas_l1_mt27, proto_sbas_l1));
2863
14
    dissector_add_uint("sbas_l1.mt", 28, create_dissector_handle(dissect_sbas_l1_mt28, proto_sbas_l1));
2864
14
    dissector_add_uint("sbas_l1.mt", 63, create_dissector_handle(dissect_sbas_l1_mt63, proto_sbas_l1));
2865
14
}