### Bug Summary

File: | builds/wireshark/wireshark/epan/dissectors/packet-nmea0183.c
Warning: | line 3715, column 5 Value stored to 'offset' is never read

### Annotated Source Code

Press '?' to see keyboard shortcuts

Show analyzer invocation
clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name packet-nmea0183.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -ffloat16-excess-precision=fast -fbfloat16-excess-precision=fast -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/builds/wireshark/wireshark/build -fcoverage-compilation-dir=/builds/wireshark/wireshark/build -resource-dir /usr/lib/llvm-22/lib/clang/22 -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /builds/wireshark/wireshark/epan/dissectors -isystem /builds/wireshark/wireshark/build/epan/dissectors -isystem /usr/include/mit-krb5 -isystem /usr/include/libxml2 -isystem /builds/wireshark/wireshark/epan -D CARES_NO_DEPRECATED -D G_DISABLE_DEPRECATED -D G_DISABLE_SINGLE_INCLUDES -D WS_BUILD_DLL -D WS_DEBUG -D WS_DEBUG_UTF_8 -I /builds/wireshark/wireshark/build -I /builds/wireshark/wireshark -I /builds/wireshark/wireshark/include -D _GLIBCXX_ASSERTIONS -internal-isystem /usr/lib/llvm-22/lib/clang/22/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/16/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fmacro-prefix-map=/builds/wireshark/wireshark/= -fmacro-prefix-map=/builds/wireshark/wireshark/build/= -fmacro-prefix-map=../= -Wno-format-nonliteral -std=gnu17 -ferror-limit 19 -fvisibility=hidden -fwrapv -fwrapv-pointer -fstrict-flex-arrays=3 -stack-protector 2 -fstack-clash-protection -fcf-protection=full -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fexceptions -fcolor-diagnostics -analyzer-output=html -faddrsig -fdwarf2-cfi-asm -o /builds/wireshark/wireshark/sbout/2026-07-28-100419-3660-1 -x c /builds/wireshark/wireshark/epan/dissectors/packet-nmea0183.c

Keyboard shortcuts:

- Use 'j/k' keys for keyboard navigation
- Use 'Shift+S' to show/hide relevant lines
- Use '?' to toggle this window

Close
Show only relevant lines Show control flow arrows

1 | /* packet-nmea0183.c
2 | * Routines for NMEA 0183 protocol dissection
3 | * Copyright 2024 Casper Meijn <casper@meijn.net>
4 | *
5 | * Wireshark - Network traffic analyzer
6 | * By Gerald Combs <gerald@wireshark.org>
7 | * Copyright 1998 Gerald Combs
8 | *
9 | * SPDX-License-Identifier: GPL-2.0-or-later
10 | */
11 |
12 | #include "config.h"
13 | #include <epan/packet.h>
14 | #include <epan/expert.h>
15 | #include <wsutil/strtoi.h>
16 |
17 |
18 | /*
19 | * null-terminated sentence prefix string "UdPbC"
20 | */
21 | #define UDPBC"UdPbC" "UdPbC"
22 | #define RRUDP"RrUdP" "RrUdP"
23 | #define RAUDP"RaUdp" "RaUdp"
24 | #define RPUDP"RpUdP" "RpUdP"
25 | #define NMEA0183_CRLF0x0d0a 0x0d0a
26 |
27 | static int hf_nmea0183_talker_id;
28 | static int hf_nmea0183_sentence_id;
29 | static int hf_nmea0183_unknown_field;
30 | static int hf_nmea0183_checksum;
31 | static int hf_nmea0183_checksum_calculated;
32 |
33 | static int hf_nmea0183_dpt_depth;
34 | static int hf_nmea0183_dpt_offset;
35 | static int hf_nmea0183_dpt_max_range;
36 |
37 | static int hf_nmea0183_hdt_heading;
38 | static int hf_nmea0183_hdt_unit;
39 |
40 | static int hf_nmea0183_aam_arr_circle_radius;
41 | static int hf_nmea0183_aam_arr_circle_status;
42 | static int hf_nmea0183_aam_perp_status;
43 | static int hf_nmea0183_aam_units_radius;
44 | static int hf_nmea0183_aam_waypoint;
45 |
46 | static int hf_nmea0183_abk_ack_type;
47 | static int hf_nmea0183_abk_ais_channel;
48 | static int hf_nmea0183_abk_mmsi;
49 | static int hf_nmea0183_abk_msg_id;
50 | static int hf_nmea0183_abk_msg_seq;
51 |
52 | static int hf_nmea0183_aca_chan_a;
53 | static int hf_nmea0183_aca_chan_a_bw;
54 | static int hf_nmea0183_aca_chan_b;
55 | static int hf_nmea0183_aca_chan_b_bw;
56 | static int hf_nmea0183_aca_info_src;
57 | static int hf_nmea0183_aca_inuse;
58 | static int hf_nmea0183_aca_inuse_change;
59 | static int hf_nmea0183_aca_ne_clat;
60 | static int hf_nmea0183_aca_ne_clong;
61 | static int hf_nmea0183_aca_power;
62 | static int hf_nmea0183_aca_seq_num;
63 | static int hf_nmea0183_aca_sw_clat;
64 | static int hf_nmea0183_aca_sw_clong;
65 | static int hf_nmea0183_aca_txrx_mode;
66 | static int hf_nmea0183_aca_zone_size;
67 |
68 | static int hf_nmea0183_ack_alarm_id;
69 |
70 | static int hf_nmea0183_acs_day;
71 | static int hf_nmea0183_acs_mmsi;
72 | static int hf_nmea0183_acs_month;
73 | static int hf_nmea0183_acs_seq_num;
74 | static int hf_nmea0183_acs_utc;
75 | static int hf_nmea0183_acs_year;
76 |
77 | static int hf_nmea0183_air_mmsi_is1;
78 | static int hf_nmea0183_air_mmsi_is2;
79 | static int hf_nmea0183_air_msg2_req;
80 | static int hf_nmea0183_air_msg2_sub;
81 | static int hf_nmea0183_air_msg_req;
82 | static int hf_nmea0183_air_msg_req_is2;
83 | static int hf_nmea0183_air_msg_sub;
84 | static int hf_nmea0183_air_msg_sub_is2;
85 |
86 | static int hf_nmea0183_akd_alarm_type;
87 | static int hf_nmea0183_akd_inst_num_orig;
88 | static int hf_nmea0183_akd_inst_num_send;
89 | static int hf_nmea0183_akd_subsys_indicator_orig;
90 | static int hf_nmea0183_akd_sybsys_indicator_send;
91 | static int hf_nmea0183_akd_sys_indicator_orig;
92 | static int hf_nmea0183_akd_sys_indicator_send;
93 | static int hf_nmea0183_akd_utc;
94 |
95 | static int hf_nmea0183_ala_alarm_ack_state;
96 | static int hf_nmea0183_ala_alarm_cond;
97 | static int hf_nmea0183_ala_alarm_text;
98 | static int hf_nmea0183_ala_alarm_type;
99 | static int hf_nmea0183_ala_inst_num;
100 | static int hf_nmea0183_ala_subsys_indicator;
101 | static int hf_nmea0183_ala_sys_indicator;
102 | static int hf_nmea0183_ala_time;
103 |
104 | static int hf_nmea0183_alm_af0_clock_param;
105 | static int hf_nmea0183_alm_af1_clock_param;
106 | static int hf_nmea0183_alm_alm_ref_time;
107 | static int hf_nmea0183_alm_arg_perigee;
108 | static int hf_nmea0183_alm_eccent;
109 | static int hf_nmea0183_alm_gps_week;
110 | static int hf_nmea0183_alm_incl_angle;
111 | static int hf_nmea0183_alm_long_asc_node;
112 | static int hf_nmea0183_alm_mean_anomaly;
113 | static int hf_nmea0183_alm_rate_right_asc;
114 | static int hf_nmea0183_alm_root_sm_axis;
115 | static int hf_nmea0183_alm_sat_prn;
116 | static int hf_nmea0183_alm_sent_num;
117 | static int hf_nmea0183_alm_sent_tot;
118 | static int hf_nmea0183_alm_sv_health;
119 |
120 | static int hf_nmea0183_alr_time;
121 | static int hf_nmea0183_alr_time_hour;
122 | static int hf_nmea0183_alr_time_minute;
123 | static int hf_nmea0183_alr_time_second;
124 | static int hf_nmea0183_alr_alarm_id;
125 | static int hf_nmea0183_alr_alarm_cond;
126 | static int hf_nmea0183_alr_alarm_ack_st;
127 | static int hf_nmea0183_alr_alarm_desc_txt;
128 |
129 | static int hf_nmea0183_apb_arr_circle_status;
130 | static int hf_nmea0183_apb_bearing_origin;
131 | static int hf_nmea0183_apb_bearing_present;
132 | static int hf_nmea0183_apb_cycle_lock_warning;
133 | static int hf_nmea0183_apb_dir_steer;
134 | static int hf_nmea0183_apb_heading_steer;
135 | static int hf_nmea0183_apb_mag_xte;
136 | static int hf_nmea0183_apb_mode;
137 | static int hf_nmea0183_apb_perp_status;
138 | static int hf_nmea0183_apb_waypoint_id;
139 | static int hf_nmea0183_apb_xte_units;
140 |
141 | static int hf_nmea0183_bec_bearing_mag;
142 | static int hf_nmea0183_bec_bearing_true;
143 | static int hf_nmea0183_bec_distance;
144 | static int hf_nmea0183_bec_latitude;
145 | static int hf_nmea0183_bec_longitude;
146 | static int hf_nmea0183_bec_utc;
147 | static int hf_nmea0183_bec_waypoint;
148 |
149 | static int hf_nmea0183_bod_bearing_mag;
150 | static int hf_nmea0183_bod_bearing_true;
151 | static int hf_nmea0183_bod_dest_waypoint;
152 | static int hf_nmea0183_bod_orig_waypoint;
153 |
154 | static int hf_nmea0183_bwc_bearing_mag;
155 | static int hf_nmea0183_bwc_bearing_true;
156 | static int hf_nmea0183_bwc_distance;
157 | static int hf_nmea0183_bwc_latitude;
158 | static int hf_nmea0183_bwc_longitude;
159 | static int hf_nmea0183_bwc_mode;
160 | static int hf_nmea0183_bwc_utc;
161 | static int hf_nmea0183_bwc_waypoint;
162 |
163 | static int hf_nmea0183_bwr_bearing_mag;
164 | static int hf_nmea0183_bwr_bearing_true;
165 | static int hf_nmea0183_bwr_distance;
166 | static int hf_nmea0183_bwr_latitude;
167 | static int hf_nmea0183_bwr_longitude;
168 | static int hf_nmea0183_bwr_mode;
169 | static int hf_nmea0183_bwr_utc;
170 | static int hf_nmea0183_bwr_waypoint;
171 |
172 | static int hf_nmea0183_bww_bearing_mag;
173 | static int hf_nmea0183_bww_bearing_true;
174 | static int hf_nmea0183_bww_from_waypoint;
175 | static int hf_nmea0183_bww_to_waypoint;
176 |
177 | static int hf_nmea0183_cbr_hr_chan_a;
178 | static int hf_nmea0183_cbr_hr_chan_b;
179 | static int hf_nmea0183_cbr_interv_chan_a;
180 | static int hf_nmea0183_cbr_interv_chan_b;
181 | static int hf_nmea0183_cbr_min_chan_a;
182 | static int hf_nmea0183_cbr_min_chan_b;
183 | static int hf_nmea0183_cbr_mmsi;
184 | static int hf_nmea0183_cbr_msd_id_index;
185 | static int hf_nmea0183_cbr_msg_id;
186 | static int hf_nmea0183_cbr_setup;
187 | static int hf_nmea0183_cbr_slot_chan_a;
188 | static int hf_nmea0183_cbr_slot_chan_b;
189 | static int hf_nmea0183_cbr_status;
190 |
191 | static int hf_nmea0183_cur_data_set;
192 | static int hf_nmea0183_cur_depth;
193 | static int hf_nmea0183_cur_direction;
194 | static int hf_nmea0183_cur_direction_ref;
195 | static int hf_nmea0183_cur_heading;
196 | static int hf_nmea0183_cur_heading_ref;
197 | static int hf_nmea0183_cur_layer;
198 | static int hf_nmea0183_cur_ref_layer;
199 | static int hf_nmea0183_cur_speed;
200 | static int hf_nmea0183_cur_speed_ref;
201 | static int hf_nmea0183_cur_validity;
202 |
203 | static int hf_nmea0183_dbt_fathoms;
204 | static int hf_nmea0183_dbt_feet;
205 | static int hf_nmea0183_dbt_meters;
206 |
207 | static int hf_nmea0183_dcn_data_basis;
208 | static int hf_nmea0183_dcn_dc_id;
209 | static int hf_nmea0183_dcn_glop;
210 | static int hf_nmea0183_dcn_gnav;
211 | static int hf_nmea0183_dcn_gstatus;
212 | static int hf_nmea0183_dcn_gz_id;
213 | static int hf_nmea0183_dcn_plop;
214 | static int hf_nmea0183_dcn_pnav;
215 | static int hf_nmea0183_dcn_pos_uncertainty;
216 | static int hf_nmea0183_dcn_pstatus;
217 | static int hf_nmea0183_dcn_pz_id;
218 | static int hf_nmea0183_dcn_rlop;
219 | static int hf_nmea0183_dcn_rnav;
220 | static int hf_nmea0183_dcn_rstatus;
221 | static int hf_nmea0183_dcn_rz_id;
222 |
223 | static int hf_nmea0183_ddc_brightness;
224 | static int hf_nmea0183_ddc_dimming;
225 | static int hf_nmea0183_ddc_palette;
226 | static int hf_nmea0183_ddc_status;
227 |
228 | static int hf_nmea0183_dor_door_num;
229 | static int hf_nmea0183_dor_time;
230 | static int hf_nmea0183_dor_first_indic;
231 | static int hf_nmea0183_dor_msg_type;
232 | static int hf_nmea0183_dor_open_count;
233 | static int hf_nmea0183_dor_second_indic;
234 | static int hf_nmea0183_dor_setting;
235 | static int hf_nmea0183_dor_status;
236 | static int hf_nmea0183_dor_system_type;
237 | static int hf_nmea0183_dor_text;
238 |
239 | static int hf_nmea0183_dsc_ack;
240 | static int hf_nmea0183_dsc_address;
241 | static int hf_nmea0183_dsc_category;
242 | static int hf_nmea0183_dsc_comm_type;
243 | static int hf_nmea0183_dsc_expansion;
244 | static int hf_nmea0183_dsc_first_tcmd;
245 | static int hf_nmea0183_dsc_format;
246 | static int hf_nmea0183_dsc_mmsi;
247 | static int hf_nmea0183_dsc_nature_distress;
248 | static int hf_nmea0183_dsc_position;
249 | static int hf_nmea0183_dsc_time;
250 |
251 | static int hf_nmea0183_dse_code;
252 | static int hf_nmea0183_dse_data;
253 | static int hf_nmea0183_dse_flag;
254 | static int hf_nmea0183_dse_mmsi;
255 | static int hf_nmea0183_dse_sentence_number;
256 | static int hf_nmea0183_dse_total_sentences;
257 |
258 | static int hf_nmea0183_dsi_course;
259 | static int hf_nmea0183_dsi_expansion;
260 | static int hf_nmea0183_dsi_geo_area;
261 | static int hf_nmea0183_dsi_info;
262 | static int hf_nmea0183_dsi_mmsi;
263 | static int hf_nmea0183_dsi_sentence_number;
264 | static int hf_nmea0183_dsi_symbol;
265 | static int hf_nmea0183_dsi_total_sentences;
266 | static int hf_nmea0183_dsi_type;
267 |
268 | static int hf_nmea0183_dsr_expansion;
269 | static int hf_nmea0183_dsr_info;
270 | static int hf_nmea0183_dsr_mmsi;
271 | static int hf_nmea0183_dsr_sentence_number;
272 | static int hf_nmea0183_dsr_symbol;
273 | static int hf_nmea0183_dsr_total_sentences;
274 |
275 | static int hf_nmea0183_dtm_alt_offset;
276 | static int hf_nmea0183_dtm_datum;
277 | static int hf_nmea0183_dtm_datum_subdiv;
278 | static int hf_nmea0183_dtm_lat_offset;
279 | static int hf_nmea0183_dtm_lon_offset;
280 | static int hf_nmea0183_dtm_ref_datum;
281 |
282 | static int hf_nmea0183_etl_msg_type;
283 | static int hf_nmea0183_etl_num_eng_shaft;
284 | static int hf_nmea0183_etl_opind;
285 | static int hf_nmea0183_etl_posind_engine;
286 | static int hf_nmea0183_etl_posind_sub;
287 | static int hf_nmea0183_etl_time;
288 |
289 | static int hf_nmea0183_fsi_mode;
290 | static int hf_nmea0183_fsi_power;
291 | static int hf_nmea0183_fsi_recv_freq;
292 | static int hf_nmea0183_fsi_xmit_freq;
293 |
294 | static int hf_nmea0183_gbs_alt_err;
295 | static int hf_nmea0183_gbs_est_bias;
296 | static int hf_nmea0183_gbs_lat_err;
297 | static int hf_nmea0183_gbs_long_err;
298 | static int hf_nmea0183_gbs_prob_miss;
299 | static int hf_nmea0183_gbs_sat_id;
300 | static int hf_nmea0183_gbs_sat_type;
301 | static int hf_nmea0183_gbs_std_dev;
302 | static int hf_nmea0183_gbs_utc;
303 |
304 | static int hf_nmea0183_gga_time;
305 | static int hf_nmea0183_gga_time_hour;
306 | static int hf_nmea0183_gga_time_minute;
307 | static int hf_nmea0183_gga_time_second;
308 | static int hf_nmea0183_gga_latitude;
309 | static int hf_nmea0183_gga_latitude_degree;
310 | static int hf_nmea0183_gga_latitude_minute;
311 | static int hf_nmea0183_gga_latitude_direction;
312 | static int hf_nmea0183_gga_longitude;
313 | static int hf_nmea0183_gga_longitude_degree;
314 | static int hf_nmea0183_gga_longitude_minute;
315 | static int hf_nmea0183_gga_longitude_direction;
316 | static int hf_nmea0183_gga_quality;
317 | static int hf_nmea0183_gga_number_satellites;
318 | static int hf_nmea0183_gga_horizontal_dilution;
319 | static int hf_nmea0183_gga_altitude;
320 | static int hf_nmea0183_gga_altitude_unit;
321 | static int hf_nmea0183_gga_geoidal_separation;
322 | static int hf_nmea0183_gga_geoidal_separation_unit;
323 | static int hf_nmea0183_gga_age_dgps;
324 | static int hf_nmea0183_gga_dgps_station;
325 |
326 | static int hf_nmea0183_glc_gri;
327 | static int hf_nmea0183_glc_master_toa;
328 | static int hf_nmea0183_glc_sig_status;
329 | static int hf_nmea0183_glc_td1;
330 | static int hf_nmea0183_glc_td2;
331 | static int hf_nmea0183_glc_td3;
332 | static int hf_nmea0183_glc_td4;
333 | static int hf_nmea0183_glc_td5;
334 |
335 | static int hf_nmea0183_gll_latitude;
336 | static int hf_nmea0183_gll_latitude_degree;
337 | static int hf_nmea0183_gll_latitude_minute;
338 | static int hf_nmea0183_gll_latitude_direction;
339 | static int hf_nmea0183_gll_longitude;
340 | static int hf_nmea0183_gll_longitude_degree;
341 | static int hf_nmea0183_gll_longitude_minute;
342 | static int hf_nmea0183_gll_longitude_direction;
343 | static int hf_nmea0183_gll_time;
344 | static int hf_nmea0183_gll_time_hour;
345 | static int hf_nmea0183_gll_time_minute;
346 | static int hf_nmea0183_gll_time_second;
347 | static int hf_nmea0183_gll_status;
348 | static int hf_nmea0183_gll_mode;
349 |
350 | static int hf_nmea0183_gmp_ant_alt;
351 | static int hf_nmea0183_gmp_data_age;
352 | static int hf_nmea0183_gmp_diff_ref_id;
353 | static int hf_nmea0183_gmp_geoid_sep;
354 | static int hf_nmea0183_gmp_hdop;
355 | static int hf_nmea0183_gmp_mode_glonass;
356 | static int hf_nmea0183_gmp_mode_gps;
357 | static int hf_nmea0183_gmp_mode_other;
358 | static int hf_nmea0183_gmp_mode_string;
359 | static int hf_nmea0183_gmp_projection;
360 | static int hf_nmea0183_gmp_tot_sats;
361 | static int hf_nmea0183_gmp_utc;
362 | static int hf_nmea0183_gmp_x_comp;
363 | static int hf_nmea0183_gmp_y_comp;
364 | static int hf_nmea0183_gmp_zone;
365 |
366 | static int hf_nmea0183_gns_ant_alt;
367 | static int hf_nmea0183_gns_data_age;
368 | static int hf_nmea0183_gns_diff_ref_id;
369 | static int hf_nmea0183_gns_geoid_sep;
370 | static int hf_nmea0183_gns_hdop;
371 | static int hf_nmea0183_gns_latitude;
372 | static int hf_nmea0183_gns_longitude;
373 | static int hf_nmea0183_gns_mode_glonass;
374 | static int hf_nmea0183_gns_mode_gps;
375 | static int hf_nmea0183_gns_mode_other;
376 | static int hf_nmea0183_gns_mode_string;
377 | static int hf_nmea0183_gns_tot_sats;
378 | static int hf_nmea0183_gns_utc;
379 |
380 | static int hf_nmea0183_grs_mode;
381 | static int hf_nmea0183_grs_range_resid;
382 | static int hf_nmea0183_grs_utc;
383 |
384 | static int hf_nmea0183_gsa_fix_mode;
385 | static int hf_nmea0183_gsa_hdop;
386 | static int hf_nmea0183_gsa_op_mode;
387 | static int hf_nmea0183_gsa_pdop;
388 | static int hf_nmea0183_gsa_sat_id;
389 | static int hf_nmea0183_gsa_sat_type;
390 | static int hf_nmea0183_gsa_vdop;
391 |
392 | static int hf_nmea0183_gst_time;
393 | static int hf_nmea0183_gst_time_hour;
394 | static int hf_nmea0183_gst_time_minute;
395 | static int hf_nmea0183_gst_time_second;
396 | static int hf_nmea0183_gst_rms_total_sd;
397 | static int hf_nmea0183_gst_ellipse_major_sd;
398 | static int hf_nmea0183_gst_ellipse_minor_sd;
399 | static int hf_nmea0183_gst_ellipse_orientation;
400 | static int hf_nmea0183_gst_latitude_sd;
401 | static int hf_nmea0183_gst_longitude_sd;
402 | static int hf_nmea0183_gst_altitude_sd;
403 |
404 | static int hf_nmea0183_gsv_azimuth;
405 | static int hf_nmea0183_gsv_elevation;
406 | static int hf_nmea0183_gsv_sat_id;
407 | static int hf_nmea0183_gsv_sat_type;
408 | static int hf_nmea0183_gsv_sats_in_view;
409 | static int hf_nmea0183_gsv_sentence_number;
410 | static int hf_nmea0183_gsv_snr;
411 | static int hf_nmea0183_gsv_total_sentences;
412 |
413 | static int hf_nmea0183_hbt_interval;
414 | static int hf_nmea0183_hbt_sent_id;
415 | static int hf_nmea0183_hbt_status;
416 |
417 | static int hf_nmea0183_hdg_mag_dev;
418 | static int hf_nmea0183_hdg_mag_sensor;
419 | static int hf_nmea0183_hdg_mag_var;
420 |
421 | static int hf_nmea0183_hmr_dev_s1;
422 | static int hf_nmea0183_hmr_dev_s2;
423 | static int hf_nmea0183_hmr_difflim_setting;
424 | static int hf_nmea0183_hmr_heading_s1;
425 | static int hf_nmea0183_hmr_heading_s2;
426 | static int hf_nmea0183_hmr_heading_sdiff;
427 | static int hf_nmea0183_hmr_hr_s1;
428 | static int hf_nmea0183_hmr_hr_s2;
429 | static int hf_nmea0183_hmr_s1_type;
430 | static int hf_nmea0183_hmr_s2_type;
431 | static int hf_nmea0183_hmr_status_s1;
432 | static int hf_nmea0183_hmr_status_s2;
433 | static int hf_nmea0183_hmr_variation;
434 | static int hf_nmea0183_hmr_warning_flag;
435 |
436 | static int hf_nmea0183_hms_heading_s1;
437 | static int hf_nmea0183_hms_heading_s2;
438 | static int hf_nmea0183_hms_max_diff;
439 |
440 | static int hf_nmea0183_hsc_heading_magnetic;
441 | static int hf_nmea0183_hsc_heading_true;
442 |
443 | static int hf_nmea0183_htc_cmd_offhead_lim;
444 | static int hf_nmea0183_htc_cmd_offtrack;
445 | static int hf_nmea0183_htc_cmd_radius;
446 | static int hf_nmea0183_htc_cmd_rate;
447 | static int hf_nmea0183_htc_cmd_rudder_angle;
448 | static int hf_nmea0183_htc_cmd_rudder_dir;
449 | static int hf_nmea0183_htc_cmd_rudder_lim;
450 | static int hf_nmea0183_htc_cmd_steer;
451 | static int hf_nmea0183_htc_cmd_track;
452 | static int hf_nmea0183_htc_heading_ref;
453 | static int hf_nmea0183_htc_override;
454 | static int hf_nmea0183_htc_steering_mode;
455 | static int hf_nmea0183_htc_turn_mode;
456 |
457 | static int hf_nmea0183_htd_cmd_offhead_lim;
458 | static int hf_nmea0183_htd_cmd_offtrack;
459 | static int hf_nmea0183_htd_cmd_radius;
460 | static int hf_nmea0183_htd_cmd_rate;
461 | static int hf_nmea0183_htd_cmd_rudder_angle;
462 | static int hf_nmea0183_htd_cmd_rudder_dir;
463 | static int hf_nmea0183_htd_cmd_rudder_lim;
464 | static int hf_nmea0183_htd_cmd_steer;
465 | static int hf_nmea0183_htd_cmd_track;
466 | static int hf_nmea0183_htd_heading_ref;
467 | static int hf_nmea0183_htd_offhdng_status;
468 | static int hf_nmea0183_htd_offtrack_status;
469 | static int hf_nmea0183_htd_override;
470 | static int hf_nmea0183_htd_rudder_status;
471 | static int hf_nmea0183_htd_steering_mode;
472 | static int hf_nmea0183_htd_turn_mode;
473 | static int hf_nmea0183_htd_vessel_heading;
474 |
475 | static int hf_nmea0183_lcd_gri;
476 | static int hf_nmea0183_lcd_master_ecd;
477 | static int hf_nmea0183_lcd_master_snr;
478 | static int hf_nmea0183_lcd_s1_ecd;
479 | static int hf_nmea0183_lcd_s1_snr;
480 | static int hf_nmea0183_lcd_s2_ecd;
481 | static int hf_nmea0183_lcd_s2_snr;
482 | static int hf_nmea0183_lcd_s3_ecd;
483 | static int hf_nmea0183_lcd_s3_snr;
484 | static int hf_nmea0183_lcd_s4_ecd;
485 | static int hf_nmea0183_lcd_s4_snr;
486 | static int hf_nmea0183_lcd_s5_ecd;
487 | static int hf_nmea0183_lcd_s5_snr;
488 |
489 | static int hf_nmea0183_loranc_blink_snr_warning;
490 |
491 | static int hf_nmea0183_lr1_callsign;
492 | static int hf_nmea0183_lr1_imo_num;
493 | static int hf_nmea0183_lr1_req_mmsi;
494 | static int hf_nmea0183_lr1_resp_mmsi;
495 | static int hf_nmea0183_lr1_seqnum;
496 | static int hf_nmea0183_lr1_shipname;
497 |
498 | static int hf_nmea0183_lr2_course_ground;
499 | static int hf_nmea0183_lr2_date;
500 | static int hf_nmea0183_lr2_latitude;
501 | static int hf_nmea0183_lr2_longitude;
502 | static int hf_nmea0183_lr2_resp_mmsi;
503 | static int hf_nmea0183_lr2_seqnum;
504 | static int hf_nmea0183_lr2_speed_ground;
505 | static int hf_nmea0183_lr2_utc;
506 |
507 | static int hf_nmea0183_lr3_destination;
508 | static int hf_nmea0183_lr3_draught;
509 | static int hf_nmea0183_lr3_eta_date;
510 | static int hf_nmea0183_lr3_eta_time;
511 | static int hf_nmea0183_lr3_persons;
512 | static int hf_nmea0183_lr3_resp_mmsi;
513 | static int hf_nmea0183_lr3_seqnum;
514 | static int hf_nmea0183_lr3_ship_breadth;
515 | static int hf_nmea0183_lr3_ship_cargo;
516 | static int hf_nmea0183_lr3_ship_length;
517 | static int hf_nmea0183_lr3_ship_type;
518 |
519 | static int hf_nmea0183_lrf_function_rep;
520 | static int hf_nmea0183_lrf_function_rep_val;
521 | static int hf_nmea0183_lrf_function_req;
522 | static int hf_nmea0183_lrf_function_req_val;
523 | static int hf_nmea0183_lrf_mmsi;
524 | static int hf_nmea0183_lrf_name;
525 | static int hf_nmea0183_lrf_seqnum;
526 |
527 | static int hf_nmea0183_lri_control;
528 | static int hf_nmea0183_lri_dest_mmsi;
529 | static int hf_nmea0183_lri_latitude_ne;
530 | static int hf_nmea0183_lri_latitude_sw;
531 | static int hf_nmea0183_lri_longitude_ne;
532 | static int hf_nmea0183_lri_longitude_sw;
533 | static int hf_nmea0183_lri_req_mmsi;
534 | static int hf_nmea0183_lri_seqnum;
535 |
536 | static int hf_nmea0183_mla_12lsb_corr_t_scale;
537 | static int hf_nmea0183_mla_16msb_corr_t_scale;
538 | static int hf_nmea0183_mla_calday_count;
539 | static int hf_nmea0183_mla_corr_circling;
540 | static int hf_nmea0183_mla_corr_incl_angle;
541 | static int hf_nmea0183_mla_eccentricity;
542 | static int hf_nmea0183_mla_long_asc_node;
543 | static int hf_nmea0183_mla_perigee;
544 | static int hf_nmea0183_mla_roc_circling;
545 | static int hf_nmea0183_mla_sat_health;
546 | static int hf_nmea0183_mla_sat_id;
547 | static int hf_nmea0183_mla_sentence_number;
548 | static int hf_nmea0183_mla_t_asc_node;
549 | static int hf_nmea0183_mla_t_scale_shift;
550 | static int hf_nmea0183_mla_total_sentences;
551 |
552 | static int hf_nmea0183_msk_am_bitrate;
553 | static int hf_nmea0183_msk_am_freq;
554 | static int hf_nmea0183_msk_beacon_bitrate;
555 | static int hf_nmea0183_msk_beacon_freq;
556 | static int hf_nmea0183_msk_channel;
557 | static int hf_nmea0183_msk_interval;
558 |
559 | static int hf_nmea0183_mss_beacon_bitrate;
560 | static int hf_nmea0183_mss_beacon_freq;
561 | static int hf_nmea0183_mss_channel;
562 | static int hf_nmea0183_mss_sig_str;
563 | static int hf_nmea0183_mss_snr;
564 |
565 | static int hf_nmea0183_mtw_temp;
566 |
567 | static int hf_nmea0183_mwd_direction_mag;
568 | static int hf_nmea0183_mwd_direction_true;
569 | static int hf_nmea0183_mwd_speed_knots;
570 | static int hf_nmea0183_mwd_speed_ms;
571 |
572 | static int hf_nmea0183_mwv_reference;
573 | static int hf_nmea0183_mwv_speed_units;
574 | static int hf_nmea0183_mwv_status;
575 | static int hf_nmea0183_mwv_wind_angle;
576 | static int hf_nmea0183_mwv_wind_speed;
577 |
578 | static int hf_nmea0183_osd_course_ref;
579 | static int hf_nmea0183_osd_course_true;
580 | static int hf_nmea0183_osd_drift;
581 | static int hf_nmea0183_osd_heading_status;
582 | static int hf_nmea0183_osd_heading_true;
583 | static int hf_nmea0183_osd_set_true;
584 | static int hf_nmea0183_osd_speed;
585 | static int hf_nmea0183_osd_speed_ref;
586 | static int hf_nmea0183_osd_speed_units;
587 |
588 | static int hf_nmea0183_rma_course;
589 | static int hf_nmea0183_rma_latitude;
590 | static int hf_nmea0183_rma_longitude;
591 | static int hf_nmea0183_rma_mag_var;
592 | static int hf_nmea0183_rma_mode;
593 | static int hf_nmea0183_rma_speed;
594 | static int hf_nmea0183_rma_status;
595 | static int hf_nmea0183_rma_time_diff_a;
596 | static int hf_nmea0183_rma_time_diff_b;
597 |
598 | static int hf_nmea0183_rmb_arrival_status;
599 | static int hf_nmea0183_rmb_bearing_dest;
600 | static int hf_nmea0183_rmb_data_status;
601 | static int hf_nmea0183_rmb_dest_id;
602 | static int hf_nmea0183_rmb_dest_velocity;
603 | static int hf_nmea0183_rmb_dest_wp_latitude;
604 | static int hf_nmea0183_rmb_dest_wp_longitude;
605 | static int hf_nmea0183_rmb_mode;
606 | static int hf_nmea0183_rmb_orig_id;
607 | static int hf_nmea0183_rmb_range_dest;
608 | static int hf_nmea0183_rmb_steer;
609 | static int hf_nmea0183_rmb_xte;
610 |
611 | static int hf_nmea0183_rmc_course;
612 | static int hf_nmea0183_rmc_date;
613 | static int hf_nmea0183_rmc_latitude;
614 | static int hf_nmea0183_rmc_longitude;
615 | static int hf_nmea0183_rmc_magnetic;
616 | static int hf_nmea0183_rmc_mode;
617 | static int hf_nmea0183_rmc_speed;
618 | static int hf_nmea0183_rmc_status;
619 | static int hf_nmea0183_rmc_utc;
620 |
621 | static int hf_nmea0183_rot_rate_of_turn;
622 | static int hf_nmea0183_rot_valid;
623 |
624 | static int hf_nmea0183_rpm_number;
625 | static int hf_nmea0183_rpm_pitch;
626 | static int hf_nmea0183_rpm_source;
627 | static int hf_nmea0183_rpm_speed;
628 | static int hf_nmea0183_rpm_status;
629 |
630 | static int hf_nmea0183_rsa_pt_sensor;
631 | static int hf_nmea0183_rsa_pt_status;
632 | static int hf_nmea0183_rsa_sb_sensor;
633 | static int hf_nmea0183_rsa_sb_status;
634 |
635 | static int hf_nmea0183_rsd_cursor_bearing;
636 | static int hf_nmea0183_rsd_cursor_range;
637 | static int hf_nmea0183_rsd_display;
638 | static int hf_nmea0183_rsd_ebl1;
639 | static int hf_nmea0183_rsd_ebl2;
640 | static int hf_nmea0183_rsd_orig2_range;
641 | static int hf_nmea0183_rsd_orig_bearing;
642 | static int hf_nmea0183_rsd_orig_range;
643 | static int hf_nmea0183_rsd_scale;
644 | static int hf_nmea0183_rsd_units;
645 | static int hf_nmea0183_rsd_vrm1;
646 | static int hf_nmea0183_rsd_vrm2;
647 |
648 | static int hf_nmea0183_rte_route;
649 | static int hf_nmea0183_rte_sentence_mode;
650 | static int hf_nmea0183_rte_sentence_number;
651 | static int hf_nmea0183_rte_total_sentences;
652 | static int hf_nmea0183_rte_waypoint;
653 |
654 | static int hf_nmea0183_sfi_frequency;
655 | static int hf_nmea0183_sfi_mode;
656 | static int hf_nmea0183_sfi_sentence_number;
657 | static int hf_nmea0183_sfi_total_sentences;
658 |
659 | static int hf_nmea0183_ssd_callsign;
660 | static int hf_nmea0183_ssd_dte_flag;
661 | static int hf_nmea0183_ssd_name;
662 | static int hf_nmea0183_ssd_ref_a;
663 | static int hf_nmea0183_ssd_ref_b;
664 | static int hf_nmea0183_ssd_ref_c;
665 | static int hf_nmea0183_ssd_ref_d;
666 | static int hf_nmea0183_ssd_source;
667 |
668 | static int hf_nmea0183_stn_talker;
669 |
670 | static int hf_nmea0183_tlb_label;
671 | static int hf_nmea0183_tlb_target;
672 |
673 | static int hf_nmea0183_tll_ref_tgt;
674 | static int hf_nmea0183_tll_tgt_latitude;
675 | static int hf_nmea0183_tll_tgt_longitude;
676 | static int hf_nmea0183_tll_tgt_name;
677 | static int hf_nmea0183_tll_utc;
678 | static int hf_nmea0183_tll_tgt_num;
679 | static int hf_nmea0183_tll_tgt_status;
680 |
681 | static int hf_nmea0183_ttm_acq_type;
682 | static int hf_nmea0183_ttm_bearing;
683 | static int hf_nmea0183_ttm_dist_pt_approach;
684 | static int hf_nmea0183_ttm_ref_tgt;
685 | static int hf_nmea0183_ttm_tgt_course;
686 | static int hf_nmea0183_ttm_tgt_dist;
687 | static int hf_nmea0183_ttm_tgt_name;
688 | static int hf_nmea0183_ttm_tgt_num;
689 | static int hf_nmea0183_ttm_tgt_speed;
690 | static int hf_nmea0183_ttm_tgt_status;
691 | static int hf_nmea0183_ttm_time_cpa;
692 | static int hf_nmea0183_ttm_units;
693 | static int hf_nmea0183_ttm_utc;
694 |
695 | static int hf_nmea0183_tut_sentence_num;
696 | static int hf_nmea0183_tut_seq_msg;
697 | static int hf_nmea0183_tut_src_id;
698 | static int hf_nmea0183_tut_text;
699 | static int hf_nmea0183_tut_total_sentences;
700 | static int hf_nmea0183_tut_trans_code;
701 |
702 | static int hf_nmea0183_txt_num;
703 | static int hf_nmea0183_txt_sent_num;
704 | static int hf_nmea0183_txt_id;
705 | static int hf_nmea0183_txt_msg;
706 |
707 | static int hf_nmea0183_vbw_water_speed_longitudinal;
708 | static int hf_nmea0183_vbw_water_speed_transverse;
709 | static int hf_nmea0183_vbw_water_speed_valid;
710 | static int hf_nmea0183_vbw_ground_speed_longitudinal;
711 | static int hf_nmea0183_vbw_ground_speed_transverse;
712 | static int hf_nmea0183_vbw_ground_speed_valid;
713 | static int hf_nmea0183_vbw_stern_water_speed;
714 | static int hf_nmea0183_vbw_stern_water_speed_valid;
715 | static int hf_nmea0183_vbw_stern_ground_speed;
716 | static int hf_nmea0183_vbw_stern_ground_speed_valid;
717 |
718 | static int hf_nmea0183_vdr_heading_magnetic;
719 | static int hf_nmea0183_vdr_heading_true;
720 | static int hf_nmea0183_vdr_speed;
721 |
722 | static int hf_nmea0183_vhw_true_heading;
723 | static int hf_nmea0183_vhw_true_heading_unit;
724 | static int hf_nmea0183_vhw_magnetic_heading;
725 | static int hf_nmea0183_vhw_magnetic_heading_unit;
726 | static int hf_nmea0183_vhw_water_speed_knot;
727 | static int hf_nmea0183_vhw_water_speed_knot_unit;
728 | static int hf_nmea0183_vhw_water_speed_kilometer;
729 | static int hf_nmea0183_vhw_water_speed_kilometer_unit;
730 |
731 | static int hf_nmea0183_vlw_cumulative_water;
732 | static int hf_nmea0183_vlw_cumulative_water_unit;
733 | static int hf_nmea0183_vlw_trip_water;
734 | static int hf_nmea0183_vlw_trip_water_unit;
735 | static int hf_nmea0183_vlw_cumulative_ground;
736 | static int hf_nmea0183_vlw_cumulative_ground_unit;
737 | static int hf_nmea0183_vlw_trip_ground;
738 | static int hf_nmea0183_vlw_trip_ground_unit;
739 |
740 | static int hf_nmea0183_vpw_speed_knots;
741 | static int hf_nmea0183_vpw_speed_ms;
742 |
743 | static int hf_nmea0183_vsd_app_flags;
744 | static int hf_nmea0183_vsd_day_arrival;
745 | static int hf_nmea0183_vsd_destination;
746 | static int hf_nmea0183_vsd_max_draught;
747 | static int hf_nmea0183_vsd_month_arrival;
748 | static int hf_nmea0183_vsd_nav_status;
749 | static int hf_nmea0183_vsd_persons;
750 | static int hf_nmea0183_vsd_ship_cargo;
751 | static int hf_nmea0183_vsd_utc_arrival;
752 |
753 | static int hf_nmea0183_vtg_true_course;
754 | static int hf_nmea0183_vtg_true_course_unit;
755 | static int hf_nmea0183_vtg_magnetic_course;
756 | static int hf_nmea0183_vtg_magnetic_course_unit;
757 | static int hf_nmea0183_vtg_ground_speed_knot;
758 | static int hf_nmea0183_vtg_ground_speed_knot_unit;
759 | static int hf_nmea0183_vtg_ground_speed_kilometer;
760 | static int hf_nmea0183_vtg_ground_speed_kilometer_unit;
761 | static int hf_nmea0183_vtg_mode;
762 |
763 | static int hf_nmea0183_wcv_mode;
764 | static int hf_nmea0183_wcv_velocity;
765 | static int hf_nmea0183_wcv_waypoint;
766 |
767 | static int hf_nmea0183_wnc_dist_km;
768 | static int hf_nmea0183_wnc_dist_nm;
769 | static int hf_nmea0183_wnc_from_id;
770 | static int hf_nmea0183_wnc_to_id;
771 |
772 | static int hf_nmea0183_wpl_latitude;
773 | static int hf_nmea0183_wpl_longitude;
774 | static int hf_nmea0183_wpl_waypoint;
775 |
776 | static int hf_nmea0183_xdr_data;
777 | static int hf_nmea0183_xdr_id;
778 | static int hf_nmea0183_xdr_type;
779 | static int hf_nmea0183_xdr_units;
780 |
781 | static int hf_nmea0183_xte_blinksnr_status;
782 | static int hf_nmea0183_xte_cycle_status;
783 | static int hf_nmea0183_xte_magnitude;
784 | static int hf_nmea0183_xte_direction;
785 | static int hf_nmea0183_xte_mode;
786 |
787 | static int hf_nmea0183_xtr_direction;
788 | static int hf_nmea0183_xtr_magnitude;
789 |
790 | static int hf_nmea0183_zda_time;
791 | static int hf_nmea0183_zda_time_hour;
792 | static int hf_nmea0183_zda_time_minute;
793 | static int hf_nmea0183_zda_time_second;
794 | static int hf_nmea0183_zda_date_day;
795 | static int hf_nmea0183_zda_date_month;
796 | static int hf_nmea0183_zda_date_year;
797 | static int hf_nmea0183_zda_local_zone_hour;
798 | static int hf_nmea0183_zda_local_zone_minute;
799 |
800 | static int hf_nmea0183_zdl_dist;
801 | static int hf_nmea0183_zdl_time;
802 | static int hf_nmea0183_zdl_type;
803 |
804 | static int hf_nmea0183_zfo_elapsed;
805 | static int hf_nmea0183_zfo_origin;
806 | static int hf_nmea0183_zfo_utc;
807 |
808 | static int hf_nmea0183_ztg_dest;
809 | static int hf_nmea0183_ztg_time_left;
810 | static int hf_nmea0183_ztg_utc;
811 |
812 | static int hf_nmea0183_sentence_prefix;
813 | static int hf_nmea0183_tag_block;
814 | static int hf_nmea0183_bin_version;
815 | static int hf_nmea0183_bin_srcid;
816 | static int hf_nmea0183_bin_dstid;
817 | static int hf_nmea0183_bin_mtype;
818 | static int hf_nmea0183_bin_blockid;
819 | static int hf_nmea0183_bin_seqnum;
820 | static int hf_nmea0183_bin_max_seqnum;
821 | static int hf_nmea0183_bin_data;
822 | static int hf_nmea0183_bin_file_descriptor;
823 | static int hf_nmea0183_bin_file_descriptor_len;
824 | static int hf_nmea0183_bin_file_length;
825 | static int hf_nmea0183_bin_stat_of_acquisition;
826 | static int hf_nmea0183_bin_device;
827 | static int hf_nmea0183_bin_channel;
828 | static int hf_nmea0183_bin_type_len;
829 | static int hf_nmea0183_bin_data_type;
830 | static int hf_nmea0183_bin_status_and_info;
831 |
832 | static int ett_nmea0183;
833 | static int ett_nmea0183_checksum;
834 | static int ett_nmea0183_sentence;
835 | static int ett_nmea0183_zda_time;
836 | static int ett_nmea0183_alr_time;
837 | static int ett_nmea0183_gga_time;
838 | static int ett_nmea0183_gga_latitude;
839 | static int ett_nmea0183_gga_longitude;
840 | static int ett_nmea0183_gll_time;
841 | static int ett_nmea0183_gll_latitude;
842 | static int ett_nmea0183_gll_longitude;
843 | static int ett_nmea0183_gst_time;
844 | static int ett_nmea0183_tag_block;
845 | static int ett_nmea0183_fd;
846 | static int ett_nmea0183_legacy_satellite_info;
847 |
848 | static expert_field ei_nmea0183_invalid_first_character;
849 | static expert_field ei_nmea0183_missing_checksum_character;
850 | static expert_field ei_nmea0183_invalid_end_of_line;
851 | static expert_field ei_nmea0183_checksum_incorrect;
852 | static expert_field ei_nmea0183_sentence_too_long;
853 | static expert_field ei_nmea0183_field_time_too_short;
854 | static expert_field ei_nmea0183_field_latitude_too_short;
855 | static expert_field ei_nmea0183_field_longitude_too_short;
856 | static expert_field ei_nmea0183_field_missing;
857 | static expert_field ei_nmea0183_field_uint_invalid;
858 | static expert_field ei_nmea0183_sat_prn_invalid;
859 | static expert_field ei_nmea0183_gga_altitude_unit_incorrect;
860 | static expert_field ei_nmea0183_gga_geoidal_separation_unit_incorrect;
861 | static expert_field ei_nmea0183_hdt_unit_incorrect;
862 | static expert_field ei_nmea0183_vhw_true_heading_unit_incorrect;
863 | static expert_field ei_nmea0183_vhw_magnetic_heading_unit_incorrect;
864 | static expert_field ei_nmea0183_vhw_water_speed_knot_unit_incorrect;
865 | static expert_field ei_nmea0183_vhw_water_speed_kilometer_unit_incorrect;
866 | static expert_field ei_nmea0183_vlw_cumulative_water_unit_incorrect;
867 | static expert_field ei_nmea0183_vlw_trip_water_unit_incorrect;
868 | static expert_field ei_nmea0183_vlw_cumulative_ground_unit_incorrect;
869 | static expert_field ei_nmea0183_vlw_trip_ground_unit_incorrect;
870 | static expert_field ei_nmea0183_vtg_true_course_unit_incorrect;
871 | static expert_field ei_nmea0183_vtg_magnetic_course_unit_incorrect;
872 | static expert_field ei_nmea0183_vtg_ground_speed_knot_unit_incorrect;
873 | static expert_field ei_nmea0183_vtg_ground_speed_kilometer_unit_incorrect;
874 | static expert_field ei_nmea0183_legacy_nonstandard;
875 | static expert_field ei_nmea0183_legacy_empty_response;
876 |
877 | static int proto_nmea0183;
878 | static int proto_nmea0183_bin;
879 |
880 | static dissector_handle_t nmea0183_handle;
881 |
882 | // List of known Talker IDs (Source: NMEA Revealed by Eric S. Raymond, https://gpsd.gitlab.io/gpsd/NMEA.html, retrieved 2023-01-26)
883 | static const string_string known_talker_ids[] = {
884 | {"AB", "Independent AIS Base Station"},
885 | {"AD", "Dependent AIS Base Station"},
886 | {"AG", "Autopilot - General"},
887 | {"AI", "Mobile AIS Station"},
888 | {"AN", "AIS Aid to Navigation"},
889 | {"AP", "Autopilot - Magnetic"},
890 | {"AR", "AIS Receiving Station"},
891 | {"AT", "AIS Transmitting Station"},
892 | {"AX", "AIS Simplex Repeater"},
893 | {"BD", "BeiDou (China)"},
894 | {"BI", "Bilge System"},
895 | {"BN", "Bridge navigational watch alarm system"},
896 | {"BS", "Base AIS Station"},
897 | {"CA", "Central Alarm"},
898 | {"CC", "Computer - Programmed Calculator (obsolete)"},
899 | {"CD", "Communications - Digital Selective Calling (DSC)"},
900 | {"CM", "Computer - Memory Data (obsolete)"},
901 | {"CR", "Communications - Data Receiver"},
902 | {"CS", "Communications - Satellite"},
903 | {"CT", "Communications - Radio-Telephone (MF/HF)"},
904 | {"CV", "Communications - Radio-Telephone (VHF)"},
905 | {"CX", "Communications - Scanning Receiver"},
906 | {"DE", "DECCA Navigation (obsolete)"},
907 | {"DF", "Direction Finder"},
908 | {"DM", "Velocity Sensor, Speed Log, Water, Magnetic"},
909 | {"DP", "Dynamiv Position"},
910 | {"DU", "Duplex repeater station"},
911 | {"EC", "Electronic Chart System (ECS)"},
912 | {"EI", "Electronic Chart Display & Information System (ECDIS)"},
913 | {"EP", "Emergency Position Indicating Beacon (EPIRB)"},
914 | {"ER", "Engine Room Monitoring Systems"},
915 | {"FD", "Fire Door"},
916 | {"FE", "Fire Extinguisher System"},
917 | {"FR", "Fire Detection System"},
918 | {"FS", "Fire Sprinkler"},
919 | {"GA", "Galileo Positioning System"},
920 | {"GB", "BeiDou (China)"},
921 | {"GI", "NavIC, IRNSS (India)"},
922 | {"GL", "GLONASS, according to IEIC 61162-1"},
923 | {"GN", "Combination of multiple satellite systems (NMEA 1083)"},
924 | {"GP", "Global Positioning System receiver"},
925 | {"GQ", "QZSS regional GPS augmentation system (Japan)"},
926 | {"HC", "Heading - Magnetic Compass"},
927 | {"HD", "Hull Door"},
928 | {"HE", "Heading - North Seeking Gyro"},
929 | {"HF", "Heading - Fluxgate"},
930 | {"HN", "Heading - Non North Seeking Gyro"},
931 | {"HS", "Hull Stress"},
932 | {"II", "Integrated Instrumentation"},
933 | {"IN", "Integrated Navigation"},
934 | {"JA", "Alarm and Monitoring"},
935 | {"JB", "Water Monitoring"},
936 | {"JC", "Power Management"},
937 | {"JD", "Propulsion Control"},
938 | {"JE", "Engine Control"},
939 | {"JF", "Propulsion Boiler"},
940 | {"JG", "Aux Boiler"},
941 | {"JH", "Engine Governor"},
942 | {"LA", "Loran A (obsolete)"},
943 | {"LC", "Loran C (obsolete)"},
944 | {"MP", "Microwave Positioning System (obsolete)"},
945 | {"MX", "Multiplexer"},
946 | {"NL", "Navigation light controller"},
947 | {"NV", "Night Vision"},
948 | {"OM", "OMEGA Navigation System (obsolete)"},
949 | {"OS", "Distress Alarm System (obsolete)"},
950 | {"P ", "Vendor specific"},
951 | {"QZ", "QZSS regional GPS augmentation system (Japan)"},
952 | {"RA", "RADAR and/or ARPA"},
953 | {"RB", "Record Book"},
954 | {"RC", "Propulsion Machinery including Remote Control"},
955 | {"RI", "Rudder Angle Indicator"},
956 | {"SA", "Physical Shore AUS Station"},
957 | {"SC", "Steering Control System/Device"},
958 | {"SD", "Depth Sounder"},
959 | {"SG", "Steering Gear"},
960 | {"SN", "Electronic Positioning System, other/general"},
961 | {"SS", "Scanning Sounder"},
962 | {"ST", "Skytraq debug output"},
963 | {"TC", "Track Control"},
964 | {"TI", "Turn Rate Indicator"},
965 | {"TR", "TRANSIT Navigation System"},
966 | {"U0", "User Configured 0"},
967 | {"U1", "User Configured 1"},
968 | {"U2", "User Configured 2"},
969 | {"U3", "User Configured 3"},
970 | {"U4", "User Configured 4"},
971 | {"U5", "User Configured 5"},
972 | {"U6", "User Configured 6"},
973 | {"U7", "User Configured 7"},
974 | {"U8", "User Configured 8"},
975 | {"U9", "User Configured 9"},
976 | {"UP", "Microprocessor controller"},
977 | {"VA", "VHF Data Exchange System (VDES), ASM"},
978 | {"VD", "Velocity Sensor, Doppler, other/general"},
979 | {"VM", "Velocity Sensor, Speed Log, Water, Magnetic"},
980 | {"VR", "Voyage Data recorder"},
981 | {"VS", "VHF Data Exchange System (VDES), Satellite"},
982 | {"VT", "VHF Data Exchange System (VDES), Terrestrial"},
983 | {"VW", "Velocity Sensor, Speed Log, Water, Mechanical"},
984 | {"WD", "Watertight Door"},
985 | {"WI", "Weather Instruments"},
986 | {"WL", "Water Level"},
987 | {"YC", "Transducer - Temperature (obsolete)"},
988 | {"YD", "Transducer - Displacement, Angular or Linear (obsolete)"},
989 | {"YF", "Transducer - Frequency (obsolete)"},
990 | {"YL", "Transducer - Level (obsolete)"},
991 | {"YP", "Transducer - Pressure (obsolete)"},
992 | {"YR", "Transducer - Flow Rate (obsolete)"},
993 | {"YT", "Transducer - Tachometer (obsolete)"},
994 | {"YV", "Transducer - Volume (obsolete)"},
995 | {"YX", "Transducer"},
996 | {"ZA", "Timekeeper - Atomic Clock"},
997 | {"ZC", "Timekeeper - Chronometer"},
998 | {"ZQ", "Timekeeper - Quartz"},
999 | {"ZV", "Timekeeper - Radio Update, WWV or WWVH"},
1000 | {NULL((void*)0), NULL((void*)0)}};
1001 |
1002 | // List of known Sentence IDs (Source: NMEA Revealed by Eric S. Raymond, https://gpsd.gitlab.io/gpsd/NMEA.html, retrieved 2023-01-26)
1003 | static const string_string known_sentence_ids[] = {
1004 | {"AAM", "Waypoint Arrival Alarm"},
1005 | {"ABK", "UAIS Addressed and Binary Broadcast Acknowledgement"},
1006 | {"ACA", "UAIS Regional Channel Assignment Message"},
1007 | {"ACF", "General AtoN Station Configuration Command"},
1008 | {"ACG", "Extended General AtoN Station Configuration Command"},
1009 | {"ACK", "Alarm Acknowledgement"},
1010 | {"ACM", "Preparation and Initiation of an AIS Base Station Addressed Channel Management Message (Message 22)"},
1011 | {"ACS", "UAIS Channel Management Information Source"},
1012 | {"ADS", "Automatic Device Status"},
1013 | {"AFB", "AtoN Forced Broadcast Command"},
1014 | {"AGA", "Preparation and Initiation of an AIS Base Station Broadcast of a Group Assignment Message (Message 23)"},
1015 | {"AID", "AtoN Identification Configuration Command"},
1016 | {"AIR", "UAIS Interrogation Request"},
1017 | {"AKD", "Acknowledge Detail Alarm Condition"},
1018 | {"ALA", "Set Detail Alarm Condition"},
1019 | {"ALM", "GPS Almanac Data"},
1020 | {"ALR", "Set Alarm State"},
1021 | {"ARC", "Alert Command Refused"},
1022 | {"APA", "Autopilot Sentence A"},
1023 | {"APB", "Autopilot Sentence B"},
1024 | {"ASD", "Autopilot System Data"},
1025 | {"ASN", "Preparation and Initiation of an AIS Base Station Broadcast of Assignment VDL (Message 16)"},
1026 | {"BBM", "AIS Broadcast BinaryMessage"},
1027 | {"BCG", "Base Station Configuration, General Command"},
1028 | {"BCL", "Base Station Configuration, Location Command"},
1029 | {"BEC", "Bearing & Distance to Waypoint - Dead Reckoning"},
1030 | {"BER", "Bearing & Distance to Waypoint, Dead Reckoning, Rhumb Line"},
1031 | {"BOD", "Bearing - Waypoint to Waypoint"},
1032 | {"BPI", "Bearing & Distance to Point of Interest"},
1033 | {"BWC", "Bearing & Distance to Waypoint - Great Circle"},
1034 | {"BWR", "Bearing and Distance to Waypoint - Rhumb Line"},
1035 | {"BWW", "Bearing - Waypoint to Waypoint"},
1036 | {"CBR", "Configure Broadcast Rates for AIS AtoN Station Message Command"},
1037 | {"CEK", "Configure Encryption Key Command"},
1038 | {"COP", "Configure the Operational Period, Command"},
1039 | {"CPC", "Configure Parameter-Code for UNIX Time Parameter (c)"},
1040 | {"CPD", "Configure Parameter-Code for Destination-Identification Parameter (d)"},
1041 | {"CPG", "Configure Parameter-Code for the Sentence-Grouping Parameter (g)"},
1042 | {"CPN", "Configure Parameter-Code for the Line-Count Parameter (n)"},
1043 | {"CPR", "Configure Parameter-Code for Relative Time Parameter (r)"},
1044 | {"CPS", "Configure Parameter-Code for the Source-Identification Parameter (s)"},
1045 | {"CPT", "Configure Parameter-Code for General Alphanumeric String Parameter (t)"},
1046 | {"CUR", "Water Current Layer"},
1047 | {"DBK", "Echosounder - Depth Below Keel"},
1048 | {"DBS", "Echosounder - Depth Below Surface"},
1049 | {"DBT", "Echosounder - Depth Below Transducer"},
1050 | {"DCN", "DECCA Position"},
1051 | {"DCR", "Device Capability Report"},
1052 | {"DDC", "Display Dimming Control"},
1053 | {"DLM", "Data Link Management Slot Allocations for Base Station"},
1054 | {"DOR", "Door Status Detection"},
1055 | {"DPT", "Depth of Water"},
1056 | {"DRU", "Dual Doppler Auxiliary Data"},
1057 | {"DSC", "Digital Selective Calling Information"},
1058 | {"DSE", "Extended DSC"},
1059 | {"DSI", "DSC Transponder Initiate"},
1060 | {"DSR", "DSC Transponder Response"},
1061 | {"DTM", "Datum Reference"},
1062 | {"ECB", "Configure Broadcast Rates for Base Station Messages with Epoch Planning Support"},
1063 | {"ETL", "Engine Telegraph Operation Status"},
1064 | {"EVE", "General Event Message"},
1065 | {"FIR", "Fire Detection"},
1066 | {"FSI", "Frequency Set Information"},
1067 | {"FSR", "Frame Summary of AIS Reception"},
1068 | {"GAL", "Galileo Almanac Data"},
1069 | {"GBS", "GPS Satellite Fault Detection"},
1070 | {"GDA", "Dead Reckoning Positions"},
1071 | {"GEN", "Generic Binary/Status Information"},
1072 | {"GFA", "GNSS Fix Accuracy and Integrity"},
1073 | {"GGA", "Global Positioning System Fix Data"},
1074 | {"GLA", "Loran-C Positions"},
1075 | {"GLC", "Geographic Position, Loran-C"},
1076 | {"GLL", "Geographic Position - Latitude/Longitude"},
1077 | {"GMP", "GNSS Map Projection Fix Data"},
1078 | {"GNS", "GNSS Fix data"},
1079 | {"GOA", "OMEGA Positions"},
1080 | {"GRS", "GNSS Range Residuals"},
1081 | {"GSA", "GNSS DOP and Active Satellites"},
1082 | {"GST", "GNSS Pseudorange Noise Statistics"},
1083 | {"GSV", "GNSS Satellites in View"},
1084 | {"GTD", "Geographic Location in Time Differences"},
1085 | {"GXA", "TRANSIT Position"},
1086 | {"HBT", "Heartbeat Supervision Report"},
1087 | {"HCC", "Compass Heading"},
1088 | {"HCD", "Heading and Deviation"},
1089 | {"HDG", "Heading - Deviation & Variation"},
1090 | {"HDM", "Heading - Magnetic"},
1091 | {"HDT", "Heading - True"},
1092 | {"HFB", "Trawl Headrope to Footrope and Bottom"},
1093 | {"HMR", "Heading, Monitor Receive"},
1094 | {"HMS", "Heading, Monitor Set"},
1095 | {"HSC", "Heading Steering Command"},
1096 | {"HSS", "Hull Stress Surveillance Systems"},
1097 | {"HTC", "Heading/Track Control Command"},
1098 | {"HTD", "Heading/Track Control Data"},
1099 | {"HVD", "Magnetic Variation, Automatic"},
1100 | {"HVM", "Magnetic Variation, Manually Set"},
1101 | {"IMA", "Vessel Identification"},
1102 | {"ITS", "Trawl Door Spread 2 Distance"},
1103 | {"LCD", "Loran-C Signal Data"},
1104 | {"LR1", "UAIS Long-range Reply Sentence 1"},
1105 | {"LR2", "UAIS Long-range Reply Sentence 2"},
1106 | {"LR3", "UAIS Long-range Reply Sentence 3"},
1107 | {"LRF", "UAIS Long-Range Function"},
1108 | {"LRI", "UAIS Long-Range Interrogation"},
1109 | {"LTI", "UAIS Long-Range Interrogation"},
1110 | {"MDA", "Meteorological Composite"},
1111 | {"MEB", "Message Input for Broadcast, Command"},
1112 | {"MHU", "Humidity"},
1113 | {"MLA", "GLONASS Almanac Data"},
1114 | {"MMB", "Barometer"},
1115 | {"MSK", "Control for a Beacon Receiver"},
1116 | {"MSS", "Beacon Receiver Status"},
1117 | {"MTA", "Air Temperature"},
1118 | {"MTW", "Mean Temperature of Water"},
1119 | {"MWD", "Wind Direction & Speed"},
1120 | {"MWH", "Wave Height"},
1121 | {"MWS", "Wind & Sea State"},
1122 | {"MWV", "Wind Speed and Angle"},
1123 | {"NAK", "Negative Acknowledgement"},
1124 | {"NRM", "NAVTEX Receiver Mask"},
1125 | {"NRX", "NAVTEX Received Message"},
1126 | {"ODC", "Echosounder - ODEC DPT Format"},
1127 | {"OLN", "Omega Lane Numbers"},
1128 | {"OLW", "Omega Lane Width"},
1129 | {"OMP", "Omega Position"},
1130 | {"OSD", "Own Ship Data"},
1131 | {"OZN", "Omega Zone Number"},
1132 | {"POS", "Device Position and Ship Dimensions Report or Configuration Command"},
1133 | {"PRC", "Propulsion Remote Control Status"},
1134 | {"R00", "Waypoints in active route"},
1135 | {"RLM", "Return Link Message"},
1136 | {"RMA", "Recommended Minimum Specific Loran-C Data"},
1137 | {"RMB", "Recommended Minimum Navigation Information"},
1138 | {"RMC", "Recommended Minimum Specific GNSS Data"},
1139 | {"RNN", "Routes"},
1140 | {"ROO", "Waypoints in Active Route"},
1141 | {"ROR", "Rudder Order Status"},
1142 | {"ROT", "Rate Of Turn"},
1143 | {"RPM", "Revolutions"},
1144 | {"RSA", "Rudder Sensor Angle"},
1145 | {"RSD", "RADAR System Data"},
1146 | {"RST", "Equipment Reset Command"},
1147 | {"RTE", "Routes"},
1148 | {"SBK", "Loran-C Blink Status"},
1149 | {"SCD", "Loran-C ECDs"},
1150 | {"SCY", "Loran-C Cycle Lock Status"},
1151 | {"SDB", "Loran-C Signal Strength"},
1152 | {"SFI", "Scanning Frequency Information"},
1153 | {"SGD", "Position Accuracy Estimate"},
1154 | {"SGR", "Loran-C Chain Identifier"},
1155 | {"SID", "Set an Equipment's Identification, Command"},
1156 | {"SIU", "Loran-C Stations in Use"},
1157 | {"SLC", "Loran-C Status"},
1158 | {"SNC", "Navigation Calculation Basis"},
1159 | {"SNU", "Loran-C SNR Status"},
1160 | {"SPO", "Select AIS Device's Processing and Output"},
1161 | {"SPS", "Loran-C Predicted Signal Strength"},
1162 | {"SSD", "UAIS Ship Static Data"},
1163 | {"SSF", "Position Correction Offset"},
1164 | {"STC", "Time Constant"},
1165 | {"STN", "Multiple Data ID"},
1166 | {"STR", "Tracking Reference"},
1167 | {"SYS", "Hybrid System Configuration"},
1168 | {"TBR", "TAG Block Report"},
1169 | {"TBS", "TAG Block Listener Source-Identification Configuration Command"},
1170 | {"TDS", "Trawl Door Spread Distance"},
1171 | {"TEC", "TRANSIT Satellite Error Code & Doppler Count"},
1172 | {"TEP", "TRANSIT Satellite Predicted Elevation"},
1173 | {"TFI", "Trawl Filling Indicator"},
1174 | {"TFR", "Transmit Feedback Report"},
1175 | {"TGA", "TRANSIT Satellite Antenna & Geoidal Heights"},
1176 | {"THS", "True Heading and Status"},
1177 | {"TIF", "TRANSIT Satellite Initial Flag"},
1178 | {"TLB", "Target Label"},
1179 | {"TLL", "Target Latitude and Longitude"},
1180 | {"TPC", "Trawl Position Cartesian Coordinates"},
1181 | {"TPR", "Trawl Position Relative Vessel"},
1182 | {"TPT", "Trawl Position True"},
1183 | {"TRC", "Thruster Control Data"},
1184 | {"TRD", "Thruster Response Data"},
1185 | {"TRF", "TRANSIT Fix Data"},
1186 | {"TRP", "TRANSIT Satellite Predicted Direction of Rise"},
1187 | {"TRS", "TRANSIT Satellite Operating Status"},
1188 | {"TSA", "Transmit Slot Assignment"},
1189 | {"TSP", "Transmit Slot Prohibit"},
1190 | {"TSR", "Transmit Slot Prohibit - Status Report"},
1191 | {"TTD", "Tracked Target Data"},
1192 | {"TTM", "Tracked Target Message"},
1193 | {"TUT", "Transmission of Multi-Language Text"},
1194 | {"TXT", "Text Transmission"},
1195 | {"UID", "User Identification Code Transmission"},
1196 | {"VBW", "Dual Ground/Water Speed"},
1197 | {"VCD", "Current at Selected Depth"},
1198 | {"VDR", "Set and Drift"},
1199 | {"VER", "Version"},
1200 | {"VHW", "Water Speed and Heading"},
1201 | {"VLW", "Distance Traveled through Water"},
1202 | {"VPE", "Speed, Dead Reckoned Parallel to True Wind"},
1203 | {"VPW", "Speed, Measured Parallel to Wind"},
1204 | {"VSD", "UAIS Voyage Static Data"},
1205 | {"VSI", "VDL Signal Information"},
1206 | {"VTA", "Actual Track"},
1207 | {"VTG", "Track made good and Ground speed"},
1208 | {"VTI", "Intended Track"},
1209 | {"VWE", "Wind Track Efficiency"},
1210 | {"VWR", "Relative Wind Speed and Angle"},
1211 | {"VWT", "True Wind Speed and Angle"},
1212 | {"WAT", "Water Level Detection"},
1213 | {"WCV", "Waypoint Closure Velocity"},
1214 | {"WDC", "Distance to Waypoint - Great Circle"},
1215 | {"WDR", "Distance to Waypoint - Rhumb Line"},
1216 | {"WFM", "Route Following Mode"},
1217 | {"WNC", "Distance - Waypoint to Waypoint"},
1218 | {"WNR", "Waypoint-to-Waypoint Distance, Rhumb Line"},
1219 | {"WPL", "Waypoint Location"},
1220 | {"XDR", "Transducer Measurement"},
1221 | {"XTE", "Cross-Track Error, Measured"},
1222 | {"XTR", "Cross Track Error - Dead Reckoning"},
1223 | {"YWP", "Water Propagation Speed"},
1224 | {"YWS", "Water Profile"},
1225 | {"ZAA", "Time, Elapsed/Estimated"},
1226 | {"ZCD", "Timer"},
1227 | {"ZDA", "Time & Date - UTC, day, month, year and local time zone"},
1228 | {"ZDL", "Time and Distance to Variable Point"},
1229 | {"ZEV", "Event Timer"},
1230 | {"ZFO", "UTC & Time from origin Waypoint"},
1231 | {"ZLZ", "Time of Day"},
1232 | {"ZTG", "UTC & Time to Destination Waypoint"},
1233 | {"ZZU", "Time, UTC"},
1234 | {NULL((void*)0), NULL((void*)0)}};
1235 |
1236 | /* Proprietary Manufacturer Mnemonic Coder lookup table */
1237 | /* https://web.nmea.org/External/WCPages/WCWebContent/webcontentpage.aspx?ContentID=364 */
1238 | static const string_string manufacturer_vals[] = {
1239 | {"3SN", "3-S Navigation"},
1240 | {"AAB", "ASM Selective Addressed Message (Reserved for Future Use)"},
1241 | {"AAR", "Asian American Resources"},
1242 | {"ABB", "ASM Broadcast Message (Reserved for Future Use)"},
1243 | {"ACE", "Auto-Comm Engineering Corporation"},
1244 | {"ACR", "ACR Electronics, Inc."},
1245 | {"ACS", "Arco Solar Inc."},
1246 | {"ACT", "Advanced Control Technology"},
1247 | {"ADI", "Aditel"},
1248 | {"ADM", "ASM VHF Data-Link Message (Reserved for Future Use)"},
1249 | {"ADN", "AD Navigation"},
1250 | {"ADO", "ASM VHF Data-Link Own-Vessel Report (Reserved for Future Use"},
1251 | {"AGB", "ASM Geographical Multicast Message (Reserved for Future Use"},
1252 | {"AGI", "Airguide Instrument Co."},
1253 | {"AGL", "Alert Group List (Reserved for Future Use)"},
1254 | {"AHA", "Autohelm of America"},
1255 | {"AIP", "AIPHONE Corporation"},
1256 | {"ALD", "Alden Electronics, Inc."},
1257 | {"AMB", "Ambarella, Inc. "},
1258 | {"AMC", "AllTek Marine Electronics Corp."},
1259 | {"AMI", "Advanced Marine Instrumentation, Ltd."},
1260 | {"AMK", "ASM Addressed and Broadcast Message Acknowledgement (Reserved for Future Use)"},
1261 | {"AMM", "Aquametro Oil & Marine"},
1262 | {"AMR", "AMR Systems"},
1263 | {"AMT", "Airmar Technology Corporation"},
1264 | {"AND", "Andrew Corporation"},
1265 | {"ANI", "Autonautic Instrumental Sl. (Spain)"},
1266 | {"ANS", "Antenna Specialists"},
1267 | {"ANX", "Analytyx Electronic Systems"},
1268 | {"ANZ", "Anschutz of America"},
1269 | {"AOB", "Aerobytes, Ltd."},
1270 | {"APC", "Apelco Electronics & Navigation"},
1271 | {"APN", "American Pioneer, Inc."},
1272 | {"APO", "Automated Procedure Options (Reserved for Future Use)"},
1273 | {"APW", "Pharos Marine Automatic Power"},
1274 | {"APX", "Amperex, Inc."},
1275 | {"AQC", "Aqua-Chem, Inc."},
1276 | {"AQD", "AquaDynamics, Inc."},
1277 | {"AQM", "Aqua Meter Instrument Corp."},
1278 | {"ARL", "Active Research, Ltd."},
1279 | {"ART", "Arlt Technologies, GmbH (Germany)"},
1280 | {"ARV", "Arvento Mobile Systems"},
1281 | {"ASH", "Ashtech"},
1282 | {"ASP", "American Solar Power"},
1283 | {"ATC", "Advanced C Technology, Ltd."},
1284 | {"ATE", "Aetna Engineering"},
1285 | {"ATM", "Atlantic Marketing Company"},
1286 | {"ATR", "Airtron"},
1287 | {"ATV", "Activation, Inc."},
1288 | {"AUC", "Automated Procedure Control (Reserved for Future Use)"},
1289 | {"AUP", "Automated Procedure Query (Reserved for Future Use)"},
1290 | {"AUS", "Automated Procedure Status (Reserved for Future Use)"},
1291 | {"AVN", "Advanced Navigation, Inc."},
1292 | {"AWA", "Awa New Zealand, Ltd."},
1293 | {"AXN", "Axiom Navigation, Inc."},
1294 | {"BBG", "BBG, Inc."},
1295 | {"BBL", "BBL Industries, Inc."},
1296 | {"BBR", "BBR and Associates"},
1297 | {"BDV", "Brisson Development, Inc."},
1298 | {"BEC", "Boat Electric Corporation"},
1299 | {"BFA", "Blueflow Americas"},
1300 | {"BGG", "Bodensee Gravitymeter Geo-Systems (BGS)"},
1301 | {"BGS", "Barringer Geoservice"},
1302 | {"BGT", "Brookes and Gatehouse, Inc."},
1303 | {"BHE", "BH Electronics"},
1304 | {"BHR", "Bahr Technologies, Inc."},
1305 | {"BLB", "Bay Laboratories"},
1306 | {"BMC", "BMC"},
1307 | {"BME", "Bartel Marine Electronics"},
1308 | {"BMS", "Becker Marine Systems"},
1309 | {"BMT", "Aventics GmbH (formerly Bosch Rexroth AG Marine Technique) (Germany)"},
1310 | {"BNI", "Neil Brown Instrument Systems"},
1311 | {"BNS", "Bowditch Navigation Systems"},
1312 | {"BRM", "Mel Barr Company"},
1313 | {"BRO", "Broadgate, Ltd."},
1314 | {"BRY", "Byrd Industries"},
1315 | {"BTH", "Benthos, Inc."},
1316 | {"BTK", "Baltek Corporation"},
1317 | {"BTS", "Boat Sentry, Inc."},
1318 | {"BVE", "BV Engineering"},
1319 | {"BXA", "Bendix-Avalex, Inc."},
1320 | {"CAI", "Cambridge Aero Instruments"},
1321 | {"CAT", "Catel"},
1322 | {"CBN", "Cybernet Marine Products"},
1323 | {"CCA", "Copal Corporation of America"},
1324 | {"CCC", "Coastel Communications Company"},
1325 | {"CCL", "Coastal Climate Company"},
1326 | {"CCM", "Coastal Communications"},
1327 | {"CDC", "Cordic Company"},
1328 | {"CDI", "Chetco Digital Instruments"},
1329 | {"CDL", "Teledyne CDL (CDLTD), Inc."},
1330 | {"CDS", "Central Dimming Set (Reserved for Future Use)"},
1331 | {"CEC", "Ceco Communications, Inc."},
1332 | {"CEI", "Cambridge Engineering, Inc."},
1333 | {"CFS", "Carlisle and Finch Company"},
1334 | {"CHI", "Charles Industries, Ltd."},
1335 | {"CIN", "Canadian Automotive Instruments"},
1336 | {"CKM", "Cinkel Marine Electronics"},
1337 | {"CLR", "Colorlight AB"},
1338 | {"CMA", "Soc Nouvelle D'equip Calvados"},
1339 | {"CMC", "Coe Manufacturing Company"},
1340 | {"CME", "Cushman Electronics, Inc."},
1341 | {"CML", "CML Microsystems PLC"},
1342 | {"CMN", "ComNav Marine, Ltd."},
1343 | {"CMP", "C-MAP, s.r.l. (Italy)"},
1344 | {"CMS", "Coastal Marine Sales Company"},
1345 | {"CMV", "Coursemaster USA, Inc."},
1346 | {"CNI", "Continental Instruments"},
1347 | {"CNS", "CNS Systems AB (Sweden)"},
1348 | {"CNV", "Coastal Navigator"},
1349 | {"CNX", "Cynex Manufacturing Company"},
1350 | {"CPL", "Computrol, Inc."},
1351 | {"CPN", "CompuNav"},
1352 | {"CPS", "Columbus Positioning, Ltd."},
1353 | {"CPT", "CPT, Inc."},
1354 | {"CRE", "Crystal Electronics, Ltd."},
1355 | {"CRO", "The Caro Group"},
1356 | {"CRY", "Crystek Crystals Corporation"},
1357 | {"CSI", "Communication Systems International"},
1358 | {"CSM", "COMSAT Maritime Services"},
1359 | {"CSR", "CSR Stockholm"},
1360 | {"CSS", "CNS, Inc."},
1361 | {"CST", "CAST, Inc."},
1362 | {"CSV", "Combined Services"},
1363 | {"CTA", "Current Alternatives"},
1364 | {"CTB", "Cetec Benmar"},
1365 | {"CTC", "Cell-Tech Communications"},
1366 | {"CTE", "Castle Electronics"},
1367 | {"CTL", "C-Tech, Ltd."},
1368 | {"CTS", "C-Tech Systems"},
1369 | {"CUL", "Cyclic Procedure List (Reserved for Future Use)"},
1370 | {"CUS", "Customware"},
1371 | {"CWD", "Cubic Western Data"},
1372 | {"CWF", "Hamilton Jet"},
1373 | {"CWV", "Celwave RF, Inc."},
1374 | {"CYL", "Cyclic Procedure List (Reserved for Future Use)"},
1375 | {"CYZ", "CYZ, Inc."},
1376 | {"DAN", "Danelec Marine A/S (Denmark)"},
1377 | {"DAS", "Dassault Sercel Navigation-Positioning"},
1378 | {"DBM", "Deep Blue Marine"},
1379 | {"DCC", "Dolphin Components Corporation"},
1380 | {"DEB", "Debeg GmbH (Germany)"},
1381 | {"DEC", "Decca Division, Litton Marine Systems BV"},
1382 | {"DFI", "Defender Industries, Inc."},
1383 | {"DGC", "Digicourse, Inc."},
1384 | {"DGY", "Digital Yacht, Ltd."},
1385 | {"DGP", "Digpilot A/S (Norway)"},
1386 | {"DME", "Delorme"},
1387 | {"DMI", "Datamarine International"},
1388 | {"DNS", "Dornier System"},
1389 | {"DNT", "Del Norte Technology, Inc."},
1390 | {"DOI", "Digital Oceans, Inc."},
1391 | {"DPC", "Data Panel Corporation"},
1392 | {"DPS", "Danaplus, Inc."},
1393 | {"DRL", "RL Drake Company"},
1394 | {"DSC", "Dynascan Corporation"},
1395 | {"DTN", "Dytechna, Ltd."},
1396 | {"DYN", "Dynamote Corporation"},
1397 | {"DYT", "Dytek Laboratories, Inc."},
1398 | {"EAN", "EuroAvionics Navigation Systems GmbH (Germany)"},
1399 | {"EBC", "Emergency Beacon Corporation"},
1400 | {"ECI", "Enhanced Selective Calling Information (Reserved for Future Use)"},
1401 | {"ECR", "Escort, Inc."},
1402 | {"ECT", "Echotec, Inc."},
1403 | {"EDO", "EDO Corporation, Electroacoustics Division"},
1404 | {"EEL", "Electronica Eutimio Sl. (Spain)"},
1405 | {"EEV", "EEV, Inc."},
1406 | {"EFC", "Efcom Communication Systems"},
1407 | {"EKC", "Eastman Kodak"},
1408 | {"ELA", "Wartsila Elac Nautik GmbH (Germany)"},
1409 | {"ELD", "Electronic Devices, Inc."},
1410 | {"ELM", "ELMAN, s.r.l. (Italy)"},
1411 | {"EMC", "Electric Motion Company"},
1412 | {"EMK", "E-Marine Company, Ltd."},
1413 | {"EMR", "EMRI A/S (Denmark)"},
1414 | {"EMS", "Electro Marine Systems, Inc."},
1415 | {"ENA", "Energy Analysts, Inc."},
1416 | {"ENC", "Encron, Inc."},
1417 | {"EPM", "EPSCO Marine"},
1418 | {"EPT", "Eastprint, Inc."},
1419 | {"ERC", "The Ericsson Corporation"},
1420 | {"ERD", "eRide, Inc."},
1421 | {"ESA", "European Space Agency"},
1422 | {"ESC", "Electronics Emporium Division of ESC Products"},
1423 | {"ESY", "E-Systems ECI Division"},
1424 | {"FDN", "FluiDyne"},
1425 | {"FEC", "Furuno Electric Company"},
1426 | {"FHE", "Fish Hawk Electronics"},
1427 | {"FJN", "Jon Fluke Company"},
1428 | {"FLA", "Flarm Technology GmbH (Germany)"},
1429 | {"FLO", "Floscan, Inc."},
1430 | {"FMM", "First Mate Marine Autopilots"},
1431 | {"FMS", "Fugro Seastar A/S (MarineStar)"},
1432 | {"FNT", "Franklin Net and Twine, Ltd."},
1433 | {"FRC", "The Fredericks Company"},
1434 | {"FSS", "Frequency Selection (Reserved for Future Use)"},
1435 | {"FST", "Fastrax OY (Switzerland)"},
1436 | {"FTG", "Thomas G Faria Corporation"},
1437 | {"FTT", "FT-TEC"},
1438 | {"FUG", "Fugro Intersite BV (Netherlands)"},
1439 | {"FUJ", "Fujitsu Ten Corporation of America"},
1440 | {"FUR", "Furuno USA, Inc."},
1441 | {"FWG", "Forschungsbereich Wasserchall and Geophysik WTD 71 (German Armed Forces Research Institute) (Germany)"},
1442 | {"GAM", "GRE America, Inc."},
1443 | {"GCA", "Gulf Cellular Associates"},
1444 | {"GDC", "GNSS Differential Correction (Reserved for Future Use)"},
1445 | {"GEC", "GEC Plessey Semiconductors"},
1446 | {"GES", "Geostar Corporation"},
1447 | {"GFC", "Graphic Controls Corporation"},
1448 | {"GFV", "GFV Marine, Ltd."},
1449 | {"GIL", "Gill Instruments Limited"},
1450 | {"GIS", "Galax Integrated Systems"},
1451 | {"GNV", "Geonav International"},
1452 | {"GPI", "Global Positioning Instrument Corporation"},
1453 | {"GPP", "GEO++ GmbH (Germany)"},
1454 | {"GPR", "Global Positioning System Joint Program Office (Rockwell Collins)"},
1455 | {"GRF", "Grafinta (Spain)"},
1456 | {"GRM", "Garmin Corporation"},
1457 | {"GSC", "Gold Star Company, Ltd."},
1458 | {"GTI", "Genesis Technology International, Ltd."},
1459 | {"GTO", "GRO Electronics"},
1460 | {"GVE", "Guest Corporation"},
1461 | {"GVT", "Great Valley Technology"},
1462 | {"HAI", "Hydragraphic Associates, Ltd."},
1463 | {"HAL", "HAL Communications Corporation"},
1464 | {"HAR", "Harris Corporation"},
1465 | {"HHS", "Hydel Hellas Skaltsaris, Ltd. (Shanghai)"},
1466 | {"HIG", "Hy-Gain"},
1467 | {"HIL", "Philips Navigation A/S (Denmark)"},
1468 | {"HIT", "Hi-Tec"},
1469 | {"HMS", "Hyde Marine Systems, Inc."},
1470 | {"HOM", "Hoppe Marine GmbH (Germany)"},
1471 | {"HPK", "Hewlett-Packard"},
1472 | {"HRC", "Harco Manufacturing Company"},
1473 | {"HRM", "[Unnamed]"},
1474 | {"HRT", "Hart Systems, Inc."},
1475 | {"HTI", "Heart Interface, Inc."},
1476 | {"HUL", "Hull Electronics Company"},
1477 | {"HWM", "Honeywell Marine Systems"},
1478 | {"IBM", "IBM Microelectronics"},
1479 | {"ICO", "Icom of America, Inc."},
1480 | {"ICG", "Initiative Computing USA, Inc. / Initiative Computing AG"},
1481 | {"IDS", "ICAN Marine (Canada)"},
1482 | {"IFD", "International Fishing Devices"},
1483 | {"IFI", "Instruments for Industry"},
1484 | {"ILS", "Ideal Teknoloji Bilisim Cozumleri A/S (Turkey)"},
1485 | {"IME", "Imperial Marine Equipment"},
1486 | {"IMI", "International Marine Instruments"},
1487 | {"IMM", "ITT Mackay Marine"},
1488 | {"IMP", "Impulse Manufacturing, Inc."},
1489 | {"IMR", "Ideal Technologies, Inc."},
1490 | {"IMT", "International Marketing and Trading, Inc."},
1491 | {"INM", "Inmar Electronics and Sales"},
1492 | {"INT", "Intech, Inc."},
1493 | {"IRT", "Intera Technologies, Ltd."},
1494 | {"IST", "Innerspace Technology, Inc."},
1495 | {"ITM", "Intermarine Electronics, Inc."},
1496 | {"ITR", "Itera, Ltd."},
1497 | {"IWW", "Inland Waterways (Germany)"},
1498 | {"IXB", "iXblue"},
1499 | {"JAN", "Jan Crystals"},
1500 | {"JAS", "Jasco Research, Ltd."},
1501 | {"JFR", "Ray Jefferson"},
1502 | {"JLD", "Jargoon Limited"},
1503 | {"JMT", "Japan Marine Telecommunications"},
1504 | {"JPI", "JP Instruments"},
1505 | {"JRC", "Japan Radio Company, Ltd."},
1506 | {"JRI", "J-R Industries, Inc."},
1507 | {"JTC", "J-Tech Associates, Inc."},
1508 | {"JTR", "Jotron Radiosearch, Ltd."},
1509 | {"KBE", "KB Electronics, Ltd."},
1510 | {"KBM", "Kennebec Marine Company"},
1511 | {"KEL", "Knudsen Engineering, Ltd."},
1512 | {"KHU", "Kelvin Hughes, Ltd."},
1513 | {"KLA", "Klein Associates, Inc."},
1514 | {"KME", "Kyushu Matsushita Electric"},
1515 | {"KML", "Kongsberg Mesotech, Ltd. (Canada)"},
1516 | {"KMO", "Kongsberg Maritime A/S (Norway)"},
1517 | {"KMR", "King Marine Radio Corporation"},
1518 | {"KMS", "Kongsberg Maritime Subsea (Norway)"},
1519 | {"KNC", "Kongsberg Norcontrols (Norway)"},
1520 | {"KNG", "King Radio Corporation"},
1521 | {"KOD", "Koden Electronics Company, Ltd."},
1522 | {"KRA", "EDV Krajka (Germany)"},
1523 | {"KRP", "Krupp International, Inc."},
1524 | {"KST", "Kongsberg Seatex A/S (Norway)"},
1525 | {"KVH", "KVH Company"},
1526 | {"KYI", "Kyocera International, Inc."},
1527 | {"L3A", "L3 Communications Recorders Division"},
1528 | {"LAT", "Latitude Corporation"},
1529 | {"L3I", "L-3 Interstate Electronics Corporation"},
1530 | {"LCI", "Lasercraft, Inc."},
1531 | {"LEC", "Lorain Electronics Corporation"},
1532 | {"LEI", "Leica Geosystems Pty, Ltd."},
1533 | {"LIT", "Litton Laser Systems"},
1534 | {"LMM", "Lamarche Manufacturing Company"},
1535 | {"LRD", "Lorad"},
1536 | {"LSE", "Littlemore Scientific (ELSEC) Engineering"},
1537 | {"LSP", "Laser Plot, Inc."},
1538 | {"LST", "Lite Systems Engineering"},
1539 | {"LTH", "Lars Thrane A/S (Denmark)"},
1540 | {"LTF", "Littlefuse, Inc."},
1541 | {"LTI", "Laser Technology, Inc."},
1542 | {"LWR", "Lowrance Electronics Corporation"},
1543 | {"MCA", "Canadian Marconi Company"},
1544 | {"MCI", "Matsushita Communications (Japan)"},
1545 | {"MCL", "Micrologic, Inc."},
1546 | {"MDL", "Medallion Instruments, Inc."},
1547 | {"MDS", "Marine Data Systems"},
1548 | {"MEC", "Marine Engine Center, Inc."},
1549 | {"MEG", "Maritec Engineering GmbH (Germany)"},
1550 | {"MES", "Marine Electronics Services, Inc."},
1551 | {"MEW", "Matsushita Electric Works (Japan)"},
1552 | {"MFR", "Modern Products, Ltd."},
1553 | {"MFW", "Frank W. Murphy Manufacturing"},
1554 | {"MGN", "Magellen Systems Corporation"},
1555 | {"MGS", "MG Electronic Sales Corporation"},
1556 | {"MIE", "Mieco, Inc."},
1557 | {"MIK", "Mikrolab GmbH (Germany)"},
1558 | {"MIR", "Miros A/S (Norway)"},
1559 | {"MIM", "Marconi International Marine"},
1560 | {"MLE", "Martha Lake Electronics"},
1561 | {"MLN", "Matlin Company"},
1562 | {"MLP", "Marlin Products"},
1563 | {"MLT", "Miller Technologies"},
1564 | {"MMB", "Marsh-McBirney, Inc."},
1565 | {"MME", "Marks Marine Engineering"},
1566 | {"MMI", "Microwave Monolithics"},
1567 | {"MMM", "Madman Marine"},
1568 | {"MMP", "Metal Marine Pilot, Inc."},
1569 | {"MMS", "Mars Marine Systems"},
1570 | {"MMT", "Micro Modular Technologies"},
1571 | {"MNI", "Micro-Now Instrument Company"},
1572 | {"MNT", "Marine Technology"},
1573 | {"MNX", "Marinex"},
1574 | {"MOT", "Motorola Communications & Electronics"},
1575 | {"MPI", "Megapulse, Inc."},
1576 | {"MPN", "Memphis Net and Twine Company, Inc."},
1577 | {"MQS", "Marquis Industries, Inc."},
1578 | {"MRC", "Marinecomp, Inc."},
1579 | {"MRE", "Morad Electronics Corporation"},
1580 | {"MRP", "Mooring Products of New England"},
1581 | {"MRR", "II Morrow, Inc."},
1582 | {"MRS", "Marine Radio Service"},
1583 | {"MSB", "Mitsubishi Electric Company, Ltd."},
1584 | {"MSE", "Master Electronics"},
1585 | {"MSF", "Microsoft Corporation"},
1586 | {"MSM", "Master Mariner, Inc."},
1587 | {"MST", "Mesotech Systems, Ltd."},
1588 | {"MTA", "Marine Technical Associates"},
1589 | {"MTD", "Maritel Data Services"},
1590 | {"MTG", "Marine Technical Assistance Group"},
1591 | {"MTI", "Mobile Telesystems, Inc."},
1592 | {"MTK", "Martech, Inc."},
1593 | {"MTL", "Marine Technologies, LLC"},
1594 | {"MTR", "The MITRE Corporation"},
1595 | {"MTS", "Mets, Inc."},
1596 | {"MUR", "Murata Erie North America"},
1597 | {"MVX", "Magnavox Advanced Products and Systems Company"},
1598 | {"MXS", "Maxsea International"},
1599 | {"MXX", "Maxxima Marine"},
1600 | {"MYS", "Marine Electronics Company (South Korea)"},
1601 | {"NAG", "Noris Automation GmbH (Germany)"},
1602 | {"NAT", "Nautech, Ltd."},
1603 | {"NAU", "Nauticast (a.k.a. Nauticall)"},
1604 | {"NAV", "Navtec, Inc."},
1605 | {"NCG", "Navcert, GmbH (Germany)"},
1606 | {"NCT", "Navcom Technology, Inc."},
1607 | {"NEC", "NEC Corporation"},
1608 | {"NEF", "New England Fishing Gear"},
1609 | {"NGC", "Northrop Grumman Maritime Systems"},
1610 | {"NGS", "Navigation Sciences, Inc."},
1611 | {"NIX", "L-3 Nautronix"},
1612 | {"NLS", "Navigation Light Status (Reserved for Future Use)"},
1613 | {"NMR", "Newmar"},
1614 | {"NMX", "Nanometrics"},
1615 | {"NOM", "Nav-Com, Inc."},
1616 | {"NOR", "Nortech Surveys (Canada)"},
1617 | {"NOS", "Northern Solutions A/S (Norway)"},
1618 | {"NOV", "NovAtel Communications, Ltd."},
1619 | {"NSI", "Noregon Systems, Inc."},
1620 | {"NSL", "Navitron Systems, Ltd."},
1621 | {"NSM", "Northstar Marine"},
1622 | {"NTI", "Northstar Technologies, Inc."},
1623 | {"NTK", "Novatech Designs, Ltd."},
1624 | {"NTS", "Navtech Systems"},
1625 | {"NUT", "Nautitech Pty, Ltd."},
1626 | {"NVC", "Navico"},
1627 | {"NVG", "NVS Technologies AG (Switzerland)"},
1628 | {"NVL", "Navelec Marine Systems Sl. (Spain)"},
1629 | {"NVO", "Navionics, s.p.a. (Italy)"},
1630 | {"NVS", "Navstar"},
1631 | {"NVT", "Novariant, Inc."},
1632 | {"NWC", "Naval Warfare Center"},
1633 | {"OAR", "On-Line Applications Research (OAR) Corporation"},
1634 | {"OBS", "Observator Instruments"},
1635 | {"OCC", "Occupation Control (Reserved for Future Use)"},
1636 | {"ODE", "Ocean Data Equipment Corporation"},
1637 | {"ODN", "Odin Electronics, Inc."},
1638 | {"OHB", "OHB Systems"},
1639 | {"OIN", "Ocean Instruments, Inc."},
1640 | {"OKI", "Oki Electric Industry Company, Ltd."},
1641 | {"OLY", "Navstard, Ltd. (Polytechnic Electronics)"},
1642 | {"OMN", "Omnetics Corporation"},
1643 | {"OMT", "Omnitech A/S (Norway)"},
1644 | {"ONI", "Omskiy Nauchno Issledovatelskiy Institut Priborostroeniya (Russia)"},
1645 | {"ORB", "Orbcomm"},
1646 | {"ORE", "Ocean Research"},
1647 | {"OSG", "Ocean Signal, Ltd."},
1648 | {"OSI", "OSI Maritime Systems (was Offshore Systems International)"},
1649 | {"OSL", "OSI Maritime Systems (was Offshore Systems, Ltd.)"},
1650 | {"OSS", "Ocean Solution Systems"},
1651 | {"OTK", "Ocean Technology"},
1652 | {"PCE", "Pace"},
1653 | {"PCM", "P-Sea Marine Systems"},
1654 | {"PDC", "Pan Delta Controls, Ltd."},
1655 | {"PDM", "Prodelco Marine Systems"},
1656 | {"PLA", "Plath C Division of Litton Industries"},
1657 | {"PLI", "Pilot Instruments"},
1658 | {"PMI", "Pernicka Marine Instruments"},
1659 | {"PMP", "Pacific Marine Products"},
1660 | {"PNI", "PNI Sensors, Inc."},
1661 | {"PNL", "Points North, Ltd."},
1662 | {"POM", "POMS Engineering"},
1663 | {"PPL", "Pamarine Private, Ltd."},
1664 | {"PRK", "Perko, Inc."},
1665 | {"PSM", "Pearce-Simpson, Inc."},
1666 | {"PST", "Pointstar A/S (Denmark)"},
1667 | {"PTC", "Petro-Com"},
1668 | {"PTG", "PTI/Guest"},
1669 | {"PTH", "Pathcom, Inc."},
1670 | {"PVS", "Planevision Systems"},
1671 | {"QNQ", "QinetiQ (United Kingdom)"},
1672 | {"QRC", "QinetiQ (United Kingdom)"},
1673 | {"QWE", "Qwerty Elektronik AB (Sweden)"},
1674 | {"QZM", "[Unnamed]"},
1675 | {"Q2N", "QQN Navigation ABS"},
1676 | {"RAC", "Racal Marine, Inc."},
1677 | {"RAE", "RCA Astro-Electronics"},
1678 | {"RAF", "Robins Air Force (USAF)"},
1679 | {"RAK", "Rockson Automation Kiel"},
1680 | {"RAY", "Raytheon Marine Company"},
1681 | {"RCA", "RCA Service Company"},
1682 | {"RCH", "Roach Engineering"},
1683 | {"RCI", "Rochester Instruments, Inc."},
1684 | {"RCQ", "QinetiQ (United Kingdom)"},
1685 | {"RDC", "U.S. Coast Guard Research & Development Center"},
1686 | {"RDI", "Radar Devices"},
1687 | {"RDM", "Ray-Dar Manufacturing Company"},
1688 | {"REC", "Ross Engineering Company"},
1689 | {"RFP", "Rolfite Products, Inc."},
1690 | {"RGC", "RCA Global Communications"},
1691 | {"RGL", "Riegl Laser Measurement Systems"},
1692 | {"RGY", "Regency Electronics, Inc."},
1693 | {"RHO", "Rhotheta Elektronik GmbH (Germany)"},
1694 | {"RHM", "RH Marine"},
1695 | {"RLK", "Reelektronika NL (Netherlands)"},
1696 | {"RME", "Racal Marine Electronics"},
1697 | {"RMR", "RCA Missile and Radar"},
1698 | {"RSL", "Ross Laboratories, Inc."},
1699 | {"RSM", "Robertson-Shipmate USA"},
1700 | {"RTH", "Parthus"},
1701 | {"RTN", "Robertson Tritech Nyaskaien (Norway)"},
1702 | {"RWC", "Rockwell Collins"},
1703 | {"RWI", "Rockwell International"},
1704 | {"SAA", "Satronika Sl. (Spain)"},
1705 | {"SAB", "VDE Satellite Selective Addressed Binary and Safety Related Message (Reserved for Future Use)"},
1706 | {"SAE", "STN Atlas Elektronik GmbH (Germany)"},
1707 | {"SAF", "Safemine"},
1708 | {"SAI", "SAIT, Inc."},
1709 | {"SAJ", "SAJ Instrument AB (Finland)"},
1710 | {"SAM", "SAM Electronics GmbH (Germany)"},
1711 | {"SAL", "Consilium Marine AB (Sweden)"},
1712 | {"SAP", "Systems Engineering & Assessment, Ltd."},
1713 | {"SAT", "Satloc"},
1714 | {"SBB", "VDE Satellite Broadcast Binary Message (Reserved for Future Use)"},
1715 | {"SBG", "SBG Systems"},
1716 | {"SBR", "Sea-Bird Electronics, Inc."},
1717 | {"SCL", "Sokkia Company, Ltd."},
1718 | {"SCM", "Scandinavian Microsystems A/S (Norway)"},
1719 | {"SCO", "Simoco Telecommunications, Ltd."},
1720 | {"SCR", "Signalcrafters, Inc."},
1721 | {"SDM", "VDE Satellite VHF Data-Link Message (Reserved for Future Use)"},
1722 | {"SDN", "Sapien Design"},
1723 | {"SDO", "VDE Satellite VHF Data-Link Own-Vessel Report (Reserved for Future Use)"},
1724 | {"SEA", "Sea, Inc."},
1725 | {"SEC", "Sercel Electronics of Canada"},
1726 | {"SEE", "Seetrac (a.k.a. Global Marine Tracking)"},
1727 | {"SEL", "Selection Report (Reserved for Future Use)"},
1728 | {"SEM", "Semtech, Ltd."},
1729 | {"SEP", "Steel and Engine Products"},
1730 | {"SER", "Sercel France"},
1731 | {"SFN", "Seafarer Navigation International"},
1732 | {"SGB", "VDE Satellite Geographical Addressed Binary and Safety Message (Reserved for Future Use)"},
1733 | {"SGC", "SGC, Inc."},
1734 | {"SGN", "Signav"},
1735 | {"SHI", "Shine Micro, Inc."},
1736 | {"SIG", "Signet, Inc."},
1737 | {"SIM", "Simrad, Inc."},
1738 | {"SKA", "Skantek Corporation"},
1739 | {"SKP", "Skipper Electronics A/S (Norway)"},
1740 | {"SLI", "Starlink, Inc."},
1741 | {"SLM", "Steering Location Mode (Reserved for Future Use)"},
1742 | {"SMC", "Solis Marine Consultants"},
1743 | {"SMD", "ShipModul Customware (Netherlands)"},
1744 | {"SME", "Shakespeare Marine Electronics"},
1745 | {"SMF", "Seattle Marine and Fishing Supply Company"},
1746 | {"SMI", "Sperry Marine, Inc."},
1747 | {"SMK", "VDE Satellite Addressed and Broadcast Message Acknowledgement (Reserved for Future Use)"},
1748 | {"SML", "Simerl Instruments"},
1749 | {"SMT", "SRT Marine Technology, Ltd. (United Kingdom)"},
1750 | {"SMV", "SafetyNet Message Vessel (Reserved for Future Use)"},
1751 | {"SNP", "Science Applications International Corporation"},
1752 | {"SNV", "STARNAV Corporation (Canada)"},
1753 | {"SNY", "Sony Corporation - Mobile Electronics"},
1754 | {"SOM", "Sound Marine Electronics"},
1755 | {"SON", "Sonardyne International, Ltd. (United Kingdom)"},
1756 | {"SOV", "Sell Overseas America"},
1757 | {"SPL", "Spelmar"},
1758 | {"SPT", "Sound Powered Telephone"},
1759 | {"SRC", "Stellar Research Group"},
1760 | {"SRD", "SRD Labs"},
1761 | {"SRF", "SIRF Technology, Inc."},
1762 | {"SRP", "System Function ID Resolution Protocol (Reserved for Future Use)"},
1763 | {"SRS", "Scientific Radio Systems, Inc."},
1764 | {"SRT", "Standard Radio and Telefon AB (Sweden)"},
1765 | {"SRV", "(Reserved for Future Use)"},
1766 | {"SSA", "(Reserved for Future Use)"},
1767 | {"SSC", "Swedish Space Corporation"},
1768 | {"SSD", "Saab AB, Security & Defense Solutions, Command and Control Systems Division (Sweden)"},
1769 | {"SSE", "Seven Star Electronics"},
1770 | {"SSI", "Sea Scout Industries"},
1771 | {"SSN", "Septentrio"},
1772 | {"STC", "Standard Communications"},
1773 | {"STI", "Sea-Temp Instrument Corporation"},
1774 | {"STK", "Seatechnik, Ltd. (a.k.a. Trelleborg Marine Systems) (United Kingdom)"},
1775 | {"STL", "Streamline Technology, Ltd."},
1776 | {"STM", "SI-TEX Marine Electronics"},
1777 | {"STO", "Stowe Marine Electronics"},
1778 | {"STT", "Saab TransponderTech AB (Sweden)"},
1779 | {"SVY", "Savoy Electronics"},
1780 | {"SWI", "Swoffer Marine Instruments"},
1781 | {"SWT", "Swift Navigation, Inc."},
1782 | {"SYE", "Samyung ENC Company, Ltd. (South Korea)"},
1783 | {"SYN", "Synergy Systems, LLC"},
1784 | {"TAB", "VDE Terrestrial Selective Addressed Binary and Safety Related Message (Reserved for Future Use)"},
1785 | {"TBB", "Thompson Brothers Boat Manufacturing"},
1786 | {"TBM", "VDE Terrestrial Broadcast Binary Message (Reserved for Future Use)"},
1787 | {"TCN", "Trade Commission of Norway"},
1788 | {"TDI", "Teledyne RD Instruments, Inc."},
1789 | {"TDL", "Tideland Signal"},
1790 | {"TDM", "VDE Terrestrial VHF Data-Link Message (Reserved for Future Use)"},
1791 | {"TDO", "VDE Terrestrial VHF Data-Link Own-Vessel Report (Reserved for Future Use)"},
1792 | {"TEL", "Plessey Tellumat (South Africa)"},
1793 | {"TES", "Thales Electronic Systems GmbH (Germany)"},
1794 | {"TGB", "VDE Terrestrial Geographical Addressed Binary and Safety Message (Reserved for Future Use)"},
1795 | {"THR", "Thrane and Thrane A/A (Denmark)"},
1796 | {"TKI", "Tokyo Keiki, Inc. (Japan)"},
1797 | {"TLS", "Telesystems"},
1798 | {"TMK", "VDE Terrestrial Addressed and Broadcast Message Acknowledgement (Reserved for Future Use)"},
1799 | {"TMS", "Trelleborg Marine Systems"},
1800 | {"TMT", "Tamtech, Ltd."},
1801 | {"TNL", "Trimble Navigation, Inc."},
1802 | {"TOP", "Topcon Positioning Systems, Inc."},
1803 | {"TPL", "Totem Plus, Ltd."},
1804 | {"TRC", "Tracor, Inc."},
1805 | {"TRS", "Travroute Software"},
1806 | {"TSG", "(Reserved for Future Use)"},
1807 | {"TSI", "Techsonic Industries, Inc."},
1808 | {"TSS", "Teledyne TSS, Ltd. (United Kingdom)"},
1809 | {"TTK", "Talon Technology Corporation"},
1810 | {"TTS", "Transtector Systems, Inc."},
1811 | {"TYC", "Vincotech GmbH (formerly Tyco Electronics) (Germany)"},
1812 | {"TWC", "Transworld Communications"},
1813 | {"TWS", "Telit Location Solutions, a Division of Telit Wireless Solutions"},
1814 | {"TXI", "Texas Instruments, Inc."},
1815 | {"UBX", "u-blox AG (Switzerland)"},
1816 | {"UCG", "United States Coast Guard"},
1817 | {"UEL", "Ultra Electronics, Ltd."},
1818 | {"UME", "UMEC"},
1819 | {"UNF", "Uniforce Electronics Company"},
1820 | {"UNI", "Uniden Corporation of America"},
1821 | {"UNP", "Unipas, Inc."},
1822 | {"URS", "UrsaNav, Inc."},
1823 | {"VAN", "Vanner, Inc."},
1824 | {"VAR", "Varian Eimac Associates"},
1825 | {"VBC", "Docking Speed Log (Reserved for Future Use)"},
1826 | {"VCM", "Videocom"},
1827 | {"VDB", "Bertold Vandenbergh"},
1828 | {"VEA", "Vard Electro A/S (Norway)"},
1829 | {"VEC", "Vectron International"},
1830 | {"VEX", "Vexilar"},
1831 | {"VIS", "Vessel Information Systems"},
1832 | {"VMR", "Vast Marketing Corporation"},
1833 | {"VSP", "Vesper Marine"},
1834 | {"VXS", "Vertex Standard"},
1835 | {"WAL", "Walport USA"},
1836 | {"WBE", "Wamblee, s.r.l. (Italy)"},
1837 | {"WBG", "Westberg Manufacturing"},
1838 | {"WBR", "Wesbar Corporation"},
1839 | {"WEC", "Westinghouse Electric Corporation"},
1840 | {"WEI", "Weidmueller Interface GmbH (Germany)"},
1841 | {"WCI", "Wi-Sys Communications"},
1842 | {"WDC", "Weatherdock Corporation"},
1843 | {"WHA", "W-H Autopilots, Inc."},
1844 | {"WMM", "Wait Manufacturing and Marine Sales Company"},
1845 | {"WMR", "Wesmar Electronics"},
1846 | {"WNG", "Winegard Company"},
1847 | {"WOE", "Woosung Engineering Company, Ltd. (South Korea)"},
1848 | {"WSE", "Wilson Electronics Corporation"},
1849 | {"WST", "West Electronics, Ltd."},
1850 | {"WTC", "Watercom"},
1851 | {"XEL", "3XEL Electronics and Navigation Systems, s.r.l. (Italy)"},
1852 | {"YAS", "Yaesu Electronics (Japan)"},
1853 | {"YDK", "Yokogawa Denshikiki Company, Ltd. (Japan)"},
1854 | {"YSH", "Standard Horizon Yaesu"},
1855 | {"ZNS", "Zinnos, Inc. (South Korea)"},
1856 | {NULL((void*)0), NULL((void*)0)}};
1857 |
1858 | // List of GPS Quality Indicator (Source: NMEA Revealed by Eric S. Raymond, https://gpsd.gitlab.io/gpsd/NMEA.html, retrieved 2023-01-26)
1859 | static const string_string known_gps_quality_indicators[] = {
1860 | {"0", "Fix not available"},
1861 | {"1", "GPS fix"},
1862 | {"2", "Differential GPS fix"},
1863 | {"3", "PPS fix"},
1864 | {"4", "Real Time Kinematic"},
1865 | {"5", "Float Real Time Kinematic"},
1866 | {"6", "Estimated (dead reckoning)"},
1867 | {"7", "Manual input mode"},
1868 | {"8", "Simulation mode"},
1869 | {NULL((void*)0), NULL((void*)0)}};
1870 |
1871 | // List of status indicators (Source: NMEA Revealed by Eric S. Raymond, https://gpsd.gitlab.io/gpsd/NMEA.html, retrieved 2024-04-19)
1872 | static const string_string known_status_indicators[] = {
1873 | {"A", "Valid/Active"},
1874 | {"V", "Invalid/Void"},
1875 | {NULL((void*)0), NULL((void*)0)}};
1876 |
1877 | // List of FAA Mode Indicator (Source: NMEA Revealed by Eric S. Raymond, https://gpsd.gitlab.io/gpsd/NMEA.html, retrieved 2024-04-19)
1878 | static const string_string known_faa_mode_indicators[] = {
1879 | {"A", "Autonomous mode"},
1880 | {"C", "Quectel Querk, Caution"},
1881 | {"D", "Differential Mode"},
1882 | {"E", "Estimated (dead-reckoning) mode"},
1883 | {"F", "RTK Float mode"},
1884 | {"M", "Manual Input Mode"},
1885 | {"N", "Data Not Valid"},
1886 | {"P", "Precise"},
1887 | {"R", "RTK Integer mode"},
1888 | {"S", "Simulated Mode"},
1889 | {"U", "Quectel Querk, Unsafe"},
1890 | {NULL((void*)0), NULL((void*)0)}};
1891 |
1892 | static const value_string abk_ack_type[] = {
1893 | {'0', "Message (6 or 12) successfully received by addressed AIS unit"},
1894 | {'1', "Message (6 or 12) was broadcast, but no acknowledgement by addressed AIS unit"},
1895 | {'2', "Message could not be broadcast (i.e., quantity of encapsulated data exceeds five slots)"},
1896 | {'3', "Requested broadcast of message (8, 14, or 15) has been successfully completed"},
1897 | {'4', "Late reception of a message 7 or 13 acknowledgement that was addressed to this AIS unit (own-ship) and referenced a valid transaction"},
1898 | {0, NULL((void*)0)}};
1899 |
1900 | static const value_string abk_channel[] = {
1901 | {'A', "Channel A"},
1902 | {'B', "Channel B"},
1903 | {0, NULL((void*)0)}};
1904 |
1905 | static const value_string aca_chbw[] = {
1906 | {'0', "Bandwidth specified by channel number (see ITU-R M.1084, Annex 4)"},
1907 | {'1', "Bandwidth is 12.5 kHz"},
1908 | {0, NULL((void*)0)}};
1909 |
1910 | static const value_string aca_in_use[] = {
1911 | {'0', "Not in use"},
1912 | {'1', "In use"},
1913 | {0, NULL((void*)0)}};
1914 |
1915 | static const value_string aca_info_src[] = {
1916 | {'A', "ITU-R M.1371 Message 22: Channel Management addressed message"},
1917 | {'B', "ITU-R M.1371 Message 22: Channel Management broadcast geographical area message"},
1918 | {'C', "IEC 61162-1 AIS Channel Assignment sentence"},
1919 | {'D', "DSC Channel 70 Telecommand"},
1920 | {'M', "Operator Manual Input"},
1921 | {0, NULL((void*)0)}};
1922 |
1923 | static const value_string aca_power[] = {
1924 | {'0', "High Power"},
1925 | {'1', "Low Power"},
1926 | {0, NULL((void*)0)}};
1927 |
1928 | static const value_string aca_txrx_control[] = {
1929 | {'0', "Transmit on Channels A and B, Receive on Channels A and B"},
1930 | {'1', "Transmit on Channel A, Receive on Channels A and B"},
1931 | {'2', "Transmit on Channel B, Receive on Channels A and B"},
1932 | {'3', "Do not transmit, Receive on Channels A and B"},
1933 | {'4', "Do not transmit, Receive on Channel A"},
1934 | {'5', "Do not transmit, Receive on Channel B"},
1935 | {0, NULL((void*)0)}};
1936 |
1937 | static const value_string alarm_ack_state_vals[] = {
1938 | {'A', "Acknowledged"},
1939 | {'V', "Not Acknowledged"},
1940 | {'B', "Broadcast (Acknowledgement not applicable)"},
1941 | {'H', "Harbour Mode"},
1942 | {'O', "Override"},
1943 | {0, NULL((void*)0)}};
1944 |
1945 | static const value_string alarm_cond_state_vals[] = {
1946 | {'N', "Normal State"},
1947 | {'H', "Alarm State: Threshold Exceeded"},
1948 | {'J', "Alarm State: Extreme Threshold Exceeded"},
1949 | {'L', "Alarm State: Low Threshold Exceeded"},
1950 | {'K', "Alarm State: Extreme Low Threshold Exceeded (i.e., not reached)"},
1951 | {'X', "Other"},
1952 | {0, NULL((void*)0)}};
1953 |
1954 | static const value_string arrival_circle_status[] = {
1955 | {'A', "Arrival circle entered"},
1956 | {'V', "Arrival circle not entered"},
1957 | {0, NULL((void*)0)}};
1958 |
1959 | static const value_string auto_manual_vals[] = {
1960 | {'M', "Manual"},
1961 | {'A', "Automatic"},
1962 | {0, NULL((void*)0)}};
1963 |
1964 | static const value_string control_flag_vals[] = {
1965 | {'0', "AIS unit responds if AIS unit is within geographic rectangle provided and AIS unit hasn't responded to requesting MMSI within last 24 hours and MMSI destination field is NULL"},
1966 | {'1', "AIS unit responds if AIS unit is within geographic rectangle provided"},
1967 | {0, NULL((void*)0)}};
1968 |
1969 | static const value_string course_ref_vals[] = {
1970 | {'B', "Bottom tracking log"},
1971 | {'M', "Manually entered"},
1972 | {'W', "Water referenced"},
1973 | {'R', "Radar tracking (of fixed target)"},
1974 | {'P', "Positioning system ground reference"},
1975 | {0, NULL((void*)0)}};
1976 |
1977 | static const value_string data_status[] = {
1978 | {'A', "Data valid"},
1979 | {'V', "Data not valid"},
1980 | {0, NULL((void*)0)}};
1981 |
1982 | static const string_string datum_vals[] = {
1983 | {"W84", "WGS84"},
1984 | {"W72", "WGS72"},
1985 | {"S85", "SGS85"},
1986 | {"P90", "PE90"},
1987 | {"999", "User Defined"},
1988 | {NULL((void*)0), NULL((void*)0)}
1989 | };
1990 |
1991 | static const value_string dcn_data_basis[] = {
1992 | {'1', "Normal pattern"},
1993 | {'2', "Lane identification pattern"},
1994 | {'3', "Lane identification transmissions"},
1995 | {0, NULL((void*)0)}};
1996 |
1997 | static const value_string dimming_palette_preset_vals[] = {
1998 | {'D', "Daytime"},
1999 | {'K', "Dusk"},
2000 | {'N', "Nighttime"},
2001 | {'O', "Backlighting Off"},
2002 | {0, NULL((void*)0)}};
2003 |
2004 | static const value_string direction_reference[] = {
2005 | {'T', "True"},
2006 | {'R', "Relative"},
2007 | {0, NULL((void*)0)}};
2008 |
2009 | static const value_string display_rotation_vals[] = {
2010 | {'C', "Course-up, course-over-ground up, degrees True"},
2011 | {'H', "Head-up, ship's heading (centerline) 0 degrees up"},
2012 | {'N', "North-up, True North is 0 degrees up"},
2013 | {0, NULL((void*)0)}};
2014 |
2015 | static const value_string dma_setup_vals[] = {
2016 | {'0', "FATDMA"},
2017 | {'1', "RATDMA"},
2018 | {'2', "CSTDMA"},
2019 | {0, NULL((void*)0)}};
2020 |
2021 | static const string_string door_mon_sys_type_vals[] = {
2022 | {"WT", "Watertight Door"},
2023 | {"WS", "Semi-watertight Door (splash-tight)"},
2024 | {"FD", "Fire Door"},
2025 | {"HD", "Hull (shell) Door"},
2026 | {"OT", "Other"},
2027 | {NULL((void*)0), NULL((void*)0)}};
2028 |
2029 | static const value_string door_status_vals[] = {
2030 | {'O', "Open"},
2031 | {'C', "Closed"},
2032 | {'S', "Secured"},
2033 | {'F', "Free status (for watertight door)"},
2034 | {'X', "Fault (door status unknown)"},
2035 | {0, NULL((void*)0)}};
2036 |
2037 | static const value_string dor_msg_type_vals[] = {
2038 | {'S', "Status for section"},
2039 | {'E', "Status for single door"},
2040 | {'F', "Fault in system"},
2041 | {0, NULL((void*)0)}};
2042 |
2043 | static const value_string dsc_ack_vals[] = {
2044 | {'R', "Acknowledgement Request"},
2045 | {'B', "Acknowledgement"},
2046 | {'S', "Neither (end of sequence)"},
2047 | {0, NULL((void*)0)}};
2048 |
2049 | static const value_string dse_flag_vals[] = {
2050 | {'Q', "Query"},
2051 | {'R', "Reply"},
2052 | {'A', "Automatic"},
2053 | {0, NULL((void*)0)}};
2054 |
2055 | static const value_string dte_indicator_vals[] = {
2056 | {'0', "Keyboard and display are a standard configuration, and communication is supported"},
2057 | {'1', "Keyboard and display are either unknown or unable to support communication"},
2058 | {0, NULL((void*)0)}};
2059 |
2060 | static const value_string equipment_status_vals[] = {
2061 | {'A', "Normal operation"},
2062 | {'V', "Not normal operation"},
2063 | {0, NULL((void*)0)}};
2064 |
2065 | static const value_string etl_message_type_vals[] = {
2066 | {'O', "Order"},
2067 | {'A', "Answer-back"},
2068 | {0, NULL((void*)0)}};
2069 |
2070 | static const value_string fsi_mode_vals[] = {
2071 | {'d', "F3E/G3E simplex, telephone"},
2072 | {'e', "F3E/G3E duplex, telephone"},
2073 | {'m', "J3E, telephone"},
2074 | {'o', "H3E, telephone"},
2075 | {'q', "F1B/J2B FEC NBDP, Telex/teleprinter"},
2076 | {'s', "F1B/J2B ARQ NBDP, Telex/teleprinter"},
2077 | {'t', "F1B/J2B receive only, teleprinter/DSC"},
2078 | {'w', "F1B/J2B, teleprinter/DSC"},
2079 | {'x', "A1A Morse, tape recorder"},
2080 | {'{', "A1A Morse, Morse key/head set"},
2081 | {'|', "F1C/F2C/F3C, FAX-machine"},
2082 | {0, NULL((void*)0)}};
2083 |
2084 | static const value_string fsi_power_vals[] = {
2085 | {'0', "Standby"},
2086 | {'1', "Lowest"},
2087 | {'9', "Highest"},
2088 | {0, NULL((void*)0)}};
2089 |
2090 | static const value_string glc_sig_status[] = {
2091 | {'B', "Blink warning"},
2092 | {'C', "Cycle warning"},
2093 | {'S', "SNR warning"},
2094 | {'A', "Valid"},
2095 | {0, NULL((void*)0)}};
2096 |
2097 | static const value_string grs_mode_vals[] = {
2098 | {'0', "Residuals were used to calculate the position given in the matching GGA/GNS sentence"},
2099 | {'1', "Residuals were recomputed after the GGA/GNS position was computed"},
2100 | {0, NULL((void*)0)}};
2101 |
2102 | static const value_string gsa_fix_mode[] = {
2103 | {'1', "Fix not available"},
2104 | {'2', "2D"},
2105 | {'3', "3D"},
2106 | {0, NULL((void*)0)}};
2107 |
2108 | static const value_string gsa_op_mode[] = {
2109 | {'M', "Manual, forced to operate in 2D or 3D mode"},
2110 | {'A', "Automatic, allowed to automatically switch 2D/3D"},
2111 | {0, NULL((void*)0)}};
2112 |
2113 | static const value_string heading_monitor_sensor_type[] = {
2114 | {'T', "True"},
2115 | {'M', "Magnetic"},
2116 | {0, NULL((void*)0)}};
2117 |
2118 | static const value_string heading_monitor_sensor_vals[] = {
2119 | {'A', "Data valid"},
2120 | {'V', "Data not valid"},
2121 | {0, NULL((void*)0)}};
2122 |
2123 | static const value_string heading_reference[] = {
2124 | {'T', "True"},
2125 | {'M', "Magnetic"},
2126 | {0, NULL((void*)0)}};
2127 |
2128 | static const value_string indicators_for_engine_telegraph[] = {
2129 | {0, "Stop Engine"},
2130 | {1, "[AH] Dead Slow"},
2131 | {2, "[AH] Slow"},
2132 | {3, "[AH] Half"},
2133 | {4, "[AH] Full"},
2134 | {5, "[AH] Navigation Full"},
2135 | {11, "[AS] Dead Slow"},
2136 | {12, "[AS] Slow"},
2137 | {13, "[AS] Half"},
2138 | {14, "[AS] Full"},
2139 | {15, "[AS] Crash Astern"},
2140 | {0, NULL((void*)0)}};
2141 |
2142 | static const value_string indicators_for_sub_telegraph[] = {
2143 | {20, "S/B (Stand-by Engine)"},
2144 | {30, "F/A (Full Away - Navigation Full"},
2145 | {40, "F/E (Finish with Engine)"},
2146 | {0, NULL((void*)0)}};
2147 |
2148 | static const value_string loranc_blink_snr_warning_vals[] = {
2149 | {'A', "Data valid"},
2150 | {'V', "Loran-C Blink, SNR, or General warning"},
2151 | {0, NULL((void*)0)}};
2152 |
2153 | static const value_string loranc_cycle_lock_warning_vals[] = {
2154 | {'A', "Data valid or not used"},
2155 | {'V', "Loran-C Cycle Lock warning"},
2156 | {0, NULL((void*)0)}};
2157 |
2158 | static const value_string lrf_func_rep_vals[] = {
2159 | {'2', "Information available and provided in the following LR1, LR2, or LR3 sentence"},
2160 | {'3', "Information not available from the IAS unit"},
2161 | {'4', "Information is available but not provided (i.e., restricted access determined by ship's master)"},
2162 | {0, NULL((void*)0)}};
2163 |
2164 | static const value_string lrf_func_req_vals[] = {
2165 | {'A', "Ship's: name, call sign, and IMO number"},
2166 | {'B', "Date and time of message composition"},
2167 | {'C', "Position"},
2168 | {'E', "Course over ground"},
2169 | {'F', "Speed over ground"},
2170 | {'I', "Destination and Estimated Time of Arrival (ETA)"},
2171 | {'O', "Draught"},
2172 | {'P', "Ship / Cargo"},
2173 | {'U', "Ship's: length, breadth, type"},
2174 | {'W', "Persons on board"},
2175 | {0, NULL((void*)0)}};
2176 |
2177 | static const value_string mode_indicator[] = {
2178 | {'A', "Autonomous mode"},
2179 | {'D', "Differential mode"},
2180 | {'E', "Estimated (dead reckoning) mode"},
2181 | {'M', "Manual input mode"},
2182 | {'S', "Simulator mode"},
2183 | {'N', "Data not valid"},
2184 | {0, NULL((void*)0)}};
2185 |
2186 | static const value_string mwv_reference[] = {
2187 | {'R', "Relative"},
2188 | {'T', "Theoretical"},
2189 | {0, NULL((void*)0)}};
2190 |
2191 | /* Navigational Status per ITU-R M.1371 Message 1, Navigational Status parameter */
2192 | static const string_string nav_status_vals[] = {
2193 | {"0", "Under way using engine"},
2194 | {"1", "At anchor"},
2195 | {"2", "Not under command"},
2196 | {"3", "Restricted maneuverability"},
2197 | {"4", "Constrained by draught"},
2198 | {"5", "Moored"},
2199 | {"6", "Aground"},
2200 | {"7", "Engaged in fishing"},
2201 | {"8", "Under way sailing"},
2202 | {"9", "Reserved for High Speed Craft (HSC)"},
2203 | {"10", "Reserved for Wing in Ground (WIG)"},
2204 | {"11", "Reserved for Future Use"},
2205 | {"12", "Reserved for Future Use"},
2206 | {"13", "Reserved for Future Use"},
2207 | {"14", "Reserved for Future Use"},
2208 | {"15", "Default"},
2209 | {NULL((void*)0), NULL((void*)0)}};
2210 |
2211 | static const value_string navigation_data_status[] = {
2212 | {'A', "Data valid"},
2213 | {'V', "Navigation receiver warning"},
2214 | {0, NULL((void*)0)}};
2215 |
2216 | static const value_string oplocation_indicator_vals[] = {
2217 | {'B', "Bridge"},
2218 | {'P', "Port Wing"},
2219 | {'S', "Starboard Wing"},
2220 | {'C', "Engine Control Room"},
2221 | {'E', "Engine Side / Local"},
2222 | {'W', "Wing (port or starboard not specified)"},
2223 | {0, NULL((void*)0)}};
2224 |
2225 | static const value_string override_vals[] = {
2226 | {'A', "In use"},
2227 | {'V', "Not in use"},
2228 | {0, NULL((void*)0)}};
2229 |
2230 | static const value_string perpendicular_pass_status[] = {
2231 | {'A', "Perpendicular passed at waypoint"},
2232 | {'V', "Perpendicular not passed"},
2233 | {0, NULL((void*)0)}};
2234 |
2235 | static const value_string point_type_vals[] = {
2236 | {'C', "Collision"},
2237 | {'T', "Turning point"},
2238 | {'R', "Reference (general)"},
2239 | {'W', "Wheelover"},
2240 | {0, NULL((void*)0)}};
2241 |
2242 | static const value_string r_oh_ot_status[] = {
2243 | {'A', "Within limits"},
2244 | {'V', "Limit reached or exceeded"},
2245 | {0, NULL((void*)0)}};
2246 |
2247 | static const value_string ref_target_vals[] = {
2248 | {'R', "Target is a reference to determine own-ship position/velocity"},
2249 | {0, NULL((void*)0)}};
2250 |
2251 | static const value_string revolutions_number_vals[] = {
2252 | {'0', "Single or on centerline"},
2253 | {'1', "Starboard"},
2254 | {'2', "Port"},
2255 | {0, NULL((void*)0)}};
2256 |
2257 | static const value_string revolutions_source_vals[] = {
2258 | {'S', "Shaft"},
2259 | {'E', "Engine"},
2260 | {0, NULL((void*)0)}};
2261 |
2262 | static const value_string rma_data_status[] = {
2263 | {'A', "Data valid"},
2264 | {'V', "Blink, Cycle, or SNR warning"},
2265 | {0, NULL((void*)0)}};
2266 |
2267 | static const value_string rudder_dir_vals[] = {
2268 | {'L', "Port"},
2269 | {'R', "Starboard"},
2270 | {0, NULL((void*)0)}};
2271 |
2272 | static const range_string sat_prn_type[] = {
2273 | {1, 32, "GPS satellite"},
2274 | {33, 64, "WAAS/SBAS satellite"},
2275 | {65, 88, "GLONASS satellite"},
2276 | {89, 96, "GLONASS on-orbit spare"},
2277 | {193, 197, "QZSS satellite"},
2278 | {0, 0, NULL((void*)0)}};
2279 |
2280 | static const value_string satellite_mode_vals[] = {
2281 | {'N', "No fix. Satellite system not used in position fix, or fix not valid"},
2282 | {'A', "Autonomous. Satellite system used in non-differential mode in position fix"},
2283 | {'D', "Differential. Satellite system used in differential mode in position fix"},
2284 | {'P', "Precise. Satellite system used in precision mode"},
2285 | {'R', "Real Time Kinematic (RTK). Satellite system used in RTK mode with fixed integers"},
2286 | {'F', "Float RTK. Satellite system used in RTK mode with floating integers"},
2287 | {'E', "Estimated (dead reckoning) mode"},
2288 | {'M', "Manual input mode"},
2289 | {'S', "Simulator mode"},
2290 | {0, NULL((void*)0)}};
2291 |
2292 | static const value_string sentence_mode_vals[] = {
2293 | {'c', "Complete route, all waypoints"},
2294 | {'w', "Working route, 1st listed waypoint is 'FROM', 2nd is 'TO', remaining are the route"},
2295 | {0, NULL((void*)0)}};
2296 |
2297 | static const value_string sentence_status_vals[] = {
2298 | {'R', "Sentence is a status report of current settings (use for a reply to a query)"},
2299 | {'C', "Sentence is a configuration command to change settings"},
2300 | {0, NULL((void*)0)}};
2301 |
2302 | static const value_string sfi_operation_mode_vals[] = {
2303 | {'d', "F3E/G3E simplex, telephone"},
2304 | {'e', "F3E/G3E duplex, telephone"},
2305 | {'m', "J3E, telephone"},
2306 | {'o', "H3E, telephone"},
2307 | {'q', "F1B/J2B FEC NBDP, telex/teleprinter"},
2308 | {'s', "F1B/J2B ARQ NBDP, telex/teleprinter"},
2309 | {'t', "F1B/J2B receive only, teleprinter/DSC"},
2310 | {'w', "F1B/J2B, teleprinter/DSC"},
2311 | {'x', "A1A Morse, tape recorder"},
2312 | {'{', "A1A Morse, Morse key/head set"},
2313 | {'|', "F1C/F2C/F3C, FAX-machine"},
2314 | {'\0', "No information"},
2315 | {0, NULL((void*)0)}};
2316 |
2317 | static const value_string speed_reference[] = {
2318 | {'B', "Bottom track"},
2319 | {'W', "Water track"},
2320 | {'P', "Positioning System"},
2321 | {0, NULL((void*)0)}};
2322 |
2323 | static const value_string speed_unit_vals[] = {
2324 | {'K', "Kilometers/hour"},
2325 | {'M', "Meters/sec"},
2326 | {'N', "Knots"},
2327 | {'S', "Statute Miles/hour"},
2328 | {0, NULL((void*)0)}};
2329 |
2330 | static const value_string steer_direction[] = {
2331 | {'L', "Left"},
2332 | {'R', "Right"},
2333 | {0, NULL((void*)0)}};
2334 |
2335 | static const value_string steering_mode_vals[] = {
2336 | {'M', "Manual steering. The main steering system is in use"},
2337 | {'S', "Standalone (heading control). System works as a standalone heading controller"},
2338 | {'H', "Heading control. Input of commanded heading to steer is from external device"},
2339 | {'T', "Track control. System works as track controller by correcting course received in fielded 'Commanded Track'"},
2340 | {'R', "Rudder control. Input of commanded rudder angle and direction from external device"},
2341 | {0, NULL((void*)0)}};
2342 |
2343 | /* IEC 61126-1 Ed. 4 Annex D Subsystem Tables */
2344 | static const string_string subsystem_equipment_vals[] = {
2345 | {"AL", "Group Alarm System"},
2346 | {"AR", "Air"},
2347 | {"BD", "Boiler Drum"},
2348 | {"BL", "Boiler"},
2349 | {"BN", "Burner"},
2350 | {"CA", "Compressed Air"},
2351 | {"CB", "Combustion"},
2352 | {"CD", "Condensate"},
2353 | {"CH", "Chemical Cargo System"},
2354 | {"CL", "Control System (Actuator or Drive Unit for Steering Signal)"},
2355 | {"CM", "Cooling Medium"},
2356 | {"CN", "Combustion"},
2357 | {"CO", "Condensate"},
2358 | {"EG", "Engine"},
2359 | {"EH", "Exhaust Gas"},
2360 | {"EP", "Electric Power Generator Plant"},
2361 | {"FO", "[System=AM] Fuel Oil System / [System=GT/PB/AB/AD/AG] Fuel Oil"},
2362 | {"FV", "Fuel Valve Coolant"},
2363 | {"FW", "Feed Water"},
2364 | /* Duplicate character mapping from the table
2365 | {"FW", "Cylinder Fresh Water Cooling"},*/
2366 | {"HT", "Heat Detection Type"},
2367 | {"LC", "Lubricating Oil Cooling System"},
2368 | {"LG", "LPG/LNG Cargo System"},
2369 | {"LO", "Lubricating/Lubrication Oil"},
2370 | {"MN", "Monitoring System"},
2371 | {"MS", "Propulsion Machinery Space"},
2372 | {"OL", "Inert Gas System"},
2373 | {"OT", "Others"},
2374 | {"PA", "Propulsion Motor - AC"},
2375 | {"PC", "Propulsion Control"},
2376 | {"PD", "Propulsion Motor - DC"},
2377 | {"PG", "Propulsion Generator"},
2378 | {"PS", "[System=DE] Piston Cooling / [System=EP] Propulsion SCR"},
2379 | {"PU", "Power Unit"},
2380 | {"PW", "Power"},
2381 | {"RC", "Remote Control System"},
2382 | {"RM", "High-Voltage Rotating Machine"},
2383 | {"RT", "Rotor"},
2384 | {"SA", "[System=AG/GT] Starting / [System=DE] Scavenge Air"},
2385 | {"SC", "Seawater Cooling"},
2386 | {"SM", "[System=FR] Smoke Detection Type / [System=AB/PB/ST] Steam"},
2387 | {"SP", "System Power Source"},
2388 | {"ST", "[System=AM] Stern Tube Lub. Oil / [System=AD] Starting Medium / [System=AT] Steam"},
2389 | {"SW", "Seawater"},
2390 | {"TB", "Turbine"},
2391 | {"TC", "Turbo-Charger"},
2392 | {NULL((void*)0), NULL((void*)0)}};
2393 |
2394 | /* IEC 61126-1 Ed. 4 Annex D System Tables */
2395 | static const string_string system_equipment_vals[] = {
2396 | {"AB", "Auxiliary Boiler"},
2397 | {"AD", "Auxiliary Diesel Engine"},
2398 | {"AG", "Auxiliary Gas Turbine"},
2399 | {"AM", "Auxiliary Machinery"},
2400 | {"AT", "Auxiliary Turbine"},
2401 | {"CG", "Cargo Control Plant"},
2402 | {"DE", "Diesel Plant"},
2403 | {"EP", "Electric Propulsion Plant"},
2404 | {"FD", "Fire Door Controller"},
2405 | {"FR", "Fire Detection System"},
2406 | {"GT", "Gas Turbine Plant"},
2407 | {"HD", "Hull (shell) Door Controller"},
2408 | {"OT", "Other's System"},
2409 | {"PB", "Propulsion Boiler"},
2410 | {"PC", "Propulsion Control"},
2411 | {"SG", "Steering Gear"},
2412 | {"ST", "Steam Turbines Plant"},
2413 | {"WD", "Watertight Door Controller"},
2414 | {NULL((void*)0), NULL((void*)0)}};
2415 |
2416 | static const value_string target_acq_vals[] = {
2417 | {'A', "Auto"},
2418 | {'M', "Manual"},
2419 | {'R', "Reported"},
2420 | {0, NULL((void*)0)}};
2421 |
2422 | static const value_string tgt_status_vals[] = {
2423 | {'L', "Lost, tracked target has been lost"},
2424 | {'Q', "Query, target in the process of acquisition"},
2425 | {'T', "Tracking"},
2426 | {0, NULL((void*)0)}};
2427 |
2428 | static const value_string transducer_type_vals[] = {
2429 | {'C', "Temperature"},
2430 | {'A', "Angular displacement"},
2431 | {'D', "Linear displacement"},
2432 | {'F', "Frequency"},
2433 | {'N', "Force"},
2434 | {'P', "Pressure"},
2435 | {'R', "Flow rate"},
2436 | {'T', "Tachometer"},
2437 | {'H', "Humidity"},
2438 | {'V', "Volume"},
2439 | {'G', "Generic"},
2440 | {'I', "Current"},
2441 | {'U', "Voltage"},
2442 | {'S', "Switch or valve"},
2443 | {'L', "Salinity"},
2444 | {0, NULL((void*)0)}};
2445 |
2446 | static const value_string transducer_unit_vals[] = {
2447 | {'C', "Degrees Celsius"},
2448 | {'D', "Degrees"},
2449 | {'H', "Hertz"},
2450 | {'N', "Newton"},
2451 | {'B', "Bars"},
2452 | {'P', "Pascal (Pressure) or Percent (Humidity)"},
2453 | {'l', "Liters/second"},
2454 | {'R', "RPM"},
2455 | {'M', "Cubic meters"},
2456 | {'A', "Amperes"},
2457 | {'V', "Volts"},
2458 | {'S', "ppt"},
2459 | {0, NULL((void*)0)}};
2460 |
2461 | static const value_string turning_mode_vals[] = {
2462 | {'R', "Radius controlled"},
2463 | {'T', "Turn rate controlled"},
2464 | {'N', "Turn is not controlled"},
2465 | {0, NULL((void*)0)}};
2466 |
2467 | static const value_string warning_flag_vals[] = {
2468 | {'A', "Difference within set limit"},
2469 | {'V', "Difference exceeds set limit"},
2470 | {0, NULL((void*)0)}};
2471 |
2472 | static const value_string watertight_switch_setting_vals[] = {
2473 | {'O', "Harbor mode (allowed open)"},
2474 | {'C', "Sea mode (ordered closed)"},
2475 | {0, NULL((void*)0)}};
2476 |
2477 | static const value_string xte_unit_vals[] = {
2478 | {'K', "Kilometers"},
2479 | {'M', "Meters"},
2480 | {'N', "Nautical miles"},
2481 | {'S', "Statute miles"},
2482 | {0, NULL((void*)0)}};
2483 |
2484 | static uint8_t calculate_checksum(tvbuff_t *tvb, const int start, const int length)
2485 | {
2486 | uint8_t checksum = 0;
2487 | for (int i = start; i < start + length; i++)
2488 | {
2489 | checksum ^= tvb_get_uint8(tvb, i);
2490 | }
2491 | return checksum;
2492 | }
2493 |
2494 | static char *
2495 | decode_time(wmem_allocator_t *scope, const char *value)
2496 | {
2497 | size_t length = strlen(value);
2498 |
2499 | if (length < 4)
2500 | {
2501 | return wmem_strdup(scope, value);
2502 | }
2503 | return wmem_strdup_printf(scope, "%.2s:%.2s:%s",
2504 | value, value + 2, value + 4);
2505 | }
2506 |
2507 | static char *
2508 | decode_date(wmem_allocator_t *scope, const char *value)
2509 | {
2510 | static const char *months[] = {
2511 | "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
2512 | "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"
2513 | };
2514 | unsigned month;
2515 | unsigned year;
2516 |
2517 | if (strlen(value) < 6)
2518 | {
2519 | return wmem_strdup(scope, value);
2520 | }
2521 | month = (unsigned)(value[2] - '0') * 10 + (unsigned)(value[3] - '0');
2522 | if (month < 1 || month > G_N_ELEMENTS(months)(sizeof (months) / sizeof ((months)[0])))
2523 | {
2524 | return wmem_strdup(scope, value);
2525 | }
2526 | year = (unsigned)(value[4] - '0') * 10 + (unsigned)(value[5] - '0');
2527 | return wmem_strdup_printf(scope, "%.2s %s %s%.2s",
2528 | value, months[month - 1],
2529 | year >= 70 ? "19" : "20", value + 4);
2530 | }
2531 |
2532 | static bool_Bool
2533 | decode_latlong(const char *latlong, const char *direction, float *result)
2534 | {
2535 | if (latlong == NULL((void*)0) || latlong[0] == '\0' ||
2536 | direction == NULL((void*)0) || direction[0] == '\0')
2537 | {
2538 | return false0;
2539 | }
2540 |
2541 | double raw = g_ascii_strtod(latlong, NULL((void*)0));
2542 | double degrees = (int)(raw / 100.0);
2543 | double coordinate = degrees + (raw - degrees * 100.0) / 60.0;
2544 |
2545 | if (direction[0] == 'S' || direction[0] == 'W')
2546 | {
2547 | coordinate = -coordinate;
2548 | }
2549 | *result = (float)coordinate;
2550 | return true1;
2551 | }
2552 |
2553 | static char *
2554 | field_binding(wmem_allocator_t *scope, const char *value, const char *label)
2555 | {
2556 | return wmem_strdup_printf(scope, "%s %.1s", value, label);
2557 | }
2558 |
2559 | /* Find first occurrence of a field separator in tvbuff, starting at offset. Searches
2560 | * to end of tvbuff.
2561 | * Returns the offset of the found separator.
2562 | * If separator is not found, return the offset of end of tvbuff.
2563 | * If offset is out of bounds, return the offset of end of tvbuff.
2564 | **/
2565 | static unsigned
2566 | tvb_find_end_of_nmea0183_field(tvbuff_t *tvb, const unsigned offset)
2567 | {
2568 | if (tvb_captured_length_remaining(tvb, offset) == 0)
2569 | {
2570 | return tvb_captured_length(tvb);
2571 | }
2572 |
2573 | unsigned end_of_field_offset;
2574 | if (!tvb_find_uint8_remaining(tvb, offset, ',', &end_of_field_offset))
2575 | {
2576 | return tvb_captured_length(tvb);
2577 | }
2578 | return end_of_field_offset;
2579 | }
2580 |
2581 | /* Add a zero length item which indicates an expected but missing field */
2582 | static proto_item *
2583 | proto_tree_add_missing_field(proto_tree *tree, packet_info *pinfo, int hf, tvbuff_t *tvb,
2584 | const int offset)
2585 | {
2586 | proto_item *ti = NULL((void*)0);
2587 | ti = proto_tree_add_item(tree, hf, tvb, offset, 0, ENC_ASCII0x00000000);
2588 | proto_item_append_text(ti, "[missing]");
2589 | expert_add_info(pinfo, ti, &ei_nmea0183_field_missing);
2590 | return ti;
2591 | }
2592 |
2593 | /* Dissect a time field. The field is split into a tree with hour, minute and second elements.
2594 | * Returns length including separator
2595 | **/
2596 | static int
2597 | dissect_nmea0183_field_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
2598 | int hf_time, int hf_hour, int hf_minute, int hf_second, int ett_time)
2599 | {
2600 | if (offset > (int)tvb_captured_length(tvb))
2601 | {
2602 | proto_tree_add_missing_field(tree, pinfo, hf_time, tvb, tvb_captured_length(tvb));
2603 | return 0;
2604 | }
2605 |
2606 | proto_item *ti = NULL((void*)0);
2607 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
2608 | ti = proto_tree_add_item(tree, hf_time, tvb, offset, end_of_field_offset - offset, ENC_ASCII0x00000000);
2609 | if (end_of_field_offset - offset == 0)
2610 | {
2611 | proto_item_append_text(ti, ": [empty]");
2612 | }
2613 | else if (end_of_field_offset - offset >= 6)
2614 | {
2615 | const uint8_t *hour = NULL((void*)0);
2616 | const uint8_t *minute = NULL((void*)0);
2617 | const uint8_t *second = NULL((void*)0);
2618 | proto_tree *time_subtree = proto_item_add_subtree(ti, ett_time);
2619 |
2620 | proto_tree_add_item_ret_string(time_subtree, hf_hour,
2621 | tvb, offset, 2, ENC_ASCII0x00000000,
2622 | pinfo->pool, &hour);
2623 |
2624 | proto_tree_add_item_ret_string(time_subtree, hf_minute,
2625 | tvb, offset + 2, 2, ENC_ASCII0x00000000,
2626 | pinfo->pool, &minute);
2627 |
2628 | proto_tree_add_item_ret_string(time_subtree, hf_second,
2629 | tvb, offset + 4, end_of_field_offset - offset - 4,
2630 | ENC_ASCII0x00000000, pinfo->pool, &second);
2631 |
2632 | proto_item_append_text(ti, ": %s:%s:%s", hour, minute, second);
2633 | }
2634 | else
2635 | {
2636 | expert_add_info(pinfo, ti, &ei_nmea0183_field_time_too_short);
2637 | }
2638 | return end_of_field_offset - offset + 1;
2639 | }
2640 |
2641 | /* Dissect a single field containing a dimensionless value. Returns length including separator */
2642 | static int
2643 | dissect_nmea0183_field(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hf, const char *suffix, const string_string *str_str)
2644 | {
2645 | const uint8_t *field_str = NULL((void*)0);
2646 |
2647 | if (offset > (int)tvb_captured_length(tvb))
2648 | {
2649 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
2650 | return 0;
2651 | }
2652 |
2653 | proto_item *ti = NULL((void*)0);
2654 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
2655 | ti = proto_tree_add_item_ret_string(tree, hf, tvb, offset, end_of_field_offset - offset, ENC_ASCII0x00000000, pinfo->pool, &field_str);
2656 | if (end_of_field_offset - offset == 0)
2657 | {
2658 | proto_item_append_text(ti, "[empty]");
2659 | }
2660 | else if (suffix != NULL((void*)0))
2661 | {
2662 | proto_item_append_text(ti, " %s", suffix);
2663 | }
2664 | if ((str_str)&&(field_str)) {
2665 | proto_item_append_text(ti, " - %s", str_to_str_wmem(pinfo->pool, (const char *)field_str, str_str, " "));
2666 | }
2667 | return end_of_field_offset - offset + 1;
2668 | }
2669 |
2670 | /* Dissect a latitude/longitude direction field.
2671 | * Returns length including separator
2672 | **/
2673 | static int
2674 | dissect_nmea0183_field_latlong_direction(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
2675 | int offset, int hf,
2676 | wmem_allocator_t *scope, const uint8_t **retval)
2677 | {
2678 | if (offset > (int)tvb_captured_length(tvb))
2679 | {
2680 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
2681 | return 0;
2682 | }
2683 |
2684 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
2685 | proto_item *ti = proto_tree_add_item_ret_string(tree, hf,
2686 | tvb, offset, end_of_field_offset - offset, ENC_ASCII0x00000000,
2687 | scope, retval);
2688 | if (end_of_field_offset - offset == 0)
2689 | {
2690 | if (retval == NULL((void*)0))
2691 | {
2692 | proto_item_append_text(ti, "[empty]");
2693 | }
2694 | else
2695 | {
2696 | proto_item_append_text(ti, "[missing]");
2697 | expert_add_info(pinfo, ti, &ei_nmea0183_field_missing);
2698 | }
2699 | }
2700 | return end_of_field_offset - offset + 1;
2701 | }
2702 |
2703 | /* Dissect a latitude field + direction field. The fields are split into a tree with degree, minute and direction elements.
2704 | * Returns length including separator
2705 | **/
2706 | static int
2707 | dissect_nmea0183_field_latitude(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
2708 | int hf_latitude, int hf_degree, int hf_minute, int hf_direction, int ett_latitude)
2709 | {
2710 | if (offset > (int)tvb_captured_length(tvb))
2711 | {
2712 | proto_tree_add_missing_field(tree, pinfo, hf_latitude, tvb, tvb_captured_length(tvb));
2713 | return 0;
2714 | }
2715 |
2716 | proto_item *ti = NULL((void*)0);
2717 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
2718 | ti = proto_tree_add_item(tree, hf_latitude, tvb, offset, end_of_field_offset - offset, ENC_ASCII0x00000000);
2719 | if (end_of_field_offset - offset == 0)
2720 | {
2721 | proto_item_append_text(ti, ": [empty]");
2722 |
2723 | end_of_field_offset += dissect_nmea0183_field_latlong_direction(tvb, pinfo, tree, end_of_field_offset + 1, hf_direction, NULL((void*)0), NULL((void*)0));
2724 | }
2725 | else if (end_of_field_offset - offset >= 4)
2726 | {
2727 | const uint8_t *degree = NULL((void*)0);
2728 | const uint8_t *minute = NULL((void*)0);
2729 | const uint8_t *direction = NULL((void*)0);
2730 | proto_tree *latitude_subtree = proto_item_add_subtree(ti, ett_latitude);
2731 |
2732 | proto_tree_add_item_ret_string(latitude_subtree, hf_degree,
2733 | tvb, offset, 2,
2734 | ENC_ASCII0x00000000, pinfo->pool, &degree);
2735 |
2736 | proto_tree_add_item_ret_string(latitude_subtree, hf_minute,
2737 | tvb, offset + 2, end_of_field_offset - offset - 2,
2738 | ENC_ASCII0x00000000, pinfo->pool, &minute);
2739 |
2740 | end_of_field_offset += dissect_nmea0183_field_latlong_direction(tvb, pinfo, latitude_subtree, end_of_field_offset + 1, hf_direction, pinfo->pool, &direction);
2741 |
2742 | proto_item_append_text(ti, ": %s° %s' %s", degree, minute, direction);
2743 | }
2744 | else
2745 | {
2746 | expert_add_info(pinfo, ti, &ei_nmea0183_field_latitude_too_short);
2747 |
2748 | end_of_field_offset += dissect_nmea0183_field_latlong_direction(tvb, pinfo, tree, end_of_field_offset + 1, hf_direction, NULL((void*)0), NULL((void*)0));
2749 | }
2750 | return end_of_field_offset - offset + 1;
2751 | }
2752 |
2753 | /* Dissect a longitude field + direction field. The fields are split into a tree with degree, minute and direction elements.
2754 | * Returns length including separator
2755 | **/
2756 | static int
2757 | dissect_nmea0183_field_longitude(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
2758 | int hf_longitude, int hf_degree, int hf_minute, int hf_direction, int ett_latitude)
2759 | {
2760 | if (offset > (int)tvb_captured_length(tvb))
2761 | {
2762 | proto_tree_add_missing_field(tree, pinfo, hf_longitude, tvb, tvb_captured_length(tvb));
2763 | return 0;
2764 | }
2765 |
2766 | proto_item *ti = NULL((void*)0);
2767 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
2768 | ti = proto_tree_add_item(tree, hf_longitude, tvb, offset, end_of_field_offset - offset, ENC_ASCII0x00000000);
2769 | if (end_of_field_offset - offset == 0)
2770 | {
2771 | proto_item_append_text(ti, ": [empty]");
2772 |
2773 | end_of_field_offset += dissect_nmea0183_field_latlong_direction(tvb, pinfo, tree, end_of_field_offset + 1, hf_direction, NULL((void*)0), NULL((void*)0));
2774 | }
2775 | else if (end_of_field_offset - offset >= 5)
2776 | {
2777 | const uint8_t *degree = NULL((void*)0);
2778 | const uint8_t *minute = NULL((void*)0);
2779 | const uint8_t *direction = NULL((void*)0);
2780 | proto_tree *longitude_subtree = proto_item_add_subtree(ti, ett_latitude);
2781 |
2782 | proto_tree_add_item_ret_string(longitude_subtree, hf_degree,
2783 | tvb, offset, 3,
2784 | ENC_ASCII0x00000000, pinfo->pool, &degree);
2785 |
2786 | proto_tree_add_item_ret_string(longitude_subtree, hf_minute,
2787 | tvb, offset + 3, end_of_field_offset - offset - 3,
2788 | ENC_ASCII0x00000000, pinfo->pool, &minute);
2789 |
2790 | end_of_field_offset += dissect_nmea0183_field_latlong_direction(tvb, pinfo, longitude_subtree, end_of_field_offset + 1, hf_direction, pinfo->pool, &direction);
2791 |
2792 | proto_item_append_text(ti, ": %s° %s' %s", degree, minute, direction);
2793 | }
2794 | else
2795 | {
2796 | expert_add_info(pinfo, ti, &ei_nmea0183_field_longitude_too_short);
2797 |
2798 | end_of_field_offset += dissect_nmea0183_field_latlong_direction(tvb, pinfo, tree, end_of_field_offset + 1, hf_direction, NULL((void*)0), NULL((void*)0));
2799 | }
2800 | return end_of_field_offset - offset + 1;
2801 | }
2802 |
2803 | /* Dissect a required gps quality field. Returns length including separator */
2804 | static int
2805 | dissect_nmea0183_field_gps_quality(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hf)
2806 | {
2807 | if (offset > (int)tvb_captured_length(tvb))
2808 | {
2809 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
2810 | return 0;
2811 | }
2812 |
2813 | proto_item *ti = NULL((void*)0);
2814 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
2815 | const char *quality = NULL((void*)0);
2816 | ti = proto_tree_add_item_ret_string(tree, hf,
2817 | tvb, offset, end_of_field_offset - offset, ENC_ASCII0x00000000,
2818 | pinfo->pool, (const uint8_t**)&quality);
2819 | if (end_of_field_offset - offset == 0)
2820 | {
2821 | proto_item_append_text(ti, "[missing]");
2822 | expert_add_info(pinfo, ti, &ei_nmea0183_field_missing);
2823 | }
2824 | else
2825 | {
2826 | proto_item_append_text(ti, " (%s)", str_to_str_wmem(pinfo->pool, quality, known_gps_quality_indicators, "Unknown quality"));
2827 | }
2828 | return end_of_field_offset - offset + 1;
2829 | }
2830 |
2831 | /* Dissect a single field containing a fixed text.
2832 | The text of the field must match the `expected_text` or expert info `invalid_ei` is
2833 | added to the field. An empty field is allowed. Returns length including separator */
2834 | static int
2835 | dissect_nmea0183_field_fixed_text(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hf,
2836 | const char *expected_text, expert_field *invalid_ei)
2837 | {
2838 | if (offset > (int)tvb_captured_length(tvb))
2839 | {
2840 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
2841 | return 0;
2842 | }
2843 |
2844 | proto_item *ti = NULL((void*)0);
2845 | const char *text = NULL((void*)0);
2846 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
2847 | ti = proto_tree_add_item_ret_string(tree, hf,
2848 | tvb, offset, end_of_field_offset - offset, ENC_ASCII0x00000000,
2849 | pinfo->pool, (const uint8_t**)&text);
2850 | if (end_of_field_offset - offset == 0)
2851 | {
2852 | proto_item_append_text(ti, "[empty]");
2853 | }
2854 | else if (g_ascii_strcasecmp(text, expected_text) != 0)
2855 | {
2856 | expert_add_info(pinfo, ti, invalid_ei);
2857 | }
2858 | return end_of_field_offset - offset + 1;
2859 | }
2860 |
2861 | /* Dissect a optional FAA mode indicator field. Returns length including separator */
2862 | static int
2863 | dissect_nmea0183_field_faa_mode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hf)
2864 | {
2865 | if (offset > (int)tvb_captured_length(tvb))
2866 | {
2867 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
2868 | return 0;
2869 | }
2870 |
2871 | proto_item *ti = NULL((void*)0);
2872 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
2873 | const char *mode = NULL((void*)0);
2874 | ti = proto_tree_add_item_ret_string(tree, hf,
2875 | tvb, offset, end_of_field_offset - offset, ENC_ASCII0x00000000,
2876 | pinfo->pool, (const uint8_t**)&mode);
2877 | if (end_of_field_offset - offset == 0)
2878 | {
2879 | proto_item_append_text(ti, "[empty]");
2880 | }
2881 | else
2882 | {
2883 | proto_item_append_text(ti, " (%s)", str_to_str_wmem(pinfo->pool, mode, known_faa_mode_indicators, "Unknown FAA mode"));
2884 | }
2885 | return end_of_field_offset - offset + 1;
2886 | }
2887 |
2888 | /* Dissect a optional A/V status field. Returns length including separator */
2889 | static int
2890 | dissect_nmea0183_field_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hf)
2891 | {
2892 | if (offset > (int)tvb_captured_length(tvb))
2893 | {
2894 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
2895 | return 0;
2896 | }
2897 |
2898 | proto_item *ti = NULL((void*)0);
2899 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
2900 | const char *mode = NULL((void*)0);
2901 | ti = proto_tree_add_item_ret_string(tree, hf,
2902 | tvb, offset, end_of_field_offset - offset, ENC_ASCII0x00000000,
2903 | pinfo->pool, (const uint8_t**)&mode);
2904 | if (end_of_field_offset - offset == 0)
2905 | {
2906 | proto_item_append_text(ti, "[empty]");
2907 | }
2908 | else
2909 | {
2910 | proto_item_append_text(ti, " (%s)", str_to_str_wmem(pinfo->pool, mode, known_status_indicators, "Unknown status"));
2911 | }
2912 | return end_of_field_offset - offset + 1;
2913 | }
2914 |
2915 | /* Dissect a ALR sentence. */
2916 | /*
2917 | * $--ALR,hhmmss.ss,xxx,A,A,c--c*hh<CR><LF>
2918 | */
2919 | static const string_string alarm_condition_str[] = {
2920 | {"A", "Threshold exceeded"},
2921 | {"V", "Threshold not exceeded"},
2922 | { NULL((void*)0), NULL((void*)0)},
2923 | };
2924 |
2925 | static const string_string alarm_ack_state_str[] = {
2926 | {"A", "Acknowledged"},
2927 | {"V", "Unacknowledged"},
2928 | { NULL((void*)0), NULL((void*)0)},
2929 | };
2930 |
2931 | static int
2932 | dissect_nmea0183_sentence_alr(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
2933 | {
2934 | unsigned offset = 0;
2935 |
2936 | proto_tree* subtree = proto_tree_add_subtree(tree, tvb, offset, -1,
2937 | ett_nmea0183_sentence, NULL((void*)0), "ALR sentence - Set Alarm State");
2938 |
2939 | /* hhmmss.ss */
2940 | offset += dissect_nmea0183_field_time(tvb, pinfo, subtree, offset, hf_nmea0183_alr_time,
2941 | hf_nmea0183_alr_time_hour, hf_nmea0183_alr_time_minute,
2942 | hf_nmea0183_alr_time_second, ett_nmea0183_alr_time);
2943 | /* xxx Unique alarm number (identifier) at alarm source */
2944 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alr_alarm_id, NULL((void*)0), NULL((void*)0));
2945 | /* Alarm condition (A = threshold exceeded, V = not exceeded) */
2946 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alr_alarm_cond, NULL((void*)0), alarm_condition_str);
2947 | /* Alarm’s acknowledge state, A= acknowledged, V= unacknowledged*/
2948 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alr_alarm_ack_st, NULL((void*)0), alarm_ack_state_str);
2949 | /* c--c Alarm’s description text*/
2950 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alr_alarm_desc_txt, NULL((void*)0), NULL((void*)0));
2951 |
2952 | return tvb_captured_length(tvb);
2953 | }
2954 |
2955 | /* Dissect a DPT sentence. */
2956 | static int
2957 | dissect_nmea0183_sentence_dpt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2958 | {
2959 | unsigned offset = 0;
2960 |
2961 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
2962 | NULL((void*)0), "DPT sentence - Depth of Water");
2963 |
2964 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dpt_depth, "meter", NULL((void*)0));
2965 |
2966 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dpt_offset, "meter", NULL((void*)0));
2967 |
2968 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dpt_max_range, "meter", NULL((void*)0));
2969 |
2970 | return tvb_captured_length(tvb);
2971 | }
2972 |
2973 | /* Dissect a GGA sentence. The time, latitude and longitude fields is split into individual parts. */
2974 | static int
2975 | dissect_nmea0183_sentence_gga(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
2976 | {
2977 | unsigned offset = 0;
2978 |
2979 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
2980 | NULL((void*)0), "GGA sentence - Global Positioning System Fix");
2981 |
2982 | offset += dissect_nmea0183_field_time(tvb, pinfo, subtree, offset, hf_nmea0183_gga_time,
2983 | hf_nmea0183_gga_time_hour, hf_nmea0183_gga_time_minute,
2984 | hf_nmea0183_gga_time_second, ett_nmea0183_gga_time);
2985 |
2986 | offset += dissect_nmea0183_field_latitude(tvb, pinfo, subtree, offset, hf_nmea0183_gga_latitude,
2987 | hf_nmea0183_gga_latitude_degree, hf_nmea0183_gga_latitude_minute,
2988 | hf_nmea0183_gga_latitude_direction, ett_nmea0183_gga_latitude);
2989 |
2990 | offset += dissect_nmea0183_field_longitude(tvb, pinfo, subtree, offset, hf_nmea0183_gga_longitude,
2991 | hf_nmea0183_gga_longitude_degree, hf_nmea0183_gga_longitude_minute,
2992 | hf_nmea0183_gga_longitude_direction, ett_nmea0183_gga_longitude);
2993 |
2994 | offset += dissect_nmea0183_field_gps_quality(tvb, pinfo, subtree, offset, hf_nmea0183_gga_quality);
2995 |
2996 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gga_number_satellites, NULL((void*)0), NULL((void*)0));
2997 |
2998 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gga_horizontal_dilution, "meter", NULL((void*)0));
2999 |
3000 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gga_altitude, "meter", NULL((void*)0));
3001 |
3002 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_gga_altitude_unit,
3003 | "M", &ei_nmea0183_gga_altitude_unit_incorrect);
3004 |
3005 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gga_geoidal_separation, "meter", NULL((void*)0));
3006 |
3007 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_gga_geoidal_separation_unit,
3008 | "M", &ei_nmea0183_gga_geoidal_separation_unit_incorrect);
3009 |
3010 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gga_age_dgps, "second", NULL((void*)0));
3011 |
3012 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gga_dgps_station, NULL((void*)0), NULL((void*)0));
3013 |
3014 | return tvb_captured_length(tvb);
3015 | }
3016 |
3017 | /* Dissect a GLL sentence. The latitude, longitude and time fields is split into individual parts. */
3018 | static int
3019 | dissect_nmea0183_sentence_gll(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3020 | {
3021 | unsigned offset = 0;
3022 |
3023 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3024 | NULL((void*)0), "GLL sentence - Geographic Position");
3025 |
3026 | offset += dissect_nmea0183_field_latitude(tvb, pinfo, subtree, offset, hf_nmea0183_gll_latitude,
3027 | hf_nmea0183_gll_latitude_degree, hf_nmea0183_gll_latitude_minute,
3028 | hf_nmea0183_gll_latitude_direction, ett_nmea0183_gll_latitude);
3029 |
3030 | offset += dissect_nmea0183_field_longitude(tvb, pinfo, subtree, offset, hf_nmea0183_gll_longitude,
3031 | hf_nmea0183_gll_longitude_degree, hf_nmea0183_gll_longitude_minute,
3032 | hf_nmea0183_gll_longitude_direction, ett_nmea0183_gll_longitude);
3033 |
3034 | offset += dissect_nmea0183_field_time(tvb, pinfo, subtree, offset, hf_nmea0183_gll_time,
3035 | hf_nmea0183_gll_time_hour, hf_nmea0183_gll_time_minute,
3036 | hf_nmea0183_gll_time_second, ett_nmea0183_gll_time);
3037 |
3038 | offset += dissect_nmea0183_field_status(tvb, pinfo, subtree, offset, hf_nmea0183_gll_status);
3039 |
3040 | dissect_nmea0183_field_faa_mode(tvb, pinfo, subtree, offset, hf_nmea0183_gll_mode);
3041 |
3042 | return tvb_captured_length(tvb);
3043 | }
3044 |
3045 | /* Dissect a GST sentence. The time field is split into individual parts. */
3046 | static int
3047 | dissect_nmea0183_sentence_gst(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3048 | {
3049 | unsigned offset = 0;
3050 |
3051 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3052 | NULL((void*)0), "GST sentence - GPS Pseudorange Noise Statistics");
3053 |
3054 | offset += dissect_nmea0183_field_time(tvb, pinfo, subtree, offset, hf_nmea0183_gst_time,
3055 | hf_nmea0183_gst_time_hour, hf_nmea0183_gst_time_minute,
3056 | hf_nmea0183_gst_time_second, ett_nmea0183_gst_time);
3057 |
3058 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gst_rms_total_sd, NULL((void*)0), NULL((void*)0));
3059 |
3060 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gst_ellipse_major_sd, "meter", NULL((void*)0));
3061 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gst_ellipse_minor_sd, "meter", NULL((void*)0));
3062 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gst_ellipse_orientation, "degree (true north)", NULL((void*)0));
3063 |
3064 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gst_latitude_sd, "meter", NULL((void*)0));
3065 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gst_longitude_sd, "meter", NULL((void*)0));
3066 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gst_altitude_sd, "meter", NULL((void*)0));
3067 |
3068 | return tvb_captured_length(tvb);
3069 | }
3070 |
3071 | /* Dissect a HDT sentence. */
3072 | static int
3073 | dissect_nmea0183_sentence_hdt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3074 | {
3075 | unsigned offset = 0;
3076 |
3077 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3078 | NULL((void*)0), "HDT sentence - True Heading");
3079 |
3080 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hdt_heading, "degree", NULL((void*)0));
3081 |
3082 | dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_hdt_unit,
3083 | "T", &ei_nmea0183_hdt_unit_incorrect);
3084 |
3085 | return tvb_captured_length(tvb);
3086 | }
3087 |
3088 | /* Dissect a ROT sentence. */
3089 | static int
3090 | dissect_nmea0183_sentence_rot(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3091 | {
3092 | unsigned offset = 0;
3093 |
3094 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3095 | NULL((void*)0), "ROT sentence - Rate Of Turn");
3096 |
3097 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rot_rate_of_turn, "degree per minute", NULL((void*)0));
3098 |
3099 | dissect_nmea0183_field_status(tvb, pinfo, subtree, offset, hf_nmea0183_rot_valid);
3100 |
3101 | return tvb_captured_length(tvb);
3102 | }
3103 |
3104 | /* Dissect a TXT sentence */
3105 | static int
3106 | dissect_nmea0183_sentence_txt(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
3107 | {
3108 | unsigned offset = 0;
3109 |
3110 | proto_tree* subtree = proto_tree_add_subtree(tree, tvb, offset, -1,
3111 | ett_nmea0183_sentence, NULL((void*)0), "TXT sentence - Text Transmission");
3112 |
3113 | /* Total number of sentences, 01 to 99 */
3114 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_txt_num, NULL((void*)0), NULL((void*)0));
3115 | /* Sentence number */
3116 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_txt_sent_num, NULL((void*)0), NULL((void*)0));
3117 | /* Text identifier */
3118 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_txt_id, NULL((void*)0), NULL((void*)0));
3119 | /* Text message */
3120 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_txt_msg, NULL((void*)0), NULL((void*)0));
3121 |
3122 | return tvb_captured_length(tvb);
3123 | }
3124 |
3125 |
3126 | /* Dissect a VHW sentence. */
3127 | static int
3128 | dissect_nmea0183_sentence_vhw(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3129 | {
3130 | unsigned offset = 0;
3131 |
3132 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3133 | NULL((void*)0), "VHW sentence - Water speed and heading");
3134 |
3135 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vhw_true_heading, "degree", NULL((void*)0));
3136 |
3137 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vhw_true_heading_unit,
3138 | "T", &ei_nmea0183_vhw_true_heading_unit_incorrect);
3139 |
3140 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vhw_magnetic_heading, "degree", NULL((void*)0));
3141 |
3142 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vhw_magnetic_heading_unit,
3143 | "M", &ei_nmea0183_vhw_magnetic_heading_unit_incorrect);
3144 |
3145 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vhw_water_speed_knot, "knot", NULL((void*)0));
3146 |
3147 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vhw_water_speed_knot_unit,
3148 | "N", &ei_nmea0183_vhw_water_speed_knot_unit_incorrect);
3149 |
3150 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vhw_water_speed_kilometer, "kilometer per hour", NULL((void*)0));
3151 |
3152 | dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vhw_water_speed_kilometer_unit,
3153 | "K", &ei_nmea0183_vhw_water_speed_kilometer_unit_incorrect);
3154 |
3155 | return tvb_captured_length(tvb);
3156 | }
3157 |
3158 | /* Dissect a VBW sentence. */
3159 | static int
3160 | dissect_nmea0183_sentence_vbw(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3161 | {
3162 | unsigned offset = 0;
3163 |
3164 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3165 | NULL((void*)0), "VBW sentence - Dual Ground/Water Speed");
3166 |
3167 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vbw_water_speed_longitudinal, "knot", NULL((void*)0));
3168 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vbw_water_speed_transverse, "knot", NULL((void*)0));
3169 | offset += dissect_nmea0183_field_status(tvb, pinfo, subtree, offset, hf_nmea0183_vbw_water_speed_valid);
3170 |
3171 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vbw_ground_speed_longitudinal, "knot", NULL((void*)0));
3172 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vbw_ground_speed_transverse, "knot", NULL((void*)0));
3173 | offset += dissect_nmea0183_field_status(tvb, pinfo, subtree, offset, hf_nmea0183_vbw_ground_speed_valid);
3174 |
3175 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vbw_stern_water_speed, "knot", NULL((void*)0));
3176 | offset += dissect_nmea0183_field_status(tvb, pinfo, subtree, offset, hf_nmea0183_vbw_stern_water_speed_valid);
3177 |
3178 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vbw_stern_ground_speed, "knot", NULL((void*)0));
3179 | dissect_nmea0183_field_status(tvb, pinfo, subtree, offset, hf_nmea0183_vbw_stern_ground_speed_valid);
3180 |
3181 | return tvb_captured_length(tvb);
3182 | }
3183 |
3184 | /* Dissect a VLW sentence. */
3185 | static int
3186 | dissect_nmea0183_sentence_vlw(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3187 | {
3188 | unsigned offset = 0;
3189 |
3190 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3191 | NULL((void*)0), "VLW sentence - Distance Traveled through Water");
3192 |
3193 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vlw_cumulative_water, "nautical miles", NULL((void*)0));
3194 |
3195 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vlw_cumulative_water_unit,
3196 | "N", &ei_nmea0183_vlw_cumulative_water_unit_incorrect);
3197 |
3198 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vlw_trip_water, "nautical miles", NULL((void*)0));
3199 |
3200 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vlw_trip_water_unit,
3201 | "N", &ei_nmea0183_vlw_trip_water_unit_incorrect);
3202 |
3203 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vlw_cumulative_ground, "nautical miles", NULL((void*)0));
3204 |
3205 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vlw_cumulative_ground_unit,
3206 | "N", &ei_nmea0183_vlw_cumulative_ground_unit_incorrect);
3207 |
3208 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vlw_trip_ground, "nautical miles", NULL((void*)0));
3209 |
3210 | dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vlw_trip_ground_unit,
3211 | "N", &ei_nmea0183_vlw_trip_ground_unit_incorrect);
3212 |
3213 | return tvb_captured_length(tvb);
3214 | }
3215 |
3216 | /* Dissect a VTG sentence. */
3217 | static int
3218 | dissect_nmea0183_sentence_vtg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3219 | {
3220 | unsigned offset = 0;
3221 |
3222 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3223 | NULL((void*)0), "VTG sentence - Track made good and Ground speed");
3224 |
3225 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vtg_true_course, "degree", NULL((void*)0));
3226 |
3227 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vtg_true_course_unit,
3228 | "T", &ei_nmea0183_vtg_true_course_unit_incorrect);
3229 |
3230 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vtg_magnetic_course, "degree", NULL((void*)0));
3231 |
3232 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vtg_magnetic_course_unit,
3233 | "M", &ei_nmea0183_vtg_magnetic_course_unit_incorrect);
3234 |
3235 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vtg_ground_speed_knot, "knot", NULL((void*)0));
3236 |
3237 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vtg_ground_speed_knot_unit,
3238 | "N", &ei_nmea0183_vtg_ground_speed_knot_unit_incorrect);
3239 |
3240 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vtg_ground_speed_kilometer, "kilometer per hour", NULL((void*)0));
3241 |
3242 | offset += dissect_nmea0183_field_fixed_text(tvb, pinfo, subtree, offset, hf_nmea0183_vtg_ground_speed_kilometer_unit,
3243 | "K", &ei_nmea0183_vtg_ground_speed_kilometer_unit_incorrect);
3244 |
3245 | dissect_nmea0183_field_faa_mode(tvb, pinfo, subtree, offset, hf_nmea0183_vtg_mode);
3246 |
3247 | return tvb_captured_length(tvb);
3248 | }
3249 |
3250 | /* Dissect a ZDA (Time & Date) sentence. The time field is split into individual parts. */
3251 | static int
3252 | dissect_nmea0183_sentence_zda(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3253 | {
3254 | unsigned offset = 0;
3255 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3256 | NULL((void*)0), "ZDA sentence - Time & Date");
3257 |
3258 | offset += dissect_nmea0183_field_time(tvb, pinfo, subtree, offset, hf_nmea0183_zda_time,
3259 | hf_nmea0183_zda_time_hour, hf_nmea0183_zda_time_minute,
3260 | hf_nmea0183_zda_time_second, ett_nmea0183_zda_time);
3261 |
3262 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_zda_date_day, NULL((void*)0), NULL((void*)0));
3263 |
3264 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_zda_date_month, NULL((void*)0), NULL((void*)0));
3265 |
3266 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_zda_date_year, NULL((void*)0), NULL((void*)0));
3267 |
3268 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_zda_local_zone_hour, NULL((void*)0), NULL((void*)0));
3269 |
3270 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_zda_local_zone_minute, NULL((void*)0), NULL((void*)0));
3271 |
3272 | return tvb_captured_length(tvb);
3273 | }
3274 |
3275 |
3276 | /* Dissect a single character or numeric field. Returns length including separator. */
3277 | static int
3278 | dissect_nmea0183_field_item(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hf)
3279 | {
3280 | if (offset > (int)tvb_captured_length(tvb))
3281 | {
3282 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
3283 | return 0;
3284 | }
3285 |
3286 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
3287 | proto_item *ti = proto_tree_add_item(tree, hf, tvb, offset, end_of_field_offset - offset, ENC_BIG_ENDIAN0x00000000);
3288 | if (end_of_field_offset - offset == 0)
3289 | {
3290 | proto_item_append_text(ti, "[empty]");
3291 | }
3292 | return end_of_field_offset - offset + 1;
3293 | }
3294 |
3295 | /* Skip a field which is represented by an adjacent value or has no registered field. */
3296 | static int
3297 | dissect_nmea0183_field_skip(tvbuff_t *tvb, int offset)
3298 | {
3299 | if (offset > (int)tvb_captured_length(tvb))
3300 | {
3301 | return 0;
3302 | }
3303 |
3304 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
3305 | return end_of_field_offset - offset + 1;
3306 | }
3307 |
3308 | /* Return the current field as a packet-scoped string without advancing the offset. */
3309 | static const char *
3310 | nmea0183_field_value(tvbuff_t *tvb, packet_info *pinfo, int offset)
3311 | {
3312 | if (offset > (int)tvb_captured_length(tvb))
3313 | {
3314 | return "";
3315 | }
3316 |
3317 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
3318 | return (const char *)tvb_get_string_enc(pinfo->pool, tvb, offset,
3319 | end_of_field_offset - offset, ENC_ASCII0x00000000);
3320 | }
3321 |
3322 | /* Dissect a string field and optionally return its item. */
3323 | static int
3324 | dissect_nmea0183_field_ret_item(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
3325 | int hf, proto_item **item)
3326 | {
3327 | if (offset > (int)tvb_captured_length(tvb))
3328 | {
3329 | proto_item *ti = proto_tree_add_missing_field(tree, pinfo, hf, tvb,
3330 | tvb_captured_length(tvb));
3331 | if (item != NULL((void*)0))
3332 | {
3333 | *item = ti;
3334 | }
3335 | return 0;
3336 | }
3337 |
3338 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
3339 | proto_item *ti = proto_tree_add_item(tree, hf, tvb, offset,
3340 | end_of_field_offset - offset, ENC_ASCII0x00000000);
3341 | if (end_of_field_offset - offset == 0)
3342 | {
3343 | proto_item_append_text(ti, "[empty]");
3344 | }
3345 | if (item != NULL((void*)0))
3346 | {
3347 | *item = ti;
3348 | }
3349 | return end_of_field_offset - offset + 1;
3350 | }
3351 |
3352 | /* Dissect a long-range response field and flag an empty requested value. */
3353 | static int
3354 | dissect_nmea0183_field_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset,
3355 | int hf, const char *description, bool_Bool decode_time_value)
3356 | {
3357 | const char *value;
3358 | proto_item *ti;
3359 | int length;
3360 |
3361 | if (offset > (int)tvb_captured_length(tvb))
3362 | {
3363 | ti = proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
3364 | value = "";
3365 | length = 0;
3366 | }
3367 | else
3368 | {
3369 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
3370 | length = end_of_field_offset - offset;
3371 | value = (const char *)tvb_get_string_enc(pinfo->pool, tvb, offset, length, ENC_ASCII0x00000000);
3372 | if (decode_time_value)
3373 | {
3374 | ti = proto_tree_add_string(tree, hf, tvb, offset, length,
3375 | decode_time(pinfo->pool, value));
3376 | }
3377 | else
3378 | {
3379 | ti = proto_tree_add_string(tree, hf, tvb, offset, length, value);
3380 | }
3381 | }
3382 |
3383 | if (value[0] == '\0')
3384 | {
3385 | expert_add_info_format(pinfo, ti, &ei_nmea0183_legacy_empty_response,
3386 | "Empty Response Message (unavailable/not provided) - %s",
3387 | description);
3388 | }
3389 | return length + 1;
3390 | }
3391 |
3392 | /* Dissect a time field and display it in a readable form. Returns length including separator. */
3393 | static int
3394 | dissect_nmea0183_field_decoded_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hf)
3395 | {
3396 | if (offset > (int)tvb_captured_length(tvb))
3397 | {
3398 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
3399 | return 0;
3400 | }
3401 |
3402 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
3403 | const char *value = (const char *)tvb_get_string_enc(pinfo->pool, tvb, offset,
3404 | end_of_field_offset - offset, ENC_ASCII0x00000000);
3405 | proto_tree_add_string(tree, hf, tvb, offset, end_of_field_offset - offset,
3406 | decode_time(pinfo->pool, value));
3407 | return end_of_field_offset - offset + 1;
3408 | }
3409 |
3410 | /* Dissect a date field and display it in a readable form. Returns length including separator. */
3411 | static int
3412 | dissect_nmea0183_field_decoded_date(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hf)
3413 | {
3414 | if (offset > (int)tvb_captured_length(tvb))
3415 | {
3416 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
3417 | return 0;
3418 | }
3419 |
3420 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
3421 | const char *value = (const char *)tvb_get_string_enc(pinfo->pool, tvb, offset,
3422 | end_of_field_offset - offset, ENC_ASCII0x00000000);
3423 | proto_tree_add_string(tree, hf, tvb, offset, end_of_field_offset - offset,
3424 | decode_date(pinfo->pool, value));
3425 | return end_of_field_offset - offset + 1;
3426 | }
3427 |
3428 | /* Dissect a latitude or longitude value and its direction field. */
3429 | static int
3430 | dissect_nmea0183_field_latlong(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hf)
3431 | {
3432 | if (offset > (int)tvb_captured_length(tvb))
3433 | {
3434 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
3435 | return 0;
3436 | }
3437 |
3438 | int value_end = tvb_find_end_of_nmea0183_field(tvb, offset);
3439 | int direction_offset = MIN(value_end + 1, (int)tvb_captured_length(tvb))(((value_end + 1) < ((int)tvb_captured_length(tvb))) ? (value_end + 1) : ((int)tvb_captured_length(tvb)));
3440 | int direction_end = tvb_find_end_of_nmea0183_field(tvb, direction_offset);
3441 | const char *value = (const char *)tvb_get_string_enc(pinfo->pool, tvb, offset,
3442 | value_end - offset, ENC_ASCII0x00000000);
3443 | const char *direction = (const char *)tvb_get_string_enc(pinfo->pool, tvb, direction_offset,
3444 | direction_end - direction_offset, ENC_ASCII0x00000000);
3445 | float coordinate;
3446 |
3447 | if (decode_latlong(value, direction, &coordinate))
3448 | {
3449 | proto_tree_add_float(tree, hf, tvb, offset, direction_end - offset, coordinate);
3450 | }
3451 | return direction_end - offset + 1;
3452 | }
3453 |
3454 | /* Dissect a value and its following unit field as one displayed value. */
3455 | static int
3456 | dissect_nmea0183_field_with_unit(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hf)
3457 | {
3458 | if (offset > (int)tvb_captured_length(tvb))
3459 | {
3460 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
3461 | return 0;
3462 | }
3463 |
3464 | int value_end = tvb_find_end_of_nmea0183_field(tvb, offset);
3465 | int unit_offset = MIN(value_end + 1, (int)tvb_captured_length(tvb))(((value_end + 1) < ((int)tvb_captured_length(tvb))) ? (value_end + 1) : ((int)tvb_captured_length(tvb)));
3466 | int unit_end = tvb_find_end_of_nmea0183_field(tvb, unit_offset);
3467 | const char *value = (const char *)tvb_get_string_enc(pinfo->pool, tvb, offset,
3468 | value_end - offset, ENC_ASCII0x00000000);
3469 | const char *unit = (const char *)tvb_get_string_enc(pinfo->pool, tvb, unit_offset,
3470 | unit_end - unit_offset, ENC_ASCII0x00000000);
3471 |
3472 | proto_tree_add_string(tree, hf, tvb, offset, value_end - offset,
3473 | field_binding(pinfo->pool, value, unit));
3474 | return unit_end - offset + 1;
3475 | }
3476 |
3477 | /* Dissect an ASCII integer field. Returns length including separator. */
3478 | static int
3479 | dissect_nmea0183_field_uint(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int hf)
3480 | {
3481 | uint32_t uint_value;
3482 | proto_item *ti;
3483 |
3484 | if (offset > (int)tvb_captured_length(tvb))
3485 | {
3486 | proto_tree_add_missing_field(tree, pinfo, hf, tvb, tvb_captured_length(tvb));
3487 | return 0;
3488 | }
3489 |
3490 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
3491 | int length = end_of_field_offset - offset;
3492 | const char *value = (const char *)tvb_get_string_enc(pinfo->pool, tvb, offset,
3493 | length, ENC_ASCII0x00000000);
3494 |
3495 | if (length == 0)
3496 | {
3497 | ti = proto_tree_add_uint(tree, hf, tvb, offset, length, 0);
3498 | expert_add_info(pinfo, ti, &ei_nmea0183_field_missing);
3499 | }
3500 | else if (!ws_strtou32(value, NULL((void*)0), &uint_value))
3501 | {
3502 | ti = proto_tree_add_uint(tree, hf, tvb, offset, length, uint_value);
3503 | expert_add_info_format(pinfo, ti, &ei_nmea0183_field_uint_invalid,
3504 | "Invalid unsigned integer: %s", value);
3505 | }
3506 | else
3507 | {
3508 | proto_tree_add_uint(tree, hf, tvb, offset, length, uint_value);
3509 | }
3510 |
3511 | return length + 1;
3512 | }
3513 |
3514 | /* Add a satellite-system classification by parsing an ASCII PRN as a decimal number. */
3515 | static proto_item *
3516 | dissect_nmea0183_satellite_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
3517 | int offset, int length, int hf, const char *value)
3518 | {
3519 | uint32_t prn;
3520 | proto_item *ti;
3521 |
3522 | if (value[0] == '\0')
3523 | {
3524 | return NULL((void*)0);
3525 | }
3526 |
3527 | if (!ws_strtou32(value, NULL((void*)0), &prn) || prn > UINT16_MAX(65535))
3528 | {
3529 | ti = proto_tree_add_uint(tree, hf, tvb, offset, length, prn);
3530 | expert_add_info_format(pinfo, ti, &ei_nmea0183_sat_prn_invalid,
3531 | "Invalid satellite PRN: %s", value);
3532 | return ti;
3533 | }
3534 |
3535 | return proto_tree_add_uint(tree, hf, tvb, offset, length, prn);
3536 | }
3537 |
3538 | static int
3539 | dissect_nmea0183_sentence_aam(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3540 | {
3541 | unsigned offset = 0;
3542 |
3543 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3544 | NULL((void*)0), "AAM sentence - Waypoint Arrival Alarm");
3545 | /* Arrival Circle Status */
3546 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_aam_arr_circle_status);
3547 |
3548 | /* Perpendicular Pass Status */
3549 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_aam_perp_status);
3550 |
3551 | /* Arrival Circle Radius */
3552 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_aam_arr_circle_radius, NULL((void*)0), NULL((void*)0));
3553 |
3554 | /* Units of Radius (NM) */
3555 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_aam_units_radius);
3556 |
3557 | /* Waypoint ID */
3558 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_aam_waypoint, NULL((void*)0), NULL((void*)0));
3559 |
3560 | return tvb_captured_length(tvb);
3561 | }
3562 |
3563 | static int
3564 | dissect_nmea0183_sentence_abk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3565 | {
3566 | unsigned offset = 0;
3567 |
3568 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3569 | NULL((void*)0), "ABK sentence - UAIS Addressed and Binary Broadcast Acknowledgement");
3570 | /* MMSI of the Addressed AIS Unit */
3571 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_abk_mmsi, NULL((void*)0), NULL((void*)0));
3572 |
3573 | /* AIS Channel of Reception (either A or B) */
3574 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_abk_ais_channel);
3575 |
3576 | /* ITU-R M.1371 Message ID */
3577 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_abk_msg_id, NULL((void*)0), NULL((void*)0));
3578 |
3579 | /* Message Sequence Number */
3580 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_abk_msg_seq, NULL((void*)0), NULL((void*)0));
3581 |
3582 | /* Type of Acknowledgement */
3583 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_abk_ack_type);
3584 |
3585 | return tvb_captured_length(tvb);
3586 | }
3587 |
3588 | static int
3589 | dissect_nmea0183_sentence_aca(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3590 | {
3591 | unsigned offset = 0;
3592 |
3593 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3594 | NULL((void*)0), "ACA sentence - UAIS Regional Channel Assignment Message");
3595 |
3596 | /* Sequence Number */
3597 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_aca_seq_num, NULL((void*)0), NULL((void*)0));
3598 |
3599 | /* Region Northeast Corner Latitude */
3600 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_aca_ne_clat);
3601 |
3602 | /* Region Northeast Corner Longitude */
3603 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_aca_ne_clong);
3604 |
3605 | /* Region Southwest Corner Latitude */
3606 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_aca_sw_clat);
3607 |
3608 | /* Region Southwest Corner Longitude */
3609 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_aca_sw_clong);
3610 |
3611 | /* Transition Zone Size (1 to 8 nm) */
3612 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_aca_zone_size, NULL((void*)0), NULL((void*)0));
3613 |
3614 | /* Channel A */
3615 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_aca_chan_a, NULL((void*)0), NULL((void*)0));
3616 |
3617 | /* Channel A Bandwidth */
3618 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_aca_chan_a_bw);
3619 |
3620 | /* Channel B */
3621 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_aca_chan_b, NULL((void*)0), NULL((void*)0));
3622 |
3623 | /* Channel B Bandwidth */
3624 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_aca_chan_b_bw);
3625 |
3626 | /* Tx/Rx Mode Control */
3627 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_aca_txrx_mode);
3628 |
3629 | /* Power Level Control */
3630 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_aca_power);
3631 |
3632 | /* Information Source */
3633 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_aca_info_src);
3634 |
3635 | /* In-use Flag */
3636 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_aca_inuse);
3637 |
3638 | /* Time of "in-use" Change */
3639 | dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_aca_inuse_change);
3640 |
3641 | return tvb_captured_length(tvb);
3642 | }
3643 |
3644 | static int
3645 | dissect_nmea0183_sentence_ack(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3646 | {
3647 | unsigned offset = 0;
3648 |
3649 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3650 | NULL((void*)0), "ACK sentence - Alarm Acknowledgement");
3651 | /* Unique Alarm Number (Identifier) at Alarm Source */
3652 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ack_alarm_id, NULL((void*)0), NULL((void*)0));
3653 |
3654 | return tvb_captured_length(tvb);
3655 | }
3656 |
3657 | static int
3658 | dissect_nmea0183_sentence_acs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3659 | {
3660 | unsigned offset = 0;
3661 |
3662 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3663 | NULL((void*)0), "ACS sentence - Arco Solar Inc.");
3664 |
3665 | /* Sequence Number */
3666 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_acs_seq_num, NULL((void*)0), NULL((void*)0));
3667 |
3668 | /* MMSI of Originator */
3669 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_acs_mmsi, NULL((void*)0), NULL((void*)0));
3670 |
3671 | /* UTC of Receipt of Channel Management Information */
3672 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_acs_utc);
3673 |
3674 | /* Day, 01 to 31 (UTC) */
3675 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_acs_day, NULL((void*)0), NULL((void*)0));
3676 |
3677 | /* Month, 01 to 12 (UTC) */
3678 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_acs_month, NULL((void*)0), NULL((void*)0));
3679 |
3680 | /* Year (UTC) */
3681 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_acs_year, NULL((void*)0), NULL((void*)0));
3682 |
3683 | return tvb_captured_length(tvb);
3684 | }
3685 |
3686 | static int
3687 | dissect_nmea0183_sentence_air(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3688 | {
3689 | unsigned offset = 0;
3690 |
3691 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3692 | NULL((void*)0), "AIR sentence - UAIS Interrogation Request");
3693 | /* MMSI of Interrogated Station #1 */
3694 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_air_mmsi_is1, NULL((void*)0), NULL((void*)0));
3695 |
3696 | /* ITU-R M.1371 Message #1 Requested from Station #1 */
3697 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_air_msg_req, NULL((void*)0), NULL((void*)0));
3698 |
3699 | /* Message #1 Sub-Section from Station #1 */
3700 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_air_msg_sub, NULL((void*)0), NULL((void*)0));
3701 |
3702 | /* ITU-R M.1371 Message #2 Requested from Station #1 */
3703 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_air_msg2_req, NULL((void*)0), NULL((void*)0));
3704 |
3705 | /* Message #2 Sub-Section from Station #1 */
3706 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_air_msg2_sub, NULL((void*)0), NULL((void*)0));
3707 |
3708 | /* MMSI of Interrogated Station #2 */
3709 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_air_mmsi_is2, NULL((void*)0), NULL((void*)0));
3710 |
3711 | /* ITU-R M.1371 Message #1 Requested from Station #2 */
3712 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_air_msg_req_is2, NULL((void*)0), NULL((void*)0));
3713 |
3714 | /* Message #1 Sub-Section from Station #2 */
3715 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_air_msg_sub_is2, NULL((void*)0), NULL((void*)0));
| Value stored to 'offset' is never read
3716 |
3717 | return tvb_captured_length(tvb);
3718 | }
3719 |
3720 | static int
3721 | dissect_nmea0183_sentence_akd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3722 | {
3723 | unsigned offset = 0;
3724 | const char *value;
3725 |
3726 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3727 | NULL((void*)0), "AKD sentence - Acknowledge Detail Alarm Condition");
3728 |
3729 | /* UTC of Time Acknowledgement */
3730 | value = nmea0183_field_value(tvb, pinfo, offset);
3731 | if (value[0] == '\0')
3732 | {
3733 | /* May be NULL */
3734 | proto_tree_add_string(subtree, hf_nmea0183_akd_utc, tvb, offset, 0, "Time omitted");
3735 | offset += dissect_nmea0183_field_skip(tvb, offset);
3736 | }
3737 | else
3738 | {
3739 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset,
3740 | hf_nmea0183_akd_utc);
3741 | }
3742 |
3743 | /* System Indicator of Original Alarm Source */
3744 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
3745 | hf_nmea0183_akd_sys_indicator_orig, NULL((void*)0),
3746 | system_equipment_vals);
3747 |
3748 | /* Subsystem Equipment Indicator of Original Alarm Source */
3749 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
3750 | hf_nmea0183_akd_subsys_indicator_orig, NULL((void*)0),
3751 | subsystem_equipment_vals);
3752 |
3753 | /* Instance number of Equipment Unit/Item */
3754 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_akd_inst_num_orig, NULL((void*)0), NULL((void*)0));
3755 |
3756 | /* Type of Alarm */
3757 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_akd_alarm_type, NULL((void*)0), NULL((void*)0));
3758 |
3759 | /* System Indicator of the System Sending the Acknowledgement */
3760 | value = nmea0183_field_value(tvb, pinfo, offset);
3761 | if (value[0] == '\0')
3762 | {
3763 | /* May be NULL - this is a table lookup so if it's not there we'll skip past it */
3764 | offset += dissect_nmea0183_field_skip(tvb, offset);
3765 | }
3766 | else
3767 | {
3768 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
3769 | hf_nmea0183_akd_sys_indicator_send, NULL((void*)0),
3770 | system_equipment_vals);
3771 | }
3772 |
3773 | /* Subsystem Indicator of the System Sending the Acknowledgement */
3774 | value = nmea0183_field_value(tvb, pinfo, offset);
3775 | if (value[0] == '\0')
3776 | {
3777 | /* May be NULL - this is a table lookup so if it's not there we'll skip past it */
3778 | offset += dissect_nmea0183_field_skip(tvb, offset);
3779 | }
3780 | else
3781 | {
3782 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
3783 | hf_nmea0183_akd_sybsys_indicator_send, NULL((void*)0),
3784 | subsystem_equipment_vals);
3785 | }
3786 |
3787 | /* Instance of Equipment/Unit/Item Sending the Acknowledgement */
3788 | value = nmea0183_field_value(tvb, pinfo, offset);
3789 | if (value[0] != '\0')
3790 | {
3791 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_akd_inst_num_send, NULL((void*)0), NULL((void*)0));
3792 | }
3793 |
3794 | return tvb_captured_length(tvb);
3795 | }
3796 |
3797 | static int
3798 | dissect_nmea0183_sentence_ala(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3799 | {
3800 | unsigned offset = 0;
3801 |
3802 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3803 | NULL((void*)0), "ALA sentence - Set Detail Alarm Condition");
3804 |
3805 | /* Event Time */
3806 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_ala_time);
3807 |
3808 | /* System Indicator */
3809 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
3810 | hf_nmea0183_ala_sys_indicator, NULL((void*)0),
3811 | system_equipment_vals);
3812 |
3813 | /* Subsystem Indicator */
3814 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
3815 | hf_nmea0183_ala_subsys_indicator, NULL((void*)0),
3816 | subsystem_equipment_vals);
3817 |
3818 | /* Instance Number of Equipment/Unit/Item */
3819 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ala_inst_num, NULL((void*)0), NULL((void*)0));
3820 |
3821 | /* Type of Alarm */
3822 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ala_alarm_type, NULL((void*)0), NULL((void*)0));
3823 |
3824 | /* Alarm's Condition */
3825 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_ala_alarm_cond);
3826 |
3827 | /* Alarm's Acknowledged State */
3828 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_ala_alarm_ack_state);
3829 |
3830 | /* Alarm's Description Text */
3831 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ala_alarm_text, NULL((void*)0), NULL((void*)0));
3832 |
3833 | return tvb_captured_length(tvb);
3834 | }
3835 |
3836 | static int
3837 | dissect_nmea0183_sentence_alm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3838 | {
3839 | unsigned offset = 0;
3840 |
3841 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3842 | NULL((void*)0), "ALM sentence - GPS Almanac Data");
3843 | /* Total Number of Sentences */
3844 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_sent_tot, NULL((void*)0), NULL((void*)0));
3845 |
3846 | /* Sentence Number */
3847 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_sent_num, NULL((void*)0), NULL((void*)0));
3848 |
3849 | /* Satellite PRN Number, 01 to 32 */
3850 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_sat_prn, NULL((void*)0), NULL((void*)0));
3851 |
3852 | /* GPS Week Number */
3853 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_gps_week, NULL((void*)0), NULL((void*)0));
3854 |
3855 | /* SV Health, Bits 17-24 of Each Almanac Page */
3856 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_sv_health, NULL((void*)0), NULL((void*)0));
3857 |
3858 | /* All the following fields require the scaling factors and units table */
3859 |
3860 | /* e, Eccentricity */
3861 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_eccent, NULL((void*)0), NULL((void*)0));
3862 |
3863 | /* t(oa), Almanac Reference Time */
3864 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_alm_ref_time, NULL((void*)0), NULL((void*)0));
3865 |
3866 | /* (sigma), Inclination Angle */
3867 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_incl_angle, NULL((void*)0), NULL((void*)0));
3868 |
3869 | /* OMEGADOT, Rate of Right Ascension */
3870 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_rate_right_asc, NULL((void*)0), NULL((void*)0));
3871 |
3872 | /* root(A), Root of Semi-Major Axis */
3873 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_root_sm_axis, NULL((void*)0), NULL((void*)0));
3874 |
3875 | /* OMEGA, Argument of Perigee */
3876 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_arg_perigee, NULL((void*)0), NULL((void*)0));
3877 |
3878 | /* (OMEGA)(o), Longitude of Ascension Node */
3879 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_long_asc_node, NULL((void*)0), NULL((void*)0));
3880 |
3881 | /* M(o), Mean Anomaly */
3882 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_mean_anomaly, NULL((void*)0), NULL((void*)0));
3883 |
3884 | /* a(f0), Clock Parameter */
3885 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_af0_clock_param, NULL((void*)0), NULL((void*)0));
3886 |
3887 | /* a(f1), clock Parameter */
3888 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_alm_af1_clock_param, NULL((void*)0), NULL((void*)0));
3889 |
3890 | return tvb_captured_length(tvb);
3891 | }
3892 |
3893 | static int
3894 | dissect_nmea0183_sentence_apb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3895 | {
3896 | unsigned offset = 0;
3897 | const char *value;
3898 |
3899 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3900 | NULL((void*)0), "APB sentence - Autopilot Sentence B");
3901 |
3902 | /* Data Valid or Loran-C Blink or SNR Warning */
3903 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_loranc_blink_snr_warning);
3904 |
3905 | /* Data Valid or not used / Loran-C Cycle Lock Warning Flag */
3906 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_apb_cycle_lock_warning);
3907 |
3908 | /* Magnitude of XTE (cross-track-error) */
3909 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_apb_mag_xte, NULL((void*)0), NULL((void*)0));
3910 |
3911 | /* Direction to Steer, L/R */
3912 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_apb_dir_steer);
3913 |
3914 | /* XTE units, nautical miles */
3915 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_apb_xte_units);
3916 |
3917 | /* Status: A = arrival cricle entered */
3918 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_apb_arr_circle_status);
3919 |
3920 | /* Status: A = perpendicular passed at waypoint */
3921 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_apb_perp_status);
3922 |
3923 | /* Bearing Origin to Destination, M/T */
3924 | offset += dissect_nmea0183_field_with_unit(tvb, pinfo, subtree, offset, hf_nmea0183_apb_bearing_origin);
3925 |
3926 | /* Destination Waypoint ID */
3927 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_apb_waypoint_id, NULL((void*)0), NULL((void*)0));
3928 |
3929 | /* Bearing, Present Position to Destination, Magnetic or True */
3930 | offset += dissect_nmea0183_field_with_unit(tvb, pinfo, subtree, offset, hf_nmea0183_apb_bearing_present);
3931 |
3932 | /* Heading-to-steer to Destination Waypoint, Magnetic or True */
3933 | value = nmea0183_field_value(tvb, pinfo, offset);
3934 | if (value[0] == '\0')
3935 | {
3936 | proto_tree_add_string(subtree, hf_nmea0183_apb_heading_steer, tvb, offset, 0,
3937 | "Data unavailable");
3938 | offset += dissect_nmea0183_field_skip(tvb, offset);
3939 | offset += dissect_nmea0183_field_skip(tvb, offset);
3940 | }
3941 | else
3942 | {
3943 | offset += dissect_nmea0183_field_with_unit(tvb, pinfo, subtree, offset,
3944 | hf_nmea0183_apb_heading_steer);
3945 | }
3946 |
3947 | /* Mode Indicator */
3948 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_apb_mode);
3949 |
3950 | return tvb_captured_length(tvb);
3951 | }
3952 |
3953 | static int
3954 | dissect_nmea0183_sentence_bec(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3955 | {
3956 | unsigned offset = 0;
3957 |
3958 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3959 | NULL((void*)0), "BEC sentence - Boat Electric Corporation");
3960 |
3961 | /* UTC of Observation */
3962 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_bec_utc);
3963 |
3964 | /* Waypoint Latitude */
3965 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_bec_latitude);
3966 |
3967 | /* Waypoint Longitude */
3968 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_bec_longitude);
3969 |
3970 | /* Bearing, degrees True */
3971 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bec_bearing_true, NULL((void*)0), NULL((void*)0));
3972 | offset += dissect_nmea0183_field_skip(tvb, offset);
3973 |
3974 | /* Bearing, degrees Magnetic */
3975 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bec_bearing_mag, NULL((void*)0), NULL((void*)0));
3976 | offset += dissect_nmea0183_field_skip(tvb, offset);
3977 |
3978 | /* Distance (nm) */
3979 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bec_distance, NULL((void*)0), NULL((void*)0));
3980 | offset += dissect_nmea0183_field_skip(tvb, offset);
3981 |
3982 | /* Waypoint ID */
3983 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bec_waypoint, NULL((void*)0), NULL((void*)0));
3984 |
3985 | return tvb_captured_length(tvb);
3986 | }
3987 |
3988 | static int
3989 | dissect_nmea0183_sentence_bod(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
3990 | {
3991 | unsigned offset = 0;
3992 |
3993 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
3994 | NULL((void*)0), "BOD sentence - Bearing - Waypoint to Waypoint");
3995 | /* Bearing, degrees True */
3996 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bod_bearing_true, NULL((void*)0), NULL((void*)0));
3997 | offset += dissect_nmea0183_field_skip(tvb, offset);
3998 |
3999 | /* Bearing, degrees Magnetic */
4000 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bod_bearing_mag, NULL((void*)0), NULL((void*)0));
4001 | offset += dissect_nmea0183_field_skip(tvb, offset);
4002 |
4003 | /* Destination Waypoint ID */
4004 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bod_dest_waypoint, NULL((void*)0), NULL((void*)0));
4005 |
4006 | /* Origin Waypoint ID */
4007 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bod_orig_waypoint, NULL((void*)0), NULL((void*)0));
4008 |
4009 | return tvb_captured_length(tvb);
4010 | }
4011 |
4012 | static int
4013 | dissect_nmea0183_sentence_bwc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4014 | {
4015 | unsigned offset = 0;
4016 |
4017 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4018 | NULL((void*)0), "BWC sentence - Bearing & Distance to Waypoint - Great Circle");
4019 |
4020 | /* UTC of Observation */
4021 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_bwc_utc);
4022 |
4023 | /* Waypoint Latitude */
4024 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_bwc_latitude);
4025 |
4026 | /* Waypoint Longitude */
4027 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_bwc_longitude);
4028 |
4029 | /* Bearing, degrees True */
4030 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bwc_bearing_true, NULL((void*)0), NULL((void*)0));
4031 | offset += dissect_nmea0183_field_skip(tvb, offset);
4032 |
4033 | /* Bearing, degrees Magnetic */
4034 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bwc_bearing_mag, NULL((void*)0), NULL((void*)0));
4035 | offset += dissect_nmea0183_field_skip(tvb, offset);
4036 |
4037 | /* Distance (nm) */
4038 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bwc_distance, NULL((void*)0), NULL((void*)0));
4039 | offset += dissect_nmea0183_field_skip(tvb, offset);
4040 |
4041 | /* Waypoint ID */
4042 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bwc_waypoint, NULL((void*)0), NULL((void*)0));
4043 |
4044 | /* Mode Indicator */
4045 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_bwc_mode);
4046 |
4047 | return tvb_captured_length(tvb);
4048 | }
4049 |
4050 | static int
4051 | dissect_nmea0183_sentence_bwr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4052 | {
4053 | unsigned offset = 0;
4054 |
4055 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4056 | NULL((void*)0), "BWR sentence - Bearing and Distance to Waypoint - Rhumb Line");
4057 |
4058 | /* UTC of Observation */
4059 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_bwr_utc);
4060 |
4061 | /* Waypoint Latitude */
4062 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_bwr_latitude);
4063 |
4064 | /* Waypoint Longitude */
4065 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_bwr_longitude);
4066 |
4067 | /* Bearing, degrees True */
4068 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bwr_bearing_true, NULL((void*)0), NULL((void*)0));
4069 | offset += dissect_nmea0183_field_skip(tvb, offset);
4070 |
4071 | /* Bearing, degrees Magnetic */
4072 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bwr_bearing_mag, NULL((void*)0), NULL((void*)0));
4073 | offset += dissect_nmea0183_field_skip(tvb, offset);
4074 |
4075 | /* Distance (nm) */
4076 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bwr_distance, NULL((void*)0), NULL((void*)0));
4077 | offset += dissect_nmea0183_field_skip(tvb, offset);
4078 |
4079 | /* Waypoint ID */
4080 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bwr_waypoint, NULL((void*)0), NULL((void*)0));
4081 |
4082 | /* Mode Indicator */
4083 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_bwr_mode);
4084 |
4085 | return tvb_captured_length(tvb);
4086 | }
4087 |
4088 | static int
4089 | dissect_nmea0183_sentence_bww(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4090 | {
4091 | unsigned offset = 0;
4092 |
4093 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4094 | NULL((void*)0), "BWW sentence - Bearing - Waypoint to Waypoint");
4095 | /* Bearing, degrees True */
4096 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bww_bearing_true, NULL((void*)0), NULL((void*)0));
4097 | offset += dissect_nmea0183_field_skip(tvb, offset);
4098 |
4099 | /* Bearing, degrees Magnetic */
4100 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bww_bearing_mag, NULL((void*)0), NULL((void*)0));
4101 | offset += dissect_nmea0183_field_skip(tvb, offset);
4102 |
4103 | /* TO Waypoint ID */
4104 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bww_to_waypoint, NULL((void*)0), NULL((void*)0));
4105 |
4106 | /* FROM Waypoint ID */
4107 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_bww_from_waypoint, NULL((void*)0), NULL((void*)0));
4108 |
4109 | return tvb_captured_length(tvb);
4110 | }
4111 |
4112 | static int
4113 | dissect_nmea0183_sentence_cbr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4114 | {
4115 | unsigned offset = 0;
4116 |
4117 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4118 | NULL((void*)0), "CBR sentence - Configure Broadcast Rates for AIS AtoN Station Message Command");
4119 | /* MMSI */
4120 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_mmsi, NULL((void*)0), NULL((void*)0));
4121 |
4122 | /* Message ID */
4123 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_msg_id, NULL((void*)0), NULL((void*)0));
4124 |
4125 | /* Message ID Index */
4126 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_msd_id_index, NULL((void*)0), NULL((void*)0));
4127 |
4128 | /* Start UTC Hour, Channel A */
4129 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_hr_chan_a, NULL((void*)0), NULL((void*)0));
4130 |
4131 | /* Start UTC Minute, Channel A */
4132 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_min_chan_a, NULL((void*)0), NULL((void*)0));
4133 |
4134 | /* Start Slot, Channel A */
4135 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_slot_chan_a, NULL((void*)0), NULL((void*)0));
4136 |
4137 | /* Slot Interval, Channel A */
4138 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_interv_chan_a, NULL((void*)0), NULL((void*)0));
4139 |
4140 | /* FATDMA or RATDMA/CSTDMA Setup */
4141 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_setup);
4142 |
4143 | /* Start UTC Hour, Channel B */
4144 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_hr_chan_b, NULL((void*)0), NULL((void*)0));
4145 |
4146 | /* Start UTC Minute, Channel B */
4147 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_min_chan_b, NULL((void*)0), NULL((void*)0));
4148 |
4149 | /* Start Slot, Channel B */
4150 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_slot_chan_b, NULL((void*)0), NULL((void*)0));
4151 |
4152 | /* Slot Interval, Channel B */
4153 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_interv_chan_b, NULL((void*)0), NULL((void*)0));
4154 |
4155 | /* Sentence Status Flag */
4156 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_cbr_status);
4157 |
4158 | return tvb_captured_length(tvb);
4159 | }
4160 |
4161 | static int
4162 | dissect_nmea0183_sentence_cur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4163 | {
4164 | unsigned offset = 0;
4165 |
4166 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4167 | NULL((void*)0), "CUR sentence - Water Current Layer");
4168 | /* Validity of the Data */
4169 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_cur_validity);
4170 |
4171 | /* Data Set Number */
4172 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cur_data_set, NULL((void*)0), NULL((void*)0));
4173 |
4174 | /* Layer Number */
4175 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cur_layer, NULL((void*)0), NULL((void*)0));
4176 |
4177 | /* Current Depth in meters */
4178 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cur_depth, NULL((void*)0), NULL((void*)0));
4179 |
4180 | /* Current Direction in degrees */
4181 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cur_direction, NULL((void*)0), NULL((void*)0));
4182 |
4183 | /* Direction Reference in use (True/Relative) */
4184 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_cur_direction_ref);
4185 |
4186 | /* Current Speed in knots */
4187 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cur_speed, NULL((void*)0), NULL((void*)0));
4188 |
4189 | /* Reference Layer Depth in meters */
4190 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cur_ref_layer, NULL((void*)0), NULL((void*)0));
4191 |
4192 | /* Heading */
4193 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_cur_heading, NULL((void*)0), NULL((void*)0));
4194 |
4195 | /* Heading Reference in use (True/Magnetic) */
4196 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_cur_heading_ref);
4197 |
4198 | /* Speed Reference */
4199 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_cur_speed_ref);
4200 |
4201 | return tvb_captured_length(tvb);
4202 | }
4203 |
4204 | static int
4205 | dissect_nmea0183_sentence_dbt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4206 | {
4207 | unsigned offset = 0;
4208 |
4209 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4210 | NULL((void*)0), "DBT sentence - Echosounder - Depth Below Transducer");
4211 |
4212 | /* Water Depth (feet) */
4213 | offset += dissect_nmea0183_field_with_unit(tvb, pinfo, subtree, offset, hf_nmea0183_dbt_feet);
4214 |
4215 | /* Water Depth (meters) */
4216 | offset += dissect_nmea0183_field_with_unit(tvb, pinfo, subtree, offset, hf_nmea0183_dbt_meters);
4217 |
4218 | /* Water Depth (fathoms) */
4219 | dissect_nmea0183_field_with_unit(tvb, pinfo, subtree, offset, hf_nmea0183_dbt_fathoms);
4220 |
4221 | return tvb_captured_length(tvb);
4222 | }
4223 |
4224 | static int
4225 | dissect_nmea0183_sentence_dcn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4226 | {
4227 | unsigned offset = 0;
4228 |
4229 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4230 | NULL((void*)0), "DCN sentence - DECCA Position");
4231 | /* Decca Chain Identifier */
4232 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_dc_id, NULL((void*)0), NULL((void*)0));
4233 |
4234 | /* Red Zone Identifier, Number-Letter */
4235 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_rz_id, NULL((void*)0), NULL((void*)0));
4236 |
4237 | /* Red Line of Position (LOP) */
4238 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_rlop, NULL((void*)0), NULL((void*)0));
4239 |
4240 | /* Status: Red-Master Line */
4241 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_rstatus);
4242 |
4243 | /* Green Zone Identifier, Number-Letter */
4244 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_gz_id, NULL((void*)0), NULL((void*)0));
4245 |
4246 | /* Green LOP */
4247 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_glop, NULL((void*)0), NULL((void*)0));
4248 |
4249 | /* Status: Green-Master Line */
4250 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_gstatus);
4251 |
4252 | /* Purple Zone Identifier, Number-Letter */
4253 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_pz_id, NULL((void*)0), NULL((void*)0));
4254 |
4255 | /* Purple LOP */
4256 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_plop, NULL((void*)0), NULL((void*)0));
4257 |
4258 | /* Status: Purple-Master Line */
4259 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_pstatus);
4260 |
4261 | /* Red-line Navigation Use */
4262 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_rnav);
4263 |
4264 | /* Green-line Navigation Use */
4265 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_gnav);
4266 |
4267 | /* Purple-line Navigation Use */
4268 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_pnav);
4269 |
4270 | /* Position Uncertainty (nm) */
4271 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_pos_uncertainty, NULL((void*)0), NULL((void*)0));
4272 |
4273 | /* Fix Data Basis */
4274 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dcn_data_basis);
4275 |
4276 | return tvb_captured_length(tvb);
4277 | }
4278 |
4279 | static int
4280 | dissect_nmea0183_sentence_ddc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4281 | {
4282 | unsigned offset = 0;
4283 |
4284 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4285 | NULL((void*)0), "DDC sentence - Display Dimming Control");
4286 | /* Display Dimming Preset */
4287 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_ddc_dimming);
4288 |
4289 | /* Brightness Percentage (00 to 99) */
4290 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ddc_brightness, NULL((void*)0), NULL((void*)0));
4291 |
4292 | /* Color Palette */
4293 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_ddc_palette);
4294 |
4295 | /* Sentence Status Flag */
4296 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_ddc_status);
4297 |
4298 | return tvb_captured_length(tvb);
4299 | }
4300 |
4301 | static int
4302 | dissect_nmea0183_sentence_dor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4303 | {
4304 | unsigned offset = 0;
4305 | const char *message_type;
4306 |
4307 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4308 | NULL((void*)0), "DOR sentence - Door Status Detection");
4309 |
4310 | /* Message Type */
4311 | message_type = nmea0183_field_value(tvb, pinfo, offset);
4312 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dor_msg_type);
4313 |
4314 | /* Event Time (UTC) - may be NULL */
4315 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset,
4316 | hf_nmea0183_dor_time);
4317 |
4318 | /* Type of Door Monitoring System */
4319 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4320 | hf_nmea0183_dor_system_type, NULL((void*)0),
4321 | door_mon_sys_type_vals);
4322 |
4323 | /* First Division Indicator */
4324 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4325 | hf_nmea0183_dor_first_indic, NULL((void*)0), NULL((void*)0));
4326 |
4327 | /* Second Division Indicator */
4328 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4329 | hf_nmea0183_dor_second_indic, NULL((void*)0), NULL((void*)0));
4330 |
4331 | /* If Message Type is 'S' then it represents number of open or faulty doors.
4332 | * If Message Type is 'E' then it represents the door number.
4333 | * If Message Type is 'F' then this field is NULL so just continue */
4334 | if (strcmp(message_type, "S") == 0)
4335 | {
4336 | /* Count of Open/Faulty Doors */
4337 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4338 | hf_nmea0183_dor_open_count, NULL((void*)0), NULL((void*)0));
4339 | }
4340 | else if (strcmp(message_type, "E") == 0)
4341 | {
4342 | /* Door Number */
4343 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4344 | hf_nmea0183_dor_door_num, NULL((void*)0), NULL((void*)0));
4345 | }
4346 | else
4347 | {
4348 | /* Message Type is "F" so this field is NULL so offset and continue */
4349 | offset += dissect_nmea0183_field_skip(tvb, offset);
4350 | }
4351 |
4352 | /* Door Status */
4353 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dor_status);
4354 |
4355 | /* Watertight Door Switch Setting */
4356 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dor_setting);
4357 |
4358 | /* Message Description Text */
4359 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dor_text, NULL((void*)0), NULL((void*)0));
4360 |
4361 | return tvb_captured_length(tvb);
4362 | }
4363 |
4364 | static int
4365 | dissect_nmea0183_sentence_dsc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4366 | {
4367 | unsigned offset = 0;
4368 |
4369 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4370 | NULL((void*)0), "DSC sentence - Dynascan Corporation");
4371 | /* Format Specifier */
4372 | /* TODO: Set up ITU-R M.493 Table 3 and map to two least-significant bits */
4373 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsc_format, NULL((void*)0), NULL((void*)0));
4374 |
4375 | /* Address (i.e., MMSI for the station to be called or
4376 | * the MMSI of the calling station in a received call */
4377 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsc_address, NULL((void*)0), NULL((void*)0));
4378 |
4379 | /* Category */
4380 | /* TODO: Set up ITU-R M.493 Table 3 and map to two least-significant bits */
4381 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsc_category, NULL((void*)0), NULL((void*)0));
4382 |
4383 | /* Nature of Distress or First Telecommand */
4384 | /* TODO: Set up ITU-R M.493 Table 3 and map to two least-significant bits */
4385 | /* Nature of Distress is used here ONLY for distress calls */
4386 | /* TODO: Probably ought to use an if/else statement with two separate fields here */
4387 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsc_first_tcmd, NULL((void*)0), NULL((void*)0));
4388 |
4389 | /* Type of Communication or Second Telecommand */
4390 | /* TODO: Set up ITU-R M.493 Table 3 and map to two least-significant bits */
4391 | /* Type of Communication is used here ONLY for:
4392 | * (1) Distress
4393 | * (2) Distress Acknowledgement
4394 | * (3) Distress Relay
4395 | * (4) Distress Relay Acknowledgement */
4396 | /* TODO: Probably ought to use an if/else statement with two separate fields here */
4397 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsc_comm_type, NULL((void*)0), NULL((void*)0));
4398 |
4399 | /* Position or Channel/Frequency */
4400 | /* TODO: Set up ITU-R M.493 Paragraph 8.1.2 table for Position Message */
4401 | /* TODO: Set up ITU-R M.493 Table 13 for Channel/Frequency Message */
4402 | /* TODO: Probably ought to use an if/else statement with two separate fields here */
4403 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsc_position, NULL((void*)0), NULL((void*)0));
4404 |
4405 | /* Time or Telephone Number */
4406 | /* Time is HHMM format and in UTC */
4407 | /* Telephone Number is 16 digits max., odd/even information inserted by DSC equipment */
4408 | /* TODO: Probably ought to use an if/else statement with two separate fields here */
4409 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsc_time, NULL((void*)0), NULL((void*)0));
4410 |
4411 | /* MMSI of Ship in Distress */
4412 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsc_mmsi, NULL((void*)0), NULL((void*)0));
4413 |
4414 | /* Nature of Distress */
4415 | /* TODO: Set up ITU-R M.493 Table 3 and map to two least-significant bits */
4416 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsc_nature_distress, NULL((void*)0), NULL((void*)0));
4417 |
4418 | /* Acknowledgement */
4419 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dsc_ack);
4420 |
4421 | /* Expansion Indicator */
4422 | /* TODO: Write code to account for expanded messages when this is set to 'E' */
4423 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsc_expansion, NULL((void*)0), NULL((void*)0));
4424 |
4425 | return tvb_captured_length(tvb);
4426 | }
4427 |
4428 | static int
4429 | dissect_nmea0183_sentence_dse(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4430 | {
4431 | unsigned offset = 0;
4432 |
4433 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4434 | NULL((void*)0), "DSE sentence - Extended DSC");
4435 | /* Total Number of Sentences */
4436 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dse_total_sentences, NULL((void*)0), NULL((void*)0));
4437 |
4438 | /* Sentence Number */
4439 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dse_sentence_number, NULL((void*)0), NULL((void*)0));
4440 |
4441 | /* Query/Reply Flag */
4442 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_dse_flag);
4443 |
4444 | /* Vessel MMSI */
4445 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dse_mmsi, NULL((void*)0), NULL((void*)0));
4446 |
4447 | /* TODO: This is a loop - can be a lot of "Data sets" comprised of a code field and data field */
4448 | /* Code Field */
4449 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dse_code, NULL((void*)0), NULL((void*)0));
4450 |
4451 | /* Data Field */
4452 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dse_data, NULL((void*)0), NULL((void*)0));
4453 |
4454 | return tvb_captured_length(tvb);
4455 | }
4456 |
4457 | static int
4458 | dissect_nmea0183_sentence_dsi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4459 | {
4460 | unsigned offset = 0;
4461 |
4462 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4463 | NULL((void*)0), "DSI sentence - DSC Transponder Initiate");
4464 | /* Total Number of Sentences */
4465 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsi_total_sentences, NULL((void*)0), NULL((void*)0));
4466 |
4467 | /* Sentence Number */
4468 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsi_sentence_number, NULL((void*)0), NULL((void*)0));
4469 |
4470 | /* Vessel MMSI */
4471 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsi_mmsi, NULL((void*)0), NULL((void*)0));
4472 |
4473 | /* Vessel Course, degrees True */
4474 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsi_course, NULL((void*)0), NULL((void*)0));
4475 |
4476 | /* Vessel Type */
4477 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsi_type, NULL((void*)0), NULL((void*)0));
4478 |
4479 | /* Geographic Area, 0.01 minutes */
4480 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsi_geo_area, NULL((void*)0), NULL((void*)0));
4481 |
4482 | /* TODO: The next two fields are part of a 1-to-n loop of "Command Sets" */
4483 | /* Symbol Field */
4484 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsi_symbol, NULL((void*)0), NULL((void*)0));
4485 |
4486 | /* Information Field */
4487 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsi_info, NULL((void*)0), NULL((void*)0));
4488 |
4489 | /* TODO: Account for expanded messages when this is set to 'E' */
4490 | /* Expansion Indicator */
4491 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsi_expansion, NULL((void*)0), NULL((void*)0));
4492 |
4493 | return tvb_captured_length(tvb);
4494 | }
4495 |
4496 | static int
4497 | dissect_nmea0183_sentence_dsr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4498 | {
4499 | unsigned offset = 0;
4500 |
4501 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4502 | NULL((void*)0), "DSR sentence - DSC Transponder Response");
4503 | /* Total Number of Sentences */
4504 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsr_total_sentences, NULL((void*)0), NULL((void*)0));
4505 |
4506 | /* Sentence Number */
4507 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsr_sentence_number, NULL((void*)0), NULL((void*)0));
4508 |
4509 | /* Vessel MMSI */
4510 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsr_mmsi, NULL((void*)0), NULL((void*)0));
4511 |
4512 | /* TODO: The next two fields are part of a 1-to-n loop of "Command Sets" */
4513 | /* Symbol Field */
4514 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsr_symbol, NULL((void*)0), NULL((void*)0));
4515 |
4516 | /* Information Field */
4517 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsr_info, NULL((void*)0), NULL((void*)0));
4518 |
4519 | /* TODO: Account for expanded messages when this is set to 'E' */
4520 | /* Expansion Indicator */
4521 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dsr_expansion, NULL((void*)0), NULL((void*)0));
4522 |
4523 | return tvb_captured_length(tvb);
4524 | }
4525 |
4526 | static int
4527 | dissect_nmea0183_sentence_dtm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4528 | {
4529 | unsigned offset = 0;
4530 | const char *datum_code;
4531 | const char *value;
4532 |
4533 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4534 | NULL((void*)0), "DTM sentence - Datum Reference");
4535 |
4536 | /* Datum Code */
4537 | value = nmea0183_field_value(tvb, pinfo, offset);
4538 | datum_code = try_str_to_str(value, datum_vals);
4539 | proto_tree_add_string(subtree, hf_nmea0183_dtm_datum, tvb, offset, (int)strlen(value),
4540 | datum_code ? datum_code : "Unknown Datum/Unavailable");
4541 | offset += dissect_nmea0183_field_skip(tvb, offset);
4542 |
4543 | /* Datum Subdivision Code */
4544 | /* TODO: Create table from IHO Publication S-60 Appendices B and C, perhaps in a separate file due to size */
4545 | value = nmea0183_field_value(tvb, pinfo, offset);
4546 | if (value[0] == '\0')
4547 | {
4548 | proto_tree_add_string(subtree, hf_nmea0183_dtm_datum_subdiv, tvb, offset, 0,
4549 | "Data unavailable");
4550 | offset += dissect_nmea0183_field_skip(tvb, offset);
4551 | }
4552 | else
4553 | {
4554 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4555 | hf_nmea0183_dtm_datum_subdiv, NULL((void*)0), NULL((void*)0));
4556 | }
4557 |
4558 | /* Latitude Offset in minutes */
4559 | /* TODO: Write an offset decode function for latitude and longitude offsets */
4560 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4561 | hf_nmea0183_dtm_lat_offset, NULL((void*)0), NULL((void*)0));
4562 | offset += dissect_nmea0183_field_skip(tvb, offset);
4563 |
4564 | /* Longitude Offset in minutes */
4565 | /* TODO: Write an offset decode function for latitude and longitude offsets */
4566 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4567 | hf_nmea0183_dtm_lon_offset, NULL((void*)0), NULL((void*)0));
4568 | offset += dissect_nmea0183_field_skip(tvb, offset);
4569 |
4570 | /* Altitude Offset in meters */
4571 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_dtm_alt_offset, NULL((void*)0), NULL((void*)0));
4572 |
4573 | /* Reference Datum Code */
4574 | value = nmea0183_field_value(tvb, pinfo, offset);
4575 | datum_code = try_str_to_str(value, datum_vals);
4576 | proto_tree_add_string(subtree, hf_nmea0183_dtm_ref_datum, tvb, offset, (int)strlen(value),
4577 | datum_code ? datum_code : "Unknown Datum/Unavailable");
4578 |
4579 | return tvb_captured_length(tvb);
4580 | }
4581 |
4582 | static int
4583 | dissect_nmea0183_sentence_etl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4584 | {
4585 | unsigned offset = 0;
4586 |
4587 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4588 | NULL((void*)0), "ETL sentence - Engine Telegraph Operation Status");
4589 |
4590 | /* Event Time */
4591 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_etl_time);
4592 |
4593 | /* Message Type */
4594 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_etl_msg_type);
4595 |
4596 | /* Position Indicator of Engine Telegraph */
4597 | offset += dissect_nmea0183_field_uint(tvb, pinfo, subtree, offset, hf_nmea0183_etl_posind_engine);
4598 |
4599 | /* Position Indicator of Sub Telegraph */
4600 | offset += dissect_nmea0183_field_uint(tvb, pinfo, subtree, offset, hf_nmea0183_etl_posind_sub);
4601 |
4602 | /* Operating Location Indicator */
4603 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_etl_opind);
4604 |
4605 | /* Number of Engine or Propeller Shafts */
4606 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_etl_num_eng_shaft, NULL((void*)0), NULL((void*)0));
4607 |
4608 | return tvb_captured_length(tvb);
4609 | }
4610 |
4611 | static int
4612 | dissect_nmea0183_sentence_fsi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4613 | {
4614 | unsigned offset = 0;
4615 |
4616 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4617 | NULL((void*)0), "FSI sentence - Frequency Set Information");
4618 | /* Transmit Frequency (100 Hz Increments) */
4619 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_fsi_xmit_freq, NULL((void*)0), NULL((void*)0));
4620 |
4621 | /* Receive Frequency (100 Hz Increments) */
4622 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_fsi_recv_freq, NULL((void*)0), NULL((void*)0));
4623 |
4624 | /* Mode of Operation */
4625 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_fsi_mode);
4626 |
4627 | /* Power Level */
4628 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_fsi_power);
4629 |
4630 | return tvb_captured_length(tvb);
4631 | }
4632 |
4633 | static int
4634 | dissect_nmea0183_sentence_gbs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4635 | {
4636 | unsigned offset = 0;
4637 | const char *value;
4638 | int length;
4639 |
4640 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4641 | NULL((void*)0), "GBS sentence - GPS Satellite Fault Detection");
4642 |
4643 | /* UTC of Position */
4644 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_gbs_utc);
4645 |
4646 | /* Expected Error in Latitude */
4647 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gbs_lat_err, NULL((void*)0), NULL((void*)0));
4648 |
4649 | /* Expected Error in Longitude */
4650 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gbs_long_err, NULL((void*)0), NULL((void*)0));
4651 |
4652 | /* Expected Error in Altitude */
4653 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gbs_alt_err, NULL((void*)0), NULL((void*)0));
4654 |
4655 | /* ID Number of Most Likely Failed Satellite */
4656 | value = nmea0183_field_value(tvb, pinfo, offset);
4657 | length = (int)strlen(value);
4658 | if (length == 0)
4659 | {
4660 | proto_tree_add_string(subtree, hf_nmea0183_gbs_sat_id, tvb, offset, 0,
4661 | "Satellite ID unavailable");
4662 | }
4663 | else
4664 | {
4665 | proto_tree_add_string(subtree, hf_nmea0183_gbs_sat_id, tvb, offset, length, value);
4666 | dissect_nmea0183_satellite_type(tvb, pinfo, subtree, offset, length,
4667 | hf_nmea0183_gbs_sat_type, value);
4668 | }
4669 | offset += dissect_nmea0183_field_skip(tvb, offset);
4670 |
4671 | /* Probability of Missed Detection for Most Likely Failed Satellite */
4672 | value = nmea0183_field_value(tvb, pinfo, offset);
4673 | if (value[0] == '\0')
4674 | {
4675 | proto_tree_add_string(subtree, hf_nmea0183_gbs_prob_miss, tvb, offset, 0,
4676 | "Data not available");
4677 | offset += dissect_nmea0183_field_skip(tvb, offset);
4678 | }
4679 | else
4680 | {
4681 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4682 | hf_nmea0183_gbs_prob_miss, NULL((void*)0), NULL((void*)0));
4683 | }
4684 |
4685 | /* Estimate of Bias in meters on Most Likely Failed Satellite */
4686 | value = nmea0183_field_value(tvb, pinfo, offset);
4687 | if (value[0] == '\0')
4688 | {
4689 | proto_tree_add_string(subtree, hf_nmea0183_gbs_est_bias, tvb, offset, 0,
4690 | "Data not available");
4691 | offset += dissect_nmea0183_field_skip(tvb, offset);
4692 | }
4693 | else
4694 | {
4695 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4696 | hf_nmea0183_gbs_est_bias, NULL((void*)0), NULL((void*)0));
4697 | }
4698 |
4699 | /* Standard Deviation of Bias Estimate */
4700 | value = nmea0183_field_value(tvb, pinfo, offset);
4701 | if (value[0] == '\0')
4702 | {
4703 | proto_tree_add_string(subtree, hf_nmea0183_gbs_std_dev, tvb, offset, 0,
4704 | "Data not available");
4705 | }
4706 | else
4707 | {
4708 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gbs_std_dev, NULL((void*)0), NULL((void*)0));
4709 | }
4710 |
4711 | return tvb_captured_length(tvb);
4712 | }
4713 |
4714 | static int
4715 | dissect_nmea0183_sentence_glc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4716 | {
4717 | unsigned offset = 0;
4718 |
4719 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4720 | NULL((void*)0), "GLC sentence - Geographic Position, Loran-C");
4721 | /* GRI, tens of microseconds */
4722 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_glc_gri, NULL((void*)0), NULL((void*)0));
4723 |
4724 | /* Master TOA, microseconds */
4725 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_glc_master_toa, NULL((void*)0), NULL((void*)0));
4726 | offset += dissect_nmea0183_field_skip(tvb, offset);
4727 |
4728 | /* Time Difference #1, microseconds */
4729 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_glc_td1, NULL((void*)0), NULL((void*)0));
4730 | offset += dissect_nmea0183_field_skip(tvb, offset);
4731 |
4732 | /* Time Difference #2, microseconds */
4733 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_glc_td2, NULL((void*)0), NULL((void*)0));
4734 | offset += dissect_nmea0183_field_skip(tvb, offset);
4735 |
4736 | /* Time Difference #3, microseconds */
4737 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_glc_td3, NULL((void*)0), NULL((void*)0));
4738 | offset += dissect_nmea0183_field_skip(tvb, offset);
4739 |
4740 | /* Time Difference #4, microseconds */
4741 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_glc_td4, NULL((void*)0), NULL((void*)0));
4742 | offset += dissect_nmea0183_field_skip(tvb, offset);
4743 |
4744 | /* Time Difference #5, microseconds */
4745 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_glc_td5, NULL((void*)0), NULL((void*)0));
4746 |
4747 | /* Signal Status */
4748 | proto_tree_add_item(subtree, hf_nmea0183_glc_sig_status, tvb, offset + 2, 1, ENC_BIG_ENDIAN0x00000000);
4749 |
4750 | return tvb_captured_length(tvb);
4751 | }
4752 |
4753 | static int
4754 | dissect_nmea0183_sentence_gmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4755 | {
4756 | unsigned offset = 0;
4757 | const char *mode;
4758 | int mode_offset;
4759 |
4760 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4761 | NULL((void*)0), "GMP sentence - GNSS Map Projection Fix Data");
4762 |
4763 | /* UTC of Position */
4764 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_utc);
4765 |
4766 | /* Map Projection Identification */
4767 | /* TODO: Convert three-character values to strings:
4768 | * UTM = Universal Transverse Mercator | LOC = Local Coordinate System */
4769 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_projection, NULL((void*)0), NULL((void*)0));
4770 |
4771 | /* Map Zone */
4772 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_zone, NULL((void*)0), NULL((void*)0));
4773 |
4774 | /* X (Northern) component of grid (or local) coordinates */
4775 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_x_comp, NULL((void*)0), NULL((void*)0));
4776 |
4777 | /* Y (Eastern) component of grid (or local) coordinates */
4778 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_y_comp, NULL((void*)0), NULL((void*)0));
4779 |
4780 | /* Mode Indicator */
4781 | mode_offset = offset;
4782 | mode = nmea0183_field_value(tvb, pinfo, offset);
4783 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_mode_string, NULL((void*)0), NULL((void*)0));
4784 |
4785 | /* This is a variable length string that uses a table lookup for each character.
4786 | * The first character indicates use of GPS satellites.
4787 | * The second character indicates use of GLONASS satellites.
4788 | * The third to nth character indicates new satellite systems not-yet-incorporated */
4789 | for (int i = 0; mode[i] != '\0'; i++)
4790 | {
4791 | /* GPS Mode Indicator */
4792 | if (i == 0)
4793 | {
4794 | proto_tree_add_item(subtree, hf_nmea0183_gmp_mode_gps, tvb,
4795 | mode_offset + i, 1, ENC_BIG_ENDIAN0x00000000);
4796 | }
4797 | /* GLONASS Mode Indicator */
4798 | else if (i == 1)
4799 | {
4800 | proto_tree_add_item(subtree, hf_nmea0183_gmp_mode_glonass, tvb,
4801 | mode_offset + i, 1, ENC_BIG_ENDIAN0x00000000);
4802 | }
4803 | /* Other Satellite System Mode Indicators (1 to n) */
4804 | else
4805 | {
4806 | proto_tree_add_item(subtree, hf_nmea0183_gmp_mode_other, tvb,
4807 | mode_offset + i, 1, ENC_BIG_ENDIAN0x00000000);
4808 | }
4809 | }
4810 | offset += dissect_nmea0183_field_skip(tvb, offset);
4811 |
4812 | /* Total Number of Satellites in use, 00-99 */
4813 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_tot_sats, NULL((void*)0), NULL((void*)0));
4814 |
4815 | /* Horizontal Dilution of Precision */
4816 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_hdop, NULL((void*)0), NULL((void*)0));
4817 |
4818 | /* Antenna Altitude in meters, re: mean-sea-level (geoid) */
4819 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_ant_alt, NULL((void*)0), NULL((void*)0));
4820 |
4821 | /* Geoidal Separation in meters */
4822 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_geoid_sep, NULL((void*)0), NULL((void*)0));
4823 |
4824 | /* Age of Differential Data */
4825 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_data_age, NULL((void*)0), NULL((void*)0));
4826 |
4827 | /* Differential Reference Station ID */
4828 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gmp_diff_ref_id, NULL((void*)0), NULL((void*)0));
4829 |
4830 | return tvb_captured_length(tvb);
4831 | }
4832 |
4833 | static int
4834 | dissect_nmea0183_sentence_gns(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4835 | {
4836 | unsigned offset = 0;
4837 | const char *mode;
4838 | const char *value;
4839 | int mode_offset;
4840 | proto_item *pi;
4841 | proto_tree *pt;
4842 |
4843 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4844 | NULL((void*)0), "GNS sentence - GNSS Fix data");
4845 |
4846 | /* UTC of Position */
4847 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_gns_utc);
4848 |
4849 | /* Latitude */
4850 | value = nmea0183_field_value(tvb, pinfo, offset);
4851 | if (value[0] == '\0')
4852 | {
4853 | /* Skip this field and the next since we don't have anything to report */
4854 | offset += dissect_nmea0183_field_skip(tvb, offset);
4855 | offset += dissect_nmea0183_field_skip(tvb, offset);
4856 | }
4857 | else
4858 | {
4859 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset,
4860 | hf_nmea0183_gns_latitude);
4861 | }
4862 |
4863 | /* Longitude */
4864 | value = nmea0183_field_value(tvb, pinfo, offset);
4865 | if (value[0] == '\0')
4866 | {
4867 | /* Skip this field and the next since we don't have anything to report */
4868 | offset += dissect_nmea0183_field_skip(tvb, offset);
4869 | offset += dissect_nmea0183_field_skip(tvb, offset);
4870 | }
4871 | else
4872 | {
4873 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset,
4874 | hf_nmea0183_gns_longitude);
4875 | }
4876 |
4877 | /* Mode Indicator */
4878 | mode_offset = offset;
4879 | mode = nmea0183_field_value(tvb, pinfo, offset);
4880 | if (mode[0] == '\0')
4881 | {
4882 | /* Skip this field since we have nothing to report */
4883 | offset += dissect_nmea0183_field_skip(tvb, offset);
4884 | }
4885 | else
4886 | {
4887 | offset += dissect_nmea0183_field_ret_item(tvb, pinfo, subtree, offset,
4888 | hf_nmea0183_gns_mode_string, &pi);
4889 | pt = proto_item_add_subtree(pi, ett_nmea0183_legacy_satellite_info);
4890 | /* This is a variable length string that uses a table lookup for each character.
4891 | * The first character indicates use of GPS satellites.
4892 | * The second character indicates use of GLONASS satellites.
4893 | * The third to nth character indicates new satellite systems not-yet-incorporated */
4894 | for (int i = 0; mode[i] != '\0'; i++)
4895 | {
4896 | /* GPS Mode Indicator */
4897 | if (i == 0)
4898 | {
4899 | proto_tree_add_item(pt, hf_nmea0183_gns_mode_gps, tvb,
4900 | mode_offset + i, 1, ENC_BIG_ENDIAN0x00000000);
4901 | }
4902 | /* GLONASS Mode Indicator */
4903 | else if (i == 1)
4904 | {
4905 | proto_tree_add_item(pt, hf_nmea0183_gns_mode_glonass, tvb,
4906 | mode_offset + i, 1, ENC_BIG_ENDIAN0x00000000);
4907 | }
4908 | /* Other Satellite System Mode Indicators (1 to n) */
4909 | else
4910 | {
4911 | proto_tree_add_item(pt, hf_nmea0183_gns_mode_other, tvb,
4912 | mode_offset + i, 1, ENC_BIG_ENDIAN0x00000000);
4913 | }
4914 | }
4915 | }
4916 |
4917 | /* Total Number of Satellites in use, 00-99 */
4918 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gns_tot_sats, NULL((void*)0), NULL((void*)0));
4919 |
4920 | /* Horizontal DOP */
4921 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gns_hdop, NULL((void*)0), NULL((void*)0));
4922 |
4923 | /* Antenna Altitude in meters (re: mean-sea-level - geoid) */
4924 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gns_ant_alt, NULL((void*)0), NULL((void*)0));
4925 |
4926 | /* Geoidal Separation in meters */
4927 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gns_geoid_sep, NULL((void*)0), NULL((void*)0));
4928 |
4929 | /* Age of Differential Data */
4930 | value = nmea0183_field_value(tvb, pinfo, offset);
4931 | if (value[0] == '\0')
4932 | {
4933 | proto_tree_add_string(subtree, hf_nmea0183_gns_data_age, tvb, offset, 0,
4934 | "DGPS is not used");
4935 | offset += dissect_nmea0183_field_skip(tvb, offset);
4936 | }
4937 | else
4938 | {
4939 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4940 | hf_nmea0183_gns_data_age, NULL((void*)0), NULL((void*)0));
4941 | }
4942 |
4943 | /* Differential Reference Station ID */
4944 | value = nmea0183_field_value(tvb, pinfo, offset);
4945 | if (value[0] == '\0')
4946 | {
4947 | proto_tree_add_string(subtree, hf_nmea0183_gns_diff_ref_id, tvb, offset, 0, "[None]");
4948 | }
4949 | else
4950 | {
4951 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gns_diff_ref_id, NULL((void*)0), NULL((void*)0));
4952 | }
4953 |
4954 | return tvb_captured_length(tvb);
4955 | }
4956 |
4957 | static int
4958 | dissect_nmea0183_sentence_grs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4959 | {
4960 | unsigned offset = 0;
4961 |
4962 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4963 | NULL((void*)0), "GRS sentence - GNSS Range Residuals");
4964 | /* UTC decoded_time of associated GGA/GNS fix */
4965 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_grs_utc);
4966 |
4967 | /* Mode (residuals) */
4968 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_grs_mode);
4969 |
4970 | /* Can be multiple range residuals */
4971 | while (tvb_captured_length_remaining(tvb, offset) > 0)
4972 | {
4973 | /* Range Residuals */
4974 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
4975 | hf_nmea0183_grs_range_resid, NULL((void*)0), NULL((void*)0));
4976 | }
4977 |
4978 | return tvb_captured_length(tvb);
4979 | }
4980 |
4981 | static int
4982 | dissect_nmea0183_sentence_gsa(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
4983 | {
4984 | unsigned offset = 0;
4985 | const char *value;
4986 | int length;
4987 |
4988 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
4989 | NULL((void*)0), "GSA sentence - GNSS DOP and Active Satellites");
4990 |
4991 | /* Operational Mode - Manual or Automatic */
4992 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_gsa_op_mode);
4993 |
4994 | /* Fix Mode */
4995 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_gsa_fix_mode);
4996 |
4997 | /* 12x Satellite IDs */
4998 | for (int i = 0; i < 12; i++)
4999 | {
5000 | /* Satellite ID */
5001 | value = nmea0183_field_value(tvb, pinfo, offset);
5002 | length = (int)strlen(value);
5003 | if (length == 0)
5004 | {
5005 | proto_tree_add_string(subtree, hf_nmea0183_gsa_sat_id, tvb, offset, 0,
5006 | "[No Satellite]");
5007 | }
5008 | else
5009 | {
5010 | proto_tree_add_string(subtree, hf_nmea0183_gsa_sat_id, tvb, offset, length, value);
5011 | dissect_nmea0183_satellite_type(tvb, pinfo, subtree, offset, length,
5012 | hf_nmea0183_gsa_sat_type, value);
5013 | }
5014 | offset += dissect_nmea0183_field_skip(tvb, offset);
5015 | }
5016 |
5017 | /* Position DOP */
5018 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gsa_pdop, NULL((void*)0), NULL((void*)0));
5019 |
5020 | /* Horizontal DOP */
5021 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gsa_hdop, NULL((void*)0), NULL((void*)0));
5022 |
5023 | /* Vertical DOP */
5024 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gsa_vdop, NULL((void*)0), NULL((void*)0));
5025 |
5026 | return tvb_captured_length(tvb);
5027 | }
5028 |
5029 | static int
5030 | dissect_nmea0183_sentence_gsv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5031 | {
5032 | unsigned offset = 0;
5033 | const char *value;
5034 | int length;
5035 | int satellite_offset;
5036 | proto_item *pi;
5037 | proto_tree *pt;
5038 |
5039 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5040 | NULL((void*)0), "GSV sentence - GNSS Satellites in View");
5041 |
5042 | /* Total Number of Sentences, 1 to 9 */
5043 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gsv_total_sentences, NULL((void*)0), NULL((void*)0));
5044 |
5045 | /* Sentence Number, 1 to 9 */
5046 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gsv_sentence_number, NULL((void*)0), NULL((void*)0));
5047 |
5048 | /* Total Number of Satellites in View */
5049 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_gsv_sats_in_view, NULL((void*)0), NULL((void*)0));
5050 |
5051 | /* Variable number of "Satellite ID-Elevation-Azimuth-SNR" string sets (from 1 to 4) */
5052 | for (int i = 0; i < 4 && tvb_captured_length_remaining(tvb, offset) > 0; i++)
5053 | {
5054 | /* Satellite ID Number (use PRN numbers) */
5055 | satellite_offset = offset;
5056 | value = nmea0183_field_value(tvb, pinfo, offset);
5057 | offset += dissect_nmea0183_field_ret_item(tvb, pinfo, subtree, offset,
5058 | hf_nmea0183_gsv_sat_id, &pi);
5059 | pt = proto_item_add_subtree(pi, ett_nmea0183_legacy_satellite_info);
5060 |
5061 | /* Satellite type based on the numeric PRN range. */
5062 | length = (int)strlen(value);
5063 | dissect_nmea0183_satellite_type(tvb, pinfo, pt, satellite_offset, length,
5064 | hf_nmea0183_gsv_sat_type, value);
5065 |
5066 | /* Elevation, degrees, 90deg maximum */
5067 | offset += dissect_nmea0183_field(tvb, pinfo, pt, offset,
5068 | hf_nmea0183_gsv_elevation, NULL((void*)0), NULL((void*)0));
5069 |
5070 | /* Azimuth, degrees True, 00 to 359 */
5071 | offset += dissect_nmea0183_field(tvb, pinfo, pt, offset,
5072 | hf_nmea0183_gsv_azimuth, NULL((void*)0), NULL((void*)0));
5073 |
5074 | /* SNR (C/No) 00-99 dB-Hz, null when not tracking */
5075 | value = nmea0183_field_value(tvb, pinfo, offset);
5076 | if (value[0] == '\0')
5077 | {
5078 | proto_tree_add_string(pt, hf_nmea0183_gsv_snr, tvb, offset, 0, "Not tracking");
5079 | offset += dissect_nmea0183_field_skip(tvb, offset);
5080 | }
5081 | else
5082 | {
5083 | offset += dissect_nmea0183_field(tvb, pinfo, pt, offset,
5084 | hf_nmea0183_gsv_snr, NULL((void*)0), NULL((void*)0));
5085 | }
5086 | }
5087 |
5088 | return tvb_captured_length(tvb);
5089 | }
5090 |
5091 | static int
5092 | dissect_nmea0183_sentence_hbt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5093 | {
5094 | unsigned offset = 0;
5095 | const char *value;
5096 |
5097 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5098 | NULL((void*)0), "HBT sentence - Heartbeat Supervision Report");
5099 | /* Configured Repeat Interval */
5100 | value = nmea0183_field_value(tvb, pinfo, offset);
5101 | if (value[0] == '\0')
5102 | {
5103 | /* NULL in response to a query */
5104 | proto_tree_add_string(subtree, hf_nmea0183_hbt_interval, tvb, offset, 0,
5105 | "NULL for query");
5106 | offset += dissect_nmea0183_field_skip(tvb, offset);
5107 | }
5108 | else
5109 | {
5110 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
5111 | hf_nmea0183_hbt_interval, NULL((void*)0), NULL((void*)0));
5112 | }
5113 |
5114 | /* Equipment Status (Normal/Abnormal) */
5115 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_hbt_status);
5116 |
5117 | /* Sequential Sentence Identifier */
5118 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hbt_sent_id, NULL((void*)0), NULL((void*)0));
5119 |
5120 | return tvb_captured_length(tvb);
5121 | }
5122 |
5123 | static int
5124 | dissect_nmea0183_sentence_hdg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5125 | {
5126 | unsigned offset = 0;
5127 |
5128 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5129 | NULL((void*)0), "HDG sentence - Heading - Deviation & Variation");
5130 | /* Magnetic Sensor Heading, degrees */
5131 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hdg_mag_sensor, NULL((void*)0), NULL((void*)0));
5132 |
5133 | /* Magnetic Deviation, degrees E/W */
5134 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hdg_mag_dev, NULL((void*)0), NULL((void*)0));
5135 | offset += dissect_nmea0183_field_skip(tvb, offset);
5136 |
5137 | /* Magnetic Variation, degrees E/W */
5138 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hdg_mag_var, NULL((void*)0), NULL((void*)0));
5139 |
5140 | return tvb_captured_length(tvb);
5141 | }
5142 |
5143 | static int
5144 | dissect_nmea0183_sentence_hmr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5145 | {
5146 | unsigned offset = 0;
5147 |
5148 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5149 | NULL((void*)0), "HMR sentence - Heading, Monitor Receive");
5150 | /* Heading Sensor #1 ID */
5151 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_heading_s1, NULL((void*)0), NULL((void*)0));
5152 |
5153 | /* Heading Sensor #2 ID */
5154 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_heading_s2, NULL((void*)0), NULL((void*)0));
5155 |
5156 | /* Difference Limit Setting, degrees */
5157 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_difflim_setting, NULL((void*)0), NULL((void*)0));
5158 |
5159 | /* Actual Heading Sensor Difference, degrees */
5160 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_heading_sdiff, NULL((void*)0), NULL((void*)0));
5161 |
5162 | /* Warning Flag */
5163 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_warning_flag);
5164 |
5165 | /* Heading Reading, Sensor #1, degrees */
5166 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_hr_s1, NULL((void*)0), NULL((void*)0));
5167 |
5168 | /* Status, Sensor #1 */
5169 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_status_s1);
5170 |
5171 | /* Sensor #1 Type */
5172 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_s1_type);
5173 |
5174 | /* Deviation, Sensor #1, degrees */
5175 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_dev_s1, NULL((void*)0), NULL((void*)0));
5176 | offset += dissect_nmea0183_field_skip(tvb, offset);
5177 |
5178 | /* Heading Reading, Sensor #2, degrees */
5179 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_hr_s2, NULL((void*)0), NULL((void*)0));
5180 |
5181 | /* Status, Sensor #2 */
5182 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_status_s2);
5183 |
5184 | /* Sensor #2 Type */
5185 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_s2_type);
5186 |
5187 | /* Deviation, Sensor #2, degrees */
5188 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_dev_s2, NULL((void*)0), NULL((void*)0));
5189 | offset += dissect_nmea0183_field_skip(tvb, offset);
5190 |
5191 | /* Variation, degrees */
5192 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hmr_variation, NULL((void*)0), NULL((void*)0));
5193 |
5194 | return tvb_captured_length(tvb);
5195 | }
5196 |
5197 | static int
5198 | dissect_nmea0183_sentence_hms(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5199 | {
5200 | unsigned offset = 0;
5201 |
5202 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5203 | NULL((void*)0), "HMS sentence - Hyde Marine Systems, Inc.");
5204 | /* Heading, Sensor #1 ID */
5205 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hms_heading_s1, NULL((void*)0), NULL((void*)0));
5206 |
5207 | /* Heading, Sensor #2 ID */
5208 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hms_heading_s2, NULL((void*)0), NULL((void*)0));
5209 |
5210 | /* Maximum Difference (allowed between sensors), degrees */
5211 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hms_max_diff, NULL((void*)0), NULL((void*)0));
5212 |
5213 | return tvb_captured_length(tvb);
5214 | }
5215 |
5216 | static int
5217 | dissect_nmea0183_sentence_hsc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5218 | {
5219 | unsigned offset = 0;
5220 |
5221 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5222 | NULL((void*)0), "HSC sentence - Heading Steering Command");
5223 | /* Commanded Heading, degrees True */
5224 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hsc_heading_true, NULL((void*)0), NULL((void*)0));
5225 | offset += dissect_nmea0183_field_skip(tvb, offset);
5226 |
5227 | /* Commanded Heading, degrees Magnetic */
5228 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_hsc_heading_magnetic, NULL((void*)0), NULL((void*)0));
5229 |
5230 | return tvb_captured_length(tvb);
5231 | }
5232 |
5233 | static int
5234 | dissect_nmea0183_sentence_htc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5235 | {
5236 | unsigned offset = 0;
5237 |
5238 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5239 | NULL((void*)0), "HTC sentence - Heading/Track Control Command");
5240 | /* Override */
5241 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htc_override);
5242 |
5243 | /* Commanded rudder angle, degrees */
5244 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htc_cmd_rudder_angle, NULL((void*)0), NULL((void*)0));
5245 |
5246 | /* Commanded rudder direction, L/R=port/starboard */
5247 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htc_cmd_rudder_dir);
5248 |
5249 | /* Selected Steering Mode */
5250 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htc_steering_mode);
5251 |
5252 | /* Turn Mode */
5253 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htc_turn_mode);
5254 |
5255 | /* Commanded Rudder Limit, degrees (unsigned) */
5256 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htc_cmd_rudder_lim, NULL((void*)0), NULL((void*)0));
5257 |
5258 | /* Commanded Off-heading Limit, degrees (unsigned) */
5259 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htc_cmd_offhead_lim, NULL((void*)0), NULL((void*)0));
5260 |
5261 | /* Commanded Radius of Turn for Heading Changes, n. miles */
5262 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htc_cmd_radius, NULL((void*)0), NULL((void*)0));
5263 |
5264 | /* Commanded Rate of Turn for Heading Changes, deg./minute */
5265 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htc_cmd_rate, NULL((void*)0), NULL((void*)0));
5266 |
5267 | /* Commanded Heading-to-Steer, degrees */
5268 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htc_cmd_steer, NULL((void*)0), NULL((void*)0));
5269 |
5270 | /* Commanded Off-Track Limit, n. miles (unsigned) */
5271 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htc_cmd_offtrack, NULL((void*)0), NULL((void*)0));
5272 |
5273 | /* Commanded Track, degrees */
5274 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htc_cmd_track, NULL((void*)0), NULL((void*)0));
5275 |
5276 | /* Heading Reference in Use, T/M */
5277 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htc_heading_ref);
5278 |
5279 | return tvb_captured_length(tvb);
5280 | }
5281 |
5282 | static int
5283 | dissect_nmea0183_sentence_htd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5284 | {
5285 | unsigned offset = 0;
5286 |
5287 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5288 | NULL((void*)0), "HTD sentence - Heading/Track Control Data");
5289 | /* Override */
5290 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htd_override);
5291 |
5292 | /* Commanded rudder angle, degrees */
5293 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htd_cmd_rudder_angle, NULL((void*)0), NULL((void*)0));
5294 |
5295 | /* Commanded rudder direction, L/R=port/starboard */
5296 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htd_cmd_rudder_dir);
5297 |
5298 | /* Selected Steering Mode */
5299 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htd_steering_mode);
5300 |
5301 | /* Turn Mode */
5302 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htd_turn_mode);
5303 |
5304 | /* Commanded Rudder Limit, degrees (unsigned) */
5305 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htd_cmd_rudder_lim, NULL((void*)0), NULL((void*)0));
5306 |
5307 | /* Commanded Off-heading Limit, degrees (unsigned) */
5308 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htd_cmd_offhead_lim, NULL((void*)0), NULL((void*)0));
5309 |
5310 | /* Commanded Radius of Turn for Heading Changes, n. miles */
5311 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htd_cmd_radius, NULL((void*)0), NULL((void*)0));
5312 |
5313 | /* Commanded Rate of Turn for Heading Changes, deg./minute */
5314 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htd_cmd_rate, NULL((void*)0), NULL((void*)0));
5315 |
5316 | /* Commanded Heading-to-Steer, degrees */
5317 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htd_cmd_steer, NULL((void*)0), NULL((void*)0));
5318 |
5319 | /* Commanded Off-Track Limit, n. miles (unsigned) */
5320 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htd_cmd_offtrack, NULL((void*)0), NULL((void*)0));
5321 |
5322 | /* Commanded Track, degrees */
5323 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htd_cmd_track, NULL((void*)0), NULL((void*)0));
5324 |
5325 | /* Heading Reference in Use, T/M */
5326 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htd_heading_ref);
5327 |
5328 | /* Rudder Status */
5329 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htd_rudder_status);
5330 |
5331 | /* Off-heading Status */
5332 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htd_offhdng_status);
5333 |
5334 | /* Off-Track Status */
5335 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_htd_offtrack_status);
5336 |
5337 | /* Vessel Heading, degrees */
5338 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_htd_vessel_heading, NULL((void*)0), NULL((void*)0));
5339 |
5340 | return tvb_captured_length(tvb);
5341 | }
5342 |
5343 | static int
5344 | dissect_nmea0183_sentence_lcd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5345 | {
5346 | unsigned offset = 0;
5347 |
5348 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5349 | NULL((void*)0), "LCD sentence - Loran-C Signal Data");
5350 | /* GRI, tens of microseconds */
5351 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_gri, NULL((void*)0), NULL((void*)0));
5352 |
5353 | /* Master - SNR */
5354 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_master_snr, NULL((void*)0), NULL((void*)0));
5355 |
5356 | /* Master - Pulse Shape (ECD) */
5357 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_master_ecd, NULL((void*)0), NULL((void*)0));
5358 |
5359 | /* Secondary 1 - SNR */
5360 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_s1_snr, NULL((void*)0), NULL((void*)0));
5361 |
5362 | /* Secondary 1 - Pulse Shape (ECD) */
5363 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_s1_ecd, NULL((void*)0), NULL((void*)0));
5364 |
5365 | /* Secondary 2 - SNR */
5366 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_s2_snr, NULL((void*)0), NULL((void*)0));
5367 |
5368 | /* Secondary 2 - Pulse Shape (ECD) */
5369 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_s2_ecd, NULL((void*)0), NULL((void*)0));
5370 |
5371 | /* Secondary 3 - SNR */
5372 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_s3_snr, NULL((void*)0), NULL((void*)0));
5373 |
5374 | /* Secondary 3 - Pulse Shape (ECD) */
5375 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_s3_ecd, NULL((void*)0), NULL((void*)0));
5376 |
5377 | /* Secondary 4 - SNR */
5378 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_s4_snr, NULL((void*)0), NULL((void*)0));
5379 |
5380 | /* Secondary 4 - Pulse Shape (ECD) */
5381 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_s4_ecd, NULL((void*)0), NULL((void*)0));
5382 |
5383 | /* Secondary 5 - SNR */
5384 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_s5_snr, NULL((void*)0), NULL((void*)0));
5385 |
5386 | /* Secondary 5 - Pulse Shape (ECD) */
5387 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lcd_s5_ecd, NULL((void*)0), NULL((void*)0));
5388 |
5389 | return tvb_captured_length(tvb);
5390 | }
5391 |
5392 | static int
5393 | dissect_nmea0183_sentence_lrf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5394 | {
5395 | unsigned offset = 0;
5396 | const char *value;
5397 | int field_offset;
5398 |
5399 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5400 | NULL((void*)0), "LRF sentence - UAIS Long-Range Function");
5401 | /* Sequence Number, 0 to 9 */
5402 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lrf_seqnum, NULL((void*)0), NULL((void*)0));
5403 |
5404 | /* MMSI of Requestor */
5405 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lrf_mmsi, NULL((void*)0), NULL((void*)0));
5406 |
5407 | /* Name of Requestor */
5408 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lrf_name, NULL((void*)0), NULL((void*)0));
5409 |
5410 | /* Function Request, 1 to 26 characters */
5411 | field_offset = offset;
5412 | value = nmea0183_field_value(tvb, pinfo, offset);
5413 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lrf_function_req, NULL((void*)0), NULL((void*)0));
5414 |
5415 | /* This is a variable length string that uses a table lookup for each character. */
5416 | for (int i = 0; value[i] != '\0'; i++)
5417 | {
5418 | /* Add each function request by looking it up and resolving it. */
5419 | proto_tree_add_item(subtree, hf_nmea0183_lrf_function_req_val, tvb,
5420 | field_offset + i, 1, ENC_BIG_ENDIAN0x00000000);
5421 | }
5422 | offset += dissect_nmea0183_field_skip(tvb, offset);
5423 |
5424 | /* Function Reply Status */
5425 | field_offset = offset;
5426 | value = nmea0183_field_value(tvb, pinfo, offset);
5427 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lrf_function_rep, NULL((void*)0), NULL((void*)0));
5428 |
5429 | /* This is a variable length string that uses a table lookup for each character. */
5430 | for (int i = 0; value[i] != '\0'; i++)
5431 | {
5432 | /* Add each function reply by looking it up and resolving it. */
5433 | proto_tree_add_item(subtree, hf_nmea0183_lrf_function_rep_val, tvb,
5434 | field_offset + i, 1, ENC_BIG_ENDIAN0x00000000);
5435 | }
5436 |
5437 | return tvb_captured_length(tvb);
5438 | }
5439 |
5440 | static int
5441 | dissect_nmea0183_sentence_lri(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5442 | {
5443 | unsigned offset = 0;
5444 |
5445 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5446 | NULL((void*)0), "LRI sentence - UAIS Long-Range Interrogation");
5447 | /* Sequence Number, 0 to 9 */
5448 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lri_seqnum, NULL((void*)0), NULL((void*)0));
5449 |
5450 | /* Control Flag */
5451 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset,
5452 | hf_nmea0183_lri_control);
5453 |
5454 | /* MMSI of Requestor */
5455 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lri_req_mmsi, NULL((void*)0), NULL((void*)0));
5456 |
5457 | /* MMSI of Destination */
5458 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lri_dest_mmsi, NULL((void*)0), NULL((void*)0));
5459 |
5460 | /* NE Corner Latitude */
5461 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_lri_latitude_ne);
5462 |
5463 | /* NE Corner Longitude */
5464 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_lri_longitude_ne);
5465 |
5466 | /* SW Corner Latitude */
5467 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_lri_latitude_sw);
5468 |
5469 | /* SW Corner Longitude */
5470 | dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset,
5471 | hf_nmea0183_lri_longitude_sw);
5472 |
5473 | return tvb_captured_length(tvb);
5474 | }
5475 |
5476 | static int
5477 | dissect_nmea0183_sentence_lr1(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5478 | {
5479 | unsigned offset = 0;
5480 |
5481 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5482 | NULL((void*)0), "LR1 sentence - UAIS Long-range Reply Sentence 1");
5483 | /* Sequence Number, 0 to 9 */
5484 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lr1_seqnum, NULL((void*)0), NULL((void*)0));
5485 |
5486 | /* MMSI of Responder */
5487 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lr1_resp_mmsi, NULL((void*)0), NULL((void*)0));
5488 |
5489 | /* MMSI of Requestor */
5490 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lr1_req_mmsi, NULL((void*)0), NULL((void*)0));
5491 |
5492 | /* Ship's Name */
5493 | offset += dissect_nmea0183_field_response(tvb, pinfo, subtree, offset,
5494 | hf_nmea0183_lr1_shipname, "Ship's Name", false0);
5495 |
5496 | /* Call Sign */
5497 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lr1_callsign, NULL((void*)0), NULL((void*)0));
5498 |
5499 | /* IMO Number */
5500 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lr1_imo_num, NULL((void*)0), NULL((void*)0));
5501 |
5502 | return tvb_captured_length(tvb);
5503 | }
5504 |
5505 | static int
5506 | dissect_nmea0183_sentence_lr2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5507 | {
5508 | unsigned offset = 0;
5509 |
5510 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5511 | NULL((void*)0), "LR2 sentence - UAIS Long-range Reply Sentence 2");
5512 |
5513 | /* Sequence Number, 0 to 9 */
5514 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lr2_seqnum, NULL((void*)0), NULL((void*)0));
5515 |
5516 | /* MMSI of Responder */
5517 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lr2_resp_mmsi, NULL((void*)0), NULL((void*)0));
5518 |
5519 | /* Date (ddmmyyyy) */
5520 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lr2_date, NULL((void*)0), NULL((void*)0));
5521 |
5522 | /* UTC of Position */
5523 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_lr2_utc);
5524 |
5525 | /* Latitude */
5526 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_lr2_latitude);
5527 |
5528 | /* Longitude */
5529 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_lr2_longitude);
5530 |
5531 | /* Course over ground, degrees True */
5532 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lr2_course_ground, NULL((void*)0), NULL((void*)0));
5533 | offset += dissect_nmea0183_field_skip(tvb, offset);
5534 |
5535 | /* Speed over ground, knots */
5536 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_lr2_speed_ground, NULL((void*)0), NULL((void*)0));
5537 |
5538 | return tvb_captured_length(tvb);
5539 | }
5540 |
5541 | static int
5542 | dissect_nmea0183_sentence_lr3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5543 | {
5544 | unsigned offset = 0;
5545 |
5546 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5547 | NULL((void*)0), "LR3 sentence - UAIS Long-range Reply Sentence 3");
5548 |
5549 | /* Sequence Number, 0 to 9 */
5550 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
5551 | hf_nmea0183_lr3_seqnum, NULL((void*)0), NULL((void*)0));
5552 |
5553 | /* MMSI of Responder */
5554 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
5555 | hf_nmea0183_lr3_resp_mmsi, NULL((void*)0), NULL((void*)0));
5556 |
5557 | /* Voyage Destination, 1 to 20 characters */
5558 | offset += dissect_nmea0183_field_response(tvb, pinfo, subtree, offset,
5559 | hf_nmea0183_lr3_destination,
5560 | "Voyage Destination", false0);
5561 |
5562 | /* ETA Date (ddmmyyyy) */
5563 | offset += dissect_nmea0183_field_response(tvb, pinfo, subtree, offset,
5564 | hf_nmea0183_lr3_eta_date,
5565 | "ETA Date (ddmmyyyy)", false0);
5566 |
5567 | /* ETA Time */
5568 | offset += dissect_nmea0183_field_response(tvb, pinfo, subtree, offset,
5569 | hf_nmea0183_lr3_eta_time,
5570 | "ETA Time (hhmmss.ss)", true1);
5571 |
5572 | /* Draught */
5573 | offset += dissect_nmea0183_field_response(tvb, pinfo, subtree, offset,
5574 | hf_nmea0183_lr3_draught,
5575 | "Draught", false0);
5576 |
5577 | /* Ship's Cargo */
5578 | offset += dissect_nmea0183_field_response(tvb, pinfo, subtree, offset,
5579 | hf_nmea0183_lr3_ship_cargo,
5580 | "Ship's Cargo", false0);
5581 |
5582 | /* Ship's Length */
5583 | offset += dissect_nmea0183_field_response(tvb, pinfo, subtree, offset,
5584 | hf_nmea0183_lr3_ship_length,
5585 | "Ship's Length", false0);
5586 |
5587 | /* Ship's Breadth */
5588 | offset += dissect_nmea0183_field_response(tvb, pinfo, subtree, offset,
5589 | hf_nmea0183_lr3_ship_breadth,
5590 | "Ship's Breadth", false0);
5591 |
5592 | /* Ship Type */
5593 | offset += dissect_nmea0183_field_response(tvb, pinfo, subtree, offset,
5594 | hf_nmea0183_lr3_ship_type,
5595 | "Ship Type", false0);
5596 |
5597 | /* Persons, 0 to 8191, 8191 means greater than or equal to 8191 people */
5598 | dissect_nmea0183_field_response(tvb, pinfo, subtree, offset,
5599 | hf_nmea0183_lr3_persons,
5600 | "Personnel Aboard", false0);
5601 |
5602 | return tvb_captured_length(tvb);
5603 | }
5604 |
5605 | static int
5606 | dissect_nmea0183_sentence_mla(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5607 | {
5608 | unsigned offset = 0;
5609 |
5610 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5611 | NULL((void*)0), "MLA sentence - GLONASS Almanac Data");
5612 | /* Total Number of Sentences */
5613 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_total_sentences, NULL((void*)0), NULL((void*)0));
5614 |
5615 | /* Sentence Number */
5616 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_sentence_number, NULL((void*)0), NULL((void*)0));
5617 |
5618 | /* Satellite ID (satellite slot) number */
5619 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_sat_id, NULL((void*)0), NULL((void*)0));
5620 |
5621 | /* NA, calendar day count within the four year period beginning with the previous leap year */
5622 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_calday_count, NULL((void*)0), NULL((void*)0));
5623 |
5624 | /* CnA and HnA, generalized health of the satellite and carrier frequency number respectively */
5625 | /* TODO: This is a 2-character hexadecimal bitmask (ref: GLONASS ICD, 1995) and should
5626 | * probably be two separate fields once the bitmask is understood. */
5627 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_sat_health, NULL((void*)0), NULL((void*)0));
5628 |
5629 | /* e, Eccentricity */
5630 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_eccentricity, NULL((void*)0), NULL((void*)0));
5631 |
5632 | /* DOT, rate of change of the draconitic circling decoded_time */
5633 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_roc_circling, NULL((void*)0), NULL((void*)0));
5634 |
5635 | /* Argument of Perigee */
5636 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_perigee, NULL((void*)0), NULL((void*)0));
5637 |
5638 | /* 16 MSB of system decoded_time scale correction */
5639 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_16msb_corr_t_scale, NULL((void*)0), NULL((void*)0));
5640 |
5641 | /* Correction to the average value of the draconitic circling decoded_time */
5642 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_corr_circling, NULL((void*)0), NULL((void*)0));
5643 |
5644 | /* Time of the Ascension Node, Almanac Reference Time */
5645 | /* TODO: This is a 2-character hexadecimal bitmask (ref: GLONASS ICD, 1995, Section 4.5, Table 4.3)
5646 | * and should probably be two separate fields once the bitmask is understood. */
5647 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_t_asc_node, NULL((void*)0), NULL((void*)0));
5648 |
5649 | /* Greenwich Longitude of the Ascension Node */
5650 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_long_asc_node, NULL((void*)0), NULL((void*)0));
5651 |
5652 | /* Correction to the average value of the inclination angle */
5653 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_corr_incl_angle, NULL((void*)0), NULL((void*)0));
5654 |
5655 | /* 12 LSB of system decoded_time scale correction */
5656 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_12lsb_corr_t_scale, NULL((void*)0), NULL((void*)0));
5657 |
5658 | /* Course Value of the Time Scale Shift */
5659 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mla_t_scale_shift, NULL((void*)0), NULL((void*)0));
5660 |
5661 | return tvb_captured_length(tvb);
5662 | }
5663 |
5664 | static int
5665 | dissect_nmea0183_sentence_msk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5666 | {
5667 | unsigned offset = 0;
5668 |
5669 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5670 | NULL((void*)0), "MSK sentence - Control for a Beacon Receiver");
5671 | /* Beacon Frequency, 283.5 - 325.0 kHz */
5672 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_msk_beacon_freq, NULL((void*)0), NULL((void*)0));
5673 |
5674 | /* Auto/Manual Frequency */
5675 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_msk_am_freq);
5676 |
5677 | /* Beacon Bit Rate (25, 50, 100, or 200) bits per second */
5678 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_msk_beacon_bitrate, NULL((void*)0), NULL((void*)0));
5679 |
5680 | /* Auto/Manual Bit Rate */
5681 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_msk_am_bitrate);
5682 |
5683 | /* Interval for sending MSS status, seconds */
5684 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_msk_interval, NULL((void*)0), NULL((void*)0));
5685 |
5686 | /* Channel Number */
5687 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_msk_channel, NULL((void*)0), NULL((void*)0));
5688 |
5689 | return tvb_captured_length(tvb);
5690 | }
5691 |
5692 | static int
5693 | dissect_nmea0183_sentence_mss(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5694 | {
5695 | unsigned offset = 0;
5696 |
5697 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5698 | NULL((void*)0), "MSS sentence - Beacon Receiver Status");
5699 | /* Signal Strength (SS), dB re: 1 uV/m */
5700 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mss_sig_str, NULL((void*)0), NULL((void*)0));
5701 |
5702 | /* Signal-to-Noise Ratio (SNR), dB */
5703 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mss_snr, NULL((void*)0), NULL((void*)0));
5704 |
5705 | /* Beacon Frequency, 283.5-325.0 kHz */
5706 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mss_beacon_freq, NULL((void*)0), NULL((void*)0));
5707 |
5708 | /* Beacon bit rate (25, 50, 100, or 200) bits per second */
5709 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mss_beacon_bitrate, NULL((void*)0), NULL((void*)0));
5710 |
5711 | /* Channel Number */
5712 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mss_channel, NULL((void*)0), NULL((void*)0));
5713 |
5714 | return tvb_captured_length(tvb);
5715 | }
5716 |
5717 | static int
5718 | dissect_nmea0183_sentence_mtw(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5719 | {
5720 | unsigned offset = 0;
5721 |
5722 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5723 | NULL((void*)0), "MTW sentence - Mean Temperature of Water");
5724 |
5725 | /* Temperature (in Celsius) */
5726 | dissect_nmea0183_field_with_unit(tvb, pinfo, subtree, offset, hf_nmea0183_mtw_temp);
5727 |
5728 | return tvb_captured_length(tvb);
5729 | }
5730 |
5731 | static int
5732 | dissect_nmea0183_sentence_mwd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5733 | {
5734 | unsigned offset = 0;
5735 |
5736 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5737 | NULL((void*)0), "MWD sentence - Wind Direction & Speed");
5738 | /* Wind Direction, degrees True */
5739 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mwd_direction_true, NULL((void*)0), NULL((void*)0));
5740 | offset += dissect_nmea0183_field_skip(tvb, offset);
5741 |
5742 | /* Wind Direction, degrees Magnetic */
5743 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mwd_direction_mag, NULL((void*)0), NULL((void*)0));
5744 | offset += dissect_nmea0183_field_skip(tvb, offset);
5745 |
5746 | /* Wind Speed, knots */
5747 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mwd_speed_knots, NULL((void*)0), NULL((void*)0));
5748 | offset += dissect_nmea0183_field_skip(tvb, offset);
5749 |
5750 | /* Wind Speed, meters/second */
5751 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mwd_speed_ms, NULL((void*)0), NULL((void*)0));
5752 |
5753 | return tvb_captured_length(tvb);
5754 | }
5755 |
5756 | static int
5757 | dissect_nmea0183_sentence_mwv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5758 | {
5759 | unsigned offset = 0;
5760 |
5761 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5762 | NULL((void*)0), "MWV sentence - Wind Speed and Angle");
5763 | /* Wind Angle, 0 to 359 degrees */
5764 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mwv_wind_angle, NULL((void*)0), NULL((void*)0));
5765 |
5766 | /* Reference, R = Relative and T = Theoretical */
5767 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_mwv_reference);
5768 |
5769 | /* Wind Speed */
5770 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_mwv_wind_speed, NULL((void*)0), NULL((void*)0));
5771 |
5772 | /* Wind speed units, K/M/N/S */
5773 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_mwv_speed_units);
5774 |
5775 | /* Data Status */
5776 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_mwv_status);
5777 |
5778 | return tvb_captured_length(tvb);
5779 | }
5780 |
5781 | static int
5782 | dissect_nmea0183_sentence_osd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5783 | {
5784 | unsigned offset = 0;
5785 |
5786 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5787 | NULL((void*)0), "OSD sentence - Own Ship Data");
5788 | /* Heading, degrees True */
5789 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_osd_heading_true, NULL((void*)0), NULL((void*)0));
5790 |
5791 | /* Heading Status */
5792 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_osd_heading_status);
5793 |
5794 | /* Vessel Course, degrees True */
5795 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_osd_course_true, NULL((void*)0), NULL((void*)0));
5796 |
5797 | /* Course Reference */
5798 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_osd_course_ref);
5799 |
5800 | /* Vessel Speed */
5801 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_osd_speed, NULL((void*)0), NULL((void*)0));
5802 |
5803 | /* Speed Reference */
5804 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_osd_speed_ref);
5805 |
5806 | /* Vessel Set, degrees True */
5807 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_osd_set_true, NULL((void*)0), NULL((void*)0));
5808 |
5809 | /* Vessel Drift (speed) */
5810 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_osd_drift, NULL((void*)0), NULL((void*)0));
5811 |
5812 | /* Speed Units (K/N/S) */
5813 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_osd_speed_units);
5814 |
5815 | return tvb_captured_length(tvb);
5816 | }
5817 |
5818 | static int
5819 | dissect_nmea0183_sentence_rma(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5820 | {
5821 | unsigned offset = 0;
5822 |
5823 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5824 | NULL((void*)0), "RMA sentence - Recommended Minimum Specific Loran-C Data");
5825 |
5826 | /* Data Status */
5827 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rma_status);
5828 |
5829 | /* Latitude */
5830 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_rma_latitude);
5831 |
5832 | /* Longitude */
5833 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_rma_longitude);
5834 |
5835 | /* Time Difference A (microseconds) */
5836 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rma_time_diff_a, NULL((void*)0), NULL((void*)0));
5837 |
5838 | /* Time Difference B (microseconds) */
5839 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rma_time_diff_b, NULL((void*)0), NULL((void*)0));
5840 |
5841 | /* Speed over Ground, knots */
5842 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rma_speed, NULL((void*)0), NULL((void*)0));
5843 |
5844 | /* Course over Ground, degrees True */
5845 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rma_course, NULL((void*)0), NULL((void*)0));
5846 |
5847 | /* Magnetic Variation, degrees E/W */
5848 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rma_mag_var, NULL((void*)0), NULL((void*)0));
5849 | offset += dissect_nmea0183_field_skip(tvb, offset);
5850 |
5851 | /* Mode Indicator */
5852 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rma_mode);
5853 |
5854 | return tvb_captured_length(tvb);
5855 | }
5856 |
5857 | static int
5858 | dissect_nmea0183_sentence_rmb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5859 | {
5860 | unsigned offset = 0;
5861 |
5862 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5863 | NULL((void*)0), "RMB sentence - Recommended Minimum Navigation Information");
5864 |
5865 | /* Data Status */
5866 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_data_status);
5867 |
5868 | /* Cross Track Error (XTE) */
5869 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_xte, NULL((void*)0), NULL((void*)0));
5870 |
5871 | /* Direction to Steer */
5872 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_steer);
5873 |
5874 | /* Origin Waypoint ID */
5875 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_orig_id, NULL((void*)0), NULL((void*)0));
5876 |
5877 | /* Destination Waypoint ID */
5878 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_dest_id, NULL((void*)0), NULL((void*)0));
5879 |
5880 | /* Destination Waypoint Latitude */
5881 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_dest_wp_latitude);
5882 |
5883 | /* Destination Waypoint Longitude */
5884 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_dest_wp_longitude);
5885 |
5886 | /* Range to Destination, nautical miles */
5887 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_range_dest, NULL((void*)0), NULL((void*)0));
5888 |
5889 | /* Bearing to Destination, degrees True */
5890 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_bearing_dest, NULL((void*)0), NULL((void*)0));
5891 |
5892 | /* Destination Closing Velocity, knots */
5893 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_dest_velocity, NULL((void*)0), NULL((void*)0));
5894 |
5895 | /* Arrival Status */
5896 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_arrival_status);
5897 |
5898 | /* Mode Indicator */
5899 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rmb_mode);
5900 |
5901 | return tvb_captured_length(tvb);
5902 | }
5903 |
5904 | static int
5905 | dissect_nmea0183_sentence_rmc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5906 | {
5907 | unsigned offset = 0;
5908 | const char *direction;
5909 | const char *value;
5910 | int length;
5911 |
5912 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5913 | NULL((void*)0), "RMC sentence - Recommended Minimum Specific GNSS Data");
5914 |
5915 | /* UTC of Position Fix */
5916 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_rmc_utc);
5917 |
5918 | /* Data Status */
5919 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rmc_status);
5920 |
5921 | /* Latitude */
5922 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_rmc_latitude);
5923 |
5924 | /* Longitude */
5925 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_rmc_longitude);
5926 |
5927 | /* Speed over ground (knots) */
5928 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rmc_speed, NULL((void*)0), NULL((void*)0));
5929 |
5930 | /* Course Over Ground (degrees true) */
5931 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rmc_course, NULL((void*)0), NULL((void*)0));
5932 |
5933 | /* Date: ddmmyy */
5934 | offset += dissect_nmea0183_field_decoded_date(tvb, pinfo, subtree, offset, hf_nmea0183_rmc_date);
5935 |
5936 | /* Magnetic Variation, degrees E/W */
5937 | value = nmea0183_field_value(tvb, pinfo, offset);
5938 | length = (int)strlen(value);
5939 | if (length == 0)
5940 | {
5941 | /* Sometimes this field is empty. */
5942 | proto_tree_add_string(subtree, hf_nmea0183_rmc_magnetic, tvb, offset, 0,
5943 | "Data temporarily unavailable");
5944 | offset += dissect_nmea0183_field_skip(tvb, offset);
5945 |
5946 | direction = nmea0183_field_value(tvb, pinfo, offset);
5947 | if (direction[0] == '\0' || strcmp(direction, "E") == 0 ||
5948 | strcmp(direction, "W") == 0)
5949 | {
5950 | offset += dissect_nmea0183_field_skip(tvb, offset);
5951 | }
5952 | else
5953 | {
5954 | /* The magnetic variation direction field was omitted. */
5955 | expert_add_info(pinfo, tree, &ei_nmea0183_legacy_nonstandard);
5956 | }
5957 | }
5958 | else
5959 | {
5960 | /* Easterly variation subtracts from True course / Westerly adds to True course */
5961 | int magnetic_offset = offset;
5962 |
5963 | offset += dissect_nmea0183_field_skip(tvb, offset);
5964 | direction = nmea0183_field_value(tvb, pinfo, offset);
5965 | if (strcmp(direction, "E") == 0)
5966 | {
5967 | proto_tree_add_string_format_value(subtree, hf_nmea0183_rmc_magnetic, tvb,
5968 | magnetic_offset, length, value,
5969 | "%s E (subtract from True Course)", value);
5970 | offset += dissect_nmea0183_field_skip(tvb, offset);
5971 | }
5972 | else if (strcmp(direction, "W") == 0)
5973 | {
5974 | proto_tree_add_string_format_value(subtree, hf_nmea0183_rmc_magnetic, tvb,
5975 | magnetic_offset, length, value,
5976 | "%s W (add to True Course)", value);
5977 | offset += dissect_nmea0183_field_skip(tvb, offset);
5978 | }
5979 | else
5980 | {
5981 | proto_tree_add_string(subtree, hf_nmea0183_rmc_magnetic, tvb,
5982 | magnetic_offset, length, value);
5983 | expert_add_info(pinfo, tree, &ei_nmea0183_legacy_nonstandard);
5984 | }
5985 | }
5986 |
5987 | /* Mode Indicator */
5988 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rmc_mode);
5989 |
5990 | return tvb_captured_length(tvb);
5991 | }
5992 |
5993 | static int
5994 | dissect_nmea0183_sentence_rpm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
5995 | {
5996 | unsigned offset = 0;
5997 |
5998 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
5999 | NULL((void*)0), "RPM sentence - Revolutions");
6000 | /* Source, shaft/engine */
6001 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rpm_source);
6002 |
6003 | /* Engine or Shaft Number, numbered from centerline */
6004 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rpm_number);
6005 |
6006 | /* Speed, rev/min where negative numbers represent counter-clockwise */
6007 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rpm_speed, NULL((void*)0), NULL((void*)0));
6008 |
6009 | /* Propeller Pitch, % of max */
6010 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rpm_pitch, NULL((void*)0), NULL((void*)0));
6011 |
6012 | /* Data Status */
6013 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rpm_status);
6014 |
6015 | return tvb_captured_length(tvb);
6016 | }
6017 |
6018 | static int
6019 | dissect_nmea0183_sentence_rsa(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6020 | {
6021 | unsigned offset = 0;
6022 |
6023 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6024 | NULL((void*)0), "RSA sentence - Rudder Sensor Angle");
6025 | /* Starboard (or single) Rudder Sensor */
6026 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsa_sb_sensor, NULL((void*)0), NULL((void*)0));
6027 |
6028 | /* Starboard sensor status */
6029 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rsa_sb_status);
6030 |
6031 | /* Port Rudder Sensor */
6032 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsa_pt_sensor, NULL((void*)0), NULL((void*)0));
6033 |
6034 | /* Port sensor status */
6035 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rsa_pt_status);
6036 |
6037 | return tvb_captured_length(tvb);
6038 | }
6039 |
6040 | static int
6041 | dissect_nmea0183_sentence_rsd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6042 | {
6043 | unsigned offset = 0;
6044 |
6045 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6046 | NULL((void*)0), "RSD sentence - RADAR System Data");
6047 | /* Origin 1 range, from own ship */
6048 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_orig_range, NULL((void*)0), NULL((void*)0));
6049 |
6050 | /* Origin 1 bearing, degrees from 0 */
6051 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_orig_bearing, NULL((void*)0), NULL((void*)0));
6052 |
6053 | /* Variable Range Marker 1 (VRM1), range */
6054 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_vrm1, NULL((void*)0), NULL((void*)0));
6055 |
6056 | /* Bearing Line 1 (EBL1), degrees from 0 */
6057 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_ebl1, NULL((void*)0), NULL((void*)0));
6058 |
6059 | /* Origin 2 range */
6060 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_orig2_range, NULL((void*)0), NULL((void*)0));
6061 |
6062 | /* VRM2, range */
6063 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_vrm2, NULL((void*)0), NULL((void*)0));
6064 | /* EBL2, degrees */
6065 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_ebl2, NULL((void*)0), NULL((void*)0));
6066 |
6067 | /* Cursor range, from own ship */
6068 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_cursor_range, NULL((void*)0), NULL((void*)0));
6069 |
6070 | /* Cursor bearing, degrees clockwise from 0 */
6071 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_cursor_bearing, NULL((void*)0), NULL((void*)0));
6072 |
6073 | /* Range scale in use */
6074 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_scale, NULL((void*)0), NULL((void*)0));
6075 |
6076 | /* Range units */
6077 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_units);
6078 |
6079 | /* Display Rotation */
6080 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rsd_display);
6081 |
6082 | return tvb_captured_length(tvb);
6083 | }
6084 |
6085 | static int
6086 | dissect_nmea0183_sentence_rte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6087 | {
6088 | unsigned offset = 0;
6089 |
6090 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6091 | NULL((void*)0), "RTE sentence - Routes");
6092 | /* Total number of sentences being transmitted */
6093 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rte_total_sentences, NULL((void*)0), NULL((void*)0));
6094 |
6095 | /* Sentence Number */
6096 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rte_sentence_number, NULL((void*)0), NULL((void*)0));
6097 |
6098 | /* Sentence Mode */
6099 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_rte_sentence_mode);
6100 |
6101 | /* Route Identifier */
6102 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_rte_route, NULL((void*)0), NULL((void*)0));
6103 |
6104 | /* There can be 1 to n waypoint identifiers so we loop through them all */
6105 | while (tvb_captured_length_remaining(tvb, offset) > 0)
6106 | {
6107 | /* Waypoint identifier */
6108 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
6109 | hf_nmea0183_rte_waypoint, NULL((void*)0), NULL((void*)0));
6110 | }
6111 |
6112 | return tvb_captured_length(tvb);
6113 | }
6114 |
6115 | static int
6116 | dissect_nmea0183_sentence_sfi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6117 | {
6118 | unsigned offset = 0;
6119 |
6120 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6121 | NULL((void*)0), "SFI sentence - Scanning Frequency Information");
6122 | /* Total number of sentences being transmitted */
6123 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_sfi_total_sentences, NULL((void*)0), NULL((void*)0));
6124 |
6125 | /* Sentence Number */
6126 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_sfi_sentence_number, NULL((void*)0), NULL((void*)0));
6127 |
6128 | /* There can be up to 6 of these freq+mode pairs */
6129 | for (int i = 0; i < 6 && tvb_captured_length_remaining(tvb, offset) > 0; i++)
6130 | {
6131 | /* Frequency or ITU Channel (100 Hz increments) */
6132 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
6133 | hf_nmea0183_sfi_frequency, NULL((void*)0), NULL((void*)0));
6134 |
6135 | /* Mode of Operation */
6136 | if (tvb_captured_length_remaining(tvb, offset) > 0)
6137 | {
6138 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset,
6139 | hf_nmea0183_sfi_mode);
6140 | }
6141 | }
6142 |
6143 | return tvb_captured_length(tvb);
6144 | }
6145 |
6146 | static int
6147 | dissect_nmea0183_sentence_ssd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6148 | {
6149 | unsigned offset = 0;
6150 |
6151 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6152 | NULL((void*)0), "SSD sentence - Saab AB, Security & Defense Solutions, Command and Control Systems Division (Sweden)");
6153 | /* Ship's Callsign */
6154 | /* Note: Callsign of "@@@@@@@" means unavailable */
6155 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ssd_callsign, NULL((void*)0), NULL((void*)0));
6156 |
6157 | /* Ship's Name */
6158 | /* Note: Ship's name of "@@@@@@@@@@@@@@@@@@@@" means unavailable */
6159 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ssd_name, NULL((void*)0), NULL((void*)0));
6160 |
6161 | /* Pos. ref. point distance, "A," from bow 3, 0 to 511 meters */
6162 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ssd_ref_a, NULL((void*)0), NULL((void*)0));
6163 |
6164 | /* Pos. ref. point distance, "B," from stern 3, 0 to 511 Meters */
6165 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ssd_ref_b, NULL((void*)0), NULL((void*)0));
6166 |
6167 | /* Pos. ref. point distance, "C," from port beam 3, 0 to 63 Meters */
6168 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ssd_ref_c, NULL((void*)0), NULL((void*)0));
6169 |
6170 | /* Pos. ref. point distance, "D," from starboard beam 3, 0 to 63 Meters */
6171 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ssd_ref_d, NULL((void*)0), NULL((void*)0));
6172 |
6173 | /* DTE Indicator Flag */
6174 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_ssd_dte_flag);
6175 |
6176 | /* Source Identifier */
6177 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ssd_source, NULL((void*)0), NULL((void*)0));
6178 |
6179 | return tvb_captured_length(tvb);
6180 | }
6181 |
6182 | static int
6183 | dissect_nmea0183_sentence_stn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6184 | {
6185 | unsigned offset = 0;
6186 |
6187 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6188 | NULL((void*)0), "STN sentence - Multiple Data ID");
6189 | /* Talker ID Number (00-99) */
6190 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_stn_talker, NULL((void*)0), NULL((void*)0));
6191 |
6192 | return tvb_captured_length(tvb);
6193 | }
6194 |
6195 | static int
6196 | dissect_nmea0183_sentence_tlb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6197 | {
6198 | unsigned offset = 0;
6199 |
6200 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6201 | NULL((void*)0), "TLB sentence - Target Label");
6202 | /* There can be 1 to n of these target + label pairs */
6203 | while (tvb_captured_length_remaining(tvb, offset) > 0)
6204 | {
6205 | /* Target number 'n' reported by the device */
6206 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
6207 | hf_nmea0183_tlb_target, NULL((void*)0), NULL((void*)0));
6208 |
6209 | /* Label assigned to target 'n' */
6210 | if (tvb_captured_length_remaining(tvb, offset) > 0)
6211 | {
6212 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
6213 | hf_nmea0183_tlb_label, NULL((void*)0), NULL((void*)0));
6214 | }
6215 | }
6216 |
6217 | return tvb_captured_length(tvb);
6218 | }
6219 |
6220 | static int
6221 | dissect_nmea0183_sentence_tll(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6222 | {
6223 | unsigned offset = 0;
6224 |
6225 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6226 | NULL((void*)0), "TLL sentence - Target Latitude and Longitude");
6227 |
6228 | /* Target Number, 00-99 */
6229 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_tll_tgt_num, NULL((void*)0), NULL((void*)0));
6230 |
6231 | /* Target Latitude */
6232 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_tll_tgt_latitude);
6233 |
6234 | /* Target Longitude */
6235 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_tll_tgt_longitude);
6236 |
6237 | /* Target Name */
6238 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_tll_tgt_name, NULL((void*)0), NULL((void*)0));
6239 |
6240 | /* UTC of Data */
6241 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_tll_utc);
6242 |
6243 | /* Target Status */
6244 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_tll_tgt_status);
6245 |
6246 | /* Reference Target */
6247 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_tll_ref_tgt);
6248 |
6249 | return tvb_captured_length(tvb);
6250 | }
6251 |
6252 | static int
6253 | dissect_nmea0183_sentence_ttm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6254 | {
6255 | unsigned offset = 0;
6256 |
6257 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6258 | NULL((void*)0), "TTM sentence - Tracked Target Message");
6259 |
6260 | /* Target Number, 00 to 99 */
6261 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_tgt_num, NULL((void*)0), NULL((void*)0));
6262 |
6263 | /* Target Distance, from own ship */
6264 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_tgt_dist, NULL((void*)0), NULL((void*)0));
6265 |
6266 | /* Bearing from own ship, degrees true/relative */
6267 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_bearing, NULL((void*)0), NULL((void*)0));
6268 | offset += dissect_nmea0183_field_skip(tvb, offset);
6269 |
6270 | /* Target Speed */
6271 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_tgt_speed, NULL((void*)0), NULL((void*)0));
6272 |
6273 | /* Target Course, degrees true/relative */
6274 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_tgt_course, NULL((void*)0), NULL((void*)0));
6275 | offset += dissect_nmea0183_field_skip(tvb, offset);
6276 |
6277 | /* Distance of closest-point-of-approach */
6278 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_dist_pt_approach, NULL((void*)0), NULL((void*)0));
6279 |
6280 | /* Time to CPA, minutes ("-" = increasing decoded_time) */
6281 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_time_cpa, NULL((void*)0), NULL((void*)0));
6282 |
6283 | /* Speed/Distance Units */
6284 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_units);
6285 |
6286 | /* Target Name */
6287 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_tgt_name, NULL((void*)0), NULL((void*)0));
6288 |
6289 | /* Target Status */
6290 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_tgt_status);
6291 |
6292 | /* Reference Target */
6293 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_ref_tgt);
6294 |
6295 | /* UTC of Data */
6296 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_utc);
6297 |
6298 | /* Type of Acquisition */
6299 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_ttm_acq_type);
6300 |
6301 | return tvb_captured_length(tvb);
6302 | }
6303 |
6304 | static int
6305 | dissect_nmea0183_sentence_tut(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6306 | {
6307 | unsigned offset = 0;
6308 |
6309 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6310 | NULL((void*)0), "TUT sentence - Transmission of Multi-Language Text");
6311 | /* Source Identifier */
6312 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_tut_src_id, NULL((void*)0), NULL((void*)0));
6313 |
6314 | /* Total number of sentences, 00 - FF */
6315 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_tut_total_sentences, NULL((void*)0), NULL((void*)0));
6316 |
6317 | /* Sentence Number, 00 to FF */
6318 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_tut_sentence_num, NULL((void*)0), NULL((void*)0));
6319 |
6320 | /* Sequential Message Identifier, 0 to 9 */
6321 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_tut_seq_msg, NULL((void*)0), NULL((void*)0));
6322 |
6323 | /* Translation Code for Text Body */
6324 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_tut_trans_code, NULL((void*)0), NULL((void*)0));
6325 |
6326 | /* Text Body */
6327 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_tut_text, NULL((void*)0), NULL((void*)0));
6328 |
6329 | return tvb_captured_length(tvb);
6330 | }
6331 |
6332 | static int
6333 | dissect_nmea0183_sentence_vdr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6334 | {
6335 | unsigned offset = 0;
6336 |
6337 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6338 | NULL((void*)0), "VDR sentence - Set and Drift");
6339 | /* Direction, degrees True */
6340 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vdr_heading_true, NULL((void*)0), NULL((void*)0));
6341 | offset += dissect_nmea0183_field_skip(tvb, offset);
6342 |
6343 | /* Direction, degrees Magnetic */
6344 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vdr_heading_magnetic, NULL((void*)0), NULL((void*)0));
6345 | offset += dissect_nmea0183_field_skip(tvb, offset);
6346 |
6347 | /* Current Speed, knots */
6348 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vdr_speed, NULL((void*)0), NULL((void*)0));
6349 |
6350 | return tvb_captured_length(tvb);
6351 | }
6352 |
6353 | static int
6354 | dissect_nmea0183_sentence_vpw(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6355 | {
6356 | unsigned offset = 0;
6357 |
6358 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6359 | NULL((void*)0), "VPW sentence - Speed, Measured Parallel to Wind");
6360 | /* "-" means downwind for either of the following two fields */
6361 |
6362 | /* Speed, knots */
6363 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vpw_speed_knots, NULL((void*)0), NULL((void*)0));
6364 | offset += dissect_nmea0183_field_skip(tvb, offset);
6365 |
6366 | /* Speed, meters/second */
6367 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vpw_speed_ms, NULL((void*)0), NULL((void*)0));
6368 |
6369 | return tvb_captured_length(tvb);
6370 | }
6371 |
6372 | static int
6373 | dissect_nmea0183_sentence_vsd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6374 | {
6375 | unsigned offset = 0;
6376 |
6377 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6378 | NULL((void*)0), "VSD sentence - UAIS Voyage Static Data");
6379 |
6380 | /* Type of Ship and Cargo Category, 0-255 */
6381 | /* TODO: These are defined under Message 5 of ITU-R M.1371. NULL field means "unchanged". */
6382 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vsd_ship_cargo, NULL((void*)0), NULL((void*)0));
6383 |
6384 | /* Maximum Present Static Draught, 0-25.5 meters */
6385 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vsd_max_draught, NULL((void*)0), NULL((void*)0));
6386 |
6387 | /* Persons on-board, 0-8191 where a value of 8191 implies greater than or equal to 8191 */
6388 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vsd_persons, NULL((void*)0), NULL((void*)0));
6389 |
6390 | /* Destination */
6391 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vsd_destination, NULL((void*)0), NULL((void*)0));
6392 |
6393 | /* Estimated UTC of arrival at Destination */
6394 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_vsd_utc_arrival);
6395 |
6396 | /* Estimated Day of Arrival at Destination, 00 to 31 */
6397 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vsd_day_arrival, NULL((void*)0), NULL((void*)0));
6398 |
6399 | /* Estimated Month of Arrival at Destination, 00 to 12 */
6400 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vsd_month_arrival, NULL((void*)0), NULL((void*)0));
6401 |
6402 | /* Navigational Status */
6403 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
6404 | hf_nmea0183_vsd_nav_status, NULL((void*)0),
6405 | nav_status_vals);
6406 |
6407 | /* Regional Application Flags - set by Regional Authority (i.e., no table lookup) */
6408 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_vsd_app_flags, NULL((void*)0), NULL((void*)0));
6409 |
6410 | return tvb_captured_length(tvb);
6411 | }
6412 |
6413 | static int
6414 | dissect_nmea0183_sentence_wcv(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6415 | {
6416 | unsigned offset = 0;
6417 |
6418 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6419 | NULL((void*)0), "WCV sentence - Waypoint Closure Velocity");
6420 | /* Velocity component, knots */
6421 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_wcv_velocity, NULL((void*)0), NULL((void*)0));
6422 | offset += dissect_nmea0183_field_skip(tvb, offset);
6423 |
6424 | /* Waypoint identifier */
6425 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_wcv_waypoint, NULL((void*)0), NULL((void*)0));
6426 |
6427 | /* Mode Indicator */
6428 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_wcv_mode);
6429 |
6430 | return tvb_captured_length(tvb);
6431 | }
6432 |
6433 | static int
6434 | dissect_nmea0183_sentence_wnc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6435 | {
6436 | unsigned offset = 0;
6437 |
6438 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6439 | NULL((void*)0), "WNC sentence - Distance - Waypoint to Waypoint");
6440 | /* Distance (nm) */
6441 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_wnc_dist_nm, NULL((void*)0), NULL((void*)0));
6442 | offset += dissect_nmea0183_field_skip(tvb, offset);
6443 |
6444 | /* Distance (km) */
6445 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_wnc_dist_km, NULL((void*)0), NULL((void*)0));
6446 | offset += dissect_nmea0183_field_skip(tvb, offset);
6447 |
6448 | /* 'TO' Waypoint Identifier */
6449 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_wnc_to_id, NULL((void*)0), NULL((void*)0));
6450 |
6451 | /* 'FROM' Waypoint Identifier */
6452 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_wnc_from_id, NULL((void*)0), NULL((void*)0));
6453 |
6454 | return tvb_captured_length(tvb);
6455 | }
6456 |
6457 | static int
6458 | dissect_nmea0183_sentence_wpl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6459 | {
6460 | unsigned offset = 0;
6461 |
6462 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6463 | NULL((void*)0), "WPL sentence - Waypoint Location");
6464 |
6465 | /* Waypoint Latitude */
6466 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_wpl_latitude);
6467 |
6468 | /* Waypoint Longitude */
6469 | offset += dissect_nmea0183_field_latlong(tvb, pinfo, subtree, offset, hf_nmea0183_wpl_longitude);
6470 |
6471 | /* Waypoint identifer */
6472 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_wpl_waypoint, NULL((void*)0), NULL((void*)0));
6473 |
6474 | return tvb_captured_length(tvb);
6475 | }
6476 |
6477 | static int
6478 | dissect_nmea0183_sentence_xdr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6479 | {
6480 | unsigned offset = 0;
6481 |
6482 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6483 | NULL((void*)0), "XDR sentence - Transducer Measurement");
6484 | /* This can be from 1 to n transducer messages */
6485 | while (tvb_captured_length_remaining(tvb, offset) > 0)
6486 | {
6487 | /* Transducer Type */
6488 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_xdr_type);
6489 |
6490 | /* Transducer Data */
6491 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
6492 | hf_nmea0183_xdr_data, NULL((void*)0), NULL((void*)0));
6493 |
6494 | /* Transducer Units of Measure */
6495 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_xdr_units);
6496 |
6497 | /* Transducer ID */
6498 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset,
6499 | hf_nmea0183_xdr_id, NULL((void*)0), NULL((void*)0));
6500 | }
6501 |
6502 | return tvb_captured_length(tvb);
6503 | }
6504 |
6505 | static int
6506 | dissect_nmea0183_sentence_xte(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6507 | {
6508 | unsigned offset = 0;
6509 |
6510 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6511 | NULL((void*)0), "XTE sentence - Cross-Track Error, Measured");
6512 | /* Data Status - Loran-C Blink or SNR Warning */
6513 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_xte_blinksnr_status);
6514 |
6515 | /* Data Status - Loran-C Cycle Lock Warning Flag */
6516 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_xte_cycle_status);
6517 |
6518 | /* Magnitude of XTE */
6519 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_xte_magnitude, NULL((void*)0), NULL((void*)0));
6520 |
6521 | /* Direction to Steer (L/R) */
6522 | offset += dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_xte_direction);
6523 |
6524 | /* Mode Indicator */
6525 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_xte_mode);
6526 |
6527 | return tvb_captured_length(tvb);
6528 | }
6529 |
6530 | static int
6531 | dissect_nmea0183_sentence_xtr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6532 | {
6533 | unsigned offset = 0;
6534 |
6535 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6536 | NULL((void*)0), "XTR sentence - Cross Track Error - Dead Reckoning");
6537 | /* Magnitude of XTE */
6538 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_xtr_magnitude, NULL((void*)0), NULL((void*)0));
6539 |
6540 | /* Direction to Steer (L/R) */
6541 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_xtr_direction, NULL((void*)0), NULL((void*)0));
6542 |
6543 | return tvb_captured_length(tvb);
6544 | }
6545 |
6546 | static int
6547 | dissect_nmea0183_sentence_zdl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6548 | {
6549 | unsigned offset = 0;
6550 |
6551 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6552 | NULL((void*)0), "ZDL sentence - Time and Distance to Variable Point");
6553 |
6554 | /* Time to point, hh = 00 to 99 hours */
6555 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_zdl_time);
6556 |
6557 | /* Distance to point, nautical miles */
6558 | offset += dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_zdl_dist, NULL((void*)0), NULL((void*)0));
6559 |
6560 | /* Type of Point (table lookup) */
6561 | dissect_nmea0183_field_item(tvb, pinfo, subtree, offset, hf_nmea0183_zdl_type);
6562 |
6563 | return tvb_captured_length(tvb);
6564 | }
6565 |
6566 | static int
6567 | dissect_nmea0183_sentence_zfo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6568 | {
6569 | unsigned offset = 0;
6570 |
6571 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6572 | NULL((void*)0), "ZFO sentence - UTC & Time from origin Waypoint");
6573 |
6574 | /* UTC of Observation */
6575 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_zfo_utc);
6576 |
6577 | /* Elapsed Time, hh = 00 to 99 */
6578 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_zfo_elapsed);
6579 |
6580 | /* Origin Waypoint ID */
6581 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_zfo_origin, NULL((void*)0), NULL((void*)0));
6582 |
6583 | return tvb_captured_length(tvb);
6584 | }
6585 |
6586 | static int
6587 | dissect_nmea0183_sentence_ztg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
6588 | {
6589 | unsigned offset = 0;
6590 |
6591 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6592 | NULL((void*)0), "ZTG sentence - UTC & Time to Destination Waypoint");
6593 |
6594 | /* UTC of Observation */
6595 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_ztg_utc);
6596 |
6597 | /* Time-to-go, hh = 00 to 99 */
6598 | offset += dissect_nmea0183_field_decoded_time(tvb, pinfo, subtree, offset, hf_nmea0183_ztg_time_left);
6599 |
6600 | /* Destination Waypoint ID */
6601 | dissect_nmea0183_field(tvb, pinfo, subtree, offset, hf_nmea0183_ztg_dest, NULL((void*)0), NULL((void*)0));
6602 |
6603 | return tvb_captured_length(tvb);
6604 | }
6605 |
6606 | /* Dissect a sentence where the sentence id is unknown. Each field is shown as an generic field. */
6607 | static int
6608 | dissect_nmea0183_sentence_unknown(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree)
6609 | {
6610 | unsigned offset = 0;
6611 |
6612 | proto_tree *subtree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nmea0183_sentence,
6613 | NULL((void*)0), "Unknown sentence");
6614 |
6615 | /* In an unknown sentence, the name of each field is unknown. Find all field by splitting at a comma. */
6616 | while (tvb_captured_length_remaining(tvb, offset) > 0)
6617 | {
6618 | int end_of_field_offset = tvb_find_end_of_nmea0183_field(tvb, offset);
6619 | proto_item *ti = proto_tree_add_item(subtree, hf_nmea0183_unknown_field,
6620 | tvb, offset, end_of_field_offset - offset, ENC_ASCII0x00000000);
6621 | if (end_of_field_offset - offset == 0)
6622 | {
6623 | proto_item_append_text(ti, "[empty]");
6624 | }
6625 | offset = end_of_field_offset + 1;
6626 | }
6627 | return tvb_captured_length(tvb);
6628 | }
6629 |
6630 |
6631 | /* <tag block 1>,<tagblock2>, … <tagblock n>*<tagblocks CS> */
6632 | //static void
6633 | //dissect_nmea0183_tag_block(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
6634 | //{
6635 | // unsigned offset = 0, chk_sum_off, comma_off;
6636 | //
6637 | // if (!tvb_find_uint8_remaining(tvb, offset, '*', &chk_sum_off)) {
6638 | // /* No checksum ??*/
6639 | // return;
6640 | // }
6641 | // while (offset < chk_sum_off) {
6642 | // if (!tvb_find_uint8_remaining(tvb, offset, ',', &comma_off)) {
6643 | //
6644 | // }
6645 | //
6646 | // }
6647 | //
6648 | //}
6649 | static unsigned
6650 | dissect_nmea0183_tag_blocks(tvbuff_t* tvb, packet_info* pinfo _U___attribute__((unused)), proto_tree* tree, unsigned offset) {
6651 |
6652 | unsigned start_offset;
6653 | unsigned end_offset;
6654 |
6655 | while (tvb_get_uint8(tvb, offset) == '\\') {
6656 | start_offset = offset;
6657 | offset++;
6658 | if (!tvb_find_uint8_remaining(tvb, offset, '\\', &end_offset)) {
6659 | // Add expert info
6660 | return tvb_captured_length(tvb);
6661 | }
6662 | proto_tree_add_item(tree, hf_nmea0183_tag_block, tvb, start_offset, (end_offset - start_offset) + 1, ENC_ASCII0x00000000);
6663 | //proto_tree* tree = proto_item_add_subtree(ti, ett_nmea0183_tag_block);
6664 | offset = end_offset + 1;
6665 | }
6666 | return offset;
6667 | }
6668 |
6669 | static int
6670 | dissect_nmea0183_msg(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
6671 | {
6672 | proto_item* ti;
6673 | unsigned offset = 0,start_offset;
6674 | unsigned start_checksum_offset = 0;
6675 | const char* talker_id = NULL((void*)0);
6676 | const char* sentence_id = NULL((void*)0);
6677 | const char* checksum = NULL((void*)0);
6678 | uint8_t start_delimiter;
6679 |
6680 | /* Start delimiter */
6681 | start_delimiter = tvb_get_uint8(tvb, offset);
6682 | if ((start_delimiter != '$') && (start_delimiter != '!'))
6683 | {
6684 | expert_add_info(pinfo, tree, &ei_nmea0183_invalid_first_character);
6685 | }
6686 |
6687 | offset += 1;
6688 | start_offset = offset;
6689 | /* Talker id */
6690 | ti = proto_tree_add_item_ret_string(tree, hf_nmea0183_talker_id,
6691 | tvb, offset, 2, ENC_ASCII0x00000000,
6692 | pinfo->pool, (const uint8_t**)&talker_id);
6693 |
6694 | proto_item_append_text(ti, " (%s)", str_to_str_wmem(pinfo->pool, talker_id, known_talker_ids, "Unknown talker ID"));
6695 |
6696 | col_append_fstr(pinfo->cinfo, COL_INFO, "Talker %s", str_to_str_wmem(pinfo->pool, talker_id, known_talker_ids, "Unknown talker ID"));
6697 |
6698 | offset += 2;
6699 |
6700 | /* Sentence id */
6701 | ti = proto_tree_add_item_ret_string(tree, hf_nmea0183_sentence_id,
6702 | tvb, offset, 3, ENC_ASCII0x00000000,
6703 | pinfo->pool, (const uint8_t**)&sentence_id);
6704 |
6705 | proto_item_append_text(ti, " (%s)", str_to_str_wmem(pinfo->pool, sentence_id, known_sentence_ids, "Unknown sentence ID"));
6706 |
6707 | col_append_fstr(pinfo->cinfo, COL_INFO, ", Sentence %s", str_to_str_wmem(pinfo->pool, sentence_id, known_sentence_ids, "Unknown sentence ID"));
6708 |
6709 | offset += 3;
6710 |
6711 | /* Start of checksum */
6712 | if (!tvb_find_uint8_remaining(tvb, offset, '*', &start_checksum_offset))
6713 | {
6714 | expert_add_info(pinfo, tree, &ei_nmea0183_missing_checksum_character);
6715 | return tvb_captured_length(tvb);
6716 | }
6717 |
6718 | /* Data */
6719 | offset += 1;
6720 | tvbuff_t *data_tvb = tvb_new_subset_length(tvb, offset, start_checksum_offset - offset);
6721 | if (g_ascii_strcasecmp(sentence_id, "AAM") == 0)
6722 | {
6723 | offset += dissect_nmea0183_sentence_aam(data_tvb, pinfo, tree);
6724 | }
6725 | else if (g_ascii_strcasecmp(sentence_id, "ABK") == 0)
6726 | {
6727 | offset += dissect_nmea0183_sentence_abk(data_tvb, pinfo, tree);
6728 | }
6729 | else if (g_ascii_strcasecmp(sentence_id, "ACA") == 0)
6730 | {
6731 | offset += dissect_nmea0183_sentence_aca(data_tvb, pinfo, tree);
6732 | }
6733 | else if (g_ascii_strcasecmp(sentence_id, "ACK") == 0)
6734 | {
6735 | offset += dissect_nmea0183_sentence_ack(data_tvb, pinfo, tree);
6736 | }
6737 | else if (g_ascii_strcasecmp(sentence_id, "ACS") == 0)
6738 | {
6739 | offset += dissect_nmea0183_sentence_acs(data_tvb, pinfo, tree);
6740 | }
6741 | else if (g_ascii_strcasecmp(sentence_id, "AIR") == 0)
6742 | {
6743 | offset += dissect_nmea0183_sentence_air(data_tvb, pinfo, tree);
6744 | }
6745 | else if (g_ascii_strcasecmp(sentence_id, "AKD") == 0)
6746 | {
6747 | offset += dissect_nmea0183_sentence_akd(data_tvb, pinfo, tree);
6748 | }
6749 | else if (g_ascii_strcasecmp(sentence_id, "ALA") == 0)
6750 | {
6751 | offset += dissect_nmea0183_sentence_ala(data_tvb, pinfo, tree);
6752 | }
6753 | else if (g_ascii_strcasecmp(sentence_id, "ALM") == 0)
6754 | {
6755 | offset += dissect_nmea0183_sentence_alm(data_tvb, pinfo, tree);
6756 | }
6757 | else if (g_ascii_strcasecmp(sentence_id, "ALR") == 0)
6758 | {
6759 | offset += dissect_nmea0183_sentence_alr(data_tvb, pinfo, tree);
6760 | }
6761 | else if (g_ascii_strcasecmp(sentence_id, "APB") == 0)
6762 | {
6763 | offset += dissect_nmea0183_sentence_apb(data_tvb, pinfo, tree);
6764 | }
6765 | else if (g_ascii_strcasecmp(sentence_id, "BEC") == 0)
6766 | {
6767 | offset += dissect_nmea0183_sentence_bec(data_tvb, pinfo, tree);
6768 | }
6769 | else if (g_ascii_strcasecmp(sentence_id, "BOD") == 0)
6770 | {
6771 | offset += dissect_nmea0183_sentence_bod(data_tvb, pinfo, tree);
6772 | }
6773 | else if (g_ascii_strcasecmp(sentence_id, "BWC") == 0)
6774 | {
6775 | offset += dissect_nmea0183_sentence_bwc(data_tvb, pinfo, tree);
6776 | }
6777 | else if (g_ascii_strcasecmp(sentence_id, "BWR") == 0)
6778 | {
6779 | offset += dissect_nmea0183_sentence_bwr(data_tvb, pinfo, tree);
6780 | }
6781 | else if (g_ascii_strcasecmp(sentence_id, "BWW") == 0)
6782 | {
6783 | offset += dissect_nmea0183_sentence_bww(data_tvb, pinfo, tree);
6784 | }
6785 | else if (g_ascii_strcasecmp(sentence_id, "CBR") == 0)
6786 | {
6787 | offset += dissect_nmea0183_sentence_cbr(data_tvb, pinfo, tree);
6788 | }
6789 | else if (g_ascii_strcasecmp(sentence_id, "CUR") == 0)
6790 | {
6791 | offset += dissect_nmea0183_sentence_cur(data_tvb, pinfo, tree);
6792 | }
6793 | else if (g_ascii_strcasecmp(sentence_id, "DBT") == 0)
6794 | {
6795 | offset += dissect_nmea0183_sentence_dbt(data_tvb, pinfo, tree);
6796 | }
6797 | else if (g_ascii_strcasecmp(sentence_id, "DCN") == 0)
6798 | {
6799 | offset += dissect_nmea0183_sentence_dcn(data_tvb, pinfo, tree);
6800 | }
6801 | else if (g_ascii_strcasecmp(sentence_id, "DDC") == 0)
6802 | {
6803 | offset += dissect_nmea0183_sentence_ddc(data_tvb, pinfo, tree);
6804 | }
6805 | else if (g_ascii_strcasecmp(sentence_id, "DOR") == 0)
6806 | {
6807 | offset += dissect_nmea0183_sentence_dor(data_tvb, pinfo, tree);
6808 | }
6809 | else if (g_ascii_strcasecmp(sentence_id, "DPT") == 0)
6810 | {
6811 | offset += dissect_nmea0183_sentence_dpt(data_tvb, pinfo, tree);
6812 | }
6813 | else if (g_ascii_strcasecmp(sentence_id, "DSC") == 0)
6814 | {
6815 | offset += dissect_nmea0183_sentence_dsc(data_tvb, pinfo, tree);
6816 | }
6817 | else if (g_ascii_strcasecmp(sentence_id, "DSE") == 0)
6818 | {
6819 | offset += dissect_nmea0183_sentence_dse(data_tvb, pinfo, tree);
6820 | }
6821 | else if (g_ascii_strcasecmp(sentence_id, "DSI") == 0)
6822 | {
6823 | offset += dissect_nmea0183_sentence_dsi(data_tvb, pinfo, tree);
6824 | }
6825 | else if (g_ascii_strcasecmp(sentence_id, "DSR") == 0)
6826 | {
6827 | offset += dissect_nmea0183_sentence_dsr(data_tvb, pinfo, tree);
6828 | }
6829 | else if (g_ascii_strcasecmp(sentence_id, "DTM") == 0)
6830 | {
6831 | offset += dissect_nmea0183_sentence_dtm(data_tvb, pinfo, tree);
6832 | }
6833 | else if (g_ascii_strcasecmp(sentence_id, "ETL") == 0)
6834 | {
6835 | offset += dissect_nmea0183_sentence_etl(data_tvb, pinfo, tree);
6836 | }
6837 | else if (g_ascii_strcasecmp(sentence_id, "FSI") == 0)
6838 | {
6839 | offset += dissect_nmea0183_sentence_fsi(data_tvb, pinfo, tree);
6840 | }
6841 | else if (g_ascii_strcasecmp(sentence_id, "GBS") == 0)
6842 | {
6843 | offset += dissect_nmea0183_sentence_gbs(data_tvb, pinfo, tree);
6844 | }
6845 | else if (g_ascii_strcasecmp(sentence_id, "GGA") == 0)
6846 | {
6847 | offset += dissect_nmea0183_sentence_gga(data_tvb, pinfo, tree);
6848 | }
6849 | else if (g_ascii_strcasecmp(sentence_id, "GLC") == 0)
6850 | {
6851 | offset += dissect_nmea0183_sentence_glc(data_tvb, pinfo, tree);
6852 | }
6853 | else if (g_ascii_strcasecmp(sentence_id, "GLL") == 0)
6854 | {
6855 | offset += dissect_nmea0183_sentence_gll(data_tvb, pinfo, tree);
6856 | }
6857 | else if (g_ascii_strcasecmp(sentence_id, "GMP") == 0)
6858 | {
6859 | offset += dissect_nmea0183_sentence_gmp(data_tvb, pinfo, tree);
6860 | }
6861 | else if (g_ascii_strcasecmp(sentence_id, "GNS") == 0)
6862 | {
6863 | offset += dissect_nmea0183_sentence_gns(data_tvb, pinfo, tree);
6864 | }
6865 | else if (g_ascii_strcasecmp(sentence_id, "GRS") == 0)
6866 | {
6867 | offset += dissect_nmea0183_sentence_grs(data_tvb, pinfo, tree);
6868 | }
6869 | else if (g_ascii_strcasecmp(sentence_id, "GSA") == 0)
6870 | {
6871 | offset += dissect_nmea0183_sentence_gsa(data_tvb, pinfo, tree);
6872 | }
6873 | else if (g_ascii_strcasecmp(sentence_id, "GST") == 0)
6874 | {
6875 | offset += dissect_nmea0183_sentence_gst(data_tvb, pinfo, tree);
6876 | }
6877 | else if (g_ascii_strcasecmp(sentence_id, "GSV") == 0)
6878 | {
6879 | offset += dissect_nmea0183_sentence_gsv(data_tvb, pinfo, tree);
6880 | }
6881 | else if (g_ascii_strcasecmp(sentence_id, "HBT") == 0)
6882 | {
6883 | offset += dissect_nmea0183_sentence_hbt(data_tvb, pinfo, tree);
6884 | }
6885 | else if (g_ascii_strcasecmp(sentence_id, "HDG") == 0)
6886 | {
6887 | offset += dissect_nmea0183_sentence_hdg(data_tvb, pinfo, tree);
6888 | }
6889 | else if (g_ascii_strcasecmp(sentence_id, "HDT") == 0)
6890 | {
6891 | offset += dissect_nmea0183_sentence_hdt(data_tvb, pinfo, tree);
6892 | }
6893 | else if (g_ascii_strcasecmp(sentence_id, "HMR") == 0)
6894 | {
6895 | offset += dissect_nmea0183_sentence_hmr(data_tvb, pinfo, tree);
6896 | }
6897 | else if (g_ascii_strcasecmp(sentence_id, "HMS") == 0)
6898 | {
6899 | offset += dissect_nmea0183_sentence_hms(data_tvb, pinfo, tree);
6900 | }
6901 | else if (g_ascii_strcasecmp(sentence_id, "HSC") == 0)
6902 | {
6903 | offset += dissect_nmea0183_sentence_hsc(data_tvb, pinfo, tree);
6904 | }
6905 | else if (g_ascii_strcasecmp(sentence_id, "HTC") == 0)
6906 | {
6907 | offset += dissect_nmea0183_sentence_htc(data_tvb, pinfo, tree);
6908 | }
6909 | else if (g_ascii_strcasecmp(sentence_id, "HTD") == 0)
6910 | {
6911 | offset += dissect_nmea0183_sentence_htd(data_tvb, pinfo, tree);
6912 | }
6913 | else if (g_ascii_strcasecmp(sentence_id, "LCD") == 0)
6914 | {
6915 | offset += dissect_nmea0183_sentence_lcd(data_tvb, pinfo, tree);
6916 | }
6917 | else if (g_ascii_strcasecmp(sentence_id, "LR1") == 0)
6918 | {
6919 | offset += dissect_nmea0183_sentence_lr1(data_tvb, pinfo, tree);
6920 | }
6921 | else if (g_ascii_strcasecmp(sentence_id, "LR2") == 0)
6922 | {
6923 | offset += dissect_nmea0183_sentence_lr2(data_tvb, pinfo, tree);
6924 | }
6925 | else if (g_ascii_strcasecmp(sentence_id, "LR3") == 0)
6926 | {
6927 | offset += dissect_nmea0183_sentence_lr3(data_tvb, pinfo, tree);
6928 | }
6929 | else if (g_ascii_strcasecmp(sentence_id, "LRF") == 0)
6930 | {
6931 | offset += dissect_nmea0183_sentence_lrf(data_tvb, pinfo, tree);
6932 | }
6933 | else if (g_ascii_strcasecmp(sentence_id, "LRI") == 0)
6934 | {
6935 | offset += dissect_nmea0183_sentence_lri(data_tvb, pinfo, tree);
6936 | }
6937 | else if (g_ascii_strcasecmp(sentence_id, "MLA") == 0)
6938 | {
6939 | offset += dissect_nmea0183_sentence_mla(data_tvb, pinfo, tree);
6940 | }
6941 | else if (g_ascii_strcasecmp(sentence_id, "MSK") == 0)
6942 | {
6943 | offset += dissect_nmea0183_sentence_msk(data_tvb, pinfo, tree);
6944 | }
6945 | else if (g_ascii_strcasecmp(sentence_id, "MSS") == 0)
6946 | {
6947 | offset += dissect_nmea0183_sentence_mss(data_tvb, pinfo, tree);
6948 | }
6949 | else if (g_ascii_strcasecmp(sentence_id, "MTW") == 0)
6950 | {
6951 | offset += dissect_nmea0183_sentence_mtw(data_tvb, pinfo, tree);
6952 | }
6953 | else if (g_ascii_strcasecmp(sentence_id, "MWD") == 0)
6954 | {
6955 | offset += dissect_nmea0183_sentence_mwd(data_tvb, pinfo, tree);
6956 | }
6957 | else if (g_ascii_strcasecmp(sentence_id, "MWV") == 0)
6958 | {
6959 | offset += dissect_nmea0183_sentence_mwv(data_tvb, pinfo, tree);
6960 | }
6961 | else if (g_ascii_strcasecmp(sentence_id, "OSD") == 0)
6962 | {
6963 | offset += dissect_nmea0183_sentence_osd(data_tvb, pinfo, tree);
6964 | }
6965 | else if (g_ascii_strcasecmp(sentence_id, "RMA") == 0)
6966 | {
6967 | offset += dissect_nmea0183_sentence_rma(data_tvb, pinfo, tree);
6968 | }
6969 | else if (g_ascii_strcasecmp(sentence_id, "RMB") == 0)
6970 | {
6971 | offset += dissect_nmea0183_sentence_rmb(data_tvb, pinfo, tree);
6972 | }
6973 | else if (g_ascii_strcasecmp(sentence_id, "RMC") == 0)
6974 | {
6975 | offset += dissect_nmea0183_sentence_rmc(data_tvb, pinfo, tree);
6976 | }
6977 | else if (g_ascii_strcasecmp(sentence_id, "ROT") == 0)
6978 | {
6979 | offset += dissect_nmea0183_sentence_rot(data_tvb, pinfo, tree);
6980 | }
6981 | else if (g_ascii_strcasecmp(sentence_id, "RPM") == 0)
6982 | {
6983 | offset += dissect_nmea0183_sentence_rpm(data_tvb, pinfo, tree);
6984 | }
6985 | else if (g_ascii_strcasecmp(sentence_id, "RSA") == 0)
6986 | {
6987 | offset += dissect_nmea0183_sentence_rsa(data_tvb, pinfo, tree);
6988 | }
6989 | else if (g_ascii_strcasecmp(sentence_id, "RSD") == 0)
6990 | {
6991 | offset += dissect_nmea0183_sentence_rsd(data_tvb, pinfo, tree);
6992 | }
6993 | else if (g_ascii_strcasecmp(sentence_id, "RTE") == 0)
6994 | {
6995 | offset += dissect_nmea0183_sentence_rte(data_tvb, pinfo, tree);
6996 | }
6997 | else if (g_ascii_strcasecmp(sentence_id, "SFI") == 0)
6998 | {
6999 | offset += dissect_nmea0183_sentence_sfi(data_tvb, pinfo, tree);
7000 | }
7001 | else if (g_ascii_strcasecmp(sentence_id, "SSD") == 0)
7002 | {
7003 | offset += dissect_nmea0183_sentence_ssd(data_tvb, pinfo, tree);
7004 | }
7005 | else if (g_ascii_strcasecmp(sentence_id, "STN") == 0)
7006 | {
7007 | offset += dissect_nmea0183_sentence_stn(data_tvb, pinfo, tree);
7008 | }
7009 | else if (g_ascii_strcasecmp(sentence_id, "TLB") == 0)
7010 | {
7011 | offset += dissect_nmea0183_sentence_tlb(data_tvb, pinfo, tree);
7012 | }
7013 | else if (g_ascii_strcasecmp(sentence_id, "TLL") == 0)
7014 | {
7015 | offset += dissect_nmea0183_sentence_tll(data_tvb, pinfo, tree);
7016 | }
7017 | else if (g_ascii_strcasecmp(sentence_id, "TTM") == 0)
7018 | {
7019 | offset += dissect_nmea0183_sentence_ttm(data_tvb, pinfo, tree);
7020 | }
7021 | else if (g_ascii_strcasecmp(sentence_id, "TUT") == 0)
7022 | {
7023 | offset += dissect_nmea0183_sentence_tut(data_tvb, pinfo, tree);
7024 | }
7025 | else if (g_ascii_strcasecmp(sentence_id, "TXT") == 0)
7026 | {
7027 | offset += dissect_nmea0183_sentence_txt(data_tvb, pinfo, tree);
7028 | }
7029 | else if (g_ascii_strcasecmp(sentence_id, "VBW") == 0)
7030 | {
7031 | offset += dissect_nmea0183_sentence_vbw(data_tvb, pinfo, tree);
7032 | }
7033 | else if (g_ascii_strcasecmp(sentence_id, "VDR") == 0)
7034 | {
7035 | offset += dissect_nmea0183_sentence_vdr(data_tvb, pinfo, tree);
7036 | }
7037 | else if (g_ascii_strcasecmp(sentence_id, "VHW") == 0)
7038 | {
7039 | offset += dissect_nmea0183_sentence_vhw(data_tvb, pinfo, tree);
7040 | }
7041 | else if (g_ascii_strcasecmp(sentence_id, "VLW") == 0)
7042 | {
7043 | offset += dissect_nmea0183_sentence_vlw(data_tvb, pinfo, tree);
7044 | }
7045 | else if (g_ascii_strcasecmp(sentence_id, "VPW") == 0)
7046 | {
7047 | offset += dissect_nmea0183_sentence_vpw(data_tvb, pinfo, tree);
7048 | }
7049 | else if (g_ascii_strcasecmp(sentence_id, "VSD") == 0)
7050 | {
7051 | offset += dissect_nmea0183_sentence_vsd(data_tvb, pinfo, tree);
7052 | }
7053 | else if (g_ascii_strcasecmp(sentence_id, "VTG") == 0)
7054 | {
7055 | offset += dissect_nmea0183_sentence_vtg(data_tvb, pinfo, tree);
7056 | }
7057 | else if (g_ascii_strcasecmp(sentence_id, "WCV") == 0)
7058 | {
7059 | offset += dissect_nmea0183_sentence_wcv(data_tvb, pinfo, tree);
7060 | }
7061 | else if (g_ascii_strcasecmp(sentence_id, "WNC") == 0)
7062 | {
7063 | offset += dissect_nmea0183_sentence_wnc(data_tvb, pinfo, tree);
7064 | }
7065 | else if (g_ascii_strcasecmp(sentence_id, "WPL") == 0)
7066 | {
7067 | offset += dissect_nmea0183_sentence_wpl(data_tvb, pinfo, tree);
7068 | }
7069 | else if (g_ascii_strcasecmp(sentence_id, "XDR") == 0)
7070 | {
7071 | offset += dissect_nmea0183_sentence_xdr(data_tvb, pinfo, tree);
7072 | }
7073 | else if (g_ascii_strcasecmp(sentence_id, "XTE") == 0)
7074 | {
7075 | offset += dissect_nmea0183_sentence_xte(data_tvb, pinfo, tree);
7076 | }
7077 | else if (g_ascii_strcasecmp(sentence_id, "XTR") == 0)
7078 | {
7079 | offset += dissect_nmea0183_sentence_xtr(data_tvb, pinfo, tree);
7080 | }
7081 | else if (g_ascii_strcasecmp(sentence_id, "ZDA") == 0)
7082 | {
7083 | offset += dissect_nmea0183_sentence_zda(data_tvb, pinfo, tree);
7084 | }
7085 | else if (g_ascii_strcasecmp(sentence_id, "ZDL") == 0)
7086 | {
7087 | offset += dissect_nmea0183_sentence_zdl(data_tvb, pinfo, tree);
7088 | }
7089 | else if (g_ascii_strcasecmp(sentence_id, "ZFO") == 0)
7090 | {
7091 | offset += dissect_nmea0183_sentence_zfo(data_tvb, pinfo, tree);
7092 | }
7093 | else if (g_ascii_strcasecmp(sentence_id, "ZTG") == 0)
7094 | {
7095 | offset += dissect_nmea0183_sentence_ztg(data_tvb, pinfo, tree);
7096 | }
7097 | else
7098 | {
7099 | offset += dissect_nmea0183_sentence_unknown(data_tvb, pinfo, tree);
7100 | }
7101 |
7102 | /* Checksum */
7103 | offset += 1;
7104 | ti = proto_tree_add_item_ret_string(tree, hf_nmea0183_checksum,
7105 | tvb, offset, 2, ENC_ASCII0x00000000,
7106 | pinfo->pool, (const uint8_t**)&checksum);
7107 |
7108 | uint8_t received_checksum = (uint8_t)strtol(checksum, NULL((void*)0), 16);
7109 | uint8_t calculated_checksum;
7110 |
7111 | //calculated_checksum = calculate_checksum(tvb, 1, offset - 2);
7112 | calculated_checksum = calculate_checksum(tvb, start_offset, (offset - start_offset-1));
7113 |
7114 | if (received_checksum == calculated_checksum)
7115 | {
7116 | proto_item_append_text(ti, " [correct]");
7117 | }
7118 | else
7119 | {
7120 | proto_item_append_text(ti, " [INCORRECT]");
7121 | expert_add_info(pinfo, ti, &ei_nmea0183_checksum_incorrect);
7122 | }
7123 |
7124 | // Calculated checksum highlights 2 bytes, which is the ascii hex value of a 1 byte checksum
7125 | proto_item *checksum_tree = proto_item_add_subtree(ti, ett_nmea0183_checksum);
7126 | ti = proto_tree_add_uint(checksum_tree, hf_nmea0183_checksum_calculated,
7127 | tvb, offset, 2, calculated_checksum);
7128 |
7129 | proto_item_set_generated(ti);
7130 |
7131 | offset += 2;
7132 |
7133 | /* End of line */
7134 | if (tvb_captured_length_remaining(tvb, offset) < 2 ||
7135 | tvb_get_uint8(tvb, offset) != '\r' ||
7136 | tvb_get_uint8(tvb, offset + 1) != '\n')
7137 | {
7138 | expert_add_info(pinfo, tree, &ei_nmea0183_invalid_end_of_line);
7139 | }
7140 | offset += 2;
7141 |
7142 | /* Check sentence length */
7143 | if (offset > 82)
7144 | {
7145 | expert_add_info(pinfo, tree, &ei_nmea0183_sentence_too_long);
7146 | }
7147 |
7148 | return tvb_captured_length(tvb);
7149 | }
7150 |
7151 | static const value_string nmea0183_bin_mtype_vals[] = {
7152 | { 1, "Data"},
7153 | { 2, "Query"},
7154 | { 3, "Ack"},
7155 | { 0, NULL((void*)0) },
7156 | };
7157 |
7158 | static int
7159 | dissect_nmea0183_bin(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data _U___attribute__((unused)))
7160 | {
7161 | proto_item* ti;
7162 | proto_tree* nmea0183_tree, *fd_tree;
7163 | uint32_t mtype, seqnum, file_descriptor_len, type_len;
7164 |
7165 | unsigned offset = 0;
7166 |
7167 | col_set_str(pinfo->cinfo, COL_PROTOCOL, "NMEA 0183 Binary");
7168 | /* Clear the info column */
7169 | col_clear(pinfo->cinfo, COL_INFO);
7170 |
7171 | ti = proto_tree_add_item(tree, proto_nmea0183_bin, tvb, 0, -1, ENC_NA0x00000000);
7172 | nmea0183_tree = proto_item_add_subtree(ti, ett_nmea0183);
7173 |
7174 | proto_tree_add_item(nmea0183_tree, hf_nmea0183_sentence_prefix, tvb, offset, 6, ENC_ASCII0x00000000);
7175 | offset += 6;
7176 | proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_version, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7177 | offset+=2;
7178 | proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_srcid, tvb, offset, 6, ENC_ASCII0x00000000);
7179 | offset += 6;
7180 | proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_dstid, tvb, offset, 6, ENC_ASCII0x00000000);
7181 | offset += 6;
7182 | proto_tree_add_item_ret_uint(nmea0183_tree, hf_nmea0183_bin_mtype, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &mtype);
7183 | offset += 2;
7184 | proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_blockid, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7185 | offset += 4;
7186 | proto_tree_add_item_ret_uint(nmea0183_tree, hf_nmea0183_bin_seqnum, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &seqnum);
7187 | offset += 4;
7188 | proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_max_seqnum, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7189 | offset += 4;
7190 | if (offset < tvb_reported_length(tvb)) {
7191 | if ((mtype == 1) && (seqnum == 1)) {
7192 | /* binary file descriptor*/
7193 | ti = proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_file_descriptor, tvb, offset, -1, ENC_ASCII0x00000000);
7194 | fd_tree = proto_item_add_subtree(ti, ett_nmea0183_fd);
7195 | proto_tree_add_item_ret_uint(fd_tree, hf_nmea0183_bin_file_descriptor_len, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &file_descriptor_len);
7196 | proto_item_set_len(ti, file_descriptor_len);
7197 | offset += 4;
7198 | proto_tree_add_item(fd_tree, hf_nmea0183_bin_file_length, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7199 | offset += 4;
7200 | proto_tree_add_item(fd_tree, hf_nmea0183_bin_stat_of_acquisition, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7201 | offset += 2;
7202 | proto_tree_add_item(fd_tree, hf_nmea0183_bin_device, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7203 | offset++;
7204 | proto_tree_add_item(fd_tree, hf_nmea0183_bin_channel, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7205 | offset++;
7206 | proto_tree_add_item_ret_uint(fd_tree, hf_nmea0183_bin_type_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &type_len);
7207 | offset++;
7208 | proto_tree_add_item(fd_tree, hf_nmea0183_bin_data_type, tvb, offset, type_len, ENC_ASCII0x00000000);
7209 | offset += type_len;
7210 | proto_tree_add_item(fd_tree, hf_nmea0183_bin_status_and_info, tvb, offset, file_descriptor_len - type_len - 13, ENC_ASCII0x00000000);
7211 | offset += file_descriptor_len - type_len - 13;
7212 | }
7213 | proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_data, tvb, offset, -1, ENC_NA0x00000000);
7214 | }
7215 |
7216 |
7217 | return tvb_reported_length(tvb);
7218 | }
7219 |
7220 | static int
7221 | dissect_nmea0183(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data)
7222 | {
7223 | proto_item* ti;
7224 | proto_tree* nmea0183_tree = NULL((void*)0);
7225 | unsigned offset = 0;
7226 | unsigned end_offset;
7227 | bool_Bool first_msg = true1;
7228 |
7229 | col_set_str(pinfo->cinfo, COL_PROTOCOL, "NMEA 0183");
7230 | /* Clear the info column */
7231 | col_clear(pinfo->cinfo, COL_INFO);
7232 |
7233 | /* Find end of nmea message */
7234 | if (tvb_find_uint16_remaining(tvb, 0, NMEA0183_CRLF0x0d0a, &end_offset)) {
7235 | /* Add CRLF */
7236 | end_offset += 2;
7237 | } else {
7238 | end_offset = tvb_reported_length(tvb);
7239 | }
7240 |
7241 | /* UdPbC\<tag block 1>,<tagblock2>, … <tagblock n>*<tagblocks CS>\<NMEA message>*/
7242 | if (tvb_strneql(tvb, 0, UDPBC"UdPbC", strlen(UDPBC"UdPbC")) == 0) {
7243 | if (first_msg == true1) {
7244 | ti = proto_tree_add_item(tree, proto_nmea0183, tvb, 0, end_offset, ENC_NA0x00000000);
7245 | nmea0183_tree = proto_item_add_subtree(ti, ett_nmea0183);
7246 | }
7247 | proto_tree_add_item(nmea0183_tree, hf_nmea0183_sentence_prefix, tvb, offset, 6, ENC_ASCII0x00000000);
7248 | offset += 6;
7249 | while (tvb_reported_length_remaining(tvb, offset)) {
7250 | if (first_msg != true1) {
7251 | if (tvb_find_uint16_remaining(tvb, offset, NMEA0183_CRLF0x0d0a, &end_offset)) {
7252 | /* Add CRLF */
7253 | end_offset += 2;
7254 | } else {
7255 | end_offset = tvb_reported_length(tvb);
7256 | }
7257 |
7258 | ti = proto_tree_add_item(tree, proto_nmea0183, tvb, offset, end_offset, ENC_NA0x00000000);
7259 | nmea0183_tree = proto_item_add_subtree(ti, ett_nmea0183);
7260 | }
7261 | offset = dissect_nmea0183_tag_blocks(tvb, pinfo, nmea0183_tree, offset);
7262 | tvbuff_t* msg_tvb = tvb_new_subset_length(tvb, offset, end_offset - offset);
7263 | dissect_nmea0183_msg(msg_tvb, pinfo, nmea0183_tree);
7264 | offset += (end_offset - offset);
7265 | first_msg = false0;
7266 | }
7267 | return offset;
7268 | } else if (tvb_strneql(tvb, 0, RRUDP"RrUdP", strlen(RRUDP"RrUdP")) == 0) {
7269 | /* Binary nmea0183 */
7270 | offset = dissect_nmea0183_bin(tvb, pinfo, tree, data);
7271 | return offset;
7272 | } else if (tvb_strneql(tvb, 0, RAUDP"RaUdp", strlen(RAUDP"RaUdp")) == 0) {
7273 | /* Binary nmea0183 */
7274 | offset = dissect_nmea0183_bin(tvb, pinfo, tree, data);
7275 | return offset;
7276 | } else if (tvb_strneql(tvb, 0, RPUDP"RpUdP", strlen(RPUDP"RpUdP")) == 0) {
7277 | /* Binary nmea0183 */
7278 | offset = dissect_nmea0183_bin(tvb, pinfo, tree, data);
7279 | return offset;
7280 | }
7281 |
7282 | ti = proto_tree_add_item(tree, proto_nmea0183, tvb, 0, end_offset, ENC_NA0x00000000);
7283 | nmea0183_tree = proto_item_add_subtree(ti, ett_nmea0183);
7284 |
7285 | tvbuff_t *msg_tvb = tvb_new_subset_length(tvb, offset, end_offset - offset);
7286 | offset = dissect_nmea0183_msg(msg_tvb, pinfo, nmea0183_tree);
7287 |
7288 | return offset;
7289 | }
7290 |
7291 | /* Try to detect NMEA 0183 heuristically */
7292 | static bool_Bool dissect_nmea0183_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
7293 | {
7294 | char *sent_type;
7295 | const char *talker, *t_val, *p_val, *m_val, *manuf;
7296 |
7297 | /* Have to have at least 11 bytes:
7298 | * 1-byte sentence type character ('!' or '$')
7299 | * 2-byte TALKER lookup value
7300 | * 2-byte TALKER (for Query sentences) or 3-byte FORMATTER
7301 | * variable number of bytes for delimiters and data fields (minimum would be a single ',' byte)
7302 | * '*' delimeter byte, 2-bytes for checksum, and 2-bytes for EOM "\r\n" */
7303 | if(tvb_reported_length(tvb) < 11 || tvb_captured_length(tvb) < 5){
7304 | return false0;
7305 | }
7306 | /* See if we have a UDP brodcast message */
7307 | if (tvb_strneql(tvb, 0, UDPBC"UdPbC", strlen(UDPBC"UdPbC")) == 0) {
7308 | return (dissect_nmea0183(tvb, pinfo, tree, data) != 0);
7309 | }
7310 | if (tvb_strneql(tvb, 0, RRUDP"RrUdP", strlen(RRUDP"RrUdP")) == 0) {
7311 | return (dissect_nmea0183_bin(tvb, pinfo, tree, data) != 0);
7312 | }
7313 | if (tvb_strneql(tvb, 0, RAUDP"RaUdp", strlen(RAUDP"RaUdp")) == 0) {
7314 | return (dissect_nmea0183_bin(tvb, pinfo, tree, data) != 0);
7315 | }
7316 | if (tvb_strneql(tvb, 0, RPUDP"RpUdP", strlen(RPUDP"RpUdP")) == 0) {
7317 | return (dissect_nmea0183_bin(tvb, pinfo, tree, data) != 0);
7318 | }
7319 | /* Grab the first byte and check the first character */
7320 | sent_type = (char*)tvb_get_string_enc(pinfo->pool, tvb, 0, 1, ENC_ASCII0x00000000);
7321 |
7322 | /* Sentence type character ('!' or '$') */
7323 | if( (sent_type[0] != '!') && (sent_type[0] != '$') ){
7324 | return false0;
7325 | }
7326 |
7327 | /* We either have a 'P' and corresponding manufacturer 3-byte value OR
7328 | * we have a non-proprietary 2-byte TALKER field */
7329 | //TODO: Implement encapsulation and proprietary message parsing
7330 |
7331 | /* Do a lookup for the 2-byte TALKER field */
7332 | t_val = (char*)tvb_get_string_enc(pinfo->pool, tvb, 1, 2, ENC_ASCII0x00000000);
7333 | talker = try_str_to_str(t_val, known_talker_ids);
7334 |
7335 | /* Do a lookup for the 3-byte manufacturer if the 2nd byte in the PDU is 'P' */
7336 | p_val = (char*)tvb_get_string_enc(pinfo->pool, tvb, 1, 1, ENC_ASCII0x00000000);
7337 | m_val = (char*)tvb_get_string_enc(pinfo->pool, tvb, 2, 3, ENC_ASCII0x00000000);
7338 | manuf = try_str_to_str(m_val, manufacturer_vals);
7339 |
7340 | /* If one of the two conditions are true then try to dissect NMEA 0183 */
7341 | if( ((p_val[0] == 'P') && (manuf != NULL((void*)0))) ||
7342 | (talker != NULL((void*)0)) ){
7343 | /* Looks like NMEA 0183 so let's give it a try */
7344 | return (dissect_nmea0183(tvb, pinfo, tree, data) != 0);
7345 | }
7346 | /* If neither conditions are met then we return false */
7347 | else{
7348 | return false0;
7349 | }
7350 | }
7351 |
7352 | void proto_register_nmea0183(void)
7353 | {
7354 | expert_module_t *expert_nmea0183;
7355 |
7356 | static hf_register_info hf[] = {
7357 | {&hf_nmea0183_talker_id,
7358 | {"Talker ID", "nmea0183.talker",
7359 | FT_STRING, BASE_NONE,
7360 | NULL((void*)0), 0x0,
7361 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7362 | {&hf_nmea0183_sentence_id,
7363 | {"Sentence ID", "nmea0183.sentence",
7364 | FT_STRING, BASE_NONE,
7365 | NULL((void*)0), 0x0,
7366 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7367 | {&hf_nmea0183_unknown_field,
7368 | {"Field", "nmea0183.unknown_field",
7369 | FT_STRING, BASE_NONE,
7370 | NULL((void*)0), 0x0,
7371 | "NMEA 0183 Unknown field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7372 | {&hf_nmea0183_checksum,
7373 | {"Checksum", "nmea0183.checksum",
7374 | FT_STRING, BASE_NONE,
7375 | NULL((void*)0), 0x0,
7376 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7377 | {&hf_nmea0183_checksum_calculated,
7378 | {"Calculated checksum", "nmea0183.checksum_calculated",
7379 | FT_UINT8, BASE_HEX,
7380 | NULL((void*)0), 0x0,
7381 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7382 | {&hf_nmea0183_aam_arr_circle_radius,
7383 | {"Arrival Circle Radius", "nmea0183.aam.circle_radius",
7384 | FT_STRING, BASE_NONE,
7385 | NULL((void*)0), 0x0,
7386 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7387 | {&hf_nmea0183_aam_arr_circle_status,
7388 | {"Arrival Circle Status", "nmea0183.aam.arrival_status",
7389 | FT_CHAR, BASE_NONE,
7390 | VALS(arrival_circle_status)((0 ? (const struct _value_string*)0 : ((arrival_circle_status )))), 0x0,
7391 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7392 | {&hf_nmea0183_aam_perp_status,
7393 | {"Perpendicular Pass Status", "nmea0183.aam.perp_status",
7394 | FT_CHAR, BASE_NONE,
7395 | VALS(perpendicular_pass_status)((0 ? (const struct _value_string*)0 : ((perpendicular_pass_status )))), 0x0,
7396 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7397 | {&hf_nmea0183_aam_units_radius,
7398 | {"Units of Radius (nm)", "nmea0183.aam.units",
7399 | FT_UINT8, BASE_DEC,
7400 | NULL((void*)0), 0x0,
7401 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7402 | {&hf_nmea0183_aam_waypoint,
7403 | {"Waypoint ID", "nmea0183.aam.waypoint",
7404 | FT_STRING, BASE_NONE,
7405 | NULL((void*)0), 0x0,
7406 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7407 | {&hf_nmea0183_abk_ack_type,
7408 | {"Type of Acknowledgement", "nmea0183.abk.ack_type",
7409 | FT_CHAR, BASE_NONE,
7410 | VALS(abk_ack_type)((0 ? (const struct _value_string*)0 : ((abk_ack_type)))), 0x0,
7411 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7412 | {&hf_nmea0183_abk_ais_channel,
7413 | {"AIS Channel of Reception", "nmea0183.abk.channel",
7414 | FT_CHAR, BASE_NONE,
7415 | VALS(abk_channel)((0 ? (const struct _value_string*)0 : ((abk_channel)))), 0x0,
7416 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7417 | {&hf_nmea0183_abk_mmsi,
7418 | {"MMSI of Addressed AIS Unit", "nmea0183.abk.mmsi",
7419 | FT_STRING, BASE_NONE,
7420 | NULL((void*)0), 0x0,
7421 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7422 | {&hf_nmea0183_abk_msg_id,
7423 | {"ITU-R M.1371 Message ID", "nmea0183.abk.msg_id",
7424 | FT_STRING, BASE_NONE,
7425 | NULL((void*)0), 0x0,
7426 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7427 | {&hf_nmea0183_abk_msg_seq,
7428 | {"Message Sequence Number", "nmea0183.abk.msg_seq",
7429 | FT_STRING, BASE_NONE,
7430 | NULL((void*)0), 0x0,
7431 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7432 | {&hf_nmea0183_aca_chan_a,
7433 | {"Channel A", "nmea0183.aca.chan_a",
7434 | FT_STRING, BASE_NONE,
7435 | NULL((void*)0), 0x0,
7436 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7437 | {&hf_nmea0183_aca_chan_a_bw,
7438 | {"Channel A Bandwidth", "nmea0183.aca.chan_a_bw",
7439 | FT_CHAR, BASE_NONE,
7440 | VALS(aca_chbw)((0 ? (const struct _value_string*)0 : ((aca_chbw)))), 0x0,
7441 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7442 | {&hf_nmea0183_aca_chan_b,
7443 | {"Channel B", "nmea0183.aca.chan_b",
7444 | FT_STRING, BASE_NONE,
7445 | NULL((void*)0), 0x0,
7446 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7447 | {&hf_nmea0183_aca_chan_b_bw,
7448 | {"Channel B Bandwidth", "nmea0183.aca.chan_b_bw",
7449 | FT_CHAR, BASE_NONE,
7450 | VALS(aca_chbw)((0 ? (const struct _value_string*)0 : ((aca_chbw)))), 0x0,
7451 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7452 | {&hf_nmea0183_aca_info_src,
7453 | {"Information Source", "nmea0183.aca.info_src",
7454 | FT_CHAR, BASE_NONE,
7455 | VALS(aca_info_src)((0 ? (const struct _value_string*)0 : ((aca_info_src)))), 0x0,
7456 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7457 | {&hf_nmea0183_aca_inuse,
7458 | {"'In-use' Flag", "nmea0183.aca.inuse",
7459 | FT_CHAR, BASE_NONE,
7460 | VALS(aca_in_use)((0 ? (const struct _value_string*)0 : ((aca_in_use)))), 0x0,
7461 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7462 | {&hf_nmea0183_aca_inuse_change,
7463 | {"Time of 'in-use' Change (UTC)", "nmea0183.aca.inuse_change",
7464 | FT_STRING, BASE_NONE,
7465 | NULL((void*)0), 0x0,
7466 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7467 | {&hf_nmea0183_aca_ne_clat,
7468 | {"Northeast Corner Latitude", "nmea0183.aca.ne_clatitude",
7469 | FT_FLOAT, BASE_NONE,
7470 | NULL((void*)0), 0x0,
7471 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7472 | {&hf_nmea0183_aca_ne_clong,
7473 | {"Northeast Corner Longitude", "nmea0183.aca.ne_clongitude",
7474 | FT_FLOAT, BASE_NONE,
7475 | NULL((void*)0), 0x0,
7476 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7477 | {&hf_nmea0183_aca_power,
7478 | {"Power Level Control", "nmea0183.aca.power",
7479 | FT_CHAR, BASE_NONE,
7480 | VALS(aca_power)((0 ? (const struct _value_string*)0 : ((aca_power)))), 0x0,
7481 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7482 | {&hf_nmea0183_aca_seq_num,
7483 | {"Sequence Number", "nmea0183.aca.seq_num",
7484 | FT_STRING, BASE_NONE,
7485 | NULL((void*)0), 0x0,
7486 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7487 | {&hf_nmea0183_aca_sw_clat,
7488 | {"Southwest Corner Latitude", "nmea0183.aca.sw_clatitude",
7489 | FT_FLOAT, BASE_NONE,
7490 | NULL((void*)0), 0x0,
7491 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7492 | {&hf_nmea0183_aca_sw_clong,
7493 | {"Southwest Corner Longitude", "nmea0183.aca.sw_clongitude",
7494 | FT_FLOAT, BASE_NONE,
7495 | NULL((void*)0), 0x0,
7496 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7497 | {&hf_nmea0183_aca_txrx_mode,
7498 | {"Tx/Rx Mode Control", "nmea0183.aca.txrx_mode",
7499 | FT_CHAR, BASE_NONE,
7500 | VALS(aca_txrx_control)((0 ? (const struct _value_string*)0 : ((aca_txrx_control)))), 0x0,
7501 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7502 | {&hf_nmea0183_aca_zone_size,
7503 | {"Transition Zone Size (nm)", "nmea0183.aca.zonesize",
7504 | FT_STRING, BASE_NONE,
7505 | NULL((void*)0), 0x0,
7506 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7507 | {&hf_nmea0183_ack_alarm_id,
7508 | {"Unique Alarm Number at Alarm Source", "nmea0183.acs.id",
7509 | FT_STRING, BASE_NONE,
7510 | NULL((void*)0), 0x0,
7511 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7512 | {&hf_nmea0183_acs_day,
7513 | {"Day (01 to 31) (UTC)", "nmea0183.acs.day",
7514 | FT_STRING, BASE_NONE,
7515 | NULL((void*)0), 0x0,
7516 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7517 | {&hf_nmea0183_acs_mmsi,
7518 | {"MMSI of Originator", "nmea0183.acs.mmsi",
7519 | FT_STRING, BASE_NONE,
7520 | NULL((void*)0), 0x0,
7521 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7522 | {&hf_nmea0183_acs_month,
7523 | {"Month (01 to 12) (UTC)", "nmea0183.acs.month",
7524 | FT_STRING, BASE_NONE,
7525 | NULL((void*)0), 0x0,
7526 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7527 | {&hf_nmea0183_acs_seq_num,
7528 | {"Sequence Number", "nmea0183.acs.seq_num",
7529 | FT_STRING, BASE_NONE,
7530 | NULL((void*)0), 0x0,
7531 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7532 | {&hf_nmea0183_acs_utc,
7533 | {"UTC of Receipt of Channel Management Information", "nmea0183.acs.utc",
7534 | FT_STRING, BASE_NONE,
7535 | NULL((void*)0), 0x0,
7536 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7537 | {&hf_nmea0183_acs_year,
7538 | {"Year (UTC)", "nmea0183.acs.year",
7539 | FT_STRING, BASE_NONE,
7540 | NULL((void*)0), 0x0,
7541 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7542 | {&hf_nmea0183_air_mmsi_is1,
7543 | {"MMSI of Interrogated Station #1", "nmea0183.air.mmsi1",
7544 | FT_STRING, BASE_NONE,
7545 | NULL((void*)0), 0x0,
7546 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7547 | {&hf_nmea0183_air_mmsi_is2,
7548 | {"MMSI of Interrogated Station #2", "nmea0183.air.mmsi2",
7549 | FT_STRING, BASE_NONE,
7550 | NULL((void*)0), 0x0,
7551 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7552 | {&hf_nmea0183_air_msg2_req,
7553 | {"ITU-R M.1371 Message #2 Requested from Station #1", "nmea0183.air.msg2_req_is1",
7554 | FT_STRING, BASE_NONE,
7555 | NULL((void*)0), 0x0,
7556 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7557 | {&hf_nmea0183_air_msg2_sub,
7558 | {"Message #2 Sub-Section", "nmea0183.air.msg2_sub_is1",
7559 | FT_STRING, BASE_NONE,
7560 | NULL((void*)0), 0x0,
7561 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7562 | {&hf_nmea0183_air_msg_req,
7563 | {"ITU-R M.1371 Message #1 Requested from Station #1", "nmea0183.air.msg_req_is1",
7564 | FT_STRING, BASE_NONE,
7565 | NULL((void*)0), 0x0,
7566 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7567 | {&hf_nmea0183_air_msg_req_is2,
7568 | {"ITU-R M.1371 Message Requested from Station #2", "nmea0183.air.msg_req_is2",
7569 | FT_STRING, BASE_NONE,
7570 | NULL((void*)0), 0x0,
7571 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7572 | {&hf_nmea0183_air_msg_sub,
7573 | {"Message #1 Sub-Section", "nmea0183.air.msg_sub_is1",
7574 | FT_STRING, BASE_NONE,
7575 | NULL((void*)0), 0x0,
7576 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7577 | {&hf_nmea0183_air_msg_sub_is2,
7578 | {"Message Sub-Section - Station #2", "nmea0183.air.msg_sub_is2",
7579 | FT_STRING, BASE_NONE,
7580 | NULL((void*)0), 0x0,
7581 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7582 | {&hf_nmea0183_akd_alarm_type,
7583 | {"Type of Alarm", "nmea0183.akd.alarm_type",
7584 | FT_STRING, BASE_NONE,
7585 | NULL((void*)0), 0x0,
7586 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7587 | {&hf_nmea0183_akd_inst_num_orig,
7588 | {"Instance Number of Equipment/Unit/Item (Original)", "nmea0183.akd.inst_num_orig",
7589 | FT_STRING, BASE_NONE,
7590 | NULL((void*)0), 0x0,
7591 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7592 | {&hf_nmea0183_akd_inst_num_send,
7593 | {"Instance Number of Equipment/Unit/Item (Sending)", "nmea0183.akd.inst_num_send",
7594 | FT_STRING, BASE_NONE,
7595 | NULL((void*)0), 0x0,
7596 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7597 | {&hf_nmea0183_akd_subsys_indicator_orig,
7598 | {"Subsystem Indicator of Original Alarm Source", "nmea0183.akd.ss_indic_orig",
7599 | FT_STRING, BASE_NONE,
7600 | NULL((void*)0), 0x0,
7601 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7602 | {&hf_nmea0183_akd_sybsys_indicator_send,
7603 | {"Subsystem Indicator of System Sending Acknowledgement", "nmea0183.akd.ss_indic_send",
7604 | FT_STRING, BASE_NONE,
7605 | NULL((void*)0), 0x0,
7606 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7607 | {&hf_nmea0183_akd_sys_indicator_orig,
7608 | {"System Indicator of Original Alarm Source", "nmea0183.akd.s_indic_orig",
7609 | FT_STRING, BASE_NONE,
7610 | NULL((void*)0), 0x0,
7611 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7612 | {&hf_nmea0183_akd_sys_indicator_send,
7613 | {"System Indicator of System Sending Acknowledgement", "nmea0183.akd.s_indic_send",
7614 | FT_STRING, BASE_NONE,
7615 | NULL((void*)0), 0x0,
7616 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7617 | {&hf_nmea0183_akd_utc,
7618 | {"Time of Acknowledgement (UTC)", "nmea0183.akd.time",
7619 | FT_STRING, BASE_NONE,
7620 | NULL((void*)0), 0x0,
7621 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7622 | {&hf_nmea0183_ala_alarm_ack_state,
7623 | {"Alarm's Acknowledged State", "nmea0183.ala.alarm_state",
7624 | FT_CHAR, BASE_NONE,
7625 | VALS(alarm_ack_state_vals)((0 ? (const struct _value_string*)0 : ((alarm_ack_state_vals )))), 0x0,
7626 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7627 | {&hf_nmea0183_ala_alarm_cond,
7628 | {"Alarm Condition", "nmea0183.ala.alarm_cond",
7629 | FT_CHAR, BASE_NONE,
7630 | VALS(alarm_cond_state_vals)((0 ? (const struct _value_string*)0 : ((alarm_cond_state_vals )))), 0x0,
7631 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7632 | {&hf_nmea0183_ala_alarm_text,
7633 | {"Alarm's Description Text", "nmea0183.ala.alarm_text",
7634 | FT_STRING, BASE_NONE,
7635 | NULL((void*)0), 0x0,
7636 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7637 | {&hf_nmea0183_ala_alarm_type,
7638 | {"Type of Alarm", "nmea0183.ala.alarm_type",
7639 | FT_STRING, BASE_NONE,
7640 | NULL((void*)0), 0x0,
7641 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7642 | {&hf_nmea0183_ala_inst_num,
7643 | {"Instance Number of Equipment/Unit/Item", "nmea0183.ala.inst_num",
7644 | FT_STRING, BASE_NONE,
7645 | NULL((void*)0), 0x0,
7646 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7647 | {&hf_nmea0183_ala_subsys_indicator,
7648 | {"Subsystem Indicator of Alarm Source", "nmea0183.ala.ss_indic",
7649 | FT_STRING, BASE_NONE,
7650 | NULL((void*)0), 0x0,
7651 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7652 | {&hf_nmea0183_ala_sys_indicator,
7653 | {"System Indicator of Alarm Source", "nmea0183.ala.s_indic",
7654 | FT_STRING, BASE_NONE,
7655 | NULL((void*)0), 0x0,
7656 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7657 | {&hf_nmea0183_ala_time,
7658 | {"Event Time (UTC)", "nmea0183.ala.time",
7659 | FT_STRING, BASE_NONE,
7660 | NULL((void*)0), 0x0,
7661 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7662 | {&hf_nmea0183_alm_af0_clock_param,
7663 | {"a(f0), Clock Parameter", "nmea0183.alm.af0_clock",
7664 | FT_STRING, BASE_NONE,
7665 | NULL((void*)0), 0x0,
7666 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7667 | {&hf_nmea0183_alm_af1_clock_param,
7668 | {"a(f1), Clock Parameter", "nmea0183.alm.af1_clock",
7669 | FT_STRING, BASE_NONE,
7670 | NULL((void*)0), 0x0,
7671 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7672 | {&hf_nmea0183_alm_alm_ref_time,
7673 | {"t(oa), Almanac Reference Time", "nmea0183.alm.ref_time",
7674 | FT_STRING, BASE_NONE,
7675 | NULL((void*)0), 0x0,
7676 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7677 | {&hf_nmea0183_alm_arg_perigee,
7678 | {"OMEGA, Argument of Perigee", "nmea0183.alm.perigee",
7679 | FT_STRING, BASE_NONE,
7680 | NULL((void*)0), 0x0,
7681 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7682 | {&hf_nmea0183_alm_eccent,
7683 | {"e, Eccentricity", "nmea0183.alm.eccentricity",
7684 | FT_STRING, BASE_NONE,
7685 | NULL((void*)0), 0x0,
7686 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7687 | {&hf_nmea0183_alm_gps_week,
7688 | {"GPS Week Number", "nmea0183.alm.gps_week",
7689 | FT_STRING, BASE_NONE,
7690 | NULL((void*)0), 0x0,
7691 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7692 | {&hf_nmea0183_alm_incl_angle,
7693 | {"(sigma)(i), Inclination Angle", "nmea0183.alm.inc_angle",
7694 | FT_STRING, BASE_NONE,
7695 | NULL((void*)0), 0x0,
7696 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7697 | {&hf_nmea0183_alm_long_asc_node,
7698 | {"(OMEGA)(o), Longitude of Ascending Node", "nmea0183.alm.long_asn_node",
7699 | FT_STRING, BASE_NONE,
7700 | NULL((void*)0), 0x0,
7701 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7702 | {&hf_nmea0183_alm_mean_anomaly,
7703 | {"M(o), Mean Anomaly", "nmea0183.alm.anomaly",
7704 | FT_STRING, BASE_NONE,
7705 | NULL((void*)0), 0x0,
7706 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7707 | {&hf_nmea0183_alm_rate_right_asc,
7708 | {"OMEGADOT, Rate of Right Ascension", "nmea0183.alm.rate_right_asc",
7709 | FT_STRING, BASE_NONE,
7710 | NULL((void*)0), 0x0,
7711 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7712 | {&hf_nmea0183_alm_root_sm_axis,
7713 | {"root(A), Root of Semi-Major Axis", "nmea0183.alm.axis",
7714 | FT_STRING, BASE_NONE,
7715 | NULL((void*)0), 0x0,
7716 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7717 | {&hf_nmea0183_alm_sat_prn,
7718 | {"Satellite PRN Number", "nmea0183.alm.satprn",
7719 | FT_STRING, BASE_NONE,
7720 | NULL((void*)0), 0x0,
7721 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7722 | {&hf_nmea0183_alm_sent_num,
7723 | {"Sentence Number", "nmea0183.alm.sentence_num",
7724 | FT_STRING, BASE_NONE,
7725 | NULL((void*)0), 0x0,
7726 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7727 | {&hf_nmea0183_alm_sent_tot,
7728 | {"Total Number of Sentences", "nmea0183.alm.num_sentences",
7729 | FT_STRING, BASE_NONE,
7730 | NULL((void*)0), 0x0,
7731 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7732 | {&hf_nmea0183_alm_sv_health,
7733 | {"SV Health", "nmea0183.alm.sv_health",
7734 | FT_STRING, BASE_NONE,
7735 | NULL((void*)0), 0x0,
7736 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7737 | {&hf_nmea0183_alr_alarm_ack_st,
7738 | {"Alarm’s acknowledge state", "nmea0183.alr_alarm_ack_st",
7739 | FT_STRING, BASE_NONE,
7740 | NULL((void*)0), 0x0,
7741 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7742 | {&hf_nmea0183_alr_alarm_cond,
7743 | {"Alarm condition", "nmea0183.alr_alarm_cond",
7744 | FT_STRING, BASE_NONE,
7745 | NULL((void*)0), 0x0,
7746 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7747 | {&hf_nmea0183_alr_alarm_desc_txt,
7748 | {"Alarm’s description text", "nmea0183.alr_alarm_desc_txt",
7749 | FT_STRING, BASE_NONE,
7750 | NULL((void*)0), 0x0,
7751 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7752 | {&hf_nmea0183_alr_alarm_id,
7753 | {"Alarm id", "nmea0183.alr_id",
7754 | FT_STRING, BASE_NONE,
7755 | NULL((void*)0), 0x0,
7756 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7757 | {&hf_nmea0183_alr_time,
7758 | {"UTC Time of alarm condition change", "nmea0183.alr_time",
7759 | FT_NONE, BASE_NONE,
7760 | NULL((void*)0), 0x0,
7761 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7762 | {&hf_nmea0183_alr_time_hour,
7763 | {"Hour", "nmea0183.alr_time_hour",
7764 | FT_STRING, BASE_NONE,
7765 | NULL((void*)0), 0x0,
7766 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7767 | {&hf_nmea0183_alr_time_minute,
7768 | {"Minute", "nmea0183.alr_time_minute",
7769 | FT_STRING, BASE_NONE,
7770 | NULL((void*)0), 0x0,
7771 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7772 | {&hf_nmea0183_alr_time_second,
7773 | {"Second", "nmea0183.alr_time_second",
7774 | FT_STRING, BASE_NONE,
7775 | NULL((void*)0), 0x0,
7776 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7777 | {&hf_nmea0183_apb_arr_circle_status,
7778 | {"Arrival Circle Status", "nmea0183.apb.arrival_status",
7779 | FT_CHAR, BASE_NONE,
7780 | VALS(arrival_circle_status)((0 ? (const struct _value_string*)0 : ((arrival_circle_status )))), 0x0,
7781 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7782 | {&hf_nmea0183_apb_bearing_origin,
7783 | {"Bearing Origin to Destination", "nmea0183.apb.bearing_origin",
7784 | FT_STRING, BASE_NONE,
7785 | NULL((void*)0), 0x0,
7786 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7787 | {&hf_nmea0183_apb_bearing_present,
7788 | {"Bearing, Present position to Destination", "nmea0183.apb.bearing_present",
7789 | FT_STRING, BASE_NONE,
7790 | NULL((void*)0), 0x0,
7791 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7792 | {&hf_nmea0183_apb_cycle_lock_warning,
7793 | {"Data Status (Loran-C Cycle Lock)", "nmea0183.apb.cycle_warning",
7794 | FT_CHAR, BASE_NONE,
7795 | VALS(loranc_cycle_lock_warning_vals)((0 ? (const struct _value_string*)0 : ((loranc_cycle_lock_warning_vals )))), 0x0,
7796 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7797 | {&hf_nmea0183_apb_dir_steer,
7798 | {"Direction to Steer", "nmea0183.apb.steer",
7799 | FT_CHAR, BASE_NONE,
7800 | VALS(steer_direction)((0 ? (const struct _value_string*)0 : ((steer_direction)))), 0x0,
7801 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7802 | {&hf_nmea0183_apb_heading_steer,
7803 | {"Heading-to-Steer to Destination Waypoint", "nmea0183.apb.steer_heading",
7804 | FT_STRING, BASE_NONE,
7805 | NULL((void*)0), 0x0,
7806 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7807 | {&hf_nmea0183_apb_mag_xte,
7808 | {"Magnitude of Cross-Track-Error (XTE)", "nmea0183.apb.mag_xte",
7809 | FT_STRING, BASE_NONE,
7810 | NULL((void*)0), 0x0,
7811 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7812 | {&hf_nmea0183_apb_mode,
7813 | {"Mode Indicator", "nmea0183.apb.mode",
7814 | FT_CHAR, BASE_NONE,
7815 | VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
7816 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7817 | {&hf_nmea0183_apb_perp_status,
7818 | {"Perpendicular Pass Status", "nmea0183.apb.perp_status",
7819 | FT_CHAR, BASE_NONE,
7820 | VALS(perpendicular_pass_status)((0 ? (const struct _value_string*)0 : ((perpendicular_pass_status )))), 0x0,
7821 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7822 | {&hf_nmea0183_apb_waypoint_id,
7823 | {"Waypoint ID", "nmea0183.apb.waypoint",
7824 | FT_STRING, BASE_NONE,
7825 | NULL((void*)0), 0x0,
7826 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7827 | {&hf_nmea0183_apb_xte_units,
7828 | {"XTE units", "nmea0183.apb.xte_units",
7829 | FT_CHAR, BASE_NONE,
7830 | VALS(xte_unit_vals)((0 ? (const struct _value_string*)0 : ((xte_unit_vals)))), 0x0,
7831 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7832 | {&hf_nmea0183_bec_bearing_mag,
7833 | {"Bearing (degrees Magnetic)", "nmea0183.bec.bearing_mag",
7834 | FT_STRING, BASE_NONE,
7835 | NULL((void*)0), 0x0,
7836 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7837 | {&hf_nmea0183_bec_bearing_true,
7838 | {"Bearing (degrees True)", "nmea0183.bec.bearing_true",
7839 | FT_STRING, BASE_NONE,
7840 | NULL((void*)0), 0x0,
7841 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7842 | {&hf_nmea0183_bec_distance,
7843 | {"Distance (nm)", "nmea0183.bec.distance",
7844 | FT_STRING, BASE_NONE,
7845 | NULL((void*)0), 0x0,
7846 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7847 | {&hf_nmea0183_bec_latitude,
7848 | {"Waypoint Latitude", "nmea0183.bec.latitude",
7849 | FT_FLOAT, BASE_NONE,
7850 | NULL((void*)0), 0x0,
7851 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7852 | {&hf_nmea0183_bec_longitude,
7853 | {"Waypoint Longitude", "nmea0183.bec.longitude",
7854 | FT_FLOAT, BASE_NONE,
7855 | NULL((void*)0), 0x0,
7856 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7857 | {&hf_nmea0183_bec_utc,
7858 | {"UTC of Observation", "nmea0183.bec.utc",
7859 | FT_STRING, BASE_NONE,
7860 | NULL((void*)0), 0x0,
7861 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7862 | {&hf_nmea0183_bec_waypoint,
7863 | {"Waypoint ID", "nmea0183.bec.waypoint",
7864 | FT_STRING, BASE_NONE,
7865 | NULL((void*)0), 0x0,
7866 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7867 | { &hf_nmea0183_bin_blockid,
7868 | { "Blockid", "nmea0183.bin.blockid",
7869 | FT_UINT32, BASE_DEC,
7870 | NULL((void*)0), 0x0,
7871 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7872 | { &hf_nmea0183_bin_channel,
7873 | { "Channel", "nmea0183.bin.channel",
7874 | FT_UINT8, BASE_HEX,
7875 | NULL((void*)0), 0x0,
7876 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7877 | { &hf_nmea0183_bin_data,
7878 | { "Data", "nmea0183.bin.data",
7879 | FT_BYTES, BASE_NONE,
7880 | NULL((void*)0), 0x0,
7881 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7882 | { &hf_nmea0183_bin_data_type,
7883 | { "Data type", "nmea0183.bin.data_type",
7884 | FT_STRING, BASE_NONE,
7885 | NULL((void*)0), 0x0,
7886 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7887 | { &hf_nmea0183_bin_device,
7888 | { "Device", "nmea0183.bin.device",
7889 | FT_UINT8, BASE_HEX,
7890 | NULL((void*)0), 0x0,
7891 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7892 | { &hf_nmea0183_bin_dstid,
7893 | { "Destination Id", "nmea0183.bin.dst_id",
7894 | FT_STRING, BASE_NONE,
7895 | NULL((void*)0), 0x0,
7896 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7897 | { &hf_nmea0183_bin_file_descriptor,
7898 | { "File descriptor", "nmea0183.bin.file_descriptor",
7899 | FT_STRING, BASE_NONE,
7900 | NULL((void*)0), 0x0,
7901 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7902 | { &hf_nmea0183_bin_file_descriptor_len,
7903 | { "File descriptor length", "nmea0183.bin.fd_len",
7904 | FT_UINT32, BASE_DEC,
7905 | NULL((void*)0), 0x0,
7906 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7907 | { &hf_nmea0183_bin_file_length,
7908 | { "File length", "nmea0183.bin.file_len",
7909 | FT_UINT32, BASE_DEC,
7910 | NULL((void*)0), 0x0,
7911 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7912 | { &hf_nmea0183_bin_max_seqnum,
7913 | { "Max Sequence number", "nmea0183.bin.maxseqnum",
7914 | FT_UINT32, BASE_DEC,
7915 | NULL((void*)0), 0x0,
7916 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7917 | { &hf_nmea0183_bin_mtype,
7918 | { "Mtype", "nmea0183.bin.mtype",
7919 | FT_UINT16, BASE_DEC,
7920 | VALS(nmea0183_bin_mtype_vals)((0 ? (const struct _value_string*)0 : ((nmea0183_bin_mtype_vals )))), 0x0,
7921 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7922 | { &hf_nmea0183_bin_seqnum,
7923 | { "Sequence number", "nmea0183.bin.seqnum",
7924 | FT_UINT32, BASE_DEC,
7925 | NULL((void*)0), 0x0,
7926 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7927 | { &hf_nmea0183_bin_srcid,
7928 | { "Source Id", "nmea0183.bin.src_id",
7929 | FT_STRING, BASE_NONE,
7930 | NULL((void*)0), 0x0,
7931 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
7932 | { &hf_nmea0183_bin_stat_of_acquisition,
7933 | { "Status of acquisition", "nmea0183.bin.stat_of_acquisition",
7934 | FT_UINT16, BASE_DEC,
7935 | NULL((void*)0), 0x0,
7936 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7937 | { &hf_nmea0183_bin_status_and_info,
7938 | { "Status and information text", "nmea0183.bin.status_and_info",
7939 | FT_STRING, BASE_NONE,
7940 | NULL((void*)0), 0x0,
7941 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7942 | { &hf_nmea0183_bin_type_len,
7943 | { "Type length", "nmea0183.bin.type_len",
7944 | FT_UINT8, BASE_DEC,
7945 | NULL((void*)0), 0x0,
7946 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7947 | { &hf_nmea0183_bin_version,
7948 | { "Version", "nmea0183.bin.version",
7949 | FT_UINT16, BASE_DEC,
7950 | NULL((void*)0), 0x0,
7951 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
7952 | {&hf_nmea0183_bod_bearing_mag,
7953 | {"Bearing (degrees Magnetic)", "nmea0183.bod.bearing_mag",
7954 | FT_STRING, BASE_NONE,
7955 | NULL((void*)0), 0x0,
7956 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7957 | {&hf_nmea0183_bod_bearing_true,
7958 | {"Bearing (degrees True)", "nmea0183.bod.bearing_true",
7959 | FT_STRING, BASE_NONE,
7960 | NULL((void*)0), 0x0,
7961 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7962 | {&hf_nmea0183_bod_dest_waypoint,
7963 | {"Destination Waypoint ID", "nmea0183.bod.waypoint_dest",
7964 | FT_STRING, BASE_NONE,
7965 | NULL((void*)0), 0x0,
7966 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7967 | {&hf_nmea0183_bod_orig_waypoint,
7968 | {"Origin Waypoint ID", "nmea0183.bod.waypoint_orig",
7969 | FT_STRING, BASE_NONE,
7970 | NULL((void*)0), 0x0,
7971 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7972 | {&hf_nmea0183_bwc_bearing_mag,
7973 | {"Bearing (degrees Magnetic)", "nmea0183.bwc.bearing_mag",
7974 | FT_STRING, BASE_NONE,
7975 | NULL((void*)0), 0x0,
7976 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7977 | {&hf_nmea0183_bwc_bearing_true,
7978 | {"Bearing (degrees True)", "nmea0183.bwc.bearing_true",
7979 | FT_STRING, BASE_NONE,
7980 | NULL((void*)0), 0x0,
7981 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7982 | {&hf_nmea0183_bwc_distance,
7983 | {"Distance (nm)", "nmea0183.bwc.distance",
7984 | FT_STRING, BASE_NONE,
7985 | NULL((void*)0), 0x0,
7986 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7987 | {&hf_nmea0183_bwc_latitude,
7988 | {"Waypoint Latitude", "nmea0183.bwc.latitude",
7989 | FT_FLOAT, BASE_NONE,
7990 | NULL((void*)0), 0x0,
7991 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7992 | {&hf_nmea0183_bwc_longitude,
7993 | {"Waypoint Longitude", "nmea0183.bwc.longitude",
7994 | FT_FLOAT, BASE_NONE,
7995 | NULL((void*)0), 0x0,
7996 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7997 | {&hf_nmea0183_bwc_mode,
7998 | {"Mode Indicator", "nmea0183.bwc.mode",
7999 | FT_CHAR, BASE_NONE,
8000 | VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
8001 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8002 | {&hf_nmea0183_bwc_utc,
8003 | {"UTC of Observation", "nmea0183.bwc.utc",
8004 | FT_STRING, BASE_NONE,
8005 | NULL((void*)0), 0x0,
8006 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8007 | {&hf_nmea0183_bwc_waypoint,
8008 | {"Waypoint ID", "nmea0183.bwc.waypoint",
8009 | FT_STRING, BASE_NONE,
8010 | NULL((void*)0), 0x0,
8011 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8012 | {&hf_nmea0183_bwr_bearing_mag,
8013 | {"Bearing (degrees Magnetic)", "nmea0183.bwr.bearing_mag",
8014 | FT_STRING, BASE_NONE,
8015 | NULL((void*)0), 0x0,
8016 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8017 | {&hf_nmea0183_bwr_bearing_true,
8018 | {"Bearing (degrees True)", "nmea0183.bwr.bearing_true",
8019 | FT_STRING, BASE_NONE,
8020 | NULL((void*)0), 0x0,
8021 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8022 | {&hf_nmea0183_bwr_distance,
8023 | {"Distance (nm)", "nmea0183.bwr.distance",
8024 | FT_STRING, BASE_NONE,
8025 | NULL((void*)0), 0x0,
8026 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8027 | {&hf_nmea0183_bwr_latitude,
8028 | {"Waypoint Latitude", "nmea0183.bwr.latitude",
8029 | FT_FLOAT, BASE_NONE,
8030 | NULL((void*)0), 0x0,
8031 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8032 | {&hf_nmea0183_bwr_longitude,
8033 | {"Waypoint Longitude", "nmea0183.bwr.longitude",
8034 | FT_FLOAT, BASE_NONE,
8035 | NULL((void*)0), 0x0,
8036 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8037 | {&hf_nmea0183_bwr_mode,
8038 | {"Mode Indicator", "nmea0183.bwr.mode",
8039 | FT_CHAR, BASE_NONE,
8040 | VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
8041 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8042 | {&hf_nmea0183_bwr_utc,
8043 | {"UTC of Observation", "nmea0183.bwr.utc",
8044 | FT_STRING, BASE_NONE,
8045 | NULL((void*)0), 0x0,
8046 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8047 | {&hf_nmea0183_bwr_waypoint,
8048 | {"Waypoint ID", "nmea0183.bwr.waypoint",
8049 | FT_STRING, BASE_NONE,
8050 | NULL((void*)0), 0x0,
8051 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8052 | {&hf_nmea0183_bww_bearing_mag,
8053 | {"Bearing (degrees Magnetic)", "nmea0183.bww.bearing_mag",
8054 | FT_STRING, BASE_NONE,
8055 | NULL((void*)0), 0x0,
8056 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8057 | {&hf_nmea0183_bww_bearing_true,
8058 | {"Bearing (degrees True)", "nmea0183.bww.bearing_true",
8059 | FT_STRING, BASE_NONE,
8060 | NULL((void*)0), 0x0,
8061 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8062 | {&hf_nmea0183_bww_from_waypoint,
8063 | {"FROM Waypoint ID", "nmea0183.bww.waypoint_from",
8064 | FT_STRING, BASE_NONE,
8065 | NULL((void*)0), 0x0,
8066 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8067 | {&hf_nmea0183_bww_to_waypoint,
8068 | {"TO Waypoint ID", "nmea0183.bww.waypoint_to",
8069 | FT_STRING, BASE_NONE,
8070 | NULL((void*)0), 0x0,
8071 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8072 | {&hf_nmea0183_cbr_hr_chan_a,
8073 | {"Start Hour (UTC), Channel A", "nmea0183.cbr.chan_a_hr",
8074 | FT_STRING, BASE_NONE,
8075 | NULL((void*)0), 0x0,
8076 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8077 | {&hf_nmea0183_cbr_hr_chan_b,
8078 | {"Start Hour (UTC), Channel B", "nmea0183.cbr.chan_b_hr",
8079 | FT_STRING, BASE_NONE,
8080 | NULL((void*)0), 0x0,
8081 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8082 | {&hf_nmea0183_cbr_interv_chan_a,
8083 | {"Slot Interval, Channel A", "nmea0183.cbr.chan_a_interval",
8084 | FT_STRING, BASE_NONE,
8085 | NULL((void*)0), 0x0,
8086 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8087 | {&hf_nmea0183_cbr_interv_chan_b,
8088 | {"Slot Interval, Channel B", "nmea0183.cbr.chan_b_interval",
8089 | FT_STRING, BASE_NONE,
8090 | NULL((void*)0), 0x0,
8091 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8092 | {&hf_nmea0183_cbr_min_chan_a,
8093 | {"Start Minute (UTC), Channel A", "nmea0183.cbr.chan_a_min",
8094 | FT_STRING, BASE_NONE,
8095 | NULL((void*)0), 0x0,
8096 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8097 | {&hf_nmea0183_cbr_min_chan_b,
8098 | {"Start Minute (UTC), Channel B", "nmea0183.cbr.chan_b_min",
8099 | FT_STRING, BASE_NONE,
8100 | NULL((void*)0), 0x0,
8101 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8102 | {&hf_nmea0183_cbr_mmsi,
8103 | {"MMSI", "nmea0183.cbr.mmsi",
8104 | FT_STRING, BASE_NONE,
8105 | NULL((void*)0), 0x0,
8106 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8107 | {&hf_nmea0183_cbr_msd_id_index,
8108 | {"Message ID Index", "nmea0183.cbr.msg_id_index",
8109 | FT_STRING, BASE_NONE,
8110 | NULL((void*)0), 0x0,
8111 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8112 | {&hf_nmea0183_cbr_msg_id,
8113 | {"Message ID", "nmea0183.cbr.msg_id",
8114 | FT_STRING, BASE_NONE,
8115 | NULL((void*)0), 0x0,
8116 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8117 | {&hf_nmea0183_cbr_setup,
8118 | {"FATDMA or RATDMA/CSTDMA Setup", "nmea0183.cbr.setup",
8119 | FT_CHAR, BASE_NONE,
8120 | VALS(dma_setup_vals)((0 ? (const struct _value_string*)0 : ((dma_setup_vals)))), 0x0,
8121 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8122 | {&hf_nmea0183_cbr_slot_chan_a,
8123 | {"Start Slot, Channel A", "nmea0183.cbr.chan_a_slot",
8124 | FT_STRING, BASE_NONE,
8125 | NULL((void*)0), 0x0,
8126 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8127 | {&hf_nmea0183_cbr_slot_chan_b,
8128 | {"Start Slot, Channel B", "nmea0183.cbr.chan_b_slot",
8129 | FT_STRING, BASE_NONE,
8130 | NULL((void*)0), 0x0,
8131 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8132 | {&hf_nmea0183_cbr_status,
8133 | {"Sentence Status Flag", "nmea0183.cbr.status",
8134 | FT_CHAR, BASE_NONE,
8135 | VALS(sentence_status_vals)((0 ? (const struct _value_string*)0 : ((sentence_status_vals )))), 0x0,
8136 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8137 | {&hf_nmea0183_cur_data_set,
8138 | {"Data Set Number (0 to 9)", "nmea0183.cur.dataset_num",
8139 | FT_STRING, BASE_NONE,
8140 | NULL((void*)0), 0x0,
8141 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8142 | {&hf_nmea0183_cur_depth,
8143 | {"Current Depth (m)", "nmea0183.cur.depth",
8144 | FT_STRING, BASE_NONE,
8145 | NULL((void*)0), 0x0,
8146 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8147 | {&hf_nmea0183_cur_direction,
8148 | {"Current Direction (degrees)", "nmea0183.cur.direction",
8149 | FT_STRING, BASE_NONE,
8150 | NULL((void*)0), 0x0,
8151 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8152 | {&hf_nmea0183_cur_direction_ref,
8153 | {"Direction Reference in use", "nmea0183.cur.direction_ref",
8154 | FT_CHAR, BASE_NONE,
8155 | VALS(direction_reference)((0 ? (const struct _value_string*)0 : ((direction_reference) ))), 0x0,
8156 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8157 | {&hf_nmea0183_cur_heading,
8158 | {"Heading", "nmea0183.cur.heading",
8159 | FT_STRING, BASE_NONE,
8160 | NULL((void*)0), 0x0,
8161 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8162 | {&hf_nmea0183_cur_heading_ref,
8163 | {"Heading Reference in use", "nmea0183.cur.heading_ref",
8164 | FT_CHAR, BASE_NONE,
8165 | VALS(heading_reference)((0 ? (const struct _value_string*)0 : ((heading_reference))) ), 0x0,
8166 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8167 | {&hf_nmea0183_cur_layer,
8168 | {"Layer Number", "nmea0183.cur.layer",
8169 | FT_STRING, BASE_NONE,
8170 | NULL((void*)0), 0x0,
8171 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8172 | {&hf_nmea0183_cur_ref_layer,
8173 | {"Reference Layer Depth (m)", "nmea0183.cur.ref_layer",
8174 | FT_STRING, BASE_NONE,
8175 | NULL((void*)0), 0x0,
8176 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8177 | {&hf_nmea0183_cur_speed,
8178 | {"Current Speed (knots)", "nmea0183.cur.speed",
8179 | FT_STRING, BASE_NONE,
8180 | NULL((void*)0), 0x0,
8181 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8182 | {&hf_nmea0183_cur_speed_ref,
8183 | {"Speed Reference", "nmea0183.cur.speed_ref",
8184 | FT_CHAR, BASE_NONE,
8185 | VALS(speed_reference)((0 ? (const struct _value_string*)0 : ((speed_reference)))), 0x0,
8186 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8187 | {&hf_nmea0183_cur_validity,
8188 | {"Validity of the Data", "nmea0183.cur.validity",
8189 | FT_CHAR, BASE_NONE,
8190 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
8191 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8192 | {&hf_nmea0183_dbt_fathoms,
8193 | {"Water depth (fathoms)", "nmea0183.dbt.fathoms",
8194 | FT_STRING, BASE_NONE,
8195 | NULL((void*)0), 0x0,
8196 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8197 | {&hf_nmea0183_dbt_feet,
8198 | {"Water depth (feet)", "nmea0183.dbt.feet",
8199 | FT_STRING, BASE_NONE,
8200 | NULL((void*)0), 0x0,
8201 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8202 | {&hf_nmea0183_dbt_meters,
8203 | {"Water depth (meters)", "nmea0183.dbt.meters",
8204 | FT_STRING, BASE_NONE,
8205 | NULL((void*)0), 0x0,
8206 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8207 | {&hf_nmea0183_dcn_data_basis,
8208 | {"Fix Data Basis", "nmea0183.dcn.basis",
8209 | FT_CHAR, BASE_NONE,
8210 | VALS(dcn_data_basis)((0 ? (const struct _value_string*)0 : ((dcn_data_basis)))), 0x0,
8211 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8212 | {&hf_nmea0183_dcn_dc_id,
8213 | {"Decca Chain Identifier", "nmea0183.dcn.dcid",
8214 | FT_STRING, BASE_NONE,
8215 | NULL((void*)0), 0x0,
8216 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8217 | {&hf_nmea0183_dcn_glop,
8218 | {"Green Line of Position (LOP)", "nmea0183.dcn.glop",
8219 | FT_STRING, BASE_NONE,
8220 | NULL((void*)0), 0x0,
8221 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8222 | {&hf_nmea0183_dcn_gnav,
8223 | {"Green-line Navigation Use", "nmea0183.dcn.gnav",
8224 | FT_CHAR, BASE_NONE,
8225 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
8226 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8227 | {&hf_nmea0183_dcn_gstatus,
8228 | {"Status: Green-Master Line", "nmea0183.dcn.gstatus",
8229 | FT_CHAR, BASE_NONE,
8230 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
8231 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8232 | {&hf_nmea0183_dcn_gz_id,
8233 | {"Green Zone Identifier", "nmea0183.dcn.gzid",
8234 | FT_STRING, BASE_NONE,
8235 | NULL((void*)0), 0x0,
8236 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8237 | {&hf_nmea0183_dcn_plop,
8238 | {"Purple Line of Position (LOP)", "nmea0183.dcn.plop",
8239 | FT_STRING, BASE_NONE,
8240 | NULL((void*)0), 0x0,
8241 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8242 | {&hf_nmea0183_dcn_pnav,
8243 | {"Purple-line Navigation Use", "nmea0183.dcn.pnav",
8244 | FT_CHAR, BASE_NONE,
8245 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
8246 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8247 | {&hf_nmea0183_dcn_pos_uncertainty,
8248 | {"Position Uncertainty (nm)", "nmea0183.dcn.pos_uncertainty",
8249 | FT_STRING, BASE_NONE,
8250 | NULL((void*)0), 0x0,
8251 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8252 | {&hf_nmea0183_dcn_pstatus,
8253 | {"Status: Purple-Master Line", "nmea0183.dcn.pstatus",
8254 | FT_CHAR, BASE_NONE,
8255 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
8256 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8257 | {&hf_nmea0183_dcn_pz_id,
8258 | {"Purple Zone Identifier", "nmea0183.dcn.pzid",
8259 | FT_STRING, BASE_NONE,
8260 | NULL((void*)0), 0x0,
8261 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8262 | {&hf_nmea0183_dcn_rlop,
8263 | {"Red Line of Position (LOP)", "nmea0183.dcn.rlop",
8264 | FT_STRING, BASE_NONE,
8265 | NULL((void*)0), 0x0,
8266 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8267 | {&hf_nmea0183_dcn_rnav,
8268 | {"Red-line Navigation Use", "nmea0183.dcn.rnav",
8269 | FT_CHAR, BASE_NONE,
8270 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
8271 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8272 | {&hf_nmea0183_dcn_rstatus,
8273 | {"Status: Red-Master Line", "nmea0183.dcn.rstatus",
8274 | FT_CHAR, BASE_NONE,
8275 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
8276 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8277 | {&hf_nmea0183_dcn_rz_id,
8278 | {"Red Zone Identifier", "nmea0183.dcn.rzid",
8279 | FT_STRING, BASE_NONE,
8280 | NULL((void*)0), 0x0,
8281 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8282 | {&hf_nmea0183_ddc_brightness,
8283 | {"Brightness Percentage", "nmea0183.ddc.brightness",
8284 | FT_STRING, BASE_NONE,
8285 | NULL((void*)0), 0x0,
8286 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8287 | {&hf_nmea0183_ddc_dimming,
8288 | {"Display Dimming Preset", "nmea0183.ddc.dimming",
8289 | FT_CHAR, BASE_NONE,
8290 | VALS(dimming_palette_preset_vals)((0 ? (const struct _value_string*)0 : ((dimming_palette_preset_vals )))), 0x0,
8291 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8292 | {&hf_nmea0183_ddc_palette,
8293 | {"Color Palette", "nmea0183.ddc.palette",
8294 | FT_CHAR, BASE_NONE,
8295 | VALS(dimming_palette_preset_vals)((0 ? (const struct _value_string*)0 : ((dimming_palette_preset_vals )))), 0x0,
8296 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8297 | {&hf_nmea0183_ddc_status,
8298 | {"Sentence Status Flag", "nmea0183.ddc.status",
8299 | FT_CHAR, BASE_NONE,
8300 | VALS(sentence_status_vals)((0 ? (const struct _value_string*)0 : ((sentence_status_vals )))), 0x0,
8301 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8302 | {&hf_nmea0183_dor_door_num,
8303 | {"Door Number", "nmea0183.dor.number",
8304 | FT_STRING, BASE_NONE,
8305 | NULL((void*)0), 0x0,
8306 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8307 | {&hf_nmea0183_dor_first_indic,
8308 | {"First Division Indicator", "nmea0183.dor.indicator_1",
8309 | FT_STRING, BASE_NONE,
8310 | NULL((void*)0), 0x0,
8311 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8312 | {&hf_nmea0183_dor_msg_type,
8313 | {"Message Type", "nmea0183.dor.msg_type",
8314 | FT_CHAR, BASE_NONE,
8315 | VALS(dor_msg_type_vals)((0 ? (const struct _value_string*)0 : ((dor_msg_type_vals))) ), 0x0,
8316 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8317 | {&hf_nmea0183_dor_open_count,
8318 | {"Open and/or Faulty Door Count", "nmea0183.dor.open_count",
8319 | FT_STRING, BASE_NONE,
8320 | NULL((void*)0), 0x0,
8321 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8322 | {&hf_nmea0183_dor_second_indic,
8323 | {"Second Division Indicator", "nmea0183.dor.indicator_2",
8324 | FT_STRING, BASE_NONE,
8325 | NULL((void*)0), 0x0,
8326 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8327 | {&hf_nmea0183_dor_setting,
8328 | {"Watertight Door Switch Setting", "nmea0183.dor.setting",
8329 | FT_CHAR, BASE_NONE,
8330 | VALS(watertight_switch_setting_vals)((0 ? (const struct _value_string*)0 : ((watertight_switch_setting_vals )))), 0x0,
8331 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8332 | {&hf_nmea0183_dor_status,
8333 | {"Door Status", "nmea0183.dor.status",
8334 | FT_CHAR, BASE_NONE,
8335 | VALS(door_status_vals)((0 ? (const struct _value_string*)0 : ((door_status_vals)))), 0x0,
8336 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8337 | {&hf_nmea0183_dor_system_type,
8338 | {"Type of Door Monitoring System", "nmea0183.dor.sys_type",
8339 | FT_STRING, BASE_NONE,
8340 | NULL((void*)0), 0x0,
8341 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8342 | {&hf_nmea0183_dor_text,
8343 | {"Message Description Text", "nmea0183.dor.text",
8344 | FT_STRING, BASE_NONE,
8345 | NULL((void*)0), 0x0,
8346 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8347 | {&hf_nmea0183_dor_time,
8348 | {"Event Time (UTC)", "nmea0183.dor.time",
8349 | FT_STRING, BASE_NONE,
8350 | NULL((void*)0), 0x0,
8351 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8352 | {&hf_nmea0183_dpt_depth,
8353 | {"Water depth", "nmea0183.dpt_depth",
8354 | FT_STRING, BASE_NONE,
8355 | NULL((void*)0), 0x0,
8356 | "NMEA 0183 DPT Water depth relative to transducer", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8357 | {&hf_nmea0183_dpt_max_range,
8358 | {"Maximum range", "nmea0183.dpt_max_range",
8359 | FT_STRING, BASE_NONE,
8360 | NULL((void*)0), 0x0,
8361 | "NMEA 0183 DPT Maximum range scale in use (NMEA 3.0 and above)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8362 | {&hf_nmea0183_dpt_offset,
8363 | {"Offset", "nmea0183.dpt_offset",
8364 | FT_STRING, BASE_NONE,
8365 | NULL((void*)0), 0x0,
8366 | "NMEA 0183 DPT Offset from transducer, positive means distance from transducer to water line, negative means distance from transducer to keel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8367 | {&hf_nmea0183_dsc_ack,
8368 | {"Acknowledgement", "nmea0183.dsc.ack",
8369 | FT_CHAR, BASE_NONE,
8370 | VALS(dsc_ack_vals)((0 ? (const struct _value_string*)0 : ((dsc_ack_vals)))), 0x0,
8371 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8372 | {&hf_nmea0183_dsc_address,
8373 | {"Address", "nmea0183.dsc.address",
8374 | FT_STRING, BASE_NONE,
8375 | NULL((void*)0), 0x0,
8376 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8377 | {&hf_nmea0183_dsc_category,
8378 | {"Category", "nmea0183.dsc.category",
8379 | FT_STRING, BASE_NONE,
8380 | NULL((void*)0), 0x0,
8381 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8382 | {&hf_nmea0183_dsc_comm_type,
8383 | {"Type of Communication", "nmea0183.dsc.comm_type",
8384 | FT_STRING, BASE_NONE,
8385 | NULL((void*)0), 0x0,
8386 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8387 | {&hf_nmea0183_dsc_expansion,
8388 | {"Expansion Indicator", "nmea0183.dsc.expansion",
8389 | FT_STRING, BASE_NONE,
8390 | NULL((void*)0), 0x0,
8391 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8392 | {&hf_nmea0183_dsc_first_tcmd,
8393 | {"First Telecommand", "nmea0183.dsc.first_tcmd",
8394 | FT_STRING, BASE_NONE,
8395 | NULL((void*)0), 0x0,
8396 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8397 | {&hf_nmea0183_dsc_format,
8398 | {"Format Specifier", "nmea0183.dsc.format",
8399 | FT_STRING, BASE_NONE,
8400 | NULL((void*)0), 0x0,
8401 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8402 | {&hf_nmea0183_dsc_mmsi,
8403 | {"MMSI of Ship in Distress", "nmea0183.dsc.mmsi",
8404 | FT_STRING, BASE_NONE,
8405 | NULL((void*)0), 0x0,
8406 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8407 | {&hf_nmea0183_dsc_nature_distress,
8408 | {"Nature of Distress", "nmea0183.dsc.distress",
8409 | FT_STRING, BASE_NONE,
8410 | NULL((void*)0), 0x0,
8411 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8412 | {&hf_nmea0183_dsc_position,
8413 | {"Position", "nmea0183.dsc.position",
8414 | FT_STRING, BASE_NONE,
8415 | NULL((void*)0), 0x0,
8416 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8417 | {&hf_nmea0183_dsc_time,
8418 | {"Time (UTC)", "nmea0183.dsc.time",
8419 | FT_STRING, BASE_NONE,
8420 | NULL((void*)0), 0x0,
8421 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8422 | {&hf_nmea0183_dse_code,
8423 | {"Code", "nmea0183.dse.code",
8424 | FT_STRING, BASE_NONE,
8425 | NULL((void*)0), 0x0,
8426 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8427 | {&hf_nmea0183_dse_data,
8428 | {"Data", "nmea0183.dse.data",
8429 | FT_STRING, BASE_NONE,
8430 | NULL((void*)0), 0x0,
8431 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8432 | {&hf_nmea0183_dse_flag,
8433 | {"Query/Reply Flag", "nmea0183.dse.flag",
8434 | FT_CHAR, BASE_NONE,
8435 | VALS(dse_flag_vals)((0 ? (const struct _value_string*)0 : ((dse_flag_vals)))), 0x0,
8436 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8437 | {&hf_nmea0183_dse_mmsi,
8438 | {"Vessel MMSI", "nmea0183.dse.mmsi",
8439 | FT_STRING, BASE_NONE,
8440 | NULL((void*)0), 0x0,
8441 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8442 | {&hf_nmea0183_dse_sentence_number,
8443 | {"Sentence Number", "nmea0183.dse.sentence_num",
8444 | FT_STRING, BASE_NONE,
8445 | NULL((void*)0), 0x0,
8446 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8447 | {&hf_nmea0183_dse_total_sentences,
8448 | {"Total Number of Sentences", "nmea0183.dse.tot_sentences",
8449 | FT_STRING, BASE_NONE,
8450 | NULL((void*)0), 0x0,
8451 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8452 | {&hf_nmea0183_dsi_course,
8453 | {"Vessel Course (degrees True)", "nmea0183.dsi.course",
8454 | FT_STRING, BASE_NONE,
8455 | NULL((void*)0), 0x0,
8456 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8457 | {&hf_nmea0183_dsi_expansion,
8458 | {"Expansion Indicator", "nmea0183.dsi.expansion",
8459 | FT_STRING, BASE_NONE,
8460 | NULL((void*)0), 0x0,
8461 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8462 | {&hf_nmea0183_dsi_geo_area,
8463 | {"Geographic Area (0.01 minutes)", "nmea0183.dsi.geo",
8464 | FT_STRING, BASE_NONE,
8465 | NULL((void*)0), 0x0,
8466 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8467 | {&hf_nmea0183_dsi_info,
8468 | {"Information", "nmea0183.dsi.info",
8469 | FT_STRING, BASE_NONE,
8470 | NULL((void*)0), 0x0,
8471 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8472 | {&hf_nmea0183_dsi_mmsi,
8473 | {"Vessel MMSI", "nmea0183.dsi.mmsi",
8474 | FT_STRING, BASE_NONE,
8475 | NULL((void*)0), 0x0,
8476 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8477 | {&hf_nmea0183_dsi_sentence_number,
8478 | {"Sentence Number", "nmea0183.dsi.sentence_num",
8479 | FT_STRING, BASE_NONE,
8480 | NULL((void*)0), 0x0,
8481 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8482 | {&hf_nmea0183_dsi_symbol,
8483 | {"Symbol", "nmea0183.dsi.symbol",
8484 | FT_STRING, BASE_NONE,
8485 | NULL((void*)0), 0x0,
8486 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8487 | {&hf_nmea0183_dsi_total_sentences,
8488 | {"Total Number of Sentences", "nmea0183.dsi.tot_sentences",
8489 | FT_STRING, BASE_NONE,
8490 | NULL((void*)0), 0x0,
8491 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8492 | {&hf_nmea0183_dsi_type,
8493 | {"Vessel Type", "nmea0183.dsi.type",
8494 | FT_STRING, BASE_NONE,
8495 | NULL((void*)0), 0x0,
8496 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8497 | {&hf_nmea0183_dsr_expansion,
8498 | {"Expansion Indicator", "nmea0183.dsr.expansion",
8499 | FT_STRING, BASE_NONE,
8500 | NULL((void*)0), 0x0,
8501 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8502 | {&hf_nmea0183_dsr_info,
8503 | {"Information", "nmea0183.dsr.info",
8504 | FT_STRING, BASE_NONE,
8505 | NULL((void*)0), 0x0,
8506 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8507 | {&hf_nmea0183_dsr_mmsi,
8508 | {"Vessel MMSI", "nmea0183.dsr.mmsi",
8509 | FT_STRING, BASE_NONE,
8510 | NULL((void*)0), 0x0,
8511 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8512 | {&hf_nmea0183_dsr_sentence_number,
8513 | {"Sentence Number", "nmea0183.dsr.sentence_num",
8514 | FT_STRING, BASE_NONE,
8515 | NULL((void*)0), 0x0,
8516 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8517 | {&hf_nmea0183_dsr_symbol,
8518 | {"Symbol", "nmea0183.dsr.symbol",
8519 | FT_STRING, BASE_NONE,
8520 | NULL((void*)0), 0x0,
8521 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8522 | {&hf_nmea0183_dsr_total_sentences,
8523 | {"Total Number of Sentences", "nmea0183.dsr.tot_sentences",
8524 | FT_STRING, BASE_NONE,
8525 | NULL((void*)0), 0x0,
8526 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8527 | {&hf_nmea0183_dtm_alt_offset,
8528 | {"Altitude Offset (m)", "nmea0183.dtm.alt_offset",
8529 | FT_STRING, BASE_NONE,
8530 | NULL((void*)0), 0x0,
8531 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8532 | {&hf_nmea0183_dtm_datum,
8533 | {"Datum Code", "nmea0183.dtm.datum",
8534 | FT_STRING, BASE_NONE,
8535 | NULL((void*)0), 0x0,
8536 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8537 | {&hf_nmea0183_dtm_datum_subdiv,
8538 | {"Datum Subdivision Code", "nmea0183.dtm.datum_sub",
8539 | FT_STRING, BASE_NONE,
8540 | NULL((void*)0), 0x0,
8541 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8542 | {&hf_nmea0183_dtm_lat_offset,
8543 | {"Latitude Offset (minutes)", "nmea0183.dtm.lat_offset",
8544 | FT_STRING, BASE_NONE,
8545 | NULL((void*)0), 0x0,
8546 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8547 | {&hf_nmea0183_dtm_lon_offset,
8548 | {"Longitude Offset (minutes)", "nmea0183.dtm.lon_offset",
8549 | FT_STRING, BASE_NONE,
8550 | NULL((void*)0), 0x0,
8551 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8552 | {&hf_nmea0183_dtm_ref_datum,
8553 | {"Reference Datum Code", "nmea0183.dtm.ref_datum",
8554 | FT_STRING, BASE_NONE,
8555 | NULL((void*)0), 0x0,
8556 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8557 | {&hf_nmea0183_etl_msg_type,
8558 | {"Message Type", "nmea0183.etl.msg_type",
8559 | FT_CHAR, BASE_NONE,
8560 | VALS(etl_message_type_vals)((0 ? (const struct _value_string*)0 : ((etl_message_type_vals )))), 0x0,
8561 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8562 | {&hf_nmea0183_etl_num_eng_shaft,
8563 | {"Number of Engine or Propeller Shaft", "nmea0183.etl.engshaft_num",
8564 | FT_CHAR, BASE_NONE,
8565 | VALS(revolutions_number_vals)((0 ? (const struct _value_string*)0 : ((revolutions_number_vals )))), 0x0,
8566 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8567 | {&hf_nmea0183_etl_opind,
8568 | {"Operating Location Indicator", "nmea0183.etl.posind_op",
8569 | FT_CHAR, BASE_NONE,
8570 | VALS(oplocation_indicator_vals)((0 ? (const struct _value_string*)0 : ((oplocation_indicator_vals )))), 0x0,
8571 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8572 | {&hf_nmea0183_etl_posind_engine,
8573 | {"Position Indicator of Engine Telegraph", "nmea0183.etl.posind_eng",
8574 | FT_UINT16, BASE_DEC,
8575 | VALS(indicators_for_engine_telegraph)((0 ? (const struct _value_string*)0 : ((indicators_for_engine_telegraph )))), 0x0,
8576 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8577 | {&hf_nmea0183_etl_posind_sub,
8578 | {"Position Indication of Sub Telegraph", "nmea0183.etl.posind_sub",
8579 | FT_UINT16, BASE_DEC,
8580 | VALS(indicators_for_sub_telegraph)((0 ? (const struct _value_string*)0 : ((indicators_for_sub_telegraph )))), 0x0,
8581 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8582 | {&hf_nmea0183_etl_time,
8583 | {"Event Time (UTC)", "nmea0183.etl.time",
8584 | FT_STRING, BASE_NONE,
8585 | NULL((void*)0), 0x0,
8586 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8587 | {&hf_nmea0183_fsi_mode,
8588 | {"Mode of Operation", "nmea0183.fsi.mode",
8589 | FT_CHAR, BASE_NONE,
8590 | VALS(fsi_mode_vals)((0 ? (const struct _value_string*)0 : ((fsi_mode_vals)))), 0x0,
8591 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8592 | {&hf_nmea0183_fsi_power,
8593 | {"Reference Datum Code", "nmea0183.fsi.power",
8594 | FT_CHAR, BASE_NONE,
8595 | VALS(fsi_power_vals)((0 ? (const struct _value_string*)0 : ((fsi_power_vals)))), 0x0,
8596 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8597 | {&hf_nmea0183_fsi_recv_freq,
8598 | {"Receive Frequency (100Hz Increments)", "nmea0183.fsi.recv_freq",
8599 | FT_STRING, BASE_NONE,
8600 | NULL((void*)0), 0x0,
8601 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8602 | {&hf_nmea0183_fsi_xmit_freq,
8603 | {"Transmit Frequency (100Hz Increments)", "nmea0183.fsi.xmit_freq",
8604 | FT_STRING, BASE_NONE,
8605 | NULL((void*)0), 0x0,
8606 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8607 | {&hf_nmea0183_gbs_alt_err,
8608 | {"Expected Error in Altitude (m)", "nmea0183.gbs.alt_err",
8609 | FT_STRING, BASE_NONE,
8610 | NULL((void*)0), 0x0,
8611 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8612 | {&hf_nmea0183_gbs_est_bias,
8613 | {"Estimate of Bias (m) on Most Likely Failed Satellite", "nmea0183.gbs.est_bias",
8614 | FT_STRING, BASE_NONE,
8615 | NULL((void*)0), 0x0,
8616 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8617 | {&hf_nmea0183_gbs_lat_err,
8618 | {"Expected Error in Latitude (m)", "nmea0183.gbs.lat_err",
8619 | FT_STRING, BASE_NONE,
8620 | NULL((void*)0), 0x0,
8621 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8622 | {&hf_nmea0183_gbs_long_err,
8623 | {"Expected Error in Longitude (m)", "nmea0183.gbs.long_err",
8624 | FT_STRING, BASE_NONE,
8625 | NULL((void*)0), 0x0,
8626 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8627 | {&hf_nmea0183_gbs_prob_miss,
8628 | {"Prob. of Missed Detection for Most Likely Failed Satellite", "nmea0183.gbs.prob_miss",
8629 | FT_STRING, BASE_NONE,
8630 | NULL((void*)0), 0x0,
8631 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8632 | {&hf_nmea0183_gbs_sat_id,
8633 | {"ID Number of Most Likely Failed Satellite (PRN No.)", "nmea0183.gbs.sat_id",
8634 | FT_STRING, BASE_NONE,
8635 | NULL((void*)0), 0x0,
8636 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8637 | {&hf_nmea0183_gbs_sat_type,
8638 | {"Satellite Type", "nmea0183.gbs.sat_type",
8639 | FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100,
8640 | RVALS(sat_prn_type)((0 ? (const struct _range_string*)0 : ((sat_prn_type)))), 0x0,
8641 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8642 | {&hf_nmea0183_gbs_std_dev,
8643 | {"Standard Deviation of Bias Estimate", "nmea0183.gbs.std_dev",
8644 | FT_STRING, BASE_NONE,
8645 | NULL((void*)0), 0x0,
8646 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8647 | {&hf_nmea0183_gbs_utc,
8648 | {"UTC time of the GGA or GNS fix", "nmea0183.gbs.utc",
8649 | FT_STRING, BASE_NONE,
8650 | NULL((void*)0), 0x0,
8651 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8652 | {&hf_nmea0183_gga_age_dgps,
8653 | {"Age of differential GPS", "nmea0183.gga_age_dgps",
8654 | FT_STRING, BASE_NONE,
8655 | NULL((void*)0), 0x0,
8656 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8657 | {&hf_nmea0183_gga_altitude,
8658 | {"Altitude", "nmea0183.gga_altitude",
8659 | FT_STRING, BASE_NONE,
8660 | NULL((void*)0), 0x0,
8661 | "NMEA 0183 GGA Antenna Altitude above mean-sea-level", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8662 | {&hf_nmea0183_gga_altitude_unit,
8663 | {"Altitude unit", "nmea0183.gga_altitude_unit",
8664 | FT_STRING, BASE_NONE,
8665 | NULL((void*)0), 0x0,
8666 | "NMEA 0183 GGA Units of antenna altitude", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8667 | {&hf_nmea0183_gga_dgps_station,
8668 | {"Differential GPS station id", "nmea0183.gga_dgps_station",
8669 | FT_STRING, BASE_NONE,
8670 | NULL((void*)0), 0x0,
8671 | "NMEA 0183 GGA Differential reference station ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8672 | {&hf_nmea0183_gga_geoidal_separation,
8673 | {"Geoidal separation", "nmea0183.gga_geoidal_separation",
8674 | FT_STRING, BASE_NONE,
8675 | NULL((void*)0), 0x0,
8676 | "NMEA 0183 GGA Geoidal separation, the difference between the WGS-84 earth ellipsoid and mean-sea-level", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8677 | {&hf_nmea0183_gga_geoidal_separation_unit,
8678 | {"Geoidal separation unit", "nmea0183.gga_geoidal_separation_unit",
8679 | FT_STRING, BASE_NONE,
8680 | NULL((void*)0), 0x0,
8681 | "NMEA 0183 GGA Units of geoidal separation, meters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8682 | {&hf_nmea0183_gga_horizontal_dilution,
8683 | {"Horizontal Dilution", "nmea0183.gga_horizontal_dilution",
8684 | FT_STRING, BASE_NONE,
8685 | NULL((void*)0), 0x0,
8686 | "NMEA 0183 GGA Horizontal Dilution of precision", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8687 | {&hf_nmea0183_gga_latitude,
8688 | {"Latitude", "nmea0183.gga_latitude",
8689 | FT_NONE, BASE_NONE,
8690 | NULL((void*)0), 0x0,
8691 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8692 | {&hf_nmea0183_gga_latitude_degree,
8693 | {"Degree", "nmea0183.gga_latitude_degree",
8694 | FT_STRING, BASE_NONE,
8695 | NULL((void*)0), 0x0,
8696 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8697 | {&hf_nmea0183_gga_latitude_direction,
8698 | {"Direction", "nmea0183.gga_latitude_direction",
8699 | FT_STRING, BASE_NONE,
8700 | NULL((void*)0), 0x0,
8701 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8702 | {&hf_nmea0183_gga_latitude_minute,
8703 | {"Minute", "nmea0183.gga_latitude_minute",
8704 | FT_STRING, BASE_NONE,
8705 | NULL((void*)0), 0x0,
8706 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8707 | {&hf_nmea0183_gga_longitude,
8708 | {"Longitude", "nmea0183.gga_longitude",
8709 | FT_NONE, BASE_NONE,
8710 | NULL((void*)0), 0x0,
8711 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8712 | {&hf_nmea0183_gga_longitude_degree,
8713 | {"Degree", "nmea0183.gga_longitude_degree",
8714 | FT_STRING, BASE_NONE,
8715 | NULL((void*)0), 0x0,
8716 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8717 | {&hf_nmea0183_gga_longitude_direction,
8718 | {"Direction", "nmea0183.gga_longitude_direction",
8719 | FT_STRING, BASE_NONE,
8720 | NULL((void*)0), 0x0,
8721 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8722 | {&hf_nmea0183_gga_longitude_minute,
8723 | {"Minute", "nmea0183.gga_longitude_minute",
8724 | FT_STRING, BASE_NONE,
8725 | NULL((void*)0), 0x0,
8726 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8727 | {&hf_nmea0183_gga_number_satellites,
8728 | {"Number of satellites", "nmea0183.gga_number_satellites",
8729 | FT_STRING, BASE_NONE,
8730 | NULL((void*)0), 0x0,
8731 | "NMEA 0183 GGA Number of satellites in use", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8732 | {&hf_nmea0183_gga_quality,
8733 | {"Quality indicator", "nmea0183.gga_quality",
8734 | FT_STRING, BASE_NONE,
8735 | NULL((void*)0), 0x0,
8736 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8737 | {&hf_nmea0183_gga_time,
8738 | {"UTC Time of position", "nmea0183.gga_time",
8739 | FT_NONE, BASE_NONE,
8740 | NULL((void*)0), 0x0,
8741 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8742 | {&hf_nmea0183_gga_time_hour,
8743 | {"Hour", "nmea0183.gga_time_hour",
8744 | FT_STRING, BASE_NONE,
8745 | NULL((void*)0), 0x0,
8746 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8747 | {&hf_nmea0183_gga_time_minute,
8748 | {"Minute", "nmea0183.gga_time_minute",
8749 | FT_STRING, BASE_NONE,
8750 | NULL((void*)0), 0x0,
8751 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8752 | {&hf_nmea0183_gga_time_second,
8753 | {"Second", "nmea0183.gga_time_second",
8754 | FT_STRING, BASE_NONE,
8755 | NULL((void*)0), 0x0,
8756 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8757 | {&hf_nmea0183_glc_gri,
8758 | {"Loran-C GRI (tens of microseconds)", "nmea0183.glc.gri",
8759 | FT_STRING, BASE_NONE,
8760 | NULL((void*)0), 0x0,
8761 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8762 | {&hf_nmea0183_glc_master_toa,
8763 | {"Master TOA (microseconds)", "nmea0183.glc.master",
8764 | FT_STRING, BASE_NONE,
8765 | NULL((void*)0), 0x0,
8766 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8767 | {&hf_nmea0183_glc_sig_status,
8768 | {"Signal Status", "nmea0183.glc.status",
8769 | FT_CHAR, BASE_NONE,
8770 | VALS(glc_sig_status)((0 ? (const struct _value_string*)0 : ((glc_sig_status)))), 0x0,
8771 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8772 | {&hf_nmea0183_glc_td1,
8773 | {"Time Difference #1 (microseconds)", "nmea0183.glc.td1",
8774 | FT_STRING, BASE_NONE,
8775 | NULL((void*)0), 0x0,
8776 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8777 | {&hf_nmea0183_glc_td2,
8778 | {"Time Difference #2 (microseconds)", "nmea0183.glc.td2",
8779 | FT_STRING, BASE_NONE,
8780 | NULL((void*)0), 0x0,
8781 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8782 | {&hf_nmea0183_glc_td3,
8783 | {"Time Difference #3 (microseconds)", "nmea0183.glc.td3",
8784 | FT_STRING, BASE_NONE,
8785 | NULL((void*)0), 0x0,
8786 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8787 | {&hf_nmea0183_glc_td4,
8788 | {"Time Difference #4 (microseconds)", "nmea0183.glc.td4",
8789 | FT_STRING, BASE_NONE,
8790 | NULL((void*)0), 0x0,
8791 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8792 | {&hf_nmea0183_glc_td5,
8793 | {"Time Difference #5 (microseconds)", "nmea0183.glc.td5",
8794 | FT_STRING, BASE_NONE,
8795 | NULL((void*)0), 0x0,
8796 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8797 | {&hf_nmea0183_gll_latitude,
8798 | {"Latitude", "nmea0183.gll_latitude",
8799 | FT_NONE, BASE_NONE,
8800 | NULL((void*)0), 0x0,
8801 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8802 | {&hf_nmea0183_gll_latitude_degree,
8803 | {"Degree", "nmea0183.gll_latitude_degree",
8804 | FT_STRING, BASE_NONE,
8805 | NULL((void*)0), 0x0,
8806 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8807 | {&hf_nmea0183_gll_latitude_direction,
8808 | {"Direction", "nmea0183.gll_latitude_direction",
8809 | FT_STRING, BASE_NONE,
8810 | NULL((void*)0), 0x0,
8811 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8812 | {&hf_nmea0183_gll_latitude_minute,
8813 | {"Minute", "nmea0183.gll_latitude_minute",
8814 | FT_STRING, BASE_NONE,
8815 | NULL((void*)0), 0x0,
8816 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8817 | {&hf_nmea0183_gll_longitude,
8818 | {"Longitude", "nmea0183.gll_longitude",
8819 | FT_NONE, BASE_NONE,
8820 | NULL((void*)0), 0x0,
8821 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8822 | {&hf_nmea0183_gll_longitude_degree,
8823 | {"Degree", "nmea0183.gll_longitude_degree",
8824 | FT_STRING, BASE_NONE,
8825 | NULL((void*)0), 0x0,
8826 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8827 | {&hf_nmea0183_gll_longitude_direction,
8828 | {"Direction", "nmea0183.gll_longitude_direction",
8829 | FT_STRING, BASE_NONE,
8830 | NULL((void*)0), 0x0,
8831 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8832 | {&hf_nmea0183_gll_longitude_minute,
8833 | {"Minute", "nmea0183.gll_longitude_minute",
8834 | FT_STRING, BASE_NONE,
8835 | NULL((void*)0), 0x0,
8836 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8837 | {&hf_nmea0183_gll_mode,
8838 | {"FAA mode", "nmea0183.gll_mode",
8839 | FT_STRING, BASE_NONE,
8840 | NULL((void*)0), 0x0,
8841 | "NMEA 0183 GLL FAA mode indicator (NMEA 2.3 and later)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8842 | {&hf_nmea0183_gll_status,
8843 | {"Status", "nmea0183.gll_status",
8844 | FT_STRING, BASE_NONE,
8845 | NULL((void*)0), 0x0,
8846 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8847 | {&hf_nmea0183_gll_time,
8848 | {"UTC Time of position", "nmea0183.gll_time",
8849 | FT_NONE, BASE_NONE,
8850 | NULL((void*)0), 0x0,
8851 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8852 | {&hf_nmea0183_gll_time_hour,
8853 | {"Hour", "nmea0183.gll_time_hour",
8854 | FT_STRING, BASE_NONE,
8855 | NULL((void*)0), 0x0,
8856 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8857 | {&hf_nmea0183_gll_time_minute,
8858 | {"Minute", "nmea0183.gll_time_minute",
8859 | FT_STRING, BASE_NONE,
8860 | NULL((void*)0), 0x0,
8861 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8862 | {&hf_nmea0183_gll_time_second,
8863 | {"Second", "nmea0183.gll_time_second",
8864 | FT_STRING, BASE_NONE,
8865 | NULL((void*)0), 0x0,
8866 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8867 | {&hf_nmea0183_gmp_ant_alt,
8868 | {"Antenna Altitude (m) - MSL (geoid)", "nmea0183.gmp.ant_alt",
8869 | FT_STRING, BASE_NONE,
8870 | NULL((void*)0), 0x0,
8871 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8872 | {&hf_nmea0183_gmp_data_age,
8873 | {"Age of Differential Data", "nmea0183.gmp.data_age",
8874 | FT_STRING, BASE_NONE,
8875 | NULL((void*)0), 0x0,
8876 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8877 | {&hf_nmea0183_gmp_diff_ref_id,
8878 | {"Differential Reference Station ID", "nmea0183.gmp.diff_ref_id",
8879 | FT_STRING, BASE_NONE,
8880 | NULL((void*)0), 0x0,
8881 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8882 | {&hf_nmea0183_gmp_geoid_sep,
8883 | {"Geoidal Separation (m)", "nmea0183.gmp.geoid_sep",
8884 | FT_STRING, BASE_NONE,
8885 | NULL((void*)0), 0x0,
8886 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8887 | {&hf_nmea0183_gmp_hdop,
8888 | {"Horizontal Dilution of Precision (DOP)", "nmea0183.gmp.hdop",
8889 | FT_STRING, BASE_NONE,
8890 | NULL((void*)0), 0x0,
8891 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8892 | {&hf_nmea0183_gmp_mode_glonass,
8893 | {"GLONASS Mode Indicator", "nmea0183.gmp.mode_glonass",
8894 | FT_CHAR, BASE_NONE,
8895 | VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals) ))), 0x0,
8896 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8897 | {&hf_nmea0183_gmp_mode_gps,
8898 | {"GPS Mode Indicator", "nmea0183.gmp.mode_gps",
8899 | FT_CHAR, BASE_NONE,
8900 | VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals) ))), 0x0,
8901 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8902 | {&hf_nmea0183_gmp_mode_other,
8903 | {"Other Satellite System Mode Indicator", "nmea0183.gmp.mode_other",
8904 | FT_CHAR, BASE_NONE,
8905 | VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals) ))), 0x0,
8906 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8907 | {&hf_nmea0183_gmp_mode_string,
8908 | {"Mode Indicator String", "nmea0183.gmp.mode_string",
8909 | FT_STRING, BASE_NONE,
8910 | NULL((void*)0), 0x0,
8911 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8912 | {&hf_nmea0183_gmp_projection,
8913 | {"Map Projection Identification", "nmea0183.gmp.projection",
8914 | FT_STRING, BASE_NONE,
8915 | NULL((void*)0), 0x0,
8916 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8917 | {&hf_nmea0183_gmp_tot_sats,
8918 | {"Total Number of Satellites in use (00-99)", "nmea0183.gmp.tot_sats",
8919 | FT_STRING, BASE_NONE,
8920 | NULL((void*)0), 0x0,
8921 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8922 | {&hf_nmea0183_gmp_utc,
8923 | {"UTC of Position", "nmea0183.gmp.utc",
8924 | FT_STRING, BASE_NONE,
8925 | NULL((void*)0), 0x0,
8926 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8927 | {&hf_nmea0183_gmp_x_comp,
8928 | {"X (Northern) Component of Grid (or local) Coordinates", "nmea0183.gmp.x_comp",
8929 | FT_STRING, BASE_NONE,
8930 | NULL((void*)0), 0x0,
8931 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8932 | {&hf_nmea0183_gmp_y_comp,
8933 | {"Y (Eastern) Component of Grid (or local) Coordinates", "nmea0183.gmp.y_comp",
8934 | FT_STRING, BASE_NONE,
8935 | NULL((void*)0), 0x0,
8936 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8937 | {&hf_nmea0183_gmp_zone,
8938 | {"Map Zone", "nmea0183.gmp.zone",
8939 | FT_STRING, BASE_NONE,
8940 | NULL((void*)0), 0x0,
8941 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8942 | {&hf_nmea0183_gns_ant_alt,
8943 | {"Antenna Altitude (m) - MSL (geoid)", "nmea0183.gns.ant_alt",
8944 | FT_STRING, BASE_NONE,
8945 | NULL((void*)0), 0x0,
8946 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8947 | {&hf_nmea0183_gns_data_age,
8948 | {"Age of Differential Data", "nmea0183.gns.data_age",
8949 | FT_STRING, BASE_NONE,
8950 | NULL((void*)0), 0x0,
8951 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8952 | {&hf_nmea0183_gns_diff_ref_id,
8953 | {"Differential Reference Station ID", "nmea0183.gns.diff_ref_id",
8954 | FT_STRING, BASE_NONE,
8955 | NULL((void*)0), 0x0,
8956 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8957 | {&hf_nmea0183_gns_geoid_sep,
8958 | {"Geoidal Separation (m)", "nmea0183.gns.geoid_sep",
8959 | FT_STRING, BASE_NONE,
8960 | NULL((void*)0), 0x0,
8961 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8962 | {&hf_nmea0183_gns_hdop,
8963 | {"Horizontal Dilution of Precision (DOP)", "nmea0183.gns.hdop",
8964 | FT_STRING, BASE_NONE,
8965 | NULL((void*)0), 0x0,
8966 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8967 | {&hf_nmea0183_gns_latitude,
8968 | {"Latitude", "nmea0183.gns.latitude",
8969 | FT_FLOAT, BASE_NONE,
8970 | NULL((void*)0), 0x0,
8971 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8972 | {&hf_nmea0183_gns_longitude,
8973 | {"Longitude", "nmea0183.gns.longitude",
8974 | FT_FLOAT, BASE_NONE,
8975 | NULL((void*)0), 0x0,
8976 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8977 | {&hf_nmea0183_gns_mode_glonass,
8978 | {"GLONASS Mode Indicator", "nmea0183.gns.mode_glonass",
8979 | FT_CHAR, BASE_NONE,
8980 | VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals) ))), 0x0,
8981 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8982 | {&hf_nmea0183_gns_mode_gps,
8983 | {"GPS Mode Indicator", "nmea0183.gns.mode_gps",
8984 | FT_CHAR, BASE_NONE,
8985 | VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals) ))), 0x0,
8986 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8987 | {&hf_nmea0183_gns_mode_other,
8988 | {"Other Satellite System Mode Indicator", "nmea0183.gns.mode_other",
8989 | FT_CHAR, BASE_NONE,
8990 | VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals) ))), 0x0,
8991 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8992 | {&hf_nmea0183_gns_mode_string,
8993 | {"Mode Indicator String", "nmea0183.gns.mode_string",
8994 | FT_STRING, BASE_NONE,
8995 | NULL((void*)0), 0x0,
8996 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8997 | {&hf_nmea0183_gns_tot_sats,
8998 | {"Total Number of Satellites in use (00-99)", "nmea0183.gns.tot_sats",
8999 | FT_STRING, BASE_NONE,
9000 | NULL((void*)0), 0x0,
9001 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9002 | {&hf_nmea0183_gns_utc,
9003 | {"UTC of Position", "nmea0183.gns.utc",
9004 | FT_STRING, BASE_NONE,
9005 | NULL((void*)0), 0x0,
9006 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9007 | {&hf_nmea0183_grs_mode,
9008 | {"Mode (Residuals)", "nmea0183.grs.mode",
9009 | FT_CHAR, BASE_NONE,
9010 | VALS(grs_mode_vals)((0 ? (const struct _value_string*)0 : ((grs_mode_vals)))), 0x0,
9011 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9012 | {&hf_nmea0183_grs_range_resid,
9013 | {"Range Residual (m)", "nmea0183.grs.residual",
9014 | FT_STRING, BASE_NONE,
9015 | NULL((void*)0), 0x0,
9016 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9017 | {&hf_nmea0183_grs_utc,
9018 | {"UTC time of the associated GGA/GNS fix", "nmea0183.grs.utc",
9019 | FT_STRING, BASE_NONE,
9020 | NULL((void*)0), 0x0,
9021 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9022 | {&hf_nmea0183_gsa_fix_mode,
9023 | {"Fix Mode", "nmea0183.gsa.fixmode",
9024 | FT_CHAR, BASE_NONE,
9025 | VALS(gsa_fix_mode)((0 ? (const struct _value_string*)0 : ((gsa_fix_mode)))), 0x0,
9026 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9027 | {&hf_nmea0183_gsa_hdop,
9028 | {"Horizontal Dilution of Precision (HDOP)", "nmea0183.gsa.hdop",
9029 | FT_STRING, BASE_NONE,
9030 | NULL((void*)0), 0x0,
9031 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9032 | {&hf_nmea0183_gsa_op_mode,
9033 | {"Operation Mode", "nmea0183.gsa.opmode",
9034 | FT_CHAR, BASE_NONE,
9035 | VALS(gsa_op_mode)((0 ? (const struct _value_string*)0 : ((gsa_op_mode)))), 0x0,
9036 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9037 | {&hf_nmea0183_gsa_pdop,
9038 | {"Position Dilution of Precision (PDOP)", "nmea0183.gsa.pdop",
9039 | FT_STRING, BASE_NONE,
9040 | NULL((void*)0), 0x0,
9041 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9042 | {&hf_nmea0183_gsa_sat_id,
9043 | {"Satellite ID", "nmea0183.gsa.sat_id",
9044 | FT_STRING, BASE_NONE,
9045 | NULL((void*)0), 0x0,
9046 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9047 | {&hf_nmea0183_gsa_sat_type,
9048 | {"Satellite Type", "nmea0183.gsa.sat_type",
9049 | FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100,
9050 | RVALS(sat_prn_type)((0 ? (const struct _range_string*)0 : ((sat_prn_type)))), 0x0,
9051 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9052 | {&hf_nmea0183_gsa_vdop,
9053 | {"Vertical Dilution of Precision (VDOP)", "nmea0183.gsa.vdop",
9054 | FT_STRING, BASE_NONE,
9055 | NULL((void*)0), 0x0,
9056 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9057 | {&hf_nmea0183_gst_altitude_sd,
9058 | {"Standard deviation of altitude error", "nmea0183.gst_sd_altitude",
9059 | FT_STRING, BASE_NONE,
9060 | NULL((void*)0), 0x0,
9061 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9062 | {&hf_nmea0183_gst_ellipse_major_sd,
9063 | {"Standard deviation of semi-major axis of error", "nmea0183.gst_ellipse_major_sd",
9064 | FT_STRING, BASE_NONE,
9065 | NULL((void*)0), 0x0,
9066 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9067 | {&hf_nmea0183_gst_ellipse_minor_sd,
9068 | {"Standard deviation of semi-minor axis of error ellipse", "nmea0183.gst_ellipse_minor_sd",
9069 | FT_STRING, BASE_NONE,
9070 | NULL((void*)0), 0x0,
9071 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9072 | {&hf_nmea0183_gst_ellipse_orientation,
9073 | {"Orientation of semi-major axis of error ellipse", "nmea0183.gst_ellipse_orientation",
9074 | FT_STRING, BASE_NONE,
9075 | NULL((void*)0), 0x0,
9076 | "NMEA 0183 GST Orientation of semi-major axis of error ellipse (true north degrees)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9077 | {&hf_nmea0183_gst_latitude_sd,
9078 | {"Standard deviation of latitude error", "nmea0183.gst_sd_latitude",
9079 | FT_STRING, BASE_NONE,
9080 | NULL((void*)0), 0x0,
9081 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9082 | {&hf_nmea0183_gst_longitude_sd,
9083 | {"Standard deviation of longitude error", "nmea0183.gst_sd_longitude",
9084 | FT_STRING, BASE_NONE,
9085 | NULL((void*)0), 0x0,
9086 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9087 | {&hf_nmea0183_gst_rms_total_sd,
9088 | {"Total RMS standard deviation", "nmea0183.gst_sd_rms_total",
9089 | FT_STRING, BASE_NONE,
9090 | NULL((void*)0), 0x0,
9091 | "NMEA 0183 GST Total RMS standard deviation of ranges inputs to the navigation solution", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9092 | {&hf_nmea0183_gst_time,
9093 | {"UTC Time of position", "nmea0183.gst_time",
9094 | FT_NONE, BASE_NONE,
9095 | NULL((void*)0), 0x0,
9096 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9097 | {&hf_nmea0183_gst_time_hour,
9098 | {"Hour", "nmea0183.gst_time_hour",
9099 | FT_STRING, BASE_NONE,
9100 | NULL((void*)0), 0x0,
9101 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9102 | {&hf_nmea0183_gst_time_minute,
9103 | {"Minute", "nmea0183.gst_time_minute",
9104 | FT_STRING, BASE_NONE,
9105 | NULL((void*)0), 0x0,
9106 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9107 | {&hf_nmea0183_gst_time_second,
9108 | {"Second", "nmea0183.gst_time_second",
9109 | FT_STRING, BASE_NONE,
9110 | NULL((void*)0), 0x0,
9111 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9112 | {&hf_nmea0183_gsv_azimuth,
9113 | {"Azimuth (degrees True)", "nmea0183.gsv.azimuth",
9114 | FT_STRING, BASE_NONE,
9115 | NULL((void*)0), 0x0,
9116 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9117 | {&hf_nmea0183_gsv_elevation,
9118 | {"Elevation (degrees, 90 max)", "nmea0183.gsv.elevation",
9119 | FT_STRING, BASE_NONE,
9120 | NULL((void*)0), 0x0,
9121 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9122 | {&hf_nmea0183_gsv_sat_id,
9123 | {"Satellite ID", "nmea0183.gsv.sat_id",
9124 | FT_STRING, BASE_NONE,
9125 | NULL((void*)0), 0x0,
9126 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9127 | {&hf_nmea0183_gsv_sat_type,
9128 | {"Satellite Type", "nmea0183.gsv.sat_type",
9129 | FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100,
9130 | RVALS(sat_prn_type)((0 ? (const struct _range_string*)0 : ((sat_prn_type)))), 0x0,
9131 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9132 | {&hf_nmea0183_gsv_sats_in_view,
9133 | {"Total Number of Satellites in View", "nmea0183.gsv.tot_sats",
9134 | FT_STRING, BASE_NONE,
9135 | NULL((void*)0), 0x0,
9136 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9137 | {&hf_nmea0183_gsv_sentence_number,
9138 | {"Sentence Number (1 to 9)", "nmea0183.gsv.sentence_num",
9139 | FT_STRING, BASE_NONE,
9140 | NULL((void*)0), 0x0,
9141 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9142 | {&hf_nmea0183_gsv_snr,
9143 | {"SNR (C/No) (db-Hz)", "nmea0183.gsv.snr",
9144 | FT_STRING, BASE_NONE,
9145 | NULL((void*)0), 0x0,
9146 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9147 | {&hf_nmea0183_gsv_total_sentences,
9148 | {"Total Number of Sentences (1 to 9)", "nmea0183.gsv.tot_sentences",
9149 | FT_STRING, BASE_NONE,
9150 | NULL((void*)0), 0x0,
9151 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9152 | {&hf_nmea0183_hbt_interval,
9153 | {"Configured Repeat Interval", "nmea0183.hbt.interval",
9154 | FT_STRING, BASE_NONE,
9155 | NULL((void*)0), 0x0,
9156 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9157 | {&hf_nmea0183_hbt_sent_id,
9158 | {"Sequential Sentence Identifier", "nmea0183.hbt.sent_id",
9159 | FT_STRING, BASE_NONE,
9160 | NULL((void*)0), 0x0,
9161 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9162 | {&hf_nmea0183_hbt_status,
9163 | {"Equipment Status", "nmea0183.hbt.status",
9164 | FT_CHAR, BASE_NONE,
9165 | VALS(equipment_status_vals)((0 ? (const struct _value_string*)0 : ((equipment_status_vals )))), 0x0,
9166 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9167 | {&hf_nmea0183_hdg_mag_dev,
9168 | {"Magnetic Deviation (degrees E/W)", "nmea0183.hdg.deviation",
9169 | FT_STRING, BASE_NONE,
9170 | NULL((void*)0), 0x0,
9171 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9172 | {&hf_nmea0183_hdg_mag_sensor,
9173 | {"Magnetic Sensor Heading (degrees)", "nmea0183.hdg.sensor",
9174 | FT_STRING, BASE_NONE,
9175 | NULL((void*)0), 0x0,
9176 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9177 | {&hf_nmea0183_hdg_mag_var,
9178 | {"Magnetic Variation (degrees E/W)", "nmea0183.hdg.variation",
9179 | FT_STRING, BASE_NONE,
9180 | NULL((void*)0), 0x0,
9181 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9182 | {&hf_nmea0183_hdt_heading,
9183 | {"True heading", "nmea0183.hdt_heading",
9184 | FT_STRING, BASE_NONE,
9185 | NULL((void*)0), 0x0,
9186 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9187 | {&hf_nmea0183_hdt_unit,
9188 | {"Heading unit", "nmea0183.hdt_unit",
9189 | FT_STRING, BASE_NONE,
9190 | NULL((void*)0), 0x0,
9191 | "NMEA 0183 HDT Heading unit, must be T", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9192 | {&hf_nmea0183_hmr_dev_s1,
9193 | {"Deviation, Sensor 1 (degrees)", "nmea0183.hmr.s1_dev",
9194 | FT_STRING, BASE_NONE,
9195 | NULL((void*)0), 0x0,
9196 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9197 | {&hf_nmea0183_hmr_dev_s2,
9198 | {"Deviation, Sensor 2 (degrees)", "nmea0183.hmr.s2_dev",
9199 | FT_STRING, BASE_NONE,
9200 | NULL((void*)0), 0x0,
9201 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9202 | {&hf_nmea0183_hmr_difflim_setting,
9203 | {"Difference Limit Setting (degrees)", "nmea0183.hmr.difflim",
9204 | FT_STRING, BASE_NONE,
9205 | NULL((void*)0), 0x0,
9206 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9207 | {&hf_nmea0183_hmr_heading_s1,
9208 | {"Heading Sensor 1 ID", "nmea0183.hmr.s1_heading",
9209 | FT_STRING, BASE_NONE,
9210 | NULL((void*)0), 0x0,
9211 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9212 | {&hf_nmea0183_hmr_heading_s2,
9213 | {"Heading Sensor 2 ID", "nmea0183.hmr.s2_heading",
9214 | FT_STRING, BASE_NONE,
9215 | NULL((void*)0), 0x0,
9216 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9217 | {&hf_nmea0183_hmr_heading_sdiff,
9218 | {"Actual Heading Sensor Difference (degrees)", "nmea0183.hmr.sensor_diff",
9219 | FT_STRING, BASE_NONE,
9220 | NULL((void*)0), 0x0,
9221 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9222 | {&hf_nmea0183_hmr_hr_s1,
9223 | {"Heading Reading, Sensor 1 (degrees)", "nmea0183.hmr.s1_hr",
9224 | FT_STRING, BASE_NONE,
9225 | NULL((void*)0), 0x0,
9226 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9227 | {&hf_nmea0183_hmr_hr_s2,
9228 | {"Heading Reading, Sensor 2 (degrees)", "nmea0183.hmr.s2_hr",
9229 | FT_STRING, BASE_NONE,
9230 | NULL((void*)0), 0x0,
9231 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9232 | {&hf_nmea0183_hmr_s1_type,
9233 | {"Sensor 1 Type", "nmea0183.hmr.s1_stype",
9234 | FT_CHAR, BASE_NONE,
9235 | VALS(heading_monitor_sensor_type)((0 ? (const struct _value_string*)0 : ((heading_monitor_sensor_type )))), 0x0,
9236 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9237 | {&hf_nmea0183_hmr_s2_type,
9238 | {"Sensor 2 Type", "nmea0183.hmr.s2_stype",
9239 | FT_CHAR, BASE_NONE,
9240 | VALS(heading_monitor_sensor_type)((0 ? (const struct _value_string*)0 : ((heading_monitor_sensor_type )))), 0x0,
9241 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9242 | {&hf_nmea0183_hmr_status_s1,
9243 | {"Status, Sensor 1", "nmea0183.hmr.s1_status",
9244 | FT_CHAR, BASE_NONE,
9245 | VALS(heading_monitor_sensor_vals)((0 ? (const struct _value_string*)0 : ((heading_monitor_sensor_vals )))), 0x0,
9246 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9247 | {&hf_nmea0183_hmr_status_s2,
9248 | {"Status, Sensor 2", "nmea0183.hmr.s2_status",
9249 | FT_CHAR, BASE_NONE,
9250 | VALS(heading_monitor_sensor_vals)((0 ? (const struct _value_string*)0 : ((heading_monitor_sensor_vals )))), 0x0,
9251 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9252 | {&hf_nmea0183_hmr_variation,
9253 | {"Variation (degrees)", "nmea0183.hmr.variation",
9254 | FT_STRING, BASE_NONE,
9255 | NULL((void*)0), 0x0,
9256 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9257 | {&hf_nmea0183_hmr_warning_flag,
9258 | {"Override", "nmea0183.hmr.warning",
9259 | FT_CHAR, BASE_NONE,
9260 | VALS(warning_flag_vals)((0 ? (const struct _value_string*)0 : ((warning_flag_vals))) ), 0x0,
9261 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9262 | {&hf_nmea0183_hms_heading_s1,
9263 | {"Heading Sensor 1 ID", "nmea0183.hms.heading_s1",
9264 | FT_STRING, BASE_NONE,
9265 | NULL((void*)0), 0x0,
9266 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9267 | {&hf_nmea0183_hms_heading_s2,
9268 | {"Heading Sensor 2 ID", "nmea0183.hms.heading_s2",
9269 | FT_STRING, BASE_NONE,
9270 | NULL((void*)0), 0x0,
9271 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9272 | {&hf_nmea0183_hms_max_diff,
9273 | {"Maximum Difference (degrees)", "nmea0183.hms.max_diff",
9274 | FT_STRING, BASE_NONE,
9275 | NULL((void*)0), 0x0,
9276 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9277 | {&hf_nmea0183_hsc_heading_magnetic,
9278 | {"Commanded Heading (degrees Magnetic)", "nmea0183.hsc.heading_mag",
9279 | FT_STRING, BASE_NONE,
9280 | NULL((void*)0), 0x0,
9281 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9282 | {&hf_nmea0183_hsc_heading_true,
9283 | {"Commanded Heading (degrees True)", "nmea0183.hsc.heading_true",
9284 | FT_STRING, BASE_NONE,
9285 | NULL((void*)0), 0x0,
9286 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9287 | {&hf_nmea0183_htc_cmd_offhead_lim,
9288 | {"Commanded Off-heading Limit (degrees)", "nmea0183.htc.offhead_lim",
9289 | FT_STRING, BASE_NONE,
9290 | NULL((void*)0), 0x0,
9291 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9292 | {&hf_nmea0183_htc_cmd_offtrack,
9293 | {"Commanded Off-Track Limit (nm)", "nmea0183.htc.offtrack",
9294 | FT_STRING, BASE_NONE,
9295 | NULL((void*)0), 0x0,
9296 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9297 | {&hf_nmea0183_htc_cmd_radius,
9298 | {"Commanded Radius of Turn for Heading Changes (nm)", "nmea0183.htc.radius",
9299 | FT_STRING, BASE_NONE,
9300 | NULL((void*)0), 0x0,
9301 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9302 | {&hf_nmea0183_htc_cmd_rate,
9303 | {"Commanded Rate of Turn for Heading Changes (deg./min.)", "nmea0183.htc.rate",
9304 | FT_STRING, BASE_NONE,
9305 | NULL((void*)0), 0x0,
9306 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9307 | {&hf_nmea0183_htc_cmd_rudder_angle,
9308 | {"Commanded Rudder Angle (degrees)", "nmea0183.htc.rudder_angle",
9309 | FT_STRING, BASE_NONE,
9310 | NULL((void*)0), 0x0,
9311 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9312 | {&hf_nmea0183_htc_cmd_rudder_dir,
9313 | {"Commanded Rudder Direction", "nmea0183.htc.rudder_dir",
9314 | FT_CHAR, BASE_NONE,
9315 | VALS(rudder_dir_vals)((0 ? (const struct _value_string*)0 : ((rudder_dir_vals)))), 0x0,
9316 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9317 | {&hf_nmea0183_htc_cmd_rudder_lim,
9318 | {"Commanded Rudder Limit (degrees)", "nmea0183.htc.rudder_lim",
9319 | FT_STRING, BASE_NONE,
9320 | NULL((void*)0), 0x0,
9321 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9322 | {&hf_nmea0183_htc_cmd_steer,
9323 | {"Commanded Heading-to-Steer (degrees)", "nmea0183.htc.steer",
9324 | FT_STRING, BASE_NONE,
9325 | NULL((void*)0), 0x0,
9326 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9327 | {&hf_nmea0183_htc_cmd_track,
9328 | {"Commanded Track (degrees)", "nmea0183.htc.track",
9329 | FT_STRING, BASE_NONE,
9330 | NULL((void*)0), 0x0,
9331 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9332 | {&hf_nmea0183_htc_heading_ref,
9333 | {"Heading Reference in use", "nmea0183.htc.heading_ref",
9334 | FT_CHAR, BASE_NONE,
9335 | VALS(heading_reference)((0 ? (const struct _value_string*)0 : ((heading_reference))) ), 0x0,
9336 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9337 | {&hf_nmea0183_htc_override,
9338 | {"Override", "nmea0183.htc.override",
9339 | FT_CHAR, BASE_NONE,
9340 | VALS(override_vals)((0 ? (const struct _value_string*)0 : ((override_vals)))), 0x0,
9341 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9342 | {&hf_nmea0183_htc_steering_mode,
9343 | {"Selected Steering Mode", "nmea0183.htc.steering_mode",
9344 | FT_CHAR, BASE_NONE,
9345 | VALS(steering_mode_vals)((0 ? (const struct _value_string*)0 : ((steering_mode_vals)) )), 0x0,
9346 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9347 | {&hf_nmea0183_htc_turn_mode,
9348 | {"Turn Mode", "nmea0183.htc.turn_mode",
9349 | FT_CHAR, BASE_NONE,
9350 | VALS(turning_mode_vals)((0 ? (const struct _value_string*)0 : ((turning_mode_vals))) ), 0x0,
9351 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9352 | {&hf_nmea0183_htd_cmd_offhead_lim,
9353 | {"Commanded Off-heading Limit (degrees)", "nmea0183.htd.offhead_lim",
9354 | FT_STRING, BASE_NONE,
9355 | NULL((void*)0), 0x0,
9356 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9357 | {&hf_nmea0183_htd_cmd_offtrack,
9358 | {"Commanded Off-Track Limit (nm)", "nmea0183.htd.offtrack",
9359 | FT_STRING, BASE_NONE,
9360 | NULL((void*)0), 0x0,
9361 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9362 | {&hf_nmea0183_htd_cmd_radius,
9363 | {"Commanded Radius of Turn for Heading Changes (nm)", "nmea0183.htd.radius",
9364 | FT_STRING, BASE_NONE,
9365 | NULL((void*)0), 0x0,
9366 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9367 | {&hf_nmea0183_htd_cmd_rate,
9368 | {"Commanded Rate of Turn for Heading Changes (deg./min.)", "nmea0183.htd.rate",
9369 | FT_STRING, BASE_NONE,
9370 | NULL((void*)0), 0x0,
9371 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9372 | {&hf_nmea0183_htd_cmd_rudder_angle,
9373 | {"Commanded Rudder Angle (degrees)", "nmea0183.htd.rudder_angle",
9374 | FT_STRING, BASE_NONE,
9375 | NULL((void*)0), 0x0,
9376 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9377 | {&hf_nmea0183_htd_cmd_rudder_dir,
9378 | {"Commanded Rudder Direction", "nmea0183.htd.rudder_dir",
9379 | FT_CHAR, BASE_NONE,
9380 | VALS(rudder_dir_vals)((0 ? (const struct _value_string*)0 : ((rudder_dir_vals)))), 0x0,
9381 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9382 | {&hf_nmea0183_htd_cmd_rudder_lim,
9383 | {"Commanded Rudder Limit (degrees)", "nmea0183.htd.rudder_lim",
9384 | FT_STRING, BASE_NONE,
9385 | NULL((void*)0), 0x0,
9386 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9387 | {&hf_nmea0183_htd_cmd_steer,
9388 | {"Commanded Heading-to-Steer (degrees)", "nmea0183.htd.steer",
9389 | FT_STRING, BASE_NONE,
9390 | NULL((void*)0), 0x0,
9391 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9392 | {&hf_nmea0183_htd_cmd_track,
9393 | {"Commanded Track (degrees)", "nmea0183.htd.track",
9394 | FT_STRING, BASE_NONE,
9395 | NULL((void*)0), 0x0,
9396 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9397 | {&hf_nmea0183_htd_heading_ref,
9398 | {"Heading Reference in use", "nmea0183.htd.heading_ref",
9399 | FT_CHAR, BASE_NONE,
9400 | VALS(heading_reference)((0 ? (const struct _value_string*)0 : ((heading_reference))) ), 0x0,
9401 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9402 | {&hf_nmea0183_htd_offhdng_status,
9403 | {"Off-heading Status", "nmea0183.htd.offheading_status",
9404 | FT_CHAR, BASE_NONE,
9405 | VALS(r_oh_ot_status)((0 ? (const struct _value_string*)0 : ((r_oh_ot_status)))), 0x0,
9406 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9407 | {&hf_nmea0183_htd_offtrack_status,
9408 | {"Off-track Status", "nmea0183.htd.offtrack_status",
9409 | FT_CHAR, BASE_NONE,
9410 | VALS(r_oh_ot_status)((0 ? (const struct _value_string*)0 : ((r_oh_ot_status)))), 0x0,
9411 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9412 | {&hf_nmea0183_htd_override,
9413 | {"Override", "nmea0183.htd.override",
9414 | FT_CHAR, BASE_NONE,
9415 | VALS(override_vals)((0 ? (const struct _value_string*)0 : ((override_vals)))), 0x0,
9416 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9417 | {&hf_nmea0183_htd_rudder_status,
9418 | {"Rudder Status", "nmea0183.htd.rudder_status",
9419 | FT_CHAR, BASE_NONE,
9420 | VALS(r_oh_ot_status)((0 ? (const struct _value_string*)0 : ((r_oh_ot_status)))), 0x0,
9421 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9422 | {&hf_nmea0183_htd_steering_mode,
9423 | {"Selected Steering Mode", "nmea0183.htd.steering_mode",
9424 | FT_CHAR, BASE_NONE,
9425 | VALS(steering_mode_vals)((0 ? (const struct _value_string*)0 : ((steering_mode_vals)) )), 0x0,
9426 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9427 | {&hf_nmea0183_htd_turn_mode,
9428 | {"Turn Mode", "nmea0183.htd.turn_mode",
9429 | FT_CHAR, BASE_NONE,
9430 | VALS(turning_mode_vals)((0 ? (const struct _value_string*)0 : ((turning_mode_vals))) ), 0x0,
9431 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9432 | {&hf_nmea0183_htd_vessel_heading,
9433 | {"Vessel Heading (degrees)", "nmea0183.htd.vessel_heading",
9434 | FT_STRING, BASE_NONE,
9435 | NULL((void*)0), 0x0,
9436 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9437 | {&hf_nmea0183_lcd_gri,
9438 | {"GRI (tens of microseconds)", "nmea0183.lcd.gri",
9439 | FT_STRING, BASE_NONE,
9440 | NULL((void*)0), 0x0,
9441 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9442 | {&hf_nmea0183_lcd_master_ecd,
9443 | {"Master Pulse Shape (ECD)", "nmea0183.lcd.master_ecd",
9444 | FT_STRING, BASE_NONE,
9445 | NULL((void*)0), 0x0,
9446 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9447 | {&hf_nmea0183_lcd_master_snr,
9448 | {"Master Signal-to-Noise Ratio (SNR)", "nmea0183.lcd.master_snr",
9449 | FT_STRING, BASE_NONE,
9450 | NULL((void*)0), 0x0,
9451 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9452 | {&hf_nmea0183_lcd_s1_ecd,
9453 | {"Secondary 1 ECD", "nmea0183.lcd.s1_ecd",
9454 | FT_STRING, BASE_NONE,
9455 | NULL((void*)0), 0x0,
9456 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9457 | {&hf_nmea0183_lcd_s1_snr,
9458 | {"Secondary 1 SNR", "nmea0183.lcd.s1_snr",
9459 | FT_STRING, BASE_NONE,
9460 | NULL((void*)0), 0x0,
9461 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9462 | {&hf_nmea0183_lcd_s2_ecd,
9463 | {"Secondary 2 ECD", "nmea0183.lcd.s2_ecd",
9464 | FT_STRING, BASE_NONE,
9465 | NULL((void*)0), 0x0,
9466 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9467 | {&hf_nmea0183_lcd_s2_snr,
9468 | {"Secondary 2 SNR", "nmea0183.lcd.s2_snr",
9469 | FT_STRING, BASE_NONE,
9470 | NULL((void*)0), 0x0,
9471 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9472 | {&hf_nmea0183_lcd_s3_ecd,
9473 | {"Secondary 3 ECD", "nmea0183.lcd.s3_ecd",
9474 | FT_STRING, BASE_NONE,
9475 | NULL((void*)0), 0x0,
9476 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9477 | {&hf_nmea0183_lcd_s3_snr,
9478 | {"Secondary 3 SNR", "nmea0183.lcd.s3_snr",
9479 | FT_STRING, BASE_NONE,
9480 | NULL((void*)0), 0x0,
9481 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9482 | {&hf_nmea0183_lcd_s4_ecd,
9483 | {"Secondary 4 ECD", "nmea0183.lcd.s4_ecd",
9484 | FT_STRING, BASE_NONE,
9485 | NULL((void*)0), 0x0,
9486 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9487 | {&hf_nmea0183_lcd_s4_snr,
9488 | {"Secondary 4 SNR", "nmea0183.lcd.s4_snr",
9489 | FT_STRING, BASE_NONE,
9490 | NULL((void*)0), 0x0,
9491 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9492 | {&hf_nmea0183_lcd_s5_ecd,
9493 | {"Secondary 5 ECD", "nmea0183.lcd.s5_ecd",
9494 | FT_STRING, BASE_NONE,
9495 | NULL((void*)0), 0x0,
9496 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9497 | {&hf_nmea0183_lcd_s5_snr,
9498 | {"Secondary 5 SNR", "nmea0183.lcd.s5_snr",
9499 | FT_STRING, BASE_NONE,
9500 | NULL((void*)0), 0x0,
9501 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9502 | {&hf_nmea0183_loranc_blink_snr_warning,
9503 | {"Data Status (Loran-C Blink / SNR)", "nmea0183.apb.gen_warning",
9504 | FT_CHAR, BASE_NONE,
9505 | VALS(loranc_blink_snr_warning_vals)((0 ? (const struct _value_string*)0 : ((loranc_blink_snr_warning_vals )))), 0x0,
9506 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9507 | {&hf_nmea0183_lr1_callsign,
9508 | {"Call Sign", "nmea0183.lr1.callsign",
9509 | FT_STRING, BASE_NONE,
9510 | NULL((void*)0), 0x0,
9511 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9512 | {&hf_nmea0183_lr1_imo_num,
9513 | {"IMO Number", "nmea0183.lr1.imo_num",
9514 | FT_STRING, BASE_NONE,
9515 | NULL((void*)0), 0x0,
9516 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9517 | {&hf_nmea0183_lr1_req_mmsi,
9518 | {"MMSI of Requestor", "nmea0183.lr1.mmsi_req",
9519 | FT_STRING, BASE_NONE,
9520 | NULL((void*)0), 0x0,
9521 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9522 | {&hf_nmea0183_lr1_resp_mmsi,
9523 | {"MMSI of Responder", "nmea0183.lr1.mmsi_resp",
9524 | FT_STRING, BASE_NONE,
9525 | NULL((void*)0), 0x0,
9526 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9527 | {&hf_nmea0183_lr1_seqnum,
9528 | {"Sequence Number (0 to 9)", "nmea0183.lr1.seqnum",
9529 | FT_STRING, BASE_NONE,
9530 | NULL((void*)0), 0x0,
9531 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9532 | {&hf_nmea0183_lr1_shipname,
9533 | {"Ship's Name", "nmea0183.lr1.shipname",
9534 | FT_STRING, BASE_NONE,
9535 | NULL((void*)0), 0x0,
9536 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9537 | {&hf_nmea0183_lr2_course_ground,
9538 | {"Course Over Ground (degrees True)", "nmea0183.lr2.course",
9539 | FT_STRING, BASE_NONE,
9540 | NULL((void*)0), 0x0,
9541 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9542 | {&hf_nmea0183_lr2_date,
9543 | {"Date (ddmmyyyy)", "nmea0183.lr2.date",
9544 | FT_STRING, BASE_NONE,
9545 | NULL((void*)0), 0x0,
9546 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9547 | {&hf_nmea0183_lr2_latitude,
9548 | {"Latitude", "nmea0183.lr2.latitude",
9549 | FT_FLOAT, BASE_NONE,
9550 | NULL((void*)0), 0x0,
9551 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9552 | {&hf_nmea0183_lr2_longitude,
9553 | {"Longitude", "nmea0183.lr2.longitude",
9554 | FT_FLOAT, BASE_NONE,
9555 | NULL((void*)0), 0x0,
9556 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9557 | {&hf_nmea0183_lr2_resp_mmsi,
9558 | {"MMSI of Responder", "nmea0183.lr2.mmsi_resp",
9559 | FT_STRING, BASE_NONE,
9560 | NULL((void*)0), 0x0,
9561 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9562 | {&hf_nmea0183_lr2_seqnum,
9563 | {"Sequence Number (0 to 9)", "nmea0183.lr2.seqnum",
9564 | FT_STRING, BASE_NONE,
9565 | NULL((void*)0), 0x0,
9566 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9567 | {&hf_nmea0183_lr2_speed_ground,
9568 | {"Speed Over Ground (knots)", "nmea0183.lr2.speed",
9569 | FT_STRING, BASE_NONE,
9570 | NULL((void*)0), 0x0,
9571 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9572 | {&hf_nmea0183_lr2_utc,
9573 | {"UTC of Position", "nmea0183.lr2.utc",
9574 | FT_STRING, BASE_NONE,
9575 | NULL((void*)0), 0x0,
9576 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9577 | {&hf_nmea0183_lr3_destination,
9578 | {"Voyage Destination", "nmea0183.lr3.destination",
9579 | FT_STRING, BASE_NONE,
9580 | NULL((void*)0), 0x0,
9581 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9582 | {&hf_nmea0183_lr3_draught,
9583 | {"Draught", "nmea0183.lr3.draught",
9584 | FT_STRING, BASE_NONE,
9585 | NULL((void*)0), 0x0,
9586 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9587 | {&hf_nmea0183_lr3_eta_date,
9588 | {"ETA Date (ddmmyy)", "nmea0183.lr3.eta_date",
9589 | FT_STRING, BASE_NONE,
9590 | NULL((void*)0), 0x0,
9591 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9592 | {&hf_nmea0183_lr3_eta_time,
9593 | {"ETA Time", "nmea0183.lr3.eta_time",
9594 | FT_STRING, BASE_NONE,
9595 | NULL((void*)0), 0x0,
9596 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9597 | {&hf_nmea0183_lr3_persons,
9598 | {"Persons (8191 implies >= 8191)", "nmea0183.lr3.persons",
9599 | FT_STRING, BASE_NONE,
9600 | NULL((void*)0), 0x0,
9601 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9602 | {&hf_nmea0183_lr3_resp_mmsi,
9603 | {"MMSI of Responder", "nmea0183.lr3.mmsi_resp",
9604 | FT_STRING, BASE_NONE,
9605 | NULL((void*)0), 0x0,
9606 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9607 | {&hf_nmea0183_lr3_seqnum,
9608 | {"Sequence Number (0 to 9)", "nmea0183.lr3.seqnum",
9609 | FT_STRING, BASE_NONE,
9610 | NULL((void*)0), 0x0,
9611 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9612 | {&hf_nmea0183_lr3_ship_breadth,
9613 | {"Ship Breadth", "nmea0183.lr3.breadth",
9614 | FT_STRING, BASE_NONE,
9615 | NULL((void*)0), 0x0,
9616 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9617 | {&hf_nmea0183_lr3_ship_cargo,
9618 | {"Ship/Cargo", "nmea0183.lr3.cargo",
9619 | FT_STRING, BASE_NONE,
9620 | NULL((void*)0), 0x0,
9621 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9622 | {&hf_nmea0183_lr3_ship_length,
9623 | {"Ship Length", "nmea0183.lr3.length",
9624 | FT_STRING, BASE_NONE,
9625 | NULL((void*)0), 0x0,
9626 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9627 | {&hf_nmea0183_lr3_ship_type,
9628 | {"Ship Type", "nmea0183.lr3.type",
9629 | FT_STRING, BASE_NONE,
9630 | NULL((void*)0), 0x0,
9631 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9632 | {&hf_nmea0183_lrf_function_rep,
9633 | {"Function Reply Status String", "nmea0183.lr2.function_rep_string",
9634 | FT_STRING, BASE_NONE,
9635 | NULL((void*)0), 0x0,
9636 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9637 | {&hf_nmea0183_lrf_function_rep_val,
9638 | {"Function Reply Status", "nmea0183.lr2.function_rep",
9639 | FT_CHAR, BASE_NONE,
9640 | VALS(lrf_func_rep_vals)((0 ? (const struct _value_string*)0 : ((lrf_func_rep_vals))) ), 0x0,
9641 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9642 | {&hf_nmea0183_lrf_function_req,
9643 | {"Function Request String", "nmea0183.lr2.function_req_string",
9644 | FT_STRING, BASE_NONE,
9645 | NULL((void*)0), 0x0,
9646 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9647 | {&hf_nmea0183_lrf_function_req_val,
9648 | {"Function Request", "nmea0183.lr2.function_req",
9649 | FT_CHAR, BASE_NONE,
9650 | VALS(lrf_func_req_vals)((0 ? (const struct _value_string*)0 : ((lrf_func_req_vals))) ), 0x0,
9651 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9652 | {&hf_nmea0183_lrf_mmsi,
9653 | {"MMSI of Requestor", "nmea0183.lrf.mmsi",
9654 | FT_STRING, BASE_NONE,
9655 | NULL((void*)0), 0x0,
9656 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9657 | {&hf_nmea0183_lrf_name,
9658 | {"Name of Requestor", "nmea0183.lr2.name",
9659 | FT_STRING, BASE_NONE,
9660 | NULL((void*)0), 0x0,
9661 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9662 | {&hf_nmea0183_lrf_seqnum,
9663 | {"Sequence Number (0 to 9)", "nmea0183.lrf.seqnum",
9664 | FT_STRING, BASE_NONE,
9665 | NULL((void*)0), 0x0,
9666 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9667 | {&hf_nmea0183_lri_control,
9668 | {"Control Flag", "nmea0183.lri.control",
9669 | FT_CHAR, BASE_NONE,
9670 | VALS(control_flag_vals)((0 ? (const struct _value_string*)0 : ((control_flag_vals))) ), 0x0,
9671 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9672 | {&hf_nmea0183_lri_dest_mmsi,
9673 | {"MMSI of Destination", "nmea0183.lri.mmsi_dest",
9674 | FT_STRING, BASE_NONE,
9675 | NULL((void*)0), 0x0,
9676 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9677 | {&hf_nmea0183_lri_latitude_ne,
9678 | {"Latitude (NE corner)", "nmea0183.lri.latitude_ne",
9679 | FT_FLOAT, BASE_NONE,
9680 | NULL((void*)0), 0x0,
9681 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9682 | {&hf_nmea0183_lri_latitude_sw,
9683 | {"Latitude (SW corner)", "nmea0183.lri.latitude_sw",
9684 | FT_FLOAT, BASE_NONE,
9685 | NULL((void*)0), 0x0,
9686 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9687 | {&hf_nmea0183_lri_longitude_ne,
9688 | {"Longitude (NE corner)", "nmea0183.lri.longitude_ne",
9689 | FT_FLOAT, BASE_NONE,
9690 | NULL((void*)0), 0x0,
9691 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9692 | {&hf_nmea0183_lri_longitude_sw,
9693 | {"Longitude (SW corner)", "nmea0183.lri.longitude_sw",
9694 | FT_FLOAT, BASE_NONE,
9695 | NULL((void*)0), 0x0,
9696 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9697 | {&hf_nmea0183_lri_req_mmsi,
9698 | {"MMSI of Requestor", "nmea0183.lri.mmsi_req",
9699 | FT_STRING, BASE_NONE,
9700 | NULL((void*)0), 0x0,
9701 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9702 | {&hf_nmea0183_lri_seqnum,
9703 | {"Sequence Number (0 to 9)", "nmea0183.lri.seqnum",
9704 | FT_STRING, BASE_NONE,
9705 | NULL((void*)0), 0x0,
9706 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9707 | {&hf_nmea0183_mla_12lsb_corr_t_scale,
9708 | {"12 LSB of System Time Scale Correction", "nmea0183.mla.12lsb",
9709 | FT_STRING, BASE_NONE,
9710 | NULL((void*)0), 0x0,
9711 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9712 | {&hf_nmea0183_mla_16msb_corr_t_scale,
9713 | {"16 MSB of System Time Scale Correction", "nmea0183.mla.16msb",
9714 | FT_STRING, BASE_NONE,
9715 | NULL((void*)0), 0x0,
9716 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9717 | {&hf_nmea0183_mla_calday_count,
9718 | {"Calendar Day Count", "nmea0183.mla.calday_count",
9719 | FT_STRING, BASE_NONE,
9720 | NULL((void*)0), 0x0,
9721 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9722 | {&hf_nmea0183_mla_corr_circling,
9723 | {"Correction to the Avg. Value of Draconitic Circling Time", "nmea0183.mla.corr_circling",
9724 | FT_STRING, BASE_NONE,
9725 | NULL((void*)0), 0x0,
9726 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9727 | {&hf_nmea0183_mla_corr_incl_angle,
9728 | {"Correction to the Avg. Value of the Inclination Angle", "nmea0183.mla.inc_angle",
9729 | FT_STRING, BASE_NONE,
9730 | NULL((void*)0), 0x0,
9731 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9732 | {&hf_nmea0183_mla_eccentricity,
9733 | {"Eccentricity", "nmea0183.mla.eccentricity",
9734 | FT_STRING, BASE_NONE,
9735 | NULL((void*)0), 0x0,
9736 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9737 | {&hf_nmea0183_mla_long_asc_node,
9738 | {"Greenwich Longitude of the Ascension Node", "nmea0183.mla.long_asc_node",
9739 | FT_STRING, BASE_NONE,
9740 | NULL((void*)0), 0x0,
9741 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9742 | {&hf_nmea0183_mla_perigee,
9743 | {"Argument of Perigee", "nmea0183.mla.perigee",
9744 | FT_STRING, BASE_NONE,
9745 | NULL((void*)0), 0x0,
9746 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9747 | {&hf_nmea0183_mla_roc_circling,
9748 | {"Rate of Change of Draconitic Circling Time", "nmea0183.mla.roc_circling",
9749 | FT_STRING, BASE_NONE,
9750 | NULL((void*)0), 0x0,
9751 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9752 | {&hf_nmea0183_mla_sat_health,
9753 | {"Satellite Health & Carrier Frequency", "nmea0183.mla.sat_carrier",
9754 | FT_STRING, BASE_NONE,
9755 | NULL((void*)0), 0x0,
9756 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9757 | {&hf_nmea0183_mla_sat_id,
9758 | {"Satellite ID (satellite slot)", "nmea0183.mla.sat_id",
9759 | FT_STRING, BASE_NONE,
9760 | NULL((void*)0), 0x0,
9761 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9762 | {&hf_nmea0183_mla_sentence_number,
9763 | {"Sentence Number", "nmea0183.mla.sentence_num",
9764 | FT_STRING, BASE_NONE,
9765 | NULL((void*)0), 0x0,
9766 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9767 | {&hf_nmea0183_mla_t_asc_node,
9768 | {"Time of the Ascension Node & Almanac Reference Time", "nmea0183.mla.asc_node",
9769 | FT_STRING, BASE_NONE,
9770 | NULL((void*)0), 0x0,
9771 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9772 | {&hf_nmea0183_mla_t_scale_shift,
9773 | {"Course Value of the Time Scale Shift", "nmea0183.mla.scale_shift",
9774 | FT_STRING, BASE_NONE,
9775 | NULL((void*)0), 0x0,
9776 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9777 | {&hf_nmea0183_mla_total_sentences,
9778 | {"Total Number of Sentences", "nmea0183.mla.tot_sentences",
9779 | FT_STRING, BASE_NONE,
9780 | NULL((void*)0), 0x0,
9781 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9782 | {&hf_nmea0183_msk_am_bitrate,
9783 | {"Auto/Manual Bit Rate", "nmea0183.msk.am_bitrate",
9784 | FT_CHAR, BASE_NONE,
9785 | VALS(auto_manual_vals)((0 ? (const struct _value_string*)0 : ((auto_manual_vals)))), 0x0,
9786 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9787 | {&hf_nmea0183_msk_am_freq,
9788 | {"Auto/Manual Frequency", "nmea0183.msk.am_freq",
9789 | FT_CHAR, BASE_NONE,
9790 | VALS(auto_manual_vals)((0 ? (const struct _value_string*)0 : ((auto_manual_vals)))), 0x0,
9791 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9792 | {&hf_nmea0183_msk_beacon_bitrate,
9793 | {"Beacon Bit Rate (bps)", "nmea0183.msk.beacon_bitrate",
9794 | FT_STRING, BASE_NONE,
9795 | NULL((void*)0), 0x0,
9796 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9797 | {&hf_nmea0183_msk_beacon_freq,
9798 | {"Beacon Frequency (kHz)", "nmea0183.msk.beacon_freq",
9799 | FT_STRING, BASE_NONE,
9800 | NULL((void*)0), 0x0,
9801 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9802 | {&hf_nmea0183_msk_channel,
9803 | {"Channel Number", "nmea0183.msk.channel",
9804 | FT_STRING, BASE_NONE,
9805 | NULL((void*)0), 0x0,
9806 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9807 | {&hf_nmea0183_msk_interval,
9808 | {"Interval for sending MSS status (seconds)", "nmea0183.msk.interval",
9809 | FT_STRING, BASE_NONE,
9810 | NULL((void*)0), 0x0,
9811 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9812 | {&hf_nmea0183_mss_beacon_bitrate,
9813 | {"Beacon Bit Rate (bps)", "nmea0183.mss.bitrate",
9814 | FT_STRING, BASE_NONE,
9815 | NULL((void*)0), 0x0,
9816 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9817 | {&hf_nmea0183_mss_beacon_freq,
9818 | {"Beacon Frequency (kHz)", "nmea0183.mss.beacon_freq",
9819 | FT_STRING, BASE_NONE,
9820 | NULL((void*)0), 0x0,
9821 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9822 | {&hf_nmea0183_mss_channel,
9823 | {"Channel Number", "nmea0183.mss.channel",
9824 | FT_STRING, BASE_NONE,
9825 | NULL((void*)0), 0x0,
9826 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9827 | {&hf_nmea0183_mss_sig_str,
9828 | {"Signal Strength (dB) (re: 1 uV/m)", "nmea0183.mss.sig_strength",
9829 | FT_STRING, BASE_NONE,
9830 | NULL((void*)0), 0x0,
9831 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9832 | {&hf_nmea0183_mss_snr,
9833 | {"Signal-to-Noise Ratio (SNR) (dB)", "nmea0183.mss.snr",
9834 | FT_STRING, BASE_NONE,
9835 | NULL((void*)0), 0x0,
9836 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9837 | {&hf_nmea0183_mtw_temp,
9838 | {"Water Temperature", "nmea0183.mtw.temp",
9839 | FT_STRING, BASE_NONE,
9840 | NULL((void*)0), 0x0,
9841 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9842 | {&hf_nmea0183_mwd_direction_mag,
9843 | {"Wind Direction (degrees Magnetic)", "nmea0183.mwd.dir_mag",
9844 | FT_STRING, BASE_NONE,
9845 | NULL((void*)0), 0x0,
9846 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9847 | {&hf_nmea0183_mwd_direction_true,
9848 | {"Wind Direction (degrees True)", "nmea0183.mwd.dir_true",
9849 | FT_STRING, BASE_NONE,
9850 | NULL((void*)0), 0x0,
9851 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9852 | {&hf_nmea0183_mwd_speed_knots,
9853 | {"Wind Speed (knots)", "nmea0183.mwd.speed_kts",
9854 | FT_STRING, BASE_NONE,
9855 | NULL((void*)0), 0x0,
9856 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9857 | {&hf_nmea0183_mwd_speed_ms,
9858 | {"Wind Speed (meters/second)", "nmea0183.mwd.speed_ms",
9859 | FT_STRING, BASE_NONE,
9860 | NULL((void*)0), 0x0,
9861 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9862 | {&hf_nmea0183_mwv_reference,
9863 | {"Reference", "nmea0183.mwv.reference",
9864 | FT_CHAR, BASE_NONE,
9865 | VALS(mwv_reference)((0 ? (const struct _value_string*)0 : ((mwv_reference)))), 0x0,
9866 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9867 | {&hf_nmea0183_mwv_speed_units,
9868 | {"Wind Speed Units", "nmea0183.mwv.units",
9869 | FT_CHAR, BASE_NONE,
9870 | VALS(speed_unit_vals)((0 ? (const struct _value_string*)0 : ((speed_unit_vals)))), 0x0,
9871 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9872 | {&hf_nmea0183_mwv_status,
9873 | {"Data Status", "nmea0183.mwv.status",
9874 | FT_CHAR, BASE_NONE,
9875 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
9876 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9877 | {&hf_nmea0183_mwv_wind_angle,
9878 | {"Wind Angle (0 to 359 deg)", "nmea0183.mwv.angle",
9879 | FT_STRING, BASE_NONE,
9880 | NULL((void*)0), 0x0,
9881 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9882 | {&hf_nmea0183_mwv_wind_speed,
9883 | {"Wind Speed", "nmea0183.mwv.speed",
9884 | FT_STRING, BASE_NONE,
9885 | NULL((void*)0), 0x0,
9886 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9887 | {&hf_nmea0183_osd_course_ref,
9888 | {"Course Reference", "nmea0183.osd.course_ref",
9889 | FT_CHAR, BASE_NONE,
9890 | VALS(course_ref_vals)((0 ? (const struct _value_string*)0 : ((course_ref_vals)))), 0x0,
9891 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9892 | {&hf_nmea0183_osd_course_true,
9893 | {"Vessel Course (degrees True)", "nmea0183.osd.course",
9894 | FT_STRING, BASE_NONE,
9895 | NULL((void*)0), 0x0,
9896 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9897 | {&hf_nmea0183_osd_drift,
9898 | {"Vessel Drift (speed)", "nmea0183.osd.drift",
9899 | FT_STRING, BASE_NONE,
9900 | NULL((void*)0), 0x0,
9901 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9902 | {&hf_nmea0183_osd_heading_status,
9903 | {"Heading Status", "nmea0183.osd.heading_status",
9904 | FT_CHAR, BASE_NONE,
9905 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
9906 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9907 | {&hf_nmea0183_osd_heading_true,
9908 | {"Heading (degrees True)", "nmea0183.osd.heading",
9909 | FT_STRING, BASE_NONE,
9910 | NULL((void*)0), 0x0,
9911 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9912 | {&hf_nmea0183_osd_set_true,
9913 | {"Vessel Set (degrees True)", "nmea0183.osd.set",
9914 | FT_STRING, BASE_NONE,
9915 | NULL((void*)0), 0x0,
9916 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9917 | {&hf_nmea0183_osd_speed,
9918 | {"Vessel Speed (degrees True)", "nmea0183.osd.speed",
9919 | FT_STRING, BASE_NONE,
9920 | NULL((void*)0), 0x0,
9921 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9922 | {&hf_nmea0183_osd_speed_ref,
9923 | {"Speed Reference", "nmea0183.osd.speed_ref",
9924 | FT_CHAR, BASE_NONE,
9925 | VALS(course_ref_vals)((0 ? (const struct _value_string*)0 : ((course_ref_vals)))), 0x0,
9926 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9927 | {&hf_nmea0183_osd_speed_units,
9928 | {"Speed Units", "nmea0183.osd.speed_units",
9929 | FT_CHAR, BASE_NONE,
9930 | VALS(speed_unit_vals)((0 ? (const struct _value_string*)0 : ((speed_unit_vals)))), 0x0,
9931 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9932 | {&hf_nmea0183_rma_course,
9933 | {"Course Over Ground (degrees True)", "nmea0183.rma.course",
9934 | FT_STRING, BASE_NONE,
9935 | NULL((void*)0), 0x0,
9936 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9937 | {&hf_nmea0183_rma_latitude,
9938 | {"Latitude", "nmea0183.rma.latitude",
9939 | FT_FLOAT, BASE_NONE,
9940 | NULL((void*)0), 0x0,
9941 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9942 | {&hf_nmea0183_rma_longitude,
9943 | {"Longitude", "nmea0183.rma.longitude",
9944 | FT_FLOAT, BASE_NONE,
9945 | NULL((void*)0), 0x0,
9946 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9947 | {&hf_nmea0183_rma_mag_var,
9948 | {"Magnetic Variation (degrees)", "nmea0183.rma.mag_var",
9949 | FT_STRING, BASE_NONE,
9950 | NULL((void*)0), 0x0,
9951 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9952 | {&hf_nmea0183_rma_mode,
9953 | {"Mode Indicator", "nmea0183.rma.mode",
9954 | FT_CHAR, BASE_NONE,
9955 | VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
9956 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9957 | {&hf_nmea0183_rma_speed,
9958 | {"Speed Over Ground (knots)", "nmea0183.rma.speed",
9959 | FT_STRING, BASE_NONE,
9960 | NULL((void*)0), 0x0,
9961 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9962 | {&hf_nmea0183_rma_status,
9963 | {"Status", "nmea0183.rma.status",
9964 | FT_CHAR, BASE_NONE,
9965 | VALS(rma_data_status)((0 ? (const struct _value_string*)0 : ((rma_data_status)))), 0x0,
9966 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9967 | {&hf_nmea0183_rma_time_diff_a,
9968 | {"Time Difference A (microseconds)", "nmea0183.rma.td_a",
9969 | FT_STRING, BASE_NONE,
9970 | NULL((void*)0), 0x0,
9971 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9972 | {&hf_nmea0183_rma_time_diff_b,
9973 | {"Time Difference B (microseconds)", "nmea0183.rma.td_b",
9974 | FT_STRING, BASE_NONE,
9975 | NULL((void*)0), 0x0,
9976 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9977 | {&hf_nmea0183_rmb_arrival_status,
9978 | {"Arrival Status", "nmea0183.rmb.arrival_status",
9979 | FT_CHAR, BASE_NONE,
9980 | VALS(arrival_circle_status)((0 ? (const struct _value_string*)0 : ((arrival_circle_status )))), 0x0,
9981 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9982 | {&hf_nmea0183_rmb_bearing_dest,
9983 | {"Bearing to Destination (degrees True)", "nmea0183.rmb.bearing",
9984 | FT_STRING, BASE_NONE,
9985 | NULL((void*)0), 0x0,
9986 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9987 | {&hf_nmea0183_rmb_data_status,
9988 | {"Data Status", "nmea0183.rmb.data_status",
9989 | FT_CHAR, BASE_NONE,
9990 | VALS(navigation_data_status)((0 ? (const struct _value_string*)0 : ((navigation_data_status )))), 0x0,
9991 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9992 | {&hf_nmea0183_rmb_dest_id,
9993 | {"Destination Waypoint ID", "nmea0183.rmb.dest_id",
9994 | FT_STRING, BASE_NONE,
9995 | NULL((void*)0), 0x0,
9996 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9997 | {&hf_nmea0183_rmb_dest_velocity,
9998 | {"Destination Closing Velocity", "nmea0183.rmb.velocity",
9999 | FT_STRING, BASE_NONE,
10000 | NULL((void*)0), 0x0,
10001 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10002 | {&hf_nmea0183_rmb_dest_wp_latitude,
10003 | {"Latitude", "nmea0183.rmb.latitude",
10004 | FT_FLOAT, BASE_NONE,
10005 | NULL((void*)0), 0x0,
10006 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10007 | {&hf_nmea0183_rmb_dest_wp_longitude,
10008 | {"Longitude", "nmea0183.rmb.longitude",
10009 | FT_FLOAT, BASE_NONE,
10010 | NULL((void*)0), 0x0,
10011 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10012 | {&hf_nmea0183_rmb_mode,
10013 | {"Mode Indicator", "nmea0183.rmb.mode",
10014 | FT_CHAR, BASE_NONE,
10015 | VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
10016 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10017 | {&hf_nmea0183_rmb_orig_id,
10018 | {"Origin Waypoint ID", "nmea0183.rmb.orig_id",
10019 | FT_STRING, BASE_NONE,
10020 | NULL((void*)0), 0x0,
10021 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10022 | {&hf_nmea0183_rmb_range_dest,
10023 | {"Range to Destination (nm)", "nmea0183.rmb.range",
10024 | FT_STRING, BASE_NONE,
10025 | NULL((void*)0), 0x0,
10026 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10027 | {&hf_nmea0183_rmb_steer,
10028 | {"Direction to Steer", "nmea0183.rmb.steer",
10029 | FT_CHAR, BASE_NONE,
10030 | VALS(steer_direction)((0 ? (const struct _value_string*)0 : ((steer_direction)))), 0x0,
10031 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10032 | {&hf_nmea0183_rmb_xte,
10033 | {"Cross Track Error (XTE) (nm)", "nmea0183.rmb.xte",
10034 | FT_STRING, BASE_NONE,
10035 | NULL((void*)0), 0x0,
10036 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10037 | {&hf_nmea0183_rmc_course,
10038 | {"Course over ground (degrees True)", "nmea0183.rmc.course",
10039 | FT_STRING, BASE_NONE,
10040 | NULL((void*)0), 0x0,
10041 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10042 | {&hf_nmea0183_rmc_date,
10043 | {"Date (ddmmyy)", "nmea0183.rmc.date",
10044 | FT_STRING, BASE_NONE,
10045 | NULL((void*)0), 0x0,
10046 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10047 | {&hf_nmea0183_rmc_latitude,
10048 | {"Latitude", "nmea0183.rmc.latitude",
10049 | FT_FLOAT, BASE_NONE,
10050 | NULL((void*)0), 0x0,
10051 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10052 | {&hf_nmea0183_rmc_longitude,
10053 | {"Longitude", "nmea0183.rmc.longitude",
10054 | FT_FLOAT, BASE_NONE,
10055 | NULL((void*)0), 0x0,
10056 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10057 | {&hf_nmea0183_rmc_magnetic,
10058 | {"Magnetic Variation", "nmea0183.rmc.magnetic",
10059 | FT_STRING, BASE_NONE,
10060 | NULL((void*)0), 0x0,
10061 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10062 | {&hf_nmea0183_rmc_mode,
10063 | {"Mode Indicator", "nmea0183.rmc.mode",
10064 | FT_CHAR, BASE_NONE,
10065 | VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
10066 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10067 | {&hf_nmea0183_rmc_speed,
10068 | {"Speed over ground (knots)", "nmea0183.rmc.speed",
10069 | FT_STRING, BASE_NONE,
10070 | NULL((void*)0), 0x0,
10071 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10072 | {&hf_nmea0183_rmc_status,
10073 | {"Status", "nmea0183.rmc.status",
10074 | FT_CHAR, BASE_NONE,
10075 | VALS(navigation_data_status)((0 ? (const struct _value_string*)0 : ((navigation_data_status )))), 0x0,
10076 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10077 | {&hf_nmea0183_rmc_utc,
10078 | {"UTC of Position", "nmea0183.rmc.utc",
10079 | FT_STRING, BASE_NONE,
10080 | NULL((void*)0), 0x0,
10081 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10082 | {&hf_nmea0183_rot_rate_of_turn,
10083 | {"Rate of turn", "nmea0183.rot_rate_of_turn",
10084 | FT_STRING, BASE_NONE,
10085 | NULL((void*)0), 0x0,
10086 | "NMEA 0183 ROT Rate Of Turn, degrees per minute, negative value means bow turns to port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10087 | {&hf_nmea0183_rot_valid,
10088 | {"Validity", "nmea0183.rot_valid",
10089 | FT_STRING, BASE_NONE,
10090 | NULL((void*)0), 0x0,
10091 | "NMEA 0183 ROT Status, A means data is valid", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10092 | {&hf_nmea0183_rpm_number,
10093 | {"Engine or Shaft Number (from centerline)", "nmea0183.rpm.number",
10094 | FT_CHAR, BASE_NONE,
10095 | VALS(revolutions_number_vals)((0 ? (const struct _value_string*)0 : ((revolutions_number_vals )))), 0x0,
10096 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10097 | {&hf_nmea0183_rpm_pitch,
10098 | {"Propeller Pitch (% of max)", "nmea0183.rpm.pitch",
10099 | FT_STRING, BASE_NONE,
10100 | NULL((void*)0), 0x0,
10101 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10102 | {&hf_nmea0183_rpm_source,
10103 | {"Source", "nmea0183.rpm.source",
10104 | FT_CHAR, BASE_NONE,
10105 | VALS(revolutions_source_vals)((0 ? (const struct _value_string*)0 : ((revolutions_source_vals )))), 0x0,
10106 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10107 | {&hf_nmea0183_rpm_speed,
10108 | {"Speed (rev/min)", "nmea0183.rpm.speed",
10109 | FT_STRING, BASE_NONE,
10110 | NULL((void*)0), 0x0,
10111 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10112 | {&hf_nmea0183_rpm_status,
10113 | {"Data Status", "nmea0183.rpm.status",
10114 | FT_CHAR, BASE_NONE,
10115 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
10116 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10117 | {&hf_nmea0183_rsa_pt_sensor,
10118 | {"Port Rudder Sensor", "nmea0183.rsa.pt",
10119 | FT_STRING, BASE_NONE,
10120 | NULL((void*)0), 0x0,
10121 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10122 | {&hf_nmea0183_rsa_pt_status,
10123 | {"Data Status", "nmea0183.rsa.pt_status",
10124 | FT_CHAR, BASE_NONE,
10125 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
10126 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10127 | {&hf_nmea0183_rsa_sb_sensor,
10128 | {"Starboard (or single) Rudder Sensor", "nmea0183.rsa.sb",
10129 | FT_STRING, BASE_NONE,
10130 | NULL((void*)0), 0x0,
10131 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10132 | {&hf_nmea0183_rsa_sb_status,
10133 | {"Data Status", "nmea0183.rsa.sb_status",
10134 | FT_CHAR, BASE_NONE,
10135 | VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
10136 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10137 | {&hf_nmea0183_rsd_cursor_bearing,
10138 | {"Cursor Bearing (degrees clockwise from 0)", "nmea0183.rsd.curs_scale",
10139 | FT_STRING, BASE_NONE,
10140 | NULL((void*)0), 0x0,
10141 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10142 | {&hf_nmea0183_rsd_cursor_range,
10143 | {"Cursor Range, from own ship", "nmea0183.rsd.curs_range",
10144 | FT_STRING, BASE_NONE,
10145 | NULL((void*)0), 0x0,
10146 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10147 | {&hf_nmea0183_rsd_display,
10148 | {"Display Rotation", "nmea0183.rsd.display",
10149 | FT_CHAR, BASE_NONE,
10150 | VALS(display_rotation_vals)((0 ? (const struct _value_string*)0 : ((display_rotation_vals )))), 0x0,
10151 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10152 | {&hf_nmea0183_rsd_ebl1,
10153 | {"Bearing Line 1 (EBL1) (degrees from 0)", "nmea0183.rsd.ebl1",
10154 | FT_STRING, BASE_NONE,
10155 | NULL((void*)0), 0x0,
10156 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10157 | {&hf_nmea0183_rsd_ebl2,
10158 | {"EBL2 (degrees)", "nmea0183.rsd.ebl2",
10159 | FT_STRING, BASE_NONE,
10160 | NULL((void*)0), 0x0,
10161 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10162 | {&hf_nmea0183_rsd_orig2_range,
10163 | {"Origin 2 Bearing (degrees from 0)", "nmea0183.rsd.orig2_range",
10164 | FT_STRING, BASE_NONE,
10165 | NULL((void*)0), 0x0,
10166 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10167 | {&hf_nmea0183_rsd_orig_bearing,
10168 | {"Origin 1 Bearing (degrees from 0)", "nmea0183.rsd.orig_bearing",
10169 | FT_STRING, BASE_NONE,
10170 | NULL((void*)0), 0x0,
10171 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10172 | {&hf_nmea0183_rsd_orig_range,
10173 | {"Origin 1 Range, from own ship", "nmea0183.rsd.orig_range",
10174 | FT_STRING, BASE_NONE,
10175 | NULL((void*)0), 0x0,
10176 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10177 | {&hf_nmea0183_rsd_scale,
10178 | {"Range Scale in use", "nmea0183.rsd.scale",
10179 | FT_STRING, BASE_NONE,
10180 | NULL((void*)0), 0x0,
10181 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10182 | {&hf_nmea0183_rsd_units,
10183 | {"Range Units", "nmea0183.rsd.units",
10184 | FT_CHAR, BASE_NONE,
10185 | VALS(speed_unit_vals)((0 ? (const struct _value_string*)0 : ((speed_unit_vals)))), 0x0,
10186 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10187 | {&hf_nmea0183_rsd_vrm1,
10188 | {"Variable Range Marker 1 (VRM1)", "nmea0183.rsd.vrm1",
10189 | FT_STRING, BASE_NONE,
10190 | NULL((void*)0), 0x0,
10191 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10192 | {&hf_nmea0183_rsd_vrm2,
10193 | {"VRM2", "nmea0183.rsd.vrm2",
10194 | FT_STRING, BASE_NONE,
10195 | NULL((void*)0), 0x0,
10196 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10197 | {&hf_nmea0183_rte_route,
10198 | {"Route Identifier", "nmea0183.rte.route",
10199 | FT_STRING, BASE_NONE,
10200 | NULL((void*)0), 0x0,
10201 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10202 | {&hf_nmea0183_rte_sentence_mode,
10203 | {"Sentence Mode", "nmea0183.rte.mode",
10204 | FT_CHAR, BASE_NONE,
10205 | VALS(sentence_mode_vals)((0 ? (const struct _value_string*)0 : ((sentence_mode_vals)) )), 0x0,
10206 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10207 | {&hf_nmea0183_rte_sentence_number,
10208 | {"Sentence Number", "nmea0183.rte.sent_number",
10209 | FT_STRING, BASE_NONE,
10210 | NULL((void*)0), 0x0,
10211 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10212 | {&hf_nmea0183_rte_total_sentences,
10213 | {"Total Number of Sentences", "nmea0183.rte.num_sentences",
10214 | FT_STRING, BASE_NONE,
10215 | NULL((void*)0), 0x0,
10216 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10217 | {&hf_nmea0183_rte_waypoint,
10218 | {"Waypoint Identifier", "nmea0183.rte.waypoint",
10219 | FT_STRING, BASE_NONE,
10220 | NULL((void*)0), 0x0,
10221 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10222 | { &hf_nmea0183_sentence_prefix,
10223 | { "Sentence prefix", "nmea0183.sentence_prefix",
10224 | FT_STRING, BASE_NONE,
10225 | NULL((void*)0), 0x0,
10226 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
10227 | {&hf_nmea0183_sfi_frequency,
10228 | {"Frequency/ITU Channel (100 Hz increments)", "nmea0183.sfi.freq",
10229 | FT_STRING, BASE_NONE,
10230 | NULL((void*)0), 0x0,
10231 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10232 | {&hf_nmea0183_sfi_mode,
10233 | {"Mode of Operation", "nmea0183.sfi.mode",
10234 | FT_CHAR, BASE_NONE,
10235 | VALS(sfi_operation_mode_vals)((0 ? (const struct _value_string*)0 : ((sfi_operation_mode_vals )))), 0x0,
10236 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10237 | {&hf_nmea0183_sfi_sentence_number,
10238 | {"Sentence Number", "nmea0183.sfi.sent_number",
10239 | FT_STRING, BASE_NONE,
10240 | NULL((void*)0), 0x0,
10241 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10242 | {&hf_nmea0183_sfi_total_sentences,
10243 | {"Total Number of Sentences", "nmea0183.sfi.num_sentences",
10244 | FT_STRING, BASE_NONE,
10245 | NULL((void*)0), 0x0,
10246 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10247 | {&hf_nmea0183_ssd_callsign,
10248 | {"Ship's Call Sign", "nmea0183.ssd.callsign",
10249 | FT_STRING, BASE_NONE,
10250 | NULL((void*)0), 0x0,
10251 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10252 | {&hf_nmea0183_ssd_dte_flag,
10253 | {"DTE Indicator Flag", "nmea0183.ssd.dte",
10254 | FT_CHAR, BASE_NONE,
10255 | VALS(dte_indicator_vals)((0 ? (const struct _value_string*)0 : ((dte_indicator_vals)) )), 0x0,
10256 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10257 | {&hf_nmea0183_ssd_name,
10258 | {"Ship's Name", "nmea0183.ssd.name",
10259 | FT_STRING, BASE_NONE,
10260 | NULL((void*)0), 0x0,
10261 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10262 | {&hf_nmea0183_ssd_ref_a,
10263 | {"Pos. Ref. Point distance 'A' (from bow)", "nmea0183.ssd.ref_a",
10264 | FT_STRING, BASE_NONE,
10265 | NULL((void*)0), 0x0,
10266 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10267 | {&hf_nmea0183_ssd_ref_b,
10268 | {"Pos. Ref. Point distance 'B' (from stern)", "nmea0183.ssd.ref_b",
10269 | FT_STRING, BASE_NONE,
10270 | NULL((void*)0), 0x0,
10271 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10272 | {&hf_nmea0183_ssd_ref_c,
10273 | {"Pos. Ref. Point distance 'C' (from port beam)", "nmea0183.ssd.ref_c",
10274 | FT_STRING, BASE_NONE,
10275 | NULL((void*)0), 0x0,
10276 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10277 | {&hf_nmea0183_ssd_ref_d,
10278 | {"Pos. Ref. Point distance 'D' (from starboard beam)", "nmea0183.ssd.ref_d",
10279 | FT_STRING, BASE_NONE,
10280 | NULL((void*)0), 0x0,
10281 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10282 | {&hf_nmea0183_ssd_source,
10283 | {"Talker ID Number", "nmea0183.ssd.source",
10284 | FT_STRING, BASE_NONE,
10285 | NULL((void*)0), 0x0,
10286 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10287 | {&hf_nmea0183_stn_talker,
10288 | {"Talker ID Number", "nmea0183.stn.talker",
10289 | FT_STRING, BASE_NONE,
10290 | NULL((void*)0), 0x0,
10291 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10292 | { &hf_nmea0183_tag_block,
10293 | { "Tag block", "nmea0183.tag_block",
10294 | FT_STRING, BASE_NONE,
10295 | NULL((void*)0), 0x0,
10296 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
10297 | {&hf_nmea0183_tlb_label,
10298 | {"Label Assigned to Target", "nmea0183.tlb.label",
10299 | FT_STRING, BASE_NONE,
10300 | NULL((void*)0), 0x0,
10301 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10302 | {&hf_nmea0183_tlb_target,
10303 | {"Target Number", "nmea0183.tlb.tgt_num",
10304 | FT_STRING, BASE_NONE,
10305 | NULL((void*)0), 0x0,
10306 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10307 | {&hf_nmea0183_tll_ref_tgt,
10308 | {"Reference Target", "nmea0183.tll.ref",
10309 | FT_CHAR, BASE_NONE,
10310 | VALS(ref_target_vals)((0 ? (const struct _value_string*)0 : ((ref_target_vals)))), 0x0,
10311 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10312 | {&hf_nmea0183_tll_tgt_latitude,
10313 | {"Target Latitude", "nmea0183.tll.latitude",
10314 | FT_FLOAT, BASE_NONE,
10315 | NULL((void*)0), 0x0,
10316 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10317 | {&hf_nmea0183_tll_tgt_longitude,
10318 | {"Target Longitude", "nmea0183.tll.longitude",
10319 | FT_FLOAT, BASE_NONE,
10320 | NULL((void*)0), 0x0,
10321 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10322 | {&hf_nmea0183_tll_tgt_name,
10323 | {"Target Name", "nmea0183.tll.tgt_name",
10324 | FT_STRING, BASE_NONE,
10325 | NULL((void*)0), 0x0,
10326 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10327 | {&hf_nmea0183_tll_utc,
10328 | {"UTC of Data","nmea0183.tll.utc",
10329 | FT_STRING, BASE_NONE,
10330 | NULL((void*)0), 0x0,
10331 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10332 | {&hf_nmea0183_tll_tgt_num,
10333 | {"Target Number", "nmea0183.tll.tgt_num",
10334 | FT_STRING, BASE_NONE,
10335 | NULL((void*)0), 0x0,
10336 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10337 | {&hf_nmea0183_tll_tgt_status,
10338 | {"Target Status", "nmea0183.tll.status",
10339 | FT_CHAR, BASE_NONE,
10340 | VALS(tgt_status_vals)((0 ? (const struct _value_string*)0 : ((tgt_status_vals)))), 0x0,
10341 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10342 | {&hf_nmea0183_ttm_acq_type,
10343 | {"Type of Acquisition", "nmea0183.ttm.acq",
10344 | FT_CHAR, BASE_NONE,
10345 | VALS(target_acq_vals)((0 ? (const struct _value_string*)0 : ((target_acq_vals)))), 0x0,
10346 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10347 | {&hf_nmea0183_ttm_bearing,
10348 | {"Target Number", "nmea0183.ttm.bearing",
10349 | FT_STRING, BASE_NONE,
10350 | NULL((void*)0), 0x0,
10351 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10352 | {&hf_nmea0183_ttm_dist_pt_approach,
10353 | {"Target Number", "nmea0183.ttm.dist_approach",
10354 | FT_STRING, BASE_NONE,
10355 | NULL((void*)0), 0x0,
10356 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10357 | {&hf_nmea0183_ttm_ref_tgt,
10358 | {"Reference Target", "nmea0183.ttm.ref",
10359 | FT_CHAR, BASE_NONE,
10360 | VALS(ref_target_vals)((0 ? (const struct _value_string*)0 : ((ref_target_vals)))), 0x0,
10361 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10362 | {&hf_nmea0183_ttm_tgt_course,
10363 | {"Target Number", "nmea0183.ttm.tgt_course",
10364 | FT_STRING, BASE_NONE,
10365 | NULL((void*)0), 0x0,
10366 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10367 | {&hf_nmea0183_ttm_tgt_dist,
10368 | {"Target Number", "nmea0183.ttm.tgt_dist",
10369 | FT_STRING, BASE_NONE,
10370 | NULL((void*)0), 0x0,
10371 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10372 | {&hf_nmea0183_ttm_tgt_name,
10373 | {"Target Name", "nmea0183.ttm.tgt_name",
10374 | FT_STRING, BASE_NONE,
10375 | NULL((void*)0), 0x0,
10376 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10377 | {&hf_nmea0183_ttm_tgt_num,
10378 | {"Target Number", "nmea0183.ttm.tgt_num",
10379 | FT_STRING, BASE_NONE,
10380 | NULL((void*)0), 0x0,
10381 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10382 | {&hf_nmea0183_ttm_tgt_speed,
10383 | {"Target Number", "nmea0183.ttm.tgt_speed",
10384 | FT_STRING, BASE_NONE,
10385 | NULL((void*)0), 0x0,
10386 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10387 | {&hf_nmea0183_ttm_tgt_status,
10388 | {"Target Status", "nmea0183.ttm.status",
10389 | FT_CHAR, BASE_NONE,
10390 | VALS(tgt_status_vals)((0 ? (const struct _value_string*)0 : ((tgt_status_vals)))), 0x0,
10391 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10392 | {&hf_nmea0183_ttm_time_cpa,
10393 | {"Target Number", "nmea0183.ttm.cpa",
10394 | FT_STRING, BASE_NONE,
10395 | NULL((void*)0), 0x0,
10396 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10397 | {&hf_nmea0183_ttm_units,
10398 | {"Speed/Distance Units", "nmea0183.ttm.units",
10399 | FT_CHAR, BASE_NONE,
10400 | VALS(speed_unit_vals)((0 ? (const struct _value_string*)0 : ((speed_unit_vals)))), 0x0,
10401 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10402 | {&hf_nmea0183_ttm_utc,
10403 | {"UTC of Data", "nmea0183.ttm.utc",
10404 | FT_STRING, BASE_NONE,
10405 | NULL((void*)0), 0x0,
10406 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10407 | {&hf_nmea0183_tut_sentence_num,
10408 | {"Sentence Number", "nmea0183.tut.sent_number",
10409 | FT_STRING, BASE_NONE,
10410 | NULL((void*)0), 0x0,
10411 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10412 | {&hf_nmea0183_tut_seq_msg,
10413 | {"Sequential Message Identifier", "nmea0183.tut.seq_msg",
10414 | FT_STRING, BASE_NONE,
10415 | NULL((void*)0), 0x0,
10416 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10417 | {&hf_nmea0183_tut_src_id,
10418 | {"Source Identifier", "nmea0183.tut.source",
10419 | FT_STRING, BASE_NONE,
10420 | NULL((void*)0), 0x0,
10421 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10422 | {&hf_nmea0183_tut_text,
10423 | {"Text Body", "nmea0183.tut.text",
10424 | FT_STRING, BASE_NONE,
10425 | NULL((void*)0), 0x0,
10426 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10427 | {&hf_nmea0183_tut_total_sentences,
10428 | {"Total Number of Sentences", "nmea0183.tut.tot_sentences",
10429 | FT_STRING, BASE_NONE,
10430 | NULL((void*)0), 0x0,
10431 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10432 | {&hf_nmea0183_tut_trans_code,
10433 | {"Translation Code for Text Body", "nmea0183.tut.trans_code",
10434 | FT_STRING, BASE_NONE,
10435 | NULL((void*)0), 0x0,
10436 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10437 | { &hf_nmea0183_txt_id,
10438 | {"Text identifier", "nmea0183.txt.id",
10439 | FT_STRING, BASE_NONE,
10440 | NULL((void*)0), 0x0,
10441 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
10442 | { &hf_nmea0183_txt_msg,
10443 | {"Text message", "nmea0183.txt.msg",
10444 | FT_STRING, BASE_NONE,
10445 | NULL((void*)0), 0x0,
10446 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
10447 | { &hf_nmea0183_txt_num,
10448 | {"Total number of sentences", "nmea0183.txt.num",
10449 | FT_STRING, BASE_NONE,
10450 | NULL((void*)0), 0x0,
10451 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
10452 | { &hf_nmea0183_txt_sent_num,
10453 | {"Sentence number", "nmea0183.txt.sent_num",
10454 | FT_STRING, BASE_NONE,
10455 | NULL((void*)0), 0x0,
10456 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
10457 | {&hf_nmea0183_vbw_ground_speed_longitudinal,
10458 | {"Longitudinal ground speed", "nmea0183.vbw_ground_speed_longitudinal",
10459 | FT_STRING, BASE_NONE,
10460 | NULL((void*)0), 0x0,
10461 | "NMEA 0183 VBW Longitudinal ground speed, negative value means astern, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10462 | {&hf_nmea0183_vbw_ground_speed_transverse,
10463 | {"Transverse ground speed", "nmea0183.vbw_ground_speed_transverse",
10464 | FT_STRING, BASE_NONE,
10465 | NULL((void*)0), 0x0,
10466 | "NMEA 0183 VBW Transverse ground speed, negative value means port, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10467 | {&hf_nmea0183_vbw_ground_speed_valid,
10468 | {"Ground speed validity", "nmea0183.vbw_ground_speed_valid",
10469 | FT_STRING, BASE_NONE,
10470 | NULL((void*)0), 0x0,
10471 | "NMEA 0183 VBW Ground speed status, A means data is valid", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10472 | {&hf_nmea0183_vbw_stern_ground_speed,
10473 | {"Stern ground speed", "nmea0183.vbw_stern_ground_speed",
10474 | FT_STRING, BASE_NONE,
10475 | NULL((void*)0), 0x0,
10476 | "NMEA 0183 VBW Stern traverse ground ground speed, negative value means port, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10477 | {&hf_nmea0183_vbw_stern_ground_speed_valid,
10478 | {"Stern ground speed validity", "nmea0183.vbw_stern_ground_speed_valid",
10479 | FT_STRING, BASE_NONE,
10480 | NULL((void*)0), 0x0,
10481 | "NMEA 0183 VBW Stern traverse ground speed status, A means data is valid", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10482 | {&hf_nmea0183_vbw_stern_water_speed,
10483 | {"Stern water speed", "nmea0183.vbw_stern_water_speed",
10484 | FT_STRING, BASE_NONE,
10485 | NULL((void*)0), 0x0,
10486 | "NMEA 0183 VBW Stern traverse water ground speed, negative value means port, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10487 | {&hf_nmea0183_vbw_stern_water_speed_valid,
10488 | {"Stern water speed validity", "nmea0183.vbw_stern_water_speed_valid",
10489 | FT_STRING, BASE_NONE,
10490 | NULL((void*)0), 0x0,
10491 | "NMEA 0183 VBW Stern traverse water speed status, A means data is valid", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10492 | {&hf_nmea0183_vbw_water_speed_longitudinal,
10493 | {"Longitudinal water speed", "nmea0183.vbw_water_speed_longitudinal",
10494 | FT_STRING, BASE_NONE,
10495 | NULL((void*)0), 0x0,
10496 | "NMEA 0183 VBW Longitudinal water speed, negative value means astern, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10497 | {&hf_nmea0183_vbw_water_speed_transverse,
10498 | {"Transverse water speed", "nmea0183.vbw_water_speed_transverse",
10499 | FT_STRING, BASE_NONE,
10500 | NULL((void*)0), 0x0,
10501 | "NMEA 0183 VBW Transverse water speed, negative value means port, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10502 | {&hf_nmea0183_vbw_water_speed_valid,
10503 | {"Water speed validity", "nmea0183.vbw_water_speed_valid",
10504 | FT_STRING, BASE_NONE,
10505 | NULL((void*)0), 0x0,
10506 | "NMEA 0183 VBW Water speed status, A means data is valid", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10507 | {&hf_nmea0183_vdr_heading_magnetic,
10508 | {"Direction (degrees Magnetic)", "nmea0183.vdr.magnetic",
10509 | FT_STRING, BASE_NONE,
10510 | NULL((void*)0), 0x0,
10511 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10512 | {&hf_nmea0183_vdr_heading_true,
10513 | {"Direction (degrees True)", "nmea0183.vdr.true",
10514 | FT_STRING, BASE_NONE,
10515 | NULL((void*)0), 0x0,
10516 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10517 | {&hf_nmea0183_vdr_speed,
10518 | {"Current Speed (knots)", "nmea0183.vdr.speed",
10519 | FT_STRING, BASE_NONE,
10520 | NULL((void*)0), 0x0,
10521 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10522 | {&hf_nmea0183_vhw_magnetic_heading,
10523 | {"Magnetic heading", "nmea0183.vhw_magnetic_heading",
10524 | FT_STRING, BASE_NONE,
10525 | NULL((void*)0), 0x0,
10526 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10527 | {&hf_nmea0183_vhw_magnetic_heading_unit,
10528 | {"Heading unit", "nmea0183.vhw_magnetic_heading_unit",
10529 | FT_STRING, BASE_NONE,
10530 | NULL((void*)0), 0x0,
10531 | "NMEA 0183 VHW Heading unit, must be M", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10532 | {&hf_nmea0183_vhw_true_heading,
10533 | {"True heading", "nmea0183.vhw_true_heading",
10534 | FT_STRING, BASE_NONE,
10535 | NULL((void*)0), 0x0,
10536 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10537 | {&hf_nmea0183_vhw_true_heading_unit,
10538 | {"Heading unit", "nmea0183.vhw_true_heading_unit",
10539 | FT_STRING, BASE_NONE,
10540 | NULL((void*)0), 0x0,
10541 | "NMEA 0183 VHW Heading unit, must be T", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10542 | {&hf_nmea0183_vhw_water_speed_kilometer,
10543 | {"Water speed", "nmea0183.vhw_water_speed_kilometer",
10544 | FT_STRING, BASE_NONE,
10545 | NULL((void*)0), 0x0,
10546 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10547 | {&hf_nmea0183_vhw_water_speed_kilometer_unit,
10548 | {"Speed unit", "nmea0183.vhw_water_speed_kilometer_unit",
10549 | FT_STRING, BASE_NONE,
10550 | NULL((void*)0), 0x0,
10551 | "NMEA 0183 VHW Water speed unit, must be K", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10552 | {&hf_nmea0183_vhw_water_speed_knot,
10553 | {"Water speed", "nmea0183.vhw_water_speed_knot",
10554 | FT_STRING, BASE_NONE,
10555 | NULL((void*)0), 0x0,
10556 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10557 | {&hf_nmea0183_vhw_water_speed_knot_unit,
10558 | {"Speed unit", "nmea0183.vhw_water_speed_knot_unit",
10559 | FT_STRING, BASE_NONE,
10560 | NULL((void*)0), 0x0,
10561 | "NMEA 0183 VHW Water speed unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10562 | {&hf_nmea0183_vlw_cumulative_ground,
10563 | {"Cumulative ground distance", "nmea0183.vlw_hf_nmea0183_vlw_cumulative_ground",
10564 | FT_STRING, BASE_NONE,
10565 | NULL((void*)0), 0x0,
10566 | "NMEA 0183 VLW Total cumulative ground distance, nautical miles (NMEA 3 and above)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10567 | {&hf_nmea0183_vlw_cumulative_ground_unit,
10568 | {"Distance unit", "nmea0183.vlw_cumulative_ground_unit",
10569 | FT_STRING, BASE_NONE,
10570 | NULL((void*)0), 0x0,
10571 | "NMEA 0183 VLW Distance unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10572 | {&hf_nmea0183_vlw_cumulative_water,
10573 | {"Cumulative water distance", "nmea0183.vlw_hf_nmea0183_vlw_cumulative_water",
10574 | FT_STRING, BASE_NONE,
10575 | NULL((void*)0), 0x0,
10576 | "NMEA 0183 VLW Total cumulative water distance, nautical miles", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10577 | {&hf_nmea0183_vlw_cumulative_water_unit,
10578 | {"Distance unit", "nmea0183.vlw_cumulative_water_unit",
10579 | FT_STRING, BASE_NONE,
10580 | NULL((void*)0), 0x0,
10581 | "NMEA 0183 VLW Distance unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10582 | {&hf_nmea0183_vlw_trip_ground,
10583 | {"Trip ground distance", "nmea0183.vlw_hf_nmea0183_vlw_trip_ground",
10584 | FT_STRING, BASE_NONE,
10585 | NULL((void*)0), 0x0,
10586 | "NMEA 0183 VLW Ground distance since Reset, nautical miles (NMEA 3 and above)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10587 | {&hf_nmea0183_vlw_trip_ground_unit,
10588 | {"Distance unit", "nmea0183.vlw_trip_ground_unit",
10589 | FT_STRING, BASE_NONE,
10590 | NULL((void*)0), 0x0,
10591 | "NMEA 0183 VLW Distance unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10592 | {&hf_nmea0183_vlw_trip_water,
10593 | {"Trip water distance", "nmea0183.vlw_hf_nmea0183_vlw_trip_water",
10594 | FT_STRING, BASE_NONE,
10595 | NULL((void*)0), 0x0,
10596 | "NMEA 0183 VLW Water distance since Reset, nautical miles", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10597 | {&hf_nmea0183_vlw_trip_water_unit,
10598 | {"Distance unit", "nmea0183.vlw_trip_water_unit",
10599 | FT_STRING, BASE_NONE,
10600 | NULL((void*)0), 0x0,
10601 | "NMEA 0183 VLW Distance unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10602 | {&hf_nmea0183_vpw_speed_knots,
10603 | {"Speed (knots)", "nmea0183.vpw.knots",
10604 | FT_STRING, BASE_NONE,
10605 | NULL((void*)0), 0x0,
10606 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10607 | {&hf_nmea0183_vpw_speed_ms,
10608 | {"Speed (meters/second)", "nmea0183.vpw.ms",
10609 | FT_STRING, BASE_NONE,
10610 | NULL((void*)0), 0x0,
10611 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10612 | {&hf_nmea0183_vsd_app_flags,
10613 | {"Regional Application Flags", "nmea0183.vsd.app_flags",
10614 | FT_STRING, BASE_NONE,
10615 | NULL((void*)0), 0x0,
10616 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10617 | {&hf_nmea0183_vsd_day_arrival,
10618 | {"Estimated Day of Arrival at Destination", "nmea0183.vsd.arrival_day",
10619 | FT_STRING, BASE_NONE,
10620 | NULL((void*)0), 0x0,
10621 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10622 | {&hf_nmea0183_vsd_destination,
10623 | {"Destination", "nmea0183.vsd.dest",
10624 | FT_STRING, BASE_NONE,
10625 | NULL((void*)0), 0x0,
10626 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10627 | {&hf_nmea0183_vsd_max_draught,
10628 | {"Maximum Present Static Draught (m)", "nmea0183.vsd.draft",
10629 | FT_STRING, BASE_NONE,
10630 | NULL((void*)0), 0x0,
10631 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10632 | {&hf_nmea0183_vsd_month_arrival,
10633 | {"Estimated Month of Arrival at Destination", "nmea0183.vsd.arrival_month",
10634 | FT_STRING, BASE_NONE,
10635 | NULL((void*)0), 0x0,
10636 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10637 | {&hf_nmea0183_vsd_nav_status,
10638 | {"Navigational Status", "nmea0183.vsd.nav_status",
10639 | FT_STRING, BASE_NONE,
10640 | NULL((void*)0), 0x0,
10641 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10642 | {&hf_nmea0183_vsd_persons,
10643 | {"Persons On-board", "nmea0183.vsd.persons",
10644 | FT_STRING, BASE_NONE,
10645 | NULL((void*)0), 0x0,
10646 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10647 | {&hf_nmea0183_vsd_ship_cargo,
10648 | {"Type of Ship & Cargo Category", "nmea0183.vsd.ship_cargo",
10649 | FT_STRING, BASE_NONE,
10650 | NULL((void*)0), 0x0,
10651 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10652 | {&hf_nmea0183_vsd_utc_arrival,
10653 | {"Estimated UTC of Arrival at Destination", "nmea0183.vsd.arrival_utc",
10654 | FT_STRING, BASE_NONE,
10655 | NULL((void*)0), 0x0,
10656 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10657 | {&hf_nmea0183_vtg_ground_speed_kilometer,
10658 | {"Speed over ground", "nmea0183.vtg_ground_speed_kilometer",
10659 | FT_STRING, BASE_NONE,
10660 | NULL((void*)0), 0x0,
10661 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10662 | {&hf_nmea0183_vtg_ground_speed_kilometer_unit,
10663 | {"Speed unit", "nmea0183.vtg_ground_speed_kilometer_unit",
10664 | FT_STRING, BASE_NONE,
10665 | NULL((void*)0), 0x0,
10666 | "NMEA 0183 VTG Ground speed unit, must be K", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10667 | {&hf_nmea0183_vtg_ground_speed_knot,
10668 | {"Speed over ground", "nmea0183.vtg_ground_speed_knot",
10669 | FT_STRING, BASE_NONE,
10670 | NULL((void*)0), 0x0,
10671 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10672 | {&hf_nmea0183_vtg_ground_speed_knot_unit,
10673 | {"Speed unit", "nmea0183.vtg_ground_speed_knot_unit",
10674 | FT_STRING, BASE_NONE,
10675 | NULL((void*)0), 0x0,
10676 | "NMEA 0183 VTG Ground speed unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10677 | {&hf_nmea0183_vtg_magnetic_course,
10678 | {"Magnetic course over ground", "nmea0183.vtg_magnetic_course",
10679 | FT_STRING, BASE_NONE,
10680 | NULL((void*)0), 0x0,
10681 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10682 | {&hf_nmea0183_vtg_magnetic_course_unit,
10683 | {"Course unit", "nmea0183.vtg_magnetic_course_unit",
10684 | FT_STRING, BASE_NONE,
10685 | NULL((void*)0), 0x0,
10686 | "NMEA 0183 VTG Course unit, must be M", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10687 | {&hf_nmea0183_vtg_mode,
10688 | {"FAA mode", "nmea0183.vtg_mode",
10689 | FT_STRING, BASE_NONE,
10690 | NULL((void*)0), 0x0,
10691 | "NMEA 0183 VTG FAA mode indicator (NMEA 2.3 and later)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10692 | {&hf_nmea0183_vtg_true_course,
10693 | {"True course over ground", "nmea0183.vtg_true_course",
10694 | FT_STRING, BASE_NONE,
10695 | NULL((void*)0), 0x0,
10696 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10697 | {&hf_nmea0183_vtg_true_course_unit,
10698 | {"Course unit", "nmea0183.vtg_true_course_unit",
10699 | FT_STRING, BASE_NONE,
10700 | NULL((void*)0), 0x0,
10701 | "NMEA 0183 VTG Course unit, must be T", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10702 | {&hf_nmea0183_wcv_mode,
10703 | {"Mode Indicator", "nmea0183.wcv.mode",
10704 | FT_CHAR, BASE_NONE,
10705 | VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
10706 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10707 | {&hf_nmea0183_wcv_velocity,
10708 | {"Velocity (knots)", "nmea0183.wcv.velocity",
10709 | FT_STRING, BASE_NONE,
10710 | NULL((void*)0), 0x0,
10711 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10712 | {&hf_nmea0183_wcv_waypoint,
10713 | {"Waypoint Identifier", "nmea0183.wcv.waypoint",
10714 | FT_STRING, BASE_NONE,
10715 | NULL((void*)0), 0x0,
10716 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10717 | {&hf_nmea0183_wnc_dist_km,
10718 | {"Distance (km)", "nmea0183.wnc.dist_km",
10719 | FT_STRING, BASE_NONE,
10720 | NULL((void*)0), 0x0,
10721 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10722 | {&hf_nmea0183_wnc_dist_nm,
10723 | {"Distance (nm)", "nmea0183.wnc.dist_nm",
10724 | FT_STRING, BASE_NONE,
10725 | NULL((void*)0), 0x0,
10726 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10727 | {&hf_nmea0183_wnc_from_id,
10728 | {"'FROM' Waypoint ID", "nmea0183.wnc.from_waypoint",
10729 | FT_STRING, BASE_NONE,
10730 | NULL((void*)0), 0x0,
10731 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10732 | {&hf_nmea0183_wnc_to_id,
10733 | {"'TO' Waypoint ID", "nmea0183.wnc.to_waypoint",
10734 | FT_STRING, BASE_NONE,
10735 | NULL((void*)0), 0x0,
10736 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10737 | {&hf_nmea0183_wpl_latitude,
10738 | {"Waypoint Latitude", "nmea0183.wpl.latitude",
10739 | FT_FLOAT, BASE_NONE,
10740 | NULL((void*)0), 0x0,
10741 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10742 | {&hf_nmea0183_wpl_longitude,
10743 | {"Waypoint Longitude", "nmea0183.wpl.longitude",
10744 | FT_FLOAT, BASE_NONE,
10745 | NULL((void*)0), 0x0,
10746 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10747 | {&hf_nmea0183_wpl_waypoint,
10748 | {"Waypoint Identifier", "nmea0183.wpl.waypoint",
10749 | FT_STRING, BASE_NONE,
10750 | NULL((void*)0), 0x0,
10751 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10752 | {&hf_nmea0183_xdr_data,
10753 | {"Measurement Data", "nmea0183.xdr.data",
10754 | FT_STRING, BASE_NONE,
10755 | NULL((void*)0), 0x0,
10756 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10757 | {&hf_nmea0183_xdr_id,
10758 | {"Transducer ID", "nmea0183.xdr.id",
10759 | FT_STRING, BASE_NONE,
10760 | NULL((void*)0), 0x0,
10761 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10762 | {&hf_nmea0183_xdr_type,
10763 | {"Transducer Type", "nmea0183.xdr.type",
10764 | FT_CHAR, BASE_NONE,
10765 | VALS(transducer_type_vals)((0 ? (const struct _value_string*)0 : ((transducer_type_vals )))), 0x0,
10766 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10767 | {&hf_nmea0183_xdr_units,
10768 | {"Units of Measure", "nmea0183.xdr.units",
10769 | FT_CHAR, BASE_NONE,
10770 | VALS(transducer_unit_vals)((0 ? (const struct _value_string*)0 : ((transducer_unit_vals )))), 0x0,
10771 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10772 | {&hf_nmea0183_xte_blinksnr_status,
10773 | {"Data Status - Loran-C Blink/SNR Warning", "nmea0183.xte.blinksnr",
10774 | FT_CHAR, BASE_NONE,
10775 | VALS(loranc_blink_snr_warning_vals)((0 ? (const struct _value_string*)0 : ((loranc_blink_snr_warning_vals )))), 0x0,
10776 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10777 | {&hf_nmea0183_xte_cycle_status,
10778 | {"Data Status - Loran-C Cycle Lock Warning", "nmea0183.xte.cycle_lock",
10779 | FT_CHAR, BASE_NONE,
10780 | VALS(loranc_cycle_lock_warning_vals)((0 ? (const struct _value_string*)0 : ((loranc_cycle_lock_warning_vals )))), 0x0,
10781 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10782 | {&hf_nmea0183_xte_magnitude,
10783 | {"Magnitude of Cross-Track-Error (XTE)", "nmea0183.xte.magnitude",
10784 | FT_STRING, BASE_NONE,
10785 | NULL((void*)0), 0x0,
10786 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10787 | {&hf_nmea0183_xte_direction,
10788 | {"Direction to Steer (nm)", "nmea0183.xte.steer",
10789 | FT_CHAR, BASE_NONE,
10790 | VALS(steer_direction)((0 ? (const struct _value_string*)0 : ((steer_direction)))), 0x0,
10791 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10792 | {&hf_nmea0183_xte_mode,
10793 | {"Mode Indicator", "nmea0183.xte.mode",
10794 | FT_CHAR, BASE_NONE,
10795 | VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
10796 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10797 | {&hf_nmea0183_xtr_direction,
10798 | {"Direction to Steer (nm)", "nmea0183.xtr.steer",
10799 | FT_CHAR, BASE_NONE,
10800 | VALS(steer_direction)((0 ? (const struct _value_string*)0 : ((steer_direction)))), 0x0,
10801 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10802 | {&hf_nmea0183_xtr_magnitude,
10803 | {"Magnitude of Cross-Track-Error (XTE)", "nmea0183.xtr.magnitude",
10804 | FT_STRING, BASE_NONE,
10805 | NULL((void*)0), 0x0,
10806 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10807 | {&hf_nmea0183_zda_date_day,
10808 | {"Day", "nmea0183.zda_date_day",
10809 | FT_STRING, BASE_NONE,
10810 | NULL((void*)0), 0x0,
10811 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10812 | {&hf_nmea0183_zda_date_month,
10813 | {"Month", "nmea0183.zda_date_month",
10814 | FT_STRING, BASE_NONE,
10815 | NULL((void*)0), 0x0,
10816 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10817 | {&hf_nmea0183_zda_date_year,
10818 | {"Year", "nmea0183.zda_date_year",
10819 | FT_STRING, BASE_NONE,
10820 | NULL((void*)0), 0x0,
10821 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10822 | {&hf_nmea0183_zda_local_zone_hour,
10823 | {"Local zone hour", "nmea0183.zda_local_zone_hour",
10824 | FT_STRING, BASE_NONE,
10825 | NULL((void*)0), 0x0,
10826 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10827 | { &hf_nmea0183_zda_local_zone_minute,
10828 | {"Local zone minute", "nmea0183.zda_local_zone_minute",
10829 | FT_STRING, BASE_NONE,
10830 | NULL((void*)0), 0x0,
10831 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10832 | {&hf_nmea0183_zda_time,
10833 | {"UTC Time", "nmea0183.zda_time",
10834 | FT_NONE, BASE_NONE,
10835 | NULL((void*)0), 0x0,
10836 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10837 | {&hf_nmea0183_zda_time_hour,
10838 | {"Hour", "nmea0183.zda_time_hour",
10839 | FT_STRING, BASE_NONE,
10840 | NULL((void*)0), 0x0,
10841 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10842 | {&hf_nmea0183_zda_time_minute,
10843 | {"Minute", "nmea0183.zda_time_minute",
10844 | FT_STRING, BASE_NONE,
10845 | NULL((void*)0), 0x0,
10846 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10847 | {&hf_nmea0183_zda_time_second,
10848 | {"Second", "nmea0183.zda_time_second",
10849 | FT_STRING, BASE_NONE,
10850 | NULL((void*)0), 0x0,
10851 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10852 | {&hf_nmea0183_zdl_dist,
10853 | {"Distance to point (nm)", "nmea0183.zdl.dist",
10854 | FT_STRING, BASE_NONE,
10855 | NULL((void*)0), 0x0,
10856 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10857 | {&hf_nmea0183_zdl_time,
10858 | {"Time to point (hours)", "nmea0183.zdl.time",
10859 | FT_STRING, BASE_NONE,
10860 | NULL((void*)0), 0x0,
10861 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10862 | {&hf_nmea0183_zdl_type,
10863 | {"Type of Point", "nmea0183.zdl.type",
10864 | FT_CHAR, BASE_NONE,
10865 | VALS(point_type_vals)((0 ? (const struct _value_string*)0 : ((point_type_vals)))), 0x0,
10866 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10867 | {&hf_nmea0183_zfo_elapsed,
10868 | {"Elapsed Time (hours)", "nmea0183.zfo.elapsed",
10869 | FT_STRING, BASE_NONE,
10870 | NULL((void*)0), 0x0,
10871 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10872 | {&hf_nmea0183_zfo_origin,
10873 | {"Origin Waypoint ID", "nmea0183.zfo.waypoint",
10874 | FT_STRING, BASE_NONE,
10875 | NULL((void*)0), 0x0,
10876 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10877 | {&hf_nmea0183_zfo_utc,
10878 | {"UTC of Observation", "nmea0183.zfo.utc",
10879 | FT_STRING, BASE_NONE,
10880 | NULL((void*)0), 0x0,
10881 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10882 | {&hf_nmea0183_ztg_dest,
10883 | {"Destination Waypoint ID", "nmea0183.ztg.waypoint",
10884 | FT_STRING, BASE_NONE,
10885 | NULL((void*)0), 0x0,
10886 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10887 | {&hf_nmea0183_ztg_time_left,
10888 | {"Time-to-go (hours)", "nmea0183.ztg.time_left",
10889 | FT_STRING, BASE_NONE,
10890 | NULL((void*)0), 0x0,
10891 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10892 | {&hf_nmea0183_ztg_utc,
10893 | {"UTC of Observation", "nmea0183.ztg.utc",
10894 | FT_STRING, BASE_NONE,
10895 | NULL((void*)0), 0x0,
10896 | NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}}
10897 | };
10898 |
10899 | /* Setup protocol subtree array */
10900 | static int *ett[] = {
10901 | &ett_nmea0183,
10902 | &ett_nmea0183_checksum,
10903 | &ett_nmea0183_sentence,
10904 | &ett_nmea0183_zda_time,
10905 | &ett_nmea0183_alr_time,
10906 | &ett_nmea0183_gga_time,
10907 | &ett_nmea0183_gga_latitude,
10908 | &ett_nmea0183_gga_longitude,
10909 | &ett_nmea0183_gll_time,
10910 | &ett_nmea0183_gll_latitude,
10911 | &ett_nmea0183_gll_longitude,
10912 | &ett_nmea0183_gst_time,
10913 | &ett_nmea0183_tag_block,
10914 | &ett_nmea0183_fd,
10915 | &ett_nmea0183_legacy_satellite_info
10916 | };
10917 |
10918 | static ei_register_info ei[] = {
10919 | {&ei_nmea0183_invalid_first_character,
10920 | {"nmea0183.invalid_first_character", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10921 | "First character should be '$'", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10922 | {&ei_nmea0183_missing_checksum_character,
10923 | {"nmea0183.missing_checksum_character", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
10924 | "Missing begin of checksum character '*'", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10925 | {&ei_nmea0183_invalid_end_of_line,
10926 | {"nmea0183.invalid_end_of_line", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10927 | "Sentence should end with <CR><LF>", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10928 | {&ei_nmea0183_checksum_incorrect,
10929 | {"nmea0183.checksum_incorrect", PI_CHECKSUM0x01000000, PI_WARN0x00600000,
10930 | "Incorrect checksum", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10931 | {&ei_nmea0183_sentence_too_long,
10932 | {"nmea0183.sentence_too_long", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10933 | "Sentence is too long. Maximum is 82 bytes including $ and <CR><LF>", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10934 | {&ei_nmea0183_field_time_too_short,
10935 | {"nmea0183.field_time_too_short", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10936 | "Field containing time is too short. Field should be at least 6 characters", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10937 | {&ei_nmea0183_field_latitude_too_short,
10938 | {"nmea0183.field_latitude_too_short", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10939 | "Field containing latitude is too short. Field should be at least 4 characters", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10940 | {&ei_nmea0183_field_longitude_too_short,
10941 | {"nmea0183.field_longitude_too_short", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10942 | "Field containing longitude is too short. Field should be at least 5 characters", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10943 | {&ei_nmea0183_field_missing,
10944 | {"nmea0183.field_missing", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10945 | "Field expected, but not found", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10946 | {&ei_nmea0183_field_uint_invalid,
10947 | {"nmea0183.field_uint_invalid", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10948 | "Invalid unsigned integer", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10949 | {&ei_nmea0183_sat_prn_invalid,
10950 | {"nmea0183.sat_prn_invalid", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10951 | "Invalid satellite PRN", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10952 | {&ei_nmea0183_gga_altitude_unit_incorrect,
10953 | {"nmea0183.gga_altitude_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10954 | "Incorrect altitude unit (should be 'M')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10955 | {&ei_nmea0183_gga_geoidal_separation_unit_incorrect,
10956 | {"nmea0183.gga_geoidal_separation_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10957 | "Incorrect geoidal separation unit (should be 'M')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10958 | {&ei_nmea0183_hdt_unit_incorrect,
10959 | {"nmea0183.hdt_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10960 | "Incorrect heading unit (should be 'T')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10961 | {&ei_nmea0183_vhw_true_heading_unit_incorrect,
10962 | {"nmea0183.vhw_true_heading_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10963 | "Incorrect heading unit (should be 'T')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10964 | {&ei_nmea0183_vhw_magnetic_heading_unit_incorrect,
10965 | {"nmea0183.vhw_magnetic_heading_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10966 | "Incorrect heading unit (should be 'M')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10967 | {&ei_nmea0183_vhw_water_speed_knot_unit_incorrect,
10968 | {"nmea0183.vhw_water_speed_knot_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10969 | "Incorrect speed unit (should be 'N')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10970 | {&ei_nmea0183_vhw_water_speed_kilometer_unit_incorrect,
10971 | {"nmea0183.vhw_water_speed_kilometer_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10972 | "Incorrect speed unit (should be 'K')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10973 | {&ei_nmea0183_vlw_cumulative_water_unit_incorrect,
10974 | {"nmea0183.vlw_cumulative_water_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10975 | "Incorrect distance unit (should be 'N')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10976 | {&ei_nmea0183_vlw_trip_water_unit_incorrect,
10977 | {"nmea0183.vlw_trip_water_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10978 | "Incorrect distance unit (should be 'N')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10979 | {&ei_nmea0183_vlw_cumulative_ground_unit_incorrect,
10980 | {"nmea0183.vlw_cumulative_ground_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10981 | "Incorrect distance unit (should be 'N')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10982 | {&ei_nmea0183_vlw_trip_ground_unit_incorrect,
10983 | {"nmea0183.vlw_trip_ground_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10984 | "Incorrect distance unit (should be 'N')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10985 | {&ei_nmea0183_vtg_true_course_unit_incorrect,
10986 | {"nmea0183.vtg_true_course_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10987 | "Incorrect course unit (should be 'T')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10988 | {&ei_nmea0183_vtg_magnetic_course_unit_incorrect,
10989 | {"nmea0183.vtg_magnetic_course_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10990 | "Incorrect course unit (should be 'M')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10991 | {&ei_nmea0183_vtg_ground_speed_knot_unit_incorrect,
10992 | {"nmea0183.vtg_ground_speed_knot_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10993 | "Incorrect speed unit (should be 'N')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10994 | {&ei_nmea0183_vtg_ground_speed_kilometer_unit_incorrect,
10995 | {"nmea0183.vtg_ground_speed_kilometer_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10996 | "Incorrect speed unit (should be 'K')", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
10997 | {&ei_nmea0183_legacy_nonstandard,
10998 | {"nmea0183.legacy.nonstandard", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10999 | "Non-standard field value", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}},
11000 | {&ei_nmea0183_legacy_empty_response,
11001 | {"nmea0183.legacy.empty_response", PI_RESPONSE_CODE0x03000000, PI_WARN0x00600000,
11002 | "Empty response", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE , BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE , -1, ((void*)0)}}}}};
11003 |
11004 | proto_nmea0183 = proto_register_protocol("NMEA 0183 protocol", "NMEA 0183", "nmea0183");
11005 | proto_nmea0183_bin = proto_register_protocol("NMEA 0183 binary protocol", "NMEA 0183 BIN", "nmea0183_bin");
11006 |
11007 | proto_register_field_array(proto_nmea0183, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
11008 | proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
11009 | expert_nmea0183 = expert_register_protocol(proto_nmea0183);
11010 | expert_register_field_array(expert_nmea0183, ei, array_length(ei)(sizeof (ei) / sizeof (ei)[0]));
11011 |
11012 | nmea0183_handle = register_dissector("nmea0183", dissect_nmea0183, proto_nmea0183);
11013 | }
11014 |
11015 | void proto_reg_handoff_nmea0183(void)
11016 | {
11017 | /* Register the UDP PDU NMEA0183 handle for heuristic dissection */
11018 | heur_dissector_add("udp", dissect_nmea0183_heur, "NMEA0183 over UDP",
11019 | "nmea0183_udp", proto_nmea0183, HEURISTIC_DISABLE);
11020 | dissector_add_for_decode_as_with_preference("udp.port", nmea0183_handle);
11021 | }