epan/dissectors/pidl/samr/samr.cnf cnf_dissect_lsa_BinaryString => lsarpc_dissect_str...
[wireshark-sm.git] / epan / dissectors / packet-bthci_cmd.c
blob1e7543a7b98945a20c88fcf1f398721824b6dba2
1 /* packet-bthci-cmd.c
2 * Routines for the Bluetooth HCI Command dissection
3 * Copyright 2002, Christoph Scholz <scholz@cs.uni-bonn.de>
4 * From: http://affix.sourceforge.net/archive/ethereal_affix-3.patch
6 * Refactored for wireshark checkin
7 * Ronnie Sahlberg 2006
9 * Updated to HCI specification 2.1 + EDR
10 * Allan M. Madsen 2007
11 * Updated to HCI specification 3.0+HS & 4.0
12 * Allan M. Madsen 2012
13 * Updated to Core Specification 5.2
14 * Thomas Sailer 2021
15 * Updated to HCI specification 5.3
16 * Allan M. Madsen 2022
17 * Updated to HCI specification 5.4
18 * Allan M. Madsen 2023
19 * Updated to HCI specification 6.0
20 * Allan M. Madsen 2024
22 * Wireshark - Network traffic analyzer
23 * By Gerald Combs <gerald@wireshark.org>
24 * Copyright 1998 Gerald Combs
26 * SPDX-License-Identifier: GPL-2.0-or-later
29 #include "config.h"
31 #include <epan/packet.h>
32 #include <epan/addr_resolv.h>
33 #include <epan/expert.h>
34 #include <epan/prefs.h>
35 #include <epan/decode_as.h>
36 #include <epan/tap.h>
37 #include <epan/proto_data.h>
38 #include <epan/tfs.h>
39 #include <epan/unit_strings.h>
41 #include <wsutil/utf8_entities.h>
43 #include "packet-bluetooth.h"
44 #include "packet-bthci_cmd.h"
45 #include "packet-bthci_evt.h"
46 #include "packet-btatt.h"
48 static int proto_bthci_cmd;
50 static int hf_bthci_cmd_opcode;
51 static int hf_bthci_cmd_ogf;
52 static int hf_bthci_cmd_ocf;
53 static int hf_bthci_cmd_ocf_link_control;
54 static int hf_bthci_cmd_ocf_link_policy;
55 static int hf_bthci_cmd_ocf_host_controller_and_baseband;
56 static int hf_bthci_cmd_ocf_informational;
57 static int hf_bthci_cmd_ocf_status;
58 static int hf_bthci_cmd_ocf_testing;
59 static int hf_bthci_cmd_ocf_logo_testing;
60 static int hf_bthci_cmd_ocf_low_energy;
61 static int hf_bthci_cmd_param_length;
62 static int hf_bthci_cmd_lap;
63 static int hf_bthci_cmd_inq_length;
64 static int hf_bthci_cmd_num_responses;
65 static int hf_bthci_cmd_encrypt_mode;
66 static int hf_bthci_cmd_bd_addr;
67 static int hf_bthci_cmd_packet_type;
68 static int hf_bthci_cmd_packet_type_dh5;
69 static int hf_bthci_cmd_packet_type_dm5;
70 static int hf_bthci_cmd_packet_type_3dh5;
71 static int hf_bthci_cmd_packet_type_2dh5;
72 static int hf_bthci_cmd_packet_type_dh3;
73 static int hf_bthci_cmd_packet_type_dm3;
74 static int hf_bthci_cmd_packet_type_3dh3;
75 static int hf_bthci_cmd_packet_type_2dh3;
76 static int hf_bthci_cmd_packet_type_reserved_5_7;
77 static int hf_bthci_cmd_packet_type_dh1;
78 static int hf_bthci_cmd_packet_type_dm1;
79 static int hf_bthci_cmd_packet_type_3dh1;
80 static int hf_bthci_cmd_packet_type_2dh1;
81 static int hf_bthci_cmd_packet_type_reserved_0;
82 static int hf_bthci_cmd_clock_offset;
83 static int hf_bthci_cmd_clock_offset_valid;
84 static int hf_bthci_cmd_allow_role_switch;
85 static int hf_bthci_cmd_page_scan_mode;
86 static int hf_bthci_cmd_page_scan_repetition_mode;
87 static int hf_bthci_cmd_page_scan_period_mode;
88 static int hf_bthci_cmd_max_period_length;
89 static int hf_bthci_cmd_min_period_length;
90 static int hf_bthci_cmd_connection_handle;
91 static int hf_bthci_cmd_reason;
92 static int hf_bthci_cmd_num_link_keys;
93 static int hf_bthci_cmd_link_key;
94 static int hf_bthci_cmd_packet_type_hv1;
95 static int hf_bthci_cmd_packet_type_hv2;
96 static int hf_bthci_cmd_packet_type_hv3;
97 static int hf_bthci_cmd_role;
98 static int hf_bthci_cmd_acr_role;
99 static int hf_bthci_cmd_pin_code_length;
100 static int hf_bthci_cmd_pin_code;
101 static int hf_bthci_cmd_pin_type;
102 static int hf_bthci_cmd_encryption_enable;
103 static int hf_bthci_cmd_key_flag;
104 static int hf_bthci_cmd_max_interval_hold;
105 static int hf_bthci_cmd_min_interval_hold;
106 static int hf_bthci_cmd_max_interval_sniff;
107 static int hf_bthci_cmd_min_interval_sniff;
108 static int hf_bthci_cmd_sniff_attempt;
109 static int hf_bthci_cmd_sniff_timeout;
110 static int hf_bthci_cmd_timeout;
111 static int hf_bthci_cmd_max_interval_beacon;
112 static int hf_bthci_cmd_min_interval_beacon;
113 static int hf_bthci_cmd_flags;
114 static int hf_bthci_cmd_flow_direction;
115 static int hf_bthci_cmd_service_type;
116 static int hf_bthci_cmd_token_rate;
117 static int hf_bthci_cmd_token_bucket_size;
118 static int hf_bthci_cmd_peak_bandwidth;
119 static int hf_bthci_cmd_latency;
120 static int hf_bthci_cmd_delay_variation;
121 static int hf_bthci_cmd_link_policy_setting_switch;
122 static int hf_bthci_cmd_link_policy_setting_hold;
123 static int hf_bthci_cmd_link_policy_setting_sniff;
124 static int hf_bthci_cmd_link_policy_setting_park;
125 static int hf_bthci_cmd_filter_type;
126 static int hf_bthci_cmd_inquiry_result_filter_condition_type;
127 static int hf_bthci_cmd_connection_setup_filter_condition_type;
128 static int hf_bthci_cmd_cod_class_of_device_mask;
129 static int hf_bthci_cmd_cod_minor_device_class_mask;
130 static int hf_bthci_cmd_cod_format_type_mask;
131 static int hf_bthci_cmd_cod_major_service_class_information_mask;
132 static int hf_bthci_cmd_cod_major_service_class_telephony_mask;
133 static int hf_bthci_cmd_cod_major_service_class_audio_mask;
134 static int hf_bthci_cmd_cod_major_service_class_object_transfer_mask;
135 static int hf_bthci_cmd_cod_major_service_class_capturing_mask;
136 static int hf_bthci_cmd_cod_major_service_class_rendering_mask;
137 static int hf_bthci_cmd_cod_major_service_class_networking_mask;
138 static int hf_bthci_cmd_cod_major_service_class_positioning_mask;
139 static int hf_bthci_cmd_cod_major_service_class_reserved_mask;
140 static int hf_bthci_cmd_cod_major_service_class_le_audio_mask;
141 static int hf_bthci_cmd_cod_major_service_class_limited_discoverable_mode_mask;
142 static int hf_bthci_cmd_cod_major_device_class_mask;
143 static int hf_bthci_cmd_auto_acc_flag;
144 static int hf_bthci_cmd_read_all_flag;
145 static int hf_bthci_cmd_delete_all_flag;
146 static int hf_bthci_cmd_authentication_enable;
147 static int hf_bthci_cmd_input_unused;
148 static int hf_bthci_cmd_input_coding;
149 static int hf_bthci_cmd_input_data_format;
150 static int hf_bthci_cmd_input_sample_size;
151 static int hf_bthci_cmd_linear_pcm_bit_pos;
152 static int hf_bthci_cmd_air_coding_format;
153 static int hf_bthci_cmd_num_broadcast_retransmissions;
154 static int hf_bthci_cmd_hold_mode_act_page;
155 static int hf_bthci_cmd_hold_mode_act_inquiry;
156 static int hf_bthci_cmd_hold_mode_act_periodic;
157 static int hf_bthci_cmd_scan_enable;
158 static int hf_bthci_cmd_interval;
159 static int hf_bthci_cmd_window;
160 static int hf_bthci_cmd_device_name;
161 static int hf_bthci_cmd_num_curr_iac;
162 static int hf_bthci_cmd_iac_lap;
163 static int hf_bthci_cmd_evt_mask_00;
164 static int hf_bthci_cmd_evt_mask_01;
165 static int hf_bthci_cmd_evt_mask_02;
166 static int hf_bthci_cmd_evt_mask_03;
167 static int hf_bthci_cmd_evt_mask_04;
168 static int hf_bthci_cmd_evt_mask_05;
169 static int hf_bthci_cmd_evt_mask_06;
170 static int hf_bthci_cmd_evt_mask_07;
171 static int hf_bthci_cmd_evt_mask_10;
172 static int hf_bthci_cmd_evt_mask_11;
173 static int hf_bthci_cmd_evt_mask_12;
174 static int hf_bthci_cmd_evt_mask_13;
175 static int hf_bthci_cmd_evt_mask_14;
176 static int hf_bthci_cmd_evt_mask_17;
177 static int hf_bthci_cmd_evt_mask_20;
178 static int hf_bthci_cmd_evt_mask_21;
179 static int hf_bthci_cmd_evt_mask_23;
180 static int hf_bthci_cmd_evt_mask_24;
181 static int hf_bthci_cmd_evt_mask_25;
182 static int hf_bthci_cmd_evt_mask_26;
183 static int hf_bthci_cmd_evt_mask_27;
184 static int hf_bthci_cmd_evt_mask_30;
185 static int hf_bthci_cmd_evt_mask_31;
186 static int hf_bthci_cmd_evt_mask_32;
187 static int hf_bthci_cmd_evt_mask_33;
188 static int hf_bthci_cmd_evt_mask_34;
189 static int hf_bthci_cmd_evt_mask_35;
190 static int hf_bthci_cmd_evt_mask_36;
191 static int hf_bthci_cmd_evt_mask_37;
192 static int hf_bthci_cmd_evt_mask_40;
193 static int hf_bthci_cmd_evt_mask_41;
194 static int hf_bthci_cmd_evt_mask_42;
195 static int hf_bthci_cmd_evt_mask_53;
196 static int hf_bthci_cmd_evt_mask_54;
197 static int hf_bthci_cmd_evt_mask_55;
198 static int hf_bthci_cmd_evt_mask_56;
199 static int hf_bthci_cmd_evt_mask_57;
200 static int hf_bthci_cmd_evt_mask_60;
201 static int hf_bthci_cmd_evt_mask_61;
202 static int hf_bthci_cmd_evt_mask_62;
203 static int hf_bthci_cmd_evt_mask_63;
204 static int hf_bthci_cmd_evt_mask_64;
205 static int hf_bthci_cmd_evt_mask_65;
206 static int hf_bthci_cmd_evt_mask_67;
207 static int hf_bthci_cmd_evt_mask_70;
208 static int hf_bthci_cmd_evt_mask_72;
209 static int hf_bthci_cmd_evt_mask_73;
210 static int hf_bthci_cmd_sco_flow_control;
211 static int hf_bthci_cmd_num_handles;
212 static int hf_bthci_cmd_num_compl_packets;
213 static int hf_bthci_cmd_flow_contr_enable;
214 static int hf_bthci_cmd_host_data_packet_length_acl;
215 static int hf_bthci_cmd_host_data_packet_length_sco;
216 static int hf_bthci_cmd_host_total_num_acl_data_packets;
217 static int hf_bthci_cmd_host_total_num_sco_data_packets;
218 static int hf_bthci_cmd_loopback_mode;
219 static int hf_bthci_cmd_page_number;
220 static int hf_bthci_cmd_transmit_bandwidth;
221 static int hf_bthci_cmd_receive_bandwidth;
222 static int hf_bthci_cmd_max_latency_ms;
223 static int hf_bthci_cmd_max_latency;
224 static int hf_bthci_cmd_retransmission_effort;
225 static int hf_bthci_cmd_scan_type;
226 static int hf_bthci_cmd_inq_mode;
227 static int hf_bthci_cmd_fec_required;
228 static int hf_bthci_cmd_err_data_reporting;
229 static int hf_bthci_cmd_tx_power;
230 static int hf_bthci_cmd_sco_packet_type;
231 static int hf_bthci_cmd_sco_packet_type_hv1;
232 static int hf_bthci_cmd_sco_packet_type_hv2;
233 static int hf_bthci_cmd_sco_packet_type_hv3;
234 static int hf_bthci_cmd_sco_packet_type_ev3;
235 static int hf_bthci_cmd_sco_packet_type_ev4;
236 static int hf_bthci_cmd_sco_packet_type_ev5;
237 static int hf_bthci_cmd_sco_packet_type_2ev3;
238 static int hf_bthci_cmd_sco_packet_type_3ev3;
239 static int hf_bthci_cmd_sco_packet_type_2ev5;
240 static int hf_bthci_cmd_sco_packet_type_3ev5;
241 static int hf_bthci_cmd_sco_packet_type_reserved;
242 static int hf_bthci_cmd_min_remote_timeout;
243 static int hf_bthci_cmd_min_local_timeout;
244 static int hf_bthci_cmd_flush_packet_type;
245 static int hf_bthci_cmd_afh_ch_assessment_mode;
246 static int hf_bthci_cmd_ch_classification;
247 static int hf_bthci_cmd_which_clock;
248 static int hf_bthci_cmd_io_capability;
249 static int hf_bthci_cmd_oob_data_present;
250 static int hf_bthci_cmd_auth_requirements;
251 static int hf_bthci_cmd_passkey;
252 static int hf_bthci_cmd_randomizer_r;
253 static int hf_bthci_cmd_hash_c;
254 static int hf_bthci_cmd_simple_pairing_mode;
255 static int hf_bthci_cmd_simple_pairing_debug_mode;
256 static int hf_bthci_cmd_notification_type;
257 static int hf_bthci_cmd_physical_link_handle;
258 static int hf_bthci_cmd_dedicated_amp_key_length;
259 static int hf_bthci_cmd_dedicated_amp_key_type;
260 static int hf_bthci_cmd_dedicated_amp_key;
261 static int hf_bthci_cmd_flow_spec;
262 static int hf_bthci_cmd_flow_spec_identifier;
263 static int hf_bthci_cmd_flow_spec_service_type;
264 static int hf_bthci_cmd_flow_spec_sdu_size;
265 static int hf_bthci_cmd_flow_spec_sdu_arrival_time;
266 static int hf_bthci_cmd_flow_spec_access_latency;
267 static int hf_bthci_cmd_flush_to_us;
268 static int hf_bthci_cmd_logical_link_handle;
269 static int hf_bthci_cmd_evt_mask2;
270 static int hf_bthci_cmd_evt_mask2_00;
271 static int hf_bthci_cmd_evt_mask2_01;
272 static int hf_bthci_cmd_evt_mask2_02;
273 static int hf_bthci_cmd_evt_mask2_03;
274 static int hf_bthci_cmd_evt_mask2_04;
275 static int hf_bthci_cmd_evt_mask2_05;
276 static int hf_bthci_cmd_evt_mask2_06;
277 static int hf_bthci_cmd_evt_mask2_07;
278 static int hf_bthci_cmd_evt_mask2_08;
279 static int hf_bthci_cmd_evt_mask2_09;
280 static int hf_bthci_cmd_evt_mask2_10;
281 static int hf_bthci_cmd_evt_mask2_11;
282 static int hf_bthci_cmd_evt_mask2_12;
283 static int hf_bthci_cmd_evt_mask2_13;
284 static int hf_bthci_cmd_evt_mask2_14;
285 static int hf_bthci_cmd_evt_mask2_15;
286 static int hf_bthci_cmd_evt_mask2_16;
287 static int hf_bthci_cmd_evt_mask2_17;
288 static int hf_bthci_cmd_evt_mask2_18;
289 static int hf_bthci_cmd_evt_mask2_19;
290 static int hf_bthci_cmd_evt_mask2_20;
291 static int hf_bthci_cmd_evt_mask2_21;
292 static int hf_bthci_cmd_evt_mask2_22;
293 static int hf_bthci_cmd_evt_mask2_23;
294 static int hf_bthci_cmd_evt_mask2_24;
295 static int hf_bthci_cmd_evt_mask2_25;
296 static int hf_bthci_cmd_evt_mask2_reserved;
297 static int hf_bthci_cmd_location_domain_aware;
298 static int hf_bthci_cmd_location_domain;
299 static int hf_bthci_cmd_location_domain_options;
300 static int hf_bthci_cmd_location_options;
301 static int hf_bthci_cmd_flow_control_mode;
302 static int hf_bthci_cmd_tx_power_level_type;
303 static int hf_bthci_cmd_short_range_mode;
304 static int hf_bthci_cmd_le_supported_host;
305 static int hf_bthci_cmd_le_simultaneous_host;
306 static int hf_bthci_cmd_enable_amp_recv_reports;
307 static int hf_bthci_cmd_amp_recv_report_interval;
308 static int hf_bthci_cmd_length_so_far;
309 static int hf_bthci_cmd_amp_assoc_length;
310 static int hf_bthci_cmd_amp_remaining_assoc_length;
311 static int hf_bthci_cmd_amp_assoc_fragment;
312 static int hf_bthci_cmd_le_event_mask;
313 static int hf_bthci_cmd_le_event_mask_le_reserved;
314 static int hf_bthci_cmd_le_event_mask_le_frame_space_update_complete;
315 static int hf_bthci_cmd_le_event_mask_le_monitored_advertisers_report;
316 static int hf_bthci_cmd_le_event_mask_le_cs_test_end_complete;
317 static int hf_bthci_cmd_le_event_mask_le_cs_subevent_result_continue;
318 static int hf_bthci_cmd_le_event_mask_le_cs_subevent_result;
319 static int hf_bthci_cmd_le_event_mask_le_cs_procedure_enable_complete;
320 static int hf_bthci_cmd_le_event_mask_le_cs_config_complete;
321 static int hf_bthci_cmd_le_event_mask_le_cs_security_enable_complete;
322 static int hf_bthci_cmd_le_event_mask_le_cs_read_remote_fae_table_complete;
323 static int hf_bthci_cmd_le_event_mask_le_cs_read_remote_supported_capabilities_complete;
324 static int hf_bthci_cmd_le_event_mask_le_read_all_remote_features_complete;
325 static int hf_bthci_cmd_le_event_mask_le_cis_established_v2;
326 static int hf_bthci_cmd_le_event_mask_le_enhanced_connection_complete_v2;
327 static int hf_bthci_cmd_le_event_mask_le_periodic_advertising_response_report;
328 static int hf_bthci_cmd_le_event_mask_le_periodic_advertising_subevent_data_request;
329 static int hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_transfer_received_v2;
330 static int hf_bthci_cmd_le_event_mask_le_periodic_advertising_report_v2;
331 static int hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_established_v2;
332 static int hf_bthci_cmd_le_event_mask_le_subrate_changed;
333 static int hf_bthci_cmd_le_event_mask_le_biginfo_advertising_report;
334 static int hf_bthci_cmd_le_event_mask_le_transmit_power_reporting;
335 static int hf_bthci_cmd_le_event_mask_le_path_loss_threshold;
336 static int hf_bthci_cmd_le_event_mask_le_request_peer_sca_complete;
337 static int hf_bthci_cmd_le_event_mask_le_big_sync_lost;
338 static int hf_bthci_cmd_le_event_mask_le_big_sync_established;
339 static int hf_bthci_cmd_le_event_mask_le_terminate_big_complete;
340 static int hf_bthci_cmd_le_event_mask_le_create_big_complete;
341 static int hf_bthci_cmd_le_event_mask_le_cis_request;
342 static int hf_bthci_cmd_le_event_mask_le_cis_established_v1;
343 static int hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_transfer_received_v1;
344 static int hf_bthci_cmd_le_event_mask_le_cte_request_failed;
345 static int hf_bthci_cmd_le_event_mask_le_connection_iq_report;
346 static int hf_bthci_cmd_le_event_mask_le_connectionless_iq_report;
347 static int hf_bthci_cmd_le_event_mask_le_channel_selection_algorithm;
348 static int hf_bthci_cmd_le_event_mask_le_scan_request_received;
349 static int hf_bthci_cmd_le_event_mask_le_extended_advertising_set_terminated;
350 static int hf_bthci_cmd_le_event_mask_le_extended_scan_timeout;
351 static int hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_lost;
352 static int hf_bthci_cmd_le_event_mask_le_periodic_advertising_report_v1;
353 static int hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_established_v1;
354 static int hf_bthci_cmd_le_event_mask_le_extended_advertising_report;
355 static int hf_bthci_cmd_le_event_mask_le_phy_update_complete;
356 static int hf_bthci_cmd_le_event_mask_le_direct_advertising_report;
357 static int hf_bthci_cmd_le_event_mask_le_enhanced_connection_complete_v1;
358 static int hf_bthci_cmd_le_event_mask_le_generate_dhkey_complete;
359 static int hf_bthci_cmd_le_event_mask_le_read_local_p256_public_key_complete;
360 static int hf_bthci_cmd_le_event_mask_le_data_length_change;
361 static int hf_bthci_cmd_le_event_mask_le_remote_connection_parameter_request;
362 static int hf_bthci_cmd_le_event_mask_le_long_term_key_request;
363 static int hf_bthci_cmd_le_event_mask_le_read_remote_features_complete;
364 static int hf_bthci_cmd_le_event_mask_le_connection_update_complete;
365 static int hf_bthci_cmd_le_event_mask_le_advertising_report;
366 static int hf_bthci_cmd_le_event_mask_le_connection_complete;
367 static int hf_bthci_cmd_le_advts_interval_min;
368 static int hf_bthci_cmd_le_advts_interval_max;
369 static int hf_bthci_cmd_le_advts_type;
370 static int hf_bthci_cmd_le_own_address_type;
371 static int hf_bthci_cmd_le_direct_address_type;
372 static int hf_bthci_cmd_le_advts_channel_map_1;
373 static int hf_bthci_cmd_le_advts_channel_map_2;
374 static int hf_bthci_cmd_le_advts_channel_map_3;
375 static int hf_bthci_cmd_le_advts_filter_policy;
376 static int hf_bthci_cmd_le_data_length;
377 static int hf_bthci_cmd_le_advts_enable;
378 static int hf_bthci_cmd_le_scan_enable;
379 static int hf_bthci_cmd_le_filter_duplicates;
380 static int hf_bthci_cmd_le_scan_type;
381 static int hf_bthci_cmd_le_scan_interval;
382 static int hf_bthci_cmd_le_scan_window;
383 static int hf_bthci_cmd_le_scan_filter_policy;
384 static int hf_bthci_cmd_scan_filter_policy_reserved;
385 static int hf_bthci_cmd_scan_filter_policy_decision_mode;
386 static int hf_bthci_cmd_scan_filter_policy_extended;
387 static int hf_bthci_cmd_scan_filter_policy_filtered;
388 static int hf_bthci_cmd_le_initiator_filter_policy;
389 static int hf_bthci_cmd_le_peer_address_type;
390 static int hf_bthci_cmd_le_peer_identity_address_type;
391 static int hf_bthci_cmd_le_con_interval_min;
392 static int hf_bthci_cmd_le_con_interval_max;
393 static int hf_bthci_cmd_le_con_latency;
394 static int hf_bthci_cmd_le_supervision_timeout;
395 static int hf_bthci_cmd_le_min_ce_length;
396 static int hf_bthci_cmd_le_max_ce_length;
397 static int hf_bthci_cmd_le_address_type;
398 static int hf_bthci_cmd_le_channel_map;
399 static int hf_bthci_cmd_key;
400 static int hf_bthci_cmd_plaintext_data;
401 static int hf_bthci_cmd_random_number;
402 static int hf_bthci_cmd_encrypted_diversifier;
403 static int hf_bthci_cmd_le_long_term_key;
404 static int hf_bthci_cmd_rx_frequency;
405 static int hf_bthci_cmd_tx_frequency;
406 static int hf_bthci_cmd_test_data_length;
407 static int hf_bthci_cmd_test_packet_payload;
408 static int hf_bthci_cmd_parameter;
409 static int hf_response_in_frame;
410 static int hf_command_response_time_delta;
411 static int hf_pending_in_frame;
412 static int hf_command_pending_time_delta;
413 static int hf_bthci_cmd_le_tx_octets;
414 static int hf_bthci_cmd_le_tx_time;
415 static int hf_bthci_cmd_le_suggested_max_tx_octets;
416 static int hf_bthci_cmd_le_suggested_max_tx_time;
417 static int hf_bthci_cmd_le_remote_p_256_public_key;
418 static int hf_bthci_cmd_le_peer_irk;
419 static int hf_bthci_cmd_le_local_irk;
420 static int hf_bthci_cmd_le_address_resolution_enable;
421 static int hf_bthci_cmd_le_rpa_timeout;
422 static int hf_bthci_cmd_advertising_ext_interval_min;
423 static int hf_bthci_cmd_advertising_ext_interval_max;
424 static int hf_bthci_cmd_advertising_handle;
425 static int hf_bthci_cmd_advertising_properties;
426 static int hf_bthci_cmd_advertising_properties_reserved;
427 static int hf_bthci_cmd_advertising_properties_connectable;
428 static int hf_bthci_cmd_advertising_properties_scannable;
429 static int hf_bthci_cmd_advertising_properties_directed;
430 static int hf_bthci_cmd_advertising_properties_hdc_connectable_directed;
431 static int hf_bthci_cmd_advertising_properties_legacy_adv;
432 static int hf_bthci_cmd_advertising_properties_anonymous_adv;
433 static int hf_bthci_cmd_advertising_properties_incl_txpower;
434 static int hf_bthci_cmd_advertising_properties_use_decision_pdus;
435 static int hf_bthci_cmd_advertising_properties_decision_pdu_incl_adva;
436 static int hf_bthci_cmd_advertising_properties_decision_pdu_incl_adi;
437 static int hf_bthci_cmd_periodic_advertising_properties;
438 static int hf_bthci_cmd_periodic_advertising_properties_reserved;
439 static int hf_bthci_cmd_primary_advertising_phy;
440 static int hf_bthci_cmd_sec_adv_max_skip;
441 static int hf_bthci_cmd_secondary_advertising_phy;
442 static int hf_bthci_cmd_advertising_sid;
443 static int hf_bthci_cmd_scan_req_notif_en;
444 static int hf_bthci_cmd_le_adv_data_operation;
445 static int hf_bthci_cmd_le_adv_data_frag_pref;
446 static int hf_bthci_cmd_le_adv_set;
447 static int hf_bthci_cmd_le_adv_en_sets;
448 static int hf_bthci_cmd_le_adv_duration;
449 static int hf_bthci_cmd_le_adv_max_extended_events;
450 static int hf_bthci_cmd_all_phys;
451 static int hf_bthci_cmd_all_phys_tx_pref;
452 static int hf_bthci_cmd_all_phys_rx_pref;
453 static int hf_bthci_cmd_all_phys_reserved;
454 static int hf_bthci_cmd_tx_phys;
455 static int hf_bthci_cmd_rx_phys;
456 static int hf_bthci_cmd_phys_pref_le_1m;
457 static int hf_bthci_cmd_phys_pref_le_2m;
458 static int hf_bthci_cmd_phys_pref_le_coded;
459 static int hf_bthci_cmd_phys_pref_reserved;
460 static int hf_bthci_cmd_phy_options;
461 static int hf_bthci_cmd_phy_options_coding;
462 static int hf_bthci_cmd_phy_options_reserved;
463 static int hf_bthci_cmd_phy;
464 static int hf_bthci_cmd_modulation_index;
465 static int hf_bthci_cmd_le_scan_phys;
466 static int hf_bthci_cmd_le_scan_phys_reserved;
467 static int hf_bthci_cmd_le_scan_phys_le_coded;
468 static int hf_bthci_cmd_le_scan_phys_le_1m;
469 static int hf_bthci_cmd_le_scan_phy_param;
470 static int hf_bthci_cmd_le_scan_duration;
471 static int hf_bthci_cmd_le_scan_period;
472 static int hf_bthci_cmd_le_phys;
473 static int hf_bthci_cmd_le_phys_reserved;
474 static int hf_bthci_cmd_le_phys_le_coded;
475 static int hf_bthci_cmd_le_phys_le_2m;
476 static int hf_bthci_cmd_le_phys_le_1m;
477 static int hf_bthci_cmd_le_init_phy_param;
478 static int hf_bthci_cmd_le_privacy_mode;
479 static int hf_bthci_cmd_sync_filter_policy;
480 static int hf_bthci_cmd_skip;
481 static int hf_bthci_cmd_rf_tx_path_compensation_value;
482 static int hf_bthci_cmd_rf_rx_path_compensation_value;
483 static int hf_bthci_cmd_sync_handle;
484 static int hf_bthci_cmd_cte_length;
485 static int hf_bthci_cmd_cte_type;
486 static int hf_bthci_cmd_slot_durations;
487 static int hf_bthci_cmd_antenna_switching_pattern_length;
488 static int hf_bthci_cmd_antenna_switching_pattern;
489 static int hf_bthci_cmd_antenna_id;
490 static int hf_bthci_cmd_cte_count;
491 static int hf_bthci_cmd_cte_enable;
492 static int hf_bthci_cmd_iq_sampling_enable;
493 static int hf_bthci_cmd_max_sampled_ctes;
494 static int hf_bthci_cmd_cte_request_interval;
495 static int hf_bthci_cmd_reporting_enable;
496 static int hf_bthci_cmd_service_data_past;
497 static int hf_bthci_cmd_sync_mode;
498 static int hf_bthci_cmd_key_type;
499 static int hf_bthci_cmd_sca_action;
500 static int hf_bthci_cmd_sync_cte_type;
501 static int hf_bthci_cmd_sync_cte_type_no_sync_aoa;
502 static int hf_bthci_cmd_sync_cte_type_no_sync_aod_1us;
503 static int hf_bthci_cmd_sync_cte_type_no_sync_aod_2us;
504 static int hf_bthci_cmd_sync_cte_type_sync_only_with_cte;
505 static int hf_bthci_cmd_sync_cte_type_reserved;
506 static int hf_bthci_cmd_cte_types;
507 static int hf_bthci_cmd_cte_types_reserved;
508 static int hf_bthci_cmd_cte_types_aod_2us;
509 static int hf_bthci_cmd_cte_types_aod_1us;
510 static int hf_bthci_cmd_cte_types_aoa;
511 static int hf_bthci_cmd_cig_id;
512 static int hf_bthci_cmd_sdu_interval_c_to_p;
513 static int hf_bthci_cmd_sdu_interval_p_to_c;
514 static int hf_bthci_cmd_sdu_interval;
515 static int hf_bthci_cmd_peripherals_clock_accuracy;
516 static int hf_bthci_cmd_packing;
517 static int hf_bthci_cmd_framing;
518 static int hf_bthci_cmd_ft_c_to_p;
519 static int hf_bthci_cmd_ft_p_to_c;
520 static int hf_bthci_cmd_iso_interval;
521 static int hf_bthci_cmd_cis_count;
522 static int hf_bthci_cmd_cis_params;
523 static int hf_bthci_cmd_cis_id;
524 static int hf_bthci_cmd_nse;
525 static int hf_bthci_cmd_max_sdu_c_to_p;
526 static int hf_bthci_cmd_max_sdu_p_to_c;
527 static int hf_bthci_cmd_max_sdu;
528 static int hf_bthci_cmd_max_pdu_c_to_p;
529 static int hf_bthci_cmd_max_pdu_p_to_c;
530 static int hf_bthci_cmd_max_pdu;
531 static int hf_bthci_cmd_phy_c_to_p;
532 static int hf_bthci_cmd_phy_p_to_c;
533 static int hf_bthci_cmd_bn_c_to_p;
534 static int hf_bthci_cmd_bn_p_to_c;
535 static int hf_bthci_cmd_bn;
536 static int hf_bthci_cmd_max_transport_latency_c_to_p;
537 static int hf_bthci_cmd_max_transport_latency_p_to_c;
538 static int hf_bthci_cmd_max_transport_latency;
539 static int hf_bthci_cmd_rtn_c_to_p;
540 static int hf_bthci_cmd_rtn_p_to_c;
541 static int hf_bthci_cmd_rtn;
542 static int hf_bthci_cmd_cis_handle;
543 static int hf_bthci_cmd_big_handle;
544 static int hf_bthci_cmd_cis_bis_handle;
545 static int hf_bthci_cmd_num_bis;
546 static int hf_bthci_cmd_irc;
547 static int hf_bthci_cmd_pto;
548 static int hf_bthci_cmd_encryption;
549 static int hf_bthci_cmd_broadcast_code;
550 static int hf_bthci_cmd_mse;
551 static int hf_bthci_cmd_bis_index;
552 static int hf_bthci_cmd_sync_timeout;
553 static int hf_bthci_cmd_data_path_direction;
554 static int hf_bthci_cmd_data_path_id;
555 static int hf_bthci_cmd_coding_format;
556 static int hf_bthci_cmd_controller_delay;
557 static int hf_bthci_cmd_codec_config_length;
558 static int hf_bthci_cmd_codec_config;
559 static int hf_bthci_cmd_payload_type;
560 static int hf_bthci_cmd_feature_bit_number;
561 static int hf_bthci_cmd_feature_bit_number2;
562 static int hf_bthci_cmd_feature_bit_value;
563 static int hf_bthci_cmd_phy_and_coding;
564 static int hf_bthci_cmd_high_threshold;
565 static int hf_bthci_cmd_high_hysteresis;
566 static int hf_bthci_cmd_low_threshold;
567 static int hf_bthci_cmd_low_hysteresis;
568 static int hf_bthci_cmd_min_time_spent;
569 static int hf_bthci_cmd_local_reporting_enable;
570 static int hf_bthci_cmd_remote_reporting_enable;
571 static int hf_bthci_cmd_addr_change_reasons;
572 static int hf_bthci_cmd_addr_change_reasons_adv_data;
573 static int hf_bthci_cmd_addr_change_reasons_scan_rsp_data;
574 static int hf_bthci_cmd_addr_change_reasons_reserved;
575 static int hf_bthci_cmd_subrate_factor_min;
576 static int hf_bthci_cmd_subrate_factor_max;
577 static int hf_bthci_cmd_continuation_number;
578 static int hf_bthci_cmd_primary_adv_phy_options;
579 static int hf_bthci_cmd_secondary_adv_phy_options;
580 static int hf_bthci_cmd_num_subevents;
581 static int hf_bthci_cmd_subevent_interval;
582 static int hf_bthci_cmd_response_slot_delay;
583 static int hf_bthci_cmd_response_slot_spacing;
584 static int hf_bthci_cmd_num_response_slots;
585 static int hf_bthci_cmd_subevent;
586 static int hf_bthci_cmd_subevents;
587 static int hf_bthci_cmd_response_slot_start;
588 static int hf_bthci_cmd_response_slot_count;
589 static int hf_bthci_cmd_subevent_data_length;
590 static int hf_bthci_cmd_request_event;
591 static int hf_bthci_cmd_request_subevent;
592 static int hf_bthci_cmd_response_subevent;
593 static int hf_bthci_cmd_response_slot;
594 static int hf_bthci_cmd_response_data_length;
595 static int hf_bthci_cmd_triggered_clock_capture;
596 static int hf_bthci_cmd_lpo_allowed;
597 static int hf_bthci_cmd_number_of_clock_captures_to_filter;
598 static int hf_bthci_cmd_amp_controller_type;
599 static int hf_bthci_cmd_esco_loopback_mode;
600 static int hf_bthci_cmd_dm1_acl_u_mode;
601 static int hf_bthci_cmd_codec_id;
602 static int hf_bthci_cmd_company_id;
603 static int hf_bthci_cmd_vendor_codec_id;
604 static int hf_bthci_cmd_transmit_coding_format;
605 static int hf_bthci_cmd_receive_coding_format;
606 static int hf_bthci_cmd_input_coding_format;
607 static int hf_bthci_cmd_output_coding_format;
608 static int hf_bthci_cmd_transmit_codec_frame_size;
609 static int hf_bthci_cmd_receive_codec_frame_size;
610 static int hf_bthci_cmd_input_bandwidth;
611 static int hf_bthci_cmd_output_bandwidth;
612 static int hf_bthci_cmd_input_coded_data_size;
613 static int hf_bthci_cmd_output_coded_data_size;
614 static int hf_bthci_cmd_input_pcm_data_format;
615 static int hf_bthci_cmd_output_pcm_data_format;
616 static int hf_bthci_cmd_input_pcm_sample_payload_msb_position;
617 static int hf_bthci_cmd_output_pcm_sample_payload_msb_position;
618 static int hf_bthci_cmd_input_data_path;
619 static int hf_bthci_cmd_output_data_path;
620 static int hf_bthci_cmd_input_transport_unit_size;
621 static int hf_bthci_cmd_output_transport_unit_size;
622 static int hf_bthci_cmd_connectionless_peripheral_broadcast;
623 static int hf_bthci_cmd_lt_addr;
624 static int hf_bthci_cmd_interval_min;
625 static int hf_bthci_cmd_interval_max;
626 static int hf_bthci_cmd_cpb_supervision_to;
627 static int hf_bthci_cmd_connectionless_peripheral_broadcast_receive;
628 static int hf_bthci_cmd_clock_offset_32;
629 static int hf_bthci_cmd_next_cpb_clock;
630 static int hf_bthci_cmd_remote_timing_accuracy;
631 static int hf_bthci_cmd_cpb_skip;
632 static int hf_bthci_cmd_channel_map;
633 static int hf_bthci_cmd_synchronization_scan_to;
634 static int hf_bthci_cmd_c192;
635 static int hf_bthci_cmd_r192;
636 static int hf_bthci_cmd_c256;
637 static int hf_bthci_cmd_r256;
638 static int hf_bthci_mws_channel;
639 static int hf_bthci_mws_rx_center_frequency;
640 static int hf_bthci_mws_tx_center_frequency;
641 static int hf_bthci_mws_rx_channel_bandwidth;
642 static int hf_bthci_mws_tx_channel_bandwidth;
643 static int hf_bthci_mws_channel_type;
644 static int hf_bthci_external_frame_duration;
645 static int hf_bthci_external_frame_sync_assert_offset;
646 static int hf_bthci_external_frame_sync_assert_jitter;
647 static int hf_bthci_external_frame_number_of_periods;
648 static int hf_bthci_external_frame_periods;
649 static int hf_bthci_external_frame_period;
650 static int hf_bthci_external_frame_period_duration;
651 static int hf_bthci_external_frame_period_type;
652 static int hf_bthci_mws_rx_assert_offset;
653 static int hf_bthci_mws_rx_assert_jitter;
654 static int hf_bthci_mws_rx_deassert_offset;
655 static int hf_bthci_mws_rx_deassert_jitter;
656 static int hf_bthci_mws_tx_assert_offset;
657 static int hf_bthci_mws_tx_assert_jitter;
658 static int hf_bthci_mws_tx_deassert_offset;
659 static int hf_bthci_mws_tx_deassert_jitter;
660 static int hf_bthci_mws_pattern_assert_offset;
661 static int hf_bthci_mws_pattern_assert_jitter;
662 static int hf_bthci_mws_inactivity_duration_assert_offset;
663 static int hf_bthci_mws_inactivity_duration_assert_jitter;
664 static int hf_bthci_mws_scan_frequency_assert_offset;
665 static int hf_bthci_mws_scan_frequency_assert_jitter;
666 static int hf_bthci_mws_priority_assert_offset_request;
667 static int hf_bthci_mws_transport_layer;
668 static int hf_bthci_mws_to_baud_rate;
669 static int hf_bthci_mws_from_baud_rate;
670 static int hf_bthci_mws_number_of_frequencies;
671 static int hf_bthci_mws_scan_frequency_table;
672 static int hf_bthci_mws_scan_frequency_table_item;
673 static int hf_bthci_mws_scan_frequency_table_item_low;
674 static int hf_bthci_mws_scan_frequency_table_item_high;
675 static int hf_bthci_mws_pattern_index;
676 static int hf_bthci_mws_pattern_number_of_intervals;
677 static int hf_bthci_mws_patterns;
678 static int hf_bthci_mws_pattern;
679 static int hf_bthci_mws_pattern_duration;
680 static int hf_bthci_mws_pattern_type;
681 static int hf_bthci_cmd_sync_train_to;
682 static int hf_bthci_cmd_service_data;
683 static int hf_bthci_cmd_secure_connection_host_support;
684 static int hf_bthci_cmd_cpb_fragment;
685 static int hf_bthci_cmd_cpb_data_length;
686 static int hf_bthci_cmd_cpb_data;
687 static int hf_bthci_cmd_authenticated_payload_timeout;
688 static int hf_bthci_cmd_extended_inquiry_length;
689 static int hf_bthci_cmd_min_encryption_key_size;
690 static int hf_bthci_cmd_pages_requested;
691 static int hf_bthci_cmd_config_id;
692 static int hf_bthci_cmd_cs_roles;
693 static int hf_bthci_cmd_cs_roles_initiator;
694 static int hf_bthci_cmd_cs_roles_reflector;
695 static int hf_bthci_cmd_cs_roles_reserved;
696 static int hf_bthci_cmd_cs_sync_antenna_selection;
697 static int hf_bthci_cmd_num_config;
698 static int hf_bthci_cmd_max_consecutive_procedures;
699 static int hf_bthci_cmd_num_antennas_supported;
700 static int hf_bthci_cmd_max_antenna_paths_supported;
701 static int hf_bthci_cmd_cs_modes_supported;
702 static int hf_bthci_cmd_cs_modes_supported_3;
703 static int hf_bthci_cmd_cs_modes_supported_reserved;
704 static int hf_bthci_cmd_rtt_capability;
705 static int hf_bthci_cmd_rtt_capability_coarse_precision;
706 static int hf_bthci_cmd_rtt_capability_sounding_precision;
707 static int hf_bthci_cmd_rtt_capability_random_precision;
708 static int hf_bthci_cmd_rtt_capability_reserved;
709 static int hf_bthci_cmd_rtt_aa_only_n;
710 static int hf_bthci_cmd_rtt_sounding_n;
711 static int hf_bthci_cmd_rtt_random_n;
712 static int hf_bthci_cmd_nadm_sounding_capability;
713 static int hf_bthci_cmd_nadm_sounding_capability_supported;
714 static int hf_bthci_cmd_nadm_sounding_capability_reserved;
715 static int hf_bthci_cmd_nadm_random_capability;
716 static int hf_bthci_cmd_nadm_random_capability_supported;
717 static int hf_bthci_cmd_nadm_random_capability_reserved;
718 static int hf_bthci_cmd_cs_sync_phys_supported;
719 static int hf_bthci_cmd_cs_sync_phys_supported_2m;
720 static int hf_bthci_cmd_cs_sync_phys_supported_2m2bt;
721 static int hf_bthci_cmd_cs_sync_phys_supported_reserved;
722 static int hf_bthci_cmd_cs_subfeatures_supported;
723 static int hf_bthci_cmd_cs_subfeatures_companion_signal;
724 static int hf_bthci_cmd_cs_subfeatures_freq_actuation_error;
725 static int hf_bthci_cmd_cs_subfeatures_channel_selection_3c;
726 static int hf_bthci_cmd_cs_subfeatures_pbr_from_rtt;
727 static int hf_bthci_cmd_cs_subfeatures_reserved;
728 static int hf_bthci_cmd_tip1_times_supported;
729 static int hf_bthci_cmd_tip2_times_supported;
730 static int hf_bthci_cmd_tip_times_supported_10us;
731 static int hf_bthci_cmd_tip_times_supported_20us;
732 static int hf_bthci_cmd_tip_times_supported_30us;
733 static int hf_bthci_cmd_tip_times_supported_40us;
734 static int hf_bthci_cmd_tip_times_supported_50us;
735 static int hf_bthci_cmd_tip_times_supported_60us;
736 static int hf_bthci_cmd_tip_times_supported_80us;
737 static int hf_bthci_cmd_tip_times_supported_reserved;
738 static int hf_bthci_cmd_tfcs_times_supported;
739 static int hf_bthci_cmd_tfcs_times_supported_15us;
740 static int hf_bthci_cmd_tfcs_times_supported_20us;
741 static int hf_bthci_cmd_tfcs_times_supported_30us;
742 static int hf_bthci_cmd_tfcs_times_supported_40us;
743 static int hf_bthci_cmd_tfcs_times_supported_50us;
744 static int hf_bthci_cmd_tfcs_times_supported_60us;
745 static int hf_bthci_cmd_tfcs_times_supported_80us;
746 static int hf_bthci_cmd_tfcs_times_supported_100us;
747 static int hf_bthci_cmd_tfcs_times_supported_120us;
748 static int hf_bthci_cmd_tfcs_times_supported_reserved;
749 static int hf_bthci_cmd_tpm_times_supported;
750 static int hf_bthci_cmd_tpm_times_supported_10us;
751 static int hf_bthci_cmd_tpm_times_supported_20us;
752 static int hf_bthci_cmd_tpm_times_supported_reserved;
753 static int hf_bthci_cmd_tsw_time_supported;
754 static int hf_bthci_cmd_tx_snr_capability;
755 static int hf_bthci_cmd_tx_snr_capability_18dB;
756 static int hf_bthci_cmd_tx_snr_capability_21dB;
757 static int hf_bthci_cmd_tx_snr_capability_24dB;
758 static int hf_bthci_cmd_tx_snr_capability_27dB;
759 static int hf_bthci_cmd_tx_snr_capability_30dB;
760 static int hf_bthci_cmd_tx_snr_capability_reserved;
761 static int hf_bthci_cmd_fae_table;
762 static int hf_bthci_cmd_create_context;
763 static int hf_bthci_cmd_main_mode_type;
764 static int hf_bthci_cmd_sub_mode_type;
765 static int hf_bthci_cmd_min_main_mode_steps;
766 static int hf_bthci_cmd_max_main_mode_steps;
767 static int hf_bthci_cmd_main_mode_repetition;
768 static int hf_bthci_cmd_mode0_steps;
769 static int hf_bthci_cmd_cs_role;
770 static int hf_bthci_cmd_rtt_type;
771 static int hf_bthci_cmd_cs_sync_phy;
772 static int hf_bthci_cmd_channel_map_repetition;
773 static int hf_bthci_cmd_channel_selection_type;
774 static int hf_bthci_cmd_ch3c_shape;
775 static int hf_bthci_cmd_ch3c_jump;
776 static int hf_bthci_cmd_companion_signal_enable;
777 static int hf_bthci_cmd_cs_enable;
778 static int hf_bthci_cmd_max_procedure_len;
779 static int hf_bthci_cmd_min_procedure_interval;
780 static int hf_bthci_cmd_max_procedure_interval;
781 static int hf_bthci_cmd_max_procedure_count;
782 static int hf_bthci_cmd_min_subevent_len;
783 static int hf_bthci_cmd_max_subevent_len;
784 static int hf_bthci_cmd_subevent_len;
785 static int hf_bthci_cmd_tone_antenna_selection;
786 static int hf_bthci_cmd_tx_pwr_delta;
787 static int hf_bthci_cmd_preferred_peer_antenna;
788 static int hf_bthci_cmd_preferred_peer_antenna_reserved;
789 static int hf_bthci_cmd_preferred_peer_antenna_first;
790 static int hf_bthci_cmd_preferred_peer_antenna_second;
791 static int hf_bthci_cmd_preferred_peer_antenna_third;
792 static int hf_bthci_cmd_preferred_peer_antenna_fourth;
793 static int hf_bthci_cmd_snr_control_initiator;
794 static int hf_bthci_cmd_snr_control_reflector;
795 static int hf_bthci_cmd_cs_subevent_interval;
796 static int hf_bthci_cmd_max_num_subevents;
797 static int hf_bthci_cmd_tx_power_setting;
798 static int hf_bthci_cmd_t_ip1_time;
799 static int hf_bthci_cmd_t_ip2_time;
800 static int hf_bthci_cmd_t_fcs_time;
801 static int hf_bthci_cmd_t_pm_time;
802 static int hf_bthci_cmd_t_sw_time;
803 static int hf_bthci_cmd_drbg_nonce;
804 static int hf_bthci_cmd_cs_override_config;
805 static int hf_bthci_cmd_override_config_reserved;
806 static int hf_bthci_cmd_override_config_stable_phase_test;
807 static int hf_bthci_cmd_override_config_cs_sync_data;
808 static int hf_bthci_cmd_override_config_ss_marker_value;
809 static int hf_bthci_cmd_override_config_ss_marker_position;
810 static int hf_bthci_cmd_override_config_cs_sync_aa;
811 static int hf_bthci_cmd_override_config_tone_ant_permutation;
812 static int hf_bthci_cmd_override_config_tpm_tone_ext;
813 static int hf_bthci_cmd_override_config_main_mode_steps;
814 static int hf_bthci_cmd_override_config_channel_list;
815 static int hf_bthci_cmd_cs_override_param_length;
816 static int hf_bthci_cmd_cs_override_param_data;
817 static int hf_bthci_cmd_adv_monitoring_enable;
818 static int hf_bthci_cmd_adv_decision_flags;
819 static int hf_bthci_cmd_adv_decision_flags_resolvable_tag;
820 static int hf_bthci_cmd_adv_decision_flags_reserved;
821 static int hf_bthci_cmd_adv_decision_data;
822 static int hf_bthci_cmd_num_tests;
823 static int hf_bthci_cmd_adv_test_flags;
824 static int hf_bthci_cmd_adv_test_flags_start_group;
825 static int hf_bthci_cmd_adv_test_flags_data_contains_field_check_pass;
826 static int hf_bthci_cmd_adv_test_flags_data_contains_field_check_fail;
827 static int hf_bthci_cmd_adv_test_flags_data_not_contain_field;
828 static int hf_bthci_cmd_adv_test_flags_reserved;
829 static int hf_bthci_cmd_adv_test_field;
830 static int hf_bthci_cmd_adv_test_params;
831 static int hf_bthci_cmd_rssi_threshold_low;
832 static int hf_bthci_cmd_rssi_threshold_high;
833 static int hf_bthci_cmd_rssi_threshold_timeout;
834 static int hf_bthci_cmd_frame_space_min;
835 static int hf_bthci_cmd_frame_space_max;
836 static int hf_bthci_cmd_spacing_types;
837 static int hf_bthci_cmd_spacing_types_tifs_acl_cp;
838 static int hf_bthci_cmd_spacing_types_tifs_acl_pc;
839 static int hf_bthci_cmd_spacing_types_tmces;
840 static int hf_bthci_cmd_spacing_types_tifs_cis;
841 static int hf_bthci_cmd_spacing_types_tmss_cis;
842 static int hf_bthci_cmd_spacing_types_reserved;
844 static int * const hfx_bthci_cmd_event_mask_page_2[] = {
845 &hf_bthci_cmd_evt_mask2_reserved,
846 &hf_bthci_cmd_evt_mask2_25,
847 &hf_bthci_cmd_evt_mask2_24,
848 &hf_bthci_cmd_evt_mask2_23,
849 &hf_bthci_cmd_evt_mask2_22,
850 &hf_bthci_cmd_evt_mask2_21,
851 &hf_bthci_cmd_evt_mask2_20,
852 &hf_bthci_cmd_evt_mask2_19,
853 &hf_bthci_cmd_evt_mask2_18,
854 &hf_bthci_cmd_evt_mask2_17,
855 &hf_bthci_cmd_evt_mask2_16,
856 &hf_bthci_cmd_evt_mask2_15,
857 &hf_bthci_cmd_evt_mask2_14,
858 &hf_bthci_cmd_evt_mask2_13,
859 &hf_bthci_cmd_evt_mask2_12,
860 &hf_bthci_cmd_evt_mask2_11,
861 &hf_bthci_cmd_evt_mask2_10,
862 &hf_bthci_cmd_evt_mask2_09,
863 &hf_bthci_cmd_evt_mask2_08,
864 &hf_bthci_cmd_evt_mask2_07,
865 &hf_bthci_cmd_evt_mask2_06,
866 &hf_bthci_cmd_evt_mask2_05,
867 &hf_bthci_cmd_evt_mask2_04,
868 &hf_bthci_cmd_evt_mask2_03,
869 &hf_bthci_cmd_evt_mask2_02,
870 &hf_bthci_cmd_evt_mask2_01,
871 &hf_bthci_cmd_evt_mask2_00,
872 NULL
875 static int * const hfx_bthci_cmd_le_event_mask[] = {
876 &hf_bthci_cmd_le_event_mask_le_reserved,
877 &hf_bthci_cmd_le_event_mask_le_frame_space_update_complete,
878 &hf_bthci_cmd_le_event_mask_le_monitored_advertisers_report,
879 &hf_bthci_cmd_le_event_mask_le_cs_test_end_complete,
880 &hf_bthci_cmd_le_event_mask_le_cs_subevent_result_continue,
881 &hf_bthci_cmd_le_event_mask_le_cs_subevent_result,
882 &hf_bthci_cmd_le_event_mask_le_cs_procedure_enable_complete,
883 &hf_bthci_cmd_le_event_mask_le_cs_config_complete,
884 &hf_bthci_cmd_le_event_mask_le_cs_security_enable_complete,
885 &hf_bthci_cmd_le_event_mask_le_cs_read_remote_fae_table_complete,
886 &hf_bthci_cmd_le_event_mask_le_cs_read_remote_supported_capabilities_complete,
887 &hf_bthci_cmd_le_event_mask_le_read_all_remote_features_complete,
888 &hf_bthci_cmd_le_event_mask_le_cis_established_v2,
889 &hf_bthci_cmd_le_event_mask_le_enhanced_connection_complete_v2,
890 &hf_bthci_cmd_le_event_mask_le_periodic_advertising_response_report,
891 &hf_bthci_cmd_le_event_mask_le_periodic_advertising_subevent_data_request,
892 &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_transfer_received_v2,
893 &hf_bthci_cmd_le_event_mask_le_periodic_advertising_report_v2,
894 &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_established_v2,
895 &hf_bthci_cmd_le_event_mask_le_subrate_changed,
896 &hf_bthci_cmd_le_event_mask_le_biginfo_advertising_report,
897 &hf_bthci_cmd_le_event_mask_le_transmit_power_reporting,
898 &hf_bthci_cmd_le_event_mask_le_path_loss_threshold,
899 &hf_bthci_cmd_le_event_mask_le_request_peer_sca_complete,
900 &hf_bthci_cmd_le_event_mask_le_big_sync_lost,
901 &hf_bthci_cmd_le_event_mask_le_big_sync_established,
902 &hf_bthci_cmd_le_event_mask_le_terminate_big_complete,
903 &hf_bthci_cmd_le_event_mask_le_create_big_complete,
904 &hf_bthci_cmd_le_event_mask_le_cis_request,
905 &hf_bthci_cmd_le_event_mask_le_cis_established_v1,
906 &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_transfer_received_v1,
907 &hf_bthci_cmd_le_event_mask_le_cte_request_failed,
908 &hf_bthci_cmd_le_event_mask_le_connection_iq_report,
909 &hf_bthci_cmd_le_event_mask_le_connectionless_iq_report,
910 &hf_bthci_cmd_le_event_mask_le_channel_selection_algorithm,
911 &hf_bthci_cmd_le_event_mask_le_scan_request_received,
912 &hf_bthci_cmd_le_event_mask_le_extended_advertising_set_terminated,
913 &hf_bthci_cmd_le_event_mask_le_extended_scan_timeout,
914 &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_lost,
915 &hf_bthci_cmd_le_event_mask_le_periodic_advertising_report_v1,
916 &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_established_v1,
917 &hf_bthci_cmd_le_event_mask_le_extended_advertising_report,
918 &hf_bthci_cmd_le_event_mask_le_phy_update_complete,
919 &hf_bthci_cmd_le_event_mask_le_direct_advertising_report ,
920 &hf_bthci_cmd_le_event_mask_le_enhanced_connection_complete_v1,
921 &hf_bthci_cmd_le_event_mask_le_generate_dhkey_complete,
922 &hf_bthci_cmd_le_event_mask_le_read_local_p256_public_key_complete,
923 &hf_bthci_cmd_le_event_mask_le_data_length_change,
924 &hf_bthci_cmd_le_event_mask_le_remote_connection_parameter_request,
925 &hf_bthci_cmd_le_event_mask_le_long_term_key_request,
926 &hf_bthci_cmd_le_event_mask_le_read_remote_features_complete,
927 &hf_bthci_cmd_le_event_mask_le_connection_update_complete,
928 &hf_bthci_cmd_le_event_mask_le_advertising_report,
929 &hf_bthci_cmd_le_event_mask_le_connection_complete,
930 NULL
933 static int * const hfx_bthci_cmd_adv_properties[] = {
934 &hf_bthci_cmd_advertising_properties_reserved,
935 &hf_bthci_cmd_advertising_properties_decision_pdu_incl_adi,
936 &hf_bthci_cmd_advertising_properties_decision_pdu_incl_adva,
937 &hf_bthci_cmd_advertising_properties_use_decision_pdus,
938 &hf_bthci_cmd_advertising_properties_incl_txpower,
939 &hf_bthci_cmd_advertising_properties_anonymous_adv,
940 &hf_bthci_cmd_advertising_properties_legacy_adv,
941 &hf_bthci_cmd_advertising_properties_hdc_connectable_directed,
942 &hf_bthci_cmd_advertising_properties_directed,
943 &hf_bthci_cmd_advertising_properties_scannable,
944 &hf_bthci_cmd_advertising_properties_connectable,
945 NULL
948 static int * const hfx_bthci_cmd_periodic_adv_properties[] = {
949 &hf_bthci_cmd_periodic_advertising_properties_reserved,
950 &hf_bthci_cmd_advertising_properties_incl_txpower,
951 NULL
954 static int * const hfx_bthci_cmd_scan_filter_policy[] = {
955 &hf_bthci_cmd_scan_filter_policy_reserved,
956 &hf_bthci_cmd_scan_filter_policy_decision_mode,
957 &hf_bthci_cmd_scan_filter_policy_extended,
958 &hf_bthci_cmd_scan_filter_policy_filtered,
959 NULL
963 static int * const hfx_btcmd_all_phys[] = {
964 &hf_bthci_cmd_all_phys_reserved,
965 &hf_bthci_cmd_all_phys_rx_pref,
966 &hf_bthci_cmd_all_phys_tx_pref,
967 NULL
970 static int * const hfx_btcmd_phys_pref[] = {
971 &hf_bthci_cmd_phys_pref_reserved,
972 &hf_bthci_cmd_phys_pref_le_coded,
973 &hf_bthci_cmd_phys_pref_le_2m,
974 &hf_bthci_cmd_phys_pref_le_1m,
975 NULL
978 static int * const hfx_btcmd_phy_options[] = {
979 &hf_bthci_cmd_phy_options_reserved,
980 &hf_bthci_cmd_phy_options_coding,
981 NULL
984 static int * const hfx_btcmd_le_scan_phys[] = {
985 &hf_bthci_cmd_le_scan_phys_reserved,
986 &hf_bthci_cmd_le_scan_phys_le_coded,
987 &hf_bthci_cmd_le_scan_phys_le_1m,
988 NULL
991 static int * const hfx_btcmd_le_phys[] = {
992 &hf_bthci_cmd_le_phys_reserved,
993 &hf_bthci_cmd_le_phys_le_coded,
994 &hf_bthci_cmd_le_phys_le_2m,
995 &hf_bthci_cmd_le_phys_le_1m,
996 NULL
999 static int * const hfx_btcmd_sync_cte_type[] = {
1000 &hf_bthci_cmd_sync_cte_type_reserved,
1001 &hf_bthci_cmd_sync_cte_type_sync_only_with_cte,
1002 &hf_bthci_cmd_sync_cte_type_no_sync_aod_2us,
1003 &hf_bthci_cmd_sync_cte_type_no_sync_aod_1us,
1004 &hf_bthci_cmd_sync_cte_type_no_sync_aoa,
1005 NULL
1008 static int * const hfx_btcmd_cte_types[] = {
1009 &hf_bthci_cmd_cte_types_reserved,
1010 &hf_bthci_cmd_cte_types_aod_2us,
1011 &hf_bthci_cmd_cte_types_aod_1us,
1012 &hf_bthci_cmd_cte_types_aoa,
1013 NULL
1016 static int * const hfx_btcmd_addr_change_reasons[] = {
1017 &hf_bthci_cmd_addr_change_reasons_reserved,
1018 &hf_bthci_cmd_addr_change_reasons_scan_rsp_data,
1019 &hf_bthci_cmd_addr_change_reasons_adv_data,
1020 NULL
1023 static int * const hfx_bthci_cmd_sco_packet_type[] = {
1024 &hf_bthci_cmd_sco_packet_type_reserved,
1025 &hf_bthci_cmd_sco_packet_type_3ev5,
1026 &hf_bthci_cmd_sco_packet_type_2ev5,
1027 &hf_bthci_cmd_sco_packet_type_3ev3,
1028 &hf_bthci_cmd_sco_packet_type_2ev3,
1029 &hf_bthci_cmd_sco_packet_type_ev5,
1030 &hf_bthci_cmd_sco_packet_type_ev4,
1031 &hf_bthci_cmd_sco_packet_type_ev3,
1032 &hf_bthci_cmd_sco_packet_type_hv3,
1033 &hf_bthci_cmd_sco_packet_type_hv2,
1034 &hf_bthci_cmd_sco_packet_type_hv1,
1035 NULL
1038 static int * const hfx_bthci_cmd_packet_type[] = {
1039 &hf_bthci_cmd_packet_type_dh5,
1040 &hf_bthci_cmd_packet_type_dm5,
1041 &hf_bthci_cmd_packet_type_3dh5,
1042 &hf_bthci_cmd_packet_type_2dh5,
1043 &hf_bthci_cmd_packet_type_dh3,
1044 &hf_bthci_cmd_packet_type_dm3,
1045 &hf_bthci_cmd_packet_type_3dh3,
1046 &hf_bthci_cmd_packet_type_2dh3,
1047 &hf_bthci_cmd_packet_type_reserved_5_7,
1048 &hf_bthci_cmd_packet_type_dh1,
1049 &hf_bthci_cmd_packet_type_dm1,
1050 &hf_bthci_cmd_packet_type_3dh1,
1051 &hf_bthci_cmd_packet_type_2dh1,
1052 &hf_bthci_cmd_packet_type_reserved_0,
1053 NULL
1056 static int * const hfx_bthci_cmd_preferred_peer_antenna[] = {
1057 &hf_bthci_cmd_preferred_peer_antenna_first,
1058 &hf_bthci_cmd_preferred_peer_antenna_second,
1059 &hf_bthci_cmd_preferred_peer_antenna_third,
1060 &hf_bthci_cmd_preferred_peer_antenna_fourth,
1061 &hf_bthci_cmd_preferred_peer_antenna_reserved,
1062 NULL
1065 static int * const hfx_bthci_cmd_cs_roles[] = {
1066 &hf_bthci_cmd_cs_roles_reserved,
1067 &hf_bthci_cmd_cs_roles_reflector,
1068 &hf_bthci_cmd_cs_roles_initiator,
1069 NULL
1072 static int * const hfx_bthci_cmd_cs_modes_supported[] = {
1073 &hf_bthci_cmd_cs_modes_supported_reserved,
1074 &hf_bthci_cmd_cs_modes_supported_3,
1075 NULL
1078 static int * const hfx_bthci_cmd_rtt_capability[] = {
1079 &hf_bthci_cmd_rtt_capability_reserved,
1080 &hf_bthci_cmd_rtt_capability_random_precision,
1081 &hf_bthci_cmd_rtt_capability_sounding_precision,
1082 &hf_bthci_cmd_rtt_capability_coarse_precision,
1083 NULL
1086 static int * const hfx_bthci_cmd_nadm_sounding_capability[] = {
1087 &hf_bthci_cmd_nadm_sounding_capability_reserved,
1088 &hf_bthci_cmd_nadm_sounding_capability_supported,
1089 NULL
1092 static int * const hfx_bthci_cmd_nadm_random_capability[] = {
1093 &hf_bthci_cmd_nadm_random_capability_reserved,
1094 &hf_bthci_cmd_nadm_random_capability_supported,
1095 NULL
1098 static int * const hfx_bthci_cmd_cs_sync_phys_supported[] = {
1099 &hf_bthci_cmd_cs_sync_phys_supported_reserved,
1100 &hf_bthci_cmd_cs_sync_phys_supported_2m2bt,
1101 &hf_bthci_cmd_cs_sync_phys_supported_2m,
1102 NULL
1105 static int * const hfx_bthci_cmd_cs_subfeatures[] = {
1106 &hf_bthci_cmd_cs_subfeatures_reserved,
1107 &hf_bthci_cmd_cs_subfeatures_pbr_from_rtt,
1108 &hf_bthci_cmd_cs_subfeatures_channel_selection_3c,
1109 &hf_bthci_cmd_cs_subfeatures_freq_actuation_error,
1110 &hf_bthci_cmd_cs_subfeatures_companion_signal,
1111 NULL
1114 static int * const hfx_bthci_cmd_tip_times_supported[] = {
1115 &hf_bthci_cmd_tip_times_supported_reserved,
1116 &hf_bthci_cmd_tip_times_supported_80us,
1117 &hf_bthci_cmd_tip_times_supported_60us,
1118 &hf_bthci_cmd_tip_times_supported_50us,
1119 &hf_bthci_cmd_tip_times_supported_40us,
1120 &hf_bthci_cmd_tip_times_supported_30us,
1121 &hf_bthci_cmd_tip_times_supported_20us,
1122 &hf_bthci_cmd_tip_times_supported_10us,
1123 NULL
1126 static int * const hfx_bthci_cmd_tfcs_times_supported[] = {
1127 &hf_bthci_cmd_tfcs_times_supported_reserved,
1128 &hf_bthci_cmd_tfcs_times_supported_120us,
1129 &hf_bthci_cmd_tfcs_times_supported_100us,
1130 &hf_bthci_cmd_tfcs_times_supported_80us,
1131 &hf_bthci_cmd_tfcs_times_supported_60us,
1132 &hf_bthci_cmd_tfcs_times_supported_50us,
1133 &hf_bthci_cmd_tfcs_times_supported_40us,
1134 &hf_bthci_cmd_tfcs_times_supported_30us,
1135 &hf_bthci_cmd_tfcs_times_supported_20us,
1136 &hf_bthci_cmd_tfcs_times_supported_15us,
1137 NULL
1140 static int * const hfx_bthci_cmd_tpm_times_supported[] = {
1141 &hf_bthci_cmd_tpm_times_supported_reserved,
1142 &hf_bthci_cmd_tpm_times_supported_20us,
1143 &hf_bthci_cmd_tpm_times_supported_10us,
1144 NULL
1147 static int * const hfx_bthci_cmd_tx_snr_capability[] = {
1148 &hf_bthci_cmd_tx_snr_capability_reserved,
1149 &hf_bthci_cmd_tx_snr_capability_30dB,
1150 &hf_bthci_cmd_tx_snr_capability_27dB,
1151 &hf_bthci_cmd_tx_snr_capability_24dB,
1152 &hf_bthci_cmd_tx_snr_capability_21dB,
1153 &hf_bthci_cmd_tx_snr_capability_18dB,
1154 NULL
1157 static int * const hfx_bthci_cmd_adv_decision_flags[] = {
1158 &hf_bthci_cmd_adv_decision_flags_reserved,
1159 &hf_bthci_cmd_adv_decision_flags_resolvable_tag,
1160 NULL
1163 static int * const hfx_bthci_cmd_adv_test_flags[] = {
1164 &hf_bthci_cmd_adv_test_flags_reserved,
1165 &hf_bthci_cmd_adv_test_flags_data_not_contain_field,
1166 &hf_bthci_cmd_adv_test_flags_data_contains_field_check_fail,
1167 &hf_bthci_cmd_adv_test_flags_data_contains_field_check_pass,
1168 &hf_bthci_cmd_adv_test_flags_start_group,
1169 NULL
1172 static int * const hfx_bthci_cmd_spacing_types[] = {
1173 &hf_bthci_cmd_spacing_types_reserved,
1174 &hf_bthci_cmd_spacing_types_tmss_cis,
1175 &hf_bthci_cmd_spacing_types_tifs_cis,
1176 &hf_bthci_cmd_spacing_types_tmces,
1177 &hf_bthci_cmd_spacing_types_tifs_acl_pc,
1178 &hf_bthci_cmd_spacing_types_tifs_acl_cp,
1179 NULL
1182 static int * const hfx_bthci_cmd_override_config[] = {
1183 &hf_bthci_cmd_override_config_reserved,
1184 &hf_bthci_cmd_override_config_stable_phase_test,
1185 &hf_bthci_cmd_override_config_cs_sync_data,
1186 &hf_bthci_cmd_override_config_ss_marker_value,
1187 &hf_bthci_cmd_override_config_ss_marker_position,
1188 &hf_bthci_cmd_override_config_cs_sync_aa,
1189 &hf_bthci_cmd_override_config_tone_ant_permutation,
1190 &hf_bthci_cmd_override_config_tpm_tone_ext,
1191 &hf_bthci_cmd_override_config_main_mode_steps,
1192 &hf_bthci_cmd_override_config_channel_list,
1193 NULL
1196 static expert_field ei_command_undecoded;
1197 static expert_field ei_command_unknown_command;
1198 static expert_field ei_command_parameter_unexpected;
1200 static dissector_table_t vendor_dissector_table;
1201 static dissector_table_t hci_vendor_table;
1203 /* Initialize the subtree pointers */
1204 static int ett_bthci_cmd;
1205 static int ett_opcode;
1206 static int ett_cod_mask;
1207 static int ett_flow_spec_subtree;
1208 static int ett_le_channel_map;
1209 static int ett_event_mask_page_2;
1210 static int ett_le_event_mask;
1211 static int ett_adv_properties;
1212 static int ett_adv_sets;
1213 static int ett_phys_flags;
1214 static int ett_phy_param;
1215 static int ett_filter_policy;
1216 static int ett_sync_cte_type;
1217 static int ett_coding_format;
1218 static int ett_packet_type;
1219 static int ett_sco_packet_type;
1220 static int ett_periods;
1221 static int ett_period;
1222 static int ett_table;
1223 static int ett_table_item;
1224 static int ett_patterns;
1225 static int ett_pattern;
1226 static int ett_cis_params;
1227 static int ett_addr_change_reasons;
1228 static int ett_adv_subevents;
1229 static int ett_pref_antenna;
1230 static int ett_cs_roles;
1231 static int ett_cs_modes;
1232 static int ett_cs_capability;
1233 static int ett_cs_times;
1234 static int ett_adv_test_flags;
1235 static int ett_override_config;
1236 static int ett_spacing_types;
1238 static int proto_btcommon;
1239 static int hf_btcommon_eir_ad_entry;
1240 static int hf_btcommon_eir_ad_advertising_data;
1241 static int hf_btcommon_eir_ad_extended_inquiry_response_data;
1242 static int hf_btcommon_eir_ad_unused;
1243 static int hf_btcommon_eir_ad_data;
1244 static int hf_btcommon_eir_ad_length;
1245 static int hf_btcommon_eir_ad_type;
1246 static int hf_btcommon_eir_ad_company_id;
1247 static int hf_btcommon_eir_ad_flags_reserved;
1248 static int hf_btcommon_eir_ad_flags_le_bredr_support_host;
1249 static int hf_btcommon_eir_ad_flags_le_bredr_support_controller;
1250 static int hf_btcommon_eir_ad_flags_bredr_not_support;
1251 static int hf_btcommon_eir_ad_flags_le_general_discoverable_mode;
1252 static int hf_btcommon_eir_ad_flags_le_limited_discoverable_mode;
1253 static int hf_btcommon_eir_ad_uuid_16;
1254 static int hf_btcommon_eir_ad_uuid_32;
1255 static int hf_btcommon_eir_ad_uuid_128;
1256 static int hf_btcommon_eir_ad_custom_uuid_32;
1257 static int hf_btcommon_eir_ad_custom_uuid_128;
1258 static int hf_btcommon_eir_ad_name;
1259 static int hf_btcommon_eir_ad_tx_power;
1260 static int hf_btcommon_eir_ad_ssp_oob_length;
1261 static int hf_btcommon_eir_ad_bd_addr;
1262 static int hf_btcommon_eir_ad_le_bd_addr_reserved;
1263 static int hf_btcommon_eir_ad_le_bd_addr_type;
1264 static int hf_btcommon_eir_ad_le_role;
1265 static int hf_btcommon_eir_ad_service_data;
1266 static int hf_btcommon_eir_ad_did_vendor_id;
1267 static int hf_btcommon_eir_ad_did_vendor_id_bluetooth_sig;
1268 static int hf_btcommon_eir_ad_did_vendor_id_usb_forum;
1269 static int hf_btcommon_eir_ad_did_product_id;
1270 static int hf_btcommon_eir_ad_did_version;
1271 static int hf_btcommon_eir_ad_did_vendor_id_source;
1272 static int hf_btcommon_eir_ad_3ds_association_notification;
1273 static int hf_btcommon_eir_ad_3ds_battery_level_reporting;
1274 static int hf_btcommon_eir_ad_3ds_send_battery_level_report_on_startup;
1275 static int hf_btcommon_eir_ad_3ds_reserved;
1276 static int hf_btcommon_eir_ad_3ds_factory_test_mode;
1277 static int hf_btcommon_eir_ad_3ds_path_loss_threshold;
1278 static int hf_btcommon_eir_ad_3ds_legacy_fixed;
1279 static int hf_btcommon_eir_ad_3ds_legacy_3d_capable_tv;
1280 static int hf_btcommon_eir_ad_3ds_legacy_ignored_1_3;
1281 static int hf_btcommon_eir_ad_3ds_legacy_fixed_4;
1282 static int hf_btcommon_eir_ad_3ds_legacy_ignored_5;
1283 static int hf_btcommon_eir_ad_3ds_legacy_fixed_6;
1284 static int hf_btcommon_eir_ad_3ds_legacy_test_mode;
1285 static int hf_btcommon_eir_ad_3ds_legacy_path_loss_threshold;
1286 static int hf_btcommon_eir_ad_advertising_interval;
1287 static int hf_btcommon_eir_ad_appearance;
1288 static int hf_btcommon_eir_ad_hash_c;
1289 static int hf_btcommon_eir_ad_randomizer_r;
1290 static int hf_btcommon_eir_ad_le_secure_confirmation_value;
1291 static int hf_btcommon_eir_ad_le_secure_random_value;
1292 static int hf_btcommon_eir_ad_oob_flags_data_present;
1293 static int hf_btcommon_eir_ad_oob_flags_le_supported_host;
1294 static int hf_btcommon_eir_ad_oob_flags_le_bredr_support;
1295 static int hf_btcommon_eir_ad_oob_flags_address_type;
1296 static int hf_btcommon_eir_ad_oob_flags_reserved;
1297 static int hf_btcommon_eir_ad_connection_interval_min;
1298 static int hf_btcommon_eir_ad_connection_interval_max;
1299 static int hf_btcommon_eir_ad_uri;
1300 static int hf_btcommon_eir_ad_ips_flags;
1301 static int hf_btcommon_eir_ad_ips_flags_reserved;
1302 static int hf_btcommon_eir_ad_ips_flags_location_name;
1303 static int hf_btcommon_eir_ad_ips_flags_uncertainty;
1304 static int hf_btcommon_eir_ad_ips_flags_floor_number;
1305 static int hf_btcommon_eir_ad_ips_flags_altitude;
1306 static int hf_btcommon_eir_ad_ips_flags_tx_power;
1307 static int hf_btcommon_eir_ad_ips_flags_coordinate_system;
1308 static int hf_btcommon_eir_ad_ips_flags_coordinates;
1309 static int hf_btcommon_eir_ad_ips_uncertainty;
1310 static int hf_btcommon_eir_ad_ips_uncertainty_reserved;
1311 static int hf_btcommon_eir_ad_ips_uncertainty_precision;
1312 static int hf_btcommon_eir_ad_ips_uncertainty_update_time;
1313 static int hf_btcommon_eir_ad_ips_uncertainty_stationary;
1314 static int hf_btcommon_eir_ad_ips_latitude;
1315 static int hf_btcommon_eir_ad_ips_longitude;
1316 static int hf_btcommon_eir_ad_ips_local_north_coordinate;
1317 static int hf_btcommon_eir_ad_ips_local_east_coordinate;
1318 static int hf_btcommon_eir_ad_ips_tx_power_level;
1319 static int hf_btcommon_eir_ad_ips_floor_number;
1320 static int hf_btcommon_eir_ad_ips_altitude;
1321 static int hf_btcommon_eir_ad_tds_organization_id;
1322 static int hf_btcommon_eir_ad_tds_flags;
1323 static int hf_btcommon_eir_ad_tds_flags_reserved;
1324 static int hf_btcommon_eir_ad_tds_flags_transport_state;
1325 static int hf_btcommon_eir_ad_tds_flags_transport_data_incomplete;
1326 static int hf_btcommon_eir_ad_tds_flags_role;
1327 static int hf_btcommon_eir_ad_tds_data_length;
1328 static int hf_btcommon_eir_ad_tds_data;
1329 static int hf_btcommon_eir_ad_le_features;
1330 static int hf_btcommon_eir_ad_le_channel_map;
1331 static int hf_btcommon_eir_ad_instant;
1332 static int hf_btcommon_eir_ad_le_features_encryption;
1333 static int hf_btcommon_eir_ad_le_features_connection_parameters_request_procedure;
1334 static int hf_btcommon_eir_ad_le_features_extended_reject_indication;
1335 static int hf_btcommon_eir_ad_le_features_peripheral_initiated_features_exchange;
1336 static int hf_btcommon_eir_ad_le_features_ping;
1337 static int hf_btcommon_eir_ad_le_features_data_packet_length_extension;
1338 static int hf_btcommon_eir_ad_le_features_ll_privacy;
1339 static int hf_btcommon_eir_ad_le_features_extended_scanner_filter_policies;
1340 static int hf_btcommon_eir_ad_le_features_2m_phy;
1341 static int hf_btcommon_eir_ad_le_features_stable_modulation_index_tx;
1342 static int hf_btcommon_eir_ad_le_features_stable_modulation_index_rx;
1343 static int hf_btcommon_eir_ad_le_features_coded_phy;
1344 static int hf_btcommon_eir_ad_le_features_extended_advertising;
1345 static int hf_btcommon_eir_ad_le_features_periodic_advertising;
1346 static int hf_btcommon_eir_ad_le_features_channel_selection_algorithm_2;
1347 static int hf_btcommon_eir_ad_le_features_power_class_1;
1348 static int hf_btcommon_eir_ad_le_features_minimum_number_of_used_channels_procedure;
1349 static int hf_btcommon_eir_ad_le_features_reserved_1_7;
1350 static int hf_btcommon_eir_ad_le_features_reserved;
1351 static int hf_btcommon_eir_ad_biginfo_big_offset;
1352 static int hf_btcommon_eir_ad_biginfo_big_offset_units;
1353 static int hf_btcommon_eir_ad_biginfo_iso_interval;
1354 static int hf_btcommon_eir_ad_biginfo_num_bis;
1355 static int hf_btcommon_eir_ad_biginfo_nse;
1356 static int hf_btcommon_eir_ad_biginfo_bn;
1357 static int hf_btcommon_eir_ad_biginfo_sub_interval;
1358 static int hf_btcommon_eir_ad_biginfo_pto;
1359 static int hf_btcommon_eir_ad_biginfo_bis_spacing;
1360 static int hf_btcommon_eir_ad_biginfo_irc;
1361 static int hf_btcommon_eir_ad_biginfo_max_pdu;
1362 static int hf_btcommon_eir_ad_biginfo_rfu;
1363 static int hf_btcommon_eir_ad_biginfo_seed_access_address;
1364 static int hf_btcommon_eir_ad_biginfo_sdu_interval;
1365 static int hf_btcommon_eir_ad_biginfo_max_sdu;
1366 static int hf_btcommon_eir_ad_biginfo_base_crc_init;
1367 static int hf_btcommon_eir_ad_biginfo_channel_map;
1368 static int hf_btcommon_eir_ad_biginfo_phy;
1369 static int hf_btcommon_eir_ad_biginfo_bis_payload_count;
1370 static int hf_btcommon_eir_ad_biginfo_framing;
1371 static int hf_btcommon_eir_ad_biginfo_giv;
1372 static int hf_btcommon_eir_ad_biginfo_gskd;
1373 static int hf_btcommon_eir_ad_biginfo_big_control_access_address;
1374 static int hf_btcommon_eir_ad_biginfo_bis_access_address;
1375 static int hf_btcommon_eir_ad_broadcast_code;
1376 static int hf_btcommon_eir_ad_rsi;
1377 static int hf_btcommon_eir_ad_broadcast_name;
1379 static int hf_btcommon_cod_class_of_device;
1380 static int hf_btcommon_cod_format_type;
1381 static int hf_btcommon_cod_major_service_class_information;
1382 static int hf_btcommon_cod_major_service_class_telephony;
1383 static int hf_btcommon_cod_major_service_class_audio;
1384 static int hf_btcommon_cod_major_service_class_object_transfer;
1385 static int hf_btcommon_cod_major_service_class_capturing;
1386 static int hf_btcommon_cod_major_service_class_rendering;
1387 static int hf_btcommon_cod_major_service_class_networking;
1388 static int hf_btcommon_cod_major_service_class_positioning;
1389 static int hf_btcommon_cod_major_service_class_reserved;
1390 static int hf_btcommon_cod_major_service_class_le_audio;
1391 static int hf_btcommon_cod_major_service_class_limited_discoverable_mode;
1392 static int hf_btcommon_cod_major_device_class;
1393 static int hf_btcommon_cod_minor_device_class_computer;
1394 static int hf_btcommon_cod_minor_device_class_phone;
1395 static int hf_btcommon_cod_minor_device_class_lan_net_load_factor;
1396 static int hf_btcommon_cod_minor_device_class_lan_net_type;
1397 static int hf_btcommon_cod_minor_device_class_audio_video;
1398 static int hf_btcommon_cod_minor_device_class_peripheral_class;
1399 static int hf_btcommon_cod_minor_device_class_peripheral_type;
1400 static int hf_btcommon_cod_minor_device_class_imaging_class_printer;
1401 static int hf_btcommon_cod_minor_device_class_imaging_class_scanner;
1402 static int hf_btcommon_cod_minor_device_class_imaging_class_camera;
1403 static int hf_btcommon_cod_minor_device_class_imaging_class_display;
1404 static int hf_btcommon_cod_minor_device_class_imaging_type;
1405 static int hf_btcommon_cod_minor_device_class_wearable;
1406 static int hf_btcommon_cod_minor_device_class_toy;
1407 static int hf_btcommon_cod_minor_device_class_health;
1408 static int hf_btcommon_cod_minor_device_class_unknown;
1409 static int hf_btcommon_le_channel_map_0;
1410 static int hf_btcommon_le_channel_map_1;
1411 static int hf_btcommon_le_channel_map_2;
1412 static int hf_btcommon_le_channel_map_3;
1413 static int hf_btcommon_le_channel_map_4;
1414 static int hf_btcommon_le_channel_map_5;
1415 static int hf_btcommon_le_channel_map_6;
1416 static int hf_btcommon_le_channel_map_7;
1417 static int hf_btcommon_le_channel_map_8;
1418 static int hf_btcommon_le_channel_map_9;
1419 static int hf_btcommon_le_channel_map_10;
1420 static int hf_btcommon_le_channel_map_11;
1421 static int hf_btcommon_le_channel_map_12;
1422 static int hf_btcommon_le_channel_map_13;
1423 static int hf_btcommon_le_channel_map_14;
1424 static int hf_btcommon_le_channel_map_15;
1425 static int hf_btcommon_le_channel_map_16;
1426 static int hf_btcommon_le_channel_map_17;
1427 static int hf_btcommon_le_channel_map_18;
1428 static int hf_btcommon_le_channel_map_19;
1429 static int hf_btcommon_le_channel_map_20;
1430 static int hf_btcommon_le_channel_map_21;
1431 static int hf_btcommon_le_channel_map_22;
1432 static int hf_btcommon_le_channel_map_23;
1433 static int hf_btcommon_le_channel_map_24;
1434 static int hf_btcommon_le_channel_map_25;
1435 static int hf_btcommon_le_channel_map_26;
1436 static int hf_btcommon_le_channel_map_27;
1437 static int hf_btcommon_le_channel_map_28;
1438 static int hf_btcommon_le_channel_map_29;
1439 static int hf_btcommon_le_channel_map_30;
1440 static int hf_btcommon_le_channel_map_31;
1441 static int hf_btcommon_le_channel_map_32;
1442 static int hf_btcommon_le_channel_map_33;
1443 static int hf_btcommon_le_channel_map_34;
1444 static int hf_btcommon_le_channel_map_35;
1445 static int hf_btcommon_le_channel_map_36;
1446 static int hf_btcommon_le_channel_map_37;
1447 static int hf_btcommon_le_channel_map_38;
1448 static int hf_btcommon_le_channel_map_39;
1449 static int hf_btcommon_eir_ad_mesh_msg;
1450 static int hf_btcommon_eir_ad_mesh_pbadv;
1451 static int hf_btcommon_eir_ad_mesh_beacon;
1453 static int * const hfx_btcommon_eir_ad_ips_flags[] = {
1454 &hf_btcommon_eir_ad_ips_flags_reserved,
1455 &hf_btcommon_eir_ad_ips_flags_location_name,
1456 &hf_btcommon_eir_ad_ips_flags_uncertainty,
1457 &hf_btcommon_eir_ad_ips_flags_floor_number,
1458 &hf_btcommon_eir_ad_ips_flags_altitude,
1459 &hf_btcommon_eir_ad_ips_flags_tx_power,
1460 &hf_btcommon_eir_ad_ips_flags_coordinate_system,
1461 &hf_btcommon_eir_ad_ips_flags_coordinates,
1462 NULL
1465 static int * const hfx_btcommon_eir_ad_ips_uncertainty[] = {
1466 &hf_btcommon_eir_ad_ips_uncertainty_reserved,
1467 &hf_btcommon_eir_ad_ips_uncertainty_precision,
1468 &hf_btcommon_eir_ad_ips_uncertainty_update_time,
1469 &hf_btcommon_eir_ad_ips_uncertainty_stationary,
1470 NULL
1473 static int * const hfx_btcommon_eir_ad_tds_flags[] = {
1474 &hf_btcommon_eir_ad_tds_flags_reserved,
1475 &hf_btcommon_eir_ad_tds_flags_transport_state,
1476 &hf_btcommon_eir_ad_tds_flags_transport_data_incomplete,
1477 &hf_btcommon_eir_ad_tds_flags_role,
1478 NULL
1481 static int * const hfx_btcommon_eir_ad_le_features_0[] = {
1482 &hf_btcommon_eir_ad_le_features_encryption,
1483 &hf_btcommon_eir_ad_le_features_connection_parameters_request_procedure,
1484 &hf_btcommon_eir_ad_le_features_extended_reject_indication,
1485 &hf_btcommon_eir_ad_le_features_peripheral_initiated_features_exchange,
1486 &hf_btcommon_eir_ad_le_features_ping,
1487 &hf_btcommon_eir_ad_le_features_data_packet_length_extension,
1488 &hf_btcommon_eir_ad_le_features_ll_privacy,
1489 &hf_btcommon_eir_ad_le_features_extended_scanner_filter_policies,
1490 NULL
1493 static int * const hfx_btcommon_eir_ad_le_features_1[] = {
1494 &hf_btcommon_eir_ad_le_features_2m_phy,
1495 &hf_btcommon_eir_ad_le_features_stable_modulation_index_tx,
1496 &hf_btcommon_eir_ad_le_features_stable_modulation_index_rx,
1497 &hf_btcommon_eir_ad_le_features_coded_phy,
1498 &hf_btcommon_eir_ad_le_features_extended_advertising,
1499 &hf_btcommon_eir_ad_le_features_periodic_advertising,
1500 &hf_btcommon_eir_ad_le_features_channel_selection_algorithm_2,
1501 &hf_btcommon_eir_ad_le_features_power_class_1,
1502 NULL
1505 static int * const hfx_btcommon_eir_ad_le_features_2[] = {
1506 &hf_btcommon_eir_ad_le_features_minimum_number_of_used_channels_procedure,
1507 &hf_btcommon_eir_ad_le_features_reserved_1_7,
1508 NULL
1511 static int * const hfx_btcommon_eir_ad_le_features_reserved[] = {
1512 &hf_btcommon_eir_ad_le_features_reserved,
1513 NULL
1516 static int * const *hfx_btcommon_eir_ad_le_features[] = {
1517 hfx_btcommon_eir_ad_le_features_0,
1518 hfx_btcommon_eir_ad_le_features_1,
1519 hfx_btcommon_eir_ad_le_features_2,
1520 hfx_btcommon_eir_ad_le_features_reserved,
1521 hfx_btcommon_eir_ad_le_features_reserved,
1522 hfx_btcommon_eir_ad_le_features_reserved,
1523 hfx_btcommon_eir_ad_le_features_reserved,
1524 hfx_btcommon_eir_ad_le_features_reserved
1527 static int ett_cod;
1528 static int ett_eir_ad;
1529 static int ett_eir_ad_entry;
1530 static int ett_eir_ad_le_features;
1531 static int ett_eir_ad_biginfo_seedaa;
1533 static expert_field ei_eir_ad_undecoded;
1534 static expert_field ei_eir_ad_unknown;
1535 static expert_field ei_eir_ad_not_used;
1536 static expert_field ei_eir_ad_invalid_length;
1538 static dissector_handle_t btcommon_cod_handle;
1539 static dissector_handle_t btcommon_eir_handle;
1540 static dissector_handle_t btcommon_ad_handle;
1541 static dissector_handle_t btcommon_le_channel_map_handle;
1542 static dissector_handle_t bthci_cmd_handle;
1543 static dissector_handle_t btmesh_handle;
1544 static dissector_handle_t btmesh_pbadv_handle;
1545 static dissector_handle_t btmesh_beacon_handle;
1547 static dissector_table_t bluetooth_eir_ad_manufacturer_company_id;
1548 static dissector_table_t bluetooth_eir_ad_tds_organization_id;
1549 static dissector_table_t bluetooth_eir_ad_service_uuid;
1551 wmem_tree_t *bthci_cmds;
1553 extern value_string_ext ext_usb_vendors_vals;
1554 extern value_string_ext ext_usb_products_vals;
1555 extern value_string_ext did_vendor_id_source_vals_ext;
1557 static const value_string bthci_cmd_ogf_vals[] = {
1558 { 0x01, "Link Control Commands" },
1559 { 0x02, "Link Policy Commands" },
1560 { 0x03, "Host Controller & Baseband Commands" },
1561 { 0x04, "Informational Parameters" },
1562 { 0x05, "Status Parameters" },
1563 { 0x06, "Testing Commands" },
1564 { 0x08, "LE Controller Commands" },
1565 { 0x3E, "Bluetooth Logo Testing Commands" },
1566 { 0x3F, "Vendor-Specific Commands" },
1567 { 0, NULL }
1569 value_string_ext bthci_cmd_ogf_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ogf_vals);
1571 # define LINK_CONTROL_VALS(base) \
1572 /* Bluetooth Core 4.0 */ \
1573 { (base) | 0x001, "Inquiry" }, \
1574 { (base) | 0x002, "Inquiry Cancel" }, \
1575 { (base) | 0x003, "Periodic Inquiry Mode" }, \
1576 { (base) | 0x004, "Exit Periodic Inquiry Mode" }, \
1577 { (base) | 0x005, "Create Connection" }, \
1578 { (base) | 0x006, "Disconnect" }, \
1579 { (base) | 0x007, "Add SCO Connection" }, \
1580 { (base) | 0x008, "Create Connection Cancel" }, \
1581 { (base) | 0x009, "Accept Connection Request" }, \
1582 { (base) | 0x00A, "Reject Connection Request" }, \
1583 { (base) | 0x00B, "Link Key Request Reply" }, \
1584 { (base) | 0x00C, "Link Key Request Negative Reply" }, \
1585 { (base) | 0x00D, "PIN Code Request Reply" }, \
1586 { (base) | 0x00E, "PIN Code Request Negative Reply" }, \
1587 { (base) | 0x00F, "Change Connection Packet Type" }, \
1588 { (base) | 0x011, "Authentication Requested" }, \
1589 { (base) | 0x013, "Set Connection Encryption" }, \
1590 { (base) | 0x015, "Change Connection Link Key" }, \
1591 { (base) | 0x017, "Link Key Selection" }, \
1592 { (base) | 0x019, "Remote Name Request" }, \
1593 { (base) | 0x01A, "Remote Name Request Cancel" }, \
1594 { (base) | 0x01B, "Read Remote Supported Features" }, \
1595 { (base) | 0x01C, "Read Remote Extended Features" }, \
1596 { (base) | 0x01D, "Read Remote Version Information" }, \
1597 { (base) | 0x01F, "Read Clock offset" }, \
1598 { (base) | 0x020, "Read LMP Handle" }, \
1599 { (base) | 0x028, "Setup Synchronous Connection" }, \
1600 { (base) | 0x029, "Accept Synchronous Connection Request" }, \
1601 { (base) | 0x02A, "Reject Synchronous Connection Request" }, \
1602 { (base) | 0x02B, "IO Capability Request Reply" }, \
1603 { (base) | 0x02C, "User Confirmation Request Reply" }, \
1604 { (base) | 0x02D, "User Confirmation Request Negative Reply" }, \
1605 { (base) | 0x02E, "User Passkey Request Reply" }, \
1606 { (base) | 0x02F, "User Passkey Request Negative Reply" }, \
1607 { (base) | 0x030, "Remote OOB Data Request Reply" }, \
1608 { (base) | 0x033, "Remote OOB Data Request Negative Reply" }, \
1609 { (base) | 0x034, "IO Capability Request Negative Reply" }, \
1610 { (base) | 0x035, "Create Physical Link" }, \
1611 { (base) | 0x036, "Accept Physical Link" }, \
1612 { (base) | 0x037, "Disconnect Physical Link" }, \
1613 { (base) | 0x038, "Create Logical Link" }, \
1614 { (base) | 0x039, "Accept Logical Link" }, \
1615 { (base) | 0x03A, "Disconnect Logical Link" }, \
1616 { (base) | 0x03B, "Logical Link Cancel" }, \
1617 { (base) | 0x03C, "Flow Spec Modify" }, \
1618 /* Bluetooth Core Specification Addendum 2 */ \
1619 { (base) | 0x03D, "Enhanced Setup Synchronous Connection" }, \
1620 { (base) | 0x03E, "Enhanced Accept Synchronous Connection Request" }, \
1621 /* Bluetooth Core Specification Addendum 4 */ \
1622 { (base) | 0x03F, "Truncated Page" }, \
1623 { (base) | 0x040, "Truncated Page Cancel" }, \
1624 { (base) | 0x041, "Set Connectionless Peripheral Broadcast" }, \
1625 { (base) | 0x042, "Set Connectionless Peripheral Broadcast Receive" }, \
1626 { (base) | 0x043, "Start Synchronization Train" }, \
1627 { (base) | 0x044, "Receive Synchronization Train" }, \
1628 { (base) | 0x045, "Remote OOB Extended Data Request Reply" } \
1630 static const value_string bthci_cmd_ocf_link_control_vals[] = {
1631 LINK_CONTROL_VALS(0x0), \
1632 { 0, NULL }
1635 value_string_ext bthci_cmd_ocf_link_control_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_link_control_vals);
1637 #define LINK_POLICY_VALS(base) \
1638 /* Bluetooth Core 4.0 */ \
1639 { (base) | 0x001, "Hold Mode" }, \
1640 { (base) | 0x003, "Sniff Mode" }, \
1641 { (base) | 0x004, "Exit Sniff Mode" }, \
1642 { (base) | 0x005, "Park Mode" }, \
1643 { (base) | 0x006, "Exit Park Mode" }, \
1644 { (base) | 0x007, "QoS Setup" }, \
1645 { (base) | 0x009, "Role Discovery" }, \
1646 { (base) | 0x00b, "Switch Role" }, \
1647 { (base) | 0x00c, "Read Link Policy Settings" }, \
1648 { (base) | 0x00d, "Write Link Policy Settings" }, \
1649 { (base) | 0x00e, "Read Default Link Policy Settings" }, \
1650 { (base) | 0x00f, "Write Default Link Policy Settings" }, \
1651 { (base) | 0x010, "Flow Specification" }, \
1652 { (base) | 0x011, "Sniff Subrating" }
1654 static const value_string bthci_cmd_ocf_link_policy_vals[] = {
1655 LINK_POLICY_VALS(0x0),
1656 { 0, NULL }
1659 value_string_ext bthci_cmd_ocf_link_policy_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_link_policy_vals);
1661 #define HOST_CONTROLLER_AND_BASEBAND_VALS(base) \
1662 /* Bluetooth Core 4.0 */ \
1663 { (base) | 0x001, "Set Event Mask" }, \
1664 { (base) | 0x003, "Reset" }, \
1665 { (base) | 0x005, "Set Event Filter" }, \
1666 { (base) | 0x008, "Flush" }, \
1667 { (base) | 0x009, "Read PIN Type" }, \
1668 { (base) | 0x00A, "Write PIN Type" }, \
1669 { (base) | 0x00B, "Create New Unit Key" }, \
1670 { (base) | 0x00D, "Read Stored Link Key" }, \
1671 { (base) | 0x011, "Write Stored Link Key" }, \
1672 { (base) | 0x012, "Delete Stored Link Key" }, \
1673 { (base) | 0x013, "Change Local Name" }, \
1674 { (base) | 0x014, "Read Local Name" }, \
1675 { (base) | 0x015, "Read Connection Accept Timeout" }, \
1676 { (base) | 0x016, "Write Connection Accept Timeout" }, \
1677 { (base) | 0x017, "Read Page Timeout" }, \
1678 { (base) | 0x018, "Write Page Timeout" }, \
1679 { (base) | 0x019, "Read Scan Enable" }, \
1680 { (base) | 0x01A, "Write Scan Enable" }, \
1681 { (base) | 0x01B, "Read Page Scan Activity" }, \
1682 { (base) | 0x01C, "Write Page Scan Activity" }, \
1683 { (base) | 0x01D, "Read Inquiry Scan Activity" }, \
1684 { (base) | 0x01E, "Write Inquiry Scan Activity" }, \
1685 { (base) | 0x01F, "Read Authentication Enable" }, \
1686 { (base) | 0x020, "Write Authentication Enable" }, \
1687 { (base) | 0x021, "Read Encryption Mode" }, \
1688 { (base) | 0x022, "Write Encryption Mode" }, \
1689 { (base) | 0x023, "Read Class of Device" }, \
1690 { (base) | 0x024, "Write Class of Device" }, \
1691 { (base) | 0x025, "Read Voice Setting" }, \
1692 { (base) | 0x026, "Write Voice Setting" }, \
1693 { (base) | 0x027, "Read Automatic Flush Timeout" }, \
1694 { (base) | 0x028, "Write Automatic Flush Timeout" }, \
1695 { (base) | 0x029, "Read Num Broadcast Retransmissions" }, \
1696 { (base) | 0x02A, "Write Num Broadcast Retransmissions" }, \
1697 { (base) | 0x02B, "Read Hold Mode Activity" }, \
1698 { (base) | 0x02C, "Write Hold Mode Activity" }, \
1699 { (base) | 0x02D, "Read Tx Power Level" }, \
1700 { (base) | 0x02E, "Read SCO Flow Control Enable" }, \
1701 { (base) | 0x02F, "Write SCO Flow Control Enable" }, \
1702 { (base) | 0x031, "Set Host Controller To Host Flow Control" }, \
1703 { (base) | 0x033, "Host Buffer Size" }, \
1704 { (base) | 0x035, "Host Number of Completed Packets" }, \
1705 { (base) | 0x036, "Read Link Supervision Timeout" }, \
1706 { (base) | 0x037, "Write Link Supervision Timeout" }, \
1707 { (base) | 0x038, "Read Number of Supported IAC" }, \
1708 { (base) | 0x039, "Read Current IAC LAP" }, \
1709 { (base) | 0x03A, "Write Current IAC LAP" }, \
1710 { (base) | 0x03B, "Read Page Scan Period Mode" }, \
1711 { (base) | 0x03C, "Write Page Scan Period Mode" }, \
1712 { (base) | 0x03D, "Read Page Scan Mode" }, \
1713 { (base) | 0x03E, "Write Page Scan Mode" }, \
1714 { (base) | 0x03F, "Set AFH Host Channel Classification" }, \
1715 { (base) | 0x042, "Read Inquiry Scan Type" }, \
1716 { (base) | 0x043, "Write Inquiry Scan Type" }, \
1717 { (base) | 0x044, "Read Inquiry Mode" }, \
1718 { (base) | 0x045, "Write Inquiry Mode" }, \
1719 { (base) | 0x046, "Read Page Scan Type" }, \
1720 { (base) | 0x047, "Write Page Scan Type" }, \
1721 { (base) | 0x048, "Read AFH Channel Assessment Mode" }, \
1722 { (base) | 0x049, "Write AFH Channel Assessment Mode" }, \
1723 { (base) | 0x051, "Read Extended Inquiry Response" }, \
1724 { (base) | 0x052, "Write Extended Inquiry Response" }, \
1725 { (base) | 0x053, "Refresh Encryption Key" }, \
1726 { (base) | 0x055, "Read Simple Pairing Mode" }, \
1727 { (base) | 0x056, "Write Simple Pairing Mode" }, \
1728 { (base) | 0x057, "Read Local OOB Data" }, \
1729 { (base) | 0x058, "Read Inquiry Response Tx Power Level" }, \
1730 { (base) | 0x059, "Write Inquiry Tx Power Level" }, \
1731 { (base) | 0x05A, "Read Default Erroneous Data Reporting" }, \
1732 { (base) | 0x05B, "Write Default Erroneous Data Reporting" }, \
1733 { (base) | 0x05F, "Enhanced Flush" }, \
1734 { (base) | 0x060, "Send Keypress Notification" }, \
1735 { (base) | 0x061, "Read Logical Link Accept Timeout" }, \
1736 { (base) | 0x062, "Write Logical Link Accept Timeout" }, \
1737 { (base) | 0x063, "Set Event Mask Page 2" }, \
1738 { (base) | 0x064, "Read Location Data" }, \
1739 { (base) | 0x065, "Write Location Data" }, \
1740 { (base) | 0x066, "Read Flow Control Mode" }, \
1741 { (base) | 0x067, "Write Flow Control Mode" }, \
1742 { (base) | 0x068, "Read Enhanced Transmit Power Level" }, \
1743 { (base) | 0x069, "Read Best Effort Flush Timeout" }, \
1744 { (base) | 0x06A, "Write Best Effort Flush Timeout" }, \
1745 { (base) | 0x06B, "Short Range Mode" }, \
1746 { (base) | 0x06C, "Read LE Host Supported" }, \
1747 { (base) | 0x06D, "Write LE Host Supported" }, \
1748 /* Bluetooth Core Specification Addendum 3 */ \
1749 { (base) | 0x06E, "Set MWS Channel Parameters"}, \
1750 { (base) | 0x06F, "Set External Frame Configuration"}, \
1751 { (base) | 0x070, "Set MWS Signaling"}, \
1752 { (base) | 0x071, "Set MWS Transport Layer"}, \
1753 { (base) | 0x072, "Set MWS Scan Frequency Table"}, \
1754 { (base) | 0x073, "Set MWS Pattern Configuration"}, \
1755 /* Bluetooth Core Specification Addendum 4 */ \
1756 { (base) | 0x074, "Set Reserved LT_ADDR" }, \
1757 { (base) | 0x075, "Delete Reserved LT_ADDR" }, \
1758 { (base) | 0x076, "Set Connectionless Peripheral Broadcast Data" }, \
1759 { (base) | 0x077, "Read Synchronization Train Parameters" }, \
1760 { (base) | 0x078, "Write Synchronization Train Parameters" }, \
1761 { (base) | 0x079, "Read Secure Connections Host Support" }, \
1762 { (base) | 0x07A, "Write Secure Connections Host Support" }, \
1763 { (base) | 0x07B, "Read Authenticated Payload Timeout" }, \
1764 { (base) | 0x07C, "Write Authenticated Payload Timeout" }, \
1765 { (base) | 0x07D, "Read Local OOB Extended Data" }, \
1766 { (base) | 0x07E, "Read Extended Page Timeout" }, \
1767 { (base) | 0x07F, "Write Extended Page Timeout" }, \
1768 { (base) | 0x080, "Read Extended Inquiry Length" }, \
1769 { (base) | 0x081, "Write Extended Inquiry Length" }, \
1770 /* Bluetooth Core Specification 5.2 */ \
1771 { (base) | 0x082, "Set Ecosystem Base Interval" }, \
1772 { (base) | 0x083, "Configure Data Path" }, \
1773 /* Bluetooth Core Specification 5.3 */ \
1774 { (base) | 0x084, "Set Min Encryption Key Size" }
1776 static const value_string bthci_cmd_ocf_host_controller_and_baseband_vals[] = {
1777 HOST_CONTROLLER_AND_BASEBAND_VALS(0x0),
1778 { 0, NULL }
1781 value_string_ext bthci_cmd_ocf_host_controller_and_baseband_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_host_controller_and_baseband_vals);
1783 #define INFORMATIONAL_VALS(base) \
1784 /* Bluetooth Core 4.0 */ \
1785 { (base) | 0x001, "Read Local Version Information" }, \
1786 { (base) | 0x002, "Read Local Supported Commands" }, \
1787 { (base) | 0x003, "Read Local Supported Features" }, \
1788 { (base) | 0x004, "Read Local Extended Features" }, \
1789 { (base) | 0x005, "Read Buffer Size" }, \
1790 { (base) | 0x007, "Read Country Code" }, \
1791 { (base) | 0x009, "Read BD ADDR" }, \
1792 { (base) | 0x00A, "Read Data Block Size" }, \
1793 /* Bluetooth Core Specification Addendum 2 */ \
1794 { (base) | 0x00B, "Read Local Supported Codecs" }, \
1795 /* Bluetooth Core 5.1 */ \
1796 { (base) | 0x00C, "Read Local Simple Pairing Options" }
1798 static const value_string bthci_cmd_ocf_informational_vals[] = {
1799 INFORMATIONAL_VALS(0x0),
1800 { 0, NULL }
1803 value_string_ext bthci_cmd_ocf_informational_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_informational_vals);
1806 #define STATUS_VALS(base) \
1807 /* Bluetooth Core 4.0 */ \
1808 { (base) | 0x001, "Read Failed Contact Counter" }, \
1809 { (base) | 0x002, "Reset Failed Contact Counter" }, \
1810 { (base) | 0x003, "Read Link Quality" }, \
1811 { (base) | 0x005, "Read RSSI" }, \
1812 { (base) | 0x006, "Read AFH Channel Map" }, \
1813 { (base) | 0x007, "Read Clock" }, \
1814 { (base) | 0x008, "Read Encryption Key Size" }, \
1815 { (base) | 0x009, "Read Local AMP Info" }, \
1816 { (base) | 0x00A, "Read Local AMP Assoc" }, \
1817 { (base) | 0x00B, "Write Remote AMP Assoc" }, \
1818 /* Bluetooth Core Specification Addendum 3 */ \
1819 { (base) | 0x00C, "Get MWS Transport Layer Configuration" }, \
1820 /* Bluetooth Core Specification Addendum 4 */ \
1821 { (base) | 0x00D, "Set Triggered Clock Capture" }
1823 static const value_string bthci_cmd_ocf_status_vals[] = {
1824 STATUS_VALS(0x0),
1825 { 0, NULL }
1828 value_string_ext bthci_cmd_ocf_status_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_status_vals);
1830 #define TESTING_VALS(base) \
1831 /* Bluetooth Core 4.0 */ \
1832 { (base) | 0x001, "Read Loopback Mode" }, \
1833 { (base) | 0x002, "Write Loopback Mode" }, \
1834 { (base) | 0x003, "Enable Device Under Test Mode" }, \
1835 { (base) | 0x004, "Write Simple Pairing Debug Mode" }, \
1836 { (base) | 0x007, "Enable AMP Receiver Reports" }, \
1837 { (base) | 0x008, "AMP Test End" }, \
1838 { (base) | 0x009, "AMP Test" }, \
1839 { (base) | 0x00A, "Write Secure Connections Test Mode" }
1841 static const value_string bthci_cmd_ocf_testing_vals[] = {
1842 TESTING_VALS(0x0),
1843 { 0, NULL }
1846 value_string_ext bthci_cmd_ocf_testing_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_testing_vals);
1848 #define LOW_ENERGY_VALS(base)\
1849 /* Bluetooth Core 4.0 */ \
1850 { (base) | 0x001, "LE Set Event Mask" }, \
1851 { (base) | 0x002, "LE Read Buffer Size [v1]" }, \
1852 { (base) | 0x003, "LE Read Local Supported Features" }, \
1853 { (base) | 0x005, "LE Set Random Address" }, \
1854 { (base) | 0x006, "LE Set Advertising Parameters" }, \
1855 { (base) | 0x007, "LE Read Advertising Channel Tx Power" }, \
1856 { (base) | 0x008, "LE Set Advertising Data" }, \
1857 { (base) | 0x009, "LE Set Scan Response Data" }, \
1858 { (base) | 0x00A, "LE Set Advertise Enable" }, \
1859 { (base) | 0x00B, "LE Set Scan Parameters" }, \
1860 { (base) | 0x00C, "LE Set Scan Enable" }, \
1861 { (base) | 0x00D, "LE Create Connection" }, \
1862 { (base) | 0x00E, "LE Create Connection Cancel" }, \
1863 { (base) | 0x00F, "LE Read Filter Accept List Size" }, \
1864 { (base) | 0x010, "LE Clear Filter Accept List" }, \
1865 { (base) | 0x011, "LE Add Device To Filter Accept List" }, \
1866 { (base) | 0x012, "LE Remove Device From Filter Accept List" }, \
1867 { (base) | 0x013, "LE Connection Update" }, \
1868 { (base) | 0x014, "LE Set Host Channel Classification" }, \
1869 { (base) | 0x015, "LE Read Channel Map" }, \
1870 { (base) | 0x016, "LE Read Remote Features" }, \
1871 { (base) | 0x017, "LE Encrypt" }, \
1872 { (base) | 0x018, "LE Rand" }, \
1873 { (base) | 0x019, "LE Enable Encryption" }, \
1874 { (base) | 0x01A, "LE Long Term Key Request Reply" }, \
1875 { (base) | 0x01B, "LE Long Term Key Request Negative Reply" }, \
1876 { (base) | 0x01C, "LE Read Supported States" }, \
1877 { (base) | 0x01D, "LE Receiver Test [v1]" }, \
1878 { (base) | 0x01E, "LE Transmitter Test [v1]" }, \
1879 { (base) | 0x01F, "LE Test End" }, \
1880 /* Bluetooth Core 4.1 */ \
1881 { (base) | 0x020, "LE Remote Connection Parameter Request Reply" }, \
1882 { (base) | 0x021, "LE Remote Connection Parameter Request Negative Reply" }, \
1883 /* Bluetooth Core 4.2 */ \
1884 { (base) | 0x022, "LE Set Data Length" }, \
1885 { (base) | 0x023, "LE Read Suggested Default Data Length" }, \
1886 { (base) | 0x024, "LE Write Suggested Default Data Length" }, \
1887 { (base) | 0x025, "LE Read Local P-256 Public Key" }, \
1888 { (base) | 0x026, "LE Generate DHKey [v1]" }, \
1889 { (base) | 0x027, "LE Add Device to Resolving List" }, \
1890 { (base) | 0x028, "LE Remove Device From Resolving List" }, \
1891 { (base) | 0x029, "LE Clear Resolving List" }, \
1892 { (base) | 0x02A, "LE Read Resolving List Size" }, \
1893 { (base) | 0x02B, "LE Read Peer Resolvable Address" }, \
1894 { (base) | 0x02C, "LE Read Local Resolvable Address" }, \
1895 { (base) | 0x02D, "LE Set Address Resolution Enable" }, \
1896 { (base) | 0x02E, "LE Set Resolvable Private Address Timeout" }, \
1897 { (base) | 0x02F, "LE Read Maximum Data Length" }, \
1898 /* Bluetooth Core 5.0 */ \
1899 { (base) | 0x030, "LE Read PHY" }, \
1900 { (base) | 0x031, "LE Set Default PHY" }, \
1901 { (base) | 0x032, "LE Set PHY" }, \
1902 { (base) | 0x033, "LE Receiver Test [v2]" }, \
1903 { (base) | 0x034, "LE Transmitter Test [v2]" }, \
1904 { (base) | 0x035, "LE Set Advertising Set Random Address" }, \
1905 { (base) | 0x036, "LE Set Extended Advertising Parameters [v1]" }, \
1906 { (base) | 0x037, "LE Set Extended Advertising Data" }, \
1907 { (base) | 0x038, "LE Set Extended Scan Response Data" }, \
1908 { (base) | 0x039, "LE Set Extended Advertising Enable" }, \
1909 { (base) | 0x03A, "LE Read Maximum Advertising Data Length" }, \
1910 { (base) | 0x03B, "LE Read Number of Supported Advertising Sets" }, \
1911 { (base) | 0x03C, "LE Remove Advertising Set" }, \
1912 { (base) | 0x03D, "LE Clear Advertising Sets" }, \
1913 { (base) | 0x03E, "LE Set Periodic Advertising Parameters [v1]" }, \
1914 { (base) | 0x03F, "LE Set Periodic Advertising Data" }, \
1915 { (base) | 0x040, "LE Set Periodic Advertising Enable" }, \
1916 { (base) | 0x041, "LE Set Extended Scan Parameters" }, \
1917 { (base) | 0x042, "LE Set Extended Scan Enable" }, \
1918 { (base) | 0x043, "LE Extended Create Connection [v1]" }, \
1919 { (base) | 0x044, "LE Periodic Advertising Create Sync" }, \
1920 { (base) | 0x045, "LE Periodic Advertising Create Sync Cancel" }, \
1921 { (base) | 0x046, "LE Periodic Advertising Terminate Sync" }, \
1922 { (base) | 0x047, "LE Add Device To Periodic Advertiser List" }, \
1923 { (base) | 0x048, "LE Remove Device From Periodic Advertiser List" }, \
1924 { (base) | 0x049, "LE Clear Periodic Advertiser List" }, \
1925 { (base) | 0x04A, "LE Read Periodic Advertiser List Size" }, \
1926 { (base) | 0x04B, "LE Read Transmit Power" }, \
1927 { (base) | 0x04C, "LE Read RF Path Compensation" }, \
1928 { (base) | 0x04D, "LE Write RF Path Compensation" }, \
1929 { (base) | 0x04E, "LE Set Privacy Mode" }, \
1930 /* Bluetooth Core 5.1 */ \
1931 { (base) | 0x04F, "LE Receiver Test [v3]" }, \
1932 { (base) | 0x050, "LE Transmitter Test [v3]" }, \
1933 { (base) | 0x051, "LE Set Connectionless CTE Transmit Parameters" }, \
1934 { (base) | 0x052, "LE Set Connectionless CTE Transmit Enable" }, \
1935 { (base) | 0x053, "LE Set Connectionless IQ Sampling Enable" }, \
1936 { (base) | 0x054, "LE Set Connection CTE Receive Parameters" }, \
1937 { (base) | 0x055, "LE Set Connection CTE Transmit Parameters" }, \
1938 { (base) | 0x056, "LE Connection CTE Request Enable" }, \
1939 { (base) | 0x057, "LE Connection CTE Response Enable" }, \
1940 { (base) | 0x058, "LE Read Antenna Information" }, \
1941 { (base) | 0x059, "LE Set Periodic Advertising Receive Enable" }, \
1942 { (base) | 0x05A, "LE Periodic Advertising Sync Transfer" }, \
1943 { (base) | 0x05B, "LE Periodic Advertising Set Info Transfer" }, \
1944 { (base) | 0x05C, "LE Set Periodic Advertising Sync Transfer Parameters" }, \
1945 { (base) | 0x05D, "LE Set Default Periodic Advertising Sync Transfer Parameters" }, \
1946 { (base) | 0x05E, "LE Generate DHKey [v2]" }, \
1947 { (base) | 0x05F, "LE Modify Sleep Clock Accuracy" }, \
1948 /* Bluetooth Core 5.2 */ \
1949 { (base) | 0x060, "LE Read Buffer Size [v2]" }, \
1950 { (base) | 0x061, "LE Read ISO Tx Sync" }, \
1951 { (base) | 0x062, "LE Set CIG Parameters" }, \
1952 { (base) | 0x063, "LE Set CIG Parameters Test" }, \
1953 { (base) | 0x064, "LE Create CIS" }, \
1954 { (base) | 0x065, "LE Remove CIG" }, \
1955 { (base) | 0x066, "LE Accept CIS Request" }, \
1956 { (base) | 0x067, "LE Reject CIS Request" }, \
1957 { (base) | 0x068, "LE Create BIG" }, \
1958 { (base) | 0x069, "LE Create BIG Test" }, \
1959 { (base) | 0x06A, "LE Terminate BIG" }, \
1960 { (base) | 0x06B, "LE BIG Create Sync" }, \
1961 { (base) | 0x06C, "LE BIG Terminate Sync" }, \
1962 { (base) | 0x06D, "LE Request Peer SCA" }, \
1963 { (base) | 0x06E, "LE Setup ISO Data Path" }, \
1964 { (base) | 0x06F, "LE Remove ISO Data Path" }, \
1965 { (base) | 0x070, "LE ISO Transmit Test" }, \
1966 { (base) | 0x071, "LE ISO Receive Test" }, \
1967 { (base) | 0x072, "LE ISO Read Test Counters" }, \
1968 { (base) | 0x073, "LE ISO Test End" }, \
1969 { (base) | 0x074, "LE Set Host Feature [v1]" }, \
1970 { (base) | 0x075, "LE Read ISO Link Quality" }, \
1971 { (base) | 0x076, "LE Enhanced Read Transmit Power Level" }, \
1972 { (base) | 0x077, "LE Read Remote Transmit Power Level" }, \
1973 { (base) | 0x078, "LE Set Path Loss Reporting Parameters" }, \
1974 { (base) | 0x079, "LE Set Path Loss Reporting Enable" }, \
1975 { (base) | 0x07A, "LE Set Transmit Power Reporting Enable" }, \
1976 { (base) | 0x07B, "LE Transmitter Test [v4]" }, \
1977 /* Bluetooth Core 5.3 */ \
1978 { (base) | 0x07C, "LE Set Data Related Address Changes" }, \
1979 { (base) | 0x07D, "LE Set Default Subrate" }, \
1980 { (base) | 0x07E, "LE Subrate Request" }, \
1981 /* Bluetooth Core 5.4 */ \
1982 { (base) | 0x07F, "LE Set Extended Advertising Parameters [v2]" }, \
1983 { (base) | 0x080, "LE Set Decision Data" }, /* Bluetooth Core 6.0 */ \
1984 { (base) | 0x081, "LE Set Decision Instructions" }, /* Bluetooth Core 6.0 */ \
1985 { (base) | 0x082, "LE Set Periodic Advertising Subevent Data" }, \
1986 { (base) | 0x083, "LE Set Periodic Advertising Response Data" }, \
1987 { (base) | 0x084, "LE Set Periodic Sync Subevent" }, \
1988 { (base) | 0x085, "LE Extended Create Connection [v2]" }, \
1989 { (base) | 0x086, "LE Set Periodic Advertising Parameters [v2]" }, \
1990 /* Bluetooth Core 6.0 */ \
1991 { (base) | 0x087, "LE Read All Local Supported Features" }, \
1992 { (base) | 0x088, "LE Read All Remote Features" }, \
1993 { (base) | 0x089, "LE CS Read Local Supported Capabilities" }, \
1994 { (base) | 0x08a, "LE CS Read Remote Supported Capabilities" }, \
1995 { (base) | 0x08b, "LE CS Write Cached Remote Supported Capabilities" }, \
1996 { (base) | 0x08c, "LE CS Security Enable" }, \
1997 { (base) | 0x08d, "LE CS Set Default Settings" }, \
1998 { (base) | 0x08e, "LE CS Read Remote FAE Table" }, \
1999 { (base) | 0x08f, "LE CS Write Cached Remote FAE Table" }, \
2000 { (base) | 0x090, "LE CS Create Config" }, \
2001 { (base) | 0x091, "LE CS Remove Config" }, \
2002 { (base) | 0x092, "LE CS Set Channel Classification" }, \
2003 { (base) | 0x093, "LE CS Set Procedure Parameters" }, \
2004 { (base) | 0x094, "LE CS Procedure Enable" }, \
2005 { (base) | 0x095, "LE CS Test" }, \
2006 { (base) | 0x096, "LE CS Test End" }, \
2007 { (base) | 0x097, "LE Set Host Feature [v2]" }, \
2008 { (base) | 0x098, "LE Add Device To Monitored Advertisers List" }, \
2009 { (base) | 0x099, "LE Remove Device From Monitored Advertisers List" }, \
2010 { (base) | 0x09A, "LE Clear Monitored Advertisers List" }, \
2011 { (base) | 0x09B, "LE Read Monitored Advertisres List Size" }, \
2012 { (base) | 0x09C, "LE Enable Monitored Advertisers" }, \
2013 { (base) | 0x09D, "LE Frame Space Update" }
2015 static const value_string bthci_cmd_ocf_low_energy_vals[] = {
2016 LOW_ENERGY_VALS(0x0),
2017 { 0, NULL }
2020 value_string_ext bthci_cmd_ocf_low_energy_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_low_energy_vals);
2023 static const value_string bthci_cmd_opcode_vals[] = {
2024 {0x0, "No Operation"},
2025 LINK_CONTROL_VALS(0x01 << 10),
2026 LINK_POLICY_VALS(0x02 << 10),
2027 HOST_CONTROLLER_AND_BASEBAND_VALS(0x03 << 10),
2028 INFORMATIONAL_VALS(0x04 << 10),
2029 STATUS_VALS(0x05 << 10),
2030 TESTING_VALS(0x06 << 10),
2031 LOW_ENERGY_VALS(0x08 << 10),
2032 { 0, NULL }
2035 value_string_ext bthci_cmd_opcode_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_opcode_vals);
2037 static const value_string bthci_cmd_status_vals[] = {
2038 {0x00, "Success"},
2039 {0x01, "Unknown HCI Command"},
2040 {0x02, "Unknown Connection Identifier"},
2041 {0x03, "Hardware Failure"},
2042 {0x04, "Page Timeout"},
2043 {0x05, "Authentication Failure"},
2044 {0x06, "PIN or Key Missing"},
2045 {0x07, "Memory Capacity Exceeded"},
2046 {0x08, "Connection Timeout"},
2047 {0x09, "Connection Limit Exceeded"},
2048 {0x0A, "Synchronous Connection Limit To A Device Exceeded"},
2049 {0x0B, "ACL Connection Already Exists"},
2050 {0x0C, "Command Disallowed"},
2051 {0x0D, "Connection Rejected due to Limited Resources"},
2052 {0x0E, "Connection Rejected due To Security Reasons"},
2053 {0x0F, "Connection Rejected due to Unacceptable BD_ADDR"},
2054 {0x10, "Connection Accept Timeout Exceeded"},
2055 {0x11, "Unsupported Feature or Parameter Value"},
2056 {0x12, "Invalid HCI Command Parameters"},
2057 {0x13, "Remote User Terminated Connection"},
2058 {0x14, "Remote Device Terminated Connection due to Low Resources"},
2059 {0x15, "Remote Device Terminated Connection due to Power Off"},
2060 {0x16, "Connection Terminated by Local Host"},
2061 {0x17, "Repeated Attempts"},
2062 {0x18, "Pairing Not Allowed"},
2063 {0x19, "Unknown LMP PDU"},
2064 {0x1A, "Unsupported Remote/LMP Feature"},
2065 {0x1B, "SCO Offset Rejected"},
2066 {0x1C, "SCO Interval Rejected"},
2067 {0x1D, "SCO Air Mode Rejected"},
2068 {0x1E, "Invalid LMP/LL Parameters"},
2069 {0x1F, "Unspecified Error"},
2070 {0x20, "Unsupported LMP/LL Parameter Value"},
2071 {0x21, "Role Change Not Allowed"},
2072 {0x22, "LMP/LL Response Timeout"},
2073 {0x23, "LMP Error Transaction Collision/LL Procedure Collision"},
2074 {0x24, "LMP PDU Not Allowed"},
2075 {0x25, "Encryption Mode Not Acceptable"},
2076 {0x26, "Link Key cannot be Changed"},
2077 {0x27, "Requested QoS Not Supported"},
2078 {0x28, "Instant Passed"},
2079 {0x29, "Pairing with Unit Key Not Supported"},
2080 {0x2A, "Different Transaction Collision"},
2081 {0x2C, "QoS Unacceptable Parameter"},
2082 {0x2D, "QoS Rejected"},
2083 {0x2E, "Channel Classification Not Supported"},
2084 {0x2F, "Insufficient Security"},
2085 {0x30, "Parameter Out Of Mandatory Range"},
2086 {0x32, "Role Switch Pending"},
2087 {0x34, "Reserved Slot Violation"},
2088 {0x35, "Role Switch Failed"},
2089 {0x36, "Extended Inquiry Response Too Large"},
2090 {0x37, "Secure Simple Pairing Not Supported By Host"},
2091 {0x38, "Host Busy - Pairing"},
2092 {0x39, "Connection Rejected due to No Suitable Channel Found"},
2093 {0x3A, "Controller Busy"},
2094 {0x3B, "Unacceptable Connection Parameters"},
2095 {0x3C, "Directed Advertising Timeout"},
2096 {0x3D, "Connection Terminated due to MIC Failure"},
2097 {0x3E, "Connection Failed to be Established"},
2098 {0x3F, "MAC Connection Failed"},
2099 {0x40, "Coarse Clock Adjustment Rejected but Will Try to Adjust Using Clock Dragging"},
2100 {0x41, "Type0 Submap Not Defined"},
2101 {0x42, "Unknown Advertising Identifier"},
2102 {0x43, "Limit Reached"},
2103 {0x44, "Operation Cancelled by Host"},
2104 {0x45, "Packet Too Long"},
2105 {0x46, "Too Late"},
2106 {0x47, "Too Early"},
2107 {0x48, "Insufficient Channels"},
2108 {0, NULL }
2110 value_string_ext bthci_cmd_status_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_status_vals);
2112 static const value_string bthci_cmd_cod_major_device_class_vals[] = {
2113 {0x00, "Miscellaneous"},
2114 {0x01, "Computer"},
2115 {0x02, "Phone"},
2116 {0x03, "LAN/Network Access Point"},
2117 {0x04, "Audio/Video"},
2118 {0x05, "Peripheral (HID)"},
2119 {0x06, "Imaging"},
2120 {0x07, "Wearable"},
2121 {0x08, "Toy"},
2122 {0x09, "Health"},
2123 {0x1F, "Uncategorized: device code not specified"},
2124 {0, NULL }
2126 static value_string_ext bthci_cmd_cod_major_device_class_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_major_device_class_vals);
2128 static const value_string bthci_cmd_cod_minor_device_class_computer_vals[] = {
2129 { 0x00, "Uncategorized, code for device not assigned" },
2130 { 0x01, "Desktop workstation" },
2131 { 0x02, "Server-class computer" },
2132 { 0x03, "Laptop" },
2133 { 0x04, "Handheld PC/PDA (clamshell)" },
2134 { 0x05, "Palm-size PC/PDA" },
2135 { 0x06, "Wearable computer (watch size)" },
2136 { 0x07, "Tablet" },
2137 { 0, NULL }
2139 static value_string_ext bthci_cmd_cod_minor_device_class_computer_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_minor_device_class_computer_vals);
2141 static const value_string bthci_cmd_cod_minor_device_class_phone_vals[] = {
2142 { 0x00, "Uncategorized, code for device not assigned" },
2143 { 0x01, "Cellular" },
2144 { 0x02, "Cordless" },
2145 { 0x03, "Smartphone" },
2146 { 0x04, "Wired modem or voice gateway" },
2147 { 0x05, "Common ISDN access" },
2148 { 0, NULL }
2150 static value_string_ext bthci_cmd_cod_minor_device_class_phone_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_minor_device_class_phone_vals);
2152 static const value_string bthci_cmd_cod_minor_device_class_lan_net_load_factor_vals[] = {
2153 { 0x00, "Fully available" },
2154 { 0x01, "1% to 17% utilized" },
2155 { 0x02, "17% to 33% utilized" },
2156 { 0x03, "33% to 50% utilized" },
2157 { 0x04, "50% to 67% utilized" },
2158 { 0x05, "67% to 83% utilized" },
2159 { 0x06, "83% to 99% utilized" },
2160 { 0x07, "No service available" },
2161 { 0, NULL }
2163 static value_string_ext bthci_cmd_cod_minor_device_class_lan_net_load_factor_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_minor_device_class_lan_net_load_factor_vals);
2165 static const value_string bthci_cmd_cod_minor_device_class_lan_net_type_vals[] = {
2166 { 0x00, "Uncategorized (used if no others apply)" },
2167 { 0, NULL }
2169 static value_string_ext bthci_cmd_cod_minor_device_class_lan_net_type_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_minor_device_class_lan_net_type_vals);
2171 static const value_string bthci_cmd_cod_minor_device_class_audio_video_vals[] = {
2172 { 0x00, "Uncategorized, code not assigned" },
2173 { 0x01, "Wearable Headset Device" },
2174 { 0x02, "Hands-free Device" },
2175 { 0x04, "Microphone" },
2176 { 0x05, "Loudspeaker" },
2177 { 0x06, "Headphones" },
2178 { 0x07, "Portable Audio" },
2179 { 0x08, "Car audio" },
2180 { 0x09, "Set-top box" },
2181 { 0x0A, "HiFi Audio Device" },
2182 { 0x0B, "VCR" },
2183 { 0x0C, "Video Camera" },
2184 { 0x0D, "Camcorder" },
2185 { 0x0E, "Video Monitor" },
2186 { 0x0F, "Video Display and Loudspeaker" },
2187 { 0x10, "Video Conferencing" },
2188 { 0x12, "Gaming/Toy" },
2189 { 0, NULL }
2191 static value_string_ext bthci_cmd_cod_minor_device_class_audio_video_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_minor_device_class_audio_video_vals);
2193 static const value_string bthci_cmd_cod_minor_device_class_peripheral_class_vals[] = {
2194 { 0x00, "Not Keyboard / Not Pointing Device" },
2195 { 0x01, "Keyboard" },
2196 { 0x02, "Pointing device" },
2197 { 0x03, "Combo keyboard/pointing device" },
2198 { 0, NULL }
2200 static value_string_ext bthci_cmd_cod_minor_device_class_peripheral_class_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_minor_device_class_peripheral_class_vals);
2202 static const value_string bthci_cmd_cod_minor_device_class_peripheral_type_vals[] = {
2203 { 0x00, "Uncategorized device" },
2204 { 0x01, "Joystick" },
2205 { 0x02, "Gamepad" },
2206 { 0x03, "Remote control" },
2207 { 0x04, "Sensing device" },
2208 { 0x05, "Digitizer tablet" },
2209 { 0x06, "Card Reader" },
2210 { 0x07, "Digital Pen" },
2211 { 0x08, "Handheld scanner for bar-codes" },
2212 { 0x09, "Handheld gestural input device" },
2213 { 0, NULL }
2215 static value_string_ext bthci_cmd_cod_minor_device_class_peripheral_type_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_minor_device_class_peripheral_type_vals);
2218 static const value_string bthci_cmd_cod_minor_device_class_imaging_type_vals[] = {
2219 { 0x00, "Uncategorized, default" },
2220 { 0, NULL }
2222 static value_string_ext bthci_cmd_cod_minor_device_class_imaging_type_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_minor_device_class_imaging_type_vals);
2224 static const value_string bthci_cmd_cod_minor_device_class_wearable_vals[] = {
2225 { 0x01, "Wristwatch" },
2226 { 0x02, "Pager" },
2227 { 0x03, "Jacket" },
2228 { 0x04, "Helmet" },
2229 { 0x05, "Glasses" },
2230 { 0, NULL }
2232 static value_string_ext bthci_cmd_cod_minor_device_class_wearable_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_minor_device_class_wearable_vals);
2234 static const value_string bthci_cmd_cod_minor_device_class_toy_vals[] = {
2235 { 0x01, "Robot" },
2236 { 0x02, "Vehicle" },
2237 { 0x03, "Doll / Action figure" },
2238 { 0x04, "Controller" },
2239 { 0x05, "Game" },
2240 { 0, NULL }
2242 static value_string_ext bthci_cmd_cod_minor_device_class_toy_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_minor_device_class_toy_vals);
2244 static const value_string bthci_cmd_cod_minor_device_class_health_vals[] = {
2245 { 0x00, "Undefined" },
2246 { 0x01, "Blood Pressure Monitor" },
2247 { 0x02, "Thermometer" },
2248 { 0x03, "Weighing Scale" },
2249 { 0x04, "Glucose Meter" },
2250 { 0x05, "Pulse Oximeter" },
2251 { 0x06, "Heart/Pulse Rate Monitor" },
2252 { 0x07, "Health Data Display" },
2253 { 0x08, "Step Counter" },
2254 { 0x09, "Body Composition Analyzer" },
2255 { 0x0A, "Peak Flow Monitor" },
2256 { 0x0B, "Medication Monitor" },
2257 { 0x0C, "Knee Prosthesis" },
2258 { 0x0D, "Ankle Prosthesis" },
2259 { 0x0E, "Generic Health Manager" },
2260 { 0x0F, "Personal Mobility Device" },
2261 { 0, NULL }
2263 static value_string_ext bthci_cmd_cod_minor_device_class_health_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_minor_device_class_health_vals);
2265 /* https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile */
2266 static const value_string bthci_cmd_eir_data_type_vals[] = {
2267 {0x01, "Flags" },
2268 {0x02, "16-bit Service Class UUIDs (incomplete)" },
2269 {0x03, "16-bit Service Class UUIDs" },
2270 {0x04, "32-bit Service Class UUIDs (incomplete)" },
2271 {0x05, "32-bit Service Class UUIDs" },
2272 {0x06, "128-bit Service Class UUIDs (incomplete)" },
2273 {0x07, "128-bit Service Class UUIDs" },
2274 {0x08, "Device Name (shortened)" },
2275 {0x09, "Device Name" },
2276 {0x0A, "Tx Power Level" },
2277 {0x0B, "OOB Optional Data Length" },
2278 {0x0C, "BD_ADDR" },
2279 {0x0D, "Class Of Device" },
2280 {0x0E, "Simple Pairing Hash C" },
2281 {0x0F, "Simple Pairing Randomizer R" },
2282 {0x10, "Device ID / Security Manager TK Value" },
2283 {0x11, "Security Manager Out of Band Flags" },
2284 {0x12, "Peripheral Connection Interval Range" },
2285 {0x14, "List of 16-bit Service Solicitation UUIDs" },
2286 {0x15, "List of 128-bit Service Solicitation UUIDs" },
2287 {0x16, "Service Data - 16 bit UUID" },
2288 {0x17, "Public Target Address" },
2289 {0x18, "Random Target Address" },
2290 {0x19, "Appearance" },
2291 {0x1A, "Advertising Interval" },
2292 {0x1B, "LE Bluetooth Device Address" },
2293 {0x1C, "LE Role" },
2294 {0x1D, "Simple Pairing Hash C-256" },
2295 {0x1E, "Simple Pairing Randomizer R-256" },
2296 {0x1F, "List of 32-bit Service Solicitation UUIDs" },
2297 {0x20, "Service Data - 32 bit UUID" },
2298 {0x21, "Service Data - 128 bit UUID" },
2299 {0x22, "LE Secure Connections Confirmation Value" },
2300 {0x23, "LE Secure Connections Random Value" },
2301 {0x24, "URI" },
2302 {0x25, "Indoor Positioning" },
2303 {0x26, "Transport Discovery Data" },
2304 {0x27, "LE Supported Features" },
2305 {0x28, "Channel Map Update Indication" },
2306 {0x29, "PB-ADV" },
2307 {0x2A, "Mesh Message" },
2308 {0x2B, "Mesh Beacon" },
2309 {0x2C, "BIGInfo" },
2310 {0x2D, "Broadcast Code" },
2311 {0x2E, "Resolvable Set Identifier" },
2312 {0x2F, "Advertising Interval - long" },
2313 {0x30, "Broadcast_Name" },
2314 {0x3D, "3D Information Data" },
2315 {0xFF, "Manufacturer Specific" },
2316 { 0, NULL }
2318 value_string_ext bthci_cmd_eir_data_type_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_eir_data_type_vals);
2320 /* Updating based on https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml */
2321 static const value_string bthci_cmd_appearance_vals[] = {
2322 { 0, "Unknown" },
2323 { 64, "Generic Phone" },
2324 { 128, "Generic Computer" },
2325 { 192, "Generic Watch" },
2326 { 193, "Watch: Sports Watch" },
2327 { 256, "Generic Clock" },
2328 { 320, "Generic Display" },
2329 { 384, "Generic Remote Control" },
2330 { 448, "Generic Eye-glasses" },
2331 { 512, "Generic Tag" },
2332 { 576, "Generic Keyring" },
2333 { 640, "Generic Media Player" },
2334 { 704, "Generic Barcode Scanner" },
2335 { 768, "Generic Thermometer" },
2336 { 769, "Thermometer: Ear" },
2337 { 832, "Generic Heart rate Sensor" },
2338 { 833, "Heart Rate Sensor: Heart Rate Belt" },
2339 { 896, "Generic Blood Pressure" },
2340 { 897, "Blood Pressure: Arm" },
2341 { 898, "Blood Pressure: Wrist" },
2342 { 960, "Human Interface Device (HID)" },
2343 { 961, "Keyboard" },
2344 { 962, "Mouse" },
2345 { 963, "Joystick" },
2346 { 964, "Gamepad" },
2347 { 965, "Digitizer Tablet" },
2348 { 966, "Card Reader" },
2349 { 967, "Digital Pen" },
2350 { 968, "Barcode Scanner" },
2351 { 1024, "Generic Glucose Meter" },
2352 { 1088, "Generic: Running Walking Sensor" },
2353 { 1089, "Running Walking Sensor: In-Shoe" },
2354 { 1090, "Running Walking Sensor: On-Shoe" },
2355 { 1091, "Running Walking Sensor: On-Hip" },
2356 { 1152, "Generic: Cycling" },
2357 { 1153, "Cycling: Cycling Computer" },
2358 { 1154, "Cycling: Speed Sensor" },
2359 { 1155, "Cycling: Cadence Sensor" },
2360 { 1156, "Cycling: Power Sensor" },
2361 { 1157, "Cycling: Speed and Cadence Sensor" },
2362 { 1216, "Generic Control Device" },
2363 { 1217, "Switch" },
2364 { 1218, "Multi-switch" },
2365 { 1219, "Button" },
2366 { 1220, "Slider" },
2367 { 1221, "Rotary" },
2368 { 1222, "Touch-panel" },
2369 { 1280, "Generic Network Device" },
2370 { 1281, "Access Point" },
2371 { 1344, "Generic Sensor" },
2372 { 1345, "Motion Sensor" },
2373 { 1346, "Air Quality Sensor" },
2374 { 1347, "Temperature Sensor" },
2375 { 1348, "Humidity Sensor" },
2376 { 1349, "Leak Sensor" },
2377 { 1350, "Smoke Sensor" },
2378 { 1351, "Occupancy Sensor" },
2379 { 1352, "Contact Sensor" },
2380 { 1353, "Carbon Monoxide Sensor" },
2381 { 1354, "Carbon Dioxide Sensor" },
2382 { 1355, "Ambient Light Sensor" },
2383 { 1356, "Energy Sensor" },
2384 { 1357, "Color Light Sensor" },
2385 { 1358, "Rain Sensor" },
2386 { 1359, "Fire Sensor" },
2387 { 1360, "Wind Sensor" },
2388 { 1361, "Proximity Sensor" },
2389 { 1362, "Multi-Sensor" },
2390 { 1408, "Generic Light Fixtures" },
2391 { 1409, "Wall Light" },
2392 { 1410, "Ceiling Light" },
2393 { 1411, "Floor Light" },
2394 { 1412, "Cabinet Light" },
2395 { 1413, "Desk Light" },
2396 { 1414, "Troffer Light" },
2397 { 1415, "Pendant Light" },
2398 { 1416, "In-ground Light" },
2399 { 1417, "Flood Light" },
2400 { 1418, "Underwater Light" },
2401 { 1419, "Bollard with Light" },
2402 { 1420, "Pathway Light" },
2403 { 1421, "Garden Light" },
2404 { 1422, "Pole-top Light" },
2405 { 1423, "Spotlight" },
2406 { 1424, "Linear Light" },
2407 { 1425, "Street Light" },
2408 { 1426, "Shelves Light" },
2409 { 1427, "High-bay / Low-bay Light" },
2410 { 1428, "Emergency Exit Light" },
2411 { 1472, "Generic Fan" },
2412 { 1473, "Ceiling Fan" },
2413 { 1474, "Axial Fan" },
2414 { 1475, "Exhaust Fan" },
2415 { 1476, "Pedestal Fan" },
2416 { 1477, "Desk Fan" },
2417 { 1478, "Wall Fan" },
2418 { 1536, "Generic HVAC" },
2419 { 1537, "Thermostat" },
2420 { 1600, "Generic Air Conditioning" },
2421 { 1664, "Generic Humidifier" },
2422 { 1728, "Generic Heating" },
2423 { 1729, "Radiator" },
2424 { 1730, "Boiler" },
2425 { 1731, "Heat Pump" },
2426 { 1732, "Infrared Heater" },
2427 { 1733, "Radiant Panel Heater" },
2428 { 1734, "Fan Heater" },
2429 { 1735, "Air Curtain" },
2430 { 1792, "Generic Access Control" },
2431 { 1793, "Access Door" },
2432 { 1794, "Garage Door" },
2433 { 1795, "Emergency Exit Door" },
2434 { 1796, "Access Lock" },
2435 { 1797, "Elevator" },
2436 { 1798, "Window" },
2437 { 1799, "Entrance Gate" },
2438 { 1856, "Generic Motorized Device" },
2439 { 1857, "Motorized Gate" },
2440 { 1858, "Awning" },
2441 { 1859, "Blinds or Shades" },
2442 { 1860, "Curtains" },
2443 { 1861, "Screen" },
2444 { 1920, "Generic Power Device" },
2445 { 1921, "Power Outlet" },
2446 { 1922, "Power Strip" },
2447 { 1923, "Plug" },
2448 { 1924, "Power Supply" },
2449 { 1925, "LED Driver" },
2450 { 1926, "Fluorescent Lamp Gear" },
2451 { 1927, "HID Lamp Gear" },
2452 { 1984, "Generic Light Source" },
2453 { 1985, "Incandescent Light Bulb" },
2454 { 1986, "LED Bulb" },
2455 { 1987, "HID Lamp" },
2456 { 1988, "Fluorescent Lamp" },
2457 { 1989, "LED Array" },
2458 { 1990, "Multi-Color LED Array" },
2459 { 3136, "Generic: Pulse Oximeter" },
2460 { 3137, "Fingertip" },
2461 { 3138, "Wrist Worn" },
2462 { 3200, "Generic: Weight Scale" },
2463 { 3264, "Generic Personal Mobility Device" },
2464 { 3265, "Powered Wheelchair" },
2465 { 3266, "Mobility Scooter" },
2466 { 3328, "Generic Continuous Glucose Monitor" },
2467 { 5184, "Generic: Outdoor Sports Activity" },
2468 { 5185, "Location Display Device" },
2469 { 5186, "Location and Navigation Display Device" },
2470 { 5187, "Location Pod" },
2471 { 5188, "Location and Navigation Pod" },
2472 { 0, NULL }
2474 value_string_ext bthci_cmd_appearance_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_appearance_vals);
2476 const value_string bthci_cmd_io_capability_vals[] = {
2477 {0x00, "Display Only" },
2478 {0x01, "Display Yes/No" },
2479 {0x02, "Keyboard Only" },
2480 {0x03, "No Input, No Output" },
2481 { 0, NULL }
2484 const value_string bthci_cmd_oob_data_present_vals[] = {
2485 {0x00, "OOB Authentication Data Not Present" },
2486 {0x01, "OOB Authentication Data From Remote Device Present" },
2487 { 0, NULL }
2490 static const value_string bthci_cmd_auth_req_vals[] = {
2491 {0x00, "MITM Protection Not Required - No Bonding. Numeric Comparison, Automatic Accept Allowed, No Secure Connection" },
2492 {0x01, "MITM Protection Required - No Bonding. Use IO Capability To Determine Procedure, No Secure Connection" },
2493 {0x02, "MITM Protection Not Required - Dedicated Bonding. Numeric Comparison, Automatic Accept Allowed, No Secure Connection" },
2494 {0x03, "MITM Protection Required - Dedicated Bonding. Use IO Capability To Determine Procedure, No Secure Connection" },
2495 {0x04, "MITM Protection Not Required - General Bonding. Numeric Comparison, Automatic Accept Allowed, No Secure Connection" },
2496 {0x05, "MITM Protection Required - General Bonding. Use IO Capability To Determine Procedure, No Secure Connection" },
2497 {0x08, "MITM Protection Not Required - No Bonding. Numeric Comparison, Automatic Accept Allowed, Secure Connection" },
2498 {0x09, "MITM Protection Required - No Bonding. Use IO Capability To Determine Procedure, Secure Connection" },
2499 {0x0A, "MITM Protection Not Required - Dedicated Bonding. Numeric Comparison, Automatic Accept Allowed, Secure Connection" },
2500 {0x0B, "MITM Protection Required - Dedicated Bonding. Use IO Capability To Determine Procedure, Secure Connection " },
2501 {0x0C, "MITM Protection Not Required - General Bonding. Numeric Comparison, Automatic Accept Allowed, Secure Connection" },
2502 {0x0D, "MITM Protection Required - General Bonding. Use IO Capability To Determine Procedure, Secure Connection" },
2503 { 0, NULL }
2505 value_string_ext bthci_cmd_auth_req_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_auth_req_vals);
2507 const value_string bthci_cmd_address_types_vals[] = {
2508 { 0x00, "Public Device Address" },
2509 { 0x01, "Random Device Address" },
2510 { 0x02, "Public Identity Address (Corresponds to Resolved Private Address)" },
2511 { 0x03, "Random (Static) Identity Address (Corresponds to Resolved Private Address)" },
2512 { 0, NULL }
2515 static const value_string cmd_base_address_types_vals[] = {
2516 { 0x00, "Public Address" },
2517 { 0x01, "Random Address" },
2518 { 0, NULL }
2521 static const value_string cmd_identity_address_types_vals[] = {
2522 { 0x00, "Public Identity Address" },
2523 { 0x01, "Random (Static) Identity Address" },
2524 { 0, NULL }
2527 static const value_string cmd_role_vals[] = {
2528 {0x00, "Change own Role to Central for this BD_ADDR"},
2529 {0x01, "Change own Role to Peripheral for this BD_ADDR"},
2530 {0, NULL }
2533 static const value_string cmd_acr_role_vals[] = {
2534 {0x00, "Become the Central for this connection. The LM will perform the role switch."},
2535 {0x01, "Remain the Peripheral for this connection. The LM will NOT perform the role switch."},
2536 {0, NULL }
2539 static const value_string cmd_pin_types[] = {
2540 {0x00, "Variable PIN" },
2541 {0x01, "Fixed PIN" },
2542 {0, NULL }
2545 static const value_string cmd_encryption_enable[] = {
2546 {0x00, "Link Level Encryption is OFF"},
2547 {0x01, "Link Level Encryption is ON"},
2548 {0, NULL }
2551 static const value_string cmd_key_flag[] = {
2552 {0x00, "Using Semi-permanent Link Key"},
2553 {0x01, "Using Temporary Link Key"},
2554 {0, NULL }
2557 static const value_string cmd_filter_types[] = {
2558 {0x00, "Clear all Filters" },
2559 {0x01, "Inquiry Result" },
2560 {0x02, "Connection Setup" },
2561 {0, NULL }
2564 static const value_string cmd_inquiry_result_filter_condition_types[] = {
2565 {0x00, "A new device responded" },
2566 {0x01, "A device with the specified Class of Device responded" },
2567 {0x02, "A device with the specified BD_ADDR responded" },
2568 {0, NULL }
2571 static const value_string cmd_flow_directions[] = {
2572 {0x00, "Outgoing Flow" },
2573 {0x01, "Incoming Flow" },
2574 {0, NULL }
2577 static const value_string cmd_service_types[] = {
2578 {0x00, "No Traffic"},
2579 {0x01, "Best Effort"},
2580 {0x02, "Guaranteed"},
2581 {0, NULL }
2584 static const value_string cmd_connection_setup_filter_condition_types[] = {
2585 {0x00, "Allow Connections from all devices" },
2586 {0x01, "Allow Connections from a device with a specific Class of Device" },
2587 {0x02, "Allow Connections from a device with a specific BD_ADDR" },
2588 {0, NULL }
2591 static const value_string cmd_auto_acc_flag_values[] = {
2592 {0x01, "Do NOT Auto accept" },
2593 {0x02, "Do Auto accept, role switch disabled" },
2594 {0x03, "Do Auto accept, role switch enabled" },
2595 {0, NULL }
2598 static const value_string cmd_read_all_flag_values[] = {
2599 {0x00, "Return Link Key for specified BD_ADDR" },
2600 {0x01, "Return all stored Link Keys" },
2601 {0, NULL }
2604 static const value_string cmd_delete_all_flag_values[] = {
2605 {0x00, "Delete only Link Key for specified BD_ADDR" },
2606 {0x01, "Delete all stored Link Keys" },
2607 {0, NULL }
2610 const value_string bthci_cmd_scan_enable_values[] = {
2611 {0x00, "No Scans enabled" },
2612 {0x01, "Inquiry Scan enabled/Page Scan disable" },
2613 {0x02, "Inquiry Scan disabled/Page Scan enabled" },
2614 {0x03, "Inquiry Scan enabled/Page Scan enabled" },
2615 {0, NULL }
2618 const value_string bthci_cmd_authentication_enable_values[] = {
2619 {0x00, "Authentication disabled" },
2620 {0x01, "Authentication enabled for all connection" },
2621 {0, NULL }
2624 static const value_string cmd_input_coding_values[] = {
2625 {0x0, "Linear" },
2626 {0x1, UTF8_MICRO_SIGN "-law" },
2627 {0x2, "A-law" },
2628 {0, NULL }
2630 value_string_ext bthci_cmd_input_coding_vals_ext = VALUE_STRING_EXT_INIT(cmd_input_coding_values);
2632 static const value_string cmd_input_data_format_values[] = {
2633 {0x0, "1's complement" },
2634 {0x1, "2's complement" },
2635 {0x2, "Sign-Magnitude" },
2636 {0x3, "Unsigned" },
2637 {0, NULL }
2639 value_string_ext bthci_cmd_input_data_format_vals_ext = VALUE_STRING_EXT_INIT(cmd_input_data_format_values);
2641 static const value_string cmd_input_sample_size_values[] = {
2642 {0x0, "8 bit (only for Linear PCM)" },
2643 {0x1, "16 bit (only for Linear PCM)" },
2644 {0, NULL }
2646 value_string_ext bthci_cmd_input_sample_size_vals_ext = VALUE_STRING_EXT_INIT(cmd_input_sample_size_values);
2648 static const value_string cmd_air_coding_format_values[] = {
2649 {0x0, "CVSD" },
2650 {0x1, UTF8_MICRO_SIGN "-law" },
2651 {0x2, "A-law" },
2652 {0x3, "Transparent" },
2653 {0, NULL }
2655 value_string_ext bthci_cmd_air_coding_format_vals_ext = VALUE_STRING_EXT_INIT(cmd_air_coding_format_values);
2657 static const value_string cmd_en_disabled[] = {
2658 {0x00, "disabled" },
2659 {0x01, "enabled" },
2660 {0, NULL }
2663 static const value_string cmd_flow_contr_enable[] = {
2664 {0x00, "Flow control off in direction from Host Controller to Host." },
2665 {0x01, "ON - HCI ACL Data Packets / OFF - HCI SCO Data Packets" },
2666 {0x02, "OFF - HCI ACL Data Packets / ON - HCI SCO Data Packets" },
2667 {0x03, "ON - HCI ACL Data Packets / ON - HCI SCO Data Packets" },
2668 {0, NULL }
2671 static const value_string cmd_power_level_types[] = {
2672 {0x00, "Current Tx Power Level" },
2673 {0x01, "Maximum Tx Power Level" },
2674 {0, NULL }
2677 static const value_string cmd_loopback_modes[] = {
2678 {0x00, "No Loopback mode enabled" },
2679 {0x01, "Enable Local Loopback" },
2680 {0x02, "Enable Remote Loopback" },
2681 {0, NULL }
2684 const value_string bthci_cmd_encrypt_mode_vals[] = {
2685 { 0x00, "Encryption Disabled" },
2686 { 0x01, "Encryption only for Point-To-Point Packets" },
2687 { 0x02, "Encryption for Point-To-Point and Broadcast Packets" },
2688 { 0, NULL }
2691 static const value_string cmd_boolean[] = {
2692 {0, "false" },
2693 {1, "true" },
2694 {0, NULL }
2697 const value_string bthci_cmd_page_scan_modes[] = {
2698 {0, "Mandatory Page Scan Mode"},
2699 {1, "Optional Page Scan Mode I"},
2700 {2, "Optional Page Scan Mode II"},
2701 {3, "Optional Page Scan Mode III"},
2702 {0, NULL }
2705 const value_string bthci_cmd_page_scan_repetition_modes[] = {
2706 {0, "R0"},
2707 {1, "R1"},
2708 {2, "R2"},
2709 {0, NULL }
2712 const value_string bthci_cmd_page_scan_period_modes[] = {
2713 {0, "P0"},
2714 {1, "P1"},
2715 {2, "P2"},
2716 {0, NULL }
2719 static const value_string cmd_role_switch_modes[] = {
2720 {0, "Local device will be Central, and will not accept a switch request." },
2721 {1, "Local device may be Central, or may become Peripheral after accepting a switch." },
2722 {0, NULL }
2725 static const value_string cmd_rtx_effort[] = {
2726 {0x00, "No Retransmission" },
2727 {0x01, "At least 1 retransmission, optimize for power consumption" },
2728 {0x02, "At least 1 retransmission, optimize for link quality" },
2729 {0xFF, "Don't Care" },
2730 { 0, NULL }
2733 static const value_string cmd_scan_types[] = {
2734 {0x00, "Standard Scan" },
2735 {0x01, "Interlaced Scan" },
2736 { 0, NULL }
2739 const value_string bthci_cmd_inq_modes[] = {
2740 {0x00, "Standard Results" },
2741 {0x01, "Results With RSSI" },
2742 {0x02, "Results With RSSI or Extended Results" },
2743 { 0, NULL }
2746 static const value_string cmd_flush_pkt_type[] = {
2747 {0x00, "Automatically Flushable Only" },
2748 { 0, NULL }
2751 static const value_string cmd_which_clock[] = {
2752 {0x00, "Local" },
2753 {0x01, "Piconet" },
2754 { 0, NULL }
2757 const value_string bthci_cmd_notification_types[] = {
2758 {0x00, "Passkey Entry Started" },
2759 {0x01, "Passkey Digit Entered" },
2760 {0x02, "Passkey Digit Erased" },
2761 {0x03, "Passkey Cleared" },
2762 {0x04, "Passkey Entry Completed" },
2763 { 0, NULL }
2766 static const value_string bthci_cmd_amp_key_type[] = {
2767 {0x03, "Debug Combination Key" },
2768 {0x04, "Authenticated Combination Key" },
2769 {0x05, "Unauthenticated Combination Key" },
2770 { 0, NULL }
2773 static const value_string cmd_flow_spec_servicetype[] = {
2774 { 0x00, "No traffic" },
2775 { 0x01, "Best effort (Default)" },
2776 { 0x02, "Guaranteed" },
2777 { 0, NULL }
2780 static const value_string cmd_flow_ctrl_mode[] = {
2781 { 0x00, "Packet based" },
2782 { 0x01, "Data Block based" },
2783 { 0, NULL }
2786 static const value_string cmd_le_advertising_types[] = {
2787 { 0x00, "Connectable Undirected Advertising" },
2788 { 0x01, "Connectable Directed Advertising" },
2789 { 0x02, "Scannable Undirected Advertising" },
2790 { 0x03, "Non-Connectable Undirected Advertising" },
2791 { 0, NULL }
2794 static const value_string cmd_le_advertising_filter_policy[] = {
2795 { 0x00, "Allow Scan Req from Any, Allow Connect Req from Any" },
2796 { 0x01, "Allow Scan Req from Filter Accept List Only, Allow Connect Req from Any" },
2797 { 0x02, "Allow Scan Req from Any, Allow Connect Req from Filter Accept List Only" },
2798 { 0x03, "Allow Scan Req from Filter Accept List Only, Allow Connect Req from Filter Accept List Only." },
2799 { 0, NULL }
2802 static const value_string cmd_le_scan_types[] = {
2803 { 0x00, "Passive" },
2804 { 0x01, "Active" },
2805 { 0, NULL }
2808 static const value_string cmd_decision_mode_filter_policy[] = {
2809 { 0x00, "No-decisions Mode" },
2810 { 0x01, "Process All PDUs" },
2811 { 0x03, "Process Only Decision PDUs" },
2812 { 0, NULL }
2815 static const value_string cmd_init_filter_policy[] = {
2816 { 0x00, "Use provided Peer Address. Ignore decision PDUs" },
2817 { 0x01, "Use Filter Accept List. Ignore decision PDUs" },
2818 { 0x02, "Process only decision PDUs. Filter Accept List not used, Ignore provided Peer Address" },
2819 { 0x03, "Use Filter Accept List for all PDUs" },
2820 { 0x04, "Process all decision PDUs. Use Filter Accept List for other PDUs." },
2821 { 0, NULL }
2824 static const value_string cmd_sync_filter_policy[] = {
2825 { 0x00, "Use Peer Address" },
2826 { 0x01, "Use Periodic Advertiser List. Ignore Peer Address" },
2827 { 0, NULL }
2830 static const value_string cmd_privacy_mode[] = {
2831 { 0x00, "Use Network Privacy Mode" },
2832 { 0x01, "Use Device Privacy Mode" },
2833 { 0, NULL }
2836 static const value_string cmd_le_test_pkt_payload[] = {
2837 { 0x00, "Pseudo-Random Sequence 9" },
2838 { 0x01, "Pattern Of Alternating Bits '11110000'" },
2839 { 0x02, "Pattern Of Alternating Bits '10101010'" },
2840 { 0x03, "Pseudo-Random Sequence 15" },
2841 { 0x04, "Pattern Of All '1' bits" },
2842 { 0x05, "Pattern Of All '0' bits" },
2843 { 0x06, "Pattern Of Alternating Bits '00001111'" },
2844 { 0x07, "Pattern Of Alternating Bits '0101'" },
2845 { 0, NULL }
2848 static const value_string cmd_le_address_resolution_enable[] = {
2849 { 0x00, "Address Resolution in controller disabled (default)" },
2850 { 0x01, "Address Resolution in controller enabled" },
2851 { 0, NULL }
2854 static const value_string le_role_vals[] = {
2855 { 0x00, "Only Peripheral Role Supported" },
2856 { 0x01, "Only Central Role Supported" },
2857 { 0x02, "Peripheral and Central Role supported, Peripheral Role preferred for connection establishment" },
2858 { 0x03, "Peripheral and Central Role supported, Central Role preferred for connection establishment" },
2859 { 0, NULL }
2862 static const value_string tds_role_vals[] = {
2863 { 0x00, "Not Specified" },
2864 { 0x01, "Seeker Only" },
2865 { 0x02, "Provider Only" },
2866 { 0x03, "Both Seeker and Provider" },
2867 {0, NULL }
2870 static const value_string tds_transport_state_vals[] = {
2871 { 0x00, "Off" },
2872 { 0x01, "On" },
2873 { 0x02, "Temporarily Unavailable" },
2874 { 0x03, "RFU" },
2875 {0, NULL }
2878 static const value_string cmd_le_adv_data_operation[] = {
2879 { 0x00, "Intermediate fragment of fragmented data" },
2880 { 0x01, "First fragment of fragmented data" },
2881 { 0x02, "Last fragment of fragmented data" },
2882 { 0x03, "Complete scan response data" },
2883 { 0x04, "Unchanged Data, DID update only" },
2884 { 0, NULL }
2887 static const value_string cmd_le_adv_data_frag_pref[] = {
2888 { 0x00, "Controller may fragment all Host data" },
2889 { 0x01, "Controller should not fragment or should minimize fragmentation of Host data" },
2890 { 0, NULL }
2893 static const value_string cmd_le_phy_options_vals[] = {
2894 { 0x00, "Host has no preferred/required coding on LE Coded PHY" },
2895 { 0x01, "Host prefers S=2 coding on LE Coded PHY" },
2896 { 0x02, "Host prefers S=8 coding on LE Coded PHY" },
2897 { 0x03, "Host requires S=2 coding on LE Coded PHY" },
2898 { 0x04, "Host requires S=8 coding on LE Coded PHY" },
2899 { 0, NULL }
2902 static const value_string cmd_le_phy_vals[] = {
2903 { 0x01, "LE 1M" },
2904 { 0x02, "LE 2M" },
2905 { 0x03, "LE Coded" },
2906 { 0, NULL }
2908 value_string_ext bthci_cmd_le_phy_vals_ext = VALUE_STRING_EXT_INIT(cmd_le_phy_vals);
2910 static const value_string cmd_le_modulation_index_vals[] = {
2911 { 0x00, "Assume transmitter will have a standard modulation index" },
2912 { 0x01, "Assume transmitter will have a stable modulation index" },
2913 { 0, NULL }
2916 static const value_string cmd_cte_type_vals[] = {
2917 { 0x00, "AoA Constant Tone Extension" },
2918 { 0x01, "AoD Constant Tone Extension with 1 usec slots" },
2919 { 0x02, "AoD Constant Tone Extension with 2 usec slots" },
2920 { 0xFF, "No Constant Tone Extension" },
2921 { 0, NULL }
2923 value_string_ext bthci_cmd_cte_type_vals_ext = VALUE_STRING_EXT_INIT(cmd_cte_type_vals);
2925 static const value_string cmd_slot_durations_vals[] = {
2926 { 0x01, "Switching and sampling slots are 1 usec each" },
2927 { 0x02, "Switching and sampling slots are 2 usec each" },
2928 { 0, NULL }
2930 value_string_ext bthci_cmd_slot_durations_vals_ext = VALUE_STRING_EXT_INIT(cmd_slot_durations_vals);
2932 static const value_string cmd_sync_mode_vals[] = {
2933 { 0x00, "No synchronize attempt, no LE Periodic Advertising Sync Transfer Received event sent to Host" },
2934 { 0x01, "LE Periodic Advertising Sync Transfer Received event sent to Host. LE Periodic Advertising Report events disabled" },
2935 { 0x02, "LE Periodic Advertising Sync Transfer Received event sent to Host. LE Periodic Advertising Report events enabled" },
2936 { 0, NULL }
2939 static const value_string cmd_key_type_vals[] = {
2940 { 0x00, "Use the generated private key" },
2941 { 0x01, "Use the debug private key" },
2942 { 0, NULL }
2945 static const value_string cmd_sca_action_vals[] = {
2946 { 0x00, "Switch to a more accurate clock" },
2947 { 0x01, "Switch to a less accurate clock" },
2948 { 0, NULL }
2951 static const value_string cmd_clock_accuray_vals[] = {
2952 { 0x00, "251-500 ppm" },
2953 { 0x01, "151-250 ppm" },
2954 { 0x02, "101-150 ppm" },
2955 { 0x03, "76-100 ppm" },
2956 { 0x04, "51-75 ppm" },
2957 { 0x05, "31-50 ppm" },
2958 { 0x06, "21-30 ppm" },
2959 { 0x07, "0-20 ppm" },
2960 { 0, NULL }
2962 value_string_ext bthci_cmd_clock_accuray_vals_ext = VALUE_STRING_EXT_INIT(cmd_clock_accuray_vals);
2964 static const value_string cmd_packing_vals[] = {
2965 { 0x00, "Sequential" },
2966 { 0x01, "Interleaved" },
2967 { 0, NULL }
2970 static const value_string cmd_framing_vals[] = {
2971 { 0x00, "Unframed" },
2972 { 0x01, "Framed, Segmentable Mode" },
2973 { 0x02, "Framed, Unsegmented Mode" },
2974 { 0, NULL }
2976 value_string_ext bthci_cmd_framing_vals_ext = VALUE_STRING_EXT_INIT(cmd_framing_vals);
2978 static const value_string cmd_data_path_direction_vals[] = {
2979 { 0x00, "Input (Host to Controller)" },
2980 { 0x01, "Output (Controller to Host)" },
2981 { 0, NULL }
2984 static const value_string cmd_payload_type_vals[] = {
2985 { 0x00, "Zero Length" },
2986 { 0x01, "Variable Length" },
2987 { 0x02, "Maximum Length" },
2988 { 0, NULL }
2991 static const value_string cmd_host_enabled_feature_bit_vals[] = {
2992 { 32, "Isochronous Channels, Host Support" },
2993 { 38, "Connection Subrating, Host Support" },
2994 { 0, NULL }
2997 static const value_string cmd_phy_and_coding_vals[] = {
2998 { 0x01, "LE 1M" },
2999 { 0x02, "LE 2M" },
3000 { 0x03, "LE Coded, S=8" },
3001 { 0x04, "LE Coded, S=2" },
3002 { 0, NULL }
3004 value_string_ext bthci_cmd_phy_and_coding_vals_ext = VALUE_STRING_EXT_INIT(cmd_phy_and_coding_vals);
3006 static const value_string disable_enable_vals[] = {
3007 { 0x00, "Disable" },
3008 { 0x01, "Enable" },
3009 {0, NULL }
3012 static const value_string lpo_allowed_vals[] = {
3013 { 0x00, "Controller shall not sleep (+20ppm)" },
3014 { 0x01, "Controller may sleep (+250ppm)" },
3015 {0, NULL }
3018 static const value_string pcm_data_format_vals[] = {
3019 { 0x00, "N/A" },
3020 { 0x01, "1's complement" },
3021 { 0x02, "2's complement" },
3022 { 0x03, "Sign-Magnitude" },
3023 { 0x04, "Unsigned" },
3024 {0, NULL }
3027 static const range_string audio_data_path_rvals[] = {
3028 { 0x00, 0x00, "HCI" },
3029 { 0x01, 0xFE, "Vendor Specific" },
3030 { 0xFF, 0xFF, "Audio Test Mode" },
3031 { 0, 0, NULL }
3034 static const value_string mws_channel_type_vals[] = {
3035 { 0x00, "TDD" },
3036 { 0x01, "FDD" },
3037 {0, NULL }
3040 static const value_string external_frame_period_type_vals[] = {
3041 { 0x00, "Downlink" },
3042 { 0x01, "Uplink" },
3043 { 0x02, "Bi-Directional" },
3044 { 0x03, "Guard Period" },
3045 {0, NULL }
3048 static const value_string mws_pattern_type_vals[] = {
3049 { 0x00, "Neither Transmission nor Reception is Allowed" },
3050 { 0x01, "Transmission is Allowed" },
3051 { 0x02, "Reception is Allowed" },
3052 { 0x03, "Both Transmission and Reception are Allowed" },
3053 { 0x04, "Interval Defined by HCI Command" },
3054 {0, NULL }
3057 static const value_string cpb_fragment_vals[] = {
3058 { 0x00, "Continuation" },
3059 { 0x01, "Start" },
3060 { 0x02, "End" },
3061 { 0x03, "No" },
3062 {0, NULL }
3065 static const val64_string cmd_biginfo_le_phy_vals64[] = {
3066 { 0x00, "LE 1M" },
3067 { 0x01, "LE 2M" },
3068 { 0x02, "LE Coded" },
3069 { 0, NULL }
3072 static const true_false_string tfs_offset_units = {
3073 "300 usec",
3074 "30 usec"
3077 static const value_string adv_test_field_special[] = {
3078 { 0x00, "Resolvable Tag" },
3079 { 0x06, "Adv Mode" },
3080 { 0x07, "RSSI" },
3081 { 0x08, "Path Loss" },
3082 { 0x09, "Adv Address" },
3083 {0, NULL }
3086 static const value_string cmd_cs_sync_phy_vals[] = {
3087 { 0x01, "LE 1M" },
3088 { 0x02, "LE 2M" },
3089 { 0x03, "LE 2M 2BT" },
3090 { 0, NULL }
3093 static const value_string cmd_cs_role_vals[] = {
3094 { 0x00, "Initiator" },
3095 { 0x01, "Reflector" },
3096 {0, NULL }
3098 value_string_ext bthci_cmd_cs_role_vals_ext = VALUE_STRING_EXT_INIT(cmd_cs_role_vals);
3100 static const value_string cmd_aci_vals[] = {
3101 { 0x00, "1:1" },
3102 { 0x01, "2:1" },
3103 { 0x02, "3:1" },
3104 { 0x03, "4:1" },
3105 { 0x04, "1:2" },
3106 { 0x05, "1:3" },
3107 { 0x06, "1:4" },
3108 { 0x07, "2:2" },
3109 {0, NULL }
3111 value_string_ext bthci_cmd_aci_vals_ext = VALUE_STRING_EXT_INIT(cmd_aci_vals);
3113 static const value_string cmd_cs_create_context_vals[] = {
3114 { 0x00, "Local Controller Only" },
3115 { 0x01, "Local and Remote Controller" },
3116 {0, NULL }
3119 static const value_string cmd_cs_rtt_type_vals[] = {
3120 { 0x00, "Coarse" },
3121 { 0x01, "32-bit Sounding Sequence" },
3122 { 0x02, "96-bit Sounding Sequence" },
3123 { 0x03, "32-bit Random Sequence" },
3124 { 0x04, "64-bit Random Sequence" },
3125 { 0x05, "96-bit Random Sequence" },
3126 { 0x06, "128-bit Random Sequence" },
3127 {0, NULL }
3129 value_string_ext bthci_cmd_cs_rtt_type_vals_ext = VALUE_STRING_EXT_INIT(cmd_cs_rtt_type_vals);
3131 static const value_string cmd_cs_ch_selection_type_vals[] = {
3132 { 0x00, "#3b" },
3133 { 0x01, "#3c" },
3134 {0, NULL }
3136 value_string_ext bthci_cmd_cs_ch_selection_type_vals_ext = VALUE_STRING_EXT_INIT(cmd_cs_ch_selection_type_vals);
3138 static const value_string cmd_cs_shape_vals[] = {
3139 { 0x00, "Hat" },
3140 { 0x01, "Cross (X)" },
3141 {0, NULL }
3143 value_string_ext bthci_cmd_cs_shape_vals_ext = VALUE_STRING_EXT_INIT(cmd_cs_shape_vals);
3145 static const value_string cmd_snr_control_vals[] = {
3146 { 0x00, "18 dB" },
3147 { 0x01, "21 dB" },
3148 { 0x02, "24 dB" },
3149 { 0x03, "27 dB" },
3150 { 0x04, "30 dB" },
3151 { 0xff, "Not applied" },
3152 {0, NULL }
3155 static const value_string cs_sync_antenna_special[] = {
3156 {0xfe, "Repetitive order, 1 to 4"},
3157 {0xff, "Host has no recommendation"},
3158 {0, NULL}
3161 static void tx_power_setting(char *buf, int8_t value) {
3162 if (value < 126)
3163 snprintf(buf, ITEM_LABEL_LENGTH, "%i dBm", value);
3164 else if (value == 126)
3165 snprintf(buf, ITEM_LABEL_LENGTH, "Set to minimum");
3166 else
3167 snprintf(buf, ITEM_LABEL_LENGTH, "Set to maximum");
3171 void proto_register_bthci_cmd(void);
3172 void proto_reg_handoff_bthci_cmd(void);
3173 void proto_register_btcommon(void);
3174 void proto_reg_handoff_btcommon(void);
3176 static void bthci_cmd_vendor_prompt(packet_info *pinfo _U_, char* result)
3178 snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "Vendor as");
3181 static int dissect_coding_format(proto_tree *tree, int hf_x, tvbuff_t *tvb, int offset, int ett_x)
3183 proto_item *sub_item;
3184 proto_tree *sub_tree;
3186 sub_item = proto_tree_add_item(tree, hf_x, tvb, offset, 5, ENC_NA);
3187 sub_tree = proto_item_add_subtree(sub_item, ett_x);
3189 proto_tree_add_item(sub_tree, hf_bthci_cmd_codec_id, tvb, offset, 1, ENC_NA);
3190 offset += 1;
3192 proto_tree_add_item(sub_tree, hf_bthci_cmd_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3193 offset += 2;
3195 proto_tree_add_item(sub_tree, hf_bthci_cmd_vendor_codec_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3196 offset += 2;
3198 return offset;
3201 static int
3202 dissect_bthci_cmd_cod_mask(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
3204 proto_item *cod_mask_item;
3205 proto_item *cod_mask_tree;
3207 cod_mask_item = proto_tree_add_item(tree, hf_bthci_cmd_cod_class_of_device_mask, tvb, offset, 3, ENC_LITTLE_ENDIAN);
3208 cod_mask_tree = proto_item_add_subtree(cod_mask_item, ett_cod_mask);
3210 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_minor_device_class_mask, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3211 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_format_type_mask, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3212 offset += 1;
3214 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_information_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3215 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_telephony_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3216 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_audio_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3217 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_object_transfer_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3218 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_capturing_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3219 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_rendering_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3220 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_networking_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3221 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_positioning_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3222 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_reserved_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3223 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_le_audio_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3224 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_limited_discoverable_mode_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3226 proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_device_class_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3227 offset += 2;
3229 return offset;
3232 static int
3233 dissect_bthci_cmd_flow_spec(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, bool tx)
3235 proto_item *ti_flow_spec;
3236 proto_tree *ti_flow_spec_subtree;
3238 ti_flow_spec = proto_tree_add_none_format(tree, hf_bthci_cmd_flow_spec, tvb, offset, 16, tx?"Tx Flow Spec ":"Rx Flow Spec");
3239 ti_flow_spec_subtree = proto_item_add_subtree(ti_flow_spec, ett_flow_spec_subtree);
3241 proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flow_spec_identifier, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3242 offset++;
3243 proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flow_spec_service_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3244 offset++;
3245 proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flow_spec_sdu_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3246 offset+=2;
3247 proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flow_spec_sdu_arrival_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3248 offset+=4;
3249 proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flow_spec_access_latency, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3250 offset+=4;
3251 proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flush_to_us, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3252 offset+=4;
3254 return offset;
3257 static int
3258 dissect_antenna_switching_pattern(tvbuff_t *tvb, int offset, proto_tree *tree)
3260 uint8_t length_antenna_pattern;
3262 proto_tree_add_item(tree, hf_bthci_cmd_antenna_switching_pattern_length, tvb, offset, 1, ENC_NA);
3263 length_antenna_pattern = tvb_get_uint8(tvb, offset);
3264 offset += 1;
3266 if (length_antenna_pattern > 0) {
3267 proto_item *sub_item;
3268 proto_tree *sub_tree;
3270 sub_item = proto_tree_add_item(tree, hf_bthci_cmd_antenna_switching_pattern, tvb, offset, length_antenna_pattern, ENC_NA);
3271 sub_tree = proto_item_add_subtree(sub_item, ett_pattern);
3272 proto_item_append_text(sub_item, ": ");
3274 while (length_antenna_pattern > 0) {
3275 proto_tree_add_item(sub_tree, hf_bthci_cmd_antenna_id, tvb, offset, 1, ENC_NA);
3276 proto_item_append_text(sub_item, "%d ", tvb_get_uint8(tvb, offset));
3277 offset++;
3278 length_antenna_pattern--;
3281 return offset;
3284 static int
3285 dissect_link_control_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo,
3286 proto_tree *tree, uint16_t cmd_ocf, bluetooth_data_t *bluetooth_data)
3288 proto_item *item;
3289 uint32_t clock_value;
3291 switch (cmd_ocf) {
3292 case 0x0001: /* Inquiry */
3293 proto_tree_add_item(tree, hf_bthci_cmd_lap, tvb, offset, 3, ENC_LITTLE_ENDIAN);
3294 offset+=3;
3295 item = proto_tree_add_item(tree, hf_bthci_cmd_inq_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3296 proto_item_append_text(item, " (%g sec)", 1.28*tvb_get_uint8(tvb, offset));
3297 offset++;
3298 proto_tree_add_item(tree, hf_bthci_cmd_num_responses, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3299 offset++;
3300 break;
3302 case 0x0003: /* Periodic Inquiry Mode */
3303 item = proto_tree_add_item(tree, hf_bthci_cmd_max_period_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3304 proto_item_append_text(item, " (%g sec)", 1.28*tvb_get_letohs(tvb, offset));
3305 offset+=2;
3306 item = proto_tree_add_item(tree, hf_bthci_cmd_min_period_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3307 proto_item_append_text(item, " (%g sec)", 1.28*tvb_get_letohs(tvb, offset));
3308 offset+=2;
3309 proto_tree_add_item(tree, hf_bthci_cmd_lap, tvb, offset, 3, ENC_LITTLE_ENDIAN);
3310 offset+=3;
3311 item = proto_tree_add_item(tree, hf_bthci_cmd_inq_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3312 proto_item_append_text(item, " (%g sec)", 1.28*tvb_get_uint8(tvb, offset));
3313 offset++;
3314 proto_tree_add_item(tree, hf_bthci_cmd_num_responses, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3315 offset++;
3316 break;
3318 case 0x0005: /* Create Connection */
3320 uint8_t bd_addr[6];
3322 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, bd_addr);
3324 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_packet_type, ett_packet_type, hfx_bthci_cmd_packet_type, ENC_LITTLE_ENDIAN);
3325 offset += 2;
3327 proto_tree_add_item(tree, hf_bthci_cmd_page_scan_repetition_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3328 offset++;
3330 proto_tree_add_item(tree, hf_bthci_cmd_page_scan_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3331 offset++;
3333 item = proto_tree_add_item(tree, hf_bthci_cmd_clock_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3334 clock_value = tvb_get_letohs(tvb, 13) & 32767; /* only bit0-14 are valid */
3335 proto_item_append_text(item, " (%g msec)", 1.25*clock_value);
3336 proto_tree_add_item(tree, hf_bthci_cmd_clock_offset_valid , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3337 offset+=2;
3339 proto_tree_add_item(tree, hf_bthci_cmd_allow_role_switch, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3340 offset++;
3342 if (!pinfo->fd->visited) {
3343 uint32_t interface_id;
3344 uint32_t adapter_id;
3345 uint32_t bd_addr_oui;
3346 uint32_t bd_addr_id;
3347 uint32_t frame_number;
3348 wmem_tree_key_t key[6];
3349 device_role_t *device_role;
3351 interface_id = bluetooth_data->interface_id;
3352 adapter_id = bluetooth_data->adapter_id;
3353 frame_number = pinfo->num;
3354 bd_addr_oui = bd_addr[0] << 16 | bd_addr[1] << 8 | bd_addr[2];
3355 bd_addr_id = bd_addr[3] << 16 | bd_addr[4] << 8 | bd_addr[5];
3357 key[0].length = 1;
3358 key[0].key = &interface_id;
3359 key[1].length = 1;
3360 key[1].key = &adapter_id;
3361 key[2].length = 1;
3362 key[2].key = &bd_addr_id;
3363 key[3].length = 1;
3364 key[3].key = &bd_addr_oui;
3365 key[4].length = 1;
3366 key[4].key = &frame_number;
3367 key[5].length = 0;
3368 key[5].key = NULL;
3370 device_role = (device_role_t *) wmem_new(wmem_file_scope(), device_role_t);
3371 device_role->change_in_frame = frame_number;
3372 device_role->role = ROLE_PERIPHERAL;
3374 wmem_tree_insert32_array(bluetooth_data->bdaddr_to_role, key, device_role);
3377 break;
3379 case 0x0006: /* Disconnect */
3380 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3381 offset+=2;
3382 proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3383 offset++;
3384 break;
3386 case 0x0007: /* Add SCO Connection */
3387 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3388 offset+=2;
3389 proto_tree_add_item(tree, hf_bthci_cmd_packet_type_hv1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3390 proto_tree_add_item(tree, hf_bthci_cmd_packet_type_hv2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3391 proto_tree_add_item(tree, hf_bthci_cmd_packet_type_hv3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3392 offset+=2;
3393 break;
3395 case 0x0008: /* Create Connection Cancel Request */
3396 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3397 break;
3399 case 0x0009: /* Accept Connection Request */ {
3400 uint8_t bd_addr[6];
3402 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, bd_addr);
3404 proto_tree_add_item(tree, hf_bthci_cmd_acr_role, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3405 offset += 1;
3407 if (!pinfo->fd->visited) {
3408 uint32_t interface_id;
3409 uint32_t adapter_id;
3410 uint32_t bd_addr_oui;
3411 uint32_t bd_addr_id;
3412 uint32_t frame_number;
3413 wmem_tree_key_t key[6];
3414 device_role_t *device_role;
3416 interface_id = bluetooth_data->interface_id;
3417 adapter_id = bluetooth_data->adapter_id;
3418 frame_number = pinfo->num;
3419 bd_addr_oui = bd_addr[0] << 16 | bd_addr[1] << 8 | bd_addr[2];
3420 bd_addr_id = bd_addr[3] << 16 | bd_addr[4] << 8 | bd_addr[5];
3422 key[0].length = 1;
3423 key[0].key = &interface_id;
3424 key[1].length = 1;
3425 key[1].key = &adapter_id;
3426 key[2].length = 1;
3427 key[2].key = &bd_addr_id;
3428 key[3].length = 1;
3429 key[3].key = &bd_addr_oui;
3430 key[4].length = 1;
3431 key[4].key = &frame_number;
3432 key[5].length = 0;
3433 key[5].key = NULL;
3435 device_role = (device_role_t *) wmem_new(wmem_file_scope(), device_role_t);
3436 device_role->change_in_frame = frame_number;
3437 device_role->role = ROLE_CENTRAL;
3439 wmem_tree_insert32_array(bluetooth_data->bdaddr_to_role, key, device_role);
3442 break;
3444 case 0x000a: /* Reject Connection Request */
3445 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3447 proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3448 offset++;
3449 break;
3451 case 0x000b: /* Link Key Request Reply */
3452 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3454 proto_tree_add_item(tree, hf_bthci_cmd_link_key, tvb, offset, 16, ENC_NA);
3455 offset+=16;
3456 break;
3458 case 0x000c: /* Link Key Request Negative Reply */
3459 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3460 break;
3462 case 0x000d: /* PIN Code Request Reply */
3463 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3465 proto_tree_add_item(tree, hf_bthci_cmd_pin_code_length ,tvb, offset, 1, ENC_LITTLE_ENDIAN);
3466 offset++;
3467 proto_tree_add_item(tree, hf_bthci_cmd_pin_code ,tvb, offset, 16, ENC_ASCII);
3468 offset+=16;
3469 break;
3471 case 0x000e: /* PIN Code Request Negative Reply */
3472 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3473 break;
3475 case 0x000f: /* Change Connection Packet Type */
3476 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3477 offset+=2;
3479 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_packet_type, ett_packet_type, hfx_bthci_cmd_packet_type, ENC_LITTLE_ENDIAN);
3480 offset += 2;
3482 break;
3484 case 0x0011: /* Authentication Request */
3485 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3486 offset+=2;
3487 break;
3489 case 0x0013: /* Set Connection Encryption */
3490 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3491 offset+=2;
3492 proto_tree_add_item(tree, hf_bthci_cmd_encryption_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3493 offset++;
3494 break;
3496 case 0x0017: /* Link Key Selection */
3497 proto_tree_add_item(tree, hf_bthci_cmd_key_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3498 offset++;
3499 break;
3501 case 0x0019: /* Remote Name Request */
3502 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3504 proto_tree_add_item(tree, hf_bthci_cmd_page_scan_repetition_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3505 offset++;
3507 proto_tree_add_item(tree, hf_bthci_cmd_page_scan_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3508 offset++;
3510 item = proto_tree_add_item(tree, hf_bthci_cmd_clock_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3511 clock_value = tvb_get_letohs(tvb, offset) & 32767; /* only bit0-14 are valid */
3512 proto_item_append_text(item, " (%g msec)", 1.25*clock_value);
3513 proto_tree_add_item(tree, hf_bthci_cmd_clock_offset_valid , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3514 offset+=2;
3515 break;
3517 case 0x001a: /* Remote Name Request Cancel */
3518 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3519 break;
3521 case 0x001c: /* Read Remote Extended Features */
3522 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3523 offset+=2;
3524 proto_tree_add_item(tree, hf_bthci_cmd_page_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3525 offset++;
3526 break;
3528 case 0x0028: /* Setup Synchronous Connection */
3529 case 0x0029: /* Accept Synchronous Connection Request */
3530 if (cmd_ocf == 0x0028) {
3531 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3532 offset+=2;
3533 } else {
3534 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3537 proto_tree_add_item(tree, hf_bthci_cmd_transmit_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3538 offset+=4;
3540 proto_tree_add_item(tree, hf_bthci_cmd_receive_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3541 offset+=4;
3543 proto_tree_add_item(tree, hf_bthci_cmd_max_latency_ms, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3544 offset+=2;
3546 proto_tree_add_item(tree, hf_bthci_cmd_input_unused, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3547 proto_tree_add_item(tree, hf_bthci_cmd_input_coding, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3548 proto_tree_add_item(tree, hf_bthci_cmd_input_data_format, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3549 proto_tree_add_item(tree, hf_bthci_cmd_input_sample_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3550 proto_tree_add_item(tree, hf_bthci_cmd_linear_pcm_bit_pos, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3551 proto_tree_add_item(tree, hf_bthci_cmd_air_coding_format, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3552 offset+=2;
3554 proto_tree_add_item(tree, hf_bthci_cmd_retransmission_effort, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3555 offset++;
3557 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_sco_packet_type, ett_sco_packet_type, hfx_bthci_cmd_sco_packet_type, ENC_LITTLE_ENDIAN);
3558 offset += 2;
3560 break;
3561 case 0x002a: /* Reject Synchronous Connection Request */
3562 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3564 proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3565 offset++;
3566 break;
3568 case 0x0015: /* Change Connection Link Key */
3569 case 0x001b: /* Read Remote Supported Features */
3570 case 0x001d: /* Read Remote Version Information */
3571 case 0x001f: /* Read Clock Offset*/
3572 case 0x0020: /* Read LMP Handle */
3573 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3574 offset+=2;
3575 break;
3577 case 0x002b: /* IO Capability Response */
3578 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3580 proto_tree_add_item(tree, hf_bthci_cmd_io_capability, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3581 offset++;
3582 proto_tree_add_item(tree, hf_bthci_cmd_oob_data_present, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3583 offset++;
3584 proto_tree_add_item(tree, hf_bthci_cmd_auth_requirements, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3585 offset++;
3586 break;
3588 case 0x0034: /* IO Capability Request Negative Reply */
3589 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3590 proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3591 offset++;
3592 break;
3594 case 0x002c: /* User Confirmation Request Reply */
3595 case 0x002d: /* User Confirmation Request Negative Reply */
3596 case 0x002f: /* User Passkey Request Negative Reply */
3597 case 0x0033: /* Remote OOB Data Request Negative Reply */
3598 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3599 break;
3601 case 0x002e: /* User Passkey Request Reply */
3602 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3604 proto_tree_add_item(tree, hf_bthci_cmd_passkey, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3605 offset+=4;
3606 break;
3608 case 0x0030: /* Remote OOB Data Request Reply */
3609 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3611 proto_tree_add_item(tree, hf_bthci_cmd_hash_c, tvb, offset, 16, ENC_NA);
3612 offset+=16;
3613 proto_tree_add_item(tree, hf_bthci_cmd_randomizer_r, tvb, offset, 16, ENC_NA);
3614 offset+=16;
3615 break;
3617 case 0x0035: /* Create Physical Link */
3618 case 0x0036: /* Accept Physical Link */
3619 proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3620 offset++;
3621 proto_tree_add_item(tree, hf_bthci_cmd_dedicated_amp_key_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3622 offset++;
3623 proto_tree_add_item(tree, hf_bthci_cmd_dedicated_amp_key_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3624 offset++;
3625 proto_tree_add_item(tree, hf_bthci_cmd_dedicated_amp_key, tvb, offset, -1, ENC_NA);
3626 offset+=tvb_reported_length_remaining(tvb, offset);
3627 break;
3629 case 0x0037: /* Disconnect Physical Link */
3630 proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3631 offset++;
3632 proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3633 offset++;
3634 break;
3636 case 0x0038: /* Create Logical Link */
3637 case 0x0039: /* Accept Logical Link */
3638 proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3639 offset++;
3640 offset = dissect_bthci_cmd_flow_spec(tvb, offset, pinfo, tree, true);
3641 offset = dissect_bthci_cmd_flow_spec(tvb, offset, pinfo, tree, false);
3642 break;
3644 case 0x003a: /* Disconnect Logical Link */
3645 proto_tree_add_item(tree, hf_bthci_cmd_logical_link_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3646 offset+=2;
3647 break;
3649 case 0x003b: /* Logical Link Cancel */
3650 proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3651 offset++;
3652 proto_tree_add_item(tree, hf_bthci_cmd_flow_spec_identifier, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3653 offset++;
3654 break;
3656 case 0x003c: /* Flow Spec Modify */
3657 proto_tree_add_item(tree, hf_bthci_cmd_logical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3658 offset++;
3659 offset = dissect_bthci_cmd_flow_spec(tvb, offset, pinfo, tree, true);
3660 offset = dissect_bthci_cmd_flow_spec(tvb, offset, pinfo, tree, false);
3661 break;
3663 case 0x003D: /* Enhanced Setup Synchronous Connection */
3664 case 0x003E: /* Enhanced Accept Synchronous Connection Request */
3665 if (cmd_ocf == 0x003D) {
3666 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3667 offset += 2;
3668 } else {
3669 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3672 proto_tree_add_item(tree, hf_bthci_cmd_transmit_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3673 offset += 4;
3675 proto_tree_add_item(tree, hf_bthci_cmd_receive_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3676 offset += 4;
3678 offset = dissect_coding_format(tree, hf_bthci_cmd_transmit_coding_format, tvb, offset, ett_coding_format);
3680 offset = dissect_coding_format(tree, hf_bthci_cmd_receive_coding_format, tvb, offset, ett_coding_format);
3682 proto_tree_add_item(tree, hf_bthci_cmd_transmit_codec_frame_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3683 offset += 2;
3685 proto_tree_add_item(tree, hf_bthci_cmd_receive_codec_frame_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3686 offset += 2;
3688 proto_tree_add_item(tree, hf_bthci_cmd_input_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3689 offset += 4;
3691 proto_tree_add_item(tree, hf_bthci_cmd_output_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3692 offset += 4;
3694 offset = dissect_coding_format(tree, hf_bthci_cmd_input_coding_format, tvb, offset, ett_coding_format);
3696 offset = dissect_coding_format(tree, hf_bthci_cmd_output_coding_format, tvb, offset, ett_coding_format);
3698 proto_tree_add_item(tree, hf_bthci_cmd_input_coded_data_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3699 offset += 2;
3701 proto_tree_add_item(tree, hf_bthci_cmd_output_coded_data_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3702 offset += 2;
3704 proto_tree_add_item(tree, hf_bthci_cmd_input_pcm_data_format, tvb, offset, 1, ENC_NA);
3705 offset += 1;
3707 proto_tree_add_item(tree, hf_bthci_cmd_output_pcm_data_format, tvb, offset, 1, ENC_NA);
3708 offset += 1;
3710 proto_tree_add_item(tree, hf_bthci_cmd_input_pcm_sample_payload_msb_position, tvb, offset, 1, ENC_NA);
3711 offset += 1;
3713 proto_tree_add_item(tree, hf_bthci_cmd_output_pcm_sample_payload_msb_position, tvb, offset, 1, ENC_NA);
3714 offset += 1;
3716 proto_tree_add_item(tree, hf_bthci_cmd_input_data_path, tvb, offset, 1, ENC_NA);
3717 offset += 1;
3719 proto_tree_add_item(tree, hf_bthci_cmd_output_data_path, tvb, offset, 1, ENC_NA);
3720 offset += 1;
3722 proto_tree_add_item(tree, hf_bthci_cmd_input_transport_unit_size, tvb, offset, 1, ENC_NA);
3723 offset += 1;
3725 proto_tree_add_item(tree, hf_bthci_cmd_output_transport_unit_size, tvb, offset, 1, ENC_NA);
3726 offset += 1;
3728 /* TODO: Improve this range field output: 0x0000-0x0003 reserved, 0x0004-0xFFFE value in ms, 0xFFFF - "Do not care"*/
3729 proto_tree_add_item(tree, hf_bthci_cmd_max_latency_ms, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3730 offset += 2;
3732 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_sco_packet_type, ett_sco_packet_type, hfx_bthci_cmd_sco_packet_type, ENC_LITTLE_ENDIAN);
3733 offset += 2;
3735 proto_tree_add_item(tree, hf_bthci_cmd_retransmission_effort, tvb, offset, 1, ENC_NA);
3736 offset += 1;
3738 break;
3739 case 0x003F: /* Truncated Page */
3740 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3742 proto_tree_add_item(tree, hf_bthci_cmd_page_scan_repetition_mode, tvb, offset, 1, ENC_NA);
3743 offset += 1;
3745 item = proto_tree_add_item(tree, hf_bthci_cmd_clock_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3746 clock_value = tvb_get_letohs(tvb, 13) & 32767; /* only bit0-14 are valid */
3747 proto_item_append_text(item, " (%g msec)", 1.25 * clock_value);
3749 proto_tree_add_item(tree, hf_bthci_cmd_clock_offset_valid , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3750 offset += 2;
3752 break;
3753 case 0x0040: /* Truncated Page Cancel */
3754 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3756 break;
3758 case 0x0002: /* Inquiry Cancel */
3759 case 0x0004: /* Exit Periodic Inquiry Mode */
3760 case 0x0043: /* Start Synchronization Train */
3761 /* NOTE: No parameters */
3762 break;
3764 case 0x0041: /* Set Connectionless Peripheral Broadcast */
3765 proto_tree_add_item(tree, hf_bthci_cmd_connectionless_peripheral_broadcast, tvb, offset, 1, ENC_NA);
3766 offset += 1;
3768 proto_tree_add_item(tree, hf_bthci_cmd_lt_addr, tvb, offset, 1, ENC_NA);
3769 offset += 1;
3771 proto_tree_add_item(tree, hf_bthci_cmd_lpo_allowed, tvb, offset, 1, ENC_NA);
3772 offset += 1;
3774 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_packet_type, ett_packet_type, hfx_bthci_cmd_packet_type, ENC_LITTLE_ENDIAN);
3775 offset += 2;
3777 proto_tree_add_item(tree, hf_bthci_cmd_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3778 offset += 2;
3780 proto_tree_add_item(tree, hf_bthci_cmd_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3781 offset += 2;
3783 proto_tree_add_item(tree, hf_bthci_cmd_cpb_supervision_to, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3784 offset += 2;
3786 break;
3787 case 0x0042: /* Set Connectionless Peripheral Broadcast Receive */
3788 proto_tree_add_item(tree, hf_bthci_cmd_connectionless_peripheral_broadcast_receive, tvb, offset, 1, ENC_NA);
3789 offset += 1;
3791 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3793 proto_tree_add_item(tree, hf_bthci_cmd_lt_addr, tvb, offset, 1, ENC_NA);
3794 offset += 1;
3796 proto_tree_add_item(tree, hf_bthci_cmd_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3797 offset += 2;
3799 proto_tree_add_item(tree, hf_bthci_cmd_clock_offset_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3800 offset += 4;
3802 proto_tree_add_item(tree, hf_bthci_cmd_next_cpb_clock, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3803 offset += 4;
3805 proto_tree_add_item(tree, hf_bthci_cmd_cpb_supervision_to, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3806 offset += 2;
3808 proto_tree_add_item(tree, hf_bthci_cmd_remote_timing_accuracy, tvb, offset, 1, ENC_NA);
3809 offset += 1;
3811 proto_tree_add_item(tree, hf_bthci_cmd_cpb_skip, tvb, offset, 1, ENC_NA);
3812 offset += 1;
3814 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_packet_type, ett_packet_type, hfx_bthci_cmd_packet_type, ENC_LITTLE_ENDIAN);
3815 offset += 2;
3817 proto_tree_add_item(tree, hf_bthci_cmd_channel_map, tvb, offset, 10, ENC_NA);
3818 offset += 10;
3820 break;
3821 case 0x0044: /* Receive Synchronization Train */
3822 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3824 proto_tree_add_item(tree, hf_bthci_cmd_synchronization_scan_to, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3825 offset += 2;
3827 proto_tree_add_item(tree, hf_bthci_cmd_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3828 offset += 2;
3830 proto_tree_add_item(tree, hf_bthci_cmd_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3831 offset += 2;
3833 break;
3834 case 0x0045: /* Remote OOB Extended Data Request Reply */
3835 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3837 proto_tree_add_item(tree, hf_bthci_cmd_c192, tvb, offset, 16, ENC_NA);
3838 offset += 16;
3840 proto_tree_add_item(tree, hf_bthci_cmd_r192, tvb, offset, 16, ENC_NA);
3841 offset += 16;
3843 proto_tree_add_item(tree, hf_bthci_cmd_c256, tvb, offset, 16, ENC_NA);
3844 offset += 16;
3846 proto_tree_add_item(tree, hf_bthci_cmd_r256, tvb, offset, 16, ENC_NA);
3847 offset += 16;
3849 break;
3850 default:
3851 proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
3852 offset += tvb_reported_length_remaining(tvb, offset);
3855 return offset;
3858 static int
3859 dissect_link_policy_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, uint16_t cmd_ocf, bluetooth_data_t *bluetooth_data)
3861 switch (cmd_ocf) {
3862 case 0x0001: /* Hold Mode */
3863 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3864 offset+=2;
3865 proto_tree_add_item(tree, hf_bthci_cmd_max_interval_hold, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3866 offset+=2;
3867 proto_tree_add_item(tree, hf_bthci_cmd_min_interval_hold, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3868 offset+=2;
3869 break;
3871 case 0x0003: /* sniff mode */
3872 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3873 offset+=2;
3874 proto_tree_add_item(tree, hf_bthci_cmd_max_interval_sniff, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3875 offset+=2;
3876 proto_tree_add_item(tree, hf_bthci_cmd_min_interval_sniff, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3877 offset+=2;
3878 proto_tree_add_item(tree, hf_bthci_cmd_sniff_attempt, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3879 offset+=2;
3880 proto_tree_add_item(tree, hf_bthci_cmd_sniff_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3881 offset+=2;
3882 break;
3884 case 0x0005: /* Park Mode */
3885 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3886 offset+=2;
3887 proto_tree_add_item(tree, hf_bthci_cmd_max_interval_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3888 offset+=2;
3889 proto_tree_add_item(tree, hf_bthci_cmd_min_interval_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3890 offset+=2;
3891 break;
3893 case 0x0007: /* QoS Setup */
3894 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3895 offset+=2;
3896 proto_tree_add_item(tree, hf_bthci_cmd_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3897 offset++;
3898 proto_tree_add_item(tree, hf_bthci_cmd_service_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3899 offset++;
3900 proto_tree_add_item(tree, hf_bthci_cmd_token_rate, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3901 offset+=4;
3902 proto_tree_add_item(tree, hf_bthci_cmd_peak_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3903 offset+=4;
3904 proto_tree_add_item(tree, hf_bthci_cmd_latency, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3905 offset+=4;
3906 proto_tree_add_item(tree, hf_bthci_cmd_delay_variation, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3907 offset+=4;
3908 break;
3910 case 0x000b: /* Switch Role */
3911 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3913 proto_tree_add_item(tree, hf_bthci_cmd_role, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3914 offset++;
3915 break;
3917 case 0x0004: /* Exit Sniff Mode */
3918 case 0x0006: /* Exit Park Mode */
3919 case 0x0009: /* Role Discovery */
3920 case 0x000c: /* Read Link Policy Settings */
3921 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3922 offset+=2;
3923 break;
3925 case 0x000d: /* Write Link Policy Settings */
3926 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3927 offset+=2;
3928 /* FALL THROUGH */
3929 case 0x000f: /* Write Default Link Policy Settings */
3930 proto_tree_add_item(tree, hf_bthci_cmd_link_policy_setting_switch, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3931 proto_tree_add_item(tree, hf_bthci_cmd_link_policy_setting_hold , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3932 proto_tree_add_item(tree, hf_bthci_cmd_link_policy_setting_sniff , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3933 proto_tree_add_item(tree, hf_bthci_cmd_link_policy_setting_park , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3934 offset+=2;
3935 break;
3937 case 0x0010: /* Flow Specification */
3938 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3939 offset+=2;
3940 proto_tree_add_item(tree, hf_bthci_cmd_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3941 offset++;
3942 proto_tree_add_item(tree, hf_bthci_cmd_flow_direction, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3943 offset++;
3944 proto_tree_add_item(tree, hf_bthci_cmd_service_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3945 offset++;
3946 proto_tree_add_item(tree, hf_bthci_cmd_token_rate, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3947 offset+=4;
3948 proto_tree_add_item(tree, hf_bthci_cmd_token_bucket_size, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3949 offset+=4;
3950 proto_tree_add_item(tree, hf_bthci_cmd_peak_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3951 offset+=4;
3952 proto_tree_add_item(tree, hf_bthci_cmd_latency, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3953 offset+=4;
3954 break;
3956 case 0x0011: /* Sniff Subrating */
3957 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3958 offset+=2;
3959 proto_tree_add_item(tree, hf_bthci_cmd_max_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3960 offset+=2;
3961 proto_tree_add_item(tree, hf_bthci_cmd_min_remote_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3962 offset+=2;
3963 proto_tree_add_item(tree, hf_bthci_cmd_min_local_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3964 offset+=2;
3965 break;
3967 case 0x00e: /* Read Default Link Policy Setting */
3968 /* NOTE: No parameters */
3969 break;
3971 default:
3972 proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
3973 offset += tvb_reported_length_remaining(tvb, offset);
3976 return offset;
3979 static int
3980 dissect_host_controller_baseband_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo,
3981 proto_tree *tree, uint16_t cmd_ocf, bluetooth_data_t *bluetooth_data,
3982 bthci_cmd_data_t *bthci_cmd_data)
3984 proto_item *item;
3985 uint8_t filter_type, filter_condition_type, num8;
3986 int i;
3988 switch (cmd_ocf) {
3989 case 0x0001: /* Set Event Mask */
3990 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_00, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3991 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_01, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3992 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_02, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3993 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_03, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3994 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_04, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3995 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_05, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3996 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_06, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3997 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_07, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3998 offset++;
4000 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_10, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4001 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_11, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4002 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_12, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4003 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_13, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4004 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_14, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4005 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_17, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4006 offset++;
4008 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_20, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4009 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_21, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4010 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_23, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4011 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_24, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4012 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_25, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4013 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_26, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4014 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_27, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4015 offset++;
4017 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_30, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4018 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_31, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4019 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_32, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4020 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_33, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4021 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_34, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4022 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_35, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4023 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_36, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4024 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_37, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4025 offset++;
4027 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_40, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4028 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_41, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4029 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_42, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4030 offset++;
4032 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_53, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4033 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_54, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4034 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_55, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4035 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_56, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4036 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_57, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4037 offset++;
4039 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_60, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4040 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_61, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4041 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_62, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4042 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_63, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4043 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_64, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4044 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_65, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4045 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_67, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4046 offset++;
4048 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_70, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4049 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_72, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4050 proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_73, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4051 offset++;
4052 break;
4054 case 0x0005: /* Set Event Filter */
4055 proto_tree_add_item(tree, hf_bthci_cmd_filter_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4056 filter_type = tvb_get_uint8(tvb, 3);
4057 offset++;
4058 switch (filter_type) {
4060 case 0x01: /* Inquiry Result Filter */
4061 proto_tree_add_item(tree, hf_bthci_cmd_inquiry_result_filter_condition_type,
4062 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4063 filter_condition_type = tvb_get_uint8(tvb, offset);
4064 offset++;
4065 switch (filter_condition_type) {
4066 case 0x01:
4067 call_dissector(btcommon_cod_handle, tvb_new_subset_length(tvb, offset, 3), pinfo, tree);
4068 offset += 3;
4070 offset=dissect_bthci_cmd_cod_mask(tvb, offset, pinfo, tree);
4071 break;
4073 case 0x02:
4074 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4075 break;
4077 default:
4078 break;
4081 break;
4083 case 0x02: /* Connection Setup Filter */
4084 proto_tree_add_item(tree, hf_bthci_cmd_connection_setup_filter_condition_type,
4085 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4086 filter_condition_type = tvb_get_uint8(tvb, offset);
4087 offset++;
4088 switch (filter_condition_type) {
4089 case 0x00:
4090 proto_tree_add_item(tree, hf_bthci_cmd_auto_acc_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4091 offset++;
4092 break;
4094 case 0x01:
4095 call_dissector(btcommon_cod_handle, tvb_new_subset_length(tvb, offset, 3), pinfo, tree);
4096 offset += 3;
4098 offset=dissect_bthci_cmd_cod_mask(tvb, offset, pinfo, tree);
4100 proto_tree_add_item(tree, hf_bthci_cmd_auto_acc_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4101 offset++;
4102 break;
4104 case 0x02:
4105 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4107 proto_tree_add_item(tree, hf_bthci_cmd_auto_acc_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4108 offset++;
4109 break;
4111 default:
4112 break;
4115 break;
4117 default:
4118 break;
4122 break;
4123 case 0x000a: /* Write PIN Type */
4124 proto_tree_add_item(tree, hf_bthci_cmd_pin_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4125 offset++;
4126 break;
4128 case 0x000d: /* Read Stored Link Key */
4129 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4131 proto_tree_add_item(tree, hf_bthci_cmd_read_all_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4132 offset++;
4133 break;
4135 case 0x0011: /* Write Stored Link Key */
4136 proto_tree_add_item(tree, hf_bthci_cmd_num_link_keys, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4137 num8 = tvb_get_uint8(tvb, offset);
4138 offset += 1;
4140 for (i = 0; i < num8; i++) {
4141 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4142 proto_tree_add_item(tree, hf_bthci_cmd_link_key, tvb, offset, 16, ENC_NA);
4143 offset += 16;
4145 break;
4147 case 0x0012: /* Delete Stored Link Key */
4148 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4150 proto_tree_add_item(tree, hf_bthci_cmd_delete_all_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4151 offset++;
4152 break;
4154 case 0x0013: /* Change Local Name */
4155 proto_tree_add_item(tree, hf_bthci_cmd_device_name, tvb, offset, 248, ENC_UTF_8 | ENC_NA);
4156 if (!pinfo->fd->visited && bthci_cmd_data) {
4157 bthci_cmd_data->data.name = tvb_get_string_enc(wmem_file_scope(), tvb, offset, 248, ENC_UTF_8);
4159 offset += 248;
4160 break;
4162 case 0x0016: /* Write Connection Accept Timeout */
4163 proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4164 offset+=2;
4165 break;
4167 case 0x0018: /* Write Page Timeout */
4168 proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4169 if (!pinfo->fd->visited && bthci_cmd_data) {
4170 bthci_cmd_data->data.page_timeout = tvb_get_letohs(tvb, offset);
4172 offset+=2;
4173 break;
4175 case 0x001a: /* Write Scan Enable */
4176 proto_tree_add_item(tree, hf_bthci_cmd_scan_enable,
4177 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4178 if (!pinfo->fd->visited && bthci_cmd_data) {
4179 bthci_cmd_data->data.scan = tvb_get_uint8(tvb, offset);
4181 offset++;
4182 break;
4184 case 0x0020: /* Write Authentication Enable */
4185 proto_tree_add_item(tree, hf_bthci_cmd_authentication_enable,
4186 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4187 if (!pinfo->fd->visited && bthci_cmd_data) {
4188 bthci_cmd_data->data.authentication = tvb_get_uint8(tvb, offset);
4190 offset++;
4191 break;
4193 case 0x0022: /* Write Encryption Mode */
4194 proto_tree_add_item(tree, hf_bthci_cmd_encrypt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4195 if (!pinfo->fd->visited && bthci_cmd_data) {
4196 bthci_cmd_data->data.encryption = tvb_get_uint8(tvb, offset);
4198 offset++;
4199 break;
4201 case 0x0024: /* Write Class of Device */
4202 call_dissector(btcommon_cod_handle, tvb_new_subset_length(tvb, offset, 3), pinfo, tree);
4203 if (!pinfo->fd->visited && bthci_cmd_data) {
4204 bthci_cmd_data->data.class_of_device = tvb_get_uint24(tvb, offset, ENC_LITTLE_ENDIAN);
4206 offset += 3;
4207 break;
4209 case 0x0026: /* Write Voice Setting */
4210 proto_tree_add_item(tree, hf_bthci_cmd_input_unused,
4211 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4212 proto_tree_add_item(tree, hf_bthci_cmd_input_coding,
4213 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4214 proto_tree_add_item(tree, hf_bthci_cmd_input_data_format,
4215 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4216 proto_tree_add_item(tree, hf_bthci_cmd_input_sample_size,
4217 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4218 proto_tree_add_item(tree, hf_bthci_cmd_linear_pcm_bit_pos,
4219 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4220 proto_tree_add_item(tree, hf_bthci_cmd_air_coding_format,
4221 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4222 if (!pinfo->fd->visited && bthci_cmd_data) {
4223 bthci_cmd_data->data.voice_setting = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
4225 offset+=2;
4226 break;
4228 case 0x0028: /* Write Automatic Flush Timeout */
4229 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4230 offset+=2;
4231 proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4232 offset+=2;
4233 break;
4235 case 0x002a: /* Write Num of Broadcast Retransmissions */
4236 proto_tree_add_item(tree, hf_bthci_cmd_num_broadcast_retransmissions,
4237 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4238 offset++;
4239 break;
4241 case 0x002c: /* Write Hold Mode Activity */
4242 proto_tree_add_item(tree, hf_bthci_cmd_hold_mode_act_page,
4243 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4244 proto_tree_add_item(tree, hf_bthci_cmd_hold_mode_act_inquiry,
4245 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4246 proto_tree_add_item(tree, hf_bthci_cmd_hold_mode_act_periodic,
4247 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4248 offset++;
4249 break;
4251 case 0x002d: /* Read Transmit Power Level */
4252 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle,
4253 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4254 offset+=2;
4255 proto_tree_add_item(tree, hf_bthci_cmd_tx_power_level_type,
4256 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4257 offset++;
4258 break;
4260 case 0x002f: /* Write SCO Flow Control Enable */
4261 proto_tree_add_item(tree, hf_bthci_cmd_sco_flow_control,
4262 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4263 offset++;
4264 break;
4266 case 0x0031: /* Set Host Controller To Host Flow Control */
4267 proto_tree_add_item(tree, hf_bthci_cmd_flow_contr_enable,
4268 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4269 offset++;
4270 break;
4272 case 0x0033: /* Host Buffer Size */
4273 proto_tree_add_item(tree, hf_bthci_cmd_host_data_packet_length_acl,
4274 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4275 offset+=2;
4276 proto_tree_add_item(tree, hf_bthci_cmd_host_data_packet_length_sco,
4277 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4278 offset++;
4279 proto_tree_add_item(tree, hf_bthci_cmd_host_total_num_acl_data_packets,
4280 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4281 offset+=2;
4282 proto_tree_add_item(tree, hf_bthci_cmd_host_total_num_sco_data_packets,
4283 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4284 offset+=2;
4286 if (!pinfo->fd->visited && bthci_cmd_data) {
4287 bthci_cmd_data->data.mtus.acl_mtu = tvb_get_uint16(tvb, offset - 7, ENC_LITTLE_ENDIAN);
4288 bthci_cmd_data->data.mtus.sco_mtu = tvb_get_uint8(tvb, offset - 5);
4289 bthci_cmd_data->data.mtus.acl_packets = tvb_get_uint16(tvb, offset - 4, ENC_LITTLE_ENDIAN);
4290 bthci_cmd_data->data.mtus.sco_packets = tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN);
4292 break;
4294 case 0x0035: /* Host Number Of Completed Packets */
4295 proto_tree_add_item(tree, hf_bthci_cmd_num_handles,
4296 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4297 num8 = tvb_get_uint8(tvb, offset);
4298 offset++;
4300 for (i=0; i<num8; i++) {
4301 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle,
4302 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4303 offset += 2;
4305 proto_tree_add_item(tree, hf_bthci_cmd_num_compl_packets,
4306 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4307 offset += 2;
4309 break;
4311 case 0x0037: /* Write Link Supervision Timeout */
4312 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle,
4313 tvb, offset, 2, ENC_LITTLE_ENDIAN);
4314 offset+=2;
4315 proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4316 offset+=2;
4317 break;
4319 case 0x003a: /* Write Current IAC LAP */
4320 proto_tree_add_item(tree, hf_bthci_cmd_num_curr_iac, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4321 num8 = tvb_get_uint8(tvb, offset);
4322 offset++;
4323 for (i=0; i<num8; i++) {
4324 proto_tree_add_item(tree, hf_bthci_cmd_iac_lap, tvb, offset+(i*3), 3, ENC_LITTLE_ENDIAN);
4326 offset += num8 * 3;
4327 break;
4329 case 0x003c: /* Write Page Scan Period Mode */
4330 proto_tree_add_item(tree, hf_bthci_cmd_page_scan_period_mode,
4331 tvb, offset, 1, ENC_LITTLE_ENDIAN);
4332 offset++;
4333 break;
4335 case 0x003e: /* Write Page Scan Mode */
4336 proto_tree_add_item(tree, hf_bthci_cmd_page_scan_mode,
4337 tvb, 3, 1, ENC_LITTLE_ENDIAN);
4338 break;
4340 case 0x003f: /* Set AFH Host Channel Classification */
4341 proto_tree_add_item(tree, hf_bthci_cmd_ch_classification, tvb, offset, 10, ENC_NA);
4342 offset+=10;
4343 break;
4345 case 0x0008: /* Flush */
4346 case 0x0027: /* Read Automatic Flush Timeout */
4347 case 0x0036: /* Read Link Supervision Timeout */
4348 case 0x0007B: /* Read Authenticated Payload Timeout */
4349 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4350 offset+=2;
4351 break;
4353 case 0x001c: /* Write Page Scan Activity */
4354 case 0x001e: /* Write Inquiry Scan Activity */
4355 item = proto_tree_add_item(tree, hf_bthci_cmd_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4356 proto_item_append_text(item, " slots (%g msec)", tvb_get_letohs(tvb, offset)*0.625);
4357 offset+=2;
4358 item = proto_tree_add_item(tree, hf_bthci_cmd_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4359 proto_item_append_text(item, " slots (%g msec)", tvb_get_letohs(tvb, offset)*0.625);
4360 offset+=2;
4361 break;
4364 case 0x0043: /* Write Inquiry Scan Type */
4365 proto_tree_add_item(tree, hf_bthci_cmd_scan_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4366 offset++;
4367 break;
4369 case 0x0045: /* Write Inquiry Mode */
4370 proto_tree_add_item(tree, hf_bthci_cmd_inq_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4371 if (!pinfo->fd->visited && bthci_cmd_data) {
4372 bthci_cmd_data->data.inquiry_mode = tvb_get_uint8(tvb, offset);
4374 offset++;
4375 break;
4377 case 0x0047: /* Write Page Scan Type */
4378 proto_tree_add_item(tree, hf_bthci_cmd_scan_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4379 offset++;
4380 break;
4382 case 0x0049: /* Write AFH Channel Assessment Mode */
4383 proto_tree_add_item(tree, hf_bthci_cmd_afh_ch_assessment_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4384 offset++;
4385 break;
4387 case 0x0052: /* Write Extended Inquiry Response */
4389 bluetooth_eir_ad_data_t *eir_data;
4391 eir_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
4392 eir_data->interface_id = bluetooth_data->interface_id;
4393 eir_data->adapter_id = bluetooth_data->adapter_id;
4394 eir_data->bd_addr = NULL;
4396 proto_tree_add_item(tree, hf_bthci_cmd_fec_required, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4397 offset++;
4399 call_dissector_with_data(btcommon_eir_handle, tvb_new_subset_length(tvb, offset, 240), pinfo, tree, eir_data);
4400 save_local_device_name_from_eir_ad(tvb, offset, pinfo, 240, bluetooth_data);
4401 offset += 240;
4404 break;
4406 case 0x0053: /* Refresh Encryption Key */
4407 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4408 offset+=2;
4409 break;
4411 case 0x0056: /* Write Simple Pairing Mode */
4412 proto_tree_add_item(tree, hf_bthci_cmd_simple_pairing_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4413 if (!pinfo->fd->visited && bthci_cmd_data) {
4414 bthci_cmd_data->data.simple_pairing_mode = tvb_get_uint8(tvb, offset);
4416 offset++;
4417 break;
4419 case 0x0059: /* Write Inquiry Tx Response Power Level */
4420 proto_tree_add_item(tree, hf_bthci_cmd_tx_power, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4421 offset++;
4422 break;
4424 case 0x005b: /* Write Default Erroneous Data Reporting */
4425 proto_tree_add_item(tree, hf_bthci_cmd_err_data_reporting, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4426 offset++;
4427 break;
4429 case 0x005f: /* Enhanced Flush */
4430 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4431 offset+=2;
4432 proto_tree_add_item(tree, hf_bthci_cmd_flush_packet_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4433 offset++;
4434 break;
4436 case 0x0060: /* Send Keypress Notification */
4437 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4439 proto_tree_add_item(tree, hf_bthci_cmd_notification_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4440 offset++;
4441 break;
4443 case 0x0062: /* Write Logical Link Accept Timeout */
4444 proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4445 offset+=2;
4446 break;
4448 case 0x0063: /* Set Event Mask Page 2 */
4449 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_evt_mask2, ett_event_mask_page_2, hfx_bthci_cmd_event_mask_page_2, ENC_LITTLE_ENDIAN);
4450 offset += 8;
4451 break;
4453 case 0x0065: /* Write Location Data */
4454 proto_tree_add_item(tree, hf_bthci_cmd_location_domain_aware, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4455 offset++;
4456 proto_tree_add_item(tree, hf_bthci_cmd_location_domain, tvb, offset, 2, ENC_ASCII | ENC_NA);
4457 offset+=2;
4458 proto_tree_add_item(tree, hf_bthci_cmd_location_domain_options, tvb, offset, 1, ENC_ASCII | ENC_NA);
4459 offset++;
4460 proto_tree_add_item(tree, hf_bthci_cmd_location_options, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4461 offset++;
4462 break;
4464 case 0x0067: /* Write Flow Control Mode */
4465 proto_tree_add_item(tree, hf_bthci_cmd_flow_control_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4466 offset++;
4467 break;
4469 case 0x0068: /* Read Enhanced Tx Power Level */
4470 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4471 offset+=2;
4472 proto_tree_add_item(tree, hf_bthci_cmd_tx_power_level_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4473 offset++;
4474 break;
4476 case 0x0069: /* Read Best Effort Flush Timeout */
4477 proto_tree_add_item(tree, hf_bthci_cmd_logical_link_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4478 offset+=2;
4479 break;
4481 case 0x006a: /* Write Best Effort Flush Timeout */
4482 proto_tree_add_item(tree, hf_bthci_cmd_logical_link_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4483 offset+=2;
4484 proto_tree_add_item(tree, hf_bthci_cmd_flush_to_us, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4485 offset+=4;
4486 break;
4488 case 0x006b: /* Short Range Mode */
4489 proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4490 offset++;
4491 proto_tree_add_item(tree, hf_bthci_cmd_short_range_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4492 offset++;
4493 break;
4495 case 0x006d: /* Write LE Host Supported */
4496 proto_tree_add_item(tree, hf_bthci_cmd_le_supported_host, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4497 offset++;
4498 proto_tree_add_item(tree, hf_bthci_cmd_le_simultaneous_host, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4499 offset++;
4500 break;
4502 case 0x003: /* Reset */
4503 case 0x009: /* Read PIN Type */
4504 case 0x00B: /* Create New Unit Key */
4505 case 0x014: /* Read Local Name */
4506 case 0x015: /* Read Connection Accept Timeout */
4507 case 0x017: /* Read Page Timeout */
4508 case 0x019: /* Read Scan Enable */
4509 case 0x01B: /* Read Page Scan Activity */
4510 case 0x01D: /* Read Inquiry Scan Activity */
4511 case 0x01F: /* Read Authentication Enable */
4512 case 0x021: /* Read Encryption Mode */
4513 case 0x023: /* Read Class of Device */
4514 case 0x025: /* Read Voice Setting */
4515 case 0x029: /* Read Num Broadcast Retransmissions */
4516 case 0x02B: /* Read Hold Mode Activity */
4517 case 0x02E: /* Read SCO Flow Control Enable */
4518 case 0x038: /* Read Number of Supported IAC */
4519 case 0x039: /* Read Current IAC LAP */
4520 case 0x03B: /* Read Page Scan Period Mode */
4521 case 0x03D: /* Read Page Scan Mode */
4522 case 0x042: /* Read Inquiry Scan Type */
4523 case 0x044: /* Read Inquiry Mode */
4524 case 0x046: /* Read Page Scan Type */
4525 case 0x048: /* Read AFH Channel Assessment Mode */
4526 case 0x051: /* Read Extended Inquiry Response */
4527 case 0x055: /* Read Simple Pairing Mode */
4528 case 0x057: /* Read Local OOB Data */
4529 case 0x058: /* Read Inquiry Response Tx Power Level */
4530 case 0x05A: /* Read Default Erroneous Data Reporting */
4531 case 0x061: /* Read Logical Link Accept Timeout */
4532 case 0x064: /* Read Location Data */
4533 case 0x066: /* Read Flow Control Mode */
4534 case 0x06C: /* Read LE Host Supported */
4535 case 0x077: /* Read Synchronization Train Parameters */
4536 case 0x079: /* Read Secure Connections Host Support */
4537 case 0x07D: /* Read Local OOB Extended Data */
4538 case 0x07E: /* Read Extended Page Timeout */
4539 case 0x080: /* Read Extended Inquiry Length */
4540 /* NOTE: No parameters */
4541 break;
4543 case 0x06E: /* Set MWS Channel Parameters */
4544 proto_tree_add_item(tree, hf_bthci_mws_channel, tvb, offset, 1, ENC_NA);
4545 offset += 1;
4547 proto_tree_add_item(tree, hf_bthci_mws_rx_center_frequency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4548 offset += 2;
4550 proto_tree_add_item(tree, hf_bthci_mws_tx_center_frequency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4551 offset += 2;
4553 proto_tree_add_item(tree, hf_bthci_mws_rx_channel_bandwidth, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4554 offset += 2;
4556 proto_tree_add_item(tree, hf_bthci_mws_tx_channel_bandwidth, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4557 offset += 2;
4559 proto_tree_add_item(tree, hf_bthci_mws_channel_type, tvb, offset, 1, ENC_NA);
4560 offset += 1;
4562 break;
4563 case 0x06F: /* Set External Frame Configuration */
4565 proto_item *sub_item;
4566 proto_tree *sub_tree;
4567 uint32_t number_of_periods;
4568 int i_item = 1;
4570 proto_tree_add_item(tree, hf_bthci_external_frame_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4571 offset += 2;
4573 proto_tree_add_item(tree, hf_bthci_external_frame_sync_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4574 offset += 2;
4576 proto_tree_add_item(tree, hf_bthci_external_frame_sync_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4577 offset += 2;
4579 proto_tree_add_item_ret_uint(tree, hf_bthci_external_frame_number_of_periods, tvb, offset, 1, ENC_NA, &number_of_periods);
4580 offset += 1;
4582 sub_item = proto_tree_add_item(tree, hf_bthci_external_frame_periods, tvb, offset, -1, ENC_NA);
4583 sub_tree = proto_item_add_subtree(sub_item, ett_periods);
4585 while (number_of_periods--) {
4586 proto_item *entry_item;
4587 proto_tree *entry_tree;
4589 entry_item = proto_tree_add_item(sub_tree, hf_bthci_external_frame_period, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4590 entry_tree = proto_item_add_subtree(entry_item, ett_period);
4591 proto_item_append_text(entry_item, " #%u", i_item);
4593 proto_tree_add_item(entry_tree, hf_bthci_external_frame_period_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4594 offset += 2;
4596 proto_tree_add_item(entry_tree, hf_bthci_external_frame_period_type, tvb, offset, 1, ENC_NA);
4597 offset += 1;
4599 i_item += 1;
4603 break;
4604 case 0x070: /* Set MWS Signaling */
4605 proto_tree_add_item(tree, hf_bthci_mws_rx_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4606 offset += 2;
4608 proto_tree_add_item(tree, hf_bthci_mws_rx_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4609 offset += 2;
4611 proto_tree_add_item(tree, hf_bthci_mws_rx_deassert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4612 offset += 2;
4614 proto_tree_add_item(tree, hf_bthci_mws_rx_deassert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4615 offset += 2;
4618 proto_tree_add_item(tree, hf_bthci_mws_tx_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4619 offset += 2;
4621 proto_tree_add_item(tree, hf_bthci_mws_tx_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4622 offset += 2;
4624 proto_tree_add_item(tree, hf_bthci_mws_tx_deassert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4625 offset += 2;
4627 proto_tree_add_item(tree, hf_bthci_mws_tx_deassert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4628 offset += 2;
4631 proto_tree_add_item(tree, hf_bthci_mws_pattern_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4632 offset += 2;
4634 proto_tree_add_item(tree, hf_bthci_mws_pattern_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4635 offset += 2;
4638 proto_tree_add_item(tree, hf_bthci_mws_inactivity_duration_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4639 offset += 2;
4641 proto_tree_add_item(tree, hf_bthci_mws_inactivity_duration_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4642 offset += 2;
4645 proto_tree_add_item(tree, hf_bthci_mws_scan_frequency_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4646 offset += 2;
4648 proto_tree_add_item(tree, hf_bthci_mws_scan_frequency_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4649 offset += 2;
4652 proto_tree_add_item(tree, hf_bthci_mws_priority_assert_offset_request, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4653 offset += 2;
4655 break;
4656 case 0x071: /* Set MWS Transport Layer */
4657 proto_tree_add_item(tree, hf_bthci_mws_transport_layer, tvb, offset, 1, ENC_NA);
4658 offset += 1;
4660 proto_tree_add_item(tree, hf_bthci_mws_to_baud_rate, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4661 offset += 4;
4663 proto_tree_add_item(tree, hf_bthci_mws_from_baud_rate, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4664 offset += 4;
4666 break;
4667 case 0x072: /* Set MWS Scan Frequency Table */
4669 proto_item *sub_item;
4670 proto_tree *sub_tree;
4671 uint32_t number_of_frequencies;
4672 int i_item = 1;
4674 proto_tree_add_item_ret_uint(tree, hf_bthci_mws_number_of_frequencies, tvb, offset, 1, ENC_NA, &number_of_frequencies);
4675 offset += 1;
4677 sub_item = proto_tree_add_item(tree, hf_bthci_mws_scan_frequency_table, tvb, offset, -1, ENC_NA);
4678 sub_tree = proto_item_add_subtree(sub_item, ett_table);
4680 while (number_of_frequencies--) {
4681 proto_item *entry_item;
4682 proto_tree *entry_tree;
4684 entry_item = proto_tree_add_item(sub_tree, hf_bthci_mws_scan_frequency_table_item, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4685 entry_tree = proto_item_add_subtree(entry_item, ett_table_item);
4686 proto_item_append_text(entry_item, " #%u", i_item);
4688 proto_tree_add_item(entry_tree, hf_bthci_mws_scan_frequency_table_item_low, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4689 offset += 2;
4691 proto_tree_add_item(entry_tree, hf_bthci_mws_scan_frequency_table_item_high, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4692 offset += 2;
4694 i_item += 1;
4698 break;
4699 case 0x073: /* Set MWS Pattern Configuration */
4701 proto_item *sub_item;
4702 proto_tree *sub_tree;
4703 uint32_t number_of_intervals;
4704 int i_item = 1;
4706 proto_tree_add_item(tree, hf_bthci_mws_pattern_index, tvb, offset, 1, ENC_NA);
4707 offset += 1;
4709 proto_tree_add_item_ret_uint(tree, hf_bthci_mws_pattern_number_of_intervals, tvb, offset, 1, ENC_NA, &number_of_intervals);
4710 offset += 1;
4712 sub_item = proto_tree_add_item(tree, hf_bthci_mws_patterns, tvb, offset, -1, ENC_NA);
4713 sub_tree = proto_item_add_subtree(sub_item, ett_patterns);
4715 while (number_of_intervals--) {
4716 proto_item *entry_item;
4717 proto_tree *entry_tree;
4719 entry_item = proto_tree_add_item(sub_tree, hf_bthci_mws_pattern, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4720 entry_tree = proto_item_add_subtree(entry_item, ett_pattern);
4721 proto_item_append_text(entry_item, " #%u", i_item);
4723 proto_tree_add_item(entry_tree, hf_bthci_mws_pattern_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4724 offset += 2;
4726 proto_tree_add_item(entry_tree, hf_bthci_mws_pattern_type, tvb, offset, 1, ENC_NA);
4727 offset += 1;
4729 i_item += 1;
4734 break;
4735 case 0x074: /* Set Reserved LT_ADDR */
4736 case 0x075: /* Delete Reserved LT_ADDR */
4737 proto_tree_add_item(tree, hf_bthci_cmd_lt_addr, tvb, offset, 1, ENC_NA);
4738 offset += 1;
4740 break;
4741 case 0x076: /* Set Connectionless Peripheral Broadcast Data */
4743 uint32_t data_length;
4745 proto_tree_add_item(tree, hf_bthci_cmd_lt_addr, tvb, offset, 1, ENC_NA);
4746 offset += 1;
4748 proto_tree_add_item(tree, hf_bthci_cmd_cpb_fragment, tvb, offset, 1, ENC_NA);
4749 offset += 1;
4751 proto_tree_add_item_ret_uint(tree, hf_bthci_cmd_cpb_data_length, tvb, offset, 1, ENC_NA, &data_length);
4752 offset += 1;
4754 proto_tree_add_item(tree, hf_bthci_cmd_cpb_data, tvb, offset, data_length, ENC_NA);
4755 offset += data_length;
4758 break;
4759 case 0x078: /* Write Synchronization Train Parameters */
4760 proto_tree_add_item(tree, hf_bthci_cmd_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4761 offset += 2;
4763 proto_tree_add_item(tree, hf_bthci_cmd_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4764 offset += 2;
4766 proto_tree_add_item(tree, hf_bthci_cmd_sync_train_to, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4767 offset += 4;
4769 proto_tree_add_item(tree, hf_bthci_cmd_service_data, tvb, offset, 1, ENC_NA);
4770 offset += 1;
4772 break;
4773 case 0x07A: /* Write Secure Connections Host Support */
4774 proto_tree_add_item(tree, hf_bthci_cmd_secure_connection_host_support, tvb, offset, 1, ENC_NA);
4775 offset += 1;
4777 break;
4778 case 0x07C: /* Write Authenticated Payload Timeout */
4779 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4780 offset += 2;
4782 proto_tree_add_item(tree, hf_bthci_cmd_authenticated_payload_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4783 offset += 2;
4785 break;
4786 case 0x07F: /* Write Extended Page Timeout */
4787 proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4788 offset += 2;
4790 break;
4791 case 0x081: /* Write Extended Inquiry Length */
4792 proto_tree_add_item(tree, hf_bthci_cmd_extended_inquiry_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4793 offset += 2;
4795 break;
4796 case 0x082: /* Set Ecosystem Base Interval */
4798 uint16_t interval = tvb_get_letohs(tvb, offset);
4799 item = proto_tree_add_item(tree, hf_bthci_cmd_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4800 if (interval) {
4801 proto_item_append_text(item, " (%g msec)", interval * 1.25);
4802 } else {
4803 proto_item_append_text(item, " (Ignore Any Previous Hint)");
4805 offset += 2;
4808 break;
4809 case 0x083: /* Configure Data Path */
4811 uint8_t codec_length;
4812 proto_tree_add_item(tree, hf_bthci_cmd_data_path_direction, tvb, offset, 1, ENC_NA);
4813 offset += 1;
4814 proto_tree_add_item(tree, hf_bthci_cmd_data_path_id, tvb, offset, 1, ENC_NA);
4815 offset += 1;
4816 codec_length = tvb_get_uint8(tvb, offset);
4817 proto_tree_add_item(tree, hf_bthci_cmd_codec_config_length, tvb, offset, 1, ENC_NA);
4818 offset++;
4819 proto_tree_add_item(tree, hf_bthci_cmd_codec_config, tvb, offset, codec_length, ENC_NA);
4820 offset += codec_length;
4823 break;
4824 case 0x084: /* Set Min Encryption Key Size */
4825 proto_tree_add_item(tree, hf_bthci_cmd_min_encryption_key_size, tvb, offset, 1, ENC_NA);
4826 offset += 1;
4828 break;
4829 default:
4830 proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
4831 offset += tvb_reported_length_remaining(tvb, offset);
4834 return offset;
4837 static int
4838 dissect_informational_parameters_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo,
4839 proto_tree *tree, uint16_t cmd_ocf)
4841 switch (cmd_ocf) {
4843 case 0x0004: /* Read Local Extended Features */
4844 proto_tree_add_item(tree, hf_bthci_cmd_page_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4845 offset++;
4846 break;
4848 case 0x001: /* Read Local Version Information */
4849 case 0x002: /* Read Local Supported Commands */
4850 case 0x003: /* Read Local Supported Features */
4851 case 0x005: /* Read Buffer Size */
4852 case 0x007: /* Read Country Code */
4853 case 0x009: /* Read BD ADDR */
4854 case 0x00A: /* Read Data Block Size */
4855 case 0x00B: /* Read Local Supported Codecs */
4856 case 0x00C: /* Read Local Simple Pairing Options */
4857 /* NOTE: No parameters */
4858 break;
4860 default:
4861 proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
4862 offset += tvb_reported_length_remaining(tvb, offset);
4865 return offset;
4868 static int
4869 dissect_status_parameters_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo,
4870 proto_tree *tree, uint16_t cmd_ocf)
4872 switch (cmd_ocf) {
4874 case 0x0001: /* Read Failed Contact Counter */
4875 case 0x0002: /* Reset Failed Contact Counter */
4876 case 0x0003: /* Get Link Quality */
4877 case 0x0005: /* Read RSSI */
4878 case 0x0006: /* Read AFH Channel Map */
4879 case 0x0008: /* Read Encryption Key Size */
4880 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4881 offset+=2;
4882 break;
4884 case 0x0007: /* Read Clock */
4885 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4886 offset+=2;
4887 proto_tree_add_item(tree, hf_bthci_cmd_which_clock, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4888 offset++;
4889 break;
4891 case 0x0009: /* Read Local AMP Info */
4892 break;
4894 case 0x000a: /* Read Local AMP Assoc */
4895 proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4896 offset++;
4897 proto_tree_add_item(tree, hf_bthci_cmd_length_so_far, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4898 offset+=2;
4899 proto_tree_add_item(tree, hf_bthci_cmd_amp_assoc_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4900 offset+=2;
4901 break;
4903 case 0x000b: /* Write Remote AMP Assoc */
4904 proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4905 offset++;
4906 proto_tree_add_item(tree, hf_bthci_cmd_length_so_far, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4907 offset+=2;
4908 proto_tree_add_item(tree, hf_bthci_cmd_amp_remaining_assoc_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4909 offset+=2;
4910 proto_tree_add_item(tree, hf_bthci_cmd_amp_assoc_fragment, tvb, offset, -1, ENC_NA);
4911 offset+=tvb_reported_length_remaining(tvb, offset);
4912 break;
4915 case 0x000C: /* Get MWS Transport Layer Configuration */
4916 /* NOTE: No parameters */
4917 break;
4919 case 0x000D: /* Set Triggered Clock Capture */
4920 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4921 offset += 2;
4923 proto_tree_add_item(tree, hf_bthci_cmd_triggered_clock_capture, tvb, offset, 1, ENC_NA);
4924 offset += 1;
4926 proto_tree_add_item(tree, hf_bthci_cmd_which_clock, tvb, offset, 1, ENC_NA);
4927 offset += 1;
4929 proto_tree_add_item(tree, hf_bthci_cmd_lpo_allowed, tvb, offset, 1, ENC_NA);
4930 offset += 1;
4932 proto_tree_add_item(tree, hf_bthci_cmd_number_of_clock_captures_to_filter, tvb, offset, 1, ENC_NA);
4933 offset += 1;
4934 break;
4936 default:
4937 proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
4938 offset += tvb_reported_length_remaining(tvb, offset);
4941 return offset;
4944 static int
4945 dissect_testing_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, uint16_t cmd_ocf)
4947 switch (cmd_ocf) {
4949 case 0x0002: /* Write Loopback Mode */
4950 proto_tree_add_item(tree, hf_bthci_cmd_loopback_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4951 offset++;
4952 break;
4954 case 0x0004: /* Write Simple Pairing Debug Mode */
4955 proto_tree_add_item(tree, hf_bthci_cmd_simple_pairing_debug_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4956 offset++;
4957 break;
4959 case 0x0007: /* Enable AMP Receiver Reports */
4960 proto_tree_add_item(tree, hf_bthci_cmd_enable_amp_recv_reports, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4961 offset++;
4962 proto_tree_add_item(tree, hf_bthci_cmd_amp_recv_report_interval, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4963 offset++;
4964 break;
4966 case 0x001: /* Read Loopback Mode */
4967 case 0x003: /* Enable Device Under Test Mode */
4968 case 0x008: /* AMP Test End */
4969 /* NOTE: No parameters */
4970 break;
4972 case 0x009: /* AMP Test */
4973 proto_tree_add_item(tree, hf_bthci_cmd_amp_controller_type, tvb, offset, 1, ENC_NA);
4974 offset += 1;
4976 break;
4977 case 0x00A: /* Write Secure Connections Test Mode */
4978 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4979 offset += 2;
4981 proto_tree_add_item(tree, hf_bthci_cmd_dm1_acl_u_mode, tvb, offset, 1, ENC_NA);
4982 offset += 1;
4984 proto_tree_add_item(tree, hf_bthci_cmd_esco_loopback_mode, tvb, offset, 1, ENC_NA);
4985 offset += 1;
4987 break;
4988 default:
4989 proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
4990 offset += tvb_reported_length_remaining(tvb, offset);
4993 return offset;
4996 static int
4997 dissect_le_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, uint16_t cmd_ocf, bluetooth_data_t *bluetooth_data)
4999 proto_item *item;
5000 proto_item *sub_item;
5001 proto_tree *sub_tree;
5003 switch(cmd_ocf) {
5005 case 0x0001: /* LE Set Event Mask */
5006 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_le_event_mask, ett_le_event_mask, hfx_bthci_cmd_le_event_mask, ENC_LITTLE_ENDIAN);
5007 offset += 8;
5008 break;
5010 case 0x0005: /* LE Set Random Address */
5011 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5012 break;
5014 case 0x0006: /* LE Set Advertising Parameters */
5015 item = proto_tree_add_item(tree, hf_bthci_cmd_le_advts_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5016 proto_item_append_text(item, " (%g msec)", tvb_get_letohs(tvb, offset)*0.625);
5017 offset+=2;
5018 item = proto_tree_add_item(tree, hf_bthci_cmd_le_advts_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5019 proto_item_append_text(item, " (%g msec)", tvb_get_letohs(tvb, offset)*0.625);
5020 offset+=2;
5021 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5022 offset++;
5023 proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5024 offset++;
5025 proto_tree_add_item(tree, hf_bthci_cmd_le_direct_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5026 offset++;
5027 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5028 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5029 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5030 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_3, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5031 offset++;
5032 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_filter_policy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5033 offset++;
5034 break;
5036 case 0x0008: /* LE Set Advertising Data */
5037 case 0x0009: /* LE Set Scan Response Data */
5039 bluetooth_eir_ad_data_t *ad_data;
5041 ad_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
5042 ad_data->interface_id = bluetooth_data->interface_id;
5043 ad_data->adapter_id = bluetooth_data->adapter_id;
5044 ad_data->bd_addr = NULL;
5046 proto_tree_add_item(tree, hf_bthci_cmd_le_data_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5047 offset++;
5049 call_dissector_with_data(btcommon_ad_handle, tvb_new_subset_length(tvb, offset, 31), pinfo, tree, ad_data);
5050 save_local_device_name_from_eir_ad(tvb, offset, pinfo, 31, bluetooth_data);
5051 offset += 31;
5054 break;
5056 case 0x000a: /* LE Set Advertise Enable */
5057 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5058 offset++;
5059 break;
5061 case 0x000b: /* LE Set Scan Parameters */
5062 proto_tree_add_item(tree, hf_bthci_cmd_le_scan_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5063 offset++;
5064 proto_tree_add_item(tree, hf_bthci_cmd_le_scan_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5065 offset+=2;
5066 proto_tree_add_item(tree, hf_bthci_cmd_le_scan_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5067 offset+=2;
5068 proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5069 offset++;
5070 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_le_scan_filter_policy, ett_filter_policy, hfx_bthci_cmd_scan_filter_policy, ENC_NA);
5071 offset++;
5072 break;
5074 case 0x000c: /* LE Set Scan Enable */
5075 proto_tree_add_item(tree, hf_bthci_cmd_le_scan_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5076 offset++;
5077 proto_tree_add_item(tree, hf_bthci_cmd_le_filter_duplicates, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5078 offset++;
5079 break;
5081 case 0x000d: /* LE Create Connection */
5082 proto_tree_add_item(tree, hf_bthci_cmd_le_scan_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5083 offset+=2;
5084 proto_tree_add_item(tree, hf_bthci_cmd_le_scan_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5085 offset+=2;
5086 proto_tree_add_item(tree, hf_bthci_cmd_le_initiator_filter_policy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5087 offset++;
5088 proto_tree_add_item(tree, hf_bthci_cmd_le_peer_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5089 offset++;
5090 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5091 proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5092 offset++;
5093 proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5094 offset+=2;
5095 proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5096 offset+=2;
5097 item = proto_tree_add_item(tree, hf_bthci_cmd_le_con_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5098 proto_item_append_text(item, " (number events)");
5099 offset+=2;
5100 proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5101 offset+=2;
5102 proto_tree_add_item(tree, hf_bthci_cmd_le_min_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5103 offset+=2;
5104 proto_tree_add_item(tree, hf_bthci_cmd_le_max_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5105 offset+=2;
5106 break;
5108 case 0x0011: /* LE Add Device To Filter Accept List */
5109 case 0x0012: /* LE Remove Device From Filter Accept List */
5110 proto_tree_add_item(tree, hf_bthci_cmd_le_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5111 offset++;
5112 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5113 break;
5115 case 0x0013: /* LE Connection Update */
5116 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5117 offset+=2;
5118 proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5119 offset+=2;
5120 proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5121 offset+=2;
5122 item = proto_tree_add_item(tree, hf_bthci_cmd_le_con_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5123 proto_item_append_text(item, " (number events)");
5124 offset+=2;
5125 proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5126 offset+=2;
5127 proto_tree_add_item(tree, hf_bthci_cmd_le_min_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5128 offset+=2;
5129 proto_tree_add_item(tree, hf_bthci_cmd_le_max_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5130 offset+=2;
5131 break;
5133 case 0x0014: /* LE Set Host Channel Classification */
5134 sub_item = proto_tree_add_item(tree, hf_bthci_cmd_le_channel_map, tvb, offset, 5, ENC_NA);
5135 sub_tree = proto_item_add_subtree(sub_item, ett_le_channel_map);
5137 call_dissector(btcommon_le_channel_map_handle, tvb_new_subset_length(tvb, offset, 5), pinfo, sub_tree);
5138 offset += 5;
5140 break;
5142 case 0x0015: /* LE Read Channel Map */
5143 case 0x0016: /* LE Read Remote Features */
5144 case 0x001b: /* LE Long Term Key Request Negative Reply */
5145 case 0x0030: /* LE Read PHY */
5146 case 0x006D: /* LE Request Peer SCA */
5147 case 0x008A: /* LE CS Read Remote Supported Capabilities */
5148 case 0x008C: /* LE CS Security Enable */
5149 case 0x008E: /* LE CS Read Remote FAE Table */
5150 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5151 offset+=2;
5152 break;
5154 case 0x0017: /* LE Encrypt */
5155 proto_tree_add_item(tree, hf_bthci_cmd_key, tvb, offset, 16, ENC_NA);
5156 offset+=16;
5157 proto_tree_add_item(tree, hf_bthci_cmd_plaintext_data, tvb, offset, 16, ENC_NA);
5158 offset+=16;
5159 break;
5161 case 0x0019: /* LE Enable Encryption */
5162 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5163 offset+=2;
5164 proto_tree_add_item(tree, hf_bthci_cmd_random_number, tvb, offset, 8, ENC_NA);
5165 offset+=8;
5166 proto_tree_add_item(tree, hf_bthci_cmd_encrypted_diversifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5167 offset+=2;
5168 proto_tree_add_item(tree, hf_bthci_cmd_le_long_term_key, tvb, offset, 16, ENC_NA);
5169 offset+=16;
5170 break;
5172 case 0x001a: /* LE Long Term Key Request Reply */
5173 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5174 offset+=2;
5175 proto_tree_add_item(tree, hf_bthci_cmd_le_long_term_key, tvb, offset, 16, ENC_NA);
5176 offset+=16;
5177 break;
5179 case 0x001d: /* LE Receiver Test [v1] */
5180 case 0x0033: /* LE Receiver Test [v2] */
5181 case 0x004f: /* LE Receiver Test [v3] */
5182 item = proto_tree_add_item(tree, hf_bthci_cmd_rx_frequency, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5183 proto_item_append_text(item, " (%d MHz)", 2402 + 2*tvb_get_uint8(tvb, offset));
5184 offset++;
5186 if (cmd_ocf >= 0x0033) {
5187 proto_tree_add_item(tree, hf_bthci_cmd_phy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5188 offset++;
5189 proto_tree_add_item(tree, hf_bthci_cmd_modulation_index, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5190 offset++;
5193 if (cmd_ocf >= 0x004f) {
5194 item = proto_tree_add_item(tree, hf_bthci_cmd_cte_length, tvb, offset, 1, ENC_NA);
5195 proto_item_append_text(item, " (%d usec)", tvb_get_uint8(tvb, offset)*8);
5196 offset++;
5197 proto_tree_add_item(tree, hf_bthci_cmd_cte_type, tvb, offset, 1, ENC_NA);
5198 offset++;
5199 proto_tree_add_item(tree, hf_bthci_cmd_slot_durations, tvb, offset, 1, ENC_NA);
5200 offset++;
5201 offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5203 break;
5205 case 0x001e: /* LE Transmitter Test [v1] */
5206 case 0x0034: /* LE Transmitter Test [v2] */
5207 case 0x0050: /* LE Transmitter Test [v3] */
5208 case 0x007B: /* LE Transmitter Test [v4] */
5209 item = proto_tree_add_item(tree, hf_bthci_cmd_tx_frequency, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5210 proto_item_append_text(item, " (%d MHz)", 2402 + 2*tvb_get_uint8(tvb, offset));
5211 offset++;
5212 proto_tree_add_item(tree, hf_bthci_cmd_test_data_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5213 offset++;
5214 proto_tree_add_item(tree, hf_bthci_cmd_test_packet_payload, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5215 offset++;
5217 if (cmd_ocf >= 0x0034) {
5218 proto_tree_add_item(tree, hf_bthci_cmd_phy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5219 offset++;
5222 if (cmd_ocf >= 0x0050) {
5223 item = proto_tree_add_item(tree, hf_bthci_cmd_cte_length, tvb, offset, 1, ENC_NA);
5224 proto_item_append_text(item, " (%d usec)", tvb_get_uint8(tvb, offset)*8);
5225 offset++;
5226 proto_tree_add_item(tree, hf_bthci_cmd_cte_type, tvb, offset, 1, ENC_NA);
5227 offset++;
5228 offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5231 if (cmd_ocf >= 0x007B) {
5232 proto_tree_add_item(tree, hf_bthci_cmd_tx_power_setting, tvb, offset, 1, ENC_NA);
5233 offset++;
5235 break;
5237 case 0x0020: /*LE Remote Connection Parameter Request Reply */
5238 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5239 offset+=2;
5240 proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5241 offset+=2;
5242 proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5243 offset+=2;
5244 item = proto_tree_add_item(tree, hf_bthci_cmd_le_con_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5245 proto_item_append_text(item, " (number events)");
5246 offset+=2;
5247 proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5248 offset+=2;
5249 proto_tree_add_item(tree, hf_bthci_cmd_le_min_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5250 offset+=2;
5251 proto_tree_add_item(tree, hf_bthci_cmd_le_max_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5252 offset+=2;
5253 break;
5255 case 0x0021: /* LE Remote Connection Parameter Request Negative Reply */
5256 case 0x0067: /* LE Reject CIS Request */
5257 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5258 offset+=2;
5259 proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5260 offset++;
5261 break;
5263 case 0x0022: /* LE Set Data Length */
5264 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5265 offset+=2;
5266 proto_tree_add_item(tree, hf_bthci_cmd_le_tx_octets, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5267 offset+=2;
5268 proto_tree_add_item(tree, hf_bthci_cmd_le_tx_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5269 offset+=2;
5270 break;
5272 case 0x0024: /* LE Write Suggested Default Data Length */
5273 proto_tree_add_item(tree, hf_bthci_cmd_le_suggested_max_tx_octets, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5274 offset+=2;
5275 proto_tree_add_item(tree, hf_bthci_cmd_le_suggested_max_tx_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5276 offset+=2;
5277 break;
5279 case 0x0026: /* LE Generate DHKey [v1] */
5280 proto_tree_add_item(tree, hf_bthci_cmd_le_remote_p_256_public_key, tvb, offset, 64, ENC_NA);
5281 offset+=64;
5282 break;
5284 case 0x0027: /* LE Add Device to Resolving List */
5285 proto_tree_add_item(tree, hf_bthci_cmd_le_peer_identity_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5286 offset++;
5287 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5288 proto_tree_add_item(tree, hf_bthci_cmd_le_peer_irk, tvb, offset, 16, ENC_NA);
5289 offset+=16;
5290 proto_tree_add_item(tree, hf_bthci_cmd_le_local_irk, tvb, offset, 16, ENC_NA);
5291 offset+=16;
5292 break;
5294 case 0x0028: /* LE Remove Device From Resolving List */
5295 proto_tree_add_item(tree, hf_bthci_cmd_le_peer_identity_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5296 offset++;
5297 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5298 break;
5300 case 0x002B: /* LE Read Peer Resolvable Address */
5301 proto_tree_add_item(tree, hf_bthci_cmd_le_peer_identity_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5302 offset++;
5303 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5304 break;
5306 case 0x002C: /* LE Read Local Resolvable Address" */
5307 proto_tree_add_item(tree, hf_bthci_cmd_le_peer_identity_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5308 offset++;
5309 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5310 break;
5312 case 0x002D: /* Set Address Resolution Enable */
5313 proto_tree_add_item(tree, hf_bthci_cmd_le_address_resolution_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5314 offset++;
5315 break;
5317 case 0x002E: /* LE Set Resolvable Private Address Timeout */
5318 proto_tree_add_item(tree, hf_bthci_cmd_le_rpa_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5319 offset+=2;
5320 break;
5322 case 0x0031: /* LE Set Default PHY */
5323 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_all_phys, ett_phys_flags, hfx_btcmd_all_phys, ENC_NA);
5324 offset += 1;
5325 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tx_phys, ett_phys_flags, hfx_btcmd_phys_pref, ENC_NA);
5326 offset+=1;
5327 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_rx_phys, ett_phys_flags, hfx_btcmd_phys_pref, ENC_NA);
5328 offset+=1;
5329 break;
5331 case 0x0032: /* LE Set PHY */
5332 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5333 offset+=2;
5334 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_all_phys, ett_phys_flags, hfx_btcmd_all_phys, ENC_NA);
5335 offset += 1;
5336 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tx_phys, ett_phys_flags, hfx_btcmd_phys_pref, ENC_NA);
5337 offset+=1;
5338 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_rx_phys, ett_phys_flags, hfx_btcmd_phys_pref, ENC_NA);
5339 offset+=1;
5340 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_phy_options, ett_phys_flags, hfx_btcmd_phy_options, ENC_LITTLE_ENDIAN);
5341 offset+=2;
5342 break;
5344 case 0x0035: /* LE Set Advertising Set Random Address */
5345 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5346 offset+=1;
5347 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5348 break;
5350 case 0x0036: /* LE Set Extended Advertising Parameters [v1] */
5351 case 0x007F: /* LE Set Extended Advertising Parameters [v2] */
5352 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5353 offset+=1;
5354 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_advertising_properties, ett_adv_properties, hfx_bthci_cmd_adv_properties, ENC_LITTLE_ENDIAN);
5355 offset+=2;
5356 proto_tree_add_item(tree, hf_bthci_cmd_advertising_ext_interval_min, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5357 offset+=3;
5358 proto_tree_add_item(tree, hf_bthci_cmd_advertising_ext_interval_max, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5359 offset+=3;
5360 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5361 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5362 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_3, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5363 offset++;
5364 proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5365 offset++;
5366 proto_tree_add_item(tree, hf_bthci_cmd_le_peer_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5367 offset++;
5368 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5369 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_filter_policy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5370 offset++;
5371 proto_tree_add_item(tree, hf_bthci_cmd_tx_power, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5372 offset++;
5373 proto_tree_add_item(tree, hf_bthci_cmd_primary_advertising_phy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5374 offset++;
5375 proto_tree_add_item(tree, hf_bthci_cmd_sec_adv_max_skip, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5376 offset++;
5377 proto_tree_add_item(tree, hf_bthci_cmd_secondary_advertising_phy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5378 offset++;
5379 proto_tree_add_item(tree, hf_bthci_cmd_advertising_sid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5380 offset++;
5381 proto_tree_add_item(tree, hf_bthci_cmd_scan_req_notif_en, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5382 offset++;
5383 if (cmd_ocf == 0x007F) {
5384 proto_tree_add_item(tree, hf_bthci_cmd_primary_adv_phy_options, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5385 offset++;
5386 proto_tree_add_item(tree, hf_bthci_cmd_secondary_adv_phy_options, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5387 offset++;
5389 break;
5391 case 0x0037: /* LE Set Extended Advertising Data */
5392 case 0x0038: /* LE Set Extended Scan Response Data */
5394 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5395 offset+=1;
5396 proto_tree_add_item(tree, hf_bthci_cmd_le_adv_data_operation, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5397 offset+=1;
5398 proto_tree_add_item(tree, hf_bthci_cmd_le_adv_data_frag_pref, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5399 offset+=1;
5401 bluetooth_eir_ad_data_t *ad_data;
5402 ad_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
5403 ad_data->interface_id = bluetooth_data->interface_id;
5404 ad_data->adapter_id = bluetooth_data->adapter_id;
5405 ad_data->bd_addr = NULL;
5407 uint8_t data_length = tvb_get_uint8(tvb, offset);
5408 proto_tree_add_item(tree, hf_bthci_cmd_le_data_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5409 offset++;
5410 call_dissector_with_data(btcommon_ad_handle, tvb_new_subset_length(tvb, offset, data_length), pinfo, tree, ad_data);
5411 save_local_device_name_from_eir_ad(tvb, offset, pinfo, data_length, bluetooth_data);
5412 offset += data_length;
5414 break;
5416 case 0x0039: /* LE Set Extended Advertising Enable */
5418 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5419 offset++;
5421 uint8_t number_of_sets = tvb_get_uint8(tvb, offset);
5422 proto_tree_add_item(tree, hf_bthci_cmd_le_adv_en_sets, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5423 offset++;
5425 for (int i = 0; i< number_of_sets; i++) {
5426 sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_le_adv_set, tvb, offset, 4, "Set, Handle: %u", tvb_get_uint8(tvb, offset));
5427 sub_tree = proto_item_add_subtree(sub_item, ett_adv_sets);
5428 proto_tree_add_item(sub_tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5429 offset+=1;
5430 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_adv_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5431 offset+=2;
5432 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_adv_max_extended_events, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5433 offset+=1;
5436 break;
5438 case 0x003C: /* LE Remove Advertising Set */
5439 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5440 offset+=1;
5441 break;
5443 case 0x003E: /* LE Set Periodic Advertising Parameters [v1] */
5444 case 0x0086: /* LE Set Periodic Advertising Parameters [v2] */
5445 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5446 offset+=1;
5447 item = proto_tree_add_item(tree, hf_bthci_cmd_le_advts_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5448 proto_item_append_text(item, " (%g msec)", tvb_get_letohs(tvb, offset)*1.25);
5449 offset+=2;
5450 item = proto_tree_add_item(tree, hf_bthci_cmd_le_advts_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5451 proto_item_append_text(item, " (%g msec)", tvb_get_letohs(tvb, offset)*1.25);
5452 offset+=2;
5453 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_periodic_advertising_properties, ett_adv_properties,
5454 hfx_bthci_cmd_periodic_adv_properties, ENC_LITTLE_ENDIAN);
5455 offset+=2;
5456 if (cmd_ocf == 0x0086) {
5457 proto_tree_add_item(tree, hf_bthci_cmd_num_subevents, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5458 offset+=1;
5459 proto_tree_add_item(tree, hf_bthci_cmd_subevent_interval, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5460 offset+=1;
5461 proto_tree_add_item(tree, hf_bthci_cmd_response_slot_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5462 offset+=1;
5463 proto_tree_add_item(tree, hf_bthci_cmd_response_slot_spacing, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5464 offset+=1;
5465 proto_tree_add_item(tree, hf_bthci_cmd_num_response_slots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5466 offset+=1;
5468 break;
5470 case 0x003F: /* LE Set Periodic Advertising Data */
5472 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5473 offset+=1;
5474 proto_tree_add_item(tree, hf_bthci_cmd_le_adv_data_operation, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5475 offset+=1;
5477 bluetooth_eir_ad_data_t *ad_data;
5478 ad_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
5479 ad_data->interface_id = bluetooth_data->interface_id;
5480 ad_data->adapter_id = bluetooth_data->adapter_id;
5481 ad_data->bd_addr = NULL;
5483 uint8_t data_length = tvb_get_uint8(tvb, offset);
5484 proto_tree_add_item(tree, hf_bthci_cmd_le_data_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5485 offset++;
5486 call_dissector_with_data(btcommon_ad_handle, tvb_new_subset_length(tvb, offset, data_length), pinfo, tree, ad_data);
5487 save_local_device_name_from_eir_ad(tvb, offset, pinfo, data_length, bluetooth_data);
5488 offset += data_length;
5490 break;
5492 case 0x0040: /* LE Set Periodic Advertising Enable */
5493 proto_tree_add_item(tree, hf_bthci_cmd_le_advts_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5494 offset++;
5495 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5496 offset+=1;
5497 break;
5499 case 0x0041: /* LE Set Extended Scan Parameters */
5501 uint8_t scanning_phys, phy = 0;
5502 proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5503 offset++;
5504 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_le_scan_filter_policy, ett_filter_policy, hfx_bthci_cmd_scan_filter_policy, ENC_NA);
5505 offset++;
5506 scanning_phys = tvb_get_uint8(tvb, offset);
5507 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_le_scan_phys, ett_phy_param, hfx_btcmd_le_scan_phys, ENC_NA);
5508 offset += 1;
5509 for (int i = 1; i < 0x08; i <<=1) {
5510 phy++;
5511 if (scanning_phys & i) {
5512 sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_le_scan_phy_param, tvb, offset, 5, "Scanning PHY: %s",
5513 val_to_str_const(phy, cmd_le_phy_vals, "Unknown"));
5514 sub_tree = proto_item_add_subtree(sub_item, ett_phy_param);
5515 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_scan_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5516 offset++;
5517 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_scan_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5518 offset+=2;
5519 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_scan_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5520 offset+=2;
5524 break;
5526 case 0x0042: /* LE Set Extended Scan Enable */
5527 proto_tree_add_item(tree, hf_bthci_cmd_le_scan_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5528 offset++;
5529 proto_tree_add_item(tree, hf_bthci_cmd_le_filter_duplicates, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5530 offset++;
5531 item = proto_tree_add_item(tree, hf_bthci_cmd_le_scan_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5532 proto_item_append_text(item, " (%g msec)", tvb_get_letohs(tvb, offset)*10.0);
5533 offset+=2;
5534 item = proto_tree_add_item(tree, hf_bthci_cmd_le_scan_period, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5535 proto_item_append_text(item, " (%g sec)", tvb_get_letohs(tvb, offset)*1.28);
5536 offset+=2;
5537 break;
5539 case 0x0085: /* LE Extended Create Connection [v2] */
5540 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5541 offset+=1;
5542 item = proto_tree_add_item(tree, hf_bthci_cmd_subevent, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5543 if (tvb_get_uint8(tvb, offset) == 0xff) {
5544 proto_item_append_text(item, " (not used)");
5546 offset+=1;
5547 /* FALLTHROUGH */
5549 case 0x0043: /* LE Extended Create Connection [v1] */
5551 uint8_t initiating_phys, phy = 0;
5552 proto_tree_add_item(tree, hf_bthci_cmd_le_initiator_filter_policy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5553 offset++;
5554 proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5555 offset++;
5556 proto_tree_add_item(tree, hf_bthci_cmd_le_peer_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5557 offset++;
5558 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5559 initiating_phys = tvb_get_uint8(tvb, offset);
5560 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_le_phys, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5561 offset += 1;
5562 for (int i = 1; i < 0x08; i <<=1) {
5563 phy++;
5564 if (initiating_phys & i) {
5565 sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_le_init_phy_param, tvb, offset, 16, "Initiating PHY: %s",
5566 val_to_str_const(phy, cmd_le_phy_vals, "Unknown"));
5567 sub_tree = proto_item_add_subtree(sub_item, ett_phy_param);
5568 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_scan_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5569 offset+=2;
5570 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_scan_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5571 offset+=2;
5572 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_con_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5573 offset+=2;
5574 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_con_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5575 offset+=2;
5576 item = proto_tree_add_item(sub_tree, hf_bthci_cmd_le_con_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5577 proto_item_append_text(item, " (number events)");
5578 offset+=2;
5579 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5580 offset+=2;
5581 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_min_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5582 offset+=2;
5583 proto_tree_add_item(sub_tree, hf_bthci_cmd_le_max_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5584 offset+=2;
5588 break;
5590 case 0x0044: /* LE Periodic Advertising Create Sync */
5591 proto_tree_add_item(tree, hf_bthci_cmd_sync_filter_policy, tvb, offset, 1, ENC_NA);
5592 offset++;
5593 proto_tree_add_item(tree, hf_bthci_cmd_advertising_sid, tvb, offset, 1, ENC_NA);
5594 offset++;
5595 proto_tree_add_item(tree, hf_bthci_cmd_le_peer_address_type, tvb, offset, 1, ENC_NA);
5596 offset++;
5597 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5598 proto_tree_add_item(tree, hf_bthci_cmd_skip, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5599 offset+=2;
5600 proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5601 offset+=2;
5602 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_sync_cte_type, ett_sync_cte_type, hfx_btcmd_sync_cte_type, ENC_NA);
5603 offset++;
5604 break;
5606 case 0x0046: /* LE Periodic Advertising Terminate Sync */
5607 proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5608 offset+=2;
5609 break;
5611 case 0x0047: /* LE Add Device To Periodic Advertiser List */
5612 case 0x0048: /* LE Remove Device From Periodic Advertiser List */
5613 proto_tree_add_item(tree, hf_bthci_cmd_le_peer_address_type, tvb, offset, 1, ENC_NA);
5614 offset++;
5615 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5616 proto_tree_add_item(tree, hf_bthci_cmd_advertising_sid, tvb, offset, 1, ENC_NA);
5617 offset++;
5618 break;
5620 case 0x004D: /* LE Write RF Path Compensation */
5621 item = proto_tree_add_item(tree, hf_bthci_cmd_rf_tx_path_compensation_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5622 proto_item_append_text(item, " (%g dB)", tvb_get_letohis(tvb, offset)*0.1);
5623 offset+=2;
5624 item = proto_tree_add_item(tree, hf_bthci_cmd_rf_rx_path_compensation_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5625 proto_item_append_text(item, " (%g dB)", tvb_get_letohis(tvb, offset)*0.1);
5626 offset+=2;
5627 break;
5629 case 0x004E: /* LE Set Privacy Mode */
5630 proto_tree_add_item(tree, hf_bthci_cmd_le_peer_identity_address_type, tvb, offset, 1, ENC_NA);
5631 offset++;
5632 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5633 proto_tree_add_item(tree, hf_bthci_cmd_le_privacy_mode, tvb, offset, 1, ENC_NA);
5634 offset++;
5635 break;
5637 case 0x0051: /* LE Set Connectionless CTE Transmit Parameters */
5638 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
5639 offset++;
5640 item = proto_tree_add_item(tree, hf_bthci_cmd_cte_length, tvb, offset, 1, ENC_NA);
5641 proto_item_append_text(item, " (%d usec)", tvb_get_uint8(tvb, offset)*8);
5642 offset++;
5643 proto_tree_add_item(tree, hf_bthci_cmd_cte_type, tvb, offset, 1, ENC_NA);
5644 offset++;
5645 proto_tree_add_item(tree, hf_bthci_cmd_cte_count, tvb, offset, 1, ENC_NA);
5646 offset++;
5647 offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5648 break;
5650 case 0x0052: /* LE Set Connectionless CTE Transmit Enable */
5651 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
5652 offset++;
5653 proto_tree_add_item(tree, hf_bthci_cmd_cte_enable, tvb, offset, 1, ENC_NA);
5654 offset++;
5655 break;
5657 case 0x0053: /* LE Set Connectionless IQ Sampling Enable */
5658 proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5659 offset+=2;
5660 proto_tree_add_item(tree, hf_bthci_cmd_iq_sampling_enable, tvb, offset, 1, ENC_NA);
5661 offset++;
5662 proto_tree_add_item(tree, hf_bthci_cmd_slot_durations, tvb, offset, 1, ENC_NA);
5663 offset++;
5664 item = proto_tree_add_item(tree, hf_bthci_cmd_max_sampled_ctes, tvb, offset, 1, ENC_NA);
5665 if (tvb_get_uint8(tvb, offset) == 0)
5666 proto_item_append_text(item, " (Sample and report all available CTEs)");
5667 offset++;
5668 offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5669 break;
5671 case 0x0054: /* LE Set Connection CTE Receive Parameters */
5672 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5673 offset+=2;
5674 proto_tree_add_item(tree, hf_bthci_cmd_iq_sampling_enable, tvb, offset, 1, ENC_NA);
5675 offset++;
5676 proto_tree_add_item(tree, hf_bthci_cmd_slot_durations, tvb, offset, 1, ENC_NA);
5677 offset++;
5678 offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5679 break;
5681 case 0x0055: /* LE Set Connection CTE Transmit Parameters */
5682 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5683 offset+=2;
5684 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cte_types, ett_sync_cte_type, hfx_btcmd_cte_types, ENC_NA);
5685 offset++;
5686 offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5687 break;
5689 case 0x0056: /* LE Connection CTE Request Enable */
5690 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5691 offset+=2;
5692 proto_tree_add_item(tree, hf_bthci_cmd_cte_enable, tvb, offset, 1, ENC_NA);
5693 offset++;
5694 item = proto_tree_add_item(tree, hf_bthci_cmd_cte_request_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5695 if (tvb_get_letohs(tvb, offset) == 0)
5696 proto_item_append_text(item, " (Initiate once, at earliest opportunity)");
5697 else
5698 proto_item_append_text(item, " (Connection Events)");
5699 offset+=2;
5700 item = proto_tree_add_item(tree, hf_bthci_cmd_cte_length, tvb, offset, 1, ENC_NA);
5701 proto_item_append_text(item, " (%d usec)", tvb_get_uint8(tvb, offset)*8);
5702 offset++;
5703 proto_tree_add_item(tree, hf_bthci_cmd_cte_type, tvb, offset, 1, ENC_NA);
5704 offset++;
5705 break;
5707 case 0x0057: /* LE Connection CTE Response Enable */
5708 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5709 offset+=2;
5710 proto_tree_add_item(tree, hf_bthci_cmd_cte_enable, tvb, offset, 1, ENC_NA);
5711 offset++;
5712 break;
5714 case 0x0059: /* LE Set Periodic Advertising Receive Enable */
5715 proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5716 offset+=2;
5717 proto_tree_add_item(tree, hf_bthci_cmd_reporting_enable, tvb, offset, 1, ENC_NA);
5718 offset++;
5719 break;
5721 case 0x005A: /* LE Periodic Advertising Sync Transfer */
5722 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5723 offset+=2;
5724 proto_tree_add_item(tree, hf_bthci_cmd_service_data_past, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5725 offset+=2;
5726 proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5727 offset+=2;
5728 break;
5730 case 0x005B: /* LE Periodic Advertising Set Info Transfer */
5731 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5732 offset+=2;
5733 proto_tree_add_item(tree, hf_bthci_cmd_service_data_past, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5734 offset+=2;
5735 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
5736 offset++;
5737 break;
5739 case 0x005C: /* LE Set Periodic Advertising Sync Transfer Parameters */
5740 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5741 offset+=2;
5742 /* FALL THROUGH */
5744 case 0x005D: /* LE Set Default Periodic Advertising Sync Transfer Parameters */
5745 proto_tree_add_item(tree, hf_bthci_cmd_sync_mode, tvb, offset, 1, ENC_NA);
5746 offset++;
5747 proto_tree_add_item(tree, hf_bthci_cmd_skip, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5748 offset+=2;
5749 proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5750 offset+=2;
5751 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_sync_cte_type, ett_sync_cte_type, hfx_btcmd_sync_cte_type, ENC_NA);
5752 offset++;
5753 break;
5755 case 0x005E: /* LE Generate DHKey [v2] */
5756 proto_tree_add_item(tree, hf_bthci_cmd_le_remote_p_256_public_key, tvb, offset, 64, ENC_NA);
5757 offset+=64;
5758 proto_tree_add_item(tree, hf_bthci_cmd_key_type, tvb, offset, 1, ENC_NA);
5759 offset++;
5760 break;
5762 case 0x005F: /* LE Modify Sleep Clock Accuracy */
5763 proto_tree_add_item(tree, hf_bthci_cmd_sca_action, tvb, offset, 1, ENC_NA);
5764 offset++;
5765 break;
5767 case 0x0061: /* LE Read ISO Tx Sync */
5768 case 0x0072: /* LE ISO Read Test Counters */
5769 case 0x0073: /* LE ISO Test End */
5770 case 0x0075: /* LE Read ISO Link Quality */
5771 proto_tree_add_item(tree, hf_bthci_cmd_cis_bis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5772 offset+=2;
5773 break;
5775 case 0x0062: /* LE Set CIG Parameters */
5777 uint8_t cis_count;
5778 proto_tree_add_item(tree, hf_bthci_cmd_cig_id, tvb, offset, 1, ENC_NA);
5779 offset++;
5780 proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval_c_to_p, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5781 offset+=3;
5782 proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval_p_to_c, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5783 offset+=3;
5784 proto_tree_add_item(tree, hf_bthci_cmd_peripherals_clock_accuracy, tvb, offset, 1, ENC_NA);
5785 offset++;
5786 proto_tree_add_item(tree, hf_bthci_cmd_packing, tvb, offset, 1, ENC_NA);
5787 offset++;
5788 proto_tree_add_item(tree, hf_bthci_cmd_framing, tvb, offset, 1, ENC_NA);
5789 offset++;
5790 proto_tree_add_item(tree, hf_bthci_cmd_max_transport_latency_c_to_p, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5791 offset+=2;
5792 proto_tree_add_item(tree, hf_bthci_cmd_max_transport_latency_p_to_c, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5793 offset+=2;
5794 proto_tree_add_item(tree, hf_bthci_cmd_cis_count, tvb, offset, 1, ENC_NA);
5795 cis_count = tvb_get_uint8(tvb, offset);
5796 offset++;
5798 for (int i = 0; i < cis_count; i++) {
5799 sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_cis_params, tvb, offset, 9, "CIS Parameters, CIS Id: 0x%x", tvb_get_uint8(tvb, offset));
5800 sub_tree = proto_item_add_subtree(sub_item, ett_cis_params);
5801 proto_tree_add_item(sub_tree, hf_bthci_cmd_cis_id, tvb, offset, 1, ENC_NA);
5802 offset++;
5803 proto_tree_add_item(sub_tree, hf_bthci_cmd_max_sdu_c_to_p, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5804 offset+=2;
5805 proto_tree_add_item(sub_tree, hf_bthci_cmd_max_sdu_p_to_c, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5806 offset+=2;
5807 proto_tree_add_bitmask(sub_tree, tvb, offset, hf_bthci_cmd_phy_c_to_p, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5808 offset++;
5809 proto_tree_add_bitmask(sub_tree, tvb, offset, hf_bthci_cmd_phy_p_to_c, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5810 offset++;
5811 proto_tree_add_item(sub_tree, hf_bthci_cmd_rtn_c_to_p, tvb, offset, 1, ENC_NA);
5812 offset++;
5813 proto_tree_add_item(sub_tree, hf_bthci_cmd_rtn_p_to_c, tvb, offset, 1, ENC_NA);
5814 offset++;
5817 break;
5819 case 0x0063: /* LE Set CIG Parameters Test */
5821 uint8_t cis_count;
5822 proto_tree_add_item(tree, hf_bthci_cmd_cig_id, tvb, offset, 1, ENC_NA);
5823 offset++;
5824 proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval_c_to_p, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5825 offset+=3;
5826 proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval_p_to_c, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5827 offset+=3;
5828 item = proto_tree_add_item(tree, hf_bthci_cmd_ft_c_to_p, tvb, offset, 1, ENC_NA);
5829 proto_item_append_text(item, " ISO Intervals");
5830 offset++;
5831 item = proto_tree_add_item(tree, hf_bthci_cmd_ft_p_to_c, tvb, offset, 1, ENC_NA);
5832 proto_item_append_text(item, " ISO Intervals");
5833 offset++;
5834 proto_tree_add_item(tree, hf_bthci_cmd_iso_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5835 offset+=2;
5836 proto_tree_add_item(tree, hf_bthci_cmd_peripherals_clock_accuracy, tvb, offset, 1, ENC_NA);
5837 offset++;
5838 proto_tree_add_item(tree, hf_bthci_cmd_packing, tvb, offset, 1, ENC_NA);
5839 offset++;
5840 proto_tree_add_item(tree, hf_bthci_cmd_framing, tvb, offset, 1, ENC_NA);
5841 offset++;
5842 proto_tree_add_item(tree, hf_bthci_cmd_cis_count, tvb, offset, 1, ENC_NA);
5843 cis_count = tvb_get_uint8(tvb, offset);
5844 offset++;
5846 for (int i = 0; i < cis_count; i++) {
5847 sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_cis_params, tvb, offset, 14, "CIS Parameters, CIS Id: 0x%x", tvb_get_uint8(tvb, offset));
5848 sub_tree = proto_item_add_subtree(sub_item, ett_cis_params);
5849 proto_tree_add_item(sub_tree, hf_bthci_cmd_cis_id, tvb, offset, 1, ENC_NA);
5850 offset++;
5851 proto_tree_add_item(sub_tree, hf_bthci_cmd_nse, tvb, offset, 1, ENC_NA);
5852 offset++;
5853 proto_tree_add_item(sub_tree, hf_bthci_cmd_max_sdu_c_to_p, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5854 offset+=2;
5855 proto_tree_add_item(sub_tree, hf_bthci_cmd_max_sdu_p_to_c, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5856 offset+=2;
5857 proto_tree_add_item(sub_tree, hf_bthci_cmd_max_pdu_c_to_p, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5858 offset+=2;
5859 proto_tree_add_item(sub_tree, hf_bthci_cmd_max_pdu_p_to_c, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5860 offset+=2;
5861 proto_tree_add_bitmask(sub_tree, tvb, offset, hf_bthci_cmd_phy_c_to_p, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5862 offset++;
5863 proto_tree_add_bitmask(sub_tree, tvb, offset, hf_bthci_cmd_phy_p_to_c, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5864 offset++;
5865 item = proto_tree_add_item(sub_tree, hf_bthci_cmd_bn_c_to_p, tvb, offset, 1, ENC_NA);
5866 if (tvb_get_uint8(tvb, offset) == 0)
5867 proto_item_append_text(item, " (No data)");
5868 offset++;
5869 proto_tree_add_item(sub_tree, hf_bthci_cmd_bn_p_to_c, tvb, offset, 1, ENC_NA);
5870 if (tvb_get_uint8(tvb, offset) == 0)
5871 proto_item_append_text(item, " (No data)");
5872 offset++;
5875 break;
5877 case 0x0064: /* LE Create CIS */
5879 uint8_t cis_count;
5880 uint32_t k_shandle, chandle;
5881 proto_tree_add_item(tree, hf_bthci_cmd_cis_count, tvb, offset, 1, ENC_NA);
5882 cis_count = tvb_get_uint8(tvb, offset);
5883 offset++;
5884 for (int i = 0; i < cis_count; i++) {
5885 sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_cis_params, tvb, offset, 4, "CIS Handle: 0x%03x, Connection Handle: 0x%03x",
5886 tvb_get_letohs(tvb, offset), tvb_get_letohs(tvb, offset+2));
5887 sub_tree = proto_item_add_subtree(sub_item, ett_cis_params);
5888 proto_tree_add_item(sub_tree, hf_bthci_cmd_cis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5889 k_shandle = tvb_get_letohs(tvb, offset) & 0xfff;
5890 offset+=2;
5891 proto_tree_add_item(sub_tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5892 chandle = tvb_get_letohs(tvb, offset) & 0xfff;
5893 offset+=2;
5895 if (!pinfo->fd->visited) {
5896 wmem_tree_key_t key[5];
5897 uint32_t interface_id;
5898 uint32_t adapter_id;
5899 uint32_t frame_number;
5900 stream_connection_handle_pair_t *stream_connection_handle_pair;
5902 interface_id = bluetooth_data->interface_id;
5903 adapter_id = bluetooth_data->adapter_id;
5904 frame_number = pinfo->num;
5906 key[0].length = 1;
5907 key[0].key = &interface_id;
5908 key[1].length = 1;
5909 key[1].key = &adapter_id;
5910 key[2].length = 1;
5911 key[2].key = &k_shandle;
5912 key[3].length = 1;
5913 key[3].key = &frame_number;
5914 key[4].length = 0;
5915 key[4].key = NULL;
5917 stream_connection_handle_pair =
5918 (stream_connection_handle_pair_t *) wmem_new(wmem_file_scope(), stream_connection_handle_pair_t);
5919 stream_connection_handle_pair->chandle = chandle;
5920 stream_connection_handle_pair->change_in_frame = frame_number;
5922 wmem_tree_insert32_array(bluetooth_data->shandle_to_chandle, key, stream_connection_handle_pair);
5926 break;
5928 case 0x0065: /* LE Remove CIG */
5929 proto_tree_add_item(tree, hf_bthci_cmd_cig_id, tvb, offset, 1, ENC_NA);
5930 offset++;
5931 break;
5933 case 0x0066: /* LE Accept CIS Request */
5934 proto_tree_add_item(tree, hf_bthci_cmd_cis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5935 offset+=2;
5936 break;
5938 case 0x0068: /* LE Create BIG */
5939 proto_tree_add_item(tree, hf_bthci_cmd_big_handle, tvb, offset, 1, ENC_NA);
5940 offset++;
5941 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
5942 offset++;
5943 proto_tree_add_item(tree, hf_bthci_cmd_num_bis, tvb, offset, 1, ENC_NA);
5944 offset++;
5945 proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5946 offset+=3;
5947 proto_tree_add_item(tree, hf_bthci_cmd_max_sdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5948 offset+=2;
5949 proto_tree_add_item(tree, hf_bthci_cmd_max_transport_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5950 offset+=2;
5951 proto_tree_add_item(tree, hf_bthci_cmd_rtn, tvb, offset, 1, ENC_NA);
5952 offset++;
5953 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_phy, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5954 offset++;
5955 proto_tree_add_item(tree, hf_bthci_cmd_packing, tvb, offset, 1, ENC_NA);
5956 offset++;
5957 proto_tree_add_item(tree, hf_bthci_cmd_framing, tvb, offset, 1, ENC_NA);
5958 offset++;
5959 proto_tree_add_item(tree, hf_bthci_cmd_encryption, tvb, offset, 1, ENC_NA);
5960 offset++;
5961 proto_tree_add_item(tree, hf_bthci_cmd_broadcast_code, tvb, offset, 16, ENC_NA);
5962 offset+=16;
5963 break;
5965 case 0x0069: /* LE Create BIG Test */
5966 proto_tree_add_item(tree, hf_bthci_cmd_big_handle, tvb, offset, 1, ENC_NA);
5967 offset++;
5968 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
5969 offset++;
5970 proto_tree_add_item(tree, hf_bthci_cmd_num_bis, tvb, offset, 1, ENC_NA);
5971 offset++;
5972 proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5973 offset+=3;
5974 proto_tree_add_item(tree, hf_bthci_cmd_iso_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5975 offset+=2;
5976 proto_tree_add_item(tree, hf_bthci_cmd_nse, tvb, offset, 1, ENC_NA);
5977 offset++;
5978 proto_tree_add_item(tree, hf_bthci_cmd_max_sdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5979 offset+=2;
5980 proto_tree_add_item(tree, hf_bthci_cmd_max_pdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5981 offset+=2;
5982 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_phy, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5983 offset++;
5984 proto_tree_add_item(tree, hf_bthci_cmd_packing, tvb, offset, 1, ENC_NA);
5985 offset++;
5986 proto_tree_add_item(tree, hf_bthci_cmd_framing, tvb, offset, 1, ENC_NA);
5987 offset++;
5988 proto_tree_add_item(tree, hf_bthci_cmd_bn, tvb, offset, 1, ENC_NA);
5989 offset++;
5990 proto_tree_add_item(tree, hf_bthci_cmd_irc, tvb, offset, 1, ENC_NA);
5991 offset++;
5992 proto_tree_add_item(tree, hf_bthci_cmd_pto, tvb, offset, 1, ENC_NA);
5993 offset++;
5994 proto_tree_add_item(tree, hf_bthci_cmd_encryption, tvb, offset, 1, ENC_NA);
5995 offset++;
5996 proto_tree_add_item(tree, hf_bthci_cmd_broadcast_code, tvb, offset, 16, ENC_NA);
5997 offset+=16;
5998 break;
6000 case 0x006A: /* LE Terminate BIG */
6001 proto_tree_add_item(tree, hf_bthci_cmd_big_handle, tvb, offset, 1, ENC_NA);
6002 offset++;
6003 proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_NA);
6004 offset++;
6005 break;
6007 case 0x006B: /* LE BIG Create Sync */
6009 uint8_t num_bis;
6011 proto_tree_add_item(tree, hf_bthci_cmd_big_handle, tvb, offset, 1, ENC_NA);
6012 offset++;
6013 proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6014 offset+=2;
6015 proto_tree_add_item(tree, hf_bthci_cmd_encryption, tvb, offset, 1, ENC_NA);
6016 offset++;
6017 proto_tree_add_item(tree, hf_bthci_cmd_broadcast_code, tvb, offset, 16, ENC_NA);
6018 offset+=16;
6019 proto_tree_add_item(tree, hf_bthci_cmd_mse, tvb, offset, 1, ENC_NA);
6020 offset++;
6021 proto_tree_add_item(tree, hf_bthci_cmd_sync_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6022 offset+=2;
6023 proto_tree_add_item(tree, hf_bthci_cmd_num_bis, tvb, offset, 1, ENC_NA);
6024 num_bis = tvb_get_uint8(tvb, offset);
6025 offset++;
6026 for (int i = 0; i < num_bis; i++) {
6027 proto_tree_add_item(tree, hf_bthci_cmd_bis_index, tvb, offset, 1, ENC_NA);
6028 offset++;
6031 break;
6033 case 0x006C: /* LE BIG Terminate Sync */
6034 proto_tree_add_item(tree, hf_bthci_cmd_big_handle, tvb, offset, 1, ENC_NA);
6035 offset++;
6036 break;
6038 case 0x006E: /* LE Setup ISO Data Path */
6040 uint8_t codec_length;
6041 const char *str = "Disabled";
6043 proto_tree_add_item(tree, hf_bthci_cmd_cis_bis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6044 offset+=2;
6045 proto_tree_add_item(tree, hf_bthci_cmd_data_path_direction, tvb, offset, 1, ENC_NA);
6046 offset++;
6047 item = proto_tree_add_item(tree, hf_bthci_cmd_data_path_id, tvb, offset, 1, ENC_NA);
6048 if (tvb_get_uint8(tvb, offset) == 0)
6049 str = "HCI";
6050 else if (tvb_get_uint8(tvb, offset) < 0xff)
6051 str = "Logical Channel Number";
6052 proto_item_append_text(item, " (%s)", str);
6053 offset++;
6054 offset = dissect_coding_format(tree, hf_bthci_cmd_coding_format, tvb, offset, ett_coding_format);
6055 proto_tree_add_item(tree, hf_bthci_cmd_controller_delay, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6056 offset+=3;
6057 codec_length = tvb_get_uint8(tvb, offset);
6058 proto_tree_add_item(tree, hf_bthci_cmd_codec_config_length, tvb, offset, 1, ENC_NA);
6059 offset++;
6060 proto_tree_add_item(tree, hf_bthci_cmd_codec_config, tvb, offset, codec_length, ENC_NA);
6061 offset += codec_length;
6063 break;
6065 case 0x006F: /* LE Remove ISO Data Path */
6066 proto_tree_add_item(tree, hf_bthci_cmd_cis_bis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6067 offset+=2;
6068 proto_tree_add_item(tree, hf_bthci_cmd_data_path_direction, tvb, offset, 1, ENC_NA);
6069 offset++;
6070 break;
6072 case 0x0070: /* LE ISO Transmit Test */
6073 case 0x0071: /* LE ISO Receive Test */
6074 proto_tree_add_item(tree, hf_bthci_cmd_cis_bis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6075 offset+=2;
6076 proto_tree_add_item(tree, hf_bthci_cmd_payload_type, tvb, offset, 1, ENC_NA);
6077 offset++;
6078 break;
6080 case 0x0074: /* LE Set Host Feature */
6081 proto_tree_add_item(tree, hf_bthci_cmd_feature_bit_number, tvb, offset, 1, ENC_NA);
6082 offset++;
6083 proto_tree_add_item(tree, hf_bthci_cmd_feature_bit_value, tvb, offset, 1, ENC_NA);
6084 offset++;
6085 break;
6087 case 0x0076: /* LE Enhanced Read Transmit Power Level */
6088 case 0x0077: /* LE Read Remote Transmit Power Level */
6089 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6090 offset+=2;
6091 proto_tree_add_item(tree, hf_bthci_cmd_phy_and_coding, tvb, offset, 1, ENC_NA);
6092 offset++;
6093 break;
6095 case 0x0078: /* LE Set Path Loss Reporting Parameters */
6096 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6097 offset+=2;
6098 proto_tree_add_item(tree, hf_bthci_cmd_high_threshold, tvb, offset, 1, ENC_NA);
6099 offset++;
6100 proto_tree_add_item(tree, hf_bthci_cmd_high_hysteresis, tvb, offset, 1, ENC_NA);
6101 offset++;
6102 proto_tree_add_item(tree, hf_bthci_cmd_low_threshold, tvb, offset, 1, ENC_NA);
6103 offset++;
6104 proto_tree_add_item(tree, hf_bthci_cmd_low_hysteresis, tvb, offset, 1, ENC_NA);
6105 offset++;
6106 proto_tree_add_item(tree, hf_bthci_cmd_min_time_spent, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6107 offset+=2;
6108 break;
6110 case 0x0079: /* LE Set Path Loss Reporting Enable */
6111 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6112 offset+=2;
6113 proto_tree_add_item(tree, hf_bthci_cmd_reporting_enable, tvb, offset, 1, ENC_NA);
6114 offset++;
6115 break;
6117 case 0x007A: /* LE Set Transmit Power Reporting Enable */
6118 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6119 offset+=2;
6120 proto_tree_add_item(tree, hf_bthci_cmd_local_reporting_enable, tvb, offset, 1, ENC_NA);
6121 offset++;
6122 proto_tree_add_item(tree, hf_bthci_cmd_remote_reporting_enable, tvb, offset, 1, ENC_NA);
6123 offset++;
6124 break;
6126 case 0x007C: /* LE Set Data Related Changes */
6127 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
6128 offset++;
6129 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_addr_change_reasons, ett_addr_change_reasons, hfx_btcmd_addr_change_reasons, ENC_NA);
6130 offset++;
6131 break;
6133 case 0x007E: /* LE Subrate Request */
6134 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6135 offset+=2;
6136 /* FALLTHROUGH */
6138 case 0x007D: /* LE Set Default Subrate */
6139 proto_tree_add_item(tree, hf_bthci_cmd_subrate_factor_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6140 offset+=2;
6141 proto_tree_add_item(tree, hf_bthci_cmd_subrate_factor_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6142 offset+=2;
6143 item = proto_tree_add_item(tree, hf_bthci_cmd_le_con_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6144 proto_item_append_text(item, " (subrated events)");
6145 offset+=2;
6146 item = proto_tree_add_item(tree, hf_bthci_cmd_continuation_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6147 proto_item_append_text(item, " (underlying events)");
6148 offset+=2;
6149 proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6150 offset+=2;
6151 break;
6153 case 0x0080: /* LE Set Decision Data */
6154 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
6155 offset++;
6156 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_adv_decision_flags, ett_adv_properties, hfx_bthci_cmd_adv_decision_flags, ENC_NA);
6157 offset += 1;
6158 uint8_t data_length = tvb_get_uint8(tvb, offset);
6159 proto_tree_add_item(tree, hf_bthci_cmd_le_data_length, tvb, offset, 1, ENC_NA);
6160 offset++;
6161 proto_tree_add_item(tree, hf_bthci_cmd_adv_decision_data, tvb, offset, data_length, ENC_NA);
6162 offset+=data_length;
6163 break;
6165 case 0x0081: /* LE Set Decision Instructions */
6167 uint8_t num_tests, test_field;
6168 proto_tree_add_item(tree, hf_bthci_cmd_num_tests, tvb, offset, 1, ENC_NA);
6169 num_tests = tvb_get_uint8(tvb, offset);
6170 offset++;
6171 for (int i = 0; i < num_tests; i++) {
6172 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_adv_test_flags, ett_adv_test_flags, hfx_bthci_cmd_adv_test_flags, ENC_NA);
6173 offset += 1;
6174 test_field = tvb_get_uint8(tvb, offset);
6175 item = proto_tree_add_item(tree, hf_bthci_cmd_adv_test_field, tvb, offset, 1, ENC_NA);
6176 if (test_field > 16) {
6177 if (test_field <= 24)
6178 proto_item_append_text(item, " (Arbitrary Data, exactly %u octets)", test_field - 16);
6179 else if (test_field > 32 && test_field <= 40)
6180 proto_item_append_text(item, " (Arbitrary Data, at least %u octets)", test_field - 32);
6181 else if (test_field > 48 && test_field <= 56)
6182 proto_item_append_text(item, " (Arbitrary Data, at most %u octets)", test_field - 48);
6183 else if (test_field >= 240)
6184 proto_item_append_text(item, " (Vendor specific)");
6186 offset++;
6187 proto_tree_add_item(tree, hf_bthci_cmd_adv_test_params, tvb, offset, 16, ENC_NA);
6188 offset+=16;
6191 break;
6193 case 0x0082: /* LE Set Periodic Advertising Subevent */
6195 uint8_t sub_events, length;
6196 proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
6197 offset++;
6198 proto_tree_add_item(tree, hf_bthci_cmd_num_subevents, tvb, offset, 1, ENC_NA);
6199 sub_events = tvb_get_uint8(tvb, offset);
6200 offset++;
6201 for (int i = 0; i < sub_events; i++) {
6202 length = 4 + tvb_get_uint8(tvb, offset+3);
6203 sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_subevents, tvb, offset, length,
6204 "Sub-event: %u", tvb_get_uint8(tvb, offset));
6205 sub_tree = proto_item_add_subtree(sub_item, ett_adv_subevents);
6207 proto_tree_add_item(sub_tree, hf_bthci_cmd_subevent, tvb, offset, 1, ENC_NA);
6208 offset++;
6209 proto_tree_add_item(sub_tree, hf_bthci_cmd_response_slot_start, tvb, offset, 1, ENC_NA);
6210 offset++;
6211 proto_tree_add_item(sub_tree, hf_bthci_cmd_response_slot_count, tvb, offset, 1, ENC_NA);
6212 offset++;
6213 proto_tree_add_item(sub_tree, hf_bthci_cmd_subevent_data_length, tvb, offset, 1, ENC_NA);
6214 length = tvb_get_uint8(tvb, offset);
6215 offset++;
6217 bluetooth_eir_ad_data_t *ad_data;
6218 ad_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
6219 ad_data->interface_id = bluetooth_data->interface_id;
6220 ad_data->adapter_id = bluetooth_data->adapter_id;
6221 ad_data->bd_addr = NULL;
6222 call_dissector_with_data(btcommon_ad_handle, tvb_new_subset_length(tvb, offset, length), pinfo, sub_tree, ad_data);
6223 offset += length;
6226 break;
6228 case 0x0083: /* LE Set Periodic Advertising Response Data */
6230 uint8_t length;
6231 proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6232 offset+=2;
6233 proto_tree_add_item(tree, hf_bthci_cmd_request_event, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6234 offset+=2;
6235 proto_tree_add_item(tree, hf_bthci_cmd_request_subevent, tvb, offset, 1, ENC_NA);
6236 offset++;
6237 proto_tree_add_item(tree, hf_bthci_cmd_response_subevent, tvb, offset, 1, ENC_NA);
6238 offset++;
6239 proto_tree_add_item(tree, hf_bthci_cmd_response_slot, tvb, offset, 1, ENC_NA);
6240 offset++;
6241 proto_tree_add_item(tree, hf_bthci_cmd_response_data_length, tvb, offset, 1, ENC_NA);
6242 length = tvb_get_uint8(tvb, offset);
6243 offset++;
6245 bluetooth_eir_ad_data_t *ad_data;
6246 ad_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
6247 ad_data->interface_id = bluetooth_data->interface_id;
6248 ad_data->adapter_id = bluetooth_data->adapter_id;
6249 ad_data->bd_addr = NULL;
6250 call_dissector_with_data(btcommon_ad_handle, tvb_new_subset_length(tvb, offset, length), pinfo, tree, ad_data);
6251 offset += length;
6253 break;
6255 case 0x0084: /* LE Set Periodic Sync Subevent */
6257 uint8_t sub_events;
6258 proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6259 offset+=2;
6260 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_advertising_properties, ett_adv_properties, hfx_bthci_cmd_adv_properties, ENC_LITTLE_ENDIAN);
6261 offset+=2;
6262 proto_tree_add_item(tree, hf_bthci_cmd_num_subevents, tvb, offset, 1, ENC_NA);
6263 sub_events = tvb_get_uint8(tvb, offset);
6264 offset++;
6265 sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_subevents, tvb, offset, sub_events, "Sub-events");
6266 sub_tree = proto_item_add_subtree(sub_item, ett_adv_subevents);
6267 for (int i = 0; i < sub_events; i++) {
6268 proto_tree_add_item(sub_tree, hf_bthci_cmd_subevent, tvb, offset, 1, ENC_NA);
6269 offset++;
6272 break;
6274 case 0x0088: /* LE Read All Remote Features */
6275 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6276 offset+=2;
6277 proto_tree_add_item(tree, hf_bthci_cmd_pages_requested, tvb, offset, 1, ENC_NA);
6278 offset += 1;
6279 break;
6281 case 0x008B: /* LE CS Write Cached Remote Supported Capabilities */
6282 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6283 offset+=2;
6284 proto_tree_add_item(tree, hf_bthci_cmd_num_config, tvb, offset, 1, ENC_NA);
6285 offset += 1;
6286 proto_tree_add_item(tree, hf_bthci_cmd_max_consecutive_procedures, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6287 offset += 2;
6288 proto_tree_add_item(tree, hf_bthci_cmd_num_antennas_supported, tvb, offset, 1, ENC_NA);
6289 offset += 1;
6290 proto_tree_add_item(tree, hf_bthci_cmd_max_antenna_paths_supported, tvb, offset, 1, ENC_NA);
6291 offset += 1;
6292 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cs_roles, ett_cs_roles, hfx_bthci_cmd_cs_roles, ENC_NA);
6293 offset++;
6294 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cs_modes_supported, ett_cs_modes, hfx_bthci_cmd_cs_modes_supported, ENC_NA);
6295 offset++;
6296 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_rtt_capability, ett_cs_capability, hfx_bthci_cmd_rtt_capability, ENC_NA);
6297 offset++;
6298 proto_tree_add_item(tree, hf_bthci_cmd_rtt_aa_only_n, tvb, offset, 1, ENC_NA);
6299 offset += 1;
6300 proto_tree_add_item(tree, hf_bthci_cmd_rtt_sounding_n, tvb, offset, 1, ENC_NA);
6301 offset += 1;
6302 proto_tree_add_item(tree, hf_bthci_cmd_rtt_random_n, tvb, offset, 1, ENC_NA);
6303 offset += 1;
6304 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_nadm_sounding_capability, ett_cs_capability, hfx_bthci_cmd_nadm_sounding_capability, ENC_NA);
6305 offset += 2;
6306 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_nadm_random_capability, ett_cs_capability, hfx_bthci_cmd_nadm_random_capability, ENC_NA);
6307 offset += 2;
6308 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cs_sync_phys_supported, ett_cs_capability, hfx_bthci_cmd_cs_sync_phys_supported, ENC_NA);
6309 offset++;
6310 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cs_subfeatures_supported, ett_cs_capability, hfx_bthci_cmd_cs_subfeatures, ENC_NA);
6311 offset++;
6312 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tip1_times_supported, ett_cs_times, hfx_bthci_cmd_tip_times_supported, ENC_NA);
6313 offset += 2;
6314 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tip2_times_supported, ett_cs_times, hfx_bthci_cmd_tip_times_supported, ENC_NA);
6315 offset += 2;
6316 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tfcs_times_supported, ett_cs_times, hfx_bthci_cmd_tfcs_times_supported, ENC_NA);
6317 offset += 2;
6318 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tpm_times_supported, ett_cs_times, hfx_bthci_cmd_tpm_times_supported, ENC_NA);
6319 offset += 2;
6320 proto_tree_add_item(tree, hf_bthci_cmd_tsw_time_supported, tvb, offset, 1, ENC_NA);
6321 offset += 1;
6322 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tx_snr_capability, ett_cs_capability, hfx_bthci_cmd_tx_snr_capability, ENC_NA);
6323 offset += 1;
6324 break;
6326 case 0x008D: /* LE CS Set Default Settings */
6327 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6328 offset+=2;
6329 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cs_roles, ett_cs_roles, hfx_bthci_cmd_cs_roles, ENC_NA);
6330 offset++;
6331 proto_tree_add_item(tree, hf_bthci_cmd_cs_sync_antenna_selection, tvb, offset, 1, ENC_NA);
6332 offset++;
6333 proto_tree_add_item(tree, hf_bthci_cmd_tx_power, tvb, offset, 1, ENC_NA);
6334 offset++;
6335 break;
6337 case 0x008F: /* LE CS Write Cached Remote FAE Table */
6338 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6339 offset+=2;
6340 proto_tree_add_item(tree, hf_bthci_cmd_fae_table, tvb, offset, 72, ENC_NA);
6341 offset+=72;
6342 break;
6344 case 0x0090: /* LE CS Create Config */
6345 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6346 offset+=2;
6347 proto_tree_add_item(tree, hf_bthci_cmd_config_id, tvb, offset, 1, ENC_NA);
6348 offset++;
6349 proto_tree_add_item(tree, hf_bthci_cmd_create_context, tvb, offset, 1, ENC_NA);
6350 offset++;
6351 proto_tree_add_item(tree, hf_bthci_cmd_main_mode_type, tvb, offset, 1, ENC_NA);
6352 offset++;
6353 proto_tree_add_item(tree, hf_bthci_cmd_sub_mode_type, tvb, offset, 1, ENC_NA);
6354 offset++;
6355 proto_tree_add_item(tree, hf_bthci_cmd_min_main_mode_steps, tvb, offset, 1, ENC_NA);
6356 offset++;
6357 proto_tree_add_item(tree, hf_bthci_cmd_max_main_mode_steps, tvb, offset, 1, ENC_NA);
6358 offset++;
6359 proto_tree_add_item(tree, hf_bthci_cmd_main_mode_repetition, tvb, offset, 1, ENC_NA);
6360 offset++;
6361 proto_tree_add_item(tree, hf_bthci_cmd_mode0_steps, tvb, offset, 1, ENC_NA);
6362 offset++;
6363 proto_tree_add_item(tree, hf_bthci_cmd_cs_role, tvb, offset, 1, ENC_NA);
6364 offset++;
6365 proto_tree_add_item(tree, hf_bthci_cmd_rtt_type, tvb, offset, 1, ENC_NA);
6366 offset++;
6367 proto_tree_add_item(tree, hf_bthci_cmd_cs_sync_phy, tvb, offset, 1, ENC_NA);
6368 offset++;
6369 proto_tree_add_item(tree, hf_bthci_cmd_channel_map, tvb, offset, 10, ENC_NA);
6370 offset += 10;
6371 proto_tree_add_item(tree, hf_bthci_cmd_channel_map_repetition, tvb, offset, 1, ENC_NA);
6372 offset++;
6373 proto_tree_add_item(tree, hf_bthci_cmd_channel_selection_type, tvb, offset, 1, ENC_NA);
6374 offset++;
6375 proto_tree_add_item(tree, hf_bthci_cmd_ch3c_shape, tvb, offset, 1, ENC_NA);
6376 offset++;
6377 proto_tree_add_item(tree, hf_bthci_cmd_ch3c_jump, tvb, offset, 1, ENC_NA);
6378 offset++;
6379 proto_tree_add_item(tree, hf_bthci_cmd_companion_signal_enable, tvb, offset, 1, ENC_NA);
6380 offset++;
6381 break;
6383 case 0x0091: /* LE CS Remove Config */
6384 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6385 offset+=2;
6386 proto_tree_add_item(tree, hf_bthci_cmd_config_id, tvb, offset, 1, ENC_NA);
6387 offset++;
6388 break;
6390 case 0x0092: /* LE CS Channel Classification */
6391 proto_tree_add_item(tree, hf_bthci_cmd_ch_classification, tvb, offset, 10, ENC_NA);
6392 offset+=10;
6393 break;
6395 case 0x0093: /* LE CS Set Procedure Parametes */
6396 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6397 offset+=2;
6398 proto_tree_add_item(tree, hf_bthci_cmd_config_id, tvb, offset, 1, ENC_NA);
6399 offset++;
6400 proto_tree_add_item(tree, hf_bthci_cmd_max_procedure_len, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6401 offset+=2;
6402 proto_tree_add_item(tree, hf_bthci_cmd_min_procedure_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6403 offset+=2;
6404 proto_tree_add_item(tree, hf_bthci_cmd_max_procedure_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6405 offset+=2;
6406 proto_tree_add_item(tree, hf_bthci_cmd_max_procedure_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6407 offset+=2;
6408 proto_tree_add_item(tree, hf_bthci_cmd_min_subevent_len, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6409 offset+=3;
6410 proto_tree_add_item(tree, hf_bthci_cmd_max_subevent_len, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6411 offset+=3;
6412 proto_tree_add_item(tree, hf_bthci_cmd_tone_antenna_selection, tvb, offset, 1, ENC_NA);
6413 offset++;
6414 proto_tree_add_item(tree, hf_bthci_cmd_phy_and_coding, tvb, offset, 1, ENC_NA);
6415 offset++;
6416 proto_tree_add_item(tree, hf_bthci_cmd_tx_pwr_delta, tvb, offset, 1, ENC_NA);
6417 offset++;
6418 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_preferred_peer_antenna, ett_pref_antenna,
6419 hfx_bthci_cmd_preferred_peer_antenna, ENC_NA);
6420 offset++;
6421 proto_tree_add_item(tree, hf_bthci_cmd_snr_control_initiator, tvb, offset, 1, ENC_NA);
6422 offset++;
6423 proto_tree_add_item(tree, hf_bthci_cmd_snr_control_reflector, tvb, offset, 1, ENC_NA);
6424 offset++;
6425 break;
6427 case 0x0094: /* LE CS Procedure Enable */
6428 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6429 offset+=2;
6430 proto_tree_add_item(tree, hf_bthci_cmd_config_id, tvb, offset, 1, ENC_NA);
6431 offset++;
6432 proto_tree_add_item(tree, hf_bthci_cmd_cs_enable, tvb, offset, 1, ENC_NA);
6433 offset++;
6434 break;
6436 case 0x0095: /* LE CS Test */
6438 uint8_t role, rtt_type, length;
6439 proto_tree_add_item(tree, hf_bthci_cmd_main_mode_type, tvb, offset, 1, ENC_NA);
6440 offset++;
6441 proto_tree_add_item(tree, hf_bthci_cmd_sub_mode_type, tvb, offset, 1, ENC_NA);
6442 offset++;
6443 proto_tree_add_item(tree, hf_bthci_cmd_main_mode_repetition, tvb, offset, 1, ENC_NA);
6444 offset++;
6445 proto_tree_add_item(tree, hf_bthci_cmd_mode0_steps, tvb, offset, 1, ENC_NA);
6446 offset++;
6447 proto_tree_add_item(tree, hf_bthci_cmd_cs_role, tvb, offset, 1, ENC_NA);
6448 role = tvb_get_uint8(tvb, offset);
6449 offset++;
6450 proto_tree_add_item(tree, hf_bthci_cmd_rtt_type, tvb, offset, 1, ENC_NA);
6451 rtt_type = tvb_get_uint8(tvb, offset);
6452 offset++;
6453 proto_tree_add_item(tree, hf_bthci_cmd_cs_sync_phy, tvb, offset, 1, ENC_NA);
6454 offset++;
6455 proto_tree_add_item(tree, hf_bthci_cmd_cs_sync_antenna_selection, tvb, offset, 1, ENC_NA);
6456 offset++;
6457 proto_tree_add_item(tree, hf_bthci_cmd_subevent_len, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6458 offset+=3;
6459 proto_tree_add_item(tree, hf_bthci_cmd_cs_subevent_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6460 offset+=2;
6461 proto_tree_add_item(tree, hf_bthci_cmd_max_num_subevents, tvb, offset, 1, ENC_NA);
6462 offset++;
6463 proto_tree_add_item(tree, hf_bthci_cmd_tx_power_setting, tvb, offset, 1, ENC_NA);
6464 offset++;
6465 proto_tree_add_item(tree, hf_bthci_cmd_t_ip1_time, tvb, offset, 1, ENC_NA);
6466 offset++;
6467 proto_tree_add_item(tree, hf_bthci_cmd_t_ip2_time, tvb, offset, 1, ENC_NA);
6468 offset++;
6469 proto_tree_add_item(tree, hf_bthci_cmd_t_fcs_time, tvb, offset, 1, ENC_NA);
6470 offset++;
6471 proto_tree_add_item(tree, hf_bthci_cmd_t_pm_time, tvb, offset, 1, ENC_NA);
6472 offset++;
6473 proto_tree_add_item(tree, hf_bthci_cmd_t_sw_time, tvb, offset, 1, ENC_NA);
6474 offset++;
6475 proto_tree_add_item(tree, hf_bthci_cmd_tone_antenna_selection, tvb, offset, 1, ENC_NA);
6476 offset++;
6477 /* 1 byte reserved for future use */
6478 offset++;
6479 proto_tree_add_item(tree, hf_bthci_cmd_snr_control_initiator, tvb, offset, 1, ENC_NA);
6480 offset++;
6481 proto_tree_add_item(tree, hf_bthci_cmd_snr_control_reflector, tvb, offset, 1, ENC_NA);
6482 offset++;
6483 proto_tree_add_item(tree, hf_bthci_cmd_drbg_nonce, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6484 offset+=2;
6485 proto_tree_add_item(tree, hf_bthci_cmd_channel_map_repetition, tvb, offset, 1, ENC_NA);
6486 offset++;
6487 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cs_override_config, ett_override_config, hfx_bthci_cmd_override_config, ENC_NA);
6488 offset += 2;
6489 proto_tree_add_item(tree, hf_bthci_cmd_cs_override_param_length, tvb, offset, 1, ENC_NA);
6490 length = tvb_get_uint8(tvb, offset);
6491 offset++;
6492 proto_tree_add_item(tree, hf_bthci_cmd_cs_override_param_data, tvb, offset, length, ENC_NA);
6493 offset+=length;
6494 if (!pinfo->fd->visited) {
6495 /* store CS role and RTT type configuration for later dissection of CS results */
6496 wmem_tree_key_t key[6];
6497 uint32_t interface_id;
6498 uint32_t adapter_id;
6499 uint32_t frame_number;
6500 uint32_t connection_handle = 0xfff;
6501 uint32_t config_id = 0;
6502 cs_configuration_t *cs_configuration;
6504 interface_id = bluetooth_data->interface_id;
6505 adapter_id = bluetooth_data->adapter_id;
6506 frame_number = pinfo->num;
6508 key[0].length = 1;
6509 key[0].key = &interface_id;
6510 key[1].length = 1;
6511 key[1].key = &adapter_id;
6512 key[2].length = 1;
6513 key[2].key = &connection_handle;
6514 key[3].length = 1;
6515 key[3].key = &config_id;
6516 key[4].length = 1;
6517 key[4].key = &frame_number;
6518 key[5].length = 0;
6519 key[5].key = NULL;
6521 cs_configuration = (cs_configuration_t *) wmem_new(wmem_file_scope(), cs_configuration_t);
6522 cs_configuration->cs_role = role;
6523 cs_configuration->rtt_type = rtt_type;
6524 wmem_tree_insert32_array(bluetooth_data->cs_configurations, key, cs_configuration);
6527 break;
6529 case 0x0097: /* LE Set Host Feature [v2] */
6530 proto_tree_add_item(tree, hf_bthci_cmd_feature_bit_number2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6531 offset+=2;
6532 proto_tree_add_item(tree, hf_bthci_cmd_feature_bit_value, tvb, offset, 1, ENC_NA);
6533 offset++;
6534 break;
6536 case 0x0098: /* LE Add Device To Monitored Advertisers List */
6537 proto_tree_add_item(tree, hf_bthci_cmd_le_address_type, tvb, offset, 1, ENC_NA);
6538 offset++;
6539 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
6540 proto_tree_add_item(tree, hf_bthci_cmd_rssi_threshold_low, tvb, offset, 1, ENC_NA);
6541 offset++;
6542 proto_tree_add_item(tree, hf_bthci_cmd_rssi_threshold_high, tvb, offset, 1, ENC_NA);
6543 offset++;
6544 proto_tree_add_item(tree, hf_bthci_cmd_rssi_threshold_timeout, tvb, offset, 1, ENC_NA);
6545 offset++;
6546 break;
6548 case 0x0099: /* LE Remove Device From Monitored Advertisers List */
6549 proto_tree_add_item(tree, hf_bthci_cmd_le_address_type, tvb, offset, 1, ENC_NA);
6550 offset++;
6551 offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
6552 break;
6554 case 0x009C: /* LE Enable Monitored Advertisers */
6555 proto_tree_add_item(tree, hf_bthci_cmd_adv_monitoring_enable, tvb, offset, 1, ENC_NA);
6556 offset++;
6557 break;
6559 case 0x009D: /* LE Frame Space Update */
6560 proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6561 offset+=2;
6562 proto_tree_add_item(tree, hf_bthci_cmd_frame_space_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6563 offset+=2;
6564 proto_tree_add_item(tree, hf_bthci_cmd_frame_space_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6565 offset+=2;
6566 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_le_phys, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
6567 offset += 1;
6568 proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_spacing_types, ett_spacing_types, hfx_bthci_cmd_spacing_types, ENC_NA);
6569 offset += 2;
6570 break;
6572 case 0x0002: /* LE Read Buffer Size [v1] */
6573 case 0x0003: /* LE Read Local Supported Features */
6574 case 0x0007: /* LE Read Advertising Channel Tx Power */
6575 case 0x000E: /* LE Create Connection Cancel */
6576 case 0x000F: /* LE Read Filter Accept List Size */
6577 case 0x0010: /* LE Clear Filter Accept List */
6578 case 0x0018: /* LE Rand */
6579 case 0x001C: /* LE Read Supported States */
6580 case 0x001F: /* LE Test End */
6581 case 0x0023: /* LE Read Suggested Default Data Length */
6582 case 0x0025: /* LE Read Local P-256 Public Key */
6583 case 0x0029: /* LE Clear Resolving List */
6584 case 0x002A: /* LE Read Resolving List Size */
6585 case 0x002F: /* LE Read Maximum Data Length */
6586 case 0x003A: /* LE Read Maximum Advertising Data Length */
6587 case 0x003B: /* LE Read Number of Supported Advertising Sets */
6588 case 0x003D: /* LE Clear Advertising Sets */
6589 case 0x0045: /* LE Periodic Advertising Create Sync Cancel */
6590 case 0x0049: /* LE Clear Periodic Advertiser List */
6591 case 0x004A: /* LE Read Periodic Advertiser List Size */
6592 case 0x004B: /* LE Read Transmit Power */
6593 case 0x004C: /* LE Read RF Path Compensation */
6594 case 0x0058: /* LE Read Antenna Information */
6595 case 0x0060: /* LE Read Buffer Size [v2] */
6596 case 0x0087: /* LE Read All Local Supported Features */
6597 case 0x0089: /* LE CS Read Local Supported Capabilities */
6598 case 0x0096: /* LE CS Test End */
6599 case 0x009A: /* LE Clear Monitored Advertisers List */
6600 case 0x009B: /* LE Read Monitored Advertisres List Size */
6602 /* NOTE: No parameters */
6603 break;
6605 default:
6606 proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
6607 offset += tvb_reported_length_remaining(tvb, offset);
6610 return offset;
6613 /* Code to actually dissect the packets */
6614 static int
6615 dissect_bthci_cmd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
6617 proto_item *ti_cmd;
6618 proto_tree *bthci_cmd_tree;
6619 uint32_t opcode;
6620 uint16_t ocf;
6621 uint8_t param_length;
6622 uint8_t ogf;
6623 int offset = 0;
6624 proto_item *ti_opcode;
6625 proto_tree *opcode_tree;
6626 int hfx;
6627 bluetooth_data_t *bluetooth_data;
6628 uint32_t interface_id;
6629 uint32_t adapter_id;
6630 uint32_t frame_number;
6631 wmem_tree_key_t key[5];
6632 bthci_cmd_data_t *bthci_cmd_data = NULL;
6633 proto_tree *sub_item;
6634 wmem_tree_t *subtree;
6637 /* Reject the packet if data is NULL */
6638 if (data == NULL)
6639 return 0;
6640 bluetooth_data = (bluetooth_data_t *) data;
6642 interface_id = bluetooth_data->interface_id;
6643 adapter_id = bluetooth_data->adapter_id;
6644 frame_number = pinfo->num;
6646 ti_cmd = proto_tree_add_item(tree, proto_bthci_cmd, tvb, offset, -1, ENC_NA);
6647 bthci_cmd_tree = proto_item_add_subtree(ti_cmd, ett_bthci_cmd);
6649 switch (pinfo->p2p_dir) {
6650 case P2P_DIR_SENT:
6651 col_set_str(pinfo->cinfo, COL_INFO, "Sent ");
6652 break;
6653 case P2P_DIR_RECV:
6654 col_set_str(pinfo->cinfo, COL_INFO, "Rcvd ");
6655 break;
6656 default:
6657 col_set_str(pinfo->cinfo, COL_INFO, "UnknownDirection ");
6658 break;
6661 set_address(&pinfo->src, AT_STRINGZ, 5, "host");
6662 set_address(&pinfo->dst, AT_STRINGZ, 11, "controller");
6663 set_address(&pinfo->net_src, AT_STRINGZ, 5, "host");
6664 set_address(&pinfo->net_dst, AT_STRINGZ, 11, "controller");
6665 set_address(&pinfo->dl_src, AT_STRINGZ, 5, "host");
6666 set_address(&pinfo->dl_dst, AT_STRINGZ, 11, "controller");
6667 if (!pinfo->fd->visited) {
6668 address *addr;
6670 addr = (address *) wmem_memdup(wmem_file_scope(), &pinfo->dl_src, sizeof(address));
6671 addr->data = wmem_memdup(wmem_file_scope(), pinfo->dl_src.data, pinfo->dl_src.len);
6672 p_add_proto_data(wmem_file_scope(), pinfo, proto_bluetooth, BLUETOOTH_DATA_SRC, addr);
6674 addr = (address *) wmem_memdup(wmem_file_scope(), &pinfo->dl_dst, sizeof(address));
6675 addr->data = wmem_memdup(wmem_file_scope(), pinfo->dl_dst.data, pinfo->dl_dst.len);
6676 p_add_proto_data(wmem_file_scope(), pinfo, proto_bluetooth, BLUETOOTH_DATA_DST, addr);
6679 opcode = tvb_get_letohs(tvb, offset);
6680 ocf = opcode & 0x03ff;
6681 ogf = (uint8_t) (opcode >> 10);
6683 if (ogf == HCI_OGF_VENDOR_SPECIFIC)
6684 proto_item_append_text(ti_cmd," - %s", val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Vendor Command 0x%04x"));
6685 else
6686 proto_item_append_text(ti_cmd," - %s", val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Unknown 0x%04x"));
6688 if (have_tap_listener(bluetooth_hci_summary_tap)) {
6689 bluetooth_hci_summary_tap_t *tap_hci_summary;
6691 tap_hci_summary = wmem_new(pinfo->pool, bluetooth_hci_summary_tap_t);
6693 tap_hci_summary->interface_id = bluetooth_data->interface_id;
6694 tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
6696 tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_OPCODE;
6697 tap_hci_summary->ogf = ogf;
6698 tap_hci_summary->ocf = ocf;
6699 if (try_val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext))
6700 tap_hci_summary->name = val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Unknown 0x%04x");
6701 else
6702 tap_hci_summary->name = NULL;
6703 tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
6706 if (!pinfo->fd->visited) {
6707 bthci_cmd_data = (bthci_cmd_data_t *) wmem_new(wmem_file_scope(), bthci_cmd_data_t);
6708 bthci_cmd_data->opcode = opcode;
6709 bthci_cmd_data->command_in_frame = frame_number;
6710 bthci_cmd_data->command_abs_ts = pinfo->abs_ts;
6711 bthci_cmd_data->pending_in_frame = bluetooth_max_disconnect_in_frame;
6712 bthci_cmd_data->pending_abs_ts = pinfo->abs_ts;
6713 bthci_cmd_data->response_in_frame = bluetooth_max_disconnect_in_frame;
6714 bthci_cmd_data->response_abs_ts = pinfo->abs_ts;
6717 col_set_str(pinfo->cinfo, COL_PROTOCOL, "HCI_CMD");
6719 ti_opcode = proto_tree_add_item(bthci_cmd_tree, hf_bthci_cmd_opcode, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6720 opcode_tree = proto_item_add_subtree(ti_opcode, ett_opcode);
6721 proto_tree_add_item(opcode_tree, hf_bthci_cmd_ogf, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6723 if (ogf == HCI_OGF_LINK_CONTROL)
6724 hfx = hf_bthci_cmd_ocf_link_control;
6725 else if (ogf == HCI_OGF_LINK_POLICY)
6726 hfx = hf_bthci_cmd_ocf_link_policy;
6727 else if (ogf == HCI_OGF_HOST_CONTROLLER)
6728 hfx = hf_bthci_cmd_ocf_host_controller_and_baseband;
6729 else if (ogf == HCI_OGF_INFORMATIONAL)
6730 hfx = hf_bthci_cmd_ocf_informational;
6731 else if (ogf == HCI_OGF_STATUS)
6732 hfx = hf_bthci_cmd_ocf_status;
6733 else if (ogf == HCI_OGF_TESTING)
6734 hfx = hf_bthci_cmd_ocf_testing;
6735 else if (ogf == HCI_OGF_LOW_ENERGY)
6736 hfx = hf_bthci_cmd_ocf_low_energy;
6737 else if (ogf == HCI_OGF_LOGO_TESTING)
6738 hfx = hf_bthci_cmd_ocf_logo_testing;
6739 else
6740 hfx = hf_bthci_cmd_ocf;
6741 proto_tree_add_item(opcode_tree, hfx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6742 offset+=2;
6744 proto_tree_add_item(bthci_cmd_tree, hf_bthci_cmd_param_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6745 param_length = tvb_get_uint8(tvb, offset);
6746 offset++;
6748 if (ogf == HCI_OGF_VENDOR_SPECIFIC) {
6749 col_append_fstr(pinfo->cinfo, COL_INFO, "Vendor Command 0x%04X (opcode 0x%04X)", ocf, opcode);
6751 if (!dissector_try_payload_new(vendor_dissector_table, tvb, pinfo, tree, true, bluetooth_data)) {
6752 if (bluetooth_data) {
6753 hci_vendor_data_t *hci_vendor_data;
6755 key[0].length = 1;
6756 key[0].key = &interface_id;
6757 key[1].length = 1;
6758 key[1].key = &adapter_id;
6759 key[2].length = 0;
6760 key[2].key = NULL;
6762 hci_vendor_data = (hci_vendor_data_t *) wmem_tree_lookup32_array(bluetooth_data->hci_vendors, key);
6763 if (hci_vendor_data) {
6764 int sub_offset;
6766 sub_offset = dissector_try_uint_new(hci_vendor_table, hci_vendor_data->manufacturer, tvb, pinfo, tree, true, bluetooth_data);
6768 if (sub_offset > 0 && sub_offset < tvb_captured_length_remaining(tvb, offset))
6769 proto_tree_add_expert(bthci_cmd_tree, pinfo, &ei_command_parameter_unexpected, tvb, offset + sub_offset, tvb_captured_length_remaining(tvb, sub_offset + offset));
6774 proto_tree_add_item(bthci_cmd_tree, hf_bthci_cmd_parameter, tvb, offset, tvb_captured_length_remaining(tvb, offset), ENC_NA);
6775 } else {
6776 col_append_str(pinfo->cinfo, COL_INFO, val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Unknown 0x%04x"));
6778 if (param_length > 0) {
6779 switch (ogf) {
6780 case HCI_OGF_LINK_CONTROL:
6781 offset = dissect_link_control_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf, bluetooth_data);
6782 break;
6784 case HCI_OGF_LINK_POLICY:
6785 offset = dissect_link_policy_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf, bluetooth_data);
6786 break;
6788 case HCI_OGF_HOST_CONTROLLER:
6789 offset = dissect_host_controller_baseband_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf, bluetooth_data, bthci_cmd_data);
6790 break;
6792 case HCI_OGF_INFORMATIONAL:
6793 offset = dissect_informational_parameters_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf);
6794 break;
6796 case HCI_OGF_STATUS:
6797 offset = dissect_status_parameters_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf);
6798 break;
6800 case HCI_OGF_TESTING:
6801 offset = dissect_testing_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf);
6802 break;
6804 case HCI_OGF_LOW_ENERGY:
6805 offset = dissect_le_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf, bluetooth_data);
6806 break;
6807 default:
6808 proto_tree_add_expert(bthci_cmd_tree, pinfo, &ei_command_unknown_command, tvb, 3, -1);
6809 offset += tvb_reported_length_remaining(tvb, offset);
6810 break;
6815 if (!pinfo->fd->visited && bthci_cmd_data) {
6816 key[0].length = 1;
6817 key[0].key = &interface_id;
6818 key[1].length = 1;
6819 key[1].key = &adapter_id;
6820 key[2].length = 1;
6821 key[2].key = &opcode;
6822 key[3].length = 1;
6823 key[3].key = &frame_number;
6824 key[4].length = 0;
6825 key[4].key = NULL;
6827 wmem_tree_insert32_array(bthci_cmds, key, bthci_cmd_data);
6830 if (ogf != HCI_OGF_VENDOR_SPECIFIC && tvb_reported_length_remaining(tvb, offset) > 0) {
6831 proto_tree_add_expert(bthci_cmd_tree, pinfo, &ei_command_parameter_unexpected, tvb, offset, -1);
6832 offset += tvb_reported_length_remaining(tvb, offset);
6835 key[0].length = 1;
6836 key[0].key = &interface_id;
6837 key[1].length = 1;
6838 key[1].key = &adapter_id;
6839 key[2].length = 1;
6840 key[2].key = &opcode;
6841 key[3].length = 0;
6842 key[3].key = NULL;
6844 subtree = (wmem_tree_t *) wmem_tree_lookup32_array(bthci_cmds, key);
6845 bthci_cmd_data = (subtree) ? (bthci_cmd_data_t *) wmem_tree_lookup32_le(subtree, pinfo->num) : NULL;
6846 if (bthci_cmd_data && bthci_cmd_data->pending_in_frame < bluetooth_max_disconnect_in_frame) {
6847 nstime_t delta;
6849 sub_item = proto_tree_add_uint(bthci_cmd_tree, hf_pending_in_frame, tvb, 0, 0, bthci_cmd_data->pending_in_frame);
6850 proto_item_set_generated(sub_item);
6852 nstime_delta(&delta, &bthci_cmd_data->pending_abs_ts, &bthci_cmd_data->command_abs_ts);
6853 sub_item = proto_tree_add_double(bthci_cmd_tree, hf_command_pending_time_delta, tvb, 0, 0, nstime_to_msec(&delta));
6854 proto_item_set_generated(sub_item);
6856 if (bthci_cmd_data && bthci_cmd_data->response_in_frame < bluetooth_max_disconnect_in_frame) {
6857 nstime_t delta;
6859 sub_item = proto_tree_add_uint(bthci_cmd_tree, hf_response_in_frame, tvb, 0, 0, bthci_cmd_data->response_in_frame);
6860 proto_item_set_generated(sub_item);
6862 nstime_delta(&delta, &bthci_cmd_data->response_abs_ts, &bthci_cmd_data->command_abs_ts);
6863 sub_item = proto_tree_add_double(bthci_cmd_tree, hf_command_response_time_delta, tvb, 0, 0, nstime_to_msec(&delta));
6864 proto_item_set_generated(sub_item);
6867 return offset;
6871 /* Register the protocol with Wireshark */
6873 /* this format is require because a script is used to build the C function
6874 that calls all the protocol registration.
6876 void
6877 proto_register_bthci_cmd(void)
6879 module_t *module;
6880 expert_module_t *expert_bthci_cmd;
6882 /* Setup list of header fields See Section 1.6.1 for details*/
6883 static hf_register_info hf[] = {
6884 { &hf_bthci_cmd_opcode,
6885 { "Command Opcode", "bthci_cmd.opcode",
6886 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &bthci_cmd_opcode_vals_ext, 0x0,
6887 "HCI Command Opcode", HFILL }
6889 { &hf_bthci_cmd_ogf,
6890 { "Opcode Group Field", "bthci_cmd.opcode.ogf",
6891 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &bthci_cmd_ogf_vals_ext, 0xfc00,
6892 NULL, HFILL }
6894 { &hf_bthci_cmd_ocf_link_control,
6895 { "Opcode Command Field", "bthci_cmd.opcode.ocf",
6896 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_link_control_vals_ext, 0x03ff,
6897 NULL, HFILL }
6899 { &hf_bthci_cmd_ocf_link_policy,
6900 { "Opcode Command Field", "bthci_cmd.opcode.ocf",
6901 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_link_policy_vals_ext, 0x03ff,
6902 NULL, HFILL }
6904 { &hf_bthci_cmd_ocf_host_controller_and_baseband,
6905 { "Opcode Command Field", "bthci_cmd.opcode.ocf",
6906 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_host_controller_and_baseband_vals_ext, 0x03ff,
6907 NULL, HFILL }
6909 { &hf_bthci_cmd_ocf_informational,
6910 { "Opcode Command Field", "bthci_cmd.opcode.ocf",
6911 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_informational_vals_ext, 0x03ff,
6912 NULL, HFILL }
6914 { &hf_bthci_cmd_ocf_status,
6915 { "Opcode Command Field", "bthci_cmd.opcode.ocf",
6916 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_status_vals_ext, 0x03ff,
6917 NULL, HFILL }
6919 { &hf_bthci_cmd_ocf_testing,
6920 { "Opcode Command Field", "bthci_cmd.opcode.ocf",
6921 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_testing_vals_ext, 0x03ff,
6922 NULL, HFILL }
6924 { &hf_bthci_cmd_ocf_low_energy,
6925 { "Opcode Command Field", "bthci_cmd.opcode.ocf",
6926 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_low_energy_vals_ext, 0x03ff,
6927 NULL, HFILL }
6929 { &hf_bthci_cmd_ocf_logo_testing,
6930 { "Opcode Command Field", "bthci_cmd.opcode.ocf",
6931 FT_UINT16, BASE_HEX, NULL, 0x03ff,
6932 NULL, HFILL }
6934 { &hf_bthci_cmd_ocf,
6935 { "Opcode Command Field", "bthci_cmd.opcode.ocf",
6936 FT_UINT16, BASE_HEX, NULL, 0x03ff,
6937 NULL, HFILL }
6939 { &hf_bthci_cmd_param_length,
6940 { "Parameter Total Length", "bthci_cmd.param_length",
6941 FT_UINT8, BASE_DEC, NULL, 0x0,
6942 NULL, HFILL }
6944 { &hf_bthci_cmd_lap,
6945 { "LAP", "bthci_cmd.lap",
6946 FT_UINT24, BASE_HEX, NULL, 0x0,
6947 "LAP for the inquiry access code", HFILL }
6949 { &hf_bthci_cmd_inq_length,
6950 { "Inquiry Length", "bthci_cmd.inq_length",
6951 FT_UINT8, BASE_DEC, NULL, 0x0,
6952 "Inquiry Length (*1.28s)", HFILL }
6954 { &hf_bthci_cmd_num_responses,
6955 { "Num Responses", "bthci_cmd.num_responses",
6956 FT_UINT8, BASE_DEC, NULL, 0x0,
6957 "Number of Responses", HFILL }
6959 { &hf_bthci_cmd_encrypt_mode,
6960 { "Encryption Mode", "bthci_cmd.encrypt_mode",
6961 FT_UINT8, BASE_HEX, VALS(bthci_cmd_encrypt_mode_vals), 0x0,
6962 NULL, HFILL }
6964 { &hf_bthci_cmd_bd_addr,
6965 { "BD_ADDR", "bthci_cmd.bd_addr",
6966 FT_ETHER, BASE_NONE, NULL, 0x0,
6967 "Bluetooth Device Address", HFILL}
6969 { &hf_bthci_cmd_packet_type,
6970 { "Packet Type", "bthci_cmd.packet_type",
6971 FT_UINT16, BASE_HEX, NULL, 0x0,
6972 NULL, HFILL }
6974 { &hf_bthci_cmd_packet_type_reserved_0,
6975 { "Reserved", "bthci_cmd.packet_type.reserved.0",
6976 FT_BOOLEAN, 16, NULL, 0x0001,
6977 NULL, HFILL }
6979 { &hf_bthci_cmd_packet_type_2dh1,
6980 { "2-DH1", "bthci_cmd.packet_type.2dh1",
6981 FT_BOOLEAN, 16, NULL, 0x0002,
6982 NULL, HFILL }
6984 { &hf_bthci_cmd_packet_type_3dh1,
6985 { "3-DH1", "bthci_cmd.packet_type.3dh1",
6986 FT_BOOLEAN, 16, NULL, 0x0004,
6987 NULL, HFILL }
6989 { &hf_bthci_cmd_packet_type_dm1,
6990 { "DM1", "bthci_cmd.packet_type.dm1",
6991 FT_BOOLEAN, 16, NULL, 0x0008,
6992 NULL, HFILL }
6994 { &hf_bthci_cmd_packet_type_dh1,
6995 { "DH1", "bthci_cmd.packet_type.dh1",
6996 FT_BOOLEAN, 16, NULL, 0x0010,
6997 NULL, HFILL }
6999 { &hf_bthci_cmd_packet_type_reserved_5_7,
7000 { "Reserved", "bthci_cmd.packet_type.reserved.5_7",
7001 FT_UINT16, BASE_HEX, NULL, 0x00E0,
7002 NULL, HFILL }
7004 { &hf_bthci_cmd_packet_type_2dh3,
7005 { "2-DH3", "bthci_cmd.packet_type.2dh3",
7006 FT_BOOLEAN, 16, NULL, 0x0100,
7007 NULL, HFILL }
7009 { &hf_bthci_cmd_packet_type_3dh3,
7010 { "3-DH3", "bthci_cmd.packet_type.3dh3",
7011 FT_BOOLEAN, 16, NULL, 0x0200,
7012 NULL, HFILL }
7014 { &hf_bthci_cmd_packet_type_dm3,
7015 { "DM3", "bthci_cmd.packet_type.dm3",
7016 FT_BOOLEAN, 16, NULL, 0x0400,
7017 NULL, HFILL }
7019 { &hf_bthci_cmd_packet_type_dh3,
7020 { "DH3", "bthci_cmd.packet_type.dh3",
7021 FT_BOOLEAN, 16, NULL, 0x0800,
7022 NULL, HFILL }
7024 { &hf_bthci_cmd_packet_type_2dh5,
7025 { "2-DH5", "bthci_cmd.packet_type.2dh5",
7026 FT_BOOLEAN, 16, NULL, 0x1000,
7027 NULL, HFILL }
7029 { &hf_bthci_cmd_packet_type_3dh5,
7030 { "3-DH5", "bthci_cmd.packet_type.3dh5",
7031 FT_BOOLEAN, 16, NULL, 0x2000,
7032 NULL, HFILL }
7034 { &hf_bthci_cmd_packet_type_dm5,
7035 { "DM5", "bthci_cmd.packet_type.dm5",
7036 FT_BOOLEAN, 16, NULL, 0x4000,
7037 NULL, HFILL }
7039 { &hf_bthci_cmd_packet_type_dh5,
7040 { "DH5", "bthci_cmd.packet_type.dh5",
7041 FT_BOOLEAN, 16, NULL, 0x8000,
7042 NULL, HFILL }
7044 { &hf_bthci_cmd_page_scan_mode,
7045 { "Page Scan Mode", "bthci_cmd.page_scan_mode",
7046 FT_UINT8, BASE_HEX, VALS(bthci_cmd_page_scan_modes), 0x0,
7047 NULL, HFILL }
7049 { &hf_bthci_cmd_page_scan_repetition_mode,
7050 { "Page Scan Repetition Mode", "bthci_cmd.page_scan_repetition_mode",
7051 FT_UINT8, BASE_HEX, VALS(bthci_cmd_page_scan_repetition_modes), 0x0,
7052 NULL, HFILL }
7054 { &hf_bthci_cmd_page_scan_period_mode,
7055 { "Page Scan Period Mode", "bthci_cmd.page_scan_period_mode",
7056 FT_UINT8, BASE_HEX, VALS(bthci_cmd_page_scan_period_modes), 0x0,
7057 NULL, HFILL }
7059 { &hf_bthci_cmd_clock_offset,
7060 { "Clock Offset", "bthci_cmd.clock_offset",
7061 FT_UINT16, BASE_HEX, NULL, 0x7FFF,
7062 "Bit 2-16 of the Clock Offset, CLKNPeripheral-CLK", HFILL }
7064 { &hf_bthci_cmd_clock_offset_valid,
7065 { "Clock_Offset_Valid_Flag", "bthci_cmd.clock_offset_valid",
7066 FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x8000,
7067 "Indicates if clock offset is valid", HFILL }
7069 { &hf_bthci_cmd_allow_role_switch,
7070 { "Allow Role Switch", "bthci_cmd.allow_role_switch",
7071 FT_UINT8, BASE_HEX, VALS(cmd_role_switch_modes), 0x0,
7072 NULL, HFILL }
7074 { &hf_bthci_cmd_max_period_length,
7075 { "Max Period Length", "bthci_cmd.max_period_length",
7076 FT_UINT16, BASE_DEC, NULL, 0x0,
7077 "Maximum amount of time specified between consecutive inquiries.", HFILL }
7079 { &hf_bthci_cmd_min_period_length,
7080 { "Min Period Length", "bthci_cmd.min_period_length",
7081 FT_UINT16, BASE_DEC, NULL, 0x0,
7082 "Minimum amount of time specified between consecutive inquiries.", HFILL }
7084 { &hf_bthci_cmd_connection_handle,
7085 { "Connection Handle", "bthci_cmd.connection_handle",
7086 FT_UINT16, BASE_HEX, NULL, 0x0,
7087 NULL, HFILL }
7089 { &hf_bthci_cmd_reason,
7090 { "Reason", "bthci_cmd.reason",
7091 FT_UINT8, BASE_HEX|BASE_EXT_STRING, &bthci_cmd_status_vals_ext, 0x0,
7092 NULL, HFILL }
7094 { &hf_bthci_cmd_num_link_keys,
7095 { "Number of Link Keys", "bthci_cmd.num_link_keys",
7096 FT_UINT8, BASE_DEC, NULL, 0x0,
7097 NULL, HFILL }
7099 { &hf_bthci_cmd_link_key,
7100 { "Link Key", "bthci_cmd.link_key",
7101 FT_BYTES, BASE_NONE, NULL, 0x0,
7102 "Link Key for the associated BD_ADDR", HFILL }
7104 { &hf_bthci_cmd_packet_type_hv1,
7105 { "Packet Type HV1", "bthci_cmd.packet_type_hv1",
7106 FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0020,
7107 NULL, HFILL }
7109 { &hf_bthci_cmd_packet_type_hv2,
7110 { "Packet Type HV2", "bthci_cmd.packet_type_hv2",
7111 FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0040,
7112 NULL, HFILL }
7114 { &hf_bthci_cmd_packet_type_hv3,
7115 { "Packet Type HV3", "bthci_cmd.packet_type_hv3",
7116 FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0080,
7117 NULL, HFILL }
7119 { &hf_bthci_cmd_role,
7120 { "Role", "bthci_cmd.role",
7121 FT_UINT8, BASE_HEX, VALS(cmd_role_vals), 0x0,
7122 NULL, HFILL }
7124 { &hf_bthci_cmd_acr_role,
7125 { "Role", "bthci_cmd.acr.role",
7126 FT_UINT8, BASE_HEX, VALS(cmd_acr_role_vals), 0x0,
7127 NULL, HFILL }
7129 { &hf_bthci_cmd_pin_code_length,
7130 { "PIN Code Length", "bthci_cmd.pin_code_length",
7131 FT_UINT8, BASE_DEC, NULL, 0x0,
7132 NULL, HFILL }
7134 { &hf_bthci_cmd_pin_code,
7135 { "PIN Code", "bthci_cmd.pin_code",
7136 FT_STRING, BASE_NONE, NULL, 0x0,
7137 NULL, HFILL }
7139 { &hf_bthci_cmd_pin_type,
7140 { "PIN Type", "bthci_cmd.pin_type",
7141 FT_UINT8, BASE_HEX, VALS(cmd_pin_types), 0x0,
7142 "PIN Types", HFILL }
7144 { &hf_bthci_cmd_encryption_enable,
7145 { "Encryption Enable", "bthci_cmd.encryption_enable",
7146 FT_UINT8, BASE_HEX, VALS(cmd_encryption_enable), 0x0,
7147 NULL, HFILL }
7149 { &hf_bthci_cmd_key_flag,
7150 { "Key Flag", "bthci_cmd.key_flag",
7151 FT_UINT8, BASE_HEX, VALS(cmd_key_flag), 0x0,
7152 NULL, HFILL }
7154 { &hf_bthci_cmd_max_interval_hold,
7155 { "Hold Mode Max Interval", "bthci_cmd.hold_mode_max_int",
7156 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7157 "Maximal acceptable number of Baseband slots to wait in Hold Mode.", HFILL }
7159 { &hf_bthci_cmd_min_interval_hold,
7160 { "Hold Mode Min Interval", "bthci_cmd.hold_mode_min_int",
7161 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7162 "Minimum acceptable number of Baseband slots to wait in Hold Mode.", HFILL }
7164 { &hf_bthci_cmd_max_interval_sniff,
7165 { "Sniff Max Interval", "bthci_cmd.sniff_max_int",
7166 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7167 "Maximal acceptable number of Baseband slots between each sniff period.", HFILL }
7169 { &hf_bthci_cmd_min_interval_sniff,
7170 { "Sniff Min Interval", "bthci_cmd.sniff_min_int",
7171 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7172 "Minimum acceptable number of Baseband slots between each sniff period.", HFILL }
7174 { &hf_bthci_cmd_sniff_attempt,
7175 { "Sniff Attempt", "bthci_cmd.sniff_attempt",
7176 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
7177 "Number of Baseband receive slots for sniff attempt.", HFILL }
7179 { &hf_bthci_cmd_sniff_timeout,
7180 { "Timeout", "bthci_cmd.sniff_timeout",
7181 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
7182 NULL, HFILL }
7184 { &hf_bthci_cmd_timeout,
7185 { "Timeout", "bthci_cmd.timeout",
7186 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7187 "Number of Baseband slots for timeout.", HFILL }
7189 { &hf_bthci_cmd_max_interval_beacon,
7190 { "Beacon Max Interval", "bthci_cmd.beacon_max_int",
7191 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7192 "Maximal acceptable number of Baseband slots between consecutive beacons.", HFILL }
7194 { &hf_bthci_cmd_min_interval_beacon,
7195 { "Beacon Min Interval", "bthci_cmd.beacon_min_int",
7196 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7197 "Minimum acceptable number of Baseband slots between consecutive beacons.", HFILL }
7199 { &hf_bthci_cmd_flags,
7200 { "Flags", "bthci_cmd.flags",
7201 FT_UINT8, BASE_HEX, NULL, 0x0,
7202 NULL, HFILL }
7204 { &hf_bthci_cmd_flow_direction,
7205 { "Flow Direction", "bthci_cmd.flow_direction",
7206 FT_UINT8, BASE_HEX, VALS(cmd_flow_directions), 0x0,
7207 NULL, HFILL }
7209 { &hf_bthci_cmd_service_type,
7210 { "Service Type", "bthci_cmd.service_type",
7211 FT_UINT8, BASE_HEX, VALS(cmd_service_types), 0x0,
7212 NULL, HFILL }
7214 { &hf_bthci_cmd_token_rate,
7215 { "Available Token Rate", "bthci_cmd.token_rate",
7216 FT_UINT32, BASE_DEC, NULL, 0x0,
7217 "Token Rate, in bytes per second", HFILL }
7219 { &hf_bthci_cmd_token_bucket_size,
7220 { "Available Token Bucket Size", "bthci_cmd.token_bucket_size",
7221 FT_UINT32, BASE_DEC, NULL, 0x0,
7222 "Token Bucket Size in bytes", HFILL }
7224 { &hf_bthci_cmd_peak_bandwidth,
7225 { "Peak Bandwidth", "bthci_cmd.peak_bandwidth",
7226 FT_UINT32, BASE_DEC, NULL, 0x0,
7227 "Peak Bandwidth, in bytes per second", HFILL }
7229 { &hf_bthci_cmd_latency,
7230 { "Latency", "bthci_cmd.latency",
7231 FT_UINT32, BASE_DEC, NULL, 0x0,
7232 "Latency, in microseconds", HFILL }
7234 { &hf_bthci_cmd_delay_variation,
7235 { "Delay Variation", "bthci_cmd.delay_variation",
7236 FT_UINT32, BASE_DEC, NULL, 0x0,
7237 "Delay Variation, in microseconds", HFILL }
7239 { &hf_bthci_cmd_link_policy_setting_switch,
7240 { "Enable Role Switch", "bthci_cmd.link_policy_switch",
7241 FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0001,
7242 NULL, HFILL }
7244 { &hf_bthci_cmd_link_policy_setting_hold,
7245 { "Enable Hold Mode", "bthci_cmd.link_policy_hold",
7246 FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0002,
7247 NULL, HFILL }
7249 { &hf_bthci_cmd_link_policy_setting_sniff,
7250 { "Enable Sniff Mode", "bthci_cmd.link_policy_sniff",
7251 FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0004,
7252 NULL, HFILL }
7254 { &hf_bthci_cmd_link_policy_setting_park,
7255 { "Enable Park Mode", "bthci_cmd.link_policy_park",
7256 FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0008,
7257 NULL, HFILL }
7259 { &hf_bthci_cmd_filter_type,
7260 { "Filter Type", "bthci_cmd.filter_type",
7261 FT_UINT8, BASE_HEX, VALS(cmd_filter_types), 0x0,
7262 NULL, HFILL }
7264 { &hf_bthci_cmd_inquiry_result_filter_condition_type,
7265 { "Filter Condition Type", "bthci_cmd.filter_condition_type",
7266 FT_UINT8, BASE_HEX, VALS(cmd_inquiry_result_filter_condition_types), 0x0,
7267 NULL, HFILL }
7269 { &hf_bthci_cmd_connection_setup_filter_condition_type,
7270 { "Filter Condition Type", "bthci_cmd.filter_condition_type",
7271 FT_UINT8, BASE_HEX, VALS(cmd_connection_setup_filter_condition_types), 0x0,
7272 NULL, HFILL }
7274 { &hf_bthci_cmd_cod_class_of_device_mask,
7275 { "Class of Device Mask", "bthci_cmd.class_of_device_mask",
7276 FT_UINT24, BASE_HEX, NULL, 0x0,
7277 "Bit Mask used to determine which bits of the Class of Device parameter are of interest.", HFILL }
7279 { &hf_bthci_cmd_cod_major_device_class_mask,
7280 { "Major Device Class Mask", "bthci_cmd.class_of_device_mask.major_device_class",
7281 FT_UINT16, BASE_HEX, NULL, 0x1F,
7282 NULL, HFILL }
7284 { &hf_bthci_cmd_cod_major_service_class_information_mask,
7285 { "Major Service Classes Mask: Information", "bthci_cmd.class_of_device_mask.major_service_classes.information",
7286 FT_BOOLEAN, 16, NULL, 0x8000,
7287 NULL, HFILL }
7289 { &hf_bthci_cmd_cod_major_service_class_telephony_mask,
7290 { "Major Service Classes Mask: Telephony", "bthci_cmd.class_of_device_mask.major_service_classes.telephony",
7291 FT_BOOLEAN, 16, NULL, 0x4000,
7292 NULL, HFILL }
7294 { &hf_bthci_cmd_cod_major_service_class_audio_mask,
7295 { "Major Service Classes Mask: Audio", "bthci_cmd.class_of_device_mask.major_service_classes.audio",
7296 FT_BOOLEAN, 16, NULL, 0x2000,
7297 NULL, HFILL }
7299 { &hf_bthci_cmd_cod_major_service_class_object_transfer_mask,
7300 { "Major Service Classes Mask: Object Transfer", "bthci_cmd.class_of_device_mask.major_service_classes.object_transfer",
7301 FT_BOOLEAN, 16, NULL, 0x1000,
7302 NULL, HFILL }
7304 { &hf_bthci_cmd_cod_major_service_class_capturing_mask,
7305 { "Major Service Classes Mask: Capturing", "bthci_cmd.class_of_device_mask.major_service_classes.capturing",
7306 FT_BOOLEAN, 16, NULL, 0x0800,
7307 NULL, HFILL }
7309 { &hf_bthci_cmd_cod_major_service_class_rendering_mask,
7310 { "Major Service Classes Mask: Rendering", "bthci_cmd.class_of_device_mask.major_service_classes.rendering",
7311 FT_BOOLEAN, 16, NULL, 0x0400,
7312 NULL, HFILL }
7314 { &hf_bthci_cmd_cod_major_service_class_networking_mask,
7315 { "Major Service Classes Mask: Networking", "bthci_cmd.class_of_device_mask.major_service_classes.networking",
7316 FT_BOOLEAN, 16, NULL, 0x0200,
7317 NULL, HFILL }
7319 { &hf_bthci_cmd_cod_major_service_class_positioning_mask,
7320 { "Major Service Classes Mask: Positioning", "bthci_cmd.class_of_device_mask.major_service_classes.positioning",
7321 FT_BOOLEAN, 16, NULL, 0x0100,
7322 NULL, HFILL }
7324 { &hf_bthci_cmd_cod_major_service_class_reserved_mask,
7325 { "Major Service Classes Mask: Reserved", "bthci_cmd.class_of_device_mask.major_service_classes.reserved",
7326 FT_UINT16, BASE_HEX, NULL, 0x0080,
7327 NULL, HFILL }
7329 { &hf_bthci_cmd_cod_major_service_class_le_audio_mask,
7330 { "Major Service Classes Mask: LE Audio", "bthci_cmd.class_of_device_mask.major_service_classes.le_audio",
7331 FT_UINT16, BASE_HEX, NULL, 0x0040,
7332 NULL, HFILL }
7334 { &hf_bthci_cmd_cod_major_service_class_limited_discoverable_mode_mask,
7335 { "Major Service Classes Mask: Limited Discoverable Mode", "bthci_cmd.class_of_device_mask.major_service_classes.limited_discoverable_mode",
7336 FT_BOOLEAN, 16, NULL, 0x0020,
7337 NULL, HFILL }
7339 { &hf_bthci_cmd_cod_minor_device_class_mask,
7340 { "Minor Device Class Mask", "bthci_cmd.class_of_device_mask.minor_device_class",
7341 FT_UINT8, BASE_HEX, NULL, 0xFC,
7342 NULL, HFILL }
7344 { &hf_bthci_cmd_cod_format_type_mask,
7345 { "Format Type Mask", "bthci_cmd.class_of_device_mask.format_type",
7346 FT_UINT8, BASE_HEX, NULL, 0x03,
7347 NULL, HFILL }
7349 { &hf_bthci_cmd_auto_acc_flag,
7350 { "Auto Accept Flag", "bthci_cmd.auto_accept_flag",
7351 FT_UINT8, BASE_HEX, VALS(cmd_auto_acc_flag_values), 0x0,
7352 "Class of Device of Interest", HFILL }
7354 { &hf_bthci_cmd_read_all_flag,
7355 { "Read All Flag", "bthci_cmd.read_all_flag",
7356 FT_UINT8, BASE_HEX, VALS(cmd_read_all_flag_values), 0x0,
7357 NULL, HFILL }
7359 { &hf_bthci_cmd_delete_all_flag,
7360 { "Delete All Flag", "bthci_cmd.delete_all_flag",
7361 FT_UINT8, BASE_HEX, VALS(cmd_delete_all_flag_values), 0x0,
7362 NULL, HFILL }
7364 { &hf_bthci_cmd_authentication_enable,
7365 { "Authentication Enable", "bthci_cmd.auth_enable",
7366 FT_UINT8, BASE_HEX, VALS(bthci_cmd_authentication_enable_values), 0x0,
7367 NULL, HFILL }
7369 { &hf_bthci_cmd_input_unused,
7370 { "Unused bits", "bthci_cmd.voice.unused",
7371 FT_UINT16, BASE_HEX, NULL, 0xfc00,
7372 NULL, HFILL }
7374 { &hf_bthci_cmd_input_coding,
7375 { "Input Coding", "bthci_cmd.voice.input_coding",
7376 FT_UINT16, BASE_DEC, VALS(cmd_input_coding_values), 0x0300,
7377 NULL, HFILL }
7379 { &hf_bthci_cmd_input_data_format,
7380 { "Input Data Format", "bthci_cmd.voice.input_data_format",
7381 FT_UINT16, BASE_DEC, VALS(cmd_input_data_format_values), 0x00c0,
7382 NULL, HFILL }
7384 { &hf_bthci_cmd_input_sample_size,
7385 { "Input Sample Size", "bthci_cmd.voice.input_sample_size",
7386 FT_UINT16, BASE_DEC, VALS(cmd_input_sample_size_values), 0x0020,
7387 NULL, HFILL }
7389 { &hf_bthci_cmd_linear_pcm_bit_pos,
7390 { "Linear PCM Bit Position", "bthci_cmd.voice.linear_pcm_bit_pos",
7391 FT_UINT16, BASE_DEC, NULL, 0x001c,
7392 "# bit pos. that MSB of sample is away from starting at MSB", HFILL }
7394 { &hf_bthci_cmd_air_coding_format,
7395 { "Air Coding Format", "bthci_cmd.voice.air_coding_format",
7396 FT_UINT16, BASE_DEC, VALS(cmd_air_coding_format_values), 0x0003,
7397 NULL, HFILL }
7399 { &hf_bthci_cmd_num_broadcast_retransmissions,
7400 { "Num Broadcast Retran", "bthci_cmd.num_broad_retran",
7401 FT_UINT8, BASE_DEC, NULL, 0x0,
7402 "Number of Broadcast Retransmissions", HFILL }
7404 { &hf_bthci_cmd_hold_mode_act_page,
7405 { "Suspend Page Scan", "bthci_cmd.hold_mode_page",
7406 FT_UINT8, BASE_DEC, VALS(cmd_boolean), 0x1,
7407 "Device can enter low power state", HFILL }
7409 { &hf_bthci_cmd_hold_mode_act_inquiry,
7410 { "Suspend Inquiry Scan", "bthci_cmd.hold_mode_inquiry",
7411 FT_UINT8, BASE_DEC, VALS(cmd_boolean), 0x2,
7412 "Device can enter low power state", HFILL }
7414 { &hf_bthci_cmd_hold_mode_act_periodic,
7415 { "Suspend Periodic Inquiries", "bthci_cmd.hold_mode_periodic",
7416 FT_UINT8, BASE_DEC, VALS(cmd_boolean), 0x4,
7417 "Device can enter low power state", HFILL }
7419 { &hf_bthci_cmd_scan_enable,
7420 { "Scan Enable", "bthci_cmd.scan_enable",
7421 FT_UINT8, BASE_HEX, VALS(bthci_cmd_scan_enable_values), 0x0,
7422 NULL, HFILL }
7424 { &hf_bthci_cmd_interval,
7425 { "Interval", "bthci_cmd.interval",
7426 FT_UINT16, BASE_DEC, NULL, 0x0,
7427 NULL, HFILL }
7429 { &hf_bthci_cmd_window,
7430 { "Window", "bthci_cmd.window",
7431 FT_UINT16, BASE_DEC, NULL, 0x0,
7432 NULL, HFILL }
7434 { &hf_bthci_cmd_device_name,
7435 { "Device Name", "bthci_cmd.device_name",
7436 FT_STRINGZ, BASE_NONE, NULL, 0x0,
7437 "Userfriendly descriptive name for the device", HFILL }
7439 { &hf_bthci_cmd_num_curr_iac,
7440 { "Number of Current IAC", "bthci_cmd.num_curr_iac",
7441 FT_UINT8, BASE_DEC, NULL, 0x0,
7442 "Number of IACs which are currently in use", HFILL }
7444 { &hf_bthci_cmd_iac_lap,
7445 { "IAC LAP", "bthci_cmd.num_iac_lap",
7446 FT_UINT24, BASE_HEX, NULL, 0x0,
7447 "LAP(s)used to create IAC", HFILL }
7449 { &hf_bthci_cmd_evt_mask_00,
7450 { "Inquiry Complete", "bthci_cmd.evt_mask_00",
7451 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7452 "Inquiry Complete Bit", HFILL }
7454 { &hf_bthci_cmd_evt_mask_01,
7455 { "Inquiry Result", "bthci_cmd.evt_mask_01",
7456 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7457 "Inquiry Result Bit", HFILL }
7459 { &hf_bthci_cmd_evt_mask_02,
7460 { "Connect Complete", "bthci_cmd.evt_mask_02",
7461 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7462 "Connection Complete Bit", HFILL }
7464 { &hf_bthci_cmd_evt_mask_03,
7465 { "Connect Request", "bthci_cmd.evt_mask_03",
7466 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7467 "Connect Request Bit", HFILL }
7469 { &hf_bthci_cmd_evt_mask_04,
7470 { "Disconnect Complete", "bthci_cmd.evt_mask_04",
7471 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7472 "Disconnect Complete Bit", HFILL }
7474 { &hf_bthci_cmd_evt_mask_05,
7475 { "Auth Complete", "bthci_cmd.evt_mask_05",
7476 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x20,
7477 "Auth Complete Bit", HFILL }
7479 { &hf_bthci_cmd_evt_mask_06,
7480 { "Remote Name Req Complete", "bthci_cmd.evt_mask_06",
7481 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x40,
7482 "Remote Name Req Complete Bit", HFILL }
7484 { &hf_bthci_cmd_evt_mask_07,
7485 { "Encrypt Change", "bthci_cmd.evt_mask_07",
7486 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7487 "Encrypt Change Bit", HFILL }
7489 { &hf_bthci_cmd_evt_mask_10,
7490 { "Change Connection Link Key Complete", "bthci_cmd.evt_mask_10",
7491 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7492 "Change Connection Link Key Complete Bit", HFILL }
7494 { &hf_bthci_cmd_evt_mask_11,
7495 { "Link Key Type Changed Complete", "bthci_cmd.evt_mask_11",
7496 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7497 "Link Key Type Changed Complete Bit", HFILL }
7499 { &hf_bthci_cmd_evt_mask_12,
7500 { "Read Remote Supported Features", "bthci_cmd.evt_mask_12",
7501 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7502 "Read Remote Supported Features Bit", HFILL }
7504 { &hf_bthci_cmd_evt_mask_13,
7505 { "Read Remote Ver Info Complete", "bthci_cmd.evt_mask_13",
7506 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7507 "Read Remote Ver Info Complete Bit", HFILL }
7509 { &hf_bthci_cmd_evt_mask_14,
7510 { "QoS Setup Complete", "bthci_cmd.evt_mask_14",
7511 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7512 "QoS Setup Complete Bit", HFILL }
7514 { &hf_bthci_cmd_evt_mask_17,
7515 { "Hardware Error", "bthci_cmd.evt_mask_17",
7516 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7517 "Hardware Error Bit", HFILL }
7519 { &hf_bthci_cmd_evt_mask_20,
7520 { "Flush Occurred", "bthci_cmd.evt_mask_20",
7521 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7522 "Flush Occurred Bit", HFILL }
7524 { &hf_bthci_cmd_evt_mask_21,
7525 { "Role Change", "bthci_cmd.evt_mask_21",
7526 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7527 "Role Change Bit", HFILL }
7529 { &hf_bthci_cmd_evt_mask_23,
7530 { "Mode Change", "bthci_cmd.evt_mask_23",
7531 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7532 "Mode Change Bit", HFILL }
7534 { &hf_bthci_cmd_evt_mask_24,
7535 { "Return Link Keys", "bthci_cmd.evt_mask_24",
7536 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7537 "Return Link Keys Bit", HFILL }
7539 { &hf_bthci_cmd_evt_mask_25,
7540 { "PIN Code Request", "bthci_cmd.evt_mask_25",
7541 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x20,
7542 "PIN Code Request Bit", HFILL }
7544 { &hf_bthci_cmd_evt_mask_26,
7545 { "Link Key Request", "bthci_cmd.evt_mask_26",
7546 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x40,
7547 "Link Key Request Bit", HFILL }
7549 { &hf_bthci_cmd_evt_mask_27,
7550 { "Link Key Notification", "bthci_cmd.evt_mask_27",
7551 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7552 "Link Key Notification Bit", HFILL }
7554 { &hf_bthci_cmd_evt_mask_30,
7555 { "Loopback Command", "bthci_cmd.evt_mask_30",
7556 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7557 "Loopback Command Bit", HFILL }
7559 { &hf_bthci_cmd_evt_mask_31,
7560 { "Data Buffer Overflow", "bthci_cmd.evt_mask_31",
7561 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7562 "Data Buffer Overflow Bit", HFILL }
7564 { &hf_bthci_cmd_evt_mask_32,
7565 { "Max Slots Change", "bthci_cmd.evt_mask_32",
7566 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7567 "Max Slots Change Bit", HFILL }
7569 { &hf_bthci_cmd_evt_mask_33,
7570 { "Read Clock Offset Complete", "bthci_cmd.evt_mask_33",
7571 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7572 "Read Clock Offset Complete Bit", HFILL }
7574 { &hf_bthci_cmd_evt_mask_34,
7575 { "Connection Packet Type Changed", "bthci_cmd.evt_mask_34",
7576 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7577 "Connection Packet Type Changed Bit", HFILL }
7579 { &hf_bthci_cmd_evt_mask_35,
7580 { "QoS Violation", "bthci_cmd.evt_mask_35",
7581 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x20,
7582 "QoS Violation Bit", HFILL }
7584 { &hf_bthci_cmd_evt_mask_36,
7585 { "Page Scan Mode Change", "bthci_cmd.evt_mask_36",
7586 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x40,
7587 "Page Scan Mode Change Bit", HFILL }
7589 { &hf_bthci_cmd_evt_mask_37,
7590 { "Page Scan Repetition Mode Change", "bthci_cmd.evt_mask_37",
7591 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7592 "Page Scan Repetition Mode Change Bit", HFILL }
7594 { &hf_bthci_cmd_evt_mask_40,
7595 { "Flow Specification Complete", "bthci_cmd.evt_mask_40",
7596 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7597 "Flow Specification Complete Bit", HFILL }
7599 { &hf_bthci_cmd_evt_mask_41,
7600 { "Inquiry Result With RSSI", "bthci_cmd.evt_mask_41",
7601 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7602 "Inquiry Result With RSSI Bit", HFILL }
7604 { &hf_bthci_cmd_evt_mask_42,
7605 { "Read Remote Ext. Features Complete", "bthci_cmd.evt_mask_42",
7606 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7607 "Read Remote Ext. Features Complete Bit", HFILL }
7609 { &hf_bthci_cmd_evt_mask_53,
7610 { "Synchronous Connection Complete", "bthci_cmd.evt_mask_53",
7611 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7612 "Synchronous Connection Complete Bit", HFILL }
7614 { &hf_bthci_cmd_evt_mask_54,
7615 { "Synchronous Connection Changed", "bthci_cmd.evt_mask_54",
7616 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7617 "Synchronous Connection Changed Bit", HFILL }
7619 { &hf_bthci_cmd_evt_mask_55,
7620 { "Sniff Subrate", "bthci_cmd.evt_mask_55",
7621 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x20,
7622 "Sniff Subrate Bit", HFILL }
7624 { &hf_bthci_cmd_evt_mask_56,
7625 { "Extended Inquiry Result", "bthci_cmd.evt_mask_56",
7626 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x40,
7627 "Extended Inquiry Result Bit", HFILL }
7629 { &hf_bthci_cmd_evt_mask_57,
7630 { "Encryption Key Refresh Complete", "bthci_cmd.evt_mask_57",
7631 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7632 "Encryption Key Refresh Complete Bit", HFILL }
7634 { &hf_bthci_cmd_evt_mask_60,
7635 { "IO Capability Request", "bthci_cmd.evt_mask_60",
7636 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7637 "IO Capability Request Bit", HFILL }
7639 { &hf_bthci_cmd_evt_mask_61,
7640 { "IO Capability Response", "bthci_cmd.evt_mask_61",
7641 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7642 "IO Capability Response Bit", HFILL }
7644 { &hf_bthci_cmd_evt_mask_62,
7645 { "User Confirmation Request", "bthci_cmd.evt_mask_62",
7646 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7647 "User Confirmation Request Bit", HFILL }
7649 { &hf_bthci_cmd_evt_mask_63,
7650 { "User Passkey Request", "bthci_cmd.evt_mask_63",
7651 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7652 "User Passkey Request Bit", HFILL }
7654 { &hf_bthci_cmd_evt_mask_64,
7655 { "Remote OOB Data Request", "bthci_cmd.evt_mask_64",
7656 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7657 "Remote OOB Data Request Bit", HFILL }
7659 { &hf_bthci_cmd_evt_mask_65,
7660 { "Simple Pairing Complete", "bthci_cmd.evt_mask_65",
7661 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x20,
7662 "Simple Pairing Complete Bit", HFILL }
7664 { &hf_bthci_cmd_evt_mask_67,
7665 { "Link Supervision Timeout Changed", "bthci_cmd.evt_mask_67",
7666 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7667 "Link Supervision Timeout Changed Bit", HFILL }
7669 { &hf_bthci_cmd_evt_mask_70,
7670 { "Enhanced Flush Complete", "bthci_cmd.evt_mask_70",
7671 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7672 "Enhanced Flush Complete Bit", HFILL }
7674 { &hf_bthci_cmd_evt_mask_72,
7675 { "User Passkey Notification", "bthci_cmd.evt_mask_72",
7676 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7677 "User Passkey Notification Bit", HFILL }
7679 { &hf_bthci_cmd_evt_mask_73,
7680 { "Keypress Notification", "bthci_cmd.evt_mask_73",
7681 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7682 "Keypress Notification Bit", HFILL }
7684 { &hf_bthci_cmd_sco_flow_control,
7685 { "SCO Flow Control","bthci_cmd.flow_control",
7686 FT_UINT8, BASE_HEX, VALS(cmd_en_disabled), 0x0,
7687 NULL, HFILL }
7689 { &hf_bthci_cmd_num_handles,
7690 { "Number of Connection Handles", "bthci_cmd.num_handles",
7691 FT_UINT8, BASE_DEC, NULL, 0x0,
7692 NULL, HFILL }
7695 { &hf_bthci_cmd_num_compl_packets,
7696 { "Number of Completed Packets", "bthci_cmd.num_compl_packets",
7697 FT_UINT16, BASE_DEC, NULL, 0x0,
7698 "Number of Completed HCI Data Packets", HFILL }
7700 { &hf_bthci_cmd_flow_contr_enable,
7701 { "Flow Control Enable", "bthci_cmd.flow_contr_enable",
7702 FT_UINT8, BASE_HEX, VALS(cmd_flow_contr_enable), 0x0,
7703 NULL, HFILL }
7705 { &hf_bthci_cmd_host_data_packet_length_acl,
7706 {"Host ACL Data Packet Length (bytes)", "bthci_cmd.max_data_length_acl",
7707 FT_UINT16, BASE_DEC, NULL, 0x0,
7708 "Max Host ACL Data Packet length of data portion host is able to accept", HFILL }
7710 { &hf_bthci_cmd_host_data_packet_length_sco,
7711 {"Host SCO Data Packet Length (bytes)", "bthci_cmd.max_data_length_sco",
7712 FT_UINT8, BASE_DEC, NULL, 0x0,
7713 "Max Host SCO Data Packet length of data portion host is able to accept", HFILL }
7715 { &hf_bthci_cmd_host_total_num_acl_data_packets,
7716 {"Host Total Num ACL Data Packets", "bthci_cmd.max_data_num_acl",
7717 FT_UINT16, BASE_DEC, NULL, 0x0,
7718 "Total Number of HCI ACL Data Packets that can be stored in the data buffers of the Host", HFILL }
7720 { &hf_bthci_cmd_host_total_num_sco_data_packets,
7721 {"Host Total Num SCO Data Packets", "bthci_cmd.max_data_num_sco",
7722 FT_UINT16, BASE_DEC, NULL, 0x0,
7723 "Total Number of HCI SCO Data Packets that can be stored in the data buffers of the Host", HFILL }
7725 { &hf_bthci_cmd_loopback_mode,
7726 {"Loopback Mode", "bthci_cmd.loopback_mode",
7727 FT_UINT8, BASE_HEX, VALS(cmd_loopback_modes), 0x0,
7728 NULL, HFILL}
7730 { &hf_bthci_cmd_page_number,
7731 {"Page Number", "bthci_cmd.page_number",
7732 FT_UINT8, BASE_DEC, NULL, 0x0,
7733 NULL, HFILL}
7735 { &hf_bthci_cmd_transmit_bandwidth,
7736 {"Tx Bandwidth (bytes/s)", "bthci_cmd.tx_bandwidth",
7737 FT_UINT32, BASE_DEC, NULL, 0x0,
7738 NULL, HFILL}
7740 { &hf_bthci_cmd_receive_bandwidth,
7741 {"Rx Bandwidth (bytes/s)", "bthci_cmd.rx_bandwidth",
7742 FT_UINT32, BASE_DEC, NULL, 0x0,
7743 NULL, HFILL}
7745 { &hf_bthci_cmd_max_latency_ms,
7746 {"Max. Latency (ms)", "bthci_cmd.max_latency_ms",
7747 FT_UINT16, BASE_DEC, NULL, 0x0,
7748 NULL, HFILL}
7750 { &hf_bthci_cmd_max_latency,
7751 {"Max. Latency", "bthci_cmd.max_latency",
7752 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7753 "Max. Latency in baseband slots", HFILL}
7755 { &hf_bthci_cmd_retransmission_effort,
7756 {"Retransmission Effort", "bthci_cmd.retransmission_effort",
7757 FT_UINT8, BASE_DEC, VALS(cmd_rtx_effort), 0x0,
7758 NULL, HFILL}
7760 { &hf_bthci_cmd_scan_type,
7761 {"Scan Type", "bthci_cmd.inq_scan_type",
7762 FT_UINT8, BASE_DEC, VALS(cmd_scan_types), 0x0,
7763 NULL, HFILL}
7765 { &hf_bthci_cmd_inq_mode,
7766 {"Inquiry Mode", "bthci_cmd.inq_mode",
7767 FT_UINT8, BASE_DEC, VALS(bthci_cmd_inq_modes), 0x0,
7768 NULL, HFILL}
7770 { &hf_bthci_cmd_fec_required,
7771 {"FEC Required", "bthci_cmd.fec_required",
7772 FT_UINT8, BASE_DEC, VALS(cmd_boolean), 0x0,
7773 NULL, HFILL}
7775 { &hf_bthci_cmd_err_data_reporting,
7776 {"Erroneous Data Reporting", "bthci_cmd.err_data_reporting",
7777 FT_UINT8, BASE_DEC, VALS(cmd_en_disabled), 0x0,
7778 NULL, HFILL}
7780 { &hf_bthci_cmd_tx_power,
7781 {"Power Level (dBm)", "bthci_cmd.power_level",
7782 FT_INT8, BASE_DEC, NULL, 0x0,
7783 NULL, HFILL}
7785 { &hf_bthci_cmd_sco_packet_type,
7786 { "Packet Type", "bthci_cmd.sco_packet_type",
7787 FT_UINT16, BASE_HEX, NULL, 0x0,
7788 NULL, HFILL }
7790 { &hf_bthci_cmd_sco_packet_type_hv1,
7791 { "HV1 may be used", "bthci_cmd.sco_packet_type.hv1",
7792 FT_BOOLEAN, 16, NULL, 0x0001,
7793 NULL, HFILL }
7795 { &hf_bthci_cmd_sco_packet_type_hv2,
7796 { "HV2 may be used", "bthci_cmd.sco_packet_type.hv2",
7797 FT_BOOLEAN, 16, NULL, 0x0002,
7798 NULL, HFILL }
7800 { &hf_bthci_cmd_sco_packet_type_hv3,
7801 { "HV3 may be used", "bthci_cmd.sco_packet_type.hv3",
7802 FT_BOOLEAN, 16, NULL, 0x0004,
7803 NULL, HFILL }
7805 { &hf_bthci_cmd_sco_packet_type_ev3,
7806 { "EV3 may be used", "bthci_cmd.sco_packet_type.ev3",
7807 FT_BOOLEAN, 16, NULL, 0x0008,
7808 NULL, HFILL }
7810 { &hf_bthci_cmd_sco_packet_type_ev4,
7811 { "EV4 may be used", "bthci_cmd.sco_packet_type.ev4",
7812 FT_BOOLEAN, 16, NULL, 0x0010,
7813 NULL, HFILL }
7815 { &hf_bthci_cmd_sco_packet_type_ev5,
7816 { "EV5 may be used", "bthci_cmd.sco_packet_type.ev5",
7817 FT_BOOLEAN, 16, NULL, 0x0020,
7818 NULL, HFILL }
7820 { &hf_bthci_cmd_sco_packet_type_2ev3,
7821 { "2-EV3 may NOT be used", "bthci_cmd.sco_packet_type.2ev3",
7822 FT_BOOLEAN, 16, NULL, 0x0040,
7823 NULL, HFILL }
7825 { &hf_bthci_cmd_sco_packet_type_3ev3,
7826 { "3-EV3 may NOT be used", "bthci_cmd.sco_packet_type.3ev3",
7827 FT_BOOLEAN, 16, NULL, 0x0080,
7828 NULL, HFILL }
7830 { &hf_bthci_cmd_sco_packet_type_2ev5,
7831 { "2-EV5 may NOT be used", "bthci_cmd.sco_packet_type.2ev5",
7832 FT_BOOLEAN, 16, NULL, 0x0100,
7833 NULL, HFILL }
7835 { &hf_bthci_cmd_sco_packet_type_3ev5,
7836 { "3-EV5 may NOT be used", "bthci_cmd.sco_packet_type.3ev5",
7837 FT_BOOLEAN, 16, NULL, 0x0200,
7838 NULL, HFILL }
7840 { &hf_bthci_cmd_sco_packet_type_reserved,
7841 { "Reserved", "bthci_cmd.sco_packet_type.reserved",
7842 FT_UINT16, BASE_HEX, NULL, 0xFC00,
7843 NULL, HFILL }
7845 { &hf_bthci_cmd_min_remote_timeout,
7846 {"Min. Remote Timeout", "bthci_cmd.min_remote_timeout",
7847 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7848 "Min. Remote Timeout in baseband slots", HFILL}
7850 { &hf_bthci_cmd_min_local_timeout,
7851 {"Min. Local Timeout", "bthci_cmd.min_local_timeout",
7852 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7853 "Min. Local Timeout in baseband slots", HFILL}
7855 { &hf_bthci_cmd_flush_packet_type,
7856 {"Packet Type", "bthci_cmd.flush_packet_type",
7857 FT_UINT8, BASE_DEC, VALS(cmd_flush_pkt_type), 0x0,
7858 NULL, HFILL}
7860 { &hf_bthci_cmd_afh_ch_assessment_mode,
7861 {"AFH Channel Assessment Mode", "bthci_cmd.afh_ch_assessment_mode",
7862 FT_UINT8, BASE_DEC, VALS(cmd_en_disabled), 0x0,
7863 NULL, HFILL}
7865 { &hf_bthci_cmd_ch_classification,
7866 { "Channel Classification", "bthci_cmd.ch_classification",
7867 FT_BYTES, BASE_NONE, NULL, 0x0,
7868 NULL, HFILL }
7870 { &hf_bthci_cmd_which_clock,
7871 {"Which Clock", "bthci_cmd.which_clock",
7872 FT_UINT8, BASE_DEC, VALS(cmd_which_clock), 0x0,
7873 NULL, HFILL}
7875 { &hf_bthci_cmd_io_capability,
7876 {"IO Capability", "bthci_cmd.io_capability",
7877 FT_UINT8, BASE_DEC, VALS(bthci_cmd_io_capability_vals), 0x0,
7878 NULL, HFILL}
7880 { &hf_bthci_cmd_oob_data_present,
7881 {"OOB Data Present", "bthci_cmd.oob_data_present",
7882 FT_UINT8, BASE_DEC, VALS(bthci_cmd_oob_data_present_vals), 0x0,
7883 NULL, HFILL}
7885 { &hf_bthci_cmd_auth_requirements,
7886 {"Authentication Requirements", "bthci_cmd.auth_requirements",
7887 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bthci_cmd_auth_req_vals_ext, 0x0,
7888 NULL, HFILL}
7890 { &hf_bthci_cmd_passkey,
7891 {"Passkey", "bthci_cmd.passkey",
7892 FT_UINT32, BASE_DEC, NULL, 0x0,
7893 NULL, HFILL}
7895 { &hf_bthci_cmd_hash_c,
7896 {"Hash C", "bthci_cmd.hash_c",
7897 FT_BYTES, BASE_NONE, NULL, 0x0,
7898 NULL, HFILL}
7900 { &hf_bthci_cmd_randomizer_r,
7901 {"Randomizer R", "bthci_cmd.randomizer_r",
7902 FT_BYTES, BASE_NONE, NULL, 0x0,
7903 NULL, HFILL}
7905 { &hf_bthci_cmd_simple_pairing_mode,
7906 {"Simple Pairing Mode", "bthci_cmd.simple_pairing_mode",
7907 FT_UINT8, BASE_DEC, VALS(cmd_en_disabled), 0x0,
7908 NULL, HFILL}
7910 { &hf_bthci_cmd_simple_pairing_debug_mode,
7911 {"Simple Pairing Debug Mode", "bthci_cmd.simple_pairing_debug_mode",
7912 FT_UINT8, BASE_DEC, VALS(cmd_en_disabled), 0x0,
7913 NULL, HFILL}
7915 { &hf_bthci_cmd_notification_type,
7916 {"Notification Type", "bthci_cmd.notification_type",
7917 FT_UINT8, BASE_DEC, VALS(bthci_cmd_notification_types), 0x0,
7918 NULL, HFILL}
7920 { &hf_bthci_cmd_physical_link_handle,
7921 {"Physical Link Handle", "bthci_cmd.physical_link_handle",
7922 FT_UINT8, BASE_HEX, NULL, 0x0,
7923 NULL, HFILL}
7925 { &hf_bthci_cmd_dedicated_amp_key_length,
7926 {"Dedicated AMP Key Length", "bthci_cmd.dedicated_amp_key_length",
7927 FT_UINT8, BASE_DEC, NULL, 0x0,
7928 NULL, HFILL}
7930 { &hf_bthci_cmd_dedicated_amp_key_type,
7931 {"Dedicated AMP Key Type", "bthci_cmd.dedicated_amp_key_type",
7932 FT_UINT8, BASE_DEC, VALS(bthci_cmd_amp_key_type), 0x0,
7933 NULL, HFILL}
7935 { &hf_bthci_cmd_dedicated_amp_key,
7936 {"Dedicated AMP Key Type", "bthci_cmd.dedicated_amp_key",
7937 FT_BYTES, BASE_NONE, NULL, 0x0,
7938 NULL, HFILL}
7940 { &hf_bthci_cmd_flow_spec,
7941 { "Flow Spec", "bthci_cmd.flow_spec",
7942 FT_NONE, BASE_NONE, NULL, 0x0,
7943 NULL, HFILL }
7945 { &hf_bthci_cmd_flow_spec_sdu_size,
7946 { "Maximum SDU Size", "bthci_cmd.sdu_size",
7947 FT_UINT16, BASE_DEC, NULL, 0x0,
7948 NULL, HFILL }
7950 { &hf_bthci_cmd_flow_spec_sdu_arrival_time,
7951 { "SDU Inter-arrival Time (us)", "bthci_cmd.sdu_arrival_time",
7952 FT_UINT32, BASE_DEC, NULL, 0x0,
7953 NULL, HFILL }
7955 { &hf_bthci_cmd_flow_spec_identifier,
7956 { "Identifier", "bthci_cmd.ident",
7957 FT_UINT8, BASE_HEX, NULL, 0x0,
7958 NULL, HFILL }
7960 { &hf_bthci_cmd_flow_spec_access_latency,
7961 { "Access Latency (us)", "bthci_cmd.access_latency",
7962 FT_UINT32, BASE_DEC, NULL, 0x0,
7963 NULL, HFILL }
7965 { &hf_bthci_cmd_flow_spec_service_type,
7966 { "Service Type", "bthci_cmd.servicetype",
7967 FT_UINT8, BASE_HEX, VALS(cmd_flow_spec_servicetype), 0x0,
7968 "Level of service required", HFILL }
7970 { &hf_bthci_cmd_flush_to_us,
7971 { "Flush Timeout (us)", "bthci_cmd.flushto",
7972 FT_UINT32, BASE_DEC, NULL, 0x0,
7973 NULL, HFILL }
7975 { &hf_bthci_cmd_logical_link_handle,
7976 { "Logical Link Handle", "bthci_cmd.logical_link_handle",
7977 FT_UINT16, BASE_HEX, NULL, 0x0FFF,
7978 NULL, HFILL }
7981 { &hf_bthci_cmd_evt_mask2,
7982 { "Event Mask Page 2", "bthci_cmd.evt_mask2",
7983 FT_UINT64, BASE_HEX, NULL, 0x0,
7984 NULL, HFILL }
7986 { &hf_bthci_cmd_evt_mask2_00,
7987 { "Physical Link Complete", "bthci_cmd.evt_mask2_00",
7988 FT_BOOLEAN, 64, NULL, UINT64_C(0x01),
7989 NULL, HFILL }
7991 { &hf_bthci_cmd_evt_mask2_01,
7992 { "Channel Selected", "bthci_cmd.evt_mask2_01",
7993 FT_BOOLEAN, 64, NULL, UINT64_C(0x02),
7994 NULL, HFILL }
7996 { &hf_bthci_cmd_evt_mask2_02,
7997 { "Disconnection Physical Link", "bthci_cmd.evt_mask2_02",
7998 FT_BOOLEAN, 64, NULL, UINT64_C(0x04),
7999 NULL, HFILL }
8001 { &hf_bthci_cmd_evt_mask2_03,
8002 { "Physical Link Loss Early Warning", "bthci_cmd.evt_mask2_03",
8003 FT_BOOLEAN, 64, NULL, UINT64_C(0x08),
8004 NULL, HFILL }
8006 { &hf_bthci_cmd_evt_mask2_04,
8007 { "Physical Link Recovery", "bthci_cmd.evt_mask2_04",
8008 FT_BOOLEAN, 64, NULL, UINT64_C(0x10),
8009 NULL, HFILL }
8011 { &hf_bthci_cmd_evt_mask2_05,
8012 { "Logical Link Complete", "bthci_cmd.evt_mask2_05",
8013 FT_BOOLEAN, 64, NULL, UINT64_C(0x20),
8014 NULL, HFILL }
8016 { &hf_bthci_cmd_evt_mask2_06,
8017 { "Disconnection Logical Link Complete", "bthci_cmd.evt_mask2_06",
8018 FT_BOOLEAN, 64, NULL, UINT64_C(0x40),
8019 NULL, HFILL }
8021 { &hf_bthci_cmd_evt_mask2_07,
8022 { "Flow Spec Modify Complete", "bthci_cmd.evt_mask2_07",
8023 FT_BOOLEAN, 64, NULL, UINT64_C(0x80),
8024 NULL, HFILL }
8026 { &hf_bthci_cmd_evt_mask2_08,
8027 { "Number Of Completed Data Blocks", "bthci_cmd.evt_mask2_8",
8028 FT_BOOLEAN, 64, NULL, UINT64_C(0x100),
8029 NULL, HFILL }
8031 { &hf_bthci_cmd_evt_mask2_09,
8032 { "AMP Start Test", "bthci_cmd.evt_mask2_9",
8033 FT_BOOLEAN, 64, NULL, UINT64_C(0x200),
8034 NULL, HFILL }
8036 { &hf_bthci_cmd_evt_mask2_10,
8037 { "AMP Test End", "bthci_cmd.evt_mask2_10",
8038 FT_BOOLEAN, 64, NULL, UINT64_C(0x400),
8039 NULL, HFILL }
8041 { &hf_bthci_cmd_evt_mask2_11,
8042 { "AMP Receiver Report", "bthci_cmd.evt_mask2_11",
8043 FT_BOOLEAN, 64, NULL, UINT64_C(0x800),
8044 NULL, HFILL }
8046 { &hf_bthci_cmd_evt_mask2_12,
8047 { "Short Range Mode Change Complete", "bthci_cmd.evt_mask2_12",
8048 FT_BOOLEAN, 64, NULL, UINT64_C(0x1000),
8049 NULL, HFILL }
8051 { &hf_bthci_cmd_evt_mask2_13,
8052 { "AMP Status Change", "bthci_cmd.evt_mask2_13",
8053 FT_BOOLEAN, 64, NULL, UINT64_C(0x2000),
8054 NULL, HFILL }
8056 { &hf_bthci_cmd_evt_mask2_14,
8057 { "Triggered Clock Capture", "bthci_cmd.evt_mask2_14",
8058 FT_BOOLEAN, 64, NULL, UINT64_C(0x4000),
8059 NULL, HFILL }
8061 { &hf_bthci_cmd_evt_mask2_15,
8062 { "Synchronization Train Complete", "bthci_cmd.evt_mask2_15",
8063 FT_BOOLEAN, 64, NULL, UINT64_C(0x8000),
8064 NULL, HFILL }
8066 { &hf_bthci_cmd_evt_mask2_16,
8067 { "Synchronization Train Received", "bthci_cmd.evt_mask2_16",
8068 FT_BOOLEAN, 64, NULL, UINT64_C(0x10000),
8069 NULL, HFILL }
8071 { &hf_bthci_cmd_evt_mask2_17,
8072 { "Connectionless Peripheral Broadcast Receive", "bthci_cmd.evt_mask2_17",
8073 FT_BOOLEAN, 64, NULL, UINT64_C(0x20000),
8074 NULL, HFILL }
8076 { &hf_bthci_cmd_evt_mask2_18,
8077 { "Connectionless Peripheral Broadcast Timeout", "bthci_cmd.evt_mask2_18",
8078 FT_BOOLEAN, 64, NULL, UINT64_C(0x40000),
8079 NULL, HFILL }
8081 { &hf_bthci_cmd_evt_mask2_19,
8082 { "Truncated Page Complete", "bthci_cmd.evt_mask2_19",
8083 FT_BOOLEAN, 64, NULL, UINT64_C(0x80000),
8084 NULL, HFILL }
8086 { &hf_bthci_cmd_evt_mask2_20,
8087 { "Peripheral Page Response Timeout", "bthci_cmd.evt_mask2_20",
8088 FT_BOOLEAN, 64, NULL, UINT64_C(0x100000),
8089 NULL, HFILL }
8091 { &hf_bthci_cmd_evt_mask2_21,
8092 { "Connectionless Peripheral Broadcast Channel Map Change", "bthci_cmd.evt_mask2_21",
8093 FT_BOOLEAN, 64, NULL, UINT64_C(0x200000),
8094 NULL, HFILL }
8096 { &hf_bthci_cmd_evt_mask2_22,
8097 { "Inquiry Response Notification", "bthci_cmd.evt_mask2_22",
8098 FT_BOOLEAN, 64, NULL, UINT64_C(0x400000),
8099 NULL, HFILL }
8101 { &hf_bthci_cmd_evt_mask2_23,
8102 { "Authenticated Payload Timeout Expired", "bthci_cmd.evt_mask2_23",
8103 FT_BOOLEAN, 64, NULL, UINT64_C(0x800000),
8104 NULL, HFILL }
8106 { &hf_bthci_cmd_evt_mask2_24,
8107 { "SAM Status Change", "bthci_cmd.evt_mask2_24",
8108 FT_BOOLEAN, 64, NULL, UINT64_C(0x1000000),
8109 NULL, HFILL }
8111 { &hf_bthci_cmd_evt_mask2_25,
8112 { "Encryption Change [v2]", "bthci_cmd.evt_mask2_25",
8113 FT_BOOLEAN, 64, NULL, UINT64_C(0x2000000),
8114 NULL, HFILL }
8116 { &hf_bthci_cmd_evt_mask2_reserved,
8117 { "Reserved", "bthci_cmd.evt_mask2_25_reserved",
8118 FT_UINT64, BASE_HEX, NULL, UINT64_C(0xFFFFFFFFFC000000),
8119 NULL, HFILL }
8121 { &hf_bthci_cmd_location_domain_aware,
8122 { "Location Domain Aware", "bthci_cmd.location_domain_aware",
8123 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8124 NULL, HFILL }
8126 { &hf_bthci_cmd_location_domain,
8127 { "Location Domain", "bthci_cmd.location_domain",
8128 FT_STRING, BASE_NONE, NULL, 0x0,
8129 "ISO 3166-1 Country Code", HFILL }
8131 { &hf_bthci_cmd_location_domain_options,
8132 { "Location Domain Options", "bthci_cmd.location_domain_options",
8133 FT_STRING, BASE_NONE, NULL, 0x0,
8134 NULL, HFILL }
8136 { &hf_bthci_cmd_location_options,
8137 { "Location Options", "bthci_cmd.location_options",
8138 FT_UINT8, BASE_HEX, NULL, 0x0,
8139 NULL, HFILL }
8141 { &hf_bthci_cmd_flow_control_mode,
8142 { "Flow Control Mode", "bthci_cmd.flow_control_mode",
8143 FT_UINT8, BASE_HEX, VALS(cmd_flow_ctrl_mode), 0x0,
8144 NULL, HFILL }
8146 { &hf_bthci_cmd_tx_power_level_type,
8147 { "Tx Power Level Type", "bthci_cmd.tx_power_level_type",
8148 FT_UINT8, BASE_HEX, VALS(cmd_power_level_types), 0x0,
8149 NULL, HFILL }
8151 { &hf_bthci_cmd_short_range_mode,
8152 { "Short Range Mode", "bthci_cmd.short_range_mode",
8153 FT_UINT8, BASE_HEX, VALS(cmd_en_disabled), 0x0,
8154 NULL, HFILL }
8156 { &hf_bthci_cmd_enable_amp_recv_reports,
8157 { "Enable AMP Receiver Reports", "bthci_cmd.enable_amp_recv_reports",
8158 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8159 NULL, HFILL }
8161 { &hf_bthci_cmd_amp_recv_report_interval,
8162 { "AMP Receiver Report Interval (s)", "bthci_cmd.amp_recv_report_interval",
8163 FT_UINT8, BASE_DEC, 0x0, 0x0,
8164 NULL, HFILL }
8166 { &hf_bthci_cmd_length_so_far,
8167 { "Length So Far", "bthci_cmd.length_so_far",
8168 FT_UINT16, BASE_DEC, 0x0, 0x0,
8169 NULL, HFILL }
8171 { &hf_bthci_cmd_amp_assoc_length,
8172 { "AMP Assoc Length", "bthci_cmd.amp_assoc_length",
8173 FT_UINT16, BASE_DEC, 0x0, 0x0,
8174 NULL, HFILL }
8176 { &hf_bthci_cmd_amp_remaining_assoc_length,
8177 { "AMP Remaining Assoc Length", "bthci_cmd.amp_remaining_assoc_length",
8178 FT_UINT16, BASE_DEC, 0x0, 0x0,
8179 NULL, HFILL }
8181 { &hf_bthci_cmd_amp_assoc_fragment,
8182 { "AMP Assoc Fragment", "bthci_cmd.amp_assoc_fragment",
8183 FT_BYTES, BASE_NONE, 0x0, 0x0,
8184 NULL, HFILL }
8186 { &hf_bthci_cmd_le_supported_host,
8187 { "LE Supported Host", "bthci_cmd.le_supported_host",
8188 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8189 NULL, HFILL }
8191 { &hf_bthci_cmd_le_simultaneous_host,
8192 { "Simultaneous LE Host", "bthci_cmd.le_simultaneous_host",
8193 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8194 "Support for both LE and BR/EDR to same device", HFILL }
8196 { &hf_bthci_cmd_le_event_mask,
8197 { "LE Event Mask", "bthci_cmd.le_event_mask",
8198 FT_UINT64, BASE_HEX, NULL, 0x0,
8199 NULL, HFILL }
8201 { &hf_bthci_cmd_le_event_mask_le_connection_complete,
8202 { "LE Connection Complete", "bthci_cmd.le_event_mask.le_connection_complete",
8203 FT_BOOLEAN, 64, NULL, UINT64_C(0x01),
8204 NULL, HFILL }
8206 { &hf_bthci_cmd_le_event_mask_le_advertising_report,
8207 { "LE Advertising Report", "bthci_cmd.le_event_mask.le_advertising_report",
8208 FT_BOOLEAN, 64, NULL, UINT64_C(0x02),
8209 NULL, HFILL }
8211 { &hf_bthci_cmd_le_event_mask_le_connection_update_complete,
8212 { "LE Connection Update Complete", "bthci_cmd.le_event_mask.le_connection_update_complete",
8213 FT_BOOLEAN, 64, NULL, UINT64_C(0x04),
8214 NULL, HFILL }
8216 { &hf_bthci_cmd_le_event_mask_le_read_remote_features_complete,
8217 { "LE Read Remote Features (Page 0) Complete", "bthci_cmd.le_event_mask.le_read_remote_features_complete",
8218 FT_BOOLEAN, 64, NULL, UINT64_C(0x08),
8219 NULL, HFILL }
8221 { &hf_bthci_cmd_le_event_mask_le_long_term_key_request,
8222 { "LE Long Term Key Request", "bthci_cmd.le_event_mask.le_long_term_key_request",
8223 FT_BOOLEAN, 64, NULL, UINT64_C(0x10),
8224 NULL, HFILL }
8226 { &hf_bthci_cmd_le_event_mask_le_remote_connection_parameter_request,
8227 { "LE Remote Connection Parameter Request", "bthci_cmd.le_event_mask.le_remote_connection_parameter_request",
8228 FT_BOOLEAN, 64, NULL, UINT64_C(0x20),
8229 NULL, HFILL }
8231 { &hf_bthci_cmd_le_event_mask_le_data_length_change,
8232 { "LE Data Length Change", "bthci_cmd.le_event_mask.le_data_length_change",
8233 FT_BOOLEAN, 64, NULL, UINT64_C(0x40),
8234 NULL, HFILL }
8236 { &hf_bthci_cmd_le_event_mask_le_read_local_p256_public_key_complete,
8237 { "LE Read Local P-256 Public Key Complete", "bthci_cmd.le_event_mask.le_read_local_p256_public_key_complete",
8238 FT_BOOLEAN, 64, NULL, UINT64_C(0x80),
8239 NULL, HFILL }
8241 { &hf_bthci_cmd_le_event_mask_le_generate_dhkey_complete,
8242 { "LE Generate DHKey Complete", "bthci_cmd.le_event_mask.le_generate_dhkey_complete",
8243 FT_BOOLEAN, 64, NULL, UINT64_C(0x100),
8244 NULL, HFILL }
8246 { &hf_bthci_cmd_le_event_mask_le_enhanced_connection_complete_v1,
8247 { "LE Enhanced Connection Complete [v1]", "bthci_cmd.le_event_mask.le_enhanced_connection_complete_v1",
8248 FT_BOOLEAN, 64, NULL, UINT64_C(0x200),
8249 NULL, HFILL }
8251 { &hf_bthci_cmd_le_event_mask_le_direct_advertising_report,
8252 { "LE Direct Advertising Report", "bthci_cmd.le_event_mask.le_direct_advertising_report",
8253 FT_BOOLEAN, 64, NULL, UINT64_C(0x400),
8254 NULL, HFILL }
8256 { &hf_bthci_cmd_le_event_mask_le_phy_update_complete,
8257 { "LE PHY Update Complete", "bthci_cmd.le_event_mask.le_phy_update_complete",
8258 FT_BOOLEAN, 64, NULL, UINT64_C(0x800),
8259 NULL, HFILL }
8261 { &hf_bthci_cmd_le_event_mask_le_extended_advertising_report,
8262 { "LE Extended Advertising Report", "bthci_cmd.le_event_mask.le_extended_advertising_report",
8263 FT_BOOLEAN, 64, NULL, UINT64_C(0x1000),
8264 NULL, HFILL }
8266 { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_established_v1,
8267 { "LE Periodic Advertising Sync Established [v1]", "bthci_cmd.le_event_mask.le_periodic_advertising_sync_established_v1",
8268 FT_BOOLEAN, 64, NULL, UINT64_C(0x2000),
8269 NULL, HFILL }
8271 { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_report_v1,
8272 { "LE Periodic Advertising Report [v1]", "bthci_cmd.le_event_mask.le_periodic_advertising_report_v1",
8273 FT_BOOLEAN, 64, NULL, UINT64_C(0x4000),
8274 NULL, HFILL }
8276 { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_lost,
8277 { "LE Periodic Advertising Sync Lost", "bthci_cmd.le_event_mask.le_periodic_advertising_sync_lost",
8278 FT_BOOLEAN, 64, NULL, UINT64_C(0x8000),
8279 NULL, HFILL }
8281 { &hf_bthci_cmd_le_event_mask_le_extended_scan_timeout,
8282 { "LE Extended Scan Timeout", "bthci_cmd.le_event_mask.le_extended_scan_timeout",
8283 FT_BOOLEAN, 64, NULL, UINT64_C(0x10000),
8284 NULL, HFILL }
8286 { &hf_bthci_cmd_le_event_mask_le_extended_advertising_set_terminated,
8287 { "LE Extended Advertising Set Terminated", "bthci_cmd.le_event_mask.le_extended_advertising_set_terminated",
8288 FT_BOOLEAN, 64, NULL, UINT64_C(0x20000),
8289 NULL, HFILL }
8291 { &hf_bthci_cmd_le_event_mask_le_scan_request_received,
8292 { "LE Scan Request Received", "bthci_cmd.le_event_mask.le_scan_request_received",
8293 FT_BOOLEAN, 64, NULL, UINT64_C(0x40000),
8294 NULL, HFILL }
8296 { &hf_bthci_cmd_le_event_mask_le_channel_selection_algorithm,
8297 { "LE Channel Selection Algorithm", "bthci_cmd.le_event_mask.le_channel_selection_algorithm",
8298 FT_BOOLEAN, 64, NULL, UINT64_C(0x80000),
8299 NULL, HFILL }
8301 { &hf_bthci_cmd_le_event_mask_le_connectionless_iq_report,
8302 { "LE Connectionless IQ Report", "bthci_cmd.le_event_mask.le_connectionless_iq_report",
8303 FT_BOOLEAN, 64, NULL, UINT64_C(0x100000),
8304 NULL, HFILL }
8306 { &hf_bthci_cmd_le_event_mask_le_connection_iq_report,
8307 { "LE Connection IQ Report", "bthci_cmd.le_event_mask.le_connection_iq_report",
8308 FT_BOOLEAN, 64, NULL, UINT64_C(0x200000),
8309 NULL, HFILL }
8311 { &hf_bthci_cmd_le_event_mask_le_cte_request_failed,
8312 { "LE CTE Request Failed", "bthci_cmd.le_event_mask.le_cte_request_failed",
8313 FT_BOOLEAN, 64, NULL, UINT64_C(0x400000),
8314 NULL, HFILL }
8316 { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_transfer_received_v1,
8317 { "LE Periodic Advertising Sync Transfer Received [v1]", "bthci_cmd.le_event_mask.le_periodic_advertising_sync_transfer_received_v1",
8318 FT_BOOLEAN, 64, NULL, UINT64_C(0x800000),
8319 NULL, HFILL }
8321 { &hf_bthci_cmd_le_event_mask_le_cis_established_v1,
8322 { "LE CIS Established [v1]", "bthci_cmd.le_event_mask.le_cis_established_v1",
8323 FT_BOOLEAN, 64, NULL, UINT64_C(0x1000000),
8324 NULL, HFILL }
8326 { &hf_bthci_cmd_le_event_mask_le_cis_request,
8327 { "LE CIS Request", "bthci_cmd.le_event_mask.le_cis_request",
8328 FT_BOOLEAN, 64, NULL, UINT64_C(0x2000000),
8329 NULL, HFILL }
8331 { &hf_bthci_cmd_le_event_mask_le_create_big_complete,
8332 { "LE Create BIG Complete", "bthci_cmd.le_event_mask.le_create_big_complete",
8333 FT_BOOLEAN, 64, NULL, UINT64_C(0x4000000),
8334 NULL, HFILL }
8336 { &hf_bthci_cmd_le_event_mask_le_terminate_big_complete,
8337 { "LE Terminate BIG Complete", "bthci_cmd.le_event_mask.le_terminate_big_complete",
8338 FT_BOOLEAN, 64, NULL, UINT64_C(0x8000000),
8339 NULL, HFILL }
8341 { &hf_bthci_cmd_le_event_mask_le_big_sync_established,
8342 { "LE BIG Sync Established", "bthci_cmd.le_event_mask.le_big_sync_established",
8343 FT_BOOLEAN, 64, NULL, UINT64_C(0x10000000),
8344 NULL, HFILL }
8346 { &hf_bthci_cmd_le_event_mask_le_big_sync_lost,
8347 { "LE BIG Sync Lost", "bthci_cmd.le_event_mask.le_big_sync_lost",
8348 FT_BOOLEAN, 64, NULL, UINT64_C(0x20000000),
8349 NULL, HFILL }
8351 { &hf_bthci_cmd_le_event_mask_le_request_peer_sca_complete,
8352 { "LE Request Peer SCA Complete", "bthci_cmd.le_event_mask.le_request_peer_sca_complete",
8353 FT_BOOLEAN, 64, NULL, UINT64_C(0x40000000),
8354 NULL, HFILL }
8356 { &hf_bthci_cmd_le_event_mask_le_path_loss_threshold,
8357 { "LE Path Loss Threshold", "bthci_cmd.le_event_mask.le_path_loss_threshold",
8358 FT_BOOLEAN, 64, NULL, UINT64_C(0x80000000),
8359 NULL, HFILL }
8361 { &hf_bthci_cmd_le_event_mask_le_transmit_power_reporting,
8362 { "LE Transmit Power Reporting", "bthci_cmd.le_event_mask.le_transmit_power_reporting",
8363 FT_BOOLEAN, 64, NULL, UINT64_C(0x100000000),
8364 NULL, HFILL }
8366 { &hf_bthci_cmd_le_event_mask_le_biginfo_advertising_report,
8367 { "LE BIGInfo Advertising Report", "bthci_cmd.le_event_mask.le_biginfo_advertising_report",
8368 FT_BOOLEAN, 64, NULL, UINT64_C(0x200000000),
8369 NULL, HFILL }
8371 { &hf_bthci_cmd_le_event_mask_le_subrate_changed,
8372 { "LE Subrate Changed", "bthci_cmd.le_event_mask.le_subrate_changed",
8373 FT_BOOLEAN, 64, NULL, UINT64_C(0x400000000),
8374 NULL, HFILL }
8376 { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_established_v2,
8377 { "LE Periodic Advertising Sync Established [v2]", "bthci_cmd.le_event_mask.le_periodic_advertising_sync_established_v2",
8378 FT_BOOLEAN, 64, NULL, UINT64_C(0x800000000),
8379 NULL, HFILL }
8381 { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_report_v2,
8382 { "LE Periodic Advertising Report [v2]", "bthci_cmd.le_event_mask.le_event_mask_le_periodic_advertising_report_v2",
8383 FT_BOOLEAN, 64, NULL, UINT64_C(0x1000000000),
8384 NULL, HFILL }
8386 { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_transfer_received_v2,
8387 { "LE Periodic Advertising Sync Transfer Received [v2]", "bthci_cmd.le_event_mask.le_periodic_advertising_sync_transfer_received_v2",
8388 FT_BOOLEAN, 64, NULL, UINT64_C(0x2000000000),
8389 NULL, HFILL }
8391 { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_subevent_data_request,
8392 { "LE Periodic Advertising Subevent Data Request", "bthci_cmd.le_event_mask.le_periodic_advertising_subevent_data_request",
8393 FT_BOOLEAN, 64, NULL, UINT64_C(0x4000000000),
8394 NULL, HFILL }
8396 { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_response_report,
8397 { "LE Periodic Advertising Response Report", "bthci_cmd.le_event_mask.le_periodic_advertising_response_report",
8398 FT_BOOLEAN, 64, NULL, UINT64_C(0x8000000000),
8399 NULL, HFILL }
8401 { &hf_bthci_cmd_le_event_mask_le_enhanced_connection_complete_v2,
8402 { "LE Enhanced Connection Complete [v2]", "bthci_cmd.le_event_mask.le_enhanced_connection_complete_v2",
8403 FT_BOOLEAN, 64, NULL, UINT64_C(0x10000000000),
8404 NULL, HFILL }
8406 { &hf_bthci_cmd_le_event_mask_le_cis_established_v2,
8407 { "LE CIS Established [v2]", "bthci_cmd.le_event_mask.le_cis_established_v2",
8408 FT_BOOLEAN, 64, NULL, UINT64_C(0x20000000000),
8409 NULL, HFILL }
8411 { &hf_bthci_cmd_le_event_mask_le_read_all_remote_features_complete,
8412 { "LE Read All Remote Features Complete", "bthci_cmd.le_event_mask.le_read_all_remote_features_complete",
8413 FT_BOOLEAN, 64, NULL, UINT64_C(0x40000000000),
8414 NULL, HFILL }
8416 { &hf_bthci_cmd_le_event_mask_le_cs_read_remote_supported_capabilities_complete,
8417 { "LE CS Read Remote Supported Capabilities Complete", "bthci_cmd.le_event_mask.le_cs_read_remote_supported_capabilities_complete",
8418 FT_BOOLEAN, 64, NULL, UINT64_C(0x80000000000),
8419 NULL, HFILL }
8421 { &hf_bthci_cmd_le_event_mask_le_cs_read_remote_fae_table_complete,
8422 { "LE CS Read Remote FAE Table Complete", "bthci_cmd.le_event_mask.le_cs_read_remote_fae_table_complete",
8423 FT_BOOLEAN, 64, NULL, UINT64_C(0x100000000000),
8424 NULL, HFILL }
8426 { &hf_bthci_cmd_le_event_mask_le_cs_security_enable_complete,
8427 { "LE CS Security Enable Complete", "bthci_cmd.le_event_mask.le_cs_security_enable_complete",
8428 FT_BOOLEAN, 64, NULL, UINT64_C(0x200000000000),
8429 NULL, HFILL }
8431 { &hf_bthci_cmd_le_event_mask_le_cs_config_complete,
8432 { "LE CS Config Complete", "bthci_cmd.le_event_mask.le_cs_config_complete",
8433 FT_BOOLEAN, 64, NULL, UINT64_C(0x400000000000),
8434 NULL, HFILL }
8436 { &hf_bthci_cmd_le_event_mask_le_cs_procedure_enable_complete,
8437 { "LE CS Procedure Enable Complete", "bthci_cmd.le_event_mask.le_cs_procedure_enable_complete",
8438 FT_BOOLEAN, 64, NULL, UINT64_C(0x800000000000),
8439 NULL, HFILL }
8441 { &hf_bthci_cmd_le_event_mask_le_cs_subevent_result,
8442 { "LE CS Subevent Result", "bthci_cmd.le_event_mask.le_cs_subevent_result",
8443 FT_BOOLEAN, 64, NULL, UINT64_C(0x1000000000000),
8444 NULL, HFILL }
8446 { &hf_bthci_cmd_le_event_mask_le_cs_subevent_result_continue,
8447 { "LE CS Subevent Result Continue", "bthci_cmd.le_event_mask.le_cs_subevent_result_continue",
8448 FT_BOOLEAN, 64, NULL, UINT64_C(0x2000000000000),
8449 NULL, HFILL }
8451 { &hf_bthci_cmd_le_event_mask_le_cs_test_end_complete,
8452 { "LE CS Test End Complete", "bthci_cmd.le_event_mask.le_cs_test_end_complete",
8453 FT_BOOLEAN, 64, NULL, UINT64_C(0x4000000000000),
8454 NULL, HFILL }
8456 { &hf_bthci_cmd_le_event_mask_le_monitored_advertisers_report,
8457 { "LE Monitored Advertisers Report", "bthci_cmd.le_event_mask.le_monitored_advertisers_report",
8458 FT_BOOLEAN, 64, NULL, UINT64_C(0x8000000000000),
8459 NULL, HFILL }
8461 { &hf_bthci_cmd_le_event_mask_le_frame_space_update_complete,
8462 { "LE Frame Space Update Complete", "bthci_cmd.le_event_mask.le_frame_space_update_complete",
8463 FT_BOOLEAN, 64, NULL, UINT64_C(0x10000000000000),
8464 NULL, HFILL }
8466 { &hf_bthci_cmd_le_event_mask_le_reserved,
8467 { "Reserved", "bthci_cmd.le_event_mask.reserved",
8468 FT_UINT64, BASE_HEX, NULL, UINT64_C(0xFFE0000000000000),
8469 NULL, HFILL }
8471 { &hf_bthci_cmd_le_advts_interval_min,
8472 { "Advertising Interval Min", "bthci_cmd.le_advts_interval_min",
8473 FT_UINT16, BASE_DEC, NULL, 0x0,
8474 NULL, HFILL }
8476 { &hf_bthci_cmd_le_advts_interval_max,
8477 { "Advertising Interval Max", "bthci_cmd.le_advts_interval_max",
8478 FT_UINT16, BASE_DEC, NULL, 0x0,
8479 NULL, HFILL }
8481 { &hf_bthci_cmd_le_advts_type,
8482 { "Advertising Type", "bthci_cmd.le_advts_type",
8483 FT_UINT8, BASE_HEX, VALS(cmd_le_advertising_types), 0x0,
8484 NULL, HFILL }
8486 { &hf_bthci_cmd_le_address_type,
8487 { "Address Type", "bthci_cmd.le_address_type",
8488 FT_UINT8, BASE_HEX, VALS(bthci_cmd_address_types_vals), 0x0,
8489 NULL, HFILL }
8491 { &hf_bthci_cmd_le_own_address_type,
8492 { "Own Address Type", "bthci_cmd.le_own_address_type",
8493 FT_UINT8, BASE_HEX, VALS(bthci_cmd_address_types_vals), 0x0,
8494 NULL, HFILL }
8496 { &hf_bthci_cmd_le_peer_address_type,
8497 { "Peer Address Type", "bthci_cmd.le_peer_address_type",
8498 FT_UINT8, BASE_HEX, VALS(bthci_cmd_address_types_vals), 0x0,
8499 NULL, HFILL }
8501 { &hf_bthci_cmd_le_peer_identity_address_type,
8502 { "Peer Identity Address Type", "bthci_cmd.le_peer_identity_address_type",
8503 FT_UINT8, BASE_HEX, VALS(cmd_identity_address_types_vals), 0x0,
8504 NULL, HFILL }
8506 { &hf_bthci_cmd_le_direct_address_type,
8507 { "Direct Address Type", "bthci_cmd.le_direct_address_type",
8508 FT_UINT8, BASE_HEX, VALS(bthci_cmd_address_types_vals), 0x0,
8509 NULL, HFILL }
8511 { &hf_bthci_cmd_le_advts_channel_map_1,
8512 { "Channel 37", "bthci_cmd.le_advts_ch_map_1",
8513 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
8514 NULL, HFILL }
8516 { &hf_bthci_cmd_le_advts_channel_map_2,
8517 { "Channel 38", "bthci_cmd.le_advts_ch_map_2",
8518 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
8519 NULL, HFILL }
8521 { &hf_bthci_cmd_le_advts_channel_map_3,
8522 { "Channel 39", "bthci_cmd.le_advts_ch_map_3",
8523 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
8524 NULL, HFILL }
8526 { &hf_bthci_cmd_le_advts_filter_policy,
8527 { "Advertising Filter Policy", "bthci_cmd.le_advts_filter_policy",
8528 FT_UINT8, BASE_HEX, VALS(cmd_le_advertising_filter_policy), 0x0,
8529 NULL, HFILL }
8531 { &hf_bthci_cmd_le_data_length,
8532 { "Data Length", "bthci_cmd.le_data_length",
8533 FT_UINT8, BASE_DEC, NULL, 0x0,
8534 NULL, HFILL }
8536 { &hf_bthci_cmd_le_advts_enable,
8537 { "Advertising Enable", "bthci_cmd.le_advts_enable",
8538 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8539 NULL, HFILL }
8541 { &hf_bthci_cmd_le_scan_enable,
8542 { "Scan Enable", "bthci_cmd.le_scan_enable",
8543 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8544 NULL, HFILL }
8546 { &hf_bthci_cmd_le_filter_duplicates,
8547 { "Filter Duplicates", "bthci_cmd.le_filter_duplicates",
8548 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8549 NULL, HFILL }
8551 { &hf_bthci_cmd_le_scan_type,
8552 { "Scan Type", "bthci_cmd.le_scan_type",
8553 FT_UINT8, BASE_HEX, VALS(cmd_le_scan_types), 0x0,
8554 NULL, HFILL }
8556 { &hf_bthci_cmd_le_scan_interval,
8557 { "Scan Interval", "bthci_cmd.le_scan_interval",
8558 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8559 NULL, HFILL }
8561 { &hf_bthci_cmd_le_scan_window,
8562 { "Scan Window", "bthci_cmd.le_scan_window",
8563 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8564 NULL, HFILL }
8566 { &hf_bthci_cmd_le_scan_filter_policy,
8567 { "Scan Filter Policy", "bthci_cmd.le_scan_filter_policy",
8568 FT_UINT8, BASE_HEX, NULL, 0x0,
8569 NULL, HFILL }
8571 { &hf_bthci_cmd_scan_filter_policy_filtered,
8572 { "Filtered (Use Filter Accept List)", "bthci_cmd.scan_filter_policy.filtered",
8573 FT_BOOLEAN, 8, NULL, 0x01,
8574 NULL, HFILL }
8576 { &hf_bthci_cmd_scan_filter_policy_extended,
8577 { "Extended (Allow Unresolvable TargetA Address)", "bthci_cmd.scan_filter_policy.extended",
8578 FT_BOOLEAN, 8, NULL, 0x02,
8579 NULL, HFILL }
8581 { &hf_bthci_cmd_scan_filter_policy_decision_mode,
8582 { "Decision Mode", "bthci_cmd.scan_filter_policy.decision_mode",
8583 FT_UINT8, BASE_HEX, VALS(cmd_decision_mode_filter_policy), 0x0C,
8584 NULL, HFILL }
8586 { &hf_bthci_cmd_scan_filter_policy_reserved,
8587 { "Reserved", "bthci_cmd.scan_filter_policy.reserved",
8588 FT_UINT8, BASE_HEX, NULL, 0xF0,
8589 NULL, HFILL }
8591 { &hf_bthci_cmd_le_initiator_filter_policy,
8592 { "Initiator Filter Policy", "bthci_cmd.le_initiator_filter_policy",
8593 FT_UINT8, BASE_HEX, VALS(cmd_init_filter_policy), 0x0,
8594 NULL, HFILL }
8596 { &hf_bthci_cmd_le_con_interval_min,
8597 { "Connection Interval Min", "bthci_cmd.le_con_interval_min",
8598 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
8599 NULL, HFILL }
8601 { &hf_bthci_cmd_le_con_interval_max,
8602 { "Connection Interval Max", "bthci_cmd.le_con_interval_max",
8603 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
8604 NULL, HFILL }
8606 { &hf_bthci_cmd_le_con_latency,
8607 { "Max Connection Latency", "bthci_cmd.le_con_latency",
8608 FT_UINT16, BASE_DEC, NULL, 0x0,
8609 NULL, HFILL }
8611 { &hf_bthci_cmd_le_supervision_timeout,
8612 { "Supervision Timeout", "bthci_cmd.le_supv_timeout",
8613 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p01_sec), 0x0,
8614 NULL, HFILL }
8616 { &hf_bthci_cmd_le_min_ce_length,
8617 { "Min CE Length", "bthci_cmd.le_min_ce_length",
8618 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8619 "Min. Connection Event Length", HFILL }
8621 { &hf_bthci_cmd_le_max_ce_length,
8622 { "Max CE Length", "bthci_cmd.le_max_ce_length",
8623 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8624 "Max. Connection Event Length", HFILL }
8626 { &hf_bthci_cmd_le_channel_map,
8627 { "Channel Map", "bthci_cmd.le_channel_map",
8628 FT_BYTES, BASE_NONE, NULL, 0x0,
8629 NULL, HFILL }
8631 { &hf_bthci_cmd_key,
8632 { "Key", "bthci_cmd.le_key",
8633 FT_BYTES, BASE_NONE, NULL, 0x0,
8634 "Encryption Key", HFILL }
8636 { &hf_bthci_cmd_plaintext_data,
8637 { "Plaintext", "bthci_cmd.le_plaintext",
8638 FT_BYTES, BASE_NONE, NULL, 0x0,
8639 NULL, HFILL }
8641 { &hf_bthci_cmd_random_number,
8642 { "Random Number", "bthci_cmd.le_random_number",
8643 FT_BYTES, BASE_NONE, NULL, 0x0,
8644 NULL, HFILL }
8646 { &hf_bthci_cmd_encrypted_diversifier,
8647 { "Encrypted Diversifier", "bthci_cmd.le_encrypted_diversifier",
8648 FT_UINT16, BASE_HEX, NULL, 0x0,
8649 NULL, HFILL }
8651 { &hf_bthci_cmd_le_long_term_key,
8652 { "Long Term Key", "bthci_cmd.le_long_term_key",
8653 FT_BYTES, BASE_NONE, NULL, 0x0,
8654 NULL, HFILL }
8656 { &hf_bthci_cmd_rx_frequency,
8657 { "Rx Frequency", "bthci_cmd.rx_frequency",
8658 FT_UINT8, BASE_DEC, NULL, 0x0,
8659 NULL, HFILL }
8661 { &hf_bthci_cmd_tx_frequency,
8662 { "Tx Frequency", "bthci_cmd.tx_frequency",
8663 FT_UINT8, BASE_DEC, NULL, 0x0,
8664 NULL, HFILL }
8666 { &hf_bthci_cmd_test_data_length,
8667 { "Test Data Length", "bthci_cmd.le_test_data_length",
8668 FT_UINT8, BASE_DEC, NULL, 0x0,
8669 NULL, HFILL }
8671 { &hf_bthci_cmd_test_packet_payload,
8672 { "Packet Payload", "bthci_cmd.le_test_payload",
8673 FT_UINT8, BASE_HEX, VALS(cmd_le_test_pkt_payload), 0x0,
8674 NULL, HFILL }
8676 { &hf_bthci_cmd_parameter,
8677 { "Parameter", "bthci_cmd.parameter",
8678 FT_NONE, BASE_NONE, NULL, 0x0,
8679 NULL, HFILL }
8681 { &hf_response_in_frame,
8682 { "Response in frame", "bthci_cmd.response_in_frame",
8683 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0,
8684 NULL, HFILL }
8686 { &hf_command_response_time_delta,
8687 { "Command-Response Delta", "bthci_cmd.command_response_delta",
8688 FT_DOUBLE, BASE_NONE|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x00,
8689 NULL, HFILL }
8691 { &hf_pending_in_frame,
8692 { "Pending in frame", "bthci_cmd.pending_in_frame",
8693 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0,
8694 NULL, HFILL }
8696 { &hf_command_pending_time_delta,
8697 { "Command-Pending Delta", "bthci_cmd.command_pending_delta",
8698 FT_DOUBLE, BASE_NONE|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x00,
8699 NULL, HFILL }
8701 { &hf_bthci_cmd_le_tx_octets,
8702 { "TxOctets", "bthci_cmd.le_tx_octets",
8703 FT_UINT16, BASE_DEC, NULL, 0x0,
8704 NULL, HFILL }
8706 { &hf_bthci_cmd_le_tx_time,
8707 { "TxTime", "bthci_cmd.le_tx_time",
8708 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
8709 NULL, HFILL }
8711 { &hf_bthci_cmd_le_suggested_max_tx_octets,
8712 { "SuggestedMaxTxOctets", "bthci_cmd.le_suggested_max_tx_octets",
8713 FT_UINT16, BASE_DEC, NULL, 0x0,
8714 NULL, HFILL }
8716 { &hf_bthci_cmd_le_suggested_max_tx_time,
8717 { "SuggestedMaxTxTime", "bthci_cmd.le_suggested_max_tx_time",
8718 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
8719 NULL, HFILL }
8721 { &hf_bthci_cmd_le_remote_p_256_public_key,
8722 { "Remote_P-256_Public_Key", "bthci_cmd.le_remote_p_256_public_key",
8723 FT_BYTES, BASE_NONE, NULL, 0x0,
8724 NULL, HFILL }
8726 { &hf_bthci_cmd_le_peer_irk,
8727 { "Peer IRK", "bthci_cmd.le_peer_irk",
8728 FT_BYTES, BASE_NONE, NULL, 0x0,
8729 NULL, HFILL }
8731 { &hf_bthci_cmd_le_local_irk,
8732 { "Local IRK", "bthci_cmd.le_local_irk",
8733 FT_BYTES, BASE_NONE, NULL, 0x0,
8734 NULL, HFILL }
8736 { &hf_bthci_cmd_le_address_resolution_enable,
8737 { "Address Resolution Enable", "bthci_cmd.le_address_resolution_enable",
8738 FT_UINT8, BASE_HEX, VALS(cmd_le_address_resolution_enable), 0x0,
8739 NULL, HFILL }
8741 { &hf_bthci_cmd_le_rpa_timeout,
8742 { "RPA Timeout", "bthci_cmd.le_rpa_timeout",
8743 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_second_seconds), 0x0,
8744 NULL, HFILL }
8746 { &hf_bthci_cmd_advertising_handle,
8747 { "Advertising Handle", "bthci_cmd.advertising_handle",
8748 FT_UINT8, BASE_HEX|BASE_SPECIAL_VALS, VALS(bluetooth_not_used_0xff_special), 0x0,
8749 NULL, HFILL }
8751 { &hf_bthci_cmd_advertising_ext_interval_min,
8752 { "Advertising Interval Min", "bthci_cmd.le_advts_interval_min",
8753 FT_UINT24, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8754 NULL, HFILL }
8756 { &hf_bthci_cmd_advertising_ext_interval_max,
8757 { "Advertising Interval Max", "bthci_cmd.le_advts_interval_max",
8758 FT_UINT24, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8759 NULL, HFILL }
8761 { &hf_bthci_cmd_advertising_properties,
8762 { "Advertising Event Properties", "bthci_cmd.advertising_properties",
8763 FT_UINT16, BASE_HEX, NULL, 0x0,
8764 NULL, HFILL }
8766 { &hf_bthci_cmd_advertising_properties_decision_pdu_incl_adi,
8767 { "Include ADI in Decision PDUs", "bthci_cmd.adv_properties.decision_pdu_incl_adi",
8768 FT_BOOLEAN, 16, NULL, 0x0200,
8769 NULL, HFILL }
8771 { &hf_bthci_cmd_advertising_properties_decision_pdu_incl_adva,
8772 { "Include AdvA in Decision PDUs", "bthci_cmd.adv_properties.decision_pdu_incl_adva",
8773 FT_BOOLEAN, 16, NULL, 0x0100,
8774 NULL, HFILL }
8776 { &hf_bthci_cmd_advertising_properties_use_decision_pdus,
8777 { "Use Decision PDUs", "bthci_cmd.adv_properties.use_decision_pdus",
8778 FT_BOOLEAN, 16, NULL, 0x0080,
8779 NULL, HFILL }
8781 { &hf_bthci_cmd_advertising_properties_incl_txpower,
8782 { "Include Tx Power", "bthci_cmd.adv_properties.txpower",
8783 FT_BOOLEAN, 16, NULL, 0x0040,
8784 NULL, HFILL }
8786 { &hf_bthci_cmd_advertising_properties_anonymous_adv,
8787 { "Anonymous Advertisement", "bthci_cmd.adv_properties.anonymous_adv",
8788 FT_BOOLEAN, 16, NULL, 0x0020,
8789 NULL, HFILL }
8791 { &hf_bthci_cmd_advertising_properties_legacy_adv,
8792 { "Use Legacy PDUs", "bthci_cmd.adv_properties.legacy_adv",
8793 FT_BOOLEAN, 16, NULL, 0x0010,
8794 NULL, HFILL }
8796 { &hf_bthci_cmd_advertising_properties_hdc_connectable_directed,
8797 { "High Duty Cycle Connectable Directed", "bthci_cmd.adv_properties.hdc_connectable_directed",
8798 FT_BOOLEAN, 16, NULL, 0x0008,
8799 NULL, HFILL }
8801 { &hf_bthci_cmd_advertising_properties_directed,
8802 { "Directed", "bthci_cmd.adv_properties.directed",
8803 FT_BOOLEAN, 16, NULL, 0x0004,
8804 NULL, HFILL }
8806 { &hf_bthci_cmd_advertising_properties_scannable,
8807 { "Scannable", "bthci_cmd.adv_properties.scannable",
8808 FT_BOOLEAN, 16, NULL, 0x0002,
8809 NULL, HFILL }
8811 { &hf_bthci_cmd_advertising_properties_connectable,
8812 { "Connectable", "bthci_cmd.adv_properties.connectable",
8813 FT_BOOLEAN, 16, NULL, 0x0001,
8814 NULL, HFILL }
8816 { &hf_bthci_cmd_advertising_properties_reserved,
8817 { "Reserved", "bthci_cmd.adv_properties.reserved",
8818 FT_UINT16, BASE_HEX, NULL, 0xFC00,
8819 NULL, HFILL }
8821 { &hf_bthci_cmd_periodic_advertising_properties,
8822 { "Periodic Advertising Properties", "bthci_cmd.periodic_adv_properties",
8823 FT_UINT16, BASE_HEX, NULL, 0x0,
8824 NULL, HFILL }
8826 { &hf_bthci_cmd_periodic_advertising_properties_reserved,
8827 { "Reserved", "bthci_cmd.periodic_adv_properties.reserved",
8828 FT_UINT16, BASE_HEX, NULL, 0xFFBF,
8829 NULL, HFILL }
8831 { &hf_bthci_cmd_primary_advertising_phy,
8832 { "Primary Advertising PHY", "bthci_cmd.primary_advertising_phy",
8833 FT_UINT8, BASE_HEX, VALS(cmd_le_phy_vals), 0x0,
8834 NULL, HFILL }
8836 { &hf_bthci_cmd_sec_adv_max_skip,
8837 { "Secondary Advertising Max Skip", "bthci_cmd.secondary_advertising_max_skip",
8838 FT_UINT8, BASE_DEC, NULL, 0x0,
8839 NULL, HFILL }
8841 { &hf_bthci_cmd_secondary_advertising_phy,
8842 { "Secondary Advertising PHY", "bthci_cmd.secondary_advertising_phy",
8843 FT_UINT8, BASE_HEX, VALS(cmd_le_phy_vals), 0x0,
8844 NULL, HFILL }
8846 { &hf_bthci_cmd_advertising_sid,
8847 { "Advertising SID", "bthci_cmd.advertising_sid",
8848 FT_UINT8, BASE_HEX, NULL, 0x0,
8849 NULL, HFILL }
8851 { &hf_bthci_cmd_scan_req_notif_en,
8852 { "Scan Request Notification Enable", "bthci_cmd.scan_request_notification_enable",
8853 FT_UINT8, BASE_HEX, NULL, 0x0,
8854 NULL, HFILL }
8856 { &hf_bthci_cmd_le_adv_data_operation,
8857 { "Data Operation", "bthci_cmd.adv_data_operation",
8858 FT_UINT8, BASE_HEX, VALS(cmd_le_adv_data_operation), 0x0,
8859 NULL, HFILL }
8861 { &hf_bthci_cmd_le_adv_data_frag_pref,
8862 { "Fragment Preference", "bthci_cmd.adv_fragment_preference",
8863 FT_UINT8, BASE_HEX, VALS(cmd_le_adv_data_frag_pref), 0x0,
8864 NULL, HFILL }
8866 { &hf_bthci_cmd_le_adv_set,
8867 { "Advertising Set", "bthci_cmd.le_adv_set",
8868 FT_NONE, BASE_NONE, NULL, 0x0,
8869 NULL, HFILL }
8871 { &hf_bthci_cmd_le_adv_en_sets,
8872 { "Number of Sets", "bthci_cmd.adv_num_sets",
8873 FT_UINT8, BASE_DEC, NULL, 0x0,
8874 NULL, HFILL }
8876 { &hf_bthci_cmd_le_adv_duration,
8877 { "Duration", "bthci_cmd.adv_duration",
8878 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p01_sec), 0x0,
8879 NULL, HFILL }
8881 { &hf_bthci_cmd_le_adv_max_extended_events,
8882 { "Max Extended Events", "bthci_cmd.max_extended_advertising_events",
8883 FT_UINT8, BASE_DEC, NULL, 0x0,
8884 NULL, HFILL }
8886 {&hf_bthci_cmd_all_phys,
8887 {"All PHYs", "bthci_cmd.all_phys",
8888 FT_UINT8, BASE_HEX, NULL, 0x0,
8889 NULL, HFILL}
8891 { &hf_bthci_cmd_all_phys_tx_pref,
8892 { "The Host has no Tx PHY preference", "bthci_cmd.all_phys.tx_preference",
8893 FT_BOOLEAN, 8, NULL, 0x1,
8894 NULL, HFILL }
8896 { &hf_bthci_cmd_all_phys_rx_pref,
8897 { "The Host has no Rx PHY preference", "bthci_cmd.all_phys.rx_preference",
8898 FT_BOOLEAN, 8, NULL, 0x2,
8899 NULL, HFILL }
8901 { &hf_bthci_cmd_all_phys_reserved,
8902 { "Reserved", "bthci_cmd.all_phys.reserved",
8903 FT_UINT8, BASE_HEX, NULL, 0xFC,
8904 NULL, HFILL }
8906 {&hf_bthci_cmd_tx_phys,
8907 {"Tx PHYs", "bthci_cmd.tx_phys",
8908 FT_UINT8, BASE_HEX, NULL, 0x0,
8909 NULL, HFILL}
8911 {&hf_bthci_cmd_rx_phys,
8912 {"Rx PHYs", "bthci_cmd.rx_phys",
8913 FT_UINT8, BASE_HEX, NULL, 0x0,
8914 NULL, HFILL}
8916 { &hf_bthci_cmd_phys_pref_le_1m,
8917 { "The Host prefers LE 1M", "bthci_cmd.phys_pref.le_1m",
8918 FT_BOOLEAN, 8, NULL, 0x1,
8919 NULL, HFILL }
8921 { &hf_bthci_cmd_phys_pref_le_2m,
8922 { "The Host prefers LE 2M", "bthci_cmd.phys_pref.le_2m",
8923 FT_BOOLEAN, 8, NULL, 0x2,
8924 NULL, HFILL }
8926 { &hf_bthci_cmd_phys_pref_le_coded,
8927 { "The Host prefers LE Coded", "bthci_cmd.phys_pref.le_coded",
8928 FT_BOOLEAN, 8, NULL, 0x4,
8929 NULL, HFILL }
8931 { &hf_bthci_cmd_phys_pref_reserved,
8932 { "Reserved", "bthci_cmd.phys_pref.reserved",
8933 FT_UINT8, BASE_HEX, NULL, 0xF8,
8934 NULL, HFILL }
8936 { &hf_bthci_cmd_phy_options,
8937 { "PHY Options", "bthci_cmd.phy_options",
8938 FT_UINT16, BASE_HEX, NULL, 0x0,
8939 NULL, HFILL }
8941 { &hf_bthci_cmd_phy_options_coding,
8942 { "Coding", "bthci_cmd.phy_options.coding",
8943 FT_UINT16, BASE_HEX, VALS(cmd_le_phy_options_vals), 0x3,
8944 NULL, HFILL }
8946 { &hf_bthci_cmd_phy_options_reserved,
8947 { "Reserved", "bthci_cmd.phy_options.reserved",
8948 FT_UINT16, BASE_HEX, NULL, 0xFFFC,
8949 NULL, HFILL }
8951 { &hf_bthci_cmd_phy,
8952 { "PHY", "bthci_cmd.phy",
8953 FT_UINT8, BASE_HEX, VALS(cmd_le_phy_vals), 0x0,
8954 NULL, HFILL }
8956 { &hf_bthci_cmd_modulation_index,
8957 { "Modulation Index", "bthci_cmd.modulation_index",
8958 FT_UINT8, BASE_HEX, VALS(cmd_le_modulation_index_vals), 0x0,
8959 NULL, HFILL }
8961 { &hf_bthci_cmd_le_scan_phys,
8962 { "Scanning PHYs", "bthci_cmd.le_scan_phys",
8963 FT_UINT8, BASE_HEX, NULL, 0x0,
8964 NULL, HFILL }
8966 { &hf_bthci_cmd_le_scan_phys_le_1m,
8967 { "LE 1M", "bthci_cmd.le_scan_phys.le_1m",
8968 FT_BOOLEAN, 8, NULL, 0x1,
8969 NULL, HFILL }
8971 { &hf_bthci_cmd_le_scan_phys_le_coded,
8972 { "LE Coded", "bthci_cmd.le_scan_phys.le_coded",
8973 FT_BOOLEAN, 8, NULL, 0x4,
8974 NULL, HFILL }
8976 { &hf_bthci_cmd_le_scan_phys_reserved,
8977 { "Reserved", "bthci_cmd.le_scan_phys.reserved",
8978 FT_UINT8, BASE_HEX, NULL, 0xFA,
8979 NULL, HFILL }
8981 { &hf_bthci_cmd_le_scan_phy_param,
8982 { "Scanning PHY", "bthci_cmd.le_scan_phy_param",
8983 FT_NONE, BASE_NONE, NULL, 0x0,
8984 NULL, HFILL }
8986 { &hf_bthci_cmd_le_scan_duration,
8987 { "Duration", "bthci_cmd.scan_duration",
8988 FT_UINT16, BASE_DEC, NULL, 0x0,
8989 NULL, HFILL }
8991 { &hf_bthci_cmd_le_scan_period,
8992 { "Period", "bthci_cmd.scan_period",
8993 FT_UINT16, BASE_DEC, NULL, 0x0,
8994 NULL, HFILL }
8996 { &hf_bthci_cmd_le_phys,
8997 { "PHYs", "bthci_cmd.le_phys",
8998 FT_UINT8, BASE_HEX, NULL, 0x0,
8999 NULL, HFILL }
9001 { &hf_bthci_cmd_le_phys_le_1m,
9002 { "LE 1M", "bthci_cmd.le_phys.le_1m",
9003 FT_BOOLEAN, 8, NULL, 0x1,
9004 NULL, HFILL }
9006 { &hf_bthci_cmd_le_phys_le_2m,
9007 { "LE 2M", "bthci_cmd.le_phys.le_2m",
9008 FT_BOOLEAN, 8, NULL, 0x2,
9009 NULL, HFILL }
9011 { &hf_bthci_cmd_le_phys_le_coded,
9012 { "LE Coded", "bthci_cmd.le_phys.le_coded",
9013 FT_BOOLEAN, 8, NULL, 0x4,
9014 NULL, HFILL }
9016 { &hf_bthci_cmd_le_phys_reserved,
9017 { "Reserved", "bthci_cmd.le_phys.reserved",
9018 FT_UINT8, BASE_HEX, NULL, 0xF8,
9019 NULL, HFILL }
9021 { &hf_bthci_cmd_le_init_phy_param,
9022 { "Initiating PHY", "bthci_cmd.le_init_phy_param",
9023 FT_NONE, BASE_NONE, NULL, 0x0,
9024 NULL, HFILL }
9026 { &hf_bthci_cmd_le_privacy_mode,
9027 { "Privacy Mode", "bthci_cmd.le_privacy_mode",
9028 FT_UINT8, BASE_HEX, VALS(cmd_privacy_mode), 0x0,
9029 NULL, HFILL }
9031 { &hf_bthci_cmd_sync_filter_policy,
9032 { "Filter Policy", "bthci_cmd.le_sync_filter_policy",
9033 FT_UINT8, BASE_HEX, VALS(cmd_sync_filter_policy), 0x0,
9034 NULL, HFILL }
9036 { &hf_bthci_cmd_skip,
9037 { "Skip", "bthci_cmd.skip",
9038 FT_UINT16, BASE_DEC, NULL, 0x0,
9039 NULL, HFILL }
9041 { &hf_bthci_cmd_sync_handle,
9042 { "Sync Handle", "bthci_cmd.sync_handle",
9043 FT_UINT16, BASE_HEX, NULL, 0x0,
9044 NULL, HFILL }
9046 { &hf_bthci_cmd_rf_tx_path_compensation_value,
9047 { "RF Tx Path Compensation Value", "bthci_cmd.rf_tx_path_compensation_value",
9048 FT_INT16, BASE_DEC, NULL, 0x0,
9049 NULL, HFILL }
9051 { &hf_bthci_cmd_rf_rx_path_compensation_value,
9052 { "RF Rx Path Compensation Value", "bthci_cmd.rf_rx_path_compensation_value",
9053 FT_INT16, BASE_DEC, NULL, 0x0,
9054 NULL, HFILL }
9056 { &hf_bthci_cmd_cte_length,
9057 { "CTE Length", "bthci_cmd.cte_length",
9058 FT_UINT8, BASE_DEC, NULL, 0x0,
9059 NULL, HFILL }
9061 { &hf_bthci_cmd_cte_type,
9062 { "CTE Type", "bthci_cmd.cte_type",
9063 FT_UINT8, BASE_HEX, VALS(cmd_cte_type_vals), 0x0,
9064 NULL, HFILL }
9066 { &hf_bthci_cmd_slot_durations,
9067 { "Slot Durations", "bthci_cmd.slot_durations",
9068 FT_UINT8, BASE_HEX, VALS(cmd_slot_durations_vals), 0x0,
9069 NULL, HFILL }
9071 { &hf_bthci_cmd_antenna_switching_pattern_length,
9072 { "Antenna Switching Pattern Length", "bthci_cmd.antenna_switching_pattern_length",
9073 FT_UINT8, BASE_DEC, NULL, 0x0,
9074 NULL, HFILL }
9076 { &hf_bthci_cmd_antenna_switching_pattern,
9077 { "Antenna Switching Pattern", "bthci_cmd.antenna_switching_pattern",
9078 FT_NONE, BASE_NONE, NULL, 0x0,
9079 NULL, HFILL }
9081 { &hf_bthci_cmd_antenna_id,
9082 { "Antenna Id", "bthci_cmd.antenna_id",
9083 FT_UINT8, BASE_DEC, NULL, 0x0,
9084 NULL, HFILL }
9086 { &hf_bthci_cmd_cte_count,
9087 { "CTE Count", "bthci_cmd.cte_count",
9088 FT_UINT8, BASE_DEC, NULL, 0x0,
9089 NULL, HFILL }
9091 { &hf_bthci_cmd_cte_enable,
9092 { "CTE Enable", "bthci_cmd.cte_enable",
9093 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9094 NULL, HFILL }
9096 { &hf_bthci_cmd_iq_sampling_enable,
9097 { "IQ Sampling Enable", "bthci_cmd.iq_sampling_enable",
9098 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9099 NULL, HFILL }
9101 { &hf_bthci_cmd_max_sampled_ctes,
9102 { "Max Sampled CTEs", "bthci_cmd.max_sampled_ctes",
9103 FT_UINT8, BASE_DEC, NULL, 0x0,
9104 NULL, HFILL }
9106 { &hf_bthci_cmd_cte_request_interval,
9107 { "CTE Request Interval", "bthci_cmd.cte_request_interval",
9108 FT_UINT16, BASE_DEC, NULL, 0x0,
9109 NULL, HFILL }
9111 { &hf_bthci_cmd_reporting_enable,
9112 { "Reporting Enable", "bthci_cmd.reporting_enable",
9113 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9114 NULL, HFILL }
9116 { &hf_bthci_cmd_sync_cte_type,
9117 { "Sync CTE Type", "bthci_cmd.sync_cte_type",
9118 FT_UINT8, BASE_HEX, NULL, 0x0,
9119 NULL, HFILL }
9121 { &hf_bthci_cmd_sync_cte_type_no_sync_aoa,
9122 { "No sync to packets with AoA CTE", "bthci_cmd.sync_cte_type.no_sync_aoa",
9123 FT_BOOLEAN, 8, NULL, 0x01,
9124 NULL, HFILL }
9126 { &hf_bthci_cmd_sync_cte_type_no_sync_aod_1us,
9127 { "No sync to packets with AoD 1 usec CTE", "bthci_cmd.sync_cte_type.no_sync_aod_1us",
9128 FT_BOOLEAN, 8, NULL, 0x02,
9129 NULL, HFILL }
9131 { &hf_bthci_cmd_sync_cte_type_no_sync_aod_2us,
9132 { "No sync to packets with AoD 2 usec CTE", "bthci_cmd.sync_cte_type.no_sync_aod_2us",
9133 FT_BOOLEAN, 8, NULL, 0x04,
9134 NULL, HFILL }
9136 { &hf_bthci_cmd_sync_cte_type_sync_only_with_cte,
9137 { "Sync only to packets with CTE", "bthci_cmd.sync_cte_type.sync_only_with_cte",
9138 FT_BOOLEAN, 8, NULL, 0x10,
9139 NULL, HFILL }
9141 { &hf_bthci_cmd_sync_cte_type_reserved,
9142 { "Reserved", "bthci_cmd.sync_cte_type.reserved",
9143 FT_UINT8, BASE_HEX, NULL, 0xE8,
9144 NULL, HFILL }
9146 { &hf_bthci_cmd_cte_types,
9147 { "Allowed CTE Types", "bthci_cmd.cte_types",
9148 FT_UINT8, BASE_HEX, NULL, 0x0,
9149 NULL, HFILL }
9151 { &hf_bthci_cmd_cte_types_aoa,
9152 { "AoA", "bthci_cmd.cte_types.aoa",
9153 FT_BOOLEAN, 8, NULL, 0x01,
9154 NULL, HFILL }
9156 { &hf_bthci_cmd_cte_types_aod_1us,
9157 { "AoD 1 usec slots", "bthci_cmd.cte_types.aod_1us",
9158 FT_BOOLEAN, 8, NULL, 0x02,
9159 NULL, HFILL }
9161 { &hf_bthci_cmd_cte_types_aod_2us,
9162 { "AoD 2 usec slots", "bthci_cmd.cte_types.aod_2us",
9163 FT_BOOLEAN, 8, NULL, 0x04,
9164 NULL, HFILL }
9166 { &hf_bthci_cmd_cte_types_reserved,
9167 { "Reserved", "bthci_cmd.cte_types.reserved",
9168 FT_UINT8, BASE_HEX, NULL, 0xF8,
9169 NULL, HFILL }
9171 { &hf_bthci_cmd_service_data_past,
9172 { "Service Data", "bthci_cmd.service_data_past",
9173 FT_UINT16, BASE_HEX, NULL, 0x0,
9174 NULL, HFILL }
9176 { &hf_bthci_cmd_sync_mode,
9177 { "Mode", "bthci_cmd.sync_mode",
9178 FT_UINT8, BASE_HEX, VALS(cmd_sync_mode_vals), 0x0,
9179 NULL, HFILL }
9181 { &hf_bthci_cmd_key_type,
9182 { "Key Type", "bthci_cmd.key_type",
9183 FT_UINT8, BASE_HEX, VALS(cmd_key_type_vals), 0x0,
9184 NULL, HFILL }
9186 { &hf_bthci_cmd_sca_action,
9187 { "Action", "bthci_cmd.sca_action",
9188 FT_UINT8, BASE_HEX, VALS(cmd_sca_action_vals), 0x0,
9189 NULL, HFILL }
9191 { &hf_bthci_cmd_cig_id,
9192 { "CIG Id", "bthci_cmd.cig_id",
9193 FT_UINT8, BASE_HEX, NULL, 0x0,
9194 NULL, HFILL }
9196 { &hf_bthci_cmd_sdu_interval_c_to_p,
9197 { "SDU Interval Central to Peripheral", "bthci_cmd.sdu_interval_c_to_p",
9198 FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
9199 NULL, HFILL }
9201 { &hf_bthci_cmd_sdu_interval_p_to_c,
9202 { "SDU Interval Peripheral to Central", "bthci_cmd.sdu_interval_p_to_c",
9203 FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
9204 NULL, HFILL }
9206 { &hf_bthci_cmd_sdu_interval,
9207 { "SDU Interval", "bthci_cmd.sdu_interval",
9208 FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
9209 NULL, HFILL }
9211 { &hf_bthci_cmd_peripherals_clock_accuracy,
9212 { "Peripherals Clock Accuracy", "bthci_cmd.peripherals_clock_accuracy",
9213 FT_UINT8, BASE_HEX, VALS(cmd_clock_accuray_vals), 0x0,
9214 NULL, HFILL }
9216 { &hf_bthci_cmd_packing,
9217 { "Packing", "bthci_cmd.packing",
9218 FT_UINT8, BASE_HEX, VALS(cmd_packing_vals), 0x0,
9219 NULL, HFILL }
9221 { &hf_bthci_cmd_framing,
9222 { "Framing", "bthci_cmd.framing",
9223 FT_UINT8, BASE_HEX, VALS(cmd_framing_vals), 0x0,
9224 NULL, HFILL }
9226 { &hf_bthci_cmd_ft_c_to_p,
9227 { "Flush Timeout Central to Peripheral", "bthci_cmd.ft_c_to_p",
9228 FT_UINT8, BASE_DEC, NULL, 0x0,
9229 NULL, HFILL }
9231 { &hf_bthci_cmd_ft_p_to_c,
9232 { "Flush Timeout Peripheral to Central", "bthci_cmd.ft_p_to_c",
9233 FT_UINT8, BASE_DEC, NULL, 0x0,
9234 NULL, HFILL }
9236 { &hf_bthci_cmd_iso_interval,
9237 { "ISO Interval", "bthci_cmd.iso_interval",
9238 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
9239 NULL, HFILL }
9241 { &hf_bthci_cmd_cis_count,
9242 { "CIS Count", "bthci_cmd.cis_count",
9243 FT_UINT8, BASE_DEC, NULL, 0x0,
9244 NULL, HFILL }
9246 { &hf_bthci_cmd_cis_params,
9247 { "CIS Parameters", "bthci_cmd.cis_params",
9248 FT_NONE, BASE_NONE, NULL, 0x0,
9249 NULL, HFILL }
9251 { &hf_bthci_cmd_cis_id,
9252 { "CIS Id", "bthci_cmd.cis_id",
9253 FT_UINT8, BASE_HEX, NULL, 0x0,
9254 NULL, HFILL }
9256 { &hf_bthci_cmd_nse,
9257 { "Number of Sub-Events", "bthci_cmd.nse",
9258 FT_UINT8, BASE_DEC, NULL, 0x0,
9259 NULL, HFILL }
9261 { &hf_bthci_cmd_max_sdu_c_to_p,
9262 { "Max SDU Central to Peripheral", "bthci_cmd.max_sdu_c_to_p",
9263 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9264 NULL, HFILL }
9266 { &hf_bthci_cmd_max_sdu_p_to_c,
9267 { "Max SDU Peripheral to Central", "bthci_cmd.max_sdu_p_to_c",
9268 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9269 NULL, HFILL }
9271 { &hf_bthci_cmd_max_sdu,
9272 { "Max SDU", "bthci_cmd.max_sdu",
9273 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9274 NULL, HFILL }
9276 { &hf_bthci_cmd_max_pdu_c_to_p,
9277 { "Max PDU Central to Peripheral", "bthci_cmd.max_pdu_c_to_p",
9278 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9279 NULL, HFILL }
9281 { &hf_bthci_cmd_max_pdu_p_to_c,
9282 { "Max PDU Peripheral to Central", "bthci_cmd.max_pdu_p_to_c",
9283 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9284 NULL, HFILL }
9286 { &hf_bthci_cmd_max_pdu,
9287 { "Max PDU", "bthci_cmd.max_pdu",
9288 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9289 NULL, HFILL }
9291 { &hf_bthci_cmd_phy_c_to_p,
9292 { "PHY Central to Peripheral", "bthci_cmd.phy_c_to_p",
9293 FT_UINT8, BASE_HEX, NULL, 0x0,
9294 NULL, HFILL }
9296 { &hf_bthci_cmd_phy_p_to_c,
9297 { "PHY Peripheral to Central", "bthci_cmd.phy_p_to_c",
9298 FT_UINT8, BASE_HEX, NULL, 0x0,
9299 NULL, HFILL }
9301 { &hf_bthci_cmd_bn_c_to_p,
9302 { "Burst Number Central to Peripheral", "bthci_cmd.bn_c_to_p",
9303 FT_UINT8, BASE_DEC, NULL, 0x0,
9304 NULL, HFILL }
9306 { &hf_bthci_cmd_bn_p_to_c,
9307 { "Burst Number Peripheral to Central", "bthci_cmd.bn_p_to_c",
9308 FT_UINT8, BASE_DEC, NULL, 0x0,
9309 NULL, HFILL }
9311 { &hf_bthci_cmd_bn,
9312 { "Burst Number", "bthci_cmd.bn",
9313 FT_UINT8, BASE_DEC, NULL, 0x0,
9314 NULL, HFILL }
9316 { &hf_bthci_cmd_max_transport_latency_c_to_p,
9317 { "Max Transport Latency Central to Peripheral", "bthci_cmd.max_transport_latency_c_to_p",
9318 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9319 NULL, HFILL }
9321 { &hf_bthci_cmd_max_transport_latency_p_to_c,
9322 { "Max Transport Latency Peripheral to Central", "bthci_cmd.max_transport_latency_p_to_c",
9323 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9324 NULL, HFILL }
9326 { &hf_bthci_cmd_max_transport_latency,
9327 { "Max Transport Latency", "bthci_cmd.max_transport_latency",
9328 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9329 NULL, HFILL }
9331 { &hf_bthci_cmd_rtn_c_to_p,
9332 { "Max Retransmissions Central to Peripheral", "bthci_cmd.rtn_c_to_p",
9333 FT_UINT8, BASE_DEC, NULL, 0x0,
9334 NULL, HFILL }
9336 { &hf_bthci_cmd_rtn_p_to_c,
9337 { "Max Retransmissions Peripheral to Central", "bthci_cmd.rtn_p_to_c",
9338 FT_UINT8, BASE_DEC, NULL, 0x0,
9339 NULL, HFILL }
9341 { &hf_bthci_cmd_rtn,
9342 { "Max Retransmissions", "bthci_cmd.rtn",
9343 FT_UINT8, BASE_DEC, NULL, 0x0,
9344 NULL, HFILL }
9346 { &hf_bthci_cmd_cis_handle,
9347 { "CIS Handle", "bthci_cmd.cis_handle",
9348 FT_UINT16, BASE_HEX, NULL, 0x0,
9349 NULL, HFILL }
9351 { &hf_bthci_cmd_big_handle,
9352 { "BIG Handle", "bthci_cmd.big_handle",
9353 FT_UINT16, BASE_HEX, NULL, 0x0,
9354 NULL, HFILL }
9356 { &hf_bthci_cmd_cis_bis_handle,
9357 { "CIS/BIS Handle", "bthci_cmd.cis_bis_handle",
9358 FT_UINT16, BASE_HEX, NULL, 0x0,
9359 NULL, HFILL }
9361 { &hf_bthci_cmd_num_bis,
9362 { "Number of BISes", "bthci_cmd.num_bis",
9363 FT_UINT8, BASE_DEC, NULL, 0x0,
9364 NULL, HFILL }
9366 { &hf_bthci_cmd_irc,
9367 { "Scheduled Payload Retransmissions", "bthci_cmd.irc",
9368 FT_UINT8, BASE_DEC, NULL, 0x0,
9369 NULL, HFILL }
9371 { &hf_bthci_cmd_pto,
9372 { "Pre-Transmission Offset", "bthci_cmd.pto",
9373 FT_UINT8, BASE_DEC, NULL, 0x0,
9374 NULL, HFILL }
9376 { &hf_bthci_cmd_encryption,
9377 { "Encryption", "bthci_cmd.encryption",
9378 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9379 NULL, HFILL }
9381 { &hf_bthci_cmd_broadcast_code,
9382 { "Broadcast Code", "bthci_cmd.broadcast_code",
9383 FT_NONE, BASE_NONE, NULL, 0x0,
9384 NULL, HFILL }
9386 { &hf_bthci_cmd_mse,
9387 { "Max Sub-Events", "bthci_cmd.mse",
9388 FT_UINT8, BASE_DEC, NULL, 0x0,
9389 NULL, HFILL }
9391 { &hf_bthci_cmd_bis_index,
9392 { "BIS Index", "bthci_cmd.bis_index",
9393 FT_UINT8, BASE_DEC, NULL, 0x0,
9394 NULL, HFILL }
9396 { &hf_bthci_cmd_sync_timeout,
9397 { "Sync Timeout", "bthci_cmd.sync_timeout",
9398 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p01_sec), 0x0,
9399 NULL, HFILL }
9401 { &hf_bthci_cmd_data_path_direction,
9402 { "Data Path Direction", "bthci_cmd.data_path_direction",
9403 FT_UINT8, BASE_HEX, VALS(cmd_data_path_direction_vals), 0x0,
9404 NULL, HFILL }
9406 { &hf_bthci_cmd_data_path_id,
9407 { "Data Path Id", "bthci_cmd.data_path_id",
9408 FT_UINT8, BASE_HEX, NULL, 0x0,
9409 NULL, HFILL }
9411 { &hf_bthci_cmd_coding_format,
9412 { "Coding Format", "bthci_cmd.coding_format",
9413 FT_NONE, BASE_NONE, NULL, 0x0,
9414 NULL, HFILL }
9416 { &hf_bthci_cmd_controller_delay,
9417 { "Controller Delay", "bthci_cmd.controller_delay",
9418 FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
9419 NULL, HFILL }
9421 { &hf_bthci_cmd_codec_config_length,
9422 { "Codec Configuration Length", "bthci_cmd.codec_config_length",
9423 FT_UINT8, BASE_DEC, NULL, 0x0,
9424 NULL, HFILL }
9426 { &hf_bthci_cmd_codec_config,
9427 { "Codec Configuration", "bthci_cmd.codec_config",
9428 FT_NONE, BASE_NONE, NULL, 0x0,
9429 NULL, HFILL }
9431 { &hf_bthci_cmd_payload_type,
9432 { "Payload Type", "bthci_cmd.payload_type",
9433 FT_UINT8, BASE_HEX, VALS(cmd_payload_type_vals), 0x0,
9434 NULL, HFILL }
9436 { &hf_bthci_cmd_feature_bit_number,
9437 { "Feature Bit Number", "bthci_cmd.feature_bit_number",
9438 FT_UINT8, BASE_DEC, VALS(cmd_host_enabled_feature_bit_vals), 0x0,
9439 NULL, HFILL }
9441 { &hf_bthci_cmd_feature_bit_number2,
9442 { "Feature Bit Number", "bthci_cmd.feature_bit_number",
9443 FT_UINT16, BASE_DEC, VALS(cmd_host_enabled_feature_bit_vals), 0x0,
9444 NULL, HFILL }
9446 { &hf_bthci_cmd_feature_bit_value,
9447 { "Feature Bit Value", "bthci_cmd.feature_bit_value",
9448 FT_UINT8, BASE_HEX, VALS(cmd_en_disabled), 0x0,
9449 NULL, HFILL }
9451 { &hf_bthci_cmd_phy_and_coding,
9452 { "PHY", "bthci_cmd.phy_and_coding",
9453 FT_UINT8, BASE_HEX, VALS(cmd_phy_and_coding_vals), 0x0,
9454 NULL, HFILL }
9456 { &hf_bthci_cmd_high_threshold,
9457 { "High Threshold", "bthci_cmd.high_threshold",
9458 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_decibels), 0x0,
9459 NULL, HFILL }
9461 { &hf_bthci_cmd_high_hysteresis,
9462 { "High Hysteresis", "bthci_cmd.high_hysteresis",
9463 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_decibels), 0x0,
9464 NULL, HFILL }
9466 { &hf_bthci_cmd_low_threshold,
9467 { "Low Threshold", "bthci_cmd.low_threshold",
9468 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_decibels), 0x0,
9469 NULL, HFILL }
9471 { &hf_bthci_cmd_low_hysteresis,
9472 { "Low Hysteresis", "bthci_cmd.low_hysteresis",
9473 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_decibels), 0x0,
9474 NULL, HFILL }
9476 { &hf_bthci_cmd_min_time_spent,
9477 { "Minimum Observation Time", "bthci_cmd.min_time_spent",
9478 FT_UINT16, BASE_DEC, NULL, 0x0,
9479 NULL, HFILL }
9481 { &hf_bthci_cmd_local_reporting_enable,
9482 { "Local Reporting Enable", "bthci_cmd.local_reporting_enable",
9483 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9484 NULL, HFILL }
9486 { &hf_bthci_cmd_remote_reporting_enable,
9487 { "Remote Reporting Enable", "bthci_cmd.remote_reporting_enable",
9488 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9489 NULL, HFILL }
9491 { &hf_bthci_cmd_addr_change_reasons,
9492 { "Address Change Reasons", "bthci_cmd.addr_change_reasons",
9493 FT_UINT8, BASE_HEX, NULL, 0x0,
9494 NULL, HFILL }
9496 { &hf_bthci_cmd_addr_change_reasons_adv_data,
9497 { "Advertising Data Changed", "bthci_cmd.addr_change_reasons.adv_data",
9498 FT_BOOLEAN, 8, NULL, 0x01,
9499 NULL, HFILL }
9501 { &hf_bthci_cmd_addr_change_reasons_scan_rsp_data,
9502 { "Scan Response Data Changed", "bthci_cmd.addr_change_reasons.scan_rsp_data",
9503 FT_BOOLEAN, 8, NULL, 0x02,
9504 NULL, HFILL }
9506 { &hf_bthci_cmd_addr_change_reasons_reserved,
9507 { "Reserved", "bthci_cmd.addr_change_reasons.reserved",
9508 FT_UINT8, BASE_HEX, NULL, 0xFC,
9509 NULL, HFILL }
9511 { &hf_bthci_cmd_subrate_factor_min,
9512 { "Minimum Subrate Factor", "bthci_cmd.subrate_min",
9513 FT_UINT16, BASE_DEC, NULL, 0x0,
9514 NULL, HFILL }
9516 { &hf_bthci_cmd_subrate_factor_max,
9517 { "Maximum Subrate Factor", "bthci_cmd.subrate_max",
9518 FT_UINT16, BASE_DEC, NULL, 0x0,
9519 NULL, HFILL }
9521 { &hf_bthci_cmd_continuation_number,
9522 { "Continuation Number", "bthci_cmd.continuation_number",
9523 FT_UINT16, BASE_DEC, NULL, 0x0,
9524 NULL, HFILL }
9526 { &hf_bthci_cmd_primary_adv_phy_options,
9527 { "Primary Adv PHY Options", "bthci_cmd.primary_adv_phy_options",
9528 FT_UINT8, BASE_HEX, VALS(cmd_le_phy_options_vals), 0x0,
9529 NULL, HFILL }
9531 { &hf_bthci_cmd_secondary_adv_phy_options,
9532 { "Primary Adv PHY Options", "bthci_cmd.secondary_adv_phy_options",
9533 FT_UINT8, BASE_HEX, VALS(cmd_le_phy_options_vals), 0x0,
9534 NULL, HFILL }
9536 { &hf_bthci_cmd_num_subevents,
9537 { "Number of Sub-events", "bthci_cmd.num_subevents",
9538 FT_UINT8, BASE_DEC, NULL, 0x0,
9539 NULL, HFILL }
9541 { &hf_bthci_cmd_subevent_interval,
9542 { "Sub-event Interval", "bthci_cmd.subevent_interval",
9543 FT_UINT8, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
9544 NULL, HFILL }
9546 { &hf_bthci_cmd_response_slot_delay,
9547 { "Response Slot Delay", "bthci_cmd.resp_slot_delay",
9548 FT_UINT8, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
9549 NULL, HFILL }
9551 { &hf_bthci_cmd_response_slot_spacing,
9552 { "Response Slot Spacing", "bthci_cmd.resp_slot_spacing",
9553 FT_UINT8, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
9554 NULL, HFILL }
9556 { &hf_bthci_cmd_num_response_slots,
9557 { "Response Slots", "bthci_cmd.num_resp_slots",
9558 FT_UINT8, BASE_DEC, NULL, 0x0,
9559 NULL, HFILL }
9561 { &hf_bthci_cmd_subevent,
9562 { "Sub-event", "bthci_cmd.subevent",
9563 FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_not_used_0xff_special), 0x0,
9564 NULL, HFILL }
9566 { &hf_bthci_cmd_subevents,
9567 { "Sub-events", "bthci_cmd.subevents",
9568 FT_NONE, BASE_NONE, NULL, 0x0,
9569 NULL, HFILL }
9571 { &hf_bthci_cmd_response_slot_start,
9572 { "Response Slot Start", "bthci_cmd.resp_slot_start",
9573 FT_UINT8, BASE_DEC, NULL, 0x0,
9574 NULL, HFILL }
9576 { &hf_bthci_cmd_response_slot_count,
9577 { "Response Slot Count", "bthci_cmd.resp_slot_count",
9578 FT_UINT8, BASE_DEC, NULL, 0x0,
9579 NULL, HFILL }
9581 { &hf_bthci_cmd_subevent_data_length,
9582 { "Sub-event Data Length", "bthci_cmd.subevent_data_length",
9583 FT_UINT8, BASE_DEC, NULL, 0x0,
9584 NULL, HFILL }
9586 { &hf_bthci_cmd_request_event,
9587 { "Request Event", "bthci_cmd.request_event",
9588 FT_UINT16, BASE_DEC, NULL, 0x0,
9589 NULL, HFILL }
9591 { &hf_bthci_cmd_request_subevent,
9592 { "Request Sub-event", "bthci_cmd.request_subevent",
9593 FT_UINT8, BASE_DEC, NULL, 0x0,
9594 NULL, HFILL }
9596 { &hf_bthci_cmd_response_subevent,
9597 { "Response Sub-event", "bthci_cmd.response_subevent",
9598 FT_UINT8, BASE_DEC, NULL, 0x0,
9599 NULL, HFILL }
9601 { &hf_bthci_cmd_response_slot,
9602 { "Response Slot", "bthci_cmd.response_slot",
9603 FT_UINT8, BASE_DEC, NULL, 0x0,
9604 NULL, HFILL }
9606 { &hf_bthci_cmd_response_data_length,
9607 { "Response Data Length", "bthci_cmd.response_data_length",
9608 FT_UINT8, BASE_DEC, NULL, 0x0,
9609 NULL, HFILL }
9611 { &hf_bthci_cmd_pages_requested,
9612 { "Pages Requested", "bthci_cmd.pages_requested",
9613 FT_UINT8, BASE_DEC, NULL, 0x0,
9614 NULL, HFILL }
9616 { &hf_bthci_cmd_config_id,
9617 { "Config Id", "bthci_cmd.config_id",
9618 FT_UINT8, BASE_DEC, NULL, 0x0,
9619 NULL, HFILL }
9621 { &hf_bthci_cmd_cs_roles,
9622 { "Roles", "bthci_cmd.cs_roles",
9623 FT_UINT8, BASE_HEX, NULL, 0x0,
9624 NULL, HFILL }
9626 { &hf_bthci_cmd_cs_roles_initiator,
9627 { "Initiator", "bthci_cmd.cs_roles.initiator",
9628 FT_BOOLEAN, 8, NULL, 0x01,
9629 NULL, HFILL }
9631 { &hf_bthci_cmd_cs_roles_reflector,
9632 { "Reflector", "bthci_cmd.cs_roles.reflector",
9633 FT_BOOLEAN, 8, NULL, 0x02,
9634 NULL, HFILL }
9636 { &hf_bthci_cmd_cs_roles_reserved,
9637 { "Reserved", "bthci_cmd.cs_roles.reserved",
9638 FT_UINT8, BASE_HEX, NULL, 0xfc,
9639 NULL, HFILL }
9641 { &hf_bthci_cmd_cs_sync_antenna_selection,
9642 { "CS Sync Antenna Selection", "bthci_cmd.cs_sync_antenna_selection",
9643 FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(cs_sync_antenna_special), 0x0,
9644 NULL, HFILL }
9646 { &hf_bthci_cmd_num_config,
9647 { "Number of Configurations", "bthci_cmd.num_config",
9648 FT_UINT8, BASE_DEC, NULL, 0x0,
9649 NULL, HFILL }
9651 { &hf_bthci_cmd_max_consecutive_procedures,
9652 { "Max Consecutive Procedures", "bthci_cmd.max_consecutive_procedures",
9653 FT_UINT16, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_procedure_count_special), 0x0,
9654 NULL, HFILL }
9656 { &hf_bthci_cmd_num_antennas_supported,
9657 { "Number of Antennas Supported", "bthci_cmd.num_antennas_supported",
9658 FT_UINT8, BASE_DEC, NULL, 0x0,
9659 NULL, HFILL }
9661 { &hf_bthci_cmd_max_antenna_paths_supported,
9662 { "Max Antenna Paths Supported", "bthci_cmd.max_antenna_paths_supported",
9663 FT_UINT8, BASE_DEC, NULL, 0x0,
9664 NULL, HFILL }
9666 { &hf_bthci_cmd_cs_modes_supported,
9667 { "Modes Supported", "bthci_cmd.cs_modes_supported",
9668 FT_UINT8, BASE_HEX, NULL, 0x0,
9669 NULL, HFILL }
9671 { &hf_bthci_cmd_cs_modes_supported_3,
9672 { "Mode-3", "bthci_cmd.cs_modes_supported.3",
9673 FT_BOOLEAN, 8, NULL, 0x01,
9674 NULL, HFILL }
9676 { &hf_bthci_cmd_cs_modes_supported_reserved,
9677 { "Reserved", "bthci_cmd.cs_modes_supported.reserved",
9678 FT_BOOLEAN, 8, NULL, 0xfe,
9679 NULL, HFILL }
9681 { &hf_bthci_cmd_rtt_capability,
9682 { "RTT Capability", "bthci_cmd.rtt_capability",
9683 FT_UINT8, BASE_HEX, NULL, 0x0,
9684 NULL, HFILL }
9686 { &hf_bthci_cmd_rtt_capability_coarse_precision,
9687 { "10ns Coarse Precision", "bthci_cmd.rtt_capability.coarse_precision",
9688 FT_BOOLEAN, 8, NULL, 0x01,
9689 NULL, HFILL }
9691 { &hf_bthci_cmd_rtt_capability_sounding_precision,
9692 { "10ns Sounding Precision", "bthci_cmd.rtt_capability.sounding_precision",
9693 FT_BOOLEAN, 8, NULL, 0x02,
9694 NULL, HFILL }
9696 { &hf_bthci_cmd_rtt_capability_random_precision,
9697 { "10ns Random Precision", "bthci_cmd.rtt_capability.random_precision",
9698 FT_BOOLEAN, 8, NULL, 0x04,
9699 NULL, HFILL }
9701 { &hf_bthci_cmd_rtt_capability_reserved,
9702 { "Reserved", "bthci_cmd.rtt_capability.reserved",
9703 FT_UINT8, BASE_HEX, NULL, 0xf8,
9704 NULL, HFILL }
9706 { &hf_bthci_cmd_rtt_aa_only_n,
9707 { "RTT Coarse, CS Sync exchanges needed", "bthci_cmd.rtt_aa_only_n",
9708 FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_not_supported_0x00_special), 0x0,
9709 NULL, HFILL }
9711 { &hf_bthci_cmd_rtt_sounding_n,
9712 { "RTT Sounding, CS Sync exchanges needed", "bthci_cmd.rtt_sounding_n",
9713 FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_not_supported_0x00_special), 0x0,
9714 NULL, HFILL }
9716 { &hf_bthci_cmd_rtt_random_n,
9717 { "RTT Random Payload, CS Sync exchanges needed", "bthci_cmd.rtt_random_n",
9718 FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_not_supported_0x00_special), 0x0,
9719 NULL, HFILL }
9721 { &hf_bthci_cmd_nadm_sounding_capability,
9722 { "Optional NADM Sounding Capability", "bthci_cmd.optional_nadm_sounding_capability",
9723 FT_UINT16, BASE_HEX, NULL, 0x0,
9724 NULL, HFILL }
9726 { &hf_bthci_cmd_nadm_sounding_capability_supported,
9727 { "Phase-based NADM Metric", "bthci_cmd.optional_nadm_sounding_capability.supported",
9728 FT_BOOLEAN, 16, NULL, 0x01,
9729 NULL, HFILL }
9731 { &hf_bthci_cmd_nadm_sounding_capability_reserved,
9732 { "Reserved", "bthci_cmd.optional_nadm_sounding_capability.reserved",
9733 FT_UINT16, BASE_HEX, NULL, 0xfe,
9734 NULL, HFILL }
9736 { &hf_bthci_cmd_nadm_random_capability,
9737 { "Optional NADM Random Capability", "bthci_cmd.optional_nadm_random_capability",
9738 FT_UINT16, BASE_HEX, NULL, 0x0,
9739 NULL, HFILL }
9741 { &hf_bthci_cmd_nadm_random_capability_supported,
9742 { "Phase-based NADM Metric", "bthci_cmd.optional_nadm_random_capability.supported",
9743 FT_BOOLEAN, 16, NULL, 0x01,
9744 NULL, HFILL }
9746 { &hf_bthci_cmd_nadm_random_capability_reserved,
9747 { "Reserved", "bthci_cmd.optional_nadm_random_capability.reserved",
9748 FT_UINT16, BASE_HEX, NULL, 0xfe,
9749 NULL, HFILL }
9751 { &hf_bthci_cmd_cs_sync_phys_supported,
9752 { "Optional CS_SYNC PHYs", "bthci_cmd.cs_sync_phys_supported",
9753 FT_UINT8, BASE_HEX, NULL, 0x0,
9754 NULL, HFILL }
9756 { &hf_bthci_cmd_cs_sync_phys_supported_2m,
9757 { "LE 2M", "bthci_cmd.cs_sync_phys_supported.2m",
9758 FT_BOOLEAN, 8, NULL, 0x02,
9759 NULL, HFILL }
9761 { &hf_bthci_cmd_cs_sync_phys_supported_2m2bt,
9762 { "LE 2M 2BT", "bthci_cmd.cs_sync_phys_supported.2m2bt",
9763 FT_BOOLEAN, 8, NULL, 0x04,
9764 NULL, HFILL }
9766 { &hf_bthci_cmd_cs_sync_phys_supported_reserved,
9767 { "Reserved", "bthci_cmd.cs_sync_phys_supported.reserved",
9768 FT_UINT8, BASE_HEX, NULL, 0xf9,
9769 NULL, HFILL }
9771 { &hf_bthci_cmd_cs_subfeatures_supported,
9772 { "Subfeatures Suported", "bthci_cmd.optional_cs_subfeatures",
9773 FT_UINT16, BASE_HEX, NULL, 0x0,
9774 NULL, HFILL }
9776 { &hf_bthci_cmd_cs_subfeatures_companion_signal,
9777 { "Companion Signal", "bthci_cmd.optional_cs_subfeatures.companion_signal",
9778 FT_BOOLEAN, 16, NULL, 0x01,
9779 NULL, HFILL }
9781 { &hf_bthci_cmd_cs_subfeatures_freq_actuation_error,
9782 { "Zero Freq. Actuation Error Relative to Mode-0 Tx in Reflector", "bthci_cmd.optional_cs_subfeatures.freq_actuation_error",
9783 FT_BOOLEAN, 16, NULL, 0x02,
9784 NULL, HFILL }
9786 { &hf_bthci_cmd_cs_subfeatures_channel_selection_3c,
9787 { "Channel Selection Algorithm #3c", "bthci_cmd.optional_cs_subfeatures.channel_selection_3c",
9788 FT_BOOLEAN, 16, NULL, 0x04,
9789 NULL, HFILL }
9791 { &hf_bthci_cmd_cs_subfeatures_pbr_from_rtt,
9792 { "Phase-based Ranging from RTT sounding sequence", "bthci_cmd.optional_cs_subfeatures.pbr_from_rtt",
9793 FT_BOOLEAN, 16, NULL, 0x08,
9794 NULL, HFILL }
9796 { &hf_bthci_cmd_cs_subfeatures_reserved,
9797 { "Reserved", "bthci_cmd.optional_cs_subfeatures.reserved",
9798 FT_UINT16, BASE_HEX, NULL, 0xfff0,
9799 NULL, HFILL }
9801 { &hf_bthci_cmd_tip1_times_supported,
9802 { "T_IP1 Times Supported", "bthci_cmd.tip1_times_supported",
9803 FT_UINT16, BASE_HEX, NULL, 0x0,
9804 NULL, HFILL }
9806 { &hf_bthci_cmd_tip2_times_supported,
9807 { "T_IP2 Times Supported", "bthci_cmd.tip2_times_supported",
9808 FT_UINT16, BASE_HEX, NULL, 0x0,
9809 NULL, HFILL }
9811 { &hf_bthci_cmd_tip_times_supported_10us,
9812 { "10 microseconds", "bthci_cmd.tip_times_supported_10us",
9813 FT_BOOLEAN, 16, NULL, 0x0001,
9814 NULL, HFILL }
9816 { &hf_bthci_cmd_tip_times_supported_20us,
9817 { "20 microseconds", "bthci_cmd.tip_times_supported_20us",
9818 FT_BOOLEAN, 16, NULL, 0x0002,
9819 NULL, HFILL }
9821 { &hf_bthci_cmd_tip_times_supported_30us,
9822 { "30 microseconds", "bthci_cmd.tip_times_supported_30us",
9823 FT_BOOLEAN, 16, NULL, 0x0004,
9824 NULL, HFILL }
9826 { &hf_bthci_cmd_tip_times_supported_40us,
9827 { "40 microseconds", "bthci_cmd.tip_times_supported_40us",
9828 FT_BOOLEAN, 16, NULL, 0x0008,
9829 NULL, HFILL }
9831 { &hf_bthci_cmd_tip_times_supported_50us,
9832 { "50 microseconds", "bthci_cmd.tip_times_supported_50us",
9833 FT_BOOLEAN, 16, NULL, 0x0010,
9834 NULL, HFILL }
9836 { &hf_bthci_cmd_tip_times_supported_60us,
9837 { "60 microseconds", "bthci_cmd.tip_times_supported_60us",
9838 FT_BOOLEAN, 16, NULL, 0x0020,
9839 NULL, HFILL }
9841 { &hf_bthci_cmd_tip_times_supported_80us,
9842 { "80 microseconds", "bthci_cmd.tip_times_supported_80us",
9843 FT_BOOLEAN, 16, NULL, 0x0040,
9844 NULL, HFILL }
9846 { &hf_bthci_cmd_tip_times_supported_reserved,
9847 { "Reserved", "bthci_cmd.tip_times_supported_reserved",
9848 FT_UINT16, BASE_HEX, NULL, 0xff80,
9849 NULL, HFILL }
9851 { &hf_bthci_cmd_tfcs_times_supported,
9852 { "T_FCS Times Supported", "bthci_cmd.tfcs_times_supported",
9853 FT_UINT16, BASE_HEX, NULL, 0x0,
9854 NULL, HFILL }
9856 { &hf_bthci_cmd_tfcs_times_supported_15us,
9857 { "15 microseconds", "bthci_cmd.tfcs_times_supported_15us",
9858 FT_BOOLEAN, 16, NULL, 0x0001,
9859 NULL, HFILL }
9861 { &hf_bthci_cmd_tfcs_times_supported_20us,
9862 { "20 microseconds", "bthci_cmd.tfcs_times_supported_20us",
9863 FT_BOOLEAN, 16, NULL, 0x0002,
9864 NULL, HFILL }
9866 { &hf_bthci_cmd_tfcs_times_supported_30us,
9867 { "30 microseconds", "bthci_cmd.tfcs_times_supported_30us",
9868 FT_BOOLEAN, 16, NULL, 0x0004,
9869 NULL, HFILL }
9871 { &hf_bthci_cmd_tfcs_times_supported_40us,
9872 { "40 microseconds", "bthci_cmd.tfcs_times_supported_40us",
9873 FT_BOOLEAN, 16, NULL, 0x0008,
9874 NULL, HFILL }
9876 { &hf_bthci_cmd_tfcs_times_supported_50us,
9877 { "50 microseconds", "bthci_cmd.tfcs_times_supported_50us",
9878 FT_BOOLEAN, 16, NULL, 0x0010,
9879 NULL, HFILL }
9881 { &hf_bthci_cmd_tfcs_times_supported_60us,
9882 { "60 microseconds", "bthci_cmd.tfcs_times_supported_60us",
9883 FT_BOOLEAN, 16, NULL, 0x0020,
9884 NULL, HFILL }
9886 { &hf_bthci_cmd_tfcs_times_supported_80us,
9887 { "80 microseconds", "bthci_cmd.tfcs_times_supported_80us",
9888 FT_BOOLEAN, 16, NULL, 0x0040,
9889 NULL, HFILL }
9891 { &hf_bthci_cmd_tfcs_times_supported_100us,
9892 { "100 microseconds", "bthci_cmd.tfcs_times_supported_100us",
9893 FT_BOOLEAN, 16, NULL, 0x0080,
9894 NULL, HFILL }
9896 { &hf_bthci_cmd_tfcs_times_supported_120us,
9897 { "120 microseconds", "bthci_cmd.tfcs_times_supported_120us",
9898 FT_BOOLEAN, 16, NULL, 0x0100,
9899 NULL, HFILL }
9901 { &hf_bthci_cmd_tfcs_times_supported_reserved,
9902 { "Reserved", "bthci_cmd.tfcs_times_supported_reserved",
9903 FT_UINT16, BASE_HEX, NULL, 0xfe00,
9904 NULL, HFILL }
9906 { &hf_bthci_cmd_tpm_times_supported,
9907 { "T_PM Times Supported", "bthci_cmd.tpm_times_supported",
9908 FT_UINT16, BASE_HEX, NULL, 0x0,
9909 NULL, HFILL }
9911 { &hf_bthci_cmd_tpm_times_supported_10us,
9912 { "10 microseconds", "bthci_cmd.tpm_times_supported_10us",
9913 FT_BOOLEAN, 16, NULL, 0x0001,
9914 NULL, HFILL }
9916 { &hf_bthci_cmd_tpm_times_supported_20us,
9917 { "20 microseconds", "bthci_cmd.tpm_times_supported_20us",
9918 FT_BOOLEAN, 16, NULL, 0x0002,
9919 NULL, HFILL }
9921 { &hf_bthci_cmd_tpm_times_supported_reserved,
9922 { "Reserved", "bthci_cmd.tpm_times_supported_reserved",
9923 FT_UINT16, BASE_HEX, NULL, 0xfffc,
9924 NULL, HFILL }
9926 { &hf_bthci_cmd_tsw_time_supported,
9927 { "T_SW Time Supported", "bthci_cmd.tsw_time_supported",
9928 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
9929 NULL, HFILL }
9931 { &hf_bthci_cmd_tx_snr_capability,
9932 { "Tx SNR Capability", "bthci_cmd.tx_snr_capability",
9933 FT_UINT8, BASE_HEX, NULL, 0x0,
9934 NULL, HFILL }
9936 { &hf_bthci_cmd_tx_snr_capability_18dB,
9937 { "18 dB", "bthci_cmd.tx_snr_capability_18dB",
9938 FT_BOOLEAN, 8, NULL, 0x01,
9939 NULL, HFILL }
9941 { &hf_bthci_cmd_tx_snr_capability_21dB,
9942 { "21 dB", "bthci_cmd.tx_snr_capability_21dB",
9943 FT_BOOLEAN, 8, NULL, 0x02,
9944 NULL, HFILL }
9946 { &hf_bthci_cmd_tx_snr_capability_24dB,
9947 { "24 dB", "bthci_cmd.tx_snr_capability_24dB",
9948 FT_BOOLEAN, 8, NULL, 0x04,
9949 NULL, HFILL }
9951 { &hf_bthci_cmd_tx_snr_capability_27dB,
9952 { "27 dB", "bthci_cmd.tx_snr_capability_27dB",
9953 FT_BOOLEAN, 8, NULL, 0x08,
9954 NULL, HFILL }
9956 { &hf_bthci_cmd_tx_snr_capability_30dB,
9957 { "30 dB", "bthci_cmd.tx_snr_capability_30dB",
9958 FT_BOOLEAN, 8, NULL, 0x10,
9959 NULL, HFILL }
9961 { &hf_bthci_cmd_tx_snr_capability_reserved,
9962 { "Reserved", "bthci_cmd.tx_snr_capability_reserved",
9963 FT_UINT8, BASE_HEX, NULL, 0xe0,
9964 NULL, HFILL }
9966 { &hf_bthci_cmd_fae_table,
9967 { "FAE Table", "bthci_cmd.fae_table",
9968 FT_BYTES, BASE_NONE, NULL, 0x0,
9969 NULL, HFILL }
9971 { &hf_bthci_cmd_create_context,
9972 { "Create Context", "bthci_cmd.create_context",
9973 FT_UINT8, BASE_HEX, VALS(cmd_cs_create_context_vals), 0x0,
9974 NULL, HFILL }
9976 { &hf_bthci_cmd_main_mode_type,
9977 { "Main Mode Type", "bthci_cmd.main_mode_type",
9978 FT_UINT8, BASE_DEC, NULL, 0x0,
9979 NULL, HFILL }
9981 { &hf_bthci_cmd_sub_mode_type,
9982 { "Sub Mode Type", "bthci_cmd.sub_mode_type",
9983 FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_not_used_0xff_special), 0x0,
9984 NULL, HFILL }
9986 { &hf_bthci_cmd_min_main_mode_steps,
9987 { "Min Main Mode Steps", "bthci_cmd.min_main_mode_steps",
9988 FT_UINT8, BASE_DEC, NULL, 0x0,
9989 NULL, HFILL }
9991 { &hf_bthci_cmd_max_main_mode_steps,
9992 { "Max Main Mode Steps", "bthci_cmd.max_main_mode_steps",
9993 FT_UINT8, BASE_DEC, NULL, 0x0,
9994 NULL, HFILL }
9996 { &hf_bthci_cmd_main_mode_repetition,
9997 { "Main Mode Repetitions", "bthci_cmd.main_mode_repetition",
9998 FT_UINT8, BASE_DEC, NULL, 0x0,
9999 NULL, HFILL }
10001 { &hf_bthci_cmd_mode0_steps,
10002 { "Mode-0 Steps", "bthci_cmd.mode0_steps",
10003 FT_UINT8, BASE_DEC, NULL, 0x0,
10004 NULL, HFILL }
10006 { &hf_bthci_cmd_cs_role,
10007 { "Role", "bthci_cmd.cs_role",
10008 FT_UINT8, BASE_HEX, VALS(cmd_cs_role_vals), 0x0,
10009 NULL, HFILL }
10011 { &hf_bthci_cmd_rtt_type,
10012 { "RTT Type", "bthci_cmd.rtt_type",
10013 FT_UINT8, BASE_HEX, VALS(cmd_cs_rtt_type_vals), 0x0,
10014 NULL, HFILL }
10016 { &hf_bthci_cmd_cs_sync_phy,
10017 { "CS Sync PHY", "bthci_cmd.cs_sync_phy",
10018 FT_UINT8, BASE_HEX, VALS(cmd_cs_sync_phy_vals), 0x0,
10019 NULL, HFILL }
10021 { &hf_bthci_cmd_channel_map_repetition,
10022 { "Channel Map Repetitions", "bthci_cmd.channel_map_repetition",
10023 FT_UINT8, BASE_DEC, NULL, 0x0,
10024 NULL, HFILL }
10026 { &hf_bthci_cmd_channel_selection_type,
10027 { "Channel Selection Type", "bthci_cmd.channel_selection_type",
10028 FT_UINT8, BASE_HEX, VALS(cmd_cs_ch_selection_type_vals), 0x0,
10029 NULL, HFILL }
10031 { &hf_bthci_cmd_ch3c_shape,
10032 { "Ch3c Shape", "bthci_cmd.ch3c_shape",
10033 FT_UINT8, BASE_HEX, VALS(cmd_cs_shape_vals), 0x0,
10034 NULL, HFILL }
10036 { &hf_bthci_cmd_ch3c_jump,
10037 { "Ch3c Jump", "bthci_cmd.ch3c_jump",
10038 FT_UINT8, BASE_DEC, NULL, 0x0,
10039 NULL, HFILL }
10041 { &hf_bthci_cmd_companion_signal_enable,
10042 { "Companion Signal Enable", "bthci_cmd.companion_signal_enable",
10043 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
10044 NULL, HFILL }
10046 { &hf_bthci_cmd_cs_enable,
10047 { "CS Enable", "bthci_cmd.cs_enable",
10048 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
10049 NULL, HFILL }
10051 { &hf_bthci_cmd_max_procedure_len,
10052 { "Max Procedure Length", "bthci_cmd.max_procedure_len",
10053 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
10054 NULL, HFILL }
10056 { &hf_bthci_cmd_min_procedure_interval,
10057 { "Min Procedure Interval", "bthci_cmd.min_procedure_interval",
10058 FT_UINT16, BASE_DEC, NULL, 0x0,
10059 NULL, HFILL }
10061 { &hf_bthci_cmd_max_procedure_interval,
10062 { "Max Procedure Interval", "bthci_cmd.max_procedure_interval",
10063 FT_UINT16, BASE_DEC, NULL, 0x0,
10064 NULL, HFILL }
10066 { &hf_bthci_cmd_max_procedure_count,
10067 { "Max Procedure Count", "bthci_cmd.max_procedure_count",
10068 FT_UINT16, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_procedure_count_special), 0x0,
10069 NULL, HFILL }
10071 { &hf_bthci_cmd_min_subevent_len,
10072 { "Min Subevent Length", "bthci_cmd.min_subevent_len",
10073 FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10074 NULL, HFILL }
10076 { &hf_bthci_cmd_max_subevent_len,
10077 { "Max Subevent Length", "bthci_cmd.max_subevent_len",
10078 FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10079 NULL, HFILL }
10081 { &hf_bthci_cmd_subevent_len,
10082 { "Subevent Length", "bthci_cmd.subevent_len",
10083 FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10084 NULL, HFILL }
10086 { &hf_bthci_cmd_tone_antenna_selection,
10087 { "Antenna Config Selection Index", "bthci_cmd.tone_antenna_selection",
10088 FT_UINT8, BASE_HEX, VALS(cmd_aci_vals), 0x0,
10089 NULL, HFILL }
10091 { &hf_bthci_cmd_tx_pwr_delta,
10092 {"Tx Power Delta (dB)", "bthci_cmd.tx_pwr_delta",
10093 FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_decibels), 0x0,
10094 NULL, HFILL}
10096 { &hf_bthci_cmd_preferred_peer_antenna,
10097 { "Preferred Peer Antenna", "bthci_cmd.preferred_peer_antenna",
10098 FT_UINT8, BASE_HEX, NULL, 0x0,
10099 NULL, HFILL }
10101 { &hf_bthci_cmd_preferred_peer_antenna_first,
10102 { "1st Ordered Element", "bthci_cmd.preferred_peer_antenna.first",
10103 FT_BOOLEAN, 8, NULL, 0x01,
10104 NULL, HFILL }
10106 { &hf_bthci_cmd_preferred_peer_antenna_second,
10107 { "2nd Ordered Element", "bthci_cmd.preferred_peer_antenna.second",
10108 FT_BOOLEAN, 8, NULL, 0x02,
10109 NULL, HFILL }
10111 { &hf_bthci_cmd_preferred_peer_antenna_third,
10112 { "3rd Ordered Element", "bthci_cmd.preferred_peer_antenna.third",
10113 FT_BOOLEAN, 8, NULL, 0x04,
10114 NULL, HFILL }
10116 { &hf_bthci_cmd_preferred_peer_antenna_fourth,
10117 { "4th Ordered Element", "bthci_cmd.preferred_peer_antenna.fourth",
10118 FT_BOOLEAN, 8, NULL, 0x08,
10119 NULL, HFILL }
10121 { &hf_bthci_cmd_preferred_peer_antenna_reserved,
10122 { "Reserved", "bthci_cmd.preferred_peer_antenna.reserved",
10123 FT_UINT8, BASE_HEX, NULL, 0xF0,
10124 NULL, HFILL }
10126 { &hf_bthci_cmd_snr_control_initiator,
10127 { "SNR Adjustment, Initiator", "bthci_cmd.snr_control_initiator",
10128 FT_UINT8, BASE_HEX, VALS(cmd_snr_control_vals), 0x0,
10129 NULL, HFILL }
10131 { &hf_bthci_cmd_snr_control_reflector,
10132 { "SNR Adjustment, Reflector", "bthci_cmd.snr_control_reflector",
10133 FT_UINT8, BASE_HEX, VALS(cmd_snr_control_vals), 0x0,
10134 NULL, HFILL }
10136 { &hf_bthci_cmd_cs_subevent_interval,
10137 { "Subevent Interval", "bthci_cmd.cs_subevent_interval",
10138 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
10139 NULL, HFILL }
10141 { &hf_bthci_cmd_max_num_subevents,
10142 { "Max Num Subevents", "bthci_cmd.max_num_subevents",
10143 FT_UINT8, BASE_DEC, NULL, 0x0,
10144 NULL, HFILL }
10146 { &hf_bthci_cmd_tx_power_setting,
10147 { "Tx Power Level", "bthci_cmd.tx_power_setting",
10148 FT_INT8, BASE_CUSTOM, CF_FUNC(tx_power_setting), 0x0,
10149 NULL, HFILL }
10151 { &hf_bthci_cmd_t_ip1_time,
10152 { "T_IP1 Time", "bthci_cmd.t_ip1_time",
10153 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10154 NULL, HFILL }
10156 { &hf_bthci_cmd_t_ip2_time,
10157 { "T_IP2 Time", "bthci_cmd.t_ip2_time",
10158 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10159 NULL, HFILL }
10161 { &hf_bthci_cmd_t_fcs_time,
10162 { "T_FCS Time", "bthci_cmd.t_fcs_time",
10163 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10164 NULL, HFILL }
10166 { &hf_bthci_cmd_t_pm_time,
10167 { "T_PM Time", "bthci_cmd.t_pm_time",
10168 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10169 NULL, HFILL }
10171 { &hf_bthci_cmd_t_sw_time,
10172 { "T_SW Time", "bthci_cmd.t_sw_time",
10173 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10174 NULL, HFILL }
10176 { &hf_bthci_cmd_drbg_nonce,
10177 { "DRBG Nonce", "bthci_cmd.drbg_nonce",
10178 FT_UINT16, BASE_HEX, NULL, 0x0,
10179 NULL, HFILL }
10181 { &hf_bthci_cmd_cs_override_config,
10182 { "Override Config", "bthci_cmd.cs_override_config",
10183 FT_UINT16, BASE_HEX, NULL, 0x0,
10184 NULL, HFILL }
10186 { &hf_bthci_cmd_override_config_reserved,
10187 { "Reserved", "bthci_cmd.override_config.reserved",
10188 FT_UINT16, BASE_HEX, NULL, 0xFA02,
10189 NULL, HFILL }
10191 { &hf_bthci_cmd_override_config_channel_list,
10192 { "Channel List", "bthci_cmd.override_config.channel_list",
10193 FT_BOOLEAN, 16, NULL, 0x0001,
10194 NULL, HFILL }
10196 { &hf_bthci_cmd_override_config_main_mode_steps,
10197 { "Main Mode Steps", "bthci_cmd.override_config.main_mode_steps",
10198 FT_BOOLEAN, 16, NULL, 0x0004,
10199 NULL, HFILL }
10201 { &hf_bthci_cmd_override_config_tpm_tone_ext,
10202 { "T_PM Tone Extension", "bthci_cmd.override_config.tpm_tone_ext",
10203 FT_BOOLEAN, 16, NULL, 0x0008,
10204 NULL, HFILL }
10206 { &hf_bthci_cmd_override_config_tone_ant_permutation,
10207 { "Tone Antenna Permutation", "bthci_cmd.override_config.tone_ant_permutation",
10208 FT_BOOLEAN, 16, NULL, 0x0010,
10209 NULL, HFILL }
10211 { &hf_bthci_cmd_override_config_cs_sync_aa,
10212 { "CS Sync Access Address", "bthci_cmd.override_config.cs_sync_aa",
10213 FT_BOOLEAN, 16, NULL, 0x0020,
10214 NULL, HFILL }
10216 { &hf_bthci_cmd_override_config_ss_marker_position,
10217 { "SS Marker Position", "bthci_cmd.override_config.ss_marker_position",
10218 FT_BOOLEAN, 16, NULL, 0x0040,
10219 NULL, HFILL }
10221 { &hf_bthci_cmd_override_config_ss_marker_value,
10222 { "SS Marker Value", "bthci_cmd.override_config.ss_marker_value",
10223 FT_BOOLEAN, 16, NULL, 0x0080,
10224 NULL, HFILL }
10226 { &hf_bthci_cmd_override_config_cs_sync_data,
10227 { "CS Sync Data", "bthci_cmd.override_config.cs_sync_data",
10228 FT_BOOLEAN, 16, NULL, 0x0100,
10229 NULL, HFILL }
10231 { &hf_bthci_cmd_override_config_stable_phase_test,
10232 { "Stable Phase Test", "bthci_cmd.override_config.stable_phase_test",
10233 FT_BOOLEAN, 16, NULL, 0x0400,
10234 NULL, HFILL }
10236 { &hf_bthci_cmd_cs_override_param_length,
10237 { "Override Parameter Length", "bthci_cmd.cs_override_param_length",
10238 FT_UINT8, BASE_DEC, NULL, 0x0,
10239 NULL, HFILL }
10241 { &hf_bthci_cmd_cs_override_param_data,
10242 { "Override Parameter Data", "bthci_cmd.cs_override_param_data",
10243 FT_BYTES, BASE_NONE, NULL, 0x0,
10244 NULL, HFILL }
10246 { &hf_bthci_cmd_adv_monitoring_enable,
10247 { "Advertiser Monitoring Enable", "bthci_cmd.adv_monitoring_enable",
10248 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
10249 NULL, HFILL }
10251 { &hf_bthci_cmd_adv_decision_data,
10252 { "Decision Data", "bthci_cmd.decision_data",
10253 FT_BYTES, BASE_NONE, NULL, 0x0,
10254 NULL, HFILL }
10256 { &hf_bthci_cmd_adv_decision_flags,
10257 { "Decision Flags", "bthci_cmd.adv_decision_flags",
10258 FT_UINT8, BASE_HEX, NULL, 0x0,
10259 NULL, HFILL }
10261 { &hf_bthci_cmd_adv_decision_flags_resolvable_tag,
10262 { "Resolvable Tag Present", "bthci_cmd.adv_decision_flags.resolvable_tag",
10263 FT_BOOLEAN, 8, NULL, 0x01,
10264 NULL, HFILL }
10266 { &hf_bthci_cmd_adv_decision_flags_reserved,
10267 { "Reserved", "bthci_cmd.adv_decision_flags.reserved",
10268 FT_UINT8, BASE_HEX, NULL, 0xFE,
10269 NULL, HFILL }
10271 { &hf_bthci_cmd_num_tests,
10272 { "Number of Tests", "bthci_cmd.num_tests",
10273 FT_UINT8, BASE_DEC, NULL, 0x0,
10274 NULL, HFILL }
10276 { &hf_bthci_cmd_adv_test_flags,
10277 { "Test Flags", "bthci_cmd.adv_test_flags",
10278 FT_UINT8, BASE_HEX, NULL, 0x0,
10279 NULL, HFILL }
10281 { &hf_bthci_cmd_adv_test_flags_start_group,
10282 { "Start of New Test Group", "bthci_cmd.adv_test_flags.start_group",
10283 FT_BOOLEAN, 8, NULL, 0x01,
10284 NULL, HFILL }
10286 { &hf_bthci_cmd_adv_test_flags_data_contains_field_check_pass,
10287 { "Pass If Contains Field & Match", "bthci_cmd.adv_test_flags.data_contains_field_check_pass",
10288 FT_BOOLEAN, 8, NULL, 0x02,
10289 NULL, HFILL }
10291 { &hf_bthci_cmd_adv_test_flags_data_contains_field_check_fail,
10292 { "Pass If Contains Field & No Match", "bthci_cmd.adv_test_flags.data_contains_field_check_fail",
10293 FT_BOOLEAN, 8, NULL, 0x04,
10294 NULL, HFILL }
10296 { &hf_bthci_cmd_adv_test_flags_data_not_contain_field,
10297 { "Pass If Does Not Contain Field", "bthci_cmd.adv_test_flags.data_not_contain_field",
10298 FT_BOOLEAN, 8, NULL, 0x08,
10299 NULL, HFILL }
10301 { &hf_bthci_cmd_adv_test_flags_reserved,
10302 { "Reserved", "bthci_cmd.adv_test_flags.reserved",
10303 FT_UINT8, BASE_HEX, NULL, 0xF0,
10304 NULL, HFILL }
10306 { &hf_bthci_cmd_adv_test_field,
10307 { "Test Field", "bthci_cmd.adv_test_field",
10308 FT_UINT8, BASE_HEX|BASE_SPECIAL_VALS, VALS(adv_test_field_special), 0x0,
10309 NULL, HFILL }
10311 { &hf_bthci_cmd_adv_test_params,
10312 { "Test Parameters", "bthci_cmd.adv_test_params",
10313 FT_BYTES, BASE_NONE, NULL, 0x0,
10314 NULL, HFILL }
10316 { &hf_bthci_cmd_rssi_threshold_low,
10317 { "RSSI Threshold Low", "bthci_cmd.rssi_threshold_low",
10318 FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0x0,
10319 NULL, HFILL }
10321 { &hf_bthci_cmd_rssi_threshold_high,
10322 { "RSSI Threshold High", "bthci_cmd.rssi_threshold_high",
10323 FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0x0,
10324 NULL, HFILL }
10326 { &hf_bthci_cmd_rssi_threshold_timeout,
10327 { "Timeout", "bthci_cmd.rssi_threshold_timeout",
10328 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
10329 NULL, HFILL }
10331 { &hf_bthci_cmd_frame_space_min,
10332 { "Minimum Frame Space", "bthci_cmd.frame_space_min",
10333 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10334 NULL, HFILL }
10336 { &hf_bthci_cmd_frame_space_max,
10337 { "Maximum Frame Space", "bthci_cmd.frame_space_max",
10338 FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10339 NULL, HFILL }
10341 { &hf_bthci_cmd_spacing_types,
10342 { "Spacing Types", "bthci_cmd.spacing_types",
10343 FT_UINT16, BASE_HEX, NULL, 0x0,
10344 NULL, HFILL }
10346 { &hf_bthci_cmd_spacing_types_tifs_acl_cp,
10347 { "T_IFS_ACL_CP", "bthci_cmd.spacing_types.tifs_acl_cp",
10348 FT_BOOLEAN, 16, NULL, 0x0001,
10349 NULL, HFILL }
10351 { &hf_bthci_cmd_spacing_types_tifs_acl_pc,
10352 { "T_IFS_ACL_PC", "bthci_cmd.spacing_types.tifs_acl_pc",
10353 FT_BOOLEAN, 16, NULL, 0x0002,
10354 NULL, HFILL }
10356 { &hf_bthci_cmd_spacing_types_tmces,
10357 { "T_MCES", "bthci_cmd.spacing_types.tmces",
10358 FT_BOOLEAN, 16, NULL, 0x0004,
10359 NULL, HFILL }
10361 { &hf_bthci_cmd_spacing_types_tifs_cis,
10362 { "T_IFS_CIS", "bthci_cmd.spacing_types.tifs_cis",
10363 FT_BOOLEAN, 16, NULL, 0x0008,
10364 NULL, HFILL }
10366 { &hf_bthci_cmd_spacing_types_tmss_cis,
10367 { "T_MSS_CIS", "bthci_cmd.spacing_types.tmss_cis",
10368 FT_BOOLEAN, 16, NULL, 0x0010,
10369 NULL, HFILL }
10371 { &hf_bthci_cmd_spacing_types_reserved,
10372 { "Reserved", "bthci_cmd.spacing_types.reserved",
10373 FT_UINT16, BASE_HEX, NULL, 0xFFE0,
10374 NULL, HFILL }
10376 { &hf_bthci_cmd_triggered_clock_capture,
10377 { "Triggered Clock Capture", "bthci_cmd.triggered_clock_capture",
10378 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10379 NULL, HFILL }
10381 { &hf_bthci_cmd_lpo_allowed,
10382 { "LPO Allowed", "bthci_cmd.lpo_allowed",
10383 FT_UINT8, BASE_HEX, VALS(lpo_allowed_vals), 0x0,
10384 NULL, HFILL }
10386 { &hf_bthci_cmd_number_of_clock_captures_to_filter,
10387 { "Number of Clock Captures to Filter", "bthci_cmd.number_of_clock_captures_to_filter",
10388 FT_UINT8, BASE_DEC, NULL, 0x0,
10389 NULL, HFILL }
10391 { &hf_bthci_cmd_amp_controller_type,
10392 { "Controller Type", "bthci_cmd.controller_type",
10393 FT_UINT8, BASE_HEX, VALS(bthci_evt_controller_types), 0x0,
10394 NULL, HFILL }
10396 { &hf_bthci_cmd_dm1_acl_u_mode,
10397 {"DM1 ACL-U Mode", "bthci_cmd.dm1_acl_u_mode",
10398 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10399 NULL, HFILL}
10401 { &hf_bthci_cmd_esco_loopback_mode,
10402 {"eSCO Loopback Mode", "bthci_cmd.esco_loopback_mode",
10403 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10404 NULL, HFILL}
10406 { &hf_bthci_cmd_transmit_coding_format,
10407 { "Transmit Coding Format", "bthci_cmd.transmit_coding_format",
10408 FT_NONE, BASE_NONE, NULL, 0x0,
10409 NULL, HFILL }
10411 { &hf_bthci_cmd_receive_coding_format,
10412 { "Receive Coding Format", "bthci_cmd.receive_coding_format",
10413 FT_NONE, BASE_NONE, NULL, 0x0,
10414 NULL, HFILL }
10416 { &hf_bthci_cmd_input_coding_format,
10417 { "Input Coding Format", "bthci_cmd.input_coding_format",
10418 FT_NONE, BASE_NONE, NULL, 0x0,
10419 NULL, HFILL }
10421 { &hf_bthci_cmd_output_coding_format,
10422 { "Output Coding Format", "bthci_cmd.output_coding_format",
10423 FT_NONE, BASE_NONE, NULL, 0x0,
10424 NULL, HFILL }
10426 { &hf_bthci_cmd_codec_id,
10427 { "Codec", "bthci_cmd.codec_id",
10428 FT_UINT8, BASE_HEX, VALS(bthci_evt_codec_id_vals), 0x0,
10429 NULL, HFILL }
10431 { &hf_bthci_cmd_company_id,
10432 { "Company ID", "bthci_cmd.company_id",
10433 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
10434 NULL, HFILL }
10436 { &hf_bthci_cmd_vendor_codec_id,
10437 { "Vendor Codec ID", "bthci_cmd.vendor_codec_id",
10438 FT_UINT16, BASE_HEX, NULL, 0x0,
10439 NULL, HFILL }
10441 { &hf_bthci_cmd_transmit_codec_frame_size,
10442 { "Transmit Codec Frame Size", "bthci_cmd.transmit_codec_frame_size",
10443 FT_UINT16, BASE_DEC, NULL, 0x0,
10444 NULL, HFILL }
10446 { &hf_bthci_cmd_receive_codec_frame_size,
10447 { "Receive Codec Frame Size", "bthci_cmd.receive_codec_frame_size",
10448 FT_UINT16, BASE_DEC, NULL, 0x0,
10449 NULL, HFILL }
10451 { &hf_bthci_cmd_input_bandwidth,
10452 { "Input Bandwidth", "bthci_cmd.input_bandwidth",
10453 FT_UINT32, BASE_DEC, NULL, 0x0,
10454 NULL, HFILL }
10456 { &hf_bthci_cmd_output_bandwidth,
10457 { "Output Bandwidth", "bthci_cmd.output_bandwidth",
10458 FT_UINT32, BASE_DEC, NULL, 0x0,
10459 NULL, HFILL }
10461 { &hf_bthci_cmd_input_coded_data_size,
10462 { "Input Coded Data Size", "bthci_cmd.input_coded_data_size",
10463 FT_UINT16, BASE_DEC, NULL, 0x0,
10464 NULL, HFILL }
10466 { &hf_bthci_cmd_output_coded_data_size,
10467 { "Output Coded Data Size", "bthci_cmd.output_coded_data_size",
10468 FT_UINT16, BASE_DEC, NULL, 0x0,
10469 NULL, HFILL }
10471 { &hf_bthci_cmd_input_pcm_data_format,
10472 { "Input PCM Data Format", "bthci_cmd.input_pcm_data_format",
10473 FT_UINT8, BASE_HEX, VALS(pcm_data_format_vals), 0x0,
10474 NULL, HFILL }
10476 { &hf_bthci_cmd_output_pcm_data_format,
10477 { "Output PCM Data Format", "bthci_cmd.output_pcm_data_format",
10478 FT_UINT8, BASE_HEX, VALS(pcm_data_format_vals), 0x0,
10479 NULL, HFILL }
10481 { &hf_bthci_cmd_input_pcm_sample_payload_msb_position,
10482 { "Input PCM Sample Payload MSB Position", "bthci_cmd.input_pcm_sample_payload_msb_position",
10483 FT_UINT8, BASE_DEC, NULL, 0x0,
10484 NULL, HFILL }
10486 { &hf_bthci_cmd_output_pcm_sample_payload_msb_position,
10487 { "Output PCM Sample Payload MSB Position", "bthci_cmd.output_pcm_sample_payload_msb_position",
10488 FT_UINT8, BASE_DEC, NULL, 0x0,
10489 NULL, HFILL }
10491 { &hf_bthci_cmd_input_data_path,
10492 { "Input Data Path", "bthci_cmd.input_data_path",
10493 FT_UINT8, BASE_RANGE_STRING, RVALS(audio_data_path_rvals), 0x0,
10494 NULL, HFILL }
10496 { &hf_bthci_cmd_output_data_path,
10497 { "Output Data Path", "bthci_cmd.output_data_path",
10498 FT_UINT8, BASE_RANGE_STRING, RVALS(audio_data_path_rvals), 0x0,
10499 NULL, HFILL }
10501 { &hf_bthci_cmd_input_transport_unit_size,
10502 { "Input Transport Unit Size", "bthci_cmd.input_transport_unit_size",
10503 FT_UINT8, BASE_DEC, NULL, 0x0,
10504 NULL, HFILL }
10506 { &hf_bthci_cmd_output_transport_unit_size,
10507 { "Output Transport Unit Size", "bthci_cmd.output_transport_unit_size",
10508 FT_UINT8, BASE_DEC, NULL, 0x0,
10509 NULL, HFILL }
10511 { &hf_bthci_cmd_connectionless_peripheral_broadcast,
10512 { "Connectionless Peripheral Broadcast", "bthci_cmd.connectionless_peripheral_broadcast",
10513 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10514 NULL, HFILL }
10516 { &hf_bthci_cmd_lt_addr,
10517 { "LT_ADDR", "bthci_cmd.lt_addr",
10518 FT_UINT8, BASE_HEX, NULL, 0x0,
10519 NULL, HFILL }
10521 { &hf_bthci_cmd_interval_min,
10522 { "Min Interval", "bthci_cmd.interval.min",
10523 FT_UINT16, BASE_DEC, NULL, 0x0,
10524 NULL, HFILL }
10526 { &hf_bthci_cmd_interval_max,
10527 { "Max Interval", "bthci_cmd.interval.max",
10528 FT_UINT16, BASE_DEC, NULL, 0x0,
10529 NULL, HFILL }
10531 { &hf_bthci_cmd_cpb_supervision_to,
10532 { "Supervision To", "bthci_cmd.cpb_supervision_to",
10533 FT_UINT16, BASE_DEC, NULL, 0x0,
10534 NULL, HFILL }
10536 { &hf_bthci_cmd_connectionless_peripheral_broadcast_receive,
10537 { "Connectionless Peripheral Broadcast Receive", "bthci_cmd.connectionless_peripheral_broadcast_receive",
10538 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10539 NULL, HFILL }
10541 { &hf_bthci_cmd_clock_offset_32,
10542 { "Clock Offset", "bthci_cmd.clock_offset_32",
10543 FT_UINT32, BASE_HEX, NULL, 0x0FFFFFFF,
10544 "Bits 0-27 of the Clock Offset between CLKNreceiver-CLKNtransmitter", HFILL }
10546 { &hf_bthci_cmd_next_cpb_clock,
10547 { "Next CPB Clock", "bthci_cmd.next_cpb_clock",
10548 FT_UINT32, BASE_HEX, NULL, 0x0FFFFFFF,
10549 "Bits 0-27 of the Clock Offset between CLKperipheral-CLK", HFILL }
10551 { &hf_bthci_cmd_remote_timing_accuracy,
10552 { "Remote Timing Accuracy", "bthci_cmd.remote_timing_accuracy",
10553 FT_UINT8, BASE_DEC, NULL, 0x0,
10554 NULL, HFILL }
10556 { &hf_bthci_cmd_cpb_skip,
10557 { "CPB Skip", "bthci_cmd.cpb_skip",
10558 FT_UINT8, BASE_DEC, NULL, 0x0,
10559 NULL, HFILL }
10561 /* TODO: More detailed dissection */
10562 { &hf_bthci_cmd_channel_map,
10563 {"Channel Map", "bthci_cmd.channel_map",
10564 FT_BYTES, BASE_NONE, NULL, 0x0,
10565 NULL, HFILL}
10567 { &hf_bthci_cmd_synchronization_scan_to,
10568 { "Synchronization Scan To", "bthci_cmd.synchronization_scan_to",
10569 FT_UINT16, BASE_DEC, NULL, 0x0,
10570 NULL, HFILL }
10572 { &hf_bthci_cmd_c192,
10573 { "C 192", "bthci_cmd.c192",
10574 FT_BYTES, BASE_NONE, NULL, 0x0,
10575 NULL, HFILL }
10577 { &hf_bthci_cmd_r192,
10578 { "R 192", "bthci_cmd.r192",
10579 FT_BYTES, BASE_NONE, NULL, 0x0,
10580 NULL, HFILL }
10582 { &hf_bthci_cmd_c256,
10583 { "C 256", "bthci_cmd.c256",
10584 FT_BYTES, BASE_NONE, NULL, 0x0,
10585 NULL, HFILL }
10587 { &hf_bthci_cmd_r256,
10588 { "R 256", "bthci_cmd.r256",
10589 FT_BYTES, BASE_NONE, NULL, 0x0,
10590 NULL, HFILL }
10592 { &hf_bthci_mws_channel,
10593 { "MWS Channel", "bthci_cmd.mws_channel",
10594 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10595 NULL, HFILL }
10597 /* TODO: Add units */
10598 { &hf_bthci_mws_rx_center_frequency,
10599 { "MWS RX Center Frequency", "bthci_cmd.mws_rx_center_frequency",
10600 FT_UINT16, BASE_DEC, NULL, 0x0,
10601 NULL, HFILL }
10603 { &hf_bthci_mws_tx_center_frequency,
10604 { "MWS TX Center Frequency", "bthci_cmd.mws_tx_center_frequency",
10605 FT_UINT16, BASE_DEC, NULL, 0x0,
10606 NULL, HFILL }
10608 /* TODO: Add units */
10609 { &hf_bthci_mws_rx_channel_bandwidth,
10610 { "MWS RX Channel Bandwidth", "bthci_cmd.mws_rx_channel_bandwidth",
10611 FT_UINT16, BASE_DEC, NULL, 0x0,
10612 NULL, HFILL }
10614 { &hf_bthci_mws_tx_channel_bandwidth,
10615 { "MWS TX Channel Bandwidth", "bthci_cmd.mws_tx_channel_bandwidth",
10616 FT_UINT16, BASE_DEC, NULL, 0x0,
10617 NULL, HFILL }
10619 { &hf_bthci_mws_channel_type,
10620 { "MWS Channel Type", "bthci_cmd.mws_channel_type",
10621 FT_UINT8, BASE_HEX, VALS(mws_channel_type_vals), 0x0,
10622 NULL, HFILL }
10624 { &hf_bthci_external_frame_duration,
10625 { "Frame Duration", "bthci_cmd.external_frame.duration",
10626 FT_UINT16, BASE_DEC, NULL, 0x0,
10627 NULL, HFILL }
10629 { &hf_bthci_external_frame_sync_assert_offset,
10630 { "Frame Duration", "bthci_cmd.external_frame.sync_assert.offset",
10631 FT_INT16, BASE_DEC, NULL, 0x0,
10632 NULL, HFILL }
10634 { &hf_bthci_external_frame_sync_assert_jitter,
10635 { "Frame Sync Assert Jitter", "bthci_cmd.external_frame.sync_assert.jitter",
10636 FT_UINT16, BASE_DEC, NULL, 0x0,
10637 NULL, HFILL }
10639 { &hf_bthci_external_frame_number_of_periods,
10640 { "Number of Periods", "bthci_cmd.external_frame.number_of_periods",
10641 FT_UINT8, BASE_DEC, NULL, 0x0,
10642 NULL, HFILL }
10644 { &hf_bthci_external_frame_periods,
10645 { "Periods", "bthci_cmd.external_frame.periods",
10646 FT_NONE, BASE_NONE, NULL, 0x0,
10647 NULL, HFILL }
10649 { &hf_bthci_external_frame_period,
10650 { "Period", "bthci_cmd.external_frame.period",
10651 FT_UINT24, BASE_HEX, NULL, 0x0,
10652 NULL, HFILL }
10654 { &hf_bthci_external_frame_period_duration,
10655 { "Duration", "bthci_cmd.external_frame.period.duration",
10656 FT_UINT16, BASE_DEC, NULL, 0x0,
10657 NULL, HFILL }
10659 { &hf_bthci_external_frame_period_type,
10660 { "Type", "bthci_cmd.external_frame.period.type",
10661 FT_UINT8, BASE_HEX, VALS(external_frame_period_type_vals), 0x0,
10662 NULL, HFILL }
10664 { &hf_bthci_mws_rx_assert_offset,
10665 { "RX Assert Offset", "bthci_cmd.mws.rx_assert.offset",
10666 FT_INT16, BASE_DEC, NULL, 0x0,
10667 NULL, HFILL }
10669 { &hf_bthci_mws_rx_assert_jitter,
10670 { "RX Assert Jitter", "bthci_cmd.mws.rx_assert.jitter",
10671 FT_INT16, BASE_DEC, NULL, 0x0,
10672 NULL, HFILL }
10674 { &hf_bthci_mws_rx_deassert_offset,
10675 { "RX Deassert Offset", "bthci_cmd.mws.rx_deassert.offset",
10676 FT_INT16, BASE_DEC, NULL, 0x0,
10677 NULL, HFILL }
10679 { &hf_bthci_mws_rx_deassert_jitter,
10680 { "RX Deassert Jitter", "bthci_cmd.mws.rx_deassert.jitter",
10681 FT_UINT16, BASE_DEC, NULL, 0x0,
10682 NULL, HFILL }
10684 { &hf_bthci_mws_tx_assert_offset,
10685 { "TX Assert Offset", "bthci_cmd.mws.tx_assert.offset",
10686 FT_INT16, BASE_DEC, NULL, 0x0,
10687 NULL, HFILL }
10689 { &hf_bthci_mws_tx_assert_jitter,
10690 { "TX Assert Jitter", "bthci_cmd.mws.tx_assert.jitter",
10691 FT_UINT16, BASE_DEC, NULL, 0x0,
10692 NULL, HFILL }
10694 { &hf_bthci_mws_tx_deassert_offset,
10695 { "TX Deassert Offset", "bthci_cmd.mws.tx_deassert.offset",
10696 FT_INT16, BASE_DEC, NULL, 0x0,
10697 NULL, HFILL }
10699 { &hf_bthci_mws_tx_deassert_jitter,
10700 { "TX Deassert Jitter", "bthci_cmd.mws.tx_deassert.jitter",
10701 FT_UINT16, BASE_DEC, NULL, 0x0,
10702 NULL, HFILL }
10704 { &hf_bthci_mws_pattern_assert_offset,
10705 { "Pattern Assert Offset", "bthci_cmd.mws.pattern_assert.offset",
10706 FT_INT16, BASE_DEC, NULL, 0x0,
10707 NULL, HFILL }
10709 { &hf_bthci_mws_pattern_assert_jitter,
10710 { "Pattern Assert Jitter", "bthci_cmd.mws.pattern_assert.jitter",
10711 FT_UINT16, BASE_DEC, NULL, 0x0,
10712 NULL, HFILL }
10714 { &hf_bthci_mws_inactivity_duration_assert_offset,
10715 { "Inactivity Duration Assert Offset", "bthci_cmd.mws.inactivity_duration_assert.offset",
10716 FT_INT16, BASE_DEC, NULL, 0x0,
10717 NULL, HFILL }
10719 { &hf_bthci_mws_inactivity_duration_assert_jitter,
10720 { "Inactivity Duration Assert Jitter", "bthci_cmd.mws.inactivity_duration_assert.jitter",
10721 FT_UINT16, BASE_DEC, NULL, 0x0,
10722 NULL, HFILL }
10724 { &hf_bthci_mws_scan_frequency_assert_offset,
10725 { "Scan Frequency Assert Offset", "bthci_cmd.mws.scan_frequency_assert.offset",
10726 FT_INT16, BASE_DEC, NULL, 0x0,
10727 NULL, HFILL }
10729 { &hf_bthci_mws_scan_frequency_assert_jitter,
10730 { "Scan Frequency Assert Jitter", "bthci_cmd.mws.scan_frequency_assert.jitter",
10731 FT_UINT16, BASE_DEC, NULL, 0x0,
10732 NULL, HFILL }
10734 { &hf_bthci_mws_priority_assert_offset_request,
10735 { "Priority Assert Offset Request", "bthci_cmd.mws.priority_assert_offset_request",
10736 FT_UINT16, BASE_DEC, NULL, 0x0,
10737 NULL, HFILL }
10739 { &hf_bthci_mws_transport_layer,
10740 { "Transport Layer", "bthci_cmd.mws.transport_layer",
10741 FT_UINT8, BASE_HEX, VALS(bthci_evt_mws_transport_layer_vals), 0x0,
10742 NULL, HFILL }
10744 { &hf_bthci_mws_to_baud_rate,
10745 { "To Baud Rate", "bthci_cmd.mws.to_baud_rate",
10746 FT_UINT32, BASE_DEC, NULL, 0x0,
10747 NULL, HFILL }
10749 { &hf_bthci_mws_from_baud_rate,
10750 { "From Baud Rate", "bthci_cmd.mws.from_baud_rate",
10751 FT_UINT32, BASE_DEC, NULL, 0x0,
10752 NULL, HFILL }
10754 { &hf_bthci_mws_number_of_frequencies,
10755 { "Number of Frequencies", "bthci_cmd.mws.number_of_frequencies",
10756 FT_UINT8, BASE_DEC, NULL, 0x0,
10757 NULL, HFILL }
10759 { &hf_bthci_mws_scan_frequency_table,
10760 { "Scan Frequency Table", "bthci_cmd.mws.scan_frequency_table",
10761 FT_NONE, BASE_NONE, NULL, 0x0,
10762 NULL, HFILL }
10764 { &hf_bthci_mws_scan_frequency_table_item,
10765 { "Item", "bthci_cmd.mws.scan_frequency_table.item",
10766 FT_UINT32, BASE_HEX, NULL, 0x0,
10767 NULL, HFILL }
10769 { &hf_bthci_mws_scan_frequency_table_item_low,
10770 { "Low Frequency", "bthci_cmd.mws.scan_frequency_table.item.low",
10771 FT_UINT16, BASE_DEC, NULL, 0x0,
10772 NULL, HFILL }
10774 { &hf_bthci_mws_scan_frequency_table_item_high,
10775 { "High Frequency", "bthci_cmd.mws.scan_frequency_table.item.high",
10776 FT_UINT16, BASE_DEC, NULL, 0x0,
10777 NULL, HFILL }
10779 { &hf_bthci_mws_pattern_index,
10780 { "Index", "bthci_cmd.mws_pattern.index",
10781 FT_UINT8, BASE_DEC, NULL, 0x0,
10782 NULL, HFILL }
10784 { &hf_bthci_mws_pattern_number_of_intervals,
10785 { "Number of Intervals", "bthci_cmd.mws_pattern.number_of_intervals",
10786 FT_UINT8, BASE_DEC, NULL, 0x0,
10787 NULL, HFILL }
10789 { &hf_bthci_mws_patterns,
10790 { "Patterns", "bthci_cmd.mws_pattern.patterns",
10791 FT_NONE, BASE_NONE, NULL, 0x0,
10792 NULL, HFILL }
10794 { &hf_bthci_mws_pattern,
10795 { "Pattern", "bthci_cmd.mws_pattern.pattern",
10796 FT_UINT24, BASE_HEX, NULL, 0x0,
10797 NULL, HFILL }
10799 { &hf_bthci_mws_pattern_duration,
10800 { "Duration", "bthci_cmd.mws_pattern.pattern.duration",
10801 FT_UINT16, BASE_DEC, NULL, 0x0,
10802 NULL, HFILL }
10804 { &hf_bthci_mws_pattern_type,
10805 { "Type", "bthci_cmd.mws_pattern.pattern.type",
10806 FT_UINT8, BASE_HEX, VALS(mws_pattern_type_vals), 0x0,
10807 NULL, HFILL }
10809 { &hf_bthci_cmd_sync_train_to,
10810 { "Synchronization Train To", "bthci_cmd.sync_train_to",
10811 FT_UINT32, BASE_DEC, NULL, 0x0,
10812 NULL, HFILL }
10814 { &hf_bthci_cmd_service_data,
10815 { "Service Data", "bthci_cmd.service_data",
10816 FT_UINT8, BASE_HEX, NULL, 0x0,
10817 NULL, HFILL }
10819 { &hf_bthci_cmd_secure_connection_host_support,
10820 { "Secure Connection Host Support", "bthci_cmd.secure_connection_host_support",
10821 FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10822 NULL, HFILL }
10824 { &hf_bthci_cmd_cpb_fragment,
10825 { "CPB Fragment", "bthci_cmd.cpb.fragment",
10826 FT_UINT8, BASE_HEX, VALS(cpb_fragment_vals), 0x0,
10827 NULL, HFILL }
10829 { &hf_bthci_cmd_cpb_data_length,
10830 { "CPB Data Length", "bthci_cmd.cpb.data_length",
10831 FT_UINT8, BASE_DEC, NULL, 0x0,
10832 NULL, HFILL }
10834 { &hf_bthci_cmd_cpb_data,
10835 { "CPB Data", "bthci_cmd.cpb.data",
10836 FT_BYTES, BASE_NONE, NULL, 0x0,
10837 NULL, HFILL }
10839 { &hf_bthci_cmd_authenticated_payload_timeout,
10840 { "Authenticated Payload Timeout", "bthci_cmd.authenticated_payload_timeout",
10841 FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p01_sec), 0x0,
10842 NULL, HFILL }
10844 { &hf_bthci_cmd_extended_inquiry_length,
10845 { "Extended Inquiry Length", "bthci_cmd.extended_inquiry_length",
10846 FT_UINT16, BASE_DEC, NULL, 0x0,
10847 NULL, HFILL }
10849 { &hf_bthci_cmd_min_encryption_key_size,
10850 { "Minimum Encryption Key Size", "bthci_cmd.min_encryption_key_size",
10851 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
10852 NULL, HFILL }
10856 static ei_register_info ei[] = {
10857 { &ei_command_unknown_command, { "bthci_cmd.expert.command.unknown_command", PI_PROTOCOL, PI_WARN, "Unknown command", EXPFILL }},
10858 { &ei_command_parameter_unexpected, { "bthci_cmd.expert.parameter.unexpected", PI_PROTOCOL, PI_WARN, "Unexpected command parameter", EXPFILL }},
10859 { &ei_command_undecoded, { "bthci_cmd.expert.command.undecoded", PI_UNDECODED, PI_NOTE, "Command undecoded", EXPFILL }}
10862 static int *ett[] = {
10863 &ett_bthci_cmd,
10864 &ett_opcode,
10865 &ett_cod,
10866 &ett_cod_mask,
10867 &ett_flow_spec_subtree,
10868 &ett_le_channel_map,
10869 &ett_event_mask_page_2,
10870 &ett_le_event_mask,
10871 &ett_adv_properties,
10872 &ett_adv_sets,
10873 &ett_phys_flags,
10874 &ett_phy_param,
10875 &ett_filter_policy,
10876 &ett_sync_cte_type,
10877 &ett_coding_format,
10878 &ett_packet_type,
10879 &ett_sco_packet_type,
10880 &ett_periods,
10881 &ett_period,
10882 &ett_table,
10883 &ett_table_item,
10884 &ett_patterns,
10885 &ett_pattern,
10886 &ett_cis_params,
10887 &ett_addr_change_reasons,
10888 &ett_adv_subevents,
10889 &ett_pref_antenna,
10890 &ett_cs_roles,
10891 &ett_cs_modes,
10892 &ett_cs_capability,
10893 &ett_cs_times,
10894 &ett_adv_test_flags,
10895 &ett_override_config,
10896 &ett_spacing_types
10899 proto_bthci_cmd = proto_register_protocol("Bluetooth HCI Command", "HCI_CMD", "bthci_cmd");
10900 bthci_cmd_handle = register_dissector("bthci_cmd", dissect_bthci_cmd, proto_bthci_cmd);
10902 /* Required function calls to register the header fields and subtrees used */
10903 proto_register_field_array(proto_bthci_cmd, hf, array_length(hf));
10904 proto_register_subtree_array(ett, array_length(ett));
10906 expert_bthci_cmd = expert_register_protocol(proto_bthci_cmd);
10907 expert_register_field_array(expert_bthci_cmd, ei, array_length(ei));
10909 bthci_cmds = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
10911 module = prefs_register_protocol_subtree("Bluetooth", proto_bthci_cmd, NULL);
10912 prefs_register_static_text_preference(module, "hci_cmd.version",
10913 "Bluetooth HCI version: 4.0 (Core)",
10914 "Version of protocol supported by this dissector.");
10916 vendor_dissector_table = register_decode_as_next_proto(proto_bthci_cmd, "bthci_cmd.vendor",
10917 "BT HCI Command Vendor", bthci_cmd_vendor_prompt);
10921 /* If this dissector uses sub-dissector registration add a registration routine.
10922 This format is required because a script is used to find these routines and
10923 create the code that calls these routines.
10925 void
10926 proto_reg_handoff_bthci_cmd(void)
10928 hci_vendor_table = find_dissector_table("bluetooth.vendor");
10930 dissector_add_uint("hci_h4.type", HCI_H4_TYPE_CMD, bthci_cmd_handle);
10931 dissector_add_uint("hci_h1.type", BTHCI_CHANNEL_COMMAND, bthci_cmd_handle);
10934 #define PROTO_DATA_BLUETOOTH_EIR_AD_MANUFACTURER_COMPANY_ID 0
10935 #define PROTO_DATA_BLUETOOTH_EIR_AD_TDS_ORGANIZATION_ID 1
10937 static void bluetooth_eir_ad_manufacturer_company_id_prompt(packet_info *pinfo, char* result)
10939 uint16_t *value_data;
10941 value_data = (uint16_t *) p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_MANUFACTURER_COMPANY_ID);
10942 if (value_data)
10943 snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "EIR/AD Manufacturer Company ID 0x%02x as", (unsigned) *value_data);
10944 else
10945 snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "Unknown EIR/AD Manufacturer");
10948 static void *bluetooth_eir_ad_manufacturer_company_id_value(packet_info *pinfo)
10950 uint16_t *value_data;
10952 value_data = (uint16_t *) p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_MANUFACTURER_COMPANY_ID);
10954 if (value_data)
10955 return GUINT_TO_POINTER((unsigned long)*value_data);
10957 return NULL;
10960 static void bluetooth_eir_ad_tds_organization_id_prompt(packet_info *pinfo, char* result)
10962 uint8_t *value_data;
10964 value_data = (uint8_t *) p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_TDS_ORGANIZATION_ID);
10965 if (value_data)
10966 snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "TDS Organization ID 0x%02x as", (unsigned) *value_data);
10967 else
10968 snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "Unknown TDS Organization ID");
10971 static void *bluetooth_eir_ad_tds_organization_id_value(packet_info *pinfo)
10973 uint8_t *value_data;
10975 value_data = (uint8_t *) p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_TDS_ORGANIZATION_ID);
10977 if (value_data)
10978 return GUINT_TO_POINTER((unsigned long)*value_data);
10980 return NULL;
10983 static int
10984 dissect_eir_ad_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, bluetooth_eir_ad_data_t *bluetooth_eir_ad_data)
10986 proto_item *entry_item;
10987 proto_tree *entry_tree;
10988 proto_item *sub_item;
10989 proto_tree *sub_tree;
10990 int offset = 0;
10991 int offset_start;
10992 uint8_t length;
10993 uint8_t sub_length;
10994 uint8_t type;
10995 uint8_t flags;
10996 int data_size;
10997 int64_t end_offset;
10998 bool has_bd_addr = false;
10999 uint8_t bd_addr[6];
11000 uint8_t *name = NULL;
11001 bluetooth_uuid_t uuid;
11002 uint32_t interval, num_bis;
11004 DISSECTOR_ASSERT(bluetooth_eir_ad_data);
11006 data_size = tvb_reported_length(tvb);
11008 while (offset < data_size) {
11009 length = tvb_get_uint8(tvb, offset);
11010 if (length <= 0) break;
11012 type = tvb_get_uint8(tvb, offset + 1);
11014 entry_item = proto_tree_add_none_format(tree, hf_btcommon_eir_ad_entry, tvb, offset, length + 1, "%s",
11015 val_to_str_const(type, bthci_cmd_eir_data_type_vals, "Unknown"));
11016 entry_tree = proto_item_add_subtree(entry_item, ett_eir_ad_entry);
11018 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_length, tvb, offset, 1, ENC_NA);
11019 offset += 1;
11021 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_type, tvb, offset, 1, ENC_NA);
11022 offset += 1;
11023 length -= 1;
11025 offset_start = offset;
11027 switch (type) {
11028 case 0x01: /* Flags */
11029 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_reserved, tvb, offset, 1, ENC_NA);
11030 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_le_bredr_support_host, tvb, offset, 1, ENC_NA);
11031 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_le_bredr_support_controller, tvb, offset, 1, ENC_NA);
11032 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_bredr_not_support, tvb, offset, 1, ENC_NA);
11033 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_le_general_discoverable_mode, tvb, offset, 1, ENC_NA);
11034 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_le_limited_discoverable_mode, tvb, offset, 1, ENC_NA);
11035 offset += 1;
11037 break;
11038 case 0x02: /* 16-bit Service Class UUIDs (incomplete) */
11039 case 0x03: /* 16-bit Service Class UUIDs */
11040 case 0x14: /* List of 16-bit Service Solicitation UUIDs */
11041 end_offset = offset + length;
11042 while (offset < end_offset) {
11043 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_uuid_16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11044 offset += 2;
11047 break;
11048 case 0x04: /* 32-bit Service Class UUIDs (incomplete) */
11049 case 0x05: /* 32-bit Service Class UUIDs */
11050 case 0x1F: /* List of 32-bit Service Solicitation UUIDs */
11051 end_offset = offset + length;
11052 while (offset < end_offset) {
11053 uuid = get_bluetooth_uuid(tvb, offset, 4);
11054 if (uuid.bt_uuid) {
11055 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_uuid_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11056 proto_item_append_text(sub_item, " (%s)", val_to_str_ext_const(uuid.bt_uuid, &bluetooth_uuid_vals_ext, "Unknown"));
11057 } else {
11058 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_custom_uuid_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11059 proto_item_append_text(sub_item, " (%s)", print_bluetooth_uuid(pinfo->pool, &uuid));
11062 offset += 4;
11065 break;
11066 case 0x06: /* 128-bit Service Class UUIDs (incomplete) */
11067 case 0x07: /* 128-bit Service Class UUIDs */
11068 case 0x15: /* List of 128-bit Service Solicitation UUIDs */
11069 end_offset = offset + length;
11070 while (offset < end_offset) {
11071 uuid = get_bluetooth_uuid(tvb, offset, 16);
11072 if (uuid.bt_uuid) {
11073 sub_item = proto_tree_add_bytes_format_value(entry_tree, hf_btcommon_eir_ad_uuid_128, tvb, offset, 16, uuid.data, "%s", print_numeric_bluetooth_uuid(pinfo->pool, &uuid));
11074 proto_item_append_text(sub_item, " (%s)", val_to_str_ext_const(uuid.bt_uuid, &bluetooth_uuid_vals_ext, "Unknown"));
11076 else {
11077 sub_item = proto_tree_add_bytes_format_value(entry_tree, hf_btcommon_eir_ad_custom_uuid_128, tvb, offset, 16, uuid.data, "%s", print_numeric_bluetooth_uuid(pinfo->pool, &uuid));
11078 proto_item_append_text(sub_item, " (%s)", print_bluetooth_uuid(pinfo->pool, &uuid));
11081 offset += 16;
11084 break;
11086 case 0x08: /* Device Name (shortened) */
11087 case 0x09: /* Device Name */
11088 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_name, tvb, offset, length, ENC_UTF_8 | ENC_NA);
11089 proto_item_append_text(entry_item, ": %s", tvb_format_text(pinfo->pool, tvb, offset, length));
11090 if (!name || type == 0x09)
11091 name = tvb_get_string_enc(pinfo->pool, tvb, offset, length, ENC_UTF_8);
11092 offset += length;
11094 break;
11095 case 0x10: /* Device ID / Security Manager TK Value */
11096 if (length == 16) { /* little heuristic for recognize Security Manager TK Value */
11097 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, 16, ENC_NA);
11098 expert_add_info(pinfo, sub_item, &ei_eir_ad_undecoded);
11100 else if (length == 8) { /* DID */
11101 uint16_t vendor_id_source;
11102 uint16_t vendor_id;
11103 uint16_t product_id;
11104 const char *str_val;
11106 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_vendor_id_source, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11107 vendor_id_source = tvb_get_letohs(tvb, offset);
11108 offset += 2;
11110 if (vendor_id_source == DID_VENDOR_ID_SOURCE_BLUETOOTH_SIG) {
11111 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_vendor_id_bluetooth_sig, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11113 else if (vendor_id_source == DID_VENDOR_ID_SOURCE_USB_FORUM) {
11114 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_vendor_id_usb_forum, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11116 else {
11117 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_vendor_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11119 vendor_id = tvb_get_letohs(tvb, offset);
11120 offset += 2;
11122 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_product_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11123 product_id = tvb_get_letohs(tvb, offset);
11124 offset += 2;
11126 if (vendor_id_source == DID_VENDOR_ID_SOURCE_USB_FORUM) {
11127 str_val = val_to_str_ext_const(vendor_id << 16 | product_id, &ext_usb_products_vals, "Unknown");
11128 proto_item_append_text(sub_item, " (%s)", str_val);
11131 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11132 offset += 2;
11134 else {
11135 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, length, ENC_NA);
11136 expert_add_info(pinfo, sub_item, &ei_command_unknown_command);
11139 break;
11140 case 0x0A: /* Tx Power Level */
11141 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_tx_power, tvb, offset, 1, ENC_NA);
11142 offset += 1;
11144 break;
11145 case 0x0B: /* OOB Optional Data Length */
11146 /* From CSS v3.pdf */
11147 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_ssp_oob_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11148 offset += 2;
11150 break;
11151 case 0x0C: /* BD_ADDR */
11152 /* From CSS v3.pdf */
11153 offset = dissect_bd_addr(hf_btcommon_eir_ad_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_eir_ad_data->interface_id, bluetooth_eir_ad_data->adapter_id, bd_addr);
11154 has_bd_addr = true;
11155 break;
11157 case 0x0D: /* Class Of Device */
11158 call_dissector(btcommon_cod_handle, tvb_new_subset_length(tvb, offset, 3), pinfo, entry_tree);
11159 offset += 3;
11161 break;
11162 case 0x0E: /* Simple Pairing Hash C */
11163 case 0x1D: /* Simple Pairing Hash C-256 */
11164 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_hash_c, tvb, offset, 16, ENC_NA);
11165 offset += 16;
11167 break;
11168 case 0x0F: /* Simple Pairing Randomizer R */
11169 case 0x1E: /* Simple Pairing Randomizer R-256 */
11170 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_randomizer_r, tvb, offset, 16, ENC_NA);
11171 offset += 16;
11173 break;
11174 case 0x11: /* Security Manager Out of Band Flags */
11175 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_oob_flags_reserved, tvb, offset, 1, ENC_NA);
11176 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_oob_flags_address_type, tvb, offset, 1, ENC_NA);
11177 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_oob_flags_le_bredr_support, tvb, offset, 1, ENC_NA);
11178 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_oob_flags_le_supported_host, tvb, offset, 1, ENC_NA);
11179 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_oob_flags_data_present, tvb, offset, 1, ENC_NA);
11180 offset += 1;
11182 break;
11183 case 0x12: /* Peripheral Connection Interval Range */
11184 sub_item = proto_tree_add_item(tree, hf_btcommon_eir_ad_connection_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11185 proto_item_append_text(sub_item, " (%g msec)", tvb_get_letohs(tvb, offset) * 1.25);
11186 offset += 2;
11188 sub_item = proto_tree_add_item(tree, hf_btcommon_eir_ad_connection_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11189 proto_item_append_text(sub_item, " (%g msec)", tvb_get_letohs(tvb, offset) * 1.25);
11190 offset += 2;
11192 proto_item_append_text(entry_item, ": %g - %g msec", tvb_get_letohs(tvb, offset - 4) * 1.25, tvb_get_letohs(tvb, offset - 2) * 1.25);
11194 break;
11195 case 0x16: /* Service Data - 16 bit UUID */
11196 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_uuid_16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11197 offset += 2;
11199 if (length - 2 > 0) {
11200 uuid = get_bluetooth_uuid(tvb, offset-2, 2);
11201 if (!dissector_try_string(bluetooth_eir_ad_service_uuid, print_numeric_bluetooth_uuid(pinfo->pool, &uuid),
11202 tvb_new_subset_length(tvb, offset, length - 2), pinfo, entry_tree, bluetooth_eir_ad_data)) {
11203 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_service_data, tvb, offset, length - 2, ENC_NA);
11205 offset += length - 2;
11207 break;
11208 case 0x20: /* Service Data - 32 bit UUID */
11209 uuid = get_bluetooth_uuid(tvb, offset, 4);
11210 if (!dissector_try_string(bluetooth_eir_ad_service_uuid, print_numeric_bluetooth_uuid(pinfo->pool, &uuid),
11211 tvb_new_subset_length(tvb, offset + 4, length - 4), pinfo, entry_tree, bluetooth_eir_ad_data)) {
11212 if (uuid.bt_uuid) {
11213 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_uuid_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11214 proto_item_append_text(sub_item, " (%s)", val_to_str_ext_const(uuid.bt_uuid, &bluetooth_uuid_vals_ext, "Unknown"));
11216 else {
11217 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_custom_uuid_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11218 proto_item_append_text(sub_item, " (%s)", print_bluetooth_uuid(pinfo->pool, &uuid));
11221 offset += 4;
11223 if (length - 4 > 0) {
11224 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_service_data, tvb, offset, length - 4, ENC_NA);
11225 offset += length - 4;
11227 break;
11228 case 0x21: /* Service Data - 128 bit UUID */
11229 uuid = get_bluetooth_uuid(tvb, offset, 16);
11230 if (!dissector_try_string(bluetooth_eir_ad_service_uuid, print_numeric_bluetooth_uuid(pinfo->pool, &uuid),
11231 tvb_new_subset_length(tvb, offset + 16, length - 16), pinfo, entry_tree, bluetooth_eir_ad_data)) {
11232 if (uuid.bt_uuid) {
11233 sub_item = proto_tree_add_bytes_format_value(entry_tree, hf_btcommon_eir_ad_uuid_128, tvb, offset, 16, uuid.data, "%s", print_numeric_bluetooth_uuid(pinfo->pool, &uuid));
11234 proto_item_append_text(sub_item, " (%s)", val_to_str_ext_const(uuid.bt_uuid, &bluetooth_uuid_vals_ext, "Unknown"));
11236 else {
11237 sub_item = proto_tree_add_bytes_format_value(entry_tree, hf_btcommon_eir_ad_custom_uuid_128, tvb, offset, 16, uuid.data, "%s", print_numeric_bluetooth_uuid(pinfo->pool, &uuid));
11238 proto_item_append_text(sub_item, " (%s)", print_bluetooth_uuid(pinfo->pool, &uuid));
11241 offset += 16;
11243 if (length - 16 > 0) {
11244 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_service_data, tvb, offset, length - 16, ENC_NA);
11245 offset += length - 16;
11247 break;
11248 case 0x17: /* Public Target Address */
11249 case 0x18: /* Random Target Address */
11250 end_offset = offset + length;
11251 while (offset < end_offset) {
11252 offset = dissect_bd_addr(hf_btcommon_eir_ad_bd_addr, pinfo, entry_tree, tvb, offset, false, bluetooth_eir_ad_data->interface_id, bluetooth_eir_ad_data->adapter_id, NULL);
11255 break;
11256 case 0x19: /* Appearance */
11257 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_appearance, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11258 proto_item_append_text(entry_item, ": %s", val_to_str_const(tvb_get_letohs(tvb, offset), bthci_cmd_appearance_vals, "Unknown"));
11259 offset += 2;
11261 break;
11262 case 0x1A: /* Advertising Interval */
11263 /* From CSS v3.pdf */
11264 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_advertising_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11265 proto_item_append_text(sub_item, " (%g msec)", tvb_get_letohs(tvb, offset) * 0.625);
11266 offset += 2;
11268 break;
11269 case 0x1B: /* LE Bluetooth Device Address */
11270 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_bd_addr_reserved, tvb, offset, 1, ENC_NA);
11271 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_bd_addr_type, tvb, offset, 1, ENC_NA);
11272 offset += 1;
11274 offset = dissect_bd_addr(hf_btcommon_eir_ad_bd_addr, pinfo, entry_tree, tvb, offset, false, bluetooth_eir_ad_data->interface_id, bluetooth_eir_ad_data->adapter_id, NULL);
11276 break;
11277 case 0x1C: /* LE Role */
11278 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_role, tvb, offset, 1, ENC_NA);
11279 offset += 1;
11281 break;
11282 case 0x22: /* LE Secure Connections Confirmation Value" */
11283 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_secure_confirmation_value, tvb, offset, 16, ENC_NA);
11284 offset += 16;
11286 break;
11287 case 0x23: /* LE Secure Connections Random Value" */
11288 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_secure_random_value, tvb, offset, 16, ENC_NA);
11289 offset += 16;
11291 break;
11292 case 0x24: /* URI */
11293 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_uri, tvb, offset, length, ENC_UTF_8 | ENC_NA);
11294 offset += length;
11296 break;
11297 case 0x25: /* Indoor Positioning */
11298 if (length == 0)
11299 break;
11301 sub_item = proto_tree_add_bitmask(entry_tree, tvb, offset, hf_btcommon_eir_ad_ips_flags, ett_eir_ad_entry, hfx_btcommon_eir_ad_ips_flags, ENC_LITTLE_ENDIAN);
11302 flags = tvb_get_uint8(tvb, offset);
11303 offset += 1;
11305 if (flags & 0x01) {
11306 proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_latitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11307 offset += 4;
11309 proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_longitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11310 offset += 4;
11312 proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_local_north_coordinate, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11313 offset += 2;
11315 proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_local_east_coordinate, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11316 offset += 2;
11319 if (flags & 0x04) {
11320 proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_tx_power_level, tvb, offset, 1, ENC_NA);
11321 offset += 1;
11324 if (flags & 0x08) {
11325 proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11326 offset += 2;
11329 if (flags & 0x10) {
11330 proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_floor_number, tvb, offset, 1, ENC_NA);
11331 offset += 1;
11334 if (flags & 0x20) {
11335 proto_tree_add_bitmask(tree, tvb, offset, hf_btcommon_eir_ad_ips_uncertainty, ett_eir_ad_entry, hfx_btcommon_eir_ad_ips_uncertainty, ENC_NA);
11336 offset += 1;
11339 if (flags & 0xC0) {
11340 expert_add_info(pinfo, sub_item, &ei_eir_ad_not_used);
11343 break;
11344 case 0x26: /* Transport Discovery Data */
11345 end_offset = offset + length;
11346 while (offset < end_offset) {
11347 uint8_t organization_id;
11349 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_tds_organization_id, tvb, offset, 1, ENC_NA);
11350 organization_id = tvb_get_uint8(tvb, offset);
11351 offset += 1;
11353 if (p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_TDS_ORGANIZATION_ID) == NULL) {
11354 uint8_t *value_data;
11356 value_data = wmem_new(wmem_file_scope(), uint8_t);
11357 *value_data = organization_id;
11359 p_add_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_TDS_ORGANIZATION_ID, value_data);
11362 proto_tree_add_bitmask(entry_tree, tvb, offset, hf_btcommon_eir_ad_tds_flags, ett_eir_ad_entry, hfx_btcommon_eir_ad_tds_flags, ENC_NA);
11363 offset += 1;
11365 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_tds_data_length, tvb, offset, 1, ENC_NA);
11366 sub_length = tvb_get_uint8(tvb, offset);
11367 offset += 1;
11369 if (length > 3 && sub_length > length - 3) {
11370 expert_add_info(pinfo, sub_item, &ei_eir_ad_invalid_length);
11373 if (sub_length > 0) {
11374 tvbuff_t *new_tvb;
11376 new_tvb = tvb_new_subset_length(tvb, offset, sub_length);
11378 if (!dissector_try_uint_new(bluetooth_eir_ad_tds_organization_id, organization_id, new_tvb, pinfo, tree, true, bluetooth_eir_ad_data)) {
11379 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_tds_data, tvb, offset, sub_length, ENC_NA);
11380 expert_add_info(pinfo, sub_item, &ei_eir_ad_undecoded);
11383 offset += length;
11386 length -= (3 + sub_length);
11389 break;
11390 case 0x27: {/* LE Supported Features */
11391 for (uint8_t i=0; (tvb_captured_length_remaining(tvb, offset) > 0) && (i < 8); i++) {
11392 proto_tree_add_bitmask(entry_tree, tvb, offset, hf_btcommon_eir_ad_le_features, ett_eir_ad_le_features, hfx_btcommon_eir_ad_le_features[i], ENC_NA);
11393 offset += 1;
11396 sub_length = tvb_captured_length_remaining(tvb, offset);
11397 if (sub_length > 0) {
11398 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, sub_length, ENC_NA);
11399 expert_add_info(pinfo, sub_item, &ei_eir_ad_unknown);
11400 offset += sub_length;
11403 break;
11404 case 0x28: /* Channel Map Update Indication */
11405 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_channel_map, tvb, offset, 5, ENC_NA);
11406 sub_tree = proto_item_add_subtree(sub_item, ett_le_channel_map);
11408 call_dissector(btcommon_le_channel_map_handle, tvb_new_subset_length(tvb, offset, 5), pinfo, sub_tree);
11409 offset += 5;
11411 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_instant, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11412 offset += 2;
11414 break;
11415 case 0x3D: /* 3D Information Data */
11416 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_factory_test_mode, tvb, offset, 1, ENC_NA);
11417 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_reserved, tvb, offset, 1, ENC_NA);
11418 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_send_battery_level_report_on_startup, tvb, offset, 1, ENC_NA);
11419 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_battery_level_reporting, tvb, offset, 1, ENC_NA);
11420 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_association_notification, tvb, offset, 1, ENC_NA);
11421 offset += 1;
11423 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_path_loss_threshold, tvb, offset, 1, ENC_NA);
11424 offset += 1;
11426 break;
11427 case 0x29: /* PB-ADV */
11428 if (btmesh_pbadv_handle) {
11429 call_dissector(btmesh_pbadv_handle, tvb_new_subset_length(tvb, offset, length), pinfo, proto_tree_get_root(tree));
11430 } else {
11431 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_mesh_pbadv, tvb, offset, length, ENC_NA);
11433 offset += length;
11435 break;
11436 case 0x2a: /* Mesh Message */
11437 if (btmesh_handle) {
11438 call_dissector(btmesh_handle, tvb_new_subset_length(tvb, offset, length), pinfo, proto_tree_get_root(tree));
11439 } else {
11440 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_mesh_msg, tvb, offset, length, ENC_NA);
11442 offset += length;
11444 break;
11445 case 0x2b: /* Mesh Beacon */
11446 if (btmesh_beacon_handle) {
11447 call_dissector(btmesh_beacon_handle, tvb_new_subset_length(tvb, offset, length), pinfo, proto_tree_get_root(tree));
11448 } else {
11449 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_mesh_beacon, tvb, offset, length, ENC_NA);
11451 offset += length;
11453 break;
11454 case 0x2c: /* BIGInfo */
11455 sub_item = proto_tree_add_item_ret_uint(entry_tree, hf_btcommon_eir_ad_biginfo_big_offset, tvb, offset, 4, ENC_LITTLE_ENDIAN, &interval);
11456 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_big_offset_units, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11457 proto_item_append_text(sub_item, " (%u usec)", interval * ((tvb_get_uint32(tvb, offset, ENC_LITTLE_ENDIAN) & 0x00004000) != 0 ? 300 : 30));
11458 sub_item = proto_tree_add_item_ret_uint(entry_tree, hf_btcommon_eir_ad_biginfo_iso_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN, &interval);
11459 proto_item_append_text(sub_item, " (%g msec)", interval * 1.25);
11460 proto_tree_add_item_ret_uint(entry_tree, hf_btcommon_eir_ad_biginfo_num_bis, tvb, offset, 4, ENC_LITTLE_ENDIAN, &num_bis);
11461 offset += 4;
11462 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_nse, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11463 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_bn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11464 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_sub_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11465 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_pto, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11466 offset += 4;
11467 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_bis_spacing, tvb, offset, 3, ENC_LITTLE_ENDIAN);
11468 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_irc, tvb, offset, 3, ENC_LITTLE_ENDIAN);
11469 offset += 3;
11470 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_max_pdu, tvb, offset, 1, ENC_NA);
11471 offset += 1;
11472 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_rfu, tvb, offset, 1, ENC_NA);
11473 offset += 1;
11474 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_seed_access_address, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11475 sub_tree = proto_item_add_subtree(sub_item, ett_eir_ad_biginfo_seedaa);
11476 for (uint32_t bis = 0; bis <= num_bis; ++bis) {
11477 uint32_t aa = tvb_get_uint32(tvb, offset, ENC_LITTLE_ENDIAN);
11478 uint8_t d = (35 * bis + 42) & 0x7f;
11479 uint32_t dw = (0xfc000000 * (d & 1)) | ((d & 0x02) << 24) | ((d & 0x40) << 18) | ((d & 0x02) << 22) | ((d & 0x30) << 16) | ((d & 0x0c) << 15);
11480 aa ^= dw;
11481 proto_tree_add_uint(sub_tree, bis ? hf_btcommon_eir_ad_biginfo_bis_access_address : hf_btcommon_eir_ad_biginfo_big_control_access_address, tvb, 0, 0, aa);
11483 offset += 4;
11484 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_sdu_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11485 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_max_sdu, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11486 offset += 4;
11487 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_base_crc_init, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11488 offset += 2;
11489 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_channel_map, tvb, offset, 5, ENC_LITTLE_ENDIAN);
11490 sub_tree = proto_item_add_subtree(sub_item, ett_le_channel_map);
11491 call_dissector(btcommon_le_channel_map_handle, tvb_new_subset_length(tvb, offset, 5), pinfo, sub_tree);
11492 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_phy, tvb, offset, 5, ENC_LITTLE_ENDIAN);
11493 offset += 5;
11494 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_bis_payload_count, tvb, offset, 5, ENC_LITTLE_ENDIAN);
11495 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_framing, tvb, offset, 5, ENC_LITTLE_ENDIAN);
11496 offset += 5;
11497 if (length >= 57) {
11498 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_giv, tvb, offset, 8, ENC_NA);
11499 offset += 8;
11500 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_gskd, tvb, offset, 16, ENC_NA);
11501 offset += 16;
11504 break;
11505 case 0x2d: /* Broadcast Code */
11506 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_broadcast_code, tvb, offset, length, ENC_UTF_8 | ENC_NA);
11507 proto_item_append_text(entry_item, ": %s", tvb_format_text(pinfo->pool, tvb, offset, length));
11508 offset += length;
11510 break;
11511 case 0x2e: /* Resolvable Set Identifier */
11512 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_rsi, tvb, offset, length, ENC_NA);
11513 offset += length;
11515 break;
11516 case 0x30: /* Broadcast Name */
11517 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_broadcast_name, tvb, offset, length, ENC_UTF_8 | ENC_NA);
11518 offset += length;
11520 break;
11521 case 0xFF: /* Manufacturer Specific */ {
11522 uint16_t company_id;
11524 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11525 company_id = tvb_get_letohs(tvb, offset);
11526 offset += 2;
11527 length -= 2;
11529 if (p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_MANUFACTURER_COMPANY_ID) == NULL) {
11530 uint16_t *value_data;
11532 value_data = wmem_new(wmem_file_scope(), uint16_t);
11533 *value_data = company_id;
11535 p_add_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_MANUFACTURER_COMPANY_ID, value_data);
11538 if (company_id == 0x000F && tvb_get_uint8(tvb, offset) == 0) { /* 3DS profile Legacy Devices */
11539 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_fixed, tvb, offset, 1, ENC_NA);
11540 offset += 1;
11542 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_test_mode, tvb, offset, 1, ENC_NA);
11543 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_fixed_6, tvb, offset, 1, ENC_NA);
11544 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_ignored_5, tvb, offset, 1, ENC_NA);
11545 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_fixed_4, tvb, offset, 1, ENC_NA);
11546 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_ignored_1_3, tvb, offset, 1, ENC_NA);
11547 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_3d_capable_tv, tvb, offset, 1, ENC_NA);
11548 offset += 1;
11550 proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_path_loss_threshold, tvb, offset, 1, ENC_NA);
11551 offset += 1;
11552 } else {
11553 tvbuff_t *new_tvb;
11555 new_tvb = tvb_new_subset_length(tvb, offset, length);
11557 if (!dissector_try_uint_new(bluetooth_eir_ad_manufacturer_company_id, company_id, new_tvb, pinfo, entry_tree, true, bluetooth_eir_ad_data)) {
11558 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, length, ENC_NA);
11559 expert_add_info(pinfo, sub_item, &ei_eir_ad_undecoded);
11562 offset += length;
11565 break;
11566 default:
11567 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, length, ENC_NA);
11568 expert_add_info(pinfo, sub_item, &ei_eir_ad_unknown);
11569 offset += length;
11572 if (offset - offset_start > 0 && offset - offset_start < length) {
11573 sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, length - (offset - offset_start), ENC_NA);
11574 expert_add_info(pinfo, sub_item, &ei_eir_ad_unknown);
11575 offset += length - (offset - offset_start);
11579 if (tvb_reported_length_remaining(tvb, offset) > 0) {
11580 proto_tree_add_item(tree, hf_btcommon_eir_ad_unused, tvb, offset, tvb_reported_length_remaining(tvb, offset), ENC_NA);
11581 offset = tvb_reported_length(tvb);
11584 if (bluetooth_eir_ad_data && bluetooth_eir_ad_data->bd_addr && name && have_tap_listener(bluetooth_device_tap)) {
11585 bluetooth_device_tap_t *tap_device;
11587 tap_device = wmem_new(pinfo->pool, bluetooth_device_tap_t);
11588 tap_device->interface_id = bluetooth_eir_ad_data->interface_id;
11589 tap_device->adapter_id = bluetooth_eir_ad_data->adapter_id;
11590 memcpy(tap_device->bd_addr, bluetooth_eir_ad_data->bd_addr, 6);
11591 tap_device->has_bd_addr = true;
11592 tap_device->is_local = false;
11593 tap_device->type = BLUETOOTH_DEVICE_NAME;
11594 tap_device->data.name = name;
11595 tap_queue_packet(bluetooth_device_tap, pinfo, tap_device);
11598 if (has_bd_addr && name && have_tap_listener(bluetooth_device_tap)) {
11599 bluetooth_device_tap_t *tap_device;
11601 tap_device = wmem_new(pinfo->pool, bluetooth_device_tap_t);
11602 if (bluetooth_eir_ad_data) {
11603 tap_device->interface_id = bluetooth_eir_ad_data->interface_id;
11604 tap_device->adapter_id = bluetooth_eir_ad_data->adapter_id;
11605 } else {
11606 tap_device->interface_id = HCI_INTERFACE_DEFAULT;
11607 tap_device->adapter_id = HCI_ADAPTER_DEFAULT;
11609 memcpy(tap_device->bd_addr, bd_addr, 6);
11610 tap_device->has_bd_addr = true;
11611 tap_device->is_local = false;
11612 tap_device->type = BLUETOOTH_DEVICE_NAME;
11613 tap_device->data.name = name;
11614 tap_queue_packet(bluetooth_device_tap, pinfo, tap_device);
11617 return offset + data_size;
11620 static int
11621 dissect_btcommon_cod(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
11623 proto_item *cod_item;
11624 proto_item *cod_tree;
11625 uint16_t major_service_classes;
11626 uint8_t major_device_class;
11627 uint8_t minor_device_class;
11628 const char *minor_device_class_name;
11629 int offset = 0;
11631 cod_item = proto_tree_add_item(tree, hf_btcommon_cod_class_of_device, tvb, offset, 3, ENC_LITTLE_ENDIAN);
11632 cod_tree = proto_item_add_subtree(cod_item, ett_cod);
11634 major_device_class = tvb_get_uint8(tvb, offset + 1) & 0x1F;
11635 minor_device_class = tvb_get_uint8(tvb, offset) >> 2;
11637 switch(major_device_class) {
11638 case 0x01: /* Computer */
11639 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_computer, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11640 minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_computer_vals_ext, "Unknown");
11641 break;
11642 case 0x02: /* Phone */
11643 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_phone, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11644 minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_phone_vals_ext, "Unknown");
11645 break;
11646 case 0x03: /* LAN/Network Access Point */
11647 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_lan_net_load_factor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11648 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_lan_net_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11649 minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_lan_net_load_factor_vals_ext, "Unknown");
11650 break;
11651 case 0x04: /* Audio/Video */
11652 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_audio_video, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11653 minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_audio_video_vals_ext, "Unknown");
11654 break;
11655 case 0x05: /* Peripheral */
11656 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_peripheral_class, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11657 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_peripheral_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11658 minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_peripheral_class_vals_ext, "Unknown");
11659 break;
11660 case 0x06: /* Imaging */
11661 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_imaging_class_printer, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11662 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_imaging_class_scanner, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11663 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_imaging_class_camera, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11664 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_imaging_class_display, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11666 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_imaging_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11667 minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, "Unknown");
11668 break;
11669 case 0x07: /* Wearable */
11670 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_wearable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11671 minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_wearable_vals_ext, "Unknown");
11672 break;
11673 case 0x08: /* Toy */
11674 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_toy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11675 minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_toy_vals_ext, "Unknown");
11676 break;
11677 case 0x09: /* Health */
11678 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_health, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11679 minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_health_vals_ext, "Unknown");
11680 break;
11681 default:
11682 minor_device_class_name = "Unknown";
11683 proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_unknown, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11686 proto_tree_add_item(cod_tree, hf_btcommon_cod_format_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11687 offset += 1;
11689 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_information, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11690 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_telephony, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11691 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_audio, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11692 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_object_transfer, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11693 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_capturing, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11694 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_rendering, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11695 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_networking, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11696 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_positioning, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11697 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11698 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_le_audio, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11699 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_limited_discoverable_mode, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11700 major_service_classes = tvb_get_letohs(tvb, offset) >> 5;
11702 proto_tree_add_item(cod_tree, hf_btcommon_cod_major_device_class, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11703 offset += 2;
11705 proto_item_append_text(cod_item, " (%s:%s - services:",
11706 val_to_str_ext_const(major_device_class, &bthci_cmd_cod_major_device_class_vals_ext, "Unknown"),
11707 minor_device_class_name);
11709 if (major_service_classes & 0x001) proto_item_append_text(cod_item, " LimitedDiscoverableMode");
11710 if (major_service_classes & 0x008) proto_item_append_text(cod_item, " Positioning");
11711 if (major_service_classes & 0x010) proto_item_append_text(cod_item, " Networking");
11713 if (major_service_classes & 0x020) proto_item_append_text(cod_item, " Rendering");
11714 if (major_service_classes & 0x040) proto_item_append_text(cod_item, " Capturing");
11715 if (major_service_classes & 0x080) proto_item_append_text(cod_item, " ObjectTransfer");
11716 if (major_service_classes & 0x100) proto_item_append_text(cod_item, " Audio");
11717 if (major_service_classes & 0x200) proto_item_append_text(cod_item, " Telephony");
11718 if (major_service_classes & 0x400) proto_item_append_text(cod_item, " Information");
11720 proto_item_append_text(cod_item, ")");
11722 return offset;
11725 static int
11726 dissect_btcommon_ad(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11728 proto_item *main_item;
11729 proto_tree *main_tree;
11731 main_item = proto_tree_add_item(tree, hf_btcommon_eir_ad_advertising_data, tvb, 0, -1, ENC_NA);
11732 main_tree = proto_item_add_subtree(main_item, ett_eir_ad);
11734 return dissect_eir_ad_data(tvb, pinfo, main_tree, (bluetooth_eir_ad_data_t *) data);
11737 static int
11738 dissect_btcommon_eir(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11740 proto_item *main_item;
11741 proto_tree *main_tree;
11743 main_item = proto_tree_add_item(tree, hf_btcommon_eir_ad_extended_inquiry_response_data, tvb, 0, -1, ENC_NA);
11744 main_tree = proto_item_add_subtree(main_item, ett_eir_ad);
11746 return dissect_eir_ad_data(tvb, pinfo, main_tree, (bluetooth_eir_ad_data_t *) data);
11749 static int
11750 dissect_btcommon_le_channel_map(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data)
11752 int offset = 0;
11753 int *reserved_bits_offset = (int *)data;
11755 proto_tree_add_item(tree, hf_btcommon_le_channel_map_0, tvb, offset, 1, ENC_NA);
11756 proto_tree_add_item(tree, hf_btcommon_le_channel_map_1, tvb, offset, 1, ENC_NA);
11757 proto_tree_add_item(tree, hf_btcommon_le_channel_map_2, tvb, offset, 1, ENC_NA);
11758 proto_tree_add_item(tree, hf_btcommon_le_channel_map_3, tvb, offset, 1, ENC_NA);
11759 proto_tree_add_item(tree, hf_btcommon_le_channel_map_4, tvb, offset, 1, ENC_NA);
11760 proto_tree_add_item(tree, hf_btcommon_le_channel_map_5, tvb, offset, 1, ENC_NA);
11761 proto_tree_add_item(tree, hf_btcommon_le_channel_map_6, tvb, offset, 1, ENC_NA);
11762 proto_tree_add_item(tree, hf_btcommon_le_channel_map_7, tvb, offset, 1, ENC_NA);
11763 offset += 1;
11765 proto_tree_add_item(tree, hf_btcommon_le_channel_map_8, tvb, offset, 1, ENC_NA);
11766 proto_tree_add_item(tree, hf_btcommon_le_channel_map_9, tvb, offset, 1, ENC_NA);
11767 proto_tree_add_item(tree, hf_btcommon_le_channel_map_10, tvb, offset, 1, ENC_NA);
11768 proto_tree_add_item(tree, hf_btcommon_le_channel_map_11, tvb, offset, 1, ENC_NA);
11769 proto_tree_add_item(tree, hf_btcommon_le_channel_map_12, tvb, offset, 1, ENC_NA);
11770 proto_tree_add_item(tree, hf_btcommon_le_channel_map_13, tvb, offset, 1, ENC_NA);
11771 proto_tree_add_item(tree, hf_btcommon_le_channel_map_14, tvb, offset, 1, ENC_NA);
11772 proto_tree_add_item(tree, hf_btcommon_le_channel_map_15, tvb, offset, 1, ENC_NA);
11773 offset += 1;
11775 proto_tree_add_item(tree, hf_btcommon_le_channel_map_16, tvb, offset, 1, ENC_NA);
11776 proto_tree_add_item(tree, hf_btcommon_le_channel_map_17, tvb, offset, 1, ENC_NA);
11777 proto_tree_add_item(tree, hf_btcommon_le_channel_map_18, tvb, offset, 1, ENC_NA);
11778 proto_tree_add_item(tree, hf_btcommon_le_channel_map_19, tvb, offset, 1, ENC_NA);
11779 proto_tree_add_item(tree, hf_btcommon_le_channel_map_20, tvb, offset, 1, ENC_NA);
11780 proto_tree_add_item(tree, hf_btcommon_le_channel_map_21, tvb, offset, 1, ENC_NA);
11781 proto_tree_add_item(tree, hf_btcommon_le_channel_map_22, tvb, offset, 1, ENC_NA);
11782 proto_tree_add_item(tree, hf_btcommon_le_channel_map_23, tvb, offset, 1, ENC_NA);
11783 offset += 1;
11785 proto_tree_add_item(tree, hf_btcommon_le_channel_map_24, tvb, offset, 1, ENC_NA);
11786 proto_tree_add_item(tree, hf_btcommon_le_channel_map_25, tvb, offset, 1, ENC_NA);
11787 proto_tree_add_item(tree, hf_btcommon_le_channel_map_26, tvb, offset, 1, ENC_NA);
11788 proto_tree_add_item(tree, hf_btcommon_le_channel_map_27, tvb, offset, 1, ENC_NA);
11789 proto_tree_add_item(tree, hf_btcommon_le_channel_map_28, tvb, offset, 1, ENC_NA);
11790 proto_tree_add_item(tree, hf_btcommon_le_channel_map_29, tvb, offset, 1, ENC_NA);
11791 proto_tree_add_item(tree, hf_btcommon_le_channel_map_30, tvb, offset, 1, ENC_NA);
11792 proto_tree_add_item(tree, hf_btcommon_le_channel_map_31, tvb, offset, 1, ENC_NA);
11793 offset += 1;
11795 proto_tree_add_item(tree, hf_btcommon_le_channel_map_32, tvb, offset, 1, ENC_NA);
11796 proto_tree_add_item(tree, hf_btcommon_le_channel_map_33, tvb, offset, 1, ENC_NA);
11797 proto_tree_add_item(tree, hf_btcommon_le_channel_map_34, tvb, offset, 1, ENC_NA);
11798 proto_tree_add_item(tree, hf_btcommon_le_channel_map_35, tvb, offset, 1, ENC_NA);
11799 proto_tree_add_item(tree, hf_btcommon_le_channel_map_36, tvb, offset, 1, ENC_NA);
11801 if (reserved_bits_offset) {
11802 *reserved_bits_offset = offset;
11803 } else {
11804 proto_tree_add_item(tree, hf_btcommon_le_channel_map_37, tvb, offset, 1, ENC_NA);
11805 proto_tree_add_item(tree, hf_btcommon_le_channel_map_38, tvb, offset, 1, ENC_NA);
11806 proto_tree_add_item(tree, hf_btcommon_le_channel_map_39, tvb, offset, 1, ENC_NA);
11809 offset += 1;
11811 return offset;
11814 void
11815 proto_register_btcommon(void)
11817 expert_module_t *expert_module;
11819 static hf_register_info hf[] = {
11820 { &hf_btcommon_eir_ad_extended_inquiry_response_data,
11821 { "Extended Inquiry Response Data", "btcommon.eir_ad.extended_inquiry_response_data",
11822 FT_NONE, BASE_NONE, NULL, 0x0,
11823 NULL, HFILL }
11825 { &hf_btcommon_eir_ad_advertising_data,
11826 { "Advertising Data", "btcommon.eir_ad.advertising_data",
11827 FT_NONE, BASE_NONE, NULL, 0x0,
11828 NULL, HFILL }
11830 { &hf_btcommon_eir_ad_entry,
11831 { "Entry", "btcommon.eir_ad.entry",
11832 FT_NONE, BASE_NONE, NULL, 0x0,
11833 NULL, HFILL }
11835 { &hf_btcommon_eir_ad_unused,
11836 { "Unused", "btcommon.eir_ad.unused",
11837 FT_NONE, BASE_NONE, NULL, 0x0,
11838 NULL, HFILL }
11840 { &hf_btcommon_eir_ad_data,
11841 {"Data", "btcommon.eir_ad.entry.data",
11842 FT_BYTES, BASE_NONE, NULL, 0x0,
11843 NULL, HFILL}
11845 { &hf_btcommon_eir_ad_service_data,
11846 {"Service Data", "btcommon.eir_ad.entry.service_data",
11847 FT_BYTES, BASE_NONE, NULL, 0x0,
11848 NULL, HFILL}
11850 { &hf_btcommon_eir_ad_length,
11851 { "Length", "btcommon.eir_ad.entry.length",
11852 FT_UINT8, BASE_DEC, NULL, 0x0,
11853 NULL, HFILL }
11855 { &hf_btcommon_eir_ad_type,
11856 { "Type", "btcommon.eir_ad.entry.type",
11857 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_eir_data_type_vals_ext, 0x0,
11858 NULL, HFILL }
11860 { &hf_btcommon_eir_ad_company_id,
11861 { "Company ID", "btcommon.eir_ad.entry.company_id",
11862 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
11863 NULL, HFILL }
11865 { &hf_btcommon_eir_ad_flags_reserved,
11866 { "Reserved", "btcommon.eir_ad.entry.flags.reserved",
11867 FT_UINT8, BASE_HEX, NULL, 0xE0,
11868 NULL, HFILL }
11870 { &hf_btcommon_eir_ad_flags_le_bredr_support_host,
11871 { "Simultaneous LE and BR/EDR to Same Device Capable (Host)", "btcommon.eir_ad.entry.flags.le_bredr_support_host",
11872 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
11873 NULL, HFILL }
11875 { &hf_btcommon_eir_ad_flags_le_bredr_support_controller,
11876 { "Simultaneous LE and BR/EDR to Same Device Capable (Controller)", "btcommon.eir_ad.entry.flags.le_bredr_support_controller",
11877 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
11878 NULL, HFILL }
11880 { &hf_btcommon_eir_ad_flags_bredr_not_support,
11881 { "BR/EDR Not Supported", "btcommon.eir_ad.entry.flags.bredr_not_supported",
11882 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
11883 NULL, HFILL }
11885 { &hf_btcommon_eir_ad_flags_le_general_discoverable_mode,
11886 { "LE General Discoverable Mode", "btcommon.eir_ad.entry.flags.le_general_discoverable_mode",
11887 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
11888 NULL, HFILL }
11890 { &hf_btcommon_eir_ad_flags_le_limited_discoverable_mode,
11891 { "LE Limited Discoverable Mode", "btcommon.eir_ad.entry.flags.le_limited_discoverable_mode",
11892 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
11893 NULL, HFILL }
11895 { &hf_btcommon_eir_ad_uuid_16,
11896 { "UUID 16", "btcommon.eir_ad.entry.uuid_16",
11897 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_uuid_vals_ext, 0x0,
11898 NULL, HFILL }
11900 { &hf_btcommon_eir_ad_uuid_32,
11901 { "UUID 32", "btcommon.eir_ad.entry.uuid_32",
11902 FT_UINT32, BASE_HEX | BASE_EXT_STRING, &bluetooth_uuid_vals_ext, 0x0,
11903 NULL, HFILL }
11905 { &hf_btcommon_eir_ad_uuid_128,
11906 { "UUID 128", "btcommon.eir_ad.entry.uuid_128",
11907 FT_BYTES, BASE_NONE, NULL, 0x0,
11908 NULL, HFILL }
11910 { &hf_btcommon_eir_ad_custom_uuid_32,
11911 { "Custom UUID", "btcommon.eir_ad.entry.custom_uuid_32",
11912 FT_UINT32, BASE_HEX, NULL, 0x0,
11913 NULL, HFILL }
11915 { &hf_btcommon_eir_ad_custom_uuid_128,
11916 { "Custom UUID", "btcommon.eir_ad.entry.custom_uuid_128",
11917 FT_BYTES, BASE_NONE, NULL, 0x0,
11918 NULL, HFILL }
11920 { &hf_btcommon_eir_ad_name,
11921 { "Device Name", "btcommon.eir_ad.entry.device_name",
11922 FT_STRING, BASE_NONE, NULL, 0x0,
11923 NULL, HFILL }
11925 { &hf_btcommon_eir_ad_tx_power,
11926 {"Power Level (dBm)", "btcommon.eir_ad.entry.power_level",
11927 FT_INT8, BASE_DEC, NULL, 0x0,
11928 NULL, HFILL}
11930 { &hf_btcommon_eir_ad_ssp_oob_length,
11931 { "SSP OOB Length", "btcommon.eir_ad.entry.ssp_oob_length",
11932 FT_UINT16, BASE_DEC, NULL, 0x0,
11933 NULL, HFILL }
11935 { &hf_btcommon_eir_ad_bd_addr,
11936 { "BD_ADDR", "btcommon.eir_ad.entry.bd_addr",
11937 FT_ETHER, BASE_NONE, NULL, 0x0,
11938 NULL, HFILL }
11940 { &hf_btcommon_eir_ad_le_bd_addr_reserved,
11941 { "Reserved", "btcommon.eir_ad.entry.le_bd_addr.reserved",
11942 FT_UINT8, BASE_HEX, NULL, 0xFE,
11943 NULL, HFILL }
11945 { &hf_btcommon_eir_ad_le_bd_addr_type,
11946 { "Type", "btcommon.eir_ad.entry.le_bd_addr.type",
11947 FT_UINT8, BASE_HEX, VALS(bluetooth_address_type_vals), 0x01,
11948 NULL, HFILL }
11950 { &hf_btcommon_eir_ad_le_role,
11951 { "Type", "btcommon.eir_ad.entry.le_role",
11952 FT_UINT8, BASE_HEX, VALS(le_role_vals), 0,
11953 NULL, HFILL }
11955 { &hf_btcommon_eir_ad_did_vendor_id_source,
11956 { "Vendor ID Source", "btcommon.eir_ad.entry.did.vendor_id_source",
11957 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &did_vendor_id_source_vals_ext, 0,
11958 NULL, HFILL }
11960 { &hf_btcommon_eir_ad_did_vendor_id,
11961 { "Vendor ID", "btcommon.eir_ad.entry.did.vendor_id",
11962 FT_UINT16, BASE_HEX, NULL, 0x0,
11963 NULL, HFILL }
11965 { &hf_btcommon_eir_ad_did_vendor_id_bluetooth_sig,
11966 { "Vendor ID", "btcommon.eir_ad.entry.did.vendor_id",
11967 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
11968 NULL, HFILL }
11970 { &hf_btcommon_eir_ad_did_vendor_id_usb_forum,
11971 { "Vendor ID", "btcommon.eir_ad.entry.did.vendor_id",
11972 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &ext_usb_vendors_vals, 0x0,
11973 NULL, HFILL }
11975 { &hf_btcommon_eir_ad_did_product_id,
11976 { "Product ID", "btcommon.eir_ad.entry.did.product_id",
11977 FT_UINT16, BASE_HEX, NULL, 0x0,
11978 NULL, HFILL }
11980 { &hf_btcommon_eir_ad_did_version,
11981 { "Version", "btcommon.eir_ad.entry.did.version",
11982 FT_UINT16, BASE_HEX, NULL, 0x0,
11983 NULL, HFILL }
11985 { &hf_btcommon_eir_ad_3ds_association_notification,
11986 { "3DS Association Notification", "btcommon.eir_ad.entry.3ds.association_notification",
11987 FT_BOOLEAN, 8, NULL, 0x01,
11988 NULL, HFILL }
11990 { &hf_btcommon_eir_ad_3ds_battery_level_reporting,
11991 { "3DS Battery Level Reporting", "btcommon.eir_ad.entry.3ds.battery_level_reporting",
11992 FT_BOOLEAN, 8, NULL, 0x02,
11993 NULL, HFILL }
11995 { &hf_btcommon_eir_ad_3ds_send_battery_level_report_on_startup,
11996 { "3DS Send Battery Level Report on Startup", "btcommon.eir_ad.entry.3ds.send_battery_level_report_on_startup",
11997 FT_BOOLEAN, 8, NULL, 0x04,
11998 NULL, HFILL }
12000 { &hf_btcommon_eir_ad_3ds_reserved,
12001 { "Reserved", "btcommon.eir_ad.entry.3ds.reserved",
12002 FT_BOOLEAN, 8, NULL, 0x78,
12003 NULL, HFILL }
12005 { &hf_btcommon_eir_ad_3ds_factory_test_mode,
12006 { "3DS Factory Test Mode", "btcommon.eir_ad.entry.3ds.factory_test_mode",
12007 FT_BOOLEAN, 8, NULL, 0x80,
12008 NULL, HFILL }
12010 { &hf_btcommon_eir_ad_3ds_path_loss_threshold,
12011 { "3DS Path Loss Threshold", "btcommon.eir_ad.entry.3ds.path_loss_threshold",
12012 FT_UINT8, BASE_DEC, NULL, 0x00,
12013 NULL, HFILL }
12015 { &hf_btcommon_eir_ad_3ds_legacy_fixed,
12016 { "3DS Legacy Fixed", "btcommon.eir_ad.entry.3ds_legacy.fixed_byte",
12017 FT_UINT8, BASE_DEC, NULL, 0x00,
12018 NULL, HFILL }
12020 { &hf_btcommon_eir_ad_3ds_legacy_3d_capable_tv,
12021 { "3DS Legacy Capable TV", "btcommon.eir_ad.entry.3ds_legacy.capable_tv",
12022 FT_BOOLEAN, 8, NULL, 0x01,
12023 NULL, HFILL }
12025 { &hf_btcommon_eir_ad_3ds_legacy_ignored_1_3,
12026 { "3DS Legacy Ignored", "btcommon.eir_ad.entry.3ds_legacy.ignored.1_3",
12027 FT_BOOLEAN, 8, NULL, 0x0E,
12028 NULL, HFILL }
12030 { &hf_btcommon_eir_ad_3ds_legacy_fixed_4,
12031 { "3DS Legacy Fixed", "btcommon.eir_ad.entry.3ds_legacy.fixed.4",
12032 FT_BOOLEAN, 8, NULL, 0x10,
12033 NULL, HFILL }
12035 { &hf_btcommon_eir_ad_3ds_legacy_ignored_5,
12036 { "3DS Legacy Ignored", "btcommon.eir_ad.entry.3ds_legacy.ignored.5",
12037 FT_BOOLEAN, 8, NULL, 0x20,
12038 NULL, HFILL }
12040 { &hf_btcommon_eir_ad_3ds_legacy_fixed_6,
12041 { "3DS Legacy Fixed", "btcommon.eir_ad.entry.3ds_legacy.fixed.6",
12042 FT_BOOLEAN, 8, NULL, 0x40,
12043 NULL, HFILL }
12045 { &hf_btcommon_eir_ad_3ds_legacy_test_mode,
12046 { "3DS Legacy Test Mode", "btcommon.eir_ad.entry.3ds_legacy.test_mode",
12047 FT_BOOLEAN, 8, NULL, 0x80,
12048 NULL, HFILL }
12050 { &hf_btcommon_eir_ad_3ds_legacy_path_loss_threshold,
12051 { "3DS Legacy Path Loss Threshold", "btcommon.eir_ad.entry.3ds_legacy.path_loss_threshold",
12052 FT_UINT8, BASE_DEC, NULL, 0x00,
12053 NULL, HFILL }
12055 { &hf_btcommon_eir_ad_advertising_interval,
12056 { "Advertising Interval", "btcommon.eir_ad.entry.advertising_interval",
12057 FT_UINT16, BASE_DEC, NULL, 0x0,
12058 NULL, HFILL }
12060 { &hf_btcommon_eir_ad_appearance,
12061 { "Appearance", "btcommon.eir_ad.entry.appearance",
12062 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_appearance_vals_ext, 0x0,
12063 NULL, HFILL }
12065 { &hf_btcommon_eir_ad_hash_c,
12066 {"Hash C", "btcommon.eir_ad.entry.hash_c",
12067 FT_BYTES, BASE_NONE, NULL, 0x0,
12068 NULL, HFILL}
12070 { &hf_btcommon_eir_ad_randomizer_r,
12071 {"Randomizer R", "btcommon.eir_ad.entry.randomizer_r",
12072 FT_BYTES, BASE_NONE, NULL, 0x0,
12073 NULL, HFILL}
12075 { &hf_btcommon_eir_ad_le_secure_confirmation_value,
12076 {"LE Secure Connections Confirmation Value", "btcommon.eir_ad.entry.le_secure_confirmation_value",
12077 FT_BYTES, BASE_NONE, NULL, 0x0,
12078 NULL, HFILL}
12080 { &hf_btcommon_eir_ad_le_secure_random_value,
12081 {"LE Secure Connections Random Value", "btcommon.eir_ad.entry.le_secure_random_value",
12082 FT_BYTES, BASE_NONE, NULL, 0x0,
12083 NULL, HFILL}
12085 { &hf_btcommon_eir_ad_oob_flags_reserved,
12086 { "Reserved", "btcommon.eir_ad.entry.oob_flags.oob_reserved",
12087 FT_UINT8, BASE_HEX, NULL, 0xF0,
12088 NULL, HFILL }
12090 { &hf_btcommon_eir_ad_oob_flags_address_type,
12091 { "Address Type", "btcommon.eir_ad.entry.oob_flags.oob_address_type",
12092 FT_UINT8, BASE_HEX, VALS(cmd_base_address_types_vals), 0x08,
12093 NULL, HFILL }
12095 { &hf_btcommon_eir_ad_oob_flags_le_bredr_support,
12096 { "Simultaneous LE and BR/EDR to Same Device Capable (Host)", "btcommon.eir_ad.entry.oob_flags.oob_le_bredr_support",
12097 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
12098 NULL, HFILL }
12100 { &hf_btcommon_eir_ad_oob_flags_le_supported_host,
12101 { "LE Supported By Host", "btcommon.eir_ad.entry.oob_flags.oob_le_supported_host",
12102 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
12103 NULL, HFILL }
12105 { &hf_btcommon_eir_ad_oob_flags_data_present,
12106 { "OOB Data Present", "btcommon.eir_ad.entry.oob_flags.oob_data_present",
12107 FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
12108 NULL, HFILL }
12110 { &hf_btcommon_eir_ad_connection_interval_min,
12111 { "Connection Interval Min", "btcommon.eir_ad.entry.connection_interval_min",
12112 FT_UINT16, BASE_DEC, NULL, 0x0,
12113 NULL, HFILL }
12115 { &hf_btcommon_eir_ad_connection_interval_max,
12116 { "Connection Interval Max", "btcommon.eir_ad.entry.connection_interval_max",
12117 FT_UINT16, BASE_DEC, NULL, 0x0,
12118 NULL, HFILL }
12120 { &hf_btcommon_eir_ad_uri,
12121 {"URI", "btcommon.eir_ad.entry.uri",
12122 FT_STRING, BASE_NONE, NULL, 0x0,
12123 NULL, HFILL}
12125 {&hf_btcommon_eir_ad_ips_flags,
12126 {"Indoor Positioning Configuration", "btcommon.eir_ad.entry.ips.flags",
12127 FT_UINT8, BASE_HEX, NULL, 0x0,
12128 NULL, HFILL}
12130 {&hf_btcommon_eir_ad_ips_flags_reserved,
12131 {"Reserved", "btcommon.eir_ad.entry.ips.flags.reserved",
12132 FT_UINT8, BASE_HEX, NULL, 0x80,
12133 NULL, HFILL}
12135 {&hf_btcommon_eir_ad_ips_flags_location_name,
12136 {"Location Name", "btcommon.eir_ad.entry.ips.flags.location_name",
12137 FT_BOOLEAN, 8, NULL, 0x40,
12138 NULL, HFILL}
12140 {&hf_btcommon_eir_ad_ips_flags_uncertainty,
12141 {"Uncertainty", "btcommon.eir_ad.entry.ips.flags.uncertainty",
12142 FT_BOOLEAN, 8, NULL, 0x20,
12143 NULL, HFILL}
12145 {&hf_btcommon_eir_ad_ips_flags_floor_number,
12146 {"Floor Number", "btcommon.eir_ad.entry.ips.flags.floor_number",
12147 FT_BOOLEAN, 8, NULL, 0x10,
12148 NULL, HFILL}
12150 {&hf_btcommon_eir_ad_ips_flags_altitude,
12151 {"Altitude", "btcommon.eir_ad.entry.ips.flags.altitude",
12152 FT_BOOLEAN, 8, NULL, 0x08,
12153 NULL, HFILL}
12155 {&hf_btcommon_eir_ad_ips_flags_tx_power,
12156 {"Tx Power", "btcommon.eir_ad.entry.ips.flags.tx_power",
12157 FT_BOOLEAN, 8, NULL, 0x04,
12158 NULL, HFILL}
12160 {&hf_btcommon_eir_ad_ips_flags_coordinate_system,
12161 {"Coordinate System", "btcommon.eir_ad.entry.ips.flags.coordinate_system",
12162 FT_UINT8, BASE_HEX, VALS(btatt_ips_coordinate_system), 0x02,
12163 NULL, HFILL}
12165 {&hf_btcommon_eir_ad_ips_flags_coordinates,
12166 {"Coordinates", "btcommon.eir_ad.entry.ips.flags.coordinates",
12167 FT_BOOLEAN, 8, NULL, 0x01,
12168 NULL, HFILL}
12170 {&hf_btcommon_eir_ad_ips_uncertainty,
12171 {"Uncertainty", "btcommon.eir_ad.entry.ips.uncertainty",
12172 FT_UINT8, BASE_HEX, NULL, 0x0,
12173 NULL, HFILL}
12175 {&hf_btcommon_eir_ad_ips_uncertainty_reserved,
12176 {"Reserved", "btcommon.eir_ad.entry.ips.uncertainty.reserved",
12177 FT_UINT8, BASE_HEX, NULL, 0x80,
12178 NULL, HFILL}
12180 {&hf_btcommon_eir_ad_ips_uncertainty_precision,
12181 {"Precision", "btcommon.eir_ad.entry.ips.uncertainty.precision",
12182 FT_UINT8, BASE_HEX, VALS(btatt_ips_uncertainty_precision_vals), 0x70,
12183 NULL, HFILL}
12185 {&hf_btcommon_eir_ad_ips_uncertainty_update_time,
12186 {"Update Time", "btcommon.eir_ad.entry.ips.uncertainty.update_time",
12187 FT_UINT8, BASE_HEX, VALS(btatt_ips_uncertainty_update_time_vals), 0x0E,
12188 NULL, HFILL}
12190 {&hf_btcommon_eir_ad_ips_uncertainty_stationary,
12191 {"Stationary", "btcommon.eir_ad.entry.ips.uncertainty.stationary",
12192 FT_UINT8, BASE_HEX, VALS(btatt_ips_uncertainty_stationary_vals), 0x01,
12193 NULL, HFILL}
12195 {&hf_btcommon_eir_ad_ips_latitude,
12196 {"Latitude", "btcommon.eir_ad.entry.ips.latitude",
12197 FT_INT32, BASE_DEC, NULL, 0x0,
12198 NULL, HFILL}
12200 {&hf_btcommon_eir_ad_ips_longitude,
12201 {"Longitude", "btcommon.eir_ad.entry.ips.longitude",
12202 FT_INT32, BASE_DEC, NULL, 0x0,
12203 NULL, HFILL}
12205 {&hf_btcommon_eir_ad_ips_local_north_coordinate,
12206 {"Local North Coordinate", "btcommon.eir_ad.entry.ips.local_north_coordinate",
12207 FT_INT16, BASE_DEC, NULL, 0x0,
12208 NULL, HFILL}
12210 {&hf_btcommon_eir_ad_ips_local_east_coordinate,
12211 {"Local East Coordinate", "btcommon.eir_ad.entry.ips.local_east_coordinate",
12212 FT_INT16, BASE_DEC, NULL, 0x0,
12213 NULL, HFILL}
12215 {&hf_btcommon_eir_ad_ips_floor_number,
12216 {"Floor Number", "btcommon.eir_ad.entry.ips.floor_number",
12217 FT_UINT8, BASE_DEC, NULL, 0x0,
12218 NULL, HFILL}
12220 {&hf_btcommon_eir_ad_ips_altitude,
12221 {"Altitude", "btcommon.eir_ad.entry.ips.altitude",
12222 FT_UINT16, BASE_DEC, NULL, 0x0,
12223 NULL, HFILL}
12225 {&hf_btcommon_eir_ad_ips_tx_power_level,
12226 {"Tx Power Level", "btcommon.eir_ad.entry.ips.tx_power_level",
12227 FT_INT8, BASE_DEC, NULL, 0x0,
12228 NULL, HFILL}
12230 {&hf_btcommon_eir_ad_tds_organization_id,
12231 {"Organization ID", "btcommon.eir_ad.entry.tds.organization_id",
12232 FT_UINT8, BASE_HEX, VALS(tds_organization_id_vals), 0x0,
12233 NULL, HFILL}
12235 {&hf_btcommon_eir_ad_tds_flags,
12236 {"Flags", "btcommon.eir_ad.entry.tds.flags",
12237 FT_UINT8, BASE_HEX, NULL, 0x0,
12238 NULL, HFILL}
12240 {&hf_btcommon_eir_ad_tds_flags_reserved,
12241 {"Reserved", "btcommon.eir_ad.entry.tds.flags.reserved",
12242 FT_UINT8, BASE_HEX, NULL, 0xE0,
12243 NULL, HFILL}
12245 {&hf_btcommon_eir_ad_tds_flags_transport_state,
12246 {"Transport State", "btcommon.eir_ad.entry.tds.flags.transport_state",
12247 FT_UINT8, BASE_HEX, VALS(tds_transport_state_vals), 0x18,
12248 NULL, HFILL}
12250 {&hf_btcommon_eir_ad_tds_flags_transport_data_incomplete,
12251 {"Transport Data Incomplete", "btcommon.eir_ad.entry.tds.flags.transport_data_incomplete",
12252 FT_BOOLEAN, 8, NULL, 0x04,
12253 NULL, HFILL}
12255 {&hf_btcommon_eir_ad_tds_flags_role,
12256 {"Role", "btcommon.eir_ad.entry.tds.flags.role",
12257 FT_UINT8, BASE_HEX, VALS(tds_role_vals), 0x03,
12258 NULL, HFILL}
12261 {&hf_btcommon_eir_ad_tds_data_length,
12262 {"Data Length", "btcommon.eir_ad.entry.tds.data_length",
12263 FT_UINT8, BASE_DEC, NULL, 0x0,
12264 NULL, HFILL}
12266 {&hf_btcommon_eir_ad_tds_data,
12267 {"Data", "btcommon.eir_ad.entry.tds.data",
12268 FT_BYTES, BASE_NONE, NULL, 0x0,
12269 NULL, HFILL}
12271 { &hf_btcommon_eir_ad_le_features,
12272 { "LE Features", "btcommon.eir_ad.entry.le_features",
12273 FT_UINT8, BASE_HEX, NULL, 0x0,
12274 NULL, HFILL }
12276 { &hf_btcommon_eir_ad_le_channel_map,
12277 { "Channel Map", "btcommon.eir_ad.entry.le_channel_map",
12278 FT_BYTES, BASE_NONE, NULL, 0x0,
12279 NULL, HFILL }
12281 { &hf_btcommon_eir_ad_instant,
12282 { "Instant", "btcommon.eir_ad.entry.instant",
12283 FT_UINT16, BASE_DEC, NULL, 0x0,
12284 NULL, HFILL }
12286 { &hf_btcommon_eir_ad_le_features_encryption,
12287 { "LE Encryption", "btcommon.eir_ad.le_features.encryption",
12288 FT_BOOLEAN, 8, NULL, 0x01,
12289 NULL, HFILL }
12291 { &hf_btcommon_eir_ad_le_features_connection_parameters_request_procedure,
12292 { "Connection Parameters Request Procedure", "btcommon.eir_ad.le_features.connection_parameters_request_procedure",
12293 FT_BOOLEAN, 8, NULL, 0x02,
12294 NULL, HFILL }
12296 { &hf_btcommon_eir_ad_le_features_extended_reject_indication,
12297 { "Extended Reject Indication", "btcommon.eir_ad.le_features.extended_reject_indication",
12298 FT_BOOLEAN, 8, NULL, 0x04,
12299 NULL, HFILL }
12301 { &hf_btcommon_eir_ad_le_features_peripheral_initiated_features_exchange,
12302 { "Peripheral-Initiated Features Exchange", "btcommon.eir_ad.le_features.peripheral_initiated_features_exchange",
12303 FT_BOOLEAN, 8, NULL, 0x08,
12304 NULL, HFILL }
12306 { &hf_btcommon_eir_ad_le_features_ping,
12307 { "Ping", "btcommon.eir_ad.le_features.ping",
12308 FT_BOOLEAN, 8, NULL, 0x10,
12309 NULL, HFILL }
12311 { &hf_btcommon_eir_ad_le_features_data_packet_length_extension,
12312 { "Data Packet Length Extension", "btcommon.eir_ad.le_features.data_packet_length_extension",
12313 FT_BOOLEAN, 8, NULL, 0x20,
12314 NULL, HFILL }
12316 { &hf_btcommon_eir_ad_le_features_ll_privacy,
12317 { "LL Privacy", "btcommon.eir_ad.le_features.ll_privacy",
12318 FT_BOOLEAN, 8, NULL, 0x40,
12319 NULL, HFILL }
12321 { &hf_btcommon_eir_ad_le_features_extended_scanner_filter_policies,
12322 { "Extended Scanner Filter Policies", "btcommon.eir_ad.le_features.extended_scanner_filter_policies",
12323 FT_BOOLEAN, 8, NULL, 0x80,
12324 NULL, HFILL }
12326 { &hf_btcommon_eir_ad_le_features_2m_phy,
12327 { "LE 2M PHY", "btcommon.eir_ad.le_features.2m_phy",
12328 FT_BOOLEAN, 8, NULL, 0x01,
12329 NULL, HFILL }
12331 { &hf_btcommon_eir_ad_le_features_stable_modulation_index_tx,
12332 { "Stable Modulation Index - Tx", "btcommon.eir_ad.le_features.stable_modulation_index_tx",
12333 FT_BOOLEAN, 8, NULL, 0x02,
12334 NULL, HFILL }
12336 { &hf_btcommon_eir_ad_le_features_stable_modulation_index_rx,
12337 { "Stable Modulation Index - Rx", "btcommon.eir_ad.le_features.stable_modulation_index_rx",
12338 FT_BOOLEAN, 8, NULL, 0x04,
12339 NULL, HFILL }
12341 { &hf_btcommon_eir_ad_le_features_coded_phy,
12342 { "LE Coded PHY", "btcommon.eir_ad.le_features.coded_phy",
12343 FT_BOOLEAN, 8, NULL, 0x08,
12344 NULL, HFILL }
12346 { &hf_btcommon_eir_ad_le_features_extended_advertising,
12347 { "LE Extended Advertising", "btcommon.eir_ad.le_features.extended_advertising",
12348 FT_BOOLEAN, 8, NULL, 0x10,
12349 NULL, HFILL }
12351 { &hf_btcommon_eir_ad_le_features_periodic_advertising,
12352 { "LE Periodic Advertising", "btcommon.eir_ad.le_features.periodic_advertising",
12353 FT_BOOLEAN, 8, NULL, 0x20,
12354 NULL, HFILL }
12356 { &hf_btcommon_eir_ad_le_features_channel_selection_algorithm_2,
12357 { "Channel Selection Algorithm #2", "btcommon.eir_ad.le_features.channel_selection_algorithm_2",
12358 FT_BOOLEAN, 8, NULL, 0x40,
12359 NULL, HFILL }
12361 { &hf_btcommon_eir_ad_le_features_power_class_1,
12362 { "Power Class 1", "btcommon.eir_ad.le_features.power_class_1",
12363 FT_BOOLEAN, 8, NULL, 0x80,
12364 NULL, HFILL }
12366 { &hf_btcommon_eir_ad_le_features_minimum_number_of_used_channels_procedure,
12367 { "Minimum Number of Used Channels Procedure", "btcommon.eir_ad.entry.le_features.minimum_number_of_used_channels_procedure",
12368 FT_BOOLEAN, 8, NULL, 0x01,
12369 NULL, HFILL }
12371 { &hf_btcommon_eir_ad_le_features_reserved_1_7,
12372 { "Reserved", "btcommon.eir_ad.entry.le_features.reserved.1_7",
12373 FT_UINT8, BASE_HEX, NULL, 0xFE,
12374 NULL, HFILL }
12376 { &hf_btcommon_eir_ad_le_features_reserved,
12377 { "Reserved", "btcommon.eir_ad.entry.le_features.reserved",
12378 FT_UINT8, BASE_HEX, NULL, 0xFF,
12379 NULL, HFILL }
12381 { &hf_btcommon_eir_ad_biginfo_big_offset,
12382 { "BIG_Offset", "btcommon.eir_ad.entry.biginfo.big_offset",
12383 FT_UINT32, BASE_DEC, NULL, 0x00003fff,
12384 NULL, HFILL}
12386 { &hf_btcommon_eir_ad_biginfo_big_offset_units,
12387 { "BIG_Offset_Units", "btcommon.eir_ad.entry.biginfo.big_offset_units",
12388 FT_BOOLEAN, 32, TFS(&tfs_offset_units), 0x00004000,
12389 NULL, HFILL }
12391 { &hf_btcommon_eir_ad_biginfo_iso_interval,
12392 { "ISO_Interval", "btcommon.eir_ad.entry.biginfo.iso_interval",
12393 FT_UINT32, BASE_DEC, NULL, 0x07ff8000,
12394 NULL, HFILL}
12396 { &hf_btcommon_eir_ad_biginfo_num_bis,
12397 { "Num_BIS", "btcommon.eir_ad.entry.biginfo.num_bis",
12398 FT_UINT32, BASE_DEC, NULL, 0xf8000000,
12399 NULL, HFILL}
12401 { &hf_btcommon_eir_ad_biginfo_nse,
12402 { "NSE", "btcommon.eir_ad.entry.biginfo.nse",
12403 FT_UINT32, BASE_DEC, NULL, 0x0000001f,
12404 NULL, HFILL}
12406 { &hf_btcommon_eir_ad_biginfo_bn,
12407 { "BN", "btcommon.eir_ad.entry.biginfo.bn",
12408 FT_UINT32, BASE_DEC, NULL, 0x000000e0,
12409 NULL, HFILL}
12411 { &hf_btcommon_eir_ad_biginfo_sub_interval,
12412 { "Sub_Interval", "btcommon.eir_ad.entry.biginfo.sub_interval",
12413 FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microsecond_microseconds), 0x0fffff00,
12414 NULL, HFILL}
12416 { &hf_btcommon_eir_ad_biginfo_pto,
12417 { "PTO", "btcommon.eir_ad.entry.biginfo.pto",
12418 FT_UINT32, BASE_DEC, NULL, 0xf0000000,
12419 NULL, HFILL}
12421 { &hf_btcommon_eir_ad_biginfo_bis_spacing,
12422 { "BIS_Spacing", "btcommon.eir_ad.entry.biginfo.bis_spacing",
12423 FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microsecond_microseconds), 0x0fffff,
12424 NULL, HFILL}
12426 { &hf_btcommon_eir_ad_biginfo_irc,
12427 { "IRC", "btcommon.eir_ad.entry.biginfo.irc",
12428 FT_UINT24, BASE_DEC, NULL, 0xf00000,
12429 NULL, HFILL}
12431 { &hf_btcommon_eir_ad_biginfo_max_pdu,
12432 { "Max_PDU", "btcommon.eir_ad.entry.biginfo.max_pdu",
12433 FT_UINT8, BASE_DEC, NULL, 0x0,
12434 NULL, HFILL}
12436 { &hf_btcommon_eir_ad_biginfo_rfu,
12437 { "Reserved", "btcommon.eir_ad.entry.biginfo.rfu",
12438 FT_UINT8, BASE_DEC, NULL, 0x0,
12439 NULL, HFILL}
12441 { &hf_btcommon_eir_ad_biginfo_seed_access_address,
12442 { "Seed Access Address", "btcommon.eir_ad.entry.biginfo.seed_access_address",
12443 FT_UINT32, BASE_HEX, NULL, 0x0,
12444 NULL, HFILL}
12446 { &hf_btcommon_eir_ad_biginfo_sdu_interval,
12447 { "SDU_Interval", "btcommon.eir_ad.entry.biginfo.sdu_interval",
12448 FT_UINT32, BASE_DEC, NULL, 0x000fffff,
12449 NULL, HFILL}
12451 { &hf_btcommon_eir_ad_biginfo_max_sdu,
12452 { "Max_SDU", "btcommon.eir_ad.entry.biginfo.max_sdu",
12453 FT_UINT32, BASE_DEC, NULL, 0xfff00000,
12454 NULL, HFILL}
12456 { &hf_btcommon_eir_ad_biginfo_base_crc_init,
12457 { "BaseCRCInit", "btcommon.eir_ad.entry.biginfo.base_crc_init",
12458 FT_UINT16, BASE_HEX, NULL, 0x0,
12459 NULL, HFILL}
12461 { &hf_btcommon_eir_ad_biginfo_channel_map,
12462 { "Channel Map", "btcommon.eir_ad.entry.biginfo.channel_map",
12463 FT_UINT40, BASE_HEX, NULL, 0x1fffffffff,
12464 NULL, HFILL}
12466 { &hf_btcommon_eir_ad_biginfo_phy,
12467 { "PHY", "btcommon.eir_ad.entry.biginfo.phy",
12468 FT_UINT40, BASE_DEC|BASE_VAL64_STRING, VALS64(cmd_biginfo_le_phy_vals64), 0xe000000000,
12469 NULL, HFILL}
12471 { &hf_btcommon_eir_ad_biginfo_bis_payload_count,
12472 { "bisPayloadCount", "btcommon.eir_ad.entry.biginfo.bis_payload_count",
12473 FT_UINT40, BASE_DEC, NULL, 0x7fffffffff,
12474 NULL, HFILL}
12476 { &hf_btcommon_eir_ad_biginfo_framing,
12477 { "Framing", "btcommon.eir_ad.entry.biginfo.framing",
12478 FT_BOOLEAN, 40, NULL, 0x8000000000,
12479 NULL, HFILL }
12481 { &hf_btcommon_eir_ad_biginfo_giv,
12482 { "GIV", "btcommon.eir_ad.entry.biginfo.giv",
12483 FT_BYTES, BASE_NONE, NULL, 0x0,
12484 NULL, HFILL }
12486 { &hf_btcommon_eir_ad_biginfo_gskd,
12487 { "GSKD", "btcommon.eir_ad.entry.biginfo.gskd",
12488 FT_BYTES, BASE_NONE, NULL, 0x0,
12489 NULL, HFILL }
12491 { &hf_btcommon_eir_ad_biginfo_big_control_access_address,
12492 { "BIG Control Access Address", "btcommon.eir_ad.entry.biginfo.big_control_access_address",
12493 FT_UINT32, BASE_HEX, NULL, 0x0,
12494 NULL, HFILL}
12496 { &hf_btcommon_eir_ad_biginfo_bis_access_address,
12497 { "BIS Access Address", "btcommon.eir_ad.entry.biginfo.bis_access_address",
12498 FT_UINT32, BASE_HEX, NULL, 0x0,
12499 NULL, HFILL}
12501 { &hf_btcommon_eir_ad_broadcast_code,
12502 { "Broadcast Code", "btcommon.eir_ad.entry.broadcast_code",
12503 FT_STRING, BASE_NONE, NULL, 0x0,
12504 NULL, HFILL }
12506 { &hf_btcommon_eir_ad_rsi,
12507 { "Resolvable Set Identifier", "btcommon.eir_ad.entry.rsi",
12508 FT_BYTES, BASE_NONE, NULL, 0x0,
12509 NULL, HFILL }
12511 { &hf_btcommon_eir_ad_broadcast_name,
12512 { "Broadcast Name", "btcommon.eir_ad.entry.broadcast_name",
12513 FT_STRING, BASE_NONE, NULL, 0x0,
12514 NULL, HFILL }
12516 { &hf_btcommon_cod_class_of_device,
12517 { "Class of Device", "btcommon.cod.class_of_device",
12518 FT_UINT24, BASE_HEX, NULL, 0x0,
12519 NULL, HFILL }
12521 { &hf_btcommon_cod_major_service_class_information,
12522 { "Major Service Classes: Information", "btcommon.cod.major_service_classes.information",
12523 FT_BOOLEAN, 16, NULL, 0x8000,
12524 NULL, HFILL }
12526 { &hf_btcommon_cod_major_service_class_telephony,
12527 { "Major Service Classes: Telephony", "btcommon.cod.major_service_classes.telephony",
12528 FT_BOOLEAN, 16, NULL, 0x4000,
12529 NULL, HFILL }
12531 { &hf_btcommon_cod_major_service_class_audio,
12532 { "Major Service Classes: Audio", "btcommon.cod.major_service_classes.audio",
12533 FT_BOOLEAN, 16, NULL, 0x2000,
12534 NULL, HFILL }
12536 { &hf_btcommon_cod_major_service_class_object_transfer,
12537 { "Major Service Classes: Object Transfer", "btcommon.cod.major_service_classes.object_transfer",
12538 FT_BOOLEAN, 16, NULL, 0x1000,
12539 NULL, HFILL }
12541 { &hf_btcommon_cod_major_service_class_capturing,
12542 { "Major Service Classes: Capturing", "btcommon.cod.major_service_classes.capturing",
12543 FT_BOOLEAN, 16, NULL, 0x0800,
12544 NULL, HFILL }
12546 { &hf_btcommon_cod_major_service_class_rendering,
12547 { "Major Service Classes: Rendering", "btcommon.cod.major_service_classes.rendering",
12548 FT_BOOLEAN, 16, NULL, 0x0400,
12549 NULL, HFILL }
12551 { &hf_btcommon_cod_major_service_class_networking,
12552 { "Major Service Classes: Networking", "btcommon.cod.major_service_classes.networking",
12553 FT_BOOLEAN, 16, NULL, 0x0200,
12554 NULL, HFILL }
12556 { &hf_btcommon_cod_major_service_class_positioning,
12557 { "Major Service Classes: Positioning", "btcommon.cod.major_service_classes.positioning",
12558 FT_BOOLEAN, 16, NULL, 0x0100,
12559 NULL, HFILL }
12561 { &hf_btcommon_cod_major_service_class_reserved,
12562 { "Major Service Classes: Reserved", "btcommon.cod.major_service_classes.reserved",
12563 FT_UINT16, BASE_HEX, NULL, 0x0080,
12564 NULL, HFILL }
12566 { &hf_btcommon_cod_major_service_class_le_audio,
12567 { "Major Service Classes: LE Audio", "btcommon.cod.major_service_classes.le_audio",
12568 FT_UINT16, BASE_HEX, NULL, 0x0040,
12569 NULL, HFILL }
12571 { &hf_btcommon_cod_major_service_class_limited_discoverable_mode,
12572 { "Major Service Classes: Limited Discoverable Mode", "btcommon.cod.major_service_classes.limited_discoverable_mode",
12573 FT_BOOLEAN, 16, NULL, 0x0020,
12574 NULL, HFILL }
12576 { &hf_btcommon_cod_major_device_class,
12577 { "Major Device Class", "btcommon.cod.major_device_class",
12578 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_major_device_class_vals_ext, 0x1F,
12579 NULL, HFILL }
12581 { &hf_btcommon_cod_minor_device_class_computer,
12582 { "Minor Device Class", "btcommon.cod.minor_device_class",
12583 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_computer_vals_ext, 0xFC,
12584 NULL, HFILL }
12586 { &hf_btcommon_cod_minor_device_class_phone,
12587 { "Minor Device Class", "btcommon.cod.minor_device_class",
12588 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_phone_vals_ext, 0xFC,
12589 NULL, HFILL }
12591 { &hf_btcommon_cod_minor_device_class_lan_net_load_factor,
12592 { "Minor Device Class: Load Factor", "btcommon.cod.minor_device_class.load_factor",
12593 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_lan_net_load_factor_vals_ext, 0xE0,
12594 NULL, HFILL }
12596 { &hf_btcommon_cod_minor_device_class_lan_net_type,
12597 { "Minor Device Class: Type", "btcommon.cod.minor_device_class.type",
12598 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_lan_net_type_vals_ext, 0x1C,
12599 NULL, HFILL }
12601 { &hf_btcommon_cod_minor_device_class_audio_video,
12602 { "Minor Device Class", "btcommon.cod.minor_device_class",
12603 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_audio_video_vals_ext, 0xFC,
12604 NULL, HFILL }
12606 { &hf_btcommon_cod_minor_device_class_peripheral_class,
12607 { "Minor Device Class", "btcommon.cod.minor_device_class",
12608 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_peripheral_class_vals_ext, 0xC0,
12609 NULL, HFILL }
12611 { &hf_btcommon_cod_minor_device_class_peripheral_type,
12612 { "Minor Device Class", "btcommon.cod.minor_device_class",
12613 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_peripheral_type_vals_ext, 0x3C,
12614 NULL, HFILL }
12616 { &hf_btcommon_cod_minor_device_class_imaging_class_printer,
12617 { "Minor Device Class: Class: Printer", "btcommon.cod.minor_device_class.class.printer",
12618 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, 0x80,
12619 NULL, HFILL }
12621 { &hf_btcommon_cod_minor_device_class_imaging_class_scanner,
12622 { "Minor Device Class: Class: Scanner", "btcommon.cod.minor_device_class.class.scanner",
12623 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, 0x40,
12624 NULL, HFILL }
12626 { &hf_btcommon_cod_minor_device_class_imaging_class_camera,
12627 { "Minor Device Class: Class: Camera", "btcommon.cod.minor_device_class.class.camera",
12628 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, 0x20,
12629 NULL, HFILL }
12631 { &hf_btcommon_cod_minor_device_class_imaging_class_display,
12632 { "Minor Device Class: Class: Display", "btcommon.cod.minor_device_class.class.display",
12633 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, 0x10,
12634 NULL, HFILL }
12636 { &hf_btcommon_cod_minor_device_class_imaging_type,
12637 { "Minor Device Class: Type", "btcommon.cod.minor_device_class.type",
12638 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, 0x0C,
12639 NULL, HFILL }
12641 { &hf_btcommon_cod_minor_device_class_wearable,
12642 { "Minor Device Class", "btcommon.cod.minor_device_class",
12643 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_wearable_vals_ext, 0xFC,
12644 NULL, HFILL }
12646 { &hf_btcommon_cod_minor_device_class_toy,
12647 { "Minor Device Class", "btcommon.cod.minor_device_class",
12648 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_toy_vals_ext, 0xFC,
12649 NULL, HFILL }
12651 { &hf_btcommon_cod_minor_device_class_health,
12652 { "Minor Device Class", "btcommon.cod.minor_device_class",
12653 FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_health_vals_ext, 0xFC,
12654 NULL, HFILL }
12656 { &hf_btcommon_cod_minor_device_class_unknown,
12657 { "Minor Device Class", "btcommon.cod.minor_device_class",
12658 FT_UINT8, BASE_HEX, NULL, 0xFC,
12659 NULL, HFILL }
12661 { &hf_btcommon_cod_format_type,
12662 { "Format Type", "btcommon.cod.format_type",
12663 FT_UINT8, BASE_HEX, NULL, 0x03,
12664 NULL, HFILL }
12666 { &hf_btcommon_le_channel_map_39,
12667 { "Reserved", "btcommon.le_channel_map.39",
12668 FT_BOOLEAN, 8, NULL, 0x80,
12669 NULL, HFILL }
12671 { &hf_btcommon_le_channel_map_38,
12672 { "Reserved", "btcommon.le_channel_map.38",
12673 FT_BOOLEAN, 8, NULL, 0x40,
12674 NULL, HFILL }
12676 { &hf_btcommon_le_channel_map_37,
12677 { "Reserved", "btcommon.le_channel_map.37",
12678 FT_BOOLEAN, 8, NULL, 0x20,
12679 NULL, HFILL }
12681 { &hf_btcommon_le_channel_map_36,
12682 { "RF Channel 38 (2478 MHz - Data - 36)", "btcommon.le_channel_map.36",
12683 FT_BOOLEAN, 8, NULL, 0x10,
12684 NULL, HFILL }
12686 { &hf_btcommon_le_channel_map_35,
12687 { "RF Channel 37 (2476 MHz - Data - 35)", "btcommon.le_channel_map.35",
12688 FT_BOOLEAN, 8, NULL, 0x08,
12689 NULL, HFILL }
12691 { &hf_btcommon_le_channel_map_34,
12692 { "RF Channel 36 (2474 MHz - Data - 34)", "btcommon.le_channel_map.34",
12693 FT_BOOLEAN, 8, NULL, 0x04,
12694 NULL, HFILL }
12696 { &hf_btcommon_le_channel_map_33,
12697 { "RF Channel 35 (2472 MHz - Data - 33)", "btcommon.le_channel_map.33",
12698 FT_BOOLEAN, 8, NULL, 0x02,
12699 NULL, HFILL }
12701 { &hf_btcommon_le_channel_map_32,
12702 { "RF Channel 34 (2470 MHz - Data - 32)", "btcommon.le_channel_map.32",
12703 FT_BOOLEAN, 8, NULL, 0x01,
12704 NULL, HFILL }
12706 { &hf_btcommon_le_channel_map_31,
12707 { "RF Channel 33 (2468 MHz - Data - 31)", "btcommon.le_channel_map.31",
12708 FT_BOOLEAN, 8, NULL, 0x80,
12709 NULL, HFILL }
12711 { &hf_btcommon_le_channel_map_30,
12712 { "RF Channel 32 (2466 MHz - Data - 30)", "btcommon.le_channel_map.30",
12713 FT_BOOLEAN, 8, NULL, 0x40,
12714 NULL, HFILL }
12716 { &hf_btcommon_le_channel_map_29,
12717 { "RF Channel 31 (2464 MHz - Data - 29)", "btcommon.le_channel_map.29",
12718 FT_BOOLEAN, 8, NULL, 0x20,
12719 NULL, HFILL }
12721 { &hf_btcommon_le_channel_map_28,
12722 { "RF Channel 30 (2462 MHz - Data - 28)", "btcommon.le_channel_map.28",
12723 FT_BOOLEAN, 8, NULL, 0x10,
12724 NULL, HFILL }
12726 { &hf_btcommon_le_channel_map_27,
12727 { "RF Channel 29 (2460 MHz - Data - 27)", "btcommon.le_channel_map.27",
12728 FT_BOOLEAN, 8, NULL, 0x08,
12729 NULL, HFILL }
12731 { &hf_btcommon_le_channel_map_26,
12732 { "RF Channel 28 (2458 MHz - Data - 26)", "btcommon.le_channel_map.26",
12733 FT_BOOLEAN, 8, NULL, 0x04,
12734 NULL, HFILL }
12736 { &hf_btcommon_le_channel_map_25,
12737 { "RF Channel 27 (2456 MHz - Data - 25)", "btcommon.le_channel_map.25",
12738 FT_BOOLEAN, 8, NULL, 0x02,
12739 NULL, HFILL }
12741 { &hf_btcommon_le_channel_map_24,
12742 { "RF Channel 26 (2454 MHz - Data - 24)", "btcommon.le_channel_map.24",
12743 FT_BOOLEAN, 8, NULL, 0x01,
12744 NULL, HFILL }
12746 { &hf_btcommon_le_channel_map_23,
12747 { "RF Channel 25 (2452 MHz - Data - 23)", "btcommon.le_channel_map.23",
12748 FT_BOOLEAN, 8, NULL, 0x80,
12749 NULL, HFILL }
12751 { &hf_btcommon_le_channel_map_22,
12752 { "RF Channel 24 (2450 MHz - Data - 22)", "btcommon.le_channel_map.22",
12753 FT_BOOLEAN, 8, NULL, 0x40,
12754 NULL, HFILL }
12756 { &hf_btcommon_le_channel_map_21,
12757 { "RF Channel 23 (2448 MHz - Data - 21)", "btcommon.le_channel_map.21",
12758 FT_BOOLEAN, 8, NULL, 0x20,
12759 NULL, HFILL }
12761 { &hf_btcommon_le_channel_map_20,
12762 { "RF Channel 22 (2446 MHz - Data - 20)", "btcommon.le_channel_map.20",
12763 FT_BOOLEAN, 8, NULL, 0x10,
12764 NULL, HFILL }
12766 { &hf_btcommon_le_channel_map_19,
12767 { "RF Channel 21 (2444 MHz - Data - 19)", "btcommon.le_channel_map.19",
12768 FT_BOOLEAN, 8, NULL, 0x08,
12769 NULL, HFILL }
12771 { &hf_btcommon_le_channel_map_18,
12772 { "RF Channel 20 (2442 MHz - Data - 18)", "btcommon.le_channel_map.18",
12773 FT_BOOLEAN, 8, NULL, 0x04,
12774 NULL, HFILL }
12776 { &hf_btcommon_le_channel_map_17,
12777 { "RF Channel 19 (2440 MHz - Data - 17)", "btcommon.le_channel_map.17",
12778 FT_BOOLEAN, 8, NULL, 0x02,
12779 NULL, HFILL }
12781 { &hf_btcommon_le_channel_map_16,
12782 { "RF Channel 18 (2438 MHz - Data - 16)", "btcommon.le_channel_map.16",
12783 FT_BOOLEAN, 8, NULL, 0x01,
12784 NULL, HFILL }
12786 { &hf_btcommon_le_channel_map_15,
12787 { "RF Channel 17 (2436 MHz - Data - 15)", "btcommon.le_channel_map.15",
12788 FT_BOOLEAN, 8, NULL, 0x80,
12789 NULL, HFILL }
12791 { &hf_btcommon_le_channel_map_14,
12792 { "RF Channel 16 (2434 MHz - Data - 14)", "btcommon.le_channel_map.14",
12793 FT_BOOLEAN, 8, NULL, 0x40,
12794 NULL, HFILL }
12796 { &hf_btcommon_le_channel_map_13,
12797 { "RF Channel 15 (2432 MHz - Data - 13)", "btcommon.le_channel_map.13",
12798 FT_BOOLEAN, 8, NULL, 0x20,
12799 NULL, HFILL }
12801 { &hf_btcommon_le_channel_map_12,
12802 { "RF Channel 14 (2430 MHz - Data - 12)", "btcommon.le_channel_map.12",
12803 FT_BOOLEAN, 8, NULL, 0x10,
12804 NULL, HFILL }
12806 { &hf_btcommon_le_channel_map_11,
12807 { "RF Channel 13 (2428 MHz - Data - 11)", "btcommon.le_channel_map.11",
12808 FT_BOOLEAN, 8, NULL, 0x08,
12809 NULL, HFILL }
12811 { &hf_btcommon_le_channel_map_10,
12812 { "RF Channel 11 (2424 MHz - Data - 10)", "btcommon.le_channel_map.10",
12813 FT_BOOLEAN, 8, NULL, 0x04,
12814 NULL, HFILL }
12816 { &hf_btcommon_le_channel_map_9,
12817 { "RF Channel 10 (2422 MHz - Data - 9)", "btcommon.le_channel_map.9",
12818 FT_BOOLEAN, 8, NULL, 0x02,
12819 NULL, HFILL }
12821 { &hf_btcommon_le_channel_map_8,
12822 { "RF Channel 9 (2420 MHz - Data - 8)", "btcommon.le_channel_map.8",
12823 FT_BOOLEAN, 8, NULL, 0x01,
12824 NULL, HFILL }
12826 { &hf_btcommon_le_channel_map_7,
12827 { "RF Channel 8 (2418 MHz - Data - 7)", "btcommon.le_channel_map.7",
12828 FT_BOOLEAN, 8, NULL, 0x80,
12829 NULL, HFILL }
12831 { &hf_btcommon_le_channel_map_6,
12832 { "RF Channel 7 (2416 MHz - Data - 6)", "btcommon.le_channel_map.6",
12833 FT_BOOLEAN, 8, NULL, 0x40,
12834 NULL, HFILL }
12836 { &hf_btcommon_le_channel_map_5,
12837 { "RF Channel 6 (2414 MHz - Data - 5)", "btcommon.le_channel_map.5",
12838 FT_BOOLEAN, 8, NULL, 0x20,
12839 NULL, HFILL }
12841 { &hf_btcommon_le_channel_map_4,
12842 { "RF Channel 5 (2412 MHz - Data - 4)", "btcommon.le_channel_map.4",
12843 FT_BOOLEAN, 8, NULL, 0x10,
12844 NULL, HFILL }
12846 { &hf_btcommon_le_channel_map_3,
12847 { "RF Channel 4 (2410 MHz - Data - 3)", "btcommon.le_channel_map.3",
12848 FT_BOOLEAN, 8, NULL, 0x08,
12849 NULL, HFILL }
12851 { &hf_btcommon_le_channel_map_2,
12852 { "RF Channel 3 (2408 MHz - Data - 2)", "btcommon.le_channel_map.2",
12853 FT_BOOLEAN, 8, NULL, 0x04,
12854 NULL, HFILL }
12856 { &hf_btcommon_le_channel_map_1,
12857 { "RF Channel 2 (2406 MHz - Data - 1)", "btcommon.le_channel_map.1",
12858 FT_BOOLEAN, 8, NULL, 0x02,
12859 NULL, HFILL }
12861 { &hf_btcommon_le_channel_map_0,
12862 { "RF Channel 1 (2404 MHz - Data - 0)", "btcommon.le_channel_map.0",
12863 FT_BOOLEAN, 8, NULL, 0x01,
12864 NULL, HFILL }
12866 { &hf_btcommon_eir_ad_mesh_msg,
12867 { "Mesh message content", "btcommon.eir_ad.entry.mesh_msg",
12868 FT_BYTES, BASE_NONE, NULL, 0x0,
12869 NULL, HFILL }
12871 { &hf_btcommon_eir_ad_mesh_pbadv,
12872 { "Mesh PB-ADV message content", "btcommon.eir_ad.entry.mesh_pbadv",
12873 FT_BYTES, BASE_NONE, NULL, 0x0,
12874 NULL, HFILL }
12876 { &hf_btcommon_eir_ad_mesh_beacon,
12877 { "Mesh Beacon message content", "btcommon.eir_ad.entry.mesh_beacon",
12878 FT_BYTES, BASE_NONE, NULL, 0x0,
12879 NULL, HFILL }
12883 static int *ett[] = {
12884 &ett_eir_ad,
12885 &ett_eir_ad_entry,
12886 &ett_eir_ad_le_features,
12887 &ett_eir_ad_biginfo_seedaa
12890 static ei_register_info ei[] = {
12891 { &ei_eir_ad_undecoded, { "btcommon.eir_ad.undecoded", PI_UNDECODED, PI_NOTE, "Undecoded", EXPFILL }},
12892 { &ei_eir_ad_unknown, { "btcommon.eir_ad.unknown", PI_PROTOCOL, PI_WARN, "Unknown data", EXPFILL }},
12893 { &ei_eir_ad_not_used, { "btcommon.eir_ad.not_used", PI_PROTOCOL, PI_WARN, "Value should not be used", EXPFILL }},
12894 { &ei_eir_ad_invalid_length, { "btcommon.eir_ad.invalid_length", PI_PROTOCOL, PI_WARN, "Invalid Length", EXPFILL }},
12897 static build_valid_func bluetooth_eir_ad_manufacturer_company_id_da_build_value[1] = {bluetooth_eir_ad_manufacturer_company_id_value};
12898 static decode_as_value_t bluetooth_eir_ad_manufacturer_company_id_da_values = {bluetooth_eir_ad_manufacturer_company_id_prompt, 1, bluetooth_eir_ad_manufacturer_company_id_da_build_value};
12899 static decode_as_t bluetooth_eir_ad_manufacturer_company_id_da = {"btcommon.eir_ad", "btcommon.eir_ad.manufacturer_company_id", 1, 0, &bluetooth_eir_ad_manufacturer_company_id_da_values, NULL, NULL,
12900 decode_as_default_populate_list, decode_as_default_reset, decode_as_default_change, NULL};
12902 static build_valid_func bluetooth_eir_ad_tds_organization_id_da_build_value[1] = {bluetooth_eir_ad_tds_organization_id_value};
12903 static decode_as_value_t bluetooth_eir_ad_tds_organization_id_da_values = {bluetooth_eir_ad_tds_organization_id_prompt, 1, bluetooth_eir_ad_tds_organization_id_da_build_value};
12904 static decode_as_t bluetooth_eir_ad_tds_organization_id_da = {"btcommon.eir_ad", "btcommon.eir_ad.tds_organization_id", 1, 0, &bluetooth_eir_ad_tds_organization_id_da_values, NULL, NULL,
12905 decode_as_default_populate_list, decode_as_default_reset, decode_as_default_change, NULL};
12907 proto_btcommon = proto_register_protocol("Bluetooth Common", "BT Common", "btcommon");
12909 proto_register_field_array(proto_btcommon, hf, array_length(hf));
12910 proto_register_subtree_array(ett, array_length(ett));
12912 expert_module = expert_register_protocol(proto_btcommon);
12913 expert_register_field_array(expert_module, ei, array_length(ei));
12914 (void )ei_command_undecoded; /* Not needed not, but there is upcoming Bluetooth 5 */
12916 btcommon_ad_handle = register_dissector("btcommon.eir_ad.ad", dissect_btcommon_ad, proto_btcommon);
12917 btcommon_eir_handle = register_dissector("btcommon.eir_ad.eir", dissect_btcommon_eir, proto_btcommon);
12918 btcommon_cod_handle = register_dissector("btcommon.cod", dissect_btcommon_cod, proto_btcommon);
12919 btcommon_le_channel_map_handle = register_dissector("btcommon.le_channel_map", dissect_btcommon_le_channel_map, proto_btcommon);
12921 bluetooth_eir_ad_manufacturer_company_id = register_dissector_table("btcommon.eir_ad.manufacturer_company_id", "BT EIR/AD Manufacturer Company ID", proto_btcommon, FT_UINT16, BASE_HEX);
12922 bluetooth_eir_ad_tds_organization_id = register_dissector_table("btcommon.eir_ad.tds_organization_id", "BT EIR/AD TDS Organization ID", proto_btcommon, FT_UINT8, BASE_HEX);
12924 // Key for this table is the lower-case hex-representation of the service UUID. 16-bit UUIDs will have 4 characters, 32-bit UUIDs will have 8 characters.
12925 // 128-bit UUIDs have 4 dashes in them, and therefore have 36 characters.
12926 bluetooth_eir_ad_service_uuid = register_dissector_table("btcommon.eir_ad.entry.uuid", "BT EIR/AD Service UUID", proto_btcommon, FT_STRING, STRING_CASE_SENSITIVE);
12928 register_decode_as(&bluetooth_eir_ad_manufacturer_company_id_da);
12929 register_decode_as(&bluetooth_eir_ad_tds_organization_id_da);
12932 void
12933 proto_reg_handoff_btcommon(void)
12935 btmesh_handle = find_dissector("btmesh.msg");
12936 btmesh_pbadv_handle = find_dissector("btmesh.pbadv");
12937 btmesh_beacon_handle = find_dissector("btmesh.beacon");
12943 * Editor modelines - https://www.wireshark.org/tools/modelines.html
12945 * Local variables:
12946 * c-basic-offset: 4
12947 * tab-width: 8
12948 * indent-tabs-mode: nil
12949 * End:
12951 * vi: set shiftwidth=4 tabstop=8 expandtab:
12952 * :indentSize=4:tabSize=8:noTabs=true: