Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-ua3g.c
blobc8573e596e54627681f3d2418bc35ecc3277038a
1 /* packet-ua3g.c
2 * Routines for UA3G (Universal Alcatel) packet dissection.
3 * Copyright 2012, Alcatel-Lucent Enterprise <lars.ruoff@alcatel-lucent.com>
4 * Copyright 2017, Alcatel-Lucent Enterprise <nicolas.bertin@al-enterprise.com>
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
8 * Copyright 1998 Gerald Combs
10 * SPDX-License-Identifier: GPL-2.0-or-later
13 #include "config.h"
15 #include <epan/packet.h>
16 #include <epan/prefs.h>
17 #include <epan/tfs.h>
18 #include <epan/unit_strings.h>
20 #include <wsutil/array.h>
21 #include "packet-rtp.h"
22 #include "packet-rtcp.h"
24 #include "packet-uaudp.h"
26 void proto_register_ua3g(void);
27 void proto_reg_handoff_ua3g(void);
28 /*-----------------------------------------------------------------------------
29 Globals
30 ---------------------------------------------------------------------------*/
32 #if 0
33 static dissector_table_t ua3g_opcode_dissector_table;
34 #endif
36 static int proto_ua3g;
37 static int ett_ua3g;
38 static int ett_ua3g_body;
39 static int ett_ua3g_param;
40 static int ett_ua3g_param_sub;
41 static int ett_ua3g_option;
42 static int ett_ua3g_beep_beep_destination;
43 static int ett_ua3g_note;
45 static bool setup_conversations_enabled = true;
47 static int hf_ua3g_length;
48 static int hf_ua3g_opcode_sys;
49 static int hf_ua3g_opcode_term;
50 static int hf_ua3g_opcode_production_test;
51 static int hf_ua3g_opcode_subservice_reset;
52 static int hf_ua3g_opcode_are_you_there;
53 static int hf_ua3g_opcode_set_speaker_vol;
54 static int hf_ua3g_opcode_trace_on;
55 static int hf_ua3g_ip;
56 static int hf_ua3g_ip_cs;
57 static int hf_ua3g_command_led;
58 static int hf_ua3g_command_lcd_line;
59 static int hf_ua3g_main_voice_mode;
60 static int hf_ua3g_command_set_clck;
61 static int hf_ua3g_external_ringing_command;
62 static int hf_ua3g_lcd_cursor;
63 static int hf_ua3g_command_beep;
64 static int hf_ua3g_command_sidetone;
65 static int hf_ua3g_command_mute;
66 static int hf_ua3g_command_feedback;
67 static int hf_ua3g_command_audio_config;
68 static int hf_ua3g_command_key_release;
69 static int hf_ua3g_command_amplified_handset;
70 static int hf_ua3g_command_loudspeaker;
71 static int hf_ua3g_command_announce;
72 static int hf_ua3g_command_ring;
73 static int hf_ua3g_command_ua_dwl_protocol;
74 static int hf_ua3g_command_unsolicited_msg;
75 static int hf_ua3g_ip_device_routing_stop_rtp_parameter;
76 static int hf_ua3g_ip_device_routing_stop_rtp_parameter_length;
77 static int hf_ua3g_ip_device_routing_stop_rtp_parameter_value_num;
78 static int hf_ua3g_ip_device_routing_stop_rtp_parameter_value_bytes;
79 /* Generated from convert_proto_tree_add_text.pl */
80 static int hf_ua3g_ip_device_routing_start_tone_direction;
81 static int hf_ua3g_ip_device_routing_start_tone_num_entries;
82 static int hf_ua3g_ip_device_routing_def_tones_num_entries;
83 static int hf_ua3g_cs_ip_device_routing_cmd00_characteristic_number;
84 static int hf_ua3g_subdevice_msg_subdev_type;
85 static int hf_ua3g_unsolicited_msg_next_byte_of_bad_segment;
86 static int hf_ua3g_ip_device_routing_start_tone_identification;
87 static int hf_ua3g_ip_device_routing_def_tones_level_2;
88 static int hf_ua3g_r_w_peripheral_content;
89 static int hf_ua3g_subdevice_metastate_subchannel_address;
90 static int hf_ua3g_subdevice_parameter_bytes;
91 static int hf_ua3g_subdevice_msg_parameter_bytes;
92 static int hf_ua3g_set_clck_timer_pos_call_timer_column_number;
93 static int hf_ua3g_unsolicited_msg_segment_failure_s;
94 static int hf_ua3g_ip_device_routing_reset_parameter;
95 static int hf_ua3g_ip_device_routing_get_param_req_parameter;
96 static int hf_ua3g_set_lcd_contrast_driver_number;
97 static int hf_ua3g_dwl_special_char_character_number;
98 static int hf_ua3g_cs_ip_device_routing_cmd00_vta_type;
99 static int hf_ua3g_ua_dwl_protocol_cause;
100 static int hf_ua3g_audio_padded_path_emission_padded_level;
101 static int hf_ua3g_set_clck_timer_pos_clock_column_number;
102 static int hf_ua3g_segment_msg_num_remaining;
103 static int hf_ua3g_ip_device_routing_digit_value;
104 static int hf_ua3g_super_msg_data;
105 static int hf_ua3g_unsolicited_msg_hardware_version;
106 static int hf_ua3g_voice_channel_announce;
107 static int hf_ua3g_ring_silent;
108 static int hf_ua3g_audio_config_handsfree_return;
109 static int hf_ua3g_dwl_dtmf_clck_format_inter_digit_pause_time;
110 static int hf_ua3g_ip_device_routing_set_param_req_parameter_length;
111 static int hf_ua3g_unsolicited_msg_opcode_bad_segment;
112 static int hf_ua3g_unsolicited_msg_firmware_version_loader;
113 static int hf_ua3g_debug_in_line;
114 static int hf_ua3g_voice_channel_b_microphones;
115 static int hf_ua3g_beep_beep_number;
116 static int hf_ua3g_main_voice_mode_tune;
117 static int hf_ua3g_super_msg_length;
118 static int hf_ua3g_ip_device_routing_redirect_parameter;
119 static int hf_ua3g_unsolicited_msg_next_byte_of_bad_command;
120 static int hf_ua3g_unsolicited_msg_self_test_result;
121 static int hf_ua3g_beep_on_off;
122 static int hf_ua3g_ua_dwl_protocol_binary_length;
123 static int hf_ua3g_ring_speaker_level;
124 static int hf_ua3g_voice_channel_channel_mode;
125 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_length;
126 static int hf_ua3g_ip_device_routing_start_rtp_parameter;
127 static int hf_ua3g_subdevice_metastate_new_metastate;
128 static int hf_ua3g_unsolicited_msg_other_information_2;
129 static int hf_ua3g_set_lcd_contrast_contrast_value;
130 static int hf_ua3g_unsolicited_msg_vta_type;
131 static int hf_ua3g_ua_dwl_protocol_packet_number;
132 static int hf_ua3g_unsolicited_msg_segment_failure_l;
133 static int hf_ua3g_voice_channel_b_ear_piece;
134 static int hf_ua3g_subdevice_msg_subdev_address;
135 static int hf_ua3g_ring_progressive;
136 static int hf_ua3g_ua_dwl_protocol_item_version;
137 static int hf_ua3g_ip_device_routing_reset_parameter_length;
138 static int hf_ua3g_dwl_dtmf_clck_format_minimum_on_time;
139 static int hf_ua3g_ring_melody;
140 static int hf_ua3g_ua_dwl_protocol_item_identifier;
141 static int hf_ua3g_main_voice_mode_speaker_volume;
142 static int hf_ua3g_ip_device_routing_listen_rtp_parameter_length;
143 static int hf_ua3g_ringing_cadence_length;
144 static int hf_ua3g_software_reset;
145 static int hf_ua3g_feedback_level;
146 static int hf_ua3g_ip_phone_warmstart;
147 static int hf_ua3g_subdevice_opcode;
148 static int hf_ua3g_unsolicited_msg_device_event;
149 static int hf_ua3g_segment_message_data;
150 static int hf_ua3g_main_voice_mode_sending_level;
151 static int hf_ua3g_subdevice_msg_subdevice_opcode;
152 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter;
153 static int hf_ua3g_audio_padded_path_reception_padded_level;
154 static int hf_ua3g_ua_dwl_protocol_force_mode;
155 static int hf_ua3g_lcd_line_cmd_starting_column;
156 static int hf_ua3g_subdevice_address;
157 static int hf_ua3g_ip_device_routing_pause_restart_rtp_parameter;
158 static int hf_ua3g_audio_config_ignored;
159 static int hf_ua3g_lcd_line_cmd_lcd_options;
160 static int hf_ua3g_main_voice_mode_cadence;
161 static int hf_ua3g_segment_msg_length;
162 static int hf_ua3g_ua_dwl_protocol_acknowledge;
163 static int hf_ua3g_command_led_number;
164 static int hf_ua3g_set_clck_timer_pos_call_timer_line_number;
165 static int hf_ua3g_unsolicited_msg_segment_failure_t;
166 static int hf_ua3g_ip_device_routing_start_tone_duration;
167 static int hf_ua3g_unsolicited_msg_other_information_1;
168 static int hf_ua3g_unsolicited_msg_firmware_datas_patch_version;
169 static int hf_ua3g_ring_beep_number;
170 static int hf_ua3g_feedback_duration;
171 static int hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_length;
172 static int hf_ua3g_audio_config_law;
173 static int hf_ua3g_ua_dwl_protocol_checksum;
174 static int hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_value;
175 static int hf_ua3g_audio_config_handsfree_handsfree;
176 static int hf_ua3g_ringing_cadence_cadence;
177 static int hf_ua3g_lcd_cursor_line_number;
178 static int hf_ua3g_ip_device_routing_def_tones_level_1;
179 static int hf_ua3g_unsolicited_msg_opcode_of_bad_command;
180 static int hf_ua3g_ua_dwl_protocol_download_ack_status;
181 static int hf_ua3g_voice_channel_main_voice;
182 static int hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_length;
183 static int hf_ua3g_icon_cmd_segment;
184 static int hf_ua3g_cs_ip_device_routing_cmd01_incident_0;
185 static int hf_ua3g_beep_destination;
186 static int hf_ua3g_ip_device_routing_def_tones_frequency_1;
187 static int hf_ua3g_unsolicited_msg_datas_version;
188 static int hf_ua3g_dwl_dtmf_clck_format_dtmf_country_adaptation;
189 static int hf_ua3g_ringing_cadence_on_off;
190 static int hf_ua3g_audio_config_volume_level;
191 static int hf_ua3g_voice_channel_b_general;
192 static int hf_ua3g_beep_terminator;
193 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter;
194 static int hf_ua3g_unsolicited_msg_firmware_version_bootloader;
195 static int hf_ua3g_ip_device_routing_set_param_req_parameter;
196 static int hf_ua3g_ip_device_routing_start_rtp_direction;
197 static int hf_ua3g_set_clck_timer_pos_clock_line_number;
198 static int hf_ua3g_voice_channel_b_loud_speaker;
199 static int hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter;
200 static int hf_ua3g_on_off_level_level_on_loudspeaker;
201 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_length;
202 static int hf_ua3g_main_voice_mode_microphone_volume;
203 static int hf_ua3g_sidetone_level;
204 static int hf_ua3g_beep_number_of_notes;
205 static int hf_ua3g_unsolicited_msg_segment_failure_num;
206 static int hf_ua3g_dwl_special_char_byte;
207 static int hf_ua3g_ring_cadence;
208 static int hf_ua3g_unsolicited_msg_device_type;
209 static int hf_ua3g_voice_channel_codec;
210 static int hf_ua3g_ip_device_routing_redirect_parameter_length;
211 static int hf_ua3g_ip_device_routing_listen_rtp_parameter;
212 static int hf_ua3g_beep_cadence;
213 static int hf_ua3g_voice_channel_voice_channel;
214 static int hf_ua3g_unsolicited_msg_other_information;
215 static int hf_ua3g_ip_device_routing_def_tones_frequency_2;
216 static int hf_ua3g_digit_dialed_digit_value;
217 static int hf_ua3g_unsolicited_msg_subdevice_address;
218 static int hf_ua3g_ua_dwl_protocol_packet_download_end_ack_ok_status;
219 static int hf_ua3g_r_w_peripheral_address;
220 static int hf_ua3g_icon_cmd_icon_number;
221 static int hf_ua3g_dwl_dtmf_clck_format_clock_time_format;
222 static int hf_ua3g_ip_device_routing_start_rtp_parameter_length;
223 static int hf_ua3g_i_m_here_id_code;
224 static int hf_ua3g_ua_dwl_protocol_item_version_nc;
225 static int hf_ua3g_unsolicited_msg_firmware_version;
226 static int hf_ua3g_segment_msg_segment;
227 static int hf_ua3g_ip_device_routing_reset_parameter_noe_update;
228 static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_bootloader;
229 static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_data;
230 static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_customization;
231 static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_localization;
232 static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_code;
233 static int hf_ua3g_ip_device_routing_reset_parameter_noe_update_sip;
234 static int hf_ua3g_ip_device_routing_reset_parameter_value;
235 static int hf_ua3g_ip_device_routing_reset_parameter_bad_sec_mode;
236 static int hf_ua3g_ip_device_routing_reset_parameter_cust_name;
237 static int hf_ua3g_ip_device_routing_reset_parameter_l10n_name;
238 static int hf_ua3g_ip_device_routing_reset_parameter_appl_mode;
239 static int hf_ua3g_ip_device_routing_reset_parameter_sip_name;
240 static int hf_ua3g_ip_device_routing_reset_parameter_reset_mac;
241 static int hf_ua3g_ip_device_routing_start_rtp_parameter_ip;
242 static int hf_ua3g_ip_device_routing_start_rtp_parameter_compressor;
243 static int hf_ua3g_ip_device_routing_start_rtp_parameter_value;
244 static int hf_ua3g_ip_device_routing_start_rtp_parameter_enabler;
245 static int hf_ua3g_ip_device_routing_start_rtp_parameter_send_qos;
246 static int hf_ua3g_ip_device_routing_start_rtp_parameter_dtmf_sending;
247 static int hf_ua3g_ip_device_routing_start_rtp_parameter_rfc2198;
248 static int hf_ua3g_ip_device_routing_start_rtp_parameter_srtp_encryption;
249 static int hf_ua3g_ip_device_routing_start_rtp_parameter_uint;
250 static int hf_ua3g_ip_device_routing_redirect_parameter_ip;
251 static int hf_ua3g_ip_device_routing_redirect_parameter_uint;
252 static int hf_ua3g_ip_device_routing_redirect_parameter_value;
253 static int hf_ua3g_ip_device_routing_listen_rtp_parameter_ip;
254 static int hf_ua3g_ip_device_routing_listen_rtp_parameter_port;
255 static int hf_ua3g_ip_device_routing_listen_rtp_parameter_value;
256 static int hf_ua3g_ip_device_routing_set_param_req_parameter_compressor;
257 static int hf_ua3g_ip_device_routing_set_param_req_parameter_err_string;
258 static int hf_ua3g_ip_device_routing_set_param_req_parameter_tftp_backup_ip;
259 static int hf_ua3g_ip_device_routing_set_param_req_parameter_set_pc_port_status;
260 static int hf_ua3g_ip_device_routing_set_param_req_parameter_record_rtp_auth;
261 static int hf_ua3g_ip_device_routing_set_param_req_parameter_security_flag_filter;
262 static int hf_ua3g_ip_device_routing_set_param_req_parameter_stable_mode;
263 static int hf_ua3g_ip_device_routing_set_param_req_parameter_skin_id;
264 static int hf_ua3g_ip_device_routing_set_param_req_parameter_language_id;
265 static int hf_ua3g_ip_device_routing_set_param_req_parameter_usb_boost;
266 static int hf_ua3g_ip_device_routing_set_param_req_parameter_als_device;
267 static int hf_ua3g_ip_device_routing_set_param_req_parameter_busy_light;
268 static int hf_ua3g_ip_device_routing_set_param_req_parameter_audio_env;
269 static int hf_ua3g_ip_device_routing_set_param_req_parameter_uint;
270 static int hf_ua3g_ip_device_routing_set_param_req_parameter_value;
271 static int hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_uint;
272 static int hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_remote_ip;
273 static int hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_uint;
274 static int hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_value;
275 static int hf_ua3g_ip_device_routing_freeseating_parameter;
276 static int hf_ua3g_ip_device_routing_freeseating_parameter_length;
277 static int hf_ua3g_ip_device_routing_freeseating_parameter_mac;
278 static int hf_ua3g_ip_device_routing_freeseating_parameter_ip;
279 static int hf_ua3g_ip_device_routing_freeseating_parameter_ipv6;
280 static int hf_ua3g_ip_device_routing_freeseating_parameter_do_reset;
281 static int hf_ua3g_ip_device_routing_freeseating_parameter_uint;
282 static int hf_ua3g_ip_device_routing_freeseating_parameter_value;
283 static int hf_ua3g_ip_device_routing_appl_parameter;
284 static int hf_ua3g_ip_device_routing_appl_parameter_length;
285 static int hf_ua3g_ip_device_routing_appl_parameter_id;
286 static int hf_ua3g_ip_device_routing_appl_parameter_enable;
287 static int hf_ua3g_ip_device_routing_appl_parameter_url;
288 static int hf_ua3g_ip_device_routing_appl_parameter_uint;
289 static int hf_ua3g_ip_device_routing_appl_parameter_value;
290 static int hf_ua3g_main_voice_mode_handset_level;
291 static int hf_ua3g_main_voice_mode_headset_level;
292 static int hf_ua3g_main_voice_mode_handsfree_level;
293 static int hf_ua3g_audio_config_dpi_chan_ua_tx1;
294 static int hf_ua3g_audio_config_dpi_chan_ua_tx2;
295 static int hf_ua3g_audio_config_dpi_chan_gci_tx1;
296 static int hf_ua3g_audio_config_dpi_chan_gci_tx2;
297 static int hf_ua3g_audio_config_dpi_chan_cod_tx;
298 static int hf_ua3g_audio_config_audio_circuit_dth;
299 static int hf_ua3g_audio_config_audio_circuit_dtr;
300 static int hf_ua3g_audio_config_audio_circuit_dtf;
301 static int hf_ua3g_audio_config_audio_circuit_str;
302 static int hf_ua3g_audio_config_audio_circuit_ahp1;
303 static int hf_ua3g_audio_config_audio_circuit_ahp2;
304 static int hf_ua3g_audio_config_audio_circuit_ath;
305 static int hf_ua3g_audio_config_audio_circuit_atr;
306 static int hf_ua3g_audio_config_audio_circuit_atf;
307 static int hf_ua3g_audio_config_audio_circuit_alm;
308 static int hf_ua3g_audio_config_loudspeaker_aco_param_group_listen;
309 static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_attenuation;
310 static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_stay_in_send;
311 static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mtx;
312 static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mrc;
313 static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_trans_threshold;
314 static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_trans_threshold;
315 static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_recv_threshold;
316 static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_recv_threshold;
317 static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_med_recv_threshold;
318 static int hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_high_recv_threshold;
319 static int hf_ua3g_ua_dwl_protocol_files_inc_boot_binary;
320 static int hf_ua3g_ua_dwl_protocol_files_inc_loader_binary;
321 static int hf_ua3g_ua_dwl_protocol_files_inc_appli_binary;
322 static int hf_ua3g_ua_dwl_protocol_files_inc_data_binary;
323 static int hf_ua3g_ua_dwl_protocol_model_selection_a;
324 static int hf_ua3g_ua_dwl_protocol_model_selection_b;
325 static int hf_ua3g_ua_dwl_protocol_model_selection_c;
326 static int hf_ua3g_ua_dwl_protocol_model_selection_country_ver;
327 static int hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe1;
328 static int hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe2;
329 static int hf_ua3g_ua_dwl_protocol_memory_sizes_flash;
330 static int hf_ua3g_ua_dwl_protocol_memory_sizes_ext_ram;
331 static int hf_ua3g_unsolicited_msg_char_num_vta_subtype;
332 static int hf_ua3g_unsolicited_msg_char_num_generation;
333 static int hf_ua3g_unsolicited_msg_char_num_design;
334 static int hf_ua3g_unsolicited_msg_hardware_config_vta_type;
335 static int hf_ua3g_unsolicited_msg_hardware_config_design;
336 static int hf_ua3g_unsolicited_msg_hardware_config_subtype;
337 static int hf_ua3g_unsolicited_msg_hardware_config_hard_config_chip;
338 static int hf_ua3g_unsolicited_msg_hardware_config_hard_config_flash;
339 static int hf_ua3g_unsolicited_msg_hardware_config_config_ram;
340 static int hf_ua3g_unsolicited_msg_hardware_config;
341 static int hf_ua3g_unsolicited_msg_hardware_config_export_full;
342 static int hf_ua3g_unsolicited_msg_hardware_config_ethernet_hardware;
343 static int hf_ua3g_unsolicited_msg_hardware_config_extended_edition;
344 static int hf_ua3g_unsolicited_msg_hardware_config_wideband;
345 static int hf_ua3g_unsolicited_msg_hardware_config_3g_set;
346 static int hf_ua3g_unsolicited_msg_hardware_config_8082_set;
347 static int hf_ua3g_unsolicited_msg_hardware_config_super_wideband;
348 static int hf_ua3g_unsolicited_msg_hook_status;
349 static int hf_ua3g_unsolicited_msg_additional_vta_type;
350 static int hf_ua3g_unsolicited_msg_capability_info_bluetooth_supported;
351 static int hf_ua3g_unsolicited_msg_capability_info_vpn_encryption_status;
352 static int hf_ua3g_unsolicited_msg_capability_info_vpn;
353 static int hf_ua3g_unsolicited_msg_capability_info_ipsec;
354 static int hf_ua3g_unsolicited_msg_capability_info_dtls;
355 static int hf_ua3g_unsolicited_msg_capability_info_wlan_status;
356 static int hf_ua3g_unsolicited_msg_capability_info_reserved;
357 static int hf_ua3g_special_key_shift;
358 static int hf_ua3g_special_key_ctrl;
359 static int hf_ua3g_special_key_alt;
360 static int hf_ua3g_special_key_cmd;
361 static int hf_ua3g_special_key_shift_prime;
362 static int hf_ua3g_special_key_ctrl_prime;
363 static int hf_ua3g_special_key_alt_prime;
364 static int hf_ua3g_special_key_cmd_prime;
365 static int hf_ua3g_lcd_line_cmd_lcd_options_call_timer;
366 static int hf_ua3g_lcd_line_cmd_lcd_options_blink;
367 static int hf_ua3g_lcd_line_cmd_lcd_options_call_timer_control;
368 static int hf_ua3g_lcd_line_cmd_lcd_options_call_timer_display;
369 static int hf_ua3g_lcd_line_cmd_lcd_options_time_of_day_display;
370 static int hf_ua3g_lcd_line_cmd_lcd_options_suspend_display_refresh;
371 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_firmware_version;
372 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_tscip_version;
373 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_ip;
374 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_uint;
375 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_bytes;
376 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_mac_address;
377 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_uint;
378 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_value;
379 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_speed;
380 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_duplex;
381 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_speed;
382 static int hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_duplex;
383 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_type_of_equip;
384 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_firmware_version;
385 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_ip;
386 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_string;
387 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_codec;
388 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_vad;
389 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_ece;
390 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_voice_mode;
391 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_delay_distribution;
392 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_bfi;
393 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution;
394 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021Q_used;
395 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021P_priority;
396 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_vlan_id;
397 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_diffserv;
398 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution_200ms;
399 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_rtp_lost;
400 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_uint;
401 static int hf_ua3g_cs_ip_device_routing_cmd03_parameter_jitter_depth_distribution;
402 static int hf_ua3g_special_key_param_dtmf;
403 static int hf_ua3g_special_key_hookswitch_status;
404 static int hf_ua3g_subdevice_state;
405 static int hf_ua3g_cs_ip_device_routing_param_identifier;
406 static int hf_ua3g_key_number;
407 static int hf_ua3g_ua_dwl_protocol_binary_info;
408 static int hf_ua3g_lcd_line_cmd_unused;
409 static int hf_ua3g_lcd_line_cmd_ascii_char;
410 static int hf_ua3g_call_timer;
411 static int hf_ua3g_current_time;
412 static int hf_ua3g_beep_beep_destination_handset;
413 static int hf_ua3g_beep_beep_destination_headset;
414 static int hf_ua3g_beep_beep_destination_loudspeaker;
415 static int hf_ua3g_beep_beep_destination_announce_loudspeaker;
416 static int hf_ua3g_beep_beep_destination_handsfree;
417 static int hf_ua3g_beep_beep_destination;
418 static int hf_ua3g_beep_freq_sample;
419 static int hf_ua3g_beep_level;
420 static int hf_ua3g_beep_duration;
421 static int hf_ua3g_device_configuration;
424 /* Definition of opcodes */
425 /* System To Terminal */
426 #define SC_NOP 0x00
427 #define SC_PRODUCTION_TEST 0x01 /* IP Phone */
428 #define SC_SUBDEVICE_ESCAPE 0x02 /* IP Phone */
429 #define SC_SOFT_RESET 0x03
430 #define SC_IP_PHONE_WARMSTART 0x04 /* IP Phone */
431 #define SC_HE_ROUTING 0x05 /* IP Phone - NOT EXPECTED */
432 #define SC_SUBDEVICE_RESET 0x06
433 #define SC_LOOPBACK_ON 0x07 /* IP Phone & UA NOE */
434 #define SC_LOOPBACK_OFF 0x08 /* IP Phone & UA NOE */
435 #define SC_VIDEO_ROUTING 0x09 /* IP Phone - NOT EXPECTED */
436 #define SC_SUPER_MSG 0x0B
437 #define SC_SEGMENT_MSG 0x0C
438 #define SC_REMOTE_UA_ROUTING 0x0D /* IP Phone - NOT EXPECTED */
439 #define SC_VERY_REMOTE_UA_ROUTING 0x0E /* IP Phone - NOT EXPECTED */
440 #define SC_OSI_ROUTING 0x0F /* IP Phone - NOT EXPECTED */
441 #define SC_ABC_A_ROUTING 0x11 /* IP Phone - NOT EXPECTED */
442 #define SC_IBS_ROUTING 0x12 /* IP Phone - NOT EXPECTED */
443 #define SC_IP_DEVICE_ROUTING 0x13
444 #define SC_M_REFLEX_HUB_ROUTING 0x14 /* IP Phone - NOT EXPECTED */
445 #if 0
446 #define SC_NOE_CS_ROUTING 0x15 /* Decoded by packet-noe.c */
447 #define SC_NOE_PS_ROUTING 0x16 /* Decoded by packet-noe.c */
448 #endif
449 #define SC_SUPER_MSG_2 0x17
450 #define SC_DEBUG_IN_LINE 0x18
451 #define SC_LED_COMMAND 0x21 /* IP Phone */
452 #define SC_START_BUZZER 0x22 /* VTA */
453 #define SC_STOP_BUZZER 0x23 /* VTA */
454 #define SC_ENABLE_DTMF 0x24 /* Only IP NOE */
455 #define SC_DISABLE_DTMF 0x25 /* Only IP NOE */
456 #define SC_CLEAR_LCD_DISP 0x26 /* IP Phone */
457 #define SC_LCD_LINE_1_CMD 0x27 /* IP Phone */
458 #define SC_LCD_LINE_2_CMD 0x28 /* IP Phone */
459 #define SC_MAIN_VOICE_MODE 0x29
460 #define SC_VERSION_INQUIRY 0x2A
461 #define SC_ARE_YOU_THERE 0x2B /* IP Phone & UA NOE */
462 #define SC_SUBDEVICE_METASTATE 0x2C
463 #define SC_VTA_STATUS_INQUIRY 0x2D /* IP Phone */
464 #define SC_SUBDEVICE_STATE 0x2E
465 #define SC_DWL_DTMF_CLCK_FORMAT 0x30 /* IP Phone */
466 #define SC_SET_CLCK 0x31 /* IP Phone */
467 #define SC_VOICE_CHANNEL 0x32 /* IP Phone & UA NOE */
468 #define SC_EXTERNAL_RINGING 0x33
469 #define SC_LCD_CURSOR 0x35 /* IP Phone */
470 #define SC_DWL_SPECIAL_CHAR 0x36 /* IP Phone */
471 #define SC_SET_CLCK_TIMER_POS 0x38 /* IP Phone */
472 #define SC_SET_LCD_CONTRAST 0x39 /* IP Phone */
473 #define SC_AUDIO_IDLE 0x3A
474 #define SC_SET_SPEAKER_VOL 0x3B /* IP Phone */
475 #define SC_BEEP 0x3C
476 #define SC_SIDETONE 0x3D
477 #define SC_RINGING_CADENCE 0x3E
478 #define SC_MUTE 0x3F
479 #define SC_FEEDBACK 0x40
480 #define SC_KEY_RELEASE 0x41 /* IP Phone */
481 #define SC_TRACE_ON 0x42 /* IP Phone - NOT EXPECTED */
482 #define SC_TRACE_OFF 0x43 /* IP Phone - NOT EXPECTED */
483 #define SC_READ_PERIPHERAL 0x44 /* IP Phone - NOT EXPECTED */
484 #define SC_WRITE_PERIPHERAL 0x45 /* IP Phone - NOT EXPECTED */
485 #define SC_ALL_ICONS_OFF 0x46 /* IP Phone */
486 #define SC_ICON_CMD 0x47 /* IP Phone */
487 #define SC_AMPLIFIED_HANDSET 0x48 /* IP Phone */
488 #define SC_AUDIO_CONFIG 0x49
489 #define SC_AUDIO_PADDED_PATH 0x4A /* IP Phone */
490 #define SC_RELEASE_RADIO_LINK 0x4B /* IP Phone - NOT EXPECTED */
491 #define SC_DECT_HANDOVER 0x4C /* IP Phone - NOT EXPECTED */
492 #define SC_LOUDSPEAKER 0x4D
493 #define SC_ANNOUNCE 0x4E
494 #define SC_RING 0x4F
495 #define SC_UA_DWL_PROTOCOL 0x50 /* Only UA NOE */
497 /* Terminal To System */
498 #define CS_NOP_ACK 0x00
499 #define CS_HANDSET_OFFHOOK 0x01 /* IP Phone */
500 #define CS_HANDSET_ONHOOK 0x02 /* IP Phone */
501 #define CS_DIGIT_DIALED 0x03 /* IP Phone */
502 #define CS_SUBDEVICE_MSG 0x04
503 #define CS_HE_ROUTING 0x05 /* IP Phone - NOT EXPECTED */
504 #define CS_LOOPBACK_ON 0x06 /* IP Phone & UA NOE */
505 #define CS_LOOPBACK_OFF 0x07 /* IP Phone & UA NOE */
506 #define CS_VIDEO_ROUTING 0x09 /* IP Phone - NOT EXPECTED */
507 #define CS_WARMSTART_ACK 0x0A /* IP Phone */
508 #define CS_SUPER_MSG 0x0B /* IP Phone - NOT EXPECTED */
509 #define CS_SEGMENT_MSG 0x0C
510 #define CS_REMOTE_UA_ROUTING 0x0D /* IP Phone - NOT EXPECTED */
511 #define CS_VERY_REMOTE_UA_R 0x0E /* IP Phone - NOT EXPECTED */
512 #define CS_OSI_ROUTING 0x0F /* IP Phone - NOT EXPECTED */
513 #define CS_ABC_A_ROUTING 0x11 /* IP Phone - NOT EXPECTED */
514 #define CS_IBS_ROUTING 0x12 /* IP Phone - NOT EXPECTED */
515 #define CS_IP_DEVICE_ROUTING 0x13
516 #if 0
517 #define CS_NOE_CS_ROUTING 0x15 /* Decoded by packet-noe.c */
518 #define CS_NOE_PS_ROUTING 0x16 /* Decoded by packet-noe.c */
519 #endif
520 #define CS_SUPER_MSG_2 0x17
521 #define CS_DEBUG_IN_LINE 0x18
522 #define CS_NON_DIGIT_KEY_PUSHED 0x20 /* IP Phone */
523 #define CS_VERSION_RESPONSE 0x21
524 #define CS_I_M_HERE 0x22
525 #define CS_RSP_STATUS_INQUIRY 0x23 /* IP Phone */
526 #define CS_SUBDEVICE_STATE 0x24
527 #define CS_DIGIT_KEY_RELEASED 0x26 /* IP Phone */
528 #define CS_TRACE_ON_ACK 0x27 /* IP Phone */
529 #define CS_TRACE_OFF_ACK 0x28 /* IP Phone */
530 #define CS_SPECIAL_KEY_STATUS 0x29 /* IP Phone */
531 #define CS_KEY_RELEASED 0x2A /* IP Phone */
532 #define CS_PERIPHERAL_CONTENT 0x2B /* IP Phone */
533 #define CS_TM_KEY_PUSHED 0x2D /* IP Phone */
534 #define CS_UA_DWL_PROTOCOL 0x50 /* Only UA NOE */
535 #define CS_UNSOLICITED_MSG 0x9F
537 /* System To Terminal Opcodes */
538 static const value_string opcodes_vals_sys[] =
540 {SC_NOP , "NOP"},
541 {SC_PRODUCTION_TEST , "Production Test"}, /* IP Phone */
542 {SC_SUBDEVICE_ESCAPE , "Subdevice Escape To Subdevice"}, /* IP Phone */
543 {SC_SOFT_RESET , "Software Reset"},
544 {SC_IP_PHONE_WARMSTART , "IP-Phone Warmstart"}, /* IP Phone */
545 {SC_HE_ROUTING , "HE Routing Code"}, /* IP Phone - NOT EXPECTED */
546 {SC_SUBDEVICE_RESET , "Subdevice Reset"},
547 {SC_LOOPBACK_ON , "Loopback On"},
548 {SC_LOOPBACK_OFF , "Loopback Off"},
549 {SC_VIDEO_ROUTING , "Video Routing Code"}, /* IP Phone - NOT EXPECTED */
550 {SC_SUPER_MSG , "Super Message"},
551 {SC_SEGMENT_MSG , "Segment Message"},
552 {SC_REMOTE_UA_ROUTING , "Remote UA Routing Code"}, /* IP Phone - NOT EXPECTED */
553 {SC_VERY_REMOTE_UA_ROUTING , "Very Remote UA Routing Code"}, /* IP Phone - NOT EXPECTED */
554 {SC_OSI_ROUTING , "OSI Routing Code"}, /* IP Phone - NOT EXPECTED */
555 {SC_ABC_A_ROUTING , "ABC-A Routing Code"}, /* IP Phone - NOT EXPECTED */
556 {SC_IBS_ROUTING , "IBS Routing Code"}, /* IP Phone - NOT EXPECTED */
557 {SC_IP_DEVICE_ROUTING , "IP Device Routing"},
558 {SC_M_REFLEX_HUB_ROUTING , "Mutli-Reflex Hub Routing Code"}, /* IP Phone - NOT EXPECTED */
559 {SC_SUPER_MSG_2 , "Super Message 2"},
560 {SC_DEBUG_IN_LINE , "Debug In Line"},
561 {SC_LED_COMMAND , "Led Command"}, /* IP Phone */
562 {SC_START_BUZZER , "Start Buzzer"}, /* VTA */
563 {SC_STOP_BUZZER , "Stop Buzzer"}, /* VTA */
564 {SC_ENABLE_DTMF , "Enable DTMF"},
565 {SC_DISABLE_DTMF , "Disable DTMF"},
566 {SC_CLEAR_LCD_DISP , "Clear LCD Display"}, /* IP Phone */
567 {SC_LCD_LINE_1_CMD , "LCD Line 1 Commands"}, /* IP Phone */
568 {SC_LCD_LINE_2_CMD , "LCD Line 2 Commands"}, /* IP Phone */
569 {SC_MAIN_VOICE_MODE , "Main Voice Mode"},
570 {SC_VERSION_INQUIRY , "Version Inquiry"},
571 {SC_ARE_YOU_THERE , "Are You There?"},
572 {SC_SUBDEVICE_METASTATE , "Subdevice Metastate"},
573 {SC_VTA_STATUS_INQUIRY , "VTA Status Inquiry"}, /* IP Phone */
574 {SC_SUBDEVICE_STATE , "Subdevice State?"},
575 {SC_DWL_DTMF_CLCK_FORMAT , "Download DTMF & Clock Format"}, /* IP Phone */
576 {SC_SET_CLCK , "Set Clock"}, /* IP Phone */
577 {SC_VOICE_CHANNEL , "Voice Channel"}, /* IP Phone & UA NOE */
578 {SC_EXTERNAL_RINGING , "External Ringing"},
579 {SC_LCD_CURSOR , "LCD Cursor"}, /* IP Phone */
580 {SC_DWL_SPECIAL_CHAR , "Download Special Character"}, /* IP Phone */
581 {SC_SET_CLCK_TIMER_POS , "Set Clock/Timer Position"}, /* IP Phone */
582 {SC_SET_LCD_CONTRAST , "Set LCD Contrast"}, /* IP Phone */
583 {SC_AUDIO_IDLE , "Audio Idle"},
584 {SC_SET_SPEAKER_VOL , "Set Speaker Volume"}, /* IP Phone */
585 {SC_BEEP , "Beep"},
586 {SC_SIDETONE , "Sidetone"},
587 {SC_RINGING_CADENCE , "Set Programmable Ringing Cadence"},
588 {SC_MUTE , "Mute"},
589 {SC_FEEDBACK , "Feedback"},
590 {SC_KEY_RELEASE , "Key Release"}, /* IP Phone */
591 {SC_TRACE_ON , "Trace On"}, /* IP Phone - NOT EXPECTED */
592 {SC_TRACE_OFF , "Trace Off"}, /* IP Phone - NOT EXPECTED */
593 {SC_READ_PERIPHERAL , "Read Peripheral"}, /* IP Phone - NOT EXPECTED */
594 {SC_WRITE_PERIPHERAL , "Write Peripheral"}, /* IP Phone - NOT EXPECTED */
595 {SC_ALL_ICONS_OFF , "All Icons Off"}, /* IP Phone */
596 {SC_ICON_CMD , "Icon Command"}, /* IP Phone */
597 {SC_AMPLIFIED_HANDSET , "Amplified Handset (Boost)"}, /* IP Phone */
598 {SC_AUDIO_CONFIG , "Audio Config"},
599 {SC_AUDIO_PADDED_PATH , "Audio Padded Path"}, /* IP Phone */
600 {SC_RELEASE_RADIO_LINK , "Release Radio Link"}, /* IP Phone - NOT EXPECTED */
601 {SC_DECT_HANDOVER , "DECT External Handover Routing Code"}, /* IP Phone - NOT EXPECTED */
602 {SC_LOUDSPEAKER , "Loudspeaker"},
603 {SC_ANNOUNCE , "Announce"},
604 {SC_RING , "Ring"},
605 {SC_UA_DWL_PROTOCOL , "UA Download Protocol"},
606 {0, NULL}
608 static value_string_ext opcodes_vals_sys_ext = VALUE_STRING_EXT_INIT(opcodes_vals_sys);
610 /* Terminal To System Opcodes */
611 static const value_string opcodes_vals_term[] =
613 {CS_NOP_ACK , "NOP Acknowledge"},
614 {CS_HANDSET_OFFHOOK , "Handset Offhook"}, /* IP Phone */
615 {CS_HANDSET_ONHOOK , "Handset Onhook"}, /* IP Phone */
616 {CS_DIGIT_DIALED , "Digital Dialed"}, /* IP Phone */
617 {CS_SUBDEVICE_MSG , "Subdevice Message"},
618 {CS_HE_ROUTING , "HE Routing Response Code"}, /* IP Phone - NOT EXPECTED */
619 {CS_LOOPBACK_ON , "Loopback On Acknowledge"}, /* Same as CS To Terminal */
620 {CS_LOOPBACK_OFF , "Loopback Off Acknowledge"}, /* Same as CS To Terminal */
621 {CS_VIDEO_ROUTING , "Video Routing Response Code"}, /* IP Phone - NOT EXPECTED */
622 {CS_WARMSTART_ACK , "Warmstart Acknowledge"}, /* IP Phone */
623 {CS_SUPER_MSG , "Super Message"}, /* IP Phone - NOT EXPECTED */
624 {CS_SEGMENT_MSG , "Segment Message"}, /* Same as CS To Terminal */
625 {CS_REMOTE_UA_ROUTING , "Remote UA Routing Response Code"}, /* IP Phone - NOT EXPECTED */
626 {CS_VERY_REMOTE_UA_R , "Very Remote UA Routing Response Code"}, /* IP Phone - NOT EXPECTED */
627 {CS_OSI_ROUTING , "OSI Response Code"}, /* IP Phone - NOT EXPECTED */
628 {CS_ABC_A_ROUTING , "ABC-A Routing Response Code"}, /* IP Phone - NOT EXPECTED */
629 {CS_IBS_ROUTING , "IBS Routing Response Code"}, /* IP Phone - NOT EXPECTED */
630 {CS_IP_DEVICE_ROUTING , "IP Device Routing"},
631 {CS_SUPER_MSG_2 , "Super Message 2"}, /* Same as CS To Terminal */
632 {CS_DEBUG_IN_LINE , "Debug Message"},
633 {CS_NON_DIGIT_KEY_PUSHED , "Non-Digit Key Pushed"}, /* IP Phone */
634 {CS_VERSION_RESPONSE , "Version Information"},
635 {CS_I_M_HERE , "I'm Here Response"},
636 {CS_RSP_STATUS_INQUIRY , "Response To Status Inquiry"}, /* IP Phone */
637 {CS_SUBDEVICE_STATE , "Subdevice State Response"},
638 {CS_DIGIT_KEY_RELEASED , "Digit Key Released"}, /* IP Phone */
639 {CS_TRACE_ON_ACK , "Trace On Acknowledge"}, /* IP Phone - NOT EXPECTED */
640 {CS_TRACE_OFF_ACK , "Trace Off Acknowledge"}, /* IP Phone - NOT EXPECTED */
641 {CS_SPECIAL_KEY_STATUS , "Special Key Status"}, /* IP Phone */
642 {CS_KEY_RELEASED , "Key Released"}, /* IP Phone */
643 {CS_PERIPHERAL_CONTENT , "Peripheral Content"}, /* IP Phone - NOT EXPECTED */
644 {CS_TM_KEY_PUSHED , "TM Key Pushed"}, /* IP Phone - NOT EXPECTED */
645 {CS_UA_DWL_PROTOCOL , "Download Protocol"},
646 {CS_UNSOLICITED_MSG , "Unsolicited Message"},
647 {0, NULL}
649 static value_string_ext opcodes_vals_term_ext = VALUE_STRING_EXT_INIT(opcodes_vals_term);
651 static const value_string str_digit[] = {
652 { 0, "0"},
653 { 1, "1"},
654 { 2, "2"},
655 { 3, "3"},
656 { 4, "4"},
657 { 5, "5"},
658 { 6, "6"},
659 { 7, "7"},
660 { 8, "8"},
661 { 9, "9"},
662 {10, "*"},
663 {11, "#"},
664 {12, "A"},
665 {13, "B"},
666 {14, "C"},
667 {15, "D"},
668 {16, "Flash"},
669 {0, NULL}
671 static value_string_ext str_digit_ext = VALUE_STRING_EXT_INIT(str_digit);
673 #define STR_ON_OFF(arg) ((arg) ? "On" : "Off")
674 #define STR_YES_NO(arg) ((arg) ? "Yes" : "No")
676 static const value_string str_yes_no[] = {
677 { 0x0, "No" },
678 { 0x1, "Yes"},
679 { 0 , NULL }
682 static const value_string str_on_off[] = {
683 { 0x0, "Off"},
684 { 0x1, "On" },
685 { 0 , NULL }
688 static const value_string str_device_type[] = {
689 {0x00, "Voice Terminal Adaptor"},
690 {0, NULL}
694 /*-----------------------------------------------------------------------------
695 VERSION NUMBER COMPUTER - This function computes a version number (S.SZ.AB) from a 16 bits number
696 ---------------------------------------------------------------------------*/
697 static void
698 version_number_computer( char *result, uint32_t hexa_version )
700 int release, vers, fix;
702 release = (int)(hexa_version / 10000);
703 vers = (int)((hexa_version % 10000) / 100);
704 fix = (hexa_version % 10000) % 100;
705 snprintf( result, ITEM_LABEL_LENGTH, "%d.%02d.%02d", release, vers, fix);
708 static void
709 version_3bytes_computer(char *result, uint32_t hexa_version)
711 int release, vers, fix;
713 release = (hexa_version >> 16);
714 vers = ((hexa_version >> 8) & 0xff);
715 fix = (hexa_version & 0xff);
716 snprintf(result, ITEM_LABEL_LENGTH, "%d.%02d.%02d", release, vers, fix);
720 /*-----------------------------------------------------------------------------
721 Function for UA3G message with opcode and one parameter
723 PRODUCTION TEST - 01h (MESSAGE FROM THE SYSTEM)
724 SUBDEVICE RESET - 06h (MESSAGE FROM THE SYSTEM)
725 ARE YOU THERE - 2Bh - IPhone & UA NOE (MESSAGE FROM THE SYSTEM)
726 SET SPEAKER VOLUME - 3Bh (MESSAGE FROM THE SYSTEM)
727 TRACE ON - 42h (MESSAGE FROM THE SYSTEM)
728 ---------------------------------------------------------------------------*/
729 static void
730 decode_with_one_parameter(proto_tree *tree, tvbuff_t *tvb,
731 packet_info *pinfo _U_, unsigned offset, unsigned length,
732 int hf_opcode)
734 if (length == 0)
735 return;
737 proto_tree_add_item(tree, hf_opcode, tvb, offset, 1, ENC_NA);
741 /*-----------------------------------------------------------------------------
742 SUBDEVICE ESCAPE TO SUBDEVICE - 02h (MESSAGE FROM THE SYSTEM)
743 ---------------------------------------------------------------------------*/
744 static void
745 decode_subdevice_escape(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
746 unsigned offset, unsigned length)
748 proto_tree_add_item(tree, hf_ua3g_subdevice_address, tvb, offset, 1, ENC_BIG_ENDIAN);
749 proto_tree_add_item(tree, hf_ua3g_subdevice_opcode, tvb, offset+1, 1, ENC_BIG_ENDIAN);
750 if (length > 2) {
751 proto_tree_add_item(tree, hf_ua3g_subdevice_parameter_bytes, tvb, offset+2, length-2, ENC_NA);
756 /*-----------------------------------------------------------------------------
757 SOFTWARE RESET - 03h (MESSAGE FROM THE SYSTEM)
758 ---------------------------------------------------------------------------*/
759 static const value_string software_reset_verswitch_vals[] = {
760 {0x00, "Reset Without Version Switch"},
761 {0x01, "Reset With Version Switch"},
762 {0, NULL}
765 static void
766 decode_software_reset(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
767 unsigned offset, unsigned length)
769 if (length == 0)
770 return;
772 proto_tree_add_item(tree, hf_ua3g_software_reset, tvb, offset, 1, ENC_BIG_ENDIAN);
776 /*-----------------------------------------------------------------------------
777 IP-PHONE WARMSTART - 04h (MESSAGE FROM THE SYSTEM)
778 ---------------------------------------------------------------------------*/
779 static const value_string str_command_ip_phone_warmstart[] = {
780 {0x00, "Run In UA2G Emulation Mode"},
781 {0x01, "Run In Full UA3G Mode"},
782 {0, NULL}
785 static void
786 decode_ip_phone_warmstart(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
787 unsigned offset, unsigned length)
789 if (length == 0)
790 return;
792 proto_tree_add_item(tree, hf_ua3g_ip_phone_warmstart, tvb, offset, 1, ENC_BIG_ENDIAN);
796 /*-----------------------------------------------------------------------------
797 SUPER MESSAGE - 0Bh (MESSAGE FROM THE SYSTEM)
798 SUPER MESSAGE 2 - 17h (MESSAGE FROM THE SYSTEM)
799 ---------------------------------------------------------------------------*/
800 static void
801 decode_super_msg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
802 unsigned offset, unsigned length, uint8_t opcode)
804 proto_tree *ua3g_body_tree = tree;
805 int j = 0, parameter_length;
807 if (!ua3g_body_tree)
808 return;
810 while (length > 0) {
811 if (opcode == 0x17) {
812 parameter_length = tvb_get_ntohs(tvb, offset);
813 proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_super_msg_length, tvb, offset, 2,
814 parameter_length, "Length %d: %d", j++, parameter_length);
815 offset += 2;
816 length -= 2;
817 } else {
818 parameter_length = tvb_get_uint8(tvb, offset);
819 proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_super_msg_length, tvb, offset, 1,
820 parameter_length, "Length %d: %d", j++, parameter_length);
821 offset++;
822 length--;
825 if (parameter_length > 0) {
826 proto_tree_add_item(ua3g_body_tree, hf_ua3g_super_msg_data, tvb, offset, parameter_length, ENC_NA);
827 offset += parameter_length;
828 length -= parameter_length;
834 /*-----------------------------------------------------------------------------
835 SEGMENT MESSAGE - 0Ch (MESSAGE FROM THE TERMINAL AND FROM THE SYSTEM)
836 ---------------------------------------------------------------------------*/
837 static const true_false_string tfs_segment_msg_segment = { "First Segment", "Subsequent Segment" };
839 static void
840 decode_segment_msg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
841 unsigned offset, unsigned length)
843 uint8_t val;
845 if (!tree)
846 return;
848 val = tvb_get_uint8(tvb, offset);
849 proto_tree_add_item(tree, hf_ua3g_segment_msg_segment, tvb, offset, 1, ENC_NA);
850 proto_tree_add_item(tree, hf_ua3g_segment_msg_num_remaining, tvb, offset, 1, ENC_BIG_ENDIAN);
851 offset++;
852 length--;
854 if (val & 0x80) {
855 proto_tree_add_item(tree, hf_ua3g_segment_msg_length, tvb, offset, 2, ENC_BIG_ENDIAN);
856 offset += 2;
857 length -= 2;
860 if (length > 0) {
861 proto_tree_add_item(tree, hf_ua3g_segment_message_data, tvb, offset, length, ENC_NA);
866 /*-----------------------------------------------------------------------------
867 IP DEVICE ROUTING - 13h (MESSAGE FROM THE SYSTEM)
868 ---------------------------------------------------------------------------*/
869 static const value_string str_command_ip_device_routing[] = {
870 {0x00, "Reset"},
871 {0x01, "Start RTP"},
872 {0x02, "Stop RTP"},
873 {0x03, "Redirect"},
874 {0x04, "Tone Definition"},
875 {0x05, "Start Tone"},
876 {0x06, "Stop Tone"},
877 {0x07, "Start Listen RTP"},
878 {0x08, "Stop Listen RTP"},
879 {0x09, "Get Parameters Value"},
880 {0x0A, "Set Parameters Value"},
881 {0x0B, "Send Digit"},
882 {0x0C, "Pause RTP"},
883 {0x0D, "Restart RTP"},
884 {0x0E, "Start Record RTP"},
885 {0x0F, "Stop Record RTP"},
886 {0x10, "Set SIP Parameters"},
887 {0x11, "Free Seating"},
888 {0x14, "Application Parameters"},
889 {0, NULL}
892 static const value_string ip_device_routing_cmd_reset_vals[] = {
893 {0x00, "Update Mode"},
894 {0x01, "Bad Sec Mode"},
895 {0x02, "Customization Name"},
896 {0x03, "Localization Name"},
897 {0, NULL}
900 static const value_string reset_param_bad_sec_mode[] = {
901 {0x01, "Binary is full, CS is secured, but terminal running in clear mode"},
902 {0, NULL}
905 static const value_string start_rtp_str_direction[] = {
906 {0x00, "Terminal Input"},
907 {0x01, "Terminal Output"},
908 {0x02, "Terminal Input/Output (Both Directions)"},
909 {0, NULL}
912 static const value_string ip_device_routing_cmd_start_rtp_vals[] = {
913 {0x00, "Local UDP Port"},
914 {0x01, "Remote IP Address"},
915 {0x02, "Remote UDP Port"},
916 {0x03, "Type Of Service"},
917 {0x04, "Compressor"},
918 {0x05, "Payload Concatenation (ms)"},
919 {0x06, "Echo Cancellation Enabler"},
920 {0x07, "Silence Suppression Enabler"},
921 {0x08, "802.1 Q User Priority"},
922 {0x09, "Reserved"},
923 {0x0a, "Post Filtering Enabler"},
924 {0x0b, "High Pass Filtering Enabler"},
925 {0x0c, "Remote SSRC"},
926 {0x0d, "Must Send QOS Tickets"},
927 {0x0e, "Local Identifier"},
928 {0x0f, "Distant Identifier"},
929 {0x10, "Destination For RTCP Sender Reports - Port Number"},
930 {0x11, "Destination For RTCP Sender Reports - IP Address"},
931 {0x12, "Destination For RTCP Receiver Reports - Port Number"},
932 {0x13, "Destination For RTCP Receiver Reports - IP Address"},
933 {0x14, "Channel Number"},
934 {0x15, "DTMF Sending"},
935 {0x16, "Payload Type Of Redundancy"},
936 {0x17, "Payload Type Of DTMF Events"},
937 {0x18, "Enable / Disable RFC 2198"},
938 {0x31, "SRTP Encryption Enable For This Communication"},
939 {0x32, "Master Key For SRTP Session"},
940 {0x33, "Master Salt Key For SRTP Session"},
941 {0x34, "Master key for output stream of SRTP session"},
942 {0x35, "Master salt key for output stream of SRTP session"},
943 {0x36, "Integrity checking enabled for this communication"},
944 {0x37, "MKI value for SRTP packets in input stream"},
945 {0x38, "MKI value for SRTP packets in output stream"},
946 {0x39, "Integrity method of Thales component"},
947 {0x50, "MD5 Authentication"},
948 {0, NULL}
950 static value_string_ext ip_device_routing_cmd_start_rtp_vals_ext = VALUE_STRING_EXT_INIT(ip_device_routing_cmd_start_rtp_vals);
952 static const val64_string str_compressor_vals[] = {
953 {0x00, "G.711 A-law"},
954 {0x01, "G.711 mu-law"},
955 {0x0F, "G.723.1 5.3kbps"},
956 {0x10, "G.723.1 6.3kbps"},
957 {0x11, "G.729A 8kbps"},
958 {0x1B, "G.722 64kbps"},
959 {0x1C, "G.722 56kbps"},
960 {0x1D, "G.722 48kbps"},
961 {0x1E, "Opus"},
962 {0, NULL}
965 static const value_string ip_device_routing_cmd_stop_rtp_vals[] = {
966 {0x0E, "Local Identifier"},
967 {0x0F, "Distant Identifier"},
968 {0x14, "Canal Identifier"},
969 {0, NULL}
972 static const value_string ip_device_routing_cmd_redirect_vals[] = {
973 {0x00, "Remote MainCPU Server IP Address"},
974 {0x01, "Remote MainCPU Server Port"},
975 {0, NULL}
978 static const value_string ip_device_routing_cmd_listen_rtp_vals[] = {
979 {0x00, "Remote IP Address "},
980 {0x01, "Remote UDP Port In "},
981 {0x02, "Remote UDP Port Out "},
982 {0x03, "Remote IP Address Out"},
983 {0x04, "Canal Number"},
984 {0, NULL}
987 static const value_string ip_device_routing_cmd_set_param_req_vals[] = {
988 {0x00 , "QOS IP TOS"},
989 {0x01 , "QOS 8021 VLID"},
990 {0x02 , "QOS 8021 PRI"},
991 {0x03 , "SNMP MIB2 SysContact"},
992 {0x04 , "SNMP MIB2 SysName"},
993 {0x05 , "SNMP MIB2 SysLocation"},
994 {0x06 , "Default Compressor"},
995 {0x07 , "Error String Net Down"},
996 {0x08 , "Error String Cable PB"},
997 {0x09 , "Error String Try Connect"},
998 {0x0A , "Error String Connected"},
999 {0x0B , "Error String Reset"},
1000 {0x0C , "Error String Duplicate IP Address"},
1001 {0x0D , "SNMP MIB Community"},
1002 {0x0E , "TFTP Backup Sec Mode"},
1003 {0x0F , "TFTP Backup IP Address"},
1004 {0x10 , "Set MMI Password"},
1005 {0x11 , "Set PC Port Status"},
1006 {0x12 , "Record RTP Authorization"},
1007 {0x13 , "Security Flags"},
1008 {0x14 , "ARP Spoofing"},
1009 {0x15 , "Session Param"},
1010 {0x16 , "Stable Mode"},
1011 {0x17 , "DTMF Level"},
1012 {0x18 , "Keep Talking"},
1013 {0x19 , "BT Radio"},
1014 {0x1A , "Transparent Reboot"},
1015 {0x1B , "Set Skin Identifier"},
1016 {0x1C , "Set Language Identifier"},
1017 {0x1D , "Set Dialpad Rotation"},
1018 {0x1E , "Set USB Boost Charging"},
1019 {0x1F , "Set SSH Password"},
1020 {0x20 , "DHCP Survivability"},
1021 {0x21 , "USB Devices"},
1022 {0x22 , "ALS Device"},
1023 {0x23 , "Busy Light"},
1024 {0x24 , "Audio Environment"},
1025 {0x25 , "EEE Configuration"},
1026 {0x26 , "LLDP Configuration"},
1027 {0x30 , "MD5 Authentication"},
1028 {0, NULL}
1030 static value_string_ext ip_device_routing_cmd_set_param_req_vals_ext = VALUE_STRING_EXT_INIT(ip_device_routing_cmd_set_param_req_vals);
1032 static const value_string set_param_req_stable_mode[] = {
1033 {0x00 , "Full-Duplex Preference"},
1034 {0x01 , "Echo Robustness Preference"},
1035 {0, NULL}
1038 static const value_string set_param_req_skin_id[] = {
1039 {0x00 , "Managed By Terminal"},
1040 {0x01 , "Classical or Arcturus"},
1041 {0x02 , "Rainbow"},
1042 {0x03 , "Crystal or Green"},
1043 {0x04 , "Luxury"},
1044 {0x05 , "Arcturus or Classical or Century"},
1045 {0, NULL}
1048 static const value_string set_param_req_usb_boost[] = {
1049 {0x00 , "Disable"},
1050 {0x01 , "Enable"},
1051 {0x02 , "Auto-Negotiation"},
1052 {0, NULL}
1055 static const value_string set_param_req_local_device[] = {
1056 {0x00 , "Managed By Terminal"},
1057 {0x01 , "Enable"},
1058 {0x02 , "Disable"},
1059 {0, NULL}
1062 static const value_string set_param_req_audio_env[] = {
1063 {0x00 , "Managed By Terminal"},
1064 {0x01 , "Standard"},
1065 {0x02 , "Open Space"},
1066 {0x03 , "Meeting Room"},
1067 {0x04 , "Noisy"},
1068 {0, NULL}
1071 static const value_string ip_device_routing_cmd_pause_restart_vals[] = {
1072 {0x14, "Canal Identifier"},
1073 {0, NULL}
1076 static const value_string ip_device_routing_cmd_record_rtp_vals[] = {
1077 {0x00 , "Recorder Index"},
1078 {0x01 , "Remote IP Address"},
1079 {0x02 , "Remote UDP Port In"},
1080 {0x03 , "Remote UDP Port Out"},
1081 {0x04 , "Remote IP Address Out"},
1082 {0x05 , "Local UDP Port In"},
1083 {0x06 , "Local UDP Port Out"},
1084 {0x07 , "Type Of Service"},
1085 {0x08 , "Master Key For SRTP Session"},
1086 {0x09 , "Master Salt Key For SRTP Session"},
1087 {0x10 , "Integrity checking enabled for this communication"},
1088 {0x11 , "Integrity method of Thales component"},
1089 {0x30 , "MD5 Authentication"},
1090 {0, NULL}
1093 static const value_string ip_device_routing_cmd_freeseating_vals[] = {
1094 {0x00 , "Pseudo MAC Address"},
1095 {0x01 , "Maincpu1"},
1096 {0x02 , "Maincpu2"},
1097 {0x03 , "Restart application"},
1098 {0, NULL}
1101 static const value_string ip_device_routing_cmd_appl_vals[] = {
1102 {0x00 , "Identifier"},
1103 {0x01 , "Enable"},
1104 {0x02 , "URL"},
1105 {0, NULL}
1108 static const value_string ip_device_routing_tone_direction_vals[] = {
1109 {0x00, "On The Phone"},
1110 {0x01, "To The Network"},
1111 {0x02, "On The Phone and To The Network"},
1112 {0, NULL}
1115 static const value_string ip_device_routing_cmd_get_param_req_vals[] = {
1116 {0x00 , "Firmware Version"},
1117 {0x01 , "Firmware Version"},
1118 {0x02 , "DHCP IP Address"},
1119 {0x03 , "Local IP Address"},
1120 {0x04 , "Subnetwork Mask"},
1121 {0x05 , "Router IP Address"},
1122 {0x06 , "TFTP IP Address"},
1123 {0x07 , "MainCPU IP Address"},
1124 {0x08 , "Default Codec"},
1125 {0x09 , "Ethernet Drivers Config"},
1126 {0x0A , "MAC Address"},
1127 {0x0B , "Pseudo MAC Address"},
1128 {0, NULL}
1131 static const value_string str_set_pc_port_status[] = {
1132 {0x00, "No PC Port Security"},
1133 {0x01, "Block PC Port"},
1134 {0x02, "Filter VLAN"},
1135 {0, NULL}
1138 static const value_string str_enable_feature[] = {
1139 {0x00, "Disable Feature"},
1140 {0x01, "Enable Feature"},
1141 {0 , NULL}
1144 static const value_string str_ethernet_speed_vals[] = {
1145 {0 , "No Link"},
1146 {1 , "10 Mbps"},
1147 {2 , "100 Mbps"},
1148 {3 , "1000 Mbps"},
1149 {10 , "10 Mbps"},
1150 {100 , "100 Mbps"},
1151 {0 , NULL}
1154 static const value_string str_wlan_status[] = {
1155 {0, "Not Connected"},
1156 {1, "Connected"},
1157 {0, NULL}
1160 static void
1161 decode_ip_device_routing(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
1162 unsigned offset, unsigned length)
1164 uint8_t command;
1165 proto_tree *ua3g_body_tree = tree, *ua3g_param_tree, *ua3g_param_subtree;
1166 proto_item *ua3g_param_item;
1167 int parameter_length, parameter_id;
1169 command = tvb_get_uint8(tvb, offset);
1171 /* add text to the frame "INFO" column */
1172 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_ip_device_routing, "Unknown"));
1174 if (!ua3g_body_tree)
1175 return;
1177 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip, tvb, offset, 1, ENC_BIG_ENDIAN);
1178 offset++;
1179 length--;
1181 switch (command) {
1182 case 0x00: /* RESET */
1184 if (length > 0) {
1185 parameter_id = tvb_get_uint8(tvb, offset);
1186 parameter_length = tvb_get_uint8(tvb, offset + 1);
1188 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter, tvb, offset,
1189 parameter_length + 2, parameter_id, "%s",
1190 val_to_str_const(parameter_id, ip_device_routing_cmd_reset_vals, "Unknown"));
1191 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1193 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1194 offset++;
1195 length--;
1197 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1198 offset++;
1199 length--;
1201 if (parameter_length > 0) {
1202 uint8_t param;
1203 switch (parameter_id) {
1204 case 0x00: /* Update Mode */
1206 param = tvb_get_uint8(tvb, offset);
1207 if ((param & 0x80) == 0x00) {
1208 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_noe_update, tvb, offset, 1, ENC_BIG_ENDIAN);
1209 ua3g_param_subtree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param_sub);
1211 proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_bootloader, tvb, offset, 1, ENC_NA);
1212 proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_data, tvb, offset, 1, ENC_NA);
1213 proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_customization, tvb, offset, 1, ENC_NA);
1214 proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_localization, tvb, offset, 1, ENC_NA);
1215 proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_code, tvb, offset, 1, ENC_NA);
1216 proto_tree_add_item(ua3g_param_subtree, hf_ua3g_ip_device_routing_reset_parameter_noe_update_sip, tvb, offset, 1, ENC_NA);
1218 } else {
1219 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_value, tvb, offset, parameter_length, ENC_NA);
1222 break;
1223 case 0x01: /* Bad_Sec_Mode */
1224 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_bad_sec_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
1225 break;
1226 case 0x02: /* Cust_Name */
1227 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_cust_name, tvb, offset, parameter_length, ENC_NA|ENC_ASCII);
1228 break;
1229 case 0x03: /* L10N_Name */
1230 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_l10n_name, tvb, offset, parameter_length, ENC_NA|ENC_ASCII);
1231 break;
1232 case 0x04: /* Appl_Mode */
1233 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_appl_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
1234 break;
1235 case 0x05: /* SIP_Name */
1236 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_sip_name, tvb, offset, parameter_length, ENC_NA|ENC_ASCII);
1237 break;
1238 case 0x06: /* Appl_Mode */
1239 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_reset_mac, tvb, offset, 1, ENC_BIG_ENDIAN);
1240 break;
1241 default:
1242 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_reset_parameter_value, tvb, offset, parameter_length, ENC_NA);
1243 break;
1246 /*offset += parameter_length;
1247 length -= parameter_length;*/
1250 break;
1252 case 0x01: /* START RTP */
1254 address remote_rtp_addr = ADDRESS_INIT_NONE;
1255 uint32_t remote_rtp_port = 0;
1257 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_device_routing_start_rtp_direction, tvb, offset, 1, ENC_BIG_ENDIAN);
1258 offset++;
1259 length--;
1261 while (length > 0) {
1262 parameter_id = tvb_get_uint8(tvb, offset);
1263 parameter_length = tvb_get_uint8(tvb, offset + 1);
1265 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_start_rtp_parameter, tvb, offset,
1266 parameter_length + 2, parameter_id, "%s",
1267 val_to_str_ext_const(parameter_id, &ip_device_routing_cmd_start_rtp_vals_ext, "Unknown"));
1269 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1270 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1271 offset++;
1272 length--;
1274 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1275 offset++;
1276 length--;
1278 if (parameter_length > 0) {
1279 switch (parameter_id) {
1280 case 0x01: /* Remote IP Address */
1281 case 0x11: /* Destination For RTCP Sender Reports - IP Address */
1282 case 0x13: /* Destination For RTCP Receiver Reports - IP Address */
1283 if (parameter_id == 0x01)
1284 set_address_tvb(&remote_rtp_addr, AT_IPv4, 4, tvb, offset);
1285 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
1286 break;
1287 case 0x04: /* Compressor */
1288 if (parameter_length <= 8) {
1289 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_compressor, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1290 } else {
1291 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1293 break;
1294 case 0x06: /* Echo Cancellation Enabler */
1295 case 0x07: /* Silence Suppression Enabler */
1296 case 0x0A: /* Post Filtering Enabler */
1297 case 0x0B: /* High Pass Filtering Enabler */
1298 if (parameter_length <= 8) {
1299 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_enabler, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1300 } else {
1301 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1303 break;
1304 case 0x0D: /* Must Send QOS Tickets */
1305 if (parameter_length <= 8) {
1306 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_send_qos, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1307 } else {
1308 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1310 break;
1311 case 0x0E: /* Local Identifier */
1312 case 0x0F: /* Distant Identifier */
1313 break;
1314 case 0x15: /* DTMF Sending */
1315 if (parameter_length <= 8) {
1316 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_dtmf_sending, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1317 } else {
1318 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1320 break;
1321 case 0x18: /* Enable / Disable RFC 2198 */
1322 if (parameter_length <= 8) {
1323 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_rfc2198, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1324 } else {
1325 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1327 break;
1328 case 0x31: /* SRTP Encryption Enable For This Communication */
1329 if (parameter_length <= 8) {
1330 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_srtp_encryption, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1331 } else {
1332 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1334 break;
1335 case 0x00: /* Local UDP Port */
1336 case 0x02: /* Remote UDP Port */
1337 case 0x03: /* Type Of Service */
1338 case 0x05: /* Payload Concatenation */
1339 case 0x08: /* 802.1 Q User Priority */
1340 case 0x09: /* Reserved */
1341 case 0x0C: /* Remote SSRC */
1342 case 0x10: /* Destination For RTCP Sender Reports - Port Number */
1343 case 0x12: /* Destination For RTCP Receiver Reports - Port Number */
1344 case 0x14: /* Channel Number */
1345 case 0x16: /* Payload Type For Redundancy */
1346 case 0x17: /* Payload Type For DTMF Events */
1347 case 0x32: /* Master Key For SRTP Session */
1348 case 0x33: /* Master Salt Key For SRTP Session */
1349 case 0x34: /* Master key for output stream of SRTP session */
1350 case 0x35: /* Master salt key for output stream of SRTP session */
1351 case 0x36: /* Integrity checking enabled for this communication */
1352 case 0x37: /* MKI value for SRTP packets in input stream */
1353 case 0x38: /* MKI value for SRTP packets in output stream */
1354 case 0x39: /* Integrity method of Thales component */
1355 case 0x50: /* MD5 Authentication */
1356 default:
1357 if (parameter_id == 0x02)
1358 remote_rtp_port = tvb_get_ntohs(tvb, offset);
1359 if (parameter_length <= 8) {
1360 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1361 } else {
1362 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1364 break;
1367 offset += parameter_length;
1368 length -= parameter_length;
1372 if (setup_conversations_enabled)
1374 if ((remote_rtp_addr.data != NULL) && (remote_rtp_port != 0))
1376 rtp_add_address(pinfo, PT_UDP, &remote_rtp_addr, remote_rtp_port, 0, "UA3G", pinfo->num, 0, NULL);
1377 rtcp_add_address(pinfo, &remote_rtp_addr, remote_rtp_port+1, 0, "UA3G", pinfo->num);
1380 break;
1382 case 0x02: /* STOP_RTP */
1383 while (length > 0) {
1384 parameter_id = tvb_get_uint8(tvb, offset);
1385 parameter_length = tvb_get_uint8(tvb, offset + 1);
1387 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter, tvb, offset,
1388 parameter_length + 2, parameter_id, "%s",
1389 val_to_str_const(parameter_id, ip_device_routing_cmd_stop_rtp_vals, "Unknown"));
1390 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1392 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1393 offset++;
1394 length--;
1396 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1397 offset++;
1398 length--;
1400 if (parameter_length > 0) {
1401 if (parameter_length <= 8) {
1402 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter_value_num, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1403 } else {
1404 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_stop_rtp_parameter_value_bytes, tvb, offset, parameter_length, ENC_NA);
1407 offset += parameter_length;
1408 length -= parameter_length;
1411 break;
1412 case 0x03: /* REDIRECT */
1413 while (length > 0) {
1414 parameter_id = tvb_get_uint8(tvb, offset);
1415 parameter_length = tvb_get_uint8(tvb, offset + 1);
1417 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_redirect_parameter,
1418 tvb, offset, parameter_length + 2, parameter_id,
1419 "%s", val_to_str_const(parameter_id, ip_device_routing_cmd_redirect_vals, "Unknown"));
1420 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1422 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_redirect_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1423 offset++;
1424 length--;
1426 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_redirect_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1427 offset++;
1428 length--;
1431 if (parameter_length > 0) {
1432 switch (parameter_id) {
1433 case 0x00: /* Remote MainCPU Server IP Address */
1434 case 0x02: /* Remote Redundant MainCPU Server IP Address */
1435 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_redirect_parameter_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
1436 break;
1437 case 0x01: /* Remote MainCPU Server Port */
1438 default:
1439 if (parameter_length <= 8) {
1440 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_redirect_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1441 } else {
1442 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_redirect_parameter_value, tvb, offset, parameter_length, ENC_NA);
1444 break;
1447 offset += parameter_length;
1448 length -= parameter_length;
1451 break;
1452 case 0x04: /* DEF_TONES */
1454 int i, tone_nb_entries;
1455 uint16_t frequency_1, frequency_2;
1456 signed char level_1, level_2;
1458 tone_nb_entries = tvb_get_uint8(tvb, offset);
1460 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_device_routing_def_tones_num_entries, tvb, offset, 1, ENC_BIG_ENDIAN);
1461 offset++;
1462 length--;
1464 while (length > 0 && tone_nb_entries) {
1465 for (i = 1; i <= tone_nb_entries; i++) {
1466 frequency_1 = tvb_get_ntohs(tvb, offset);
1467 level_1 = (signed char)(tvb_get_uint8(tvb, offset + 2)) / 2;
1468 frequency_2 = tvb_get_ntohs(tvb, offset + 3);
1469 level_2 = (signed char)(tvb_get_uint8(tvb, offset + 5)) / 2;
1471 ua3g_param_tree = proto_tree_add_subtree_format(ua3g_body_tree, tvb, offset, 6,
1472 ett_ua3g_param, NULL, "Tone Pair %d: %d Hz at %d dB / %d Hz at %d dB",
1473 i, frequency_1, level_1, frequency_2, level_2);
1475 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_def_tones_frequency_1, tvb, offset, 2, ENC_BIG_ENDIAN);
1476 offset += 2;
1477 length -= 2;
1479 proto_tree_add_int(ua3g_param_tree, hf_ua3g_ip_device_routing_def_tones_level_1, tvb, offset, 1, level_1);
1480 offset++;
1481 length--;
1483 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_def_tones_frequency_2, tvb, offset, 2, ENC_BIG_ENDIAN);
1484 offset += 2;
1485 length -= 2;
1487 proto_tree_add_int(ua3g_param_tree, hf_ua3g_ip_device_routing_def_tones_level_2, tvb, offset, 1, level_2);
1488 offset++;
1489 length--;
1492 break;
1494 case 0x05: /* START TONE */
1496 uint8_t ii;
1497 uint32_t tone_nb_entries;
1499 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_device_routing_start_tone_direction, tvb, offset, 1, ENC_BIG_ENDIAN);
1500 proto_tree_add_item_ret_uint(ua3g_body_tree, hf_ua3g_ip_device_routing_start_tone_num_entries, tvb, offset, 1, ENC_BIG_ENDIAN, &tone_nb_entries);
1501 offset++;
1502 length--;
1504 for (ii = 0; ii < tone_nb_entries; ii++) {
1505 uint8_t tone_id = tvb_get_uint8(tvb, offset);
1506 int tone_duration = tvb_get_ntohs(tvb, offset + 1);
1508 ua3g_param_tree = proto_tree_add_subtree_format(ua3g_body_tree, tvb, offset, 3,
1509 ett_ua3g_param, NULL, "Tone Pair %d: Id: %d, Duration: %d ms",
1510 ii+1, tone_id, tone_duration);
1512 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_tone_identification, tvb, offset, 1, ENC_BIG_ENDIAN);
1513 offset++;
1514 length--;
1516 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_tone_duration, tvb, offset, 2, ENC_BIG_ENDIAN);
1517 offset += 2;
1518 length -= 2;
1520 break;
1522 case 0x07: /* START LISTEN RTP */
1523 case 0x08: /* STOP LISTEN RTP */
1524 while (length > 0) {
1525 parameter_id = tvb_get_uint8(tvb, offset);
1526 parameter_length = tvb_get_uint8(tvb, offset + 1);
1528 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter, tvb, offset,
1529 parameter_length + 2, parameter_id, "%s",
1530 val_to_str_const(parameter_id, ip_device_routing_cmd_listen_rtp_vals, "Unknown"));
1531 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1533 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1534 offset++;
1535 length--;
1537 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1538 offset++;
1539 length--;
1541 if (parameter_length > 0) {
1542 switch (parameter_id) {
1543 case 0x00: /* Remote IP Address - Not for start listening rtp */
1544 case 0x03: /* Remote IP Address Out - Not for start listening rtp */
1545 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter_ip, tvb, offset, 1, ENC_NA);
1546 break;
1547 case 0x01: /* Remote UDP Port In - Not for start listening rtp */
1548 case 0x02: /* Remote UDP Port Out - Not for start listening rtp */
1549 case 0x04: /* Canal Number */
1550 default:
1551 if (parameter_length <= 8) {
1552 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter_port, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1553 } else {
1554 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_listen_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1556 break;
1559 offset += parameter_length;
1560 length -= parameter_length;
1563 break;
1564 case 0x09: /* GET_PARAM_REQ */
1565 while (length > 0) {
1566 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_device_routing_get_param_req_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1567 offset++;
1568 length--;
1570 break;
1572 case 0x0A: /* SET_PARAM_REQ */
1574 while (length > 0) {
1575 parameter_id = tvb_get_uint8(tvb, offset);
1576 parameter_length = tvb_get_uint8(tvb, offset + 1);
1578 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_set_param_req_parameter, tvb, offset,
1579 parameter_length + 2, parameter_id, "%s",
1580 val_to_str_ext_const(parameter_id, &ip_device_routing_cmd_set_param_req_vals_ext, "Unknown"));
1581 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1583 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1584 offset++;
1585 length--;
1587 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1588 offset++;
1589 length--;
1591 if (parameter_length > 0) {
1592 switch (parameter_id) {
1593 case 0x06: /* Compressor */
1594 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_compressor, tvb, offset, 1, ENC_BIG_ENDIAN);
1595 break;
1596 case 0x07: /* ERR STRING NET DOWN */
1597 case 0x08: /* ERR STRING CABLE PB */
1598 case 0x09: /* ERR STRING TRY CONNECT */
1599 case 0x0A: /* ERR STRING CONNECTED */
1600 case 0x0B: /* ERR STRING RESET */
1601 case 0x0C: /* ERR STRING DUPLICATE IP ADDRESS */
1602 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_err_string, tvb, offset, parameter_length, ENC_NA|ENC_ASCII);
1603 break;
1604 case 0x0F: /* TFTP BACKUP IP ADDR */
1605 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_tftp_backup_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
1606 break;
1607 case 0x11: /* Set PC Port status */
1608 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_set_pc_port_status, tvb, offset, 1, ENC_BIG_ENDIAN);
1609 break;
1610 case 0x12: /* Record RTP Authorization */
1611 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_record_rtp_auth, tvb, offset, 1, ENC_BIG_ENDIAN);
1612 break;
1613 case 0x13: /* Security Flags */
1614 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_security_flag_filter, tvb, offset, 1, ENC_NA);
1615 break;
1616 case 0x16: /* Stable Mode */
1617 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_stable_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
1618 break;
1619 case 0x1B: /* Set Skin Identifier */
1620 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_skin_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1621 break;
1622 case 0x1C: /* Set Language Identifier */
1623 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_language_id, tvb, offset, 2, ENC_NA|ENC_ASCII);
1624 break;
1625 case 0x1E: /* USB Boost */
1626 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_usb_boost, tvb, offset, 1, ENC_BIG_ENDIAN);
1627 break;
1628 case 0x22: /* ALS Device */
1629 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_als_device, tvb, offset, 1, ENC_BIG_ENDIAN);
1630 break;
1631 case 0x23: /* Busy Light */
1632 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_busy_light, tvb, offset, 1, ENC_BIG_ENDIAN);
1633 break;
1634 case 0x24: /* Audio Environment */
1635 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_audio_env, tvb, offset, 1, ENC_BIG_ENDIAN);
1636 break;
1637 case 0x00: /* QOS IP TOS */
1638 case 0x01: /* QOS 8021 VLID */
1639 case 0x02: /* QOS 8021 PRI */
1640 case 0x03: /* SNMP MIB2 SYSCONTACT */
1641 case 0x04: /* SNMP MIB2 SYSNAME */
1642 case 0x05: /* SNMP MIB2 SYSLOCATION */
1643 case 0x0D: /* SNMP MIB COMMUNITY */
1644 case 0x0E: /* TFTP BACKUP SEC MODE */
1645 case 0x10: /* SET MMI PASSWORD */
1646 case 0x14: /* ARP Spoofing */
1647 case 0x15: /* Session Param */
1648 case 0x17: /* DTMF Level */
1649 case 0x18: /* Keep Talking */
1650 case 0x19: /* BT Radio */
1651 case 0x1A: /* Transparent Reboot */
1652 case 0x1D: /* Dialpad Rotation */
1653 case 0x1F: /* Set SSH Password */
1654 case 0x20: /* DHCP Survivability */
1655 case 0x21: /* USB Devices */
1656 case 0x25: /* EEE Configuration */
1657 case 0x26: /* LLDP Configuration */
1658 case 0x30: /* MD5 Authentication */
1659 default:
1660 if ((parameter_length > 0) && (parameter_length <= 8)) {
1661 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1662 } else if (parameter_length > 8) {
1663 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_set_param_req_parameter_value, tvb, offset, parameter_length, ENC_NA);
1665 break;
1668 offset += parameter_length;
1669 length -= parameter_length;
1672 break;
1674 case 0x0B: /* SEND_DIGIT */
1675 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_device_routing_digit_value, tvb, offset, 1, ENC_BIG_ENDIAN);
1676 break;
1678 case 0x0C: /* PAUSE_RTP */
1679 case 0x0D: /* RESTART_RTP */
1680 while (length > 0) {
1681 parameter_id = tvb_get_uint8(tvb, offset);
1682 parameter_length = tvb_get_uint8(tvb, offset + 1);
1684 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_pause_restart_rtp_parameter, tvb, offset,
1685 parameter_length + 2, parameter_id, "%s",
1686 val_to_str_const(parameter_id, ip_device_routing_cmd_pause_restart_vals, "Unknown"));
1687 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1689 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_pause_restart_rtp_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1690 offset++;
1691 length--;
1693 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1694 offset++;
1695 length--;
1697 if (parameter_length > 0) {
1698 if (parameter_length <= 8) {
1699 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1700 } else {
1701 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1704 offset += parameter_length;
1705 length -= parameter_length;
1708 break;
1709 case 0x0E: /* START_RECORD_RTP */
1710 case 0x0F: /* STOP RECORD RTP */
1712 address remote_rtp_addr = ADDRESS_INIT_NONE;
1713 uint32_t remote_rtp_port_in = 0;
1714 uint32_t remote_rtp_port_out = 0;
1716 while (length > 0) {
1718 parameter_id = tvb_get_uint8(tvb, offset);
1719 parameter_length = tvb_get_uint8(tvb, offset + 1);
1721 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter, tvb, offset,
1722 parameter_length + 2, parameter_id, "%s",
1723 val_to_str_const(parameter_id, ip_device_routing_cmd_record_rtp_vals, "Unknown"));
1724 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1726 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1727 offset++;
1728 length--;
1730 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1731 offset++;
1732 length--;
1734 if (parameter_length > 0) {
1735 switch (parameter_id) {
1736 case 0x01: /* Remote IP Address */
1737 case 0x04: /* Remote IP Address Out */
1738 if (parameter_id == 0x01)
1739 set_address_tvb(&remote_rtp_addr, AT_IPv4, 4, tvb, offset);
1740 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_remote_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
1741 break;
1742 case 0x00: /* Recorder Index */
1743 case 0x02: /* Remote UDP Port In */
1744 case 0x03: /* Remote UDP Port Out */
1745 case 0x05: /* Local UDP Port In */
1746 case 0x06: /* Local UDP Port Out */
1747 case 0x07: /* Type Of Service */
1748 case 0x08: /* Master Key For SRTP Session */
1749 case 0x09: /* Master Salt Key For SRTP Session */
1750 case 0x10: /* Integrity checking enabled for this communication */
1751 case 0x11: /* Integrity method of Thales component */
1752 case 0x30: /* MD5 Authentication */
1753 default:
1754 if (parameter_length <= 8) {
1755 if (parameter_id == 0x02)
1756 remote_rtp_port_in = tvb_get_ntohs(tvb, offset);
1757 if (parameter_id == 0x03)
1758 remote_rtp_port_out = tvb_get_ntohs(tvb, offset);
1759 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1760 } else {
1761 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_value, tvb, offset, parameter_length, ENC_NA);
1763 break;
1766 offset += parameter_length;
1767 length -= parameter_length;
1771 if (setup_conversations_enabled)
1773 if (remote_rtp_addr.data != NULL)
1775 if (remote_rtp_port_in != 0)
1777 rtp_add_address(pinfo, PT_UDP, &remote_rtp_addr, remote_rtp_port_in, 0, "UA3G", pinfo->num, 0, NULL);
1778 rtcp_add_address(pinfo, &remote_rtp_addr, remote_rtp_port_in+1, 0, "UA3G", pinfo->num);
1780 if (remote_rtp_port_out != 0)
1782 rtp_add_address(pinfo, PT_UDP, &remote_rtp_addr, remote_rtp_port_out, 0, "UA3G", pinfo->num, 0, NULL);
1783 rtcp_add_address(pinfo, &remote_rtp_addr, remote_rtp_port_out+1, 0, "UA3G", pinfo->num);
1788 break;
1790 case 0x10: /* Set SIP Parameters */
1791 break;
1792 case 0x11: /* Free Seating */
1793 while (length > 0) {
1794 parameter_id = tvb_get_uint8(tvb, offset);
1795 parameter_length = tvb_get_uint8(tvb, offset + 1);
1797 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_freeseating_parameter, tvb, offset,
1798 parameter_length + 2, parameter_id, "%s",
1799 val_to_str_const(parameter_id, ip_device_routing_cmd_freeseating_vals, "Unknown"));
1800 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1802 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1803 offset++;
1804 length--;
1806 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1807 offset++;
1808 length--;
1810 if (parameter_length > 0) {
1811 switch (parameter_id) {
1812 case 0x00: /* Pseudo Mac Address */
1813 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_mac, tvb, offset, 6, ENC_NA);
1814 break;
1815 case 0x01: /* Maincpu1 */
1816 case 0x02: /* Maincpu2 */
1818 int hf = -1;
1820 if (parameter_length == FT_IPv4_LEN)
1821 hf = hf_ua3g_ip_device_routing_freeseating_parameter_ip;
1822 else
1823 if (parameter_length == FT_IPv6_LEN)
1824 hf = hf_ua3g_ip_device_routing_freeseating_parameter_ipv6;
1826 if (hf != -1)
1827 proto_tree_add_item(ua3g_param_tree, hf, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1828 else
1829 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_value, tvb, offset, parameter_length, ENC_NA);
1830 break;
1832 case 0x03: /* Restart application */
1834 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_do_reset, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1835 break;
1837 default:
1838 if (parameter_length <= 8) {
1839 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1840 } else {
1841 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_freeseating_parameter_value, tvb, offset, parameter_length, ENC_NA);
1843 break;
1845 offset += parameter_length;
1846 length -= parameter_length;
1849 break;
1850 case 0x14: /* Set Appl Param */
1851 while (length > 0) {
1852 parameter_id = tvb_get_uint8(tvb, offset);
1853 parameter_length = tvb_get_uint8(tvb, offset + 1);
1855 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ip_device_routing_appl_parameter, tvb, offset,
1856 parameter_length + 2, parameter_id, "%s", val_to_str_const(parameter_id, ip_device_routing_cmd_appl_vals, "Unknown"));
1857 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
1859 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
1860 offset++;
1861 length--;
1863 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
1864 offset++;
1865 length--;
1867 if (parameter_length > 0) {
1868 switch (parameter_id) {
1869 case 0x00: /* Identifier */
1870 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_id, tvb, offset, parameter_length, ENC_STRING);
1871 break;
1872 case 0x01: /* Enable */
1873 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_enable, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1874 break;
1875 case 0x02: /* URL */
1877 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_url, tvb, offset, parameter_length, ENC_STRING);
1878 break;
1880 default:
1881 if (parameter_length <= 8) {
1882 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
1883 } else {
1884 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ip_device_routing_appl_parameter_value, tvb, offset, parameter_length, ENC_NA);
1886 break;
1888 offset += parameter_length;
1889 length -= parameter_length;
1892 break;
1893 case 0x06: /* STOP TONE */
1894 default:
1896 break;
1902 /*-----------------------------------------------------------------------------
1903 DEBUG IN LINE - 18h (MESSAGE FROM THE TERMINAL AND FROM THE SYSTEM)
1904 ---------------------------------------------------------------------------*/
1905 static void
1906 decode_debug_in_line(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
1907 unsigned offset, unsigned length)
1909 proto_tree_add_item(tree, hf_ua3g_debug_in_line, tvb, offset, length, ENC_NA|ENC_ASCII);
1913 /*-----------------------------------------------------------------------------
1914 LED COMMAND - 21h (MESSAGE FROM THE SYSTEM)
1915 ---------------------------------------------------------------------------*/
1916 static const value_string str_command_led[] = {
1917 {0x00, "Led Off"},
1918 {0x01, "Led On"},
1919 {0x02, "Red Led Fast Flash"},
1920 {0x03, "Red Led Slow Flash"},
1921 {0x04, "Green Led On"},
1922 {0x05, "Green Led Fast Flash"},
1923 {0x06, "Green Led Slow Flash"},
1924 {0x07, "All Led Off"},
1925 {0, NULL}
1928 static void
1929 decode_led_command(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
1930 unsigned offset)
1932 int command;
1934 command = tvb_get_uint8(tvb, offset);
1936 /* add text to the frame "INFO" column */
1937 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_led, "Unknown"));
1939 if (!tree)
1940 return;
1942 proto_tree_add_item(tree, hf_ua3g_command_led, tvb, offset, 1, ENC_BIG_ENDIAN);
1944 if ((command >= 0) && (command < 7)) {
1945 proto_tree_add_item(tree, hf_ua3g_command_led_number, tvb, offset+1, 1, ENC_BIG_ENDIAN);
1950 /*-----------------------------------------------------------------------------
1951 LCD LINE 1 COMMANDS - 27h (MESSAGE FROM THE SYSTEM)
1952 LCD LINE 2 COMMANDS - 28h (MESSAGE FROM THE SYSTEM)
1953 ---------------------------------------------------------------------------*/
1954 static const value_string str_command_lcd_line[] = {
1955 {0, "Clear Line & Write From Column"},
1956 {1, "Write From Column"},
1957 {2, "Append To Current Line"},
1958 {0, NULL}
1961 static const value_string str_call_timer_ctrl[] = {
1962 {0x00, "Call Timer Status Not Changed"},
1963 {0x01, "Stop Call Timer"},
1964 {0x02, "Start Call Timer From Current Value"},
1965 {0x03, "Initialize And Call Timer"},
1966 {0, NULL}
1969 static void
1970 decode_lcd_line_cmd(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
1971 unsigned offset, unsigned length)
1973 uint8_t command, column_n;
1974 const char* command_str;
1975 proto_tree *ua3g_body_tree = tree, *ua3g_param_tree, *ua3g_option_tree;
1976 proto_item *ua3g_option_item;
1977 wmem_strbuf_t *strbuf;
1979 command = tvb_get_uint8(tvb, offset) & 0x03;
1980 column_n = tvb_get_uint8(tvb, offset + 1);
1981 command_str = val_to_str_const(command, str_command_lcd_line, "Unknown");
1983 /* add text to the frame "INFO" column */
1984 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s %d", command_str, column_n);
1986 if (!ua3g_body_tree)
1987 return;
1989 strbuf = wmem_strbuf_create(pinfo->pool);
1991 wmem_strbuf_append_printf(strbuf, "\"%s\"", tvb_format_text(pinfo->pool, tvb, offset + 2, length - 2));
1993 ua3g_param_tree = proto_tree_add_subtree_format(ua3g_body_tree, tvb, offset,
1994 length, ett_ua3g_param, NULL, "%s %d: %s",
1995 command_str, column_n, wmem_strbuf_get_str(strbuf));
1997 proto_tree_add_item(ua3g_body_tree, hf_ua3g_command_lcd_line, tvb, offset, 1, ENC_BIG_ENDIAN);
1998 ua3g_option_item = proto_tree_add_item(ua3g_param_tree, hf_ua3g_lcd_line_cmd_lcd_options, tvb, offset, 1, ENC_BIG_ENDIAN);
1999 ua3g_option_tree = proto_item_add_subtree(ua3g_option_item, ett_ua3g_option);
2001 proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_call_timer, tvb, offset, 1, ENC_BIG_ENDIAN);
2002 proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_blink, tvb, offset, 1, ENC_NA);
2003 proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_call_timer_control, tvb, offset, 1, ENC_NA);
2004 proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_call_timer_display, tvb, offset, 1, ENC_NA);
2005 proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_time_of_day_display, tvb, offset, 1, ENC_NA);
2006 proto_tree_add_item(ua3g_option_tree, hf_ua3g_lcd_line_cmd_lcd_options_suspend_display_refresh, tvb, offset, 1, ENC_NA);
2008 offset++;
2009 length--;
2011 if (command != 3)
2012 proto_tree_add_item(ua3g_param_tree, hf_ua3g_lcd_line_cmd_starting_column, tvb, offset, 1, ENC_BIG_ENDIAN);
2013 else
2014 proto_tree_add_item(ua3g_param_tree, hf_ua3g_lcd_line_cmd_unused, tvb, offset, 1, ENC_NA);
2016 offset++;
2017 length--;
2018 proto_tree_add_string(ua3g_param_tree, hf_ua3g_lcd_line_cmd_ascii_char, tvb, offset, length, wmem_strbuf_get_str(strbuf));
2022 /*-----------------------------------------------------------------------------
2023 MAIN VOICE MODE - 29h (MESSAGE FROM THE SYSTEM)
2024 ---------------------------------------------------------------------------*/
2025 static const value_string str_main_voice_mode[] = {
2026 {0x00, "Idle"},
2027 {0x01, "Handset"},
2028 {0x02, "Group Listening"},
2029 {0x03, "On Hook Dial"},
2030 {0x04, "Handsfree"},
2031 {0x05, "Announce Loudspeaker"},
2032 {0x06, "Ringing"},
2033 {0x10, "Idle"},
2034 {0x11, "Handset"},
2035 {0x12, "Headset"},
2036 {0x13, "Handsfree"},
2037 {0, NULL}
2040 static const value_string str_cadence[] = {
2041 {0x00, "Standard Ringing"},
2042 {0x01, "Double Burst"},
2043 {0x02, "Triple Burst"},
2044 {0x03, "Continuous Ringing"},
2045 {0x04, "Priority Attendant Ringing"},
2046 {0x05, "Regular Attendant Ringing"},
2047 {0x06, "Programmable Cadence"},
2048 {0x07, "Programmable Cadence"},
2049 {0, NULL}
2052 static void
2053 decode_main_voice_mode(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2054 unsigned offset, unsigned length)
2056 uint8_t mode;
2057 proto_tree *ua3g_body_tree = tree;
2059 mode = tvb_get_uint8(tvb, offset);
2061 /* add text to the frame "INFO" column */
2062 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(mode, str_main_voice_mode, "Unknown"));
2064 if (!ua3g_body_tree)
2065 return;
2067 proto_tree_add_item(ua3g_body_tree, hf_ua3g_main_voice_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
2068 offset++;
2069 length--;
2071 switch (mode) {
2072 case 0x06: /* Ringing */
2074 proto_tree_add_item(ua3g_body_tree, hf_ua3g_main_voice_mode_tune, tvb, offset, 1, ENC_BIG_ENDIAN);
2075 offset++;
2076 length--;
2078 proto_tree_add_item(ua3g_body_tree, hf_ua3g_main_voice_mode_cadence, tvb, offset, 1, ENC_BIG_ENDIAN);
2079 offset++;
2080 length--;
2082 /* FALLTHROUGH */
2083 case 0x02: /* Group Listening */
2084 case 0x03: /* On Hook Dial */
2085 case 0x04: /* Handsfree */
2086 case 0x05: /* Announce Loudspeaker */
2088 proto_tree_add_item(ua3g_body_tree, hf_ua3g_main_voice_mode_speaker_volume, tvb, offset, 1, ENC_BIG_ENDIAN);
2089 offset++;
2090 length--;
2092 if (length > 0) {
2093 proto_tree_add_item(ua3g_body_tree, hf_ua3g_main_voice_mode_microphone_volume, tvb, offset, 1, ENC_BIG_ENDIAN);
2095 break;
2097 case 0x11: /* Handset */
2099 signed char level;
2101 level = (signed char)(tvb_get_uint8(tvb, offset)) / 2;
2102 proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_handset_level, tvb, offset, 1, level);
2104 level = (signed char)(tvb_get_uint8(tvb, offset+1)) / 2;
2105 proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_sending_level, tvb, offset+1, 1, level);
2106 break;
2108 case 0x12: /* Headset */
2110 signed char level;
2112 level = (signed char)(tvb_get_uint8(tvb, offset)) / 2;
2113 proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_headset_level, tvb, offset, 1, level);
2115 level = (signed char)(tvb_get_uint8(tvb, offset+1)) / 2;
2116 proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_sending_level, tvb, offset+1, 1, level);
2117 break;
2119 case 0x13: /* Handsfree */
2121 signed char level;
2123 level = (signed char)(tvb_get_uint8(tvb, offset)) / 2;
2124 proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_handsfree_level, tvb, offset, 1, level);
2126 level = (signed char)(tvb_get_uint8(tvb, offset+1)) / 2;
2127 proto_tree_add_int(ua3g_body_tree, hf_ua3g_main_voice_mode_sending_level, tvb, offset+1, 1, level);
2128 break;
2130 case 0x00: /* Idle */
2131 case 0x01: /* Handset */
2132 case 0x10: /* Idle */
2133 default:
2135 break;
2141 /*-----------------------------------------------------------------------------
2142 SUBDEVICE METASTATE - 2Ch (MESSAGE FROM THE SYSTEM)
2143 ---------------------------------------------------------------------------*/
2144 static const value_string str_new_metastate[] = {
2145 {0x00, "Disable"},
2146 {0x01, "Active"},
2147 {0x02, "Wake Up"},
2148 {0, NULL}
2151 static void
2152 decode_subdevice_metastate(proto_tree *tree, tvbuff_t *tvb,
2153 packet_info *pinfo _U_, unsigned offset)
2155 proto_tree_add_item(tree, hf_ua3g_subdevice_metastate_subchannel_address, tvb, offset, 1, ENC_BIG_ENDIAN);
2156 proto_tree_add_item(tree, hf_ua3g_subdevice_metastate_new_metastate, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2160 /*-----------------------------------------------------------------------------
2161 Download DTMF & CLOCK FORMAT - 30h (MESSAGE FROM THE SYSTEM)
2162 ---------------------------------------------------------------------------*/
2163 static const value_string str_clock_format[] = {
2164 {0, "Europe"},
2165 {1, "US"},
2166 {0, NULL}
2169 static void
2170 decode_dwl_dtmf_clck_format(proto_tree *tree, tvbuff_t *tvb,
2171 packet_info *pinfo _U_, unsigned offset, unsigned length)
2173 proto_tree_add_item(tree, hf_ua3g_dwl_dtmf_clck_format_minimum_on_time, tvb, offset, 1, ENC_BIG_ENDIAN);
2174 proto_tree_add_item(tree, hf_ua3g_dwl_dtmf_clck_format_inter_digit_pause_time, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2175 proto_tree_add_item(tree, hf_ua3g_dwl_dtmf_clck_format_clock_time_format, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2177 if (length > 2)
2178 proto_tree_add_item(tree, hf_ua3g_dwl_dtmf_clck_format_dtmf_country_adaptation, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2182 /*-----------------------------------------------------------------------------
2183 SET CLOCK - 31h (MESSAGE FROM THE SYSTEM)
2184 ---------------------------------------------------------------------------*/
2185 static const value_string str_command_set_clck[] = {
2186 {0x00, "Set Current Time/Call Timer"},
2187 {0x01, "Set Current Time"},
2188 {0x02, "Set Call Timer"},
2189 {0, NULL}
2192 static void
2193 decode_set_clck(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2194 unsigned offset, unsigned length)
2196 uint8_t command;
2197 int hour, minute, second, call_timer;
2199 command = tvb_get_uint8(tvb, offset);
2201 /* add text to the frame "INFO" column */
2202 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_set_clck, "Unknown"));
2204 proto_tree_add_item(tree, hf_ua3g_command_set_clck, tvb, offset, 1, ENC_BIG_ENDIAN);
2205 offset++;
2206 length--;
2207 call_timer = 0;
2209 switch (command) {
2210 case 0x02: /* Timer Form */
2212 call_timer = 1;
2214 /* FALLTHROUGH */
2215 case 0x00: /* Set Current Time/Call Timer */
2216 case 0x01: /* Set Current Time */
2218 while (length > 0) {
2219 hour = tvb_get_uint8(tvb, offset);
2220 minute = tvb_get_uint8(tvb, offset + 1);
2221 second = tvb_get_uint8(tvb, offset + 2);
2223 proto_tree_add_uint_format_value(tree, (call_timer == 1) ? hf_ua3g_call_timer : hf_ua3g_current_time, tvb, offset, 3,
2224 tvb_get_ntoh24(tvb, offset), "%d:%d:%d", hour, minute, second);
2225 offset += 3;
2226 length -= 3;
2228 call_timer = 1;
2231 default:
2233 break;
2240 /*-----------------------------------------------------------------------------
2241 VOICE CHANNEL - 32h - (MESSAGE FROM THE SYSTEM)
2242 ---------------------------------------------------------------------------*/
2243 static const value_string str_voice_channel[] = {
2244 {0x00, "No"},
2245 {0x01, "B1"},
2246 {0x02, "B2"},
2247 {0x03, "B3"},
2248 {0, NULL}
2251 static const true_false_string tfs_voice_channel_channel_mode = { "Write 00 to Voice Channel", "Normal Voice Channel Mode" };
2252 static const true_false_string tfs_voice_channel_codec = { "Write Quiet To Codec", "Normal Codec Operation" };
2253 static const true_false_string tfs_voice_channel_voice_channel = { "Use B3 As Voice Channel", "Use B1 As Voice Channel" };
2255 static void
2256 decode_voice_channel(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
2257 unsigned offset, unsigned length)
2259 if (length == 1) {
2260 proto_tree_add_item(tree, hf_ua3g_voice_channel_channel_mode, tvb, offset, 1, ENC_NA);
2261 proto_tree_add_item(tree, hf_ua3g_voice_channel_codec, tvb, offset, 1, ENC_NA);
2262 proto_tree_add_item(tree, hf_ua3g_voice_channel_voice_channel, tvb, offset, 1, ENC_NA);
2263 } else if (length == 2) {
2264 proto_tree_add_item(tree, hf_ua3g_voice_channel_main_voice, tvb, offset, 1, ENC_BIG_ENDIAN);
2265 proto_tree_add_item(tree, hf_ua3g_voice_channel_announce, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2266 } else if (length == 4) {
2267 proto_tree_add_item(tree, hf_ua3g_voice_channel_b_general, tvb, offset, 1, ENC_BIG_ENDIAN);
2268 proto_tree_add_item(tree, hf_ua3g_voice_channel_b_loud_speaker, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2269 proto_tree_add_item(tree, hf_ua3g_voice_channel_b_ear_piece, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2270 proto_tree_add_item(tree, hf_ua3g_voice_channel_b_microphones, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2275 /*-----------------------------------------------------------------------------
2276 EXTERNAL RINGING - 33h (MESSAGE FROM THE SYSTEM)
2277 ---------------------------------------------------------------------------*/
2278 static const value_string str_ext_ring_cmd[] = {
2279 {0x00, "Turn Off"},
2280 {0x01, "Turn On"},
2281 {0x02, "Follow The Normal Ringing"},
2282 {0, NULL}
2285 static void
2286 decode_external_ringing(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2287 unsigned offset)
2289 uint8_t command;
2291 command = tvb_get_uint8(tvb, offset);
2293 /* add text to the frame "INFO" column */
2294 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_ext_ring_cmd, "Unknown"));
2296 proto_tree_add_item(tree, hf_ua3g_external_ringing_command, tvb, offset, 1, ENC_BIG_ENDIAN);
2300 /*-----------------------------------------------------------------------------
2301 LCD CURSOR - 35h - (MESSAGE FROM THE SYSTEM)
2302 ---------------------------------------------------------------------------*/
2303 static void
2304 decode_lcd_cursor(proto_tree *tree _U_, tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
2306 const char* str_on_off_val = STR_ON_OFF(tvb_get_uint8(tvb, offset + 1) & 0x02);
2308 /* add text to the frame "INFO" column */
2309 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", str_on_off_val);
2311 proto_tree_add_item(tree, hf_ua3g_lcd_cursor_line_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2312 proto_tree_add_item(tree, hf_ua3g_lcd_cursor, tvb, offset+1, 1, ENC_NA);
2316 /*-----------------------------------------------------------------------------
2317 DOWNLOAD SPECIAL CHARACTER - 36h - (MESSAGE FROM THE SYSTEM)
2318 ---------------------------------------------------------------------------*/
2319 static void
2320 decode_dwl_special_char(proto_tree *tree, tvbuff_t *tvb,
2321 packet_info *pinfo _U_, unsigned offset, unsigned length)
2323 int i;
2325 while (length > 0) {
2326 proto_tree_add_item(tree, hf_ua3g_dwl_special_char_character_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2327 offset++;
2328 length--;
2329 for (i = 1; i <= 8; i++) {
2330 proto_tree_add_item(tree, hf_ua3g_dwl_special_char_byte, tvb, offset, 1, ENC_BIG_ENDIAN);
2331 offset++;
2332 length--;
2338 /*-----------------------------------------------------------------------------
2339 SET CLOCK/TIMER POSITION - 38h - (MESSAGE FROM THE SYSTEM)
2340 ---------------------------------------------------------------------------*/
2341 static void
2342 decode_set_clck_timer_pos(proto_tree *tree, tvbuff_t *tvb,
2343 packet_info *pinfo _U_, unsigned offset)
2345 if (!tree)
2346 return;
2348 proto_tree_add_item(tree, hf_ua3g_set_clck_timer_pos_clock_line_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2349 proto_tree_add_item(tree, hf_ua3g_set_clck_timer_pos_clock_column_number, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2350 proto_tree_add_item(tree, hf_ua3g_set_clck_timer_pos_call_timer_line_number, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2351 proto_tree_add_item(tree, hf_ua3g_set_clck_timer_pos_call_timer_column_number, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2355 /*-----------------------------------------------------------------------------
2356 SET LCD CONTRAST - 39h - (MESSAGE FROM THE SYSTEM)
2357 ---------------------------------------------------------------------------*/
2358 static const value_string str_driver_number[] = {
2359 {0x00, "Display"},
2360 {0x01, "Icon"},
2361 {0, NULL}
2364 static void
2365 decode_set_lcd_contrast(proto_tree *tree, tvbuff_t *tvb,
2366 packet_info *pinfo _U_, unsigned offset)
2368 proto_tree_add_item(tree, hf_ua3g_set_lcd_contrast_driver_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2369 proto_tree_add_item(tree, hf_ua3g_set_lcd_contrast_contrast_value, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2373 /*-----------------------------------------------------------------------------
2374 BEEP - 3Ch (MESSAGE FROM THE SYSTEM)
2375 ---------------------------------------------------------------------------*/
2376 static const value_string str_command_beep[] = {
2377 {0x01, "Beep Once"},
2378 {0x02, "Beep Start"},
2379 {0x03, "Stop Beep"},
2380 {0x04, "Start Beep"},
2381 {0x05, "Define Beep"},
2382 {0, NULL}
2385 static const value_string str_beep_start_destination[] = {
2386 {0x01, "Ear-Piece"},
2387 {0x02, "Loudspeaker"},
2388 {0x03, "Ear-Piece and Loudspeaker"},
2389 {0, NULL}
2392 static const value_string str_beep_freq_sample_nb[] = {
2393 {0x00, "Frequency"},
2394 {0xFF, "Audio Sample Number"},
2395 {0, NULL}
2397 static const value_string str_beep_duration[] = {
2398 {0x00, "Duration "},
2399 {0xFF, "Duration (Ignored)"},
2400 {0, NULL}
2402 static const value_string str_beep_terminator[] = {
2403 {0xFD, "Stop"},
2404 {0xFE, "Loop"},
2405 {0xFF, "Infinite"},
2406 {0, NULL}
2409 static void
2410 decode_beep(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2411 unsigned offset, unsigned length)
2413 if (length > 0) { /* All cases except classical beep */
2414 uint8_t command;
2415 proto_tree *ua3g_body_tree = tree;
2417 command = tvb_get_uint8(tvb, offset);
2419 /* add text to the frame "INFO" column */
2420 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_beep, "Unknown"));
2422 proto_tree_add_item(ua3g_body_tree, hf_ua3g_command_beep, tvb, offset, 1, ENC_BIG_ENDIAN);
2423 offset++;
2424 length--;
2426 switch (command) {
2427 case 0x01: /* Beep Once */
2428 case 0x02: /* Beep Start */
2430 int i = 0;
2432 proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_destination, tvb, offset, 1, ENC_BIG_ENDIAN);
2433 offset++;
2434 length--;
2436 while (length > 0) {
2437 uint8_t val;
2439 i++;
2440 val = (tvb_get_uint8(tvb, offset) & 0x7F) * 10;
2441 proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_on_off, tvb, offset, 1, ENC_NA);
2442 proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_beep_cadence, tvb, offset, 1, val,
2443 "Cadence T%d: %d ms", i, val);
2444 offset++;
2445 length--;
2447 break;
2449 case 0x04: /* Start Beep */
2451 static int * const destinations[] = {
2452 &hf_ua3g_beep_beep_destination_handset,
2453 &hf_ua3g_beep_beep_destination_headset,
2454 &hf_ua3g_beep_beep_destination_loudspeaker,
2455 &hf_ua3g_beep_beep_destination_announce_loudspeaker,
2456 &hf_ua3g_beep_beep_destination_handsfree,
2457 NULL
2460 proto_tree_add_bitmask(ua3g_body_tree, tvb, offset, hf_ua3g_beep_beep_destination,
2461 ett_ua3g_beep_beep_destination, destinations, ENC_NA);
2462 offset++;
2464 proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_beep_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2465 break;
2467 case 0x05:
2469 int i, nb_of_notes, beep_number;
2470 proto_tree* note_tree;
2472 beep_number = tvb_get_uint8(tvb, offset);
2473 proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_beep_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2474 offset++;
2475 length--;
2477 if (beep_number <= 0x44)
2478 beep_number = 0x00;
2479 else
2480 beep_number = 0xFF;
2482 nb_of_notes = tvb_get_uint8(tvb, offset);
2483 proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_number_of_notes, tvb, offset, 1, ENC_BIG_ENDIAN);
2484 offset++;
2485 length--;
2487 while (length > 0) {
2488 for (i = 1; i <= nb_of_notes; i++) {
2489 note_tree = proto_tree_add_subtree_format(ua3g_body_tree, tvb, offset, 3,
2490 ett_ua3g_note, NULL, "Note %d", i);
2491 proto_tree_add_uint_format(note_tree, hf_ua3g_beep_freq_sample, tvb, offset, 1, tvb_get_uint8(tvb, offset),
2492 "%s: %d", val_to_str_const(beep_number, str_beep_freq_sample_nb, "Unknown"),
2493 tvb_get_uint8(tvb, offset));
2494 offset++;
2495 length--;
2496 proto_tree_add_item(note_tree, hf_ua3g_beep_level, tvb, offset, 1, ENC_NA);
2497 offset++;
2498 length--;
2499 proto_tree_add_uint_format(note_tree, hf_ua3g_beep_duration, tvb, offset, 1, tvb_get_uint8(tvb, offset),
2500 "%s: %x", val_to_str_const(beep_number, str_beep_duration, "Unknown"),
2501 tvb_get_uint8(tvb, offset));
2502 offset++;
2503 length--;
2505 proto_tree_add_item(ua3g_body_tree, hf_ua3g_beep_terminator, tvb, offset, 1, ENC_BIG_ENDIAN);
2506 offset++;
2507 length--;
2509 break;
2511 case 0x03: /* Stop Beep */
2512 default:
2514 break;
2517 } else { /* Classical Beep */
2518 /* add text to the frame "INFO" column */
2519 col_append_str(pinfo->cinfo, COL_INFO, ": Classical Beep");
2524 /*-----------------------------------------------------------------------------
2525 SIDETONE ON / OFF - 3Dh (MESSAGE FROM THE SYSTEM)
2526 ---------------------------------------------------------------------------*/
2527 static void
2528 decode_sidetone(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
2530 uint8_t command;
2531 const char* command_str;
2533 command = tvb_get_uint8(tvb, offset);
2534 command_str = STR_ON_OFF(command);
2536 /* add text to the frame "INFO" column */
2537 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", command_str);
2539 proto_tree_add_item(tree, hf_ua3g_command_sidetone, tvb, offset, 1, ENC_NA);
2541 if (command == 0x01) {
2542 proto_tree_add_int(tree, hf_ua3g_sidetone_level, tvb, offset+1, 1,
2543 (signed char)(tvb_get_uint8(tvb, offset+1) / 2));
2548 /*-----------------------------------------------------------------------------
2549 SET PROGRAMMABLE RINGING CADENCE - 3Eh (MESSAGE FROM THE SYSTEM)
2550 ---------------------------------------------------------------------------*/
2551 static void
2552 decode_ringing_cadence(proto_tree *tree, tvbuff_t *tvb,
2553 packet_info *pinfo _U_, unsigned offset, unsigned length)
2555 int i = 0;
2556 uint16_t cadence_length;
2558 if (!tree)
2559 return;
2561 proto_tree_add_item(tree, hf_ua3g_ringing_cadence_cadence, tvb, offset, 1, ENC_BIG_ENDIAN);
2562 offset++;
2563 length--;
2565 while (length > 0) {
2566 i++;
2567 proto_tree_add_item(tree, hf_ua3g_ringing_cadence_on_off, tvb, offset, 1, ENC_NA);
2568 cadence_length = ((tvb_get_uint8(tvb, offset) & 0x7F) * 10);
2569 proto_tree_add_uint_format(tree, hf_ua3g_ringing_cadence_length, tvb, offset, 1, cadence_length,
2570 "Length %d : %d ms", i, cadence_length);
2571 offset++;
2572 length--;
2577 /*-----------------------------------------------------------------------------
2578 MUTE ON / OFF - 3Fh (MESSAGE FROM THE SYSTEM)
2579 ---------------------------------------------------------------------------*/
2580 static const value_string str_mute[] = {
2581 {0x00, "Microphone Disable"},
2582 {0x01, "Microphone Enable"},
2583 {0, NULL}
2586 static void
2587 decode_mute(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
2589 uint8_t command;
2591 command = tvb_get_uint8(tvb, offset);
2593 /* add text to the frame "INFO" column */
2594 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_mute, "Unknown"));
2596 proto_tree_add_item(tree, hf_ua3g_command_mute, tvb, offset, 1, ENC_NA);
2600 /*-----------------------------------------------------------------------------
2601 FEEDBACK ON / OFF - 40h (MESSAGE FROM THE SYSTEM)
2602 ---------------------------------------------------------------------------*/
2603 static void
2604 decode_feedback(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2605 unsigned offset, unsigned length)
2607 uint8_t command;
2608 const char* command_str;
2610 command = tvb_get_uint8(tvb, offset);
2611 command_str = STR_ON_OFF(command);
2613 /* add text to the frame "INFO" column */
2614 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", command_str);
2616 if (!tree)
2617 return;
2619 proto_tree_add_item(tree, hf_ua3g_command_feedback, tvb, offset, 1, ENC_NA);
2620 offset++;
2621 length--;
2623 if (command == 0x01) {
2624 proto_tree_add_int(tree, hf_ua3g_feedback_level, tvb, offset, 1,
2625 (signed char)(tvb_get_uint8(tvb, offset) / 2));
2626 offset++;
2627 length--;
2629 if (length > 0) {
2630 proto_tree_add_uint_format_value(tree, hf_ua3g_feedback_duration, tvb, offset, 1,
2631 tvb_get_uint8(tvb, offset) * 10, "%d ms", tvb_get_uint8(tvb, offset) * 10);
2637 /*-----------------------------------------------------------------------------
2638 READ PERIPHERAL - 44h (MESSAGE FROM THE SYSTEM)
2639 WRITE PERIPHERAL - 45h (MESSAGE FROM THE SYSTEM)
2640 PERIPHERAL CONTENT - 2Bh (MESSAGE FROM THE TERMINAL)
2641 ---------------------------------------------------------------------------*/
2642 static void
2643 decode_r_w_peripheral(proto_tree *tree, tvbuff_t *tvb,
2644 packet_info *pinfo _U_, unsigned offset, unsigned length)
2646 proto_tree_add_item(tree, hf_ua3g_r_w_peripheral_address, tvb, offset, 2, ENC_BIG_ENDIAN);
2648 if (length > 2) {
2649 proto_tree_add_item(tree, hf_ua3g_r_w_peripheral_content, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2654 /*-----------------------------------------------------------------------------
2655 ICON COMMAND - 47h (MESSAGE FROM THE SYSTEM)
2656 ---------------------------------------------------------------------------*/
2657 static const value_string str_icon_cmd_state[] = {
2658 {0x00, "Off"},
2659 {0x01, "Slow Flash"},
2660 {0x02, "Not Used"},
2661 {0x03, "Steady On"},
2662 {0, NULL}
2665 static void
2666 decode_icon_cmd(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, unsigned offset)
2668 uint8_t byte0, byte1, bytex;
2669 int i;
2671 if (!tree)
2672 return;
2674 proto_tree_add_item(tree, hf_ua3g_icon_cmd_icon_number, tvb, offset, 1, ENC_BIG_ENDIAN);
2676 byte0 = tvb_get_uint8(tvb, offset+1);
2677 byte1 = tvb_get_uint8(tvb, offset+2);
2679 for (i = 0; i < 8; i++) {
2680 bytex =
2681 ((byte0 >> i) & 0x01) * 2 +
2682 ((byte1 >> i) & 0x01);
2683 proto_tree_add_uint_format(tree, hf_ua3g_icon_cmd_segment, tvb, offset+1, 2, bytex,
2684 "Segment %d: %s (%d)", i, val_to_str_const(bytex, str_icon_cmd_state, "Unknown"), bytex);
2689 /*-----------------------------------------------------------------------------
2690 AUDIO CONFIGURATION - 49h (MESSAGE FROM THE SYSTEM)
2691 ---------------------------------------------------------------------------*/
2692 static const value_string str_command_audio_config[] = {
2693 {0x00, "Audio Coding"},
2694 {0x01, "DPI Channel Allocations"},
2695 {0x02, "Loudspeaker Volume Adjust"},
2696 {0x03, "Audio Circuit Configuration"},
2697 {0x04, "Handsfree Parameters"},
2698 {0x05, "Loudspeaker Acoustic Parameters"},
2699 {0x06, "Device Configuration"},
2700 {0, NULL}
2703 static const value_string str_audio_coding_law[] = {
2704 {0x00, "A Law"},
2705 {0x01, "m Law"},
2706 {0, NULL}
2709 static const value_string str_device_configuration[] = {
2710 { 0, "Handset Device "},
2711 { 1, "Headset Device "},
2712 { 2, "Loudspeaker Device "},
2713 { 3, "Announce Loudspeaker Device"},
2714 { 4, "Handsfree Device "},
2715 { 0, NULL }
2718 static const true_false_string tfs_audio_config_handsfree_return = { "Return Loss Active", "Return Loss Normal" };
2719 static const true_false_string tfs_audio_config_handsfree_handsfree = { "More Full Duplex", "Handsfree Normal" };
2721 static void
2722 decode_audio_config(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2723 unsigned offset, unsigned length)
2725 uint8_t command;
2726 proto_tree *ua3g_body_tree = tree;
2728 command = tvb_get_uint8(tvb, offset);
2730 /* add text to the frame "INFO" column */
2731 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_audio_config, "Unknown"));
2733 if (!ua3g_body_tree)
2734 return;
2736 proto_tree_add_item(ua3g_body_tree, hf_ua3g_command_audio_config, tvb, offset, 1, ENC_BIG_ENDIAN);
2737 offset++;
2738 length--;
2740 switch (command) {
2741 case 0x00: /* Audio Coding */
2742 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_ignored, tvb, offset, 1, ENC_BIG_ENDIAN);
2743 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_law, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2744 break;
2745 case 0x01: /* DPI Channel Allocations */
2747 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_dpi_chan_ua_tx1, tvb, offset, 1, ENC_BIG_ENDIAN);
2748 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_dpi_chan_ua_tx2, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2749 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_dpi_chan_gci_tx1, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2750 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_dpi_chan_gci_tx2, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2751 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_dpi_chan_cod_tx, tvb, offset+4, 1, ENC_BIG_ENDIAN);
2752 break;
2753 case 0x02: /* Loudspeaker Volume Adjust */
2755 int i;
2756 for (i = 1; i < 8; i++) {
2757 proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_audio_config_volume_level, tvb, offset,
2758 1, tvb_get_uint8(tvb, offset), "Volume Level %d: %d",
2759 i, tvb_get_uint8(tvb, offset));
2760 offset++;
2761 length--;
2763 break;
2765 case 0x03: /* Audio Circuit Configuration */
2767 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_dth, tvb, offset, 1, ENC_BIG_ENDIAN);
2768 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_dtr, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2769 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_dtf, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2770 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_str, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2771 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_ahp1, tvb, offset+4, 1, ENC_BIG_ENDIAN);
2772 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_ahp2, tvb, offset+5, 1, ENC_BIG_ENDIAN);
2773 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_ath, tvb, offset+6, 1, ENC_BIG_ENDIAN);
2774 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_atr, tvb, offset+7, 1, ENC_BIG_ENDIAN);
2775 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_atf, tvb, offset+8, 1, ENC_BIG_ENDIAN);
2776 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_audio_circuit_alm, tvb, offset+9, 1, ENC_BIG_ENDIAN);
2777 break;
2778 case 0x04: /* Handsfree Parameters */
2779 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_handsfree_return, tvb, offset, 1, ENC_NA);
2780 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_handsfree_handsfree, tvb, offset, 1, ENC_NA);
2781 break;
2782 case 0x05: /* Loudspeaker Acoustic Parameters */
2783 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_group_listen, tvb, offset, 1, ENC_BIG_ENDIAN);
2784 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_attenuation, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2785 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_stay_in_send, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2786 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mtx, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2787 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mrc, tvb, offset+4, 1, ENC_BIG_ENDIAN);
2788 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_trans_threshold, tvb, offset+5, 1, ENC_BIG_ENDIAN);
2789 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_trans_threshold, tvb, offset+6, 1, ENC_BIG_ENDIAN);
2790 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_recv_threshold, tvb, offset+7, 1, ENC_BIG_ENDIAN);
2791 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_recv_threshold, tvb, offset+8, 1, ENC_BIG_ENDIAN);
2792 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_med_recv_threshold, tvb, offset+9, 1, ENC_BIG_ENDIAN);
2793 proto_tree_add_item(ua3g_body_tree, hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_high_recv_threshold, tvb, offset+10, 1, ENC_BIG_ENDIAN);
2794 break;
2795 case 0x06: /* Device Configuration */
2797 static const char *str_device_values[] = {
2798 " Internal",
2799 " Rj9 Plug",
2800 " Jack Plug",
2801 " Bluetooth Link",
2802 " USB Link"
2804 wmem_strbuf_t *strbuf;
2805 uint8_t device_values;
2806 int j;
2807 int device_index = 0;
2809 strbuf = wmem_strbuf_create(pinfo->pool);
2811 while (length > 0) {
2813 device_values = tvb_get_uint8(tvb, offset);
2815 wmem_strbuf_truncate(strbuf, 0);
2817 if (device_values != 0) {
2818 for (j = 0; j < 5; j++) {
2819 if (device_values & (0x01 << j)) {
2820 wmem_strbuf_append(strbuf, str_device_values[j]);
2823 } else {
2824 wmem_strbuf_append(strbuf, " None");
2827 proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_device_configuration, tvb, offset, 1,
2828 device_values, "%s:%s",
2829 val_to_str_const(device_index, str_device_configuration, "Unknown"),
2830 wmem_strbuf_get_str(strbuf));
2831 offset++;
2832 length--;
2833 device_index++;
2835 break;
2837 default:
2839 break;
2845 /*-----------------------------------------------------------------------------
2846 AUDIO PADDED PATH - 4Ah (MESSAGE FROM THE SYSTEM)
2847 ---------------------------------------------------------------------------*/
2848 static void
2849 decode_audio_padded_path(proto_tree *tree, tvbuff_t *tvb,
2850 packet_info *pinfo _U_, unsigned offset)
2852 proto_tree_add_item(tree, hf_ua3g_audio_padded_path_emission_padded_level, tvb, offset, 1, ENC_BIG_ENDIAN);
2853 proto_tree_add_item(tree, hf_ua3g_audio_padded_path_reception_padded_level, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2857 /*-----------------------------------------------------------------------------
2858 KEY RELEASE ON / OFF - 41h (MESSAGE FROM THE SYSTEM)
2859 AMPLIFIED HANDSET (BOOST) - 48h (MESSAGE FROM THE SYSTEM)
2860 LOUDSPEAKER ON / OFF - 4Dh (MESSAGE FROM THE SYSTEM)
2861 ANNOUNCE ON / OFF - 4Eh (MESSAGE FROM THE SYSTEM)
2862 ---------------------------------------------------------------------------*/
2863 static void
2864 decode_on_off_level(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
2865 unsigned offset, unsigned length, int hf_opcode)
2867 uint8_t command;
2868 const char* command_str;
2870 command = tvb_get_uint8(tvb, offset);
2871 command_str = STR_ON_OFF(command);
2873 /* add text to the frame "INFO" column */
2874 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", command_str);
2876 proto_tree_add_item(tree, hf_opcode, tvb, offset, 1, ENC_NA);
2878 if (length > 1) {
2879 if (command == 0x01) {
2880 proto_tree_add_item(tree, hf_ua3g_on_off_level_level_on_loudspeaker, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2886 /*-----------------------------------------------------------------------------
2887 RING ON / OFF - 4Fh (MESSAGE FROM THE SYSTEM)
2888 ---------------------------------------------------------------------------*/
2889 static void
2890 decode_ring(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo, unsigned offset)
2892 uint8_t command;
2893 const char* command_str;
2895 command = tvb_get_uint8(tvb, offset);
2896 command_str = STR_ON_OFF(command);
2898 /* add text to the frame "INFO" column */
2899 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", command_str);
2901 if (!tree)
2902 return;
2904 proto_tree_add_item(tree, hf_ua3g_command_ring, tvb, offset, 1, ENC_NA);
2906 if (command == 0x01) {
2907 proto_tree_add_item(tree, hf_ua3g_ring_melody, tvb, offset+1, 1, ENC_BIG_ENDIAN);
2908 proto_tree_add_item(tree, hf_ua3g_ring_cadence, tvb, offset+2, 1, ENC_BIG_ENDIAN);
2909 proto_tree_add_item(tree, hf_ua3g_ring_speaker_level, tvb, offset+3, 1, ENC_BIG_ENDIAN);
2910 proto_tree_add_item(tree, hf_ua3g_ring_beep_number, tvb, offset+4, 1, ENC_BIG_ENDIAN);
2911 proto_tree_add_item(tree, hf_ua3g_ring_silent, tvb, offset+5, 1, ENC_NA);
2912 proto_tree_add_item(tree, hf_ua3g_ring_progressive, tvb, offset+5, 1, ENC_BIG_ENDIAN);
2917 /*-----------------------------------------------------------------------------
2918 UA DOWNLOAD PROTOCOL - 50h - Only for UA NOE (MESSAGE FROM THE TERMINAL AND FROM THE SYSTEM)
2919 ---------------------------------------------------------------------------*/
2920 static const value_string str_command_ua_dwl_protocol[] = {
2921 {0x00, "Downloading Suggest"},
2922 {0x01, "Downloading Request"},
2923 {0x02, "Downloading Acknowledge"},
2924 {0x03, "Downloading Data"},
2925 {0x04, "Downloading End"},
2926 {0x05, "Downloading End Acknowledge"},
2927 {0x06, "Downloading ISO Checksum"},
2928 {0x07, "Downloading ISO Checksum Acknowledge"},
2929 {0, NULL}
2932 static const value_string str_download_req_force_mode[] = {
2933 {0x00, "System Accept All Refusals"},
2934 {0x01, "Force Software Lock"},
2935 {0, NULL}
2937 #if 0
2938 static const value_string str_download_req_item_id[] = {
2939 {0x00, "Patches File"},
2940 {0x01, "Application Binary"},
2941 {0x02, "Datas Binary"},
2942 {0, NULL}
2944 #endif
2945 static const value_string str_download_req_mode_selection_country[] = {
2946 {0x00, "No Check"},
2947 {0x01, "For All Countries Except Chinese"},
2948 {0x02, "For Chinese"},
2949 {0, NULL}
2952 static const value_string str_download_ack_status[] = {
2953 {0x00, "Ok (Binary Item Downloading In \"Normal\" Progress)"},
2954 {0x01, "Hardware Failure: Flash Failure"},
2955 {0x02, "Not Enough Place To Store The Downloaded Binary"},
2956 {0x03, "Wrong Seq Number On Latest Received Download_Data Message"},
2957 {0x04, "Wrong Packet Number On Latest Received Download_Data Message"},
2958 {0x05, "Download Refusal Terminal (Validation Purpose)"},
2959 {0x06, "Download Refusal Terminal (Development Purpose)"},
2960 {0x10, "Download Refusal: Hardware Cause (Unknown Flash Device, Incompatible Hardware)"},
2961 {0x11, "Download Refusal: No Loader Available Into The Terminal"},
2962 {0x12, "Download Refusal: Software Lock"},
2963 {0x13, "Download Refusal: Wrong Parameter Into Download Request"},
2964 {0x20, "Wrong Packet Number On Latest Received Downloading_Data Message"},
2965 {0x21, "Compress Header Invalid"},
2966 {0x22, "Decompress Error"},
2967 {0x23, "Binary Header Invalid"},
2968 {0x24, "Binary Check Error: Flash Write Error Or Binary Is Invalid"},
2969 {0x25, "Error Already Signaled - No More Data Accepted"},
2970 {0x26, "No Downloading In Progress"},
2971 {0x27, "Too Many Bytes Received (More Than Size Given Into The Download_Req Message)"},
2972 {0xFF, "Undefined Error"},
2973 {0, NULL}
2975 static value_string_ext str_download_ack_status_ext = VALUE_STRING_EXT_INIT(str_download_ack_status);
2977 static const value_string str_download_end_ack_ok[] = {
2978 {0x00, "Ok"},
2979 {0x01, "Hardware Failure: Flash Problems"},
2980 {0x02, "Not Enough Place To Store The Downloaded Binary"},
2981 {0, NULL}
2984 static const value_string str_iso_checksum_ack_status[] = {
2985 {0x00, "The Checksum Matches"},
2986 {0x25, "Error Detected And Already Signaled"},
2987 {0x30, "Checksum Error (All Bytes Received)"},
2988 {0x31, "Checksum Error (Bytes Missing)"},
2989 {0, NULL}
2992 static const value_string str_mem_size[] = {
2993 {0x00, "No Check"},
2994 {0x01, "128 Kbytes"},
2995 {0x02, "256 Kbytes"},
2996 {0x03, "512 Kbytes"},
2997 {0x04, "1 Mbytes"},
2998 {0x05, "2 Mbytes"},
2999 {0x06, "4 Mbytes"},
3000 {0x07, "8 Mbytes"},
3001 {0, NULL}
3004 static const true_false_string tfs_bin_info = { "LZO Compressed Binary", "Uncompressed Binary" };
3006 static void
3007 decode_ua_dwl_protocol(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
3008 unsigned offset, unsigned length)
3010 uint8_t command;
3011 proto_tree *ua3g_body_tree = tree, *ua3g_param_tree;
3013 command = tvb_get_uint8(tvb, offset);
3015 /* add text to the frame "INFO" column */
3016 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_ua_dwl_protocol, "Unknown"));
3018 proto_tree_add_item(ua3g_body_tree, hf_ua3g_command_ua_dwl_protocol, tvb, offset, 1, ENC_BIG_ENDIAN);
3019 offset++;
3020 length--;
3022 switch (command) {
3023 case 0x00: /* Downloading Suggest (MESSAGE FROM THE TERMINAL) */
3024 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_item_identifier, tvb, offset, 1, ENC_BIG_ENDIAN);
3025 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_item_version_nc, tvb, offset+1, 2, ENC_BIG_ENDIAN);
3026 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_cause, tvb, offset+3, 1, ENC_BIG_ENDIAN);
3027 break;
3028 case 0x01: /* Downloading Request (MESSAGE FROM THE SYSTEM) */
3030 if (length > 7) { /* Not R1 */
3031 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_force_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
3032 offset++;
3033 length--;
3036 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_item_identifier, tvb, offset, 1, ENC_BIG_ENDIAN);
3037 offset++;
3038 length--;
3040 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_item_version, tvb, offset, 2, ENC_BIG_ENDIAN);
3041 offset += 2;
3042 length -= 2;
3044 if (length > 2) { /* Not R1 */
3045 ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Files Included");
3046 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_files_inc_boot_binary,
3047 tvb, offset, 1, ENC_NA);
3048 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_files_inc_loader_binary,
3049 tvb, offset, 1, ENC_NA);
3050 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_files_inc_appli_binary,
3051 tvb, offset, 1, ENC_NA);
3052 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_files_inc_data_binary,
3053 tvb, offset, 1, ENC_NA);
3054 offset++;
3055 length--;
3057 ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Model Selection");
3058 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_model_selection_a,
3059 tvb, offset, 1, ENC_NA);
3060 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_model_selection_b,
3061 tvb, offset, 1, ENC_NA);
3062 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_model_selection_c,
3063 tvb, offset, 1, ENC_NA);
3064 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_model_selection_country_ver,
3065 tvb, offset, 1, ENC_BIG_ENDIAN);
3066 offset++;
3067 length--;
3068 ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Hardware Selection");
3069 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe1,
3070 tvb, offset, 1, ENC_NA);
3071 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe2,
3072 tvb, offset, 1, ENC_NA);
3073 offset++;
3074 length--;
3076 ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Memory Sizes Required");
3077 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_memory_sizes_flash,
3078 tvb, offset, 1, ENC_BIG_ENDIAN);
3079 proto_tree_add_item(ua3g_param_tree, hf_ua3g_ua_dwl_protocol_memory_sizes_ext_ram,
3080 tvb, offset, 1, ENC_BIG_ENDIAN);
3081 offset++;
3082 length--;
3083 } else { /* R1 */
3084 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_binary_info, tvb, offset, 1, ENC_NA);
3085 offset++;
3086 length--;
3089 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_binary_length, tvb, offset, 3, ENC_BIG_ENDIAN);
3090 break;
3092 case 0x02: /* Downloading Acknowledge (MESSAGE FROM THE TERMINAL) */
3093 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_packet_number, tvb, offset, 2, ENC_BIG_ENDIAN);
3094 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_download_ack_status, tvb, offset+2, 1, ENC_BIG_ENDIAN);
3095 break;
3096 case 0x03: /* Downloading Data (MESSAGE FROM THE SYSTEM) */
3098 int i = 1;
3100 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_packet_number, tvb, offset, 2, ENC_BIG_ENDIAN);
3101 offset += 2;
3102 length -= 2;
3104 while (length > 0) {
3105 proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_packet_number, tvb, offset, 1,
3106 tvb_get_uint8(tvb, offset), "Packet Number %3d: %d", i, tvb_get_uint8(tvb, offset));
3107 offset++;
3108 length--;
3109 i++;
3111 break;
3113 case 0x05: /* Downloading End Acknowledge (MESSAGE FROM THE TERMINAL) */
3114 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_packet_download_end_ack_ok_status, tvb, offset, 1, ENC_BIG_ENDIAN);
3115 break;
3116 case 0x06: /* Downloading Iso Checksum (MESSAGE FROM THE SYSTEM) */
3117 proto_tree_add_checksum(ua3g_body_tree, tvb, offset, hf_ua3g_ua_dwl_protocol_checksum, -1, NULL, pinfo, 0, ENC_BIG_ENDIAN, PROTO_CHECKSUM_NO_FLAGS);
3118 break;
3119 case 0x07: /* Downloading ISO Checksum Acknowledge (MESSAGE FROM THE TERMINAL) */
3120 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ua_dwl_protocol_acknowledge, tvb, offset, 1, ENC_BIG_ENDIAN);
3121 break;
3122 case 0x04: /* Downloading End (MESSAGE FROM THE SYSTEM) */
3123 default:
3124 break;
3129 /*-----------------------------------------------------------------------------
3130 DIGIT DIALED - 03h (MESSAGE FROM THE SYSTEM)
3131 ---------------------------------------------------------------------------*/
3132 static void
3133 decode_digit_dialed(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, unsigned offset)
3135 proto_tree_add_item(tree, hf_ua3g_digit_dialed_digit_value, tvb, offset, 1, ENC_BIG_ENDIAN);
3139 /*-----------------------------------------------------------------------------
3140 SUBDEVICE_MSG - 04h (MESSAGE FROM THE TERMINAL)
3141 ---------------------------------------------------------------------------*/
3142 static void
3143 decode_subdevice_msg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
3144 unsigned offset, unsigned length)
3146 if (!tree)
3147 return;
3149 proto_tree_add_item(tree, hf_ua3g_subdevice_msg_subdev_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3150 proto_tree_add_item(tree, hf_ua3g_subdevice_msg_subdev_address, tvb, offset, 1, ENC_BIG_ENDIAN);
3152 proto_tree_add_item(tree, hf_ua3g_subdevice_msg_subdevice_opcode, tvb, offset+1, 1, ENC_BIG_ENDIAN);
3154 if (length > 2) {
3155 proto_tree_add_item(tree, hf_ua3g_subdevice_msg_parameter_bytes, tvb, offset+2, length-2, ENC_NA);
3160 /*-----------------------------------------------------------------------------
3161 IP DEVICE ROUTING - 13h (MESSAGE FROM THE TERMINAL)
3162 ---------------------------------------------------------------------------*/
3163 static const value_string str_command_cs_ip_device_routing[] = {
3164 {0x00, "Init"},
3165 {0x01, "Incident"},
3166 {0x02, "Get Parameters Value Response"},
3167 {0x03, "QOS Ticket RSP"},
3168 {0, NULL}
3171 static const value_string str_vta_type[] = {
3172 {0x03, "4035"},
3173 {0x04, "4020"},
3174 {0x05, "4010"},
3175 {0x20, "4018"},
3176 {0x21, "4028/8008/8008G/8028/8028S/8058S"},
3177 {0x22, "4038/8038"},
3178 {0x23, "4068/8068/8082/8068S"},
3179 {0x24, "mipt"},
3180 {0x25, "4008"},
3181 {0x32, "8058S"},
3182 {0x34, "8078S"},
3183 {0x35, "8088"},
3184 {0, NULL}
3187 static const value_string str_additional_vta_type[] = {
3188 {0x00, "Not Applicable"},
3189 {0x30, "8018"},
3190 {0x31, "8028S"},
3191 {0x32, "8058S"},
3192 {0x33, "4068S"},
3193 {0x34, "8078S"},
3194 {0x35, "8088"},
3195 {0x36, "8008/8008G"},
3196 {0, NULL}
3199 static const value_string str_cs_ip_device_routing_0F_compressor[] = {
3200 {0x00, "G.711 A-law"},
3201 {0x01, "G.711 mu-law"},
3202 {0x02, "G.723.1 5.3kbps"},
3203 {0x03, "G.723.1 6.3kbps"},
3204 {0x04, "G.729A 8kbps"},
3205 {0x05, "G.722 64kbps"},
3206 {0x06, "G.722 56kbps"},
3207 {0x07, "G.722 48kbps"},
3208 {0x08, "Opus"},
3209 {0, NULL}
3212 static const value_string cs_ip_device_routing_03_parameter_id_vals[] = {
3213 {0x01, "Date Of End Of Communication"},
3214 {0x02, "Node Number"},
3215 {0x03, "Ticket Protocol Version"},
3216 {0x06, "Equipment Type"},
3217 {0x08, "Local IP Address"},
3218 {0x09, "Distant IP Address"},
3219 {0x0A, "Local ID"},
3220 {0x0B, "Distant ID"},
3221 {0x0C, "Call Duration (second)"},
3222 {0x0D, "Local SSRC"},
3223 {0x0E, "Distant SSRC"},
3224 {0x0F, "Codec"},
3225 {0x10, "VAD"},
3226 {0x11, "ECE"},
3227 {0x12, "Voice Mode"},
3228 {0x13, "Transmitted Framing (ms)"},
3229 {0x14, "Received Framing (ms)"},
3230 {0x15, "Framing Changes"},
3231 {0x16, "Number Of RTP Packets Received"},
3232 {0x17, "Number Of RTP Packets Sent"},
3233 {0x18, "Number Of RTP Packets Lost"},
3234 {0x19, "Total Silence Detected (second)"},
3235 {0x1A, "Number Of SID Received"},
3236 {0x1B, "Delay Distribution"},
3237 {0x1C, "Maximum Delay (ms)"},
3238 {0x1D, "Number Of DTMF Received"},
3239 {0x1E, "Consecutive BFI"},
3240 {0x1F, "BFI Distribution"},
3241 {0x20, "Jitter Depth Distribution"},
3242 {0x21, "Number Of ICMP Host Unreachable"},
3243 {0x26, "Firmware Version"},
3244 {0x29, "DSP Framing (ms)"},
3245 {0x2A, "Transmitter SID"},
3246 {0x2D, "Minimum Delay (ms)"},
3247 {0x2E, "802.1 Q Used"},
3248 {0x2F, "802.1p Priority"},
3249 {0x30, "VLAN Id"},
3250 {0x31, "DiffServ"},
3251 {0x37, "Encryption"},
3252 {0x3D, "200 ms BFI Distribution"},
3253 {0x3E, "Consecutive RTP Lost"},
3254 {0, NULL}
3256 static value_string_ext cs_ip_device_routing_03_parameter_id_vals_ext = VALUE_STRING_EXT_INIT(cs_ip_device_routing_03_parameter_id_vals);
3258 static const value_string cs_ip_device_routing_cmd03_type_of_equip_vals[] = {
3259 {0x0101, "IP-Phone V2"},
3260 {0x0102, "NOE-IP"},
3261 {0x0200, "4980 Softphone (PCMM2)"},
3262 {0x0201, "WebSoftphoneIP"},
3263 {0x0300, "INTIP"},
3264 {0x0301, "GD/GA"},
3265 {0x0302, "4645"},
3266 {0x0303, "INTIP3"},
3267 {0x0304, "GD3/GA3"},
3268 {0x0305, "OXE MS"},
3269 {0x0306, "INTIP3-RTPproxy"},
3270 {0x0307, "GD3/GA3-RTPproxy"},
3271 {0x0308, "MS-RTPproxy"},
3272 {0x0400, "OXO"},
3273 {0, NULL}
3276 static const value_string cs_ip_device_routing_cmd03_voice_mode_vals[] = {
3277 {0x50, "Idle"},
3278 {0x51, "Handset"},
3279 {0x52, "Group Listening"},
3280 {0x53, "On Hook Dial"},
3281 {0x54, "Handsfree"},
3282 {0x55, "Headset"},
3283 {0, NULL}
3286 static const value_string cs_ip_device_routing_delay_distribution_range_vals[] = {
3287 {0, "0-40 "},
3288 {1, "40-80 "},
3289 {2, "80-150 "},
3290 {3, "150-250 "},
3291 {4, "250 and +"},
3292 {0, NULL}
3295 static const value_string cs_ip_device_routing_0_9_range_vals[] = {
3296 {0, "0 "},
3297 {1, "1 "},
3298 {2, "2 "},
3299 {3, "3 "},
3300 {4, "4 "},
3301 {5, "5 "},
3302 {6, "5 "},
3303 {7, "7 "},
3304 {8, "8 "},
3305 {9, "9 and +"},
3306 {0, NULL}
3309 static const value_string cs_ip_device_routing_bfi_distribution_range_vals[] = {
3310 {0, "0 "},
3311 {1, "0-1 "},
3312 {2, "1-2 "},
3313 {3, "2-3 "},
3314 {4, "3 and +"},
3315 {0, NULL}
3318 static const value_string cs_ip_device_routing_200ms_bfi_distribution_range_vals[] = {
3319 {0, "< 10% "},
3320 {1, "< 20% "},
3321 {2, "< 40% "},
3322 {3, "< 60% "},
3323 {4, ">= 60%"},
3324 {0, NULL}
3327 static const value_string cs_ip_device_routing_consecutive_rtp_lost_range_vals[] = {
3328 {0, "1 "},
3329 {1, "2 "},
3330 {2, "3 "},
3331 {3, "4 "},
3332 {4, "5 and +"},
3333 {0, NULL}
3336 static void
3337 decode_cs_ip_device_routing(proto_tree *tree _U_, tvbuff_t *tvb,
3338 packet_info *pinfo, unsigned offset, unsigned length)
3340 uint8_t command;
3341 proto_tree *ua3g_body_tree = tree, *ua3g_param_tree;
3342 proto_item *ua3g_param_item;
3343 int i, parameter_id, parameter_length;
3345 command = tvb_get_uint8(tvb, offset);
3347 /* add text to the frame "INFO" column */
3348 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_cs_ip_device_routing, "Unknown"));
3350 if (!ua3g_body_tree)
3351 return;
3353 proto_tree_add_item(ua3g_body_tree, hf_ua3g_ip_cs, tvb, offset, 1, ENC_BIG_ENDIAN);
3354 offset++;
3355 length--;
3357 switch (command) {
3358 case 0x00:
3359 proto_tree_add_item(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_cmd00_vta_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3360 proto_tree_add_item(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_cmd00_characteristic_number, tvb, offset+1, 1, ENC_BIG_ENDIAN);
3361 break;
3362 case 0x01:
3364 int j = 0;
3365 if (length == 1) {
3366 proto_tree_add_item(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_cmd01_incident_0, tvb, offset, 1, ENC_BIG_ENDIAN);
3367 } else {
3368 while (length >0) {
3369 j++;
3370 proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_param_identifier, tvb, offset, 1,
3371 tvb_get_uint8(tvb, offset), "Parameter %d Identifier: %d",
3372 j, tvb_get_uint8(tvb, offset));
3373 offset++;
3374 length--;
3377 break;
3379 case 0x02:
3380 while (length > 0) {
3381 parameter_id = tvb_get_uint8(tvb, offset);
3382 parameter_length = tvb_get_uint8(tvb, offset + 1);
3384 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter, tvb, offset,
3385 parameter_length + 2, parameter_id,
3386 "%s", val_to_str_const(parameter_id, ip_device_routing_cmd_get_param_req_vals, "Unknown"));
3387 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
3389 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
3390 offset++;
3391 length--;
3393 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_length, tvb, offset, 1, ENC_BIG_ENDIAN);
3394 offset++;
3395 length--;
3397 if (parameter_length > 0) {
3398 switch (parameter_id) {
3399 case 0x00: /* Firmware Version */
3400 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_firmware_version, tvb, offset, 2, ENC_BIG_ENDIAN);
3401 break;
3402 case 0x01: /* Firmware Version (same as above, different format) */
3403 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_tscip_version, tvb, offset, 3, ENC_BIG_ENDIAN);
3404 break;
3405 case 0x02: /* DHCP IP Address */
3406 case 0x03: /* Local IP Address */
3407 case 0x04: /* Subnetwork Mask */
3408 case 0x05: /* Router IP Address */
3409 case 0x06: /* TFTP IP Address */
3410 case 0x07: /* Main CPU Address */
3411 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
3412 break;
3413 case 0x08: /* Default Codec */
3415 if (parameter_length <= 8) {
3416 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
3417 } else {
3418 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_bytes, tvb, offset, parameter_length, ENC_NA);
3420 break;
3422 case 0x09: /* Ethernet Drivers Config */
3424 if (parameter_length == 2) {
3425 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_speed, tvb, offset, 1, ENC_BIG_ENDIAN);
3426 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_duplex, tvb, offset+1, 1, ENC_NA|ENC_ASCII);
3427 } else if (parameter_length == 4) {
3428 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_speed, tvb, offset, 1, ENC_BIG_ENDIAN);
3429 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_duplex, tvb, offset+1, 1, ENC_NA|ENC_ASCII);
3430 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_speed, tvb, offset+2, 1, ENC_BIG_ENDIAN);
3431 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_duplex, tvb, offset+3, 1, ENC_NA|ENC_ASCII);
3432 } else {
3433 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_value, tvb, offset, parameter_length, ENC_NA);
3435 break;
3437 case 0x0A: /* MAC Address */
3438 case 0x0B: /* Pseudo MAC Address */
3439 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_mac_address, tvb, offset, 6, ENC_NA);
3440 break;
3441 default:
3442 if (parameter_length <= 8) {
3443 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
3444 } else {
3445 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd02_parameter_value, tvb, offset, parameter_length, ENC_NA);
3447 break;
3450 offset += parameter_length;
3451 length -= parameter_length;
3454 break;
3455 case 0x03:
3457 while (length > 0) {
3458 parameter_id = tvb_get_uint8(tvb, offset);
3459 parameter_length = tvb_get_ntohs(tvb, offset + 1);
3461 ua3g_param_item = proto_tree_add_uint_format(ua3g_body_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter, tvb, offset,
3462 parameter_length+3, parameter_id, "%s",
3463 val_to_str_const(parameter_id, cs_ip_device_routing_03_parameter_id_vals, "Unknown"));
3464 ua3g_param_tree = proto_item_add_subtree(ua3g_param_item, ett_ua3g_param);
3466 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter, tvb, offset, 1, ENC_BIG_ENDIAN);
3467 offset++;
3468 length--;
3470 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_length, tvb, offset, 2, ENC_BIG_ENDIAN);
3471 offset += 2;
3472 length -= 2;
3474 if (parameter_length > 0) {
3475 switch (parameter_id) {
3476 case 0x06: /* Type Of Equipment */
3477 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_type_of_equip, tvb, offset, 2, ENC_BIG_ENDIAN);
3478 break;
3479 case 0x08: /* Local IP Address */
3480 case 0x09: /* Distant IP Address */
3481 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
3482 break;
3483 case 0x0A: /* Local ID */
3484 case 0x0B: /* Remote ID */
3485 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_string, tvb, offset, parameter_length, ENC_NA|ENC_ASCII);
3486 break;
3487 case 0x0F: /* Codec */
3488 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_codec, tvb, offset, 1, ENC_BIG_ENDIAN);
3489 break;
3490 case 0x10: /* VAD */
3491 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_vad, tvb, offset, 1, ENC_NA);
3492 break;
3493 case 0x11: /* ECE */
3494 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_ece, tvb, offset, 1, ENC_NA);
3495 break;
3496 case 0x12: /* Voice Mode */
3497 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_voice_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
3498 break;
3499 case 0x1B: /* Delay Distribution */
3500 for (i = 0; i < parameter_length/2; i++) {
3501 unsigned off = (offset + (i*2));
3502 uint16_t val = tvb_get_ntohs(tvb, off);
3503 proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_delay_distribution, tvb, off,
3504 2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_delay_distribution_range_vals, "Unknown"), val);
3506 break;
3507 case 0x1E: /* Consecutive BFI */
3508 for (i = 0; i < parameter_length/2; i++) {
3509 unsigned off = (offset + (i*2));
3510 uint16_t val = tvb_get_ntohs(tvb, off);
3511 proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_bfi, tvb, off,
3512 2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_0_9_range_vals, "Unknown"), val);
3514 break;
3515 case 0x1F: /* BFI Distribution */
3516 for (i = 0; i < parameter_length/2; i++) {
3517 unsigned off = (offset + (i*2));
3518 uint16_t val = tvb_get_ntohs(tvb, off);
3519 proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution, tvb, off,
3520 2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_bfi_distribution_range_vals, "Unknown"), val);
3522 break;
3523 case 0x20: /* Jitter Depth Distribution */
3524 for (i = 0; i < parameter_length/4; i++) {
3525 unsigned off = (offset + (i*4));
3526 uint32_t val = tvb_get_ntohs(tvb, off);
3527 proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_jitter_depth_distribution, tvb, off,
3528 2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_0_9_range_vals, "Unknown"), val);
3530 break;
3531 case 0x26: /* Firmware Version */
3532 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_firmware_version, tvb, offset, 2, ENC_BIG_ENDIAN);
3533 break;
3534 case 0x2E: /* 802.1 Q Used */
3535 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021Q_used, tvb, offset, 1, ENC_NA);
3536 break;
3537 case 0x2F: /* 802.1p Priority */
3538 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021P_priority, tvb, offset, 1, ENC_BIG_ENDIAN);
3539 break;
3540 case 0x30: /* VLAN Id */
3541 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
3542 break;
3543 case 0x31: /* DiffServ */
3544 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_diffserv, tvb, offset, 1, ENC_BIG_ENDIAN);
3545 break;
3546 case 0x3D: /* 200 ms BFI Distribution */
3547 for (i = 0; i < parameter_length/2; i++) {
3548 unsigned off = (offset + (i*2));
3549 uint16_t val = tvb_get_ntohs(tvb, off);
3550 proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution_200ms, tvb, off,
3551 2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_200ms_bfi_distribution_range_vals, "Unknown"), val);
3553 break;
3554 case 0x3E: /* Consecutive RTP Lost */
3555 for (i = 0; i < parameter_length/2; i++) {
3556 unsigned off = (offset + (i*2));
3557 uint16_t val = tvb_get_ntohs(tvb, off);
3558 proto_tree_add_uint_format_value(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_rtp_lost, tvb, off,
3559 2, val, "%s: %d", val_to_str_const(i, cs_ip_device_routing_consecutive_rtp_lost_range_vals, "Unknown"), val);
3561 break;
3562 case 0x01: /* Date Of End Of Communication */
3563 case 0x02: /* Node Number */
3564 case 0x03: /* Ticket Protocol Version */
3565 case 0x0C: /* Call Duration (second) */
3566 case 0x0D: /* Local SSRC */
3567 case 0x0E: /* Distant SSRC */
3568 case 0x13: /* Transmitted Framing (ms) */
3569 case 0x14: /* Received Framing (ms) */
3570 case 0x15: /* Framing Changes */
3571 case 0x16: /* Number Of RTP Packets Received */
3572 case 0x17: /* Number Of RTP Packets Sent */
3573 case 0x18: /* Number Of RTP Packets Lost */
3574 case 0x19: /* Total Silence Detected (second) */
3575 case 0x1A: /* Number Of SID Received */
3576 case 0x1C: /* Maximum Delay (ms) */
3577 case 0x1D: /* Number Of DTMF Received */
3578 case 0x21: /* Number Of ICMP Host Unreachable */
3579 case 0x29: /* DSP Framing (ms) */
3580 case 0x2A: /* Transmitter SID */
3581 case 0x2D: /* Minimum Delay (ms) */
3582 case 0x37: /* Encryption */
3583 default:
3584 proto_tree_add_item(ua3g_param_tree, hf_ua3g_cs_ip_device_routing_cmd03_parameter_uint, tvb, offset, parameter_length, ENC_BIG_ENDIAN);
3585 break;
3588 offset += parameter_length;
3589 length -= parameter_length;
3592 break;
3594 default:
3595 break;
3600 /*-----------------------------------------------------------------------------
3601 UNSOLICITED MESSAGE - 9Fh/1Fh (MESSAGE FROM THE TERMINAL)
3602 VERSION RESPONSE - 21h (MESSAGE FROM THE TERMINAL)
3603 ---------------------------------------------------------------------------*/
3604 static const value_string str_command_unsolicited_msg[] = {
3605 {0x00, "Hardware Reset Acknowledge"},
3606 {0x01, "Software Reset Acknowledge"},
3607 {0x02, "Illegal Command Received"},
3608 {0x05, "Subdevice Down"},
3609 {0x06, "Segment Failure"},
3610 {0x07, "UA Device Event"},
3611 {0, NULL}
3613 static const value_string str_unsolicited_msg_other_info_1[] = {
3614 {0x00, "Link Is TDM"},
3615 {0x01, "Link Is IP"},
3616 {0, NULL}
3618 static const value_string str_unsolicited_msg_other_info_2[] = {
3619 {0x00, "Download Allowed"},
3620 {0x01, "Download Refused"},
3621 {0, NULL}
3623 static const true_false_string tfs_export_full = {
3624 "Full (Thales)",
3625 "Export (No Thales)"
3627 static const true_false_string tfs_fast_gigabit = {
3628 "Gigabit",
3629 "Fast"
3631 static const true_false_string tfs_2g_3g = {
3632 "3G/80x8",
3633 "2G/40x8"
3635 static const value_string str_unsolicited_msg_hard_config_chip[] = {
3636 {0x01, "Ivanoe 1"},
3637 {0x02, "Ivanoe 2"},
3638 {0x03, "Reserved"},
3639 {0, NULL}
3641 static const value_string str_unsolicited_msg_hard_config_flash[] = {
3642 {0x00, "No Flash"},
3643 {0x01, "128 Kbytes"},
3644 {0x02, "256 Kbytes"},
3645 {0x03, "512 Kbytes"},
3646 {0x04, "1 Mbytes"},
3647 {0x05, "2 Mbytes"},
3648 {0x06, "4 Mbytes"},
3649 {0x07, "8 Mbytes"},
3650 {0, NULL}
3652 static const value_string str_unsolicited_msg_hard_config_ram[] = {
3653 {0x00, "No External RAM"},
3654 {0x01, "128 Kbytes"},
3655 {0x02, "256 Kbytes"},
3656 {0x03, "512 Kbytes"},
3657 {0x04, "1 Mbytes"},
3658 {0x05, "2 Mbytes"},
3659 {0x06, "4 Mbytes"},
3660 {0x07, "8 Mbytes"},
3661 {0, NULL}
3664 /* TODO: these values are clearly wrong - needs to fit into 2 bits */
3665 static const value_string str_unsolicited_msg_subtype[] = {
3666 {0x03, "2x40"},
3667 {0x04, "1x20"},
3668 {0x05, "1x20"},
3669 {0, NULL}
3671 static const value_string str_unsolicited_msg_generation[] = {
3672 {0x02, "3"},
3673 {0, NULL}
3675 static const value_string str_unsolicited_msg_design[] = {
3676 {0x00, "Alpha"},
3677 {0, NULL}
3679 static const value_string str_unsolicited_msg_hard_vta_type[] = {
3680 {0x03, "MR2 (4035)"},
3681 {0x05, "VLE (4010)"},
3682 {0x07, "LE (4020)"},
3683 {0, NULL}
3685 static const value_string str_unsolicited_msg_hard_design[] = {
3686 {0x06, "Alpha"},
3687 {0, NULL}
3690 /* TODO: these values are clearly wrong - needs to fit into 2 bits */
3691 static const value_string str_unsolicited_msg_hard_subtype[] = {
3692 {0x06, "2x40"},
3693 {0x07, "1x20"},
3694 {0x08, "1x20"},
3695 {0, NULL}
3698 static void
3699 decode_unsolicited_msg(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo,
3700 unsigned offset, unsigned length, uint8_t opcode)
3702 uint8_t command;
3703 proto_tree *ua3g_body_tree = tree, *ua3g_param_tree;
3705 command = tvb_get_uint8(tvb, offset);
3707 if (opcode != 0x21) {
3708 /* add text to the frame "INFO" column */
3709 col_append_fstr(pinfo->cinfo, COL_INFO, ": %s", val_to_str_const(command, str_command_unsolicited_msg, "Unknown"));
3711 proto_tree_add_item(ua3g_body_tree, hf_ua3g_command_unsolicited_msg, tvb, offset, 1, ENC_BIG_ENDIAN);
3712 offset++;
3713 length--;
3714 } else {
3715 command = 0xFF; /* Opcode = 0x21 */
3718 switch (command)
3720 case 0x00: /* Hardware Reset Acknowledge */
3721 case 0x01: /* Software Reset Acknowledge */
3722 case 0xFF: /* Opcode = 0x21 : Version Response */
3724 int link, vta_type;
3726 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_device_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3727 offset++;
3728 length--;
3730 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_firmware_version, tvb, offset, 2, ENC_BIG_ENDIAN);
3731 offset += 2;
3732 length -= 2;
3734 if (opcode != 0x21) {
3735 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_self_test_result, tvb, offset, 1, ENC_BIG_ENDIAN);
3736 offset++;
3737 length--;
3740 vta_type = tvb_get_uint8(tvb, offset);
3742 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_vta_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3743 offset++;
3744 length--;
3746 switch (vta_type)
3748 case 0x03:
3749 case 0x04:
3750 case 0x05:
3752 ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Characteristic Number");
3753 proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_char_num_vta_subtype,
3754 tvb, offset, 1, ENC_BIG_ENDIAN);
3755 proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_char_num_generation,
3756 tvb, offset, 1, ENC_BIG_ENDIAN);
3757 proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_char_num_design,
3758 tvb, offset, 1, ENC_BIG_ENDIAN);
3759 offset++;
3760 length--;
3761 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_other_information, tvb, offset, 1, ENC_BIG_ENDIAN);
3762 offset++;
3763 length--;
3765 ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Hardware Configuration");
3766 proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_vta_type,
3767 tvb, offset, 1, ENC_BIG_ENDIAN);
3768 proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_design,
3769 tvb, offset, 1, ENC_BIG_ENDIAN);
3770 proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_subtype,
3771 tvb, offset, 1, ENC_BIG_ENDIAN);
3772 offset++;
3773 length--;
3775 if (opcode != 0x21) {
3776 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_hook_status, tvb, offset, 1, ENC_NA);
3777 offset++;
3778 length--;
3780 break;
3782 default:
3784 link = tvb_get_uint8(tvb, offset);
3785 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_other_information_1, tvb, offset, 1, ENC_BIG_ENDIAN);
3786 offset++;
3787 length--;
3789 if (link == 0x00) {
3790 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_hardware_version, tvb, offset, 1, ENC_BIG_ENDIAN);
3791 offset++;
3792 length--;
3794 ua3g_param_tree = proto_tree_add_subtree(ua3g_body_tree, tvb, offset, 1, ett_ua3g_param, NULL, "Hardware Configuration");
3795 proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_hard_config_chip,
3796 tvb, offset, 1, ENC_BIG_ENDIAN);
3797 proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_hard_config_flash,
3798 tvb, offset, 1, ENC_BIG_ENDIAN);
3799 proto_tree_add_item(ua3g_param_tree, hf_ua3g_unsolicited_msg_hardware_config_config_ram,
3800 tvb, offset, 1, ENC_BIG_ENDIAN);
3801 offset++;
3802 length--;
3803 } else {
3804 static int * const hardware_config[] = {
3805 &hf_ua3g_unsolicited_msg_hardware_config_export_full,
3806 &hf_ua3g_unsolicited_msg_hardware_config_ethernet_hardware,
3807 &hf_ua3g_unsolicited_msg_hardware_config_extended_edition,
3808 &hf_ua3g_unsolicited_msg_hardware_config_wideband,
3809 &hf_ua3g_unsolicited_msg_hardware_config_3g_set,
3810 &hf_ua3g_unsolicited_msg_hardware_config_8082_set,
3811 &hf_ua3g_unsolicited_msg_hardware_config_super_wideband,
3812 NULL
3815 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_other_information_2, tvb, offset, 1, ENC_BIG_ENDIAN);
3816 offset++;
3817 length--;
3819 proto_tree_add_bitmask(ua3g_body_tree, tvb, offset, hf_ua3g_unsolicited_msg_hardware_config, ett_ua3g_param, hardware_config, ENC_NA);
3820 offset++;
3821 length--;
3824 if (opcode != 0x21) {
3825 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_hook_status,
3826 tvb, offset, 1, ENC_NA);
3827 offset++;
3828 length--;
3830 if (length > 0) {
3831 if (link == 0x00) {
3832 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_firmware_datas_patch_version,
3833 tvb, offset, 2, ENC_BIG_ENDIAN);
3834 if (length > 2) {
3835 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_firmware_version_loader, tvb,
3836 offset+2, 2, ENC_BIG_ENDIAN);
3838 } else {
3839 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_datas_version, tvb, offset, 2, ENC_BIG_ENDIAN);
3840 offset += 2;
3841 length -= 2;
3843 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_firmware_version_bootloader, tvb, offset, 2, ENC_BIG_ENDIAN);
3844 offset += 2;
3845 length -= 2;
3847 if (length >= 1) {
3848 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_additional_vta_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3849 offset++;
3850 length--;
3853 if (length >= 1) {
3854 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_capability_info_bluetooth_supported, tvb, offset, 1, ENC_BIG_ENDIAN);
3855 offset++;
3856 length--;
3859 if (length >= 1) {
3860 static int * const capability_info[] = {
3861 &hf_ua3g_unsolicited_msg_capability_info_vpn,
3862 &hf_ua3g_unsolicited_msg_capability_info_ipsec,
3863 &hf_ua3g_unsolicited_msg_capability_info_dtls,
3864 NULL
3866 proto_tree_add_bitmask(ua3g_body_tree, tvb, offset, hf_ua3g_unsolicited_msg_capability_info_vpn_encryption_status, ett_ua3g_param, capability_info, ENC_NA);
3867 offset++;
3868 length--;
3871 if (length >= 1) {
3872 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_capability_info_wlan_status, tvb, offset, 1, ENC_BIG_ENDIAN);
3873 offset++;
3874 length--;
3877 while(length > 0) {
3878 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_capability_info_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
3879 offset++;
3880 length--;
3885 break;
3888 break;
3890 case 0x02: /* Illegal Command Received */
3892 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_opcode_of_bad_command, tvb, offset, 1, ENC_BIG_ENDIAN);
3894 if (length > 1) {
3895 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_next_byte_of_bad_command, tvb, offset+1, length-1, ENC_NA);
3897 break;
3899 case 0x05: /* Subdevice Down */
3901 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_subdevice_address, tvb, offset, 1, ENC_BIG_ENDIAN);
3902 break;
3904 case 0x06: /* Segment Failure */
3906 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_segment_failure_t, tvb, offset, 1, ENC_NA);
3907 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_segment_failure_num, tvb, offset, 1, ENC_NA);
3908 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_segment_failure_s, tvb, offset, 1, ENC_NA);
3909 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_segment_failure_l, tvb, offset, 1, ENC_NA);
3910 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_opcode_bad_segment, tvb, offset+1, 1, ENC_BIG_ENDIAN);
3911 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_next_byte_of_bad_segment, tvb, offset+2, 1, ENC_BIG_ENDIAN);
3912 break;
3914 case 0x07: /* UA Device Event */
3916 proto_tree_add_item(ua3g_body_tree, hf_ua3g_unsolicited_msg_device_event, tvb, offset, 1, ENC_BIG_ENDIAN);
3917 break;
3919 default:
3921 break;
3927 /*-----------------------------------------------------------------------------
3928 NON-DIGIT KEY PUSHED - 20h (MESSAGE FROM THE TERMINAL)
3929 DIGIT KEY RELEASED - 26h (MESSAGE FROM THE TERMINAL)
3930 KEY RELEASED - 2Ah (MESSAGE FROM THE TERMINAL)
3931 TM KEY PUSHED - 2Dh (MESSAGE FROM THE TERMINAL)
3932 ---------------------------------------------------------------------------*/
3933 static void
3934 decode_key_number(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
3935 unsigned offset, unsigned length)
3937 #if 0
3938 proto_tree *ua3g_body_tree;
3939 static const value_string str_first_parameter[] = {
3940 {0x01, "Production Test Command"},
3941 {0x06, "Reserved For Compatibility"},
3942 {0x3B, "Volume"},
3943 {0x42, "Subdevice Address"},
3944 {0, NULL}
3946 #endif
3948 if (!tree)
3949 return;
3951 if (length > 0) {
3952 proto_tree_add_uint_format_value(tree, hf_ua3g_key_number, tvb, offset, 1,
3953 tvb_get_uint8(tvb, offset), "Row %d, Column %d",
3954 (tvb_get_uint8(tvb, offset) & 0xF0), (tvb_get_uint8(tvb, offset) & 0x0F));
3959 /*-----------------------------------------------------------------------------
3960 I'M HERE - 22h - Only for UA NOE (MESSAGE FROM THE TERMINAL)
3961 ---------------------------------------------------------------------------*/
3962 static void
3963 decode_i_m_here(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_, unsigned offset)
3965 proto_tree_add_item(tree, hf_ua3g_i_m_here_id_code, tvb, offset, 1, ENC_BIG_ENDIAN);
3969 /*-----------------------------------------------------------------------------
3970 RESPONSE STATUS INQUIRY - 23h (MESSAGE FROM THE TERMINAL)
3971 SPECIAL KEY STATUS - 29h (MESSAGE FROM THE TERMINAL)
3972 ---------------------------------------------------------------------------*/
3973 static const true_false_string tfs_special_key_parameters = { "Not Received Default In Effect", "Downloaded Values In Effect" };
3974 static const true_false_string tfs_hookswitch_status = {"On Hook", "Off Hook"};
3975 static const true_false_string tfs_released_pressed = { "Released", "Pressed" };
3977 static void
3978 decode_special_key(proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo _U_,
3979 unsigned offset, uint8_t opcode)
3981 static int * const special_keys[] = {
3982 &hf_ua3g_special_key_shift,
3983 &hf_ua3g_special_key_ctrl,
3984 &hf_ua3g_special_key_alt,
3985 &hf_ua3g_special_key_cmd,
3986 &hf_ua3g_special_key_shift_prime,
3987 &hf_ua3g_special_key_ctrl_prime,
3988 &hf_ua3g_special_key_alt_prime,
3989 &hf_ua3g_special_key_cmd_prime,
3990 NULL
3993 if (opcode == 0x23) {
3994 proto_tree_add_item(tree, hf_ua3g_special_key_param_dtmf, tvb, offset, 1, ENC_NA);
3995 proto_tree_add_item(tree, hf_ua3g_special_key_hookswitch_status, tvb, offset, 1, ENC_NA);
3996 offset++;
3999 proto_tree_add_bitmask_list(tree, tvb, offset, 1, special_keys, ENC_NA);
4003 /*-----------------------------------------------------------------------------
4004 SUBDEVICE STATE ENQUIRY - 24h (MESSAGE FROM THE TERMINAL)
4005 ---------------------------------------------------------------------------*/
4006 static void
4007 decode_subdevice_state(proto_tree *tree, tvbuff_t *tvb,
4008 packet_info *pinfo _U_, unsigned offset)
4010 uint8_t info;
4011 int i;
4013 for (i = 0; i <= 7; i++) {
4014 info = tvb_get_uint8(tvb, offset);
4015 proto_tree_add_uint_format(tree, hf_ua3g_subdevice_state, tvb, offset, 1,
4016 info & 0x0F, "Subdevice %d State: %d",
4017 i, info & 0x0F);
4018 i++;
4019 proto_tree_add_uint_format(tree, hf_ua3g_subdevice_state, tvb, offset, 1,
4020 (info & 0xF0) >> 4, "Subdevice %d State: %d",
4021 i, (info & 0xF0) >> 4);
4022 offset++;
4027 /*-----------------------------------------------------------------------------
4028 UA3G DISSECTOR
4029 ---------------------------------------------------------------------------*/
4030 static int
4031 dissect_ua3g(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
4033 int offset = 0;
4034 proto_item *ua3g_item;
4035 proto_tree *ua3g_tree, *ua3g_body_tree;
4036 int length;
4037 uint8_t opcode;
4038 const char* opcode_str;
4039 e_ua_direction *message_direction;
4041 /* Reject the packet if data is NULL */
4042 if (data == NULL)
4043 return 0;
4044 message_direction = (e_ua_direction *)data;
4046 ua3g_item = proto_tree_add_item(tree, proto_ua3g, tvb, 0, -1, ENC_NA);
4047 ua3g_tree = proto_item_add_subtree(ua3g_item, ett_ua3g);
4049 /* Length of the UA Message */
4050 length = tvb_get_letohs(tvb, offset);
4052 /* add text to the frame "INFO" column */
4053 col_append_str(pinfo->cinfo, COL_INFO, " - UA3G Message:");
4055 proto_tree_add_uint(ua3g_tree, hf_ua3g_length, tvb, offset, 2, length);
4056 offset += 2;
4058 /* Opcode of the UA Message */
4059 opcode = tvb_get_uint8(tvb, offset);
4060 if (opcode != 0x9f)
4061 opcode = (opcode & 0x7f);
4063 /* Useful for a research in wireshark */
4064 if (*message_direction == SYS_TO_TERM) {
4065 proto_tree_add_uint(ua3g_tree, hf_ua3g_opcode_sys, tvb, offset, 1, opcode);
4066 opcode_str = val_to_str_ext_const(opcode, &opcodes_vals_sys_ext, "Unknown");
4067 } else {
4068 proto_tree_add_uint(ua3g_tree, hf_ua3g_opcode_term, tvb, offset, 1, opcode);
4069 opcode_str = val_to_str_ext_const(opcode, &opcodes_vals_term_ext, "Unknown");
4072 offset++;
4073 length--;
4075 /* add text to the frame "INFO" column */
4076 col_append_fstr(pinfo->cinfo, COL_INFO, " %s", opcode_str);
4078 proto_item_append_text(ua3g_item, ", %s", opcode_str);
4080 ua3g_body_tree = proto_tree_add_subtree(ua3g_tree, tvb, offset, length, ett_ua3g_body, NULL, "UA3G Body");
4082 if (*message_direction == SYS_TO_TERM) {
4083 switch (opcode) {
4084 case SC_PRODUCTION_TEST: /* 0x01 */
4086 decode_with_one_parameter(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_opcode_production_test);
4087 break;
4089 case SC_SUBDEVICE_RESET: /* 0x06 */
4091 decode_with_one_parameter(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_opcode_subservice_reset);
4092 break;
4094 case SC_ARE_YOU_THERE: /* 0x2B */
4096 decode_with_one_parameter(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_opcode_are_you_there);
4097 break;
4099 case SC_SET_SPEAKER_VOL: /* 0x3B */
4101 decode_with_one_parameter(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_opcode_set_speaker_vol);
4102 break;
4104 case SC_TRACE_ON: /* 0x42 */
4106 decode_with_one_parameter(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_opcode_trace_on);
4107 break;
4109 case SC_SUBDEVICE_ESCAPE: /* 0x02 */
4111 decode_subdevice_escape(ua3g_body_tree, tvb, pinfo, offset, length);
4112 break;
4114 case SC_SOFT_RESET: /* 0x03 */
4116 decode_software_reset(ua3g_body_tree, tvb, pinfo, offset, length);
4117 break;
4119 case SC_IP_PHONE_WARMSTART: /* 0x04 */
4121 decode_ip_phone_warmstart(ua3g_body_tree, tvb, pinfo, offset, length);
4122 break;
4124 case SC_SUPER_MSG: /* 0x0B */
4125 case SC_SUPER_MSG_2: /* 0x17 */
4127 decode_super_msg(ua3g_body_tree, tvb, pinfo, offset, length, opcode);
4128 break;
4130 case SC_SEGMENT_MSG: /* 0x0C */
4132 decode_segment_msg(ua3g_body_tree, tvb, pinfo, offset, length);
4133 break;
4135 case SC_IP_DEVICE_ROUTING: /* 0x13 */
4137 decode_ip_device_routing(ua3g_body_tree, tvb, pinfo, offset, length);
4138 break;
4140 case SC_DEBUG_IN_LINE: /* 0x18 */
4142 decode_debug_in_line(ua3g_body_tree, tvb, pinfo, offset, length);
4143 break;
4145 case SC_LED_COMMAND: /* 0x21 */
4147 decode_led_command(ua3g_body_tree, tvb, pinfo, offset);
4148 break;
4150 case SC_LCD_LINE_1_CMD: /* 0x27 */
4151 case SC_LCD_LINE_2_CMD: /* 0x28 */
4153 decode_lcd_line_cmd(ua3g_body_tree, tvb, pinfo, offset, length);
4154 break;
4156 case SC_MAIN_VOICE_MODE: /* 0x29 */
4158 decode_main_voice_mode(ua3g_body_tree, tvb, pinfo, offset, length);
4159 break;
4161 case SC_SUBDEVICE_METASTATE: /* 0x2C */
4163 decode_subdevice_metastate(ua3g_body_tree, tvb, pinfo, offset);
4164 break;
4166 case SC_DWL_DTMF_CLCK_FORMAT: /* 0x30 */
4168 decode_dwl_dtmf_clck_format(ua3g_body_tree, tvb, pinfo, offset, length);
4169 break;
4171 case SC_SET_CLCK: /* 0x31 */
4173 decode_set_clck(ua3g_body_tree, tvb, pinfo, offset, length);
4174 break;
4176 case SC_VOICE_CHANNEL: /* 0x32 */
4178 decode_voice_channel(ua3g_body_tree, tvb, pinfo, offset, length);
4179 break;
4181 case SC_EXTERNAL_RINGING: /* 0x33 */
4183 decode_external_ringing(ua3g_body_tree, tvb, pinfo, offset);
4184 break;
4186 case SC_LCD_CURSOR: /* 0x35 */
4188 decode_lcd_cursor(ua3g_body_tree, tvb, pinfo, offset);
4189 break;
4191 case SC_DWL_SPECIAL_CHAR: /* 0x36 */
4193 decode_dwl_special_char(ua3g_body_tree, tvb, pinfo, offset, length);
4194 break;
4196 case SC_SET_CLCK_TIMER_POS: /* 0x38 */
4198 decode_set_clck_timer_pos(ua3g_body_tree, tvb, pinfo, offset);
4199 break;
4201 case SC_SET_LCD_CONTRAST: /* 0x39 */
4203 decode_set_lcd_contrast(ua3g_body_tree, tvb, pinfo, offset);
4204 break;
4206 case SC_BEEP: /* 0x3C */
4208 decode_beep(ua3g_body_tree, tvb, pinfo, offset, length);
4209 break;
4211 case SC_SIDETONE: /* 0x3D */
4213 decode_sidetone(ua3g_body_tree, tvb, pinfo, offset);
4214 break;
4216 case SC_RINGING_CADENCE: /* 0x3E */
4218 decode_ringing_cadence(ua3g_body_tree, tvb, pinfo, offset, length);
4219 break;
4221 case SC_MUTE: /* 0x3F */
4223 decode_mute(ua3g_body_tree, tvb, pinfo, offset);
4224 break;
4226 case SC_FEEDBACK: /* 0x40 */
4228 decode_feedback(ua3g_body_tree, tvb, pinfo, offset, length);
4229 break;
4231 case SC_READ_PERIPHERAL: /* 0x44 */
4232 case SC_WRITE_PERIPHERAL: /* 0x45 */
4234 decode_r_w_peripheral(ua3g_body_tree, tvb, pinfo, offset, length);
4235 break;
4237 case SC_ICON_CMD: /* 0x47 */
4239 decode_icon_cmd(ua3g_body_tree, tvb, pinfo, offset);
4240 break;
4242 case SC_AUDIO_CONFIG: /* 0x49 */
4244 decode_audio_config(ua3g_body_tree, tvb, pinfo, offset, length);
4245 break;
4247 case SC_AUDIO_PADDED_PATH: /* 0x4A */
4249 decode_audio_padded_path(ua3g_body_tree, tvb, pinfo, offset);
4250 break;
4252 case SC_KEY_RELEASE: /* 0x41 */
4254 decode_on_off_level(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_command_key_release);
4255 break;
4257 case SC_AMPLIFIED_HANDSET: /* 0x48 */
4259 decode_on_off_level(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_command_amplified_handset);
4260 break;
4262 case SC_LOUDSPEAKER: /* 0x4D */
4264 decode_on_off_level(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_command_loudspeaker);
4265 break;
4267 case SC_ANNOUNCE: /* 0x4E */
4269 decode_on_off_level(ua3g_body_tree, tvb, pinfo, offset, length, hf_ua3g_command_announce);
4270 break;
4272 case SC_RING: /* 0x4F */
4274 decode_ring(ua3g_body_tree, tvb, pinfo, offset);
4275 break;
4277 case SC_UA_DWL_PROTOCOL: /* 0x50 */
4279 decode_ua_dwl_protocol(ua3g_body_tree, tvb, pinfo, offset, length);
4280 break;
4282 /* Case for UA3G message with only opcode (No body) */
4283 case SC_NOP: /* 0x00 */
4284 case SC_HE_ROUTING: /* 0x05 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4285 case SC_LOOPBACK_ON: /* 0x07 */
4286 case SC_LOOPBACK_OFF: /* 0x08 */
4287 case SC_VIDEO_ROUTING: /* 0x09 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4288 case SC_REMOTE_UA_ROUTING: /* 0x0D NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4289 case SC_VERY_REMOTE_UA_ROUTING: /* 0x0E NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4290 case SC_OSI_ROUTING: /* 0x0F NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4291 case SC_ABC_A_ROUTING: /* 0x11 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4292 case SC_IBS_ROUTING: /* 0x12 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4293 case SC_M_REFLEX_HUB_ROUTING: /* 0x14 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4294 case SC_START_BUZZER: /* 0x22 */
4295 case SC_STOP_BUZZER: /* 0x23 */
4296 case SC_ENABLE_DTMF: /* 0x24 */
4297 case SC_DISABLE_DTMF: /* 0x25 */
4298 case SC_CLEAR_LCD_DISP: /* 0x26 */
4299 case SC_VERSION_INQUIRY: /* 0x2A */
4300 case SC_VTA_STATUS_INQUIRY: /* 0x2D */
4301 case SC_SUBDEVICE_STATE: /* 0x2E */
4302 case SC_AUDIO_IDLE: /* 0x3A */
4303 case SC_TRACE_OFF: /* 0x43 */
4304 case SC_ALL_ICONS_OFF: /* 0x46 */
4305 case SC_RELEASE_RADIO_LINK: /* 0x4B */
4306 case SC_DECT_HANDOVER: /* 0x4C NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4307 default:
4309 break;
4313 if (*message_direction == TERM_TO_SYS) {
4314 switch (opcode) {
4315 case CS_DIGIT_DIALED: /* 0x03 */
4317 decode_digit_dialed(ua3g_body_tree, tvb, pinfo, offset);
4318 break;
4320 case CS_SUBDEVICE_MSG: /* 0x04 */
4322 decode_subdevice_msg(ua3g_body_tree, tvb, pinfo, offset, length);
4323 break;
4325 case CS_SUPER_MSG: /* 0x0B */
4326 case CS_SUPER_MSG_2: /* 0x17 */
4328 decode_super_msg(ua3g_body_tree, tvb, pinfo, offset, length, opcode);
4329 break;
4331 case CS_SEGMENT_MSG: /* 0x0C */
4333 decode_segment_msg(ua3g_body_tree, tvb, pinfo, offset, length);
4334 break;
4336 case CS_IP_DEVICE_ROUTING: /* 0x13 */
4338 decode_cs_ip_device_routing(ua3g_body_tree, tvb, pinfo, offset, length);
4339 break;
4341 case CS_DEBUG_IN_LINE: /* 0x18 */
4343 decode_debug_in_line(ua3g_body_tree, tvb, pinfo, offset, length);
4344 break;
4346 case CS_NON_DIGIT_KEY_PUSHED: /* 0x20 Key translation not sure */
4347 case CS_DIGIT_KEY_RELEASED: /* 0x26 Key translation not sure */
4348 case CS_KEY_RELEASED: /* 0x2A */
4349 case CS_TM_KEY_PUSHED: /* 0x2D Key translation not sure */
4351 decode_key_number(ua3g_body_tree, tvb, pinfo, offset, length);
4352 break;
4354 case CS_UNSOLICITED_MSG: /* 0x9F (0x1F) */
4355 case CS_VERSION_RESPONSE: /* 0x21 */
4357 decode_unsolicited_msg(ua3g_body_tree, tvb, pinfo, offset, length, opcode);
4358 break;
4360 case CS_I_M_HERE: /* 0x22 */
4362 decode_i_m_here(ua3g_body_tree, tvb, pinfo, offset);
4363 break;
4365 case CS_RSP_STATUS_INQUIRY: /* 0x23 */
4366 case CS_SPECIAL_KEY_STATUS: /* 0x29 */
4368 decode_special_key(ua3g_body_tree, tvb, pinfo, offset, opcode);
4369 break;
4371 case CS_SUBDEVICE_STATE: /* 0x24 */
4373 decode_subdevice_state(ua3g_body_tree, tvb, pinfo, offset);
4374 break;
4376 case CS_PERIPHERAL_CONTENT: /* 0x2B */
4378 decode_r_w_peripheral(ua3g_body_tree, tvb, pinfo, offset, length);
4379 break;
4381 case CS_UA_DWL_PROTOCOL: /* 0x50 */
4383 decode_ua_dwl_protocol(ua3g_body_tree, tvb, pinfo, offset, length);
4384 break;
4386 /* Case for UA3G message with only opcode (No body) */
4387 case CS_NOP_ACK: /* 0x00 */
4388 case CS_HANDSET_OFFHOOK: /* 0x01 */
4389 case CS_HANDSET_ONHOOK: /* 0x02 */
4390 case CS_HE_ROUTING: /* 0x05 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4391 case CS_LOOPBACK_ON: /* 0x06 */
4392 case CS_LOOPBACK_OFF: /* 0x07 */
4393 case CS_VIDEO_ROUTING: /* 0x09 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4394 case CS_WARMSTART_ACK: /* 0x0A */
4395 case CS_REMOTE_UA_ROUTING: /* 0x0D NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4396 case CS_VERY_REMOTE_UA_R: /* 0x0E NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4397 case CS_OSI_ROUTING: /* 0x0F NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4398 case CS_ABC_A_ROUTING: /* 0x11 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4399 case CS_IBS_ROUTING: /* 0x12 NOT DECODED - No description in 3AK 29000 0556 DSZZA */
4400 case CS_TRACE_ON_ACK: /* 0x27 */
4401 case CS_TRACE_OFF_ACK: /* 0x28 */
4402 default:
4404 break;
4409 return tvb_captured_length(tvb);
4413 /*-----------------------------------------------------------------------------
4414 DISSECTORS REGISTRATION FUNCTIONS
4415 ---------------------------------------------------------------------------*/
4416 void
4417 proto_register_ua3g(void)
4419 static hf_register_info hf[] =
4421 { &hf_ua3g_length,
4422 { "Length", "ua3g.length",
4423 FT_UINT16, BASE_DEC, NULL, 0x00,
4424 NULL, HFILL }
4426 { &hf_ua3g_opcode_sys,
4427 { "Opcode", "ua3g.opcode",
4428 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &opcodes_vals_sys_ext, 0x00,
4429 NULL, HFILL }
4431 { &hf_ua3g_opcode_term,
4432 { "Opcode", "ua3g.opcode",
4433 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &opcodes_vals_term_ext, 0x00,
4434 NULL, HFILL }
4436 { &hf_ua3g_opcode_production_test,
4437 { "Production Test Command", "ua3g.production_test",
4438 FT_UINT8, BASE_DEC, NULL, 0x00,
4439 NULL, HFILL }
4441 { &hf_ua3g_opcode_subservice_reset,
4442 { "Reserved For Compatibility", "ua3g.subservice_reset",
4443 FT_UINT8, BASE_DEC, NULL, 0x00,
4444 NULL, HFILL }
4446 { &hf_ua3g_opcode_are_you_there,
4447 { "Temporization", "ua3g.are_you_there",
4448 FT_UINT8, BASE_DEC, NULL, 0x00,
4449 NULL, HFILL }
4451 { &hf_ua3g_opcode_set_speaker_vol,
4452 { "Volume", "ua3g.set_speaker_vol",
4453 FT_UINT8, BASE_DEC, NULL, 0x00,
4454 NULL, HFILL }
4456 { &hf_ua3g_opcode_trace_on,
4457 { "Subdevice Address", "ua3g.trace_on",
4458 FT_UINT8, BASE_DEC, NULL, 0x00,
4459 NULL, HFILL }
4461 { &hf_ua3g_ip,
4462 { "IP Device Routing", "ua3g.ip",
4463 FT_UINT8, BASE_HEX, VALS(str_command_ip_device_routing), 0x00,
4464 NULL, HFILL }
4466 { &hf_ua3g_ip_cs,
4467 { "IP Device Routing", "ua3g.ip.cs",
4468 FT_UINT8, BASE_HEX, VALS(str_command_cs_ip_device_routing), 0x00,
4469 NULL, HFILL }
4471 { &hf_ua3g_command_led,
4472 { "Led Command", "ua3g.command.led",
4473 FT_UINT8, BASE_HEX, VALS(str_command_led), 0x00,
4474 NULL, HFILL }
4476 { &hf_ua3g_command_lcd_line,
4477 { "LCD Line Command", "ua3g.command.lcd_line",
4478 FT_UINT8, BASE_HEX, VALS(str_command_lcd_line), 0x00,
4479 NULL, HFILL }
4481 { &hf_ua3g_main_voice_mode,
4482 { "Voice Mode", "ua3g.command.main_voice_mode",
4483 FT_UINT8, BASE_HEX, VALS(str_main_voice_mode), 0x00,
4484 NULL, HFILL }
4486 { &hf_ua3g_command_set_clck,
4487 { "Set Clock", "ua3g.command.set_clck",
4488 FT_UINT8, BASE_HEX, VALS(str_command_set_clck), 0x00,
4489 NULL, HFILL }
4491 { &hf_ua3g_external_ringing_command,
4492 { "External Ringing Command", "ua3g.command.external_ringing",
4493 FT_UINT8, BASE_HEX, VALS(str_ext_ring_cmd), 0x00,
4494 NULL, HFILL }
4496 { &hf_ua3g_lcd_cursor,
4497 { "Cursor", "ua3g.lcd_cursor",
4498 FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x02,
4499 NULL, HFILL }
4501 { &hf_ua3g_command_beep,
4502 { "Beep", "ua3g.command.beep",
4503 FT_UINT8, BASE_HEX, VALS(str_command_beep), 0x00,
4504 NULL, HFILL }
4506 { &hf_ua3g_command_sidetone,
4507 { "Sidetone", "ua3g.command.sidetone",
4508 FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4509 NULL, HFILL }
4511 { &hf_ua3g_command_mute,
4512 { "Microphone", "ua3g.command.mute",
4513 FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
4514 NULL, HFILL }
4516 { &hf_ua3g_command_feedback,
4517 { "Feedback", "ua3g.command.feedback",
4518 FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4519 NULL, HFILL }
4521 { &hf_ua3g_command_audio_config,
4522 { "Audio Config", "ua3g.command.audio_config",
4523 FT_UINT8, BASE_HEX, VALS(str_command_audio_config), 0x00,
4524 NULL, HFILL }
4526 { &hf_ua3g_command_key_release,
4527 { "Key Release", "ua3g.command.key_release",
4528 FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4529 NULL, HFILL }
4531 { &hf_ua3g_command_amplified_handset,
4532 { "Amplified Handset (Boost)", "ua3g.command.amplified_handset",
4533 FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4534 NULL, HFILL }
4536 { &hf_ua3g_command_loudspeaker,
4537 { "Loudspeaker", "ua3g.command.loudspeaker",
4538 FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4539 NULL, HFILL }
4541 { &hf_ua3g_command_announce,
4542 { "Announce", "ua3g.command.announce",
4543 FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4544 NULL, HFILL }
4546 { &hf_ua3g_command_ring,
4547 { "Ring", "ua3g.command.ring",
4548 FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x00,
4549 NULL, HFILL }
4551 { &hf_ua3g_command_ua_dwl_protocol,
4552 { "UA Download Protocol", "ua3g.command.ua_dwl_protocol",
4553 FT_UINT8, BASE_HEX, VALS(str_command_ua_dwl_protocol), 0x00,
4554 NULL, HFILL }
4556 { &hf_ua3g_command_unsolicited_msg,
4557 { "Unsolicited Message", "ua3g.command.unsolicited_msg",
4558 FT_UINT8, BASE_HEX, VALS(str_command_unsolicited_msg), 0x00,
4559 NULL, HFILL }
4561 { &hf_ua3g_ip_device_routing_stop_rtp_parameter,
4562 { "Parameter", "ua3g.ip.stop_rtp.parameter",
4563 FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_stop_rtp_vals), 0x00,
4564 NULL, HFILL }
4566 { &hf_ua3g_ip_device_routing_stop_rtp_parameter_length,
4567 { "Length", "ua3g.ip.stop_rtp.parameter.length",
4568 FT_UINT8, BASE_DEC, NULL, 0x00,
4569 NULL, HFILL }
4571 { &hf_ua3g_ip_device_routing_stop_rtp_parameter_value_num,
4572 { "Value", "ua3g.ip.stop_rtp.parameter.value.num",
4573 FT_UINT64, BASE_HEX, NULL, 0x00,
4574 NULL, HFILL }
4576 { &hf_ua3g_ip_device_routing_stop_rtp_parameter_value_bytes,
4577 { "Value", "ua3g.ip.stop_rtp.parameter.value.bytes",
4578 FT_BYTES, BASE_NONE, NULL, 0x00,
4579 NULL, HFILL }
4581 /* Generated from convert_proto_tree_add_text.pl */
4582 { &hf_ua3g_subdevice_address, { "Subdevice Address", "ua3g.subdevice.address", FT_UINT8, BASE_DEC, NULL, 0x0F, NULL, HFILL }},
4583 { &hf_ua3g_subdevice_opcode, { "Subdevice Opcode", "ua3g.subdevice.opcode", FT_UINT8, BASE_HEX, NULL, 0x7F, NULL, HFILL }},
4584 { &hf_ua3g_subdevice_parameter_bytes, { "Parameter Bytes", "ua3g.subdevice.parameter_bytes", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4585 { &hf_ua3g_software_reset, { "Software Reset", "ua3g.software_reset", FT_UINT8, BASE_DEC, VALS(software_reset_verswitch_vals), 0x0, NULL, HFILL }},
4586 { &hf_ua3g_ip_phone_warmstart, { "IP Phone Warmstart", "ua3g.ip_phone_warmstart", FT_UINT8, BASE_DEC, VALS(str_command_ip_phone_warmstart), 0x0, NULL, HFILL }},
4587 { &hf_ua3g_super_msg_length, { "Length", "ua3g.super_msg.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4588 { &hf_ua3g_super_msg_data, { "Data", "ua3g.super_msg.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4589 { &hf_ua3g_segment_msg_num_remaining, { "Number Of Remaining Segments", "ua3g.segment_msg.num_remaining", FT_UINT8, BASE_DEC, NULL, 0x7F, NULL, HFILL }},
4590 { &hf_ua3g_segment_msg_length, { "Length", "ua3g.segment_msg.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4591 { &hf_ua3g_segment_message_data, { "Segment Message Data", "ua3g.segment_message.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4592 { &hf_ua3g_ip_device_routing_reset_parameter, { "Parameter", "ua3g.ip.reset.parameter", FT_UINT8, BASE_DEC, VALS(ip_device_routing_cmd_reset_vals), 0x0, NULL, HFILL }},
4593 { &hf_ua3g_ip_device_routing_reset_parameter_length, { "Length", "ua3g.ip.reset.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4594 { &hf_ua3g_ip_device_routing_start_rtp_direction, { "Direction", "ua3g.ip.start_rtp.direction", FT_UINT8, BASE_DEC, VALS(start_rtp_str_direction), 0x0, NULL, HFILL }},
4595 { &hf_ua3g_ip_device_routing_start_rtp_parameter, { "Parameter", "ua3g.ip.start_rtp.parameter", FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ip_device_routing_cmd_start_rtp_vals_ext, 0x0, NULL, HFILL }},
4596 { &hf_ua3g_ip_device_routing_start_rtp_parameter_length, { "Length", "ua3g.ip.start_rtp.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4597 { &hf_ua3g_ip_device_routing_redirect_parameter, { "Parameter", "ua3g.ip.redirect.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_redirect_vals), 0x0, NULL, HFILL }},
4598 { &hf_ua3g_ip_device_routing_redirect_parameter_length, { "Length", "ua3g.ip.redirect.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4599 { &hf_ua3g_ip_device_routing_def_tones_num_entries, { "Number Of Entries", "ua3g.ip.def_tones.num_entries", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4600 { &hf_ua3g_ip_device_routing_def_tones_frequency_1, { "Frequency 1 (Hz)", "ua3g.ip.def_tones.frequency_1", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4601 { &hf_ua3g_ip_device_routing_def_tones_level_1, { "Level 1 (dB)", "ua3g.ip.def_tones.level_1", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4602 { &hf_ua3g_ip_device_routing_def_tones_frequency_2, { "Frequency 2 (Hz)", "ua3g.ip.def_tones.frequency_2", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4603 { &hf_ua3g_ip_device_routing_def_tones_level_2, { "Level 2 (dB)", "ua3g.ip.def_tones.level_2", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4604 { &hf_ua3g_ip_device_routing_start_tone_direction, { "Direction", "ua3g.ip.start_tone.direction", FT_UINT8, BASE_DEC, VALS(ip_device_routing_tone_direction_vals), 0xC0, NULL, HFILL }},
4605 { &hf_ua3g_ip_device_routing_start_tone_num_entries, { "Number of entries", "ua3g.ip.start_tone.num_entries", FT_UINT8, BASE_DEC, NULL, 0x3f, NULL, HFILL }},
4606 { &hf_ua3g_ip_device_routing_start_tone_identification, { "Identification", "ua3g.ip.start_tone.identification", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4607 { &hf_ua3g_ip_device_routing_start_tone_duration, { "Duration (ms)", "ua3g.ip.start_tone.duration", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4608 { &hf_ua3g_ip_device_routing_listen_rtp_parameter, { "Parameter", "ua3g.ip.listen_rtp.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_listen_rtp_vals), 0x0, NULL, HFILL }},
4609 { &hf_ua3g_ip_device_routing_listen_rtp_parameter_length, { "Length", "ua3g.ip.listen_rtp.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4610 { &hf_ua3g_ip_device_routing_get_param_req_parameter, { "Parameter", "ua3g.ip.get_param_req.parameter", FT_UINT8, BASE_DEC, VALS(ip_device_routing_cmd_get_param_req_vals), 0x0, NULL, HFILL }},
4611 { &hf_ua3g_ip_device_routing_set_param_req_parameter, { "Parameter", "ua3g.ip.set_param_req.parameter", FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ip_device_routing_cmd_set_param_req_vals_ext, 0x0, NULL, HFILL }},
4612 { &hf_ua3g_ip_device_routing_set_param_req_parameter_length, { "Length", "ua3g.ip.set_param_req.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4613 { &hf_ua3g_ip_device_routing_digit_value, { "Digit Value", "ua3g.ip.digit_value", FT_UINT8, BASE_DEC|BASE_EXT_STRING, &str_digit_ext, 0x0, NULL, HFILL }},
4614 { &hf_ua3g_ip_device_routing_pause_restart_rtp_parameter, { "Parameter", "ua3g.ip.pause_restart_rtp.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_pause_restart_vals), 0x0, NULL, HFILL }},
4615 { &hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_length, { "Length", "ua3g.ip.pause_restart_rtp.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4616 { &hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_value, { "Value", "ua3g.ip.pause_restart_rtp.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4617 { &hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter, { "Parameter", "ua3g.ip.start_stop_record_rtp.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_record_rtp_vals), 0x0, NULL, HFILL }},
4618 { &hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_length, { "Length", "ua3g.ip.start_stop_record_rtp.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4619 { &hf_ua3g_debug_in_line, { "Text String With Debug", "ua3g.debug_in_line", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4620 { &hf_ua3g_command_led_number, { "Led Number", "ua3g.command.led.number", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4621 { &hf_ua3g_lcd_line_cmd_lcd_options, { "LCD Options", "ua3g.command.lcd_line.lcd_options", FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL }},
4622 { &hf_ua3g_lcd_line_cmd_starting_column, { "Starting Column", "ua3g.command.lcd_line.starting_column", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4623 { &hf_ua3g_main_voice_mode_tune, { "Tune", "ua3g.main_voice_mode.tune", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4624 { &hf_ua3g_main_voice_mode_cadence, { "Cadence", "ua3g.main_voice_mode.cadence", FT_UINT8, BASE_DEC, VALS(str_cadence), 0x0, NULL, HFILL }},
4625 { &hf_ua3g_main_voice_mode_speaker_volume, { "Speaker Volume", "ua3g.main_voice_mode.speaker_volume", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4626 { &hf_ua3g_main_voice_mode_microphone_volume, { "Microphone Volume", "ua3g.main_voice_mode.microphone_volume", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4627 { &hf_ua3g_main_voice_mode_sending_level, { "Sending Level (dB)", "ua3g.main_voice_mode.sending_level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4628 { &hf_ua3g_main_voice_mode_handset_level, { "Receiving Level (dB)", "ua3g.main_voice_mode.handset_level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4629 { &hf_ua3g_main_voice_mode_headset_level, { "Receiving Level (dB)", "ua3g.main_voice_mode.headset_level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4630 { &hf_ua3g_main_voice_mode_handsfree_level, { "Sending Level (dB)", "ua3g.main_voice_mode.handsfree_level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4631 { &hf_ua3g_subdevice_metastate_subchannel_address, { "Subchannel Address", "ua3g.subdevice_metastate.subchannel_address", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4632 { &hf_ua3g_subdevice_metastate_new_metastate, { "New Metastate", "ua3g.subdevice_metastate.new_metastate", FT_UINT8, BASE_DEC, VALS(str_new_metastate), 0x0, NULL, HFILL }},
4633 { &hf_ua3g_dwl_dtmf_clck_format_minimum_on_time, { "Minimum 'ON' Time (ms)", "ua3g.dwl_dtmf_clck_format.minimum_on_time", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4634 { &hf_ua3g_dwl_dtmf_clck_format_inter_digit_pause_time, { "Inter-Digit Pause Time (ms)", "ua3g.dwl_dtmf_clck_format.inter_digit_pause_time", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4635 { &hf_ua3g_dwl_dtmf_clck_format_clock_time_format, { "Clock Time Format", "ua3g.dwl_dtmf_clck_format.clock_time_format", FT_UINT8, BASE_DEC, VALS(str_clock_format), 0x0, NULL, HFILL }},
4636 { &hf_ua3g_dwl_dtmf_clck_format_dtmf_country_adaptation, { "DTMF Country Adaptation", "ua3g.dwl_dtmf_clck_format.dtmf_country_adaptation", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4637 { &hf_ua3g_voice_channel_channel_mode, { "Channel Mode", "ua3g.voice_channel.channel_mode", FT_BOOLEAN, 8, TFS(&tfs_voice_channel_channel_mode), 0x01, NULL, HFILL }},
4638 { &hf_ua3g_voice_channel_codec, { "Codec", "ua3g.voice_channel.codec", FT_BOOLEAN, 8, TFS(&tfs_voice_channel_codec), 0x02, NULL, HFILL }},
4639 { &hf_ua3g_voice_channel_voice_channel, { "Voice Channel", "ua3g.voice_channel.voice_channel", FT_BOOLEAN, 8, TFS(&tfs_voice_channel_voice_channel), 0x04, NULL, HFILL }},
4640 { &hf_ua3g_voice_channel_main_voice, { "Main Voice", "ua3g.voice_channel.main_voice", FT_UINT8, BASE_DEC, VALS(str_voice_channel), 0x0, NULL, HFILL }},
4641 { &hf_ua3g_voice_channel_announce, { "Announce", "ua3g.voice_channel.announce", FT_UINT8, BASE_DEC, VALS(str_voice_channel), 0x0, NULL, HFILL }},
4642 { &hf_ua3g_voice_channel_b_general, { "B General", "ua3g.voice_channel.b_general", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4643 { &hf_ua3g_voice_channel_b_loud_speaker, { "B Loud Speaker", "ua3g.voice_channel.b_loud_speaker", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4644 { &hf_ua3g_voice_channel_b_ear_piece, { "B Ear Piece", "ua3g.voice_channel.b_ear_piece", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4645 { &hf_ua3g_voice_channel_b_microphones, { "B Microphones", "ua3g.voice_channel.b_microphones", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4646 { &hf_ua3g_lcd_cursor_line_number, { "Line Number", "ua3g.lcd_cursor.line_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4647 { &hf_ua3g_dwl_special_char_character_number, { "Character Number", "ua3g.dwl_special_char.character_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4648 { &hf_ua3g_dwl_special_char_byte, { "Byte", "ua3g.dwl_special_char.byte", FT_UINT8, BASE_DEC, NULL, 0xFF, NULL, HFILL }},
4649 { &hf_ua3g_set_clck_timer_pos_clock_line_number, { "Clock Line Number", "ua3g.set_clck_timer_pos.clock_line_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4650 { &hf_ua3g_set_clck_timer_pos_clock_column_number, { "Clock Column Number", "ua3g.set_clck_timer_pos.clock_column_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4651 { &hf_ua3g_set_clck_timer_pos_call_timer_line_number, { "Call Timer Line Number", "ua3g.set_clck_timer_pos.call_timer_line_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4652 { &hf_ua3g_set_clck_timer_pos_call_timer_column_number, { "Call Timer Column Number", "ua3g.set_clck_timer_pos.call_timer_column_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4653 { &hf_ua3g_set_lcd_contrast_driver_number, { "Driver Number", "ua3g.set_lcd_contrast.driver_number", FT_UINT8, BASE_DEC, VALS(str_driver_number), 0x0, NULL, HFILL }},
4654 { &hf_ua3g_set_lcd_contrast_contrast_value, { "Contrast Value", "ua3g.set_lcd_contrast.contrast_value", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4655 { &hf_ua3g_beep_destination, { "Destination", "ua3g.command.beep.destination", FT_UINT8, BASE_DEC, VALS(str_beep_start_destination), 0x0, NULL, HFILL }},
4656 { &hf_ua3g_beep_on_off, { "On / Off", "ua3g.command.beep.on_off", FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x80, NULL, HFILL }},
4657 { &hf_ua3g_beep_cadence, { "Cadence", "ua3g.command.beep.cadence", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4658 { &hf_ua3g_beep_beep_number, { "Beep Number", "ua3g.command.beep.beep_number", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4659 { &hf_ua3g_beep_number_of_notes, { "Number Of Notes", "ua3g.command.beep.number_of_notes", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4660 { &hf_ua3g_beep_terminator, { "Terminator", "ua3g.command.beep.terminator", FT_UINT8, BASE_DEC, VALS(str_beep_terminator), 0x0, NULL, HFILL }},
4661 { &hf_ua3g_sidetone_level, { "Level", "ua3g.command.sidetone.level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4662 { &hf_ua3g_ringing_cadence_cadence, { "Cadence", "ua3g.ringing_cadence.cadence", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4663 { &hf_ua3g_ringing_cadence_on_off, { "On / Off", "ua3g.ringing_cadence.on_off", FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x80, NULL, HFILL }},
4664 { &hf_ua3g_ringing_cadence_length, { "Length (ms)", "ua3g.ringing_cadence.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4665 { &hf_ua3g_feedback_level, { "Level (dB)", "ua3g.command.feedback.level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4666 { &hf_ua3g_feedback_duration, { "Duration", "ua3g.command.feedback.duration", FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0, NULL, HFILL }},
4667 { &hf_ua3g_r_w_peripheral_address, { "Address", "ua3g.r_w_peripheral.address", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4668 { &hf_ua3g_r_w_peripheral_content, { "Content", "ua3g.r_w_peripheral.content", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4669 { &hf_ua3g_icon_cmd_icon_number, { "Icon Number", "ua3g.icon_cmd.icon_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4670 { &hf_ua3g_icon_cmd_segment, { "Segment", "ua3g.icon_cmd.segment", FT_UINT16, BASE_DEC, VALS(str_icon_cmd_state), 0x0, NULL, HFILL }},
4671 { &hf_ua3g_audio_config_ignored, { "Ignored", "ua3g.command.audio_config.ignored", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4672 { &hf_ua3g_audio_config_law, { "Law", "ua3g.command.audio_config.law", FT_UINT8, BASE_DEC, VALS(str_audio_coding_law), 0x0, NULL, HFILL }},
4673 { &hf_ua3g_audio_config_volume_level, { "Volume Level", "ua3g.command.audio_config.volume_level", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4674 { &hf_ua3g_audio_config_handsfree_return, { "Return", "ua3g.command.audio_config.handsfree_return", FT_BOOLEAN, 8, TFS(&tfs_audio_config_handsfree_return), 0x01, NULL, HFILL }},
4675 { &hf_ua3g_audio_config_handsfree_handsfree, { "Handsfree", "ua3g.command.audio_config.handsfree", FT_BOOLEAN, 8, TFS(&tfs_audio_config_handsfree_handsfree), 0x02, NULL, HFILL }},
4676 { &hf_ua3g_audio_padded_path_emission_padded_level, { "Emission Padded Level", "ua3g.audio_padded_path.emission_padded_level", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4677 { &hf_ua3g_audio_padded_path_reception_padded_level, { "Reception Padded Level", "ua3g.audio_padded_path.reception_padded_level", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4678 { &hf_ua3g_on_off_level_level_on_loudspeaker, { "Level on Loudspeaker (dB)", "ua3g.on_off_level.level_on_loudspeaker", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4679 { &hf_ua3g_ring_melody, { "Melody", "ua3g.command.ring.melody", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4680 { &hf_ua3g_ring_cadence, { "Cadence", "ua3g.command.ring.cadence", FT_UINT8, BASE_DEC, VALS(str_cadence), 0x0, NULL, HFILL }},
4681 { &hf_ua3g_ring_speaker_level, { "Speaker level (dB)", "ua3g.command.ring.speaker_level", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4682 { &hf_ua3g_ring_beep_number, { "Beep number", "ua3g.command.ring.beep_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4683 { &hf_ua3g_ring_silent, { "Silent", "ua3g.command.ring.silent", FT_BOOLEAN, 8, TFS(&tfs_on_off), 0x80, NULL, HFILL }},
4684 { &hf_ua3g_ring_progressive, { "Progressive", "ua3g.command.ring.progressive", FT_UINT8, BASE_DEC, NULL, 0x03, NULL, HFILL }},
4685 { &hf_ua3g_ua_dwl_protocol_item_identifier, { "Item Identifier", "ua3g.ua_dwl_protocol.item_identifier", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4686 { &hf_ua3g_ua_dwl_protocol_cause, { "Cause", "ua3g.ua_dwl_protocol.cause", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4687 { &hf_ua3g_ua_dwl_protocol_force_mode, { "Force Mode", "ua3g.ua_dwl_protocol.force_mode", FT_UINT8, BASE_DEC, VALS(str_download_req_force_mode), 0x0, NULL, HFILL }},
4688 { &hf_ua3g_ua_dwl_protocol_item_version, { "Item Version", "ua3g.ua_dwl_protocol.item_version", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4689 { &hf_ua3g_ua_dwl_protocol_item_version_nc, { "Item Version", "ua3g.ua_dwl_protocol.item_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4690 { &hf_ua3g_ua_dwl_protocol_binary_length, { "Binary Length", "ua3g.ua_dwl_protocol.binary_length", FT_UINT24, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4691 { &hf_ua3g_ua_dwl_protocol_packet_number, { "Packet Number", "ua3g.ua_dwl_protocol.packet_number", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4692 { &hf_ua3g_ua_dwl_protocol_download_ack_status, { "Status", "ua3g.ua_dwl_protocol.download_ack_status", FT_UINT8, BASE_DEC|BASE_EXT_STRING, &str_download_ack_status_ext, 0x0, NULL, HFILL }},
4693 { &hf_ua3g_ua_dwl_protocol_packet_download_end_ack_ok_status, { "Status", "ua3g.ua_dwl_protocol_packet.download_end_ack_ok_status", FT_UINT8, BASE_DEC, VALS(str_download_end_ack_ok), 0x0, NULL, HFILL }},
4694 { &hf_ua3g_ua_dwl_protocol_checksum, { "Checksum", "ua3g.ua_dwl_protocol.checksum", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4695 { &hf_ua3g_ua_dwl_protocol_acknowledge, { "Acknowledge", "ua3g.ua_dwl_protocol.acknowledge", FT_UINT8, BASE_DEC, VALS(str_iso_checksum_ack_status), 0x0, NULL, HFILL }},
4696 { &hf_ua3g_digit_dialed_digit_value, { "Digit Value", "ua3g.digit_dialed.digit_value", FT_UINT8, BASE_DEC|BASE_EXT_STRING, &str_digit_ext, 0x0, NULL, HFILL }},
4697 { &hf_ua3g_subdevice_msg_subdev_type, { "Subdev Type", "ua3g.subdevice_msg.subdev_type", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4698 { &hf_ua3g_subdevice_msg_subdev_address, { "Subdev Address", "ua3g.subdevice_msg.subdev_address", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4699 { &hf_ua3g_subdevice_msg_subdevice_opcode, { "Subdevice Opcode", "ua3g.subdevice_msg.subdevice_opcode", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4700 { &hf_ua3g_subdevice_msg_parameter_bytes, { "Parameter Bytes", "ua3g.subdevice_msg.parameter_bytes", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4701 { &hf_ua3g_cs_ip_device_routing_cmd00_vta_type, { "VTA Type", "ua3g.ip.cs.cmd00.vta_type", FT_UINT8, BASE_HEX, VALS(str_vta_type), 0x0, NULL, HFILL }},
4702 { &hf_ua3g_cs_ip_device_routing_cmd00_characteristic_number, { "Characteristic Number", "ua3g.ip.cs.cmd00.characteristic_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4703 { &hf_ua3g_cs_ip_device_routing_cmd01_incident_0, { "Incident 0", "ua3g.ip.cs.cmd01.incident_0", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4704 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter, { "Parameter", "ua3g.ip.cs.cmd02.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_get_param_req_vals), 0x0, NULL, HFILL }},
4705 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_length, { "Length", "ua3g.ip.cs.cmd02.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4706 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter, { "Parameter", "ua3g.ip.cs.cmd03.parameter", FT_UINT8, BASE_HEX|BASE_EXT_STRING, &cs_ip_device_routing_03_parameter_id_vals_ext, 0x0, NULL, HFILL }},
4707 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_length, { "Length", "ua3g.ip.cs.cmd03.parameter.length", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4708 { &hf_ua3g_unsolicited_msg_device_type, { "Device Type", "ua3g.unsolicited_msg.device_type", FT_UINT8, BASE_DEC, VALS(str_device_type), 0x0, NULL, HFILL }},
4709 { &hf_ua3g_unsolicited_msg_self_test_result, { "Self-Test Result", "ua3g.unsolicited_msg.self_test_result", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4710 { &hf_ua3g_unsolicited_msg_vta_type, { "VTA Type", "ua3g.unsolicited_msg.vta_type", FT_UINT8, BASE_HEX, VALS(str_vta_type), 0x0, NULL, HFILL }},
4711 { &hf_ua3g_unsolicited_msg_other_information, { "Other Information", "ua3g.unsolicited_msg.other_information", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_other_info_2), 0x0, NULL, HFILL }},
4712 { &hf_ua3g_unsolicited_msg_other_information_1, { "Other Information 1", "ua3g.unsolicited_msg.other_information_1", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_other_info_1), 0x0, NULL, HFILL }},
4713 { &hf_ua3g_unsolicited_msg_hardware_version, { "Hardware Version", "ua3g.unsolicited_msg.hardware_version", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4714 { &hf_ua3g_unsolicited_msg_other_information_2, { "Other Information 2", "ua3g.unsolicited_msg.other_information_2", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_other_info_2), 0x0, NULL, HFILL }},
4715 { &hf_ua3g_unsolicited_msg_firmware_datas_patch_version, { "Firmware Datas Patch Version", "ua3g.unsolicited_msg.firmware_datas_patch_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4716 { &hf_ua3g_unsolicited_msg_firmware_version_loader, { "Firmware Version (Loader)", "ua3g.unsolicited_msg.firmware_version_loader", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4717 { &hf_ua3g_unsolicited_msg_firmware_version, { "Firmware Version", "ua3g.unsolicited_msg.firmware_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4718 { &hf_ua3g_unsolicited_msg_datas_version, { "Datas Version", "ua3g.unsolicited_msg.datas_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4719 { &hf_ua3g_unsolicited_msg_firmware_version_bootloader, { "Firmware Version (Bootloader)", "ua3g.unsolicited_msg.firmware_version_bootloader", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4720 { &hf_ua3g_unsolicited_msg_opcode_of_bad_command, { "Opcode Of Bad Command", "ua3g.unsolicited_msg.opcode_of_bad_command", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4721 { &hf_ua3g_unsolicited_msg_next_byte_of_bad_command, { "Next Byte Of Bad Command", "ua3g.unsolicited_msg.next_byte_of_bad_command", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4722 { &hf_ua3g_unsolicited_msg_subdevice_address, { "Subdevice Address", "ua3g.unsolicited_msg.subdevice_address", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4723 { &hf_ua3g_unsolicited_msg_segment_failure_t, { "T", "ua3g.unsolicited_msg.segment_failure.t", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4724 { &hf_ua3g_unsolicited_msg_segment_failure_num, { "Num", "ua3g.unsolicited_msg.segment_failurenum", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4725 { &hf_ua3g_unsolicited_msg_segment_failure_s, { "/S", "ua3g.unsolicited_msg.segment_failure.s", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4726 { &hf_ua3g_unsolicited_msg_segment_failure_l, { "L", "ua3g.unsolicited_msg.segment_failure.l", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4727 { &hf_ua3g_unsolicited_msg_opcode_bad_segment, { "Opcode Bad Segment", "ua3g.unsolicited_msg.opcode_bad_segment", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4728 { &hf_ua3g_unsolicited_msg_next_byte_of_bad_segment, { "Next Byte Of Bad Segment", "ua3g.unsolicited_msg.next_byte_of_bad_segment", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4729 { &hf_ua3g_unsolicited_msg_device_event, { "Device Event", "ua3g.unsolicited_msg.device_event", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4730 { &hf_ua3g_i_m_here_id_code, { "Id Code", "ua3g.i_m_here.id_code", FT_UINT8, BASE_DEC, VALS(str_device_type), 0x0, NULL, HFILL }},
4731 { &hf_ua3g_segment_msg_segment, { "F/S", "ua3g.segment_msg.segment", FT_BOOLEAN, 8, TFS(&tfs_segment_msg_segment), 0x80, NULL, HFILL }},
4732 { &hf_ua3g_ip_device_routing_reset_parameter_noe_update, { "NOE Update Mode", "ua3g.ip.reset.parameter.noe_update", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4733 { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_bootloader, { "Bootloader", "ua3g.ip.reset.parameter.noe_update.bootloader", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01, NULL, HFILL }},
4734 { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_data, { "Data", "ua3g.ip.reset.parameter.noe_update.data", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x02, NULL, HFILL }},
4735 { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_customization, { "Customization", "ua3g.ip.reset.parameter.noe_update.customization", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
4736 { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_localization, { "Localization", "ua3g.ip.reset.parameter.noe_update.localization", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x08, NULL, HFILL }},
4737 { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_code, { "Code", "ua3g.ip.reset.parameter.noe_update.code", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, NULL, HFILL }},
4738 { &hf_ua3g_ip_device_routing_reset_parameter_noe_update_sip, { "SIP", "ua3g.ip.reset.parameter.noe_update.sip", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20, NULL, HFILL }},
4739 { &hf_ua3g_ip_device_routing_reset_parameter_bad_sec_mode, { "Bad Sec Mode", "ua3g.ip.reset.parameter.bad_sec_mode", FT_UINT8, BASE_DEC, VALS(reset_param_bad_sec_mode), 0x0, NULL, HFILL }},
4740 { &hf_ua3g_ip_device_routing_reset_parameter_value, { "Value", "ua3g.ip.reset.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4741 { &hf_ua3g_ip_device_routing_reset_parameter_cust_name, { "Cust_Name", "ua3g.ip.reset.parameter.cust_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4742 { &hf_ua3g_ip_device_routing_reset_parameter_l10n_name, { "L10N_Name", "ua3g.ip.reset.parameter.l10n_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4743 { &hf_ua3g_ip_device_routing_reset_parameter_appl_mode, { "Appl_Mode", "ua3g.ip.reset.parameter.appl_mode", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4744 { &hf_ua3g_ip_device_routing_reset_parameter_sip_name, { "SIP_Name", "ua3g.ip.reset.parameter.sip_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4745 { &hf_ua3g_ip_device_routing_reset_parameter_reset_mac, { "Reset Mac", "ua3g.ip.reset.parameter.reset_mac", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4746 { &hf_ua3g_ip_device_routing_start_rtp_parameter_value, { "Value", "ua3g.ip.start_rtp.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4747 { &hf_ua3g_ip_device_routing_start_rtp_parameter_ip, { "IP", "ua3g.ip.start_rtp.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4748 { &hf_ua3g_ip_device_routing_start_rtp_parameter_compressor, { "Compressor", "ua3g.ip.start_rtp.parameter.compressor", FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(str_compressor_vals), 0x0, NULL, HFILL }},
4749 { &hf_ua3g_ip_device_routing_start_rtp_parameter_enabler, { "Enabler", "ua3g.ip.start_rtp.parameter.enabler", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4750 { &hf_ua3g_ip_device_routing_start_rtp_parameter_send_qos, { "Must Send QOS Tickets", "ua3g.ip.start_rtp.parameter.send_qos", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4751 { &hf_ua3g_ip_device_routing_start_rtp_parameter_uint, { "Value", "ua3g.ip.start_rtp.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4752 { &hf_ua3g_ip_device_routing_start_rtp_parameter_dtmf_sending, { "Send DTMF", "ua3g.ip.start_rtp.parameter.dtmf_sending", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4753 { &hf_ua3g_ip_device_routing_start_rtp_parameter_rfc2198, { "Enable RFC 2198", "ua3g.ip.start_rtp.parameter.rfc2198", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4754 { &hf_ua3g_ip_device_routing_start_rtp_parameter_srtp_encryption, { "Enable SRTP Encryption", "ua3g.ip.start_rtp.parameter.srtp_encryption", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4755 { &hf_ua3g_ip_device_routing_redirect_parameter_value, { "Value", "ua3g.ip.redirect.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4756 { &hf_ua3g_ip_device_routing_redirect_parameter_ip, { "IP", "ua3g.ip.redirect.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4757 { &hf_ua3g_ip_device_routing_redirect_parameter_uint, { "Value", "ua3g.ip.redirect.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4758 { &hf_ua3g_ip_device_routing_listen_rtp_parameter_value, { "Value", "ua3g.ip.listen_rtp.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4759 { &hf_ua3g_ip_device_routing_listen_rtp_parameter_ip, { "IP", "ua3g.ip.listen_rtp.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4760 { &hf_ua3g_ip_device_routing_listen_rtp_parameter_port, { "Port", "ua3g.ip.listen_rtp.parameter.port", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4761 { &hf_ua3g_ip_device_routing_set_param_req_parameter_value, { "Value", "ua3g.ip.set_param_req.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4762 { &hf_ua3g_ip_device_routing_set_param_req_parameter_tftp_backup_ip, { "TFTP Backup IP", "ua3g.ip.set_param_req.parameter.tftp_backup_ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4763 { &hf_ua3g_ip_device_routing_set_param_req_parameter_uint, { "Value", "ua3g.ip.set_param_req.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4764 { &hf_ua3g_ip_device_routing_set_param_req_parameter_err_string, { "Value", "ua3g.ip.set_param_req.parameter.err_string", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4765 { &hf_ua3g_ip_device_routing_set_param_req_parameter_compressor, { "Compressor", "ua3g.ip.set_param_req.parameter.compressor", FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(str_compressor_vals), 0x0, NULL, HFILL }},
4766 { &hf_ua3g_ip_device_routing_set_param_req_parameter_set_pc_port_status, { "Set PC Port status", "ua3g.ip.set_param_req.parameter.set_pc_port_status", FT_UINT8, BASE_DEC, VALS(str_set_pc_port_status), 0x0, NULL, HFILL }},
4767 { &hf_ua3g_ip_device_routing_set_param_req_parameter_record_rtp_auth, { "Record RTP Authorization", "ua3g.ip.set_param_req.parameter.record_rtp_auth", FT_UINT8, BASE_DEC, VALS(str_enable_feature), 0x0, NULL, HFILL }},
4768 { &hf_ua3g_ip_device_routing_set_param_req_parameter_security_flag_filter, { "Filtering", "ua3g.ip.set_param_req.parameter.security_flag.filter", FT_BOOLEAN, 8, TFS(&tfs_active_inactive), 0x01, NULL, HFILL }},
4769 { &hf_ua3g_ip_device_routing_set_param_req_parameter_stable_mode, { "Stable Mode", "ua3g.ip.set_param_req.parameter.stable_mode", FT_UINT8, BASE_DEC, VALS(set_param_req_stable_mode), 0x0, NULL, HFILL }},
4770 { &hf_ua3g_ip_device_routing_set_param_req_parameter_skin_id, { "Skin Identifier", "ua3g.ip.set_param_req.parameter.skin_id", FT_UINT8, BASE_DEC, VALS(set_param_req_skin_id), 0x0, NULL, HFILL }},
4771 { &hf_ua3g_ip_device_routing_set_param_req_parameter_language_id, { "Language Identifier", "ua3g.ip.set_param_req.parameter.language_id", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4772 { &hf_ua3g_ip_device_routing_set_param_req_parameter_usb_boost, { "USB Boost", "ua3g.ip.set_param_req.parameter.usb_boost", FT_UINT8, BASE_DEC, VALS(set_param_req_usb_boost), 0x0, NULL, HFILL }},
4773 { &hf_ua3g_ip_device_routing_set_param_req_parameter_als_device, { "ALS Device", "ua3g.ip.set_param_req.parameter.als_device", FT_UINT8, BASE_DEC, VALS(set_param_req_local_device), 0x0, NULL, HFILL }},
4774 { &hf_ua3g_ip_device_routing_set_param_req_parameter_busy_light, { "Busy Light", "ua3g.ip.set_param_req.parameter.busy_light", FT_UINT8, BASE_DEC, VALS(set_param_req_local_device), 0x0, NULL, HFILL }},
4775 { &hf_ua3g_ip_device_routing_set_param_req_parameter_audio_env, { "Audio Env.", "ua3g.ip.set_param_req.parameter.audio_env", FT_UINT8, BASE_DEC, VALS(set_param_req_audio_env), 0x0, NULL, HFILL }},
4776 { &hf_ua3g_ip_device_routing_pause_restart_rtp_parameter_uint, { "Value", "ua3g.ip.pause_restart_rtp.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4777 { &hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_value, { "Value", "ua3g.ip.start_stop_record_rtp.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4778 { &hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_remote_ip, { "Remote IP", "ua3g.ip.start_stop_record_rtp.parameter.remote_ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4779 { &hf_ua3g_ip_device_routing_start_stop_record_rtp_parameter_uint, { "Value", "ua3g.ip.start_stop_record_rtp.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4780 { &hf_ua3g_ip_device_routing_freeseating_parameter, { "Parameter", "ua3g.ip.freeseating.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_freeseating_vals), 0x0, NULL, HFILL }},
4781 { &hf_ua3g_ip_device_routing_freeseating_parameter_length, { "Length", "ua3g.ip.freeseating.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4782 { &hf_ua3g_ip_device_routing_freeseating_parameter_value, { "Value", "ua3g.ip.freeseating.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4783 { &hf_ua3g_ip_device_routing_freeseating_parameter_uint, { "Value", "ua3g.ip.freeseating.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4784 { &hf_ua3g_ip_device_routing_freeseating_parameter_mac, { "Value", "ua3g.ip.freeseating.parameter.mac", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4785 { &hf_ua3g_ip_device_routing_freeseating_parameter_ip, { "Value", "ua3g.ip.freeseating.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4786 { &hf_ua3g_ip_device_routing_freeseating_parameter_ipv6, { "Value", "ua3g.ip.freeseating.parameter.ipv6", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4787 { &hf_ua3g_ip_device_routing_freeseating_parameter_do_reset, { "Value", "ua3g.ip.freeseating.parameter.do_reset", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4788 { &hf_ua3g_ip_device_routing_appl_parameter, { "Parameter", "ua3g.ip.appl.parameter", FT_UINT8, BASE_HEX, VALS(ip_device_routing_cmd_appl_vals), 0x0, NULL, HFILL }},
4789 { &hf_ua3g_ip_device_routing_appl_parameter_length, { "Length", "ua3g.ip.appl.parameter.length", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4790 { &hf_ua3g_ip_device_routing_appl_parameter_value, { "Value", "ua3g.ip.appl.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4791 { &hf_ua3g_ip_device_routing_appl_parameter_uint, { "Value", "ua3g.ip.appl.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4792 { &hf_ua3g_ip_device_routing_appl_parameter_id, { "Value", "ua3g.ip.appl.parameter.id", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4793 { &hf_ua3g_ip_device_routing_appl_parameter_enable, { "Value", "ua3g.ip.appl.parameter.enable", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4794 { &hf_ua3g_ip_device_routing_appl_parameter_url, { "Value", "ua3g.ip.appl.parameter.url", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4795 { &hf_ua3g_audio_config_dpi_chan_ua_tx1, { "UA Channel UA-TX1", "ua3g.command.audio_config.dpi_chan.ua_tx1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4796 { &hf_ua3g_audio_config_dpi_chan_ua_tx2, { "UA Channel UA-TX2", "ua3g.command.audio_config.dpi_chan.ua_tx2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4797 { &hf_ua3g_audio_config_dpi_chan_gci_tx1, { "GCI Channel GCI-TX1", "ua3g.command.audio_config.dpi_chan.gci_tx1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4798 { &hf_ua3g_audio_config_dpi_chan_gci_tx2, { "GCI Channel GCI-TX2", "ua3g.command.audio_config.dpi_chan.gci_tx2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4799 { &hf_ua3g_audio_config_dpi_chan_cod_tx, { "Codec Channel COD-TX", "ua3g.command.audio_config.dpi_chan.cod_tx", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4800 { &hf_ua3g_audio_config_audio_circuit_dth, { "Anti-Distortion Coeff 1(DTH)", "ua3g.command.audio_config.audio_circuit.dth", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4801 { &hf_ua3g_audio_config_audio_circuit_dtr, { "Anti-Distortion Coeff 2(DTR)", "ua3g.command.audio_config.audio_circuit.dtr", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4802 { &hf_ua3g_audio_config_audio_circuit_dtf, { "Anti-Distortion Coeff 3(DTF)", "ua3g.command.audio_config.audio_circuit.dtf", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4803 { &hf_ua3g_audio_config_audio_circuit_str, { "Sidetone Attenuation (STR)", "ua3g.command.audio_config.audio_circuit.str", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4804 { &hf_ua3g_audio_config_audio_circuit_ahp1, { "Anti-Larsen Coeff 1 (AHP1)", "ua3g.command.audio_config.audio_circuit.ahp1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4805 { &hf_ua3g_audio_config_audio_circuit_ahp2, { "Anti-Larsen Coeff 2 (AHP2)", "ua3g.command.audio_config.audio_circuit.ahp2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4806 { &hf_ua3g_audio_config_audio_circuit_ath, { "Anti-Larsen Coeff 3 (ATH)", "ua3g.command.audio_config.audio_circuit.ath", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4807 { &hf_ua3g_audio_config_audio_circuit_atr, { "Anti-Larsen Coeff 4 (ATR)", "ua3g.command.audio_config.audio_circuit.atr", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4808 { &hf_ua3g_audio_config_audio_circuit_atf, { "Anti-Larsen Coeff 5 (ATF)", "ua3g.command.audio_config.audio_circuit.atf", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4809 { &hf_ua3g_audio_config_audio_circuit_alm, { "Anti-Larsen Coeff 6 (ALM)", "ua3g.command.audio_config.audio_circuit.alm", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4810 { &hf_ua3g_audio_config_loudspeaker_aco_param_group_listen, { "Group Listening Attenuation Constant", "ua3g.command.audio_config.loudspeaker_aco_param.group_listen", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4811 { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_attenuation, { "Handsfree Attenuation Constant", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_attenuation", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4812 { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_stay_in_send, { "Handsfree Number Of ms To Stay In Send State Before Going To Another State", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_stay_in_send", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4813 { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mtx, { "Handsfree Number Of Positions To Shift Right MTx", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_shift_right_mtx", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4814 { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_shift_right_mrc, { "Handsfree Number Of Positions To Shift Right MRc", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_shift_right_mrc", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4815 { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_trans_threshold, { "Handsfree Idle Transmission Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_idle_trans_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4816 { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_trans_threshold, { "Handsfree Low Transmission Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_low_trans_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4817 { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_idle_recv_threshold, { "Handsfree Idle Reception Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_idle_recv_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4818 { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_low_recv_threshold, { "Handsfree Low Reception Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_low_recv_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4819 { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_med_recv_threshold, { "Handsfree Medium Reception Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_med_recv_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4820 { &hf_ua3g_audio_config_loudspeaker_aco_param_handsfree_high_recv_threshold, { "Handsfree High Reception Threshold", "ua3g.command.audio_config.loudspeaker_aco_param.handsfree_high_recv_threshold", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4821 { &hf_ua3g_ua_dwl_protocol_files_inc_boot_binary, { "Boot Binary Included", "ua3g.ua_dwl_protocol.files_inc.boot_binary", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01, NULL, HFILL }},
4822 { &hf_ua3g_ua_dwl_protocol_files_inc_loader_binary, { "Loader Binary Included", "ua3g.ua_dwl_protocol.files_inc.loader_binary", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02, NULL, HFILL }},
4823 { &hf_ua3g_ua_dwl_protocol_files_inc_appli_binary, { "Appli Binary Included", "ua3g.ua_dwl_protocol.files_inc.appli_binary", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04, NULL, HFILL }},
4824 { &hf_ua3g_ua_dwl_protocol_files_inc_data_binary, { "Datas Binary Included", "ua3g.ua_dwl_protocol.files_inc.data_binary", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08, NULL, HFILL }},
4825 { &hf_ua3g_ua_dwl_protocol_model_selection_a, { "For A Model", "ua3g.ua_dwl_protocol.model_selection.a", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01, NULL, HFILL }},
4826 { &hf_ua3g_ua_dwl_protocol_model_selection_b, { "For B Model", "ua3g.ua_dwl_protocol.model_selection.b", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02, NULL, HFILL }},
4827 { &hf_ua3g_ua_dwl_protocol_model_selection_c, { "For C Model", "ua3g.ua_dwl_protocol.model_selection.c", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04, NULL, HFILL }},
4828 { &hf_ua3g_ua_dwl_protocol_model_selection_country_ver, { "Country Version", "ua3g.ua_dwl_protocol.model_selection.country_ver", FT_UINT8, BASE_DEC, VALS(str_download_req_mode_selection_country), 0xE0, NULL, HFILL }},
4829 { &hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe1, { "For Ivanoe 1", "ua3g.ua_dwl_protocol.hardware_selection.ivanoe1", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01, NULL, HFILL }},
4830 { &hf_ua3g_ua_dwl_protocol_hardware_selection_ivanoe2, { "For Ivanoe 2", "ua3g.ua_dwl_protocol.hardware_selection.ivanoe2", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02, NULL, HFILL }},
4831 { &hf_ua3g_ua_dwl_protocol_memory_sizes_flash, { "Flash Min Size", "ua3g.ua_dwl_protocol.memory_sizes.flash", FT_UINT8, BASE_DEC, VALS(str_mem_size), 0x07, NULL, HFILL }},
4832 { &hf_ua3g_ua_dwl_protocol_memory_sizes_ext_ram, { "External Ram Min Size", "ua3g.ua_dwl_protocol.memory_sizes.ext_ram", FT_UINT8, BASE_DEC, VALS(str_mem_size), 0x38, NULL, HFILL }},
4833 { &hf_ua3g_unsolicited_msg_char_num_vta_subtype, { "VTA SubType", "ua3g.unsolicited_msg.char_num.vta_subtype", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_subtype), 0xC0, NULL, HFILL }},
4834 { &hf_ua3g_unsolicited_msg_char_num_generation, { "Generation", "ua3g.unsolicited_msg.char_num.generation", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_generation), 0x38, NULL, HFILL }},
4835 { &hf_ua3g_unsolicited_msg_char_num_design, { "Design", "ua3g.unsolicited_msg.char_num.design", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_design), 0x07, NULL, HFILL }},
4836 { &hf_ua3g_unsolicited_msg_hardware_config_vta_type, { "VTA Type", "ua3g.unsolicited_msg.hardware_config.vta_type", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_vta_type), 0xE0, NULL, HFILL }},
4837 { &hf_ua3g_unsolicited_msg_hardware_config_design, { "Design", "ua3g.unsolicited_msg.hardware_config.design", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_design), 0x1C, NULL, HFILL }},
4838 { &hf_ua3g_unsolicited_msg_hardware_config_subtype, { "VTA SubType", "ua3g.unsolicited_msg.hardware_config.subtype", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_subtype), 0x03, NULL, HFILL }},
4839 { &hf_ua3g_unsolicited_msg_hardware_config_hard_config_chip, { "Chip Id", "ua3g.unsolicited_msg.hardware_config.hard_config_chip", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_config_chip), 0x03, NULL, HFILL }},
4840 { &hf_ua3g_unsolicited_msg_hardware_config_hard_config_flash, { "Flash Size", "ua3g.unsolicited_msg.hardware_config.hard_config_flash", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_config_flash), 0x1C, NULL, HFILL }},
4841 { &hf_ua3g_unsolicited_msg_hardware_config_config_ram, { "External RAM Size", "ua3g.unsolicited_msg.hardware_config.config_ram", FT_UINT8, BASE_DEC, VALS(str_unsolicited_msg_hard_config_ram), 0xE0, NULL, HFILL }},
4842 { &hf_ua3g_unsolicited_msg_hardware_config, { "Hardware Configuration", "ua3g.unsolicited_msg.hardware_config", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4843 { &hf_ua3g_unsolicited_msg_hardware_config_export_full, { "Binary Type", "ua3g.unsolicited_msg.hardware_config.export_full", FT_BOOLEAN, 8, TFS(&tfs_export_full), 0x01, NULL, HFILL }},
4844 { &hf_ua3g_unsolicited_msg_hardware_config_ethernet_hardware, { "Ethernet Hardware", "ua3g.unsolicited_msg.hardware_config.ethernet_hardware", FT_BOOLEAN, 8, TFS(&tfs_fast_gigabit), 0x02, NULL, HFILL }},
4845 { &hf_ua3g_unsolicited_msg_hardware_config_extended_edition, { "Extended Hardware", "ua3g.unsolicited_msg.hardware_config.extended_edition", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x04, NULL, HFILL }},
4846 { &hf_ua3g_unsolicited_msg_hardware_config_wideband, { "Wideband Support", "ua3g.unsolicited_msg.hardware_config.wideband", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x08, NULL, HFILL }},
4847 { &hf_ua3g_unsolicited_msg_hardware_config_3g_set, { "Hardware Generation", "ua3g.unsolicited_msg.hardware_config.3g_set", FT_BOOLEAN, 8, TFS(&tfs_2g_3g), 0x10, NULL, HFILL }},
4848 { &hf_ua3g_unsolicited_msg_hardware_config_8082_set, { "8082 Hardware", "ua3g.unsolicited_msg.hardware_config.8082_set", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x20, NULL, HFILL }},
4849 { &hf_ua3g_unsolicited_msg_hardware_config_super_wideband, { "Super Wideband Support", "ua3g.unsolicited_msg.hardware_config.super_wideband", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x40, NULL, HFILL }},
4850 { &hf_ua3g_unsolicited_msg_hook_status, { "Hook Status", "ua3g.unsolicited_msg.hook_status", FT_UINT8, BASE_DEC, VALS(str_on_off), 0x0, NULL, HFILL }},
4851 { &hf_ua3g_unsolicited_msg_additional_vta_type, { "Additional VTA Type", "ua3g.unsolicited_msg.additional_vta_type", FT_UINT8, BASE_HEX, VALS(str_additional_vta_type), 0x0, NULL, HFILL }},
4852 { &hf_ua3g_unsolicited_msg_capability_info_bluetooth_supported, { "Bluetooth Supported", "ua3g.unsolicited_msg.capability_info.bluetooth_supported", FT_UINT8, BASE_DEC, VALS(str_yes_no), 0x0, NULL, HFILL }},
4853 { &hf_ua3g_unsolicited_msg_capability_info_vpn_encryption_status, { "VPN and Encryption Status", "ua3g.unsolicited_msg.capability_info.vpn_encryption_status", FT_UINT8, BASE_HEX, NULL, 0x00, NULL, HFILL }},
4854 { &hf_ua3g_unsolicited_msg_capability_info_vpn, { "VPN", "ua3g.unsolicited_msg.capability_info.vpn", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x01, NULL, HFILL }},
4855 { &hf_ua3g_unsolicited_msg_capability_info_ipsec, { "IPSec", "ua3g.unsolicited_msg.capability_info.ipsec", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02, NULL, HFILL }},
4856 { &hf_ua3g_unsolicited_msg_capability_info_dtls, { "DTLS", "ua3g.unsolicited_msg.capability_info.dtls", FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x4, NULL, HFILL }},
4857 { &hf_ua3g_unsolicited_msg_capability_info_wlan_status, { "WLAN Status", "ua3g.unsolicited_msg.capability_info.wlan_status", FT_UINT8, BASE_DEC, VALS(str_wlan_status), 0x0, NULL, HFILL }},
4858 { &hf_ua3g_unsolicited_msg_capability_info_reserved, { "Reserved", "ua3g.unsolicited_msg.capability_info.reserved", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4859 { &hf_ua3g_special_key_shift, { "Shift", "ua3g.special_key.shift", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x01, NULL, HFILL }},
4860 { &hf_ua3g_special_key_ctrl, { "Ctrl", "ua3g.special_key.ctrl", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x02, NULL, HFILL }},
4861 { &hf_ua3g_special_key_alt, { "Alt", "ua3g.special_key.alt", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x04, NULL, HFILL }},
4862 { &hf_ua3g_special_key_cmd, { "Cmd", "ua3g.special_key.cmd", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x08, NULL, HFILL }},
4863 { &hf_ua3g_special_key_shift_prime, { "Shift'", "ua3g.special_key.shift_prime", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x10, NULL, HFILL }},
4864 { &hf_ua3g_special_key_ctrl_prime, { "Ctrl'", "ua3g.special_key.ctrl_prime", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x20, NULL, HFILL }},
4865 { &hf_ua3g_special_key_alt_prime, { "Alt'", "ua3g.special_key.alt_prime", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x40, NULL, HFILL }},
4866 { &hf_ua3g_special_key_cmd_prime, { "Cmd'", "ua3g.special_key.cmd_prime", FT_BOOLEAN, 8, TFS(&tfs_released_pressed), 0x80, NULL, HFILL }},
4867 { &hf_ua3g_lcd_line_cmd_lcd_options_call_timer, { "Call Timer", "ua3g.lcd_line_cmd.lcd_options.call_timer", FT_UINT8, BASE_DEC, VALS(str_call_timer_ctrl), 0x03, NULL, HFILL }},
4868 { &hf_ua3g_lcd_line_cmd_lcd_options_blink, { "Blink", "ua3g.lcd_line_cmd.lcd_options.blink", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x04, NULL, HFILL }},
4869 { &hf_ua3g_lcd_line_cmd_lcd_options_call_timer_control, { "Call Timer Control", "ua3g.lcd_line_cmd.lcd_options.call_timer_control", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x10, NULL, HFILL }},
4870 { &hf_ua3g_lcd_line_cmd_lcd_options_call_timer_display, { "Call Timer Display", "ua3g.lcd_line_cmd.lcd_options.call_timer_display", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x20, NULL, HFILL }},
4871 { &hf_ua3g_lcd_line_cmd_lcd_options_time_of_day_display, { "Time Of Day Display", "ua3g.lcd_line_cmd.lcd_options.time_of_day_display", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x40, NULL, HFILL }},
4872 { &hf_ua3g_lcd_line_cmd_lcd_options_suspend_display_refresh, { "Suspend Display Refresh", "ua3g.lcd_line_cmd.lcd_options.suspend_display_refresh", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x80, NULL, HFILL }},
4873 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_value, { "Value", "ua3g.ip.cs.cmd02.parameter.value", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4874 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_ip, { "IP", "ua3g.ip.cs.cmd02.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4875 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_mac_address, { "MAC Address", "ua3g.ip.cs.cmd02.parameter.mac_address", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4876 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_uint, { "Value", "ua3g.ip.cs.cmd02.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4877 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_bytes, { "Default Codec", "ua3g.ip.cs.cmd02.parameter.default_codec.bytes", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4878 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_default_codec_uint, { "Default Codec", "ua3g.ip.cs.cmd02.parameter.default_codec.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4879 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_firmware_version, { "Firmware Version", "ua3g.ip.cs.cmd02.parameter.firmware_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4880 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_tscip_version, { "Firmware Version", "ua3g.ip.cs.cmd02.parameter.tscip_version", FT_UINT24, BASE_CUSTOM, CF_FUNC(version_3bytes_computer), 0x0, NULL, HFILL }},
4881 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_speed, { "Port Lan Speed", "ua3g.ip.cs.cmd02.parameter.eth_driver_config.port_lan_speed", FT_UINT8, BASE_DEC, VALS(str_ethernet_speed_vals), 0x0, NULL, HFILL }},
4882 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_lan_duplex, { "Port Lan Duplex", "ua3g.ip.cs.cmd02.parameter.eth_driver_config.port_lan_duplex", FT_CHAR, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4883 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_speed, { "Port PC Speed", "ua3g.ip.cs.cmd02.parameter.eth_driver_config.port_pc_speed", FT_UINT8, BASE_DEC, VALS(str_ethernet_speed_vals), 0x0, NULL, HFILL }},
4884 { &hf_ua3g_cs_ip_device_routing_cmd02_parameter_eth_driver_config_port_pc_duplex, { "Port PC Duplex", "ua3g.ip.cs.cmd02.parameter.eth_driver_config.port_pc_duplex", FT_CHAR, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4886 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_ip, { "IP", "ua3g.ip.cs.cmd03.parameter.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4887 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_string, { "IP", "ua3g.ip.cs.cmd03.parameter.string", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4888 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_type_of_equip, { "Type Of Equipment", "ua3g.ip.cs.cmd03.parameter.type_of_equip", FT_UINT16, BASE_HEX, VALS(cs_ip_device_routing_cmd03_type_of_equip_vals), 0x0, NULL, HFILL }},
4889 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_firmware_version, { "Firmware Version", "ua3g.ip.cs.cmd03.parameter.firmware_version", FT_UINT16, BASE_CUSTOM, CF_FUNC(version_number_computer), 0x0, NULL, HFILL }},
4890 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_codec, { "Codec", "ua3g.ip.cs.cmd03.parameter.codec", FT_UINT8, BASE_HEX, VALS(str_cs_ip_device_routing_0F_compressor), 0x0, NULL, HFILL }},
4891 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_vad, { "VAD", "ua3g.ip.cs.cmd03.parameter.vad", FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x0, NULL, HFILL }},
4892 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_ece, { "ECE", "ua3g.ip.cs.cmd03.parameter.ece", FT_BOOLEAN, BASE_NONE, TFS(&tfs_on_off), 0x0, NULL, HFILL }},
4893 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_voice_mode, { "Voice Mode", "ua3g.ip.cs.cmd03.parameter.voice_mode", FT_UINT8, BASE_HEX, VALS(cs_ip_device_routing_cmd03_voice_mode_vals), 0x0, NULL, HFILL }},
4894 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_delay_distribution, { "Delay Distribution", "ua3g.ip.cs.cmd03.parameter.delay_distribution", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4895 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_bfi, { "Consecutive BFI", "ua3g.ip.cs.cmd03.parameter.consecutive_bfi", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4896 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution, { "BFI Distribution", "ua3g.ip.cs.cmd03.parameter.bfi_distribution", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4897 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021Q_used, { "802.1 Q Used", "ua3g.ip.cs.cmd03.parameter.8021Q_used", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4898 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_8021P_priority, { "802.1p Priority", "ua3g.ip.cs.cmd03.parameter.8021P_priority", FT_UINT8, BASE_DEC, NULL, 0x07, NULL, HFILL }},
4899 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_vlan_id, { "VLAN Id", "ua3g.ip.cs.cmd03.parameter.vlan_id", FT_UINT16, BASE_DEC, NULL, 0x0FFF, NULL, HFILL }},
4900 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_diffserv, { "DiffServ", "ua3g.ip.cs.cmd03.parameter.diffserv", FT_UINT8, BASE_DEC, NULL, 0xFC, NULL, HFILL }},
4901 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_bfi_distribution_200ms, { "200 ms BFI Distribution", "ua3g.ip.cs.cmd03.parameter.bfi_distribution_200ms", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4902 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_uint, { "Value", "ua3g.ip.cs.cmd03.parameter.uint", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4903 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_consecutive_rtp_lost, { "Consecutive RTP Lost", "ua3g.ip.cs.cmd03.parameter.consecutive_rtp_lost", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4904 { &hf_ua3g_cs_ip_device_routing_cmd03_parameter_jitter_depth_distribution, { "Jitter Depth Distribution", "ua3g.ip.cs.cmd03.parameter.jitter_depth_distribution", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4905 { &hf_ua3g_subdevice_state, { "Subdevice State", "ua3g.subdevice_state", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4906 { &hf_ua3g_special_key_param_dtmf, { "Parameters Received for DTMF", "ua3g.special_key.param_dtmf", FT_BOOLEAN, 8, TFS(&tfs_special_key_parameters), 0x02, NULL, HFILL }},
4907 { &hf_ua3g_special_key_hookswitch_status, { "Hookswitch Status", "ua3g.special_key.hookswitch_status", FT_BOOLEAN, 8, TFS(&tfs_hookswitch_status), 0x01, NULL, HFILL }},
4908 { &hf_ua3g_cs_ip_device_routing_param_identifier, { "Parameter Identifier", "ua3g.ip.cs.param_identifier", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4909 { &hf_ua3g_key_number, { "Key Number", "ua3g.key_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4910 { &hf_ua3g_ua_dwl_protocol_binary_info, { "Binary information", "ua3g.ua_dwl_protocol.binary_info", FT_BOOLEAN, 8, TFS(&tfs_bin_info), 0x01, NULL, HFILL }},
4911 { &hf_ua3g_lcd_line_cmd_unused, { "Unused", "ua3g.command.lcd_line.unused", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4912 { &hf_ua3g_lcd_line_cmd_ascii_char, { "ASCII Char", "ua3g.command.lcd_line.ascii_char", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }},
4913 { &hf_ua3g_call_timer, { "Call Timer", "ua3g.command.call_timer", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4914 { &hf_ua3g_current_time, { "Current Timer", "ua3g.command.current_time", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4915 { &hf_ua3g_beep_beep_destination, { "Destination", "ua3g.command.beep.destination", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4916 { &hf_ua3g_beep_beep_destination_handset, { "Handset", "ua3g.command.beep.destination.handset", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }},
4917 { &hf_ua3g_beep_beep_destination_headset, { "Headset", "ua3g.command.beep.destination.headset", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL }},
4918 { &hf_ua3g_beep_beep_destination_loudspeaker, { "Loudspeaker", "ua3g.command.beep.destination.loudspeaker", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL }},
4919 { &hf_ua3g_beep_beep_destination_announce_loudspeaker, { "Announce Loudspeaker", "ua3g.command.beep.destination.announce_loudspeaker", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL }},
4920 { &hf_ua3g_beep_beep_destination_handsfree, { "Handsfree", "ua3g.command.beep.destination.handsfree", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL }},
4921 { &hf_ua3g_beep_freq_sample, { "Freq sample", "ua3g.command.beep.note.freq_sample", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4922 { &hf_ua3g_beep_level, { "Level", "ua3g.command.beep.note.level", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4923 { &hf_ua3g_beep_duration, { "Duration", "ua3g.command.beep.note.duration", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }},
4924 { &hf_ua3g_device_configuration, { "Device Configuration", "ua3g.device_configuration", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }},
4927 static int *ett[] =
4929 &ett_ua3g,
4930 &ett_ua3g_body,
4931 &ett_ua3g_param,
4932 &ett_ua3g_param_sub,
4933 &ett_ua3g_option,
4934 &ett_ua3g_beep_beep_destination,
4935 &ett_ua3g_note,
4938 module_t *ua3g_module;
4940 /* UA3G dissector registration */
4941 proto_ua3g = proto_register_protocol("UA3G Message", "UA3G", "ua3g");
4943 /* Register preferences */
4944 ua3g_module = prefs_register_protocol(proto_ua3g, NULL);
4946 prefs_register_bool_preference(ua3g_module, "setup_conversations",
4947 "Setup RTP/RTCP conversations on Start/Record RTP",
4948 "Setup RTP/RTCP conversations when parsing Start/Record RTP messages",
4949 &setup_conversations_enabled);
4951 proto_register_field_array(proto_ua3g, hf, array_length(hf));
4953 register_dissector("ua3g", dissect_ua3g, proto_ua3g);
4955 /* Common subtree array registration */
4956 proto_register_subtree_array(ett, array_length(ett));
4959 void proto_reg_handoff_ua3g(void)
4961 #if 0 /* Future */
4962 dissector_handle_t handle_ua3g = find_dissector("ua3g");
4964 /* hooking of UA3G on UA */
4966 dissector_add_uint("ua.opcode", 0x15, handle_ua3g);
4967 #endif
4971 * Editor modelines - https://www.wireshark.org/tools/modelines.html
4973 * Local variables:
4974 * c-basic-offset: 4
4975 * tab-width: 8
4976 * indent-tabs-mode: nil
4977 * End:
4979 * vi: set shiftwidth=4 tabstop=8 expandtab:
4980 * :indentSize=4:tabSize=8:noTabs=true: