Coverage Report

Created: 2026-05-14 06:28

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
15
void proto_register_sbas_l1(void) {
2141
2142
15
    static hf_register_info hf[] = {
2143
15
        {&hf_sbas_l1_preamble, {"Preamble",     "sbas_l1.preamble", FT_UINT8,  BASE_HEX, NULL, 0xff,       NULL, HFILL}},
2144
15
        {&hf_sbas_l1_mt,       {"Message Type", "sbas_l1.mt"      , FT_UINT8,  BASE_DEC, NULL, 0xfc,       NULL, HFILL}},
2145
15
        {&hf_sbas_l1_chksum,   {"Checksum",     "sbas_l1.chksum"  , FT_UINT32, BASE_HEX, NULL, 0x3fffffc0, NULL, HFILL}},
2146
2147
        // MT0
2148
15
        {&hf_sbas_l1_mt0,         {"MT0",     "sbas_l1.mt0",         FT_NONE,  BASE_NONE, NULL, 0x00, NULL, HFILL}},
2149
15
        {&hf_sbas_l1_mt0_spare_1, {"Spare 1", "sbas_l1.mt0.spare_1", FT_UINT8, BASE_HEX,  NULL, 0x03, NULL, HFILL}},
2150
15
        {&hf_sbas_l1_mt0_spare_2, {"Spare 2", "sbas_l1.mt0.spare_2", FT_BYTES, SEP_SPACE, NULL, 0x00, NULL, HFILL}},
2151
15
        {&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
15
        {&hf_sbas_l1_mt1,                  {"MT1",                        "sbas_l1.mt1",                  FT_NONE,   BASE_NONE, NULL, 0x0,                          NULL, HFILL}},
2155
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt2,          {"MT2",                                      "sbas_l1.mt2",          FT_NONE,   BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2164
15
        {&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
15
        {&hf_sbas_l1_mt2_iodp,     {"Issue of Data - PRN (IODP)",               "sbas_l1.mt2.iodp",     FT_UINT8,  BASE_DEC,    NULL,                          0xc0,       NULL, HFILL}},
2166
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt2_udrei_1,  {"UDREI_1",                                  "sbas_l1.mt2.udrei_1",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2180
15
        {&hf_sbas_l1_mt2_udrei_2,  {"UDREI_2",                                  "sbas_l1.mt2.udrei_2",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2181
15
        {&hf_sbas_l1_mt2_udrei_3,  {"UDREI_3",                                  "sbas_l1.mt2.udrei_3",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2182
15
        {&hf_sbas_l1_mt2_udrei_4,  {"UDREI_4",                                  "sbas_l1.mt2.udrei_4",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2183
15
        {&hf_sbas_l1_mt2_udrei_5,  {"UDREI_5",                                  "sbas_l1.mt2.udrei_5",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2184
15
        {&hf_sbas_l1_mt2_udrei_6,  {"UDREI_6",                                  "sbas_l1.mt2.udrei_6",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2185
15
        {&hf_sbas_l1_mt2_udrei_7,  {"UDREI_7",                                  "sbas_l1.mt2.udrei_7",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2186
15
        {&hf_sbas_l1_mt2_udrei_8,  {"UDREI_8",                                  "sbas_l1.mt2.udrei_8",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2187
15
        {&hf_sbas_l1_mt2_udrei_9,  {"UDREI_9",                                  "sbas_l1.mt2.udrei_9",  FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2188
15
        {&hf_sbas_l1_mt2_udrei_10, {"UDREI_10",                                 "sbas_l1.mt2.udrei_10", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2189
15
        {&hf_sbas_l1_mt2_udrei_11, {"UDREI_11",                                 "sbas_l1.mt2.udrei_11", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2190
15
        {&hf_sbas_l1_mt2_udrei_12, {"UDREI_12",                                 "sbas_l1.mt2.udrei_12", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2191
15
        {&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
15
        {&hf_sbas_l1_mt3,          {"MT3",                                      "sbas_l1.mt3",          FT_NONE,   BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2195
15
        {&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
15
        {&hf_sbas_l1_mt3_iodp,     {"Issue of Data - PRN (IODP)",               "sbas_l1.mt3.iodp",     FT_UINT8,  BASE_DEC,    NULL,                          0xc0,       NULL, HFILL}},
2197
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt3_udrei_14, {"UDREI_14",                                 "sbas_l1.mt3.udrei_14", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2211
15
        {&hf_sbas_l1_mt3_udrei_15, {"UDREI_15",                                 "sbas_l1.mt3.udrei_15", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2212
15
        {&hf_sbas_l1_mt3_udrei_16, {"UDREI_16",                                 "sbas_l1.mt3.udrei_16", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2213
15
        {&hf_sbas_l1_mt3_udrei_17, {"UDREI_17",                                 "sbas_l1.mt3.udrei_17", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2214
15
        {&hf_sbas_l1_mt3_udrei_18, {"UDREI_18",                                 "sbas_l1.mt3.udrei_18", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2215
15
        {&hf_sbas_l1_mt3_udrei_19, {"UDREI_19",                                 "sbas_l1.mt3.udrei_19", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2216
15
        {&hf_sbas_l1_mt3_udrei_20, {"UDREI_20",                                 "sbas_l1.mt3.udrei_20", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2217
15
        {&hf_sbas_l1_mt3_udrei_21, {"UDREI_21",                                 "sbas_l1.mt3.udrei_21", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2218
15
        {&hf_sbas_l1_mt3_udrei_22, {"UDREI_22",                                 "sbas_l1.mt3.udrei_22", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2219
15
        {&hf_sbas_l1_mt3_udrei_23, {"UDREI_23",                                 "sbas_l1.mt3.udrei_23", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2220
15
        {&hf_sbas_l1_mt3_udrei_24, {"UDREI_24",                                 "sbas_l1.mt3.udrei_24", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2221
15
        {&hf_sbas_l1_mt3_udrei_25, {"UDREI_25",                                 "sbas_l1.mt3.udrei_25", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2222
15
        {&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
15
        {&hf_sbas_l1_mt4,          {"MT4",                                      "sbas_l1.mt4",          FT_NONE,   BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2226
15
        {&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
15
        {&hf_sbas_l1_mt4_iodp,     {"Issue of Data - PRN (IODP)",               "sbas_l1.mt4.iodp",     FT_UINT8,  BASE_DEC,    NULL,                          0xc0,       NULL, HFILL}},
2228
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt4_udrei_27, {"UDREI_27",                                 "sbas_l1.mt4.udrei_27", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2242
15
        {&hf_sbas_l1_mt4_udrei_28, {"UDREI_28",                                 "sbas_l1.mt4.udrei_28", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2243
15
        {&hf_sbas_l1_mt4_udrei_29, {"UDREI_29",                                 "sbas_l1.mt4.udrei_29", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2244
15
        {&hf_sbas_l1_mt4_udrei_30, {"UDREI_30",                                 "sbas_l1.mt4.udrei_30", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2245
15
        {&hf_sbas_l1_mt4_udrei_31, {"UDREI_31",                                 "sbas_l1.mt4.udrei_31", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2246
15
        {&hf_sbas_l1_mt4_udrei_32, {"UDREI_32",                                 "sbas_l1.mt4.udrei_32", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2247
15
        {&hf_sbas_l1_mt4_udrei_33, {"UDREI_33",                                 "sbas_l1.mt4.udrei_33", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2248
15
        {&hf_sbas_l1_mt4_udrei_34, {"UDREI_34",                                 "sbas_l1.mt4.udrei_34", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2249
15
        {&hf_sbas_l1_mt4_udrei_35, {"UDREI_35",                                 "sbas_l1.mt4.udrei_35", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2250
15
        {&hf_sbas_l1_mt4_udrei_36, {"UDREI_36",                                 "sbas_l1.mt4.udrei_36", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2251
15
        {&hf_sbas_l1_mt4_udrei_37, {"UDREI_37",                                 "sbas_l1.mt4.udrei_37", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2252
15
        {&hf_sbas_l1_mt4_udrei_38, {"UDREI_38",                                 "sbas_l1.mt4.udrei_38", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2253
15
        {&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
15
        {&hf_sbas_l1_mt5,          {"MT5",                                      "sbas_l1.mt5",          FT_NONE,   BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2257
15
        {&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
15
        {&hf_sbas_l1_mt5_iodp,     {"Issue of Data - PRN (IODP)",               "sbas_l1.mt5.iodp",     FT_UINT8,  BASE_DEC,    NULL,                          0xc0,       NULL, HFILL}},
2259
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt5_udrei_40, {"UDREI_40",                                 "sbas_l1.mt5.udrei_40", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2273
15
        {&hf_sbas_l1_mt5_udrei_41, {"UDREI_41",                                 "sbas_l1.mt5.udrei_41", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2274
15
        {&hf_sbas_l1_mt5_udrei_42, {"UDREI_42",                                 "sbas_l1.mt5.udrei_42", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2275
15
        {&hf_sbas_l1_mt5_udrei_43, {"UDREI_43",                                 "sbas_l1.mt5.udrei_43", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2276
15
        {&hf_sbas_l1_mt5_udrei_44, {"UDREI_44",                                 "sbas_l1.mt5.udrei_44", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2277
15
        {&hf_sbas_l1_mt5_udrei_45, {"UDREI_45",                                 "sbas_l1.mt5.udrei_45", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2278
15
        {&hf_sbas_l1_mt5_udrei_46, {"UDREI_46",                                 "sbas_l1.mt5.udrei_46", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2279
15
        {&hf_sbas_l1_mt5_udrei_47, {"UDREI_47",                                 "sbas_l1.mt5.udrei_47", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2280
15
        {&hf_sbas_l1_mt5_udrei_48, {"UDREI_48",                                 "sbas_l1.mt5.udrei_48", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2281
15
        {&hf_sbas_l1_mt5_udrei_49, {"UDREI_49",                                 "sbas_l1.mt5.udrei_49", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2282
15
        {&hf_sbas_l1_mt5_udrei_50, {"UDREI_50",                                 "sbas_l1.mt5.udrei_50", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2283
15
        {&hf_sbas_l1_mt5_udrei_51, {"UDREI_51",                                 "sbas_l1.mt5.udrei_51", FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2284
15
        {&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
15
        {&hf_sbas_l1_mt6,          {"MT6",                                      "sbas_l1.mt6",          FT_NONE,   BASE_NONE, NULL,                   0x0,    NULL, HFILL}},
2288
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt6_udrei_1,  {"UDREI_1",                                  "sbas_l1.mt6.udrei_1",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2293
15
        {&hf_sbas_l1_mt6_udrei_2,  {"UDREI_2",                                  "sbas_l1.mt6.udrei_2",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2294
15
        {&hf_sbas_l1_mt6_udrei_3,  {"UDREI_3",                                  "sbas_l1.mt6.udrei_3",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2295
15
        {&hf_sbas_l1_mt6_udrei_4,  {"UDREI_4",                                  "sbas_l1.mt6.udrei_4",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2296
15
        {&hf_sbas_l1_mt6_udrei_5,  {"UDREI_5",                                  "sbas_l1.mt6.udrei_5",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2297
15
        {&hf_sbas_l1_mt6_udrei_6,  {"UDREI_6",                                  "sbas_l1.mt6.udrei_6",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2298
15
        {&hf_sbas_l1_mt6_udrei_7,  {"UDREI_7",                                  "sbas_l1.mt6.udrei_7",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2299
15
        {&hf_sbas_l1_mt6_udrei_8,  {"UDREI_8",                                  "sbas_l1.mt6.udrei_8",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2300
15
        {&hf_sbas_l1_mt6_udrei_9,  {"UDREI_9",                                  "sbas_l1.mt6.udrei_9",  FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2301
15
        {&hf_sbas_l1_mt6_udrei_10, {"UDREI_10",                                 "sbas_l1.mt6.udrei_10", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2302
15
        {&hf_sbas_l1_mt6_udrei_11, {"UDREI_11",                                 "sbas_l1.mt6.udrei_11", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2303
15
        {&hf_sbas_l1_mt6_udrei_12, {"UDREI_12",                                 "sbas_l1.mt6.udrei_12", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2304
15
        {&hf_sbas_l1_mt6_udrei_13, {"UDREI_13",                                 "sbas_l1.mt6.udrei_13", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2305
15
        {&hf_sbas_l1_mt6_udrei_14, {"UDREI_14",                                 "sbas_l1.mt6.udrei_14", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2306
15
        {&hf_sbas_l1_mt6_udrei_15, {"UDREI_15",                                 "sbas_l1.mt6.udrei_15", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2307
15
        {&hf_sbas_l1_mt6_udrei_16, {"UDREI_16",                                 "sbas_l1.mt6.udrei_16", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2308
15
        {&hf_sbas_l1_mt6_udrei_17, {"UDREI_17",                                 "sbas_l1.mt6.udrei_17", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2309
15
        {&hf_sbas_l1_mt6_udrei_18, {"UDREI_18",                                 "sbas_l1.mt6.udrei_18", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2310
15
        {&hf_sbas_l1_mt6_udrei_19, {"UDREI_19",                                 "sbas_l1.mt6.udrei_19", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2311
15
        {&hf_sbas_l1_mt6_udrei_20, {"UDREI_20",                                 "sbas_l1.mt6.udrei_20", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2312
15
        {&hf_sbas_l1_mt6_udrei_21, {"UDREI_21",                                 "sbas_l1.mt6.udrei_21", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2313
15
        {&hf_sbas_l1_mt6_udrei_22, {"UDREI_22",                                 "sbas_l1.mt6.udrei_22", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2314
15
        {&hf_sbas_l1_mt6_udrei_23, {"UDREI_23",                                 "sbas_l1.mt6.udrei_23", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2315
15
        {&hf_sbas_l1_mt6_udrei_24, {"UDREI_24",                                 "sbas_l1.mt6.udrei_24", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2316
15
        {&hf_sbas_l1_mt6_udrei_25, {"UDREI_25",                                 "sbas_l1.mt6.udrei_25", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2317
15
        {&hf_sbas_l1_mt6_udrei_26, {"UDREI_26",                                 "sbas_l1.mt6.udrei_26", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2318
15
        {&hf_sbas_l1_mt6_udrei_27, {"UDREI_27",                                 "sbas_l1.mt6.udrei_27", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2319
15
        {&hf_sbas_l1_mt6_udrei_28, {"UDREI_28",                                 "sbas_l1.mt6.udrei_28", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2320
15
        {&hf_sbas_l1_mt6_udrei_29, {"UDREI_29",                                 "sbas_l1.mt6.udrei_29", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2321
15
        {&hf_sbas_l1_mt6_udrei_30, {"UDREI_30",                                 "sbas_l1.mt6.udrei_30", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2322
15
        {&hf_sbas_l1_mt6_udrei_31, {"UDREI_31",                                 "sbas_l1.mt6.udrei_31", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2323
15
        {&hf_sbas_l1_mt6_udrei_32, {"UDREI_32",                                 "sbas_l1.mt6.udrei_32", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2324
15
        {&hf_sbas_l1_mt6_udrei_33, {"UDREI_33",                                 "sbas_l1.mt6.udrei_33", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2325
15
        {&hf_sbas_l1_mt6_udrei_34, {"UDREI_34",                                 "sbas_l1.mt6.udrei_34", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2326
15
        {&hf_sbas_l1_mt6_udrei_35, {"UDREI_35",                                 "sbas_l1.mt6.udrei_35", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2327
15
        {&hf_sbas_l1_mt6_udrei_36, {"UDREI_36",                                 "sbas_l1.mt6.udrei_36", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2328
15
        {&hf_sbas_l1_mt6_udrei_37, {"UDREI_37",                                 "sbas_l1.mt6.udrei_37", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2329
15
        {&hf_sbas_l1_mt6_udrei_38, {"UDREI_38",                                 "sbas_l1.mt6.udrei_38", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2330
15
        {&hf_sbas_l1_mt6_udrei_39, {"UDREI_39",                                 "sbas_l1.mt6.udrei_39", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2331
15
        {&hf_sbas_l1_mt6_udrei_40, {"UDREI_40",                                 "sbas_l1.mt6.udrei_40", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2332
15
        {&hf_sbas_l1_mt6_udrei_41, {"UDREI_41",                                 "sbas_l1.mt6.udrei_41", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2333
15
        {&hf_sbas_l1_mt6_udrei_42, {"UDREI_42",                                 "sbas_l1.mt6.udrei_42", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2334
15
        {&hf_sbas_l1_mt6_udrei_43, {"UDREI_43",                                 "sbas_l1.mt6.udrei_43", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2335
15
        {&hf_sbas_l1_mt6_udrei_44, {"UDREI_44",                                 "sbas_l1.mt6.udrei_44", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2336
15
        {&hf_sbas_l1_mt6_udrei_45, {"UDREI_45",                                 "sbas_l1.mt6.udrei_45", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2337
15
        {&hf_sbas_l1_mt6_udrei_46, {"UDREI_46",                                 "sbas_l1.mt6.udrei_46", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2338
15
        {&hf_sbas_l1_mt6_udrei_47, {"UDREI_47",                                 "sbas_l1.mt6.udrei_47", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2339
15
        {&hf_sbas_l1_mt6_udrei_48, {"UDREI_48",                                 "sbas_l1.mt6.udrei_48", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2340
15
        {&hf_sbas_l1_mt6_udrei_49, {"UDREI_49",                                 "sbas_l1.mt6.udrei_49", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x03c0, NULL, HFILL}},
2341
15
        {&hf_sbas_l1_mt6_udrei_50, {"UDREI_50",                                 "sbas_l1.mt6.udrei_50", FT_UINT16, BASE_DEC,  VALS(UDREI_EVALUATION), 0x3c00, NULL, HFILL}},
2342
15
        {&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
15
        {&hf_sbas_l1_mt7,          {"MT7",                                "sbas_l1.mt7",          FT_NONE,   BASE_NONE, NULL,                               0x0,    NULL, HFILL}},
2346
15
        {&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
15
        {&hf_sbas_l1_mt7_iodp,     {"Issue of Data - PRN (IODP)",         "sbas_l1.mt7.iodp",     FT_UINT8,  BASE_DEC,  NULL,                               0x30,   NULL, HFILL}},
2348
15
        {&hf_sbas_l1_mt7_spare,    {"Spare",                              "sbas_l1.mt7.spare",    FT_UINT8,  BASE_DEC,  NULL,                               0x0c,   NULL, HFILL}},
2349
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt9,          {"MT9",                                  "sbas_l1.mt9",          FT_NONE,   BASE_NONE,   NULL,                                0x0,        NULL, HFILL}},
2403
15
        {&hf_sbas_l1_mt9_reserved, {"Reserved",                             "sbas_l1.mt9.reserved", FT_UINT32, BASE_HEX,    NULL,                                0x03fc0000, NULL, HFILL}},
2404
15
        {&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
15
        {&hf_sbas_l1_mt9_ura,      {"User Range Accuracy (URA)",            "sbas_l1.mt9.ura",      FT_UINT32, BASE_DEC,    VALS(URA),                           0x0000001e, NULL, HFILL}},
2406
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt10,              {"MT10",         "sbas_l1.mt10",              FT_NONE,   BASE_NONE,                 NULL,                       0x0,                NULL, HFILL}},
2420
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt10_rss_udre,     {"RSS_UDRE",     "sbas_l1.mt10.rss_udre",     FT_UINT32, BASE_DEC,                  VALS(RSS_FLAG),             0x80000000,         NULL, HFILL}},
2434
15
        {&hf_sbas_l1_mt10_rss_iono,     {"RSS_IONO",     "sbas_l1.mt10.rss_iono",     FT_UINT32, BASE_DEC,                  VALS(RSS_FLAG),             0x40000000,         NULL, HFILL}},
2435
15
        {&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
15
        {&hf_sbas_l1_mt10_spare_1,      {"Spare",        "sbas_l1.mt10.spare_1",      FT_UINT32, BASE_HEX,                  NULL,                       0x007fffff,         NULL, HFILL}},
2437
15
        {&hf_sbas_l1_mt10_spare_2,      {"Spare",        "sbas_l1.mt10.spare_2",      FT_UINT64, BASE_HEX,                  NULL,                       0xffffffffffffffc0, NULL, HFILL}},
2438
2439
        // MT12
2440
15
        {&hf_sbas_l1_mt12,               {"MT12",                     "sbas_l1.mt12",               FT_NONE,   BASE_NONE,                 NULL,                       0x0,                NULL, HFILL}},
2441
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt12_dn,            {"DN",                       "sbas_l1.mt12.dn",            FT_UINT16, BASE_DEC,                  VALS(DAY_NUMBER),           0x03fc,             NULL, HFILL}},
2448
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt12_glo_ind,       {"GLONASS indicator",        "sbas_l1.mt12.glo_ind",       FT_UINT8,  BASE_HEX,                  NULL,                       0x01,               NULL, HFILL}},
2453
15
        {&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
15
        {&hf_sbas_l1_mt12_spare,         {"Spare",                    "sbas_l1.mt12.spare",         FT_UINT64, BASE_HEX,                  NULL,                       0x00ffffffffffffc0, NULL, HFILL}},
2455
2456
        // MT17
2457
15
        {&hf_sbas_l1_mt17,                                                {"MT17",                                   "sbas_l1.mt17",                                                FT_NONE,    BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2458
15
        {&hf_sbas_l1_mt17_reserved,                                       {"Reserved",                               "sbas_l1.mt17.reserved",                                       FT_UINT8,   BASE_HEX,    NULL,                          0xc0,       NULL, HFILL}},
2459
15
        {&hf_sbas_l1_mt17_prn,                                            {"PRN",                                    "sbas_l1.mt17.prn",                                            FT_UINT16,  BASE_DEC,    NULL,                          0x3fc0,     NULL, HFILL}},
2460
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt18,                {"MT18",                                "sbas_l1.mt18",                FT_NONE,   BASE_NONE, NULL, 0x0,                NULL, HFILL}},
2476
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt18_spare,          {"Spare",                               "sbas_l1.mt18.spare",          FT_UINT8,  BASE_HEX,  NULL, 0x40,               NULL, HFILL}},
2564
2565
        // MT24
2566
15
        {&hf_sbas_l1_mt24,                  {"MT24",                                     "sbas_l1.mt24",                  FT_NONE,   BASE_NONE,   NULL,                          0x0,        NULL, HFILL}},
2567
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt24_udrei_i1,         {"UDREI_i1",                                 "sbas_l1.mt24.udrei_i1",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2574
15
        {&hf_sbas_l1_mt24_udrei_i2,         {"UDREI_i2",                                 "sbas_l1.mt24.udrei_i2",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2575
15
        {&hf_sbas_l1_mt24_udrei_i3,         {"UDREI_i3",                                 "sbas_l1.mt24.udrei_i3",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2576
15
        {&hf_sbas_l1_mt24_udrei_i4,         {"UDREI_i4",                                 "sbas_l1.mt24.udrei_i4",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2577
15
        {&hf_sbas_l1_mt24_udrei_i5,         {"UDREI_i5",                                 "sbas_l1.mt24.udrei_i5",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x03c0,     NULL, HFILL}},
2578
15
        {&hf_sbas_l1_mt24_udrei_i6,         {"UDREI_i6",                                 "sbas_l1.mt24.udrei_i6",         FT_UINT16, BASE_DEC,    VALS(UDREI_EVALUATION),        0x3c00,     NULL, HFILL}},
2579
15
        {&hf_sbas_l1_mt24_iodp,             {"Issue of Data - PRN (IODP)",               "sbas_l1.mt24.iodp",             FT_UINT8,  BASE_DEC,    NULL,                          0x03,   NULL, HFILL}},
2580
15
        {&hf_sbas_l1_mt24_fc_type,          {"Fast Correction Type ID",                  "sbas_l1.mt24.fc_type",          FT_UINT8,  BASE_DEC,    NULL,                          0xc0,   NULL, HFILL}},
2581
15
        {&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
15
        {&hf_sbas_l1_mt24_spare,            {"Spare",                                    "sbas_l1.mt24.spare",            FT_UINT8,  BASE_DEC,    NULL,                           0x0f,    NULL, HFILL}},
2583
15
        {&hf_sbas_l1_mt24_velocity_code,    {"Velocity Code",                            "sbas_l1.mt24.velocity_code",    FT_UINT8,  BASE_DEC,    NULL,                           0x80,   NULL, HFILL}},
2584
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt24_v0_spare,         {"Spare",                                    "sbas_l1.mt24.v0.spare",         FT_UINT8,  BASE_DEC,    NULL,                           0x40,   NULL, HFILL}},
2598
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt25,                       {"MT25",                     "sbas_l1.mt25",                     FT_NONE,   BASE_NONE,   NULL,                               0x0,        NULL, HFILL}},
2613
15
        {&hf_sbas_l1_mt25_h1_velocity_code,      {"Velocity Code",            "sbas_l1.mt25.h1.velocity_code",    FT_UINT8,  BASE_DEC,    NULL,                               0x02,       NULL, HFILL}},
2614
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt25_h1_v0_spare,           {"Spare",                    "sbas_l1.mt25.h1.v0.spare",         FT_NONE,   BASE_NONE,   NULL,                               0x0,        NULL, HFILL}},
2628
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt25_h2_velocity_code,      {"Velocity Code",            "sbas_l1.mt25.h2.velocity_code",    FT_UINT8,  BASE_DEC,    NULL,                               0x80,       NULL, HFILL}},
2641
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt25_h2_v0_spare,           {"Spare",                    "sbas_l1.mt25.h2.v0.spare",         FT_NONE,   BASE_NONE,   NULL,                               0x0,        NULL, HFILL}},
2655
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt26,                           {"MT26",                          "sbas_l1.mt26",                                     FT_NONE,   BASE_NONE,   NULL,                          0x0,    NULL, HFILL}},
2670
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt26_spare,                      {"Spare", "sbas_l1.mt26.spare",                                                      FT_UINT16, BASE_DEC,    NULL,                          0x1fc0, NULL, HFILL}},
2704
2705
        // MT27
2706
15
        {&hf_sbas_l1_mt27,                  {"MT27",                              "sbas_l1.mt27",              FT_NONE,   BASE_NONE,                  NULL,                       0x0,                NULL, HFILL}},
2707
15
        {&hf_sbas_l1_mt27_iods,             {"Issue of Data, service (IODS)",     "sbas_l1.mt27.iods",         FT_UINT16, BASE_DEC,                   NULL,                       0x0380,             NULL, HFILL}},
2708
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt27_num_regions,      {"Number of Regions",                 "sbas_l1.mt27.num_regions",  FT_UINT16, BASE_DEC,                   NULL,                       0x01c0,             NULL, HFILL}},
2711
15
        {&hf_sbas_l1_mt27_prio_code,        {"Priority Code",                     "sbas_l1.mt27.prio_code",    FT_UINT16, BASE_DEC,                   NULL,                       0x0030,             NULL, HFILL}},
2712
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt27_region[0],        {"Region 1",                          "sbas_l1.mt27.r1",           FT_UINT64, BASE_HEX,                   NULL,                       0x0000000000000000, NULL, HFILL}},
2715
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt27_region[1],        {"Region 2",                          "sbas_l1.mt27.r2",           FT_UINT64, BASE_HEX,    NULL,                       0x0000000000000000, NULL, HFILL}},
2721
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt27_region[2],        {"Region 3",                          "sbas_l1.mt27.r3",           FT_UINT64, BASE_HEX,    NULL,                       0x0000000000000000, NULL, HFILL}},
2727
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt27_region[3],        {"Region 4",                          "sbas_l1.mt27.r4",           FT_UINT64, BASE_HEX,    NULL,                       0x0000000000000000, NULL, HFILL}},
2733
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt27_region[4],        {"Region 5",                          "sbas_l1.mt27.r5",           FT_UINT64, BASE_HEX,    NULL,                       0x0000000000000000, NULL, HFILL}},
2739
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt27_spare,            {"Spare",                             "sbas_l1.mt27.spare",        FT_UINT32, BASE_HEX,                   NULL,                       0x001fffc0,         NULL, HFILL}},
2745
2746
        // MT28
2747
15
        {&hf_sbas_l1_mt28,                {"MT28",                       "sbas_l1.mt28",               FT_NONE,   BASE_NONE, NULL, 0x0,        NULL, HFILL}},
2748
15
        {&hf_sbas_l1_mt28_iodp,           {"Issue of Data - PRN (IODP)", "sbas_l1.mt28.iodp",          FT_UINT8,  BASE_DEC,  NULL, 0x03,       NULL, HFILL}},
2749
15
        {&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
15
        {&hf_sbas_l1_mt28_scale_exp_1,   {"Scale Exponent",              "sbas_l1.mt28.scale_exp_1",   FT_UINT16, BASE_DEC,  NULL, 0x0380,     NULL, HFILL}},
2751
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt28_scale_exp_2,   {"Scale Exponent",              "sbas_l1.mt28.scale_exp_2",   FT_UINT16, BASE_DEC,  NULL, 0x01c0,     NULL, HFILL}},
2763
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&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
15
        {&hf_sbas_l1_mt63,         {"MT63",    "sbas_l1.mt63",         FT_NONE,  BASE_NONE, NULL, 0x00, NULL, HFILL}},
2776
15
        {&hf_sbas_l1_mt63_spare_1, {"Spare 1", "sbas_l1.mt63.spare_1", FT_UINT8, BASE_HEX,  NULL, 0x03, NULL, HFILL}},
2777
15
        {&hf_sbas_l1_mt63_spare_2, {"Spare 2", "sbas_l1.mt63.spare_2", FT_BYTES, SEP_SPACE, NULL, 0x00, NULL, HFILL}},
2778
15
        {&hf_sbas_l1_mt63_spare_3, {"Spare 3", "sbas_l1.mt63.spare_3", FT_UINT8, BASE_HEX,  NULL, 0xc0, NULL, HFILL}},
2779
15
    };
2780
2781
15
    expert_module_t *expert_sbas_l1;
2782
2783
15
    static ei_register_info ei[] = {
2784
15
        {&ei_sbas_l1_preamble,          {"sbas_l1.illegal_preamble",          PI_PROTOCOL, PI_WARN, "Erroneous preamble", EXPFILL}},
2785
15
        {&ei_sbas_l1_mt0,               {"sbas_l1.mt0",                       PI_PROTOCOL, PI_WARN, "MT is 0", EXPFILL}},
2786
15
        {&ei_sbas_l1_crc,               {"sbas_l1.crc",                       PI_CHECKSUM, PI_WARN, "CRC", EXPFILL}},
2787
15
        {&ei_sbas_l1_mt26_igp_band_id,  {"sbas_l1.mt26.illegal_igp_band_id",  PI_PROTOCOL, PI_WARN, "Illegal IGP Band Identifier", EXPFILL}},
2788
15
        {&ei_sbas_l1_mt26_igp_block_id, {"sbas_l1.mt26.illegal_igp_block_id", PI_PROTOCOL, PI_WARN, "Illegal IGP Block Identifier", EXPFILL}},
2789
15
    };
2790
2791
15
    static int *ett[] = {
2792
15
        &ett_sbas_l1,
2793
15
        &ett_sbas_l1_mt0,
2794
15
        &ett_sbas_l1_mt1,
2795
15
        &ett_sbas_l1_mt2,
2796
15
        &ett_sbas_l1_mt3,
2797
15
        &ett_sbas_l1_mt4,
2798
15
        &ett_sbas_l1_mt5,
2799
15
        &ett_sbas_l1_mt6,
2800
15
        &ett_sbas_l1_mt7,
2801
15
        &ett_sbas_l1_mt9,
2802
15
        &ett_sbas_l1_mt10,
2803
15
        &ett_sbas_l1_mt12,
2804
15
        &ett_sbas_l1_mt17,
2805
15
        &ett_sbas_l1_mt17_prn_data[0],
2806
15
        &ett_sbas_l1_mt17_prn_data[1],
2807
15
        &ett_sbas_l1_mt17_prn_data[2],
2808
15
        &ett_sbas_l1_mt17_health_and_status,
2809
15
        &ett_sbas_l1_mt18,
2810
15
        &ett_sbas_l1_mt24,
2811
15
        &ett_sbas_l1_mt25,
2812
15
        &ett_sbas_l1_mt26,
2813
15
        &ett_sbas_l1_mt27,
2814
15
        &ett_sbas_l1_mt27_region[0],
2815
15
        &ett_sbas_l1_mt27_region[1],
2816
15
        &ett_sbas_l1_mt27_region[2],
2817
15
        &ett_sbas_l1_mt27_region[3],
2818
15
        &ett_sbas_l1_mt27_region[4],
2819
15
        &ett_sbas_l1_mt28,
2820
15
        &ett_sbas_l1_mt28_sv_1,
2821
15
        &ett_sbas_l1_mt28_sv_2,
2822
15
        &ett_sbas_l1_mt63,
2823
15
    };
2824
2825
15
    proto_sbas_l1 = proto_register_protocol("SBAS L1 Navigation Message", "SBAS L1", "sbas_l1");
2826
2827
15
    proto_register_field_array(proto_sbas_l1, hf, array_length(hf));
2828
15
    proto_register_subtree_array(ett, array_length(ett));
2829
2830
15
    expert_sbas_l1 = expert_register_protocol(proto_sbas_l1);
2831
15
    expert_register_field_array(expert_sbas_l1, ei, array_length(ei));
2832
2833
15
    register_dissector("sbas_l1", dissect_sbas_l1, proto_sbas_l1);
2834
2835
15
    sbas_l1_mt_dissector_table = register_dissector_table("sbas_l1.mt",
2836
15
            "SBAS L1 MT", proto_sbas_l1, FT_UINT8, BASE_DEC);
2837
15
}
2838
2839
2840
15
void proto_reg_handoff_sbas_l1(void) {
2841
15
    dissector_handle_t sbas_l1_dissector_handle = create_dissector_handle(dissect_sbas_l1, proto_sbas_l1);
2842
2843
15
    dissector_add_uint("ubx.rxm.sfrbx.gnssid", GNSS_ID_SBAS, sbas_l1_dissector_handle);
2844
15
    dissector_add_string("ems.svc_flag", EMS_L1_SVC_FLAG, sbas_l1_dissector_handle);
2845
2846
15
    dissector_add_uint("sbas_l1.mt", 0,  create_dissector_handle(dissect_sbas_l1_mt0,  proto_sbas_l1));
2847
15
    dissector_add_uint("sbas_l1.mt", 1,  create_dissector_handle(dissect_sbas_l1_mt1,  proto_sbas_l1));
2848
15
    dissector_add_uint("sbas_l1.mt", 2,  create_dissector_handle(dissect_sbas_l1_mt2,  proto_sbas_l1));
2849
15
    dissector_add_uint("sbas_l1.mt", 3,  create_dissector_handle(dissect_sbas_l1_mt3,  proto_sbas_l1));
2850
15
    dissector_add_uint("sbas_l1.mt", 4,  create_dissector_handle(dissect_sbas_l1_mt4,  proto_sbas_l1));
2851
15
    dissector_add_uint("sbas_l1.mt", 5,  create_dissector_handle(dissect_sbas_l1_mt5,  proto_sbas_l1));
2852
15
    dissector_add_uint("sbas_l1.mt", 6,  create_dissector_handle(dissect_sbas_l1_mt6,  proto_sbas_l1));
2853
15
    dissector_add_uint("sbas_l1.mt", 7,  create_dissector_handle(dissect_sbas_l1_mt7,  proto_sbas_l1));
2854
15
    dissector_add_uint("sbas_l1.mt", 9,  create_dissector_handle(dissect_sbas_l1_mt9,  proto_sbas_l1));
2855
15
    dissector_add_uint("sbas_l1.mt", 10, create_dissector_handle(dissect_sbas_l1_mt10, proto_sbas_l1));
2856
15
    dissector_add_uint("sbas_l1.mt", 12, create_dissector_handle(dissect_sbas_l1_mt12, proto_sbas_l1));
2857
15
    dissector_add_uint("sbas_l1.mt", 17, create_dissector_handle(dissect_sbas_l1_mt17, proto_sbas_l1));
2858
15
    dissector_add_uint("sbas_l1.mt", 18, create_dissector_handle(dissect_sbas_l1_mt18, proto_sbas_l1));
2859
15
    dissector_add_uint("sbas_l1.mt", 24, create_dissector_handle(dissect_sbas_l1_mt24, proto_sbas_l1));
2860
15
    dissector_add_uint("sbas_l1.mt", 25, create_dissector_handle(dissect_sbas_l1_mt25, proto_sbas_l1));
2861
15
    dissector_add_uint("sbas_l1.mt", 26, create_dissector_handle(dissect_sbas_l1_mt26, proto_sbas_l1));
2862
15
    dissector_add_uint("sbas_l1.mt", 27, create_dissector_handle(dissect_sbas_l1_mt27, proto_sbas_l1));
2863
15
    dissector_add_uint("sbas_l1.mt", 28, create_dissector_handle(dissect_sbas_l1_mt28, proto_sbas_l1));
2864
15
    dissector_add_uint("sbas_l1.mt", 63, create_dissector_handle(dissect_sbas_l1_mt63, proto_sbas_l1));
2865
15
}