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

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-29-100403-3660-1 -x c /builds/wireshark/wireshark/epan/dissectors/packet-nmea0183.c
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
27static int hf_nmea0183_talker_id;
28static int hf_nmea0183_sentence_id;
29static int hf_nmea0183_unknown_field;
30static int hf_nmea0183_checksum;
31static int hf_nmea0183_checksum_calculated;
32
33static int hf_nmea0183_dpt_depth;
34static int hf_nmea0183_dpt_offset;
35static int hf_nmea0183_dpt_max_range;
36
37static int hf_nmea0183_hdt_heading;
38static int hf_nmea0183_hdt_unit;
39
40static int hf_nmea0183_aam_arr_circle_radius;
41static int hf_nmea0183_aam_arr_circle_status;
42static int hf_nmea0183_aam_perp_status;
43static int hf_nmea0183_aam_units_radius;
44static int hf_nmea0183_aam_waypoint;
45
46static int hf_nmea0183_abk_ack_type;
47static int hf_nmea0183_abk_ais_channel;
48static int hf_nmea0183_abk_mmsi;
49static int hf_nmea0183_abk_msg_id;
50static int hf_nmea0183_abk_msg_seq;
51
52static int hf_nmea0183_aca_chan_a;
53static int hf_nmea0183_aca_chan_a_bw;
54static int hf_nmea0183_aca_chan_b;
55static int hf_nmea0183_aca_chan_b_bw;
56static int hf_nmea0183_aca_info_src;
57static int hf_nmea0183_aca_inuse;
58static int hf_nmea0183_aca_inuse_change;
59static int hf_nmea0183_aca_ne_clat;
60static int hf_nmea0183_aca_ne_clong;
61static int hf_nmea0183_aca_power;
62static int hf_nmea0183_aca_seq_num;
63static int hf_nmea0183_aca_sw_clat;
64static int hf_nmea0183_aca_sw_clong;
65static int hf_nmea0183_aca_txrx_mode;
66static int hf_nmea0183_aca_zone_size;
67
68static int hf_nmea0183_ack_alarm_id;
69
70static int hf_nmea0183_acs_day;
71static int hf_nmea0183_acs_mmsi;
72static int hf_nmea0183_acs_month;
73static int hf_nmea0183_acs_seq_num;
74static int hf_nmea0183_acs_utc;
75static int hf_nmea0183_acs_year;
76
77static int hf_nmea0183_air_mmsi_is1;
78static int hf_nmea0183_air_mmsi_is2;
79static int hf_nmea0183_air_msg2_req;
80static int hf_nmea0183_air_msg2_sub;
81static int hf_nmea0183_air_msg_req;
82static int hf_nmea0183_air_msg_req_is2;
83static int hf_nmea0183_air_msg_sub;
84static int hf_nmea0183_air_msg_sub_is2;
85
86static int hf_nmea0183_akd_alarm_type;
87static int hf_nmea0183_akd_inst_num_orig;
88static int hf_nmea0183_akd_inst_num_send;
89static int hf_nmea0183_akd_subsys_indicator_orig;
90static int hf_nmea0183_akd_sybsys_indicator_send;
91static int hf_nmea0183_akd_sys_indicator_orig;
92static int hf_nmea0183_akd_sys_indicator_send;
93static int hf_nmea0183_akd_utc;
94
95static int hf_nmea0183_ala_alarm_ack_state;
96static int hf_nmea0183_ala_alarm_cond;
97static int hf_nmea0183_ala_alarm_text;
98static int hf_nmea0183_ala_alarm_type;
99static int hf_nmea0183_ala_inst_num;
100static int hf_nmea0183_ala_subsys_indicator;
101static int hf_nmea0183_ala_sys_indicator;
102static int hf_nmea0183_ala_time;
103
104static int hf_nmea0183_alm_af0_clock_param;
105static int hf_nmea0183_alm_af1_clock_param;
106static int hf_nmea0183_alm_alm_ref_time;
107static int hf_nmea0183_alm_arg_perigee;
108static int hf_nmea0183_alm_eccent;
109static int hf_nmea0183_alm_gps_week;
110static int hf_nmea0183_alm_incl_angle;
111static int hf_nmea0183_alm_long_asc_node;
112static int hf_nmea0183_alm_mean_anomaly;
113static int hf_nmea0183_alm_rate_right_asc;
114static int hf_nmea0183_alm_root_sm_axis;
115static int hf_nmea0183_alm_sat_prn;
116static int hf_nmea0183_alm_sent_num;
117static int hf_nmea0183_alm_sent_tot;
118static int hf_nmea0183_alm_sv_health;
119
120static int hf_nmea0183_alr_time;
121static int hf_nmea0183_alr_time_hour;
122static int hf_nmea0183_alr_time_minute;
123static int hf_nmea0183_alr_time_second;
124static int hf_nmea0183_alr_alarm_id;
125static int hf_nmea0183_alr_alarm_cond;
126static int hf_nmea0183_alr_alarm_ack_st;
127static int hf_nmea0183_alr_alarm_desc_txt;
128
129static int hf_nmea0183_apb_arr_circle_status;
130static int hf_nmea0183_apb_bearing_origin;
131static int hf_nmea0183_apb_bearing_present;
132static int hf_nmea0183_apb_cycle_lock_warning;
133static int hf_nmea0183_apb_dir_steer;
134static int hf_nmea0183_apb_heading_steer;
135static int hf_nmea0183_apb_mag_xte;
136static int hf_nmea0183_apb_mode;
137static int hf_nmea0183_apb_perp_status;
138static int hf_nmea0183_apb_waypoint_id;
139static int hf_nmea0183_apb_xte_units;
140
141static int hf_nmea0183_bec_bearing_mag;
142static int hf_nmea0183_bec_bearing_true;
143static int hf_nmea0183_bec_distance;
144static int hf_nmea0183_bec_latitude;
145static int hf_nmea0183_bec_longitude;
146static int hf_nmea0183_bec_utc;
147static int hf_nmea0183_bec_waypoint;
148
149static int hf_nmea0183_bod_bearing_mag;
150static int hf_nmea0183_bod_bearing_true;
151static int hf_nmea0183_bod_dest_waypoint;
152static int hf_nmea0183_bod_orig_waypoint;
153
154static int hf_nmea0183_bwc_bearing_mag;
155static int hf_nmea0183_bwc_bearing_true;
156static int hf_nmea0183_bwc_distance;
157static int hf_nmea0183_bwc_latitude;
158static int hf_nmea0183_bwc_longitude;
159static int hf_nmea0183_bwc_mode;
160static int hf_nmea0183_bwc_utc;
161static int hf_nmea0183_bwc_waypoint;
162
163static int hf_nmea0183_bwr_bearing_mag;
164static int hf_nmea0183_bwr_bearing_true;
165static int hf_nmea0183_bwr_distance;
166static int hf_nmea0183_bwr_latitude;
167static int hf_nmea0183_bwr_longitude;
168static int hf_nmea0183_bwr_mode;
169static int hf_nmea0183_bwr_utc;
170static int hf_nmea0183_bwr_waypoint;
171
172static int hf_nmea0183_bww_bearing_mag;
173static int hf_nmea0183_bww_bearing_true;
174static int hf_nmea0183_bww_from_waypoint;
175static int hf_nmea0183_bww_to_waypoint;
176
177static int hf_nmea0183_cbr_hr_chan_a;
178static int hf_nmea0183_cbr_hr_chan_b;
179static int hf_nmea0183_cbr_interv_chan_a;
180static int hf_nmea0183_cbr_interv_chan_b;
181static int hf_nmea0183_cbr_min_chan_a;
182static int hf_nmea0183_cbr_min_chan_b;
183static int hf_nmea0183_cbr_mmsi;
184static int hf_nmea0183_cbr_msd_id_index;
185static int hf_nmea0183_cbr_msg_id;
186static int hf_nmea0183_cbr_setup;
187static int hf_nmea0183_cbr_slot_chan_a;
188static int hf_nmea0183_cbr_slot_chan_b;
189static int hf_nmea0183_cbr_status;
190
191static int hf_nmea0183_cur_data_set;
192static int hf_nmea0183_cur_depth;
193static int hf_nmea0183_cur_direction;
194static int hf_nmea0183_cur_direction_ref;
195static int hf_nmea0183_cur_heading;
196static int hf_nmea0183_cur_heading_ref;
197static int hf_nmea0183_cur_layer;
198static int hf_nmea0183_cur_ref_layer;
199static int hf_nmea0183_cur_speed;
200static int hf_nmea0183_cur_speed_ref;
201static int hf_nmea0183_cur_validity;
202
203static int hf_nmea0183_dbt_fathoms;
204static int hf_nmea0183_dbt_feet;
205static int hf_nmea0183_dbt_meters;
206
207static int hf_nmea0183_dcn_data_basis;
208static int hf_nmea0183_dcn_dc_id;
209static int hf_nmea0183_dcn_glop;
210static int hf_nmea0183_dcn_gnav;
211static int hf_nmea0183_dcn_gstatus;
212static int hf_nmea0183_dcn_gz_id;
213static int hf_nmea0183_dcn_plop;
214static int hf_nmea0183_dcn_pnav;
215static int hf_nmea0183_dcn_pos_uncertainty;
216static int hf_nmea0183_dcn_pstatus;
217static int hf_nmea0183_dcn_pz_id;
218static int hf_nmea0183_dcn_rlop;
219static int hf_nmea0183_dcn_rnav;
220static int hf_nmea0183_dcn_rstatus;
221static int hf_nmea0183_dcn_rz_id;
222
223static int hf_nmea0183_ddc_brightness;
224static int hf_nmea0183_ddc_dimming;
225static int hf_nmea0183_ddc_palette;
226static int hf_nmea0183_ddc_status;
227
228static int hf_nmea0183_dor_door_num;
229static int hf_nmea0183_dor_time;
230static int hf_nmea0183_dor_first_indic;
231static int hf_nmea0183_dor_msg_type;
232static int hf_nmea0183_dor_open_count;
233static int hf_nmea0183_dor_second_indic;
234static int hf_nmea0183_dor_setting;
235static int hf_nmea0183_dor_status;
236static int hf_nmea0183_dor_system_type;
237static int hf_nmea0183_dor_text;
238
239static int hf_nmea0183_dsc_ack;
240static int hf_nmea0183_dsc_address;
241static int hf_nmea0183_dsc_category;
242static int hf_nmea0183_dsc_comm_type;
243static int hf_nmea0183_dsc_expansion;
244static int hf_nmea0183_dsc_first_tcmd;
245static int hf_nmea0183_dsc_format;
246static int hf_nmea0183_dsc_mmsi;
247static int hf_nmea0183_dsc_nature_distress;
248static int hf_nmea0183_dsc_position;
249static int hf_nmea0183_dsc_time;
250
251static int hf_nmea0183_dse_code;
252static int hf_nmea0183_dse_data;
253static int hf_nmea0183_dse_flag;
254static int hf_nmea0183_dse_mmsi;
255static int hf_nmea0183_dse_sentence_number;
256static int hf_nmea0183_dse_total_sentences;
257
258static int hf_nmea0183_dsi_course;
259static int hf_nmea0183_dsi_expansion;
260static int hf_nmea0183_dsi_geo_area;
261static int hf_nmea0183_dsi_info;
262static int hf_nmea0183_dsi_mmsi;
263static int hf_nmea0183_dsi_sentence_number;
264static int hf_nmea0183_dsi_symbol;
265static int hf_nmea0183_dsi_total_sentences;
266static int hf_nmea0183_dsi_type;
267
268static int hf_nmea0183_dsr_expansion;
269static int hf_nmea0183_dsr_info;
270static int hf_nmea0183_dsr_mmsi;
271static int hf_nmea0183_dsr_sentence_number;
272static int hf_nmea0183_dsr_symbol;
273static int hf_nmea0183_dsr_total_sentences;
274
275static int hf_nmea0183_dtm_alt_offset;
276static int hf_nmea0183_dtm_datum;
277static int hf_nmea0183_dtm_datum_subdiv;
278static int hf_nmea0183_dtm_lat_offset;
279static int hf_nmea0183_dtm_lon_offset;
280static int hf_nmea0183_dtm_ref_datum;
281
282static int hf_nmea0183_etl_msg_type;
283static int hf_nmea0183_etl_num_eng_shaft;
284static int hf_nmea0183_etl_opind;
285static int hf_nmea0183_etl_posind_engine;
286static int hf_nmea0183_etl_posind_sub;
287static int hf_nmea0183_etl_time;
288
289static int hf_nmea0183_fsi_mode;
290static int hf_nmea0183_fsi_power;
291static int hf_nmea0183_fsi_recv_freq;
292static int hf_nmea0183_fsi_xmit_freq;
293
294static int hf_nmea0183_gbs_alt_err;
295static int hf_nmea0183_gbs_est_bias;
296static int hf_nmea0183_gbs_lat_err;
297static int hf_nmea0183_gbs_long_err;
298static int hf_nmea0183_gbs_prob_miss;
299static int hf_nmea0183_gbs_sat_id;
300static int hf_nmea0183_gbs_sat_type;
301static int hf_nmea0183_gbs_std_dev;
302static int hf_nmea0183_gbs_utc;
303
304static int hf_nmea0183_gga_time;
305static int hf_nmea0183_gga_time_hour;
306static int hf_nmea0183_gga_time_minute;
307static int hf_nmea0183_gga_time_second;
308static int hf_nmea0183_gga_latitude;
309static int hf_nmea0183_gga_latitude_degree;
310static int hf_nmea0183_gga_latitude_minute;
311static int hf_nmea0183_gga_latitude_direction;
312static int hf_nmea0183_gga_longitude;
313static int hf_nmea0183_gga_longitude_degree;
314static int hf_nmea0183_gga_longitude_minute;
315static int hf_nmea0183_gga_longitude_direction;
316static int hf_nmea0183_gga_quality;
317static int hf_nmea0183_gga_number_satellites;
318static int hf_nmea0183_gga_horizontal_dilution;
319static int hf_nmea0183_gga_altitude;
320static int hf_nmea0183_gga_altitude_unit;
321static int hf_nmea0183_gga_geoidal_separation;
322static int hf_nmea0183_gga_geoidal_separation_unit;
323static int hf_nmea0183_gga_age_dgps;
324static int hf_nmea0183_gga_dgps_station;
325
326static int hf_nmea0183_glc_gri;
327static int hf_nmea0183_glc_master_toa;
328static int hf_nmea0183_glc_sig_status;
329static int hf_nmea0183_glc_td1;
330static int hf_nmea0183_glc_td2;
331static int hf_nmea0183_glc_td3;
332static int hf_nmea0183_glc_td4;
333static int hf_nmea0183_glc_td5;
334
335static int hf_nmea0183_gll_latitude;
336static int hf_nmea0183_gll_latitude_degree;
337static int hf_nmea0183_gll_latitude_minute;
338static int hf_nmea0183_gll_latitude_direction;
339static int hf_nmea0183_gll_longitude;
340static int hf_nmea0183_gll_longitude_degree;
341static int hf_nmea0183_gll_longitude_minute;
342static int hf_nmea0183_gll_longitude_direction;
343static int hf_nmea0183_gll_time;
344static int hf_nmea0183_gll_time_hour;
345static int hf_nmea0183_gll_time_minute;
346static int hf_nmea0183_gll_time_second;
347static int hf_nmea0183_gll_status;
348static int hf_nmea0183_gll_mode;
349
350static int hf_nmea0183_gmp_ant_alt;
351static int hf_nmea0183_gmp_data_age;
352static int hf_nmea0183_gmp_diff_ref_id;
353static int hf_nmea0183_gmp_geoid_sep;
354static int hf_nmea0183_gmp_hdop;
355static int hf_nmea0183_gmp_mode_glonass;
356static int hf_nmea0183_gmp_mode_gps;
357static int hf_nmea0183_gmp_mode_other;
358static int hf_nmea0183_gmp_mode_string;
359static int hf_nmea0183_gmp_projection;
360static int hf_nmea0183_gmp_tot_sats;
361static int hf_nmea0183_gmp_utc;
362static int hf_nmea0183_gmp_x_comp;
363static int hf_nmea0183_gmp_y_comp;
364static int hf_nmea0183_gmp_zone;
365
366static int hf_nmea0183_gns_ant_alt;
367static int hf_nmea0183_gns_data_age;
368static int hf_nmea0183_gns_diff_ref_id;
369static int hf_nmea0183_gns_geoid_sep;
370static int hf_nmea0183_gns_hdop;
371static int hf_nmea0183_gns_latitude;
372static int hf_nmea0183_gns_longitude;
373static int hf_nmea0183_gns_mode_glonass;
374static int hf_nmea0183_gns_mode_gps;
375static int hf_nmea0183_gns_mode_other;
376static int hf_nmea0183_gns_mode_string;
377static int hf_nmea0183_gns_tot_sats;
378static int hf_nmea0183_gns_utc;
379
380static int hf_nmea0183_grs_mode;
381static int hf_nmea0183_grs_range_resid;
382static int hf_nmea0183_grs_utc;
383
384static int hf_nmea0183_gsa_fix_mode;
385static int hf_nmea0183_gsa_hdop;
386static int hf_nmea0183_gsa_op_mode;
387static int hf_nmea0183_gsa_pdop;
388static int hf_nmea0183_gsa_sat_id;
389static int hf_nmea0183_gsa_sat_type;
390static int hf_nmea0183_gsa_vdop;
391
392static int hf_nmea0183_gst_time;
393static int hf_nmea0183_gst_time_hour;
394static int hf_nmea0183_gst_time_minute;
395static int hf_nmea0183_gst_time_second;
396static int hf_nmea0183_gst_rms_total_sd;
397static int hf_nmea0183_gst_ellipse_major_sd;
398static int hf_nmea0183_gst_ellipse_minor_sd;
399static int hf_nmea0183_gst_ellipse_orientation;
400static int hf_nmea0183_gst_latitude_sd;
401static int hf_nmea0183_gst_longitude_sd;
402static int hf_nmea0183_gst_altitude_sd;
403
404static int hf_nmea0183_gsv_azimuth;
405static int hf_nmea0183_gsv_elevation;
406static int hf_nmea0183_gsv_sat_id;
407static int hf_nmea0183_gsv_sat_type;
408static int hf_nmea0183_gsv_sats_in_view;
409static int hf_nmea0183_gsv_sentence_number;
410static int hf_nmea0183_gsv_snr;
411static int hf_nmea0183_gsv_total_sentences;
412
413static int hf_nmea0183_hbt_interval;
414static int hf_nmea0183_hbt_sent_id;
415static int hf_nmea0183_hbt_status;
416
417static int hf_nmea0183_hdg_mag_dev;
418static int hf_nmea0183_hdg_mag_sensor;
419static int hf_nmea0183_hdg_mag_var;
420
421static int hf_nmea0183_hmr_dev_s1;
422static int hf_nmea0183_hmr_dev_s2;
423static int hf_nmea0183_hmr_difflim_setting;
424static int hf_nmea0183_hmr_heading_s1;
425static int hf_nmea0183_hmr_heading_s2;
426static int hf_nmea0183_hmr_heading_sdiff;
427static int hf_nmea0183_hmr_hr_s1;
428static int hf_nmea0183_hmr_hr_s2;
429static int hf_nmea0183_hmr_s1_type;
430static int hf_nmea0183_hmr_s2_type;
431static int hf_nmea0183_hmr_status_s1;
432static int hf_nmea0183_hmr_status_s2;
433static int hf_nmea0183_hmr_variation;
434static int hf_nmea0183_hmr_warning_flag;
435
436static int hf_nmea0183_hms_heading_s1;
437static int hf_nmea0183_hms_heading_s2;
438static int hf_nmea0183_hms_max_diff;
439
440static int hf_nmea0183_hsc_heading_magnetic;
441static int hf_nmea0183_hsc_heading_true;
442
443static int hf_nmea0183_htc_cmd_offhead_lim;
444static int hf_nmea0183_htc_cmd_offtrack;
445static int hf_nmea0183_htc_cmd_radius;
446static int hf_nmea0183_htc_cmd_rate;
447static int hf_nmea0183_htc_cmd_rudder_angle;
448static int hf_nmea0183_htc_cmd_rudder_dir;
449static int hf_nmea0183_htc_cmd_rudder_lim;
450static int hf_nmea0183_htc_cmd_steer;
451static int hf_nmea0183_htc_cmd_track;
452static int hf_nmea0183_htc_heading_ref;
453static int hf_nmea0183_htc_override;
454static int hf_nmea0183_htc_steering_mode;
455static int hf_nmea0183_htc_turn_mode;
456
457static int hf_nmea0183_htd_cmd_offhead_lim;
458static int hf_nmea0183_htd_cmd_offtrack;
459static int hf_nmea0183_htd_cmd_radius;
460static int hf_nmea0183_htd_cmd_rate;
461static int hf_nmea0183_htd_cmd_rudder_angle;
462static int hf_nmea0183_htd_cmd_rudder_dir;
463static int hf_nmea0183_htd_cmd_rudder_lim;
464static int hf_nmea0183_htd_cmd_steer;
465static int hf_nmea0183_htd_cmd_track;
466static int hf_nmea0183_htd_heading_ref;
467static int hf_nmea0183_htd_offhdng_status;
468static int hf_nmea0183_htd_offtrack_status;
469static int hf_nmea0183_htd_override;
470static int hf_nmea0183_htd_rudder_status;
471static int hf_nmea0183_htd_steering_mode;
472static int hf_nmea0183_htd_turn_mode;
473static int hf_nmea0183_htd_vessel_heading;
474
475static int hf_nmea0183_lcd_gri;
476static int hf_nmea0183_lcd_master_ecd;
477static int hf_nmea0183_lcd_master_snr;
478static int hf_nmea0183_lcd_s1_ecd;
479static int hf_nmea0183_lcd_s1_snr;
480static int hf_nmea0183_lcd_s2_ecd;
481static int hf_nmea0183_lcd_s2_snr;
482static int hf_nmea0183_lcd_s3_ecd;
483static int hf_nmea0183_lcd_s3_snr;
484static int hf_nmea0183_lcd_s4_ecd;
485static int hf_nmea0183_lcd_s4_snr;
486static int hf_nmea0183_lcd_s5_ecd;
487static int hf_nmea0183_lcd_s5_snr;
488
489static int hf_nmea0183_loranc_blink_snr_warning;
490
491static int hf_nmea0183_lr1_callsign;
492static int hf_nmea0183_lr1_imo_num;
493static int hf_nmea0183_lr1_req_mmsi;
494static int hf_nmea0183_lr1_resp_mmsi;
495static int hf_nmea0183_lr1_seqnum;
496static int hf_nmea0183_lr1_shipname;
497
498static int hf_nmea0183_lr2_course_ground;
499static int hf_nmea0183_lr2_date;
500static int hf_nmea0183_lr2_latitude;
501static int hf_nmea0183_lr2_longitude;
502static int hf_nmea0183_lr2_resp_mmsi;
503static int hf_nmea0183_lr2_seqnum;
504static int hf_nmea0183_lr2_speed_ground;
505static int hf_nmea0183_lr2_utc;
506
507static int hf_nmea0183_lr3_destination;
508static int hf_nmea0183_lr3_draught;
509static int hf_nmea0183_lr3_eta_date;
510static int hf_nmea0183_lr3_eta_time;
511static int hf_nmea0183_lr3_persons;
512static int hf_nmea0183_lr3_resp_mmsi;
513static int hf_nmea0183_lr3_seqnum;
514static int hf_nmea0183_lr3_ship_breadth;
515static int hf_nmea0183_lr3_ship_cargo;
516static int hf_nmea0183_lr3_ship_length;
517static int hf_nmea0183_lr3_ship_type;
518
519static int hf_nmea0183_lrf_function_rep;
520static int hf_nmea0183_lrf_function_rep_val;
521static int hf_nmea0183_lrf_function_req;
522static int hf_nmea0183_lrf_function_req_val;
523static int hf_nmea0183_lrf_mmsi;
524static int hf_nmea0183_lrf_name;
525static int hf_nmea0183_lrf_seqnum;
526
527static int hf_nmea0183_lri_control;
528static int hf_nmea0183_lri_dest_mmsi;
529static int hf_nmea0183_lri_latitude_ne;
530static int hf_nmea0183_lri_latitude_sw;
531static int hf_nmea0183_lri_longitude_ne;
532static int hf_nmea0183_lri_longitude_sw;
533static int hf_nmea0183_lri_req_mmsi;
534static int hf_nmea0183_lri_seqnum;
535
536static int hf_nmea0183_mla_12lsb_corr_t_scale;
537static int hf_nmea0183_mla_16msb_corr_t_scale;
538static int hf_nmea0183_mla_calday_count;
539static int hf_nmea0183_mla_corr_circling;
540static int hf_nmea0183_mla_corr_incl_angle;
541static int hf_nmea0183_mla_eccentricity;
542static int hf_nmea0183_mla_long_asc_node;
543static int hf_nmea0183_mla_perigee;
544static int hf_nmea0183_mla_roc_circling;
545static int hf_nmea0183_mla_sat_health;
546static int hf_nmea0183_mla_sat_id;
547static int hf_nmea0183_mla_sentence_number;
548static int hf_nmea0183_mla_t_asc_node;
549static int hf_nmea0183_mla_t_scale_shift;
550static int hf_nmea0183_mla_total_sentences;
551
552static int hf_nmea0183_msk_am_bitrate;
553static int hf_nmea0183_msk_am_freq;
554static int hf_nmea0183_msk_beacon_bitrate;
555static int hf_nmea0183_msk_beacon_freq;
556static int hf_nmea0183_msk_channel;
557static int hf_nmea0183_msk_interval;
558
559static int hf_nmea0183_mss_beacon_bitrate;
560static int hf_nmea0183_mss_beacon_freq;
561static int hf_nmea0183_mss_channel;
562static int hf_nmea0183_mss_sig_str;
563static int hf_nmea0183_mss_snr;
564
565static int hf_nmea0183_mtw_temp;
566
567static int hf_nmea0183_mwd_direction_mag;
568static int hf_nmea0183_mwd_direction_true;
569static int hf_nmea0183_mwd_speed_knots;
570static int hf_nmea0183_mwd_speed_ms;
571
572static int hf_nmea0183_mwv_reference;
573static int hf_nmea0183_mwv_speed_units;
574static int hf_nmea0183_mwv_status;
575static int hf_nmea0183_mwv_wind_angle;
576static int hf_nmea0183_mwv_wind_speed;
577
578static int hf_nmea0183_osd_course_ref;
579static int hf_nmea0183_osd_course_true;
580static int hf_nmea0183_osd_drift;
581static int hf_nmea0183_osd_heading_status;
582static int hf_nmea0183_osd_heading_true;
583static int hf_nmea0183_osd_set_true;
584static int hf_nmea0183_osd_speed;
585static int hf_nmea0183_osd_speed_ref;
586static int hf_nmea0183_osd_speed_units;
587
588static int hf_nmea0183_rma_course;
589static int hf_nmea0183_rma_latitude;
590static int hf_nmea0183_rma_longitude;
591static int hf_nmea0183_rma_mag_var;
592static int hf_nmea0183_rma_mode;
593static int hf_nmea0183_rma_speed;
594static int hf_nmea0183_rma_status;
595static int hf_nmea0183_rma_time_diff_a;
596static int hf_nmea0183_rma_time_diff_b;
597
598static int hf_nmea0183_rmb_arrival_status;
599static int hf_nmea0183_rmb_bearing_dest;
600static int hf_nmea0183_rmb_data_status;
601static int hf_nmea0183_rmb_dest_id;
602static int hf_nmea0183_rmb_dest_velocity;
603static int hf_nmea0183_rmb_dest_wp_latitude;
604static int hf_nmea0183_rmb_dest_wp_longitude;
605static int hf_nmea0183_rmb_mode;
606static int hf_nmea0183_rmb_orig_id;
607static int hf_nmea0183_rmb_range_dest;
608static int hf_nmea0183_rmb_steer;
609static int hf_nmea0183_rmb_xte;
610
611static int hf_nmea0183_rmc_course;
612static int hf_nmea0183_rmc_date;
613static int hf_nmea0183_rmc_latitude;
614static int hf_nmea0183_rmc_longitude;
615static int hf_nmea0183_rmc_magnetic;
616static int hf_nmea0183_rmc_mode;
617static int hf_nmea0183_rmc_speed;
618static int hf_nmea0183_rmc_status;
619static int hf_nmea0183_rmc_utc;
620
621static int hf_nmea0183_rot_rate_of_turn;
622static int hf_nmea0183_rot_valid;
623
624static int hf_nmea0183_rpm_number;
625static int hf_nmea0183_rpm_pitch;
626static int hf_nmea0183_rpm_source;
627static int hf_nmea0183_rpm_speed;
628static int hf_nmea0183_rpm_status;
629
630static int hf_nmea0183_rsa_pt_sensor;
631static int hf_nmea0183_rsa_pt_status;
632static int hf_nmea0183_rsa_sb_sensor;
633static int hf_nmea0183_rsa_sb_status;
634
635static int hf_nmea0183_rsd_cursor_bearing;
636static int hf_nmea0183_rsd_cursor_range;
637static int hf_nmea0183_rsd_display;
638static int hf_nmea0183_rsd_ebl1;
639static int hf_nmea0183_rsd_ebl2;
640static int hf_nmea0183_rsd_orig2_range;
641static int hf_nmea0183_rsd_orig_bearing;
642static int hf_nmea0183_rsd_orig_range;
643static int hf_nmea0183_rsd_scale;
644static int hf_nmea0183_rsd_units;
645static int hf_nmea0183_rsd_vrm1;
646static int hf_nmea0183_rsd_vrm2;
647
648static int hf_nmea0183_rte_route;
649static int hf_nmea0183_rte_sentence_mode;
650static int hf_nmea0183_rte_sentence_number;
651static int hf_nmea0183_rte_total_sentences;
652static int hf_nmea0183_rte_waypoint;
653
654static int hf_nmea0183_sfi_frequency;
655static int hf_nmea0183_sfi_mode;
656static int hf_nmea0183_sfi_sentence_number;
657static int hf_nmea0183_sfi_total_sentences;
658
659static int hf_nmea0183_ssd_callsign;
660static int hf_nmea0183_ssd_dte_flag;
661static int hf_nmea0183_ssd_name;
662static int hf_nmea0183_ssd_ref_a;
663static int hf_nmea0183_ssd_ref_b;
664static int hf_nmea0183_ssd_ref_c;
665static int hf_nmea0183_ssd_ref_d;
666static int hf_nmea0183_ssd_source;
667
668static int hf_nmea0183_stn_talker;
669
670static int hf_nmea0183_tlb_label;
671static int hf_nmea0183_tlb_target;
672
673static int hf_nmea0183_tll_ref_tgt;
674static int hf_nmea0183_tll_tgt_latitude;
675static int hf_nmea0183_tll_tgt_longitude;
676static int hf_nmea0183_tll_tgt_name;
677static int hf_nmea0183_tll_utc;
678static int hf_nmea0183_tll_tgt_num;
679static int hf_nmea0183_tll_tgt_status;
680
681static int hf_nmea0183_ttm_acq_type;
682static int hf_nmea0183_ttm_bearing;
683static int hf_nmea0183_ttm_dist_pt_approach;
684static int hf_nmea0183_ttm_ref_tgt;
685static int hf_nmea0183_ttm_tgt_course;
686static int hf_nmea0183_ttm_tgt_dist;
687static int hf_nmea0183_ttm_tgt_name;
688static int hf_nmea0183_ttm_tgt_num;
689static int hf_nmea0183_ttm_tgt_speed;
690static int hf_nmea0183_ttm_tgt_status;
691static int hf_nmea0183_ttm_time_cpa;
692static int hf_nmea0183_ttm_units;
693static int hf_nmea0183_ttm_utc;
694
695static int hf_nmea0183_tut_sentence_num;
696static int hf_nmea0183_tut_seq_msg;
697static int hf_nmea0183_tut_src_id;
698static int hf_nmea0183_tut_text;
699static int hf_nmea0183_tut_total_sentences;
700static int hf_nmea0183_tut_trans_code;
701
702static int hf_nmea0183_txt_num;
703static int hf_nmea0183_txt_sent_num;
704static int hf_nmea0183_txt_id;
705static int hf_nmea0183_txt_msg;
706
707static int hf_nmea0183_vbw_water_speed_longitudinal;
708static int hf_nmea0183_vbw_water_speed_transverse;
709static int hf_nmea0183_vbw_water_speed_valid;
710static int hf_nmea0183_vbw_ground_speed_longitudinal;
711static int hf_nmea0183_vbw_ground_speed_transverse;
712static int hf_nmea0183_vbw_ground_speed_valid;
713static int hf_nmea0183_vbw_stern_water_speed;
714static int hf_nmea0183_vbw_stern_water_speed_valid;
715static int hf_nmea0183_vbw_stern_ground_speed;
716static int hf_nmea0183_vbw_stern_ground_speed_valid;
717
718static int hf_nmea0183_vdr_heading_magnetic;
719static int hf_nmea0183_vdr_heading_true;
720static int hf_nmea0183_vdr_speed;
721
722static int hf_nmea0183_vhw_true_heading;
723static int hf_nmea0183_vhw_true_heading_unit;
724static int hf_nmea0183_vhw_magnetic_heading;
725static int hf_nmea0183_vhw_magnetic_heading_unit;
726static int hf_nmea0183_vhw_water_speed_knot;
727static int hf_nmea0183_vhw_water_speed_knot_unit;
728static int hf_nmea0183_vhw_water_speed_kilometer;
729static int hf_nmea0183_vhw_water_speed_kilometer_unit;
730
731static int hf_nmea0183_vlw_cumulative_water;
732static int hf_nmea0183_vlw_cumulative_water_unit;
733static int hf_nmea0183_vlw_trip_water;
734static int hf_nmea0183_vlw_trip_water_unit;
735static int hf_nmea0183_vlw_cumulative_ground;
736static int hf_nmea0183_vlw_cumulative_ground_unit;
737static int hf_nmea0183_vlw_trip_ground;
738static int hf_nmea0183_vlw_trip_ground_unit;
739
740static int hf_nmea0183_vpw_speed_knots;
741static int hf_nmea0183_vpw_speed_ms;
742
743static int hf_nmea0183_vsd_app_flags;
744static int hf_nmea0183_vsd_day_arrival;
745static int hf_nmea0183_vsd_destination;
746static int hf_nmea0183_vsd_max_draught;
747static int hf_nmea0183_vsd_month_arrival;
748static int hf_nmea0183_vsd_nav_status;
749static int hf_nmea0183_vsd_persons;
750static int hf_nmea0183_vsd_ship_cargo;
751static int hf_nmea0183_vsd_utc_arrival;
752
753static int hf_nmea0183_vtg_true_course;
754static int hf_nmea0183_vtg_true_course_unit;
755static int hf_nmea0183_vtg_magnetic_course;
756static int hf_nmea0183_vtg_magnetic_course_unit;
757static int hf_nmea0183_vtg_ground_speed_knot;
758static int hf_nmea0183_vtg_ground_speed_knot_unit;
759static int hf_nmea0183_vtg_ground_speed_kilometer;
760static int hf_nmea0183_vtg_ground_speed_kilometer_unit;
761static int hf_nmea0183_vtg_mode;
762
763static int hf_nmea0183_wcv_mode;
764static int hf_nmea0183_wcv_velocity;
765static int hf_nmea0183_wcv_waypoint;
766
767static int hf_nmea0183_wnc_dist_km;
768static int hf_nmea0183_wnc_dist_nm;
769static int hf_nmea0183_wnc_from_id;
770static int hf_nmea0183_wnc_to_id;
771
772static int hf_nmea0183_wpl_latitude;
773static int hf_nmea0183_wpl_longitude;
774static int hf_nmea0183_wpl_waypoint;
775
776static int hf_nmea0183_xdr_data;
777static int hf_nmea0183_xdr_id;
778static int hf_nmea0183_xdr_type;
779static int hf_nmea0183_xdr_units;
780
781static int hf_nmea0183_xte_blinksnr_status;
782static int hf_nmea0183_xte_cycle_status;
783static int hf_nmea0183_xte_magnitude;
784static int hf_nmea0183_xte_direction;
785static int hf_nmea0183_xte_mode;
786
787static int hf_nmea0183_xtr_direction;
788static int hf_nmea0183_xtr_magnitude;
789
790static int hf_nmea0183_zda_time;
791static int hf_nmea0183_zda_time_hour;
792static int hf_nmea0183_zda_time_minute;
793static int hf_nmea0183_zda_time_second;
794static int hf_nmea0183_zda_date_day;
795static int hf_nmea0183_zda_date_month;
796static int hf_nmea0183_zda_date_year;
797static int hf_nmea0183_zda_local_zone_hour;
798static int hf_nmea0183_zda_local_zone_minute;
799
800static int hf_nmea0183_zdl_dist;
801static int hf_nmea0183_zdl_time;
802static int hf_nmea0183_zdl_type;
803
804static int hf_nmea0183_zfo_elapsed;
805static int hf_nmea0183_zfo_origin;
806static int hf_nmea0183_zfo_utc;
807
808static int hf_nmea0183_ztg_dest;
809static int hf_nmea0183_ztg_time_left;
810static int hf_nmea0183_ztg_utc;
811
812static int hf_nmea0183_sentence_prefix;
813static int hf_nmea0183_tag_block;
814static int hf_nmea0183_bin_version;
815static int hf_nmea0183_bin_srcid;
816static int hf_nmea0183_bin_dstid;
817static int hf_nmea0183_bin_mtype;
818static int hf_nmea0183_bin_blockid;
819static int hf_nmea0183_bin_seqnum;
820static int hf_nmea0183_bin_max_seqnum;
821static int hf_nmea0183_bin_data;
822static int hf_nmea0183_bin_file_descriptor;
823static int hf_nmea0183_bin_file_descriptor_len;
824static int hf_nmea0183_bin_file_length;
825static int hf_nmea0183_bin_stat_of_acquisition;
826static int hf_nmea0183_bin_device;
827static int hf_nmea0183_bin_channel;
828static int hf_nmea0183_bin_type_len;
829static int hf_nmea0183_bin_data_type;
830static int hf_nmea0183_bin_status_and_info;
831
832static int ett_nmea0183;
833static int ett_nmea0183_checksum;
834static int ett_nmea0183_sentence;
835static int ett_nmea0183_zda_time;
836static int ett_nmea0183_alr_time;
837static int ett_nmea0183_gga_time;
838static int ett_nmea0183_gga_latitude;
839static int ett_nmea0183_gga_longitude;
840static int ett_nmea0183_gll_time;
841static int ett_nmea0183_gll_latitude;
842static int ett_nmea0183_gll_longitude;
843static int ett_nmea0183_gst_time;
844static int ett_nmea0183_tag_block;
845static int ett_nmea0183_fd;
846static int ett_nmea0183_legacy_satellite_info;
847
848static expert_field ei_nmea0183_invalid_first_character;
849static expert_field ei_nmea0183_missing_checksum_character;
850static expert_field ei_nmea0183_invalid_end_of_line;
851static expert_field ei_nmea0183_checksum_incorrect;
852static expert_field ei_nmea0183_sentence_too_long;
853static expert_field ei_nmea0183_field_time_too_short;
854static expert_field ei_nmea0183_field_latitude_too_short;
855static expert_field ei_nmea0183_field_longitude_too_short;
856static expert_field ei_nmea0183_field_missing;
857static expert_field ei_nmea0183_field_uint_invalid;
858static expert_field ei_nmea0183_sat_prn_invalid;
859static expert_field ei_nmea0183_gga_altitude_unit_incorrect;
860static expert_field ei_nmea0183_gga_geoidal_separation_unit_incorrect;
861static expert_field ei_nmea0183_hdt_unit_incorrect;
862static expert_field ei_nmea0183_vhw_true_heading_unit_incorrect;
863static expert_field ei_nmea0183_vhw_magnetic_heading_unit_incorrect;
864static expert_field ei_nmea0183_vhw_water_speed_knot_unit_incorrect;
865static expert_field ei_nmea0183_vhw_water_speed_kilometer_unit_incorrect;
866static expert_field ei_nmea0183_vlw_cumulative_water_unit_incorrect;
867static expert_field ei_nmea0183_vlw_trip_water_unit_incorrect;
868static expert_field ei_nmea0183_vlw_cumulative_ground_unit_incorrect;
869static expert_field ei_nmea0183_vlw_trip_ground_unit_incorrect;
870static expert_field ei_nmea0183_vtg_true_course_unit_incorrect;
871static expert_field ei_nmea0183_vtg_magnetic_course_unit_incorrect;
872static expert_field ei_nmea0183_vtg_ground_speed_knot_unit_incorrect;
873static expert_field ei_nmea0183_vtg_ground_speed_kilometer_unit_incorrect;
874static expert_field ei_nmea0183_legacy_nonstandard;
875static expert_field ei_nmea0183_legacy_empty_response;
876
877static int proto_nmea0183;
878static int proto_nmea0183_bin;
879
880static 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)
883static 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)
1003static 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 */
1238static 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)
1859static 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)
1872static 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)
1878static 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
1892static 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
1900static const value_string abk_channel[] = {
1901 {'A', "Channel A"},
1902 {'B', "Channel B"},
1903 {0, NULL((void*)0)}};
1904
1905static 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
1910static const value_string aca_in_use[] = {
1911 {'0', "Not in use"},
1912 {'1', "In use"},
1913 {0, NULL((void*)0)}};
1914
1915static 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
1923static const value_string aca_power[] = {
1924 {'0', "High Power"},
1925 {'1', "Low Power"},
1926 {0, NULL((void*)0)}};
1927
1928static 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
1937static 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
1945static 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
1954static const value_string arrival_circle_status[] = {
1955 {'A', "Arrival circle entered"},
1956 {'V', "Arrival circle not entered"},
1957 {0, NULL((void*)0)}};
1958
1959static const value_string auto_manual_vals[] = {
1960 {'M', "Manual"},
1961 {'A', "Automatic"},
1962 {0, NULL((void*)0)}};
1963
1964static 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
1969static 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
1977static const value_string data_status[] = {
1978 {'A', "Data valid"},
1979 {'V', "Data not valid"},
1980 {0, NULL((void*)0)}};
1981
1982static 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
1991static 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
1997static 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
2004static const value_string direction_reference[] = {
2005 {'T', "True"},
2006 {'R', "Relative"},
2007 {0, NULL((void*)0)}};
2008
2009static 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
2015static const value_string dma_setup_vals[] = {
2016 {'0', "FATDMA"},
2017 {'1', "RATDMA"},
2018 {'2', "CSTDMA"},
2019 {0, NULL((void*)0)}};
2020
2021static 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
2029static 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
2037static 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
2043static 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
2049static const value_string dse_flag_vals[] = {
2050 {'Q', "Query"},
2051 {'R', "Reply"},
2052 {'A', "Automatic"},
2053 {0, NULL((void*)0)}};
2054
2055static 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
2060static const value_string equipment_status_vals[] = {
2061 {'A', "Normal operation"},
2062 {'V', "Not normal operation"},
2063 {0, NULL((void*)0)}};
2064
2065static const value_string etl_message_type_vals[] = {
2066 {'O', "Order"},
2067 {'A', "Answer-back"},
2068 {0, NULL((void*)0)}};
2069
2070static 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
2084static const value_string fsi_power_vals[] = {
2085 {'0', "Standby"},
2086 {'1', "Lowest"},
2087 {'9', "Highest"},
2088 {0, NULL((void*)0)}};
2089
2090static 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
2097static 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
2102static const value_string gsa_fix_mode[] = {
2103 {'1', "Fix not available"},
2104 {'2', "2D"},
2105 {'3', "3D"},
2106 {0, NULL((void*)0)}};
2107
2108static 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
2113static const value_string heading_monitor_sensor_type[] = {
2114 {'T', "True"},
2115 {'M', "Magnetic"},
2116 {0, NULL((void*)0)}};
2117
2118static const value_string heading_monitor_sensor_vals[] = {
2119 {'A', "Data valid"},
2120 {'V', "Data not valid"},
2121 {0, NULL((void*)0)}};
2122
2123static const value_string heading_reference[] = {
2124 {'T', "True"},
2125 {'M', "Magnetic"},
2126 {0, NULL((void*)0)}};
2127
2128static 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
2142static 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
2148static 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
2153static 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
2158static 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
2164static 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
2177static 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
2186static 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 */
2192static 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
2211static const value_string navigation_data_status[] = {
2212 {'A', "Data valid"},
2213 {'V', "Navigation receiver warning"},
2214 {0, NULL((void*)0)}};
2215
2216static 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
2225static const value_string override_vals[] = {
2226 {'A', "In use"},
2227 {'V', "Not in use"},
2228 {0, NULL((void*)0)}};
2229
2230static const value_string perpendicular_pass_status[] = {
2231 {'A', "Perpendicular passed at waypoint"},
2232 {'V', "Perpendicular not passed"},
2233 {0, NULL((void*)0)}};
2234
2235static 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
2242static const value_string r_oh_ot_status[] = {
2243 {'A', "Within limits"},
2244 {'V', "Limit reached or exceeded"},
2245 {0, NULL((void*)0)}};
2246
2247static const value_string ref_target_vals[] = {
2248 {'R', "Target is a reference to determine own-ship position/velocity"},
2249 {0, NULL((void*)0)}};
2250
2251static const value_string revolutions_number_vals[] = {
2252 {'0', "Single or on centerline"},
2253 {'1', "Starboard"},
2254 {'2', "Port"},
2255 {0, NULL((void*)0)}};
2256
2257static const value_string revolutions_source_vals[] = {
2258 {'S', "Shaft"},
2259 {'E', "Engine"},
2260 {0, NULL((void*)0)}};
2261
2262static const value_string rma_data_status[] = {
2263 {'A', "Data valid"},
2264 {'V', "Blink, Cycle, or SNR warning"},
2265 {0, NULL((void*)0)}};
2266
2267static const value_string rudder_dir_vals[] = {
2268 {'L', "Port"},
2269 {'R', "Starboard"},
2270 {0, NULL((void*)0)}};
2271
2272static 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
2280static 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
2292static 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
2297static 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
2302static 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
2317static const value_string speed_reference[] = {
2318 {'B', "Bottom track"},
2319 {'W', "Water track"},
2320 {'P', "Positioning System"},
2321 {0, NULL((void*)0)}};
2322
2323static 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
2330static const value_string steer_direction[] = {
2331 {'L', "Left"},
2332 {'R', "Right"},
2333 {0, NULL((void*)0)}};
2334
2335static 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 */
2344static 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 */
2395static 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
2416static const value_string target_acq_vals[] = {
2417 {'A', "Auto"},
2418 {'M', "Manual"},
2419 {'R', "Reported"},
2420 {0, NULL((void*)0)}};
2421
2422static 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
2428static 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
2446static 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
2461static 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
2467static const value_string warning_flag_vals[] = {
2468 {'A', "Difference within set limit"},
2469 {'V', "Difference exceeds set limit"},
2470 {0, NULL((void*)0)}};
2471
2472static 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
2477static 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
2484static 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
2494static char *
2495decode_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
2507static char *
2508decode_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
2532static bool_Bool
2533decode_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
2553static char *
2554field_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 **/
2565static unsigned
2566tvb_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 */
2582static proto_item *
2583proto_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 **/
2596static int
2597dissect_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 */
2642static int
2643dissect_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 **/
2673static int
2674dissect_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 **/
2706static int
2707dissect_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 **/
2756static int
2757dissect_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 */
2804static int
2805dissect_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 */
2834static int
2835dissect_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 */
2862static int
2863dissect_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 */
2889static int
2890dissect_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*/
2919static const string_string alarm_condition_str[] = {
2920 {"A", "Threshold exceeded"},
2921 {"V", "Threshold not exceeded"},
2922 { NULL((void*)0), NULL((void*)0)},
2923};
2924
2925static const string_string alarm_ack_state_str[] = {
2926 {"A", "Acknowledged"},
2927 {"V", "Unacknowledged"},
2928 { NULL((void*)0), NULL((void*)0)},
2929};
2930
2931static int
2932dissect_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. */
2956static int
2957dissect_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. */
2974static int
2975dissect_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. */
3018static int
3019dissect_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. */
3046static int
3047dissect_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. */
3072static int
3073dissect_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. */
3089static int
3090dissect_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 */
3105static int
3106dissect_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. */
3127static int
3128dissect_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. */
3159static int
3160dissect_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. */
3185static int
3186dissect_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. */
3217static int
3218dissect_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. */
3251static int
3252dissect_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. */
3277static int
3278dissect_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. */
3296static int
3297dissect_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. */
3309static const char *
3310nmea0183_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. */
3323static int
3324dissect_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. */
3353static int
3354dissect_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. */
3393static int
3394dissect_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. */
3411static int
3412dissect_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. */
3429static int
3430dissect_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. */
3455static int
3456dissect_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. */
3478static int
3479dissect_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. */
3515static proto_item *
3516dissect_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
3538static int
3539dissect_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
3563static int
3564dissect_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
3588static int
3589dissect_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
3644static int
3645dissect_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
3657static int
3658dissect_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
3686static int
3687dissect_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
3720static int
3721dissect_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
3797static int
3798dissect_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
3836static int
3837dissect_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
3893static int
3894dissect_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
3953static int
3954dissect_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
3988static int
3989dissect_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
4012static int
4013dissect_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
4050static int
4051dissect_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
4088static int
4089dissect_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
4112static int
4113dissect_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
4161static int
4162dissect_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
4204static int
4205dissect_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
4224static int
4225dissect_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
4279static int
4280dissect_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
4301static int
4302dissect_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
4364static int
4365dissect_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
4428static int
4429dissect_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
4457static int
4458dissect_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
4496static int
4497dissect_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
4526static int
4527dissect_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
4582static int
4583dissect_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
4611static int
4612dissect_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
4633static int
4634dissect_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
4714static int
4715dissect_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
4753static int
4754dissect_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
4833static int
4834dissect_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
4957static int
4958dissect_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
4981static int
4982dissect_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
5029static int
5030dissect_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
5091static int
5092dissect_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
5123static int
5124dissect_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
5143static int
5144dissect_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
5197static int
5198dissect_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
5216static int
5217dissect_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
5233static int
5234dissect_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
5282static int
5283dissect_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
5343static int
5344dissect_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
5392static int
5393dissect_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
5440static int
5441dissect_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
5476static int
5477dissect_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
5505static int
5506dissect_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
5541static int
5542dissect_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
5605static int
5606dissect_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
5664static int
5665dissect_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
5692static int
5693dissect_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
5717static int
5718dissect_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
5731static int
5732dissect_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
5756static int
5757dissect_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
5781static int
5782dissect_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
5818static int
5819dissect_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
5857static int
5858dissect_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
5904static int
5905dissect_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
5993static int
5994dissect_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
6018static int
6019dissect_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
6040static int
6041dissect_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
6085static int
6086dissect_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
6115static int
6116dissect_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
6146static int
6147dissect_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
6182static int
6183dissect_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
6195static int
6196dissect_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
6220static int
6221dissect_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
6252static int
6253dissect_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
6304static int
6305dissect_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
6332static int
6333dissect_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
6353static int
6354dissect_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
6372static int
6373dissect_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
6413static int
6414dissect_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
6433static int
6434dissect_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
6457static int
6458dissect_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
6477static int
6478dissect_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
6505static int
6506dissect_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
6530static int
6531dissect_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
6546static int
6547dissect_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
6566static int
6567dissect_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
6586static int
6587dissect_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. */
6607static int
6608dissect_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/* Signature shared by sentence-specific payload dissectors. */
6631typedef int (*nmea0183_sentence_dissector_t)(tvbuff_t *tvb,
6632 packet_info *pinfo,
6633 proto_tree *tree);
6634/* A normalized 24-bit ASCII sentence ID and its payload dissector. */
6635typedef struct {
6636 uint32_t id;
6637 nmea0183_sentence_dissector_t dissect;
6638} nmea0183_sentence_decoder_t;
6639
6640/* Static dispatch table, sorted by 24-bit ASCII ID for binary search in dissect_nmea0183_msg. */
6641static const nmea0183_sentence_decoder_t nmea0183_sentence_decoders[] = {
6642 { 0x41414D, dissect_nmea0183_sentence_aam }, /* AAM */
6643 { 0x41424B, dissect_nmea0183_sentence_abk }, /* ABK */
6644 { 0x414341, dissect_nmea0183_sentence_aca }, /* ACA */
6645 { 0x41434B, dissect_nmea0183_sentence_ack }, /* ACK */
6646 { 0x414353, dissect_nmea0183_sentence_acs }, /* ACS */
6647 { 0x414952, dissect_nmea0183_sentence_air }, /* AIR */
6648 { 0x414B44, dissect_nmea0183_sentence_akd }, /* AKD */
6649 { 0x414C41, dissect_nmea0183_sentence_ala }, /* ALA */
6650 { 0x414C4D, dissect_nmea0183_sentence_alm }, /* ALM */
6651 { 0x414C52, dissect_nmea0183_sentence_alr }, /* ALR */
6652 { 0x415042, dissect_nmea0183_sentence_apb }, /* APB */
6653 { 0x424543, dissect_nmea0183_sentence_bec }, /* BEC */
6654 { 0x424F44, dissect_nmea0183_sentence_bod }, /* BOD */
6655 { 0x425743, dissect_nmea0183_sentence_bwc }, /* BWC */
6656 { 0x425752, dissect_nmea0183_sentence_bwr }, /* BWR */
6657 { 0x425757, dissect_nmea0183_sentence_bww }, /* BWW */
6658 { 0x434252, dissect_nmea0183_sentence_cbr }, /* CBR */
6659 { 0x435552, dissect_nmea0183_sentence_cur }, /* CUR */
6660 { 0x444254, dissect_nmea0183_sentence_dbt }, /* DBT */
6661 { 0x44434E, dissect_nmea0183_sentence_dcn }, /* DCN */
6662 { 0x444443, dissect_nmea0183_sentence_ddc }, /* DDC */
6663 { 0x444F52, dissect_nmea0183_sentence_dor }, /* DOR */
6664 { 0x445054, dissect_nmea0183_sentence_dpt }, /* DPT */
6665 { 0x445343, dissect_nmea0183_sentence_dsc }, /* DSC */
6666 { 0x445345, dissect_nmea0183_sentence_dse }, /* DSE */
6667 { 0x445349, dissect_nmea0183_sentence_dsi }, /* DSI */
6668 { 0x445352, dissect_nmea0183_sentence_dsr }, /* DSR */
6669 { 0x44544D, dissect_nmea0183_sentence_dtm }, /* DTM */
6670 { 0x45544C, dissect_nmea0183_sentence_etl }, /* ETL */
6671 { 0x465349, dissect_nmea0183_sentence_fsi }, /* FSI */
6672 { 0x474253, dissect_nmea0183_sentence_gbs }, /* GBS */
6673 { 0x474741, dissect_nmea0183_sentence_gga }, /* GGA */
6674 { 0x474C43, dissect_nmea0183_sentence_glc }, /* GLC */
6675 { 0x474C4C, dissect_nmea0183_sentence_gll }, /* GLL */
6676 { 0x474D50, dissect_nmea0183_sentence_gmp }, /* GMP */
6677 { 0x474E53, dissect_nmea0183_sentence_gns }, /* GNS */
6678 { 0x475253, dissect_nmea0183_sentence_grs }, /* GRS */
6679 { 0x475341, dissect_nmea0183_sentence_gsa }, /* GSA */
6680 { 0x475354, dissect_nmea0183_sentence_gst }, /* GST */
6681 { 0x475356, dissect_nmea0183_sentence_gsv }, /* GSV */
6682 { 0x484254, dissect_nmea0183_sentence_hbt }, /* HBT */
6683 { 0x484447, dissect_nmea0183_sentence_hdg }, /* HDG */
6684 { 0x484454, dissect_nmea0183_sentence_hdt }, /* HDT */
6685 { 0x484D52, dissect_nmea0183_sentence_hmr }, /* HMR */
6686 { 0x484D53, dissect_nmea0183_sentence_hms }, /* HMS */
6687 { 0x485343, dissect_nmea0183_sentence_hsc }, /* HSC */
6688 { 0x485443, dissect_nmea0183_sentence_htc }, /* HTC */
6689 { 0x485444, dissect_nmea0183_sentence_htd }, /* HTD */
6690 { 0x4C4344, dissect_nmea0183_sentence_lcd }, /* LCD */
6691 { 0x4C5231, dissect_nmea0183_sentence_lr1 }, /* LR1 */
6692 { 0x4C5232, dissect_nmea0183_sentence_lr2 }, /* LR2 */
6693 { 0x4C5233, dissect_nmea0183_sentence_lr3 }, /* LR3 */
6694 { 0x4C5246, dissect_nmea0183_sentence_lrf }, /* LRF */
6695 { 0x4C5249, dissect_nmea0183_sentence_lri }, /* LRI */
6696 { 0x4D4C41, dissect_nmea0183_sentence_mla }, /* MLA */
6697 { 0x4D534B, dissect_nmea0183_sentence_msk }, /* MSK */
6698 { 0x4D5353, dissect_nmea0183_sentence_mss }, /* MSS */
6699 { 0x4D5457, dissect_nmea0183_sentence_mtw }, /* MTW */
6700 { 0x4D5744, dissect_nmea0183_sentence_mwd }, /* MWD */
6701 { 0x4D5756, dissect_nmea0183_sentence_mwv }, /* MWV */
6702 { 0x4F5344, dissect_nmea0183_sentence_osd }, /* OSD */
6703 { 0x524D41, dissect_nmea0183_sentence_rma }, /* RMA */
6704 { 0x524D42, dissect_nmea0183_sentence_rmb }, /* RMB */
6705 { 0x524D43, dissect_nmea0183_sentence_rmc }, /* RMC */
6706 { 0x524F54, dissect_nmea0183_sentence_rot }, /* ROT */
6707 { 0x52504D, dissect_nmea0183_sentence_rpm }, /* RPM */
6708 { 0x525341, dissect_nmea0183_sentence_rsa }, /* RSA */
6709 { 0x525344, dissect_nmea0183_sentence_rsd }, /* RSD */
6710 { 0x525445, dissect_nmea0183_sentence_rte }, /* RTE */
6711 { 0x534649, dissect_nmea0183_sentence_sfi }, /* SFI */
6712 { 0x535344, dissect_nmea0183_sentence_ssd }, /* SSD */
6713 { 0x53544E, dissect_nmea0183_sentence_stn }, /* STN */
6714 { 0x544C42, dissect_nmea0183_sentence_tlb }, /* TLB */
6715 { 0x544C4C, dissect_nmea0183_sentence_tll }, /* TLL */
6716 { 0x54544D, dissect_nmea0183_sentence_ttm }, /* TTM */
6717 { 0x545554, dissect_nmea0183_sentence_tut }, /* TUT */
6718 { 0x545854, dissect_nmea0183_sentence_txt }, /* TXT */
6719 { 0x564257, dissect_nmea0183_sentence_vbw }, /* VBW */
6720 { 0x564452, dissect_nmea0183_sentence_vdr }, /* VDR */
6721 { 0x564857, dissect_nmea0183_sentence_vhw }, /* VHW */
6722 { 0x564C57, dissect_nmea0183_sentence_vlw }, /* VLW */
6723 { 0x565057, dissect_nmea0183_sentence_vpw }, /* VPW */
6724 { 0x565344, dissect_nmea0183_sentence_vsd }, /* VSD */
6725 { 0x565447, dissect_nmea0183_sentence_vtg }, /* VTG */
6726 { 0x574356, dissect_nmea0183_sentence_wcv }, /* WCV */
6727 { 0x574E43, dissect_nmea0183_sentence_wnc }, /* WNC */
6728 { 0x57504C, dissect_nmea0183_sentence_wpl }, /* WPL */
6729 { 0x584452, dissect_nmea0183_sentence_xdr }, /* XDR */
6730 { 0x585445, dissect_nmea0183_sentence_xte }, /* XTE */
6731 { 0x585452, dissect_nmea0183_sentence_xtr }, /* XTR */
6732 { 0x5A4441, dissect_nmea0183_sentence_zda }, /* ZDA */
6733 { 0x5A444C, dissect_nmea0183_sentence_zdl }, /* ZDL */
6734 { 0x5A464F, dissect_nmea0183_sentence_zfo }, /* ZFO */
6735 { 0x5A5447, dissect_nmea0183_sentence_ztg }, /* ZTG */
6736};
6737
6738static int
6739compare_nmea0183_sentence_decoder(const void *key, const void *element)
6740{
6741 uint32_t sentence_key = *(const uint32_t *)key;
6742 const nmea0183_sentence_decoder_t *decoder = element;
6743
6744 return (sentence_key > decoder->id) - (sentence_key < decoder->id);
6745}
6746
6747/* <tag block 1>,<tagblock2>, … <tagblock n>*<tagblocks CS> */
6748//static void
6749//dissect_nmea0183_tag_block(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
6750//{
6751// unsigned offset = 0, chk_sum_off, comma_off;
6752//
6753// if (!tvb_find_uint8_remaining(tvb, offset, '*', &chk_sum_off)) {
6754// /* No checksum ??*/
6755// return;
6756// }
6757// while (offset < chk_sum_off) {
6758// if (!tvb_find_uint8_remaining(tvb, offset, ',', &comma_off)) {
6759//
6760// }
6761//
6762// }
6763//
6764//}
6765static unsigned
6766dissect_nmea0183_tag_blocks(tvbuff_t* tvb, packet_info* pinfo _U___attribute__((unused)), proto_tree* tree, unsigned offset) {
6767
6768 unsigned start_offset;
6769 unsigned end_offset;
6770
6771 while (tvb_get_uint8(tvb, offset) == '\\') {
6772 start_offset = offset;
6773 offset++;
6774 if (!tvb_find_uint8_remaining(tvb, offset, '\\', &end_offset)) {
6775 // Add expert info
6776 return tvb_captured_length(tvb);
6777 }
6778 proto_tree_add_item(tree, hf_nmea0183_tag_block, tvb, start_offset, (end_offset - start_offset) + 1, ENC_ASCII0x00000000);
6779 //proto_tree* tree = proto_item_add_subtree(ti, ett_nmea0183_tag_block);
6780 offset = end_offset + 1;
6781 }
6782 return offset;
6783}
6784
6785static int
6786dissect_nmea0183_msg(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
6787{
6788 proto_item* ti;
6789 unsigned offset = 0,start_offset;
6790 unsigned start_checksum_offset = 0;
6791 const char* talker_id = NULL((void*)0);
6792 const char* sentence_id = NULL((void*)0);
6793 const char* checksum = NULL((void*)0);
6794 uint32_t sentence_key;
6795 uint8_t start_delimiter;
6796
6797 /* Start delimiter */
6798 start_delimiter = tvb_get_uint8(tvb, offset);
6799 if ((start_delimiter != '$') && (start_delimiter != '!'))
6800 {
6801 expert_add_info(pinfo, tree, &ei_nmea0183_invalid_first_character);
6802 }
6803
6804 offset += 1;
6805 start_offset = offset;
6806 /* Talker id */
6807 ti = proto_tree_add_item_ret_string(tree, hf_nmea0183_talker_id,
6808 tvb, offset, 2, ENC_ASCII0x00000000,
6809 pinfo->pool, (const uint8_t**)&talker_id);
6810
6811 proto_item_append_text(ti, " (%s)", str_to_str_wmem(pinfo->pool, talker_id, known_talker_ids, "Unknown talker ID"));
6812
6813 col_append_fstr(pinfo->cinfo, COL_INFO, "Talker %s", str_to_str_wmem(pinfo->pool, talker_id, known_talker_ids, "Unknown talker ID"));
6814
6815 offset += 2;
6816
6817 /* Sentence id */
6818 ti = proto_tree_add_item_ret_string(tree, hf_nmea0183_sentence_id,
6819 tvb, offset, 3, ENC_ASCII0x00000000,
6820 pinfo->pool, (const uint8_t**)&sentence_id);
6821 sentence_key = ((uint32_t)g_ascii_toupper((uint8_t)sentence_id[0]) << 16) |
6822 ((uint32_t)g_ascii_toupper((uint8_t)sentence_id[1]) << 8) |
6823 (uint32_t)g_ascii_toupper((uint8_t)sentence_id[2]);
6824
6825 proto_item_append_text(ti, " (%s)", str_to_str_wmem(pinfo->pool, sentence_id, known_sentence_ids, "Unknown sentence ID"));
6826
6827 col_append_fstr(pinfo->cinfo, COL_INFO, ", Sentence %s", str_to_str_wmem(pinfo->pool, sentence_id, known_sentence_ids, "Unknown sentence ID"));
6828
6829 offset += 3;
6830
6831 /* Start of checksum */
6832 if (!tvb_find_uint8_remaining(tvb, offset, '*', &start_checksum_offset))
6833 {
6834 expert_add_info(pinfo, tree, &ei_nmea0183_missing_checksum_character);
6835 return tvb_captured_length(tvb);
6836 }
6837
6838 /* Data */
6839 offset += 1;
6840 tvbuff_t *data_tvb = tvb_new_subset_length(tvb, offset, start_checksum_offset - offset);
6841 const nmea0183_sentence_decoder_t *decoder = bsearch(&sentence_key,
6842 nmea0183_sentence_decoders, G_N_ELEMENTS(nmea0183_sentence_decoders)(sizeof (nmea0183_sentence_decoders) / sizeof ((nmea0183_sentence_decoders
)[0]))
,
6843 sizeof nmea0183_sentence_decoders[0], compare_nmea0183_sentence_decoder);
6844 offset += (decoder ? decoder->dissect : dissect_nmea0183_sentence_unknown)(data_tvb, pinfo, tree);
6845
6846 /* Checksum */
6847 offset += 1;
6848 ti = proto_tree_add_item_ret_string(tree, hf_nmea0183_checksum,
6849 tvb, offset, 2, ENC_ASCII0x00000000,
6850 pinfo->pool, (const uint8_t**)&checksum);
6851
6852 uint8_t received_checksum = (uint8_t)strtol(checksum, NULL((void*)0), 16);
6853 uint8_t calculated_checksum;
6854
6855 //calculated_checksum = calculate_checksum(tvb, 1, offset - 2);
6856 calculated_checksum = calculate_checksum(tvb, start_offset, (offset - start_offset-1));
6857
6858 if (received_checksum == calculated_checksum)
6859 {
6860 proto_item_append_text(ti, " [correct]");
6861 }
6862 else
6863 {
6864 proto_item_append_text(ti, " [INCORRECT]");
6865 expert_add_info(pinfo, ti, &ei_nmea0183_checksum_incorrect);
6866 }
6867
6868 // Calculated checksum highlights 2 bytes, which is the ascii hex value of a 1 byte checksum
6869 proto_item *checksum_tree = proto_item_add_subtree(ti, ett_nmea0183_checksum);
6870 ti = proto_tree_add_uint(checksum_tree, hf_nmea0183_checksum_calculated,
6871 tvb, offset, 2, calculated_checksum);
6872
6873 proto_item_set_generated(ti);
6874
6875 offset += 2;
6876
6877 /* End of line */
6878 if (tvb_captured_length_remaining(tvb, offset) < 2 ||
6879 tvb_get_uint8(tvb, offset) != '\r' ||
6880 tvb_get_uint8(tvb, offset + 1) != '\n')
6881 {
6882 expert_add_info(pinfo, tree, &ei_nmea0183_invalid_end_of_line);
6883 }
6884 offset += 2;
6885
6886 /* Check sentence length */
6887 if (offset > 82)
6888 {
6889 expert_add_info(pinfo, tree, &ei_nmea0183_sentence_too_long);
6890 }
6891
6892 return tvb_captured_length(tvb);
6893}
6894
6895static const value_string nmea0183_bin_mtype_vals[] = {
6896 { 1, "Data"},
6897 { 2, "Query"},
6898 { 3, "Ack"},
6899 { 0, NULL((void*)0) },
6900};
6901
6902static int
6903dissect_nmea0183_bin(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data _U___attribute__((unused)))
6904{
6905 proto_item* ti;
6906 proto_tree* nmea0183_tree, *fd_tree;
6907 uint32_t mtype, seqnum, file_descriptor_len, type_len;
6908
6909 unsigned offset = 0;
6910
6911 col_set_str(pinfo->cinfo, COL_PROTOCOL, "NMEA 0183 Binary");
6912 /* Clear the info column */
6913 col_clear(pinfo->cinfo, COL_INFO);
6914
6915 ti = proto_tree_add_item(tree, proto_nmea0183_bin, tvb, 0, -1, ENC_NA0x00000000);
6916 nmea0183_tree = proto_item_add_subtree(ti, ett_nmea0183);
6917
6918 proto_tree_add_item(nmea0183_tree, hf_nmea0183_sentence_prefix, tvb, offset, 6, ENC_ASCII0x00000000);
6919 offset += 6;
6920 proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_version, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6921 offset+=2;
6922 proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_srcid, tvb, offset, 6, ENC_ASCII0x00000000);
6923 offset += 6;
6924 proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_dstid, tvb, offset, 6, ENC_ASCII0x00000000);
6925 offset += 6;
6926 proto_tree_add_item_ret_uint(nmea0183_tree, hf_nmea0183_bin_mtype, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &mtype);
6927 offset += 2;
6928 proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_blockid, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6929 offset += 4;
6930 proto_tree_add_item_ret_uint(nmea0183_tree, hf_nmea0183_bin_seqnum, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &seqnum);
6931 offset += 4;
6932 proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_max_seqnum, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6933 offset += 4;
6934 if (offset < tvb_reported_length(tvb)) {
6935 if ((mtype == 1) && (seqnum == 1)) {
6936 /* binary file descriptor*/
6937 ti = proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_file_descriptor, tvb, offset, -1, ENC_ASCII0x00000000);
6938 fd_tree = proto_item_add_subtree(ti, ett_nmea0183_fd);
6939 proto_tree_add_item_ret_uint(fd_tree, hf_nmea0183_bin_file_descriptor_len, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &file_descriptor_len);
6940 proto_item_set_len(ti, file_descriptor_len);
6941 offset += 4;
6942 proto_tree_add_item(fd_tree, hf_nmea0183_bin_file_length, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6943 offset += 4;
6944 proto_tree_add_item(fd_tree, hf_nmea0183_bin_stat_of_acquisition, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
6945 offset += 2;
6946 proto_tree_add_item(fd_tree, hf_nmea0183_bin_device, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6947 offset++;
6948 proto_tree_add_item(fd_tree, hf_nmea0183_bin_channel, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6949 offset++;
6950 proto_tree_add_item_ret_uint(fd_tree, hf_nmea0183_bin_type_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &type_len);
6951 offset++;
6952 proto_tree_add_item(fd_tree, hf_nmea0183_bin_data_type, tvb, offset, type_len, ENC_ASCII0x00000000);
6953 offset += type_len;
6954 proto_tree_add_item(fd_tree, hf_nmea0183_bin_status_and_info, tvb, offset, file_descriptor_len - type_len - 13, ENC_ASCII0x00000000);
6955 offset += file_descriptor_len - type_len - 13;
6956 }
6957 proto_tree_add_item(nmea0183_tree, hf_nmea0183_bin_data, tvb, offset, -1, ENC_NA0x00000000);
6958 }
6959
6960
6961 return tvb_reported_length(tvb);
6962}
6963
6964static int
6965dissect_nmea0183(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data)
6966{
6967 proto_item* ti;
6968 proto_tree* nmea0183_tree = NULL((void*)0);
6969 unsigned offset = 0;
6970 unsigned end_offset;
6971 bool_Bool first_msg = true1;
6972
6973 col_set_str(pinfo->cinfo, COL_PROTOCOL, "NMEA 0183");
6974 /* Clear the info column */
6975 col_clear(pinfo->cinfo, COL_INFO);
6976
6977 /* Find end of nmea message */
6978 if (tvb_find_uint16_remaining(tvb, 0, NMEA0183_CRLF0x0d0a, &end_offset)) {
6979 /* Add CRLF */
6980 end_offset += 2;
6981 } else {
6982 end_offset = tvb_reported_length(tvb);
6983 }
6984
6985 /* UdPbC\<tag block 1>,<tagblock2>, … <tagblock n>*<tagblocks CS>\<NMEA message>*/
6986 if (tvb_strneql(tvb, 0, UDPBC"UdPbC", strlen(UDPBC"UdPbC")) == 0) {
6987 if (first_msg == true1) {
6988 ti = proto_tree_add_item(tree, proto_nmea0183, tvb, 0, end_offset, ENC_NA0x00000000);
6989 nmea0183_tree = proto_item_add_subtree(ti, ett_nmea0183);
6990 }
6991 proto_tree_add_item(nmea0183_tree, hf_nmea0183_sentence_prefix, tvb, offset, 6, ENC_ASCII0x00000000);
6992 offset += 6;
6993 while (tvb_reported_length_remaining(tvb, offset)) {
6994 if (first_msg != true1) {
6995 if (tvb_find_uint16_remaining(tvb, offset, NMEA0183_CRLF0x0d0a, &end_offset)) {
6996 /* Add CRLF */
6997 end_offset += 2;
6998 } else {
6999 end_offset = tvb_reported_length(tvb);
7000 }
7001
7002 ti = proto_tree_add_item(tree, proto_nmea0183, tvb, offset, end_offset, ENC_NA0x00000000);
7003 nmea0183_tree = proto_item_add_subtree(ti, ett_nmea0183);
7004 }
7005 offset = dissect_nmea0183_tag_blocks(tvb, pinfo, nmea0183_tree, offset);
7006 tvbuff_t* msg_tvb = tvb_new_subset_length(tvb, offset, end_offset - offset);
7007 dissect_nmea0183_msg(msg_tvb, pinfo, nmea0183_tree);
7008 offset += (end_offset - offset);
7009 first_msg = false0;
7010 }
7011 return offset;
7012 } else if (tvb_strneql(tvb, 0, RRUDP"RrUdP", strlen(RRUDP"RrUdP")) == 0) {
7013 /* Binary nmea0183 */
7014 offset = dissect_nmea0183_bin(tvb, pinfo, tree, data);
7015 return offset;
7016 } else if (tvb_strneql(tvb, 0, RAUDP"RaUdp", strlen(RAUDP"RaUdp")) == 0) {
7017 /* Binary nmea0183 */
7018 offset = dissect_nmea0183_bin(tvb, pinfo, tree, data);
7019 return offset;
7020 } else if (tvb_strneql(tvb, 0, RPUDP"RpUdP", strlen(RPUDP"RpUdP")) == 0) {
7021 /* Binary nmea0183 */
7022 offset = dissect_nmea0183_bin(tvb, pinfo, tree, data);
7023 return offset;
7024 }
7025
7026 ti = proto_tree_add_item(tree, proto_nmea0183, tvb, 0, end_offset, ENC_NA0x00000000);
7027 nmea0183_tree = proto_item_add_subtree(ti, ett_nmea0183);
7028
7029 tvbuff_t *msg_tvb = tvb_new_subset_length(tvb, offset, end_offset - offset);
7030 offset = dissect_nmea0183_msg(msg_tvb, pinfo, nmea0183_tree);
7031
7032 return offset;
7033}
7034
7035/* Try to detect NMEA 0183 heuristically */
7036static bool_Bool dissect_nmea0183_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
7037{
7038 char *sent_type;
7039 const char *talker, *t_val, *p_val, *m_val, *manuf;
7040
7041 /* Have to have at least 11 bytes:
7042 * 1-byte sentence type character ('!' or '$')
7043 * 2-byte TALKER lookup value
7044 * 2-byte TALKER (for Query sentences) or 3-byte FORMATTER
7045 * variable number of bytes for delimiters and data fields (minimum would be a single ',' byte)
7046 * '*' delimeter byte, 2-bytes for checksum, and 2-bytes for EOM "\r\n" */
7047 if(tvb_reported_length(tvb) < 11 || tvb_captured_length(tvb) < 5){
7048 return false0;
7049 }
7050 /* See if we have a UDP brodcast message */
7051 if (tvb_strneql(tvb, 0, UDPBC"UdPbC", strlen(UDPBC"UdPbC")) == 0) {
7052 return (dissect_nmea0183(tvb, pinfo, tree, data) != 0);
7053 }
7054 if (tvb_strneql(tvb, 0, RRUDP"RrUdP", strlen(RRUDP"RrUdP")) == 0) {
7055 return (dissect_nmea0183_bin(tvb, pinfo, tree, data) != 0);
7056 }
7057 if (tvb_strneql(tvb, 0, RAUDP"RaUdp", strlen(RAUDP"RaUdp")) == 0) {
7058 return (dissect_nmea0183_bin(tvb, pinfo, tree, data) != 0);
7059 }
7060 if (tvb_strneql(tvb, 0, RPUDP"RpUdP", strlen(RPUDP"RpUdP")) == 0) {
7061 return (dissect_nmea0183_bin(tvb, pinfo, tree, data) != 0);
7062 }
7063 /* Grab the first byte and check the first character */
7064 sent_type = (char*)tvb_get_string_enc(pinfo->pool, tvb, 0, 1, ENC_ASCII0x00000000);
7065
7066 /* Sentence type character ('!' or '$') */
7067 if( (sent_type[0] != '!') && (sent_type[0] != '$') ){
7068 return false0;
7069 }
7070
7071 /* We either have a 'P' and corresponding manufacturer 3-byte value OR
7072 * we have a non-proprietary 2-byte TALKER field */
7073 //TODO: Implement encapsulation and proprietary message parsing
7074
7075 /* Do a lookup for the 2-byte TALKER field */
7076 t_val = (char*)tvb_get_string_enc(pinfo->pool, tvb, 1, 2, ENC_ASCII0x00000000);
7077 talker = try_str_to_str(t_val, known_talker_ids);
7078
7079 /* Do a lookup for the 3-byte manufacturer if the 2nd byte in the PDU is 'P' */
7080 p_val = (char*)tvb_get_string_enc(pinfo->pool, tvb, 1, 1, ENC_ASCII0x00000000);
7081 m_val = (char*)tvb_get_string_enc(pinfo->pool, tvb, 2, 3, ENC_ASCII0x00000000);
7082 manuf = try_str_to_str(m_val, manufacturer_vals);
7083
7084 /* If one of the two conditions are true then try to dissect NMEA 0183 */
7085 if( ((p_val[0] == 'P') && (manuf != NULL((void*)0))) ||
7086 (talker != NULL((void*)0)) ){
7087 /* Looks like NMEA 0183 so let's give it a try */
7088 return (dissect_nmea0183(tvb, pinfo, tree, data) != 0);
7089 }
7090 /* If neither conditions are met then we return false */
7091 else{
7092 return false0;
7093 }
7094}
7095
7096void proto_register_nmea0183(void)
7097{
7098 expert_module_t *expert_nmea0183;
7099
7100 static hf_register_info hf[] = {
7101 {&hf_nmea0183_talker_id,
7102 {"Talker ID", "nmea0183.talker",
7103 FT_STRING, BASE_NONE,
7104 NULL((void*)0), 0x0,
7105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7106 {&hf_nmea0183_sentence_id,
7107 {"Sentence ID", "nmea0183.sentence",
7108 FT_STRING, BASE_NONE,
7109 NULL((void*)0), 0x0,
7110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7111 {&hf_nmea0183_unknown_field,
7112 {"Field", "nmea0183.unknown_field",
7113 FT_STRING, BASE_NONE,
7114 NULL((void*)0), 0x0,
7115 "NMEA 0183 Unknown field", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7116 {&hf_nmea0183_checksum,
7117 {"Checksum", "nmea0183.checksum",
7118 FT_STRING, BASE_NONE,
7119 NULL((void*)0), 0x0,
7120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7121 {&hf_nmea0183_checksum_calculated,
7122 {"Calculated checksum", "nmea0183.checksum_calculated",
7123 FT_UINT8, BASE_HEX,
7124 NULL((void*)0), 0x0,
7125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7126 {&hf_nmea0183_aam_arr_circle_radius,
7127 {"Arrival Circle Radius", "nmea0183.aam.circle_radius",
7128 FT_STRING, BASE_NONE,
7129 NULL((void*)0), 0x0,
7130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7131 {&hf_nmea0183_aam_arr_circle_status,
7132 {"Arrival Circle Status", "nmea0183.aam.arrival_status",
7133 FT_CHAR, BASE_NONE,
7134 VALS(arrival_circle_status)((0 ? (const struct _value_string*)0 : ((arrival_circle_status
))))
, 0x0,
7135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7136 {&hf_nmea0183_aam_perp_status,
7137 {"Perpendicular Pass Status", "nmea0183.aam.perp_status",
7138 FT_CHAR, BASE_NONE,
7139 VALS(perpendicular_pass_status)((0 ? (const struct _value_string*)0 : ((perpendicular_pass_status
))))
, 0x0,
7140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7141 {&hf_nmea0183_aam_units_radius,
7142 {"Units of Radius (nm)", "nmea0183.aam.units",
7143 FT_UINT8, BASE_DEC,
7144 NULL((void*)0), 0x0,
7145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7146 {&hf_nmea0183_aam_waypoint,
7147 {"Waypoint ID", "nmea0183.aam.waypoint",
7148 FT_STRING, BASE_NONE,
7149 NULL((void*)0), 0x0,
7150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7151 {&hf_nmea0183_abk_ack_type,
7152 {"Type of Acknowledgement", "nmea0183.abk.ack_type",
7153 FT_CHAR, BASE_NONE,
7154 VALS(abk_ack_type)((0 ? (const struct _value_string*)0 : ((abk_ack_type)))), 0x0,
7155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7156 {&hf_nmea0183_abk_ais_channel,
7157 {"AIS Channel of Reception", "nmea0183.abk.channel",
7158 FT_CHAR, BASE_NONE,
7159 VALS(abk_channel)((0 ? (const struct _value_string*)0 : ((abk_channel)))), 0x0,
7160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7161 {&hf_nmea0183_abk_mmsi,
7162 {"MMSI of Addressed AIS Unit", "nmea0183.abk.mmsi",
7163 FT_STRING, BASE_NONE,
7164 NULL((void*)0), 0x0,
7165 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7166 {&hf_nmea0183_abk_msg_id,
7167 {"ITU-R M.1371 Message ID", "nmea0183.abk.msg_id",
7168 FT_STRING, BASE_NONE,
7169 NULL((void*)0), 0x0,
7170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7171 {&hf_nmea0183_abk_msg_seq,
7172 {"Message Sequence Number", "nmea0183.abk.msg_seq",
7173 FT_STRING, BASE_NONE,
7174 NULL((void*)0), 0x0,
7175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7176 {&hf_nmea0183_aca_chan_a,
7177 {"Channel A", "nmea0183.aca.chan_a",
7178 FT_STRING, BASE_NONE,
7179 NULL((void*)0), 0x0,
7180 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7181 {&hf_nmea0183_aca_chan_a_bw,
7182 {"Channel A Bandwidth", "nmea0183.aca.chan_a_bw",
7183 FT_CHAR, BASE_NONE,
7184 VALS(aca_chbw)((0 ? (const struct _value_string*)0 : ((aca_chbw)))), 0x0,
7185 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7186 {&hf_nmea0183_aca_chan_b,
7187 {"Channel B", "nmea0183.aca.chan_b",
7188 FT_STRING, BASE_NONE,
7189 NULL((void*)0), 0x0,
7190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7191 {&hf_nmea0183_aca_chan_b_bw,
7192 {"Channel B Bandwidth", "nmea0183.aca.chan_b_bw",
7193 FT_CHAR, BASE_NONE,
7194 VALS(aca_chbw)((0 ? (const struct _value_string*)0 : ((aca_chbw)))), 0x0,
7195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7196 {&hf_nmea0183_aca_info_src,
7197 {"Information Source", "nmea0183.aca.info_src",
7198 FT_CHAR, BASE_NONE,
7199 VALS(aca_info_src)((0 ? (const struct _value_string*)0 : ((aca_info_src)))), 0x0,
7200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7201 {&hf_nmea0183_aca_inuse,
7202 {"'In-use' Flag", "nmea0183.aca.inuse",
7203 FT_CHAR, BASE_NONE,
7204 VALS(aca_in_use)((0 ? (const struct _value_string*)0 : ((aca_in_use)))), 0x0,
7205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7206 {&hf_nmea0183_aca_inuse_change,
7207 {"Time of 'in-use' Change (UTC)", "nmea0183.aca.inuse_change",
7208 FT_STRING, BASE_NONE,
7209 NULL((void*)0), 0x0,
7210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7211 {&hf_nmea0183_aca_ne_clat,
7212 {"Northeast Corner Latitude", "nmea0183.aca.ne_clatitude",
7213 FT_FLOAT, BASE_NONE,
7214 NULL((void*)0), 0x0,
7215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7216 {&hf_nmea0183_aca_ne_clong,
7217 {"Northeast Corner Longitude", "nmea0183.aca.ne_clongitude",
7218 FT_FLOAT, BASE_NONE,
7219 NULL((void*)0), 0x0,
7220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7221 {&hf_nmea0183_aca_power,
7222 {"Power Level Control", "nmea0183.aca.power",
7223 FT_CHAR, BASE_NONE,
7224 VALS(aca_power)((0 ? (const struct _value_string*)0 : ((aca_power)))), 0x0,
7225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7226 {&hf_nmea0183_aca_seq_num,
7227 {"Sequence Number", "nmea0183.aca.seq_num",
7228 FT_STRING, BASE_NONE,
7229 NULL((void*)0), 0x0,
7230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7231 {&hf_nmea0183_aca_sw_clat,
7232 {"Southwest Corner Latitude", "nmea0183.aca.sw_clatitude",
7233 FT_FLOAT, BASE_NONE,
7234 NULL((void*)0), 0x0,
7235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7236 {&hf_nmea0183_aca_sw_clong,
7237 {"Southwest Corner Longitude", "nmea0183.aca.sw_clongitude",
7238 FT_FLOAT, BASE_NONE,
7239 NULL((void*)0), 0x0,
7240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7241 {&hf_nmea0183_aca_txrx_mode,
7242 {"Tx/Rx Mode Control", "nmea0183.aca.txrx_mode",
7243 FT_CHAR, BASE_NONE,
7244 VALS(aca_txrx_control)((0 ? (const struct _value_string*)0 : ((aca_txrx_control)))), 0x0,
7245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7246 {&hf_nmea0183_aca_zone_size,
7247 {"Transition Zone Size (nm)", "nmea0183.aca.zonesize",
7248 FT_STRING, BASE_NONE,
7249 NULL((void*)0), 0x0,
7250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7251 {&hf_nmea0183_ack_alarm_id,
7252 {"Unique Alarm Number at Alarm Source", "nmea0183.acs.id",
7253 FT_STRING, BASE_NONE,
7254 NULL((void*)0), 0x0,
7255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7256 {&hf_nmea0183_acs_day,
7257 {"Day (01 to 31) (UTC)", "nmea0183.acs.day",
7258 FT_STRING, BASE_NONE,
7259 NULL((void*)0), 0x0,
7260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7261 {&hf_nmea0183_acs_mmsi,
7262 {"MMSI of Originator", "nmea0183.acs.mmsi",
7263 FT_STRING, BASE_NONE,
7264 NULL((void*)0), 0x0,
7265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7266 {&hf_nmea0183_acs_month,
7267 {"Month (01 to 12) (UTC)", "nmea0183.acs.month",
7268 FT_STRING, BASE_NONE,
7269 NULL((void*)0), 0x0,
7270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7271 {&hf_nmea0183_acs_seq_num,
7272 {"Sequence Number", "nmea0183.acs.seq_num",
7273 FT_STRING, BASE_NONE,
7274 NULL((void*)0), 0x0,
7275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7276 {&hf_nmea0183_acs_utc,
7277 {"UTC of Receipt of Channel Management Information", "nmea0183.acs.utc",
7278 FT_STRING, BASE_NONE,
7279 NULL((void*)0), 0x0,
7280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7281 {&hf_nmea0183_acs_year,
7282 {"Year (UTC)", "nmea0183.acs.year",
7283 FT_STRING, BASE_NONE,
7284 NULL((void*)0), 0x0,
7285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7286 {&hf_nmea0183_air_mmsi_is1,
7287 {"MMSI of Interrogated Station #1", "nmea0183.air.mmsi1",
7288 FT_STRING, BASE_NONE,
7289 NULL((void*)0), 0x0,
7290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7291 {&hf_nmea0183_air_mmsi_is2,
7292 {"MMSI of Interrogated Station #2", "nmea0183.air.mmsi2",
7293 FT_STRING, BASE_NONE,
7294 NULL((void*)0), 0x0,
7295 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7296 {&hf_nmea0183_air_msg2_req,
7297 {"ITU-R M.1371 Message #2 Requested from Station #1", "nmea0183.air.msg2_req_is1",
7298 FT_STRING, BASE_NONE,
7299 NULL((void*)0), 0x0,
7300 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7301 {&hf_nmea0183_air_msg2_sub,
7302 {"Message #2 Sub-Section", "nmea0183.air.msg2_sub_is1",
7303 FT_STRING, BASE_NONE,
7304 NULL((void*)0), 0x0,
7305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7306 {&hf_nmea0183_air_msg_req,
7307 {"ITU-R M.1371 Message #1 Requested from Station #1", "nmea0183.air.msg_req_is1",
7308 FT_STRING, BASE_NONE,
7309 NULL((void*)0), 0x0,
7310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7311 {&hf_nmea0183_air_msg_req_is2,
7312 {"ITU-R M.1371 Message Requested from Station #2", "nmea0183.air.msg_req_is2",
7313 FT_STRING, BASE_NONE,
7314 NULL((void*)0), 0x0,
7315 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7316 {&hf_nmea0183_air_msg_sub,
7317 {"Message #1 Sub-Section", "nmea0183.air.msg_sub_is1",
7318 FT_STRING, BASE_NONE,
7319 NULL((void*)0), 0x0,
7320 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7321 {&hf_nmea0183_air_msg_sub_is2,
7322 {"Message Sub-Section - Station #2", "nmea0183.air.msg_sub_is2",
7323 FT_STRING, BASE_NONE,
7324 NULL((void*)0), 0x0,
7325 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7326 {&hf_nmea0183_akd_alarm_type,
7327 {"Type of Alarm", "nmea0183.akd.alarm_type",
7328 FT_STRING, BASE_NONE,
7329 NULL((void*)0), 0x0,
7330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7331 {&hf_nmea0183_akd_inst_num_orig,
7332 {"Instance Number of Equipment/Unit/Item (Original)", "nmea0183.akd.inst_num_orig",
7333 FT_STRING, BASE_NONE,
7334 NULL((void*)0), 0x0,
7335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7336 {&hf_nmea0183_akd_inst_num_send,
7337 {"Instance Number of Equipment/Unit/Item (Sending)", "nmea0183.akd.inst_num_send",
7338 FT_STRING, BASE_NONE,
7339 NULL((void*)0), 0x0,
7340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7341 {&hf_nmea0183_akd_subsys_indicator_orig,
7342 {"Subsystem Indicator of Original Alarm Source", "nmea0183.akd.ss_indic_orig",
7343 FT_STRING, BASE_NONE,
7344 NULL((void*)0), 0x0,
7345 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7346 {&hf_nmea0183_akd_sybsys_indicator_send,
7347 {"Subsystem Indicator of System Sending Acknowledgement", "nmea0183.akd.ss_indic_send",
7348 FT_STRING, BASE_NONE,
7349 NULL((void*)0), 0x0,
7350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7351 {&hf_nmea0183_akd_sys_indicator_orig,
7352 {"System Indicator of Original Alarm Source", "nmea0183.akd.s_indic_orig",
7353 FT_STRING, BASE_NONE,
7354 NULL((void*)0), 0x0,
7355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7356 {&hf_nmea0183_akd_sys_indicator_send,
7357 {"System Indicator of System Sending Acknowledgement", "nmea0183.akd.s_indic_send",
7358 FT_STRING, BASE_NONE,
7359 NULL((void*)0), 0x0,
7360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7361 {&hf_nmea0183_akd_utc,
7362 {"Time of Acknowledgement (UTC)", "nmea0183.akd.time",
7363 FT_STRING, BASE_NONE,
7364 NULL((void*)0), 0x0,
7365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7366 {&hf_nmea0183_ala_alarm_ack_state,
7367 {"Alarm's Acknowledged State", "nmea0183.ala.alarm_state",
7368 FT_CHAR, BASE_NONE,
7369 VALS(alarm_ack_state_vals)((0 ? (const struct _value_string*)0 : ((alarm_ack_state_vals
))))
, 0x0,
7370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7371 {&hf_nmea0183_ala_alarm_cond,
7372 {"Alarm Condition", "nmea0183.ala.alarm_cond",
7373 FT_CHAR, BASE_NONE,
7374 VALS(alarm_cond_state_vals)((0 ? (const struct _value_string*)0 : ((alarm_cond_state_vals
))))
, 0x0,
7375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7376 {&hf_nmea0183_ala_alarm_text,
7377 {"Alarm's Description Text", "nmea0183.ala.alarm_text",
7378 FT_STRING, BASE_NONE,
7379 NULL((void*)0), 0x0,
7380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7381 {&hf_nmea0183_ala_alarm_type,
7382 {"Type of Alarm", "nmea0183.ala.alarm_type",
7383 FT_STRING, BASE_NONE,
7384 NULL((void*)0), 0x0,
7385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7386 {&hf_nmea0183_ala_inst_num,
7387 {"Instance Number of Equipment/Unit/Item", "nmea0183.ala.inst_num",
7388 FT_STRING, BASE_NONE,
7389 NULL((void*)0), 0x0,
7390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7391 {&hf_nmea0183_ala_subsys_indicator,
7392 {"Subsystem Indicator of Alarm Source", "nmea0183.ala.ss_indic",
7393 FT_STRING, BASE_NONE,
7394 NULL((void*)0), 0x0,
7395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7396 {&hf_nmea0183_ala_sys_indicator,
7397 {"System Indicator of Alarm Source", "nmea0183.ala.s_indic",
7398 FT_STRING, BASE_NONE,
7399 NULL((void*)0), 0x0,
7400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7401 {&hf_nmea0183_ala_time,
7402 {"Event Time (UTC)", "nmea0183.ala.time",
7403 FT_STRING, BASE_NONE,
7404 NULL((void*)0), 0x0,
7405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7406 {&hf_nmea0183_alm_af0_clock_param,
7407 {"a(f0), Clock Parameter", "nmea0183.alm.af0_clock",
7408 FT_STRING, BASE_NONE,
7409 NULL((void*)0), 0x0,
7410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7411 {&hf_nmea0183_alm_af1_clock_param,
7412 {"a(f1), Clock Parameter", "nmea0183.alm.af1_clock",
7413 FT_STRING, BASE_NONE,
7414 NULL((void*)0), 0x0,
7415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7416 {&hf_nmea0183_alm_alm_ref_time,
7417 {"t(oa), Almanac Reference Time", "nmea0183.alm.ref_time",
7418 FT_STRING, BASE_NONE,
7419 NULL((void*)0), 0x0,
7420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7421 {&hf_nmea0183_alm_arg_perigee,
7422 {"OMEGA, Argument of Perigee", "nmea0183.alm.perigee",
7423 FT_STRING, BASE_NONE,
7424 NULL((void*)0), 0x0,
7425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7426 {&hf_nmea0183_alm_eccent,
7427 {"e, Eccentricity", "nmea0183.alm.eccentricity",
7428 FT_STRING, BASE_NONE,
7429 NULL((void*)0), 0x0,
7430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7431 {&hf_nmea0183_alm_gps_week,
7432 {"GPS Week Number", "nmea0183.alm.gps_week",
7433 FT_STRING, BASE_NONE,
7434 NULL((void*)0), 0x0,
7435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7436 {&hf_nmea0183_alm_incl_angle,
7437 {"(sigma)(i), Inclination Angle", "nmea0183.alm.inc_angle",
7438 FT_STRING, BASE_NONE,
7439 NULL((void*)0), 0x0,
7440 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7441 {&hf_nmea0183_alm_long_asc_node,
7442 {"(OMEGA)(o), Longitude of Ascending Node", "nmea0183.alm.long_asn_node",
7443 FT_STRING, BASE_NONE,
7444 NULL((void*)0), 0x0,
7445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7446 {&hf_nmea0183_alm_mean_anomaly,
7447 {"M(o), Mean Anomaly", "nmea0183.alm.anomaly",
7448 FT_STRING, BASE_NONE,
7449 NULL((void*)0), 0x0,
7450 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7451 {&hf_nmea0183_alm_rate_right_asc,
7452 {"OMEGADOT, Rate of Right Ascension", "nmea0183.alm.rate_right_asc",
7453 FT_STRING, BASE_NONE,
7454 NULL((void*)0), 0x0,
7455 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7456 {&hf_nmea0183_alm_root_sm_axis,
7457 {"root(A), Root of Semi-Major Axis", "nmea0183.alm.axis",
7458 FT_STRING, BASE_NONE,
7459 NULL((void*)0), 0x0,
7460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7461 {&hf_nmea0183_alm_sat_prn,
7462 {"Satellite PRN Number", "nmea0183.alm.satprn",
7463 FT_STRING, BASE_NONE,
7464 NULL((void*)0), 0x0,
7465 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7466 {&hf_nmea0183_alm_sent_num,
7467 {"Sentence Number", "nmea0183.alm.sentence_num",
7468 FT_STRING, BASE_NONE,
7469 NULL((void*)0), 0x0,
7470 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7471 {&hf_nmea0183_alm_sent_tot,
7472 {"Total Number of Sentences", "nmea0183.alm.num_sentences",
7473 FT_STRING, BASE_NONE,
7474 NULL((void*)0), 0x0,
7475 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7476 {&hf_nmea0183_alm_sv_health,
7477 {"SV Health", "nmea0183.alm.sv_health",
7478 FT_STRING, BASE_NONE,
7479 NULL((void*)0), 0x0,
7480 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7481 {&hf_nmea0183_alr_alarm_ack_st,
7482 {"Alarm’s acknowledge state", "nmea0183.alr_alarm_ack_st",
7483 FT_STRING, BASE_NONE,
7484 NULL((void*)0), 0x0,
7485 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7486 {&hf_nmea0183_alr_alarm_cond,
7487 {"Alarm condition", "nmea0183.alr_alarm_cond",
7488 FT_STRING, BASE_NONE,
7489 NULL((void*)0), 0x0,
7490 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7491 {&hf_nmea0183_alr_alarm_desc_txt,
7492 {"Alarm’s description text", "nmea0183.alr_alarm_desc_txt",
7493 FT_STRING, BASE_NONE,
7494 NULL((void*)0), 0x0,
7495 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7496 {&hf_nmea0183_alr_alarm_id,
7497 {"Alarm id", "nmea0183.alr_id",
7498 FT_STRING, BASE_NONE,
7499 NULL((void*)0), 0x0,
7500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7501 {&hf_nmea0183_alr_time,
7502 {"UTC Time of alarm condition change", "nmea0183.alr_time",
7503 FT_NONE, BASE_NONE,
7504 NULL((void*)0), 0x0,
7505 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7506 {&hf_nmea0183_alr_time_hour,
7507 {"Hour", "nmea0183.alr_time_hour",
7508 FT_STRING, BASE_NONE,
7509 NULL((void*)0), 0x0,
7510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7511 {&hf_nmea0183_alr_time_minute,
7512 {"Minute", "nmea0183.alr_time_minute",
7513 FT_STRING, BASE_NONE,
7514 NULL((void*)0), 0x0,
7515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7516 {&hf_nmea0183_alr_time_second,
7517 {"Second", "nmea0183.alr_time_second",
7518 FT_STRING, BASE_NONE,
7519 NULL((void*)0), 0x0,
7520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7521 {&hf_nmea0183_apb_arr_circle_status,
7522 {"Arrival Circle Status", "nmea0183.apb.arrival_status",
7523 FT_CHAR, BASE_NONE,
7524 VALS(arrival_circle_status)((0 ? (const struct _value_string*)0 : ((arrival_circle_status
))))
, 0x0,
7525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7526 {&hf_nmea0183_apb_bearing_origin,
7527 {"Bearing Origin to Destination", "nmea0183.apb.bearing_origin",
7528 FT_STRING, BASE_NONE,
7529 NULL((void*)0), 0x0,
7530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7531 {&hf_nmea0183_apb_bearing_present,
7532 {"Bearing, Present position to Destination", "nmea0183.apb.bearing_present",
7533 FT_STRING, BASE_NONE,
7534 NULL((void*)0), 0x0,
7535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7536 {&hf_nmea0183_apb_cycle_lock_warning,
7537 {"Data Status (Loran-C Cycle Lock)", "nmea0183.apb.cycle_warning",
7538 FT_CHAR, BASE_NONE,
7539 VALS(loranc_cycle_lock_warning_vals)((0 ? (const struct _value_string*)0 : ((loranc_cycle_lock_warning_vals
))))
, 0x0,
7540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7541 {&hf_nmea0183_apb_dir_steer,
7542 {"Direction to Steer", "nmea0183.apb.steer",
7543 FT_CHAR, BASE_NONE,
7544 VALS(steer_direction)((0 ? (const struct _value_string*)0 : ((steer_direction)))), 0x0,
7545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7546 {&hf_nmea0183_apb_heading_steer,
7547 {"Heading-to-Steer to Destination Waypoint", "nmea0183.apb.steer_heading",
7548 FT_STRING, BASE_NONE,
7549 NULL((void*)0), 0x0,
7550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7551 {&hf_nmea0183_apb_mag_xte,
7552 {"Magnitude of Cross-Track-Error (XTE)", "nmea0183.apb.mag_xte",
7553 FT_STRING, BASE_NONE,
7554 NULL((void*)0), 0x0,
7555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7556 {&hf_nmea0183_apb_mode,
7557 {"Mode Indicator", "nmea0183.apb.mode",
7558 FT_CHAR, BASE_NONE,
7559 VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
7560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7561 {&hf_nmea0183_apb_perp_status,
7562 {"Perpendicular Pass Status", "nmea0183.apb.perp_status",
7563 FT_CHAR, BASE_NONE,
7564 VALS(perpendicular_pass_status)((0 ? (const struct _value_string*)0 : ((perpendicular_pass_status
))))
, 0x0,
7565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7566 {&hf_nmea0183_apb_waypoint_id,
7567 {"Waypoint ID", "nmea0183.apb.waypoint",
7568 FT_STRING, BASE_NONE,
7569 NULL((void*)0), 0x0,
7570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7571 {&hf_nmea0183_apb_xte_units,
7572 {"XTE units", "nmea0183.apb.xte_units",
7573 FT_CHAR, BASE_NONE,
7574 VALS(xte_unit_vals)((0 ? (const struct _value_string*)0 : ((xte_unit_vals)))), 0x0,
7575 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7576 {&hf_nmea0183_bec_bearing_mag,
7577 {"Bearing (degrees Magnetic)", "nmea0183.bec.bearing_mag",
7578 FT_STRING, BASE_NONE,
7579 NULL((void*)0), 0x0,
7580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7581 {&hf_nmea0183_bec_bearing_true,
7582 {"Bearing (degrees True)", "nmea0183.bec.bearing_true",
7583 FT_STRING, BASE_NONE,
7584 NULL((void*)0), 0x0,
7585 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7586 {&hf_nmea0183_bec_distance,
7587 {"Distance (nm)", "nmea0183.bec.distance",
7588 FT_STRING, BASE_NONE,
7589 NULL((void*)0), 0x0,
7590 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7591 {&hf_nmea0183_bec_latitude,
7592 {"Waypoint Latitude", "nmea0183.bec.latitude",
7593 FT_FLOAT, BASE_NONE,
7594 NULL((void*)0), 0x0,
7595 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7596 {&hf_nmea0183_bec_longitude,
7597 {"Waypoint Longitude", "nmea0183.bec.longitude",
7598 FT_FLOAT, BASE_NONE,
7599 NULL((void*)0), 0x0,
7600 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7601 {&hf_nmea0183_bec_utc,
7602 {"UTC of Observation", "nmea0183.bec.utc",
7603 FT_STRING, BASE_NONE,
7604 NULL((void*)0), 0x0,
7605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7606 {&hf_nmea0183_bec_waypoint,
7607 {"Waypoint ID", "nmea0183.bec.waypoint",
7608 FT_STRING, BASE_NONE,
7609 NULL((void*)0), 0x0,
7610 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7611 { &hf_nmea0183_bin_blockid,
7612 { "Blockid", "nmea0183.bin.blockid",
7613 FT_UINT32, BASE_DEC,
7614 NULL((void*)0), 0x0,
7615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7616 { &hf_nmea0183_bin_channel,
7617 { "Channel", "nmea0183.bin.channel",
7618 FT_UINT8, BASE_HEX,
7619 NULL((void*)0), 0x0,
7620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7621 { &hf_nmea0183_bin_data,
7622 { "Data", "nmea0183.bin.data",
7623 FT_BYTES, BASE_NONE,
7624 NULL((void*)0), 0x0,
7625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7626 { &hf_nmea0183_bin_data_type,
7627 { "Data type", "nmea0183.bin.data_type",
7628 FT_STRING, BASE_NONE,
7629 NULL((void*)0), 0x0,
7630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7631 { &hf_nmea0183_bin_device,
7632 { "Device", "nmea0183.bin.device",
7633 FT_UINT8, BASE_HEX,
7634 NULL((void*)0), 0x0,
7635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7636 { &hf_nmea0183_bin_dstid,
7637 { "Destination Id", "nmea0183.bin.dst_id",
7638 FT_STRING, BASE_NONE,
7639 NULL((void*)0), 0x0,
7640 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7641 { &hf_nmea0183_bin_file_descriptor,
7642 { "File descriptor", "nmea0183.bin.file_descriptor",
7643 FT_STRING, BASE_NONE,
7644 NULL((void*)0), 0x0,
7645 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7646 { &hf_nmea0183_bin_file_descriptor_len,
7647 { "File descriptor length", "nmea0183.bin.fd_len",
7648 FT_UINT32, BASE_DEC,
7649 NULL((void*)0), 0x0,
7650 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7651 { &hf_nmea0183_bin_file_length,
7652 { "File length", "nmea0183.bin.file_len",
7653 FT_UINT32, BASE_DEC,
7654 NULL((void*)0), 0x0,
7655 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7656 { &hf_nmea0183_bin_max_seqnum,
7657 { "Max Sequence number", "nmea0183.bin.maxseqnum",
7658 FT_UINT32, BASE_DEC,
7659 NULL((void*)0), 0x0,
7660 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7661 { &hf_nmea0183_bin_mtype,
7662 { "Mtype", "nmea0183.bin.mtype",
7663 FT_UINT16, BASE_DEC,
7664 VALS(nmea0183_bin_mtype_vals)((0 ? (const struct _value_string*)0 : ((nmea0183_bin_mtype_vals
))))
, 0x0,
7665 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7666 { &hf_nmea0183_bin_seqnum,
7667 { "Sequence number", "nmea0183.bin.seqnum",
7668 FT_UINT32, BASE_DEC,
7669 NULL((void*)0), 0x0,
7670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7671 { &hf_nmea0183_bin_srcid,
7672 { "Source Id", "nmea0183.bin.src_id",
7673 FT_STRING, BASE_NONE,
7674 NULL((void*)0), 0x0,
7675 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
7676 { &hf_nmea0183_bin_stat_of_acquisition,
7677 { "Status of acquisition", "nmea0183.bin.stat_of_acquisition",
7678 FT_UINT16, BASE_DEC,
7679 NULL((void*)0), 0x0,
7680 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7681 { &hf_nmea0183_bin_status_and_info,
7682 { "Status and information text", "nmea0183.bin.status_and_info",
7683 FT_STRING, BASE_NONE,
7684 NULL((void*)0), 0x0,
7685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7686 { &hf_nmea0183_bin_type_len,
7687 { "Type length", "nmea0183.bin.type_len",
7688 FT_UINT8, BASE_DEC,
7689 NULL((void*)0), 0x0,
7690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
7691 { &hf_nmea0183_bin_version,
7692 { "Version", "nmea0183.bin.version",
7693 FT_UINT16, BASE_DEC,
7694 NULL((void*)0), 0x0,
7695 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
7696 {&hf_nmea0183_bod_bearing_mag,
7697 {"Bearing (degrees Magnetic)", "nmea0183.bod.bearing_mag",
7698 FT_STRING, BASE_NONE,
7699 NULL((void*)0), 0x0,
7700 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7701 {&hf_nmea0183_bod_bearing_true,
7702 {"Bearing (degrees True)", "nmea0183.bod.bearing_true",
7703 FT_STRING, BASE_NONE,
7704 NULL((void*)0), 0x0,
7705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7706 {&hf_nmea0183_bod_dest_waypoint,
7707 {"Destination Waypoint ID", "nmea0183.bod.waypoint_dest",
7708 FT_STRING, BASE_NONE,
7709 NULL((void*)0), 0x0,
7710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7711 {&hf_nmea0183_bod_orig_waypoint,
7712 {"Origin Waypoint ID", "nmea0183.bod.waypoint_orig",
7713 FT_STRING, BASE_NONE,
7714 NULL((void*)0), 0x0,
7715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7716 {&hf_nmea0183_bwc_bearing_mag,
7717 {"Bearing (degrees Magnetic)", "nmea0183.bwc.bearing_mag",
7718 FT_STRING, BASE_NONE,
7719 NULL((void*)0), 0x0,
7720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7721 {&hf_nmea0183_bwc_bearing_true,
7722 {"Bearing (degrees True)", "nmea0183.bwc.bearing_true",
7723 FT_STRING, BASE_NONE,
7724 NULL((void*)0), 0x0,
7725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7726 {&hf_nmea0183_bwc_distance,
7727 {"Distance (nm)", "nmea0183.bwc.distance",
7728 FT_STRING, BASE_NONE,
7729 NULL((void*)0), 0x0,
7730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7731 {&hf_nmea0183_bwc_latitude,
7732 {"Waypoint Latitude", "nmea0183.bwc.latitude",
7733 FT_FLOAT, BASE_NONE,
7734 NULL((void*)0), 0x0,
7735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7736 {&hf_nmea0183_bwc_longitude,
7737 {"Waypoint Longitude", "nmea0183.bwc.longitude",
7738 FT_FLOAT, BASE_NONE,
7739 NULL((void*)0), 0x0,
7740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7741 {&hf_nmea0183_bwc_mode,
7742 {"Mode Indicator", "nmea0183.bwc.mode",
7743 FT_CHAR, BASE_NONE,
7744 VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
7745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7746 {&hf_nmea0183_bwc_utc,
7747 {"UTC of Observation", "nmea0183.bwc.utc",
7748 FT_STRING, BASE_NONE,
7749 NULL((void*)0), 0x0,
7750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7751 {&hf_nmea0183_bwc_waypoint,
7752 {"Waypoint ID", "nmea0183.bwc.waypoint",
7753 FT_STRING, BASE_NONE,
7754 NULL((void*)0), 0x0,
7755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7756 {&hf_nmea0183_bwr_bearing_mag,
7757 {"Bearing (degrees Magnetic)", "nmea0183.bwr.bearing_mag",
7758 FT_STRING, BASE_NONE,
7759 NULL((void*)0), 0x0,
7760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7761 {&hf_nmea0183_bwr_bearing_true,
7762 {"Bearing (degrees True)", "nmea0183.bwr.bearing_true",
7763 FT_STRING, BASE_NONE,
7764 NULL((void*)0), 0x0,
7765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7766 {&hf_nmea0183_bwr_distance,
7767 {"Distance (nm)", "nmea0183.bwr.distance",
7768 FT_STRING, BASE_NONE,
7769 NULL((void*)0), 0x0,
7770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7771 {&hf_nmea0183_bwr_latitude,
7772 {"Waypoint Latitude", "nmea0183.bwr.latitude",
7773 FT_FLOAT, BASE_NONE,
7774 NULL((void*)0), 0x0,
7775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7776 {&hf_nmea0183_bwr_longitude,
7777 {"Waypoint Longitude", "nmea0183.bwr.longitude",
7778 FT_FLOAT, BASE_NONE,
7779 NULL((void*)0), 0x0,
7780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7781 {&hf_nmea0183_bwr_mode,
7782 {"Mode Indicator", "nmea0183.bwr.mode",
7783 FT_CHAR, BASE_NONE,
7784 VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
7785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7786 {&hf_nmea0183_bwr_utc,
7787 {"UTC of Observation", "nmea0183.bwr.utc",
7788 FT_STRING, BASE_NONE,
7789 NULL((void*)0), 0x0,
7790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7791 {&hf_nmea0183_bwr_waypoint,
7792 {"Waypoint ID", "nmea0183.bwr.waypoint",
7793 FT_STRING, BASE_NONE,
7794 NULL((void*)0), 0x0,
7795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7796 {&hf_nmea0183_bww_bearing_mag,
7797 {"Bearing (degrees Magnetic)", "nmea0183.bww.bearing_mag",
7798 FT_STRING, BASE_NONE,
7799 NULL((void*)0), 0x0,
7800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7801 {&hf_nmea0183_bww_bearing_true,
7802 {"Bearing (degrees True)", "nmea0183.bww.bearing_true",
7803 FT_STRING, BASE_NONE,
7804 NULL((void*)0), 0x0,
7805 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7806 {&hf_nmea0183_bww_from_waypoint,
7807 {"FROM Waypoint ID", "nmea0183.bww.waypoint_from",
7808 FT_STRING, BASE_NONE,
7809 NULL((void*)0), 0x0,
7810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7811 {&hf_nmea0183_bww_to_waypoint,
7812 {"TO Waypoint ID", "nmea0183.bww.waypoint_to",
7813 FT_STRING, BASE_NONE,
7814 NULL((void*)0), 0x0,
7815 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7816 {&hf_nmea0183_cbr_hr_chan_a,
7817 {"Start Hour (UTC), Channel A", "nmea0183.cbr.chan_a_hr",
7818 FT_STRING, BASE_NONE,
7819 NULL((void*)0), 0x0,
7820 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7821 {&hf_nmea0183_cbr_hr_chan_b,
7822 {"Start Hour (UTC), Channel B", "nmea0183.cbr.chan_b_hr",
7823 FT_STRING, BASE_NONE,
7824 NULL((void*)0), 0x0,
7825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7826 {&hf_nmea0183_cbr_interv_chan_a,
7827 {"Slot Interval, Channel A", "nmea0183.cbr.chan_a_interval",
7828 FT_STRING, BASE_NONE,
7829 NULL((void*)0), 0x0,
7830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7831 {&hf_nmea0183_cbr_interv_chan_b,
7832 {"Slot Interval, Channel B", "nmea0183.cbr.chan_b_interval",
7833 FT_STRING, BASE_NONE,
7834 NULL((void*)0), 0x0,
7835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7836 {&hf_nmea0183_cbr_min_chan_a,
7837 {"Start Minute (UTC), Channel A", "nmea0183.cbr.chan_a_min",
7838 FT_STRING, BASE_NONE,
7839 NULL((void*)0), 0x0,
7840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7841 {&hf_nmea0183_cbr_min_chan_b,
7842 {"Start Minute (UTC), Channel B", "nmea0183.cbr.chan_b_min",
7843 FT_STRING, BASE_NONE,
7844 NULL((void*)0), 0x0,
7845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7846 {&hf_nmea0183_cbr_mmsi,
7847 {"MMSI", "nmea0183.cbr.mmsi",
7848 FT_STRING, BASE_NONE,
7849 NULL((void*)0), 0x0,
7850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7851 {&hf_nmea0183_cbr_msd_id_index,
7852 {"Message ID Index", "nmea0183.cbr.msg_id_index",
7853 FT_STRING, BASE_NONE,
7854 NULL((void*)0), 0x0,
7855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7856 {&hf_nmea0183_cbr_msg_id,
7857 {"Message ID", "nmea0183.cbr.msg_id",
7858 FT_STRING, BASE_NONE,
7859 NULL((void*)0), 0x0,
7860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7861 {&hf_nmea0183_cbr_setup,
7862 {"FATDMA or RATDMA/CSTDMA Setup", "nmea0183.cbr.setup",
7863 FT_CHAR, BASE_NONE,
7864 VALS(dma_setup_vals)((0 ? (const struct _value_string*)0 : ((dma_setup_vals)))), 0x0,
7865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7866 {&hf_nmea0183_cbr_slot_chan_a,
7867 {"Start Slot, Channel A", "nmea0183.cbr.chan_a_slot",
7868 FT_STRING, BASE_NONE,
7869 NULL((void*)0), 0x0,
7870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7871 {&hf_nmea0183_cbr_slot_chan_b,
7872 {"Start Slot, Channel B", "nmea0183.cbr.chan_b_slot",
7873 FT_STRING, BASE_NONE,
7874 NULL((void*)0), 0x0,
7875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7876 {&hf_nmea0183_cbr_status,
7877 {"Sentence Status Flag", "nmea0183.cbr.status",
7878 FT_CHAR, BASE_NONE,
7879 VALS(sentence_status_vals)((0 ? (const struct _value_string*)0 : ((sentence_status_vals
))))
, 0x0,
7880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7881 {&hf_nmea0183_cur_data_set,
7882 {"Data Set Number (0 to 9)", "nmea0183.cur.dataset_num",
7883 FT_STRING, BASE_NONE,
7884 NULL((void*)0), 0x0,
7885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7886 {&hf_nmea0183_cur_depth,
7887 {"Current Depth (m)", "nmea0183.cur.depth",
7888 FT_STRING, BASE_NONE,
7889 NULL((void*)0), 0x0,
7890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7891 {&hf_nmea0183_cur_direction,
7892 {"Current Direction (degrees)", "nmea0183.cur.direction",
7893 FT_STRING, BASE_NONE,
7894 NULL((void*)0), 0x0,
7895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7896 {&hf_nmea0183_cur_direction_ref,
7897 {"Direction Reference in use", "nmea0183.cur.direction_ref",
7898 FT_CHAR, BASE_NONE,
7899 VALS(direction_reference)((0 ? (const struct _value_string*)0 : ((direction_reference)
)))
, 0x0,
7900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7901 {&hf_nmea0183_cur_heading,
7902 {"Heading", "nmea0183.cur.heading",
7903 FT_STRING, BASE_NONE,
7904 NULL((void*)0), 0x0,
7905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7906 {&hf_nmea0183_cur_heading_ref,
7907 {"Heading Reference in use", "nmea0183.cur.heading_ref",
7908 FT_CHAR, BASE_NONE,
7909 VALS(heading_reference)((0 ? (const struct _value_string*)0 : ((heading_reference)))
)
, 0x0,
7910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7911 {&hf_nmea0183_cur_layer,
7912 {"Layer Number", "nmea0183.cur.layer",
7913 FT_STRING, BASE_NONE,
7914 NULL((void*)0), 0x0,
7915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7916 {&hf_nmea0183_cur_ref_layer,
7917 {"Reference Layer Depth (m)", "nmea0183.cur.ref_layer",
7918 FT_STRING, BASE_NONE,
7919 NULL((void*)0), 0x0,
7920 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7921 {&hf_nmea0183_cur_speed,
7922 {"Current Speed (knots)", "nmea0183.cur.speed",
7923 FT_STRING, BASE_NONE,
7924 NULL((void*)0), 0x0,
7925 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7926 {&hf_nmea0183_cur_speed_ref,
7927 {"Speed Reference", "nmea0183.cur.speed_ref",
7928 FT_CHAR, BASE_NONE,
7929 VALS(speed_reference)((0 ? (const struct _value_string*)0 : ((speed_reference)))), 0x0,
7930 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7931 {&hf_nmea0183_cur_validity,
7932 {"Validity of the Data", "nmea0183.cur.validity",
7933 FT_CHAR, BASE_NONE,
7934 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
7935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7936 {&hf_nmea0183_dbt_fathoms,
7937 {"Water depth (fathoms)", "nmea0183.dbt.fathoms",
7938 FT_STRING, BASE_NONE,
7939 NULL((void*)0), 0x0,
7940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7941 {&hf_nmea0183_dbt_feet,
7942 {"Water depth (feet)", "nmea0183.dbt.feet",
7943 FT_STRING, BASE_NONE,
7944 NULL((void*)0), 0x0,
7945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7946 {&hf_nmea0183_dbt_meters,
7947 {"Water depth (meters)", "nmea0183.dbt.meters",
7948 FT_STRING, BASE_NONE,
7949 NULL((void*)0), 0x0,
7950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7951 {&hf_nmea0183_dcn_data_basis,
7952 {"Fix Data Basis", "nmea0183.dcn.basis",
7953 FT_CHAR, BASE_NONE,
7954 VALS(dcn_data_basis)((0 ? (const struct _value_string*)0 : ((dcn_data_basis)))), 0x0,
7955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7956 {&hf_nmea0183_dcn_dc_id,
7957 {"Decca Chain Identifier", "nmea0183.dcn.dcid",
7958 FT_STRING, BASE_NONE,
7959 NULL((void*)0), 0x0,
7960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7961 {&hf_nmea0183_dcn_glop,
7962 {"Green Line of Position (LOP)", "nmea0183.dcn.glop",
7963 FT_STRING, BASE_NONE,
7964 NULL((void*)0), 0x0,
7965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7966 {&hf_nmea0183_dcn_gnav,
7967 {"Green-line Navigation Use", "nmea0183.dcn.gnav",
7968 FT_CHAR, BASE_NONE,
7969 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
7970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7971 {&hf_nmea0183_dcn_gstatus,
7972 {"Status: Green-Master Line", "nmea0183.dcn.gstatus",
7973 FT_CHAR, BASE_NONE,
7974 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
7975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7976 {&hf_nmea0183_dcn_gz_id,
7977 {"Green Zone Identifier", "nmea0183.dcn.gzid",
7978 FT_STRING, BASE_NONE,
7979 NULL((void*)0), 0x0,
7980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7981 {&hf_nmea0183_dcn_plop,
7982 {"Purple Line of Position (LOP)", "nmea0183.dcn.plop",
7983 FT_STRING, BASE_NONE,
7984 NULL((void*)0), 0x0,
7985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7986 {&hf_nmea0183_dcn_pnav,
7987 {"Purple-line Navigation Use", "nmea0183.dcn.pnav",
7988 FT_CHAR, BASE_NONE,
7989 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
7990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7991 {&hf_nmea0183_dcn_pos_uncertainty,
7992 {"Position Uncertainty (nm)", "nmea0183.dcn.pos_uncertainty",
7993 FT_STRING, BASE_NONE,
7994 NULL((void*)0), 0x0,
7995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
7996 {&hf_nmea0183_dcn_pstatus,
7997 {"Status: Purple-Master Line", "nmea0183.dcn.pstatus",
7998 FT_CHAR, BASE_NONE,
7999 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
8000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8001 {&hf_nmea0183_dcn_pz_id,
8002 {"Purple Zone Identifier", "nmea0183.dcn.pzid",
8003 FT_STRING, BASE_NONE,
8004 NULL((void*)0), 0x0,
8005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8006 {&hf_nmea0183_dcn_rlop,
8007 {"Red Line of Position (LOP)", "nmea0183.dcn.rlop",
8008 FT_STRING, BASE_NONE,
8009 NULL((void*)0), 0x0,
8010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8011 {&hf_nmea0183_dcn_rnav,
8012 {"Red-line Navigation Use", "nmea0183.dcn.rnav",
8013 FT_CHAR, BASE_NONE,
8014 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
8015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8016 {&hf_nmea0183_dcn_rstatus,
8017 {"Status: Red-Master Line", "nmea0183.dcn.rstatus",
8018 FT_CHAR, BASE_NONE,
8019 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
8020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8021 {&hf_nmea0183_dcn_rz_id,
8022 {"Red Zone Identifier", "nmea0183.dcn.rzid",
8023 FT_STRING, BASE_NONE,
8024 NULL((void*)0), 0x0,
8025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8026 {&hf_nmea0183_ddc_brightness,
8027 {"Brightness Percentage", "nmea0183.ddc.brightness",
8028 FT_STRING, BASE_NONE,
8029 NULL((void*)0), 0x0,
8030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8031 {&hf_nmea0183_ddc_dimming,
8032 {"Display Dimming Preset", "nmea0183.ddc.dimming",
8033 FT_CHAR, BASE_NONE,
8034 VALS(dimming_palette_preset_vals)((0 ? (const struct _value_string*)0 : ((dimming_palette_preset_vals
))))
, 0x0,
8035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8036 {&hf_nmea0183_ddc_palette,
8037 {"Color Palette", "nmea0183.ddc.palette",
8038 FT_CHAR, BASE_NONE,
8039 VALS(dimming_palette_preset_vals)((0 ? (const struct _value_string*)0 : ((dimming_palette_preset_vals
))))
, 0x0,
8040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8041 {&hf_nmea0183_ddc_status,
8042 {"Sentence Status Flag", "nmea0183.ddc.status",
8043 FT_CHAR, BASE_NONE,
8044 VALS(sentence_status_vals)((0 ? (const struct _value_string*)0 : ((sentence_status_vals
))))
, 0x0,
8045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8046 {&hf_nmea0183_dor_door_num,
8047 {"Door Number", "nmea0183.dor.number",
8048 FT_STRING, BASE_NONE,
8049 NULL((void*)0), 0x0,
8050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8051 {&hf_nmea0183_dor_first_indic,
8052 {"First Division Indicator", "nmea0183.dor.indicator_1",
8053 FT_STRING, BASE_NONE,
8054 NULL((void*)0), 0x0,
8055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8056 {&hf_nmea0183_dor_msg_type,
8057 {"Message Type", "nmea0183.dor.msg_type",
8058 FT_CHAR, BASE_NONE,
8059 VALS(dor_msg_type_vals)((0 ? (const struct _value_string*)0 : ((dor_msg_type_vals)))
)
, 0x0,
8060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8061 {&hf_nmea0183_dor_open_count,
8062 {"Open and/or Faulty Door Count", "nmea0183.dor.open_count",
8063 FT_STRING, BASE_NONE,
8064 NULL((void*)0), 0x0,
8065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8066 {&hf_nmea0183_dor_second_indic,
8067 {"Second Division Indicator", "nmea0183.dor.indicator_2",
8068 FT_STRING, BASE_NONE,
8069 NULL((void*)0), 0x0,
8070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8071 {&hf_nmea0183_dor_setting,
8072 {"Watertight Door Switch Setting", "nmea0183.dor.setting",
8073 FT_CHAR, BASE_NONE,
8074 VALS(watertight_switch_setting_vals)((0 ? (const struct _value_string*)0 : ((watertight_switch_setting_vals
))))
, 0x0,
8075 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8076 {&hf_nmea0183_dor_status,
8077 {"Door Status", "nmea0183.dor.status",
8078 FT_CHAR, BASE_NONE,
8079 VALS(door_status_vals)((0 ? (const struct _value_string*)0 : ((door_status_vals)))), 0x0,
8080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8081 {&hf_nmea0183_dor_system_type,
8082 {"Type of Door Monitoring System", "nmea0183.dor.sys_type",
8083 FT_STRING, BASE_NONE,
8084 NULL((void*)0), 0x0,
8085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8086 {&hf_nmea0183_dor_text,
8087 {"Message Description Text", "nmea0183.dor.text",
8088 FT_STRING, BASE_NONE,
8089 NULL((void*)0), 0x0,
8090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8091 {&hf_nmea0183_dor_time,
8092 {"Event Time (UTC)", "nmea0183.dor.time",
8093 FT_STRING, BASE_NONE,
8094 NULL((void*)0), 0x0,
8095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8096 {&hf_nmea0183_dpt_depth,
8097 {"Water depth", "nmea0183.dpt_depth",
8098 FT_STRING, BASE_NONE,
8099 NULL((void*)0), 0x0,
8100 "NMEA 0183 DPT Water depth relative to transducer", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8101 {&hf_nmea0183_dpt_max_range,
8102 {"Maximum range", "nmea0183.dpt_max_range",
8103 FT_STRING, BASE_NONE,
8104 NULL((void*)0), 0x0,
8105 "NMEA 0183 DPT Maximum range scale in use (NMEA 3.0 and above)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8106 {&hf_nmea0183_dpt_offset,
8107 {"Offset", "nmea0183.dpt_offset",
8108 FT_STRING, BASE_NONE,
8109 NULL((void*)0), 0x0,
8110 "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)}},
8111 {&hf_nmea0183_dsc_ack,
8112 {"Acknowledgement", "nmea0183.dsc.ack",
8113 FT_CHAR, BASE_NONE,
8114 VALS(dsc_ack_vals)((0 ? (const struct _value_string*)0 : ((dsc_ack_vals)))), 0x0,
8115 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8116 {&hf_nmea0183_dsc_address,
8117 {"Address", "nmea0183.dsc.address",
8118 FT_STRING, BASE_NONE,
8119 NULL((void*)0), 0x0,
8120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8121 {&hf_nmea0183_dsc_category,
8122 {"Category", "nmea0183.dsc.category",
8123 FT_STRING, BASE_NONE,
8124 NULL((void*)0), 0x0,
8125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8126 {&hf_nmea0183_dsc_comm_type,
8127 {"Type of Communication", "nmea0183.dsc.comm_type",
8128 FT_STRING, BASE_NONE,
8129 NULL((void*)0), 0x0,
8130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8131 {&hf_nmea0183_dsc_expansion,
8132 {"Expansion Indicator", "nmea0183.dsc.expansion",
8133 FT_STRING, BASE_NONE,
8134 NULL((void*)0), 0x0,
8135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8136 {&hf_nmea0183_dsc_first_tcmd,
8137 {"First Telecommand", "nmea0183.dsc.first_tcmd",
8138 FT_STRING, BASE_NONE,
8139 NULL((void*)0), 0x0,
8140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8141 {&hf_nmea0183_dsc_format,
8142 {"Format Specifier", "nmea0183.dsc.format",
8143 FT_STRING, BASE_NONE,
8144 NULL((void*)0), 0x0,
8145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8146 {&hf_nmea0183_dsc_mmsi,
8147 {"MMSI of Ship in Distress", "nmea0183.dsc.mmsi",
8148 FT_STRING, BASE_NONE,
8149 NULL((void*)0), 0x0,
8150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8151 {&hf_nmea0183_dsc_nature_distress,
8152 {"Nature of Distress", "nmea0183.dsc.distress",
8153 FT_STRING, BASE_NONE,
8154 NULL((void*)0), 0x0,
8155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8156 {&hf_nmea0183_dsc_position,
8157 {"Position", "nmea0183.dsc.position",
8158 FT_STRING, BASE_NONE,
8159 NULL((void*)0), 0x0,
8160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8161 {&hf_nmea0183_dsc_time,
8162 {"Time (UTC)", "nmea0183.dsc.time",
8163 FT_STRING, BASE_NONE,
8164 NULL((void*)0), 0x0,
8165 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8166 {&hf_nmea0183_dse_code,
8167 {"Code", "nmea0183.dse.code",
8168 FT_STRING, BASE_NONE,
8169 NULL((void*)0), 0x0,
8170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8171 {&hf_nmea0183_dse_data,
8172 {"Data", "nmea0183.dse.data",
8173 FT_STRING, BASE_NONE,
8174 NULL((void*)0), 0x0,
8175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8176 {&hf_nmea0183_dse_flag,
8177 {"Query/Reply Flag", "nmea0183.dse.flag",
8178 FT_CHAR, BASE_NONE,
8179 VALS(dse_flag_vals)((0 ? (const struct _value_string*)0 : ((dse_flag_vals)))), 0x0,
8180 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8181 {&hf_nmea0183_dse_mmsi,
8182 {"Vessel MMSI", "nmea0183.dse.mmsi",
8183 FT_STRING, BASE_NONE,
8184 NULL((void*)0), 0x0,
8185 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8186 {&hf_nmea0183_dse_sentence_number,
8187 {"Sentence Number", "nmea0183.dse.sentence_num",
8188 FT_STRING, BASE_NONE,
8189 NULL((void*)0), 0x0,
8190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8191 {&hf_nmea0183_dse_total_sentences,
8192 {"Total Number of Sentences", "nmea0183.dse.tot_sentences",
8193 FT_STRING, BASE_NONE,
8194 NULL((void*)0), 0x0,
8195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8196 {&hf_nmea0183_dsi_course,
8197 {"Vessel Course (degrees True)", "nmea0183.dsi.course",
8198 FT_STRING, BASE_NONE,
8199 NULL((void*)0), 0x0,
8200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8201 {&hf_nmea0183_dsi_expansion,
8202 {"Expansion Indicator", "nmea0183.dsi.expansion",
8203 FT_STRING, BASE_NONE,
8204 NULL((void*)0), 0x0,
8205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8206 {&hf_nmea0183_dsi_geo_area,
8207 {"Geographic Area (0.01 minutes)", "nmea0183.dsi.geo",
8208 FT_STRING, BASE_NONE,
8209 NULL((void*)0), 0x0,
8210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8211 {&hf_nmea0183_dsi_info,
8212 {"Information", "nmea0183.dsi.info",
8213 FT_STRING, BASE_NONE,
8214 NULL((void*)0), 0x0,
8215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8216 {&hf_nmea0183_dsi_mmsi,
8217 {"Vessel MMSI", "nmea0183.dsi.mmsi",
8218 FT_STRING, BASE_NONE,
8219 NULL((void*)0), 0x0,
8220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8221 {&hf_nmea0183_dsi_sentence_number,
8222 {"Sentence Number", "nmea0183.dsi.sentence_num",
8223 FT_STRING, BASE_NONE,
8224 NULL((void*)0), 0x0,
8225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8226 {&hf_nmea0183_dsi_symbol,
8227 {"Symbol", "nmea0183.dsi.symbol",
8228 FT_STRING, BASE_NONE,
8229 NULL((void*)0), 0x0,
8230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8231 {&hf_nmea0183_dsi_total_sentences,
8232 {"Total Number of Sentences", "nmea0183.dsi.tot_sentences",
8233 FT_STRING, BASE_NONE,
8234 NULL((void*)0), 0x0,
8235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8236 {&hf_nmea0183_dsi_type,
8237 {"Vessel Type", "nmea0183.dsi.type",
8238 FT_STRING, BASE_NONE,
8239 NULL((void*)0), 0x0,
8240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8241 {&hf_nmea0183_dsr_expansion,
8242 {"Expansion Indicator", "nmea0183.dsr.expansion",
8243 FT_STRING, BASE_NONE,
8244 NULL((void*)0), 0x0,
8245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8246 {&hf_nmea0183_dsr_info,
8247 {"Information", "nmea0183.dsr.info",
8248 FT_STRING, BASE_NONE,
8249 NULL((void*)0), 0x0,
8250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8251 {&hf_nmea0183_dsr_mmsi,
8252 {"Vessel MMSI", "nmea0183.dsr.mmsi",
8253 FT_STRING, BASE_NONE,
8254 NULL((void*)0), 0x0,
8255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8256 {&hf_nmea0183_dsr_sentence_number,
8257 {"Sentence Number", "nmea0183.dsr.sentence_num",
8258 FT_STRING, BASE_NONE,
8259 NULL((void*)0), 0x0,
8260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8261 {&hf_nmea0183_dsr_symbol,
8262 {"Symbol", "nmea0183.dsr.symbol",
8263 FT_STRING, BASE_NONE,
8264 NULL((void*)0), 0x0,
8265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8266 {&hf_nmea0183_dsr_total_sentences,
8267 {"Total Number of Sentences", "nmea0183.dsr.tot_sentences",
8268 FT_STRING, BASE_NONE,
8269 NULL((void*)0), 0x0,
8270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8271 {&hf_nmea0183_dtm_alt_offset,
8272 {"Altitude Offset (m)", "nmea0183.dtm.alt_offset",
8273 FT_STRING, BASE_NONE,
8274 NULL((void*)0), 0x0,
8275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8276 {&hf_nmea0183_dtm_datum,
8277 {"Datum Code", "nmea0183.dtm.datum",
8278 FT_STRING, BASE_NONE,
8279 NULL((void*)0), 0x0,
8280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8281 {&hf_nmea0183_dtm_datum_subdiv,
8282 {"Datum Subdivision Code", "nmea0183.dtm.datum_sub",
8283 FT_STRING, BASE_NONE,
8284 NULL((void*)0), 0x0,
8285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8286 {&hf_nmea0183_dtm_lat_offset,
8287 {"Latitude Offset (minutes)", "nmea0183.dtm.lat_offset",
8288 FT_STRING, BASE_NONE,
8289 NULL((void*)0), 0x0,
8290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8291 {&hf_nmea0183_dtm_lon_offset,
8292 {"Longitude Offset (minutes)", "nmea0183.dtm.lon_offset",
8293 FT_STRING, BASE_NONE,
8294 NULL((void*)0), 0x0,
8295 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8296 {&hf_nmea0183_dtm_ref_datum,
8297 {"Reference Datum Code", "nmea0183.dtm.ref_datum",
8298 FT_STRING, BASE_NONE,
8299 NULL((void*)0), 0x0,
8300 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8301 {&hf_nmea0183_etl_msg_type,
8302 {"Message Type", "nmea0183.etl.msg_type",
8303 FT_CHAR, BASE_NONE,
8304 VALS(etl_message_type_vals)((0 ? (const struct _value_string*)0 : ((etl_message_type_vals
))))
, 0x0,
8305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8306 {&hf_nmea0183_etl_num_eng_shaft,
8307 {"Number of Engine or Propeller Shaft", "nmea0183.etl.engshaft_num",
8308 FT_CHAR, BASE_NONE,
8309 VALS(revolutions_number_vals)((0 ? (const struct _value_string*)0 : ((revolutions_number_vals
))))
, 0x0,
8310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8311 {&hf_nmea0183_etl_opind,
8312 {"Operating Location Indicator", "nmea0183.etl.posind_op",
8313 FT_CHAR, BASE_NONE,
8314 VALS(oplocation_indicator_vals)((0 ? (const struct _value_string*)0 : ((oplocation_indicator_vals
))))
, 0x0,
8315 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8316 {&hf_nmea0183_etl_posind_engine,
8317 {"Position Indicator of Engine Telegraph", "nmea0183.etl.posind_eng",
8318 FT_UINT16, BASE_DEC,
8319 VALS(indicators_for_engine_telegraph)((0 ? (const struct _value_string*)0 : ((indicators_for_engine_telegraph
))))
, 0x0,
8320 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8321 {&hf_nmea0183_etl_posind_sub,
8322 {"Position Indication of Sub Telegraph", "nmea0183.etl.posind_sub",
8323 FT_UINT16, BASE_DEC,
8324 VALS(indicators_for_sub_telegraph)((0 ? (const struct _value_string*)0 : ((indicators_for_sub_telegraph
))))
, 0x0,
8325 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8326 {&hf_nmea0183_etl_time,
8327 {"Event Time (UTC)", "nmea0183.etl.time",
8328 FT_STRING, BASE_NONE,
8329 NULL((void*)0), 0x0,
8330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8331 {&hf_nmea0183_fsi_mode,
8332 {"Mode of Operation", "nmea0183.fsi.mode",
8333 FT_CHAR, BASE_NONE,
8334 VALS(fsi_mode_vals)((0 ? (const struct _value_string*)0 : ((fsi_mode_vals)))), 0x0,
8335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8336 {&hf_nmea0183_fsi_power,
8337 {"Reference Datum Code", "nmea0183.fsi.power",
8338 FT_CHAR, BASE_NONE,
8339 VALS(fsi_power_vals)((0 ? (const struct _value_string*)0 : ((fsi_power_vals)))), 0x0,
8340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8341 {&hf_nmea0183_fsi_recv_freq,
8342 {"Receive Frequency (100Hz Increments)", "nmea0183.fsi.recv_freq",
8343 FT_STRING, BASE_NONE,
8344 NULL((void*)0), 0x0,
8345 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8346 {&hf_nmea0183_fsi_xmit_freq,
8347 {"Transmit Frequency (100Hz Increments)", "nmea0183.fsi.xmit_freq",
8348 FT_STRING, BASE_NONE,
8349 NULL((void*)0), 0x0,
8350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8351 {&hf_nmea0183_gbs_alt_err,
8352 {"Expected Error in Altitude (m)", "nmea0183.gbs.alt_err",
8353 FT_STRING, BASE_NONE,
8354 NULL((void*)0), 0x0,
8355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8356 {&hf_nmea0183_gbs_est_bias,
8357 {"Estimate of Bias (m) on Most Likely Failed Satellite", "nmea0183.gbs.est_bias",
8358 FT_STRING, BASE_NONE,
8359 NULL((void*)0), 0x0,
8360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8361 {&hf_nmea0183_gbs_lat_err,
8362 {"Expected Error in Latitude (m)", "nmea0183.gbs.lat_err",
8363 FT_STRING, BASE_NONE,
8364 NULL((void*)0), 0x0,
8365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8366 {&hf_nmea0183_gbs_long_err,
8367 {"Expected Error in Longitude (m)", "nmea0183.gbs.long_err",
8368 FT_STRING, BASE_NONE,
8369 NULL((void*)0), 0x0,
8370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8371 {&hf_nmea0183_gbs_prob_miss,
8372 {"Prob. of Missed Detection for Most Likely Failed Satellite", "nmea0183.gbs.prob_miss",
8373 FT_STRING, BASE_NONE,
8374 NULL((void*)0), 0x0,
8375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8376 {&hf_nmea0183_gbs_sat_id,
8377 {"ID Number of Most Likely Failed Satellite (PRN No.)", "nmea0183.gbs.sat_id",
8378 FT_STRING, BASE_NONE,
8379 NULL((void*)0), 0x0,
8380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8381 {&hf_nmea0183_gbs_sat_type,
8382 {"Satellite Type", "nmea0183.gbs.sat_type",
8383 FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100,
8384 RVALS(sat_prn_type)((0 ? (const struct _range_string*)0 : ((sat_prn_type)))), 0x0,
8385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8386 {&hf_nmea0183_gbs_std_dev,
8387 {"Standard Deviation of Bias Estimate", "nmea0183.gbs.std_dev",
8388 FT_STRING, BASE_NONE,
8389 NULL((void*)0), 0x0,
8390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8391 {&hf_nmea0183_gbs_utc,
8392 {"UTC time of the GGA or GNS fix", "nmea0183.gbs.utc",
8393 FT_STRING, BASE_NONE,
8394 NULL((void*)0), 0x0,
8395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8396 {&hf_nmea0183_gga_age_dgps,
8397 {"Age of differential GPS", "nmea0183.gga_age_dgps",
8398 FT_STRING, BASE_NONE,
8399 NULL((void*)0), 0x0,
8400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8401 {&hf_nmea0183_gga_altitude,
8402 {"Altitude", "nmea0183.gga_altitude",
8403 FT_STRING, BASE_NONE,
8404 NULL((void*)0), 0x0,
8405 "NMEA 0183 GGA Antenna Altitude above mean-sea-level", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8406 {&hf_nmea0183_gga_altitude_unit,
8407 {"Altitude unit", "nmea0183.gga_altitude_unit",
8408 FT_STRING, BASE_NONE,
8409 NULL((void*)0), 0x0,
8410 "NMEA 0183 GGA Units of antenna altitude", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8411 {&hf_nmea0183_gga_dgps_station,
8412 {"Differential GPS station id", "nmea0183.gga_dgps_station",
8413 FT_STRING, BASE_NONE,
8414 NULL((void*)0), 0x0,
8415 "NMEA 0183 GGA Differential reference station ID", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8416 {&hf_nmea0183_gga_geoidal_separation,
8417 {"Geoidal separation", "nmea0183.gga_geoidal_separation",
8418 FT_STRING, BASE_NONE,
8419 NULL((void*)0), 0x0,
8420 "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)}},
8421 {&hf_nmea0183_gga_geoidal_separation_unit,
8422 {"Geoidal separation unit", "nmea0183.gga_geoidal_separation_unit",
8423 FT_STRING, BASE_NONE,
8424 NULL((void*)0), 0x0,
8425 "NMEA 0183 GGA Units of geoidal separation, meters", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8426 {&hf_nmea0183_gga_horizontal_dilution,
8427 {"Horizontal Dilution", "nmea0183.gga_horizontal_dilution",
8428 FT_STRING, BASE_NONE,
8429 NULL((void*)0), 0x0,
8430 "NMEA 0183 GGA Horizontal Dilution of precision", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8431 {&hf_nmea0183_gga_latitude,
8432 {"Latitude", "nmea0183.gga_latitude",
8433 FT_NONE, BASE_NONE,
8434 NULL((void*)0), 0x0,
8435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8436 {&hf_nmea0183_gga_latitude_degree,
8437 {"Degree", "nmea0183.gga_latitude_degree",
8438 FT_STRING, BASE_NONE,
8439 NULL((void*)0), 0x0,
8440 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8441 {&hf_nmea0183_gga_latitude_direction,
8442 {"Direction", "nmea0183.gga_latitude_direction",
8443 FT_STRING, BASE_NONE,
8444 NULL((void*)0), 0x0,
8445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8446 {&hf_nmea0183_gga_latitude_minute,
8447 {"Minute", "nmea0183.gga_latitude_minute",
8448 FT_STRING, BASE_NONE,
8449 NULL((void*)0), 0x0,
8450 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8451 {&hf_nmea0183_gga_longitude,
8452 {"Longitude", "nmea0183.gga_longitude",
8453 FT_NONE, BASE_NONE,
8454 NULL((void*)0), 0x0,
8455 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8456 {&hf_nmea0183_gga_longitude_degree,
8457 {"Degree", "nmea0183.gga_longitude_degree",
8458 FT_STRING, BASE_NONE,
8459 NULL((void*)0), 0x0,
8460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8461 {&hf_nmea0183_gga_longitude_direction,
8462 {"Direction", "nmea0183.gga_longitude_direction",
8463 FT_STRING, BASE_NONE,
8464 NULL((void*)0), 0x0,
8465 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8466 {&hf_nmea0183_gga_longitude_minute,
8467 {"Minute", "nmea0183.gga_longitude_minute",
8468 FT_STRING, BASE_NONE,
8469 NULL((void*)0), 0x0,
8470 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8471 {&hf_nmea0183_gga_number_satellites,
8472 {"Number of satellites", "nmea0183.gga_number_satellites",
8473 FT_STRING, BASE_NONE,
8474 NULL((void*)0), 0x0,
8475 "NMEA 0183 GGA Number of satellites in use", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8476 {&hf_nmea0183_gga_quality,
8477 {"Quality indicator", "nmea0183.gga_quality",
8478 FT_STRING, BASE_NONE,
8479 NULL((void*)0), 0x0,
8480 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8481 {&hf_nmea0183_gga_time,
8482 {"UTC Time of position", "nmea0183.gga_time",
8483 FT_NONE, BASE_NONE,
8484 NULL((void*)0), 0x0,
8485 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8486 {&hf_nmea0183_gga_time_hour,
8487 {"Hour", "nmea0183.gga_time_hour",
8488 FT_STRING, BASE_NONE,
8489 NULL((void*)0), 0x0,
8490 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8491 {&hf_nmea0183_gga_time_minute,
8492 {"Minute", "nmea0183.gga_time_minute",
8493 FT_STRING, BASE_NONE,
8494 NULL((void*)0), 0x0,
8495 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8496 {&hf_nmea0183_gga_time_second,
8497 {"Second", "nmea0183.gga_time_second",
8498 FT_STRING, BASE_NONE,
8499 NULL((void*)0), 0x0,
8500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8501 {&hf_nmea0183_glc_gri,
8502 {"Loran-C GRI (tens of microseconds)", "nmea0183.glc.gri",
8503 FT_STRING, BASE_NONE,
8504 NULL((void*)0), 0x0,
8505 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8506 {&hf_nmea0183_glc_master_toa,
8507 {"Master TOA (microseconds)", "nmea0183.glc.master",
8508 FT_STRING, BASE_NONE,
8509 NULL((void*)0), 0x0,
8510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8511 {&hf_nmea0183_glc_sig_status,
8512 {"Signal Status", "nmea0183.glc.status",
8513 FT_CHAR, BASE_NONE,
8514 VALS(glc_sig_status)((0 ? (const struct _value_string*)0 : ((glc_sig_status)))), 0x0,
8515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8516 {&hf_nmea0183_glc_td1,
8517 {"Time Difference #1 (microseconds)", "nmea0183.glc.td1",
8518 FT_STRING, BASE_NONE,
8519 NULL((void*)0), 0x0,
8520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8521 {&hf_nmea0183_glc_td2,
8522 {"Time Difference #2 (microseconds)", "nmea0183.glc.td2",
8523 FT_STRING, BASE_NONE,
8524 NULL((void*)0), 0x0,
8525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8526 {&hf_nmea0183_glc_td3,
8527 {"Time Difference #3 (microseconds)", "nmea0183.glc.td3",
8528 FT_STRING, BASE_NONE,
8529 NULL((void*)0), 0x0,
8530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8531 {&hf_nmea0183_glc_td4,
8532 {"Time Difference #4 (microseconds)", "nmea0183.glc.td4",
8533 FT_STRING, BASE_NONE,
8534 NULL((void*)0), 0x0,
8535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8536 {&hf_nmea0183_glc_td5,
8537 {"Time Difference #5 (microseconds)", "nmea0183.glc.td5",
8538 FT_STRING, BASE_NONE,
8539 NULL((void*)0), 0x0,
8540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8541 {&hf_nmea0183_gll_latitude,
8542 {"Latitude", "nmea0183.gll_latitude",
8543 FT_NONE, BASE_NONE,
8544 NULL((void*)0), 0x0,
8545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8546 {&hf_nmea0183_gll_latitude_degree,
8547 {"Degree", "nmea0183.gll_latitude_degree",
8548 FT_STRING, BASE_NONE,
8549 NULL((void*)0), 0x0,
8550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8551 {&hf_nmea0183_gll_latitude_direction,
8552 {"Direction", "nmea0183.gll_latitude_direction",
8553 FT_STRING, BASE_NONE,
8554 NULL((void*)0), 0x0,
8555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8556 {&hf_nmea0183_gll_latitude_minute,
8557 {"Minute", "nmea0183.gll_latitude_minute",
8558 FT_STRING, BASE_NONE,
8559 NULL((void*)0), 0x0,
8560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8561 {&hf_nmea0183_gll_longitude,
8562 {"Longitude", "nmea0183.gll_longitude",
8563 FT_NONE, BASE_NONE,
8564 NULL((void*)0), 0x0,
8565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8566 {&hf_nmea0183_gll_longitude_degree,
8567 {"Degree", "nmea0183.gll_longitude_degree",
8568 FT_STRING, BASE_NONE,
8569 NULL((void*)0), 0x0,
8570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8571 {&hf_nmea0183_gll_longitude_direction,
8572 {"Direction", "nmea0183.gll_longitude_direction",
8573 FT_STRING, BASE_NONE,
8574 NULL((void*)0), 0x0,
8575 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8576 {&hf_nmea0183_gll_longitude_minute,
8577 {"Minute", "nmea0183.gll_longitude_minute",
8578 FT_STRING, BASE_NONE,
8579 NULL((void*)0), 0x0,
8580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8581 {&hf_nmea0183_gll_mode,
8582 {"FAA mode", "nmea0183.gll_mode",
8583 FT_STRING, BASE_NONE,
8584 NULL((void*)0), 0x0,
8585 "NMEA 0183 GLL FAA mode indicator (NMEA 2.3 and later)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8586 {&hf_nmea0183_gll_status,
8587 {"Status", "nmea0183.gll_status",
8588 FT_STRING, BASE_NONE,
8589 NULL((void*)0), 0x0,
8590 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8591 {&hf_nmea0183_gll_time,
8592 {"UTC Time of position", "nmea0183.gll_time",
8593 FT_NONE, BASE_NONE,
8594 NULL((void*)0), 0x0,
8595 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8596 {&hf_nmea0183_gll_time_hour,
8597 {"Hour", "nmea0183.gll_time_hour",
8598 FT_STRING, BASE_NONE,
8599 NULL((void*)0), 0x0,
8600 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8601 {&hf_nmea0183_gll_time_minute,
8602 {"Minute", "nmea0183.gll_time_minute",
8603 FT_STRING, BASE_NONE,
8604 NULL((void*)0), 0x0,
8605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8606 {&hf_nmea0183_gll_time_second,
8607 {"Second", "nmea0183.gll_time_second",
8608 FT_STRING, BASE_NONE,
8609 NULL((void*)0), 0x0,
8610 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8611 {&hf_nmea0183_gmp_ant_alt,
8612 {"Antenna Altitude (m) - MSL (geoid)", "nmea0183.gmp.ant_alt",
8613 FT_STRING, BASE_NONE,
8614 NULL((void*)0), 0x0,
8615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8616 {&hf_nmea0183_gmp_data_age,
8617 {"Age of Differential Data", "nmea0183.gmp.data_age",
8618 FT_STRING, BASE_NONE,
8619 NULL((void*)0), 0x0,
8620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8621 {&hf_nmea0183_gmp_diff_ref_id,
8622 {"Differential Reference Station ID", "nmea0183.gmp.diff_ref_id",
8623 FT_STRING, BASE_NONE,
8624 NULL((void*)0), 0x0,
8625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8626 {&hf_nmea0183_gmp_geoid_sep,
8627 {"Geoidal Separation (m)", "nmea0183.gmp.geoid_sep",
8628 FT_STRING, BASE_NONE,
8629 NULL((void*)0), 0x0,
8630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8631 {&hf_nmea0183_gmp_hdop,
8632 {"Horizontal Dilution of Precision (DOP)", "nmea0183.gmp.hdop",
8633 FT_STRING, BASE_NONE,
8634 NULL((void*)0), 0x0,
8635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8636 {&hf_nmea0183_gmp_mode_glonass,
8637 {"GLONASS Mode Indicator", "nmea0183.gmp.mode_glonass",
8638 FT_CHAR, BASE_NONE,
8639 VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals)
)))
, 0x0,
8640 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8641 {&hf_nmea0183_gmp_mode_gps,
8642 {"GPS Mode Indicator", "nmea0183.gmp.mode_gps",
8643 FT_CHAR, BASE_NONE,
8644 VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals)
)))
, 0x0,
8645 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8646 {&hf_nmea0183_gmp_mode_other,
8647 {"Other Satellite System Mode Indicator", "nmea0183.gmp.mode_other",
8648 FT_CHAR, BASE_NONE,
8649 VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals)
)))
, 0x0,
8650 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8651 {&hf_nmea0183_gmp_mode_string,
8652 {"Mode Indicator String", "nmea0183.gmp.mode_string",
8653 FT_STRING, BASE_NONE,
8654 NULL((void*)0), 0x0,
8655 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8656 {&hf_nmea0183_gmp_projection,
8657 {"Map Projection Identification", "nmea0183.gmp.projection",
8658 FT_STRING, BASE_NONE,
8659 NULL((void*)0), 0x0,
8660 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8661 {&hf_nmea0183_gmp_tot_sats,
8662 {"Total Number of Satellites in use (00-99)", "nmea0183.gmp.tot_sats",
8663 FT_STRING, BASE_NONE,
8664 NULL((void*)0), 0x0,
8665 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8666 {&hf_nmea0183_gmp_utc,
8667 {"UTC of Position", "nmea0183.gmp.utc",
8668 FT_STRING, BASE_NONE,
8669 NULL((void*)0), 0x0,
8670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8671 {&hf_nmea0183_gmp_x_comp,
8672 {"X (Northern) Component of Grid (or local) Coordinates", "nmea0183.gmp.x_comp",
8673 FT_STRING, BASE_NONE,
8674 NULL((void*)0), 0x0,
8675 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8676 {&hf_nmea0183_gmp_y_comp,
8677 {"Y (Eastern) Component of Grid (or local) Coordinates", "nmea0183.gmp.y_comp",
8678 FT_STRING, BASE_NONE,
8679 NULL((void*)0), 0x0,
8680 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8681 {&hf_nmea0183_gmp_zone,
8682 {"Map Zone", "nmea0183.gmp.zone",
8683 FT_STRING, BASE_NONE,
8684 NULL((void*)0), 0x0,
8685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8686 {&hf_nmea0183_gns_ant_alt,
8687 {"Antenna Altitude (m) - MSL (geoid)", "nmea0183.gns.ant_alt",
8688 FT_STRING, BASE_NONE,
8689 NULL((void*)0), 0x0,
8690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8691 {&hf_nmea0183_gns_data_age,
8692 {"Age of Differential Data", "nmea0183.gns.data_age",
8693 FT_STRING, BASE_NONE,
8694 NULL((void*)0), 0x0,
8695 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8696 {&hf_nmea0183_gns_diff_ref_id,
8697 {"Differential Reference Station ID", "nmea0183.gns.diff_ref_id",
8698 FT_STRING, BASE_NONE,
8699 NULL((void*)0), 0x0,
8700 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8701 {&hf_nmea0183_gns_geoid_sep,
8702 {"Geoidal Separation (m)", "nmea0183.gns.geoid_sep",
8703 FT_STRING, BASE_NONE,
8704 NULL((void*)0), 0x0,
8705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8706 {&hf_nmea0183_gns_hdop,
8707 {"Horizontal Dilution of Precision (DOP)", "nmea0183.gns.hdop",
8708 FT_STRING, BASE_NONE,
8709 NULL((void*)0), 0x0,
8710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8711 {&hf_nmea0183_gns_latitude,
8712 {"Latitude", "nmea0183.gns.latitude",
8713 FT_FLOAT, BASE_NONE,
8714 NULL((void*)0), 0x0,
8715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8716 {&hf_nmea0183_gns_longitude,
8717 {"Longitude", "nmea0183.gns.longitude",
8718 FT_FLOAT, BASE_NONE,
8719 NULL((void*)0), 0x0,
8720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8721 {&hf_nmea0183_gns_mode_glonass,
8722 {"GLONASS Mode Indicator", "nmea0183.gns.mode_glonass",
8723 FT_CHAR, BASE_NONE,
8724 VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals)
)))
, 0x0,
8725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8726 {&hf_nmea0183_gns_mode_gps,
8727 {"GPS Mode Indicator", "nmea0183.gns.mode_gps",
8728 FT_CHAR, BASE_NONE,
8729 VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals)
)))
, 0x0,
8730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8731 {&hf_nmea0183_gns_mode_other,
8732 {"Other Satellite System Mode Indicator", "nmea0183.gns.mode_other",
8733 FT_CHAR, BASE_NONE,
8734 VALS(satellite_mode_vals)((0 ? (const struct _value_string*)0 : ((satellite_mode_vals)
)))
, 0x0,
8735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8736 {&hf_nmea0183_gns_mode_string,
8737 {"Mode Indicator String", "nmea0183.gns.mode_string",
8738 FT_STRING, BASE_NONE,
8739 NULL((void*)0), 0x0,
8740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8741 {&hf_nmea0183_gns_tot_sats,
8742 {"Total Number of Satellites in use (00-99)", "nmea0183.gns.tot_sats",
8743 FT_STRING, BASE_NONE,
8744 NULL((void*)0), 0x0,
8745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8746 {&hf_nmea0183_gns_utc,
8747 {"UTC of Position", "nmea0183.gns.utc",
8748 FT_STRING, BASE_NONE,
8749 NULL((void*)0), 0x0,
8750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8751 {&hf_nmea0183_grs_mode,
8752 {"Mode (Residuals)", "nmea0183.grs.mode",
8753 FT_CHAR, BASE_NONE,
8754 VALS(grs_mode_vals)((0 ? (const struct _value_string*)0 : ((grs_mode_vals)))), 0x0,
8755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8756 {&hf_nmea0183_grs_range_resid,
8757 {"Range Residual (m)", "nmea0183.grs.residual",
8758 FT_STRING, BASE_NONE,
8759 NULL((void*)0), 0x0,
8760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8761 {&hf_nmea0183_grs_utc,
8762 {"UTC time of the associated GGA/GNS fix", "nmea0183.grs.utc",
8763 FT_STRING, BASE_NONE,
8764 NULL((void*)0), 0x0,
8765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8766 {&hf_nmea0183_gsa_fix_mode,
8767 {"Fix Mode", "nmea0183.gsa.fixmode",
8768 FT_CHAR, BASE_NONE,
8769 VALS(gsa_fix_mode)((0 ? (const struct _value_string*)0 : ((gsa_fix_mode)))), 0x0,
8770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8771 {&hf_nmea0183_gsa_hdop,
8772 {"Horizontal Dilution of Precision (HDOP)", "nmea0183.gsa.hdop",
8773 FT_STRING, BASE_NONE,
8774 NULL((void*)0), 0x0,
8775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8776 {&hf_nmea0183_gsa_op_mode,
8777 {"Operation Mode", "nmea0183.gsa.opmode",
8778 FT_CHAR, BASE_NONE,
8779 VALS(gsa_op_mode)((0 ? (const struct _value_string*)0 : ((gsa_op_mode)))), 0x0,
8780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8781 {&hf_nmea0183_gsa_pdop,
8782 {"Position Dilution of Precision (PDOP)", "nmea0183.gsa.pdop",
8783 FT_STRING, BASE_NONE,
8784 NULL((void*)0), 0x0,
8785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8786 {&hf_nmea0183_gsa_sat_id,
8787 {"Satellite ID", "nmea0183.gsa.sat_id",
8788 FT_STRING, BASE_NONE,
8789 NULL((void*)0), 0x0,
8790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8791 {&hf_nmea0183_gsa_sat_type,
8792 {"Satellite Type", "nmea0183.gsa.sat_type",
8793 FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100,
8794 RVALS(sat_prn_type)((0 ? (const struct _range_string*)0 : ((sat_prn_type)))), 0x0,
8795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8796 {&hf_nmea0183_gsa_vdop,
8797 {"Vertical Dilution of Precision (VDOP)", "nmea0183.gsa.vdop",
8798 FT_STRING, BASE_NONE,
8799 NULL((void*)0), 0x0,
8800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8801 {&hf_nmea0183_gst_altitude_sd,
8802 {"Standard deviation of altitude error", "nmea0183.gst_sd_altitude",
8803 FT_STRING, BASE_NONE,
8804 NULL((void*)0), 0x0,
8805 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8806 {&hf_nmea0183_gst_ellipse_major_sd,
8807 {"Standard deviation of semi-major axis of error", "nmea0183.gst_ellipse_major_sd",
8808 FT_STRING, BASE_NONE,
8809 NULL((void*)0), 0x0,
8810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8811 {&hf_nmea0183_gst_ellipse_minor_sd,
8812 {"Standard deviation of semi-minor axis of error ellipse", "nmea0183.gst_ellipse_minor_sd",
8813 FT_STRING, BASE_NONE,
8814 NULL((void*)0), 0x0,
8815 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8816 {&hf_nmea0183_gst_ellipse_orientation,
8817 {"Orientation of semi-major axis of error ellipse", "nmea0183.gst_ellipse_orientation",
8818 FT_STRING, BASE_NONE,
8819 NULL((void*)0), 0x0,
8820 "NMEA 0183 GST Orientation of semi-major axis of error ellipse (true north degrees)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8821 {&hf_nmea0183_gst_latitude_sd,
8822 {"Standard deviation of latitude error", "nmea0183.gst_sd_latitude",
8823 FT_STRING, BASE_NONE,
8824 NULL((void*)0), 0x0,
8825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8826 {&hf_nmea0183_gst_longitude_sd,
8827 {"Standard deviation of longitude error", "nmea0183.gst_sd_longitude",
8828 FT_STRING, BASE_NONE,
8829 NULL((void*)0), 0x0,
8830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8831 {&hf_nmea0183_gst_rms_total_sd,
8832 {"Total RMS standard deviation", "nmea0183.gst_sd_rms_total",
8833 FT_STRING, BASE_NONE,
8834 NULL((void*)0), 0x0,
8835 "NMEA 0183 GST Total RMS standard deviation of ranges inputs to the navigation solution", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8836 {&hf_nmea0183_gst_time,
8837 {"UTC Time of position", "nmea0183.gst_time",
8838 FT_NONE, BASE_NONE,
8839 NULL((void*)0), 0x0,
8840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8841 {&hf_nmea0183_gst_time_hour,
8842 {"Hour", "nmea0183.gst_time_hour",
8843 FT_STRING, BASE_NONE,
8844 NULL((void*)0), 0x0,
8845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8846 {&hf_nmea0183_gst_time_minute,
8847 {"Minute", "nmea0183.gst_time_minute",
8848 FT_STRING, BASE_NONE,
8849 NULL((void*)0), 0x0,
8850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8851 {&hf_nmea0183_gst_time_second,
8852 {"Second", "nmea0183.gst_time_second",
8853 FT_STRING, BASE_NONE,
8854 NULL((void*)0), 0x0,
8855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8856 {&hf_nmea0183_gsv_azimuth,
8857 {"Azimuth (degrees True)", "nmea0183.gsv.azimuth",
8858 FT_STRING, BASE_NONE,
8859 NULL((void*)0), 0x0,
8860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8861 {&hf_nmea0183_gsv_elevation,
8862 {"Elevation (degrees, 90 max)", "nmea0183.gsv.elevation",
8863 FT_STRING, BASE_NONE,
8864 NULL((void*)0), 0x0,
8865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8866 {&hf_nmea0183_gsv_sat_id,
8867 {"Satellite ID", "nmea0183.gsv.sat_id",
8868 FT_STRING, BASE_NONE,
8869 NULL((void*)0), 0x0,
8870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8871 {&hf_nmea0183_gsv_sat_type,
8872 {"Satellite Type", "nmea0183.gsv.sat_type",
8873 FT_UINT16, BASE_DEC|BASE_RANGE_STRING0x00000100,
8874 RVALS(sat_prn_type)((0 ? (const struct _range_string*)0 : ((sat_prn_type)))), 0x0,
8875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8876 {&hf_nmea0183_gsv_sats_in_view,
8877 {"Total Number of Satellites in View", "nmea0183.gsv.tot_sats",
8878 FT_STRING, BASE_NONE,
8879 NULL((void*)0), 0x0,
8880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8881 {&hf_nmea0183_gsv_sentence_number,
8882 {"Sentence Number (1 to 9)", "nmea0183.gsv.sentence_num",
8883 FT_STRING, BASE_NONE,
8884 NULL((void*)0), 0x0,
8885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8886 {&hf_nmea0183_gsv_snr,
8887 {"SNR (C/No) (db-Hz)", "nmea0183.gsv.snr",
8888 FT_STRING, BASE_NONE,
8889 NULL((void*)0), 0x0,
8890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8891 {&hf_nmea0183_gsv_total_sentences,
8892 {"Total Number of Sentences (1 to 9)", "nmea0183.gsv.tot_sentences",
8893 FT_STRING, BASE_NONE,
8894 NULL((void*)0), 0x0,
8895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8896 {&hf_nmea0183_hbt_interval,
8897 {"Configured Repeat Interval", "nmea0183.hbt.interval",
8898 FT_STRING, BASE_NONE,
8899 NULL((void*)0), 0x0,
8900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8901 {&hf_nmea0183_hbt_sent_id,
8902 {"Sequential Sentence Identifier", "nmea0183.hbt.sent_id",
8903 FT_STRING, BASE_NONE,
8904 NULL((void*)0), 0x0,
8905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8906 {&hf_nmea0183_hbt_status,
8907 {"Equipment Status", "nmea0183.hbt.status",
8908 FT_CHAR, BASE_NONE,
8909 VALS(equipment_status_vals)((0 ? (const struct _value_string*)0 : ((equipment_status_vals
))))
, 0x0,
8910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8911 {&hf_nmea0183_hdg_mag_dev,
8912 {"Magnetic Deviation (degrees E/W)", "nmea0183.hdg.deviation",
8913 FT_STRING, BASE_NONE,
8914 NULL((void*)0), 0x0,
8915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8916 {&hf_nmea0183_hdg_mag_sensor,
8917 {"Magnetic Sensor Heading (degrees)", "nmea0183.hdg.sensor",
8918 FT_STRING, BASE_NONE,
8919 NULL((void*)0), 0x0,
8920 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8921 {&hf_nmea0183_hdg_mag_var,
8922 {"Magnetic Variation (degrees E/W)", "nmea0183.hdg.variation",
8923 FT_STRING, BASE_NONE,
8924 NULL((void*)0), 0x0,
8925 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8926 {&hf_nmea0183_hdt_heading,
8927 {"True heading", "nmea0183.hdt_heading",
8928 FT_STRING, BASE_NONE,
8929 NULL((void*)0), 0x0,
8930 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8931 {&hf_nmea0183_hdt_unit,
8932 {"Heading unit", "nmea0183.hdt_unit",
8933 FT_STRING, BASE_NONE,
8934 NULL((void*)0), 0x0,
8935 "NMEA 0183 HDT Heading unit, must be T", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8936 {&hf_nmea0183_hmr_dev_s1,
8937 {"Deviation, Sensor 1 (degrees)", "nmea0183.hmr.s1_dev",
8938 FT_STRING, BASE_NONE,
8939 NULL((void*)0), 0x0,
8940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8941 {&hf_nmea0183_hmr_dev_s2,
8942 {"Deviation, Sensor 2 (degrees)", "nmea0183.hmr.s2_dev",
8943 FT_STRING, BASE_NONE,
8944 NULL((void*)0), 0x0,
8945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8946 {&hf_nmea0183_hmr_difflim_setting,
8947 {"Difference Limit Setting (degrees)", "nmea0183.hmr.difflim",
8948 FT_STRING, BASE_NONE,
8949 NULL((void*)0), 0x0,
8950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8951 {&hf_nmea0183_hmr_heading_s1,
8952 {"Heading Sensor 1 ID", "nmea0183.hmr.s1_heading",
8953 FT_STRING, BASE_NONE,
8954 NULL((void*)0), 0x0,
8955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8956 {&hf_nmea0183_hmr_heading_s2,
8957 {"Heading Sensor 2 ID", "nmea0183.hmr.s2_heading",
8958 FT_STRING, BASE_NONE,
8959 NULL((void*)0), 0x0,
8960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8961 {&hf_nmea0183_hmr_heading_sdiff,
8962 {"Actual Heading Sensor Difference (degrees)", "nmea0183.hmr.sensor_diff",
8963 FT_STRING, BASE_NONE,
8964 NULL((void*)0), 0x0,
8965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8966 {&hf_nmea0183_hmr_hr_s1,
8967 {"Heading Reading, Sensor 1 (degrees)", "nmea0183.hmr.s1_hr",
8968 FT_STRING, BASE_NONE,
8969 NULL((void*)0), 0x0,
8970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8971 {&hf_nmea0183_hmr_hr_s2,
8972 {"Heading Reading, Sensor 2 (degrees)", "nmea0183.hmr.s2_hr",
8973 FT_STRING, BASE_NONE,
8974 NULL((void*)0), 0x0,
8975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8976 {&hf_nmea0183_hmr_s1_type,
8977 {"Sensor 1 Type", "nmea0183.hmr.s1_stype",
8978 FT_CHAR, BASE_NONE,
8979 VALS(heading_monitor_sensor_type)((0 ? (const struct _value_string*)0 : ((heading_monitor_sensor_type
))))
, 0x0,
8980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8981 {&hf_nmea0183_hmr_s2_type,
8982 {"Sensor 2 Type", "nmea0183.hmr.s2_stype",
8983 FT_CHAR, BASE_NONE,
8984 VALS(heading_monitor_sensor_type)((0 ? (const struct _value_string*)0 : ((heading_monitor_sensor_type
))))
, 0x0,
8985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8986 {&hf_nmea0183_hmr_status_s1,
8987 {"Status, Sensor 1", "nmea0183.hmr.s1_status",
8988 FT_CHAR, BASE_NONE,
8989 VALS(heading_monitor_sensor_vals)((0 ? (const struct _value_string*)0 : ((heading_monitor_sensor_vals
))))
, 0x0,
8990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8991 {&hf_nmea0183_hmr_status_s2,
8992 {"Status, Sensor 2", "nmea0183.hmr.s2_status",
8993 FT_CHAR, BASE_NONE,
8994 VALS(heading_monitor_sensor_vals)((0 ? (const struct _value_string*)0 : ((heading_monitor_sensor_vals
))))
, 0x0,
8995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
8996 {&hf_nmea0183_hmr_variation,
8997 {"Variation (degrees)", "nmea0183.hmr.variation",
8998 FT_STRING, BASE_NONE,
8999 NULL((void*)0), 0x0,
9000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9001 {&hf_nmea0183_hmr_warning_flag,
9002 {"Override", "nmea0183.hmr.warning",
9003 FT_CHAR, BASE_NONE,
9004 VALS(warning_flag_vals)((0 ? (const struct _value_string*)0 : ((warning_flag_vals)))
)
, 0x0,
9005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9006 {&hf_nmea0183_hms_heading_s1,
9007 {"Heading Sensor 1 ID", "nmea0183.hms.heading_s1",
9008 FT_STRING, BASE_NONE,
9009 NULL((void*)0), 0x0,
9010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9011 {&hf_nmea0183_hms_heading_s2,
9012 {"Heading Sensor 2 ID", "nmea0183.hms.heading_s2",
9013 FT_STRING, BASE_NONE,
9014 NULL((void*)0), 0x0,
9015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9016 {&hf_nmea0183_hms_max_diff,
9017 {"Maximum Difference (degrees)", "nmea0183.hms.max_diff",
9018 FT_STRING, BASE_NONE,
9019 NULL((void*)0), 0x0,
9020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9021 {&hf_nmea0183_hsc_heading_magnetic,
9022 {"Commanded Heading (degrees Magnetic)", "nmea0183.hsc.heading_mag",
9023 FT_STRING, BASE_NONE,
9024 NULL((void*)0), 0x0,
9025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9026 {&hf_nmea0183_hsc_heading_true,
9027 {"Commanded Heading (degrees True)", "nmea0183.hsc.heading_true",
9028 FT_STRING, BASE_NONE,
9029 NULL((void*)0), 0x0,
9030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9031 {&hf_nmea0183_htc_cmd_offhead_lim,
9032 {"Commanded Off-heading Limit (degrees)", "nmea0183.htc.offhead_lim",
9033 FT_STRING, BASE_NONE,
9034 NULL((void*)0), 0x0,
9035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9036 {&hf_nmea0183_htc_cmd_offtrack,
9037 {"Commanded Off-Track Limit (nm)", "nmea0183.htc.offtrack",
9038 FT_STRING, BASE_NONE,
9039 NULL((void*)0), 0x0,
9040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9041 {&hf_nmea0183_htc_cmd_radius,
9042 {"Commanded Radius of Turn for Heading Changes (nm)", "nmea0183.htc.radius",
9043 FT_STRING, BASE_NONE,
9044 NULL((void*)0), 0x0,
9045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9046 {&hf_nmea0183_htc_cmd_rate,
9047 {"Commanded Rate of Turn for Heading Changes (deg./min.)", "nmea0183.htc.rate",
9048 FT_STRING, BASE_NONE,
9049 NULL((void*)0), 0x0,
9050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9051 {&hf_nmea0183_htc_cmd_rudder_angle,
9052 {"Commanded Rudder Angle (degrees)", "nmea0183.htc.rudder_angle",
9053 FT_STRING, BASE_NONE,
9054 NULL((void*)0), 0x0,
9055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9056 {&hf_nmea0183_htc_cmd_rudder_dir,
9057 {"Commanded Rudder Direction", "nmea0183.htc.rudder_dir",
9058 FT_CHAR, BASE_NONE,
9059 VALS(rudder_dir_vals)((0 ? (const struct _value_string*)0 : ((rudder_dir_vals)))), 0x0,
9060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9061 {&hf_nmea0183_htc_cmd_rudder_lim,
9062 {"Commanded Rudder Limit (degrees)", "nmea0183.htc.rudder_lim",
9063 FT_STRING, BASE_NONE,
9064 NULL((void*)0), 0x0,
9065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9066 {&hf_nmea0183_htc_cmd_steer,
9067 {"Commanded Heading-to-Steer (degrees)", "nmea0183.htc.steer",
9068 FT_STRING, BASE_NONE,
9069 NULL((void*)0), 0x0,
9070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9071 {&hf_nmea0183_htc_cmd_track,
9072 {"Commanded Track (degrees)", "nmea0183.htc.track",
9073 FT_STRING, BASE_NONE,
9074 NULL((void*)0), 0x0,
9075 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9076 {&hf_nmea0183_htc_heading_ref,
9077 {"Heading Reference in use", "nmea0183.htc.heading_ref",
9078 FT_CHAR, BASE_NONE,
9079 VALS(heading_reference)((0 ? (const struct _value_string*)0 : ((heading_reference)))
)
, 0x0,
9080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9081 {&hf_nmea0183_htc_override,
9082 {"Override", "nmea0183.htc.override",
9083 FT_CHAR, BASE_NONE,
9084 VALS(override_vals)((0 ? (const struct _value_string*)0 : ((override_vals)))), 0x0,
9085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9086 {&hf_nmea0183_htc_steering_mode,
9087 {"Selected Steering Mode", "nmea0183.htc.steering_mode",
9088 FT_CHAR, BASE_NONE,
9089 VALS(steering_mode_vals)((0 ? (const struct _value_string*)0 : ((steering_mode_vals))
))
, 0x0,
9090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9091 {&hf_nmea0183_htc_turn_mode,
9092 {"Turn Mode", "nmea0183.htc.turn_mode",
9093 FT_CHAR, BASE_NONE,
9094 VALS(turning_mode_vals)((0 ? (const struct _value_string*)0 : ((turning_mode_vals)))
)
, 0x0,
9095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9096 {&hf_nmea0183_htd_cmd_offhead_lim,
9097 {"Commanded Off-heading Limit (degrees)", "nmea0183.htd.offhead_lim",
9098 FT_STRING, BASE_NONE,
9099 NULL((void*)0), 0x0,
9100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9101 {&hf_nmea0183_htd_cmd_offtrack,
9102 {"Commanded Off-Track Limit (nm)", "nmea0183.htd.offtrack",
9103 FT_STRING, BASE_NONE,
9104 NULL((void*)0), 0x0,
9105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9106 {&hf_nmea0183_htd_cmd_radius,
9107 {"Commanded Radius of Turn for Heading Changes (nm)", "nmea0183.htd.radius",
9108 FT_STRING, BASE_NONE,
9109 NULL((void*)0), 0x0,
9110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9111 {&hf_nmea0183_htd_cmd_rate,
9112 {"Commanded Rate of Turn for Heading Changes (deg./min.)", "nmea0183.htd.rate",
9113 FT_STRING, BASE_NONE,
9114 NULL((void*)0), 0x0,
9115 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9116 {&hf_nmea0183_htd_cmd_rudder_angle,
9117 {"Commanded Rudder Angle (degrees)", "nmea0183.htd.rudder_angle",
9118 FT_STRING, BASE_NONE,
9119 NULL((void*)0), 0x0,
9120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9121 {&hf_nmea0183_htd_cmd_rudder_dir,
9122 {"Commanded Rudder Direction", "nmea0183.htd.rudder_dir",
9123 FT_CHAR, BASE_NONE,
9124 VALS(rudder_dir_vals)((0 ? (const struct _value_string*)0 : ((rudder_dir_vals)))), 0x0,
9125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9126 {&hf_nmea0183_htd_cmd_rudder_lim,
9127 {"Commanded Rudder Limit (degrees)", "nmea0183.htd.rudder_lim",
9128 FT_STRING, BASE_NONE,
9129 NULL((void*)0), 0x0,
9130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9131 {&hf_nmea0183_htd_cmd_steer,
9132 {"Commanded Heading-to-Steer (degrees)", "nmea0183.htd.steer",
9133 FT_STRING, BASE_NONE,
9134 NULL((void*)0), 0x0,
9135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9136 {&hf_nmea0183_htd_cmd_track,
9137 {"Commanded Track (degrees)", "nmea0183.htd.track",
9138 FT_STRING, BASE_NONE,
9139 NULL((void*)0), 0x0,
9140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9141 {&hf_nmea0183_htd_heading_ref,
9142 {"Heading Reference in use", "nmea0183.htd.heading_ref",
9143 FT_CHAR, BASE_NONE,
9144 VALS(heading_reference)((0 ? (const struct _value_string*)0 : ((heading_reference)))
)
, 0x0,
9145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9146 {&hf_nmea0183_htd_offhdng_status,
9147 {"Off-heading Status", "nmea0183.htd.offheading_status",
9148 FT_CHAR, BASE_NONE,
9149 VALS(r_oh_ot_status)((0 ? (const struct _value_string*)0 : ((r_oh_ot_status)))), 0x0,
9150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9151 {&hf_nmea0183_htd_offtrack_status,
9152 {"Off-track Status", "nmea0183.htd.offtrack_status",
9153 FT_CHAR, BASE_NONE,
9154 VALS(r_oh_ot_status)((0 ? (const struct _value_string*)0 : ((r_oh_ot_status)))), 0x0,
9155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9156 {&hf_nmea0183_htd_override,
9157 {"Override", "nmea0183.htd.override",
9158 FT_CHAR, BASE_NONE,
9159 VALS(override_vals)((0 ? (const struct _value_string*)0 : ((override_vals)))), 0x0,
9160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9161 {&hf_nmea0183_htd_rudder_status,
9162 {"Rudder Status", "nmea0183.htd.rudder_status",
9163 FT_CHAR, BASE_NONE,
9164 VALS(r_oh_ot_status)((0 ? (const struct _value_string*)0 : ((r_oh_ot_status)))), 0x0,
9165 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9166 {&hf_nmea0183_htd_steering_mode,
9167 {"Selected Steering Mode", "nmea0183.htd.steering_mode",
9168 FT_CHAR, BASE_NONE,
9169 VALS(steering_mode_vals)((0 ? (const struct _value_string*)0 : ((steering_mode_vals))
))
, 0x0,
9170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9171 {&hf_nmea0183_htd_turn_mode,
9172 {"Turn Mode", "nmea0183.htd.turn_mode",
9173 FT_CHAR, BASE_NONE,
9174 VALS(turning_mode_vals)((0 ? (const struct _value_string*)0 : ((turning_mode_vals)))
)
, 0x0,
9175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9176 {&hf_nmea0183_htd_vessel_heading,
9177 {"Vessel Heading (degrees)", "nmea0183.htd.vessel_heading",
9178 FT_STRING, BASE_NONE,
9179 NULL((void*)0), 0x0,
9180 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9181 {&hf_nmea0183_lcd_gri,
9182 {"GRI (tens of microseconds)", "nmea0183.lcd.gri",
9183 FT_STRING, BASE_NONE,
9184 NULL((void*)0), 0x0,
9185 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9186 {&hf_nmea0183_lcd_master_ecd,
9187 {"Master Pulse Shape (ECD)", "nmea0183.lcd.master_ecd",
9188 FT_STRING, BASE_NONE,
9189 NULL((void*)0), 0x0,
9190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9191 {&hf_nmea0183_lcd_master_snr,
9192 {"Master Signal-to-Noise Ratio (SNR)", "nmea0183.lcd.master_snr",
9193 FT_STRING, BASE_NONE,
9194 NULL((void*)0), 0x0,
9195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9196 {&hf_nmea0183_lcd_s1_ecd,
9197 {"Secondary 1 ECD", "nmea0183.lcd.s1_ecd",
9198 FT_STRING, BASE_NONE,
9199 NULL((void*)0), 0x0,
9200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9201 {&hf_nmea0183_lcd_s1_snr,
9202 {"Secondary 1 SNR", "nmea0183.lcd.s1_snr",
9203 FT_STRING, BASE_NONE,
9204 NULL((void*)0), 0x0,
9205 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9206 {&hf_nmea0183_lcd_s2_ecd,
9207 {"Secondary 2 ECD", "nmea0183.lcd.s2_ecd",
9208 FT_STRING, BASE_NONE,
9209 NULL((void*)0), 0x0,
9210 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9211 {&hf_nmea0183_lcd_s2_snr,
9212 {"Secondary 2 SNR", "nmea0183.lcd.s2_snr",
9213 FT_STRING, BASE_NONE,
9214 NULL((void*)0), 0x0,
9215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9216 {&hf_nmea0183_lcd_s3_ecd,
9217 {"Secondary 3 ECD", "nmea0183.lcd.s3_ecd",
9218 FT_STRING, BASE_NONE,
9219 NULL((void*)0), 0x0,
9220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9221 {&hf_nmea0183_lcd_s3_snr,
9222 {"Secondary 3 SNR", "nmea0183.lcd.s3_snr",
9223 FT_STRING, BASE_NONE,
9224 NULL((void*)0), 0x0,
9225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9226 {&hf_nmea0183_lcd_s4_ecd,
9227 {"Secondary 4 ECD", "nmea0183.lcd.s4_ecd",
9228 FT_STRING, BASE_NONE,
9229 NULL((void*)0), 0x0,
9230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9231 {&hf_nmea0183_lcd_s4_snr,
9232 {"Secondary 4 SNR", "nmea0183.lcd.s4_snr",
9233 FT_STRING, BASE_NONE,
9234 NULL((void*)0), 0x0,
9235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9236 {&hf_nmea0183_lcd_s5_ecd,
9237 {"Secondary 5 ECD", "nmea0183.lcd.s5_ecd",
9238 FT_STRING, BASE_NONE,
9239 NULL((void*)0), 0x0,
9240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9241 {&hf_nmea0183_lcd_s5_snr,
9242 {"Secondary 5 SNR", "nmea0183.lcd.s5_snr",
9243 FT_STRING, BASE_NONE,
9244 NULL((void*)0), 0x0,
9245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9246 {&hf_nmea0183_loranc_blink_snr_warning,
9247 {"Data Status (Loran-C Blink / SNR)", "nmea0183.apb.gen_warning",
9248 FT_CHAR, BASE_NONE,
9249 VALS(loranc_blink_snr_warning_vals)((0 ? (const struct _value_string*)0 : ((loranc_blink_snr_warning_vals
))))
, 0x0,
9250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9251 {&hf_nmea0183_lr1_callsign,
9252 {"Call Sign", "nmea0183.lr1.callsign",
9253 FT_STRING, BASE_NONE,
9254 NULL((void*)0), 0x0,
9255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9256 {&hf_nmea0183_lr1_imo_num,
9257 {"IMO Number", "nmea0183.lr1.imo_num",
9258 FT_STRING, BASE_NONE,
9259 NULL((void*)0), 0x0,
9260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9261 {&hf_nmea0183_lr1_req_mmsi,
9262 {"MMSI of Requestor", "nmea0183.lr1.mmsi_req",
9263 FT_STRING, BASE_NONE,
9264 NULL((void*)0), 0x0,
9265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9266 {&hf_nmea0183_lr1_resp_mmsi,
9267 {"MMSI of Responder", "nmea0183.lr1.mmsi_resp",
9268 FT_STRING, BASE_NONE,
9269 NULL((void*)0), 0x0,
9270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9271 {&hf_nmea0183_lr1_seqnum,
9272 {"Sequence Number (0 to 9)", "nmea0183.lr1.seqnum",
9273 FT_STRING, BASE_NONE,
9274 NULL((void*)0), 0x0,
9275 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9276 {&hf_nmea0183_lr1_shipname,
9277 {"Ship's Name", "nmea0183.lr1.shipname",
9278 FT_STRING, BASE_NONE,
9279 NULL((void*)0), 0x0,
9280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9281 {&hf_nmea0183_lr2_course_ground,
9282 {"Course Over Ground (degrees True)", "nmea0183.lr2.course",
9283 FT_STRING, BASE_NONE,
9284 NULL((void*)0), 0x0,
9285 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9286 {&hf_nmea0183_lr2_date,
9287 {"Date (ddmmyyyy)", "nmea0183.lr2.date",
9288 FT_STRING, BASE_NONE,
9289 NULL((void*)0), 0x0,
9290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9291 {&hf_nmea0183_lr2_latitude,
9292 {"Latitude", "nmea0183.lr2.latitude",
9293 FT_FLOAT, BASE_NONE,
9294 NULL((void*)0), 0x0,
9295 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9296 {&hf_nmea0183_lr2_longitude,
9297 {"Longitude", "nmea0183.lr2.longitude",
9298 FT_FLOAT, BASE_NONE,
9299 NULL((void*)0), 0x0,
9300 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9301 {&hf_nmea0183_lr2_resp_mmsi,
9302 {"MMSI of Responder", "nmea0183.lr2.mmsi_resp",
9303 FT_STRING, BASE_NONE,
9304 NULL((void*)0), 0x0,
9305 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9306 {&hf_nmea0183_lr2_seqnum,
9307 {"Sequence Number (0 to 9)", "nmea0183.lr2.seqnum",
9308 FT_STRING, BASE_NONE,
9309 NULL((void*)0), 0x0,
9310 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9311 {&hf_nmea0183_lr2_speed_ground,
9312 {"Speed Over Ground (knots)", "nmea0183.lr2.speed",
9313 FT_STRING, BASE_NONE,
9314 NULL((void*)0), 0x0,
9315 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9316 {&hf_nmea0183_lr2_utc,
9317 {"UTC of Position", "nmea0183.lr2.utc",
9318 FT_STRING, BASE_NONE,
9319 NULL((void*)0), 0x0,
9320 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9321 {&hf_nmea0183_lr3_destination,
9322 {"Voyage Destination", "nmea0183.lr3.destination",
9323 FT_STRING, BASE_NONE,
9324 NULL((void*)0), 0x0,
9325 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9326 {&hf_nmea0183_lr3_draught,
9327 {"Draught", "nmea0183.lr3.draught",
9328 FT_STRING, BASE_NONE,
9329 NULL((void*)0), 0x0,
9330 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9331 {&hf_nmea0183_lr3_eta_date,
9332 {"ETA Date (ddmmyy)", "nmea0183.lr3.eta_date",
9333 FT_STRING, BASE_NONE,
9334 NULL((void*)0), 0x0,
9335 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9336 {&hf_nmea0183_lr3_eta_time,
9337 {"ETA Time", "nmea0183.lr3.eta_time",
9338 FT_STRING, BASE_NONE,
9339 NULL((void*)0), 0x0,
9340 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9341 {&hf_nmea0183_lr3_persons,
9342 {"Persons (8191 implies >= 8191)", "nmea0183.lr3.persons",
9343 FT_STRING, BASE_NONE,
9344 NULL((void*)0), 0x0,
9345 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9346 {&hf_nmea0183_lr3_resp_mmsi,
9347 {"MMSI of Responder", "nmea0183.lr3.mmsi_resp",
9348 FT_STRING, BASE_NONE,
9349 NULL((void*)0), 0x0,
9350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9351 {&hf_nmea0183_lr3_seqnum,
9352 {"Sequence Number (0 to 9)", "nmea0183.lr3.seqnum",
9353 FT_STRING, BASE_NONE,
9354 NULL((void*)0), 0x0,
9355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9356 {&hf_nmea0183_lr3_ship_breadth,
9357 {"Ship Breadth", "nmea0183.lr3.breadth",
9358 FT_STRING, BASE_NONE,
9359 NULL((void*)0), 0x0,
9360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9361 {&hf_nmea0183_lr3_ship_cargo,
9362 {"Ship/Cargo", "nmea0183.lr3.cargo",
9363 FT_STRING, BASE_NONE,
9364 NULL((void*)0), 0x0,
9365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9366 {&hf_nmea0183_lr3_ship_length,
9367 {"Ship Length", "nmea0183.lr3.length",
9368 FT_STRING, BASE_NONE,
9369 NULL((void*)0), 0x0,
9370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9371 {&hf_nmea0183_lr3_ship_type,
9372 {"Ship Type", "nmea0183.lr3.type",
9373 FT_STRING, BASE_NONE,
9374 NULL((void*)0), 0x0,
9375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9376 {&hf_nmea0183_lrf_function_rep,
9377 {"Function Reply Status String", "nmea0183.lr2.function_rep_string",
9378 FT_STRING, BASE_NONE,
9379 NULL((void*)0), 0x0,
9380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9381 {&hf_nmea0183_lrf_function_rep_val,
9382 {"Function Reply Status", "nmea0183.lr2.function_rep",
9383 FT_CHAR, BASE_NONE,
9384 VALS(lrf_func_rep_vals)((0 ? (const struct _value_string*)0 : ((lrf_func_rep_vals)))
)
, 0x0,
9385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9386 {&hf_nmea0183_lrf_function_req,
9387 {"Function Request String", "nmea0183.lr2.function_req_string",
9388 FT_STRING, BASE_NONE,
9389 NULL((void*)0), 0x0,
9390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9391 {&hf_nmea0183_lrf_function_req_val,
9392 {"Function Request", "nmea0183.lr2.function_req",
9393 FT_CHAR, BASE_NONE,
9394 VALS(lrf_func_req_vals)((0 ? (const struct _value_string*)0 : ((lrf_func_req_vals)))
)
, 0x0,
9395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9396 {&hf_nmea0183_lrf_mmsi,
9397 {"MMSI of Requestor", "nmea0183.lrf.mmsi",
9398 FT_STRING, BASE_NONE,
9399 NULL((void*)0), 0x0,
9400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9401 {&hf_nmea0183_lrf_name,
9402 {"Name of Requestor", "nmea0183.lr2.name",
9403 FT_STRING, BASE_NONE,
9404 NULL((void*)0), 0x0,
9405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9406 {&hf_nmea0183_lrf_seqnum,
9407 {"Sequence Number (0 to 9)", "nmea0183.lrf.seqnum",
9408 FT_STRING, BASE_NONE,
9409 NULL((void*)0), 0x0,
9410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9411 {&hf_nmea0183_lri_control,
9412 {"Control Flag", "nmea0183.lri.control",
9413 FT_CHAR, BASE_NONE,
9414 VALS(control_flag_vals)((0 ? (const struct _value_string*)0 : ((control_flag_vals)))
)
, 0x0,
9415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9416 {&hf_nmea0183_lri_dest_mmsi,
9417 {"MMSI of Destination", "nmea0183.lri.mmsi_dest",
9418 FT_STRING, BASE_NONE,
9419 NULL((void*)0), 0x0,
9420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9421 {&hf_nmea0183_lri_latitude_ne,
9422 {"Latitude (NE corner)", "nmea0183.lri.latitude_ne",
9423 FT_FLOAT, BASE_NONE,
9424 NULL((void*)0), 0x0,
9425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9426 {&hf_nmea0183_lri_latitude_sw,
9427 {"Latitude (SW corner)", "nmea0183.lri.latitude_sw",
9428 FT_FLOAT, BASE_NONE,
9429 NULL((void*)0), 0x0,
9430 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9431 {&hf_nmea0183_lri_longitude_ne,
9432 {"Longitude (NE corner)", "nmea0183.lri.longitude_ne",
9433 FT_FLOAT, BASE_NONE,
9434 NULL((void*)0), 0x0,
9435 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9436 {&hf_nmea0183_lri_longitude_sw,
9437 {"Longitude (SW corner)", "nmea0183.lri.longitude_sw",
9438 FT_FLOAT, BASE_NONE,
9439 NULL((void*)0), 0x0,
9440 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9441 {&hf_nmea0183_lri_req_mmsi,
9442 {"MMSI of Requestor", "nmea0183.lri.mmsi_req",
9443 FT_STRING, BASE_NONE,
9444 NULL((void*)0), 0x0,
9445 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9446 {&hf_nmea0183_lri_seqnum,
9447 {"Sequence Number (0 to 9)", "nmea0183.lri.seqnum",
9448 FT_STRING, BASE_NONE,
9449 NULL((void*)0), 0x0,
9450 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9451 {&hf_nmea0183_mla_12lsb_corr_t_scale,
9452 {"12 LSB of System Time Scale Correction", "nmea0183.mla.12lsb",
9453 FT_STRING, BASE_NONE,
9454 NULL((void*)0), 0x0,
9455 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9456 {&hf_nmea0183_mla_16msb_corr_t_scale,
9457 {"16 MSB of System Time Scale Correction", "nmea0183.mla.16msb",
9458 FT_STRING, BASE_NONE,
9459 NULL((void*)0), 0x0,
9460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9461 {&hf_nmea0183_mla_calday_count,
9462 {"Calendar Day Count", "nmea0183.mla.calday_count",
9463 FT_STRING, BASE_NONE,
9464 NULL((void*)0), 0x0,
9465 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9466 {&hf_nmea0183_mla_corr_circling,
9467 {"Correction to the Avg. Value of Draconitic Circling Time", "nmea0183.mla.corr_circling",
9468 FT_STRING, BASE_NONE,
9469 NULL((void*)0), 0x0,
9470 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9471 {&hf_nmea0183_mla_corr_incl_angle,
9472 {"Correction to the Avg. Value of the Inclination Angle", "nmea0183.mla.inc_angle",
9473 FT_STRING, BASE_NONE,
9474 NULL((void*)0), 0x0,
9475 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9476 {&hf_nmea0183_mla_eccentricity,
9477 {"Eccentricity", "nmea0183.mla.eccentricity",
9478 FT_STRING, BASE_NONE,
9479 NULL((void*)0), 0x0,
9480 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9481 {&hf_nmea0183_mla_long_asc_node,
9482 {"Greenwich Longitude of the Ascension Node", "nmea0183.mla.long_asc_node",
9483 FT_STRING, BASE_NONE,
9484 NULL((void*)0), 0x0,
9485 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9486 {&hf_nmea0183_mla_perigee,
9487 {"Argument of Perigee", "nmea0183.mla.perigee",
9488 FT_STRING, BASE_NONE,
9489 NULL((void*)0), 0x0,
9490 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9491 {&hf_nmea0183_mla_roc_circling,
9492 {"Rate of Change of Draconitic Circling Time", "nmea0183.mla.roc_circling",
9493 FT_STRING, BASE_NONE,
9494 NULL((void*)0), 0x0,
9495 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9496 {&hf_nmea0183_mla_sat_health,
9497 {"Satellite Health & Carrier Frequency", "nmea0183.mla.sat_carrier",
9498 FT_STRING, BASE_NONE,
9499 NULL((void*)0), 0x0,
9500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9501 {&hf_nmea0183_mla_sat_id,
9502 {"Satellite ID (satellite slot)", "nmea0183.mla.sat_id",
9503 FT_STRING, BASE_NONE,
9504 NULL((void*)0), 0x0,
9505 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9506 {&hf_nmea0183_mla_sentence_number,
9507 {"Sentence Number", "nmea0183.mla.sentence_num",
9508 FT_STRING, BASE_NONE,
9509 NULL((void*)0), 0x0,
9510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9511 {&hf_nmea0183_mla_t_asc_node,
9512 {"Time of the Ascension Node & Almanac Reference Time", "nmea0183.mla.asc_node",
9513 FT_STRING, BASE_NONE,
9514 NULL((void*)0), 0x0,
9515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9516 {&hf_nmea0183_mla_t_scale_shift,
9517 {"Course Value of the Time Scale Shift", "nmea0183.mla.scale_shift",
9518 FT_STRING, BASE_NONE,
9519 NULL((void*)0), 0x0,
9520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9521 {&hf_nmea0183_mla_total_sentences,
9522 {"Total Number of Sentences", "nmea0183.mla.tot_sentences",
9523 FT_STRING, BASE_NONE,
9524 NULL((void*)0), 0x0,
9525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9526 {&hf_nmea0183_msk_am_bitrate,
9527 {"Auto/Manual Bit Rate", "nmea0183.msk.am_bitrate",
9528 FT_CHAR, BASE_NONE,
9529 VALS(auto_manual_vals)((0 ? (const struct _value_string*)0 : ((auto_manual_vals)))), 0x0,
9530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9531 {&hf_nmea0183_msk_am_freq,
9532 {"Auto/Manual Frequency", "nmea0183.msk.am_freq",
9533 FT_CHAR, BASE_NONE,
9534 VALS(auto_manual_vals)((0 ? (const struct _value_string*)0 : ((auto_manual_vals)))), 0x0,
9535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9536 {&hf_nmea0183_msk_beacon_bitrate,
9537 {"Beacon Bit Rate (bps)", "nmea0183.msk.beacon_bitrate",
9538 FT_STRING, BASE_NONE,
9539 NULL((void*)0), 0x0,
9540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9541 {&hf_nmea0183_msk_beacon_freq,
9542 {"Beacon Frequency (kHz)", "nmea0183.msk.beacon_freq",
9543 FT_STRING, BASE_NONE,
9544 NULL((void*)0), 0x0,
9545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9546 {&hf_nmea0183_msk_channel,
9547 {"Channel Number", "nmea0183.msk.channel",
9548 FT_STRING, BASE_NONE,
9549 NULL((void*)0), 0x0,
9550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9551 {&hf_nmea0183_msk_interval,
9552 {"Interval for sending MSS status (seconds)", "nmea0183.msk.interval",
9553 FT_STRING, BASE_NONE,
9554 NULL((void*)0), 0x0,
9555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9556 {&hf_nmea0183_mss_beacon_bitrate,
9557 {"Beacon Bit Rate (bps)", "nmea0183.mss.bitrate",
9558 FT_STRING, BASE_NONE,
9559 NULL((void*)0), 0x0,
9560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9561 {&hf_nmea0183_mss_beacon_freq,
9562 {"Beacon Frequency (kHz)", "nmea0183.mss.beacon_freq",
9563 FT_STRING, BASE_NONE,
9564 NULL((void*)0), 0x0,
9565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9566 {&hf_nmea0183_mss_channel,
9567 {"Channel Number", "nmea0183.mss.channel",
9568 FT_STRING, BASE_NONE,
9569 NULL((void*)0), 0x0,
9570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9571 {&hf_nmea0183_mss_sig_str,
9572 {"Signal Strength (dB) (re: 1 uV/m)", "nmea0183.mss.sig_strength",
9573 FT_STRING, BASE_NONE,
9574 NULL((void*)0), 0x0,
9575 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9576 {&hf_nmea0183_mss_snr,
9577 {"Signal-to-Noise Ratio (SNR) (dB)", "nmea0183.mss.snr",
9578 FT_STRING, BASE_NONE,
9579 NULL((void*)0), 0x0,
9580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9581 {&hf_nmea0183_mtw_temp,
9582 {"Water Temperature", "nmea0183.mtw.temp",
9583 FT_STRING, BASE_NONE,
9584 NULL((void*)0), 0x0,
9585 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9586 {&hf_nmea0183_mwd_direction_mag,
9587 {"Wind Direction (degrees Magnetic)", "nmea0183.mwd.dir_mag",
9588 FT_STRING, BASE_NONE,
9589 NULL((void*)0), 0x0,
9590 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9591 {&hf_nmea0183_mwd_direction_true,
9592 {"Wind Direction (degrees True)", "nmea0183.mwd.dir_true",
9593 FT_STRING, BASE_NONE,
9594 NULL((void*)0), 0x0,
9595 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9596 {&hf_nmea0183_mwd_speed_knots,
9597 {"Wind Speed (knots)", "nmea0183.mwd.speed_kts",
9598 FT_STRING, BASE_NONE,
9599 NULL((void*)0), 0x0,
9600 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9601 {&hf_nmea0183_mwd_speed_ms,
9602 {"Wind Speed (meters/second)", "nmea0183.mwd.speed_ms",
9603 FT_STRING, BASE_NONE,
9604 NULL((void*)0), 0x0,
9605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9606 {&hf_nmea0183_mwv_reference,
9607 {"Reference", "nmea0183.mwv.reference",
9608 FT_CHAR, BASE_NONE,
9609 VALS(mwv_reference)((0 ? (const struct _value_string*)0 : ((mwv_reference)))), 0x0,
9610 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9611 {&hf_nmea0183_mwv_speed_units,
9612 {"Wind Speed Units", "nmea0183.mwv.units",
9613 FT_CHAR, BASE_NONE,
9614 VALS(speed_unit_vals)((0 ? (const struct _value_string*)0 : ((speed_unit_vals)))), 0x0,
9615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9616 {&hf_nmea0183_mwv_status,
9617 {"Data Status", "nmea0183.mwv.status",
9618 FT_CHAR, BASE_NONE,
9619 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
9620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9621 {&hf_nmea0183_mwv_wind_angle,
9622 {"Wind Angle (0 to 359 deg)", "nmea0183.mwv.angle",
9623 FT_STRING, BASE_NONE,
9624 NULL((void*)0), 0x0,
9625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9626 {&hf_nmea0183_mwv_wind_speed,
9627 {"Wind Speed", "nmea0183.mwv.speed",
9628 FT_STRING, BASE_NONE,
9629 NULL((void*)0), 0x0,
9630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9631 {&hf_nmea0183_osd_course_ref,
9632 {"Course Reference", "nmea0183.osd.course_ref",
9633 FT_CHAR, BASE_NONE,
9634 VALS(course_ref_vals)((0 ? (const struct _value_string*)0 : ((course_ref_vals)))), 0x0,
9635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9636 {&hf_nmea0183_osd_course_true,
9637 {"Vessel Course (degrees True)", "nmea0183.osd.course",
9638 FT_STRING, BASE_NONE,
9639 NULL((void*)0), 0x0,
9640 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9641 {&hf_nmea0183_osd_drift,
9642 {"Vessel Drift (speed)", "nmea0183.osd.drift",
9643 FT_STRING, BASE_NONE,
9644 NULL((void*)0), 0x0,
9645 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9646 {&hf_nmea0183_osd_heading_status,
9647 {"Heading Status", "nmea0183.osd.heading_status",
9648 FT_CHAR, BASE_NONE,
9649 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
9650 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9651 {&hf_nmea0183_osd_heading_true,
9652 {"Heading (degrees True)", "nmea0183.osd.heading",
9653 FT_STRING, BASE_NONE,
9654 NULL((void*)0), 0x0,
9655 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9656 {&hf_nmea0183_osd_set_true,
9657 {"Vessel Set (degrees True)", "nmea0183.osd.set",
9658 FT_STRING, BASE_NONE,
9659 NULL((void*)0), 0x0,
9660 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9661 {&hf_nmea0183_osd_speed,
9662 {"Vessel Speed (degrees True)", "nmea0183.osd.speed",
9663 FT_STRING, BASE_NONE,
9664 NULL((void*)0), 0x0,
9665 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9666 {&hf_nmea0183_osd_speed_ref,
9667 {"Speed Reference", "nmea0183.osd.speed_ref",
9668 FT_CHAR, BASE_NONE,
9669 VALS(course_ref_vals)((0 ? (const struct _value_string*)0 : ((course_ref_vals)))), 0x0,
9670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9671 {&hf_nmea0183_osd_speed_units,
9672 {"Speed Units", "nmea0183.osd.speed_units",
9673 FT_CHAR, BASE_NONE,
9674 VALS(speed_unit_vals)((0 ? (const struct _value_string*)0 : ((speed_unit_vals)))), 0x0,
9675 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9676 {&hf_nmea0183_rma_course,
9677 {"Course Over Ground (degrees True)", "nmea0183.rma.course",
9678 FT_STRING, BASE_NONE,
9679 NULL((void*)0), 0x0,
9680 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9681 {&hf_nmea0183_rma_latitude,
9682 {"Latitude", "nmea0183.rma.latitude",
9683 FT_FLOAT, BASE_NONE,
9684 NULL((void*)0), 0x0,
9685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9686 {&hf_nmea0183_rma_longitude,
9687 {"Longitude", "nmea0183.rma.longitude",
9688 FT_FLOAT, BASE_NONE,
9689 NULL((void*)0), 0x0,
9690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9691 {&hf_nmea0183_rma_mag_var,
9692 {"Magnetic Variation (degrees)", "nmea0183.rma.mag_var",
9693 FT_STRING, BASE_NONE,
9694 NULL((void*)0), 0x0,
9695 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9696 {&hf_nmea0183_rma_mode,
9697 {"Mode Indicator", "nmea0183.rma.mode",
9698 FT_CHAR, BASE_NONE,
9699 VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
9700 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9701 {&hf_nmea0183_rma_speed,
9702 {"Speed Over Ground (knots)", "nmea0183.rma.speed",
9703 FT_STRING, BASE_NONE,
9704 NULL((void*)0), 0x0,
9705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9706 {&hf_nmea0183_rma_status,
9707 {"Status", "nmea0183.rma.status",
9708 FT_CHAR, BASE_NONE,
9709 VALS(rma_data_status)((0 ? (const struct _value_string*)0 : ((rma_data_status)))), 0x0,
9710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9711 {&hf_nmea0183_rma_time_diff_a,
9712 {"Time Difference A (microseconds)", "nmea0183.rma.td_a",
9713 FT_STRING, BASE_NONE,
9714 NULL((void*)0), 0x0,
9715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9716 {&hf_nmea0183_rma_time_diff_b,
9717 {"Time Difference B (microseconds)", "nmea0183.rma.td_b",
9718 FT_STRING, BASE_NONE,
9719 NULL((void*)0), 0x0,
9720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9721 {&hf_nmea0183_rmb_arrival_status,
9722 {"Arrival Status", "nmea0183.rmb.arrival_status",
9723 FT_CHAR, BASE_NONE,
9724 VALS(arrival_circle_status)((0 ? (const struct _value_string*)0 : ((arrival_circle_status
))))
, 0x0,
9725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9726 {&hf_nmea0183_rmb_bearing_dest,
9727 {"Bearing to Destination (degrees True)", "nmea0183.rmb.bearing",
9728 FT_STRING, BASE_NONE,
9729 NULL((void*)0), 0x0,
9730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9731 {&hf_nmea0183_rmb_data_status,
9732 {"Data Status", "nmea0183.rmb.data_status",
9733 FT_CHAR, BASE_NONE,
9734 VALS(navigation_data_status)((0 ? (const struct _value_string*)0 : ((navigation_data_status
))))
, 0x0,
9735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9736 {&hf_nmea0183_rmb_dest_id,
9737 {"Destination Waypoint ID", "nmea0183.rmb.dest_id",
9738 FT_STRING, BASE_NONE,
9739 NULL((void*)0), 0x0,
9740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9741 {&hf_nmea0183_rmb_dest_velocity,
9742 {"Destination Closing Velocity", "nmea0183.rmb.velocity",
9743 FT_STRING, BASE_NONE,
9744 NULL((void*)0), 0x0,
9745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9746 {&hf_nmea0183_rmb_dest_wp_latitude,
9747 {"Latitude", "nmea0183.rmb.latitude",
9748 FT_FLOAT, BASE_NONE,
9749 NULL((void*)0), 0x0,
9750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9751 {&hf_nmea0183_rmb_dest_wp_longitude,
9752 {"Longitude", "nmea0183.rmb.longitude",
9753 FT_FLOAT, BASE_NONE,
9754 NULL((void*)0), 0x0,
9755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9756 {&hf_nmea0183_rmb_mode,
9757 {"Mode Indicator", "nmea0183.rmb.mode",
9758 FT_CHAR, BASE_NONE,
9759 VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
9760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9761 {&hf_nmea0183_rmb_orig_id,
9762 {"Origin Waypoint ID", "nmea0183.rmb.orig_id",
9763 FT_STRING, BASE_NONE,
9764 NULL((void*)0), 0x0,
9765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9766 {&hf_nmea0183_rmb_range_dest,
9767 {"Range to Destination (nm)", "nmea0183.rmb.range",
9768 FT_STRING, BASE_NONE,
9769 NULL((void*)0), 0x0,
9770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9771 {&hf_nmea0183_rmb_steer,
9772 {"Direction to Steer", "nmea0183.rmb.steer",
9773 FT_CHAR, BASE_NONE,
9774 VALS(steer_direction)((0 ? (const struct _value_string*)0 : ((steer_direction)))), 0x0,
9775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9776 {&hf_nmea0183_rmb_xte,
9777 {"Cross Track Error (XTE) (nm)", "nmea0183.rmb.xte",
9778 FT_STRING, BASE_NONE,
9779 NULL((void*)0), 0x0,
9780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9781 {&hf_nmea0183_rmc_course,
9782 {"Course over ground (degrees True)", "nmea0183.rmc.course",
9783 FT_STRING, BASE_NONE,
9784 NULL((void*)0), 0x0,
9785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9786 {&hf_nmea0183_rmc_date,
9787 {"Date (ddmmyy)", "nmea0183.rmc.date",
9788 FT_STRING, BASE_NONE,
9789 NULL((void*)0), 0x0,
9790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9791 {&hf_nmea0183_rmc_latitude,
9792 {"Latitude", "nmea0183.rmc.latitude",
9793 FT_FLOAT, BASE_NONE,
9794 NULL((void*)0), 0x0,
9795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9796 {&hf_nmea0183_rmc_longitude,
9797 {"Longitude", "nmea0183.rmc.longitude",
9798 FT_FLOAT, BASE_NONE,
9799 NULL((void*)0), 0x0,
9800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9801 {&hf_nmea0183_rmc_magnetic,
9802 {"Magnetic Variation", "nmea0183.rmc.magnetic",
9803 FT_STRING, BASE_NONE,
9804 NULL((void*)0), 0x0,
9805 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9806 {&hf_nmea0183_rmc_mode,
9807 {"Mode Indicator", "nmea0183.rmc.mode",
9808 FT_CHAR, BASE_NONE,
9809 VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
9810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9811 {&hf_nmea0183_rmc_speed,
9812 {"Speed over ground (knots)", "nmea0183.rmc.speed",
9813 FT_STRING, BASE_NONE,
9814 NULL((void*)0), 0x0,
9815 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9816 {&hf_nmea0183_rmc_status,
9817 {"Status", "nmea0183.rmc.status",
9818 FT_CHAR, BASE_NONE,
9819 VALS(navigation_data_status)((0 ? (const struct _value_string*)0 : ((navigation_data_status
))))
, 0x0,
9820 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9821 {&hf_nmea0183_rmc_utc,
9822 {"UTC of Position", "nmea0183.rmc.utc",
9823 FT_STRING, BASE_NONE,
9824 NULL((void*)0), 0x0,
9825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9826 {&hf_nmea0183_rot_rate_of_turn,
9827 {"Rate of turn", "nmea0183.rot_rate_of_turn",
9828 FT_STRING, BASE_NONE,
9829 NULL((void*)0), 0x0,
9830 "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)}},
9831 {&hf_nmea0183_rot_valid,
9832 {"Validity", "nmea0183.rot_valid",
9833 FT_STRING, BASE_NONE,
9834 NULL((void*)0), 0x0,
9835 "NMEA 0183 ROT Status, A means data is valid", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9836 {&hf_nmea0183_rpm_number,
9837 {"Engine or Shaft Number (from centerline)", "nmea0183.rpm.number",
9838 FT_CHAR, BASE_NONE,
9839 VALS(revolutions_number_vals)((0 ? (const struct _value_string*)0 : ((revolutions_number_vals
))))
, 0x0,
9840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9841 {&hf_nmea0183_rpm_pitch,
9842 {"Propeller Pitch (% of max)", "nmea0183.rpm.pitch",
9843 FT_STRING, BASE_NONE,
9844 NULL((void*)0), 0x0,
9845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9846 {&hf_nmea0183_rpm_source,
9847 {"Source", "nmea0183.rpm.source",
9848 FT_CHAR, BASE_NONE,
9849 VALS(revolutions_source_vals)((0 ? (const struct _value_string*)0 : ((revolutions_source_vals
))))
, 0x0,
9850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9851 {&hf_nmea0183_rpm_speed,
9852 {"Speed (rev/min)", "nmea0183.rpm.speed",
9853 FT_STRING, BASE_NONE,
9854 NULL((void*)0), 0x0,
9855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9856 {&hf_nmea0183_rpm_status,
9857 {"Data Status", "nmea0183.rpm.status",
9858 FT_CHAR, BASE_NONE,
9859 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
9860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9861 {&hf_nmea0183_rsa_pt_sensor,
9862 {"Port Rudder Sensor", "nmea0183.rsa.pt",
9863 FT_STRING, BASE_NONE,
9864 NULL((void*)0), 0x0,
9865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9866 {&hf_nmea0183_rsa_pt_status,
9867 {"Data Status", "nmea0183.rsa.pt_status",
9868 FT_CHAR, BASE_NONE,
9869 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
9870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9871 {&hf_nmea0183_rsa_sb_sensor,
9872 {"Starboard (or single) Rudder Sensor", "nmea0183.rsa.sb",
9873 FT_STRING, BASE_NONE,
9874 NULL((void*)0), 0x0,
9875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9876 {&hf_nmea0183_rsa_sb_status,
9877 {"Data Status", "nmea0183.rsa.sb_status",
9878 FT_CHAR, BASE_NONE,
9879 VALS(data_status)((0 ? (const struct _value_string*)0 : ((data_status)))), 0x0,
9880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9881 {&hf_nmea0183_rsd_cursor_bearing,
9882 {"Cursor Bearing (degrees clockwise from 0)", "nmea0183.rsd.curs_scale",
9883 FT_STRING, BASE_NONE,
9884 NULL((void*)0), 0x0,
9885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9886 {&hf_nmea0183_rsd_cursor_range,
9887 {"Cursor Range, from own ship", "nmea0183.rsd.curs_range",
9888 FT_STRING, BASE_NONE,
9889 NULL((void*)0), 0x0,
9890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9891 {&hf_nmea0183_rsd_display,
9892 {"Display Rotation", "nmea0183.rsd.display",
9893 FT_CHAR, BASE_NONE,
9894 VALS(display_rotation_vals)((0 ? (const struct _value_string*)0 : ((display_rotation_vals
))))
, 0x0,
9895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9896 {&hf_nmea0183_rsd_ebl1,
9897 {"Bearing Line 1 (EBL1) (degrees from 0)", "nmea0183.rsd.ebl1",
9898 FT_STRING, BASE_NONE,
9899 NULL((void*)0), 0x0,
9900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9901 {&hf_nmea0183_rsd_ebl2,
9902 {"EBL2 (degrees)", "nmea0183.rsd.ebl2",
9903 FT_STRING, BASE_NONE,
9904 NULL((void*)0), 0x0,
9905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9906 {&hf_nmea0183_rsd_orig2_range,
9907 {"Origin 2 Bearing (degrees from 0)", "nmea0183.rsd.orig2_range",
9908 FT_STRING, BASE_NONE,
9909 NULL((void*)0), 0x0,
9910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9911 {&hf_nmea0183_rsd_orig_bearing,
9912 {"Origin 1 Bearing (degrees from 0)", "nmea0183.rsd.orig_bearing",
9913 FT_STRING, BASE_NONE,
9914 NULL((void*)0), 0x0,
9915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9916 {&hf_nmea0183_rsd_orig_range,
9917 {"Origin 1 Range, from own ship", "nmea0183.rsd.orig_range",
9918 FT_STRING, BASE_NONE,
9919 NULL((void*)0), 0x0,
9920 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9921 {&hf_nmea0183_rsd_scale,
9922 {"Range Scale in use", "nmea0183.rsd.scale",
9923 FT_STRING, BASE_NONE,
9924 NULL((void*)0), 0x0,
9925 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9926 {&hf_nmea0183_rsd_units,
9927 {"Range Units", "nmea0183.rsd.units",
9928 FT_CHAR, BASE_NONE,
9929 VALS(speed_unit_vals)((0 ? (const struct _value_string*)0 : ((speed_unit_vals)))), 0x0,
9930 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9931 {&hf_nmea0183_rsd_vrm1,
9932 {"Variable Range Marker 1 (VRM1)", "nmea0183.rsd.vrm1",
9933 FT_STRING, BASE_NONE,
9934 NULL((void*)0), 0x0,
9935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9936 {&hf_nmea0183_rsd_vrm2,
9937 {"VRM2", "nmea0183.rsd.vrm2",
9938 FT_STRING, BASE_NONE,
9939 NULL((void*)0), 0x0,
9940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9941 {&hf_nmea0183_rte_route,
9942 {"Route Identifier", "nmea0183.rte.route",
9943 FT_STRING, BASE_NONE,
9944 NULL((void*)0), 0x0,
9945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9946 {&hf_nmea0183_rte_sentence_mode,
9947 {"Sentence Mode", "nmea0183.rte.mode",
9948 FT_CHAR, BASE_NONE,
9949 VALS(sentence_mode_vals)((0 ? (const struct _value_string*)0 : ((sentence_mode_vals))
))
, 0x0,
9950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9951 {&hf_nmea0183_rte_sentence_number,
9952 {"Sentence Number", "nmea0183.rte.sent_number",
9953 FT_STRING, BASE_NONE,
9954 NULL((void*)0), 0x0,
9955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9956 {&hf_nmea0183_rte_total_sentences,
9957 {"Total Number of Sentences", "nmea0183.rte.num_sentences",
9958 FT_STRING, BASE_NONE,
9959 NULL((void*)0), 0x0,
9960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9961 {&hf_nmea0183_rte_waypoint,
9962 {"Waypoint Identifier", "nmea0183.rte.waypoint",
9963 FT_STRING, BASE_NONE,
9964 NULL((void*)0), 0x0,
9965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9966 { &hf_nmea0183_sentence_prefix,
9967 { "Sentence prefix", "nmea0183.sentence_prefix",
9968 FT_STRING, BASE_NONE,
9969 NULL((void*)0), 0x0,
9970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
9971 {&hf_nmea0183_sfi_frequency,
9972 {"Frequency/ITU Channel (100 Hz increments)", "nmea0183.sfi.freq",
9973 FT_STRING, BASE_NONE,
9974 NULL((void*)0), 0x0,
9975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9976 {&hf_nmea0183_sfi_mode,
9977 {"Mode of Operation", "nmea0183.sfi.mode",
9978 FT_CHAR, BASE_NONE,
9979 VALS(sfi_operation_mode_vals)((0 ? (const struct _value_string*)0 : ((sfi_operation_mode_vals
))))
, 0x0,
9980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9981 {&hf_nmea0183_sfi_sentence_number,
9982 {"Sentence Number", "nmea0183.sfi.sent_number",
9983 FT_STRING, BASE_NONE,
9984 NULL((void*)0), 0x0,
9985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9986 {&hf_nmea0183_sfi_total_sentences,
9987 {"Total Number of Sentences", "nmea0183.sfi.num_sentences",
9988 FT_STRING, BASE_NONE,
9989 NULL((void*)0), 0x0,
9990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9991 {&hf_nmea0183_ssd_callsign,
9992 {"Ship's Call Sign", "nmea0183.ssd.callsign",
9993 FT_STRING, BASE_NONE,
9994 NULL((void*)0), 0x0,
9995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
9996 {&hf_nmea0183_ssd_dte_flag,
9997 {"DTE Indicator Flag", "nmea0183.ssd.dte",
9998 FT_CHAR, BASE_NONE,
9999 VALS(dte_indicator_vals)((0 ? (const struct _value_string*)0 : ((dte_indicator_vals))
))
, 0x0,
10000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10001 {&hf_nmea0183_ssd_name,
10002 {"Ship's Name", "nmea0183.ssd.name",
10003 FT_STRING, BASE_NONE,
10004 NULL((void*)0), 0x0,
10005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10006 {&hf_nmea0183_ssd_ref_a,
10007 {"Pos. Ref. Point distance 'A' (from bow)", "nmea0183.ssd.ref_a",
10008 FT_STRING, BASE_NONE,
10009 NULL((void*)0), 0x0,
10010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10011 {&hf_nmea0183_ssd_ref_b,
10012 {"Pos. Ref. Point distance 'B' (from stern)", "nmea0183.ssd.ref_b",
10013 FT_STRING, BASE_NONE,
10014 NULL((void*)0), 0x0,
10015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10016 {&hf_nmea0183_ssd_ref_c,
10017 {"Pos. Ref. Point distance 'C' (from port beam)", "nmea0183.ssd.ref_c",
10018 FT_STRING, BASE_NONE,
10019 NULL((void*)0), 0x0,
10020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10021 {&hf_nmea0183_ssd_ref_d,
10022 {"Pos. Ref. Point distance 'D' (from starboard beam)", "nmea0183.ssd.ref_d",
10023 FT_STRING, BASE_NONE,
10024 NULL((void*)0), 0x0,
10025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10026 {&hf_nmea0183_ssd_source,
10027 {"Talker ID Number", "nmea0183.ssd.source",
10028 FT_STRING, BASE_NONE,
10029 NULL((void*)0), 0x0,
10030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10031 {&hf_nmea0183_stn_talker,
10032 {"Talker ID Number", "nmea0183.stn.talker",
10033 FT_STRING, BASE_NONE,
10034 NULL((void*)0), 0x0,
10035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10036 { &hf_nmea0183_tag_block,
10037 { "Tag block", "nmea0183.tag_block",
10038 FT_STRING, BASE_NONE,
10039 NULL((void*)0), 0x0,
10040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
10041 {&hf_nmea0183_tlb_label,
10042 {"Label Assigned to Target", "nmea0183.tlb.label",
10043 FT_STRING, BASE_NONE,
10044 NULL((void*)0), 0x0,
10045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10046 {&hf_nmea0183_tlb_target,
10047 {"Target Number", "nmea0183.tlb.tgt_num",
10048 FT_STRING, BASE_NONE,
10049 NULL((void*)0), 0x0,
10050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10051 {&hf_nmea0183_tll_ref_tgt,
10052 {"Reference Target", "nmea0183.tll.ref",
10053 FT_CHAR, BASE_NONE,
10054 VALS(ref_target_vals)((0 ? (const struct _value_string*)0 : ((ref_target_vals)))), 0x0,
10055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10056 {&hf_nmea0183_tll_tgt_latitude,
10057 {"Target Latitude", "nmea0183.tll.latitude",
10058 FT_FLOAT, BASE_NONE,
10059 NULL((void*)0), 0x0,
10060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10061 {&hf_nmea0183_tll_tgt_longitude,
10062 {"Target Longitude", "nmea0183.tll.longitude",
10063 FT_FLOAT, BASE_NONE,
10064 NULL((void*)0), 0x0,
10065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10066 {&hf_nmea0183_tll_tgt_name,
10067 {"Target Name", "nmea0183.tll.tgt_name",
10068 FT_STRING, BASE_NONE,
10069 NULL((void*)0), 0x0,
10070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10071 {&hf_nmea0183_tll_utc,
10072 {"UTC of Data","nmea0183.tll.utc",
10073 FT_STRING, BASE_NONE,
10074 NULL((void*)0), 0x0,
10075 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10076 {&hf_nmea0183_tll_tgt_num,
10077 {"Target Number", "nmea0183.tll.tgt_num",
10078 FT_STRING, BASE_NONE,
10079 NULL((void*)0), 0x0,
10080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10081 {&hf_nmea0183_tll_tgt_status,
10082 {"Target Status", "nmea0183.tll.status",
10083 FT_CHAR, BASE_NONE,
10084 VALS(tgt_status_vals)((0 ? (const struct _value_string*)0 : ((tgt_status_vals)))), 0x0,
10085 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10086 {&hf_nmea0183_ttm_acq_type,
10087 {"Type of Acquisition", "nmea0183.ttm.acq",
10088 FT_CHAR, BASE_NONE,
10089 VALS(target_acq_vals)((0 ? (const struct _value_string*)0 : ((target_acq_vals)))), 0x0,
10090 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10091 {&hf_nmea0183_ttm_bearing,
10092 {"Target Number", "nmea0183.ttm.bearing",
10093 FT_STRING, BASE_NONE,
10094 NULL((void*)0), 0x0,
10095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10096 {&hf_nmea0183_ttm_dist_pt_approach,
10097 {"Target Number", "nmea0183.ttm.dist_approach",
10098 FT_STRING, BASE_NONE,
10099 NULL((void*)0), 0x0,
10100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10101 {&hf_nmea0183_ttm_ref_tgt,
10102 {"Reference Target", "nmea0183.ttm.ref",
10103 FT_CHAR, BASE_NONE,
10104 VALS(ref_target_vals)((0 ? (const struct _value_string*)0 : ((ref_target_vals)))), 0x0,
10105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10106 {&hf_nmea0183_ttm_tgt_course,
10107 {"Target Number", "nmea0183.ttm.tgt_course",
10108 FT_STRING, BASE_NONE,
10109 NULL((void*)0), 0x0,
10110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10111 {&hf_nmea0183_ttm_tgt_dist,
10112 {"Target Number", "nmea0183.ttm.tgt_dist",
10113 FT_STRING, BASE_NONE,
10114 NULL((void*)0), 0x0,
10115 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10116 {&hf_nmea0183_ttm_tgt_name,
10117 {"Target Name", "nmea0183.ttm.tgt_name",
10118 FT_STRING, BASE_NONE,
10119 NULL((void*)0), 0x0,
10120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10121 {&hf_nmea0183_ttm_tgt_num,
10122 {"Target Number", "nmea0183.ttm.tgt_num",
10123 FT_STRING, BASE_NONE,
10124 NULL((void*)0), 0x0,
10125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10126 {&hf_nmea0183_ttm_tgt_speed,
10127 {"Target Number", "nmea0183.ttm.tgt_speed",
10128 FT_STRING, BASE_NONE,
10129 NULL((void*)0), 0x0,
10130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10131 {&hf_nmea0183_ttm_tgt_status,
10132 {"Target Status", "nmea0183.ttm.status",
10133 FT_CHAR, BASE_NONE,
10134 VALS(tgt_status_vals)((0 ? (const struct _value_string*)0 : ((tgt_status_vals)))), 0x0,
10135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10136 {&hf_nmea0183_ttm_time_cpa,
10137 {"Target Number", "nmea0183.ttm.cpa",
10138 FT_STRING, BASE_NONE,
10139 NULL((void*)0), 0x0,
10140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10141 {&hf_nmea0183_ttm_units,
10142 {"Speed/Distance Units", "nmea0183.ttm.units",
10143 FT_CHAR, BASE_NONE,
10144 VALS(speed_unit_vals)((0 ? (const struct _value_string*)0 : ((speed_unit_vals)))), 0x0,
10145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10146 {&hf_nmea0183_ttm_utc,
10147 {"UTC of Data", "nmea0183.ttm.utc",
10148 FT_STRING, BASE_NONE,
10149 NULL((void*)0), 0x0,
10150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10151 {&hf_nmea0183_tut_sentence_num,
10152 {"Sentence Number", "nmea0183.tut.sent_number",
10153 FT_STRING, BASE_NONE,
10154 NULL((void*)0), 0x0,
10155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10156 {&hf_nmea0183_tut_seq_msg,
10157 {"Sequential Message Identifier", "nmea0183.tut.seq_msg",
10158 FT_STRING, BASE_NONE,
10159 NULL((void*)0), 0x0,
10160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10161 {&hf_nmea0183_tut_src_id,
10162 {"Source Identifier", "nmea0183.tut.source",
10163 FT_STRING, BASE_NONE,
10164 NULL((void*)0), 0x0,
10165 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10166 {&hf_nmea0183_tut_text,
10167 {"Text Body", "nmea0183.tut.text",
10168 FT_STRING, BASE_NONE,
10169 NULL((void*)0), 0x0,
10170 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10171 {&hf_nmea0183_tut_total_sentences,
10172 {"Total Number of Sentences", "nmea0183.tut.tot_sentences",
10173 FT_STRING, BASE_NONE,
10174 NULL((void*)0), 0x0,
10175 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10176 {&hf_nmea0183_tut_trans_code,
10177 {"Translation Code for Text Body", "nmea0183.tut.trans_code",
10178 FT_STRING, BASE_NONE,
10179 NULL((void*)0), 0x0,
10180 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10181 { &hf_nmea0183_txt_id,
10182 {"Text identifier", "nmea0183.txt.id",
10183 FT_STRING, BASE_NONE,
10184 NULL((void*)0), 0x0,
10185 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
10186 { &hf_nmea0183_txt_msg,
10187 {"Text message", "nmea0183.txt.msg",
10188 FT_STRING, BASE_NONE,
10189 NULL((void*)0), 0x0,
10190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
10191 { &hf_nmea0183_txt_num,
10192 {"Total number of sentences", "nmea0183.txt.num",
10193 FT_STRING, BASE_NONE,
10194 NULL((void*)0), 0x0,
10195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
10196 { &hf_nmea0183_txt_sent_num,
10197 {"Sentence number", "nmea0183.txt.sent_num",
10198 FT_STRING, BASE_NONE,
10199 NULL((void*)0), 0x0,
10200 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
10201 {&hf_nmea0183_vbw_ground_speed_longitudinal,
10202 {"Longitudinal ground speed", "nmea0183.vbw_ground_speed_longitudinal",
10203 FT_STRING, BASE_NONE,
10204 NULL((void*)0), 0x0,
10205 "NMEA 0183 VBW Longitudinal ground speed, negative value means astern, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10206 {&hf_nmea0183_vbw_ground_speed_transverse,
10207 {"Transverse ground speed", "nmea0183.vbw_ground_speed_transverse",
10208 FT_STRING, BASE_NONE,
10209 NULL((void*)0), 0x0,
10210 "NMEA 0183 VBW Transverse ground speed, negative value means port, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10211 {&hf_nmea0183_vbw_ground_speed_valid,
10212 {"Ground speed validity", "nmea0183.vbw_ground_speed_valid",
10213 FT_STRING, BASE_NONE,
10214 NULL((void*)0), 0x0,
10215 "NMEA 0183 VBW Ground speed status, A means data is valid", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10216 {&hf_nmea0183_vbw_stern_ground_speed,
10217 {"Stern ground speed", "nmea0183.vbw_stern_ground_speed",
10218 FT_STRING, BASE_NONE,
10219 NULL((void*)0), 0x0,
10220 "NMEA 0183 VBW Stern traverse ground ground speed, negative value means port, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10221 {&hf_nmea0183_vbw_stern_ground_speed_valid,
10222 {"Stern ground speed validity", "nmea0183.vbw_stern_ground_speed_valid",
10223 FT_STRING, BASE_NONE,
10224 NULL((void*)0), 0x0,
10225 "NMEA 0183 VBW Stern traverse ground speed status, A means data is valid", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10226 {&hf_nmea0183_vbw_stern_water_speed,
10227 {"Stern water speed", "nmea0183.vbw_stern_water_speed",
10228 FT_STRING, BASE_NONE,
10229 NULL((void*)0), 0x0,
10230 "NMEA 0183 VBW Stern traverse water ground speed, negative value means port, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10231 {&hf_nmea0183_vbw_stern_water_speed_valid,
10232 {"Stern water speed validity", "nmea0183.vbw_stern_water_speed_valid",
10233 FT_STRING, BASE_NONE,
10234 NULL((void*)0), 0x0,
10235 "NMEA 0183 VBW Stern traverse water speed status, A means data is valid", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10236 {&hf_nmea0183_vbw_water_speed_longitudinal,
10237 {"Longitudinal water speed", "nmea0183.vbw_water_speed_longitudinal",
10238 FT_STRING, BASE_NONE,
10239 NULL((void*)0), 0x0,
10240 "NMEA 0183 VBW Longitudinal water speed, negative value means astern, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10241 {&hf_nmea0183_vbw_water_speed_transverse,
10242 {"Transverse water speed", "nmea0183.vbw_water_speed_transverse",
10243 FT_STRING, BASE_NONE,
10244 NULL((void*)0), 0x0,
10245 "NMEA 0183 VBW Transverse water speed, negative value means port, knots", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10246 {&hf_nmea0183_vbw_water_speed_valid,
10247 {"Water speed validity", "nmea0183.vbw_water_speed_valid",
10248 FT_STRING, BASE_NONE,
10249 NULL((void*)0), 0x0,
10250 "NMEA 0183 VBW Water speed status, A means data is valid", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10251 {&hf_nmea0183_vdr_heading_magnetic,
10252 {"Direction (degrees Magnetic)", "nmea0183.vdr.magnetic",
10253 FT_STRING, BASE_NONE,
10254 NULL((void*)0), 0x0,
10255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10256 {&hf_nmea0183_vdr_heading_true,
10257 {"Direction (degrees True)", "nmea0183.vdr.true",
10258 FT_STRING, BASE_NONE,
10259 NULL((void*)0), 0x0,
10260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10261 {&hf_nmea0183_vdr_speed,
10262 {"Current Speed (knots)", "nmea0183.vdr.speed",
10263 FT_STRING, BASE_NONE,
10264 NULL((void*)0), 0x0,
10265 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10266 {&hf_nmea0183_vhw_magnetic_heading,
10267 {"Magnetic heading", "nmea0183.vhw_magnetic_heading",
10268 FT_STRING, BASE_NONE,
10269 NULL((void*)0), 0x0,
10270 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10271 {&hf_nmea0183_vhw_magnetic_heading_unit,
10272 {"Heading unit", "nmea0183.vhw_magnetic_heading_unit",
10273 FT_STRING, BASE_NONE,
10274 NULL((void*)0), 0x0,
10275 "NMEA 0183 VHW Heading unit, must be M", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10276 {&hf_nmea0183_vhw_true_heading,
10277 {"True heading", "nmea0183.vhw_true_heading",
10278 FT_STRING, BASE_NONE,
10279 NULL((void*)0), 0x0,
10280 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10281 {&hf_nmea0183_vhw_true_heading_unit,
10282 {"Heading unit", "nmea0183.vhw_true_heading_unit",
10283 FT_STRING, BASE_NONE,
10284 NULL((void*)0), 0x0,
10285 "NMEA 0183 VHW Heading unit, must be T", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10286 {&hf_nmea0183_vhw_water_speed_kilometer,
10287 {"Water speed", "nmea0183.vhw_water_speed_kilometer",
10288 FT_STRING, BASE_NONE,
10289 NULL((void*)0), 0x0,
10290 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10291 {&hf_nmea0183_vhw_water_speed_kilometer_unit,
10292 {"Speed unit", "nmea0183.vhw_water_speed_kilometer_unit",
10293 FT_STRING, BASE_NONE,
10294 NULL((void*)0), 0x0,
10295 "NMEA 0183 VHW Water speed unit, must be K", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10296 {&hf_nmea0183_vhw_water_speed_knot,
10297 {"Water speed", "nmea0183.vhw_water_speed_knot",
10298 FT_STRING, BASE_NONE,
10299 NULL((void*)0), 0x0,
10300 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10301 {&hf_nmea0183_vhw_water_speed_knot_unit,
10302 {"Speed unit", "nmea0183.vhw_water_speed_knot_unit",
10303 FT_STRING, BASE_NONE,
10304 NULL((void*)0), 0x0,
10305 "NMEA 0183 VHW Water speed unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10306 {&hf_nmea0183_vlw_cumulative_ground,
10307 {"Cumulative ground distance", "nmea0183.vlw_hf_nmea0183_vlw_cumulative_ground",
10308 FT_STRING, BASE_NONE,
10309 NULL((void*)0), 0x0,
10310 "NMEA 0183 VLW Total cumulative ground distance, nautical miles (NMEA 3 and above)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10311 {&hf_nmea0183_vlw_cumulative_ground_unit,
10312 {"Distance unit", "nmea0183.vlw_cumulative_ground_unit",
10313 FT_STRING, BASE_NONE,
10314 NULL((void*)0), 0x0,
10315 "NMEA 0183 VLW Distance unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10316 {&hf_nmea0183_vlw_cumulative_water,
10317 {"Cumulative water distance", "nmea0183.vlw_hf_nmea0183_vlw_cumulative_water",
10318 FT_STRING, BASE_NONE,
10319 NULL((void*)0), 0x0,
10320 "NMEA 0183 VLW Total cumulative water distance, nautical miles", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10321 {&hf_nmea0183_vlw_cumulative_water_unit,
10322 {"Distance unit", "nmea0183.vlw_cumulative_water_unit",
10323 FT_STRING, BASE_NONE,
10324 NULL((void*)0), 0x0,
10325 "NMEA 0183 VLW Distance unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10326 {&hf_nmea0183_vlw_trip_ground,
10327 {"Trip ground distance", "nmea0183.vlw_hf_nmea0183_vlw_trip_ground",
10328 FT_STRING, BASE_NONE,
10329 NULL((void*)0), 0x0,
10330 "NMEA 0183 VLW Ground distance since Reset, nautical miles (NMEA 3 and above)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10331 {&hf_nmea0183_vlw_trip_ground_unit,
10332 {"Distance unit", "nmea0183.vlw_trip_ground_unit",
10333 FT_STRING, BASE_NONE,
10334 NULL((void*)0), 0x0,
10335 "NMEA 0183 VLW Distance unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10336 {&hf_nmea0183_vlw_trip_water,
10337 {"Trip water distance", "nmea0183.vlw_hf_nmea0183_vlw_trip_water",
10338 FT_STRING, BASE_NONE,
10339 NULL((void*)0), 0x0,
10340 "NMEA 0183 VLW Water distance since Reset, nautical miles", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10341 {&hf_nmea0183_vlw_trip_water_unit,
10342 {"Distance unit", "nmea0183.vlw_trip_water_unit",
10343 FT_STRING, BASE_NONE,
10344 NULL((void*)0), 0x0,
10345 "NMEA 0183 VLW Distance unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10346 {&hf_nmea0183_vpw_speed_knots,
10347 {"Speed (knots)", "nmea0183.vpw.knots",
10348 FT_STRING, BASE_NONE,
10349 NULL((void*)0), 0x0,
10350 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10351 {&hf_nmea0183_vpw_speed_ms,
10352 {"Speed (meters/second)", "nmea0183.vpw.ms",
10353 FT_STRING, BASE_NONE,
10354 NULL((void*)0), 0x0,
10355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10356 {&hf_nmea0183_vsd_app_flags,
10357 {"Regional Application Flags", "nmea0183.vsd.app_flags",
10358 FT_STRING, BASE_NONE,
10359 NULL((void*)0), 0x0,
10360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10361 {&hf_nmea0183_vsd_day_arrival,
10362 {"Estimated Day of Arrival at Destination", "nmea0183.vsd.arrival_day",
10363 FT_STRING, BASE_NONE,
10364 NULL((void*)0), 0x0,
10365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10366 {&hf_nmea0183_vsd_destination,
10367 {"Destination", "nmea0183.vsd.dest",
10368 FT_STRING, BASE_NONE,
10369 NULL((void*)0), 0x0,
10370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10371 {&hf_nmea0183_vsd_max_draught,
10372 {"Maximum Present Static Draught (m)", "nmea0183.vsd.draft",
10373 FT_STRING, BASE_NONE,
10374 NULL((void*)0), 0x0,
10375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10376 {&hf_nmea0183_vsd_month_arrival,
10377 {"Estimated Month of Arrival at Destination", "nmea0183.vsd.arrival_month",
10378 FT_STRING, BASE_NONE,
10379 NULL((void*)0), 0x0,
10380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10381 {&hf_nmea0183_vsd_nav_status,
10382 {"Navigational Status", "nmea0183.vsd.nav_status",
10383 FT_STRING, BASE_NONE,
10384 NULL((void*)0), 0x0,
10385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10386 {&hf_nmea0183_vsd_persons,
10387 {"Persons On-board", "nmea0183.vsd.persons",
10388 FT_STRING, BASE_NONE,
10389 NULL((void*)0), 0x0,
10390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10391 {&hf_nmea0183_vsd_ship_cargo,
10392 {"Type of Ship & Cargo Category", "nmea0183.vsd.ship_cargo",
10393 FT_STRING, BASE_NONE,
10394 NULL((void*)0), 0x0,
10395 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10396 {&hf_nmea0183_vsd_utc_arrival,
10397 {"Estimated UTC of Arrival at Destination", "nmea0183.vsd.arrival_utc",
10398 FT_STRING, BASE_NONE,
10399 NULL((void*)0), 0x0,
10400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10401 {&hf_nmea0183_vtg_ground_speed_kilometer,
10402 {"Speed over ground", "nmea0183.vtg_ground_speed_kilometer",
10403 FT_STRING, BASE_NONE,
10404 NULL((void*)0), 0x0,
10405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10406 {&hf_nmea0183_vtg_ground_speed_kilometer_unit,
10407 {"Speed unit", "nmea0183.vtg_ground_speed_kilometer_unit",
10408 FT_STRING, BASE_NONE,
10409 NULL((void*)0), 0x0,
10410 "NMEA 0183 VTG Ground speed unit, must be K", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10411 {&hf_nmea0183_vtg_ground_speed_knot,
10412 {"Speed over ground", "nmea0183.vtg_ground_speed_knot",
10413 FT_STRING, BASE_NONE,
10414 NULL((void*)0), 0x0,
10415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10416 {&hf_nmea0183_vtg_ground_speed_knot_unit,
10417 {"Speed unit", "nmea0183.vtg_ground_speed_knot_unit",
10418 FT_STRING, BASE_NONE,
10419 NULL((void*)0), 0x0,
10420 "NMEA 0183 VTG Ground speed unit, must be N", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10421 {&hf_nmea0183_vtg_magnetic_course,
10422 {"Magnetic course over ground", "nmea0183.vtg_magnetic_course",
10423 FT_STRING, BASE_NONE,
10424 NULL((void*)0), 0x0,
10425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10426 {&hf_nmea0183_vtg_magnetic_course_unit,
10427 {"Course unit", "nmea0183.vtg_magnetic_course_unit",
10428 FT_STRING, BASE_NONE,
10429 NULL((void*)0), 0x0,
10430 "NMEA 0183 VTG Course unit, must be M", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10431 {&hf_nmea0183_vtg_mode,
10432 {"FAA mode", "nmea0183.vtg_mode",
10433 FT_STRING, BASE_NONE,
10434 NULL((void*)0), 0x0,
10435 "NMEA 0183 VTG FAA mode indicator (NMEA 2.3 and later)", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10436 {&hf_nmea0183_vtg_true_course,
10437 {"True course over ground", "nmea0183.vtg_true_course",
10438 FT_STRING, BASE_NONE,
10439 NULL((void*)0), 0x0,
10440 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10441 {&hf_nmea0183_vtg_true_course_unit,
10442 {"Course unit", "nmea0183.vtg_true_course_unit",
10443 FT_STRING, BASE_NONE,
10444 NULL((void*)0), 0x0,
10445 "NMEA 0183 VTG Course unit, must be T", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10446 {&hf_nmea0183_wcv_mode,
10447 {"Mode Indicator", "nmea0183.wcv.mode",
10448 FT_CHAR, BASE_NONE,
10449 VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
10450 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10451 {&hf_nmea0183_wcv_velocity,
10452 {"Velocity (knots)", "nmea0183.wcv.velocity",
10453 FT_STRING, BASE_NONE,
10454 NULL((void*)0), 0x0,
10455 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10456 {&hf_nmea0183_wcv_waypoint,
10457 {"Waypoint Identifier", "nmea0183.wcv.waypoint",
10458 FT_STRING, BASE_NONE,
10459 NULL((void*)0), 0x0,
10460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10461 {&hf_nmea0183_wnc_dist_km,
10462 {"Distance (km)", "nmea0183.wnc.dist_km",
10463 FT_STRING, BASE_NONE,
10464 NULL((void*)0), 0x0,
10465 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10466 {&hf_nmea0183_wnc_dist_nm,
10467 {"Distance (nm)", "nmea0183.wnc.dist_nm",
10468 FT_STRING, BASE_NONE,
10469 NULL((void*)0), 0x0,
10470 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10471 {&hf_nmea0183_wnc_from_id,
10472 {"'FROM' Waypoint ID", "nmea0183.wnc.from_waypoint",
10473 FT_STRING, BASE_NONE,
10474 NULL((void*)0), 0x0,
10475 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10476 {&hf_nmea0183_wnc_to_id,
10477 {"'TO' Waypoint ID", "nmea0183.wnc.to_waypoint",
10478 FT_STRING, BASE_NONE,
10479 NULL((void*)0), 0x0,
10480 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10481 {&hf_nmea0183_wpl_latitude,
10482 {"Waypoint Latitude", "nmea0183.wpl.latitude",
10483 FT_FLOAT, BASE_NONE,
10484 NULL((void*)0), 0x0,
10485 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10486 {&hf_nmea0183_wpl_longitude,
10487 {"Waypoint Longitude", "nmea0183.wpl.longitude",
10488 FT_FLOAT, BASE_NONE,
10489 NULL((void*)0), 0x0,
10490 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10491 {&hf_nmea0183_wpl_waypoint,
10492 {"Waypoint Identifier", "nmea0183.wpl.waypoint",
10493 FT_STRING, BASE_NONE,
10494 NULL((void*)0), 0x0,
10495 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10496 {&hf_nmea0183_xdr_data,
10497 {"Measurement Data", "nmea0183.xdr.data",
10498 FT_STRING, BASE_NONE,
10499 NULL((void*)0), 0x0,
10500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10501 {&hf_nmea0183_xdr_id,
10502 {"Transducer ID", "nmea0183.xdr.id",
10503 FT_STRING, BASE_NONE,
10504 NULL((void*)0), 0x0,
10505 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10506 {&hf_nmea0183_xdr_type,
10507 {"Transducer Type", "nmea0183.xdr.type",
10508 FT_CHAR, BASE_NONE,
10509 VALS(transducer_type_vals)((0 ? (const struct _value_string*)0 : ((transducer_type_vals
))))
, 0x0,
10510 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10511 {&hf_nmea0183_xdr_units,
10512 {"Units of Measure", "nmea0183.xdr.units",
10513 FT_CHAR, BASE_NONE,
10514 VALS(transducer_unit_vals)((0 ? (const struct _value_string*)0 : ((transducer_unit_vals
))))
, 0x0,
10515 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10516 {&hf_nmea0183_xte_blinksnr_status,
10517 {"Data Status - Loran-C Blink/SNR Warning", "nmea0183.xte.blinksnr",
10518 FT_CHAR, BASE_NONE,
10519 VALS(loranc_blink_snr_warning_vals)((0 ? (const struct _value_string*)0 : ((loranc_blink_snr_warning_vals
))))
, 0x0,
10520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10521 {&hf_nmea0183_xte_cycle_status,
10522 {"Data Status - Loran-C Cycle Lock Warning", "nmea0183.xte.cycle_lock",
10523 FT_CHAR, BASE_NONE,
10524 VALS(loranc_cycle_lock_warning_vals)((0 ? (const struct _value_string*)0 : ((loranc_cycle_lock_warning_vals
))))
, 0x0,
10525 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10526 {&hf_nmea0183_xte_magnitude,
10527 {"Magnitude of Cross-Track-Error (XTE)", "nmea0183.xte.magnitude",
10528 FT_STRING, BASE_NONE,
10529 NULL((void*)0), 0x0,
10530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10531 {&hf_nmea0183_xte_direction,
10532 {"Direction to Steer (nm)", "nmea0183.xte.steer",
10533 FT_CHAR, BASE_NONE,
10534 VALS(steer_direction)((0 ? (const struct _value_string*)0 : ((steer_direction)))), 0x0,
10535 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10536 {&hf_nmea0183_xte_mode,
10537 {"Mode Indicator", "nmea0183.xte.mode",
10538 FT_CHAR, BASE_NONE,
10539 VALS(mode_indicator)((0 ? (const struct _value_string*)0 : ((mode_indicator)))), 0x0,
10540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10541 {&hf_nmea0183_xtr_direction,
10542 {"Direction to Steer (nm)", "nmea0183.xtr.steer",
10543 FT_CHAR, BASE_NONE,
10544 VALS(steer_direction)((0 ? (const struct _value_string*)0 : ((steer_direction)))), 0x0,
10545 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10546 {&hf_nmea0183_xtr_magnitude,
10547 {"Magnitude of Cross-Track-Error (XTE)", "nmea0183.xtr.magnitude",
10548 FT_STRING, BASE_NONE,
10549 NULL((void*)0), 0x0,
10550 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10551 {&hf_nmea0183_zda_date_day,
10552 {"Day", "nmea0183.zda_date_day",
10553 FT_STRING, BASE_NONE,
10554 NULL((void*)0), 0x0,
10555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10556 {&hf_nmea0183_zda_date_month,
10557 {"Month", "nmea0183.zda_date_month",
10558 FT_STRING, BASE_NONE,
10559 NULL((void*)0), 0x0,
10560 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10561 {&hf_nmea0183_zda_date_year,
10562 {"Year", "nmea0183.zda_date_year",
10563 FT_STRING, BASE_NONE,
10564 NULL((void*)0), 0x0,
10565 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10566 {&hf_nmea0183_zda_local_zone_hour,
10567 {"Local zone hour", "nmea0183.zda_local_zone_hour",
10568 FT_STRING, BASE_NONE,
10569 NULL((void*)0), 0x0,
10570 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10571 { &hf_nmea0183_zda_local_zone_minute,
10572 {"Local zone minute", "nmea0183.zda_local_zone_minute",
10573 FT_STRING, BASE_NONE,
10574 NULL((void*)0), 0x0,
10575 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10576 {&hf_nmea0183_zda_time,
10577 {"UTC Time", "nmea0183.zda_time",
10578 FT_NONE, BASE_NONE,
10579 NULL((void*)0), 0x0,
10580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10581 {&hf_nmea0183_zda_time_hour,
10582 {"Hour", "nmea0183.zda_time_hour",
10583 FT_STRING, BASE_NONE,
10584 NULL((void*)0), 0x0,
10585 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10586 {&hf_nmea0183_zda_time_minute,
10587 {"Minute", "nmea0183.zda_time_minute",
10588 FT_STRING, BASE_NONE,
10589 NULL((void*)0), 0x0,
10590 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10591 {&hf_nmea0183_zda_time_second,
10592 {"Second", "nmea0183.zda_time_second",
10593 FT_STRING, BASE_NONE,
10594 NULL((void*)0), 0x0,
10595 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10596 {&hf_nmea0183_zdl_dist,
10597 {"Distance to point (nm)", "nmea0183.zdl.dist",
10598 FT_STRING, BASE_NONE,
10599 NULL((void*)0), 0x0,
10600 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10601 {&hf_nmea0183_zdl_time,
10602 {"Time to point (hours)", "nmea0183.zdl.time",
10603 FT_STRING, BASE_NONE,
10604 NULL((void*)0), 0x0,
10605 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10606 {&hf_nmea0183_zdl_type,
10607 {"Type of Point", "nmea0183.zdl.type",
10608 FT_CHAR, BASE_NONE,
10609 VALS(point_type_vals)((0 ? (const struct _value_string*)0 : ((point_type_vals)))), 0x0,
10610 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10611 {&hf_nmea0183_zfo_elapsed,
10612 {"Elapsed Time (hours)", "nmea0183.zfo.elapsed",
10613 FT_STRING, BASE_NONE,
10614 NULL((void*)0), 0x0,
10615 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10616 {&hf_nmea0183_zfo_origin,
10617 {"Origin Waypoint ID", "nmea0183.zfo.waypoint",
10618 FT_STRING, BASE_NONE,
10619 NULL((void*)0), 0x0,
10620 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10621 {&hf_nmea0183_zfo_utc,
10622 {"UTC of Observation", "nmea0183.zfo.utc",
10623 FT_STRING, BASE_NONE,
10624 NULL((void*)0), 0x0,
10625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10626 {&hf_nmea0183_ztg_dest,
10627 {"Destination Waypoint ID", "nmea0183.ztg.waypoint",
10628 FT_STRING, BASE_NONE,
10629 NULL((void*)0), 0x0,
10630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10631 {&hf_nmea0183_ztg_time_left,
10632 {"Time-to-go (hours)", "nmea0183.ztg.time_left",
10633 FT_STRING, BASE_NONE,
10634 NULL((void*)0), 0x0,
10635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
10636 {&hf_nmea0183_ztg_utc,
10637 {"UTC of Observation", "nmea0183.ztg.utc",
10638 FT_STRING, BASE_NONE,
10639 NULL((void*)0), 0x0,
10640 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}}
10641};
10642
10643 /* Setup protocol subtree array */
10644 static int *ett[] = {
10645 &ett_nmea0183,
10646 &ett_nmea0183_checksum,
10647 &ett_nmea0183_sentence,
10648 &ett_nmea0183_zda_time,
10649 &ett_nmea0183_alr_time,
10650 &ett_nmea0183_gga_time,
10651 &ett_nmea0183_gga_latitude,
10652 &ett_nmea0183_gga_longitude,
10653 &ett_nmea0183_gll_time,
10654 &ett_nmea0183_gll_latitude,
10655 &ett_nmea0183_gll_longitude,
10656 &ett_nmea0183_gst_time,
10657 &ett_nmea0183_tag_block,
10658 &ett_nmea0183_fd,
10659 &ett_nmea0183_legacy_satellite_info
10660 };
10661
10662 static ei_register_info ei[] = {
10663 {&ei_nmea0183_invalid_first_character,
10664 {"nmea0183.invalid_first_character", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10665 "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)}}
}},
10666 {&ei_nmea0183_missing_checksum_character,
10667 {"nmea0183.missing_checksum_character", PI_MALFORMED0x07000000, PI_ERROR0x00800000,
10668 "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)}}
}},
10669 {&ei_nmea0183_invalid_end_of_line,
10670 {"nmea0183.invalid_end_of_line", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10671 "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)}}
}},
10672 {&ei_nmea0183_checksum_incorrect,
10673 {"nmea0183.checksum_incorrect", PI_CHECKSUM0x01000000, PI_WARN0x00600000,
10674 "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)}}
}},
10675 {&ei_nmea0183_sentence_too_long,
10676 {"nmea0183.sentence_too_long", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10677 "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)}}
}},
10678 {&ei_nmea0183_field_time_too_short,
10679 {"nmea0183.field_time_too_short", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10680 "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)}}
}},
10681 {&ei_nmea0183_field_latitude_too_short,
10682 {"nmea0183.field_latitude_too_short", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10683 "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)}}
}},
10684 {&ei_nmea0183_field_longitude_too_short,
10685 {"nmea0183.field_longitude_too_short", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10686 "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)}}
}},
10687 {&ei_nmea0183_field_missing,
10688 {"nmea0183.field_missing", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10689 "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)}}
}},
10690 {&ei_nmea0183_field_uint_invalid,
10691 {"nmea0183.field_uint_invalid", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10692 "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)}}
}},
10693 {&ei_nmea0183_sat_prn_invalid,
10694 {"nmea0183.sat_prn_invalid", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10695 "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)}}
}},
10696 {&ei_nmea0183_gga_altitude_unit_incorrect,
10697 {"nmea0183.gga_altitude_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10698 "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)}}
}},
10699 {&ei_nmea0183_gga_geoidal_separation_unit_incorrect,
10700 {"nmea0183.gga_geoidal_separation_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10701 "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)}}
}},
10702 {&ei_nmea0183_hdt_unit_incorrect,
10703 {"nmea0183.hdt_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10704 "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)}}
}},
10705 {&ei_nmea0183_vhw_true_heading_unit_incorrect,
10706 {"nmea0183.vhw_true_heading_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10707 "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)}}
}},
10708 {&ei_nmea0183_vhw_magnetic_heading_unit_incorrect,
10709 {"nmea0183.vhw_magnetic_heading_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10710 "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)}}
}},
10711 {&ei_nmea0183_vhw_water_speed_knot_unit_incorrect,
10712 {"nmea0183.vhw_water_speed_knot_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10713 "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)}}
}},
10714 {&ei_nmea0183_vhw_water_speed_kilometer_unit_incorrect,
10715 {"nmea0183.vhw_water_speed_kilometer_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10716 "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)}}
}},
10717 {&ei_nmea0183_vlw_cumulative_water_unit_incorrect,
10718 {"nmea0183.vlw_cumulative_water_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10719 "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)}}
}},
10720 {&ei_nmea0183_vlw_trip_water_unit_incorrect,
10721 {"nmea0183.vlw_trip_water_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10722 "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)}}
}},
10723 {&ei_nmea0183_vlw_cumulative_ground_unit_incorrect,
10724 {"nmea0183.vlw_cumulative_ground_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10725 "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)}}
}},
10726 {&ei_nmea0183_vlw_trip_ground_unit_incorrect,
10727 {"nmea0183.vlw_trip_ground_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10728 "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)}}
}},
10729 {&ei_nmea0183_vtg_true_course_unit_incorrect,
10730 {"nmea0183.vtg_true_course_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10731 "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)}}
}},
10732 {&ei_nmea0183_vtg_magnetic_course_unit_incorrect,
10733 {"nmea0183.vtg_magnetic_course_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10734 "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)}}
}},
10735 {&ei_nmea0183_vtg_ground_speed_knot_unit_incorrect,
10736 {"nmea0183.vtg_ground_speed_knot_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10737 "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)}}
}},
10738 {&ei_nmea0183_vtg_ground_speed_kilometer_unit_incorrect,
10739 {"nmea0183.vtg_ground_speed_kilometer_unit_incorrect", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10740 "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)}}
}},
10741 {&ei_nmea0183_legacy_nonstandard,
10742 {"nmea0183.legacy.nonstandard", PI_PROTOCOL0x09000000, PI_WARN0x00600000,
10743 "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)}}
}},
10744 {&ei_nmea0183_legacy_empty_response,
10745 {"nmea0183.legacy.empty_response", PI_RESPONSE_CODE0x03000000, PI_WARN0x00600000,
10746 "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)}}
}}};
10747
10748 proto_nmea0183 = proto_register_protocol("NMEA 0183 protocol", "NMEA 0183", "nmea0183");
10749 proto_nmea0183_bin = proto_register_protocol("NMEA 0183 binary protocol", "NMEA 0183 BIN", "nmea0183_bin");
10750
10751 proto_register_field_array(proto_nmea0183, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
10752 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
10753 expert_nmea0183 = expert_register_protocol(proto_nmea0183);
10754 expert_register_field_array(expert_nmea0183, ei, array_length(ei)(sizeof (ei) / sizeof (ei)[0]));
10755
10756 nmea0183_handle = register_dissector("nmea0183", dissect_nmea0183, proto_nmea0183);
10757}
10758
10759void proto_reg_handoff_nmea0183(void)
10760{
10761 /* Register the UDP PDU NMEA0183 handle for heuristic dissection */
10762 heur_dissector_add("udp", dissect_nmea0183_heur, "NMEA0183 over UDP",
10763 "nmea0183_udp", proto_nmea0183, HEURISTIC_DISABLE);
10764 dissector_add_for_decode_as_with_preference("udp.port", nmea0183_handle);
10765}