Coverage Report

Created: 2025-02-15 06:25

/src/wireshark/epan/dissectors/packet-bthci_cmd.c
Line
Count
Source (jump to first uncovered line)
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
5
 *
6
 * Refactored for wireshark checkin
7
 *   Ronnie Sahlberg 2006
8
 *
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
21
 *
22
 * Wireshark - Network traffic analyzer
23
 * By Gerald Combs <gerald@wireshark.org>
24
 * Copyright 1998 Gerald Combs
25
 *
26
 * SPDX-License-Identifier: GPL-2.0-or-later
27
 */
28
29
#include "config.h"
30
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>
40
41
#include <wsutil/utf8_entities.h>
42
43
#include "packet-bluetooth.h"
44
#include "packet-bthci_cmd.h"
45
#include "packet-bthci_evt.h"
46
#include "packet-btatt.h"
47
48
static int proto_bthci_cmd;
49
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;
843
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
873
};
874
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
931
};
932
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
946
};
947
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
952
};
953
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
960
};
961
962
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
968
};
969
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
976
};
977
978
static int * const hfx_btcmd_phy_options[] = {
979
    &hf_bthci_cmd_phy_options_reserved,
980
    &hf_bthci_cmd_phy_options_coding,
981
    NULL
982
};
983
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
989
};
990
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
997
};
998
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
1006
};
1007
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
1014
};
1015
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
1021
};
1022
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
1036
};
1037
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
1054
};
1055
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
1063
};
1064
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
1070
};
1071
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
1076
};
1077
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
1084
};
1085
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
1090
};
1091
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
1096
};
1097
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
1103
};
1104
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
1112
};
1113
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
1124
};
1125
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
1138
};
1139
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
1145
};
1146
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
1155
};
1156
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
1161
};
1162
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
1170
};
1171
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
1180
};
1181
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
1194
};
1195
1196
static expert_field ei_command_undecoded;
1197
static expert_field ei_command_unknown_command;
1198
static expert_field ei_command_parameter_unexpected;
1199
1200
static dissector_table_t vendor_dissector_table;
1201
static dissector_table_t hci_vendor_table;
1202
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;
1237
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;
1378
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;
1452
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
1463
};
1464
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
1471
};
1472
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
1479
};
1480
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
1491
};
1492
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
1503
};
1504
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
1509
};
1510
1511
static int * const hfx_btcommon_eir_ad_le_features_reserved[] = {
1512
    &hf_btcommon_eir_ad_le_features_reserved,
1513
    NULL
1514
};
1515
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
1525
};
1526
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;
1532
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;
1537
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;
1546
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;
1550
1551
bool bthci_vendor_android = false;
1552
const uint16_t bthci_vendor_manufacturer_android = 0x00e0; // Google LLC
1553
1554
wmem_tree_t *bthci_cmds;
1555
1556
extern value_string_ext ext_usb_vendors_vals;
1557
extern value_string_ext ext_usb_products_vals;
1558
extern value_string_ext did_vendor_id_source_vals_ext;
1559
1560
static const value_string bthci_cmd_ogf_vals[] = {
1561
    { 0x01,  "Link Control Commands" },
1562
    { 0x02,  "Link Policy Commands" },
1563
    { 0x03,  "Host Controller & Baseband Commands" },
1564
    { 0x04,  "Informational Parameters" },
1565
    { 0x05,  "Status Parameters" },
1566
    { 0x06,  "Testing Commands" },
1567
    { 0x08,  "LE Controller Commands" },
1568
    { 0x3E,  "Bluetooth Logo Testing Commands" },
1569
    { 0x3F,  "Vendor-Specific Commands" },
1570
    { 0, NULL }
1571
};
1572
value_string_ext bthci_cmd_ogf_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ogf_vals);
1573
1574
# define LINK_CONTROL_VALS(base) \
1575
/* Bluetooth Core 4.0 */ \
1576
    { (base) | 0x001,  "Inquiry" }, \
1577
    { (base) | 0x002,  "Inquiry Cancel" }, \
1578
    { (base) | 0x003,  "Periodic Inquiry Mode" }, \
1579
    { (base) | 0x004,  "Exit Periodic Inquiry Mode" }, \
1580
    { (base) | 0x005,  "Create Connection" }, \
1581
    { (base) | 0x006,  "Disconnect" }, \
1582
    { (base) | 0x007,  "Add SCO Connection" }, \
1583
    { (base) | 0x008,  "Create Connection Cancel" }, \
1584
    { (base) | 0x009,  "Accept Connection Request" }, \
1585
    { (base) | 0x00A,  "Reject Connection Request" }, \
1586
    { (base) | 0x00B,  "Link Key Request Reply" }, \
1587
    { (base) | 0x00C,  "Link Key Request Negative Reply" }, \
1588
    { (base) | 0x00D,  "PIN Code Request Reply" }, \
1589
    { (base) | 0x00E,  "PIN Code Request Negative Reply" }, \
1590
    { (base) | 0x00F,  "Change Connection Packet Type" }, \
1591
    { (base) | 0x011,  "Authentication Requested" }, \
1592
    { (base) | 0x013,  "Set Connection Encryption" }, \
1593
    { (base) | 0x015,  "Change Connection Link Key" }, \
1594
    { (base) | 0x017,  "Link Key Selection" }, \
1595
    { (base) | 0x019,  "Remote Name Request" }, \
1596
    { (base) | 0x01A,  "Remote Name Request Cancel" }, \
1597
    { (base) | 0x01B,  "Read Remote Supported Features" }, \
1598
    { (base) | 0x01C,  "Read Remote Extended Features" }, \
1599
    { (base) | 0x01D,  "Read Remote Version Information" }, \
1600
    { (base) | 0x01F,  "Read Clock offset" }, \
1601
    { (base) | 0x020,  "Read LMP Handle" }, \
1602
    { (base) | 0x028,  "Setup Synchronous Connection" }, \
1603
    { (base) | 0x029,  "Accept Synchronous Connection Request" }, \
1604
    { (base) | 0x02A,  "Reject Synchronous Connection Request" }, \
1605
    { (base) | 0x02B,  "IO Capability Request Reply" }, \
1606
    { (base) | 0x02C,  "User Confirmation Request Reply" }, \
1607
    { (base) | 0x02D,  "User Confirmation Request Negative Reply" }, \
1608
    { (base) | 0x02E,  "User Passkey Request Reply" }, \
1609
    { (base) | 0x02F,  "User Passkey Request Negative Reply" }, \
1610
    { (base) | 0x030,  "Remote OOB Data Request Reply" }, \
1611
    { (base) | 0x033,  "Remote OOB Data Request Negative Reply" }, \
1612
    { (base) | 0x034,  "IO Capability Request Negative Reply" }, \
1613
    { (base) | 0x035,  "Create Physical Link" }, \
1614
    { (base) | 0x036,  "Accept Physical Link" }, \
1615
    { (base) | 0x037,  "Disconnect Physical Link" }, \
1616
    { (base) | 0x038,  "Create Logical Link" }, \
1617
    { (base) | 0x039,  "Accept Logical Link" }, \
1618
    { (base) | 0x03A,  "Disconnect Logical Link" }, \
1619
    { (base) | 0x03B,  "Logical Link Cancel" }, \
1620
    { (base) | 0x03C,  "Flow Spec Modify" }, \
1621
/* Bluetooth Core Specification Addendum 2 */ \
1622
    { (base) | 0x03D,  "Enhanced Setup Synchronous Connection" }, \
1623
    { (base) | 0x03E,  "Enhanced Accept Synchronous Connection Request" }, \
1624
/* Bluetooth Core Specification Addendum 4 */ \
1625
    { (base) | 0x03F,  "Truncated Page" }, \
1626
    { (base) | 0x040,  "Truncated Page Cancel" }, \
1627
    { (base) | 0x041,  "Set Connectionless Peripheral Broadcast" }, \
1628
    { (base) | 0x042,  "Set Connectionless Peripheral Broadcast Receive" }, \
1629
    { (base) | 0x043,  "Start Synchronization Train" }, \
1630
    { (base) | 0x044,  "Receive Synchronization Train" }, \
1631
    { (base) | 0x045,  "Remote OOB Extended Data Request Reply" } \
1632
1633
static const value_string bthci_cmd_ocf_link_control_vals[] = {
1634
    LINK_CONTROL_VALS(0x0), \
1635
    { 0, NULL }
1636
};
1637
1638
value_string_ext bthci_cmd_ocf_link_control_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_link_control_vals);
1639
1640
#define LINK_POLICY_VALS(base) \
1641
/* Bluetooth Core 4.0 */              \
1642
    { (base) | 0x001,  "Hold Mode" }, \
1643
    { (base) | 0x003,  "Sniff Mode" }, \
1644
    { (base) | 0x004,  "Exit Sniff Mode" }, \
1645
    { (base) | 0x005,  "Park Mode" }, \
1646
    { (base) | 0x006,  "Exit Park Mode" }, \
1647
    { (base) | 0x007,  "QoS Setup" }, \
1648
    { (base) | 0x009,  "Role Discovery" }, \
1649
    { (base) | 0x00b,  "Switch Role" }, \
1650
    { (base) | 0x00c,  "Read Link Policy Settings" }, \
1651
    { (base) | 0x00d,  "Write Link Policy Settings" }, \
1652
    { (base) | 0x00e,  "Read Default Link Policy Settings" }, \
1653
    { (base) | 0x00f,  "Write Default Link Policy Settings" }, \
1654
    { (base) | 0x010,  "Flow Specification" }, \
1655
    { (base) | 0x011,  "Sniff Subrating" }
1656
1657
static const value_string bthci_cmd_ocf_link_policy_vals[] = {
1658
LINK_POLICY_VALS(0x0),
1659
    { 0, NULL }
1660
};
1661
1662
value_string_ext bthci_cmd_ocf_link_policy_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_link_policy_vals);
1663
1664
#define HOST_CONTROLLER_AND_BASEBAND_VALS(base) \
1665
/* Bluetooth Core 4.0 */ \
1666
    { (base) | 0x001,  "Set Event Mask" }, \
1667
    { (base) | 0x003,  "Reset" }, \
1668
    { (base) | 0x005,  "Set Event Filter" }, \
1669
    { (base) | 0x008,  "Flush" }, \
1670
    { (base) | 0x009,  "Read PIN Type" }, \
1671
    { (base) | 0x00A,  "Write PIN Type" }, \
1672
    { (base) | 0x00B,  "Create New Unit Key" }, \
1673
    { (base) | 0x00D,  "Read Stored Link Key" }, \
1674
    { (base) | 0x011,  "Write Stored Link Key" }, \
1675
    { (base) | 0x012,  "Delete Stored Link Key" }, \
1676
    { (base) | 0x013,  "Change Local Name" }, \
1677
    { (base) | 0x014,  "Read Local Name" }, \
1678
    { (base) | 0x015,  "Read Connection Accept Timeout" }, \
1679
    { (base) | 0x016,  "Write Connection Accept Timeout" }, \
1680
    { (base) | 0x017,  "Read Page Timeout" }, \
1681
    { (base) | 0x018,  "Write Page Timeout" }, \
1682
    { (base) | 0x019,  "Read Scan Enable" }, \
1683
    { (base) | 0x01A,  "Write Scan Enable" }, \
1684
    { (base) | 0x01B,  "Read Page Scan Activity" }, \
1685
    { (base) | 0x01C,  "Write Page Scan Activity" }, \
1686
    { (base) | 0x01D,  "Read Inquiry Scan Activity" }, \
1687
    { (base) | 0x01E,  "Write Inquiry Scan Activity" }, \
1688
    { (base) | 0x01F,  "Read Authentication Enable" }, \
1689
    { (base) | 0x020,  "Write Authentication Enable" }, \
1690
    { (base) | 0x021,  "Read Encryption Mode" }, \
1691
    { (base) | 0x022,  "Write Encryption Mode" }, \
1692
    { (base) | 0x023,  "Read Class of Device" }, \
1693
    { (base) | 0x024,  "Write Class of Device" }, \
1694
    { (base) | 0x025,  "Read Voice Setting" }, \
1695
    { (base) | 0x026,  "Write Voice Setting" }, \
1696
    { (base) | 0x027,  "Read Automatic Flush Timeout" }, \
1697
    { (base) | 0x028,  "Write Automatic Flush Timeout" }, \
1698
    { (base) | 0x029,  "Read Num Broadcast Retransmissions" }, \
1699
    { (base) | 0x02A,  "Write Num Broadcast Retransmissions" }, \
1700
    { (base) | 0x02B,  "Read Hold Mode Activity" }, \
1701
    { (base) | 0x02C,  "Write Hold Mode Activity" }, \
1702
    { (base) | 0x02D,  "Read Tx Power Level" }, \
1703
    { (base) | 0x02E,  "Read SCO Flow Control Enable" }, \
1704
    { (base) | 0x02F,  "Write SCO Flow Control Enable" }, \
1705
    { (base) | 0x031,  "Set Host Controller To Host Flow Control" }, \
1706
    { (base) | 0x033,  "Host Buffer Size" }, \
1707
    { (base) | 0x035,  "Host Number of Completed Packets" }, \
1708
    { (base) | 0x036,  "Read Link Supervision Timeout" }, \
1709
    { (base) | 0x037,  "Write Link Supervision Timeout" }, \
1710
    { (base) | 0x038,  "Read Number of Supported IAC" }, \
1711
    { (base) | 0x039,  "Read Current IAC LAP" }, \
1712
    { (base) | 0x03A,  "Write Current IAC LAP" }, \
1713
    { (base) | 0x03B,  "Read Page Scan Period Mode" }, \
1714
    { (base) | 0x03C,  "Write Page Scan Period Mode" }, \
1715
    { (base) | 0x03D,  "Read Page Scan Mode" }, \
1716
    { (base) | 0x03E,  "Write Page Scan Mode" }, \
1717
    { (base) | 0x03F,  "Set AFH Host Channel Classification" }, \
1718
    { (base) | 0x042,  "Read Inquiry Scan Type" }, \
1719
    { (base) | 0x043,  "Write Inquiry Scan Type" }, \
1720
    { (base) | 0x044,  "Read Inquiry Mode" }, \
1721
    { (base) | 0x045,  "Write Inquiry Mode" }, \
1722
    { (base) | 0x046,  "Read Page Scan Type" }, \
1723
    { (base) | 0x047,  "Write Page Scan Type" }, \
1724
    { (base) | 0x048,  "Read AFH Channel Assessment Mode" }, \
1725
    { (base) | 0x049,  "Write AFH Channel Assessment Mode" }, \
1726
    { (base) | 0x051,  "Read Extended Inquiry Response" }, \
1727
    { (base) | 0x052,  "Write Extended Inquiry Response" }, \
1728
    { (base) | 0x053,  "Refresh Encryption Key" }, \
1729
    { (base) | 0x055,  "Read Simple Pairing Mode" }, \
1730
    { (base) | 0x056,  "Write Simple Pairing Mode" }, \
1731
    { (base) | 0x057,  "Read Local OOB Data" }, \
1732
    { (base) | 0x058,  "Read Inquiry Response Tx Power Level" }, \
1733
    { (base) | 0x059,  "Write Inquiry Tx Power Level" }, \
1734
    { (base) | 0x05A,  "Read Default Erroneous Data Reporting" }, \
1735
    { (base) | 0x05B,  "Write Default Erroneous Data Reporting" }, \
1736
    { (base) | 0x05F,  "Enhanced Flush" }, \
1737
    { (base) | 0x060,  "Send Keypress Notification" }, \
1738
    { (base) | 0x061,  "Read Logical Link Accept Timeout" }, \
1739
    { (base) | 0x062,  "Write Logical Link Accept Timeout" }, \
1740
    { (base) | 0x063,  "Set Event Mask Page 2" }, \
1741
    { (base) | 0x064,  "Read Location Data" }, \
1742
    { (base) | 0x065,  "Write Location Data" }, \
1743
    { (base) | 0x066,  "Read Flow Control Mode" }, \
1744
    { (base) | 0x067,  "Write Flow Control Mode" }, \
1745
    { (base) | 0x068,  "Read Enhanced Transmit Power Level" }, \
1746
    { (base) | 0x069,  "Read Best Effort Flush Timeout" }, \
1747
    { (base) | 0x06A,  "Write Best Effort Flush Timeout" }, \
1748
    { (base) | 0x06B,  "Short Range Mode" }, \
1749
    { (base) | 0x06C,  "Read LE Host Supported" }, \
1750
    { (base) | 0x06D,  "Write LE Host Supported" }, \
1751
/* Bluetooth Core Specification Addendum 3 */ \
1752
    { (base) | 0x06E,  "Set MWS Channel Parameters"}, \
1753
    { (base) | 0x06F,  "Set External Frame Configuration"}, \
1754
    { (base) | 0x070,  "Set MWS Signaling"}, \
1755
    { (base) | 0x071,  "Set MWS Transport Layer"}, \
1756
    { (base) | 0x072,  "Set MWS Scan Frequency Table"}, \
1757
    { (base) | 0x073,  "Set MWS Pattern Configuration"}, \
1758
/* Bluetooth Core Specification Addendum 4 */ \
1759
    { (base) | 0x074,  "Set Reserved LT_ADDR" }, \
1760
    { (base) | 0x075,  "Delete Reserved LT_ADDR" }, \
1761
    { (base) | 0x076,  "Set Connectionless Peripheral Broadcast Data" }, \
1762
    { (base) | 0x077,  "Read Synchronization Train Parameters" }, \
1763
    { (base) | 0x078,  "Write Synchronization Train Parameters" }, \
1764
    { (base) | 0x079,  "Read Secure Connections Host Support" }, \
1765
    { (base) | 0x07A,  "Write Secure Connections Host Support" }, \
1766
    { (base) | 0x07B,  "Read Authenticated Payload Timeout" }, \
1767
    { (base) | 0x07C,  "Write Authenticated Payload Timeout" }, \
1768
    { (base) | 0x07D,  "Read Local OOB Extended Data" }, \
1769
    { (base) | 0x07E,  "Read Extended Page Timeout" }, \
1770
    { (base) | 0x07F,  "Write Extended Page Timeout" }, \
1771
    { (base) | 0x080,  "Read Extended Inquiry Length" }, \
1772
    { (base) | 0x081,  "Write Extended Inquiry Length" }, \
1773
/* Bluetooth Core Specification 5.2 */ \
1774
    { (base) | 0x082,  "Set Ecosystem Base Interval" }, \
1775
    { (base) | 0x083,  "Configure Data Path" }, \
1776
/* Bluetooth Core Specification 5.3 */ \
1777
    { (base) | 0x084,  "Set Min Encryption Key Size" }
1778
1779
static const value_string bthci_cmd_ocf_host_controller_and_baseband_vals[] = {
1780
    HOST_CONTROLLER_AND_BASEBAND_VALS(0x0),
1781
    { 0, NULL }
1782
};
1783
1784
value_string_ext bthci_cmd_ocf_host_controller_and_baseband_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_host_controller_and_baseband_vals);
1785
1786
#define INFORMATIONAL_VALS(base) \
1787
/* Bluetooth Core 4.0 */ \
1788
    { (base) | 0x001,  "Read Local Version Information" }, \
1789
    { (base) | 0x002,  "Read Local Supported Commands" }, \
1790
    { (base) | 0x003,  "Read Local Supported Features" }, \
1791
    { (base) | 0x004,  "Read Local Extended Features" }, \
1792
    { (base) | 0x005,  "Read Buffer Size" }, \
1793
    { (base) | 0x007,  "Read Country Code" }, \
1794
    { (base) | 0x009,  "Read BD ADDR" }, \
1795
    { (base) | 0x00A,  "Read Data Block Size" }, \
1796
/* Bluetooth Core Specification Addendum 2 */ \
1797
    { (base) | 0x00B,  "Read Local Supported Codecs" }, \
1798
/* Bluetooth Core 5.1 */ \
1799
    { (base) | 0x00C,  "Read Local Simple Pairing Options" }
1800
1801
static const value_string bthci_cmd_ocf_informational_vals[] = {
1802
    INFORMATIONAL_VALS(0x0),
1803
    { 0, NULL }
1804
};
1805
1806
value_string_ext bthci_cmd_ocf_informational_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_informational_vals);
1807
1808
1809
#define STATUS_VALS(base) \
1810
/* Bluetooth Core 4.0 */ \
1811
    { (base) | 0x001, "Read Failed Contact Counter" }, \
1812
    { (base) | 0x002, "Reset Failed Contact Counter" }, \
1813
    { (base) | 0x003, "Read Link Quality" }, \
1814
    { (base) | 0x005, "Read RSSI" }, \
1815
    { (base) | 0x006, "Read AFH Channel Map" }, \
1816
    { (base) | 0x007, "Read Clock" }, \
1817
    { (base) | 0x008, "Read Encryption Key Size" }, \
1818
    { (base) | 0x009, "Read Local AMP Info" }, \
1819
    { (base) | 0x00A, "Read Local AMP Assoc" }, \
1820
    { (base) | 0x00B, "Write Remote AMP Assoc" }, \
1821
/* Bluetooth Core Specification Addendum 3 */ \
1822
    { (base) | 0x00C,  "Get MWS Transport Layer Configuration" }, \
1823
/* Bluetooth Core Specification Addendum 4 */ \
1824
    { (base) | 0x00D,  "Set Triggered Clock Capture" }
1825
1826
static const value_string bthci_cmd_ocf_status_vals[] = {
1827
    STATUS_VALS(0x0),
1828
    { 0, NULL }
1829
};
1830
1831
value_string_ext bthci_cmd_ocf_status_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_status_vals);
1832
1833
#define TESTING_VALS(base) \
1834
/* Bluetooth Core 4.0 */ \
1835
    { (base) | 0x001,  "Read Loopback Mode" }, \
1836
    { (base) | 0x002,  "Write Loopback Mode" }, \
1837
    { (base) | 0x003,  "Enable Device Under Test Mode" }, \
1838
    { (base) | 0x004,  "Write Simple Pairing Debug Mode" }, \
1839
    { (base) | 0x007,  "Enable AMP Receiver Reports" }, \
1840
    { (base) | 0x008,  "AMP Test End" }, \
1841
    { (base) | 0x009,  "AMP Test" }, \
1842
    { (base) | 0x00A,  "Write Secure Connections Test Mode" }
1843
1844
static const value_string bthci_cmd_ocf_testing_vals[] = {
1845
    TESTING_VALS(0x0),
1846
    { 0, NULL }
1847
};
1848
1849
value_string_ext bthci_cmd_ocf_testing_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_testing_vals);
1850
1851
#define LOW_ENERGY_VALS(base)\
1852
/* Bluetooth Core 4.0 */ \
1853
    { (base) | 0x001,  "LE Set Event Mask" }, \
1854
    { (base) | 0x002,  "LE Read Buffer Size [v1]" }, \
1855
    { (base) | 0x003,  "LE Read Local Supported Features" }, \
1856
    { (base) | 0x005,  "LE Set Random Address" }, \
1857
    { (base) | 0x006,  "LE Set Advertising Parameters" }, \
1858
    { (base) | 0x007,  "LE Read Advertising Channel Tx Power" }, \
1859
    { (base) | 0x008,  "LE Set Advertising Data" }, \
1860
    { (base) | 0x009,  "LE Set Scan Response Data" }, \
1861
    { (base) | 0x00A,  "LE Set Advertise Enable" }, \
1862
    { (base) | 0x00B,  "LE Set Scan Parameters" }, \
1863
    { (base) | 0x00C,  "LE Set Scan Enable" }, \
1864
    { (base) | 0x00D,  "LE Create Connection" }, \
1865
    { (base) | 0x00E,  "LE Create Connection Cancel" }, \
1866
    { (base) | 0x00F,  "LE Read Filter Accept List Size" }, \
1867
    { (base) | 0x010,  "LE Clear Filter Accept List" }, \
1868
    { (base) | 0x011,  "LE Add Device To Filter Accept List" }, \
1869
    { (base) | 0x012,  "LE Remove Device From Filter Accept List" }, \
1870
    { (base) | 0x013,  "LE Connection Update" }, \
1871
    { (base) | 0x014,  "LE Set Host Channel Classification" }, \
1872
    { (base) | 0x015,  "LE Read Channel Map" }, \
1873
    { (base) | 0x016,  "LE Read Remote Features" }, \
1874
    { (base) | 0x017,  "LE Encrypt" }, \
1875
    { (base) | 0x018,  "LE Rand" }, \
1876
    { (base) | 0x019,  "LE Enable Encryption" }, \
1877
    { (base) | 0x01A,  "LE Long Term Key Request Reply" }, \
1878
    { (base) | 0x01B,  "LE Long Term Key Request Negative Reply" }, \
1879
    { (base) | 0x01C,  "LE Read Supported States" }, \
1880
    { (base) | 0x01D,  "LE Receiver Test [v1]" }, \
1881
    { (base) | 0x01E,  "LE Transmitter Test [v1]" }, \
1882
    { (base) | 0x01F,  "LE Test End" }, \
1883
/* Bluetooth Core 4.1 */ \
1884
    { (base) | 0x020,  "LE Remote Connection Parameter Request Reply" }, \
1885
    { (base) | 0x021,  "LE Remote Connection Parameter Request Negative Reply" }, \
1886
/* Bluetooth Core 4.2 */ \
1887
    { (base) | 0x022,  "LE Set Data Length" }, \
1888
    { (base) | 0x023,  "LE Read Suggested Default Data Length" }, \
1889
    { (base) | 0x024,  "LE Write Suggested Default Data Length" }, \
1890
    { (base) | 0x025,  "LE Read Local P-256 Public Key" }, \
1891
    { (base) | 0x026,  "LE Generate DHKey [v1]" }, \
1892
    { (base) | 0x027,  "LE Add Device to Resolving List" }, \
1893
    { (base) | 0x028,  "LE Remove Device From Resolving List" }, \
1894
    { (base) | 0x029,  "LE Clear Resolving List" }, \
1895
    { (base) | 0x02A,  "LE Read Resolving List Size" }, \
1896
    { (base) | 0x02B,  "LE Read Peer Resolvable Address" }, \
1897
    { (base) | 0x02C,  "LE Read Local Resolvable Address" }, \
1898
    { (base) | 0x02D,  "LE Set Address Resolution Enable" }, \
1899
    { (base) | 0x02E,  "LE Set Resolvable Private Address Timeout" }, \
1900
    { (base) | 0x02F,  "LE Read Maximum Data Length" }, \
1901
/* Bluetooth Core 5.0 */ \
1902
    { (base) | 0x030,  "LE Read PHY" }, \
1903
    { (base) | 0x031,  "LE Set Default PHY" }, \
1904
    { (base) | 0x032,  "LE Set PHY" }, \
1905
    { (base) | 0x033,  "LE Receiver Test [v2]" }, \
1906
    { (base) | 0x034,  "LE Transmitter Test [v2]" }, \
1907
    { (base) | 0x035,  "LE Set Advertising Set Random Address" }, \
1908
    { (base) | 0x036,  "LE Set Extended Advertising Parameters [v1]" }, \
1909
    { (base) | 0x037,  "LE Set Extended Advertising Data" }, \
1910
    { (base) | 0x038,  "LE Set Extended Scan Response Data" }, \
1911
    { (base) | 0x039,  "LE Set Extended Advertising Enable" }, \
1912
    { (base) | 0x03A,  "LE Read Maximum Advertising Data Length" }, \
1913
    { (base) | 0x03B,  "LE Read Number of Supported Advertising Sets" }, \
1914
    { (base) | 0x03C,  "LE Remove Advertising Set" }, \
1915
    { (base) | 0x03D,  "LE Clear Advertising Sets" }, \
1916
    { (base) | 0x03E,  "LE Set Periodic Advertising Parameters [v1]" }, \
1917
    { (base) | 0x03F,  "LE Set Periodic Advertising Data" }, \
1918
    { (base) | 0x040,  "LE Set Periodic Advertising Enable" }, \
1919
    { (base) | 0x041,  "LE Set Extended Scan Parameters" }, \
1920
    { (base) | 0x042,  "LE Set Extended Scan Enable" }, \
1921
    { (base) | 0x043,  "LE Extended Create Connection [v1]" }, \
1922
    { (base) | 0x044,  "LE Periodic Advertising Create Sync" }, \
1923
    { (base) | 0x045,  "LE Periodic Advertising Create Sync Cancel" }, \
1924
    { (base) | 0x046,  "LE Periodic Advertising Terminate Sync" }, \
1925
    { (base) | 0x047,  "LE Add Device To Periodic Advertiser List" }, \
1926
    { (base) | 0x048,  "LE Remove Device From Periodic Advertiser List" }, \
1927
    { (base) | 0x049,  "LE Clear Periodic Advertiser List" }, \
1928
    { (base) | 0x04A,  "LE Read Periodic Advertiser List Size" }, \
1929
    { (base) | 0x04B,  "LE Read Transmit Power" }, \
1930
    { (base) | 0x04C,  "LE Read RF Path Compensation" }, \
1931
    { (base) | 0x04D,  "LE Write RF Path Compensation" }, \
1932
    { (base) | 0x04E,  "LE Set Privacy Mode" }, \
1933
/* Bluetooth Core 5.1 */ \
1934
    { (base) | 0x04F,  "LE Receiver Test [v3]" }, \
1935
    { (base) | 0x050,  "LE Transmitter Test [v3]" }, \
1936
    { (base) | 0x051,  "LE Set Connectionless CTE Transmit Parameters" }, \
1937
    { (base) | 0x052,  "LE Set Connectionless CTE Transmit Enable" }, \
1938
    { (base) | 0x053,  "LE Set Connectionless IQ Sampling Enable" }, \
1939
    { (base) | 0x054,  "LE Set Connection CTE Receive Parameters" }, \
1940
    { (base) | 0x055,  "LE Set Connection CTE Transmit Parameters" }, \
1941
    { (base) | 0x056,  "LE Connection CTE Request Enable" }, \
1942
    { (base) | 0x057,  "LE Connection CTE Response Enable" }, \
1943
    { (base) | 0x058,  "LE Read Antenna Information" }, \
1944
    { (base) | 0x059,  "LE Set Periodic Advertising Receive Enable" }, \
1945
    { (base) | 0x05A,  "LE Periodic Advertising Sync Transfer" }, \
1946
    { (base) | 0x05B,  "LE Periodic Advertising Set Info Transfer" }, \
1947
    { (base) | 0x05C,  "LE Set Periodic Advertising Sync Transfer Parameters" }, \
1948
    { (base) | 0x05D,  "LE Set Default Periodic Advertising Sync Transfer Parameters" }, \
1949
    { (base) | 0x05E,  "LE Generate DHKey [v2]" }, \
1950
    { (base) | 0x05F,  "LE Modify Sleep Clock Accuracy" }, \
1951
/* Bluetooth Core 5.2 */ \
1952
    { (base) | 0x060,  "LE Read Buffer Size [v2]" }, \
1953
    { (base) | 0x061,  "LE Read ISO Tx Sync" }, \
1954
    { (base) | 0x062,  "LE Set CIG Parameters" }, \
1955
    { (base) | 0x063,  "LE Set CIG Parameters Test" }, \
1956
    { (base) | 0x064,  "LE Create CIS" }, \
1957
    { (base) | 0x065,  "LE Remove CIG" }, \
1958
    { (base) | 0x066,  "LE Accept CIS Request" }, \
1959
    { (base) | 0x067,  "LE Reject CIS Request" }, \
1960
    { (base) | 0x068,  "LE Create BIG" }, \
1961
    { (base) | 0x069,  "LE Create BIG Test" }, \
1962
    { (base) | 0x06A,  "LE Terminate BIG" }, \
1963
    { (base) | 0x06B,  "LE BIG Create Sync" }, \
1964
    { (base) | 0x06C,  "LE BIG Terminate Sync" }, \
1965
    { (base) | 0x06D,  "LE Request Peer SCA" }, \
1966
    { (base) | 0x06E,  "LE Setup ISO Data Path" }, \
1967
    { (base) | 0x06F,  "LE Remove ISO Data Path" }, \
1968
    { (base) | 0x070,  "LE ISO Transmit Test" }, \
1969
    { (base) | 0x071,  "LE ISO Receive Test" }, \
1970
    { (base) | 0x072,  "LE ISO Read Test Counters" }, \
1971
    { (base) | 0x073,  "LE ISO Test End" }, \
1972
    { (base) | 0x074,  "LE Set Host Feature [v1]" }, \
1973
    { (base) | 0x075,  "LE Read ISO Link Quality" }, \
1974
    { (base) | 0x076,  "LE Enhanced Read Transmit Power Level" }, \
1975
    { (base) | 0x077,  "LE Read Remote Transmit Power Level" }, \
1976
    { (base) | 0x078,  "LE Set Path Loss Reporting Parameters" }, \
1977
    { (base) | 0x079,  "LE Set Path Loss Reporting Enable" }, \
1978
    { (base) | 0x07A,  "LE Set Transmit Power Reporting Enable" }, \
1979
    { (base) | 0x07B,  "LE Transmitter Test [v4]" }, \
1980
/* Bluetooth Core 5.3 */ \
1981
    { (base) | 0x07C,  "LE Set Data Related Address Changes" }, \
1982
    { (base) | 0x07D,  "LE Set Default Subrate" }, \
1983
    { (base) | 0x07E,  "LE Subrate Request" }, \
1984
/* Bluetooth Core 5.4 */ \
1985
    { (base) | 0x07F,  "LE Set Extended Advertising Parameters [v2]" }, \
1986
    { (base) | 0x080,  "LE Set Decision Data" }, /* Bluetooth Core 6.0 */ \
1987
    { (base) | 0x081,  "LE Set Decision Instructions" }, /* Bluetooth Core 6.0 */ \
1988
    { (base) | 0x082,  "LE Set Periodic Advertising Subevent Data" }, \
1989
    { (base) | 0x083,  "LE Set Periodic Advertising Response Data" }, \
1990
    { (base) | 0x084,  "LE Set Periodic Sync Subevent" }, \
1991
    { (base) | 0x085,  "LE Extended Create Connection [v2]" }, \
1992
    { (base) | 0x086,  "LE Set Periodic Advertising Parameters [v2]" }, \
1993
/* Bluetooth Core 6.0 */ \
1994
    { (base) | 0x087,  "LE Read All Local Supported Features" }, \
1995
    { (base) | 0x088,  "LE Read All Remote Features" }, \
1996
    { (base) | 0x089,  "LE CS Read Local Supported Capabilities" }, \
1997
    { (base) | 0x08a,  "LE CS Read Remote Supported Capabilities" }, \
1998
    { (base) | 0x08b,  "LE CS Write Cached Remote Supported Capabilities" }, \
1999
    { (base) | 0x08c,  "LE CS Security Enable" }, \
2000
    { (base) | 0x08d,  "LE CS Set Default Settings" }, \
2001
    { (base) | 0x08e,  "LE CS Read Remote FAE Table" }, \
2002
    { (base) | 0x08f,  "LE CS Write Cached Remote FAE Table" }, \
2003
    { (base) | 0x090,  "LE CS Create Config" }, \
2004
    { (base) | 0x091,  "LE CS Remove Config" }, \
2005
    { (base) | 0x092,  "LE CS Set Channel Classification" }, \
2006
    { (base) | 0x093,  "LE CS Set Procedure Parameters" }, \
2007
    { (base) | 0x094,  "LE CS Procedure Enable" }, \
2008
    { (base) | 0x095,  "LE CS Test" }, \
2009
    { (base) | 0x096,  "LE CS Test End" }, \
2010
    { (base) | 0x097,  "LE Set Host Feature [v2]" }, \
2011
    { (base) | 0x098,  "LE Add Device To Monitored Advertisers List" }, \
2012
    { (base) | 0x099,  "LE Remove Device From Monitored Advertisers List" }, \
2013
    { (base) | 0x09A,  "LE Clear Monitored Advertisers List" }, \
2014
    { (base) | 0x09B,  "LE Read Monitored Advertisers List Size" }, \
2015
    { (base) | 0x09C,  "LE Enable Monitored Advertisers" }, \
2016
    { (base) | 0x09D,  "LE Frame Space Update" }
2017
2018
static const value_string bthci_cmd_ocf_low_energy_vals[] = {
2019
    LOW_ENERGY_VALS(0x0),
2020
    { 0, NULL }
2021
};
2022
2023
value_string_ext bthci_cmd_ocf_low_energy_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_ocf_low_energy_vals);
2024
2025
2026
static const value_string bthci_cmd_opcode_vals[] = {
2027
    {0x0, "No Operation"},
2028
    LINK_CONTROL_VALS(0x01 << 10),
2029
    LINK_POLICY_VALS(0x02 << 10),
2030
    HOST_CONTROLLER_AND_BASEBAND_VALS(0x03 << 10),
2031
    INFORMATIONAL_VALS(0x04 << 10),
2032
    STATUS_VALS(0x05 << 10),
2033
    TESTING_VALS(0x06 << 10),
2034
    LOW_ENERGY_VALS(0x08 << 10),
2035
    { 0, NULL }
2036
};
2037
2038
value_string_ext bthci_cmd_opcode_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_opcode_vals);
2039
2040
static const value_string bthci_cmd_status_vals[] = {
2041
    {0x00, "Success"},
2042
    {0x01, "Unknown HCI Command"},
2043
    {0x02, "Unknown Connection Identifier"},
2044
    {0x03, "Hardware Failure"},
2045
    {0x04, "Page Timeout"},
2046
    {0x05, "Authentication Failure"},
2047
    {0x06, "PIN or Key Missing"},
2048
    {0x07, "Memory Capacity Exceeded"},
2049
    {0x08, "Connection Timeout"},
2050
    {0x09, "Connection Limit Exceeded"},
2051
    {0x0A, "Synchronous Connection Limit To A Device Exceeded"},
2052
    {0x0B, "ACL Connection Already Exists"},
2053
    {0x0C, "Command Disallowed"},
2054
    {0x0D, "Connection Rejected due to Limited Resources"},
2055
    {0x0E, "Connection Rejected due To Security Reasons"},
2056
    {0x0F, "Connection Rejected due to Unacceptable BD_ADDR"},
2057
    {0x10, "Connection Accept Timeout Exceeded"},
2058
    {0x11, "Unsupported Feature or Parameter Value"},
2059
    {0x12, "Invalid HCI Command Parameters"},
2060
    {0x13, "Remote User Terminated Connection"},
2061
    {0x14, "Remote Device Terminated Connection due to Low Resources"},
2062
    {0x15, "Remote Device Terminated Connection due to Power Off"},
2063
    {0x16, "Connection Terminated by Local Host"},
2064
    {0x17, "Repeated Attempts"},
2065
    {0x18, "Pairing Not Allowed"},
2066
    {0x19, "Unknown LMP PDU"},
2067
    {0x1A, "Unsupported Remote/LMP Feature"},
2068
    {0x1B, "SCO Offset Rejected"},
2069
    {0x1C, "SCO Interval Rejected"},
2070
    {0x1D, "SCO Air Mode Rejected"},
2071
    {0x1E, "Invalid LMP/LL Parameters"},
2072
    {0x1F, "Unspecified Error"},
2073
    {0x20, "Unsupported LMP/LL Parameter Value"},
2074
    {0x21, "Role Change Not Allowed"},
2075
    {0x22, "LMP/LL Response Timeout"},
2076
    {0x23, "LMP Error Transaction Collision/LL Procedure Collision"},
2077
    {0x24, "LMP PDU Not Allowed"},
2078
    {0x25, "Encryption Mode Not Acceptable"},
2079
    {0x26, "Link Key cannot be Changed"},
2080
    {0x27, "Requested QoS Not Supported"},
2081
    {0x28, "Instant Passed"},
2082
    {0x29, "Pairing with Unit Key Not Supported"},
2083
    {0x2A, "Different Transaction Collision"},
2084
    {0x2C, "QoS Unacceptable Parameter"},
2085
    {0x2D, "QoS Rejected"},
2086
    {0x2E, "Channel Classification Not Supported"},
2087
    {0x2F, "Insufficient Security"},
2088
    {0x30, "Parameter Out Of Mandatory Range"},
2089
    {0x32, "Role Switch Pending"},
2090
    {0x34, "Reserved Slot Violation"},
2091
    {0x35, "Role Switch Failed"},
2092
    {0x36, "Extended Inquiry Response Too Large"},
2093
    {0x37, "Secure Simple Pairing Not Supported By Host"},
2094
    {0x38, "Host Busy - Pairing"},
2095
    {0x39, "Connection Rejected due to No Suitable Channel Found"},
2096
    {0x3A, "Controller Busy"},
2097
    {0x3B, "Unacceptable Connection Parameters"},
2098
    {0x3C, "Directed Advertising Timeout"},
2099
    {0x3D, "Connection Terminated due to MIC Failure"},
2100
    {0x3E, "Connection Failed to be Established"},
2101
    {0x3F, "MAC Connection Failed"},
2102
    {0x40, "Coarse Clock Adjustment Rejected but Will Try to Adjust Using Clock Dragging"},
2103
    {0x41, "Type0 Submap Not Defined"},
2104
    {0x42, "Unknown Advertising Identifier"},
2105
    {0x43, "Limit Reached"},
2106
    {0x44, "Operation Cancelled by Host"},
2107
    {0x45, "Packet Too Long"},
2108
    {0x46, "Too Late"},
2109
    {0x47, "Too Early"},
2110
    {0x48, "Insufficient Channels"},
2111
    {0, NULL }
2112
};
2113
value_string_ext bthci_cmd_status_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_status_vals);
2114
2115
static const value_string bthci_cmd_cod_major_device_class_vals[] = {
2116
    {0x00, "Miscellaneous"},
2117
    {0x01, "Computer"},
2118
    {0x02, "Phone"},
2119
    {0x03, "LAN/Network Access Point"},
2120
    {0x04, "Audio/Video"},
2121
    {0x05, "Peripheral (HID)"},
2122
    {0x06, "Imaging"},
2123
    {0x07, "Wearable"},
2124
    {0x08, "Toy"},
2125
    {0x09, "Health"},
2126
    {0x1F, "Uncategorized: device code not specified"},
2127
    {0, NULL }
2128
};
2129
static value_string_ext bthci_cmd_cod_major_device_class_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_cod_major_device_class_vals);
2130
2131
static const value_string bthci_cmd_cod_minor_device_class_computer_vals[] = {
2132
    { 0x00,  "Uncategorized, code for device not assigned" },
2133
    { 0x01,  "Desktop workstation" },
2134
    { 0x02,  "Server-class computer" },
2135
    { 0x03,  "Laptop" },
2136
    { 0x04,  "Handheld PC/PDA (clamshell)" },
2137
    { 0x05,  "Palm-size PC/PDA" },
2138
    { 0x06,  "Wearable computer (watch size)" },
2139
    { 0x07,  "Tablet" },
2140
    { 0, NULL }
2141
};
2142
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);
2143
2144
static const value_string bthci_cmd_cod_minor_device_class_phone_vals[] = {
2145
    { 0x00,  "Uncategorized, code for device not assigned" },
2146
    { 0x01,  "Cellular" },
2147
    { 0x02,  "Cordless" },
2148
    { 0x03,  "Smartphone" },
2149
    { 0x04,  "Wired modem or voice gateway" },
2150
    { 0x05,  "Common ISDN access" },
2151
    { 0, NULL }
2152
};
2153
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);
2154
2155
static const value_string bthci_cmd_cod_minor_device_class_lan_net_load_factor_vals[] = {
2156
    { 0x00,  "Fully available" },
2157
    { 0x01,  "1% to 17% utilized" },
2158
    { 0x02,  "17% to 33% utilized" },
2159
    { 0x03,  "33% to 50% utilized" },
2160
    { 0x04,  "50% to 67% utilized" },
2161
    { 0x05,  "67% to 83% utilized" },
2162
    { 0x06,  "83% to 99% utilized" },
2163
    { 0x07,  "No service available" },
2164
    { 0, NULL }
2165
};
2166
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);
2167
2168
static const value_string bthci_cmd_cod_minor_device_class_lan_net_type_vals[] = {
2169
    { 0x00,  "Uncategorized (used if no others apply)" },
2170
    { 0, NULL }
2171
};
2172
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);
2173
2174
static const value_string bthci_cmd_cod_minor_device_class_audio_video_vals[] = {
2175
    { 0x00,  "Uncategorized, code not assigned" },
2176
    { 0x01,  "Wearable Headset Device" },
2177
    { 0x02,  "Hands-free Device" },
2178
    { 0x04,  "Microphone" },
2179
    { 0x05,  "Loudspeaker" },
2180
    { 0x06,  "Headphones" },
2181
    { 0x07,  "Portable Audio" },
2182
    { 0x08,  "Car audio" },
2183
    { 0x09,  "Set-top box" },
2184
    { 0x0A,  "HiFi Audio Device" },
2185
    { 0x0B,  "VCR" },
2186
    { 0x0C,  "Video Camera" },
2187
    { 0x0D,  "Camcorder" },
2188
    { 0x0E,  "Video Monitor" },
2189
    { 0x0F,  "Video Display and Loudspeaker" },
2190
    { 0x10,  "Video Conferencing" },
2191
    { 0x12,  "Gaming/Toy" },
2192
    { 0, NULL }
2193
};
2194
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);
2195
2196
static const value_string bthci_cmd_cod_minor_device_class_peripheral_class_vals[] = {
2197
    { 0x00,  "Not Keyboard / Not Pointing Device" },
2198
    { 0x01,  "Keyboard" },
2199
    { 0x02,  "Pointing device" },
2200
    { 0x03,  "Combo keyboard/pointing device" },
2201
    { 0, NULL }
2202
};
2203
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);
2204
2205
static const value_string bthci_cmd_cod_minor_device_class_peripheral_type_vals[] = {
2206
    { 0x00,  "Uncategorized device" },
2207
    { 0x01,  "Joystick" },
2208
    { 0x02,  "Gamepad" },
2209
    { 0x03,  "Remote control" },
2210
    { 0x04,  "Sensing device" },
2211
    { 0x05,  "Digitizer tablet" },
2212
    { 0x06,  "Card Reader" },
2213
    { 0x07,  "Digital Pen" },
2214
    { 0x08,  "Handheld scanner for bar-codes" },
2215
    { 0x09,  "Handheld gestural input device" },
2216
    { 0, NULL }
2217
};
2218
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);
2219
2220
2221
static const value_string bthci_cmd_cod_minor_device_class_imaging_type_vals[] = {
2222
    { 0x00,  "Uncategorized, default" },
2223
    { 0, NULL }
2224
};
2225
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);
2226
2227
static const value_string bthci_cmd_cod_minor_device_class_wearable_vals[] = {
2228
    { 0x01,  "Wristwatch" },
2229
    { 0x02,  "Pager" },
2230
    { 0x03,  "Jacket" },
2231
    { 0x04,  "Helmet" },
2232
    { 0x05,  "Glasses" },
2233
    { 0, NULL }
2234
};
2235
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);
2236
2237
static const value_string bthci_cmd_cod_minor_device_class_toy_vals[] = {
2238
    { 0x01,  "Robot" },
2239
    { 0x02,  "Vehicle" },
2240
    { 0x03,  "Doll / Action figure" },
2241
    { 0x04,  "Controller" },
2242
    { 0x05,  "Game" },
2243
    { 0, NULL }
2244
};
2245
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);
2246
2247
static const value_string bthci_cmd_cod_minor_device_class_health_vals[] = {
2248
    { 0x00,  "Undefined" },
2249
    { 0x01,  "Blood Pressure Monitor" },
2250
    { 0x02,  "Thermometer" },
2251
    { 0x03,  "Weighing Scale" },
2252
    { 0x04,  "Glucose Meter" },
2253
    { 0x05,  "Pulse Oximeter" },
2254
    { 0x06,  "Heart/Pulse Rate Monitor" },
2255
    { 0x07,  "Health Data Display" },
2256
    { 0x08,  "Step Counter" },
2257
    { 0x09,  "Body Composition Analyzer" },
2258
    { 0x0A,  "Peak Flow Monitor" },
2259
    { 0x0B,  "Medication Monitor" },
2260
    { 0x0C,  "Knee Prosthesis" },
2261
    { 0x0D,  "Ankle Prosthesis" },
2262
    { 0x0E,  "Generic Health Manager" },
2263
    { 0x0F,  "Personal Mobility Device" },
2264
    { 0, NULL }
2265
};
2266
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);
2267
2268
/* https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile */
2269
static const value_string bthci_cmd_eir_data_type_vals[] = {
2270
    {0x01, "Flags" },
2271
    {0x02, "16-bit Service Class UUIDs (incomplete)" },
2272
    {0x03, "16-bit Service Class UUIDs" },
2273
    {0x04, "32-bit Service Class UUIDs (incomplete)" },
2274
    {0x05, "32-bit Service Class UUIDs" },
2275
    {0x06, "128-bit Service Class UUIDs (incomplete)" },
2276
    {0x07, "128-bit Service Class UUIDs" },
2277
    {0x08, "Device Name (shortened)" },
2278
    {0x09, "Device Name" },
2279
    {0x0A, "Tx Power Level" },
2280
    {0x0B, "OOB Optional Data Length" },
2281
    {0x0C, "BD_ADDR" },
2282
    {0x0D, "Class Of Device" },
2283
    {0x0E, "Simple Pairing Hash C" },
2284
    {0x0F, "Simple Pairing Randomizer R" },
2285
    {0x10, "Device ID / Security Manager TK Value" },
2286
    {0x11, "Security Manager Out of Band Flags" },
2287
    {0x12, "Peripheral Connection Interval Range" },
2288
    {0x14, "List of 16-bit Service Solicitation UUIDs" },
2289
    {0x15, "List of 128-bit Service Solicitation UUIDs" },
2290
    {0x16, "Service Data - 16 bit UUID" },
2291
    {0x17, "Public Target Address" },
2292
    {0x18, "Random Target Address" },
2293
    {0x19, "Appearance" },
2294
    {0x1A, "Advertising Interval" },
2295
    {0x1B, "LE Bluetooth Device Address" },
2296
    {0x1C, "LE Role" },
2297
    {0x1D, "Simple Pairing Hash C-256" },
2298
    {0x1E, "Simple Pairing Randomizer R-256" },
2299
    {0x1F, "List of 32-bit Service Solicitation UUIDs" },
2300
    {0x20, "Service Data - 32 bit UUID" },
2301
    {0x21, "Service Data - 128 bit UUID" },
2302
    {0x22, "LE Secure Connections Confirmation Value" },
2303
    {0x23, "LE Secure Connections Random Value" },
2304
    {0x24, "URI" },
2305
    {0x25, "Indoor Positioning" },
2306
    {0x26, "Transport Discovery Data" },
2307
    {0x27, "LE Supported Features" },
2308
    {0x28, "Channel Map Update Indication" },
2309
    {0x29, "PB-ADV" },
2310
    {0x2A, "Mesh Message" },
2311
    {0x2B, "Mesh Beacon" },
2312
    {0x2C, "BIGInfo" },
2313
    {0x2D, "Broadcast Code" },
2314
    {0x2E, "Resolvable Set Identifier" },
2315
    {0x2F, "Advertising Interval - long" },
2316
    {0x30, "Broadcast_Name" },
2317
    {0x3D, "3D Information Data" },
2318
    {0xFF, "Manufacturer Specific" },
2319
    {   0, NULL }
2320
};
2321
value_string_ext bthci_cmd_eir_data_type_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_eir_data_type_vals);
2322
2323
/* Updating based on https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml  */
2324
static const value_string bthci_cmd_appearance_vals[] = {
2325
    {    0,  "Unknown" },
2326
    {   64,  "Generic Phone" },
2327
    {  128,  "Generic Computer" },
2328
    {  192,  "Generic Watch" },
2329
    {  193,  "Watch: Sports Watch" },
2330
    {  256,  "Generic Clock" },
2331
    {  320,  "Generic Display" },
2332
    {  384,  "Generic Remote Control" },
2333
    {  448,  "Generic Eye-glasses" },
2334
    {  512,  "Generic Tag" },
2335
    {  576,  "Generic Keyring" },
2336
    {  640,  "Generic Media Player" },
2337
    {  704,  "Generic Barcode Scanner" },
2338
    {  768,  "Generic Thermometer" },
2339
    {  769,  "Thermometer: Ear" },
2340
    {  832,  "Generic Heart rate Sensor" },
2341
    {  833,  "Heart Rate Sensor: Heart Rate Belt" },
2342
    {  896,  "Generic Blood Pressure" },
2343
    {  897,  "Blood Pressure: Arm" },
2344
    {  898,  "Blood Pressure: Wrist" },
2345
    {  960,  "Human Interface Device (HID)" },
2346
    {  961,  "Keyboard" },
2347
    {  962,  "Mouse" },
2348
    {  963,  "Joystick" },
2349
    {  964,  "Gamepad" },
2350
    {  965,  "Digitizer Tablet" },
2351
    {  966,  "Card Reader" },
2352
    {  967,  "Digital Pen" },
2353
    {  968,  "Barcode Scanner" },
2354
    { 1024,  "Generic Glucose Meter" },
2355
    { 1088,  "Generic: Running Walking Sensor" },
2356
    { 1089,  "Running Walking Sensor: In-Shoe" },
2357
    { 1090,  "Running Walking Sensor: On-Shoe" },
2358
    { 1091,  "Running Walking Sensor: On-Hip" },
2359
    { 1152,  "Generic: Cycling" },
2360
    { 1153,  "Cycling: Cycling Computer" },
2361
    { 1154,  "Cycling: Speed Sensor" },
2362
    { 1155,  "Cycling: Cadence Sensor" },
2363
    { 1156,  "Cycling: Power Sensor" },
2364
    { 1157,  "Cycling: Speed and Cadence Sensor" },
2365
    { 1216,  "Generic Control Device" },
2366
    { 1217,  "Switch" },
2367
    { 1218,  "Multi-switch" },
2368
    { 1219,  "Button" },
2369
    { 1220,  "Slider" },
2370
    { 1221,  "Rotary" },
2371
    { 1222,  "Touch-panel" },
2372
    { 1280,  "Generic Network Device" },
2373
    { 1281,  "Access Point" },
2374
    { 1344,  "Generic Sensor" },
2375
    { 1345,  "Motion Sensor" },
2376
    { 1346,  "Air Quality Sensor" },
2377
    { 1347,  "Temperature Sensor" },
2378
    { 1348,  "Humidity Sensor" },
2379
    { 1349,  "Leak Sensor" },
2380
    { 1350,  "Smoke Sensor" },
2381
    { 1351,  "Occupancy Sensor" },
2382
    { 1352,  "Contact Sensor" },
2383
    { 1353,  "Carbon Monoxide Sensor" },
2384
    { 1354,  "Carbon Dioxide Sensor" },
2385
    { 1355,  "Ambient Light Sensor" },
2386
    { 1356,  "Energy Sensor" },
2387
    { 1357,  "Color Light Sensor" },
2388
    { 1358,  "Rain Sensor" },
2389
    { 1359,  "Fire Sensor" },
2390
    { 1360,  "Wind Sensor" },
2391
    { 1361,  "Proximity Sensor" },
2392
    { 1362,  "Multi-Sensor" },
2393
    { 1408,  "Generic Light Fixtures" },
2394
    { 1409,  "Wall Light" },
2395
    { 1410,  "Ceiling Light" },
2396
    { 1411,  "Floor Light" },
2397
    { 1412,  "Cabinet Light" },
2398
    { 1413,  "Desk Light" },
2399
    { 1414,  "Troffer Light" },
2400
    { 1415,  "Pendant Light" },
2401
    { 1416,  "In-ground Light" },
2402
    { 1417,  "Flood Light" },
2403
    { 1418,  "Underwater Light" },
2404
    { 1419,  "Bollard with Light" },
2405
    { 1420,  "Pathway Light" },
2406
    { 1421,  "Garden Light" },
2407
    { 1422,  "Pole-top Light" },
2408
    { 1423,  "Spotlight" },
2409
    { 1424,  "Linear Light" },
2410
    { 1425,  "Street Light" },
2411
    { 1426,  "Shelves Light" },
2412
    { 1427,  "High-bay / Low-bay Light" },
2413
    { 1428,  "Emergency Exit Light" },
2414
    { 1472,  "Generic Fan" },
2415
    { 1473,  "Ceiling Fan" },
2416
    { 1474,  "Axial Fan" },
2417
    { 1475,  "Exhaust Fan" },
2418
    { 1476,  "Pedestal Fan" },
2419
    { 1477,  "Desk Fan" },
2420
    { 1478,  "Wall Fan" },
2421
    { 1536,  "Generic HVAC" },
2422
    { 1537,  "Thermostat" },
2423
    { 1600,  "Generic Air Conditioning" },
2424
    { 1664,  "Generic Humidifier" },
2425
    { 1728,  "Generic Heating" },
2426
    { 1729,  "Radiator" },
2427
    { 1730,  "Boiler" },
2428
    { 1731,  "Heat Pump" },
2429
    { 1732,  "Infrared Heater" },
2430
    { 1733,  "Radiant Panel Heater" },
2431
    { 1734,  "Fan Heater" },
2432
    { 1735,  "Air Curtain" },
2433
    { 1792,  "Generic Access Control" },
2434
    { 1793,  "Access Door" },
2435
    { 1794,  "Garage Door" },
2436
    { 1795,  "Emergency Exit Door" },
2437
    { 1796,  "Access Lock" },
2438
    { 1797,  "Elevator" },
2439
    { 1798,  "Window" },
2440
    { 1799,  "Entrance Gate" },
2441
    { 1856,  "Generic Motorized Device" },
2442
    { 1857,  "Motorized Gate" },
2443
    { 1858,  "Awning" },
2444
    { 1859,  "Blinds or Shades" },
2445
    { 1860,  "Curtains" },
2446
    { 1861,  "Screen" },
2447
    { 1920,  "Generic Power Device" },
2448
    { 1921,  "Power Outlet" },
2449
    { 1922,  "Power Strip" },
2450
    { 1923,  "Plug" },
2451
    { 1924,  "Power Supply" },
2452
    { 1925,  "LED Driver" },
2453
    { 1926,  "Fluorescent Lamp Gear" },
2454
    { 1927,  "HID Lamp Gear" },
2455
    { 1984,  "Generic Light Source" },
2456
    { 1985,  "Incandescent Light Bulb" },
2457
    { 1986,  "LED Bulb" },
2458
    { 1987,  "HID Lamp" },
2459
    { 1988,  "Fluorescent Lamp" },
2460
    { 1989,  "LED Array" },
2461
    { 1990,  "Multi-Color LED Array" },
2462
    { 3136,  "Generic: Pulse Oximeter" },
2463
    { 3137,  "Fingertip" },
2464
    { 3138,  "Wrist Worn" },
2465
    { 3200,  "Generic: Weight Scale" },
2466
    { 3264,  "Generic Personal Mobility Device" },
2467
    { 3265,  "Powered Wheelchair" },
2468
    { 3266,  "Mobility Scooter" },
2469
    { 3328,  "Generic Continuous Glucose Monitor" },
2470
    { 5184,  "Generic: Outdoor Sports Activity" },
2471
    { 5185,  "Location Display Device" },
2472
    { 5186,  "Location and Navigation Display Device" },
2473
    { 5187,  "Location Pod" },
2474
    { 5188,  "Location and Navigation Pod" },
2475
    { 0, NULL }
2476
};
2477
value_string_ext bthci_cmd_appearance_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_appearance_vals);
2478
2479
const value_string bthci_cmd_io_capability_vals[] = {
2480
    {0x00, "Display Only" },
2481
    {0x01, "Display Yes/No" },
2482
    {0x02, "Keyboard Only" },
2483
    {0x03, "No Input, No Output" },
2484
    {   0, NULL }
2485
};
2486
2487
const value_string bthci_cmd_oob_data_present_vals[] = {
2488
    {0x00, "OOB Authentication Data Not Present" },
2489
    {0x01, "OOB Authentication Data From Remote Device Present" },
2490
    {   0, NULL }
2491
};
2492
2493
static const value_string bthci_cmd_auth_req_vals[] = {
2494
    {0x00, "MITM Protection Not Required - No Bonding. Numeric Comparison, Automatic Accept Allowed, No Secure Connection" },
2495
    {0x01, "MITM Protection Required - No Bonding. Use IO Capability To Determine Procedure, No Secure Connection" },
2496
    {0x02, "MITM Protection Not Required - Dedicated Bonding. Numeric Comparison, Automatic Accept Allowed, No Secure Connection" },
2497
    {0x03, "MITM Protection Required - Dedicated Bonding. Use IO Capability To Determine Procedure, No Secure Connection" },
2498
    {0x04, "MITM Protection Not Required - General Bonding. Numeric Comparison, Automatic Accept Allowed, No Secure Connection" },
2499
    {0x05, "MITM Protection Required - General Bonding. Use IO Capability To Determine Procedure, No Secure Connection" },
2500
    {0x08, "MITM Protection Not Required - No Bonding. Numeric Comparison, Automatic Accept Allowed, Secure Connection" },
2501
    {0x09, "MITM Protection Required - No Bonding. Use IO Capability To Determine Procedure, Secure Connection" },
2502
    {0x0A, "MITM Protection Not Required - Dedicated Bonding. Numeric Comparison, Automatic Accept Allowed,  Secure Connection" },
2503
    {0x0B, "MITM Protection Required - Dedicated Bonding. Use IO Capability To Determine Procedure, Secure Connection " },
2504
    {0x0C, "MITM Protection Not Required - General Bonding. Numeric Comparison, Automatic Accept Allowed, Secure Connection" },
2505
    {0x0D, "MITM Protection Required - General Bonding. Use IO Capability To Determine Procedure, Secure Connection" },
2506
    {   0, NULL }
2507
};
2508
value_string_ext bthci_cmd_auth_req_vals_ext = VALUE_STRING_EXT_INIT(bthci_cmd_auth_req_vals);
2509
2510
const value_string bthci_cmd_address_types_vals[] = {
2511
    { 0x00, "Public Device Address" },
2512
    { 0x01, "Random Device Address" },
2513
    { 0x02, "Public Identity Address (Corresponds to Resolved Private Address)" },
2514
    { 0x03, "Random (Static) Identity Address (Corresponds to Resolved Private Address)" },
2515
    { 0, NULL }
2516
};
2517
2518
static const value_string cmd_base_address_types_vals[] = {
2519
    { 0x00, "Public Address" },
2520
    { 0x01, "Random Address" },
2521
    { 0, NULL }
2522
};
2523
2524
static const value_string cmd_identity_address_types_vals[] = {
2525
    { 0x00, "Public Identity Address" },
2526
    { 0x01, "Random (Static) Identity Address" },
2527
    { 0, NULL }
2528
};
2529
2530
static const value_string cmd_role_vals[] = {
2531
    {0x00, "Change own Role to Central for this BD_ADDR"},
2532
    {0x01, "Change own Role to Peripheral for this BD_ADDR"},
2533
    {0, NULL }
2534
};
2535
2536
static const value_string cmd_acr_role_vals[] = {
2537
    {0x00, "Become the Central for this connection. The LM will perform the role switch."},
2538
    {0x01, "Remain the Peripheral for this connection. The LM will NOT perform the role switch."},
2539
    {0, NULL }
2540
};
2541
2542
static const value_string cmd_pin_types[] = {
2543
    {0x00, "Variable PIN" },
2544
    {0x01, "Fixed PIN" },
2545
    {0, NULL }
2546
};
2547
2548
static const value_string cmd_encryption_enable[] = {
2549
    {0x00, "Link Level Encryption is OFF"},
2550
    {0x01, "Link Level Encryption is ON"},
2551
    {0, NULL }
2552
};
2553
2554
static const value_string cmd_key_flag[] = {
2555
    {0x00, "Using Semi-permanent Link Key"},
2556
    {0x01, "Using Temporary Link Key"},
2557
    {0, NULL }
2558
};
2559
2560
static const value_string cmd_filter_types[] = {
2561
    {0x00, "Clear all Filters" },
2562
    {0x01, "Inquiry Result" },
2563
    {0x02, "Connection Setup" },
2564
    {0, NULL }
2565
};
2566
2567
static const value_string cmd_inquiry_result_filter_condition_types[] = {
2568
    {0x00, "A new device responded" },
2569
    {0x01, "A device with the specified Class of Device responded" },
2570
    {0x02, "A device with the specified BD_ADDR responded" },
2571
    {0, NULL }
2572
};
2573
2574
static const value_string cmd_flow_directions[] = {
2575
    {0x00, "Outgoing Flow" },
2576
    {0x01, "Incoming Flow" },
2577
    {0, NULL }
2578
};
2579
2580
static const value_string cmd_service_types[] = {
2581
    {0x00, "No Traffic"},
2582
    {0x01, "Best Effort"},
2583
    {0x02, "Guaranteed"},
2584
    {0, NULL }
2585
};
2586
2587
static const value_string cmd_connection_setup_filter_condition_types[] = {
2588
    {0x00, "Allow Connections from all devices" },
2589
    {0x01, "Allow Connections from a device with a specific Class of Device" },
2590
    {0x02, "Allow Connections from a device with a specific BD_ADDR" },
2591
    {0, NULL }
2592
};
2593
2594
static const value_string cmd_auto_acc_flag_values[] = {
2595
    {0x01, "Do NOT Auto accept" },
2596
    {0x02, "Do Auto accept, role switch disabled" },
2597
    {0x03, "Do Auto accept, role switch enabled" },
2598
    {0, NULL }
2599
};
2600
2601
static const value_string cmd_read_all_flag_values[] = {
2602
    {0x00, "Return Link Key for specified BD_ADDR" },
2603
    {0x01, "Return all stored Link Keys" },
2604
    {0, NULL }
2605
};
2606
2607
static const value_string cmd_delete_all_flag_values[] = {
2608
    {0x00, "Delete only Link Key for specified BD_ADDR" },
2609
    {0x01, "Delete all stored Link Keys" },
2610
    {0, NULL }
2611
};
2612
2613
const value_string bthci_cmd_scan_enable_values[] = {
2614
    {0x00, "No Scans enabled" },
2615
    {0x01, "Inquiry Scan enabled/Page Scan disable" },
2616
    {0x02, "Inquiry Scan disabled/Page Scan enabled" },
2617
    {0x03, "Inquiry Scan enabled/Page Scan enabled" },
2618
    {0, NULL }
2619
};
2620
2621
const value_string bthci_cmd_authentication_enable_values[] = {
2622
    {0x00, "Authentication disabled" },
2623
    {0x01, "Authentication enabled for all connection" },
2624
    {0, NULL }
2625
};
2626
2627
static const value_string cmd_input_coding_values[] = {
2628
    {0x0, "Linear" },
2629
    {0x1, UTF8_MICRO_SIGN "-law" },
2630
    {0x2, "A-law" },
2631
    {0, NULL }
2632
};
2633
value_string_ext bthci_cmd_input_coding_vals_ext = VALUE_STRING_EXT_INIT(cmd_input_coding_values);
2634
2635
static const value_string cmd_input_data_format_values[] = {
2636
    {0x0, "1's complement" },
2637
    {0x1, "2's complement" },
2638
    {0x2, "Sign-Magnitude" },
2639
    {0x3, "Unsigned" },
2640
    {0, NULL }
2641
};
2642
value_string_ext bthci_cmd_input_data_format_vals_ext = VALUE_STRING_EXT_INIT(cmd_input_data_format_values);
2643
2644
static const value_string cmd_input_sample_size_values[] = {
2645
    {0x0, "8 bit (only for Linear PCM)" },
2646
    {0x1, "16 bit (only for Linear PCM)" },
2647
    {0, NULL }
2648
};
2649
value_string_ext bthci_cmd_input_sample_size_vals_ext = VALUE_STRING_EXT_INIT(cmd_input_sample_size_values);
2650
2651
static const value_string cmd_air_coding_format_values[] = {
2652
    {0x0, "CVSD" },
2653
    {0x1, UTF8_MICRO_SIGN "-law" },
2654
    {0x2, "A-law" },
2655
    {0x3, "Transparent" },
2656
    {0, NULL }
2657
};
2658
value_string_ext bthci_cmd_air_coding_format_vals_ext = VALUE_STRING_EXT_INIT(cmd_air_coding_format_values);
2659
2660
static const value_string cmd_en_disabled[] = {
2661
    {0x00, "disabled" },
2662
    {0x01, "enabled" },
2663
    {0, NULL }
2664
};
2665
2666
static const value_string cmd_flow_contr_enable[] = {
2667
    {0x00, "Flow control off in direction from Host Controller to Host." },
2668
    {0x01, "ON - HCI ACL Data Packets / OFF - HCI SCO Data Packets" },
2669
    {0x02, "OFF - HCI ACL Data Packets / ON - HCI SCO Data Packets" },
2670
    {0x03, "ON - HCI ACL Data Packets / ON - HCI SCO Data Packets" },
2671
    {0, NULL }
2672
};
2673
2674
static const value_string cmd_power_level_types[] = {
2675
    {0x00, "Current Tx Power Level" },
2676
    {0x01, "Maximum Tx Power Level" },
2677
    {0, NULL }
2678
};
2679
2680
static const value_string cmd_loopback_modes[] = {
2681
    {0x00, "No Loopback mode enabled" },
2682
    {0x01, "Enable Local Loopback" },
2683
    {0x02, "Enable Remote Loopback" },
2684
    {0, NULL }
2685
};
2686
2687
const value_string bthci_cmd_encrypt_mode_vals[] = {
2688
    { 0x00, "Encryption Disabled" },
2689
    { 0x01, "Encryption only for Point-To-Point Packets" },
2690
    { 0x02, "Encryption for Point-To-Point and Broadcast Packets" },
2691
    { 0, NULL }
2692
};
2693
2694
static const value_string cmd_boolean[] = {
2695
    {0, "false" },
2696
    {1, "true" },
2697
    {0, NULL }
2698
};
2699
2700
const value_string bthci_cmd_page_scan_modes[] = {
2701
    {0, "Mandatory Page Scan Mode"},
2702
    {1, "Optional Page Scan Mode I"},
2703
    {2, "Optional Page Scan Mode II"},
2704
    {3, "Optional Page Scan Mode III"},
2705
    {0, NULL }
2706
};
2707
2708
const value_string bthci_cmd_page_scan_repetition_modes[] = {
2709
    {0, "R0"},
2710
    {1, "R1"},
2711
    {2, "R2"},
2712
    {0, NULL }
2713
};
2714
2715
const value_string bthci_cmd_page_scan_period_modes[] = {
2716
    {0, "P0"},
2717
    {1, "P1"},
2718
    {2, "P2"},
2719
    {0, NULL }
2720
};
2721
2722
static const value_string cmd_role_switch_modes[] = {
2723
    {0, "Local device will be Central, and will not accept a switch request." },
2724
    {1, "Local device may be Central, or may become Peripheral after accepting a switch." },
2725
    {0, NULL }
2726
};
2727
2728
static const value_string cmd_rtx_effort[] = {
2729
    {0x00, "No Retransmission" },
2730
    {0x01, "At least 1 retransmission, optimize for power consumption" },
2731
    {0x02, "At least 1 retransmission, optimize for link quality" },
2732
    {0xFF, "Don't Care" },
2733
    {   0, NULL }
2734
};
2735
2736
static const value_string cmd_scan_types[] = {
2737
    {0x00, "Standard Scan" },
2738
    {0x01, "Interlaced Scan" },
2739
    {   0, NULL }
2740
};
2741
2742
const value_string bthci_cmd_inq_modes[] = {
2743
    {0x00, "Standard Results" },
2744
    {0x01, "Results With RSSI" },
2745
    {0x02, "Results With RSSI or Extended Results" },
2746
    {   0, NULL }
2747
};
2748
2749
static const value_string cmd_flush_pkt_type[] = {
2750
    {0x00, "Automatically Flushable Only" },
2751
    {   0, NULL }
2752
};
2753
2754
static const value_string cmd_which_clock[] = {
2755
    {0x00, "Local" },
2756
    {0x01, "Piconet" },
2757
    {   0, NULL }
2758
};
2759
2760
const value_string bthci_cmd_notification_types[] = {
2761
    {0x00, "Passkey Entry Started" },
2762
    {0x01, "Passkey Digit Entered" },
2763
    {0x02, "Passkey Digit Erased" },
2764
    {0x03, "Passkey Cleared" },
2765
    {0x04, "Passkey Entry Completed" },
2766
    {   0, NULL }
2767
};
2768
2769
static const value_string bthci_cmd_amp_key_type[] = {
2770
  {0x03, "Debug Combination Key" },
2771
  {0x04, "Authenticated Combination Key" },
2772
  {0x05, "Unauthenticated Combination Key" },
2773
  {   0, NULL }
2774
};
2775
2776
static const value_string cmd_flow_spec_servicetype[] = {
2777
    { 0x00, "No traffic" },
2778
    { 0x01, "Best effort (Default)" },
2779
    { 0x02, "Guaranteed" },
2780
    { 0, NULL }
2781
};
2782
2783
static const value_string  cmd_flow_ctrl_mode[] = {
2784
    { 0x00, "Packet based" },
2785
    { 0x01, "Data Block based" },
2786
    { 0, NULL }
2787
};
2788
2789
static const value_string cmd_le_advertising_types[] = {
2790
    { 0x00, "Connectable Undirected Advertising" },
2791
    { 0x01, "Connectable Directed Advertising" },
2792
    { 0x02, "Scannable Undirected Advertising" },
2793
    { 0x03, "Non-Connectable Undirected Advertising" },
2794
    { 0, NULL }
2795
};
2796
2797
static const value_string cmd_le_advertising_filter_policy[] = {
2798
    { 0x00, "Allow Scan Req from Any, Allow Connect Req from Any" },
2799
    { 0x01, "Allow Scan Req from Filter Accept List Only, Allow Connect Req from Any" },
2800
    { 0x02, "Allow Scan Req from Any, Allow Connect Req from Filter Accept List Only" },
2801
    { 0x03, "Allow Scan Req from Filter Accept List Only, Allow Connect Req from Filter Accept List Only." },
2802
    { 0, NULL }
2803
};
2804
2805
static const value_string cmd_le_scan_types[] = {
2806
    { 0x00, "Passive" },
2807
    { 0x01, "Active" },
2808
    { 0, NULL }
2809
};
2810
2811
static const value_string cmd_decision_mode_filter_policy[] = {
2812
    { 0x00, "No-decisions Mode" },
2813
    { 0x01, "Process All PDUs" },
2814
    { 0x03, "Process Only Decision PDUs" },
2815
    { 0, NULL }
2816
};
2817
2818
static const value_string cmd_init_filter_policy[] = {
2819
    { 0x00, "Use provided Peer Address. Ignore decision PDUs" },
2820
    { 0x01, "Use Filter Accept List. Ignore decision PDUs" },
2821
    { 0x02, "Process only decision PDUs. Filter Accept List not used, Ignore provided Peer Address" },
2822
    { 0x03, "Use Filter Accept List for all PDUs" },
2823
    { 0x04, "Process all decision PDUs. Use Filter Accept List for other PDUs." },
2824
    { 0, NULL }
2825
};
2826
2827
static const value_string cmd_sync_filter_policy[] = {
2828
    { 0x00, "Use Peer Address" },
2829
    { 0x01, "Use Periodic Advertiser List. Ignore Peer Address" },
2830
    { 0, NULL }
2831
};
2832
2833
static const value_string cmd_privacy_mode[] = {
2834
    { 0x00, "Use Network Privacy Mode" },
2835
    { 0x01, "Use Device Privacy Mode" },
2836
    { 0, NULL }
2837
};
2838
2839
static const value_string cmd_le_test_pkt_payload[] = {
2840
    { 0x00, "Pseudo-Random Sequence 9" },
2841
    { 0x01, "Pattern Of Alternating Bits '11110000'" },
2842
    { 0x02, "Pattern Of Alternating Bits '10101010'" },
2843
    { 0x03, "Pseudo-Random Sequence 15" },
2844
    { 0x04, "Pattern Of All '1' bits" },
2845
    { 0x05, "Pattern Of All '0' bits" },
2846
    { 0x06, "Pattern Of Alternating Bits '00001111'" },
2847
    { 0x07, "Pattern Of Alternating Bits '0101'" },
2848
    { 0, NULL }
2849
};
2850
2851
static const value_string cmd_le_address_resolution_enable[] = {
2852
    { 0x00, "Address Resolution in controller disabled (default)" },
2853
    { 0x01, "Address Resolution in controller enabled" },
2854
    { 0, NULL }
2855
};
2856
2857
static const value_string le_role_vals[] = {
2858
    { 0x00, "Only Peripheral Role Supported" },
2859
    { 0x01, "Only Central Role Supported" },
2860
    { 0x02, "Peripheral and Central Role supported, Peripheral Role preferred for connection establishment" },
2861
    { 0x03, "Peripheral and Central Role supported, Central Role preferred for connection establishment" },
2862
    { 0, NULL }
2863
};
2864
2865
static const value_string tds_role_vals[] = {
2866
    { 0x00, "Not Specified" },
2867
    { 0x01, "Seeker Only" },
2868
    { 0x02, "Provider Only" },
2869
    { 0x03, "Both Seeker and Provider" },
2870
    {0, NULL }
2871
};
2872
2873
static const value_string tds_transport_state_vals[] = {
2874
    { 0x00, "Off" },
2875
    { 0x01, "On" },
2876
    { 0x02, "Temporarily Unavailable" },
2877
    { 0x03, "RFU" },
2878
    {0, NULL }
2879
};
2880
2881
static const value_string cmd_le_adv_data_operation[] = {
2882
    { 0x00, "Intermediate fragment of fragmented data" },
2883
    { 0x01, "First fragment of fragmented data" },
2884
    { 0x02, "Last fragment of fragmented data" },
2885
    { 0x03, "Complete scan response data" },
2886
    { 0x04, "Unchanged Data, DID update only" },
2887
    { 0, NULL }
2888
};
2889
2890
static const value_string cmd_le_adv_data_frag_pref[] = {
2891
    { 0x00, "Controller may fragment all Host data" },
2892
    { 0x01, "Controller should not fragment or should minimize fragmentation of Host data" },
2893
    { 0, NULL }
2894
};
2895
2896
static const value_string cmd_le_phy_options_vals[] = {
2897
    { 0x00, "Host has no preferred/required coding on LE Coded PHY" },
2898
    { 0x01, "Host prefers S=2 coding on LE Coded PHY" },
2899
    { 0x02, "Host prefers S=8 coding on LE Coded PHY" },
2900
    { 0x03, "Host requires S=2 coding on LE Coded PHY" },
2901
    { 0x04, "Host requires S=8 coding on LE Coded PHY" },
2902
    { 0, NULL }
2903
};
2904
2905
static const value_string cmd_le_phy_vals[] = {
2906
    { 0x01, "LE 1M" },
2907
    { 0x02, "LE 2M" },
2908
    { 0x03, "LE Coded" },
2909
    { 0, NULL }
2910
};
2911
value_string_ext bthci_cmd_le_phy_vals_ext = VALUE_STRING_EXT_INIT(cmd_le_phy_vals);
2912
2913
static const value_string cmd_le_modulation_index_vals[] = {
2914
    { 0x00, "Assume transmitter will have a standard modulation index" },
2915
    { 0x01, "Assume transmitter will have a stable modulation index" },
2916
    { 0, NULL }
2917
};
2918
2919
static const value_string cmd_cte_type_vals[] = {
2920
    { 0x00,  "AoA Constant Tone Extension" },
2921
    { 0x01,  "AoD Constant Tone Extension with 1 usec slots" },
2922
    { 0x02,  "AoD Constant Tone Extension with 2 usec slots" },
2923
    { 0xFF,  "No Constant Tone Extension" },
2924
    { 0, NULL }
2925
};
2926
value_string_ext bthci_cmd_cte_type_vals_ext = VALUE_STRING_EXT_INIT(cmd_cte_type_vals);
2927
2928
static const value_string cmd_slot_durations_vals[] = {
2929
    { 0x01, "Switching and sampling slots are 1 usec each" },
2930
    { 0x02, "Switching and sampling slots are 2 usec each" },
2931
    { 0, NULL }
2932
};
2933
value_string_ext bthci_cmd_slot_durations_vals_ext = VALUE_STRING_EXT_INIT(cmd_slot_durations_vals);
2934
2935
static const value_string cmd_sync_mode_vals[] = {
2936
    { 0x00, "No synchronize attempt, no LE Periodic Advertising Sync Transfer Received event sent to Host" },
2937
    { 0x01, "LE Periodic Advertising Sync Transfer Received event sent to Host. LE Periodic Advertising Report events disabled" },
2938
    { 0x02, "LE Periodic Advertising Sync Transfer Received event sent to Host. LE Periodic Advertising Report events enabled" },
2939
    { 0, NULL }
2940
};
2941
2942
static const value_string cmd_key_type_vals[] = {
2943
    { 0x00, "Use the generated private key" },
2944
    { 0x01, "Use the debug private key" },
2945
    { 0, NULL }
2946
};
2947
2948
static const value_string cmd_sca_action_vals[] = {
2949
    { 0x00, "Switch to a more accurate clock" },
2950
    { 0x01, "Switch to a less accurate clock" },
2951
    { 0, NULL }
2952
};
2953
2954
static const value_string cmd_clock_accuray_vals[] = {
2955
    { 0x00, "251-500 ppm" },
2956
    { 0x01, "151-250 ppm" },
2957
    { 0x02, "101-150 ppm" },
2958
    { 0x03, "76-100 ppm" },
2959
    { 0x04, "51-75 ppm" },
2960
    { 0x05, "31-50 ppm" },
2961
    { 0x06, "21-30 ppm" },
2962
    { 0x07, "0-20 ppm" },
2963
    { 0, NULL }
2964
};
2965
value_string_ext bthci_cmd_clock_accuray_vals_ext = VALUE_STRING_EXT_INIT(cmd_clock_accuray_vals);
2966
2967
static const value_string cmd_packing_vals[] = {
2968
    { 0x00, "Sequential" },
2969
    { 0x01, "Interleaved" },
2970
    { 0, NULL }
2971
};
2972
2973
static const value_string cmd_framing_vals[] = {
2974
    { 0x00, "Unframed" },
2975
    { 0x01, "Framed, Segmentable Mode" },
2976
    { 0x02, "Framed, Unsegmented Mode" },
2977
    { 0, NULL }
2978
};
2979
value_string_ext bthci_cmd_framing_vals_ext = VALUE_STRING_EXT_INIT(cmd_framing_vals);
2980
2981
static const value_string cmd_data_path_direction_vals[] = {
2982
    { 0x00, "Input (Host to Controller)" },
2983
    { 0x01, "Output (Controller to Host)" },
2984
    { 0, NULL }
2985
};
2986
2987
static const value_string cmd_payload_type_vals[] = {
2988
    { 0x00, "Zero Length" },
2989
    { 0x01, "Variable Length" },
2990
    { 0x02, "Maximum Length" },
2991
    { 0, NULL }
2992
};
2993
2994
static const value_string cmd_host_enabled_feature_bit_vals[] = {
2995
    { 32, "Isochronous Channels, Host Support" },
2996
    { 38, "Connection Subrating, Host Support" },
2997
    { 0, NULL }
2998
};
2999
3000
static const value_string cmd_phy_and_coding_vals[] = {
3001
    { 0x01, "LE 1M" },
3002
    { 0x02, "LE 2M" },
3003
    { 0x03, "LE Coded, S=8" },
3004
    { 0x04, "LE Coded, S=2" },
3005
    { 0, NULL }
3006
};
3007
value_string_ext bthci_cmd_phy_and_coding_vals_ext = VALUE_STRING_EXT_INIT(cmd_phy_and_coding_vals);
3008
3009
static const value_string disable_enable_vals[] = {
3010
    { 0x00, "Disable" },
3011
    { 0x01, "Enable" },
3012
    {0, NULL }
3013
};
3014
3015
static const value_string lpo_allowed_vals[] = {
3016
    { 0x00, "Controller shall not sleep (+20ppm)" },
3017
    { 0x01, "Controller may sleep (+250ppm)" },
3018
    {0, NULL }
3019
};
3020
3021
static const value_string pcm_data_format_vals[] = {
3022
    { 0x00, "N/A" },
3023
    { 0x01, "1's complement" },
3024
    { 0x02, "2's complement" },
3025
    { 0x03, "Sign-Magnitude" },
3026
    { 0x04, "Unsigned" },
3027
    {0, NULL }
3028
};
3029
3030
static const range_string audio_data_path_rvals[] = {
3031
    { 0x00, 0x00, "HCI" },
3032
    { 0x01, 0xFE, "Vendor Specific" },
3033
    { 0xFF, 0xFF, "Audio Test Mode" },
3034
    { 0, 0, NULL }
3035
};
3036
3037
static const value_string mws_channel_type_vals[] = {
3038
    { 0x00, "TDD" },
3039
    { 0x01, "FDD" },
3040
    {0, NULL }
3041
};
3042
3043
static const value_string external_frame_period_type_vals[] = {
3044
    { 0x00, "Downlink" },
3045
    { 0x01, "Uplink" },
3046
    { 0x02, "Bi-Directional" },
3047
    { 0x03, "Guard Period" },
3048
    {0, NULL }
3049
};
3050
3051
static const value_string mws_pattern_type_vals[] = {
3052
    { 0x00, "Neither Transmission nor Reception is Allowed" },
3053
    { 0x01, "Transmission is Allowed" },
3054
    { 0x02, "Reception is Allowed" },
3055
    { 0x03, "Both Transmission and Reception are Allowed" },
3056
    { 0x04, "Interval Defined by HCI Command" },
3057
    {0, NULL }
3058
};
3059
3060
static const value_string cpb_fragment_vals[] = {
3061
    { 0x00, "Continuation" },
3062
    { 0x01, "Start" },
3063
    { 0x02, "End" },
3064
    { 0x03, "No" },
3065
    {0, NULL }
3066
};
3067
3068
static const val64_string cmd_biginfo_le_phy_vals64[] = {
3069
    { 0x00, "LE 1M" },
3070
    { 0x01, "LE 2M" },
3071
    { 0x02, "LE Coded" },
3072
    { 0, NULL }
3073
};
3074
3075
static const true_false_string tfs_offset_units = {
3076
    "300 usec",
3077
    "30 usec"
3078
};
3079
3080
static const value_string adv_test_field_special[] = {
3081
    { 0x00, "Resolvable Tag" },
3082
    { 0x06, "Adv Mode" },
3083
    { 0x07, "RSSI" },
3084
    { 0x08, "Path Loss" },
3085
    { 0x09, "Adv Address" },
3086
    {0, NULL }
3087
};
3088
3089
static const value_string cmd_cs_sync_phy_vals[] = {
3090
    { 0x01, "LE 1M" },
3091
    { 0x02, "LE 2M" },
3092
    { 0x03, "LE 2M 2BT" },
3093
    { 0, NULL }
3094
};
3095
3096
static const value_string cmd_cs_role_vals[] = {
3097
    { 0x00, "Initiator" },
3098
    { 0x01, "Reflector" },
3099
    {0, NULL }
3100
};
3101
value_string_ext bthci_cmd_cs_role_vals_ext = VALUE_STRING_EXT_INIT(cmd_cs_role_vals);
3102
3103
static const value_string cmd_aci_vals[] = {
3104
    { 0x00, "1:1" },
3105
    { 0x01, "2:1" },
3106
    { 0x02, "3:1" },
3107
    { 0x03, "4:1" },
3108
    { 0x04, "1:2" },
3109
    { 0x05, "1:3" },
3110
    { 0x06, "1:4" },
3111
    { 0x07, "2:2" },
3112
    {0, NULL }
3113
};
3114
value_string_ext bthci_cmd_aci_vals_ext = VALUE_STRING_EXT_INIT(cmd_aci_vals);
3115
3116
static const value_string cmd_cs_create_context_vals[] = {
3117
    { 0x00, "Local Controller Only" },
3118
    { 0x01, "Local and Remote Controller" },
3119
    {0, NULL }
3120
};
3121
3122
static const value_string cmd_cs_rtt_type_vals[] = {
3123
    { 0x00, "Coarse" },
3124
    { 0x01, "32-bit Sounding Sequence" },
3125
    { 0x02, "96-bit Sounding Sequence" },
3126
    { 0x03, "32-bit Random Sequence" },
3127
    { 0x04, "64-bit Random Sequence" },
3128
    { 0x05, "96-bit Random Sequence" },
3129
    { 0x06, "128-bit Random Sequence" },
3130
    {0, NULL }
3131
};
3132
value_string_ext bthci_cmd_cs_rtt_type_vals_ext = VALUE_STRING_EXT_INIT(cmd_cs_rtt_type_vals);
3133
3134
static const value_string cmd_cs_ch_selection_type_vals[] = {
3135
    { 0x00, "#3b" },
3136
    { 0x01, "#3c" },
3137
    {0, NULL }
3138
};
3139
value_string_ext bthci_cmd_cs_ch_selection_type_vals_ext = VALUE_STRING_EXT_INIT(cmd_cs_ch_selection_type_vals);
3140
3141
static const value_string cmd_cs_shape_vals[] = {
3142
    { 0x00, "Hat" },
3143
    { 0x01, "Cross (X)" },
3144
    {0, NULL }
3145
};
3146
value_string_ext bthci_cmd_cs_shape_vals_ext = VALUE_STRING_EXT_INIT(cmd_cs_shape_vals);
3147
3148
static const value_string cmd_snr_control_vals[] = {
3149
    { 0x00, "18 dB" },
3150
    { 0x01, "21 dB" },
3151
    { 0x02, "24 dB" },
3152
    { 0x03, "27 dB" },
3153
    { 0x04, "30 dB" },
3154
    { 0xff, "Not applied" },
3155
    {0, NULL }
3156
};
3157
3158
static const value_string cs_sync_antenna_special[] = {
3159
    {0xfe, "Repetitive order, 1 to 4"},
3160
    {0xff, "Host has no recommendation"},
3161
    {0, NULL}
3162
};
3163
3164
0
static void tx_power_setting(char *buf, int8_t value) {
3165
0
    if (value < 126)
3166
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%i dBm", value);
3167
0
    else if (value == 126)
3168
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Set to minimum");
3169
0
    else
3170
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Set to maximum");
3171
0
}
3172
3173
3174
void proto_register_bthci_cmd(void);
3175
void proto_reg_handoff_bthci_cmd(void);
3176
void proto_register_btcommon(void);
3177
void proto_reg_handoff_btcommon(void);
3178
3179
static void bthci_cmd_vendor_prompt(packet_info *pinfo _U_, char* result)
3180
0
{
3181
0
    snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "Vendor as");
3182
0
}
3183
3184
static int dissect_coding_format(proto_tree *tree, int hf_x, tvbuff_t *tvb, int offset, int ett_x)
3185
0
{
3186
0
    proto_item *sub_item;
3187
0
    proto_tree *sub_tree;
3188
3189
0
    sub_item = proto_tree_add_item(tree, hf_x, tvb, offset, 5, ENC_NA);
3190
0
    sub_tree = proto_item_add_subtree(sub_item, ett_x);
3191
3192
0
    proto_tree_add_item(sub_tree, hf_bthci_cmd_codec_id, tvb, offset, 1, ENC_NA);
3193
0
    offset += 1;
3194
3195
0
    proto_tree_add_item(sub_tree, hf_bthci_cmd_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3196
0
    offset += 2;
3197
3198
0
    proto_tree_add_item(sub_tree, hf_bthci_cmd_vendor_codec_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3199
0
    offset += 2;
3200
3201
0
    return offset;
3202
0
}
3203
3204
static int
3205
dissect_bthci_cmd_cod_mask(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
3206
0
{
3207
0
    proto_item  *cod_mask_item;
3208
0
    proto_item  *cod_mask_tree;
3209
3210
0
    cod_mask_item = proto_tree_add_item(tree, hf_bthci_cmd_cod_class_of_device_mask, tvb, offset, 3, ENC_LITTLE_ENDIAN);
3211
0
    cod_mask_tree = proto_item_add_subtree(cod_mask_item, ett_cod_mask);
3212
3213
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_minor_device_class_mask, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3214
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_format_type_mask, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3215
0
    offset += 1;
3216
3217
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_information_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3218
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_telephony_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3219
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_audio_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3220
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_object_transfer_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3221
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_capturing_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3222
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_rendering_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3223
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_networking_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3224
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_positioning_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3225
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_reserved_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3226
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_le_audio_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3227
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_service_class_limited_discoverable_mode_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3228
3229
0
    proto_tree_add_item(cod_mask_tree, hf_bthci_cmd_cod_major_device_class_mask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3230
0
    offset += 2;
3231
3232
0
    return offset;
3233
0
}
3234
3235
static int
3236
dissect_bthci_cmd_flow_spec(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, bool tx)
3237
0
{
3238
0
    proto_item *ti_flow_spec;
3239
0
    proto_tree *ti_flow_spec_subtree;
3240
3241
0
    ti_flow_spec = proto_tree_add_none_format(tree, hf_bthci_cmd_flow_spec, tvb, offset, 16, tx?"Tx Flow Spec ":"Rx Flow Spec");
3242
0
    ti_flow_spec_subtree = proto_item_add_subtree(ti_flow_spec, ett_flow_spec_subtree);
3243
3244
0
    proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flow_spec_identifier, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3245
0
    offset++;
3246
0
    proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flow_spec_service_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3247
0
    offset++;
3248
0
    proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flow_spec_sdu_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3249
0
    offset+=2;
3250
0
    proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flow_spec_sdu_arrival_time, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3251
0
    offset+=4;
3252
0
    proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flow_spec_access_latency, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3253
0
    offset+=4;
3254
0
    proto_tree_add_item(ti_flow_spec_subtree, hf_bthci_cmd_flush_to_us, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3255
0
    offset+=4;
3256
3257
0
    return offset;
3258
0
}
3259
3260
static int
3261
dissect_antenna_switching_pattern(tvbuff_t *tvb, int offset, proto_tree *tree)
3262
0
{
3263
0
    uint8_t length_antenna_pattern;
3264
3265
0
    proto_tree_add_item(tree, hf_bthci_cmd_antenna_switching_pattern_length, tvb, offset, 1, ENC_NA);
3266
0
    length_antenna_pattern = tvb_get_uint8(tvb, offset);
3267
0
    offset += 1;
3268
3269
0
    if (length_antenna_pattern > 0) {
3270
0
        proto_item *sub_item;
3271
0
        proto_tree *sub_tree;
3272
3273
0
        sub_item = proto_tree_add_item(tree, hf_bthci_cmd_antenna_switching_pattern, tvb, offset, length_antenna_pattern, ENC_NA);
3274
0
        sub_tree = proto_item_add_subtree(sub_item, ett_pattern);
3275
0
        proto_item_append_text(sub_item, ": ");
3276
3277
0
        while (length_antenna_pattern > 0) {
3278
0
            proto_tree_add_item(sub_tree, hf_bthci_cmd_antenna_id, tvb, offset, 1, ENC_NA);
3279
0
            proto_item_append_text(sub_item, "%d ", tvb_get_uint8(tvb, offset));
3280
0
            offset++;
3281
0
            length_antenna_pattern--;
3282
0
        }
3283
0
    }
3284
0
    return offset;
3285
0
}
3286
3287
static int
3288
dissect_link_control_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo,
3289
        proto_tree *tree, uint16_t cmd_ocf, bluetooth_data_t *bluetooth_data)
3290
0
{
3291
0
    proto_item *item;
3292
0
    uint32_t    clock_value;
3293
3294
0
    switch (cmd_ocf) {
3295
0
        case 0x0001: /* Inquiry */
3296
0
            proto_tree_add_item(tree, hf_bthci_cmd_lap, tvb, offset, 3, ENC_LITTLE_ENDIAN);
3297
0
            offset+=3;
3298
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_inq_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3299
0
            proto_item_append_text(item, " (%g sec)", 1.28*tvb_get_uint8(tvb, offset));
3300
0
            offset++;
3301
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_responses, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3302
0
            offset++;
3303
0
            break;
3304
3305
0
        case 0x0003: /* Periodic Inquiry Mode */
3306
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_max_period_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3307
0
            proto_item_append_text(item, " (%g sec)", 1.28*tvb_get_letohs(tvb, offset));
3308
0
            offset+=2;
3309
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_min_period_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3310
0
            proto_item_append_text(item, " (%g sec)", 1.28*tvb_get_letohs(tvb, offset));
3311
0
            offset+=2;
3312
0
            proto_tree_add_item(tree, hf_bthci_cmd_lap, tvb, offset, 3, ENC_LITTLE_ENDIAN);
3313
0
            offset+=3;
3314
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_inq_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3315
0
            proto_item_append_text(item, " (%g sec)", 1.28*tvb_get_uint8(tvb, offset));
3316
0
            offset++;
3317
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_responses, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3318
0
            offset++;
3319
0
            break;
3320
3321
0
        case 0x0005: /* Create Connection */
3322
0
            {
3323
0
            uint8_t bd_addr[6];
3324
3325
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, bd_addr);
3326
3327
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_packet_type, ett_packet_type, hfx_bthci_cmd_packet_type, ENC_LITTLE_ENDIAN);
3328
0
            offset += 2;
3329
3330
0
            proto_tree_add_item(tree, hf_bthci_cmd_page_scan_repetition_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3331
0
            offset++;
3332
3333
0
            proto_tree_add_item(tree, hf_bthci_cmd_page_scan_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3334
0
            offset++;
3335
3336
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_clock_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3337
0
            clock_value = tvb_get_letohs(tvb, 13) & 32767; /* only bit0-14 are valid  */
3338
0
            proto_item_append_text(item, " (%g msec)", 1.25*clock_value);
3339
0
            proto_tree_add_item(tree, hf_bthci_cmd_clock_offset_valid , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3340
0
            offset+=2;
3341
3342
0
            proto_tree_add_item(tree, hf_bthci_cmd_allow_role_switch, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3343
0
            offset++;
3344
3345
0
            if (!pinfo->fd->visited) {
3346
0
                uint32_t          interface_id;
3347
0
                uint32_t          adapter_id;
3348
0
                uint32_t          bd_addr_oui;
3349
0
                uint32_t          bd_addr_id;
3350
0
                uint32_t          frame_number;
3351
0
                wmem_tree_key_t   key[6];
3352
0
                device_role_t    *device_role;
3353
3354
0
                interface_id = bluetooth_data->interface_id;
3355
0
                adapter_id   = bluetooth_data->adapter_id;
3356
0
                frame_number = pinfo->num;
3357
0
                bd_addr_oui  = bd_addr[0] << 16 | bd_addr[1] << 8 | bd_addr[2];
3358
0
                bd_addr_id   = bd_addr[3] << 16 | bd_addr[4] << 8 | bd_addr[5];
3359
3360
0
                key[0].length = 1;
3361
0
                key[0].key    = &interface_id;
3362
0
                key[1].length = 1;
3363
0
                key[1].key    = &adapter_id;
3364
0
                key[2].length = 1;
3365
0
                key[2].key    = &bd_addr_id;
3366
0
                key[3].length = 1;
3367
0
                key[3].key    = &bd_addr_oui;
3368
0
                key[4].length = 1;
3369
0
                key[4].key    = &frame_number;
3370
0
                key[5].length = 0;
3371
0
                key[5].key    = NULL;
3372
3373
0
                device_role = (device_role_t *) wmem_new(wmem_file_scope(), device_role_t);
3374
0
                device_role->change_in_frame = frame_number;
3375
0
                device_role->role = ROLE_PERIPHERAL;
3376
3377
0
                wmem_tree_insert32_array(bluetooth_data->bdaddr_to_role, key, device_role);
3378
0
            }
3379
0
            }
3380
0
            break;
3381
3382
0
        case 0x0006: /* Disconnect */
3383
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3384
0
            offset+=2;
3385
0
            proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3386
0
            offset++;
3387
0
            break;
3388
3389
0
        case 0x0007: /* Add SCO Connection */
3390
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3391
0
            offset+=2;
3392
0
            proto_tree_add_item(tree, hf_bthci_cmd_packet_type_hv1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3393
0
            proto_tree_add_item(tree, hf_bthci_cmd_packet_type_hv2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3394
0
            proto_tree_add_item(tree, hf_bthci_cmd_packet_type_hv3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3395
0
            offset+=2;
3396
0
            break;
3397
3398
0
        case 0x0008: /* Create Connection Cancel Request */
3399
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3400
0
            break;
3401
3402
0
        case 0x0009: /* Accept Connection Request */ {
3403
0
            uint8_t bd_addr[6];
3404
3405
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, bd_addr);
3406
3407
0
            proto_tree_add_item(tree, hf_bthci_cmd_acr_role, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3408
0
            offset += 1;
3409
3410
0
            if (!pinfo->fd->visited) {
3411
0
                uint32_t          interface_id;
3412
0
                uint32_t          adapter_id;
3413
0
                uint32_t          bd_addr_oui;
3414
0
                uint32_t          bd_addr_id;
3415
0
                uint32_t          frame_number;
3416
0
                wmem_tree_key_t   key[6];
3417
0
                device_role_t    *device_role;
3418
3419
0
                interface_id = bluetooth_data->interface_id;
3420
0
                adapter_id   = bluetooth_data->adapter_id;
3421
0
                frame_number = pinfo->num;
3422
0
                bd_addr_oui  = bd_addr[0] << 16 | bd_addr[1] << 8 | bd_addr[2];
3423
0
                bd_addr_id   = bd_addr[3] << 16 | bd_addr[4] << 8 | bd_addr[5];
3424
3425
0
                key[0].length = 1;
3426
0
                key[0].key    = &interface_id;
3427
0
                key[1].length = 1;
3428
0
                key[1].key    = &adapter_id;
3429
0
                key[2].length = 1;
3430
0
                key[2].key    = &bd_addr_id;
3431
0
                key[3].length = 1;
3432
0
                key[3].key    = &bd_addr_oui;
3433
0
                key[4].length = 1;
3434
0
                key[4].key    = &frame_number;
3435
0
                key[5].length = 0;
3436
0
                key[5].key    = NULL;
3437
3438
0
                device_role = (device_role_t *) wmem_new(wmem_file_scope(), device_role_t);
3439
0
                device_role->change_in_frame = frame_number;
3440
0
                device_role->role = ROLE_CENTRAL;
3441
3442
0
                wmem_tree_insert32_array(bluetooth_data->bdaddr_to_role, key, device_role);
3443
0
            }
3444
0
            }
3445
0
            break;
3446
3447
0
        case 0x000a: /* Reject Connection Request */
3448
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3449
3450
0
            proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3451
0
            offset++;
3452
0
            break;
3453
3454
0
        case 0x000b: /* Link Key Request Reply */
3455
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3456
3457
0
            proto_tree_add_item(tree, hf_bthci_cmd_link_key, tvb, offset, 16, ENC_NA);
3458
0
            offset+=16;
3459
0
            break;
3460
3461
0
        case 0x000c: /* Link Key Request Negative Reply */
3462
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3463
0
            break;
3464
3465
0
        case 0x000d: /* PIN Code Request Reply */
3466
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3467
3468
0
            proto_tree_add_item(tree, hf_bthci_cmd_pin_code_length ,tvb, offset, 1, ENC_LITTLE_ENDIAN);
3469
0
            offset++;
3470
0
            proto_tree_add_item(tree, hf_bthci_cmd_pin_code ,tvb, offset, 16, ENC_ASCII);
3471
0
            offset+=16;
3472
0
            break;
3473
3474
0
        case 0x000e: /* PIN Code Request Negative Reply */
3475
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3476
0
            break;
3477
3478
0
        case 0x000f: /* Change Connection Packet Type */
3479
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3480
0
            offset+=2;
3481
3482
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_packet_type, ett_packet_type, hfx_bthci_cmd_packet_type, ENC_LITTLE_ENDIAN);
3483
0
            offset += 2;
3484
3485
0
            break;
3486
3487
0
        case 0x0011: /* Authentication Request */
3488
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3489
0
            offset+=2;
3490
0
            break;
3491
3492
0
        case 0x0013: /* Set Connection Encryption */
3493
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3494
0
            offset+=2;
3495
0
            proto_tree_add_item(tree, hf_bthci_cmd_encryption_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3496
0
            offset++;
3497
0
            break;
3498
3499
0
        case 0x0017: /* Link Key Selection */
3500
0
            proto_tree_add_item(tree, hf_bthci_cmd_key_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3501
0
            offset++;
3502
0
            break;
3503
3504
0
        case 0x0019: /* Remote Name Request */
3505
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3506
3507
0
            proto_tree_add_item(tree, hf_bthci_cmd_page_scan_repetition_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3508
0
            offset++;
3509
3510
0
            proto_tree_add_item(tree, hf_bthci_cmd_page_scan_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3511
0
            offset++;
3512
3513
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_clock_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3514
0
            clock_value = tvb_get_letohs(tvb, offset) & 32767; /* only bit0-14 are valid  */
3515
0
            proto_item_append_text(item, " (%g msec)", 1.25*clock_value);
3516
0
            proto_tree_add_item(tree, hf_bthci_cmd_clock_offset_valid , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3517
0
            offset+=2;
3518
0
            break;
3519
3520
0
        case 0x001a: /* Remote Name Request Cancel */
3521
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3522
0
            break;
3523
3524
0
        case 0x001c: /* Read Remote Extended Features */
3525
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3526
0
            offset+=2;
3527
0
            proto_tree_add_item(tree, hf_bthci_cmd_page_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3528
0
            offset++;
3529
0
            break;
3530
3531
0
        case 0x0028: /* Setup Synchronous Connection */
3532
0
        case 0x0029: /* Accept Synchronous Connection Request */
3533
0
            if (cmd_ocf == 0x0028) {
3534
0
                proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3535
0
                offset+=2;
3536
0
            } else {
3537
0
                offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3538
0
            }
3539
3540
0
            proto_tree_add_item(tree, hf_bthci_cmd_transmit_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3541
0
            offset+=4;
3542
3543
0
            proto_tree_add_item(tree, hf_bthci_cmd_receive_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3544
0
            offset+=4;
3545
3546
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_latency_ms, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3547
0
            offset+=2;
3548
3549
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_unused, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3550
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_coding, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3551
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_data_format, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3552
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_sample_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3553
0
            proto_tree_add_item(tree, hf_bthci_cmd_linear_pcm_bit_pos, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3554
0
            proto_tree_add_item(tree, hf_bthci_cmd_air_coding_format, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3555
0
            offset+=2;
3556
3557
0
            proto_tree_add_item(tree, hf_bthci_cmd_retransmission_effort, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3558
0
            offset++;
3559
3560
0
            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);
3561
0
            offset += 2;
3562
3563
0
            break;
3564
0
        case 0x002a: /* Reject Synchronous Connection Request */
3565
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3566
3567
0
            proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3568
0
            offset++;
3569
0
            break;
3570
3571
0
        case 0x0015: /* Change Connection Link Key */
3572
0
        case 0x001b: /* Read Remote Supported Features */
3573
0
        case 0x001d: /* Read Remote Version Information */
3574
0
        case 0x001f: /* Read Clock Offset*/
3575
0
        case 0x0020: /* Read LMP Handle */
3576
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3577
0
            offset+=2;
3578
0
            break;
3579
3580
0
        case 0x002b: /* IO Capability Response */
3581
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3582
3583
0
            proto_tree_add_item(tree, hf_bthci_cmd_io_capability, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3584
0
            offset++;
3585
0
            proto_tree_add_item(tree, hf_bthci_cmd_oob_data_present, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3586
0
            offset++;
3587
0
            proto_tree_add_item(tree, hf_bthci_cmd_auth_requirements, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3588
0
            offset++;
3589
0
            break;
3590
3591
0
        case 0x0034: /* IO Capability Request Negative Reply */
3592
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3593
0
            proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3594
0
            offset++;
3595
0
            break;
3596
3597
0
        case 0x002c: /* User Confirmation Request Reply */
3598
0
        case 0x002d: /* User Confirmation Request Negative Reply */
3599
0
        case 0x002f: /* User Passkey Request Negative Reply */
3600
0
        case 0x0033: /* Remote OOB Data Request Negative Reply */
3601
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3602
0
            break;
3603
3604
0
        case 0x002e: /* User Passkey Request Reply */
3605
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3606
3607
0
            proto_tree_add_item(tree, hf_bthci_cmd_passkey, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3608
0
            offset+=4;
3609
0
            break;
3610
3611
0
        case 0x0030: /* Remote OOB Data Request Reply */
3612
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3613
3614
0
            proto_tree_add_item(tree, hf_bthci_cmd_hash_c, tvb, offset, 16, ENC_NA);
3615
0
            offset+=16;
3616
0
            proto_tree_add_item(tree, hf_bthci_cmd_randomizer_r, tvb, offset, 16, ENC_NA);
3617
0
            offset+=16;
3618
0
            break;
3619
3620
0
        case 0x0035: /* Create Physical Link */
3621
0
        case 0x0036: /* Accept Physical Link */
3622
0
            proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3623
0
            offset++;
3624
0
            proto_tree_add_item(tree, hf_bthci_cmd_dedicated_amp_key_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3625
0
            offset++;
3626
0
            proto_tree_add_item(tree, hf_bthci_cmd_dedicated_amp_key_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3627
0
            offset++;
3628
0
            proto_tree_add_item(tree, hf_bthci_cmd_dedicated_amp_key, tvb, offset, -1, ENC_NA);
3629
0
            offset+=tvb_reported_length_remaining(tvb, offset);
3630
0
            break;
3631
3632
0
        case 0x0037: /* Disconnect Physical Link */
3633
0
            proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3634
0
            offset++;
3635
0
            proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3636
0
            offset++;
3637
0
            break;
3638
3639
0
        case 0x0038: /* Create Logical Link */
3640
0
        case 0x0039: /* Accept Logical Link */
3641
0
            proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3642
0
            offset++;
3643
0
            offset = dissect_bthci_cmd_flow_spec(tvb, offset, pinfo, tree, true);
3644
0
            offset = dissect_bthci_cmd_flow_spec(tvb, offset, pinfo, tree, false);
3645
0
            break;
3646
3647
0
        case 0x003a: /* Disconnect Logical Link */
3648
0
            proto_tree_add_item(tree, hf_bthci_cmd_logical_link_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3649
0
            offset+=2;
3650
0
            break;
3651
3652
0
        case 0x003b: /* Logical Link Cancel */
3653
0
            proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3654
0
            offset++;
3655
0
            proto_tree_add_item(tree, hf_bthci_cmd_flow_spec_identifier, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3656
0
            offset++;
3657
0
            break;
3658
3659
0
        case 0x003c: /* Flow Spec Modify */
3660
0
            proto_tree_add_item(tree, hf_bthci_cmd_logical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3661
0
            offset++;
3662
0
            offset = dissect_bthci_cmd_flow_spec(tvb, offset, pinfo, tree, true);
3663
0
            offset = dissect_bthci_cmd_flow_spec(tvb, offset, pinfo, tree, false);
3664
0
            break;
3665
3666
0
        case 0x003D: /* Enhanced Setup Synchronous Connection */
3667
0
        case 0x003E: /* Enhanced Accept Synchronous Connection Request */
3668
0
            if (cmd_ocf == 0x003D) {
3669
0
                proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3670
0
                offset += 2;
3671
0
            } else {
3672
0
                offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3673
0
            }
3674
3675
0
            proto_tree_add_item(tree, hf_bthci_cmd_transmit_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3676
0
            offset += 4;
3677
3678
0
            proto_tree_add_item(tree, hf_bthci_cmd_receive_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3679
0
            offset += 4;
3680
3681
0
            offset = dissect_coding_format(tree, hf_bthci_cmd_transmit_coding_format, tvb, offset, ett_coding_format);
3682
3683
0
            offset = dissect_coding_format(tree, hf_bthci_cmd_receive_coding_format, tvb, offset, ett_coding_format);
3684
3685
0
            proto_tree_add_item(tree, hf_bthci_cmd_transmit_codec_frame_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3686
0
            offset += 2;
3687
3688
0
            proto_tree_add_item(tree, hf_bthci_cmd_receive_codec_frame_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3689
0
            offset += 2;
3690
3691
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3692
0
            offset += 4;
3693
3694
0
            proto_tree_add_item(tree, hf_bthci_cmd_output_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3695
0
            offset += 4;
3696
3697
0
            offset = dissect_coding_format(tree, hf_bthci_cmd_input_coding_format, tvb, offset, ett_coding_format);
3698
3699
0
            offset = dissect_coding_format(tree, hf_bthci_cmd_output_coding_format, tvb, offset, ett_coding_format);
3700
3701
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_coded_data_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3702
0
            offset += 2;
3703
3704
0
            proto_tree_add_item(tree, hf_bthci_cmd_output_coded_data_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3705
0
            offset += 2;
3706
3707
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_pcm_data_format, tvb, offset, 1, ENC_NA);
3708
0
            offset += 1;
3709
3710
0
            proto_tree_add_item(tree, hf_bthci_cmd_output_pcm_data_format, tvb, offset, 1, ENC_NA);
3711
0
            offset += 1;
3712
3713
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_pcm_sample_payload_msb_position, tvb, offset, 1, ENC_NA);
3714
0
            offset += 1;
3715
3716
0
            proto_tree_add_item(tree, hf_bthci_cmd_output_pcm_sample_payload_msb_position, tvb, offset, 1, ENC_NA);
3717
0
            offset += 1;
3718
3719
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_data_path, tvb, offset, 1, ENC_NA);
3720
0
            offset += 1;
3721
3722
0
            proto_tree_add_item(tree, hf_bthci_cmd_output_data_path, tvb, offset, 1, ENC_NA);
3723
0
            offset += 1;
3724
3725
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_transport_unit_size, tvb, offset, 1, ENC_NA);
3726
0
            offset += 1;
3727
3728
0
            proto_tree_add_item(tree, hf_bthci_cmd_output_transport_unit_size, tvb, offset, 1, ENC_NA);
3729
0
            offset += 1;
3730
3731
/* TODO: Improve this range field output: 0x0000-0x0003 reserved, 0x0004-0xFFFE value in ms,  0xFFFF - "Do not care"*/
3732
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_latency_ms, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3733
0
            offset += 2;
3734
3735
0
            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);
3736
0
            offset += 2;
3737
3738
0
            proto_tree_add_item(tree, hf_bthci_cmd_retransmission_effort, tvb, offset, 1, ENC_NA);
3739
0
            offset += 1;
3740
3741
0
            break;
3742
0
        case 0x003F: /* Truncated Page */
3743
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3744
3745
0
            proto_tree_add_item(tree, hf_bthci_cmd_page_scan_repetition_mode, tvb, offset, 1, ENC_NA);
3746
0
            offset += 1;
3747
3748
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_clock_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3749
0
            clock_value = tvb_get_letohs(tvb, 13) & 32767; /* only bit0-14 are valid  */
3750
0
            proto_item_append_text(item, " (%g msec)", 1.25 * clock_value);
3751
3752
0
            proto_tree_add_item(tree, hf_bthci_cmd_clock_offset_valid , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3753
0
            offset += 2;
3754
3755
0
            break;
3756
0
        case 0x0040: /* Truncated Page Cancel */
3757
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3758
3759
0
            break;
3760
3761
0
        case 0x0002: /* Inquiry Cancel */
3762
0
        case 0x0004: /* Exit Periodic Inquiry Mode */
3763
0
        case 0x0043: /* Start Synchronization Train */
3764
            /* NOTE: No parameters */
3765
0
            break;
3766
3767
0
        case 0x0041: /* Set Connectionless Peripheral Broadcast */
3768
0
            proto_tree_add_item(tree, hf_bthci_cmd_connectionless_peripheral_broadcast, tvb, offset, 1, ENC_NA);
3769
0
            offset += 1;
3770
3771
0
            proto_tree_add_item(tree, hf_bthci_cmd_lt_addr, tvb, offset, 1, ENC_NA);
3772
0
            offset += 1;
3773
3774
0
            proto_tree_add_item(tree, hf_bthci_cmd_lpo_allowed, tvb, offset, 1, ENC_NA);
3775
0
            offset += 1;
3776
3777
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_packet_type, ett_packet_type, hfx_bthci_cmd_packet_type, ENC_LITTLE_ENDIAN);
3778
0
            offset += 2;
3779
3780
0
            proto_tree_add_item(tree, hf_bthci_cmd_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3781
0
            offset += 2;
3782
3783
0
            proto_tree_add_item(tree, hf_bthci_cmd_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3784
0
            offset += 2;
3785
3786
0
            proto_tree_add_item(tree, hf_bthci_cmd_cpb_supervision_to, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3787
0
            offset += 2;
3788
3789
0
            break;
3790
0
        case 0x0042: /* Set Connectionless Peripheral Broadcast Receive */
3791
0
            proto_tree_add_item(tree, hf_bthci_cmd_connectionless_peripheral_broadcast_receive, tvb, offset, 1, ENC_NA);
3792
0
            offset += 1;
3793
3794
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3795
3796
0
            proto_tree_add_item(tree, hf_bthci_cmd_lt_addr, tvb, offset, 1, ENC_NA);
3797
0
            offset += 1;
3798
3799
0
            proto_tree_add_item(tree, hf_bthci_cmd_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3800
0
            offset += 2;
3801
3802
0
            proto_tree_add_item(tree, hf_bthci_cmd_clock_offset_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3803
0
            offset += 4;
3804
3805
0
            proto_tree_add_item(tree, hf_bthci_cmd_next_cpb_clock, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3806
0
            offset += 4;
3807
3808
0
            proto_tree_add_item(tree, hf_bthci_cmd_cpb_supervision_to, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3809
0
            offset += 2;
3810
3811
0
            proto_tree_add_item(tree, hf_bthci_cmd_remote_timing_accuracy, tvb, offset, 1, ENC_NA);
3812
0
            offset += 1;
3813
3814
0
            proto_tree_add_item(tree, hf_bthci_cmd_cpb_skip, tvb, offset, 1, ENC_NA);
3815
0
            offset += 1;
3816
3817
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_packet_type, ett_packet_type, hfx_bthci_cmd_packet_type, ENC_LITTLE_ENDIAN);
3818
0
            offset += 2;
3819
3820
0
            proto_tree_add_item(tree, hf_bthci_cmd_channel_map, tvb, offset, 10, ENC_NA);
3821
0
            offset += 10;
3822
3823
0
            break;
3824
0
        case 0x0044: /* Receive Synchronization Train */
3825
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3826
3827
0
            proto_tree_add_item(tree, hf_bthci_cmd_synchronization_scan_to, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3828
0
            offset += 2;
3829
3830
0
            proto_tree_add_item(tree, hf_bthci_cmd_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3831
0
            offset += 2;
3832
3833
0
            proto_tree_add_item(tree, hf_bthci_cmd_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3834
0
            offset += 2;
3835
3836
0
            break;
3837
0
        case 0x0045: /* Remote OOB Extended Data Request Reply */
3838
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3839
3840
0
            proto_tree_add_item(tree, hf_bthci_cmd_c192, tvb, offset, 16, ENC_NA);
3841
0
            offset += 16;
3842
3843
0
            proto_tree_add_item(tree, hf_bthci_cmd_r192, tvb, offset, 16, ENC_NA);
3844
0
            offset += 16;
3845
3846
0
            proto_tree_add_item(tree, hf_bthci_cmd_c256, tvb, offset, 16, ENC_NA);
3847
0
            offset += 16;
3848
3849
0
            proto_tree_add_item(tree, hf_bthci_cmd_r256, tvb, offset, 16, ENC_NA);
3850
0
            offset += 16;
3851
3852
0
            break;
3853
0
        default:
3854
0
            proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
3855
0
            offset += tvb_reported_length_remaining(tvb, offset);
3856
0
    }
3857
3858
0
    return offset;
3859
0
}
3860
3861
static int
3862
dissect_link_policy_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, uint16_t cmd_ocf, bluetooth_data_t *bluetooth_data)
3863
0
{
3864
0
    switch (cmd_ocf) {
3865
0
        case 0x0001: /* Hold Mode */
3866
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3867
0
            offset+=2;
3868
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_interval_hold, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3869
0
            offset+=2;
3870
0
            proto_tree_add_item(tree, hf_bthci_cmd_min_interval_hold, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3871
0
            offset+=2;
3872
0
            break;
3873
3874
0
        case 0x0003: /* sniff mode */
3875
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3876
0
            offset+=2;
3877
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_interval_sniff, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3878
0
            offset+=2;
3879
0
            proto_tree_add_item(tree, hf_bthci_cmd_min_interval_sniff, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3880
0
            offset+=2;
3881
0
            proto_tree_add_item(tree, hf_bthci_cmd_sniff_attempt, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3882
0
            offset+=2;
3883
0
            proto_tree_add_item(tree, hf_bthci_cmd_sniff_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3884
0
            offset+=2;
3885
0
            break;
3886
3887
0
        case 0x0005: /* Park Mode */
3888
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3889
0
            offset+=2;
3890
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_interval_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3891
0
            offset+=2;
3892
0
            proto_tree_add_item(tree, hf_bthci_cmd_min_interval_beacon, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3893
0
            offset+=2;
3894
0
            break;
3895
3896
0
        case 0x0007: /* QoS Setup */
3897
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3898
0
            offset+=2;
3899
0
            proto_tree_add_item(tree, hf_bthci_cmd_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3900
0
            offset++;
3901
0
            proto_tree_add_item(tree, hf_bthci_cmd_service_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3902
0
            offset++;
3903
0
            proto_tree_add_item(tree, hf_bthci_cmd_token_rate, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3904
0
            offset+=4;
3905
0
            proto_tree_add_item(tree, hf_bthci_cmd_peak_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3906
0
            offset+=4;
3907
0
            proto_tree_add_item(tree, hf_bthci_cmd_latency, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3908
0
            offset+=4;
3909
0
            proto_tree_add_item(tree, hf_bthci_cmd_delay_variation, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3910
0
            offset+=4;
3911
0
            break;
3912
3913
0
        case 0x000b: /* Switch Role */
3914
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
3915
3916
0
            proto_tree_add_item(tree, hf_bthci_cmd_role, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3917
0
            offset++;
3918
0
            break;
3919
3920
0
        case 0x0004: /* Exit Sniff Mode */
3921
0
        case 0x0006: /* Exit Park Mode */
3922
0
        case 0x0009: /* Role Discovery */
3923
0
        case 0x000c: /* Read Link Policy Settings */
3924
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3925
0
            offset+=2;
3926
0
            break;
3927
3928
0
        case 0x000d: /* Write Link Policy Settings */
3929
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3930
0
            offset+=2;
3931
            /* FALL THROUGH */
3932
0
        case 0x000f: /* Write Default Link Policy Settings */
3933
0
            proto_tree_add_item(tree, hf_bthci_cmd_link_policy_setting_switch, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3934
0
            proto_tree_add_item(tree, hf_bthci_cmd_link_policy_setting_hold  , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3935
0
            proto_tree_add_item(tree, hf_bthci_cmd_link_policy_setting_sniff , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3936
0
            proto_tree_add_item(tree, hf_bthci_cmd_link_policy_setting_park  , tvb, offset, 2, ENC_LITTLE_ENDIAN);
3937
0
            offset+=2;
3938
0
            break;
3939
3940
0
        case 0x0010: /* Flow Specification */
3941
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3942
0
            offset+=2;
3943
0
            proto_tree_add_item(tree, hf_bthci_cmd_flags, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3944
0
            offset++;
3945
0
            proto_tree_add_item(tree, hf_bthci_cmd_flow_direction, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3946
0
            offset++;
3947
0
            proto_tree_add_item(tree, hf_bthci_cmd_service_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3948
0
            offset++;
3949
0
            proto_tree_add_item(tree, hf_bthci_cmd_token_rate, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3950
0
            offset+=4;
3951
0
            proto_tree_add_item(tree, hf_bthci_cmd_token_bucket_size, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3952
0
            offset+=4;
3953
0
            proto_tree_add_item(tree, hf_bthci_cmd_peak_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3954
0
            offset+=4;
3955
0
            proto_tree_add_item(tree, hf_bthci_cmd_latency, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3956
0
            offset+=4;
3957
0
            break;
3958
3959
0
        case 0x0011: /* Sniff Subrating */
3960
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3961
0
            offset+=2;
3962
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3963
0
            offset+=2;
3964
0
            proto_tree_add_item(tree, hf_bthci_cmd_min_remote_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3965
0
            offset+=2;
3966
0
            proto_tree_add_item(tree, hf_bthci_cmd_min_local_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3967
0
            offset+=2;
3968
0
            break;
3969
3970
0
        case 0x00e: /* Read Default Link Policy Setting */
3971
            /* NOTE: No parameters */
3972
0
            break;
3973
3974
0
        default:
3975
0
            proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
3976
0
            offset += tvb_reported_length_remaining(tvb, offset);
3977
0
    }
3978
3979
0
    return offset;
3980
0
}
3981
3982
static int
3983
dissect_host_controller_baseband_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo,
3984
        proto_tree *tree, uint16_t cmd_ocf, bluetooth_data_t *bluetooth_data,
3985
        bthci_cmd_data_t  *bthci_cmd_data)
3986
0
{
3987
0
    proto_item *item;
3988
0
    uint8_t     filter_type, filter_condition_type, num8;
3989
0
    int         i;
3990
3991
0
    switch (cmd_ocf) {
3992
0
        case 0x0001: /* Set Event Mask */
3993
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_00, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3994
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_01, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3995
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_02, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3996
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_03, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3997
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_04, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3998
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_05, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3999
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_06, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4000
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_07, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4001
0
            offset++;
4002
4003
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_10, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4004
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_11, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4005
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_12, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4006
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_13, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4007
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_14, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4008
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_17, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4009
0
            offset++;
4010
4011
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_20, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4012
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_21, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4013
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_23, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4014
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_24, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4015
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_25, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4016
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_26, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4017
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_27, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4018
0
            offset++;
4019
4020
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_30, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4021
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_31, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4022
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_32, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4023
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_33, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4024
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_34, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4025
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_35, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4026
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_36, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4027
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_37, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4028
0
            offset++;
4029
4030
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_40, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4031
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_41, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4032
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_42, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4033
0
            offset++;
4034
4035
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_53, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4036
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_54, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4037
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_55, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4038
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_56, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4039
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_57, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4040
0
            offset++;
4041
4042
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_60, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4043
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_61, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4044
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_62, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4045
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_63, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4046
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_64, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4047
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_65, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4048
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_67, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4049
0
            offset++;
4050
4051
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_70, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4052
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_72, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4053
0
            proto_tree_add_item(tree, hf_bthci_cmd_evt_mask_73, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4054
0
            offset++;
4055
0
            break;
4056
4057
0
        case 0x0005: /* Set Event Filter */
4058
0
            proto_tree_add_item(tree, hf_bthci_cmd_filter_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4059
0
            filter_type = tvb_get_uint8(tvb, 3);
4060
0
            offset++;
4061
0
            switch (filter_type) {
4062
4063
0
                case 0x01: /* Inquiry Result Filter */
4064
0
                    proto_tree_add_item(tree, hf_bthci_cmd_inquiry_result_filter_condition_type,
4065
0
                            tvb, offset, 1, ENC_LITTLE_ENDIAN);
4066
0
                    filter_condition_type = tvb_get_uint8(tvb, offset);
4067
0
                    offset++;
4068
0
                    switch (filter_condition_type) {
4069
0
                        case 0x01:
4070
0
                            call_dissector(btcommon_cod_handle, tvb_new_subset_length(tvb, offset, 3), pinfo, tree);
4071
0
                            offset += 3;
4072
4073
0
                            offset=dissect_bthci_cmd_cod_mask(tvb, offset, pinfo, tree);
4074
0
                            break;
4075
4076
0
                        case 0x02:
4077
0
                            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4078
0
                            break;
4079
4080
0
                        default:
4081
0
                            break;
4082
4083
0
                    }
4084
0
                    break;
4085
4086
0
                case 0x02: /* Connection Setup Filter */
4087
0
                    proto_tree_add_item(tree, hf_bthci_cmd_connection_setup_filter_condition_type,
4088
0
                            tvb, offset, 1, ENC_LITTLE_ENDIAN);
4089
0
                    filter_condition_type = tvb_get_uint8(tvb, offset);
4090
0
                    offset++;
4091
0
                    switch (filter_condition_type) {
4092
0
                        case 0x00:
4093
0
                            proto_tree_add_item(tree, hf_bthci_cmd_auto_acc_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4094
0
                            offset++;
4095
0
                            break;
4096
4097
0
                        case 0x01:
4098
0
                            call_dissector(btcommon_cod_handle, tvb_new_subset_length(tvb, offset, 3), pinfo, tree);
4099
0
                            offset += 3;
4100
4101
0
                            offset=dissect_bthci_cmd_cod_mask(tvb, offset, pinfo, tree);
4102
4103
0
                            proto_tree_add_item(tree, hf_bthci_cmd_auto_acc_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4104
0
                            offset++;
4105
0
                            break;
4106
4107
0
                        case 0x02:
4108
0
                            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4109
4110
0
                            proto_tree_add_item(tree, hf_bthci_cmd_auto_acc_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4111
0
                            offset++;
4112
0
                            break;
4113
4114
0
                        default:
4115
0
                            break;
4116
4117
0
                    }
4118
0
                    break;
4119
4120
0
                default:
4121
0
                    break;
4122
4123
0
            }
4124
4125
0
            break;
4126
0
        case 0x000a: /* Write PIN Type */
4127
0
            proto_tree_add_item(tree, hf_bthci_cmd_pin_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4128
0
            offset++;
4129
0
            break;
4130
4131
0
        case 0x000d: /* Read Stored Link Key */
4132
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4133
4134
0
            proto_tree_add_item(tree, hf_bthci_cmd_read_all_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4135
0
            offset++;
4136
0
            break;
4137
4138
0
        case 0x0011: /* Write Stored Link Key */
4139
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_link_keys, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4140
0
            num8 = tvb_get_uint8(tvb, offset);
4141
0
            offset += 1;
4142
4143
0
            for (i = 0; i < num8; i++) {
4144
0
                offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4145
0
                proto_tree_add_item(tree, hf_bthci_cmd_link_key, tvb, offset, 16, ENC_NA);
4146
0
                offset += 16;
4147
0
            }
4148
0
            break;
4149
4150
0
        case 0x0012: /* Delete Stored Link Key */
4151
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4152
4153
0
            proto_tree_add_item(tree, hf_bthci_cmd_delete_all_flag, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4154
0
            offset++;
4155
0
            break;
4156
4157
0
        case 0x0013: /* Change Local Name */
4158
0
            proto_tree_add_item(tree, hf_bthci_cmd_device_name, tvb, offset, 248, ENC_UTF_8 | ENC_NA);
4159
0
            if (!pinfo->fd->visited && bthci_cmd_data) {
4160
0
                bthci_cmd_data->data.name = tvb_get_string_enc(wmem_file_scope(), tvb, offset, 248, ENC_UTF_8);
4161
0
            }
4162
0
            offset += 248;
4163
0
            break;
4164
4165
0
        case 0x0016: /* Write Connection Accept Timeout */
4166
0
            proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4167
0
            offset+=2;
4168
0
            break;
4169
4170
0
        case 0x0018: /* Write Page Timeout */
4171
0
            proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4172
0
            if (!pinfo->fd->visited && bthci_cmd_data) {
4173
0
                bthci_cmd_data->data.page_timeout = tvb_get_letohs(tvb, offset);
4174
0
            }
4175
0
            offset+=2;
4176
0
            break;
4177
4178
0
        case 0x001a: /* Write Scan Enable */
4179
0
            proto_tree_add_item(tree, hf_bthci_cmd_scan_enable,
4180
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4181
0
            if (!pinfo->fd->visited && bthci_cmd_data) {
4182
0
                bthci_cmd_data->data.scan = tvb_get_uint8(tvb, offset);
4183
0
            }
4184
0
            offset++;
4185
0
            break;
4186
4187
0
        case 0x0020: /* Write Authentication Enable */
4188
0
            proto_tree_add_item(tree, hf_bthci_cmd_authentication_enable,
4189
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4190
0
            if (!pinfo->fd->visited && bthci_cmd_data) {
4191
0
                bthci_cmd_data->data.authentication = tvb_get_uint8(tvb, offset);
4192
0
            }
4193
0
            offset++;
4194
0
            break;
4195
4196
0
        case 0x0022: /* Write Encryption Mode */
4197
0
            proto_tree_add_item(tree, hf_bthci_cmd_encrypt_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4198
0
            if (!pinfo->fd->visited && bthci_cmd_data) {
4199
0
                bthci_cmd_data->data.encryption = tvb_get_uint8(tvb, offset);
4200
0
            }
4201
0
            offset++;
4202
0
            break;
4203
4204
0
        case 0x0024: /* Write Class of Device */
4205
0
            call_dissector(btcommon_cod_handle, tvb_new_subset_length(tvb, offset, 3), pinfo, tree);
4206
0
            if (!pinfo->fd->visited && bthci_cmd_data) {
4207
0
                bthci_cmd_data->data.class_of_device = tvb_get_uint24(tvb, offset, ENC_LITTLE_ENDIAN);
4208
0
            }
4209
0
            offset += 3;
4210
0
            break;
4211
4212
0
        case 0x0026: /* Write Voice Setting */
4213
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_unused,
4214
0
                    tvb, offset, 2, ENC_LITTLE_ENDIAN);
4215
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_coding,
4216
0
                    tvb, offset, 2, ENC_LITTLE_ENDIAN);
4217
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_data_format,
4218
0
                    tvb, offset, 2, ENC_LITTLE_ENDIAN);
4219
0
            proto_tree_add_item(tree, hf_bthci_cmd_input_sample_size,
4220
0
                    tvb, offset, 2, ENC_LITTLE_ENDIAN);
4221
0
            proto_tree_add_item(tree, hf_bthci_cmd_linear_pcm_bit_pos,
4222
0
                    tvb, offset, 2, ENC_LITTLE_ENDIAN);
4223
0
            proto_tree_add_item(tree, hf_bthci_cmd_air_coding_format,
4224
0
                    tvb, offset, 2, ENC_LITTLE_ENDIAN);
4225
0
            if (!pinfo->fd->visited && bthci_cmd_data) {
4226
0
                bthci_cmd_data->data.voice_setting = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
4227
0
            }
4228
0
            offset+=2;
4229
0
            break;
4230
4231
0
        case 0x0028: /* Write Automatic Flush Timeout */
4232
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4233
0
            offset+=2;
4234
0
            proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4235
0
            offset+=2;
4236
0
            break;
4237
4238
0
        case 0x002a: /* Write Num of Broadcast Retransmissions */
4239
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_broadcast_retransmissions,
4240
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4241
0
            offset++;
4242
0
            break;
4243
4244
0
        case 0x002c: /* Write Hold Mode Activity */
4245
0
            proto_tree_add_item(tree, hf_bthci_cmd_hold_mode_act_page,
4246
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4247
0
            proto_tree_add_item(tree, hf_bthci_cmd_hold_mode_act_inquiry,
4248
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4249
0
            proto_tree_add_item(tree, hf_bthci_cmd_hold_mode_act_periodic,
4250
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4251
0
            offset++;
4252
0
            break;
4253
4254
0
        case 0x002d: /* Read Transmit Power Level */
4255
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle,
4256
0
                    tvb, offset, 2, ENC_LITTLE_ENDIAN);
4257
0
            offset+=2;
4258
0
            proto_tree_add_item(tree, hf_bthci_cmd_tx_power_level_type,
4259
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4260
0
            offset++;
4261
0
            break;
4262
4263
0
        case 0x002f: /* Write SCO Flow Control Enable */
4264
0
            proto_tree_add_item(tree, hf_bthci_cmd_sco_flow_control,
4265
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4266
0
            offset++;
4267
0
            break;
4268
4269
0
        case 0x0031: /* Set Host Controller To Host Flow Control */
4270
0
            proto_tree_add_item(tree, hf_bthci_cmd_flow_contr_enable,
4271
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4272
0
            offset++;
4273
0
            break;
4274
4275
0
        case 0x0033: /* Host Buffer Size */
4276
0
            proto_tree_add_item(tree, hf_bthci_cmd_host_data_packet_length_acl,
4277
0
                    tvb, offset, 2, ENC_LITTLE_ENDIAN);
4278
0
            offset+=2;
4279
0
            proto_tree_add_item(tree, hf_bthci_cmd_host_data_packet_length_sco,
4280
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4281
0
            offset++;
4282
0
            proto_tree_add_item(tree, hf_bthci_cmd_host_total_num_acl_data_packets,
4283
0
                    tvb, offset, 2, ENC_LITTLE_ENDIAN);
4284
0
            offset+=2;
4285
0
            proto_tree_add_item(tree, hf_bthci_cmd_host_total_num_sco_data_packets,
4286
0
                    tvb, offset, 2, ENC_LITTLE_ENDIAN);
4287
0
            offset+=2;
4288
4289
0
            if (!pinfo->fd->visited && bthci_cmd_data) {
4290
0
                bthci_cmd_data->data.mtus.acl_mtu     = tvb_get_uint16(tvb, offset - 7, ENC_LITTLE_ENDIAN);
4291
0
                bthci_cmd_data->data.mtus.sco_mtu     = tvb_get_uint8(tvb,  offset - 5);
4292
0
                bthci_cmd_data->data.mtus.acl_packets = tvb_get_uint16(tvb, offset - 4, ENC_LITTLE_ENDIAN);
4293
0
                bthci_cmd_data->data.mtus.sco_packets = tvb_get_uint16(tvb, offset - 2, ENC_LITTLE_ENDIAN);
4294
0
            }
4295
0
            break;
4296
4297
0
        case 0x0035: /* Host Number Of Completed Packets */
4298
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_handles,
4299
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4300
0
            num8 = tvb_get_uint8(tvb, offset);
4301
0
            offset++;
4302
4303
0
            for (i=0; i<num8; i++) {
4304
0
                proto_tree_add_item(tree, hf_bthci_cmd_connection_handle,
4305
0
                        tvb, offset, 2, ENC_LITTLE_ENDIAN);
4306
0
                offset += 2;
4307
4308
0
                proto_tree_add_item(tree, hf_bthci_cmd_num_compl_packets,
4309
0
                        tvb, offset, 2, ENC_LITTLE_ENDIAN);
4310
0
                offset += 2;
4311
0
            }
4312
0
            break;
4313
4314
0
        case 0x0037: /* Write Link Supervision Timeout */
4315
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle,
4316
0
                    tvb, offset, 2, ENC_LITTLE_ENDIAN);
4317
0
            offset+=2;
4318
0
            proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4319
0
            offset+=2;
4320
0
            break;
4321
4322
0
        case 0x003a: /* Write Current IAC LAP */
4323
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_curr_iac, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4324
0
            num8 = tvb_get_uint8(tvb, offset);
4325
0
            offset++;
4326
0
            for (i=0; i<num8; i++) {
4327
0
                proto_tree_add_item(tree, hf_bthci_cmd_iac_lap, tvb, offset+(i*3), 3, ENC_LITTLE_ENDIAN);
4328
0
            }
4329
0
            offset += num8 * 3;
4330
0
            break;
4331
4332
0
        case 0x003c: /* Write Page Scan Period Mode */
4333
0
            proto_tree_add_item(tree, hf_bthci_cmd_page_scan_period_mode,
4334
0
                    tvb, offset, 1, ENC_LITTLE_ENDIAN);
4335
0
            offset++;
4336
0
            break;
4337
4338
0
        case 0x003e: /* Write Page Scan Mode */
4339
0
            proto_tree_add_item(tree, hf_bthci_cmd_page_scan_mode,
4340
0
                    tvb, 3, 1, ENC_LITTLE_ENDIAN);
4341
0
            break;
4342
4343
0
        case 0x003f: /* Set AFH Host Channel Classification */
4344
0
            proto_tree_add_item(tree, hf_bthci_cmd_ch_classification, tvb, offset, 10, ENC_NA);
4345
0
            offset+=10;
4346
0
            break;
4347
4348
0
        case 0x0008: /* Flush */
4349
0
        case 0x0027: /* Read Automatic Flush Timeout */
4350
0
        case 0x0036: /* Read Link Supervision Timeout */
4351
0
        case 0x0007B: /* Read Authenticated Payload Timeout */
4352
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4353
0
            offset+=2;
4354
0
            break;
4355
4356
0
        case 0x001c: /* Write Page Scan Activity */
4357
0
        case 0x001e: /* Write Inquiry Scan Activity */
4358
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4359
0
            proto_item_append_text(item, " slots (%g msec)",  tvb_get_letohs(tvb, offset)*0.625);
4360
0
            offset+=2;
4361
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4362
0
            proto_item_append_text(item, " slots (%g msec)",  tvb_get_letohs(tvb, offset)*0.625);
4363
0
            offset+=2;
4364
0
            break;
4365
4366
4367
0
        case 0x0043: /* Write Inquiry Scan Type */
4368
0
            proto_tree_add_item(tree, hf_bthci_cmd_scan_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4369
0
            offset++;
4370
0
            break;
4371
4372
0
        case 0x0045: /* Write Inquiry Mode */
4373
0
            proto_tree_add_item(tree, hf_bthci_cmd_inq_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4374
0
            if (!pinfo->fd->visited && bthci_cmd_data) {
4375
0
                bthci_cmd_data->data.inquiry_mode = tvb_get_uint8(tvb, offset);
4376
0
            }
4377
0
            offset++;
4378
0
            break;
4379
4380
0
        case 0x0047: /* Write Page Scan Type */
4381
0
            proto_tree_add_item(tree, hf_bthci_cmd_scan_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4382
0
            offset++;
4383
0
            break;
4384
4385
0
        case 0x0049: /* Write AFH Channel Assessment Mode */
4386
0
            proto_tree_add_item(tree, hf_bthci_cmd_afh_ch_assessment_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4387
0
            offset++;
4388
0
            break;
4389
4390
0
        case 0x0052: /* Write Extended Inquiry Response */
4391
0
            {
4392
0
            bluetooth_eir_ad_data_t *eir_data;
4393
4394
0
            eir_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
4395
0
            eir_data->interface_id = bluetooth_data->interface_id;
4396
0
            eir_data->adapter_id = bluetooth_data->adapter_id;
4397
0
            eir_data->bd_addr = NULL;
4398
4399
0
            proto_tree_add_item(tree, hf_bthci_cmd_fec_required, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4400
0
            offset++;
4401
4402
0
            call_dissector_with_data(btcommon_eir_handle, tvb_new_subset_length(tvb, offset, 240), pinfo, tree, eir_data);
4403
0
            save_local_device_name_from_eir_ad(tvb, offset, pinfo, 240, bluetooth_data);
4404
0
            offset += 240;
4405
4406
0
            }
4407
0
            break;
4408
4409
0
        case 0x0053: /* Refresh Encryption Key */
4410
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4411
0
            offset+=2;
4412
0
            break;
4413
4414
0
        case 0x0056: /* Write Simple Pairing Mode */
4415
0
            proto_tree_add_item(tree, hf_bthci_cmd_simple_pairing_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4416
0
            if (!pinfo->fd->visited && bthci_cmd_data) {
4417
0
                bthci_cmd_data->data.simple_pairing_mode = tvb_get_uint8(tvb, offset);
4418
0
            }
4419
0
            offset++;
4420
0
            break;
4421
4422
0
        case 0x0059: /* Write Inquiry Tx Response Power Level */
4423
0
            proto_tree_add_item(tree, hf_bthci_cmd_tx_power, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4424
0
            offset++;
4425
0
            break;
4426
4427
0
        case 0x005b: /* Write Default Erroneous Data Reporting */
4428
0
            proto_tree_add_item(tree, hf_bthci_cmd_err_data_reporting, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4429
0
            offset++;
4430
0
            break;
4431
4432
0
        case 0x005f: /* Enhanced Flush */
4433
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4434
0
            offset+=2;
4435
0
            proto_tree_add_item(tree, hf_bthci_cmd_flush_packet_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4436
0
            offset++;
4437
0
            break;
4438
4439
0
        case 0x0060: /* Send Keypress Notification */
4440
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
4441
4442
0
            proto_tree_add_item(tree, hf_bthci_cmd_notification_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4443
0
            offset++;
4444
0
            break;
4445
4446
0
        case 0x0062: /* Write Logical Link Accept Timeout */
4447
0
            proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4448
0
            offset+=2;
4449
0
            break;
4450
4451
0
        case 0x0063: /* Set Event Mask Page 2 */
4452
0
            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);
4453
0
            offset += 8;
4454
0
            break;
4455
4456
0
        case 0x0065: /* Write Location Data */
4457
0
            proto_tree_add_item(tree, hf_bthci_cmd_location_domain_aware, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4458
0
            offset++;
4459
0
            proto_tree_add_item(tree, hf_bthci_cmd_location_domain, tvb, offset, 2, ENC_ASCII | ENC_NA);
4460
0
            offset+=2;
4461
0
            proto_tree_add_item(tree, hf_bthci_cmd_location_domain_options, tvb, offset, 1, ENC_ASCII | ENC_NA);
4462
0
            offset++;
4463
0
            proto_tree_add_item(tree, hf_bthci_cmd_location_options, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4464
0
            offset++;
4465
0
            break;
4466
4467
0
        case 0x0067: /* Write Flow Control Mode */
4468
0
            proto_tree_add_item(tree, hf_bthci_cmd_flow_control_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4469
0
            offset++;
4470
0
            break;
4471
4472
0
        case 0x0068: /* Read Enhanced Tx Power Level */
4473
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4474
0
            offset+=2;
4475
0
            proto_tree_add_item(tree, hf_bthci_cmd_tx_power_level_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4476
0
            offset++;
4477
0
            break;
4478
4479
0
        case 0x0069: /* Read Best Effort Flush Timeout */
4480
0
            proto_tree_add_item(tree, hf_bthci_cmd_logical_link_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4481
0
            offset+=2;
4482
0
            break;
4483
4484
0
        case 0x006a: /* Write Best Effort Flush Timeout */
4485
0
            proto_tree_add_item(tree, hf_bthci_cmd_logical_link_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4486
0
            offset+=2;
4487
0
            proto_tree_add_item(tree, hf_bthci_cmd_flush_to_us, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4488
0
            offset+=4;
4489
0
            break;
4490
4491
0
        case 0x006b: /* Short Range Mode */
4492
0
            proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4493
0
            offset++;
4494
0
            proto_tree_add_item(tree, hf_bthci_cmd_short_range_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4495
0
            offset++;
4496
0
            break;
4497
4498
0
        case 0x006d: /* Write LE Host Supported */
4499
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_supported_host, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4500
0
            offset++;
4501
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_simultaneous_host, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4502
0
            offset++;
4503
0
            break;
4504
4505
0
        case 0x003: /* Reset */
4506
0
        case 0x009: /* Read PIN Type */
4507
0
        case 0x00B: /* Create New Unit Key */
4508
0
        case 0x014: /* Read Local Name */
4509
0
        case 0x015: /* Read Connection Accept Timeout */
4510
0
        case 0x017: /* Read Page Timeout */
4511
0
        case 0x019: /* Read Scan Enable */
4512
0
        case 0x01B: /* Read Page Scan Activity */
4513
0
        case 0x01D: /* Read Inquiry Scan Activity */
4514
0
        case 0x01F: /* Read Authentication Enable */
4515
0
        case 0x021: /* Read Encryption Mode */
4516
0
        case 0x023: /* Read Class of Device */
4517
0
        case 0x025: /* Read Voice Setting */
4518
0
        case 0x029: /* Read Num Broadcast Retransmissions */
4519
0
        case 0x02B: /* Read Hold Mode Activity */
4520
0
        case 0x02E: /* Read SCO Flow Control Enable */
4521
0
        case 0x038: /* Read Number of Supported IAC */
4522
0
        case 0x039: /* Read Current IAC LAP */
4523
0
        case 0x03B: /* Read Page Scan Period Mode */
4524
0
        case 0x03D: /* Read Page Scan Mode */
4525
0
        case 0x042: /* Read Inquiry Scan Type */
4526
0
        case 0x044: /* Read Inquiry Mode */
4527
0
        case 0x046: /* Read Page Scan Type */
4528
0
        case 0x048: /* Read AFH Channel Assessment Mode */
4529
0
        case 0x051: /* Read Extended Inquiry Response */
4530
0
        case 0x055: /* Read Simple Pairing Mode */
4531
0
        case 0x057: /* Read Local OOB Data */
4532
0
        case 0x058: /* Read Inquiry Response Tx Power Level */
4533
0
        case 0x05A: /* Read Default Erroneous Data Reporting */
4534
0
        case 0x061: /* Read Logical Link Accept Timeout */
4535
0
        case 0x064: /* Read Location Data */
4536
0
        case 0x066: /* Read Flow Control Mode */
4537
0
        case 0x06C: /* Read LE Host Supported */
4538
0
        case 0x077: /* Read Synchronization Train Parameters */
4539
0
        case 0x079: /* Read Secure Connections Host Support */
4540
0
        case 0x07D: /* Read Local OOB Extended Data */
4541
0
        case 0x07E: /* Read Extended Page Timeout */
4542
0
        case 0x080: /* Read Extended Inquiry Length */
4543
            /* NOTE: No parameters */
4544
0
            break;
4545
4546
0
        case 0x06E: /* Set MWS Channel Parameters */
4547
0
            proto_tree_add_item(tree, hf_bthci_mws_channel, tvb, offset, 1, ENC_NA);
4548
0
            offset += 1;
4549
4550
0
            proto_tree_add_item(tree, hf_bthci_mws_rx_center_frequency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4551
0
            offset += 2;
4552
4553
0
            proto_tree_add_item(tree, hf_bthci_mws_tx_center_frequency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4554
0
            offset += 2;
4555
4556
0
            proto_tree_add_item(tree, hf_bthci_mws_rx_channel_bandwidth, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4557
0
            offset += 2;
4558
4559
0
            proto_tree_add_item(tree, hf_bthci_mws_tx_channel_bandwidth, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4560
0
            offset += 2;
4561
4562
0
            proto_tree_add_item(tree, hf_bthci_mws_channel_type, tvb, offset, 1, ENC_NA);
4563
0
            offset += 1;
4564
4565
0
            break;
4566
0
        case 0x06F: /* Set External Frame Configuration */
4567
0
            {
4568
0
            proto_item *sub_item;
4569
0
            proto_tree *sub_tree;
4570
0
            uint32_t    number_of_periods;
4571
0
            int         i_item = 1;
4572
4573
0
            proto_tree_add_item(tree, hf_bthci_external_frame_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4574
0
            offset += 2;
4575
4576
0
            proto_tree_add_item(tree, hf_bthci_external_frame_sync_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4577
0
            offset += 2;
4578
4579
0
            proto_tree_add_item(tree, hf_bthci_external_frame_sync_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4580
0
            offset += 2;
4581
4582
0
            proto_tree_add_item_ret_uint(tree, hf_bthci_external_frame_number_of_periods, tvb, offset, 1, ENC_NA, &number_of_periods);
4583
0
            offset += 1;
4584
4585
0
            sub_item = proto_tree_add_item(tree, hf_bthci_external_frame_periods, tvb, offset, -1, ENC_NA);
4586
0
            sub_tree = proto_item_add_subtree(sub_item, ett_periods);
4587
4588
0
            while (number_of_periods--) {
4589
0
                proto_item *entry_item;
4590
0
                proto_tree *entry_tree;
4591
4592
0
                entry_item = proto_tree_add_item(sub_tree, hf_bthci_external_frame_period, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4593
0
                entry_tree = proto_item_add_subtree(entry_item, ett_period);
4594
0
                proto_item_append_text(entry_item, " #%u", i_item);
4595
4596
0
                proto_tree_add_item(entry_tree, hf_bthci_external_frame_period_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4597
0
                offset += 2;
4598
4599
0
                proto_tree_add_item(entry_tree, hf_bthci_external_frame_period_type, tvb, offset, 1, ENC_NA);
4600
0
                offset += 1;
4601
4602
0
                i_item += 1;
4603
0
            }
4604
4605
0
            }
4606
0
            break;
4607
0
        case 0x070: /* Set MWS Signaling */
4608
0
            proto_tree_add_item(tree, hf_bthci_mws_rx_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4609
0
            offset += 2;
4610
4611
0
            proto_tree_add_item(tree, hf_bthci_mws_rx_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4612
0
            offset += 2;
4613
4614
0
            proto_tree_add_item(tree, hf_bthci_mws_rx_deassert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4615
0
            offset += 2;
4616
4617
0
            proto_tree_add_item(tree, hf_bthci_mws_rx_deassert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4618
0
            offset += 2;
4619
4620
4621
0
            proto_tree_add_item(tree, hf_bthci_mws_tx_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4622
0
            offset += 2;
4623
4624
0
            proto_tree_add_item(tree, hf_bthci_mws_tx_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4625
0
            offset += 2;
4626
4627
0
            proto_tree_add_item(tree, hf_bthci_mws_tx_deassert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4628
0
            offset += 2;
4629
4630
0
            proto_tree_add_item(tree, hf_bthci_mws_tx_deassert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4631
0
            offset += 2;
4632
4633
4634
0
            proto_tree_add_item(tree, hf_bthci_mws_pattern_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4635
0
            offset += 2;
4636
4637
0
            proto_tree_add_item(tree, hf_bthci_mws_pattern_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4638
0
            offset += 2;
4639
4640
4641
0
            proto_tree_add_item(tree, hf_bthci_mws_inactivity_duration_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4642
0
            offset += 2;
4643
4644
0
            proto_tree_add_item(tree, hf_bthci_mws_inactivity_duration_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4645
0
            offset += 2;
4646
4647
4648
0
            proto_tree_add_item(tree, hf_bthci_mws_scan_frequency_assert_offset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4649
0
            offset += 2;
4650
4651
0
            proto_tree_add_item(tree, hf_bthci_mws_scan_frequency_assert_jitter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4652
0
            offset += 2;
4653
4654
4655
0
            proto_tree_add_item(tree, hf_bthci_mws_priority_assert_offset_request, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4656
0
            offset += 2;
4657
4658
0
            break;
4659
0
        case 0x071: /* Set MWS Transport Layer */
4660
0
            proto_tree_add_item(tree, hf_bthci_mws_transport_layer, tvb, offset, 1, ENC_NA);
4661
0
            offset += 1;
4662
4663
0
            proto_tree_add_item(tree, hf_bthci_mws_to_baud_rate, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4664
0
            offset += 4;
4665
4666
0
            proto_tree_add_item(tree, hf_bthci_mws_from_baud_rate, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4667
0
            offset += 4;
4668
4669
0
            break;
4670
0
        case 0x072: /* Set MWS Scan Frequency Table */
4671
0
            {
4672
0
            proto_item *sub_item;
4673
0
            proto_tree *sub_tree;
4674
0
            uint32_t    number_of_frequencies;
4675
0
            int         i_item = 1;
4676
4677
0
            proto_tree_add_item_ret_uint(tree, hf_bthci_mws_number_of_frequencies, tvb, offset, 1, ENC_NA, &number_of_frequencies);
4678
0
            offset += 1;
4679
4680
0
            sub_item = proto_tree_add_item(tree, hf_bthci_mws_scan_frequency_table, tvb, offset, -1, ENC_NA);
4681
0
            sub_tree = proto_item_add_subtree(sub_item, ett_table);
4682
4683
0
            while (number_of_frequencies--) {
4684
0
                proto_item *entry_item;
4685
0
                proto_tree *entry_tree;
4686
4687
0
                entry_item = proto_tree_add_item(sub_tree, hf_bthci_mws_scan_frequency_table_item, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4688
0
                entry_tree = proto_item_add_subtree(entry_item, ett_table_item);
4689
0
                proto_item_append_text(entry_item, " #%u", i_item);
4690
4691
0
                proto_tree_add_item(entry_tree, hf_bthci_mws_scan_frequency_table_item_low, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4692
0
                offset += 2;
4693
4694
0
                proto_tree_add_item(entry_tree, hf_bthci_mws_scan_frequency_table_item_high, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4695
0
                offset += 2;
4696
4697
0
                i_item += 1;
4698
0
            }
4699
4700
0
            }
4701
0
            break;
4702
0
        case 0x073: /* Set MWS Pattern Configuration */
4703
0
            {
4704
0
            proto_item *sub_item;
4705
0
            proto_tree *sub_tree;
4706
0
            uint32_t    number_of_intervals;
4707
0
            int         i_item = 1;
4708
4709
0
            proto_tree_add_item(tree, hf_bthci_mws_pattern_index, tvb, offset, 1, ENC_NA);
4710
0
            offset += 1;
4711
4712
0
            proto_tree_add_item_ret_uint(tree, hf_bthci_mws_pattern_number_of_intervals, tvb, offset, 1, ENC_NA, &number_of_intervals);
4713
0
            offset += 1;
4714
4715
0
            sub_item = proto_tree_add_item(tree, hf_bthci_mws_patterns, tvb, offset, -1, ENC_NA);
4716
0
            sub_tree = proto_item_add_subtree(sub_item, ett_patterns);
4717
4718
0
            while (number_of_intervals--) {
4719
0
                proto_item *entry_item;
4720
0
                proto_tree *entry_tree;
4721
4722
0
                entry_item = proto_tree_add_item(sub_tree, hf_bthci_mws_pattern, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4723
0
                entry_tree = proto_item_add_subtree(entry_item, ett_pattern);
4724
0
                proto_item_append_text(entry_item, " #%u", i_item);
4725
4726
0
                proto_tree_add_item(entry_tree, hf_bthci_mws_pattern_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4727
0
                offset += 2;
4728
4729
0
                proto_tree_add_item(entry_tree, hf_bthci_mws_pattern_type, tvb, offset, 1, ENC_NA);
4730
0
                offset += 1;
4731
4732
0
                i_item += 1;
4733
0
            }
4734
4735
0
            }
4736
4737
0
            break;
4738
0
        case 0x074: /* Set Reserved LT_ADDR */
4739
0
        case 0x075: /* Delete Reserved LT_ADDR */
4740
0
            proto_tree_add_item(tree, hf_bthci_cmd_lt_addr, tvb, offset, 1, ENC_NA);
4741
0
            offset += 1;
4742
4743
0
            break;
4744
0
        case 0x076: /* Set Connectionless Peripheral Broadcast Data */
4745
0
            {
4746
0
            uint32_t data_length;
4747
4748
0
            proto_tree_add_item(tree, hf_bthci_cmd_lt_addr, tvb, offset, 1, ENC_NA);
4749
0
            offset += 1;
4750
4751
0
            proto_tree_add_item(tree, hf_bthci_cmd_cpb_fragment, tvb, offset, 1, ENC_NA);
4752
0
            offset += 1;
4753
4754
0
            proto_tree_add_item_ret_uint(tree, hf_bthci_cmd_cpb_data_length, tvb, offset, 1, ENC_NA, &data_length);
4755
0
            offset += 1;
4756
4757
0
            proto_tree_add_item(tree, hf_bthci_cmd_cpb_data, tvb, offset, data_length, ENC_NA);
4758
0
            offset += data_length;
4759
4760
0
            }
4761
0
            break;
4762
0
        case 0x078: /* Write Synchronization Train Parameters */
4763
0
            proto_tree_add_item(tree, hf_bthci_cmd_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4764
0
            offset += 2;
4765
4766
0
            proto_tree_add_item(tree, hf_bthci_cmd_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4767
0
            offset += 2;
4768
4769
0
            proto_tree_add_item(tree, hf_bthci_cmd_sync_train_to, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4770
0
            offset += 4;
4771
4772
0
            proto_tree_add_item(tree, hf_bthci_cmd_service_data, tvb, offset, 1, ENC_NA);
4773
0
            offset += 1;
4774
4775
0
            break;
4776
0
        case 0x07A: /* Write Secure Connections Host Support */
4777
0
            proto_tree_add_item(tree, hf_bthci_cmd_secure_connection_host_support, tvb, offset, 1, ENC_NA);
4778
0
            offset += 1;
4779
4780
0
            break;
4781
0
        case 0x07C: /* Write Authenticated Payload Timeout */
4782
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4783
0
            offset += 2;
4784
4785
0
            proto_tree_add_item(tree, hf_bthci_cmd_authenticated_payload_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4786
0
            offset += 2;
4787
4788
0
            break;
4789
0
        case 0x07F: /* Write Extended Page Timeout */
4790
0
            proto_tree_add_item(tree, hf_bthci_cmd_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4791
0
            offset += 2;
4792
4793
0
            break;
4794
0
        case 0x081: /* Write Extended Inquiry Length */
4795
0
            proto_tree_add_item(tree, hf_bthci_cmd_extended_inquiry_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4796
0
            offset += 2;
4797
4798
0
            break;
4799
0
        case 0x082: /* Set Ecosystem Base Interval */
4800
0
            {
4801
0
            uint16_t interval = tvb_get_letohs(tvb, offset);
4802
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4803
0
            if (interval) {
4804
0
                proto_item_append_text(item, " (%g msec)",  interval * 1.25);
4805
0
            } else {
4806
0
                proto_item_append_text(item, " (Ignore Any Previous Hint)");
4807
0
            }
4808
0
            offset += 2;
4809
0
            }
4810
4811
0
            break;
4812
0
        case 0x083: /* Configure Data Path */
4813
0
            {
4814
0
            uint8_t codec_length;
4815
0
            proto_tree_add_item(tree, hf_bthci_cmd_data_path_direction, tvb, offset, 1, ENC_NA);
4816
0
            offset += 1;
4817
0
            proto_tree_add_item(tree, hf_bthci_cmd_data_path_id, tvb, offset, 1, ENC_NA);
4818
0
            offset += 1;
4819
0
            codec_length = tvb_get_uint8(tvb, offset);
4820
0
            proto_tree_add_item(tree, hf_bthci_cmd_codec_config_length, tvb, offset, 1, ENC_NA);
4821
0
            offset++;
4822
0
            proto_tree_add_item(tree, hf_bthci_cmd_codec_config, tvb, offset, codec_length, ENC_NA);
4823
0
            offset += codec_length;
4824
0
            }
4825
4826
0
            break;
4827
0
        case 0x084: /* Set Min Encryption Key Size */
4828
0
            proto_tree_add_item(tree, hf_bthci_cmd_min_encryption_key_size, tvb, offset, 1, ENC_NA);
4829
0
            offset += 1;
4830
4831
0
            break;
4832
0
        default:
4833
0
            proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
4834
0
            offset += tvb_reported_length_remaining(tvb, offset);
4835
0
    }
4836
4837
0
    return offset;
4838
0
}
4839
4840
static int
4841
dissect_informational_parameters_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo,
4842
        proto_tree *tree, uint16_t cmd_ocf)
4843
0
{
4844
0
    switch (cmd_ocf) {
4845
4846
0
        case 0x0004: /* Read Local Extended Features */
4847
0
            proto_tree_add_item(tree, hf_bthci_cmd_page_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4848
0
            offset++;
4849
0
            break;
4850
4851
0
        case 0x001: /* Read Local Version Information */
4852
0
        case 0x002: /* Read Local Supported Commands */
4853
0
        case 0x003: /* Read Local Supported Features */
4854
0
        case 0x005: /* Read Buffer Size */
4855
0
        case 0x007: /* Read Country Code */
4856
0
        case 0x009: /* Read BD ADDR */
4857
0
        case 0x00A: /* Read Data Block Size */
4858
0
        case 0x00B: /* Read Local Supported Codecs */
4859
0
        case 0x00C: /* Read Local Simple Pairing Options */
4860
            /* NOTE: No parameters */
4861
0
            break;
4862
4863
0
        default:
4864
0
            proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
4865
0
            offset += tvb_reported_length_remaining(tvb, offset);
4866
0
    }
4867
4868
0
    return offset;
4869
0
}
4870
4871
static int
4872
dissect_status_parameters_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo,
4873
        proto_tree *tree, uint16_t cmd_ocf)
4874
0
{
4875
0
    switch (cmd_ocf) {
4876
4877
0
        case 0x0001: /* Read Failed Contact Counter */
4878
0
        case 0x0002: /* Reset Failed Contact Counter */
4879
0
        case 0x0003: /* Get Link Quality */
4880
0
        case 0x0005: /* Read RSSI */
4881
0
        case 0x0006: /* Read AFH Channel Map */
4882
0
        case 0x0008: /* Read Encryption Key Size */
4883
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4884
0
            offset+=2;
4885
0
            break;
4886
4887
0
        case 0x0007: /* Read Clock */
4888
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4889
0
            offset+=2;
4890
0
            proto_tree_add_item(tree, hf_bthci_cmd_which_clock, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4891
0
            offset++;
4892
0
            break;
4893
4894
0
        case 0x0009: /* Read Local AMP Info */
4895
0
            break;
4896
4897
0
        case 0x000a: /* Read Local AMP Assoc */
4898
0
            proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4899
0
            offset++;
4900
0
            proto_tree_add_item(tree, hf_bthci_cmd_length_so_far, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4901
0
            offset+=2;
4902
0
            proto_tree_add_item(tree, hf_bthci_cmd_amp_assoc_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4903
0
            offset+=2;
4904
0
            break;
4905
4906
0
        case 0x000b: /* Write Remote AMP Assoc */
4907
0
            proto_tree_add_item(tree, hf_bthci_cmd_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4908
0
            offset++;
4909
0
            proto_tree_add_item(tree, hf_bthci_cmd_length_so_far, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4910
0
            offset+=2;
4911
0
            proto_tree_add_item(tree, hf_bthci_cmd_amp_remaining_assoc_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4912
0
            offset+=2;
4913
0
            proto_tree_add_item(tree, hf_bthci_cmd_amp_assoc_fragment, tvb, offset, -1, ENC_NA);
4914
0
            offset+=tvb_reported_length_remaining(tvb, offset);
4915
0
            break;
4916
4917
4918
0
        case 0x000C: /* Get MWS Transport Layer Configuration */
4919
            /* NOTE: No parameters */
4920
0
            break;
4921
4922
0
        case 0x000D: /* Set Triggered Clock Capture */
4923
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4924
0
            offset += 2;
4925
4926
0
            proto_tree_add_item(tree, hf_bthci_cmd_triggered_clock_capture, tvb, offset, 1, ENC_NA);
4927
0
            offset += 1;
4928
4929
0
            proto_tree_add_item(tree, hf_bthci_cmd_which_clock, tvb, offset, 1, ENC_NA);
4930
0
            offset += 1;
4931
4932
0
            proto_tree_add_item(tree, hf_bthci_cmd_lpo_allowed, tvb, offset, 1, ENC_NA);
4933
0
            offset += 1;
4934
4935
0
            proto_tree_add_item(tree, hf_bthci_cmd_number_of_clock_captures_to_filter, tvb, offset, 1, ENC_NA);
4936
0
            offset += 1;
4937
0
            break;
4938
4939
0
        default:
4940
0
            proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
4941
0
            offset += tvb_reported_length_remaining(tvb, offset);
4942
0
    }
4943
4944
0
    return offset;
4945
0
}
4946
4947
static int
4948
dissect_testing_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, uint16_t cmd_ocf)
4949
0
{
4950
0
    switch (cmd_ocf) {
4951
4952
0
        case 0x0002: /* Write Loopback Mode */
4953
0
            proto_tree_add_item(tree, hf_bthci_cmd_loopback_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4954
0
            offset++;
4955
0
            break;
4956
4957
0
        case 0x0004: /* Write Simple Pairing Debug Mode */
4958
0
            proto_tree_add_item(tree, hf_bthci_cmd_simple_pairing_debug_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4959
0
            offset++;
4960
0
            break;
4961
4962
0
        case 0x0007: /* Enable AMP Receiver Reports */
4963
0
            proto_tree_add_item(tree, hf_bthci_cmd_enable_amp_recv_reports, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4964
0
            offset++;
4965
0
            proto_tree_add_item(tree, hf_bthci_cmd_amp_recv_report_interval, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4966
0
            offset++;
4967
0
            break;
4968
4969
0
        case 0x001: /* Read Loopback Mode */
4970
0
        case 0x003: /* Enable Device Under Test Mode */
4971
0
        case 0x008: /* AMP Test End */
4972
            /* NOTE: No parameters */
4973
0
            break;
4974
4975
0
        case 0x009: /* AMP Test */
4976
0
            proto_tree_add_item(tree, hf_bthci_cmd_amp_controller_type, tvb, offset, 1, ENC_NA);
4977
0
            offset += 1;
4978
4979
0
            break;
4980
0
        case 0x00A: /* Write Secure Connections Test Mode */
4981
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4982
0
            offset += 2;
4983
4984
0
            proto_tree_add_item(tree, hf_bthci_cmd_dm1_acl_u_mode, tvb, offset, 1, ENC_NA);
4985
0
            offset += 1;
4986
4987
0
            proto_tree_add_item(tree, hf_bthci_cmd_esco_loopback_mode, tvb, offset, 1, ENC_NA);
4988
0
            offset += 1;
4989
4990
0
            break;
4991
0
        default:
4992
0
            proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
4993
0
            offset += tvb_reported_length_remaining(tvb, offset);
4994
0
    }
4995
4996
0
    return offset;
4997
0
}
4998
4999
static int
5000
dissect_le_cmd(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, uint16_t cmd_ocf, bluetooth_data_t *bluetooth_data)
5001
0
{
5002
0
    proto_item  *item;
5003
0
    proto_item  *sub_item;
5004
0
    proto_tree  *sub_tree;
5005
5006
0
    switch(cmd_ocf) {
5007
5008
0
        case 0x0001: /* LE Set Event Mask */
5009
0
            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);
5010
0
            offset += 8;
5011
0
            break;
5012
5013
0
        case 0x0005: /* LE Set Random Address */
5014
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5015
0
            break;
5016
5017
0
        case 0x0006: /* LE Set Advertising Parameters */
5018
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_le_advts_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5019
0
            proto_item_append_text(item, " (%g msec)",  tvb_get_letohs(tvb, offset)*0.625);
5020
0
            offset+=2;
5021
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_le_advts_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5022
0
            proto_item_append_text(item, " (%g msec)",  tvb_get_letohs(tvb, offset)*0.625);
5023
0
            offset+=2;
5024
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5025
0
            offset++;
5026
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5027
0
            offset++;
5028
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_direct_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5029
0
            offset++;
5030
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5031
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5032
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5033
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_3, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5034
0
            offset++;
5035
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_filter_policy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5036
0
            offset++;
5037
0
            break;
5038
5039
0
        case 0x0008: /* LE Set Advertising Data */
5040
0
        case 0x0009: /* LE Set Scan Response Data */
5041
0
            {
5042
0
            bluetooth_eir_ad_data_t *ad_data;
5043
5044
0
            ad_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
5045
0
            ad_data->interface_id = bluetooth_data->interface_id;
5046
0
            ad_data->adapter_id = bluetooth_data->adapter_id;
5047
0
            ad_data->bd_addr = NULL;
5048
5049
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_data_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5050
0
            offset++;
5051
5052
0
            call_dissector_with_data(btcommon_ad_handle, tvb_new_subset_length(tvb, offset, 31), pinfo, tree, ad_data);
5053
0
            save_local_device_name_from_eir_ad(tvb, offset, pinfo, 31, bluetooth_data);
5054
0
            offset += 31;
5055
5056
0
            }
5057
0
            break;
5058
5059
0
        case 0x000a: /* LE Set Advertise Enable */
5060
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5061
0
            offset++;
5062
0
            break;
5063
5064
0
        case 0x000b: /* LE Set Scan Parameters */
5065
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_scan_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5066
0
            offset++;
5067
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_scan_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5068
0
            offset+=2;
5069
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_scan_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5070
0
            offset+=2;
5071
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5072
0
            offset++;
5073
0
            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);
5074
0
            offset++;
5075
0
            break;
5076
5077
0
        case 0x000c: /* LE Set Scan Enable */
5078
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_scan_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5079
0
            offset++;
5080
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_filter_duplicates, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5081
0
            offset++;
5082
0
            break;
5083
5084
0
        case 0x000d: /* LE Create Connection */
5085
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_scan_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5086
0
            offset+=2;
5087
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_scan_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5088
0
            offset+=2;
5089
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_initiator_filter_policy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5090
0
            offset++;
5091
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_peer_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5092
0
            offset++;
5093
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5094
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5095
0
            offset++;
5096
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5097
0
            offset+=2;
5098
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5099
0
            offset+=2;
5100
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_le_con_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5101
0
            proto_item_append_text(item, " (number events)");
5102
0
            offset+=2;
5103
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5104
0
            offset+=2;
5105
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_min_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5106
0
            offset+=2;
5107
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_max_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5108
0
            offset+=2;
5109
0
            break;
5110
5111
0
        case 0x0011: /* LE Add Device To Filter Accept List */
5112
0
        case 0x0012: /* LE Remove Device From Filter Accept List */
5113
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5114
0
            offset++;
5115
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5116
0
            break;
5117
5118
0
        case 0x0013: /* LE Connection Update */
5119
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5120
0
            offset+=2;
5121
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5122
0
            offset+=2;
5123
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5124
0
            offset+=2;
5125
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_le_con_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5126
0
            proto_item_append_text(item, " (number events)");
5127
0
            offset+=2;
5128
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5129
0
            offset+=2;
5130
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_min_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5131
0
            offset+=2;
5132
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_max_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5133
0
            offset+=2;
5134
0
            break;
5135
5136
0
        case 0x0014: /* LE Set Host Channel Classification */
5137
0
            sub_item = proto_tree_add_item(tree, hf_bthci_cmd_le_channel_map, tvb, offset, 5, ENC_NA);
5138
0
            sub_tree = proto_item_add_subtree(sub_item, ett_le_channel_map);
5139
5140
0
            call_dissector(btcommon_le_channel_map_handle, tvb_new_subset_length(tvb, offset, 5), pinfo, sub_tree);
5141
0
            offset += 5;
5142
5143
0
            break;
5144
5145
0
        case 0x0015: /* LE Read Channel Map */
5146
0
        case 0x0016: /* LE Read Remote Features */
5147
0
        case 0x001b: /* LE Long Term Key Request Negative Reply */
5148
0
        case 0x0030: /* LE Read PHY */
5149
0
        case 0x006D: /* LE Request Peer SCA */
5150
0
        case 0x008A: /* LE CS Read Remote Supported Capabilities */
5151
0
        case 0x008C: /* LE CS Security Enable */
5152
0
        case 0x008E: /* LE CS Read Remote FAE Table */
5153
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5154
0
            offset+=2;
5155
0
            break;
5156
5157
0
        case 0x0017: /* LE Encrypt */
5158
0
            proto_tree_add_item(tree, hf_bthci_cmd_key, tvb, offset, 16, ENC_NA);
5159
0
            offset+=16;
5160
0
            proto_tree_add_item(tree, hf_bthci_cmd_plaintext_data, tvb, offset, 16, ENC_NA);
5161
0
            offset+=16;
5162
0
            break;
5163
5164
0
        case 0x0019: /* LE Enable Encryption */
5165
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5166
0
            offset+=2;
5167
0
            proto_tree_add_item(tree, hf_bthci_cmd_random_number, tvb, offset, 8, ENC_NA);
5168
0
            offset+=8;
5169
0
            proto_tree_add_item(tree, hf_bthci_cmd_encrypted_diversifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5170
0
            offset+=2;
5171
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_long_term_key, tvb, offset, 16, ENC_NA);
5172
0
            offset+=16;
5173
0
            break;
5174
5175
0
        case 0x001a: /* LE Long Term Key Request Reply */
5176
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5177
0
            offset+=2;
5178
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_long_term_key, tvb, offset, 16, ENC_NA);
5179
0
            offset+=16;
5180
0
            break;
5181
5182
0
        case 0x001d: /* LE Receiver Test [v1] */
5183
0
        case 0x0033: /* LE Receiver Test [v2] */
5184
0
        case 0x004f: /* LE Receiver Test [v3] */
5185
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_rx_frequency, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5186
0
            proto_item_append_text(item, " (%d MHz)",  2402 + 2*tvb_get_uint8(tvb, offset));
5187
0
            offset++;
5188
5189
0
            if (cmd_ocf >= 0x0033) {
5190
0
                proto_tree_add_item(tree, hf_bthci_cmd_phy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5191
0
                offset++;
5192
0
                proto_tree_add_item(tree, hf_bthci_cmd_modulation_index, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5193
0
                offset++;
5194
0
            }
5195
5196
0
            if (cmd_ocf >= 0x004f) {
5197
0
                item = proto_tree_add_item(tree, hf_bthci_cmd_cte_length, tvb, offset, 1, ENC_NA);
5198
0
                proto_item_append_text(item, " (%d usec)", tvb_get_uint8(tvb, offset)*8);
5199
0
                offset++;
5200
0
                proto_tree_add_item(tree, hf_bthci_cmd_cte_type, tvb, offset, 1, ENC_NA);
5201
0
                offset++;
5202
0
                proto_tree_add_item(tree, hf_bthci_cmd_slot_durations, tvb, offset, 1, ENC_NA);
5203
0
                offset++;
5204
0
                offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5205
0
            }
5206
0
            break;
5207
5208
0
        case 0x001e: /* LE Transmitter Test [v1] */
5209
0
        case 0x0034: /* LE Transmitter Test [v2] */
5210
0
        case 0x0050: /* LE Transmitter Test [v3] */
5211
0
        case 0x007B: /* LE Transmitter Test [v4] */
5212
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_tx_frequency, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5213
0
            proto_item_append_text(item, " (%d MHz)",  2402 + 2*tvb_get_uint8(tvb, offset));
5214
0
            offset++;
5215
0
            proto_tree_add_item(tree, hf_bthci_cmd_test_data_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5216
0
            offset++;
5217
0
            proto_tree_add_item(tree, hf_bthci_cmd_test_packet_payload, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5218
0
            offset++;
5219
5220
0
            if (cmd_ocf >= 0x0034) {
5221
0
                proto_tree_add_item(tree, hf_bthci_cmd_phy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5222
0
                offset++;
5223
0
            }
5224
5225
0
            if (cmd_ocf >= 0x0050) {
5226
0
                item = proto_tree_add_item(tree, hf_bthci_cmd_cte_length, tvb, offset, 1, ENC_NA);
5227
0
                proto_item_append_text(item, " (%d usec)", tvb_get_uint8(tvb, offset)*8);
5228
0
                offset++;
5229
0
                proto_tree_add_item(tree, hf_bthci_cmd_cte_type, tvb, offset, 1, ENC_NA);
5230
0
                offset++;
5231
0
                offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5232
0
            }
5233
5234
0
            if (cmd_ocf >= 0x007B) {
5235
0
                proto_tree_add_item(tree, hf_bthci_cmd_tx_power_setting, tvb, offset, 1, ENC_NA);
5236
0
                offset++;
5237
0
            }
5238
0
            break;
5239
5240
0
        case 0x0020: /*LE Remote Connection Parameter Request Reply */
5241
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5242
0
            offset+=2;
5243
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5244
0
            offset+=2;
5245
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_con_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5246
0
            offset+=2;
5247
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_le_con_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5248
0
            proto_item_append_text(item, " (number events)");
5249
0
            offset+=2;
5250
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5251
0
            offset+=2;
5252
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_min_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5253
0
            offset+=2;
5254
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_max_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5255
0
            offset+=2;
5256
0
            break;
5257
5258
0
        case 0x0021: /* LE Remote Connection Parameter Request Negative Reply */
5259
0
        case 0x0067: /* LE Reject CIS Request */
5260
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5261
0
            offset+=2;
5262
0
            proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5263
0
            offset++;
5264
0
            break;
5265
5266
0
        case 0x0022: /* LE Set Data Length */
5267
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5268
0
            offset+=2;
5269
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_tx_octets, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5270
0
            offset+=2;
5271
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_tx_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5272
0
            offset+=2;
5273
0
            break;
5274
5275
0
        case 0x0024: /* LE Write Suggested Default Data Length */
5276
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_suggested_max_tx_octets, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5277
0
            offset+=2;
5278
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_suggested_max_tx_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5279
0
            offset+=2;
5280
0
            break;
5281
5282
0
        case 0x0026: /* LE Generate DHKey [v1] */
5283
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_remote_p_256_public_key, tvb, offset, 64, ENC_NA);
5284
0
            offset+=64;
5285
0
            break;
5286
5287
0
        case 0x0027:  /* LE Add Device to Resolving List */
5288
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_peer_identity_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5289
0
            offset++;
5290
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5291
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_peer_irk, tvb, offset, 16, ENC_NA);
5292
0
            offset+=16;
5293
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_local_irk, tvb, offset, 16, ENC_NA);
5294
0
            offset+=16;
5295
0
            break;
5296
5297
0
        case 0x0028: /*  LE Remove Device From Resolving List */
5298
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_peer_identity_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5299
0
            offset++;
5300
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5301
0
            break;
5302
5303
0
        case 0x002B: /*   LE Read Peer Resolvable Address */
5304
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_peer_identity_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5305
0
            offset++;
5306
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5307
0
            break;
5308
5309
0
        case 0x002C: /*      LE Read Local Resolvable Address" */
5310
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_peer_identity_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5311
0
            offset++;
5312
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5313
0
            break;
5314
5315
0
        case 0x002D: /* Set Address Resolution Enable */
5316
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_address_resolution_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5317
0
            offset++;
5318
0
            break;
5319
5320
0
        case 0x002E: /* LE Set Resolvable Private Address Timeout */
5321
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_rpa_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5322
0
            offset+=2;
5323
0
            break;
5324
5325
0
        case 0x0031: /* LE Set Default PHY */
5326
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_all_phys, ett_phys_flags, hfx_btcmd_all_phys, ENC_NA);
5327
0
            offset += 1;
5328
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tx_phys, ett_phys_flags, hfx_btcmd_phys_pref, ENC_NA);
5329
0
            offset+=1;
5330
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_rx_phys, ett_phys_flags, hfx_btcmd_phys_pref, ENC_NA);
5331
0
            offset+=1;
5332
0
            break;
5333
5334
0
        case 0x0032: /* LE Set PHY */
5335
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5336
0
            offset+=2;
5337
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_all_phys, ett_phys_flags, hfx_btcmd_all_phys, ENC_NA);
5338
0
            offset += 1;
5339
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tx_phys, ett_phys_flags, hfx_btcmd_phys_pref, ENC_NA);
5340
0
            offset+=1;
5341
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_rx_phys, ett_phys_flags, hfx_btcmd_phys_pref, ENC_NA);
5342
0
            offset+=1;
5343
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_phy_options, ett_phys_flags, hfx_btcmd_phy_options, ENC_LITTLE_ENDIAN);
5344
0
            offset+=2;
5345
0
            break;
5346
5347
0
        case 0x0035: /* LE Set Advertising Set Random Address */
5348
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5349
0
            offset+=1;
5350
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5351
0
            break;
5352
5353
0
        case 0x0036: /* LE Set Extended Advertising Parameters [v1] */
5354
0
        case 0x007F: /* LE Set Extended Advertising Parameters [v2] */
5355
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5356
0
            offset+=1;
5357
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_advertising_properties, ett_adv_properties, hfx_bthci_cmd_adv_properties, ENC_LITTLE_ENDIAN);
5358
0
            offset+=2;
5359
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_ext_interval_min, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5360
0
            offset+=3;
5361
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_ext_interval_max, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5362
0
            offset+=3;
5363
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5364
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5365
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_channel_map_3, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5366
0
            offset++;
5367
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5368
0
            offset++;
5369
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_peer_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5370
0
            offset++;
5371
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5372
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_filter_policy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5373
0
            offset++;
5374
0
            proto_tree_add_item(tree, hf_bthci_cmd_tx_power, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5375
0
            offset++;
5376
0
            proto_tree_add_item(tree, hf_bthci_cmd_primary_advertising_phy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5377
0
            offset++;
5378
0
            proto_tree_add_item(tree, hf_bthci_cmd_sec_adv_max_skip, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5379
0
            offset++;
5380
0
            proto_tree_add_item(tree, hf_bthci_cmd_secondary_advertising_phy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5381
0
            offset++;
5382
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_sid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5383
0
            offset++;
5384
0
            proto_tree_add_item(tree, hf_bthci_cmd_scan_req_notif_en, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5385
0
            offset++;
5386
0
            if (cmd_ocf == 0x007F) {
5387
0
                proto_tree_add_item(tree, hf_bthci_cmd_primary_adv_phy_options, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5388
0
                offset++;
5389
0
                proto_tree_add_item(tree, hf_bthci_cmd_secondary_adv_phy_options, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5390
0
                offset++;
5391
0
            }
5392
0
            break;
5393
5394
0
        case 0x0037: /* LE Set Extended Advertising Data */
5395
0
        case 0x0038: /* LE Set Extended Scan Response Data */
5396
0
            {
5397
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5398
0
            offset+=1;
5399
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_adv_data_operation, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5400
0
            offset+=1;
5401
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_adv_data_frag_pref, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5402
0
            offset+=1;
5403
5404
0
            bluetooth_eir_ad_data_t *ad_data;
5405
0
            ad_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
5406
0
            ad_data->interface_id = bluetooth_data->interface_id;
5407
0
            ad_data->adapter_id = bluetooth_data->adapter_id;
5408
0
            ad_data->bd_addr = NULL;
5409
5410
0
            uint8_t data_length = tvb_get_uint8(tvb, offset);
5411
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_data_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5412
0
            offset++;
5413
0
            call_dissector_with_data(btcommon_ad_handle, tvb_new_subset_length(tvb, offset, data_length), pinfo, tree, ad_data);
5414
0
            save_local_device_name_from_eir_ad(tvb, offset, pinfo, data_length, bluetooth_data);
5415
0
            offset += data_length;
5416
0
            }
5417
0
            break;
5418
5419
0
        case 0x0039: /* LE Set Extended Advertising Enable */
5420
0
            {
5421
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5422
0
            offset++;
5423
5424
0
            uint8_t number_of_sets = tvb_get_uint8(tvb, offset);
5425
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_adv_en_sets, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5426
0
            offset++;
5427
5428
0
            for (int i = 0; i< number_of_sets; i++) {
5429
0
                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));
5430
0
                sub_tree = proto_item_add_subtree(sub_item, ett_adv_sets);
5431
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5432
0
                offset+=1;
5433
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_le_adv_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5434
0
                offset+=2;
5435
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_le_adv_max_extended_events, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5436
0
                offset+=1;
5437
0
            }
5438
0
            }
5439
0
            break;
5440
5441
0
        case 0x003C: /* LE Remove Advertising Set */
5442
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5443
0
            offset+=1;
5444
0
            break;
5445
5446
0
        case 0x003E: /* LE Set Periodic Advertising Parameters [v1] */
5447
0
        case 0x0086: /* LE Set Periodic Advertising Parameters [v2] */
5448
0
                proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5449
0
                offset+=1;
5450
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_le_advts_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5451
0
            proto_item_append_text(item, " (%g msec)",  tvb_get_letohs(tvb, offset)*1.25);
5452
0
                offset+=2;
5453
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_le_advts_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5454
0
            proto_item_append_text(item, " (%g msec)",  tvb_get_letohs(tvb, offset)*1.25);
5455
0
            offset+=2;
5456
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_periodic_advertising_properties, ett_adv_properties,
5457
0
                                                      hfx_bthci_cmd_periodic_adv_properties, ENC_LITTLE_ENDIAN);
5458
0
            offset+=2;
5459
0
            if (cmd_ocf == 0x0086) {
5460
0
                proto_tree_add_item(tree, hf_bthci_cmd_num_subevents, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5461
0
                offset+=1;
5462
0
                proto_tree_add_item(tree, hf_bthci_cmd_subevent_interval, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5463
0
                offset+=1;
5464
0
                proto_tree_add_item(tree, hf_bthci_cmd_response_slot_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5465
0
                offset+=1;
5466
0
                proto_tree_add_item(tree, hf_bthci_cmd_response_slot_spacing, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5467
0
                offset+=1;
5468
0
                proto_tree_add_item(tree, hf_bthci_cmd_num_response_slots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5469
0
                offset+=1;
5470
0
            }
5471
0
            break;
5472
5473
0
        case 0x003F: /* LE Set Periodic Advertising Data */
5474
0
            {
5475
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5476
0
            offset+=1;
5477
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_adv_data_operation, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5478
0
            offset+=1;
5479
5480
0
            bluetooth_eir_ad_data_t *ad_data;
5481
0
            ad_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
5482
0
            ad_data->interface_id = bluetooth_data->interface_id;
5483
0
            ad_data->adapter_id = bluetooth_data->adapter_id;
5484
0
            ad_data->bd_addr = NULL;
5485
5486
0
            uint8_t data_length = tvb_get_uint8(tvb, offset);
5487
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_data_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5488
0
            offset++;
5489
0
            call_dissector_with_data(btcommon_ad_handle, tvb_new_subset_length(tvb, offset, data_length), pinfo, tree, ad_data);
5490
0
            save_local_device_name_from_eir_ad(tvb, offset, pinfo, data_length, bluetooth_data);
5491
0
            offset += data_length;
5492
0
            }
5493
0
            break;
5494
5495
0
        case 0x0040: /* LE Set Periodic Advertising Enable */
5496
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_advts_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5497
0
            offset++;
5498
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5499
0
            offset+=1;
5500
0
            break;
5501
5502
0
        case 0x0041: /* LE Set Extended Scan Parameters */
5503
0
            {
5504
0
            uint8_t scanning_phys, phy = 0;
5505
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5506
0
            offset++;
5507
0
            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);
5508
0
            offset++;
5509
0
            scanning_phys = tvb_get_uint8(tvb, offset);
5510
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_le_scan_phys, ett_phy_param, hfx_btcmd_le_scan_phys, ENC_NA);
5511
0
            offset += 1;
5512
0
            for (int i = 1; i < 0x08; i <<=1) {
5513
0
                phy++;
5514
0
                if (scanning_phys & i) {
5515
0
                    sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_le_scan_phy_param, tvb, offset, 5, "Scanning PHY: %s",
5516
0
                                                                                        val_to_str_const(phy, cmd_le_phy_vals, "Unknown"));
5517
0
                    sub_tree = proto_item_add_subtree(sub_item, ett_phy_param);
5518
0
                    proto_tree_add_item(sub_tree, hf_bthci_cmd_le_scan_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5519
0
                    offset++;
5520
0
                    proto_tree_add_item(sub_tree, hf_bthci_cmd_le_scan_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5521
0
                    offset+=2;
5522
0
                    proto_tree_add_item(sub_tree, hf_bthci_cmd_le_scan_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5523
0
                    offset+=2;
5524
0
                }
5525
0
            }
5526
0
            }
5527
0
            break;
5528
5529
0
        case 0x0042: /* LE Set Extended Scan Enable */
5530
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_scan_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5531
0
            offset++;
5532
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_filter_duplicates, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5533
0
            offset++;
5534
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_le_scan_duration, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5535
0
            proto_item_append_text(item, " (%g msec)",  tvb_get_letohs(tvb, offset)*10.0);
5536
0
            offset+=2;
5537
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_le_scan_period, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5538
0
            proto_item_append_text(item, " (%g sec)",  tvb_get_letohs(tvb, offset)*1.28);
5539
0
            offset+=2;
5540
0
            break;
5541
5542
0
        case 0x0085: /* LE Extended Create Connection [v2] */
5543
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5544
0
            offset+=1;
5545
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_subevent, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5546
0
            if (tvb_get_uint8(tvb, offset) == 0xff) {
5547
0
                proto_item_append_text(item, " (not used)");
5548
0
            }
5549
0
            offset+=1;
5550
            /* FALLTHROUGH */
5551
5552
0
        case 0x0043: /* LE Extended Create Connection [v1] */
5553
0
            {
5554
0
            uint8_t initiating_phys, phy = 0;
5555
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_initiator_filter_policy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5556
0
            offset++;
5557
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_own_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5558
0
            offset++;
5559
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_peer_address_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5560
0
            offset++;
5561
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5562
0
            initiating_phys = tvb_get_uint8(tvb, offset);
5563
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_le_phys, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5564
0
            offset += 1;
5565
0
            for (int i = 1; i < 0x08; i <<=1) {
5566
0
                phy++;
5567
0
                if (initiating_phys & i) {
5568
0
                    sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_le_init_phy_param, tvb, offset, 16, "Initiating PHY: %s",
5569
0
                                                                                        val_to_str_const(phy, cmd_le_phy_vals, "Unknown"));
5570
0
                    sub_tree = proto_item_add_subtree(sub_item, ett_phy_param);
5571
0
                    proto_tree_add_item(sub_tree, hf_bthci_cmd_le_scan_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5572
0
                    offset+=2;
5573
0
                    proto_tree_add_item(sub_tree, hf_bthci_cmd_le_scan_window, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5574
0
                    offset+=2;
5575
0
                    proto_tree_add_item(sub_tree, hf_bthci_cmd_le_con_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5576
0
                    offset+=2;
5577
0
                    proto_tree_add_item(sub_tree, hf_bthci_cmd_le_con_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5578
0
                    offset+=2;
5579
0
                    item = proto_tree_add_item(sub_tree, hf_bthci_cmd_le_con_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5580
0
                    proto_item_append_text(item, " (number events)");
5581
0
                    offset+=2;
5582
0
                    proto_tree_add_item(sub_tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5583
0
                    offset+=2;
5584
0
                    proto_tree_add_item(sub_tree, hf_bthci_cmd_le_min_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5585
0
                    offset+=2;
5586
0
                    proto_tree_add_item(sub_tree, hf_bthci_cmd_le_max_ce_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5587
0
                    offset+=2;
5588
0
                }
5589
0
            }
5590
0
            }
5591
0
            break;
5592
5593
0
        case 0x0044: /* LE Periodic Advertising Create Sync */
5594
0
            proto_tree_add_item(tree, hf_bthci_cmd_sync_filter_policy, tvb, offset, 1, ENC_NA);
5595
0
            offset++;
5596
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_sid, tvb, offset, 1, ENC_NA);
5597
0
            offset++;
5598
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_peer_address_type, tvb, offset, 1, ENC_NA);
5599
0
            offset++;
5600
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5601
0
            proto_tree_add_item(tree, hf_bthci_cmd_skip, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5602
0
            offset+=2;
5603
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5604
0
            offset+=2;
5605
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_sync_cte_type, ett_sync_cte_type, hfx_btcmd_sync_cte_type, ENC_NA);
5606
0
            offset++;
5607
0
            break;
5608
5609
0
        case 0x0046: /* LE Periodic Advertising Terminate Sync */
5610
0
            proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5611
0
            offset+=2;
5612
0
            break;
5613
5614
0
        case 0x0047: /* LE Add Device To Periodic Advertiser List */
5615
0
        case 0x0048: /* LE Remove Device From Periodic Advertiser List */
5616
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_peer_address_type, tvb, offset, 1, ENC_NA);
5617
0
            offset++;
5618
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5619
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_sid, tvb, offset, 1, ENC_NA);
5620
0
            offset++;
5621
0
            break;
5622
5623
0
        case 0x004D: /* LE Write RF Path Compensation */
5624
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_rf_tx_path_compensation_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5625
0
            proto_item_append_text(item, " (%g dB)", tvb_get_letohis(tvb, offset)*0.1);
5626
0
            offset+=2;
5627
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_rf_rx_path_compensation_value, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5628
0
            proto_item_append_text(item, " (%g dB)", tvb_get_letohis(tvb, offset)*0.1);
5629
0
            offset+=2;
5630
0
            break;
5631
5632
0
        case 0x004E: /* LE Set Privacy Mode */
5633
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_peer_identity_address_type, tvb, offset, 1, ENC_NA);
5634
0
            offset++;
5635
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
5636
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_privacy_mode, tvb, offset, 1, ENC_NA);
5637
0
            offset++;
5638
0
            break;
5639
5640
0
        case 0x0051: /* LE Set Connectionless CTE Transmit Parameters */
5641
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
5642
0
            offset++;
5643
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_cte_length, tvb, offset, 1, ENC_NA);
5644
0
            proto_item_append_text(item, " (%d usec)", tvb_get_uint8(tvb, offset)*8);
5645
0
            offset++;
5646
0
            proto_tree_add_item(tree, hf_bthci_cmd_cte_type, tvb, offset, 1, ENC_NA);
5647
0
            offset++;
5648
0
            proto_tree_add_item(tree, hf_bthci_cmd_cte_count, tvb, offset, 1, ENC_NA);
5649
0
            offset++;
5650
0
            offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5651
0
            break;
5652
5653
0
        case 0x0052: /* LE Set Connectionless CTE Transmit Enable */
5654
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
5655
0
            offset++;
5656
0
            proto_tree_add_item(tree, hf_bthci_cmd_cte_enable, tvb, offset, 1, ENC_NA);
5657
0
            offset++;
5658
0
            break;
5659
5660
0
        case 0x0053: /* LE Set Connectionless IQ Sampling Enable */
5661
0
            proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5662
0
            offset+=2;
5663
0
            proto_tree_add_item(tree, hf_bthci_cmd_iq_sampling_enable, tvb, offset, 1, ENC_NA);
5664
0
            offset++;
5665
0
            proto_tree_add_item(tree, hf_bthci_cmd_slot_durations, tvb, offset, 1, ENC_NA);
5666
0
            offset++;
5667
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_max_sampled_ctes, tvb, offset, 1, ENC_NA);
5668
0
            if (tvb_get_uint8(tvb, offset) == 0)
5669
0
                proto_item_append_text(item, " (Sample and report all available CTEs)");
5670
0
            offset++;
5671
0
            offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5672
0
            break;
5673
5674
0
        case 0x0054: /* LE Set Connection CTE Receive Parameters */
5675
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5676
0
            offset+=2;
5677
0
            proto_tree_add_item(tree, hf_bthci_cmd_iq_sampling_enable, tvb, offset, 1, ENC_NA);
5678
0
            offset++;
5679
0
            proto_tree_add_item(tree, hf_bthci_cmd_slot_durations, tvb, offset, 1, ENC_NA);
5680
0
            offset++;
5681
0
            offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5682
0
            break;
5683
5684
0
        case 0x0055: /* LE Set Connection CTE Transmit Parameters */
5685
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5686
0
            offset+=2;
5687
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cte_types, ett_sync_cte_type, hfx_btcmd_cte_types, ENC_NA);
5688
0
            offset++;
5689
0
            offset = dissect_antenna_switching_pattern(tvb, offset, tree);
5690
0
            break;
5691
5692
0
        case 0x0056: /* LE Connection CTE Request Enable */
5693
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5694
0
            offset+=2;
5695
0
            proto_tree_add_item(tree, hf_bthci_cmd_cte_enable, tvb, offset, 1, ENC_NA);
5696
0
            offset++;
5697
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_cte_request_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5698
0
            if (tvb_get_letohs(tvb, offset) == 0)
5699
0
                proto_item_append_text(item, " (Initiate once, at earliest opportunity)");
5700
0
            else
5701
0
                proto_item_append_text(item, " (Connection Events)");
5702
0
            offset+=2;
5703
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_cte_length, tvb, offset, 1, ENC_NA);
5704
0
            proto_item_append_text(item, " (%d usec)", tvb_get_uint8(tvb, offset)*8);
5705
0
            offset++;
5706
0
            proto_tree_add_item(tree, hf_bthci_cmd_cte_type, tvb, offset, 1, ENC_NA);
5707
0
            offset++;
5708
0
            break;
5709
5710
0
        case 0x0057: /* LE Connection CTE Response Enable */
5711
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5712
0
            offset+=2;
5713
0
            proto_tree_add_item(tree, hf_bthci_cmd_cte_enable, tvb, offset, 1, ENC_NA);
5714
0
            offset++;
5715
0
            break;
5716
5717
0
        case 0x0059: /* LE Set Periodic Advertising Receive Enable */
5718
0
            proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5719
0
            offset+=2;
5720
0
            proto_tree_add_item(tree, hf_bthci_cmd_reporting_enable, tvb, offset, 1, ENC_NA);
5721
0
            offset++;
5722
0
            break;
5723
5724
0
        case 0x005A: /* LE Periodic Advertising Sync Transfer */
5725
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5726
0
            offset+=2;
5727
0
            proto_tree_add_item(tree, hf_bthci_cmd_service_data_past, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5728
0
            offset+=2;
5729
0
            proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5730
0
            offset+=2;
5731
0
            break;
5732
5733
0
        case 0x005B: /* LE Periodic Advertising Set Info Transfer */
5734
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5735
0
            offset+=2;
5736
0
            proto_tree_add_item(tree, hf_bthci_cmd_service_data_past, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5737
0
            offset+=2;
5738
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
5739
0
            offset++;
5740
0
            break;
5741
5742
0
        case 0x005C: /* LE Set Periodic Advertising Sync Transfer Parameters */
5743
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5744
0
            offset+=2;
5745
            /* FALL THROUGH */
5746
5747
0
        case 0x005D: /* LE Set Default Periodic Advertising Sync Transfer Parameters */
5748
0
            proto_tree_add_item(tree, hf_bthci_cmd_sync_mode, tvb, offset, 1, ENC_NA);
5749
0
            offset++;
5750
0
            proto_tree_add_item(tree, hf_bthci_cmd_skip, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5751
0
            offset+=2;
5752
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5753
0
            offset+=2;
5754
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_sync_cte_type, ett_sync_cte_type, hfx_btcmd_sync_cte_type, ENC_NA);
5755
0
            offset++;
5756
0
            break;
5757
5758
0
        case 0x005E: /* LE Generate DHKey [v2] */
5759
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_remote_p_256_public_key, tvb, offset, 64, ENC_NA);
5760
0
            offset+=64;
5761
0
            proto_tree_add_item(tree, hf_bthci_cmd_key_type, tvb, offset, 1, ENC_NA);
5762
0
            offset++;
5763
0
            break;
5764
5765
0
        case 0x005F: /* LE Modify Sleep Clock Accuracy */
5766
0
            proto_tree_add_item(tree, hf_bthci_cmd_sca_action, tvb, offset, 1, ENC_NA);
5767
0
            offset++;
5768
0
            break;
5769
5770
0
        case 0x0061: /* LE Read ISO Tx Sync */
5771
0
        case 0x0072: /* LE ISO Read Test Counters */
5772
0
        case 0x0073: /* LE ISO Test End */
5773
0
        case 0x0075: /* LE Read ISO Link Quality */
5774
0
            proto_tree_add_item(tree, hf_bthci_cmd_cis_bis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5775
0
            offset+=2;
5776
0
            break;
5777
5778
0
        case 0x0062: /* LE Set CIG Parameters */
5779
0
            {
5780
0
            uint8_t cis_count;
5781
0
            proto_tree_add_item(tree, hf_bthci_cmd_cig_id, tvb, offset, 1, ENC_NA);
5782
0
            offset++;
5783
0
            proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval_c_to_p, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5784
0
            offset+=3;
5785
0
            proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval_p_to_c, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5786
0
            offset+=3;
5787
0
            proto_tree_add_item(tree, hf_bthci_cmd_peripherals_clock_accuracy, tvb, offset, 1, ENC_NA);
5788
0
            offset++;
5789
0
            proto_tree_add_item(tree, hf_bthci_cmd_packing, tvb, offset, 1, ENC_NA);
5790
0
            offset++;
5791
0
            proto_tree_add_item(tree, hf_bthci_cmd_framing, tvb, offset, 1, ENC_NA);
5792
0
            offset++;
5793
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_transport_latency_c_to_p, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5794
0
            offset+=2;
5795
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_transport_latency_p_to_c, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5796
0
            offset+=2;
5797
0
            proto_tree_add_item(tree, hf_bthci_cmd_cis_count, tvb, offset, 1, ENC_NA);
5798
0
            cis_count = tvb_get_uint8(tvb, offset);
5799
0
            offset++;
5800
5801
0
            for (int i = 0; i < cis_count; i++) {
5802
0
                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));
5803
0
                sub_tree = proto_item_add_subtree(sub_item, ett_cis_params);
5804
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_cis_id, tvb, offset, 1, ENC_NA);
5805
0
                offset++;
5806
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_max_sdu_c_to_p, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5807
0
                offset+=2;
5808
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_max_sdu_p_to_c, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5809
0
                offset+=2;
5810
0
                proto_tree_add_bitmask(sub_tree, tvb, offset, hf_bthci_cmd_phy_c_to_p, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5811
0
                offset++;
5812
0
                proto_tree_add_bitmask(sub_tree, tvb, offset, hf_bthci_cmd_phy_p_to_c, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5813
0
                offset++;
5814
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_rtn_c_to_p, tvb, offset, 1, ENC_NA);
5815
0
                offset++;
5816
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_rtn_p_to_c, tvb, offset, 1, ENC_NA);
5817
0
                offset++;
5818
0
            }
5819
0
            }
5820
0
            break;
5821
5822
0
        case 0x0063: /* LE Set CIG Parameters Test */
5823
0
            {
5824
0
            uint8_t cis_count;
5825
0
            proto_tree_add_item(tree, hf_bthci_cmd_cig_id, tvb, offset, 1, ENC_NA);
5826
0
            offset++;
5827
0
            proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval_c_to_p, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5828
0
            offset+=3;
5829
0
            proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval_p_to_c, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5830
0
            offset+=3;
5831
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_ft_c_to_p, tvb, offset, 1, ENC_NA);
5832
0
            proto_item_append_text(item, " ISO Intervals");
5833
0
            offset++;
5834
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_ft_p_to_c, tvb, offset, 1, ENC_NA);
5835
0
            proto_item_append_text(item, " ISO Intervals");
5836
0
            offset++;
5837
0
            proto_tree_add_item(tree, hf_bthci_cmd_iso_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5838
0
            offset+=2;
5839
0
            proto_tree_add_item(tree, hf_bthci_cmd_peripherals_clock_accuracy, tvb, offset, 1, ENC_NA);
5840
0
            offset++;
5841
0
            proto_tree_add_item(tree, hf_bthci_cmd_packing, tvb, offset, 1, ENC_NA);
5842
0
            offset++;
5843
0
            proto_tree_add_item(tree, hf_bthci_cmd_framing, tvb, offset, 1, ENC_NA);
5844
0
            offset++;
5845
0
            proto_tree_add_item(tree, hf_bthci_cmd_cis_count, tvb, offset, 1, ENC_NA);
5846
0
            cis_count = tvb_get_uint8(tvb, offset);
5847
0
            offset++;
5848
5849
0
            for (int i = 0; i < cis_count; i++) {
5850
0
                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));
5851
0
                sub_tree = proto_item_add_subtree(sub_item, ett_cis_params);
5852
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_cis_id, tvb, offset, 1, ENC_NA);
5853
0
                offset++;
5854
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_nse, tvb, offset, 1, ENC_NA);
5855
0
                offset++;
5856
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_max_sdu_c_to_p, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5857
0
                offset+=2;
5858
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_max_sdu_p_to_c, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5859
0
                offset+=2;
5860
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_max_pdu_c_to_p, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5861
0
                offset+=2;
5862
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_max_pdu_p_to_c, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5863
0
                offset+=2;
5864
0
                proto_tree_add_bitmask(sub_tree, tvb, offset, hf_bthci_cmd_phy_c_to_p, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5865
0
                offset++;
5866
0
                proto_tree_add_bitmask(sub_tree, tvb, offset, hf_bthci_cmd_phy_p_to_c, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5867
0
                offset++;
5868
0
                item = proto_tree_add_item(sub_tree, hf_bthci_cmd_bn_c_to_p, tvb, offset, 1, ENC_NA);
5869
0
                if (tvb_get_uint8(tvb, offset) == 0)
5870
0
                    proto_item_append_text(item, " (No data)");
5871
0
                offset++;
5872
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_bn_p_to_c, tvb, offset, 1, ENC_NA);
5873
0
                if (tvb_get_uint8(tvb, offset) == 0)
5874
0
                    proto_item_append_text(item, " (No data)");
5875
0
                offset++;
5876
0
            }
5877
0
            }
5878
0
            break;
5879
5880
0
        case 0x0064: /* LE Create CIS */
5881
0
            {
5882
0
            uint8_t cis_count;
5883
0
            uint32_t k_shandle, chandle;
5884
0
            proto_tree_add_item(tree, hf_bthci_cmd_cis_count, tvb, offset, 1, ENC_NA);
5885
0
            cis_count = tvb_get_uint8(tvb, offset);
5886
0
            offset++;
5887
0
            for (int i = 0; i < cis_count; i++) {
5888
0
                sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_cis_params, tvb, offset, 4, "CIS Handle: 0x%03x, Connection Handle: 0x%03x",
5889
0
                                                      tvb_get_letohs(tvb, offset), tvb_get_letohs(tvb, offset+2));
5890
0
                sub_tree = proto_item_add_subtree(sub_item, ett_cis_params);
5891
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_cis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5892
0
                k_shandle = tvb_get_letohs(tvb, offset) & 0xfff;
5893
0
                offset+=2;
5894
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5895
0
                chandle = tvb_get_letohs(tvb, offset) & 0xfff;
5896
0
                offset+=2;
5897
5898
0
                if (!pinfo->fd->visited) {
5899
0
                    wmem_tree_key_t     key[5];
5900
0
                    uint32_t            interface_id;
5901
0
                    uint32_t            adapter_id;
5902
0
                    uint32_t            frame_number;
5903
0
                    stream_connection_handle_pair_t  *stream_connection_handle_pair;
5904
5905
0
                    interface_id = bluetooth_data->interface_id;
5906
0
                    adapter_id   = bluetooth_data->adapter_id;
5907
0
                    frame_number = pinfo->num;
5908
5909
0
                    key[0].length = 1;
5910
0
                    key[0].key    = &interface_id;
5911
0
                    key[1].length = 1;
5912
0
                    key[1].key    = &adapter_id;
5913
0
                    key[2].length = 1;
5914
0
                    key[2].key    = &k_shandle;
5915
0
                    key[3].length = 1;
5916
0
                    key[3].key    = &frame_number;
5917
0
                    key[4].length = 0;
5918
0
                    key[4].key    = NULL;
5919
5920
0
                    stream_connection_handle_pair =
5921
0
                        (stream_connection_handle_pair_t *) wmem_new(wmem_file_scope(), stream_connection_handle_pair_t);
5922
0
                    stream_connection_handle_pair->chandle = chandle;
5923
0
                    stream_connection_handle_pair->change_in_frame = frame_number;
5924
5925
0
                    wmem_tree_insert32_array(bluetooth_data->shandle_to_chandle, key, stream_connection_handle_pair);
5926
0
                }
5927
0
            }
5928
0
            }
5929
0
            break;
5930
5931
0
        case 0x0065: /* LE Remove CIG */
5932
0
            proto_tree_add_item(tree, hf_bthci_cmd_cig_id, tvb, offset, 1, ENC_NA);
5933
0
            offset++;
5934
0
            break;
5935
5936
0
        case 0x0066: /* LE Accept CIS Request */
5937
0
            proto_tree_add_item(tree, hf_bthci_cmd_cis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5938
0
            offset+=2;
5939
0
            break;
5940
5941
0
        case 0x0068: /* LE Create BIG */
5942
0
            proto_tree_add_item(tree, hf_bthci_cmd_big_handle, tvb, offset, 1, ENC_NA);
5943
0
            offset++;
5944
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
5945
0
            offset++;
5946
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_bis, tvb, offset, 1, ENC_NA);
5947
0
            offset++;
5948
0
            proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5949
0
            offset+=3;
5950
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_sdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5951
0
            offset+=2;
5952
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_transport_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5953
0
            offset+=2;
5954
0
            proto_tree_add_item(tree, hf_bthci_cmd_rtn, tvb, offset, 1, ENC_NA);
5955
0
            offset++;
5956
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_phy, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5957
0
            offset++;
5958
0
            proto_tree_add_item(tree, hf_bthci_cmd_packing, tvb, offset, 1, ENC_NA);
5959
0
            offset++;
5960
0
            proto_tree_add_item(tree, hf_bthci_cmd_framing, tvb, offset, 1, ENC_NA);
5961
0
            offset++;
5962
0
            proto_tree_add_item(tree, hf_bthci_cmd_encryption, tvb, offset, 1, ENC_NA);
5963
0
            offset++;
5964
0
            proto_tree_add_item(tree, hf_bthci_cmd_broadcast_code, tvb, offset, 16, ENC_NA);
5965
0
            offset+=16;
5966
0
            break;
5967
5968
0
        case 0x0069: /* LE Create BIG Test */
5969
0
            proto_tree_add_item(tree, hf_bthci_cmd_big_handle, tvb, offset, 1, ENC_NA);
5970
0
            offset++;
5971
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
5972
0
            offset++;
5973
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_bis, tvb, offset, 1, ENC_NA);
5974
0
            offset++;
5975
0
            proto_tree_add_item(tree, hf_bthci_cmd_sdu_interval, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5976
0
            offset+=3;
5977
0
            proto_tree_add_item(tree, hf_bthci_cmd_iso_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5978
0
            offset+=2;
5979
0
            proto_tree_add_item(tree, hf_bthci_cmd_nse, tvb, offset, 1, ENC_NA);
5980
0
            offset++;
5981
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_sdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5982
0
            offset+=2;
5983
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_pdu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5984
0
            offset+=2;
5985
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_phy, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
5986
0
            offset++;
5987
0
            proto_tree_add_item(tree, hf_bthci_cmd_packing, tvb, offset, 1, ENC_NA);
5988
0
            offset++;
5989
0
            proto_tree_add_item(tree, hf_bthci_cmd_framing, tvb, offset, 1, ENC_NA);
5990
0
            offset++;
5991
0
            proto_tree_add_item(tree, hf_bthci_cmd_bn, tvb, offset, 1, ENC_NA);
5992
0
            offset++;
5993
0
            proto_tree_add_item(tree, hf_bthci_cmd_irc, tvb, offset, 1, ENC_NA);
5994
0
            offset++;
5995
0
            proto_tree_add_item(tree, hf_bthci_cmd_pto, tvb, offset, 1, ENC_NA);
5996
0
            offset++;
5997
0
            proto_tree_add_item(tree, hf_bthci_cmd_encryption, tvb, offset, 1, ENC_NA);
5998
0
            offset++;
5999
0
            proto_tree_add_item(tree, hf_bthci_cmd_broadcast_code, tvb, offset, 16, ENC_NA);
6000
0
            offset+=16;
6001
0
            break;
6002
6003
0
        case 0x006A: /* LE Terminate BIG */
6004
0
            proto_tree_add_item(tree, hf_bthci_cmd_big_handle, tvb, offset, 1, ENC_NA);
6005
0
            offset++;
6006
0
            proto_tree_add_item(tree, hf_bthci_cmd_reason, tvb, offset, 1, ENC_NA);
6007
0
            offset++;
6008
0
            break;
6009
6010
0
        case 0x006B: /* LE BIG Create Sync */
6011
0
            {
6012
0
            uint8_t num_bis;
6013
6014
0
            proto_tree_add_item(tree, hf_bthci_cmd_big_handle, tvb, offset, 1, ENC_NA);
6015
0
            offset++;
6016
0
            proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6017
0
            offset+=2;
6018
0
            proto_tree_add_item(tree, hf_bthci_cmd_encryption, tvb, offset, 1, ENC_NA);
6019
0
            offset++;
6020
0
            proto_tree_add_item(tree, hf_bthci_cmd_broadcast_code, tvb, offset, 16, ENC_NA);
6021
0
            offset+=16;
6022
0
            proto_tree_add_item(tree, hf_bthci_cmd_mse, tvb, offset, 1, ENC_NA);
6023
0
            offset++;
6024
0
            proto_tree_add_item(tree, hf_bthci_cmd_sync_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6025
0
            offset+=2;
6026
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_bis, tvb, offset, 1, ENC_NA);
6027
0
            num_bis = tvb_get_uint8(tvb, offset);
6028
0
            offset++;
6029
0
            for (int i = 0; i < num_bis; i++) {
6030
0
                proto_tree_add_item(tree, hf_bthci_cmd_bis_index, tvb, offset, 1, ENC_NA);
6031
0
            offset++;
6032
0
            }
6033
0
            }
6034
0
            break;
6035
6036
0
        case 0x006C: /* LE BIG Terminate Sync */
6037
0
            proto_tree_add_item(tree, hf_bthci_cmd_big_handle, tvb, offset, 1, ENC_NA);
6038
0
            offset++;
6039
0
            break;
6040
6041
0
        case 0x006E: /* LE Setup ISO Data Path */
6042
0
            {
6043
0
            uint8_t codec_length;
6044
0
            const char *str = "Disabled";
6045
6046
0
            proto_tree_add_item(tree, hf_bthci_cmd_cis_bis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6047
0
            offset+=2;
6048
0
            proto_tree_add_item(tree, hf_bthci_cmd_data_path_direction, tvb, offset, 1, ENC_NA);
6049
0
            offset++;
6050
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_data_path_id, tvb, offset, 1, ENC_NA);
6051
0
            if (tvb_get_uint8(tvb, offset) == 0)
6052
0
                str = "HCI";
6053
0
            else if (tvb_get_uint8(tvb, offset) < 0xff)
6054
0
                str = "Logical Channel Number";
6055
0
            proto_item_append_text(item, " (%s)", str);
6056
0
            offset++;
6057
0
            offset = dissect_coding_format(tree, hf_bthci_cmd_coding_format, tvb, offset, ett_coding_format);
6058
0
            proto_tree_add_item(tree, hf_bthci_cmd_controller_delay, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6059
0
            offset+=3;
6060
0
            codec_length = tvb_get_uint8(tvb, offset);
6061
0
            proto_tree_add_item(tree, hf_bthci_cmd_codec_config_length, tvb, offset, 1, ENC_NA);
6062
0
            offset++;
6063
0
            proto_tree_add_item(tree, hf_bthci_cmd_codec_config, tvb, offset, codec_length, ENC_NA);
6064
0
            offset += codec_length;
6065
0
            }
6066
0
            break;
6067
6068
0
        case 0x006F: /* LE Remove ISO Data Path */
6069
0
            proto_tree_add_item(tree, hf_bthci_cmd_cis_bis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6070
0
            offset+=2;
6071
0
            proto_tree_add_item(tree, hf_bthci_cmd_data_path_direction, tvb, offset, 1, ENC_NA);
6072
0
            offset++;
6073
0
            break;
6074
6075
0
        case 0x0070: /* LE ISO Transmit Test */
6076
0
        case 0x0071: /* LE ISO Receive Test */
6077
0
            proto_tree_add_item(tree, hf_bthci_cmd_cis_bis_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6078
0
            offset+=2;
6079
0
            proto_tree_add_item(tree, hf_bthci_cmd_payload_type, tvb, offset, 1, ENC_NA);
6080
0
            offset++;
6081
0
            break;
6082
6083
0
        case 0x0074: /* LE Set Host Feature */
6084
0
            proto_tree_add_item(tree, hf_bthci_cmd_feature_bit_number, tvb, offset, 1, ENC_NA);
6085
0
            offset++;
6086
0
            proto_tree_add_item(tree, hf_bthci_cmd_feature_bit_value, tvb, offset, 1, ENC_NA);
6087
0
            offset++;
6088
0
            break;
6089
6090
0
        case 0x0076: /* LE Enhanced Read Transmit Power Level */
6091
0
        case 0x0077: /* LE Read Remote Transmit Power Level */
6092
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6093
0
            offset+=2;
6094
0
            proto_tree_add_item(tree, hf_bthci_cmd_phy_and_coding, tvb, offset, 1, ENC_NA);
6095
0
            offset++;
6096
0
            break;
6097
6098
0
        case 0x0078: /* LE Set Path Loss Reporting Parameters */
6099
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6100
0
            offset+=2;
6101
0
            proto_tree_add_item(tree, hf_bthci_cmd_high_threshold, tvb, offset, 1, ENC_NA);
6102
0
            offset++;
6103
0
            proto_tree_add_item(tree, hf_bthci_cmd_high_hysteresis, tvb, offset, 1, ENC_NA);
6104
0
            offset++;
6105
0
            proto_tree_add_item(tree, hf_bthci_cmd_low_threshold, tvb, offset, 1, ENC_NA);
6106
0
            offset++;
6107
0
            proto_tree_add_item(tree, hf_bthci_cmd_low_hysteresis, tvb, offset, 1, ENC_NA);
6108
0
            offset++;
6109
0
            proto_tree_add_item(tree, hf_bthci_cmd_min_time_spent, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6110
0
            offset+=2;
6111
0
            break;
6112
6113
0
        case 0x0079: /* LE Set Path Loss Reporting Enable */
6114
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6115
0
            offset+=2;
6116
0
            proto_tree_add_item(tree, hf_bthci_cmd_reporting_enable, tvb, offset, 1, ENC_NA);
6117
0
            offset++;
6118
0
            break;
6119
6120
0
        case 0x007A: /* LE Set Transmit Power Reporting Enable */
6121
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6122
0
            offset+=2;
6123
0
            proto_tree_add_item(tree, hf_bthci_cmd_local_reporting_enable, tvb, offset, 1, ENC_NA);
6124
0
            offset++;
6125
0
            proto_tree_add_item(tree, hf_bthci_cmd_remote_reporting_enable, tvb, offset, 1, ENC_NA);
6126
0
            offset++;
6127
0
            break;
6128
6129
0
        case 0x007C: /* LE Set Data Related Changes */
6130
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
6131
0
            offset++;
6132
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_addr_change_reasons, ett_addr_change_reasons, hfx_btcmd_addr_change_reasons, ENC_NA);
6133
0
            offset++;
6134
0
            break;
6135
6136
0
        case 0x007E: /* LE Subrate Request */
6137
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6138
0
            offset+=2;
6139
            /* FALLTHROUGH */
6140
6141
0
        case 0x007D: /* LE Set Default Subrate */
6142
0
            proto_tree_add_item(tree, hf_bthci_cmd_subrate_factor_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6143
0
            offset+=2;
6144
0
            proto_tree_add_item(tree, hf_bthci_cmd_subrate_factor_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6145
0
            offset+=2;
6146
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_le_con_latency, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6147
0
            proto_item_append_text(item, " (subrated events)");
6148
0
            offset+=2;
6149
0
            item = proto_tree_add_item(tree, hf_bthci_cmd_continuation_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6150
0
            proto_item_append_text(item, " (underlying events)");
6151
0
            offset+=2;
6152
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_supervision_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6153
0
            offset+=2;
6154
0
            break;
6155
6156
0
        case 0x0080: /* LE Set Decision Data */
6157
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
6158
0
            offset++;
6159
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_adv_decision_flags, ett_adv_properties, hfx_bthci_cmd_adv_decision_flags, ENC_NA);
6160
0
            offset += 1;
6161
0
            uint8_t data_length = tvb_get_uint8(tvb, offset);
6162
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_data_length, tvb, offset, 1, ENC_NA);
6163
0
            offset++;
6164
0
            proto_tree_add_item(tree, hf_bthci_cmd_adv_decision_data, tvb, offset, data_length, ENC_NA);
6165
0
            offset+=data_length;
6166
0
            break;
6167
6168
0
        case 0x0081: /* LE Set Decision Instructions */
6169
0
            {
6170
0
            uint8_t num_tests, test_field;
6171
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_tests, tvb, offset, 1, ENC_NA);
6172
0
            num_tests = tvb_get_uint8(tvb, offset);
6173
0
            offset++;
6174
0
            for (int i = 0; i < num_tests; i++) {
6175
0
                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);
6176
0
                offset += 1;
6177
0
                test_field = tvb_get_uint8(tvb, offset);
6178
0
                item = proto_tree_add_item(tree, hf_bthci_cmd_adv_test_field, tvb, offset, 1, ENC_NA);
6179
0
                if (test_field > 16) {
6180
0
                    if (test_field <= 24)
6181
0
                        proto_item_append_text(item, " (Arbitrary Data, exactly %u octets)", test_field - 16);
6182
0
                    else if (test_field > 32 && test_field <= 40)
6183
0
                        proto_item_append_text(item, " (Arbitrary Data, at least %u octets)", test_field - 32);
6184
0
                    else if (test_field > 48 && test_field <= 56)
6185
0
                        proto_item_append_text(item, " (Arbitrary Data, at most %u octets)", test_field - 48);
6186
0
                    else if (test_field >= 240)
6187
0
                        proto_item_append_text(item, " (Vendor specific)");
6188
0
                }
6189
0
                offset++;
6190
0
                proto_tree_add_item(tree, hf_bthci_cmd_adv_test_params, tvb, offset, 16, ENC_NA);
6191
0
                offset+=16;
6192
0
            }
6193
0
            }
6194
0
            break;
6195
6196
0
        case 0x0082: /* LE Set Periodic Advertising Subevent */
6197
0
            {
6198
0
            uint8_t sub_events, length;
6199
0
            proto_tree_add_item(tree, hf_bthci_cmd_advertising_handle, tvb, offset, 1, ENC_NA);
6200
0
            offset++;
6201
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_subevents, tvb, offset, 1, ENC_NA);
6202
0
            sub_events = tvb_get_uint8(tvb, offset);
6203
0
            offset++;
6204
0
            for (int i = 0; i < sub_events; i++) {
6205
0
                length = 4 + tvb_get_uint8(tvb, offset+3);
6206
0
                sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_subevents, tvb, offset, length,
6207
0
                                                      "Sub-event: %u", tvb_get_uint8(tvb, offset));
6208
0
                sub_tree = proto_item_add_subtree(sub_item, ett_adv_subevents);
6209
6210
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_subevent, tvb, offset, 1, ENC_NA);
6211
0
                offset++;
6212
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_response_slot_start, tvb, offset, 1, ENC_NA);
6213
0
                offset++;
6214
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_response_slot_count, tvb, offset, 1, ENC_NA);
6215
0
                offset++;
6216
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_subevent_data_length, tvb, offset, 1, ENC_NA);
6217
0
                length = tvb_get_uint8(tvb, offset);
6218
0
                offset++;
6219
6220
0
                bluetooth_eir_ad_data_t *ad_data;
6221
0
                ad_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
6222
0
                ad_data->interface_id = bluetooth_data->interface_id;
6223
0
                ad_data->adapter_id = bluetooth_data->adapter_id;
6224
0
                ad_data->bd_addr = NULL;
6225
0
                call_dissector_with_data(btcommon_ad_handle, tvb_new_subset_length(tvb, offset, length), pinfo, sub_tree, ad_data);
6226
0
                offset += length;
6227
0
            }
6228
0
            }
6229
0
            break;
6230
6231
0
        case 0x0083: /* LE Set Periodic Advertising Response Data */
6232
0
            {
6233
0
            uint8_t length;
6234
0
            proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6235
0
            offset+=2;
6236
0
            proto_tree_add_item(tree, hf_bthci_cmd_request_event, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6237
0
            offset+=2;
6238
0
            proto_tree_add_item(tree, hf_bthci_cmd_request_subevent, tvb, offset, 1, ENC_NA);
6239
0
            offset++;
6240
0
            proto_tree_add_item(tree, hf_bthci_cmd_response_subevent, tvb, offset, 1, ENC_NA);
6241
0
            offset++;
6242
0
            proto_tree_add_item(tree, hf_bthci_cmd_response_slot, tvb, offset, 1, ENC_NA);
6243
0
            offset++;
6244
0
            proto_tree_add_item(tree, hf_bthci_cmd_response_data_length, tvb, offset, 1, ENC_NA);
6245
0
            length = tvb_get_uint8(tvb, offset);
6246
0
            offset++;
6247
6248
0
            bluetooth_eir_ad_data_t *ad_data;
6249
0
            ad_data = wmem_new0(pinfo->pool, bluetooth_eir_ad_data_t);
6250
0
            ad_data->interface_id = bluetooth_data->interface_id;
6251
0
            ad_data->adapter_id = bluetooth_data->adapter_id;
6252
0
            ad_data->bd_addr = NULL;
6253
0
            call_dissector_with_data(btcommon_ad_handle, tvb_new_subset_length(tvb, offset, length), pinfo, tree, ad_data);
6254
0
            offset += length;
6255
0
            }
6256
0
            break;
6257
6258
0
        case 0x0084: /* LE Set Periodic Sync Subevent */
6259
0
            {
6260
0
            uint8_t sub_events;
6261
0
            proto_tree_add_item(tree, hf_bthci_cmd_sync_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6262
0
            offset+=2;
6263
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_advertising_properties, ett_adv_properties, hfx_bthci_cmd_adv_properties, ENC_LITTLE_ENDIAN);
6264
0
            offset+=2;
6265
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_subevents, tvb, offset, 1, ENC_NA);
6266
0
            sub_events = tvb_get_uint8(tvb, offset);
6267
0
            offset++;
6268
0
            sub_item = proto_tree_add_none_format(tree, hf_bthci_cmd_subevents, tvb, offset, sub_events, "Sub-events");
6269
0
            sub_tree = proto_item_add_subtree(sub_item, ett_adv_subevents);
6270
0
            for (int i = 0; i < sub_events; i++) {
6271
0
                proto_tree_add_item(sub_tree, hf_bthci_cmd_subevent, tvb, offset, 1, ENC_NA);
6272
0
                offset++;
6273
0
            }
6274
0
            }
6275
0
            break;
6276
6277
0
        case 0x0088: /* LE Read All Remote Features */
6278
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6279
0
            offset+=2;
6280
0
            proto_tree_add_item(tree, hf_bthci_cmd_pages_requested, tvb, offset, 1, ENC_NA);
6281
0
            offset += 1;
6282
0
            break;
6283
6284
0
        case 0x008B: /* LE CS Write Cached Remote Supported Capabilities */
6285
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6286
0
            offset+=2;
6287
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_config, tvb, offset, 1, ENC_NA);
6288
0
            offset += 1;
6289
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_consecutive_procedures, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6290
0
            offset += 2;
6291
0
            proto_tree_add_item(tree, hf_bthci_cmd_num_antennas_supported, tvb, offset, 1, ENC_NA);
6292
0
            offset += 1;
6293
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_antenna_paths_supported, tvb, offset, 1, ENC_NA);
6294
0
            offset += 1;
6295
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cs_roles, ett_cs_roles, hfx_bthci_cmd_cs_roles, ENC_NA);
6296
0
            offset++;
6297
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cs_modes_supported, ett_cs_modes, hfx_bthci_cmd_cs_modes_supported, ENC_NA);
6298
0
            offset++;
6299
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_rtt_capability, ett_cs_capability, hfx_bthci_cmd_rtt_capability, ENC_NA);
6300
0
            offset++;
6301
0
            proto_tree_add_item(tree, hf_bthci_cmd_rtt_aa_only_n, tvb, offset, 1, ENC_NA);
6302
0
            offset += 1;
6303
0
            proto_tree_add_item(tree, hf_bthci_cmd_rtt_sounding_n, tvb, offset, 1, ENC_NA);
6304
0
            offset += 1;
6305
0
            proto_tree_add_item(tree, hf_bthci_cmd_rtt_random_n, tvb, offset, 1, ENC_NA);
6306
0
            offset += 1;
6307
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_nadm_sounding_capability, ett_cs_capability, hfx_bthci_cmd_nadm_sounding_capability, ENC_NA);
6308
0
            offset += 2;
6309
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_nadm_random_capability, ett_cs_capability, hfx_bthci_cmd_nadm_random_capability, ENC_NA);
6310
0
            offset += 2;
6311
0
            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);
6312
0
            offset++;
6313
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cs_subfeatures_supported, ett_cs_capability, hfx_bthci_cmd_cs_subfeatures, ENC_NA);
6314
0
            offset++;
6315
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tip1_times_supported, ett_cs_times, hfx_bthci_cmd_tip_times_supported, ENC_NA);
6316
0
            offset += 2;
6317
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tip2_times_supported, ett_cs_times, hfx_bthci_cmd_tip_times_supported, ENC_NA);
6318
0
            offset += 2;
6319
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tfcs_times_supported, ett_cs_times, hfx_bthci_cmd_tfcs_times_supported, ENC_NA);
6320
0
            offset += 2;
6321
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tpm_times_supported, ett_cs_times, hfx_bthci_cmd_tpm_times_supported, ENC_NA);
6322
0
            offset += 2;
6323
0
            proto_tree_add_item(tree, hf_bthci_cmd_tsw_time_supported, tvb, offset, 1, ENC_NA);
6324
0
            offset += 1;
6325
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_tx_snr_capability, ett_cs_capability, hfx_bthci_cmd_tx_snr_capability, ENC_NA);
6326
0
            offset += 1;
6327
0
            break;
6328
6329
0
        case 0x008D: /* LE CS Set Default Settings */
6330
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6331
0
            offset+=2;
6332
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cs_roles, ett_cs_roles, hfx_bthci_cmd_cs_roles, ENC_NA);
6333
0
            offset++;
6334
0
            proto_tree_add_item(tree, hf_bthci_cmd_cs_sync_antenna_selection, tvb, offset, 1, ENC_NA);
6335
0
            offset++;
6336
0
            proto_tree_add_item(tree, hf_bthci_cmd_tx_power, tvb, offset, 1, ENC_NA);
6337
0
            offset++;
6338
0
            break;
6339
6340
0
        case 0x008F: /* LE CS Write Cached Remote FAE Table */
6341
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6342
0
            offset+=2;
6343
0
            proto_tree_add_item(tree, hf_bthci_cmd_fae_table, tvb, offset, 72, ENC_NA);
6344
0
            offset+=72;
6345
0
            break;
6346
6347
0
        case 0x0090: /* LE CS Create Config */
6348
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6349
0
            offset+=2;
6350
0
            proto_tree_add_item(tree, hf_bthci_cmd_config_id, tvb, offset, 1, ENC_NA);
6351
0
            offset++;
6352
0
            proto_tree_add_item(tree, hf_bthci_cmd_create_context, tvb, offset, 1, ENC_NA);
6353
0
            offset++;
6354
0
            proto_tree_add_item(tree, hf_bthci_cmd_main_mode_type, tvb, offset, 1, ENC_NA);
6355
0
            offset++;
6356
0
            proto_tree_add_item(tree, hf_bthci_cmd_sub_mode_type, tvb, offset, 1, ENC_NA);
6357
0
            offset++;
6358
0
            proto_tree_add_item(tree, hf_bthci_cmd_min_main_mode_steps, tvb, offset, 1, ENC_NA);
6359
0
            offset++;
6360
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_main_mode_steps, tvb, offset, 1, ENC_NA);
6361
0
            offset++;
6362
0
            proto_tree_add_item(tree, hf_bthci_cmd_main_mode_repetition, tvb, offset, 1, ENC_NA);
6363
0
            offset++;
6364
0
            proto_tree_add_item(tree, hf_bthci_cmd_mode0_steps, tvb, offset, 1, ENC_NA);
6365
0
            offset++;
6366
0
            proto_tree_add_item(tree, hf_bthci_cmd_cs_role, tvb, offset, 1, ENC_NA);
6367
0
            offset++;
6368
0
            proto_tree_add_item(tree, hf_bthci_cmd_rtt_type, tvb, offset, 1, ENC_NA);
6369
0
            offset++;
6370
0
            proto_tree_add_item(tree, hf_bthci_cmd_cs_sync_phy, tvb, offset, 1, ENC_NA);
6371
0
            offset++;
6372
0
            proto_tree_add_item(tree, hf_bthci_cmd_channel_map, tvb, offset, 10, ENC_NA);
6373
0
            offset += 10;
6374
0
            proto_tree_add_item(tree, hf_bthci_cmd_channel_map_repetition, tvb, offset, 1, ENC_NA);
6375
0
            offset++;
6376
0
            proto_tree_add_item(tree, hf_bthci_cmd_channel_selection_type, tvb, offset, 1, ENC_NA);
6377
0
            offset++;
6378
0
            proto_tree_add_item(tree, hf_bthci_cmd_ch3c_shape, tvb, offset, 1, ENC_NA);
6379
0
            offset++;
6380
0
            proto_tree_add_item(tree, hf_bthci_cmd_ch3c_jump, tvb, offset, 1, ENC_NA);
6381
0
            offset++;
6382
0
            proto_tree_add_item(tree, hf_bthci_cmd_companion_signal_enable, tvb, offset, 1, ENC_NA);
6383
0
            offset++;
6384
0
            break;
6385
6386
0
        case 0x0091: /* LE CS Remove Config */
6387
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6388
0
            offset+=2;
6389
0
            proto_tree_add_item(tree, hf_bthci_cmd_config_id, tvb, offset, 1, ENC_NA);
6390
0
            offset++;
6391
0
            break;
6392
6393
0
        case 0x0092: /* LE CS Channel Classification */
6394
0
            proto_tree_add_item(tree, hf_bthci_cmd_ch_classification, tvb, offset, 10, ENC_NA);
6395
0
            offset+=10;
6396
0
            break;
6397
6398
0
        case 0x0093: /* LE CS Set Procedure Parametes */
6399
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6400
0
            offset+=2;
6401
0
            proto_tree_add_item(tree, hf_bthci_cmd_config_id, tvb, offset, 1, ENC_NA);
6402
0
            offset++;
6403
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_procedure_len, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6404
0
            offset+=2;
6405
0
            proto_tree_add_item(tree, hf_bthci_cmd_min_procedure_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6406
0
            offset+=2;
6407
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_procedure_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6408
0
            offset+=2;
6409
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_procedure_count, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6410
0
            offset+=2;
6411
0
            proto_tree_add_item(tree, hf_bthci_cmd_min_subevent_len, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6412
0
            offset+=3;
6413
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_subevent_len, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6414
0
            offset+=3;
6415
0
            proto_tree_add_item(tree, hf_bthci_cmd_tone_antenna_selection, tvb, offset, 1, ENC_NA);
6416
0
            offset++;
6417
0
            proto_tree_add_item(tree, hf_bthci_cmd_phy_and_coding, tvb, offset, 1, ENC_NA);
6418
0
            offset++;
6419
0
            proto_tree_add_item(tree, hf_bthci_cmd_tx_pwr_delta, tvb, offset, 1, ENC_NA);
6420
0
            offset++;
6421
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_preferred_peer_antenna, ett_pref_antenna,
6422
0
                                   hfx_bthci_cmd_preferred_peer_antenna, ENC_NA);
6423
0
            offset++;
6424
0
            proto_tree_add_item(tree, hf_bthci_cmd_snr_control_initiator, tvb, offset, 1, ENC_NA);
6425
0
            offset++;
6426
0
            proto_tree_add_item(tree, hf_bthci_cmd_snr_control_reflector, tvb, offset, 1, ENC_NA);
6427
0
            offset++;
6428
0
            break;
6429
6430
0
        case 0x0094: /* LE CS Procedure Enable */
6431
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6432
0
            offset+=2;
6433
0
            proto_tree_add_item(tree, hf_bthci_cmd_config_id, tvb, offset, 1, ENC_NA);
6434
0
            offset++;
6435
0
            proto_tree_add_item(tree, hf_bthci_cmd_cs_enable, tvb, offset, 1, ENC_NA);
6436
0
            offset++;
6437
0
            break;
6438
6439
0
        case 0x0095: /* LE CS Test */
6440
0
            {
6441
0
            uint8_t role, rtt_type, length;
6442
0
            proto_tree_add_item(tree, hf_bthci_cmd_main_mode_type, tvb, offset, 1, ENC_NA);
6443
0
            offset++;
6444
0
            proto_tree_add_item(tree, hf_bthci_cmd_sub_mode_type, tvb, offset, 1, ENC_NA);
6445
0
            offset++;
6446
0
            proto_tree_add_item(tree, hf_bthci_cmd_main_mode_repetition, tvb, offset, 1, ENC_NA);
6447
0
            offset++;
6448
0
            proto_tree_add_item(tree, hf_bthci_cmd_mode0_steps, tvb, offset, 1, ENC_NA);
6449
0
            offset++;
6450
0
            proto_tree_add_item(tree, hf_bthci_cmd_cs_role, tvb, offset, 1, ENC_NA);
6451
0
            role = tvb_get_uint8(tvb, offset);
6452
0
            offset++;
6453
0
            proto_tree_add_item(tree, hf_bthci_cmd_rtt_type, tvb, offset, 1, ENC_NA);
6454
0
            rtt_type = tvb_get_uint8(tvb, offset);
6455
0
            offset++;
6456
0
            proto_tree_add_item(tree, hf_bthci_cmd_cs_sync_phy, tvb, offset, 1, ENC_NA);
6457
0
            offset++;
6458
0
            proto_tree_add_item(tree, hf_bthci_cmd_cs_sync_antenna_selection, tvb, offset, 1, ENC_NA);
6459
0
            offset++;
6460
0
            proto_tree_add_item(tree, hf_bthci_cmd_subevent_len, tvb, offset, 3, ENC_LITTLE_ENDIAN);
6461
0
            offset+=3;
6462
0
            proto_tree_add_item(tree, hf_bthci_cmd_cs_subevent_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6463
0
            offset+=2;
6464
0
            proto_tree_add_item(tree, hf_bthci_cmd_max_num_subevents, tvb, offset, 1, ENC_NA);
6465
0
            offset++;
6466
0
            proto_tree_add_item(tree, hf_bthci_cmd_tx_power_setting, tvb, offset, 1, ENC_NA);
6467
0
            offset++;
6468
0
            proto_tree_add_item(tree, hf_bthci_cmd_t_ip1_time, tvb, offset, 1, ENC_NA);
6469
0
            offset++;
6470
0
            proto_tree_add_item(tree, hf_bthci_cmd_t_ip2_time, tvb, offset, 1, ENC_NA);
6471
0
            offset++;
6472
0
            proto_tree_add_item(tree, hf_bthci_cmd_t_fcs_time, tvb, offset, 1, ENC_NA);
6473
0
            offset++;
6474
0
            proto_tree_add_item(tree, hf_bthci_cmd_t_pm_time, tvb, offset, 1, ENC_NA);
6475
0
            offset++;
6476
0
            proto_tree_add_item(tree, hf_bthci_cmd_t_sw_time, tvb, offset, 1, ENC_NA);
6477
0
            offset++;
6478
0
            proto_tree_add_item(tree, hf_bthci_cmd_tone_antenna_selection, tvb, offset, 1, ENC_NA);
6479
0
            offset++;
6480
            /* 1 byte reserved for future use */
6481
0
            offset++;
6482
0
            proto_tree_add_item(tree, hf_bthci_cmd_snr_control_initiator, tvb, offset, 1, ENC_NA);
6483
0
            offset++;
6484
0
            proto_tree_add_item(tree, hf_bthci_cmd_snr_control_reflector, tvb, offset, 1, ENC_NA);
6485
0
            offset++;
6486
0
            proto_tree_add_item(tree, hf_bthci_cmd_drbg_nonce, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6487
0
            offset+=2;
6488
0
            proto_tree_add_item(tree, hf_bthci_cmd_channel_map_repetition, tvb, offset, 1, ENC_NA);
6489
0
            offset++;
6490
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_cs_override_config, ett_override_config, hfx_bthci_cmd_override_config, ENC_NA);
6491
0
            offset += 2;
6492
0
            proto_tree_add_item(tree, hf_bthci_cmd_cs_override_param_length, tvb, offset, 1, ENC_NA);
6493
0
            length = tvb_get_uint8(tvb, offset);
6494
0
            offset++;
6495
0
            proto_tree_add_item(tree, hf_bthci_cmd_cs_override_param_data, tvb, offset, length, ENC_NA);
6496
0
            offset+=length;
6497
0
            if (!pinfo->fd->visited) {
6498
                /* store CS role and RTT type configuration for later dissection of CS results */
6499
0
                wmem_tree_key_t     key[6];
6500
0
                uint32_t            interface_id;
6501
0
                uint32_t            adapter_id;
6502
0
                uint32_t            frame_number;
6503
0
                uint32_t            connection_handle = 0xfff;
6504
0
                uint32_t            config_id = 0;
6505
0
                cs_configuration_t *cs_configuration;
6506
6507
0
                interface_id = bluetooth_data->interface_id;
6508
0
                adapter_id   = bluetooth_data->adapter_id;
6509
0
                frame_number = pinfo->num;
6510
6511
0
                key[0].length = 1;
6512
0
                key[0].key    = &interface_id;
6513
0
                key[1].length = 1;
6514
0
                key[1].key    = &adapter_id;
6515
0
                key[2].length = 1;
6516
0
                key[2].key    = &connection_handle;
6517
0
                key[3].length = 1;
6518
0
                key[3].key    = &config_id;
6519
0
                key[4].length = 1;
6520
0
                key[4].key    = &frame_number;
6521
0
                key[5].length = 0;
6522
0
                key[5].key    = NULL;
6523
6524
0
                cs_configuration = (cs_configuration_t *) wmem_new(wmem_file_scope(), cs_configuration_t);
6525
0
                cs_configuration->cs_role = role;
6526
0
                cs_configuration->rtt_type = rtt_type;
6527
0
                wmem_tree_insert32_array(bluetooth_data->cs_configurations, key, cs_configuration);
6528
0
            }
6529
0
            }
6530
0
            break;
6531
6532
0
        case 0x0097: /* LE Set Host Feature [v2] */
6533
0
            proto_tree_add_item(tree, hf_bthci_cmd_feature_bit_number2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6534
0
            offset+=2;
6535
0
            proto_tree_add_item(tree, hf_bthci_cmd_feature_bit_value, tvb, offset, 1, ENC_NA);
6536
0
            offset++;
6537
0
            break;
6538
6539
0
        case 0x0098: /* LE Add Device To Monitored Advertisers List */
6540
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_address_type, tvb, offset, 1, ENC_NA);
6541
0
            offset++;
6542
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
6543
0
            proto_tree_add_item(tree, hf_bthci_cmd_rssi_threshold_low, tvb, offset, 1, ENC_NA);
6544
0
            offset++;
6545
0
            proto_tree_add_item(tree, hf_bthci_cmd_rssi_threshold_high, tvb, offset, 1, ENC_NA);
6546
0
            offset++;
6547
0
            proto_tree_add_item(tree, hf_bthci_cmd_rssi_threshold_timeout, tvb, offset, 1, ENC_NA);
6548
0
            offset++;
6549
0
            break;
6550
6551
0
        case 0x0099: /* LE Remove Device From Monitored Advertisers List */
6552
0
            proto_tree_add_item(tree, hf_bthci_cmd_le_address_type, tvb, offset, 1, ENC_NA);
6553
0
            offset++;
6554
0
            offset = dissect_bd_addr(hf_bthci_cmd_bd_addr, pinfo, tree, tvb, offset, false, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
6555
0
            break;
6556
6557
0
        case 0x009C: /* LE Enable Monitored Advertisers */
6558
0
            proto_tree_add_item(tree, hf_bthci_cmd_adv_monitoring_enable, tvb, offset, 1, ENC_NA);
6559
0
            offset++;
6560
0
            break;
6561
6562
0
        case 0x009D: /* LE Frame Space Update */
6563
0
            proto_tree_add_item(tree, hf_bthci_cmd_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6564
0
            offset+=2;
6565
0
            proto_tree_add_item(tree, hf_bthci_cmd_frame_space_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6566
0
            offset+=2;
6567
0
            proto_tree_add_item(tree, hf_bthci_cmd_frame_space_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6568
0
            offset+=2;
6569
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_le_phys, ett_phy_param, hfx_btcmd_le_phys, ENC_NA);
6570
0
            offset += 1;
6571
0
            proto_tree_add_bitmask(tree, tvb, offset, hf_bthci_cmd_spacing_types, ett_spacing_types, hfx_bthci_cmd_spacing_types, ENC_NA);
6572
0
            offset += 2;
6573
0
            break;
6574
6575
0
        case 0x0002: /* LE Read Buffer Size [v1] */
6576
0
        case 0x0003: /* LE Read Local Supported Features */
6577
0
        case 0x0007: /* LE Read Advertising Channel Tx Power */
6578
0
        case 0x000E: /* LE Create Connection Cancel */
6579
0
        case 0x000F: /* LE Read Filter Accept List Size */
6580
0
        case 0x0010: /* LE Clear Filter Accept List */
6581
0
        case 0x0018: /* LE Rand */
6582
0
        case 0x001C: /* LE Read Supported States */
6583
0
        case 0x001F: /* LE Test End */
6584
0
        case 0x0023: /* LE Read Suggested Default Data Length */
6585
0
        case 0x0025: /* LE Read Local P-256 Public Key */
6586
0
        case 0x0029: /* LE Clear Resolving List */
6587
0
        case 0x002A: /* LE Read Resolving List Size */
6588
0
        case 0x002F: /* LE Read Maximum Data Length */
6589
0
        case 0x003A: /* LE Read Maximum Advertising Data Length */
6590
0
        case 0x003B: /* LE Read Number of Supported Advertising Sets */
6591
0
        case 0x003D: /* LE Clear Advertising Sets */
6592
0
        case 0x0045: /* LE Periodic Advertising Create Sync Cancel */
6593
0
        case 0x0049: /* LE Clear Periodic Advertiser List */
6594
0
        case 0x004A: /* LE Read Periodic Advertiser List Size */
6595
0
        case 0x004B: /* LE Read Transmit Power */
6596
0
        case 0x004C: /* LE Read RF Path Compensation */
6597
0
        case 0x0058: /* LE Read Antenna Information */
6598
0
        case 0x0060: /* LE Read Buffer Size [v2] */
6599
0
        case 0x0087: /* LE Read All Local Supported Features */
6600
0
        case 0x0089: /* LE CS Read Local Supported Capabilities */
6601
0
        case 0x0096: /* LE CS Test End */
6602
0
        case 0x009A: /* LE Clear Monitored Advertisers List */
6603
0
        case 0x009B: /* LE Read Monitored Advertisers List Size */
6604
6605
            /* NOTE: No parameters */
6606
0
            break;
6607
6608
0
        default:
6609
0
            proto_tree_add_expert(tree, pinfo, &ei_command_unknown_command, tvb, offset, -1);
6610
0
            offset += tvb_reported_length_remaining(tvb, offset);
6611
0
    }
6612
6613
0
    return offset;
6614
0
}
6615
6616
/* Code to actually dissect the packets */
6617
static int
6618
dissect_bthci_cmd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
6619
0
{
6620
0
    proto_item        *ti_cmd;
6621
0
    proto_tree        *bthci_cmd_tree;
6622
0
    uint32_t           opcode;
6623
0
    uint16_t           ocf;
6624
0
    uint8_t            param_length;
6625
0
    uint8_t            ogf;
6626
0
    int                offset = 0;
6627
0
    proto_item        *ti_opcode;
6628
0
    proto_tree        *opcode_tree;
6629
0
    int                hfx;
6630
0
    bluetooth_data_t  *bluetooth_data;
6631
0
    uint32_t           interface_id;
6632
0
    uint32_t           adapter_id;
6633
0
    uint32_t           frame_number;
6634
0
    wmem_tree_key_t    key[5];
6635
0
    bthci_cmd_data_t  *bthci_cmd_data = NULL;
6636
0
    proto_tree        *sub_item;
6637
0
    wmem_tree_t       *subtree;
6638
6639
6640
    /* Reject the packet if data is NULL */
6641
0
    if (data == NULL)
6642
0
        return 0;
6643
0
    bluetooth_data = (bluetooth_data_t *) data;
6644
6645
0
    interface_id = bluetooth_data->interface_id;
6646
0
    adapter_id   = bluetooth_data->adapter_id;
6647
0
    frame_number = pinfo->num;
6648
6649
0
    ti_cmd = proto_tree_add_item(tree, proto_bthci_cmd, tvb, offset, -1, ENC_NA);
6650
0
    bthci_cmd_tree = proto_item_add_subtree(ti_cmd, ett_bthci_cmd);
6651
6652
0
    switch (pinfo->p2p_dir) {
6653
0
        case P2P_DIR_SENT:
6654
0
            col_set_str(pinfo->cinfo, COL_INFO, "Sent ");
6655
0
            break;
6656
0
        case P2P_DIR_RECV:
6657
0
            col_set_str(pinfo->cinfo, COL_INFO, "Rcvd ");
6658
0
            break;
6659
0
        default:
6660
0
            col_set_str(pinfo->cinfo, COL_INFO, "UnknownDirection ");
6661
0
            break;
6662
0
    }
6663
6664
0
    set_address(&pinfo->src,     AT_STRINGZ,  5, "host");
6665
0
    set_address(&pinfo->dst,     AT_STRINGZ, 11, "controller");
6666
0
    set_address(&pinfo->net_src, AT_STRINGZ,  5, "host");
6667
0
    set_address(&pinfo->net_dst, AT_STRINGZ, 11, "controller");
6668
0
    set_address(&pinfo->dl_src,  AT_STRINGZ,  5, "host");
6669
0
    set_address(&pinfo->dl_dst,  AT_STRINGZ, 11, "controller");
6670
0
    if (!pinfo->fd->visited) {
6671
0
        address *addr;
6672
6673
0
        addr = (address *) wmem_memdup(wmem_file_scope(), &pinfo->dl_src, sizeof(address));
6674
0
        addr->data =  wmem_memdup(wmem_file_scope(), pinfo->dl_src.data, pinfo->dl_src.len);
6675
0
        p_add_proto_data(wmem_file_scope(), pinfo, proto_bluetooth, BLUETOOTH_DATA_SRC, addr);
6676
6677
0
        addr = (address *) wmem_memdup(wmem_file_scope(), &pinfo->dl_dst, sizeof(address));
6678
0
        addr->data =  wmem_memdup(wmem_file_scope(), pinfo->dl_dst.data, pinfo->dl_dst.len);
6679
0
        p_add_proto_data(wmem_file_scope(), pinfo, proto_bluetooth, BLUETOOTH_DATA_DST, addr);
6680
0
    }
6681
6682
0
    opcode = tvb_get_letohs(tvb, offset);
6683
0
    ocf = opcode & 0x03ff;
6684
0
    ogf = (uint8_t) (opcode >> 10);
6685
6686
0
    if (ogf == HCI_OGF_VENDOR_SPECIFIC)
6687
0
        proto_item_append_text(ti_cmd," - %s", val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Vendor Command 0x%04x"));
6688
0
    else
6689
0
        proto_item_append_text(ti_cmd," - %s", val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Unknown 0x%04x"));
6690
6691
0
    if (have_tap_listener(bluetooth_hci_summary_tap)) {
6692
0
        bluetooth_hci_summary_tap_t  *tap_hci_summary;
6693
6694
0
        tap_hci_summary = wmem_new(pinfo->pool, bluetooth_hci_summary_tap_t);
6695
6696
0
        tap_hci_summary->interface_id  = bluetooth_data->interface_id;
6697
0
        tap_hci_summary->adapter_id    = bluetooth_data->adapter_id;
6698
6699
0
        tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_OPCODE;
6700
0
        tap_hci_summary->ogf = ogf;
6701
0
        tap_hci_summary->ocf = ocf;
6702
0
        if (try_val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext))
6703
0
            tap_hci_summary->name = val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Unknown 0x%04x");
6704
0
        else
6705
0
            tap_hci_summary->name = NULL;
6706
0
        tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
6707
0
    }
6708
6709
0
    if (!pinfo->fd->visited) {
6710
0
        bthci_cmd_data = (bthci_cmd_data_t *) wmem_new(wmem_file_scope(), bthci_cmd_data_t);
6711
0
        bthci_cmd_data->opcode = opcode;
6712
0
        bthci_cmd_data->command_in_frame = frame_number;
6713
0
        bthci_cmd_data->command_abs_ts = pinfo->abs_ts;
6714
0
        bthci_cmd_data->pending_in_frame = bluetooth_max_disconnect_in_frame;
6715
0
        bthci_cmd_data->pending_abs_ts = pinfo->abs_ts;
6716
0
        bthci_cmd_data->response_in_frame = bluetooth_max_disconnect_in_frame;
6717
0
        bthci_cmd_data->response_abs_ts = pinfo->abs_ts;
6718
0
    }
6719
6720
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "HCI_CMD");
6721
6722
0
    ti_opcode = proto_tree_add_item(bthci_cmd_tree, hf_bthci_cmd_opcode, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6723
0
    opcode_tree = proto_item_add_subtree(ti_opcode, ett_opcode);
6724
0
    proto_tree_add_item(opcode_tree, hf_bthci_cmd_ogf, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6725
6726
0
    if (ogf == HCI_OGF_LINK_CONTROL)
6727
0
        hfx = hf_bthci_cmd_ocf_link_control;
6728
0
    else if (ogf == HCI_OGF_LINK_POLICY)
6729
0
        hfx = hf_bthci_cmd_ocf_link_policy;
6730
0
    else if (ogf == HCI_OGF_HOST_CONTROLLER)
6731
0
        hfx = hf_bthci_cmd_ocf_host_controller_and_baseband;
6732
0
    else if (ogf == HCI_OGF_INFORMATIONAL)
6733
0
        hfx = hf_bthci_cmd_ocf_informational;
6734
0
    else if (ogf == HCI_OGF_STATUS)
6735
0
        hfx = hf_bthci_cmd_ocf_status;
6736
0
    else if (ogf == HCI_OGF_TESTING)
6737
0
        hfx = hf_bthci_cmd_ocf_testing;
6738
0
    else if (ogf == HCI_OGF_LOW_ENERGY)
6739
0
        hfx = hf_bthci_cmd_ocf_low_energy;
6740
0
    else if (ogf == HCI_OGF_LOGO_TESTING)
6741
0
        hfx = hf_bthci_cmd_ocf_logo_testing;
6742
0
    else
6743
0
        hfx = hf_bthci_cmd_ocf;
6744
0
    proto_tree_add_item(opcode_tree, hfx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6745
0
    offset+=2;
6746
6747
0
    proto_tree_add_item(bthci_cmd_tree, hf_bthci_cmd_param_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6748
0
    param_length = tvb_get_uint8(tvb, offset);
6749
0
    offset++;
6750
6751
0
    if (ogf == HCI_OGF_VENDOR_SPECIFIC) {
6752
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "Vendor Command 0x%04X (opcode 0x%04X)", ocf, opcode);
6753
6754
0
        if (!dissector_try_payload_with_data(vendor_dissector_table, tvb, pinfo, tree, true, bluetooth_data)) {
6755
0
            if (bluetooth_data) {
6756
0
                hci_vendor_data_t  *hci_vendor_data;
6757
6758
0
                key[0].length = 1;
6759
0
                key[0].key    = &interface_id;
6760
0
                key[1].length = 1;
6761
0
                key[1].key    = &adapter_id;
6762
0
                key[2].length = 0;
6763
0
                key[2].key    = NULL;
6764
6765
0
                hci_vendor_data = (hci_vendor_data_t *) wmem_tree_lookup32_array(bluetooth_data->hci_vendors, key);
6766
0
                if (hci_vendor_data) {
6767
0
                    int sub_offset = 0;
6768
6769
0
                    if (bthci_vendor_android) {
6770
0
                      sub_offset = dissector_try_uint_with_data(hci_vendor_table, bthci_vendor_manufacturer_android, tvb, pinfo, tree, true, bluetooth_data);
6771
0
                    } else {
6772
0
                      sub_offset = dissector_try_uint_with_data(hci_vendor_table, hci_vendor_data->manufacturer, tvb, pinfo, tree, true, bluetooth_data);
6773
0
                    }
6774
6775
0
                    if (sub_offset > 0 && sub_offset < tvb_captured_length_remaining(tvb, offset))
6776
0
                        proto_tree_add_expert(bthci_cmd_tree, pinfo, &ei_command_parameter_unexpected, tvb, offset + sub_offset, tvb_captured_length_remaining(tvb, sub_offset + offset));
6777
0
                }
6778
0
            }
6779
0
        }
6780
6781
0
        proto_tree_add_item(bthci_cmd_tree, hf_bthci_cmd_parameter, tvb, offset, tvb_captured_length_remaining(tvb, offset), ENC_NA);
6782
0
    } else {
6783
0
        col_append_str(pinfo->cinfo, COL_INFO, val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Unknown 0x%04x"));
6784
6785
0
        if (param_length > 0) {
6786
0
            switch (ogf) {
6787
0
                case HCI_OGF_LINK_CONTROL:
6788
0
                    offset = dissect_link_control_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf, bluetooth_data);
6789
0
                    break;
6790
6791
0
                case HCI_OGF_LINK_POLICY:
6792
0
                    offset = dissect_link_policy_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf, bluetooth_data);
6793
0
                    break;
6794
6795
0
                case HCI_OGF_HOST_CONTROLLER:
6796
0
                    offset = dissect_host_controller_baseband_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf, bluetooth_data, bthci_cmd_data);
6797
0
                    break;
6798
6799
0
                case HCI_OGF_INFORMATIONAL:
6800
0
                    offset = dissect_informational_parameters_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf);
6801
0
                    break;
6802
6803
0
                case HCI_OGF_STATUS:
6804
0
                    offset = dissect_status_parameters_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf);
6805
0
                    break;
6806
6807
0
                case HCI_OGF_TESTING:
6808
0
                    offset = dissect_testing_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf);
6809
0
                    break;
6810
6811
0
                case HCI_OGF_LOW_ENERGY:
6812
0
                    offset = dissect_le_cmd(tvb, offset, pinfo, bthci_cmd_tree, ocf, bluetooth_data);
6813
0
                    break;
6814
0
                default:
6815
0
                    proto_tree_add_expert(bthci_cmd_tree, pinfo, &ei_command_unknown_command, tvb, 3, -1);
6816
0
                    offset += tvb_reported_length_remaining(tvb, offset);
6817
0
                    break;
6818
0
            }
6819
0
        }
6820
0
    }
6821
6822
0
    if (!pinfo->fd->visited && bthci_cmd_data) {
6823
0
        key[0].length = 1;
6824
0
        key[0].key    = &interface_id;
6825
0
        key[1].length = 1;
6826
0
        key[1].key    = &adapter_id;
6827
0
        key[2].length = 1;
6828
0
        key[2].key    = &opcode;
6829
0
        key[3].length = 1;
6830
0
        key[3].key    = &frame_number;
6831
0
        key[4].length = 0;
6832
0
        key[4].key    = NULL;
6833
6834
0
        wmem_tree_insert32_array(bthci_cmds, key, bthci_cmd_data);
6835
0
    }
6836
6837
0
    if (ogf != HCI_OGF_VENDOR_SPECIFIC && tvb_reported_length_remaining(tvb, offset) > 0) {
6838
0
        proto_tree_add_expert(bthci_cmd_tree, pinfo, &ei_command_parameter_unexpected, tvb, offset, -1);
6839
0
        offset += tvb_reported_length_remaining(tvb, offset);
6840
0
    }
6841
6842
0
    key[0].length = 1;
6843
0
    key[0].key    = &interface_id;
6844
0
    key[1].length = 1;
6845
0
    key[1].key    = &adapter_id;
6846
0
    key[2].length = 1;
6847
0
    key[2].key    = &opcode;
6848
0
    key[3].length = 0;
6849
0
    key[3].key    = NULL;
6850
6851
0
    subtree = (wmem_tree_t *) wmem_tree_lookup32_array(bthci_cmds, key);
6852
0
    bthci_cmd_data = (subtree) ? (bthci_cmd_data_t *) wmem_tree_lookup32_le(subtree, pinfo->num) : NULL;
6853
0
    if (bthci_cmd_data && bthci_cmd_data->pending_in_frame < bluetooth_max_disconnect_in_frame) {
6854
0
        nstime_t  delta;
6855
6856
0
        sub_item = proto_tree_add_uint(bthci_cmd_tree, hf_pending_in_frame, tvb, 0, 0, bthci_cmd_data->pending_in_frame);
6857
0
        proto_item_set_generated(sub_item);
6858
6859
0
        nstime_delta(&delta, &bthci_cmd_data->pending_abs_ts, &bthci_cmd_data->command_abs_ts);
6860
0
        sub_item = proto_tree_add_double(bthci_cmd_tree, hf_command_pending_time_delta, tvb, 0, 0, nstime_to_msec(&delta));
6861
0
        proto_item_set_generated(sub_item);
6862
0
    }
6863
0
    if (bthci_cmd_data && bthci_cmd_data->response_in_frame < bluetooth_max_disconnect_in_frame) {
6864
0
        nstime_t  delta;
6865
6866
0
        sub_item = proto_tree_add_uint(bthci_cmd_tree, hf_response_in_frame, tvb, 0, 0, bthci_cmd_data->response_in_frame);
6867
0
        proto_item_set_generated(sub_item);
6868
6869
0
        nstime_delta(&delta, &bthci_cmd_data->response_abs_ts, &bthci_cmd_data->command_abs_ts);
6870
0
        sub_item = proto_tree_add_double(bthci_cmd_tree, hf_command_response_time_delta, tvb, 0, 0, nstime_to_msec(&delta));
6871
0
        proto_item_set_generated(sub_item);
6872
0
    }
6873
6874
0
    return offset;
6875
0
}
6876
6877
6878
/* Register the protocol with Wireshark */
6879
6880
/* this format is require because a script is used to build the C function
6881
   that calls all the protocol registration.
6882
   */
6883
void
6884
proto_register_bthci_cmd(void)
6885
14
{
6886
14
    module_t         *module;
6887
14
    expert_module_t  *expert_bthci_cmd;
6888
6889
    /* Setup list of header fields  See Section 1.6.1 for details*/
6890
14
    static hf_register_info hf[] = {
6891
14
        { &hf_bthci_cmd_opcode,
6892
14
          { "Command Opcode",               "bthci_cmd.opcode",
6893
14
            FT_UINT16, BASE_HEX|BASE_EXT_STRING, &bthci_cmd_opcode_vals_ext, 0x0,
6894
14
            "HCI Command Opcode", HFILL }
6895
14
        },
6896
14
        { &hf_bthci_cmd_ogf,
6897
14
          { "Opcode Group Field",           "bthci_cmd.opcode.ogf",
6898
14
            FT_UINT16, BASE_HEX|BASE_EXT_STRING, &bthci_cmd_ogf_vals_ext, 0xfc00,
6899
14
            NULL, HFILL }
6900
14
        },
6901
14
        { &hf_bthci_cmd_ocf_link_control,
6902
14
          { "Opcode Command Field",           "bthci_cmd.opcode.ocf",
6903
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_link_control_vals_ext, 0x03ff,
6904
14
            NULL, HFILL }
6905
14
        },
6906
14
        { &hf_bthci_cmd_ocf_link_policy,
6907
14
          { "Opcode Command Field",           "bthci_cmd.opcode.ocf",
6908
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_link_policy_vals_ext, 0x03ff,
6909
14
            NULL, HFILL }
6910
14
        },
6911
14
        { &hf_bthci_cmd_ocf_host_controller_and_baseband,
6912
14
          { "Opcode Command Field",           "bthci_cmd.opcode.ocf",
6913
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_host_controller_and_baseband_vals_ext, 0x03ff,
6914
14
            NULL, HFILL }
6915
14
        },
6916
14
        { &hf_bthci_cmd_ocf_informational,
6917
14
          { "Opcode Command Field",           "bthci_cmd.opcode.ocf",
6918
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_informational_vals_ext, 0x03ff,
6919
14
            NULL, HFILL }
6920
14
        },
6921
14
        { &hf_bthci_cmd_ocf_status,
6922
14
          { "Opcode Command Field",           "bthci_cmd.opcode.ocf",
6923
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_status_vals_ext, 0x03ff,
6924
14
            NULL, HFILL }
6925
14
        },
6926
14
        { &hf_bthci_cmd_ocf_testing,
6927
14
          { "Opcode Command Field",           "bthci_cmd.opcode.ocf",
6928
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_testing_vals_ext, 0x03ff,
6929
14
            NULL, HFILL }
6930
14
        },
6931
14
        { &hf_bthci_cmd_ocf_low_energy,
6932
14
          { "Opcode Command Field",           "bthci_cmd.opcode.ocf",
6933
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_ocf_low_energy_vals_ext, 0x03ff,
6934
14
            NULL, HFILL }
6935
14
        },
6936
14
        { &hf_bthci_cmd_ocf_logo_testing,
6937
14
          { "Opcode Command Field",           "bthci_cmd.opcode.ocf",
6938
14
            FT_UINT16, BASE_HEX, NULL, 0x03ff,
6939
14
            NULL, HFILL }
6940
14
        },
6941
14
        { &hf_bthci_cmd_ocf,
6942
14
          { "Opcode Command Field",           "bthci_cmd.opcode.ocf",
6943
14
            FT_UINT16, BASE_HEX, NULL, 0x03ff,
6944
14
            NULL, HFILL }
6945
14
        },
6946
14
        { &hf_bthci_cmd_param_length,
6947
14
          { "Parameter Total Length",           "bthci_cmd.param_length",
6948
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
6949
14
            NULL, HFILL }
6950
14
        },
6951
14
        { &hf_bthci_cmd_lap,
6952
14
          { "LAP",           "bthci_cmd.lap",
6953
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
6954
14
            "LAP for the inquiry access code", HFILL }
6955
14
        },
6956
14
        { &hf_bthci_cmd_inq_length,
6957
14
          { "Inquiry Length",           "bthci_cmd.inq_length",
6958
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
6959
14
            "Inquiry Length (*1.28s)", HFILL }
6960
14
        },
6961
14
        { &hf_bthci_cmd_num_responses,
6962
14
          { "Num Responses",           "bthci_cmd.num_responses",
6963
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
6964
14
            "Number of Responses", HFILL }
6965
14
        },
6966
14
        { &hf_bthci_cmd_encrypt_mode,
6967
14
          { "Encryption Mode",           "bthci_cmd.encrypt_mode",
6968
14
            FT_UINT8, BASE_HEX, VALS(bthci_cmd_encrypt_mode_vals), 0x0,
6969
14
            NULL, HFILL }
6970
14
        },
6971
14
        { &hf_bthci_cmd_bd_addr,
6972
14
          { "BD_ADDR",          "bthci_cmd.bd_addr",
6973
14
            FT_ETHER, BASE_NONE, NULL, 0x0,
6974
14
            "Bluetooth Device Address", HFILL}
6975
14
        },
6976
14
        { &hf_bthci_cmd_packet_type,
6977
14
          { "Packet Type",        "bthci_cmd.packet_type",
6978
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
6979
14
            NULL, HFILL }
6980
14
        },
6981
14
        { &hf_bthci_cmd_packet_type_reserved_0,
6982
14
          { "Reserved",        "bthci_cmd.packet_type.reserved.0",
6983
14
            FT_BOOLEAN, 16, NULL, 0x0001,
6984
14
            NULL, HFILL }
6985
14
        },
6986
14
        { &hf_bthci_cmd_packet_type_2dh1,
6987
14
          { "2-DH1",        "bthci_cmd.packet_type.2dh1",
6988
14
            FT_BOOLEAN, 16, NULL, 0x0002,
6989
14
            NULL, HFILL }
6990
14
        },
6991
14
        { &hf_bthci_cmd_packet_type_3dh1,
6992
14
          { "3-DH1",        "bthci_cmd.packet_type.3dh1",
6993
14
            FT_BOOLEAN, 16, NULL, 0x0004,
6994
14
            NULL, HFILL }
6995
14
        },
6996
14
        { &hf_bthci_cmd_packet_type_dm1,
6997
14
          { "DM1",        "bthci_cmd.packet_type.dm1",
6998
14
            FT_BOOLEAN, 16, NULL, 0x0008,
6999
14
            NULL, HFILL }
7000
14
        },
7001
14
        { &hf_bthci_cmd_packet_type_dh1,
7002
14
          { "DH1",        "bthci_cmd.packet_type.dh1",
7003
14
            FT_BOOLEAN, 16, NULL, 0x0010,
7004
14
            NULL, HFILL }
7005
14
        },
7006
14
        { &hf_bthci_cmd_packet_type_reserved_5_7,
7007
14
          { "Reserved",        "bthci_cmd.packet_type.reserved.5_7",
7008
14
            FT_UINT16, BASE_HEX, NULL, 0x00E0,
7009
14
            NULL, HFILL }
7010
14
        },
7011
14
        { &hf_bthci_cmd_packet_type_2dh3,
7012
14
          { "2-DH3",        "bthci_cmd.packet_type.2dh3",
7013
14
            FT_BOOLEAN, 16, NULL, 0x0100,
7014
14
            NULL, HFILL }
7015
14
        },
7016
14
        { &hf_bthci_cmd_packet_type_3dh3,
7017
14
          { "3-DH3",        "bthci_cmd.packet_type.3dh3",
7018
14
            FT_BOOLEAN, 16, NULL, 0x0200,
7019
14
            NULL, HFILL }
7020
14
        },
7021
14
        { &hf_bthci_cmd_packet_type_dm3,
7022
14
          { "DM3",        "bthci_cmd.packet_type.dm3",
7023
14
            FT_BOOLEAN, 16, NULL, 0x0400,
7024
14
            NULL, HFILL }
7025
14
        },
7026
14
        { &hf_bthci_cmd_packet_type_dh3,
7027
14
          { "DH3",        "bthci_cmd.packet_type.dh3",
7028
14
            FT_BOOLEAN, 16, NULL, 0x0800,
7029
14
            NULL, HFILL }
7030
14
        },
7031
14
        { &hf_bthci_cmd_packet_type_2dh5,
7032
14
          { "2-DH5",        "bthci_cmd.packet_type.2dh5",
7033
14
            FT_BOOLEAN, 16, NULL, 0x1000,
7034
14
            NULL, HFILL }
7035
14
        },
7036
14
        { &hf_bthci_cmd_packet_type_3dh5,
7037
14
          { "3-DH5",        "bthci_cmd.packet_type.3dh5",
7038
14
            FT_BOOLEAN, 16, NULL, 0x2000,
7039
14
            NULL, HFILL }
7040
14
        },
7041
14
        { &hf_bthci_cmd_packet_type_dm5,
7042
14
          { "DM5",        "bthci_cmd.packet_type.dm5",
7043
14
            FT_BOOLEAN, 16, NULL, 0x4000,
7044
14
            NULL, HFILL }
7045
14
        },
7046
14
        { &hf_bthci_cmd_packet_type_dh5,
7047
14
          { "DH5",        "bthci_cmd.packet_type.dh5",
7048
14
            FT_BOOLEAN, 16, NULL, 0x8000,
7049
14
            NULL, HFILL }
7050
14
        },
7051
14
        { &hf_bthci_cmd_page_scan_mode,
7052
14
          { "Page Scan Mode",        "bthci_cmd.page_scan_mode",
7053
14
            FT_UINT8, BASE_HEX, VALS(bthci_cmd_page_scan_modes), 0x0,
7054
14
            NULL, HFILL }
7055
14
        },
7056
14
        { &hf_bthci_cmd_page_scan_repetition_mode,
7057
14
          { "Page Scan Repetition Mode",        "bthci_cmd.page_scan_repetition_mode",
7058
14
            FT_UINT8, BASE_HEX, VALS(bthci_cmd_page_scan_repetition_modes), 0x0,
7059
14
            NULL, HFILL }
7060
14
        },
7061
14
        { &hf_bthci_cmd_page_scan_period_mode,
7062
14
          { "Page Scan Period Mode",        "bthci_cmd.page_scan_period_mode",
7063
14
            FT_UINT8, BASE_HEX, VALS(bthci_cmd_page_scan_period_modes), 0x0,
7064
14
            NULL, HFILL }
7065
14
        },
7066
14
        { &hf_bthci_cmd_clock_offset,
7067
14
          { "Clock Offset",        "bthci_cmd.clock_offset",
7068
14
            FT_UINT16, BASE_HEX, NULL, 0x7FFF,
7069
14
            "Bit 2-16 of the Clock Offset, CLKNPeripheral-CLK", HFILL }
7070
14
        },
7071
14
        { &hf_bthci_cmd_clock_offset_valid,
7072
14
          { "Clock_Offset_Valid_Flag",     "bthci_cmd.clock_offset_valid",
7073
14
            FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x8000,
7074
14
            "Indicates if clock offset is valid", HFILL }
7075
14
        },
7076
14
        { &hf_bthci_cmd_allow_role_switch,
7077
14
          { "Allow Role Switch",         "bthci_cmd.allow_role_switch",
7078
14
            FT_UINT8, BASE_HEX, VALS(cmd_role_switch_modes), 0x0,
7079
14
            NULL, HFILL }
7080
14
        },
7081
14
        { &hf_bthci_cmd_max_period_length,
7082
14
          { "Max Period Length",           "bthci_cmd.max_period_length",
7083
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
7084
14
            "Maximum amount of time specified between consecutive inquiries.", HFILL }
7085
14
        },
7086
14
        { &hf_bthci_cmd_min_period_length,
7087
14
          { "Min Period Length",           "bthci_cmd.min_period_length",
7088
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
7089
14
            "Minimum amount of time specified between consecutive inquiries.", HFILL }
7090
14
        },
7091
14
        { &hf_bthci_cmd_connection_handle,
7092
14
          { "Connection Handle",             "bthci_cmd.connection_handle",
7093
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
7094
14
            NULL, HFILL }
7095
14
        },
7096
14
        { &hf_bthci_cmd_reason,
7097
14
          { "Reason",           "bthci_cmd.reason",
7098
14
            FT_UINT8, BASE_HEX|BASE_EXT_STRING, &bthci_cmd_status_vals_ext, 0x0,
7099
14
            NULL, HFILL }
7100
14
        },
7101
14
        { &hf_bthci_cmd_num_link_keys,
7102
14
          { "Number of Link Keys", "bthci_cmd.num_link_keys",
7103
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
7104
14
            NULL, HFILL }
7105
14
        },
7106
14
        { &hf_bthci_cmd_link_key,
7107
14
          { "Link Key",        "bthci_cmd.link_key",
7108
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
7109
14
            "Link Key for the associated BD_ADDR", HFILL }
7110
14
        },
7111
14
        { &hf_bthci_cmd_packet_type_hv1,
7112
14
          { "Packet Type HV1",        "bthci_cmd.packet_type_hv1",
7113
14
            FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0020,
7114
14
            NULL, HFILL }
7115
14
        },
7116
14
        { &hf_bthci_cmd_packet_type_hv2,
7117
14
          { "Packet Type HV2",        "bthci_cmd.packet_type_hv2",
7118
14
            FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0040,
7119
14
            NULL, HFILL }
7120
14
        },
7121
14
        { &hf_bthci_cmd_packet_type_hv3,
7122
14
          { "Packet Type HV3",        "bthci_cmd.packet_type_hv3",
7123
14
            FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0080,
7124
14
            NULL, HFILL }
7125
14
        },
7126
14
        { &hf_bthci_cmd_role,
7127
14
          { "Role",        "bthci_cmd.role",
7128
14
            FT_UINT8, BASE_HEX, VALS(cmd_role_vals), 0x0,
7129
14
            NULL, HFILL }
7130
14
        },
7131
14
        { &hf_bthci_cmd_acr_role,
7132
14
          { "Role",        "bthci_cmd.acr.role",
7133
14
            FT_UINT8, BASE_HEX, VALS(cmd_acr_role_vals), 0x0,
7134
14
            NULL, HFILL }
7135
14
        },
7136
14
        { &hf_bthci_cmd_pin_code_length,
7137
14
          { "PIN Code Length",        "bthci_cmd.pin_code_length",
7138
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
7139
14
            NULL, HFILL }
7140
14
        },
7141
14
        { &hf_bthci_cmd_pin_code,
7142
14
          { "PIN Code",        "bthci_cmd.pin_code",
7143
14
            FT_STRING, BASE_NONE, NULL, 0x0,
7144
14
            NULL, HFILL }
7145
14
        },
7146
14
        { &hf_bthci_cmd_pin_type,
7147
14
          { "PIN Type", "bthci_cmd.pin_type",
7148
14
            FT_UINT8, BASE_HEX, VALS(cmd_pin_types), 0x0,
7149
14
            "PIN Types", HFILL }
7150
14
        },
7151
14
        { &hf_bthci_cmd_encryption_enable,
7152
14
          { "Encryption Enable",        "bthci_cmd.encryption_enable",
7153
14
            FT_UINT8, BASE_HEX, VALS(cmd_encryption_enable), 0x0,
7154
14
            NULL, HFILL }
7155
14
        },
7156
14
        { &hf_bthci_cmd_key_flag,
7157
14
          { "Key Flag",        "bthci_cmd.key_flag",
7158
14
            FT_UINT8, BASE_HEX, VALS(cmd_key_flag), 0x0,
7159
14
            NULL, HFILL }
7160
14
        },
7161
14
        { &hf_bthci_cmd_max_interval_hold,
7162
14
          { "Hold Mode Max Interval",        "bthci_cmd.hold_mode_max_int",
7163
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7164
14
            "Maximal acceptable number of Baseband slots to wait in Hold Mode.", HFILL }
7165
14
        },
7166
14
        { &hf_bthci_cmd_min_interval_hold,
7167
14
          { "Hold Mode Min Interval",        "bthci_cmd.hold_mode_min_int",
7168
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7169
14
            "Minimum acceptable number of Baseband slots to wait in Hold Mode.", HFILL }
7170
14
        },
7171
14
        { &hf_bthci_cmd_max_interval_sniff,
7172
14
          { "Sniff Max Interval",        "bthci_cmd.sniff_max_int",
7173
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7174
14
            "Maximal acceptable number of Baseband slots between each sniff period.", HFILL }
7175
14
        },
7176
14
        { &hf_bthci_cmd_min_interval_sniff,
7177
14
          { "Sniff Min Interval",        "bthci_cmd.sniff_min_int",
7178
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7179
14
            "Minimum acceptable number of Baseband slots between each sniff period.", HFILL }
7180
14
        },
7181
14
        { &hf_bthci_cmd_sniff_attempt,
7182
14
          { "Sniff Attempt",        "bthci_cmd.sniff_attempt",
7183
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
7184
14
            "Number of Baseband receive slots for sniff attempt.", HFILL }
7185
14
        },
7186
14
        { &hf_bthci_cmd_sniff_timeout,
7187
14
          { "Timeout",        "bthci_cmd.sniff_timeout",
7188
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
7189
14
            NULL, HFILL }
7190
14
        },
7191
14
        { &hf_bthci_cmd_timeout,
7192
14
          { "Timeout",        "bthci_cmd.timeout",
7193
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7194
14
            "Number of Baseband slots for timeout.", HFILL }
7195
14
        },
7196
14
        { &hf_bthci_cmd_max_interval_beacon,
7197
14
          { "Beacon Max Interval",        "bthci_cmd.beacon_max_int",
7198
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7199
14
            "Maximal acceptable number of Baseband slots between consecutive beacons.", HFILL }
7200
14
        },
7201
14
        { &hf_bthci_cmd_min_interval_beacon,
7202
14
          { "Beacon Min Interval",        "bthci_cmd.beacon_min_int",
7203
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7204
14
            "Minimum acceptable number of Baseband slots between consecutive beacons.", HFILL }
7205
14
        },
7206
14
        { &hf_bthci_cmd_flags,
7207
14
          { "Flags",        "bthci_cmd.flags",
7208
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
7209
14
            NULL, HFILL }
7210
14
        },
7211
14
        { &hf_bthci_cmd_flow_direction,
7212
14
          { "Flow Direction",        "bthci_cmd.flow_direction",
7213
14
            FT_UINT8, BASE_HEX, VALS(cmd_flow_directions), 0x0,
7214
14
            NULL, HFILL }
7215
14
        },
7216
14
        { &hf_bthci_cmd_service_type,
7217
14
          { "Service Type",        "bthci_cmd.service_type",
7218
14
            FT_UINT8, BASE_HEX, VALS(cmd_service_types), 0x0,
7219
14
            NULL, HFILL }
7220
14
        },
7221
14
        { &hf_bthci_cmd_token_rate,
7222
14
          { "Available Token Rate",        "bthci_cmd.token_rate",
7223
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
7224
14
            "Token Rate, in bytes per second", HFILL }
7225
14
        },
7226
14
        { &hf_bthci_cmd_token_bucket_size,
7227
14
          { "Available Token Bucket Size",        "bthci_cmd.token_bucket_size",
7228
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
7229
14
            "Token Bucket Size in bytes", HFILL }
7230
14
        },
7231
14
        { &hf_bthci_cmd_peak_bandwidth,
7232
14
          { "Peak Bandwidth",        "bthci_cmd.peak_bandwidth",
7233
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
7234
14
            "Peak Bandwidth, in bytes per second", HFILL }
7235
14
        },
7236
14
        { &hf_bthci_cmd_latency,
7237
14
          { "Latency",        "bthci_cmd.latency",
7238
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
7239
14
            "Latency, in microseconds", HFILL }
7240
14
        },
7241
14
        { &hf_bthci_cmd_delay_variation,
7242
14
          { "Delay Variation",        "bthci_cmd.delay_variation",
7243
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
7244
14
            "Delay Variation, in microseconds", HFILL }
7245
14
        },
7246
14
        { &hf_bthci_cmd_link_policy_setting_switch,
7247
14
          { "Enable Role Switch", "bthci_cmd.link_policy_switch",
7248
14
            FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0001,
7249
14
            NULL, HFILL }
7250
14
        },
7251
14
        { &hf_bthci_cmd_link_policy_setting_hold,
7252
14
          { "Enable Hold Mode", "bthci_cmd.link_policy_hold",
7253
14
            FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0002,
7254
14
            NULL, HFILL }
7255
14
        },
7256
14
        { &hf_bthci_cmd_link_policy_setting_sniff,
7257
14
          { "Enable Sniff Mode", "bthci_cmd.link_policy_sniff",
7258
14
            FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0004,
7259
14
            NULL, HFILL }
7260
14
        },
7261
14
        { &hf_bthci_cmd_link_policy_setting_park,
7262
14
          { "Enable Park Mode", "bthci_cmd.link_policy_park",
7263
14
            FT_UINT16, BASE_DEC, VALS(cmd_boolean), 0x0008,
7264
14
            NULL, HFILL }
7265
14
        },
7266
14
        { &hf_bthci_cmd_filter_type,
7267
14
          { "Filter Type", "bthci_cmd.filter_type",
7268
14
            FT_UINT8, BASE_HEX, VALS(cmd_filter_types), 0x0,
7269
14
            NULL, HFILL }
7270
14
        },
7271
14
        { &hf_bthci_cmd_inquiry_result_filter_condition_type,
7272
14
          { "Filter Condition Type", "bthci_cmd.filter_condition_type",
7273
14
            FT_UINT8, BASE_HEX, VALS(cmd_inquiry_result_filter_condition_types), 0x0,
7274
14
            NULL, HFILL }
7275
14
        },
7276
14
        { &hf_bthci_cmd_connection_setup_filter_condition_type,
7277
14
          { "Filter Condition Type", "bthci_cmd.filter_condition_type",
7278
14
            FT_UINT8, BASE_HEX, VALS(cmd_connection_setup_filter_condition_types), 0x0,
7279
14
            NULL, HFILL }
7280
14
        },
7281
14
        { &hf_bthci_cmd_cod_class_of_device_mask,
7282
14
          { "Class of Device Mask", "bthci_cmd.class_of_device_mask",
7283
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
7284
14
            "Bit Mask used to determine which bits of the Class of Device parameter are of interest.", HFILL }
7285
14
        },
7286
14
        { &hf_bthci_cmd_cod_major_device_class_mask,
7287
14
          { "Major Device Class Mask", "bthci_cmd.class_of_device_mask.major_device_class",
7288
14
            FT_UINT16, BASE_HEX, NULL, 0x1F,
7289
14
            NULL, HFILL }
7290
14
        },
7291
14
        { &hf_bthci_cmd_cod_major_service_class_information_mask,
7292
14
          { "Major Service Classes Mask: Information", "bthci_cmd.class_of_device_mask.major_service_classes.information",
7293
14
            FT_BOOLEAN, 16, NULL, 0x8000,
7294
14
            NULL, HFILL }
7295
14
        },
7296
14
        { &hf_bthci_cmd_cod_major_service_class_telephony_mask,
7297
14
          { "Major Service Classes Mask: Telephony", "bthci_cmd.class_of_device_mask.major_service_classes.telephony",
7298
14
            FT_BOOLEAN, 16, NULL, 0x4000,
7299
14
            NULL, HFILL }
7300
14
        },
7301
14
        { &hf_bthci_cmd_cod_major_service_class_audio_mask,
7302
14
          { "Major Service Classes Mask: Audio", "bthci_cmd.class_of_device_mask.major_service_classes.audio",
7303
14
            FT_BOOLEAN, 16, NULL, 0x2000,
7304
14
            NULL, HFILL }
7305
14
        },
7306
14
        { &hf_bthci_cmd_cod_major_service_class_object_transfer_mask,
7307
14
          { "Major Service Classes Mask: Object Transfer", "bthci_cmd.class_of_device_mask.major_service_classes.object_transfer",
7308
14
            FT_BOOLEAN, 16, NULL, 0x1000,
7309
14
            NULL, HFILL }
7310
14
        },
7311
14
        { &hf_bthci_cmd_cod_major_service_class_capturing_mask,
7312
14
          { "Major Service Classes Mask: Capturing", "bthci_cmd.class_of_device_mask.major_service_classes.capturing",
7313
14
            FT_BOOLEAN, 16, NULL, 0x0800,
7314
14
            NULL, HFILL }
7315
14
        },
7316
14
        { &hf_bthci_cmd_cod_major_service_class_rendering_mask,
7317
14
          { "Major Service Classes Mask: Rendering", "bthci_cmd.class_of_device_mask.major_service_classes.rendering",
7318
14
            FT_BOOLEAN, 16, NULL, 0x0400,
7319
14
            NULL, HFILL }
7320
14
        },
7321
14
        { &hf_bthci_cmd_cod_major_service_class_networking_mask,
7322
14
          { "Major Service Classes Mask: Networking", "bthci_cmd.class_of_device_mask.major_service_classes.networking",
7323
14
            FT_BOOLEAN, 16, NULL, 0x0200,
7324
14
            NULL, HFILL }
7325
14
        },
7326
14
        { &hf_bthci_cmd_cod_major_service_class_positioning_mask,
7327
14
          { "Major Service Classes Mask: Positioning", "bthci_cmd.class_of_device_mask.major_service_classes.positioning",
7328
14
            FT_BOOLEAN, 16, NULL, 0x0100,
7329
14
            NULL, HFILL }
7330
14
        },
7331
14
        { &hf_bthci_cmd_cod_major_service_class_reserved_mask,
7332
14
          { "Major Service Classes Mask: Reserved", "bthci_cmd.class_of_device_mask.major_service_classes.reserved",
7333
14
            FT_UINT16, BASE_HEX, NULL, 0x0080,
7334
14
            NULL, HFILL }
7335
14
        },
7336
14
        { &hf_bthci_cmd_cod_major_service_class_le_audio_mask,
7337
14
          { "Major Service Classes Mask: LE Audio", "bthci_cmd.class_of_device_mask.major_service_classes.le_audio",
7338
14
            FT_UINT16, BASE_HEX, NULL, 0x0040,
7339
14
            NULL, HFILL }
7340
14
        },
7341
14
        { &hf_bthci_cmd_cod_major_service_class_limited_discoverable_mode_mask,
7342
14
          { "Major Service Classes Mask: Limited Discoverable Mode", "bthci_cmd.class_of_device_mask.major_service_classes.limited_discoverable_mode",
7343
14
            FT_BOOLEAN, 16, NULL, 0x0020,
7344
14
            NULL, HFILL }
7345
14
        },
7346
14
        { &hf_bthci_cmd_cod_minor_device_class_mask,
7347
14
          { "Minor Device Class Mask", "bthci_cmd.class_of_device_mask.minor_device_class",
7348
14
            FT_UINT8, BASE_HEX, NULL, 0xFC,
7349
14
            NULL, HFILL }
7350
14
        },
7351
14
        { &hf_bthci_cmd_cod_format_type_mask,
7352
14
          { "Format Type Mask", "bthci_cmd.class_of_device_mask.format_type",
7353
14
            FT_UINT8, BASE_HEX, NULL, 0x03,
7354
14
            NULL, HFILL }
7355
14
        },
7356
14
        { &hf_bthci_cmd_auto_acc_flag,
7357
14
          { "Auto Accept Flag", "bthci_cmd.auto_accept_flag",
7358
14
            FT_UINT8, BASE_HEX, VALS(cmd_auto_acc_flag_values), 0x0,
7359
14
            "Class of Device of Interest", HFILL }
7360
14
        },
7361
14
        { &hf_bthci_cmd_read_all_flag,
7362
14
          { "Read All Flag", "bthci_cmd.read_all_flag",
7363
14
            FT_UINT8, BASE_HEX, VALS(cmd_read_all_flag_values), 0x0,
7364
14
            NULL, HFILL }
7365
14
        },
7366
14
        { &hf_bthci_cmd_delete_all_flag,
7367
14
          { "Delete All Flag", "bthci_cmd.delete_all_flag",
7368
14
            FT_UINT8, BASE_HEX, VALS(cmd_delete_all_flag_values), 0x0,
7369
14
            NULL, HFILL }
7370
14
        },
7371
14
        { &hf_bthci_cmd_authentication_enable,
7372
14
          { "Authentication Enable", "bthci_cmd.auth_enable",
7373
14
            FT_UINT8, BASE_HEX, VALS(bthci_cmd_authentication_enable_values), 0x0,
7374
14
            NULL, HFILL }
7375
14
        },
7376
14
        { &hf_bthci_cmd_input_unused,
7377
14
          { "Unused bits", "bthci_cmd.voice.unused",
7378
14
            FT_UINT16, BASE_HEX, NULL, 0xfc00,
7379
14
            NULL, HFILL }
7380
14
        },
7381
14
        { &hf_bthci_cmd_input_coding,
7382
14
          { "Input Coding", "bthci_cmd.voice.input_coding",
7383
14
            FT_UINT16, BASE_DEC, VALS(cmd_input_coding_values), 0x0300,
7384
14
            NULL, HFILL }
7385
14
        },
7386
14
        { &hf_bthci_cmd_input_data_format,
7387
14
          { "Input Data Format", "bthci_cmd.voice.input_data_format",
7388
14
            FT_UINT16, BASE_DEC, VALS(cmd_input_data_format_values), 0x00c0,
7389
14
            NULL, HFILL }
7390
14
        },
7391
14
        { &hf_bthci_cmd_input_sample_size,
7392
14
          { "Input Sample Size", "bthci_cmd.voice.input_sample_size",
7393
14
            FT_UINT16, BASE_DEC, VALS(cmd_input_sample_size_values), 0x0020,
7394
14
            NULL, HFILL }
7395
14
        },
7396
14
        { &hf_bthci_cmd_linear_pcm_bit_pos,
7397
14
          { "Linear PCM Bit Position", "bthci_cmd.voice.linear_pcm_bit_pos",
7398
14
            FT_UINT16, BASE_DEC, NULL, 0x001c,
7399
14
            "# bit pos. that MSB of sample is away from starting at MSB", HFILL }
7400
14
        },
7401
14
        { &hf_bthci_cmd_air_coding_format,
7402
14
          { "Air Coding Format", "bthci_cmd.voice.air_coding_format",
7403
14
            FT_UINT16, BASE_DEC, VALS(cmd_air_coding_format_values), 0x0003,
7404
14
            NULL, HFILL }
7405
14
        },
7406
14
        { &hf_bthci_cmd_num_broadcast_retransmissions,
7407
14
          { "Num Broadcast Retran", "bthci_cmd.num_broad_retran",
7408
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
7409
14
            "Number of Broadcast Retransmissions", HFILL }
7410
14
        },
7411
14
        { &hf_bthci_cmd_hold_mode_act_page,
7412
14
          { "Suspend Page Scan", "bthci_cmd.hold_mode_page",
7413
14
            FT_UINT8, BASE_DEC, VALS(cmd_boolean), 0x1,
7414
14
            "Device can enter low power state", HFILL }
7415
14
        },
7416
14
        { &hf_bthci_cmd_hold_mode_act_inquiry,
7417
14
          { "Suspend Inquiry Scan", "bthci_cmd.hold_mode_inquiry",
7418
14
            FT_UINT8, BASE_DEC, VALS(cmd_boolean), 0x2,
7419
14
            "Device can enter low power state", HFILL }
7420
14
        },
7421
14
        { &hf_bthci_cmd_hold_mode_act_periodic,
7422
14
          { "Suspend Periodic Inquiries", "bthci_cmd.hold_mode_periodic",
7423
14
            FT_UINT8, BASE_DEC, VALS(cmd_boolean), 0x4,
7424
14
            "Device can enter low power state", HFILL }
7425
14
        },
7426
14
        { &hf_bthci_cmd_scan_enable,
7427
14
          { "Scan Enable", "bthci_cmd.scan_enable",
7428
14
            FT_UINT8, BASE_HEX, VALS(bthci_cmd_scan_enable_values), 0x0,
7429
14
            NULL, HFILL }
7430
14
        },
7431
14
        { &hf_bthci_cmd_interval,
7432
14
          { "Interval", "bthci_cmd.interval",
7433
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
7434
14
            NULL, HFILL }
7435
14
        },
7436
14
        { &hf_bthci_cmd_window,
7437
14
          { "Window", "bthci_cmd.window",
7438
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
7439
14
            NULL, HFILL }
7440
14
        },
7441
14
        { &hf_bthci_cmd_device_name,
7442
14
          { "Device Name",           "bthci_cmd.device_name",
7443
14
            FT_STRINGZ, BASE_NONE, NULL, 0x0,
7444
14
            "Userfriendly descriptive name for the device", HFILL }
7445
14
        },
7446
14
        { &hf_bthci_cmd_num_curr_iac,
7447
14
          { "Number of Current IAC", "bthci_cmd.num_curr_iac",
7448
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
7449
14
            "Number of IACs which are currently in use", HFILL }
7450
14
        },
7451
14
        { &hf_bthci_cmd_iac_lap,
7452
14
          { "IAC LAP", "bthci_cmd.num_iac_lap",
7453
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
7454
14
            "LAP(s)used to create IAC", HFILL }
7455
14
        },
7456
14
        { &hf_bthci_cmd_evt_mask_00,
7457
14
          { "Inquiry Complete", "bthci_cmd.evt_mask_00",
7458
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7459
14
            "Inquiry Complete Bit", HFILL }
7460
14
        },
7461
14
        { &hf_bthci_cmd_evt_mask_01,
7462
14
          { "Inquiry Result", "bthci_cmd.evt_mask_01",
7463
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7464
14
            "Inquiry Result Bit", HFILL }
7465
14
        },
7466
14
        { &hf_bthci_cmd_evt_mask_02,
7467
14
          { "Connect Complete", "bthci_cmd.evt_mask_02",
7468
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7469
14
            "Connection Complete Bit", HFILL }
7470
14
        },
7471
14
        { &hf_bthci_cmd_evt_mask_03,
7472
14
          { "Connect Request", "bthci_cmd.evt_mask_03",
7473
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7474
14
            "Connect Request Bit", HFILL }
7475
14
        },
7476
14
        { &hf_bthci_cmd_evt_mask_04,
7477
14
          { "Disconnect Complete", "bthci_cmd.evt_mask_04",
7478
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7479
14
            "Disconnect Complete Bit", HFILL }
7480
14
        },
7481
14
        { &hf_bthci_cmd_evt_mask_05,
7482
14
          { "Auth Complete", "bthci_cmd.evt_mask_05",
7483
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x20,
7484
14
            "Auth Complete Bit", HFILL }
7485
14
        },
7486
14
        { &hf_bthci_cmd_evt_mask_06,
7487
14
          { "Remote Name Req Complete", "bthci_cmd.evt_mask_06",
7488
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x40,
7489
14
            "Remote Name Req Complete Bit", HFILL }
7490
14
        },
7491
14
        { &hf_bthci_cmd_evt_mask_07,
7492
14
          { "Encrypt Change", "bthci_cmd.evt_mask_07",
7493
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7494
14
            "Encrypt Change Bit", HFILL }
7495
14
        },
7496
14
        { &hf_bthci_cmd_evt_mask_10,
7497
14
          { "Change Connection Link Key Complete", "bthci_cmd.evt_mask_10",
7498
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7499
14
            "Change Connection Link Key Complete Bit", HFILL }
7500
14
        },
7501
14
        { &hf_bthci_cmd_evt_mask_11,
7502
14
          { "Link Key Type Changed Complete", "bthci_cmd.evt_mask_11",
7503
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7504
14
            "Link Key Type Changed Complete Bit", HFILL }
7505
14
        },
7506
14
        { &hf_bthci_cmd_evt_mask_12,
7507
14
          { "Read Remote Supported Features", "bthci_cmd.evt_mask_12",
7508
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7509
14
            "Read Remote Supported Features Bit", HFILL }
7510
14
        },
7511
14
        { &hf_bthci_cmd_evt_mask_13,
7512
14
          { "Read Remote Ver Info Complete", "bthci_cmd.evt_mask_13",
7513
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7514
14
            "Read Remote Ver Info Complete Bit", HFILL }
7515
14
        },
7516
14
        { &hf_bthci_cmd_evt_mask_14,
7517
14
          { "QoS Setup Complete", "bthci_cmd.evt_mask_14",
7518
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7519
14
            "QoS Setup Complete Bit", HFILL }
7520
14
        },
7521
14
        { &hf_bthci_cmd_evt_mask_17,
7522
14
          { "Hardware Error", "bthci_cmd.evt_mask_17",
7523
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7524
14
            "Hardware Error Bit", HFILL }
7525
14
        },
7526
14
        { &hf_bthci_cmd_evt_mask_20,
7527
14
          { "Flush Occurred", "bthci_cmd.evt_mask_20",
7528
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7529
14
            "Flush Occurred Bit", HFILL }
7530
14
        },
7531
14
        { &hf_bthci_cmd_evt_mask_21,
7532
14
          { "Role Change", "bthci_cmd.evt_mask_21",
7533
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7534
14
            "Role Change Bit", HFILL }
7535
14
        },
7536
14
        { &hf_bthci_cmd_evt_mask_23,
7537
14
          { "Mode Change", "bthci_cmd.evt_mask_23",
7538
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7539
14
            "Mode Change Bit", HFILL }
7540
14
        },
7541
14
        { &hf_bthci_cmd_evt_mask_24,
7542
14
          { "Return Link Keys", "bthci_cmd.evt_mask_24",
7543
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7544
14
            "Return Link Keys Bit", HFILL }
7545
14
        },
7546
14
        { &hf_bthci_cmd_evt_mask_25,
7547
14
          { "PIN Code Request", "bthci_cmd.evt_mask_25",
7548
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x20,
7549
14
            "PIN Code Request Bit", HFILL }
7550
14
        },
7551
14
        { &hf_bthci_cmd_evt_mask_26,
7552
14
          { "Link Key Request", "bthci_cmd.evt_mask_26",
7553
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x40,
7554
14
            "Link Key Request Bit", HFILL }
7555
14
        },
7556
14
        { &hf_bthci_cmd_evt_mask_27,
7557
14
          { "Link Key Notification", "bthci_cmd.evt_mask_27",
7558
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7559
14
            "Link Key Notification Bit", HFILL }
7560
14
        },
7561
14
        { &hf_bthci_cmd_evt_mask_30,
7562
14
          { "Loopback Command", "bthci_cmd.evt_mask_30",
7563
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7564
14
            "Loopback Command Bit", HFILL }
7565
14
        },
7566
14
        { &hf_bthci_cmd_evt_mask_31,
7567
14
          { "Data Buffer Overflow", "bthci_cmd.evt_mask_31",
7568
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7569
14
            "Data Buffer Overflow Bit", HFILL }
7570
14
        },
7571
14
        { &hf_bthci_cmd_evt_mask_32,
7572
14
          { "Max Slots Change", "bthci_cmd.evt_mask_32",
7573
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7574
14
            "Max Slots Change Bit", HFILL }
7575
14
        },
7576
14
        { &hf_bthci_cmd_evt_mask_33,
7577
14
          { "Read Clock Offset Complete", "bthci_cmd.evt_mask_33",
7578
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7579
14
            "Read Clock Offset Complete Bit", HFILL }
7580
14
        },
7581
14
        { &hf_bthci_cmd_evt_mask_34,
7582
14
          { "Connection Packet Type Changed", "bthci_cmd.evt_mask_34",
7583
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7584
14
            "Connection Packet Type Changed Bit", HFILL }
7585
14
        },
7586
14
        { &hf_bthci_cmd_evt_mask_35,
7587
14
          { "QoS Violation", "bthci_cmd.evt_mask_35",
7588
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x20,
7589
14
            "QoS Violation Bit", HFILL }
7590
14
        },
7591
14
        { &hf_bthci_cmd_evt_mask_36,
7592
14
          { "Page Scan Mode Change", "bthci_cmd.evt_mask_36",
7593
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x40,
7594
14
            "Page Scan Mode Change Bit", HFILL }
7595
14
        },
7596
14
        { &hf_bthci_cmd_evt_mask_37,
7597
14
          { "Page Scan Repetition Mode Change", "bthci_cmd.evt_mask_37",
7598
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7599
14
            "Page Scan Repetition Mode Change Bit", HFILL }
7600
14
        },
7601
14
        { &hf_bthci_cmd_evt_mask_40,
7602
14
          { "Flow Specification Complete", "bthci_cmd.evt_mask_40",
7603
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7604
14
            "Flow Specification Complete Bit", HFILL }
7605
14
        },
7606
14
        { &hf_bthci_cmd_evt_mask_41,
7607
14
          { "Inquiry Result With RSSI", "bthci_cmd.evt_mask_41",
7608
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7609
14
            "Inquiry Result With RSSI Bit", HFILL }
7610
14
        },
7611
14
        { &hf_bthci_cmd_evt_mask_42,
7612
14
          { "Read Remote Ext. Features Complete", "bthci_cmd.evt_mask_42",
7613
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7614
14
            "Read Remote Ext. Features Complete Bit", HFILL }
7615
14
        },
7616
14
        { &hf_bthci_cmd_evt_mask_53,
7617
14
          { "Synchronous Connection Complete", "bthci_cmd.evt_mask_53",
7618
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7619
14
            "Synchronous Connection Complete Bit", HFILL }
7620
14
        },
7621
14
        { &hf_bthci_cmd_evt_mask_54,
7622
14
          { "Synchronous Connection Changed", "bthci_cmd.evt_mask_54",
7623
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7624
14
            "Synchronous Connection Changed Bit", HFILL }
7625
14
        },
7626
14
        { &hf_bthci_cmd_evt_mask_55,
7627
14
          { "Sniff Subrate", "bthci_cmd.evt_mask_55",
7628
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x20,
7629
14
            "Sniff Subrate Bit", HFILL }
7630
14
        },
7631
14
        { &hf_bthci_cmd_evt_mask_56,
7632
14
          { "Extended Inquiry Result", "bthci_cmd.evt_mask_56",
7633
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x40,
7634
14
            "Extended Inquiry Result Bit", HFILL }
7635
14
        },
7636
14
        { &hf_bthci_cmd_evt_mask_57,
7637
14
          { "Encryption Key Refresh Complete", "bthci_cmd.evt_mask_57",
7638
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7639
14
            "Encryption Key Refresh Complete Bit", HFILL }
7640
14
        },
7641
14
        { &hf_bthci_cmd_evt_mask_60,
7642
14
          { "IO Capability Request", "bthci_cmd.evt_mask_60",
7643
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7644
14
            "IO Capability Request Bit", HFILL }
7645
14
        },
7646
14
        { &hf_bthci_cmd_evt_mask_61,
7647
14
          { "IO Capability Response", "bthci_cmd.evt_mask_61",
7648
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
7649
14
            "IO Capability Response Bit", HFILL }
7650
14
        },
7651
14
        { &hf_bthci_cmd_evt_mask_62,
7652
14
          { "User Confirmation Request", "bthci_cmd.evt_mask_62",
7653
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7654
14
            "User Confirmation Request Bit", HFILL }
7655
14
        },
7656
14
        { &hf_bthci_cmd_evt_mask_63,
7657
14
          { "User Passkey Request", "bthci_cmd.evt_mask_63",
7658
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7659
14
            "User Passkey Request Bit", HFILL }
7660
14
        },
7661
14
        { &hf_bthci_cmd_evt_mask_64,
7662
14
          { "Remote OOB Data Request", "bthci_cmd.evt_mask_64",
7663
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
7664
14
            "Remote OOB Data Request Bit", HFILL }
7665
14
        },
7666
14
        { &hf_bthci_cmd_evt_mask_65,
7667
14
          { "Simple Pairing Complete", "bthci_cmd.evt_mask_65",
7668
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x20,
7669
14
            "Simple Pairing Complete Bit", HFILL }
7670
14
        },
7671
14
        { &hf_bthci_cmd_evt_mask_67,
7672
14
          { "Link Supervision Timeout Changed", "bthci_cmd.evt_mask_67",
7673
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x80,
7674
14
            "Link Supervision Timeout Changed Bit", HFILL }
7675
14
        },
7676
14
        { &hf_bthci_cmd_evt_mask_70,
7677
14
          { "Enhanced Flush Complete", "bthci_cmd.evt_mask_70",
7678
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
7679
14
            "Enhanced Flush Complete Bit", HFILL }
7680
14
        },
7681
14
        { &hf_bthci_cmd_evt_mask_72,
7682
14
          { "User Passkey Notification", "bthci_cmd.evt_mask_72",
7683
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
7684
14
            "User Passkey Notification Bit", HFILL }
7685
14
        },
7686
14
        { &hf_bthci_cmd_evt_mask_73,
7687
14
          { "Keypress Notification", "bthci_cmd.evt_mask_73",
7688
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
7689
14
            "Keypress Notification Bit", HFILL }
7690
14
        },
7691
14
        { &hf_bthci_cmd_sco_flow_control,
7692
14
          { "SCO Flow Control","bthci_cmd.flow_control",
7693
14
            FT_UINT8, BASE_HEX, VALS(cmd_en_disabled), 0x0,
7694
14
            NULL, HFILL }
7695
14
        },
7696
14
        { &hf_bthci_cmd_num_handles,
7697
14
          { "Number of Connection Handles", "bthci_cmd.num_handles",
7698
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
7699
14
            NULL, HFILL }
7700
14
        },
7701
7702
14
        { &hf_bthci_cmd_num_compl_packets,
7703
14
          { "Number of Completed Packets", "bthci_cmd.num_compl_packets",
7704
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
7705
14
            "Number of Completed HCI Data Packets", HFILL }
7706
14
        },
7707
14
        { &hf_bthci_cmd_flow_contr_enable,
7708
14
          { "Flow Control Enable", "bthci_cmd.flow_contr_enable",
7709
14
            FT_UINT8, BASE_HEX, VALS(cmd_flow_contr_enable), 0x0,
7710
14
            NULL, HFILL }
7711
14
        },
7712
14
        { &hf_bthci_cmd_host_data_packet_length_acl,
7713
14
          {"Host ACL Data Packet Length (bytes)", "bthci_cmd.max_data_length_acl",
7714
14
           FT_UINT16, BASE_DEC, NULL, 0x0,
7715
14
           "Max Host ACL Data Packet length of data portion host is able to accept", HFILL }
7716
14
        },
7717
14
        { &hf_bthci_cmd_host_data_packet_length_sco,
7718
14
          {"Host SCO Data Packet Length (bytes)", "bthci_cmd.max_data_length_sco",
7719
14
           FT_UINT8, BASE_DEC, NULL, 0x0,
7720
14
           "Max Host SCO Data Packet length of data portion host is able to accept", HFILL }
7721
14
        },
7722
14
        { &hf_bthci_cmd_host_total_num_acl_data_packets,
7723
14
          {"Host Total Num ACL Data Packets", "bthci_cmd.max_data_num_acl",
7724
14
           FT_UINT16, BASE_DEC, NULL, 0x0,
7725
14
           "Total Number of HCI ACL Data Packets that can be stored in the data buffers of the Host", HFILL }
7726
14
        },
7727
14
        { &hf_bthci_cmd_host_total_num_sco_data_packets,
7728
14
          {"Host Total Num SCO Data Packets", "bthci_cmd.max_data_num_sco",
7729
14
           FT_UINT16, BASE_DEC, NULL, 0x0,
7730
14
           "Total Number of HCI SCO Data Packets that can be stored in the data buffers of the Host", HFILL }
7731
14
        },
7732
14
        { &hf_bthci_cmd_loopback_mode,
7733
14
          {"Loopback Mode", "bthci_cmd.loopback_mode",
7734
14
           FT_UINT8, BASE_HEX, VALS(cmd_loopback_modes), 0x0,
7735
14
           NULL, HFILL}
7736
14
        },
7737
14
        { &hf_bthci_cmd_page_number,
7738
14
          {"Page Number", "bthci_cmd.page_number",
7739
14
           FT_UINT8, BASE_DEC, NULL, 0x0,
7740
14
           NULL, HFILL}
7741
14
        },
7742
14
        { &hf_bthci_cmd_transmit_bandwidth,
7743
14
          {"Tx Bandwidth (bytes/s)", "bthci_cmd.tx_bandwidth",
7744
14
           FT_UINT32, BASE_DEC, NULL, 0x0,
7745
14
           NULL, HFILL}
7746
14
        },
7747
14
        { &hf_bthci_cmd_receive_bandwidth,
7748
14
          {"Rx Bandwidth (bytes/s)", "bthci_cmd.rx_bandwidth",
7749
14
           FT_UINT32, BASE_DEC, NULL, 0x0,
7750
14
           NULL, HFILL}
7751
14
        },
7752
14
        { &hf_bthci_cmd_max_latency_ms,
7753
14
          {"Max. Latency (ms)", "bthci_cmd.max_latency_ms",
7754
14
           FT_UINT16, BASE_DEC, NULL, 0x0,
7755
14
           NULL, HFILL}
7756
14
        },
7757
14
        { &hf_bthci_cmd_max_latency,
7758
14
          {"Max. Latency", "bthci_cmd.max_latency",
7759
14
           FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7760
14
           "Max. Latency in baseband slots", HFILL}
7761
14
        },
7762
14
        { &hf_bthci_cmd_retransmission_effort,
7763
14
          {"Retransmission Effort", "bthci_cmd.retransmission_effort",
7764
14
           FT_UINT8, BASE_DEC, VALS(cmd_rtx_effort), 0x0,
7765
14
           NULL, HFILL}
7766
14
        },
7767
14
        { &hf_bthci_cmd_scan_type,
7768
14
          {"Scan Type", "bthci_cmd.inq_scan_type",
7769
14
           FT_UINT8, BASE_DEC, VALS(cmd_scan_types), 0x0,
7770
14
           NULL, HFILL}
7771
14
        },
7772
14
        { &hf_bthci_cmd_inq_mode,
7773
14
          {"Inquiry Mode", "bthci_cmd.inq_mode",
7774
14
           FT_UINT8, BASE_DEC, VALS(bthci_cmd_inq_modes), 0x0,
7775
14
           NULL, HFILL}
7776
14
        },
7777
14
        { &hf_bthci_cmd_fec_required,
7778
14
          {"FEC Required", "bthci_cmd.fec_required",
7779
14
           FT_UINT8, BASE_DEC, VALS(cmd_boolean), 0x0,
7780
14
           NULL, HFILL}
7781
14
        },
7782
14
        { &hf_bthci_cmd_err_data_reporting,
7783
14
          {"Erroneous Data Reporting", "bthci_cmd.err_data_reporting",
7784
14
           FT_UINT8, BASE_DEC, VALS(cmd_en_disabled), 0x0,
7785
14
           NULL, HFILL}
7786
14
        },
7787
14
        { &hf_bthci_cmd_tx_power,
7788
14
          {"Power Level (dBm)", "bthci_cmd.power_level",
7789
14
           FT_INT8, BASE_DEC, NULL, 0x0,
7790
14
           NULL, HFILL}
7791
14
        },
7792
14
        { &hf_bthci_cmd_sco_packet_type,
7793
14
          { "Packet Type", "bthci_cmd.sco_packet_type",
7794
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
7795
14
            NULL, HFILL }
7796
14
        },
7797
14
        { &hf_bthci_cmd_sco_packet_type_hv1,
7798
14
          { "HV1 may be used",        "bthci_cmd.sco_packet_type.hv1",
7799
14
            FT_BOOLEAN, 16, NULL, 0x0001,
7800
14
            NULL, HFILL }
7801
14
        },
7802
14
        { &hf_bthci_cmd_sco_packet_type_hv2,
7803
14
          { "HV2 may be used",        "bthci_cmd.sco_packet_type.hv2",
7804
14
            FT_BOOLEAN, 16, NULL, 0x0002,
7805
14
            NULL, HFILL }
7806
14
        },
7807
14
        { &hf_bthci_cmd_sco_packet_type_hv3,
7808
14
          { "HV3 may be used",        "bthci_cmd.sco_packet_type.hv3",
7809
14
            FT_BOOLEAN, 16, NULL, 0x0004,
7810
14
            NULL, HFILL }
7811
14
        },
7812
14
        { &hf_bthci_cmd_sco_packet_type_ev3,
7813
14
          { "EV3 may be used",        "bthci_cmd.sco_packet_type.ev3",
7814
14
            FT_BOOLEAN, 16, NULL, 0x0008,
7815
14
            NULL, HFILL }
7816
14
        },
7817
14
        { &hf_bthci_cmd_sco_packet_type_ev4,
7818
14
          { "EV4 may be used",        "bthci_cmd.sco_packet_type.ev4",
7819
14
            FT_BOOLEAN, 16, NULL, 0x0010,
7820
14
            NULL, HFILL }
7821
14
        },
7822
14
        { &hf_bthci_cmd_sco_packet_type_ev5,
7823
14
          { "EV5 may be used",        "bthci_cmd.sco_packet_type.ev5",
7824
14
            FT_BOOLEAN, 16, NULL, 0x0020,
7825
14
            NULL, HFILL }
7826
14
        },
7827
14
        { &hf_bthci_cmd_sco_packet_type_2ev3,
7828
14
          { "2-EV3 may NOT be used",        "bthci_cmd.sco_packet_type.2ev3",
7829
14
            FT_BOOLEAN, 16, NULL, 0x0040,
7830
14
            NULL, HFILL }
7831
14
        },
7832
14
        { &hf_bthci_cmd_sco_packet_type_3ev3,
7833
14
          { "3-EV3 may NOT be used",        "bthci_cmd.sco_packet_type.3ev3",
7834
14
            FT_BOOLEAN, 16, NULL, 0x0080,
7835
14
            NULL, HFILL }
7836
14
        },
7837
14
        { &hf_bthci_cmd_sco_packet_type_2ev5,
7838
14
          { "2-EV5 may NOT be used",        "bthci_cmd.sco_packet_type.2ev5",
7839
14
            FT_BOOLEAN, 16, NULL, 0x0100,
7840
14
            NULL, HFILL }
7841
14
        },
7842
14
        { &hf_bthci_cmd_sco_packet_type_3ev5,
7843
14
          { "3-EV5 may NOT be used",        "bthci_cmd.sco_packet_type.3ev5",
7844
14
            FT_BOOLEAN, 16, NULL, 0x0200,
7845
14
            NULL, HFILL }
7846
14
        },
7847
14
        { &hf_bthci_cmd_sco_packet_type_reserved,
7848
14
          { "Reserved",        "bthci_cmd.sco_packet_type.reserved",
7849
14
            FT_UINT16, BASE_HEX, NULL, 0xFC00,
7850
14
            NULL, HFILL }
7851
14
        },
7852
14
        { &hf_bthci_cmd_min_remote_timeout,
7853
14
          {"Min. Remote Timeout", "bthci_cmd.min_remote_timeout",
7854
14
           FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7855
14
           "Min. Remote Timeout in baseband slots", HFILL}
7856
14
        },
7857
14
        { &hf_bthci_cmd_min_local_timeout,
7858
14
          {"Min. Local Timeout", "bthci_cmd.min_local_timeout",
7859
14
           FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
7860
14
           "Min. Local Timeout in baseband slots", HFILL}
7861
14
        },
7862
14
        { &hf_bthci_cmd_flush_packet_type,
7863
14
          {"Packet Type", "bthci_cmd.flush_packet_type",
7864
14
           FT_UINT8, BASE_DEC, VALS(cmd_flush_pkt_type), 0x0,
7865
14
           NULL, HFILL}
7866
14
        },
7867
14
        { &hf_bthci_cmd_afh_ch_assessment_mode,
7868
14
          {"AFH Channel Assessment Mode", "bthci_cmd.afh_ch_assessment_mode",
7869
14
           FT_UINT8, BASE_DEC, VALS(cmd_en_disabled), 0x0,
7870
14
           NULL, HFILL}
7871
14
        },
7872
14
        { &hf_bthci_cmd_ch_classification,
7873
14
          { "Channel Classification",           "bthci_cmd.ch_classification",
7874
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
7875
14
            NULL, HFILL }
7876
14
        },
7877
14
        { &hf_bthci_cmd_which_clock,
7878
14
          {"Which Clock", "bthci_cmd.which_clock",
7879
14
           FT_UINT8, BASE_DEC, VALS(cmd_which_clock), 0x0,
7880
14
           NULL, HFILL}
7881
14
        },
7882
14
        { &hf_bthci_cmd_io_capability,
7883
14
          {"IO Capability", "bthci_cmd.io_capability",
7884
14
           FT_UINT8, BASE_DEC, VALS(bthci_cmd_io_capability_vals), 0x0,
7885
14
           NULL, HFILL}
7886
14
        },
7887
14
        { &hf_bthci_cmd_oob_data_present,
7888
14
          {"OOB Data Present", "bthci_cmd.oob_data_present",
7889
14
           FT_UINT8, BASE_DEC, VALS(bthci_cmd_oob_data_present_vals), 0x0,
7890
14
           NULL, HFILL}
7891
14
        },
7892
14
        { &hf_bthci_cmd_auth_requirements,
7893
14
          {"Authentication Requirements", "bthci_cmd.auth_requirements",
7894
14
           FT_UINT8, BASE_DEC|BASE_EXT_STRING, &bthci_cmd_auth_req_vals_ext, 0x0,
7895
14
           NULL, HFILL}
7896
14
        },
7897
14
        { &hf_bthci_cmd_passkey,
7898
14
          {"Passkey", "bthci_cmd.passkey",
7899
14
           FT_UINT32, BASE_DEC, NULL, 0x0,
7900
14
           NULL, HFILL}
7901
14
        },
7902
14
        { &hf_bthci_cmd_hash_c,
7903
14
          {"Hash C", "bthci_cmd.hash_c",
7904
14
           FT_BYTES, BASE_NONE, NULL, 0x0,
7905
14
           NULL, HFILL}
7906
14
        },
7907
14
        { &hf_bthci_cmd_randomizer_r,
7908
14
          {"Randomizer R", "bthci_cmd.randomizer_r",
7909
14
           FT_BYTES, BASE_NONE, NULL, 0x0,
7910
14
           NULL, HFILL}
7911
14
        },
7912
14
        { &hf_bthci_cmd_simple_pairing_mode,
7913
14
          {"Simple Pairing Mode", "bthci_cmd.simple_pairing_mode",
7914
14
           FT_UINT8, BASE_DEC, VALS(cmd_en_disabled), 0x0,
7915
14
           NULL, HFILL}
7916
14
        },
7917
14
        { &hf_bthci_cmd_simple_pairing_debug_mode,
7918
14
          {"Simple Pairing Debug Mode", "bthci_cmd.simple_pairing_debug_mode",
7919
14
           FT_UINT8, BASE_DEC, VALS(cmd_en_disabled), 0x0,
7920
14
           NULL, HFILL}
7921
14
        },
7922
14
        { &hf_bthci_cmd_notification_type,
7923
14
          {"Notification Type", "bthci_cmd.notification_type",
7924
14
           FT_UINT8, BASE_DEC, VALS(bthci_cmd_notification_types), 0x0,
7925
14
           NULL, HFILL}
7926
14
        },
7927
14
        { &hf_bthci_cmd_physical_link_handle,
7928
14
          {"Physical Link Handle", "bthci_cmd.physical_link_handle",
7929
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
7930
14
            NULL, HFILL}
7931
14
        },
7932
14
        { &hf_bthci_cmd_dedicated_amp_key_length,
7933
14
          {"Dedicated AMP Key Length", "bthci_cmd.dedicated_amp_key_length",
7934
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
7935
14
            NULL, HFILL}
7936
14
        },
7937
14
        { &hf_bthci_cmd_dedicated_amp_key_type,
7938
14
          {"Dedicated AMP Key Type", "bthci_cmd.dedicated_amp_key_type",
7939
14
            FT_UINT8, BASE_DEC, VALS(bthci_cmd_amp_key_type), 0x0,
7940
14
            NULL, HFILL}
7941
14
        },
7942
14
        { &hf_bthci_cmd_dedicated_amp_key,
7943
14
          {"Dedicated AMP Key Type", "bthci_cmd.dedicated_amp_key",
7944
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
7945
14
            NULL, HFILL}
7946
14
        },
7947
14
        { &hf_bthci_cmd_flow_spec,
7948
14
          { "Flow Spec", "bthci_cmd.flow_spec",
7949
14
            FT_NONE, BASE_NONE, NULL, 0x0,
7950
14
            NULL, HFILL }
7951
14
        },
7952
14
        { &hf_bthci_cmd_flow_spec_sdu_size,
7953
14
          { "Maximum SDU Size", "bthci_cmd.sdu_size",
7954
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
7955
14
            NULL, HFILL }
7956
14
        },
7957
14
        { &hf_bthci_cmd_flow_spec_sdu_arrival_time,
7958
14
          { "SDU Inter-arrival Time (us)", "bthci_cmd.sdu_arrival_time",
7959
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
7960
14
            NULL, HFILL }
7961
14
        },
7962
14
        { &hf_bthci_cmd_flow_spec_identifier,
7963
14
          { "Identifier", "bthci_cmd.ident",
7964
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
7965
14
            NULL, HFILL }
7966
14
        },
7967
14
        { &hf_bthci_cmd_flow_spec_access_latency,
7968
14
          { "Access Latency (us)", "bthci_cmd.access_latency",
7969
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
7970
14
            NULL, HFILL }
7971
14
        },
7972
14
        { &hf_bthci_cmd_flow_spec_service_type,
7973
14
          { "Service Type", "bthci_cmd.servicetype",
7974
14
            FT_UINT8, BASE_HEX, VALS(cmd_flow_spec_servicetype), 0x0,
7975
14
            "Level of service required", HFILL }
7976
14
        },
7977
14
        { &hf_bthci_cmd_flush_to_us,
7978
14
          { "Flush Timeout (us)", "bthci_cmd.flushto",
7979
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
7980
14
            NULL, HFILL }
7981
14
        },
7982
14
        { &hf_bthci_cmd_logical_link_handle,
7983
14
          { "Logical Link Handle", "bthci_cmd.logical_link_handle",
7984
14
            FT_UINT16, BASE_HEX, NULL, 0x0FFF,
7985
14
            NULL, HFILL }
7986
14
        },
7987
7988
14
        { &hf_bthci_cmd_evt_mask2,
7989
14
          { "Event Mask Page 2", "bthci_cmd.evt_mask2",
7990
14
            FT_UINT64, BASE_HEX, NULL, 0x0,
7991
14
            NULL, HFILL }
7992
14
        },
7993
14
        { &hf_bthci_cmd_evt_mask2_00,
7994
14
          { "Physical Link Complete", "bthci_cmd.evt_mask2_00",
7995
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x01),
7996
14
            NULL, HFILL }
7997
14
        },
7998
14
        { &hf_bthci_cmd_evt_mask2_01,
7999
14
          { "Channel Selected", "bthci_cmd.evt_mask2_01",
8000
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x02),
8001
14
            NULL, HFILL }
8002
14
        },
8003
14
        { &hf_bthci_cmd_evt_mask2_02,
8004
14
          { "Disconnection Physical Link", "bthci_cmd.evt_mask2_02",
8005
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x04),
8006
14
            NULL, HFILL }
8007
14
        },
8008
14
        { &hf_bthci_cmd_evt_mask2_03,
8009
14
         { "Physical Link Loss Early Warning", "bthci_cmd.evt_mask2_03",
8010
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x08),
8011
14
            NULL, HFILL }
8012
14
        },
8013
14
        { &hf_bthci_cmd_evt_mask2_04,
8014
14
          { "Physical Link Recovery", "bthci_cmd.evt_mask2_04",
8015
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x10),
8016
14
            NULL, HFILL }
8017
14
        },
8018
14
        { &hf_bthci_cmd_evt_mask2_05,
8019
14
          { "Logical Link Complete", "bthci_cmd.evt_mask2_05",
8020
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x20),
8021
14
            NULL, HFILL }
8022
14
        },
8023
14
        { &hf_bthci_cmd_evt_mask2_06,
8024
14
          { "Disconnection Logical Link Complete", "bthci_cmd.evt_mask2_06",
8025
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x40),
8026
14
            NULL, HFILL }
8027
14
        },
8028
14
        { &hf_bthci_cmd_evt_mask2_07,
8029
14
          { "Flow Spec Modify Complete", "bthci_cmd.evt_mask2_07",
8030
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x80),
8031
14
            NULL, HFILL }
8032
14
        },
8033
14
        { &hf_bthci_cmd_evt_mask2_08,
8034
14
          { "Number Of Completed Data Blocks", "bthci_cmd.evt_mask2_8",
8035
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x100),
8036
14
            NULL, HFILL }
8037
14
        },
8038
14
        { &hf_bthci_cmd_evt_mask2_09,
8039
14
          { "AMP Start Test", "bthci_cmd.evt_mask2_9",
8040
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x200),
8041
14
            NULL, HFILL }
8042
14
        },
8043
14
        { &hf_bthci_cmd_evt_mask2_10,
8044
14
          { "AMP Test End", "bthci_cmd.evt_mask2_10",
8045
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x400),
8046
14
            NULL, HFILL }
8047
14
        },
8048
14
        { &hf_bthci_cmd_evt_mask2_11,
8049
14
          { "AMP Receiver Report", "bthci_cmd.evt_mask2_11",
8050
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x800),
8051
14
            NULL, HFILL }
8052
14
        },
8053
14
        { &hf_bthci_cmd_evt_mask2_12,
8054
14
          { "Short Range Mode Change Complete", "bthci_cmd.evt_mask2_12",
8055
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x1000),
8056
14
            NULL, HFILL }
8057
14
        },
8058
14
        { &hf_bthci_cmd_evt_mask2_13,
8059
14
          { "AMP Status Change", "bthci_cmd.evt_mask2_13",
8060
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x2000),
8061
14
            NULL, HFILL }
8062
14
        },
8063
14
        { &hf_bthci_cmd_evt_mask2_14,
8064
14
          { "Triggered Clock Capture", "bthci_cmd.evt_mask2_14",
8065
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x4000),
8066
14
            NULL, HFILL }
8067
14
        },
8068
14
        { &hf_bthci_cmd_evt_mask2_15,
8069
14
          { "Synchronization Train Complete", "bthci_cmd.evt_mask2_15",
8070
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x8000),
8071
14
            NULL, HFILL }
8072
14
        },
8073
14
        { &hf_bthci_cmd_evt_mask2_16,
8074
14
          { "Synchronization Train Received", "bthci_cmd.evt_mask2_16",
8075
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x10000),
8076
14
            NULL, HFILL }
8077
14
        },
8078
14
        { &hf_bthci_cmd_evt_mask2_17,
8079
14
          { "Connectionless Peripheral Broadcast Receive", "bthci_cmd.evt_mask2_17",
8080
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x20000),
8081
14
            NULL, HFILL }
8082
14
        },
8083
14
        { &hf_bthci_cmd_evt_mask2_18,
8084
14
          { "Connectionless Peripheral Broadcast Timeout", "bthci_cmd.evt_mask2_18",
8085
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x40000),
8086
14
            NULL, HFILL }
8087
14
        },
8088
14
        { &hf_bthci_cmd_evt_mask2_19,
8089
14
          { "Truncated Page Complete", "bthci_cmd.evt_mask2_19",
8090
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x80000),
8091
14
            NULL, HFILL }
8092
14
        },
8093
14
        { &hf_bthci_cmd_evt_mask2_20,
8094
14
          { "Peripheral Page Response Timeout", "bthci_cmd.evt_mask2_20",
8095
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x100000),
8096
14
            NULL, HFILL }
8097
14
        },
8098
14
        { &hf_bthci_cmd_evt_mask2_21,
8099
14
          { "Connectionless Peripheral Broadcast Channel Map Change", "bthci_cmd.evt_mask2_21",
8100
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x200000),
8101
14
            NULL, HFILL }
8102
14
        },
8103
14
        { &hf_bthci_cmd_evt_mask2_22,
8104
14
          { "Inquiry Response Notification", "bthci_cmd.evt_mask2_22",
8105
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x400000),
8106
14
            NULL, HFILL }
8107
14
        },
8108
14
        { &hf_bthci_cmd_evt_mask2_23,
8109
14
          { "Authenticated Payload Timeout Expired", "bthci_cmd.evt_mask2_23",
8110
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x800000),
8111
14
            NULL, HFILL }
8112
14
        },
8113
14
        { &hf_bthci_cmd_evt_mask2_24,
8114
14
          { "SAM Status Change", "bthci_cmd.evt_mask2_24",
8115
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x1000000),
8116
14
            NULL, HFILL }
8117
14
        },
8118
14
        { &hf_bthci_cmd_evt_mask2_25,
8119
14
          { "Encryption Change [v2]", "bthci_cmd.evt_mask2_25",
8120
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x2000000),
8121
14
            NULL, HFILL }
8122
14
        },
8123
14
        { &hf_bthci_cmd_evt_mask2_reserved,
8124
14
          { "Reserved", "bthci_cmd.evt_mask2_25_reserved",
8125
14
            FT_UINT64, BASE_HEX, NULL, UINT64_C(0xFFFFFFFFFC000000),
8126
14
            NULL, HFILL }
8127
14
        },
8128
14
        { &hf_bthci_cmd_location_domain_aware,
8129
14
          { "Location Domain Aware", "bthci_cmd.location_domain_aware",
8130
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8131
14
            NULL, HFILL }
8132
14
        },
8133
14
        { &hf_bthci_cmd_location_domain,
8134
14
          { "Location Domain", "bthci_cmd.location_domain",
8135
14
            FT_STRING, BASE_NONE, NULL, 0x0,
8136
14
            "ISO 3166-1 Country Code", HFILL }
8137
14
        },
8138
14
        { &hf_bthci_cmd_location_domain_options,
8139
14
          { "Location Domain Options", "bthci_cmd.location_domain_options",
8140
14
            FT_STRING, BASE_NONE, NULL, 0x0,
8141
14
            NULL, HFILL }
8142
14
        },
8143
14
        { &hf_bthci_cmd_location_options,
8144
14
          { "Location Options", "bthci_cmd.location_options",
8145
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
8146
14
            NULL, HFILL }
8147
14
        },
8148
14
        { &hf_bthci_cmd_flow_control_mode,
8149
14
          { "Flow Control Mode", "bthci_cmd.flow_control_mode",
8150
14
            FT_UINT8, BASE_HEX, VALS(cmd_flow_ctrl_mode), 0x0,
8151
14
            NULL, HFILL }
8152
14
        },
8153
14
        { &hf_bthci_cmd_tx_power_level_type,
8154
14
          { "Tx Power Level Type", "bthci_cmd.tx_power_level_type",
8155
14
            FT_UINT8, BASE_HEX, VALS(cmd_power_level_types), 0x0,
8156
14
            NULL, HFILL }
8157
14
        },
8158
14
        { &hf_bthci_cmd_short_range_mode,
8159
14
          { "Short Range Mode", "bthci_cmd.short_range_mode",
8160
14
            FT_UINT8, BASE_HEX, VALS(cmd_en_disabled), 0x0,
8161
14
            NULL, HFILL }
8162
14
        },
8163
14
        { &hf_bthci_cmd_enable_amp_recv_reports,
8164
14
          { "Enable AMP Receiver Reports", "bthci_cmd.enable_amp_recv_reports",
8165
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8166
14
            NULL, HFILL }
8167
14
        },
8168
14
        { &hf_bthci_cmd_amp_recv_report_interval,
8169
14
          { "AMP Receiver Report Interval (s)", "bthci_cmd.amp_recv_report_interval",
8170
14
            FT_UINT8, BASE_DEC, 0x0, 0x0,
8171
14
            NULL, HFILL }
8172
14
        },
8173
14
        { &hf_bthci_cmd_length_so_far,
8174
14
          { "Length So Far", "bthci_cmd.length_so_far",
8175
14
            FT_UINT16, BASE_DEC, 0x0, 0x0,
8176
14
            NULL, HFILL }
8177
14
        },
8178
14
        { &hf_bthci_cmd_amp_assoc_length,
8179
14
          { "AMP Assoc Length", "bthci_cmd.amp_assoc_length",
8180
14
            FT_UINT16, BASE_DEC, 0x0, 0x0,
8181
14
            NULL, HFILL }
8182
14
        },
8183
14
        { &hf_bthci_cmd_amp_remaining_assoc_length,
8184
14
          { "AMP Remaining Assoc Length", "bthci_cmd.amp_remaining_assoc_length",
8185
14
            FT_UINT16, BASE_DEC, 0x0, 0x0,
8186
14
            NULL, HFILL }
8187
14
        },
8188
14
        { &hf_bthci_cmd_amp_assoc_fragment,
8189
14
          { "AMP Assoc Fragment", "bthci_cmd.amp_assoc_fragment",
8190
14
            FT_BYTES, BASE_NONE, 0x0, 0x0,
8191
14
            NULL, HFILL }
8192
14
        },
8193
14
        { &hf_bthci_cmd_le_supported_host,
8194
14
          { "LE Supported Host", "bthci_cmd.le_supported_host",
8195
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8196
14
            NULL, HFILL }
8197
14
        },
8198
14
        { &hf_bthci_cmd_le_simultaneous_host,
8199
14
          { "Simultaneous LE Host", "bthci_cmd.le_simultaneous_host",
8200
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8201
14
            "Support for both LE and BR/EDR to same device", HFILL }
8202
14
        },
8203
14
        { &hf_bthci_cmd_le_event_mask,
8204
14
          { "LE Event Mask",                               "bthci_cmd.le_event_mask",
8205
14
            FT_UINT64, BASE_HEX, NULL, 0x0,
8206
14
            NULL, HFILL }
8207
14
        },
8208
14
        { &hf_bthci_cmd_le_event_mask_le_connection_complete,
8209
14
          { "LE Connection Complete",                      "bthci_cmd.le_event_mask.le_connection_complete",
8210
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x01),
8211
14
            NULL, HFILL }
8212
14
        },
8213
14
        { &hf_bthci_cmd_le_event_mask_le_advertising_report,
8214
14
          { "LE Advertising Report",                       "bthci_cmd.le_event_mask.le_advertising_report",
8215
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x02),
8216
14
            NULL, HFILL }
8217
14
        },
8218
14
        { &hf_bthci_cmd_le_event_mask_le_connection_update_complete,
8219
14
          { "LE Connection Update Complete",               "bthci_cmd.le_event_mask.le_connection_update_complete",
8220
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x04),
8221
14
            NULL, HFILL }
8222
14
        },
8223
14
        { &hf_bthci_cmd_le_event_mask_le_read_remote_features_complete,
8224
14
          { "LE Read Remote Features (Page 0) Complete",       "bthci_cmd.le_event_mask.le_read_remote_features_complete",
8225
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x08),
8226
14
            NULL, HFILL }
8227
14
        },
8228
14
        { &hf_bthci_cmd_le_event_mask_le_long_term_key_request,
8229
14
          { "LE Long Term Key Request",                    "bthci_cmd.le_event_mask.le_long_term_key_request",
8230
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x10),
8231
14
            NULL, HFILL }
8232
14
        },
8233
14
        { &hf_bthci_cmd_le_event_mask_le_remote_connection_parameter_request,
8234
14
          { "LE Remote Connection Parameter Request",      "bthci_cmd.le_event_mask.le_remote_connection_parameter_request",
8235
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x20),
8236
14
            NULL, HFILL }
8237
14
        },
8238
14
        { &hf_bthci_cmd_le_event_mask_le_data_length_change,
8239
14
          { "LE Data Length Change",                       "bthci_cmd.le_event_mask.le_data_length_change",
8240
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x40),
8241
14
            NULL, HFILL }
8242
14
        },
8243
14
        { &hf_bthci_cmd_le_event_mask_le_read_local_p256_public_key_complete,
8244
14
          { "LE Read Local P-256 Public Key Complete",     "bthci_cmd.le_event_mask.le_read_local_p256_public_key_complete",
8245
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x80),
8246
14
            NULL, HFILL }
8247
14
        },
8248
14
        { &hf_bthci_cmd_le_event_mask_le_generate_dhkey_complete,
8249
14
          { "LE Generate DHKey Complete",                  "bthci_cmd.le_event_mask.le_generate_dhkey_complete",
8250
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x100),
8251
14
            NULL, HFILL }
8252
14
        },
8253
14
        { &hf_bthci_cmd_le_event_mask_le_enhanced_connection_complete_v1,
8254
14
          { "LE Enhanced Connection Complete [v1]",             "bthci_cmd.le_event_mask.le_enhanced_connection_complete_v1",
8255
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x200),
8256
14
            NULL, HFILL }
8257
14
        },
8258
14
        { &hf_bthci_cmd_le_event_mask_le_direct_advertising_report,
8259
14
          { "LE Direct Advertising Report",                "bthci_cmd.le_event_mask.le_direct_advertising_report",
8260
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x400),
8261
14
            NULL, HFILL }
8262
14
        },
8263
14
        { &hf_bthci_cmd_le_event_mask_le_phy_update_complete,
8264
14
          { "LE PHY Update Complete",                "bthci_cmd.le_event_mask.le_phy_update_complete",
8265
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x800),
8266
14
            NULL, HFILL }
8267
14
        },
8268
14
        { &hf_bthci_cmd_le_event_mask_le_extended_advertising_report,
8269
14
          { "LE Extended Advertising Report",              "bthci_cmd.le_event_mask.le_extended_advertising_report",
8270
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x1000),
8271
14
            NULL, HFILL }
8272
14
        },
8273
14
        { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_established_v1,
8274
14
          { "LE Periodic Advertising Sync Established [v1]",    "bthci_cmd.le_event_mask.le_periodic_advertising_sync_established_v1",
8275
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x2000),
8276
14
            NULL, HFILL }
8277
14
        },
8278
14
        { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_report_v1,
8279
14
          { "LE Periodic Advertising Report [v1]",              "bthci_cmd.le_event_mask.le_periodic_advertising_report_v1",
8280
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x4000),
8281
14
            NULL, HFILL }
8282
14
        },
8283
14
        { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_lost,
8284
14
          { "LE Periodic Advertising Sync Lost",           "bthci_cmd.le_event_mask.le_periodic_advertising_sync_lost",
8285
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x8000),
8286
14
            NULL, HFILL }
8287
14
        },
8288
14
        { &hf_bthci_cmd_le_event_mask_le_extended_scan_timeout,
8289
14
          { "LE Extended Scan Timeout",                    "bthci_cmd.le_event_mask.le_extended_scan_timeout",
8290
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x10000),
8291
14
            NULL, HFILL }
8292
14
        },
8293
14
        { &hf_bthci_cmd_le_event_mask_le_extended_advertising_set_terminated,
8294
14
          { "LE Extended Advertising Set Terminated",      "bthci_cmd.le_event_mask.le_extended_advertising_set_terminated",
8295
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x20000),
8296
14
            NULL, HFILL }
8297
14
        },
8298
14
        { &hf_bthci_cmd_le_event_mask_le_scan_request_received,
8299
14
          { "LE Scan Request Received",                    "bthci_cmd.le_event_mask.le_scan_request_received",
8300
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x40000),
8301
14
            NULL, HFILL }
8302
14
        },
8303
14
        { &hf_bthci_cmd_le_event_mask_le_channel_selection_algorithm,
8304
14
          { "LE Channel Selection Algorithm",              "bthci_cmd.le_event_mask.le_channel_selection_algorithm",
8305
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x80000),
8306
14
            NULL, HFILL }
8307
14
        },
8308
14
        { &hf_bthci_cmd_le_event_mask_le_connectionless_iq_report,
8309
14
          { "LE Connectionless IQ Report", "bthci_cmd.le_event_mask.le_connectionless_iq_report",
8310
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x100000),
8311
14
            NULL, HFILL }
8312
14
        },
8313
14
        { &hf_bthci_cmd_le_event_mask_le_connection_iq_report,
8314
14
          { "LE Connection IQ Report", "bthci_cmd.le_event_mask.le_connection_iq_report",
8315
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x200000),
8316
14
            NULL, HFILL }
8317
14
        },
8318
14
        { &hf_bthci_cmd_le_event_mask_le_cte_request_failed,
8319
14
          { "LE CTE Request Failed", "bthci_cmd.le_event_mask.le_cte_request_failed",
8320
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x400000),
8321
14
            NULL, HFILL }
8322
14
        },
8323
14
        { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_transfer_received_v1,
8324
14
          { "LE Periodic Advertising Sync Transfer Received [v1]", "bthci_cmd.le_event_mask.le_periodic_advertising_sync_transfer_received_v1",
8325
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x800000),
8326
14
            NULL, HFILL }
8327
14
        },
8328
14
        { &hf_bthci_cmd_le_event_mask_le_cis_established_v1,
8329
14
          { "LE CIS Established [v1]", "bthci_cmd.le_event_mask.le_cis_established_v1",
8330
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x1000000),
8331
14
            NULL, HFILL }
8332
14
        },
8333
14
        { &hf_bthci_cmd_le_event_mask_le_cis_request,
8334
14
          { "LE CIS Request", "bthci_cmd.le_event_mask.le_cis_request",
8335
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x2000000),
8336
14
            NULL, HFILL }
8337
14
        },
8338
14
        { &hf_bthci_cmd_le_event_mask_le_create_big_complete,
8339
14
          { "LE Create BIG Complete", "bthci_cmd.le_event_mask.le_create_big_complete",
8340
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x4000000),
8341
14
            NULL, HFILL }
8342
14
        },
8343
14
        { &hf_bthci_cmd_le_event_mask_le_terminate_big_complete,
8344
14
          { "LE Terminate BIG Complete", "bthci_cmd.le_event_mask.le_terminate_big_complete",
8345
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x8000000),
8346
14
            NULL, HFILL }
8347
14
        },
8348
14
        { &hf_bthci_cmd_le_event_mask_le_big_sync_established,
8349
14
          { "LE BIG Sync Established", "bthci_cmd.le_event_mask.le_big_sync_established",
8350
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x10000000),
8351
14
            NULL, HFILL }
8352
14
        },
8353
14
        { &hf_bthci_cmd_le_event_mask_le_big_sync_lost,
8354
14
          { "LE BIG Sync Lost", "bthci_cmd.le_event_mask.le_big_sync_lost",
8355
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x20000000),
8356
14
            NULL, HFILL }
8357
14
        },
8358
14
        { &hf_bthci_cmd_le_event_mask_le_request_peer_sca_complete,
8359
14
          { "LE Request Peer SCA Complete", "bthci_cmd.le_event_mask.le_request_peer_sca_complete",
8360
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x40000000),
8361
14
            NULL, HFILL }
8362
14
        },
8363
14
        { &hf_bthci_cmd_le_event_mask_le_path_loss_threshold,
8364
14
          { "LE Path Loss Threshold", "bthci_cmd.le_event_mask.le_path_loss_threshold",
8365
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x80000000),
8366
14
            NULL, HFILL }
8367
14
        },
8368
14
        { &hf_bthci_cmd_le_event_mask_le_transmit_power_reporting,
8369
14
          { "LE Transmit Power Reporting", "bthci_cmd.le_event_mask.le_transmit_power_reporting",
8370
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x100000000),
8371
14
            NULL, HFILL }
8372
14
        },
8373
14
        { &hf_bthci_cmd_le_event_mask_le_biginfo_advertising_report,
8374
14
          { "LE BIGInfo Advertising Report", "bthci_cmd.le_event_mask.le_biginfo_advertising_report",
8375
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x200000000),
8376
14
            NULL, HFILL }
8377
14
        },
8378
14
        { &hf_bthci_cmd_le_event_mask_le_subrate_changed,
8379
14
          { "LE Subrate Changed", "bthci_cmd.le_event_mask.le_subrate_changed",
8380
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x400000000),
8381
14
            NULL, HFILL }
8382
14
        },
8383
14
        { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_established_v2,
8384
14
          { "LE Periodic Advertising Sync Established [v2]", "bthci_cmd.le_event_mask.le_periodic_advertising_sync_established_v2",
8385
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x800000000),
8386
14
            NULL, HFILL }
8387
14
        },
8388
14
        { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_report_v2,
8389
14
          { "LE Periodic Advertising Report [v2]", "bthci_cmd.le_event_mask.le_event_mask_le_periodic_advertising_report_v2",
8390
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x1000000000),
8391
14
            NULL, HFILL }
8392
14
        },
8393
14
        { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_sync_transfer_received_v2,
8394
14
          { "LE Periodic Advertising Sync Transfer Received [v2]", "bthci_cmd.le_event_mask.le_periodic_advertising_sync_transfer_received_v2",
8395
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x2000000000),
8396
14
            NULL, HFILL }
8397
14
        },
8398
14
        { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_subevent_data_request,
8399
14
          { "LE Periodic Advertising Subevent Data Request", "bthci_cmd.le_event_mask.le_periodic_advertising_subevent_data_request",
8400
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x4000000000),
8401
14
            NULL, HFILL }
8402
14
        },
8403
14
        { &hf_bthci_cmd_le_event_mask_le_periodic_advertising_response_report,
8404
14
          { "LE Periodic Advertising Response Report", "bthci_cmd.le_event_mask.le_periodic_advertising_response_report",
8405
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x8000000000),
8406
14
            NULL, HFILL }
8407
14
        },
8408
14
        { &hf_bthci_cmd_le_event_mask_le_enhanced_connection_complete_v2,
8409
14
          { "LE Enhanced Connection Complete [v2]", "bthci_cmd.le_event_mask.le_enhanced_connection_complete_v2",
8410
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x10000000000),
8411
14
            NULL, HFILL }
8412
14
        },
8413
14
        { &hf_bthci_cmd_le_event_mask_le_cis_established_v2,
8414
14
          { "LE CIS Established [v2]", "bthci_cmd.le_event_mask.le_cis_established_v2",
8415
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x20000000000),
8416
14
            NULL, HFILL }
8417
14
        },
8418
14
        { &hf_bthci_cmd_le_event_mask_le_read_all_remote_features_complete,
8419
14
          { "LE Read All Remote Features Complete", "bthci_cmd.le_event_mask.le_read_all_remote_features_complete",
8420
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x40000000000),
8421
14
            NULL, HFILL }
8422
14
        },
8423
14
        { &hf_bthci_cmd_le_event_mask_le_cs_read_remote_supported_capabilities_complete,
8424
14
          { "LE CS Read Remote Supported Capabilities Complete", "bthci_cmd.le_event_mask.le_cs_read_remote_supported_capabilities_complete",
8425
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x80000000000),
8426
14
            NULL, HFILL }
8427
14
        },
8428
14
        { &hf_bthci_cmd_le_event_mask_le_cs_read_remote_fae_table_complete,
8429
14
          { "LE CS Read Remote FAE Table Complete", "bthci_cmd.le_event_mask.le_cs_read_remote_fae_table_complete",
8430
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x100000000000),
8431
14
            NULL, HFILL }
8432
14
        },
8433
14
        { &hf_bthci_cmd_le_event_mask_le_cs_security_enable_complete,
8434
14
          { "LE CS Security Enable Complete", "bthci_cmd.le_event_mask.le_cs_security_enable_complete",
8435
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x200000000000),
8436
14
            NULL, HFILL }
8437
14
        },
8438
14
        { &hf_bthci_cmd_le_event_mask_le_cs_config_complete,
8439
14
          { "LE CS Config Complete", "bthci_cmd.le_event_mask.le_cs_config_complete",
8440
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x400000000000),
8441
14
            NULL, HFILL }
8442
14
        },
8443
14
        { &hf_bthci_cmd_le_event_mask_le_cs_procedure_enable_complete,
8444
14
          { "LE CS Procedure Enable Complete", "bthci_cmd.le_event_mask.le_cs_procedure_enable_complete",
8445
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x800000000000),
8446
14
            NULL, HFILL }
8447
14
        },
8448
14
        { &hf_bthci_cmd_le_event_mask_le_cs_subevent_result,
8449
14
          { "LE CS Subevent Result", "bthci_cmd.le_event_mask.le_cs_subevent_result",
8450
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x1000000000000),
8451
14
            NULL, HFILL }
8452
14
        },
8453
14
        { &hf_bthci_cmd_le_event_mask_le_cs_subevent_result_continue,
8454
14
          { "LE CS Subevent Result Continue", "bthci_cmd.le_event_mask.le_cs_subevent_result_continue",
8455
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x2000000000000),
8456
14
            NULL, HFILL }
8457
14
        },
8458
14
        { &hf_bthci_cmd_le_event_mask_le_cs_test_end_complete,
8459
14
          { "LE CS Test End Complete", "bthci_cmd.le_event_mask.le_cs_test_end_complete",
8460
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x4000000000000),
8461
14
            NULL, HFILL }
8462
14
        },
8463
14
        { &hf_bthci_cmd_le_event_mask_le_monitored_advertisers_report,
8464
14
          { "LE Monitored Advertisers Report", "bthci_cmd.le_event_mask.le_monitored_advertisers_report",
8465
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x8000000000000),
8466
14
            NULL, HFILL }
8467
14
        },
8468
14
        { &hf_bthci_cmd_le_event_mask_le_frame_space_update_complete,
8469
14
          { "LE Frame Space Update Complete", "bthci_cmd.le_event_mask.le_frame_space_update_complete",
8470
14
            FT_BOOLEAN, 64, NULL, UINT64_C(0x10000000000000),
8471
14
            NULL, HFILL }
8472
14
        },
8473
14
        { &hf_bthci_cmd_le_event_mask_le_reserved,
8474
14
          { "Reserved", "bthci_cmd.le_event_mask.reserved",
8475
14
            FT_UINT64, BASE_HEX, NULL, UINT64_C(0xFFE0000000000000),
8476
14
            NULL, HFILL }
8477
14
        },
8478
14
        { &hf_bthci_cmd_le_advts_interval_min,
8479
14
          { "Advertising Interval Min", "bthci_cmd.le_advts_interval_min",
8480
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
8481
14
            NULL, HFILL }
8482
14
        },
8483
14
        { &hf_bthci_cmd_le_advts_interval_max,
8484
14
          { "Advertising Interval Max", "bthci_cmd.le_advts_interval_max",
8485
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
8486
14
            NULL, HFILL }
8487
14
        },
8488
14
        { &hf_bthci_cmd_le_advts_type,
8489
14
          { "Advertising Type", "bthci_cmd.le_advts_type",
8490
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_advertising_types), 0x0,
8491
14
            NULL, HFILL }
8492
14
        },
8493
14
        { &hf_bthci_cmd_le_address_type,
8494
14
          { "Address Type", "bthci_cmd.le_address_type",
8495
14
            FT_UINT8, BASE_HEX, VALS(bthci_cmd_address_types_vals), 0x0,
8496
14
            NULL, HFILL }
8497
14
        },
8498
14
        { &hf_bthci_cmd_le_own_address_type,
8499
14
          { "Own Address Type", "bthci_cmd.le_own_address_type",
8500
14
            FT_UINT8, BASE_HEX, VALS(bthci_cmd_address_types_vals), 0x0,
8501
14
            NULL, HFILL }
8502
14
        },
8503
14
        { &hf_bthci_cmd_le_peer_address_type,
8504
14
          { "Peer Address Type", "bthci_cmd.le_peer_address_type",
8505
14
            FT_UINT8, BASE_HEX, VALS(bthci_cmd_address_types_vals), 0x0,
8506
14
            NULL, HFILL }
8507
14
        },
8508
14
        { &hf_bthci_cmd_le_peer_identity_address_type,
8509
14
          { "Peer Identity Address Type", "bthci_cmd.le_peer_identity_address_type",
8510
14
            FT_UINT8, BASE_HEX, VALS(cmd_identity_address_types_vals), 0x0,
8511
14
            NULL, HFILL }
8512
14
        },
8513
14
        { &hf_bthci_cmd_le_direct_address_type,
8514
14
          { "Direct Address Type", "bthci_cmd.le_direct_address_type",
8515
14
            FT_UINT8, BASE_HEX, VALS(bthci_cmd_address_types_vals), 0x0,
8516
14
            NULL, HFILL }
8517
14
        },
8518
14
        { &hf_bthci_cmd_le_advts_channel_map_1,
8519
14
          { "Channel 37", "bthci_cmd.le_advts_ch_map_1",
8520
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
8521
14
            NULL, HFILL }
8522
14
        },
8523
14
        { &hf_bthci_cmd_le_advts_channel_map_2,
8524
14
          { "Channel 38", "bthci_cmd.le_advts_ch_map_2",
8525
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
8526
14
            NULL, HFILL }
8527
14
        },
8528
14
        { &hf_bthci_cmd_le_advts_channel_map_3,
8529
14
          { "Channel 39", "bthci_cmd.le_advts_ch_map_3",
8530
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
8531
14
            NULL, HFILL }
8532
14
        },
8533
14
        { &hf_bthci_cmd_le_advts_filter_policy,
8534
14
          { "Advertising Filter Policy", "bthci_cmd.le_advts_filter_policy",
8535
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_advertising_filter_policy), 0x0,
8536
14
            NULL, HFILL }
8537
14
        },
8538
14
        { &hf_bthci_cmd_le_data_length,
8539
14
          { "Data Length", "bthci_cmd.le_data_length",
8540
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
8541
14
            NULL, HFILL }
8542
14
        },
8543
14
        { &hf_bthci_cmd_le_advts_enable,
8544
14
          { "Advertising Enable", "bthci_cmd.le_advts_enable",
8545
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8546
14
            NULL, HFILL }
8547
14
        },
8548
14
        { &hf_bthci_cmd_le_scan_enable,
8549
14
          { "Scan Enable", "bthci_cmd.le_scan_enable",
8550
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8551
14
            NULL, HFILL }
8552
14
        },
8553
14
        { &hf_bthci_cmd_le_filter_duplicates,
8554
14
          { "Filter Duplicates", "bthci_cmd.le_filter_duplicates",
8555
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
8556
14
            NULL, HFILL }
8557
14
        },
8558
14
        { &hf_bthci_cmd_le_scan_type,
8559
14
          { "Scan Type", "bthci_cmd.le_scan_type",
8560
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_scan_types), 0x0,
8561
14
            NULL, HFILL }
8562
14
        },
8563
14
        { &hf_bthci_cmd_le_scan_interval,
8564
14
          { "Scan Interval", "bthci_cmd.le_scan_interval",
8565
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8566
14
            NULL, HFILL }
8567
14
        },
8568
14
        { &hf_bthci_cmd_le_scan_window,
8569
14
          { "Scan Window", "bthci_cmd.le_scan_window",
8570
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8571
14
            NULL, HFILL }
8572
14
        },
8573
14
        { &hf_bthci_cmd_le_scan_filter_policy,
8574
14
          { "Scan Filter Policy", "bthci_cmd.le_scan_filter_policy",
8575
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
8576
14
            NULL, HFILL }
8577
14
        },
8578
14
        { &hf_bthci_cmd_scan_filter_policy_filtered,
8579
14
          { "Filtered (Use Filter Accept List)", "bthci_cmd.scan_filter_policy.filtered",
8580
14
            FT_BOOLEAN, 8, NULL, 0x01,
8581
14
            NULL, HFILL }
8582
14
        },
8583
14
        { &hf_bthci_cmd_scan_filter_policy_extended,
8584
14
          { "Extended (Allow Unresolvable TargetA Address)", "bthci_cmd.scan_filter_policy.extended",
8585
14
            FT_BOOLEAN, 8, NULL, 0x02,
8586
14
            NULL, HFILL }
8587
14
        },
8588
14
        { &hf_bthci_cmd_scan_filter_policy_decision_mode,
8589
14
          { "Decision Mode", "bthci_cmd.scan_filter_policy.decision_mode",
8590
14
            FT_UINT8, BASE_HEX, VALS(cmd_decision_mode_filter_policy), 0x0C,
8591
14
            NULL, HFILL }
8592
14
        },
8593
14
        { &hf_bthci_cmd_scan_filter_policy_reserved,
8594
14
          { "Reserved", "bthci_cmd.scan_filter_policy.reserved",
8595
14
            FT_UINT8, BASE_HEX, NULL, 0xF0,
8596
14
            NULL, HFILL }
8597
14
        },
8598
14
        { &hf_bthci_cmd_le_initiator_filter_policy,
8599
14
          { "Initiator Filter Policy", "bthci_cmd.le_initiator_filter_policy",
8600
14
            FT_UINT8, BASE_HEX, VALS(cmd_init_filter_policy), 0x0,
8601
14
            NULL, HFILL }
8602
14
        },
8603
14
        { &hf_bthci_cmd_le_con_interval_min,
8604
14
          { "Connection Interval Min", "bthci_cmd.le_con_interval_min",
8605
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
8606
14
            NULL, HFILL }
8607
14
        },
8608
14
        { &hf_bthci_cmd_le_con_interval_max,
8609
14
          { "Connection Interval Max", "bthci_cmd.le_con_interval_max",
8610
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
8611
14
            NULL, HFILL }
8612
14
        },
8613
14
        { &hf_bthci_cmd_le_con_latency,
8614
14
          { "Max Connection Latency", "bthci_cmd.le_con_latency",
8615
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
8616
14
            NULL, HFILL }
8617
14
        },
8618
14
        { &hf_bthci_cmd_le_supervision_timeout,
8619
14
          { "Supervision Timeout", "bthci_cmd.le_supv_timeout",
8620
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p01_sec), 0x0,
8621
14
            NULL, HFILL }
8622
14
        },
8623
14
        { &hf_bthci_cmd_le_min_ce_length,
8624
14
          { "Min CE Length", "bthci_cmd.le_min_ce_length",
8625
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8626
14
            "Min. Connection Event Length", HFILL }
8627
14
        },
8628
14
        { &hf_bthci_cmd_le_max_ce_length,
8629
14
          { "Max CE Length", "bthci_cmd.le_max_ce_length",
8630
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8631
14
            "Max. Connection Event Length", HFILL }
8632
14
        },
8633
14
        { &hf_bthci_cmd_le_channel_map,
8634
14
          { "Channel Map", "bthci_cmd.le_channel_map",
8635
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
8636
14
            NULL, HFILL }
8637
14
        },
8638
14
        { &hf_bthci_cmd_key,
8639
14
          { "Key",        "bthci_cmd.le_key",
8640
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
8641
14
            "Encryption Key", HFILL }
8642
14
        },
8643
14
        { &hf_bthci_cmd_plaintext_data,
8644
14
          { "Plaintext",        "bthci_cmd.le_plaintext",
8645
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
8646
14
            NULL, HFILL }
8647
14
        },
8648
14
        { &hf_bthci_cmd_random_number,
8649
14
          { "Random Number",        "bthci_cmd.le_random_number",
8650
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
8651
14
            NULL, HFILL }
8652
14
        },
8653
14
        { &hf_bthci_cmd_encrypted_diversifier,
8654
14
          { "Encrypted Diversifier", "bthci_cmd.le_encrypted_diversifier",
8655
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
8656
14
            NULL, HFILL }
8657
14
        },
8658
14
        { &hf_bthci_cmd_le_long_term_key,
8659
14
          { "Long Term Key",        "bthci_cmd.le_long_term_key",
8660
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
8661
14
            NULL, HFILL }
8662
14
        },
8663
14
        { &hf_bthci_cmd_rx_frequency,
8664
14
          { "Rx Frequency", "bthci_cmd.rx_frequency",
8665
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
8666
14
            NULL, HFILL }
8667
14
        },
8668
14
        { &hf_bthci_cmd_tx_frequency,
8669
14
          { "Tx Frequency", "bthci_cmd.tx_frequency",
8670
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
8671
14
            NULL, HFILL }
8672
14
        },
8673
14
        { &hf_bthci_cmd_test_data_length,
8674
14
          { "Test Data Length", "bthci_cmd.le_test_data_length",
8675
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
8676
14
            NULL, HFILL }
8677
14
        },
8678
14
        { &hf_bthci_cmd_test_packet_payload,
8679
14
          { "Packet Payload", "bthci_cmd.le_test_payload",
8680
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_test_pkt_payload), 0x0,
8681
14
            NULL, HFILL }
8682
14
        },
8683
14
        { &hf_bthci_cmd_parameter,
8684
14
          { "Parameter", "bthci_cmd.parameter",
8685
14
            FT_NONE, BASE_NONE, NULL, 0x0,
8686
14
            NULL, HFILL }
8687
14
        },
8688
14
        { &hf_response_in_frame,
8689
14
            { "Response in frame",                "bthci_cmd.response_in_frame",
8690
14
            FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0,
8691
14
            NULL, HFILL }
8692
14
        },
8693
14
        { &hf_command_response_time_delta,
8694
14
            { "Command-Response Delta",          "bthci_cmd.command_response_delta",
8695
14
            FT_DOUBLE, BASE_NONE|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x00,
8696
14
            NULL, HFILL }
8697
14
        },
8698
14
        { &hf_pending_in_frame,
8699
14
            { "Pending in frame",                "bthci_cmd.pending_in_frame",
8700
14
            FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0,
8701
14
            NULL, HFILL }
8702
14
        },
8703
14
        { &hf_command_pending_time_delta,
8704
14
            { "Command-Pending Delta",          "bthci_cmd.command_pending_delta",
8705
14
            FT_DOUBLE, BASE_NONE|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x00,
8706
14
            NULL, HFILL }
8707
14
        },
8708
14
        { &hf_bthci_cmd_le_tx_octets,
8709
14
          { "TxOctets", "bthci_cmd.le_tx_octets",
8710
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
8711
14
            NULL, HFILL }
8712
14
        },
8713
14
        { &hf_bthci_cmd_le_tx_time,
8714
14
          { "TxTime", "bthci_cmd.le_tx_time",
8715
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
8716
14
            NULL, HFILL }
8717
14
        },
8718
14
        { &hf_bthci_cmd_le_suggested_max_tx_octets,
8719
14
          { "SuggestedMaxTxOctets", "bthci_cmd.le_suggested_max_tx_octets",
8720
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
8721
14
            NULL, HFILL }
8722
14
        },
8723
14
        { &hf_bthci_cmd_le_suggested_max_tx_time,
8724
14
          { "SuggestedMaxTxTime", "bthci_cmd.le_suggested_max_tx_time",
8725
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
8726
14
            NULL, HFILL }
8727
14
        },
8728
14
        { &hf_bthci_cmd_le_remote_p_256_public_key,
8729
14
          { "Remote_P-256_Public_Key", "bthci_cmd.le_remote_p_256_public_key",
8730
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
8731
14
            NULL, HFILL }
8732
14
        },
8733
14
        { &hf_bthci_cmd_le_peer_irk,
8734
14
          { "Peer IRK", "bthci_cmd.le_peer_irk",
8735
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
8736
14
            NULL, HFILL }
8737
14
        },
8738
14
        { &hf_bthci_cmd_le_local_irk,
8739
14
          { "Local IRK", "bthci_cmd.le_local_irk",
8740
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
8741
14
            NULL, HFILL }
8742
14
        },
8743
14
        { &hf_bthci_cmd_le_address_resolution_enable,
8744
14
          { "Address Resolution Enable", "bthci_cmd.le_address_resolution_enable",
8745
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_address_resolution_enable), 0x0,
8746
14
            NULL, HFILL }
8747
14
        },
8748
14
        { &hf_bthci_cmd_le_rpa_timeout,
8749
14
          { "RPA Timeout", "bthci_cmd.le_rpa_timeout",
8750
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_second_seconds), 0x0,
8751
14
            NULL, HFILL }
8752
14
        },
8753
14
        { &hf_bthci_cmd_advertising_handle,
8754
14
          { "Advertising Handle", "bthci_cmd.advertising_handle",
8755
14
            FT_UINT8, BASE_HEX|BASE_SPECIAL_VALS, VALS(bluetooth_not_used_0xff_special), 0x0,
8756
14
            NULL, HFILL }
8757
14
        },
8758
14
        { &hf_bthci_cmd_advertising_ext_interval_min,
8759
14
          { "Advertising Interval Min", "bthci_cmd.le_advts_interval_min",
8760
14
            FT_UINT24, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8761
14
            NULL, HFILL }
8762
14
        },
8763
14
        { &hf_bthci_cmd_advertising_ext_interval_max,
8764
14
          { "Advertising Interval Max", "bthci_cmd.le_advts_interval_max",
8765
14
            FT_UINT24, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
8766
14
            NULL, HFILL }
8767
14
        },
8768
14
        { &hf_bthci_cmd_advertising_properties,
8769
14
          { "Advertising Event Properties", "bthci_cmd.advertising_properties",
8770
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
8771
14
            NULL, HFILL }
8772
14
        },
8773
14
        { &hf_bthci_cmd_advertising_properties_decision_pdu_incl_adi,
8774
14
          { "Include ADI in Decision PDUs", "bthci_cmd.adv_properties.decision_pdu_incl_adi",
8775
14
            FT_BOOLEAN, 16, NULL, 0x0200,
8776
14
            NULL, HFILL }
8777
14
        },
8778
14
        { &hf_bthci_cmd_advertising_properties_decision_pdu_incl_adva,
8779
14
          { "Include AdvA in Decision PDUs", "bthci_cmd.adv_properties.decision_pdu_incl_adva",
8780
14
            FT_BOOLEAN, 16, NULL, 0x0100,
8781
14
            NULL, HFILL }
8782
14
        },
8783
14
        { &hf_bthci_cmd_advertising_properties_use_decision_pdus,
8784
14
          { "Use Decision PDUs", "bthci_cmd.adv_properties.use_decision_pdus",
8785
14
            FT_BOOLEAN, 16, NULL, 0x0080,
8786
14
            NULL, HFILL }
8787
14
        },
8788
14
        { &hf_bthci_cmd_advertising_properties_incl_txpower,
8789
14
          { "Include Tx Power", "bthci_cmd.adv_properties.txpower",
8790
14
            FT_BOOLEAN, 16, NULL, 0x0040,
8791
14
            NULL, HFILL }
8792
14
        },
8793
14
        { &hf_bthci_cmd_advertising_properties_anonymous_adv,
8794
14
          { "Anonymous Advertisement", "bthci_cmd.adv_properties.anonymous_adv",
8795
14
            FT_BOOLEAN, 16, NULL, 0x0020,
8796
14
            NULL, HFILL }
8797
14
        },
8798
14
        { &hf_bthci_cmd_advertising_properties_legacy_adv,
8799
14
          { "Use Legacy PDUs", "bthci_cmd.adv_properties.legacy_adv",
8800
14
            FT_BOOLEAN, 16, NULL, 0x0010,
8801
14
            NULL, HFILL }
8802
14
        },
8803
14
        { &hf_bthci_cmd_advertising_properties_hdc_connectable_directed,
8804
14
          { "High Duty Cycle Connectable Directed", "bthci_cmd.adv_properties.hdc_connectable_directed",
8805
14
            FT_BOOLEAN, 16, NULL, 0x0008,
8806
14
            NULL, HFILL }
8807
14
        },
8808
14
        { &hf_bthci_cmd_advertising_properties_directed,
8809
14
          { "Directed", "bthci_cmd.adv_properties.directed",
8810
14
            FT_BOOLEAN, 16, NULL, 0x0004,
8811
14
            NULL, HFILL }
8812
14
        },
8813
14
        { &hf_bthci_cmd_advertising_properties_scannable,
8814
14
          { "Scannable", "bthci_cmd.adv_properties.scannable",
8815
14
            FT_BOOLEAN, 16, NULL, 0x0002,
8816
14
            NULL, HFILL }
8817
14
        },
8818
14
        { &hf_bthci_cmd_advertising_properties_connectable,
8819
14
          { "Connectable", "bthci_cmd.adv_properties.connectable",
8820
14
            FT_BOOLEAN, 16, NULL, 0x0001,
8821
14
            NULL, HFILL }
8822
14
        },
8823
14
        { &hf_bthci_cmd_advertising_properties_reserved,
8824
14
          { "Reserved", "bthci_cmd.adv_properties.reserved",
8825
14
            FT_UINT16, BASE_HEX, NULL, 0xFC00,
8826
14
            NULL, HFILL }
8827
14
        },
8828
14
        { &hf_bthci_cmd_periodic_advertising_properties,
8829
14
          { "Periodic Advertising Properties", "bthci_cmd.periodic_adv_properties",
8830
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
8831
14
            NULL, HFILL }
8832
14
        },
8833
14
        { &hf_bthci_cmd_periodic_advertising_properties_reserved,
8834
14
          { "Reserved", "bthci_cmd.periodic_adv_properties.reserved",
8835
14
            FT_UINT16, BASE_HEX, NULL, 0xFFBF,
8836
14
            NULL, HFILL }
8837
14
        },
8838
14
        { &hf_bthci_cmd_primary_advertising_phy,
8839
14
          { "Primary Advertising PHY", "bthci_cmd.primary_advertising_phy",
8840
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_phy_vals), 0x0,
8841
14
            NULL, HFILL }
8842
14
        },
8843
14
        { &hf_bthci_cmd_sec_adv_max_skip,
8844
14
          { "Secondary Advertising Max Skip", "bthci_cmd.secondary_advertising_max_skip",
8845
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
8846
14
            NULL, HFILL }
8847
14
        },
8848
14
        { &hf_bthci_cmd_secondary_advertising_phy,
8849
14
          { "Secondary Advertising PHY", "bthci_cmd.secondary_advertising_phy",
8850
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_phy_vals), 0x0,
8851
14
            NULL, HFILL }
8852
14
        },
8853
14
        { &hf_bthci_cmd_advertising_sid,
8854
14
          { "Advertising SID", "bthci_cmd.advertising_sid",
8855
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
8856
14
            NULL, HFILL }
8857
14
        },
8858
14
        { &hf_bthci_cmd_scan_req_notif_en,
8859
14
          { "Scan Request Notification Enable", "bthci_cmd.scan_request_notification_enable",
8860
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
8861
14
            NULL, HFILL }
8862
14
        },
8863
14
        { &hf_bthci_cmd_le_adv_data_operation,
8864
14
          { "Data Operation", "bthci_cmd.adv_data_operation",
8865
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_adv_data_operation), 0x0,
8866
14
            NULL, HFILL }
8867
14
        },
8868
14
        { &hf_bthci_cmd_le_adv_data_frag_pref,
8869
14
          { "Fragment Preference", "bthci_cmd.adv_fragment_preference",
8870
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_adv_data_frag_pref), 0x0,
8871
14
            NULL, HFILL }
8872
14
        },
8873
14
        { &hf_bthci_cmd_le_adv_set,
8874
14
          { "Advertising Set", "bthci_cmd.le_adv_set",
8875
14
            FT_NONE, BASE_NONE, NULL, 0x0,
8876
14
            NULL, HFILL }
8877
14
        },
8878
14
        { &hf_bthci_cmd_le_adv_en_sets,
8879
14
          { "Number of Sets", "bthci_cmd.adv_num_sets",
8880
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
8881
14
            NULL, HFILL }
8882
14
        },
8883
14
        { &hf_bthci_cmd_le_adv_duration,
8884
14
          { "Duration", "bthci_cmd.adv_duration",
8885
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p01_sec), 0x0,
8886
14
            NULL, HFILL }
8887
14
        },
8888
14
        { &hf_bthci_cmd_le_adv_max_extended_events,
8889
14
          { "Max Extended Events", "bthci_cmd.max_extended_advertising_events",
8890
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
8891
14
            NULL, HFILL }
8892
14
        },
8893
14
        {&hf_bthci_cmd_all_phys,
8894
14
            {"All PHYs", "bthci_cmd.all_phys",
8895
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
8896
14
            NULL, HFILL}
8897
14
        },
8898
14
        { &hf_bthci_cmd_all_phys_tx_pref,
8899
14
          { "The Host has no Tx PHY preference", "bthci_cmd.all_phys.tx_preference",
8900
14
            FT_BOOLEAN, 8, NULL, 0x1,
8901
14
            NULL, HFILL }
8902
14
        },
8903
14
        { &hf_bthci_cmd_all_phys_rx_pref,
8904
14
          { "The Host has no Rx PHY preference", "bthci_cmd.all_phys.rx_preference",
8905
14
            FT_BOOLEAN, 8, NULL, 0x2,
8906
14
            NULL, HFILL }
8907
14
        },
8908
14
        { &hf_bthci_cmd_all_phys_reserved,
8909
14
          { "Reserved", "bthci_cmd.all_phys.reserved",
8910
14
            FT_UINT8, BASE_HEX, NULL, 0xFC,
8911
14
            NULL, HFILL }
8912
14
        },
8913
14
        {&hf_bthci_cmd_tx_phys,
8914
14
            {"Tx PHYs", "bthci_cmd.tx_phys",
8915
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
8916
14
            NULL, HFILL}
8917
14
        },
8918
14
        {&hf_bthci_cmd_rx_phys,
8919
14
            {"Rx PHYs", "bthci_cmd.rx_phys",
8920
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
8921
14
            NULL, HFILL}
8922
14
        },
8923
14
        { &hf_bthci_cmd_phys_pref_le_1m,
8924
14
          { "The Host prefers LE 1M", "bthci_cmd.phys_pref.le_1m",
8925
14
            FT_BOOLEAN, 8, NULL, 0x1,
8926
14
            NULL, HFILL }
8927
14
        },
8928
14
        { &hf_bthci_cmd_phys_pref_le_2m,
8929
14
          { "The Host prefers LE 2M", "bthci_cmd.phys_pref.le_2m",
8930
14
            FT_BOOLEAN, 8, NULL, 0x2,
8931
14
            NULL, HFILL }
8932
14
        },
8933
14
        { &hf_bthci_cmd_phys_pref_le_coded,
8934
14
          { "The Host prefers LE Coded", "bthci_cmd.phys_pref.le_coded",
8935
14
            FT_BOOLEAN, 8, NULL, 0x4,
8936
14
            NULL, HFILL }
8937
14
        },
8938
14
        { &hf_bthci_cmd_phys_pref_reserved,
8939
14
          { "Reserved", "bthci_cmd.phys_pref.reserved",
8940
14
            FT_UINT8, BASE_HEX, NULL, 0xF8,
8941
14
            NULL, HFILL }
8942
14
        },
8943
14
        { &hf_bthci_cmd_phy_options,
8944
14
          { "PHY Options", "bthci_cmd.phy_options",
8945
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
8946
14
            NULL, HFILL }
8947
14
        },
8948
14
        { &hf_bthci_cmd_phy_options_coding,
8949
14
          { "Coding", "bthci_cmd.phy_options.coding",
8950
14
            FT_UINT16, BASE_HEX, VALS(cmd_le_phy_options_vals), 0x3,
8951
14
            NULL, HFILL }
8952
14
        },
8953
14
        { &hf_bthci_cmd_phy_options_reserved,
8954
14
          { "Reserved", "bthci_cmd.phy_options.reserved",
8955
14
            FT_UINT16, BASE_HEX, NULL, 0xFFFC,
8956
14
            NULL, HFILL }
8957
14
        },
8958
14
        { &hf_bthci_cmd_phy,
8959
14
          { "PHY", "bthci_cmd.phy",
8960
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_phy_vals), 0x0,
8961
14
            NULL, HFILL }
8962
14
        },
8963
14
        { &hf_bthci_cmd_modulation_index,
8964
14
          { "Modulation Index", "bthci_cmd.modulation_index",
8965
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_modulation_index_vals), 0x0,
8966
14
            NULL, HFILL }
8967
14
        },
8968
14
        { &hf_bthci_cmd_le_scan_phys,
8969
14
          { "Scanning PHYs", "bthci_cmd.le_scan_phys",
8970
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
8971
14
            NULL, HFILL }
8972
14
        },
8973
14
        { &hf_bthci_cmd_le_scan_phys_le_1m,
8974
14
          { "LE 1M", "bthci_cmd.le_scan_phys.le_1m",
8975
14
            FT_BOOLEAN, 8, NULL, 0x1,
8976
14
            NULL, HFILL }
8977
14
        },
8978
14
        { &hf_bthci_cmd_le_scan_phys_le_coded,
8979
14
          { "LE Coded", "bthci_cmd.le_scan_phys.le_coded",
8980
14
            FT_BOOLEAN, 8, NULL, 0x4,
8981
14
            NULL, HFILL }
8982
14
        },
8983
14
        { &hf_bthci_cmd_le_scan_phys_reserved,
8984
14
          { "Reserved", "bthci_cmd.le_scan_phys.reserved",
8985
14
            FT_UINT8, BASE_HEX, NULL, 0xFA,
8986
14
            NULL, HFILL }
8987
14
        },
8988
14
        { &hf_bthci_cmd_le_scan_phy_param,
8989
14
          { "Scanning PHY", "bthci_cmd.le_scan_phy_param",
8990
14
            FT_NONE, BASE_NONE, NULL, 0x0,
8991
14
            NULL, HFILL }
8992
14
        },
8993
14
        { &hf_bthci_cmd_le_scan_duration,
8994
14
          { "Duration", "bthci_cmd.scan_duration",
8995
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
8996
14
            NULL, HFILL }
8997
14
        },
8998
14
        { &hf_bthci_cmd_le_scan_period,
8999
14
          { "Period", "bthci_cmd.scan_period",
9000
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
9001
14
            NULL, HFILL }
9002
14
        },
9003
14
        { &hf_bthci_cmd_le_phys,
9004
14
          { "PHYs", "bthci_cmd.le_phys",
9005
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9006
14
            NULL, HFILL }
9007
14
        },
9008
14
        { &hf_bthci_cmd_le_phys_le_1m,
9009
14
          { "LE 1M", "bthci_cmd.le_phys.le_1m",
9010
14
            FT_BOOLEAN, 8, NULL, 0x1,
9011
14
            NULL, HFILL }
9012
14
        },
9013
14
        { &hf_bthci_cmd_le_phys_le_2m,
9014
14
          { "LE 2M", "bthci_cmd.le_phys.le_2m",
9015
14
            FT_BOOLEAN, 8, NULL, 0x2,
9016
14
            NULL, HFILL }
9017
14
        },
9018
14
        { &hf_bthci_cmd_le_phys_le_coded,
9019
14
          { "LE Coded", "bthci_cmd.le_phys.le_coded",
9020
14
            FT_BOOLEAN, 8, NULL, 0x4,
9021
14
            NULL, HFILL }
9022
14
        },
9023
14
        { &hf_bthci_cmd_le_phys_reserved,
9024
14
          { "Reserved", "bthci_cmd.le_phys.reserved",
9025
14
            FT_UINT8, BASE_HEX, NULL, 0xF8,
9026
14
            NULL, HFILL }
9027
14
        },
9028
14
        { &hf_bthci_cmd_le_init_phy_param,
9029
14
          { "Initiating PHY", "bthci_cmd.le_init_phy_param",
9030
14
            FT_NONE, BASE_NONE, NULL, 0x0,
9031
14
            NULL, HFILL }
9032
14
        },
9033
14
        { &hf_bthci_cmd_le_privacy_mode,
9034
14
          { "Privacy Mode", "bthci_cmd.le_privacy_mode",
9035
14
            FT_UINT8, BASE_HEX, VALS(cmd_privacy_mode), 0x0,
9036
14
            NULL, HFILL }
9037
14
        },
9038
14
        { &hf_bthci_cmd_sync_filter_policy,
9039
14
          { "Filter Policy", "bthci_cmd.le_sync_filter_policy",
9040
14
            FT_UINT8, BASE_HEX, VALS(cmd_sync_filter_policy), 0x0,
9041
14
            NULL, HFILL }
9042
14
        },
9043
14
        { &hf_bthci_cmd_skip,
9044
14
          { "Skip", "bthci_cmd.skip",
9045
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
9046
14
            NULL, HFILL }
9047
14
        },
9048
14
        { &hf_bthci_cmd_sync_handle,
9049
14
          { "Sync Handle",             "bthci_cmd.sync_handle",
9050
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9051
14
            NULL, HFILL }
9052
14
        },
9053
14
        { &hf_bthci_cmd_rf_tx_path_compensation_value,
9054
14
          { "RF Tx Path Compensation Value",   "bthci_cmd.rf_tx_path_compensation_value",
9055
14
            FT_INT16, BASE_DEC, NULL, 0x0,
9056
14
            NULL, HFILL }
9057
14
        },
9058
14
        { &hf_bthci_cmd_rf_rx_path_compensation_value,
9059
14
          { "RF Rx Path Compensation Value",   "bthci_cmd.rf_rx_path_compensation_value",
9060
14
            FT_INT16, BASE_DEC, NULL, 0x0,
9061
14
            NULL, HFILL }
9062
14
        },
9063
14
        { &hf_bthci_cmd_cte_length,
9064
14
          { "CTE Length",   "bthci_cmd.cte_length",
9065
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9066
14
            NULL, HFILL }
9067
14
        },
9068
14
        { &hf_bthci_cmd_cte_type,
9069
14
          { "CTE Type",   "bthci_cmd.cte_type",
9070
14
            FT_UINT8, BASE_HEX, VALS(cmd_cte_type_vals), 0x0,
9071
14
            NULL, HFILL }
9072
14
        },
9073
14
        { &hf_bthci_cmd_slot_durations,
9074
14
          { "Slot Durations",   "bthci_cmd.slot_durations",
9075
14
            FT_UINT8, BASE_HEX, VALS(cmd_slot_durations_vals), 0x0,
9076
14
            NULL, HFILL }
9077
14
        },
9078
14
        { &hf_bthci_cmd_antenna_switching_pattern_length,
9079
14
          { "Antenna Switching Pattern Length",   "bthci_cmd.antenna_switching_pattern_length",
9080
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9081
14
            NULL, HFILL }
9082
14
        },
9083
14
        { &hf_bthci_cmd_antenna_switching_pattern,
9084
14
          { "Antenna Switching Pattern",   "bthci_cmd.antenna_switching_pattern",
9085
14
            FT_NONE, BASE_NONE, NULL, 0x0,
9086
14
            NULL, HFILL }
9087
14
        },
9088
14
        { &hf_bthci_cmd_antenna_id,
9089
14
          { "Antenna Id",   "bthci_cmd.antenna_id",
9090
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9091
14
            NULL, HFILL }
9092
14
        },
9093
14
        { &hf_bthci_cmd_cte_count,
9094
14
          { "CTE Count",   "bthci_cmd.cte_count",
9095
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9096
14
            NULL, HFILL }
9097
14
        },
9098
14
        { &hf_bthci_cmd_cte_enable,
9099
14
          { "CTE Enable",   "bthci_cmd.cte_enable",
9100
14
            FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9101
14
            NULL, HFILL }
9102
14
        },
9103
14
        { &hf_bthci_cmd_iq_sampling_enable,
9104
14
          { "IQ Sampling Enable",   "bthci_cmd.iq_sampling_enable",
9105
14
            FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9106
14
            NULL, HFILL }
9107
14
        },
9108
14
        { &hf_bthci_cmd_max_sampled_ctes,
9109
14
          { "Max Sampled CTEs",   "bthci_cmd.max_sampled_ctes",
9110
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9111
14
            NULL, HFILL }
9112
14
        },
9113
14
        { &hf_bthci_cmd_cte_request_interval,
9114
14
          { "CTE Request Interval",   "bthci_cmd.cte_request_interval",
9115
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
9116
14
            NULL, HFILL }
9117
14
        },
9118
14
        { &hf_bthci_cmd_reporting_enable,
9119
14
          { "Reporting Enable", "bthci_cmd.reporting_enable",
9120
14
            FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9121
14
            NULL, HFILL }
9122
14
        },
9123
14
        { &hf_bthci_cmd_sync_cte_type,
9124
14
          { "Sync CTE Type", "bthci_cmd.sync_cte_type",
9125
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9126
14
            NULL, HFILL }
9127
14
        },
9128
14
        { &hf_bthci_cmd_sync_cte_type_no_sync_aoa,
9129
14
          { "No sync to packets with AoA CTE", "bthci_cmd.sync_cte_type.no_sync_aoa",
9130
14
            FT_BOOLEAN, 8, NULL, 0x01,
9131
14
            NULL, HFILL }
9132
14
        },
9133
14
        { &hf_bthci_cmd_sync_cte_type_no_sync_aod_1us,
9134
14
          { "No sync to packets with AoD 1 usec CTE", "bthci_cmd.sync_cte_type.no_sync_aod_1us",
9135
14
            FT_BOOLEAN, 8, NULL, 0x02,
9136
14
            NULL, HFILL }
9137
14
        },
9138
14
        { &hf_bthci_cmd_sync_cte_type_no_sync_aod_2us,
9139
14
          { "No sync to packets with AoD 2 usec CTE", "bthci_cmd.sync_cte_type.no_sync_aod_2us",
9140
14
            FT_BOOLEAN, 8, NULL, 0x04,
9141
14
            NULL, HFILL }
9142
14
        },
9143
14
        { &hf_bthci_cmd_sync_cte_type_sync_only_with_cte,
9144
14
          { "Sync only to packets with CTE", "bthci_cmd.sync_cte_type.sync_only_with_cte",
9145
14
            FT_BOOLEAN, 8, NULL, 0x10,
9146
14
            NULL, HFILL }
9147
14
        },
9148
14
        { &hf_bthci_cmd_sync_cte_type_reserved,
9149
14
          { "Reserved", "bthci_cmd.sync_cte_type.reserved",
9150
14
            FT_UINT8, BASE_HEX, NULL, 0xE8,
9151
14
            NULL, HFILL }
9152
14
        },
9153
14
        { &hf_bthci_cmd_cte_types,
9154
14
          { "Allowed CTE Types", "bthci_cmd.cte_types",
9155
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9156
14
            NULL, HFILL }
9157
14
        },
9158
14
        { &hf_bthci_cmd_cte_types_aoa,
9159
14
          { "AoA", "bthci_cmd.cte_types.aoa",
9160
14
            FT_BOOLEAN, 8, NULL, 0x01,
9161
14
            NULL, HFILL }
9162
14
        },
9163
14
        { &hf_bthci_cmd_cte_types_aod_1us,
9164
14
          { "AoD 1 usec slots", "bthci_cmd.cte_types.aod_1us",
9165
14
            FT_BOOLEAN, 8, NULL, 0x02,
9166
14
            NULL, HFILL }
9167
14
        },
9168
14
        { &hf_bthci_cmd_cte_types_aod_2us,
9169
14
          { "AoD 2 usec slots", "bthci_cmd.cte_types.aod_2us",
9170
14
            FT_BOOLEAN, 8, NULL, 0x04,
9171
14
            NULL, HFILL }
9172
14
        },
9173
14
        { &hf_bthci_cmd_cte_types_reserved,
9174
14
          { "Reserved", "bthci_cmd.cte_types.reserved",
9175
14
            FT_UINT8, BASE_HEX, NULL, 0xF8,
9176
14
            NULL, HFILL }
9177
14
        },
9178
14
        { &hf_bthci_cmd_service_data_past,
9179
14
          { "Service Data", "bthci_cmd.service_data_past",
9180
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9181
14
            NULL, HFILL }
9182
14
        },
9183
14
        { &hf_bthci_cmd_sync_mode,
9184
14
          { "Mode",   "bthci_cmd.sync_mode",
9185
14
            FT_UINT8, BASE_HEX, VALS(cmd_sync_mode_vals), 0x0,
9186
14
            NULL, HFILL }
9187
14
        },
9188
14
        { &hf_bthci_cmd_key_type,
9189
14
          { "Key Type",   "bthci_cmd.key_type",
9190
14
            FT_UINT8, BASE_HEX, VALS(cmd_key_type_vals), 0x0,
9191
14
            NULL, HFILL }
9192
14
        },
9193
14
        { &hf_bthci_cmd_sca_action,
9194
14
          { "Action",   "bthci_cmd.sca_action",
9195
14
            FT_UINT8, BASE_HEX, VALS(cmd_sca_action_vals), 0x0,
9196
14
            NULL, HFILL }
9197
14
        },
9198
14
        { &hf_bthci_cmd_cig_id,
9199
14
          { "CIG Id",   "bthci_cmd.cig_id",
9200
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9201
14
            NULL, HFILL }
9202
14
        },
9203
14
        { &hf_bthci_cmd_sdu_interval_c_to_p,
9204
14
          { "SDU Interval Central to Peripheral",   "bthci_cmd.sdu_interval_c_to_p",
9205
14
            FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
9206
14
            NULL, HFILL }
9207
14
        },
9208
14
        { &hf_bthci_cmd_sdu_interval_p_to_c,
9209
14
          { "SDU Interval Peripheral to Central",   "bthci_cmd.sdu_interval_p_to_c",
9210
14
            FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
9211
14
            NULL, HFILL }
9212
14
        },
9213
14
        { &hf_bthci_cmd_sdu_interval,
9214
14
          { "SDU Interval",   "bthci_cmd.sdu_interval",
9215
14
            FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
9216
14
            NULL, HFILL }
9217
14
        },
9218
14
        { &hf_bthci_cmd_peripherals_clock_accuracy,
9219
14
          { "Peripherals Clock Accuracy", "bthci_cmd.peripherals_clock_accuracy",
9220
14
            FT_UINT8, BASE_HEX, VALS(cmd_clock_accuray_vals), 0x0,
9221
14
            NULL, HFILL }
9222
14
        },
9223
14
        { &hf_bthci_cmd_packing,
9224
14
          { "Packing", "bthci_cmd.packing",
9225
14
            FT_UINT8, BASE_HEX, VALS(cmd_packing_vals), 0x0,
9226
14
            NULL, HFILL }
9227
14
        },
9228
14
        { &hf_bthci_cmd_framing,
9229
14
          { "Framing", "bthci_cmd.framing",
9230
14
            FT_UINT8, BASE_HEX, VALS(cmd_framing_vals), 0x0,
9231
14
            NULL, HFILL }
9232
14
        },
9233
14
        { &hf_bthci_cmd_ft_c_to_p,
9234
14
          { "Flush Timeout Central to Peripheral", "bthci_cmd.ft_c_to_p",
9235
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9236
14
            NULL, HFILL }
9237
14
        },
9238
14
        { &hf_bthci_cmd_ft_p_to_c,
9239
14
          { "Flush Timeout Peripheral to Central", "bthci_cmd.ft_p_to_c",
9240
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9241
14
            NULL, HFILL }
9242
14
        },
9243
14
        { &hf_bthci_cmd_iso_interval,
9244
14
          { "ISO Interval", "bthci_cmd.iso_interval",
9245
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
9246
14
            NULL, HFILL }
9247
14
        },
9248
14
        { &hf_bthci_cmd_cis_count,
9249
14
          { "CIS Count", "bthci_cmd.cis_count",
9250
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9251
14
            NULL, HFILL }
9252
14
        },
9253
14
        { &hf_bthci_cmd_cis_params,
9254
14
          { "CIS Parameters", "bthci_cmd.cis_params",
9255
14
            FT_NONE, BASE_NONE, NULL, 0x0,
9256
14
            NULL, HFILL }
9257
14
        },
9258
14
        { &hf_bthci_cmd_cis_id,
9259
14
          { "CIS Id", "bthci_cmd.cis_id",
9260
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9261
14
            NULL, HFILL }
9262
14
        },
9263
14
        { &hf_bthci_cmd_nse,
9264
14
          { "Number of Sub-Events", "bthci_cmd.nse",
9265
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9266
14
            NULL, HFILL }
9267
14
        },
9268
14
        { &hf_bthci_cmd_max_sdu_c_to_p,
9269
14
          { "Max SDU Central to Peripheral", "bthci_cmd.max_sdu_c_to_p",
9270
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9271
14
            NULL, HFILL }
9272
14
        },
9273
14
        { &hf_bthci_cmd_max_sdu_p_to_c,
9274
14
          { "Max SDU Peripheral to Central", "bthci_cmd.max_sdu_p_to_c",
9275
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9276
14
            NULL, HFILL }
9277
14
        },
9278
14
        { &hf_bthci_cmd_max_sdu,
9279
14
          { "Max SDU", "bthci_cmd.max_sdu",
9280
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9281
14
            NULL, HFILL }
9282
14
        },
9283
14
        { &hf_bthci_cmd_max_pdu_c_to_p,
9284
14
          { "Max PDU Central to Peripheral", "bthci_cmd.max_pdu_c_to_p",
9285
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9286
14
            NULL, HFILL }
9287
14
        },
9288
14
        { &hf_bthci_cmd_max_pdu_p_to_c,
9289
14
          { "Max PDU Peripheral to Central", "bthci_cmd.max_pdu_p_to_c",
9290
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9291
14
            NULL, HFILL }
9292
14
        },
9293
14
        { &hf_bthci_cmd_max_pdu,
9294
14
          { "Max PDU", "bthci_cmd.max_pdu",
9295
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
9296
14
            NULL, HFILL }
9297
14
        },
9298
14
        { &hf_bthci_cmd_phy_c_to_p,
9299
14
          { "PHY Central to Peripheral", "bthci_cmd.phy_c_to_p",
9300
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9301
14
            NULL, HFILL }
9302
14
        },
9303
14
        { &hf_bthci_cmd_phy_p_to_c,
9304
14
          { "PHY Peripheral to Central", "bthci_cmd.phy_p_to_c",
9305
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9306
14
            NULL, HFILL }
9307
14
        },
9308
14
        { &hf_bthci_cmd_bn_c_to_p,
9309
14
          { "Burst Number Central to Peripheral", "bthci_cmd.bn_c_to_p",
9310
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9311
14
            NULL, HFILL }
9312
14
        },
9313
14
        { &hf_bthci_cmd_bn_p_to_c,
9314
14
          { "Burst Number Peripheral to Central", "bthci_cmd.bn_p_to_c",
9315
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9316
14
            NULL, HFILL }
9317
14
        },
9318
14
        { &hf_bthci_cmd_bn,
9319
14
          { "Burst Number", "bthci_cmd.bn",
9320
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9321
14
            NULL, HFILL }
9322
14
        },
9323
14
        { &hf_bthci_cmd_max_transport_latency_c_to_p,
9324
14
          { "Max Transport Latency Central to Peripheral", "bthci_cmd.max_transport_latency_c_to_p",
9325
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9326
14
            NULL, HFILL }
9327
14
        },
9328
14
        { &hf_bthci_cmd_max_transport_latency_p_to_c,
9329
14
          { "Max Transport Latency Peripheral to Central", "bthci_cmd.max_transport_latency_p_to_c",
9330
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9331
14
            NULL, HFILL }
9332
14
        },
9333
14
        { &hf_bthci_cmd_max_transport_latency,
9334
14
          { "Max Transport Latency", "bthci_cmd.max_transport_latency",
9335
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
9336
14
            NULL, HFILL }
9337
14
        },
9338
14
        { &hf_bthci_cmd_rtn_c_to_p,
9339
14
          { "Max Retransmissions Central to Peripheral", "bthci_cmd.rtn_c_to_p",
9340
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9341
14
            NULL, HFILL }
9342
14
        },
9343
14
        { &hf_bthci_cmd_rtn_p_to_c,
9344
14
          { "Max Retransmissions Peripheral to Central", "bthci_cmd.rtn_p_to_c",
9345
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9346
14
            NULL, HFILL }
9347
14
        },
9348
14
        { &hf_bthci_cmd_rtn,
9349
14
          { "Max Retransmissions", "bthci_cmd.rtn",
9350
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9351
14
            NULL, HFILL }
9352
14
        },
9353
14
        { &hf_bthci_cmd_cis_handle,
9354
14
          { "CIS Handle",             "bthci_cmd.cis_handle",
9355
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9356
14
            NULL, HFILL }
9357
14
        },
9358
14
        { &hf_bthci_cmd_big_handle,
9359
14
          { "BIG Handle",             "bthci_cmd.big_handle",
9360
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9361
14
            NULL, HFILL }
9362
14
        },
9363
14
        { &hf_bthci_cmd_cis_bis_handle,
9364
14
          { "CIS/BIS Handle",             "bthci_cmd.cis_bis_handle",
9365
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9366
14
            NULL, HFILL }
9367
14
        },
9368
14
        { &hf_bthci_cmd_num_bis,
9369
14
          { "Number of BISes", "bthci_cmd.num_bis",
9370
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9371
14
            NULL, HFILL }
9372
14
        },
9373
14
        { &hf_bthci_cmd_irc,
9374
14
          { "Scheduled Payload Retransmissions", "bthci_cmd.irc",
9375
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9376
14
            NULL, HFILL }
9377
14
        },
9378
14
        { &hf_bthci_cmd_pto,
9379
14
          { "Pre-Transmission Offset", "bthci_cmd.pto",
9380
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9381
14
            NULL, HFILL }
9382
14
        },
9383
14
        { &hf_bthci_cmd_encryption,
9384
14
          { "Encryption", "bthci_cmd.encryption",
9385
14
            FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9386
14
            NULL, HFILL }
9387
14
        },
9388
14
        { &hf_bthci_cmd_broadcast_code,
9389
14
          { "Broadcast Code", "bthci_cmd.broadcast_code",
9390
14
            FT_NONE, BASE_NONE, NULL, 0x0,
9391
14
            NULL, HFILL }
9392
14
        },
9393
14
        { &hf_bthci_cmd_mse,
9394
14
          { "Max Sub-Events", "bthci_cmd.mse",
9395
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9396
14
            NULL, HFILL }
9397
14
        },
9398
14
        { &hf_bthci_cmd_bis_index,
9399
14
          { "BIS Index", "bthci_cmd.bis_index",
9400
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9401
14
            NULL, HFILL }
9402
14
        },
9403
14
        { &hf_bthci_cmd_sync_timeout,
9404
14
          { "Sync Timeout", "bthci_cmd.sync_timeout",
9405
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p01_sec), 0x0,
9406
14
            NULL, HFILL }
9407
14
        },
9408
14
        { &hf_bthci_cmd_data_path_direction,
9409
14
          { "Data Path Direction", "bthci_cmd.data_path_direction",
9410
14
            FT_UINT8, BASE_HEX, VALS(cmd_data_path_direction_vals), 0x0,
9411
14
            NULL, HFILL }
9412
14
        },
9413
14
        { &hf_bthci_cmd_data_path_id,
9414
14
          { "Data Path Id", "bthci_cmd.data_path_id",
9415
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9416
14
            NULL, HFILL }
9417
14
        },
9418
14
        { &hf_bthci_cmd_coding_format,
9419
14
          { "Coding Format", "bthci_cmd.coding_format",
9420
14
            FT_NONE, BASE_NONE, NULL, 0x0,
9421
14
            NULL, HFILL }
9422
14
        },
9423
14
        { &hf_bthci_cmd_controller_delay,
9424
14
          { "Controller Delay", "bthci_cmd.controller_delay",
9425
14
            FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
9426
14
            NULL, HFILL }
9427
14
        },
9428
14
        { &hf_bthci_cmd_codec_config_length,
9429
14
          { "Codec Configuration Length", "bthci_cmd.codec_config_length",
9430
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9431
14
            NULL, HFILL }
9432
14
        },
9433
14
        { &hf_bthci_cmd_codec_config,
9434
14
          { "Codec Configuration", "bthci_cmd.codec_config",
9435
14
            FT_NONE, BASE_NONE, NULL, 0x0,
9436
14
            NULL, HFILL }
9437
14
        },
9438
14
        { &hf_bthci_cmd_payload_type,
9439
14
          { "Payload Type", "bthci_cmd.payload_type",
9440
14
            FT_UINT8, BASE_HEX, VALS(cmd_payload_type_vals), 0x0,
9441
14
            NULL, HFILL }
9442
14
        },
9443
14
        { &hf_bthci_cmd_feature_bit_number,
9444
14
          { "Feature Bit Number", "bthci_cmd.feature_bit_number",
9445
14
            FT_UINT8, BASE_DEC, VALS(cmd_host_enabled_feature_bit_vals), 0x0,
9446
14
            NULL, HFILL }
9447
14
        },
9448
14
        { &hf_bthci_cmd_feature_bit_number2,
9449
14
          { "Feature Bit Number", "bthci_cmd.feature_bit_number",
9450
14
            FT_UINT16, BASE_DEC, VALS(cmd_host_enabled_feature_bit_vals), 0x0,
9451
14
            NULL, HFILL }
9452
14
        },
9453
14
        { &hf_bthci_cmd_feature_bit_value,
9454
14
          { "Feature Bit Value", "bthci_cmd.feature_bit_value",
9455
14
            FT_UINT8, BASE_HEX, VALS(cmd_en_disabled), 0x0,
9456
14
            NULL, HFILL }
9457
14
        },
9458
14
        { &hf_bthci_cmd_phy_and_coding,
9459
14
          { "PHY", "bthci_cmd.phy_and_coding",
9460
14
            FT_UINT8, BASE_HEX, VALS(cmd_phy_and_coding_vals), 0x0,
9461
14
            NULL, HFILL }
9462
14
        },
9463
14
        { &hf_bthci_cmd_high_threshold,
9464
14
          { "High Threshold", "bthci_cmd.high_threshold",
9465
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_decibels), 0x0,
9466
14
            NULL, HFILL }
9467
14
        },
9468
14
        { &hf_bthci_cmd_high_hysteresis,
9469
14
          { "High Hysteresis", "bthci_cmd.high_hysteresis",
9470
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_decibels), 0x0,
9471
14
            NULL, HFILL }
9472
14
        },
9473
14
        { &hf_bthci_cmd_low_threshold,
9474
14
          { "Low Threshold", "bthci_cmd.low_threshold",
9475
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_decibels), 0x0,
9476
14
            NULL, HFILL }
9477
14
        },
9478
14
        { &hf_bthci_cmd_low_hysteresis,
9479
14
          { "Low Hysteresis", "bthci_cmd.low_hysteresis",
9480
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_decibels), 0x0,
9481
14
            NULL, HFILL }
9482
14
        },
9483
14
        { &hf_bthci_cmd_min_time_spent,
9484
14
          { "Minimum Observation Time", "bthci_cmd.min_time_spent",
9485
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
9486
14
            NULL, HFILL }
9487
14
        },
9488
14
        { &hf_bthci_cmd_local_reporting_enable,
9489
14
          { "Local Reporting Enable", "bthci_cmd.local_reporting_enable",
9490
14
            FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9491
14
            NULL, HFILL }
9492
14
        },
9493
14
        { &hf_bthci_cmd_remote_reporting_enable,
9494
14
          { "Remote Reporting Enable", "bthci_cmd.remote_reporting_enable",
9495
14
            FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
9496
14
            NULL, HFILL }
9497
14
        },
9498
14
        { &hf_bthci_cmd_addr_change_reasons,
9499
14
          { "Address Change Reasons", "bthci_cmd.addr_change_reasons",
9500
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9501
14
            NULL, HFILL }
9502
14
        },
9503
14
        { &hf_bthci_cmd_addr_change_reasons_adv_data,
9504
14
          { "Advertising Data Changed", "bthci_cmd.addr_change_reasons.adv_data",
9505
14
            FT_BOOLEAN, 8, NULL, 0x01,
9506
14
            NULL, HFILL }
9507
14
        },
9508
14
        { &hf_bthci_cmd_addr_change_reasons_scan_rsp_data,
9509
14
          { "Scan Response Data Changed", "bthci_cmd.addr_change_reasons.scan_rsp_data",
9510
14
            FT_BOOLEAN, 8, NULL, 0x02,
9511
14
            NULL, HFILL }
9512
14
        },
9513
14
        { &hf_bthci_cmd_addr_change_reasons_reserved,
9514
14
          { "Reserved", "bthci_cmd.addr_change_reasons.reserved",
9515
14
            FT_UINT8, BASE_HEX, NULL, 0xFC,
9516
14
            NULL, HFILL }
9517
14
        },
9518
14
        { &hf_bthci_cmd_subrate_factor_min,
9519
14
          { "Minimum Subrate Factor", "bthci_cmd.subrate_min",
9520
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
9521
14
            NULL, HFILL }
9522
14
        },
9523
14
        { &hf_bthci_cmd_subrate_factor_max,
9524
14
          { "Maximum Subrate Factor", "bthci_cmd.subrate_max",
9525
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
9526
14
            NULL, HFILL }
9527
14
        },
9528
14
        { &hf_bthci_cmd_continuation_number,
9529
14
          { "Continuation Number", "bthci_cmd.continuation_number",
9530
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
9531
14
            NULL, HFILL }
9532
14
        },
9533
14
        { &hf_bthci_cmd_primary_adv_phy_options,
9534
14
          { "Primary Adv PHY Options", "bthci_cmd.primary_adv_phy_options",
9535
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_phy_options_vals), 0x0,
9536
14
            NULL, HFILL }
9537
14
        },
9538
14
        { &hf_bthci_cmd_secondary_adv_phy_options,
9539
14
          { "Primary Adv PHY Options", "bthci_cmd.secondary_adv_phy_options",
9540
14
            FT_UINT8, BASE_HEX, VALS(cmd_le_phy_options_vals), 0x0,
9541
14
            NULL, HFILL }
9542
14
        },
9543
14
        { &hf_bthci_cmd_num_subevents,
9544
14
          { "Number of Sub-events", "bthci_cmd.num_subevents",
9545
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9546
14
            NULL, HFILL }
9547
14
        },
9548
14
        { &hf_bthci_cmd_subevent_interval,
9549
14
          { "Sub-event Interval", "bthci_cmd.subevent_interval",
9550
14
            FT_UINT8, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
9551
14
            NULL, HFILL }
9552
14
        },
9553
14
        { &hf_bthci_cmd_response_slot_delay,
9554
14
          { "Response Slot Delay", "bthci_cmd.resp_slot_delay",
9555
14
            FT_UINT8, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
9556
14
            NULL, HFILL }
9557
14
        },
9558
14
        { &hf_bthci_cmd_response_slot_spacing,
9559
14
          { "Response Slot Spacing", "bthci_cmd.resp_slot_spacing",
9560
14
            FT_UINT8, BASE_CUSTOM, CF_FUNC(bluetooth_unit_1p25_ms), 0x0,
9561
14
            NULL, HFILL }
9562
14
        },
9563
14
        { &hf_bthci_cmd_num_response_slots,
9564
14
          { "Response Slots", "bthci_cmd.num_resp_slots",
9565
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9566
14
            NULL, HFILL }
9567
14
        },
9568
14
        { &hf_bthci_cmd_subevent,
9569
14
          { "Sub-event", "bthci_cmd.subevent",
9570
14
            FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_not_used_0xff_special), 0x0,
9571
14
            NULL, HFILL }
9572
14
        },
9573
14
        { &hf_bthci_cmd_subevents,
9574
14
          { "Sub-events", "bthci_cmd.subevents",
9575
14
            FT_NONE, BASE_NONE, NULL, 0x0,
9576
14
            NULL, HFILL }
9577
14
        },
9578
14
        { &hf_bthci_cmd_response_slot_start,
9579
14
          { "Response Slot Start", "bthci_cmd.resp_slot_start",
9580
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9581
14
            NULL, HFILL }
9582
14
        },
9583
14
        { &hf_bthci_cmd_response_slot_count,
9584
14
          { "Response Slot Count", "bthci_cmd.resp_slot_count",
9585
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9586
14
            NULL, HFILL }
9587
14
        },
9588
14
        { &hf_bthci_cmd_subevent_data_length,
9589
14
          { "Sub-event Data Length", "bthci_cmd.subevent_data_length",
9590
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9591
14
            NULL, HFILL }
9592
14
        },
9593
14
        { &hf_bthci_cmd_request_event,
9594
14
          { "Request Event", "bthci_cmd.request_event",
9595
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
9596
14
            NULL, HFILL }
9597
14
        },
9598
14
        { &hf_bthci_cmd_request_subevent,
9599
14
          { "Request Sub-event", "bthci_cmd.request_subevent",
9600
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9601
14
            NULL, HFILL }
9602
14
        },
9603
14
        { &hf_bthci_cmd_response_subevent,
9604
14
          { "Response Sub-event", "bthci_cmd.response_subevent",
9605
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9606
14
            NULL, HFILL }
9607
14
        },
9608
14
        { &hf_bthci_cmd_response_slot,
9609
14
          { "Response Slot", "bthci_cmd.response_slot",
9610
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9611
14
            NULL, HFILL }
9612
14
        },
9613
14
        { &hf_bthci_cmd_response_data_length,
9614
14
          { "Response Data Length", "bthci_cmd.response_data_length",
9615
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9616
14
            NULL, HFILL }
9617
14
        },
9618
14
        { &hf_bthci_cmd_pages_requested,
9619
14
          { "Pages Requested", "bthci_cmd.pages_requested",
9620
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9621
14
            NULL, HFILL }
9622
14
        },
9623
14
        { &hf_bthci_cmd_config_id,
9624
14
          { "Config Id", "bthci_cmd.config_id",
9625
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9626
14
            NULL, HFILL }
9627
14
        },
9628
14
        { &hf_bthci_cmd_cs_roles,
9629
14
          { "Roles", "bthci_cmd.cs_roles",
9630
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9631
14
            NULL, HFILL }
9632
14
        },
9633
14
        { &hf_bthci_cmd_cs_roles_initiator,
9634
14
          { "Initiator", "bthci_cmd.cs_roles.initiator",
9635
14
            FT_BOOLEAN, 8, NULL, 0x01,
9636
14
            NULL, HFILL }
9637
14
        },
9638
14
        { &hf_bthci_cmd_cs_roles_reflector,
9639
14
          { "Reflector", "bthci_cmd.cs_roles.reflector",
9640
14
            FT_BOOLEAN, 8, NULL, 0x02,
9641
14
            NULL, HFILL }
9642
14
        },
9643
14
        { &hf_bthci_cmd_cs_roles_reserved,
9644
14
          { "Reserved", "bthci_cmd.cs_roles.reserved",
9645
14
            FT_UINT8, BASE_HEX, NULL, 0xfc,
9646
14
            NULL, HFILL }
9647
14
        },
9648
14
        { &hf_bthci_cmd_cs_sync_antenna_selection,
9649
14
          { "CS Sync Antenna Selection", "bthci_cmd.cs_sync_antenna_selection",
9650
14
            FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(cs_sync_antenna_special), 0x0,
9651
14
            NULL, HFILL }
9652
14
        },
9653
14
        { &hf_bthci_cmd_num_config,
9654
14
          { "Number of Configurations", "bthci_cmd.num_config",
9655
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9656
14
            NULL, HFILL }
9657
14
        },
9658
14
        { &hf_bthci_cmd_max_consecutive_procedures,
9659
14
          { "Max Consecutive Procedures", "bthci_cmd.max_consecutive_procedures",
9660
14
            FT_UINT16, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_procedure_count_special), 0x0,
9661
14
            NULL, HFILL }
9662
14
        },
9663
14
        { &hf_bthci_cmd_num_antennas_supported,
9664
14
          { "Number of Antennas Supported", "bthci_cmd.num_antennas_supported",
9665
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9666
14
            NULL, HFILL }
9667
14
        },
9668
14
        { &hf_bthci_cmd_max_antenna_paths_supported,
9669
14
          { "Max Antenna Paths Supported", "bthci_cmd.max_antenna_paths_supported",
9670
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9671
14
            NULL, HFILL }
9672
14
        },
9673
14
        { &hf_bthci_cmd_cs_modes_supported,
9674
14
          { "Modes Supported", "bthci_cmd.cs_modes_supported",
9675
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9676
14
            NULL, HFILL }
9677
14
        },
9678
14
        { &hf_bthci_cmd_cs_modes_supported_3,
9679
14
          { "Mode-3", "bthci_cmd.cs_modes_supported.3",
9680
14
            FT_BOOLEAN, 8, NULL, 0x01,
9681
14
            NULL, HFILL }
9682
14
        },
9683
14
        { &hf_bthci_cmd_cs_modes_supported_reserved,
9684
14
          { "Reserved", "bthci_cmd.cs_modes_supported.reserved",
9685
14
            FT_BOOLEAN, 8, NULL, 0xfe,
9686
14
            NULL, HFILL }
9687
14
        },
9688
14
        { &hf_bthci_cmd_rtt_capability,
9689
14
          { "RTT Capability", "bthci_cmd.rtt_capability",
9690
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9691
14
            NULL, HFILL }
9692
14
        },
9693
14
        { &hf_bthci_cmd_rtt_capability_coarse_precision,
9694
14
          { "10ns Coarse Precision", "bthci_cmd.rtt_capability.coarse_precision",
9695
14
            FT_BOOLEAN, 8, NULL, 0x01,
9696
14
            NULL, HFILL }
9697
14
        },
9698
14
        { &hf_bthci_cmd_rtt_capability_sounding_precision,
9699
14
          { "10ns Sounding Precision", "bthci_cmd.rtt_capability.sounding_precision",
9700
14
            FT_BOOLEAN, 8, NULL, 0x02,
9701
14
            NULL, HFILL }
9702
14
        },
9703
14
        { &hf_bthci_cmd_rtt_capability_random_precision,
9704
14
          { "10ns Random Precision", "bthci_cmd.rtt_capability.random_precision",
9705
14
            FT_BOOLEAN, 8, NULL, 0x04,
9706
14
            NULL, HFILL }
9707
14
        },
9708
14
        { &hf_bthci_cmd_rtt_capability_reserved,
9709
14
          { "Reserved", "bthci_cmd.rtt_capability.reserved",
9710
14
            FT_UINT8, BASE_HEX, NULL, 0xf8,
9711
14
            NULL, HFILL }
9712
14
        },
9713
14
        { &hf_bthci_cmd_rtt_aa_only_n,
9714
14
          { "RTT Coarse, CS Sync exchanges needed", "bthci_cmd.rtt_aa_only_n",
9715
14
            FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_not_supported_0x00_special), 0x0,
9716
14
            NULL, HFILL }
9717
14
        },
9718
14
        { &hf_bthci_cmd_rtt_sounding_n,
9719
14
          { "RTT Sounding, CS Sync exchanges needed", "bthci_cmd.rtt_sounding_n",
9720
14
            FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_not_supported_0x00_special), 0x0,
9721
14
            NULL, HFILL }
9722
14
        },
9723
14
        { &hf_bthci_cmd_rtt_random_n,
9724
14
          { "RTT Random Payload, CS Sync exchanges needed", "bthci_cmd.rtt_random_n",
9725
14
            FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_not_supported_0x00_special), 0x0,
9726
14
            NULL, HFILL }
9727
14
        },
9728
14
        { &hf_bthci_cmd_nadm_sounding_capability,
9729
14
          { "Optional NADM Sounding Capability", "bthci_cmd.optional_nadm_sounding_capability",
9730
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9731
14
            NULL, HFILL }
9732
14
        },
9733
14
        { &hf_bthci_cmd_nadm_sounding_capability_supported,
9734
14
          { "Phase-based NADM Metric", "bthci_cmd.optional_nadm_sounding_capability.supported",
9735
14
            FT_BOOLEAN, 16, NULL, 0x01,
9736
14
            NULL, HFILL }
9737
14
        },
9738
14
        { &hf_bthci_cmd_nadm_sounding_capability_reserved,
9739
14
          { "Reserved", "bthci_cmd.optional_nadm_sounding_capability.reserved",
9740
14
            FT_UINT16, BASE_HEX, NULL, 0xfe,
9741
14
            NULL, HFILL }
9742
14
        },
9743
14
        { &hf_bthci_cmd_nadm_random_capability,
9744
14
          { "Optional NADM Random Capability", "bthci_cmd.optional_nadm_random_capability",
9745
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9746
14
            NULL, HFILL }
9747
14
        },
9748
14
        { &hf_bthci_cmd_nadm_random_capability_supported,
9749
14
          { "Phase-based NADM Metric", "bthci_cmd.optional_nadm_random_capability.supported",
9750
14
            FT_BOOLEAN, 16, NULL, 0x01,
9751
14
            NULL, HFILL }
9752
14
        },
9753
14
        { &hf_bthci_cmd_nadm_random_capability_reserved,
9754
14
          { "Reserved", "bthci_cmd.optional_nadm_random_capability.reserved",
9755
14
            FT_UINT16, BASE_HEX, NULL, 0xfe,
9756
14
            NULL, HFILL }
9757
14
        },
9758
14
        { &hf_bthci_cmd_cs_sync_phys_supported,
9759
14
          { "Optional CS_SYNC PHYs", "bthci_cmd.cs_sync_phys_supported",
9760
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9761
14
            NULL, HFILL }
9762
14
        },
9763
14
        { &hf_bthci_cmd_cs_sync_phys_supported_2m,
9764
14
          { "LE 2M", "bthci_cmd.cs_sync_phys_supported.2m",
9765
14
            FT_BOOLEAN, 8, NULL, 0x02,
9766
14
            NULL, HFILL }
9767
14
        },
9768
14
        { &hf_bthci_cmd_cs_sync_phys_supported_2m2bt,
9769
14
          { "LE 2M 2BT", "bthci_cmd.cs_sync_phys_supported.2m2bt",
9770
14
            FT_BOOLEAN, 8, NULL, 0x04,
9771
14
            NULL, HFILL }
9772
14
        },
9773
14
        { &hf_bthci_cmd_cs_sync_phys_supported_reserved,
9774
14
          { "Reserved", "bthci_cmd.cs_sync_phys_supported.reserved",
9775
14
            FT_UINT8, BASE_HEX, NULL, 0xf9,
9776
14
            NULL, HFILL }
9777
14
        },
9778
14
        { &hf_bthci_cmd_cs_subfeatures_supported,
9779
14
          { "Subfeatures Supported", "bthci_cmd.optional_cs_subfeatures",
9780
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9781
14
            NULL, HFILL }
9782
14
        },
9783
14
        { &hf_bthci_cmd_cs_subfeatures_companion_signal,
9784
14
          { "Companion Signal", "bthci_cmd.optional_cs_subfeatures.companion_signal",
9785
14
            FT_BOOLEAN, 16, NULL, 0x01,
9786
14
            NULL, HFILL }
9787
14
        },
9788
14
        { &hf_bthci_cmd_cs_subfeatures_freq_actuation_error,
9789
14
          { "Zero Freq. Actuation Error Relative to Mode-0 Tx in Reflector", "bthci_cmd.optional_cs_subfeatures.freq_actuation_error",
9790
14
            FT_BOOLEAN, 16, NULL, 0x02,
9791
14
            NULL, HFILL }
9792
14
        },
9793
14
        { &hf_bthci_cmd_cs_subfeatures_channel_selection_3c,
9794
14
          { "Channel Selection Algorithm #3c", "bthci_cmd.optional_cs_subfeatures.channel_selection_3c",
9795
14
            FT_BOOLEAN, 16, NULL, 0x04,
9796
14
            NULL, HFILL }
9797
14
        },
9798
14
        { &hf_bthci_cmd_cs_subfeatures_pbr_from_rtt,
9799
14
          { "Phase-based Ranging from RTT sounding sequence", "bthci_cmd.optional_cs_subfeatures.pbr_from_rtt",
9800
14
            FT_BOOLEAN, 16, NULL, 0x08,
9801
14
            NULL, HFILL }
9802
14
        },
9803
14
        { &hf_bthci_cmd_cs_subfeatures_reserved,
9804
14
          { "Reserved", "bthci_cmd.optional_cs_subfeatures.reserved",
9805
14
            FT_UINT16, BASE_HEX, NULL, 0xfff0,
9806
14
            NULL, HFILL }
9807
14
        },
9808
14
        { &hf_bthci_cmd_tip1_times_supported,
9809
14
          { "T_IP1 Times Supported", "bthci_cmd.tip1_times_supported",
9810
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9811
14
            NULL, HFILL }
9812
14
        },
9813
14
        { &hf_bthci_cmd_tip2_times_supported,
9814
14
          { "T_IP2 Times Supported", "bthci_cmd.tip2_times_supported",
9815
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9816
14
            NULL, HFILL }
9817
14
        },
9818
14
        { &hf_bthci_cmd_tip_times_supported_10us,
9819
14
          { "10 microseconds", "bthci_cmd.tip_times_supported_10us",
9820
14
            FT_BOOLEAN, 16, NULL, 0x0001,
9821
14
            NULL, HFILL }
9822
14
        },
9823
14
        { &hf_bthci_cmd_tip_times_supported_20us,
9824
14
          { "20 microseconds", "bthci_cmd.tip_times_supported_20us",
9825
14
            FT_BOOLEAN, 16, NULL, 0x0002,
9826
14
            NULL, HFILL }
9827
14
        },
9828
14
        { &hf_bthci_cmd_tip_times_supported_30us,
9829
14
          { "30 microseconds", "bthci_cmd.tip_times_supported_30us",
9830
14
            FT_BOOLEAN, 16, NULL, 0x0004,
9831
14
            NULL, HFILL }
9832
14
        },
9833
14
        { &hf_bthci_cmd_tip_times_supported_40us,
9834
14
          { "40 microseconds", "bthci_cmd.tip_times_supported_40us",
9835
14
            FT_BOOLEAN, 16, NULL, 0x0008,
9836
14
            NULL, HFILL }
9837
14
        },
9838
14
        { &hf_bthci_cmd_tip_times_supported_50us,
9839
14
          { "50 microseconds", "bthci_cmd.tip_times_supported_50us",
9840
14
            FT_BOOLEAN, 16, NULL, 0x0010,
9841
14
            NULL, HFILL }
9842
14
        },
9843
14
        { &hf_bthci_cmd_tip_times_supported_60us,
9844
14
          { "60 microseconds", "bthci_cmd.tip_times_supported_60us",
9845
14
            FT_BOOLEAN, 16, NULL, 0x0020,
9846
14
            NULL, HFILL }
9847
14
        },
9848
14
        { &hf_bthci_cmd_tip_times_supported_80us,
9849
14
          { "80 microseconds", "bthci_cmd.tip_times_supported_80us",
9850
14
            FT_BOOLEAN, 16, NULL, 0x0040,
9851
14
            NULL, HFILL }
9852
14
        },
9853
14
        { &hf_bthci_cmd_tip_times_supported_reserved,
9854
14
          { "Reserved", "bthci_cmd.tip_times_supported_reserved",
9855
14
            FT_UINT16, BASE_HEX, NULL, 0xff80,
9856
14
            NULL, HFILL }
9857
14
        },
9858
14
        { &hf_bthci_cmd_tfcs_times_supported,
9859
14
          { "T_FCS Times Supported", "bthci_cmd.tfcs_times_supported",
9860
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9861
14
            NULL, HFILL }
9862
14
        },
9863
14
        { &hf_bthci_cmd_tfcs_times_supported_15us,
9864
14
          { "15 microseconds", "bthci_cmd.tfcs_times_supported_15us",
9865
14
            FT_BOOLEAN, 16, NULL, 0x0001,
9866
14
            NULL, HFILL }
9867
14
        },
9868
14
        { &hf_bthci_cmd_tfcs_times_supported_20us,
9869
14
          { "20 microseconds", "bthci_cmd.tfcs_times_supported_20us",
9870
14
            FT_BOOLEAN, 16, NULL, 0x0002,
9871
14
            NULL, HFILL }
9872
14
        },
9873
14
        { &hf_bthci_cmd_tfcs_times_supported_30us,
9874
14
          { "30 microseconds", "bthci_cmd.tfcs_times_supported_30us",
9875
14
            FT_BOOLEAN, 16, NULL, 0x0004,
9876
14
            NULL, HFILL }
9877
14
        },
9878
14
        { &hf_bthci_cmd_tfcs_times_supported_40us,
9879
14
          { "40 microseconds", "bthci_cmd.tfcs_times_supported_40us",
9880
14
            FT_BOOLEAN, 16, NULL, 0x0008,
9881
14
            NULL, HFILL }
9882
14
        },
9883
14
        { &hf_bthci_cmd_tfcs_times_supported_50us,
9884
14
          { "50 microseconds", "bthci_cmd.tfcs_times_supported_50us",
9885
14
            FT_BOOLEAN, 16, NULL, 0x0010,
9886
14
            NULL, HFILL }
9887
14
        },
9888
14
        { &hf_bthci_cmd_tfcs_times_supported_60us,
9889
14
          { "60 microseconds", "bthci_cmd.tfcs_times_supported_60us",
9890
14
            FT_BOOLEAN, 16, NULL, 0x0020,
9891
14
            NULL, HFILL }
9892
14
        },
9893
14
        { &hf_bthci_cmd_tfcs_times_supported_80us,
9894
14
          { "80 microseconds", "bthci_cmd.tfcs_times_supported_80us",
9895
14
            FT_BOOLEAN, 16, NULL, 0x0040,
9896
14
            NULL, HFILL }
9897
14
        },
9898
14
        { &hf_bthci_cmd_tfcs_times_supported_100us,
9899
14
          { "100 microseconds", "bthci_cmd.tfcs_times_supported_100us",
9900
14
            FT_BOOLEAN, 16, NULL, 0x0080,
9901
14
            NULL, HFILL }
9902
14
        },
9903
14
        { &hf_bthci_cmd_tfcs_times_supported_120us,
9904
14
          { "120 microseconds", "bthci_cmd.tfcs_times_supported_120us",
9905
14
            FT_BOOLEAN, 16, NULL, 0x0100,
9906
14
            NULL, HFILL }
9907
14
        },
9908
14
        { &hf_bthci_cmd_tfcs_times_supported_reserved,
9909
14
          { "Reserved", "bthci_cmd.tfcs_times_supported_reserved",
9910
14
            FT_UINT16, BASE_HEX, NULL, 0xfe00,
9911
14
            NULL, HFILL }
9912
14
        },
9913
14
        { &hf_bthci_cmd_tpm_times_supported,
9914
14
          { "T_PM Times Supported", "bthci_cmd.tpm_times_supported",
9915
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
9916
14
            NULL, HFILL }
9917
14
        },
9918
14
        { &hf_bthci_cmd_tpm_times_supported_10us,
9919
14
          { "10 microseconds", "bthci_cmd.tpm_times_supported_10us",
9920
14
            FT_BOOLEAN, 16, NULL, 0x0001,
9921
14
            NULL, HFILL }
9922
14
        },
9923
14
        { &hf_bthci_cmd_tpm_times_supported_20us,
9924
14
          { "20 microseconds", "bthci_cmd.tpm_times_supported_20us",
9925
14
            FT_BOOLEAN, 16, NULL, 0x0002,
9926
14
            NULL, HFILL }
9927
14
        },
9928
14
        { &hf_bthci_cmd_tpm_times_supported_reserved,
9929
14
          { "Reserved", "bthci_cmd.tpm_times_supported_reserved",
9930
14
            FT_UINT16, BASE_HEX, NULL, 0xfffc,
9931
14
            NULL, HFILL }
9932
14
        },
9933
14
        { &hf_bthci_cmd_tsw_time_supported,
9934
14
          { "T_SW Time Supported", "bthci_cmd.tsw_time_supported",
9935
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
9936
14
            NULL, HFILL }
9937
14
        },
9938
14
        { &hf_bthci_cmd_tx_snr_capability,
9939
14
          { "Tx SNR Capability", "bthci_cmd.tx_snr_capability",
9940
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
9941
14
            NULL, HFILL }
9942
14
        },
9943
14
        { &hf_bthci_cmd_tx_snr_capability_18dB,
9944
14
          { "18 dB", "bthci_cmd.tx_snr_capability_18dB",
9945
14
            FT_BOOLEAN, 8, NULL, 0x01,
9946
14
            NULL, HFILL }
9947
14
        },
9948
14
        { &hf_bthci_cmd_tx_snr_capability_21dB,
9949
14
          { "21 dB", "bthci_cmd.tx_snr_capability_21dB",
9950
14
            FT_BOOLEAN, 8, NULL, 0x02,
9951
14
            NULL, HFILL }
9952
14
        },
9953
14
        { &hf_bthci_cmd_tx_snr_capability_24dB,
9954
14
          { "24 dB", "bthci_cmd.tx_snr_capability_24dB",
9955
14
            FT_BOOLEAN, 8, NULL, 0x04,
9956
14
            NULL, HFILL }
9957
14
        },
9958
14
        { &hf_bthci_cmd_tx_snr_capability_27dB,
9959
14
          { "27 dB", "bthci_cmd.tx_snr_capability_27dB",
9960
14
            FT_BOOLEAN, 8, NULL, 0x08,
9961
14
            NULL, HFILL }
9962
14
        },
9963
14
        { &hf_bthci_cmd_tx_snr_capability_30dB,
9964
14
          { "30 dB", "bthci_cmd.tx_snr_capability_30dB",
9965
14
            FT_BOOLEAN, 8, NULL, 0x10,
9966
14
            NULL, HFILL }
9967
14
        },
9968
14
        { &hf_bthci_cmd_tx_snr_capability_reserved,
9969
14
          { "Reserved", "bthci_cmd.tx_snr_capability_reserved",
9970
14
            FT_UINT8, BASE_HEX, NULL, 0xe0,
9971
14
            NULL, HFILL }
9972
14
        },
9973
14
        { &hf_bthci_cmd_fae_table,
9974
14
          { "FAE Table", "bthci_cmd.fae_table",
9975
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
9976
14
            NULL, HFILL }
9977
14
        },
9978
14
        { &hf_bthci_cmd_create_context,
9979
14
          { "Create Context", "bthci_cmd.create_context",
9980
14
            FT_UINT8, BASE_HEX, VALS(cmd_cs_create_context_vals), 0x0,
9981
14
            NULL, HFILL }
9982
14
        },
9983
14
        { &hf_bthci_cmd_main_mode_type,
9984
14
          { "Main Mode Type", "bthci_cmd.main_mode_type",
9985
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9986
14
            NULL, HFILL }
9987
14
        },
9988
14
        { &hf_bthci_cmd_sub_mode_type,
9989
14
          { "Sub Mode Type", "bthci_cmd.sub_mode_type",
9990
14
            FT_UINT8, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_not_used_0xff_special), 0x0,
9991
14
            NULL, HFILL }
9992
14
        },
9993
14
        { &hf_bthci_cmd_min_main_mode_steps,
9994
14
          { "Min Main Mode Steps", "bthci_cmd.min_main_mode_steps",
9995
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
9996
14
            NULL, HFILL }
9997
14
        },
9998
14
        { &hf_bthci_cmd_max_main_mode_steps,
9999
14
          { "Max Main Mode Steps", "bthci_cmd.max_main_mode_steps",
10000
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10001
14
            NULL, HFILL }
10002
14
        },
10003
14
        { &hf_bthci_cmd_main_mode_repetition,
10004
14
          { "Main Mode Repetitions", "bthci_cmd.main_mode_repetition",
10005
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10006
14
            NULL, HFILL }
10007
14
        },
10008
14
        { &hf_bthci_cmd_mode0_steps,
10009
14
          { "Mode-0 Steps", "bthci_cmd.mode0_steps",
10010
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10011
14
            NULL, HFILL }
10012
14
        },
10013
14
        { &hf_bthci_cmd_cs_role,
10014
14
          { "Role", "bthci_cmd.cs_role",
10015
14
            FT_UINT8, BASE_HEX, VALS(cmd_cs_role_vals), 0x0,
10016
14
            NULL, HFILL }
10017
14
        },
10018
14
        { &hf_bthci_cmd_rtt_type,
10019
14
          { "RTT Type", "bthci_cmd.rtt_type",
10020
14
            FT_UINT8, BASE_HEX, VALS(cmd_cs_rtt_type_vals), 0x0,
10021
14
            NULL, HFILL }
10022
14
        },
10023
14
        { &hf_bthci_cmd_cs_sync_phy,
10024
14
          { "CS Sync PHY", "bthci_cmd.cs_sync_phy",
10025
14
            FT_UINT8, BASE_HEX, VALS(cmd_cs_sync_phy_vals), 0x0,
10026
14
            NULL, HFILL }
10027
14
        },
10028
14
        { &hf_bthci_cmd_channel_map_repetition,
10029
14
          { "Channel Map Repetitions", "bthci_cmd.channel_map_repetition",
10030
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10031
14
            NULL, HFILL }
10032
14
        },
10033
14
        { &hf_bthci_cmd_channel_selection_type,
10034
14
          { "Channel Selection Type", "bthci_cmd.channel_selection_type",
10035
14
            FT_UINT8, BASE_HEX, VALS(cmd_cs_ch_selection_type_vals), 0x0,
10036
14
            NULL, HFILL }
10037
14
        },
10038
14
        { &hf_bthci_cmd_ch3c_shape,
10039
14
          { "Ch3c Shape", "bthci_cmd.ch3c_shape",
10040
14
            FT_UINT8, BASE_HEX, VALS(cmd_cs_shape_vals), 0x0,
10041
14
            NULL, HFILL }
10042
14
        },
10043
14
        { &hf_bthci_cmd_ch3c_jump,
10044
14
          { "Ch3c Jump", "bthci_cmd.ch3c_jump",
10045
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10046
14
            NULL, HFILL }
10047
14
        },
10048
14
        { &hf_bthci_cmd_companion_signal_enable,
10049
14
          { "Companion Signal Enable", "bthci_cmd.companion_signal_enable",
10050
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
10051
14
            NULL, HFILL }
10052
14
        },
10053
14
        { &hf_bthci_cmd_cs_enable,
10054
14
          { "CS Enable", "bthci_cmd.cs_enable",
10055
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
10056
14
            NULL, HFILL }
10057
14
        },
10058
14
        { &hf_bthci_cmd_max_procedure_len,
10059
14
          { "Max Procedure Length", "bthci_cmd.max_procedure_len",
10060
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
10061
14
            NULL, HFILL }
10062
14
        },
10063
14
        { &hf_bthci_cmd_min_procedure_interval,
10064
14
          { "Min Procedure Interval", "bthci_cmd.min_procedure_interval",
10065
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10066
14
            NULL, HFILL }
10067
14
        },
10068
14
        { &hf_bthci_cmd_max_procedure_interval,
10069
14
          { "Max Procedure Interval", "bthci_cmd.max_procedure_interval",
10070
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10071
14
            NULL, HFILL }
10072
14
        },
10073
14
        { &hf_bthci_cmd_max_procedure_count,
10074
14
          { "Max Procedure Count", "bthci_cmd.max_procedure_count",
10075
14
            FT_UINT16, BASE_DEC|BASE_SPECIAL_VALS, VALS(bluetooth_procedure_count_special), 0x0,
10076
14
            NULL, HFILL }
10077
14
        },
10078
14
        { &hf_bthci_cmd_min_subevent_len,
10079
14
          { "Min Subevent Length", "bthci_cmd.min_subevent_len",
10080
14
            FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10081
14
            NULL, HFILL }
10082
14
        },
10083
14
        { &hf_bthci_cmd_max_subevent_len,
10084
14
          { "Max Subevent Length", "bthci_cmd.max_subevent_len",
10085
14
            FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10086
14
            NULL, HFILL }
10087
14
        },
10088
14
        { &hf_bthci_cmd_subevent_len,
10089
14
          { "Subevent Length", "bthci_cmd.subevent_len",
10090
14
            FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10091
14
            NULL, HFILL }
10092
14
        },
10093
14
        { &hf_bthci_cmd_tone_antenna_selection,
10094
14
          { "Antenna Config Selection Index", "bthci_cmd.tone_antenna_selection",
10095
14
            FT_UINT8, BASE_HEX, VALS(cmd_aci_vals), 0x0,
10096
14
            NULL, HFILL }
10097
14
        },
10098
14
        { &hf_bthci_cmd_tx_pwr_delta,
10099
14
          {"Tx Power Delta (dB)", "bthci_cmd.tx_pwr_delta",
10100
14
           FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_decibels), 0x0,
10101
14
           NULL, HFILL}
10102
14
        },
10103
14
        { &hf_bthci_cmd_preferred_peer_antenna,
10104
14
          { "Preferred Peer Antenna", "bthci_cmd.preferred_peer_antenna",
10105
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
10106
14
            NULL, HFILL }
10107
14
        },
10108
14
        { &hf_bthci_cmd_preferred_peer_antenna_first,
10109
14
          { "1st Ordered Element", "bthci_cmd.preferred_peer_antenna.first",
10110
14
            FT_BOOLEAN, 8, NULL, 0x01,
10111
14
            NULL, HFILL }
10112
14
        },
10113
14
        { &hf_bthci_cmd_preferred_peer_antenna_second,
10114
14
          { "2nd Ordered Element", "bthci_cmd.preferred_peer_antenna.second",
10115
14
            FT_BOOLEAN, 8, NULL, 0x02,
10116
14
            NULL, HFILL }
10117
14
        },
10118
14
        { &hf_bthci_cmd_preferred_peer_antenna_third,
10119
14
          { "3rd Ordered Element", "bthci_cmd.preferred_peer_antenna.third",
10120
14
            FT_BOOLEAN, 8, NULL, 0x04,
10121
14
            NULL, HFILL }
10122
14
        },
10123
14
        { &hf_bthci_cmd_preferred_peer_antenna_fourth,
10124
14
          { "4th Ordered Element", "bthci_cmd.preferred_peer_antenna.fourth",
10125
14
            FT_BOOLEAN, 8, NULL, 0x08,
10126
14
            NULL, HFILL }
10127
14
        },
10128
14
        { &hf_bthci_cmd_preferred_peer_antenna_reserved,
10129
14
          { "Reserved", "bthci_cmd.preferred_peer_antenna.reserved",
10130
14
            FT_UINT8, BASE_HEX, NULL, 0xF0,
10131
14
            NULL, HFILL }
10132
14
        },
10133
14
        { &hf_bthci_cmd_snr_control_initiator,
10134
14
          { "SNR Adjustment, Initiator", "bthci_cmd.snr_control_initiator",
10135
14
            FT_UINT8, BASE_HEX, VALS(cmd_snr_control_vals), 0x0,
10136
14
            NULL, HFILL }
10137
14
        },
10138
14
        { &hf_bthci_cmd_snr_control_reflector,
10139
14
          { "SNR Adjustment, Reflector", "bthci_cmd.snr_control_reflector",
10140
14
            FT_UINT8, BASE_HEX, VALS(cmd_snr_control_vals), 0x0,
10141
14
            NULL, HFILL }
10142
14
        },
10143
14
        { &hf_bthci_cmd_cs_subevent_interval,
10144
14
          { "Subevent Interval", "bthci_cmd.cs_subevent_interval",
10145
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p625_ms), 0x0,
10146
14
            NULL, HFILL }
10147
14
        },
10148
14
        { &hf_bthci_cmd_max_num_subevents,
10149
14
          { "Max Num Subevents", "bthci_cmd.max_num_subevents",
10150
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10151
14
            NULL, HFILL }
10152
14
        },
10153
14
        { &hf_bthci_cmd_tx_power_setting,
10154
14
          { "Tx Power Level", "bthci_cmd.tx_power_setting",
10155
14
            FT_INT8, BASE_CUSTOM, CF_FUNC(tx_power_setting), 0x0,
10156
14
            NULL, HFILL }
10157
14
        },
10158
14
        { &hf_bthci_cmd_t_ip1_time,
10159
14
          { "T_IP1 Time", "bthci_cmd.t_ip1_time",
10160
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10161
14
            NULL, HFILL }
10162
14
        },
10163
14
        { &hf_bthci_cmd_t_ip2_time,
10164
14
          { "T_IP2 Time", "bthci_cmd.t_ip2_time",
10165
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10166
14
            NULL, HFILL }
10167
14
        },
10168
14
        { &hf_bthci_cmd_t_fcs_time,
10169
14
          { "T_FCS Time", "bthci_cmd.t_fcs_time",
10170
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10171
14
            NULL, HFILL }
10172
14
        },
10173
14
        { &hf_bthci_cmd_t_pm_time,
10174
14
          { "T_PM Time", "bthci_cmd.t_pm_time",
10175
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10176
14
            NULL, HFILL }
10177
14
        },
10178
14
        { &hf_bthci_cmd_t_sw_time,
10179
14
          { "T_SW Time", "bthci_cmd.t_sw_time",
10180
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10181
14
            NULL, HFILL }
10182
14
        },
10183
14
        { &hf_bthci_cmd_drbg_nonce,
10184
14
          { "DRBG Nonce", "bthci_cmd.drbg_nonce",
10185
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
10186
14
            NULL, HFILL }
10187
14
        },
10188
14
        { &hf_bthci_cmd_cs_override_config,
10189
14
          { "Override Config", "bthci_cmd.cs_override_config",
10190
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
10191
14
            NULL, HFILL }
10192
14
        },
10193
14
        { &hf_bthci_cmd_override_config_reserved,
10194
14
          { "Reserved", "bthci_cmd.override_config.reserved",
10195
14
            FT_UINT16, BASE_HEX, NULL, 0xFA02,
10196
14
            NULL, HFILL }
10197
14
        },
10198
14
        { &hf_bthci_cmd_override_config_channel_list,
10199
14
          { "Channel List", "bthci_cmd.override_config.channel_list",
10200
14
            FT_BOOLEAN, 16, NULL, 0x0001,
10201
14
            NULL, HFILL }
10202
14
        },
10203
14
        { &hf_bthci_cmd_override_config_main_mode_steps,
10204
14
          { "Main Mode Steps", "bthci_cmd.override_config.main_mode_steps",
10205
14
            FT_BOOLEAN, 16, NULL, 0x0004,
10206
14
            NULL, HFILL }
10207
14
        },
10208
14
        { &hf_bthci_cmd_override_config_tpm_tone_ext,
10209
14
          { "T_PM Tone Extension", "bthci_cmd.override_config.tpm_tone_ext",
10210
14
            FT_BOOLEAN, 16, NULL, 0x0008,
10211
14
            NULL, HFILL }
10212
14
        },
10213
14
        { &hf_bthci_cmd_override_config_tone_ant_permutation,
10214
14
          { "Tone Antenna Permutation", "bthci_cmd.override_config.tone_ant_permutation",
10215
14
            FT_BOOLEAN, 16, NULL, 0x0010,
10216
14
            NULL, HFILL }
10217
14
        },
10218
14
        { &hf_bthci_cmd_override_config_cs_sync_aa,
10219
14
          { "CS Sync Access Address", "bthci_cmd.override_config.cs_sync_aa",
10220
14
            FT_BOOLEAN, 16, NULL, 0x0020,
10221
14
            NULL, HFILL }
10222
14
        },
10223
14
        { &hf_bthci_cmd_override_config_ss_marker_position,
10224
14
          { "SS Marker Position", "bthci_cmd.override_config.ss_marker_position",
10225
14
            FT_BOOLEAN, 16, NULL, 0x0040,
10226
14
            NULL, HFILL }
10227
14
        },
10228
14
        { &hf_bthci_cmd_override_config_ss_marker_value,
10229
14
          { "SS Marker Value", "bthci_cmd.override_config.ss_marker_value",
10230
14
            FT_BOOLEAN, 16, NULL, 0x0080,
10231
14
            NULL, HFILL }
10232
14
        },
10233
14
        { &hf_bthci_cmd_override_config_cs_sync_data,
10234
14
          { "CS Sync Data", "bthci_cmd.override_config.cs_sync_data",
10235
14
            FT_BOOLEAN, 16, NULL, 0x0100,
10236
14
            NULL, HFILL }
10237
14
        },
10238
14
        { &hf_bthci_cmd_override_config_stable_phase_test,
10239
14
          { "Stable Phase Test", "bthci_cmd.override_config.stable_phase_test",
10240
14
            FT_BOOLEAN, 16, NULL, 0x0400,
10241
14
            NULL, HFILL }
10242
14
        },
10243
14
        { &hf_bthci_cmd_cs_override_param_length,
10244
14
          { "Override Parameter Length", "bthci_cmd.cs_override_param_length",
10245
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10246
14
            NULL, HFILL }
10247
14
        },
10248
14
        { &hf_bthci_cmd_cs_override_param_data,
10249
14
          { "Override Parameter Data", "bthci_cmd.cs_override_param_data",
10250
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
10251
14
            NULL, HFILL }
10252
14
        },
10253
14
        { &hf_bthci_cmd_adv_monitoring_enable,
10254
14
          { "Advertiser Monitoring Enable", "bthci_cmd.adv_monitoring_enable",
10255
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x0,
10256
14
            NULL, HFILL }
10257
14
        },
10258
14
        { &hf_bthci_cmd_adv_decision_data,
10259
14
          { "Decision Data", "bthci_cmd.decision_data",
10260
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
10261
14
            NULL, HFILL }
10262
14
        },
10263
14
        { &hf_bthci_cmd_adv_decision_flags,
10264
14
          { "Decision Flags", "bthci_cmd.adv_decision_flags",
10265
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
10266
14
            NULL, HFILL }
10267
14
        },
10268
14
        { &hf_bthci_cmd_adv_decision_flags_resolvable_tag,
10269
14
          { "Resolvable Tag Present", "bthci_cmd.adv_decision_flags.resolvable_tag",
10270
14
            FT_BOOLEAN, 8, NULL, 0x01,
10271
14
            NULL, HFILL }
10272
14
        },
10273
14
        { &hf_bthci_cmd_adv_decision_flags_reserved,
10274
14
          { "Reserved", "bthci_cmd.adv_decision_flags.reserved",
10275
14
            FT_UINT8, BASE_HEX, NULL, 0xFE,
10276
14
            NULL, HFILL }
10277
14
        },
10278
14
        { &hf_bthci_cmd_num_tests,
10279
14
          { "Number of Tests", "bthci_cmd.num_tests",
10280
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10281
14
            NULL, HFILL }
10282
14
        },
10283
14
        { &hf_bthci_cmd_adv_test_flags,
10284
14
          { "Test Flags", "bthci_cmd.adv_test_flags",
10285
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
10286
14
            NULL, HFILL }
10287
14
        },
10288
14
        { &hf_bthci_cmd_adv_test_flags_start_group,
10289
14
          { "Start of New Test Group", "bthci_cmd.adv_test_flags.start_group",
10290
14
            FT_BOOLEAN, 8, NULL, 0x01,
10291
14
            NULL, HFILL }
10292
14
        },
10293
14
        { &hf_bthci_cmd_adv_test_flags_data_contains_field_check_pass,
10294
14
          { "Pass If Contains Field & Match", "bthci_cmd.adv_test_flags.data_contains_field_check_pass",
10295
14
            FT_BOOLEAN, 8, NULL, 0x02,
10296
14
            NULL, HFILL }
10297
14
        },
10298
14
        { &hf_bthci_cmd_adv_test_flags_data_contains_field_check_fail,
10299
14
          { "Pass If Contains Field & No Match", "bthci_cmd.adv_test_flags.data_contains_field_check_fail",
10300
14
            FT_BOOLEAN, 8, NULL, 0x04,
10301
14
            NULL, HFILL }
10302
14
        },
10303
14
        { &hf_bthci_cmd_adv_test_flags_data_not_contain_field,
10304
14
          { "Pass If Does Not Contain Field", "bthci_cmd.adv_test_flags.data_not_contain_field",
10305
14
            FT_BOOLEAN, 8, NULL, 0x08,
10306
14
            NULL, HFILL }
10307
14
        },
10308
14
        { &hf_bthci_cmd_adv_test_flags_reserved,
10309
14
          { "Reserved", "bthci_cmd.adv_test_flags.reserved",
10310
14
            FT_UINT8, BASE_HEX, NULL, 0xF0,
10311
14
            NULL, HFILL }
10312
14
        },
10313
14
        { &hf_bthci_cmd_adv_test_field,
10314
14
          { "Test Field", "bthci_cmd.adv_test_field",
10315
14
            FT_UINT8, BASE_HEX|BASE_SPECIAL_VALS, VALS(adv_test_field_special), 0x0,
10316
14
            NULL, HFILL }
10317
14
        },
10318
14
        { &hf_bthci_cmd_adv_test_params,
10319
14
          { "Test Parameters", "bthci_cmd.adv_test_params",
10320
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
10321
14
            NULL, HFILL }
10322
14
        },
10323
14
        { &hf_bthci_cmd_rssi_threshold_low,
10324
14
          { "RSSI Threshold Low", "bthci_cmd.rssi_threshold_low",
10325
14
            FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0x0,
10326
14
            NULL, HFILL }
10327
14
        },
10328
14
        { &hf_bthci_cmd_rssi_threshold_high,
10329
14
          { "RSSI Threshold High", "bthci_cmd.rssi_threshold_high",
10330
14
            FT_INT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_dbm), 0x0,
10331
14
            NULL, HFILL }
10332
14
        },
10333
14
        { &hf_bthci_cmd_rssi_threshold_timeout,
10334
14
          { "Timeout", "bthci_cmd.rssi_threshold_timeout",
10335
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
10336
14
            NULL, HFILL }
10337
14
        },
10338
14
        { &hf_bthci_cmd_frame_space_min,
10339
14
          { "Minimum Frame Space", "bthci_cmd.frame_space_min",
10340
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10341
14
            NULL, HFILL }
10342
14
        },
10343
14
        { &hf_bthci_cmd_frame_space_max,
10344
14
          { "Maximum Frame Space", "bthci_cmd.frame_space_max",
10345
14
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microseconds), 0x0,
10346
14
            NULL, HFILL }
10347
14
        },
10348
14
        { &hf_bthci_cmd_spacing_types,
10349
14
          { "Spacing Types", "bthci_cmd.spacing_types",
10350
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
10351
14
            NULL, HFILL }
10352
14
        },
10353
14
        { &hf_bthci_cmd_spacing_types_tifs_acl_cp,
10354
14
          { "T_IFS_ACL_CP", "bthci_cmd.spacing_types.tifs_acl_cp",
10355
14
            FT_BOOLEAN, 16, NULL, 0x0001,
10356
14
            NULL, HFILL }
10357
14
        },
10358
14
        { &hf_bthci_cmd_spacing_types_tifs_acl_pc,
10359
14
          { "T_IFS_ACL_PC", "bthci_cmd.spacing_types.tifs_acl_pc",
10360
14
            FT_BOOLEAN, 16, NULL, 0x0002,
10361
14
            NULL, HFILL }
10362
14
        },
10363
14
        { &hf_bthci_cmd_spacing_types_tmces,
10364
14
          { "T_MCES", "bthci_cmd.spacing_types.tmces",
10365
14
            FT_BOOLEAN, 16, NULL, 0x0004,
10366
14
            NULL, HFILL }
10367
14
        },
10368
14
        { &hf_bthci_cmd_spacing_types_tifs_cis,
10369
14
          { "T_IFS_CIS", "bthci_cmd.spacing_types.tifs_cis",
10370
14
            FT_BOOLEAN, 16, NULL, 0x0008,
10371
14
            NULL, HFILL }
10372
14
        },
10373
14
        { &hf_bthci_cmd_spacing_types_tmss_cis,
10374
14
          { "T_MSS_CIS", "bthci_cmd.spacing_types.tmss_cis",
10375
14
            FT_BOOLEAN, 16, NULL, 0x0010,
10376
14
            NULL, HFILL }
10377
14
        },
10378
14
        { &hf_bthci_cmd_spacing_types_reserved,
10379
14
          { "Reserved", "bthci_cmd.spacing_types.reserved",
10380
14
            FT_UINT16, BASE_HEX, NULL, 0xFFE0,
10381
14
            NULL, HFILL }
10382
14
        },
10383
14
        { &hf_bthci_cmd_triggered_clock_capture,
10384
14
          { "Triggered Clock Capture", "bthci_cmd.triggered_clock_capture",
10385
14
            FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10386
14
            NULL, HFILL }
10387
14
        },
10388
14
        { &hf_bthci_cmd_lpo_allowed,
10389
14
          { "LPO Allowed", "bthci_cmd.lpo_allowed",
10390
14
            FT_UINT8, BASE_HEX, VALS(lpo_allowed_vals), 0x0,
10391
14
            NULL, HFILL }
10392
14
        },
10393
14
        { &hf_bthci_cmd_number_of_clock_captures_to_filter,
10394
14
          { "Number of Clock Captures to Filter", "bthci_cmd.number_of_clock_captures_to_filter",
10395
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10396
14
            NULL, HFILL }
10397
14
        },
10398
14
        { &hf_bthci_cmd_amp_controller_type,
10399
14
          { "Controller Type", "bthci_cmd.controller_type",
10400
14
            FT_UINT8, BASE_HEX, VALS(bthci_evt_controller_types), 0x0,
10401
14
            NULL, HFILL }
10402
14
        },
10403
14
        { &hf_bthci_cmd_dm1_acl_u_mode,
10404
14
          {"DM1 ACL-U Mode", "bthci_cmd.dm1_acl_u_mode",
10405
14
           FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10406
14
           NULL, HFILL}
10407
14
        },
10408
14
        { &hf_bthci_cmd_esco_loopback_mode,
10409
14
          {"eSCO Loopback Mode", "bthci_cmd.esco_loopback_mode",
10410
14
           FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10411
14
           NULL, HFILL}
10412
14
        },
10413
14
        { &hf_bthci_cmd_transmit_coding_format,
10414
14
          { "Transmit Coding Format", "bthci_cmd.transmit_coding_format",
10415
14
            FT_NONE, BASE_NONE, NULL, 0x0,
10416
14
            NULL, HFILL }
10417
14
        },
10418
14
        { &hf_bthci_cmd_receive_coding_format,
10419
14
          { "Receive Coding Format", "bthci_cmd.receive_coding_format",
10420
14
            FT_NONE, BASE_NONE, NULL, 0x0,
10421
14
            NULL, HFILL }
10422
14
        },
10423
14
        { &hf_bthci_cmd_input_coding_format,
10424
14
          { "Input Coding Format", "bthci_cmd.input_coding_format",
10425
14
            FT_NONE, BASE_NONE, NULL, 0x0,
10426
14
            NULL, HFILL }
10427
14
        },
10428
14
        { &hf_bthci_cmd_output_coding_format,
10429
14
          { "Output Coding Format", "bthci_cmd.output_coding_format",
10430
14
            FT_NONE, BASE_NONE, NULL, 0x0,
10431
14
            NULL, HFILL }
10432
14
        },
10433
14
        { &hf_bthci_cmd_codec_id,
10434
14
          { "Codec", "bthci_cmd.codec_id",
10435
14
            FT_UINT8, BASE_HEX, VALS(bthci_evt_codec_id_vals), 0x0,
10436
14
            NULL, HFILL }
10437
14
        },
10438
14
        { &hf_bthci_cmd_company_id,
10439
14
          { "Company ID",                        "bthci_cmd.company_id",
10440
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
10441
14
            NULL, HFILL }
10442
14
        },
10443
14
        { &hf_bthci_cmd_vendor_codec_id,
10444
14
          { "Vendor Codec ID", "bthci_cmd.vendor_codec_id",
10445
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
10446
14
            NULL, HFILL }
10447
14
        },
10448
14
        { &hf_bthci_cmd_transmit_codec_frame_size,
10449
14
          { "Transmit Codec Frame Size", "bthci_cmd.transmit_codec_frame_size",
10450
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10451
14
            NULL, HFILL }
10452
14
        },
10453
14
        { &hf_bthci_cmd_receive_codec_frame_size,
10454
14
          { "Receive Codec Frame Size", "bthci_cmd.receive_codec_frame_size",
10455
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10456
14
            NULL, HFILL }
10457
14
        },
10458
14
        { &hf_bthci_cmd_input_bandwidth,
10459
14
          { "Input Bandwidth", "bthci_cmd.input_bandwidth",
10460
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
10461
14
            NULL, HFILL }
10462
14
        },
10463
14
        { &hf_bthci_cmd_output_bandwidth,
10464
14
          { "Output Bandwidth", "bthci_cmd.output_bandwidth",
10465
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
10466
14
            NULL, HFILL }
10467
14
        },
10468
14
        { &hf_bthci_cmd_input_coded_data_size,
10469
14
          { "Input Coded Data Size", "bthci_cmd.input_coded_data_size",
10470
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10471
14
            NULL, HFILL }
10472
14
        },
10473
14
        { &hf_bthci_cmd_output_coded_data_size,
10474
14
          { "Output Coded Data Size", "bthci_cmd.output_coded_data_size",
10475
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10476
14
            NULL, HFILL }
10477
14
        },
10478
14
        { &hf_bthci_cmd_input_pcm_data_format,
10479
14
          { "Input PCM Data Format", "bthci_cmd.input_pcm_data_format",
10480
14
            FT_UINT8, BASE_HEX, VALS(pcm_data_format_vals), 0x0,
10481
14
            NULL, HFILL }
10482
14
        },
10483
14
        { &hf_bthci_cmd_output_pcm_data_format,
10484
14
          { "Output PCM Data Format", "bthci_cmd.output_pcm_data_format",
10485
14
            FT_UINT8, BASE_HEX, VALS(pcm_data_format_vals), 0x0,
10486
14
            NULL, HFILL }
10487
14
        },
10488
14
        { &hf_bthci_cmd_input_pcm_sample_payload_msb_position,
10489
14
          { "Input PCM Sample Payload MSB Position", "bthci_cmd.input_pcm_sample_payload_msb_position",
10490
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10491
14
            NULL, HFILL }
10492
14
        },
10493
14
        { &hf_bthci_cmd_output_pcm_sample_payload_msb_position,
10494
14
          { "Output PCM Sample Payload MSB Position", "bthci_cmd.output_pcm_sample_payload_msb_position",
10495
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10496
14
            NULL, HFILL }
10497
14
        },
10498
14
        { &hf_bthci_cmd_input_data_path,
10499
14
          { "Input Data Path", "bthci_cmd.input_data_path",
10500
14
            FT_UINT8, BASE_RANGE_STRING, RVALS(audio_data_path_rvals), 0x0,
10501
14
            NULL, HFILL }
10502
14
        },
10503
14
        { &hf_bthci_cmd_output_data_path,
10504
14
          { "Output Data Path", "bthci_cmd.output_data_path",
10505
14
            FT_UINT8, BASE_RANGE_STRING, RVALS(audio_data_path_rvals), 0x0,
10506
14
            NULL, HFILL }
10507
14
        },
10508
14
        { &hf_bthci_cmd_input_transport_unit_size,
10509
14
          { "Input Transport Unit Size", "bthci_cmd.input_transport_unit_size",
10510
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10511
14
            NULL, HFILL }
10512
14
        },
10513
14
        { &hf_bthci_cmd_output_transport_unit_size,
10514
14
          { "Output Transport Unit Size", "bthci_cmd.output_transport_unit_size",
10515
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10516
14
            NULL, HFILL }
10517
14
        },
10518
14
        { &hf_bthci_cmd_connectionless_peripheral_broadcast,
10519
14
          { "Connectionless Peripheral Broadcast", "bthci_cmd.connectionless_peripheral_broadcast",
10520
14
            FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10521
14
            NULL, HFILL }
10522
14
        },
10523
14
        { &hf_bthci_cmd_lt_addr,
10524
14
          { "LT_ADDR", "bthci_cmd.lt_addr",
10525
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
10526
14
            NULL, HFILL }
10527
14
        },
10528
14
        { &hf_bthci_cmd_interval_min,
10529
14
          { "Min Interval", "bthci_cmd.interval.min",
10530
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10531
14
            NULL, HFILL }
10532
14
        },
10533
14
        { &hf_bthci_cmd_interval_max,
10534
14
          { "Max Interval", "bthci_cmd.interval.max",
10535
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10536
14
            NULL, HFILL }
10537
14
        },
10538
14
        { &hf_bthci_cmd_cpb_supervision_to,
10539
14
          { "Supervision To", "bthci_cmd.cpb_supervision_to",
10540
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10541
14
            NULL, HFILL }
10542
14
        },
10543
14
        { &hf_bthci_cmd_connectionless_peripheral_broadcast_receive,
10544
14
          { "Connectionless Peripheral Broadcast Receive", "bthci_cmd.connectionless_peripheral_broadcast_receive",
10545
14
            FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10546
14
            NULL, HFILL }
10547
14
        },
10548
14
        { &hf_bthci_cmd_clock_offset_32,
10549
14
          { "Clock Offset", "bthci_cmd.clock_offset_32",
10550
14
            FT_UINT32, BASE_HEX, NULL, 0x0FFFFFFF,
10551
14
            "Bits 0-27 of the Clock Offset between CLKNreceiver-CLKNtransmitter", HFILL }
10552
14
        },
10553
14
        { &hf_bthci_cmd_next_cpb_clock,
10554
14
          { "Next CPB Clock", "bthci_cmd.next_cpb_clock",
10555
14
            FT_UINT32, BASE_HEX, NULL, 0x0FFFFFFF,
10556
14
            "Bits 0-27 of the Clock Offset between CLKperipheral-CLK", HFILL }
10557
14
        },
10558
14
        { &hf_bthci_cmd_remote_timing_accuracy,
10559
14
          { "Remote Timing Accuracy", "bthci_cmd.remote_timing_accuracy",
10560
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10561
14
            NULL, HFILL }
10562
14
        },
10563
14
        { &hf_bthci_cmd_cpb_skip,
10564
14
          { "CPB Skip", "bthci_cmd.cpb_skip",
10565
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10566
14
            NULL, HFILL }
10567
14
        },
10568
/* TODO: More detailed dissection */
10569
14
        { &hf_bthci_cmd_channel_map,
10570
14
          {"Channel Map", "bthci_cmd.channel_map",
10571
14
           FT_BYTES, BASE_NONE, NULL, 0x0,
10572
14
           NULL, HFILL}
10573
14
        },
10574
14
        { &hf_bthci_cmd_synchronization_scan_to,
10575
14
          { "Synchronization Scan To", "bthci_cmd.synchronization_scan_to",
10576
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10577
14
            NULL, HFILL }
10578
14
        },
10579
14
        { &hf_bthci_cmd_c192,
10580
14
          { "C 192", "bthci_cmd.c192",
10581
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
10582
14
            NULL, HFILL }
10583
14
        },
10584
14
        { &hf_bthci_cmd_r192,
10585
14
          { "R 192", "bthci_cmd.r192",
10586
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
10587
14
            NULL, HFILL }
10588
14
        },
10589
14
        { &hf_bthci_cmd_c256,
10590
14
          { "C 256", "bthci_cmd.c256",
10591
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
10592
14
            NULL, HFILL }
10593
14
        },
10594
14
        { &hf_bthci_cmd_r256,
10595
14
          { "R 256", "bthci_cmd.r256",
10596
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
10597
14
            NULL, HFILL }
10598
14
        },
10599
14
        { &hf_bthci_mws_channel,
10600
14
          { "MWS Channel", "bthci_cmd.mws_channel",
10601
14
            FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10602
14
            NULL, HFILL }
10603
14
        },
10604
/* TODO: Add units */
10605
14
        { &hf_bthci_mws_rx_center_frequency,
10606
14
          { "MWS RX Center Frequency", "bthci_cmd.mws_rx_center_frequency",
10607
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10608
14
            NULL, HFILL }
10609
14
        },
10610
14
        { &hf_bthci_mws_tx_center_frequency,
10611
14
          { "MWS TX Center Frequency", "bthci_cmd.mws_tx_center_frequency",
10612
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10613
14
            NULL, HFILL }
10614
14
        },
10615
/* TODO: Add units */
10616
14
        { &hf_bthci_mws_rx_channel_bandwidth,
10617
14
          { "MWS RX Channel Bandwidth", "bthci_cmd.mws_rx_channel_bandwidth",
10618
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10619
14
            NULL, HFILL }
10620
14
        },
10621
14
        { &hf_bthci_mws_tx_channel_bandwidth,
10622
14
          { "MWS TX Channel Bandwidth", "bthci_cmd.mws_tx_channel_bandwidth",
10623
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10624
14
            NULL, HFILL }
10625
14
        },
10626
14
        { &hf_bthci_mws_channel_type,
10627
14
          { "MWS Channel Type", "bthci_cmd.mws_channel_type",
10628
14
            FT_UINT8, BASE_HEX, VALS(mws_channel_type_vals), 0x0,
10629
14
            NULL, HFILL }
10630
14
        },
10631
14
        { &hf_bthci_external_frame_duration,
10632
14
          { "Frame Duration", "bthci_cmd.external_frame.duration",
10633
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10634
14
            NULL, HFILL }
10635
14
        },
10636
14
        { &hf_bthci_external_frame_sync_assert_offset,
10637
14
          { "Frame Duration", "bthci_cmd.external_frame.sync_assert.offset",
10638
14
            FT_INT16, BASE_DEC, NULL, 0x0,
10639
14
            NULL, HFILL }
10640
14
        },
10641
14
        { &hf_bthci_external_frame_sync_assert_jitter,
10642
14
          { "Frame Sync Assert Jitter", "bthci_cmd.external_frame.sync_assert.jitter",
10643
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10644
14
            NULL, HFILL }
10645
14
        },
10646
14
        { &hf_bthci_external_frame_number_of_periods,
10647
14
          { "Number of Periods", "bthci_cmd.external_frame.number_of_periods",
10648
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10649
14
            NULL, HFILL }
10650
14
        },
10651
14
        { &hf_bthci_external_frame_periods,
10652
14
          { "Periods", "bthci_cmd.external_frame.periods",
10653
14
            FT_NONE, BASE_NONE, NULL, 0x0,
10654
14
            NULL, HFILL }
10655
14
        },
10656
14
        { &hf_bthci_external_frame_period,
10657
14
          { "Period", "bthci_cmd.external_frame.period",
10658
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
10659
14
            NULL, HFILL }
10660
14
        },
10661
14
        { &hf_bthci_external_frame_period_duration,
10662
14
          { "Duration", "bthci_cmd.external_frame.period.duration",
10663
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10664
14
            NULL, HFILL }
10665
14
        },
10666
14
        { &hf_bthci_external_frame_period_type,
10667
14
          { "Type", "bthci_cmd.external_frame.period.type",
10668
14
            FT_UINT8, BASE_HEX, VALS(external_frame_period_type_vals), 0x0,
10669
14
            NULL, HFILL }
10670
14
        },
10671
14
        { &hf_bthci_mws_rx_assert_offset,
10672
14
          { "RX Assert Offset", "bthci_cmd.mws.rx_assert.offset",
10673
14
            FT_INT16, BASE_DEC, NULL, 0x0,
10674
14
            NULL, HFILL }
10675
14
        },
10676
14
        { &hf_bthci_mws_rx_assert_jitter,
10677
14
          { "RX Assert Jitter", "bthci_cmd.mws.rx_assert.jitter",
10678
14
            FT_INT16, BASE_DEC, NULL, 0x0,
10679
14
            NULL, HFILL }
10680
14
        },
10681
14
        { &hf_bthci_mws_rx_deassert_offset,
10682
14
          { "RX Deassert Offset", "bthci_cmd.mws.rx_deassert.offset",
10683
14
            FT_INT16, BASE_DEC, NULL, 0x0,
10684
14
            NULL, HFILL }
10685
14
        },
10686
14
        { &hf_bthci_mws_rx_deassert_jitter,
10687
14
          { "RX Deassert Jitter", "bthci_cmd.mws.rx_deassert.jitter",
10688
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10689
14
            NULL, HFILL }
10690
14
        },
10691
14
        { &hf_bthci_mws_tx_assert_offset,
10692
14
          { "TX Assert Offset", "bthci_cmd.mws.tx_assert.offset",
10693
14
            FT_INT16, BASE_DEC, NULL, 0x0,
10694
14
            NULL, HFILL }
10695
14
        },
10696
14
        { &hf_bthci_mws_tx_assert_jitter,
10697
14
          { "TX Assert Jitter", "bthci_cmd.mws.tx_assert.jitter",
10698
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10699
14
            NULL, HFILL }
10700
14
        },
10701
14
        { &hf_bthci_mws_tx_deassert_offset,
10702
14
          { "TX Deassert Offset", "bthci_cmd.mws.tx_deassert.offset",
10703
14
            FT_INT16, BASE_DEC, NULL, 0x0,
10704
14
            NULL, HFILL }
10705
14
        },
10706
14
        { &hf_bthci_mws_tx_deassert_jitter,
10707
14
          { "TX Deassert Jitter", "bthci_cmd.mws.tx_deassert.jitter",
10708
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10709
14
            NULL, HFILL }
10710
14
        },
10711
14
        { &hf_bthci_mws_pattern_assert_offset,
10712
14
          { "Pattern Assert Offset", "bthci_cmd.mws.pattern_assert.offset",
10713
14
            FT_INT16, BASE_DEC, NULL, 0x0,
10714
14
            NULL, HFILL }
10715
14
        },
10716
14
        { &hf_bthci_mws_pattern_assert_jitter,
10717
14
          { "Pattern Assert Jitter", "bthci_cmd.mws.pattern_assert.jitter",
10718
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10719
14
            NULL, HFILL }
10720
14
        },
10721
14
        { &hf_bthci_mws_inactivity_duration_assert_offset,
10722
14
          { "Inactivity Duration Assert Offset", "bthci_cmd.mws.inactivity_duration_assert.offset",
10723
14
            FT_INT16, BASE_DEC, NULL, 0x0,
10724
14
            NULL, HFILL }
10725
14
        },
10726
14
        { &hf_bthci_mws_inactivity_duration_assert_jitter,
10727
14
          { "Inactivity Duration Assert Jitter", "bthci_cmd.mws.inactivity_duration_assert.jitter",
10728
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10729
14
            NULL, HFILL }
10730
14
        },
10731
14
        { &hf_bthci_mws_scan_frequency_assert_offset,
10732
14
          { "Scan Frequency Assert Offset", "bthci_cmd.mws.scan_frequency_assert.offset",
10733
14
            FT_INT16, BASE_DEC, NULL, 0x0,
10734
14
            NULL, HFILL }
10735
14
        },
10736
14
        { &hf_bthci_mws_scan_frequency_assert_jitter,
10737
14
          { "Scan Frequency Assert Jitter", "bthci_cmd.mws.scan_frequency_assert.jitter",
10738
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10739
14
            NULL, HFILL }
10740
14
        },
10741
14
        { &hf_bthci_mws_priority_assert_offset_request,
10742
14
          { "Priority Assert Offset Request", "bthci_cmd.mws.priority_assert_offset_request",
10743
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10744
14
            NULL, HFILL }
10745
14
        },
10746
14
        { &hf_bthci_mws_transport_layer,
10747
14
          { "Transport Layer",  "bthci_cmd.mws.transport_layer",
10748
14
            FT_UINT8, BASE_HEX, VALS(bthci_evt_mws_transport_layer_vals), 0x0,
10749
14
            NULL, HFILL }
10750
14
        },
10751
14
        { &hf_bthci_mws_to_baud_rate,
10752
14
          { "To Baud Rate",  "bthci_cmd.mws.to_baud_rate",
10753
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
10754
14
            NULL, HFILL }
10755
14
        },
10756
14
        { &hf_bthci_mws_from_baud_rate,
10757
14
          { "From Baud Rate",  "bthci_cmd.mws.from_baud_rate",
10758
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
10759
14
            NULL, HFILL }
10760
14
        },
10761
14
        { &hf_bthci_mws_number_of_frequencies,
10762
14
          { "Number of Frequencies", "bthci_cmd.mws.number_of_frequencies",
10763
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10764
14
            NULL, HFILL }
10765
14
        },
10766
14
        { &hf_bthci_mws_scan_frequency_table,
10767
14
          { "Scan Frequency Table",  "bthci_cmd.mws.scan_frequency_table",
10768
14
            FT_NONE, BASE_NONE, NULL, 0x0,
10769
14
            NULL, HFILL }
10770
14
        },
10771
14
        { &hf_bthci_mws_scan_frequency_table_item,
10772
14
          { "Item",  "bthci_cmd.mws.scan_frequency_table.item",
10773
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
10774
14
            NULL, HFILL }
10775
14
        },
10776
14
        { &hf_bthci_mws_scan_frequency_table_item_low,
10777
14
          { "Low Frequency",  "bthci_cmd.mws.scan_frequency_table.item.low",
10778
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10779
14
            NULL, HFILL }
10780
14
        },
10781
14
        { &hf_bthci_mws_scan_frequency_table_item_high,
10782
14
          { "High Frequency",  "bthci_cmd.mws.scan_frequency_table.item.high",
10783
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10784
14
            NULL, HFILL }
10785
14
        },
10786
14
        { &hf_bthci_mws_pattern_index,
10787
14
          { "Index", "bthci_cmd.mws_pattern.index",
10788
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10789
14
            NULL, HFILL }
10790
14
        },
10791
14
        { &hf_bthci_mws_pattern_number_of_intervals,
10792
14
          { "Number of Intervals", "bthci_cmd.mws_pattern.number_of_intervals",
10793
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10794
14
            NULL, HFILL }
10795
14
        },
10796
14
        { &hf_bthci_mws_patterns,
10797
14
          { "Patterns",  "bthci_cmd.mws_pattern.patterns",
10798
14
            FT_NONE, BASE_NONE, NULL, 0x0,
10799
14
            NULL, HFILL }
10800
14
        },
10801
14
        { &hf_bthci_mws_pattern,
10802
14
          { "Pattern",  "bthci_cmd.mws_pattern.pattern",
10803
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
10804
14
            NULL, HFILL }
10805
14
        },
10806
14
        { &hf_bthci_mws_pattern_duration,
10807
14
          { "Duration",  "bthci_cmd.mws_pattern.pattern.duration",
10808
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10809
14
            NULL, HFILL }
10810
14
        },
10811
14
        { &hf_bthci_mws_pattern_type,
10812
14
          { "Type",  "bthci_cmd.mws_pattern.pattern.type",
10813
14
            FT_UINT8, BASE_HEX, VALS(mws_pattern_type_vals), 0x0,
10814
14
            NULL, HFILL }
10815
14
        },
10816
14
        { &hf_bthci_cmd_sync_train_to,
10817
14
          { "Synchronization Train To", "bthci_cmd.sync_train_to",
10818
14
            FT_UINT32, BASE_DEC, NULL, 0x0,
10819
14
            NULL, HFILL }
10820
14
        },
10821
14
        { &hf_bthci_cmd_service_data,
10822
14
          { "Service Data", "bthci_cmd.service_data",
10823
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
10824
14
            NULL, HFILL }
10825
14
        },
10826
14
        { &hf_bthci_cmd_secure_connection_host_support,
10827
14
          { "Secure Connection Host Support", "bthci_cmd.secure_connection_host_support",
10828
14
            FT_UINT8, BASE_HEX, VALS(disable_enable_vals), 0x0,
10829
14
            NULL, HFILL }
10830
14
        },
10831
14
        { &hf_bthci_cmd_cpb_fragment,
10832
14
          { "CPB Fragment", "bthci_cmd.cpb.fragment",
10833
14
            FT_UINT8, BASE_HEX, VALS(cpb_fragment_vals), 0x0,
10834
14
            NULL, HFILL }
10835
14
        },
10836
14
        { &hf_bthci_cmd_cpb_data_length,
10837
14
          { "CPB Data Length", "bthci_cmd.cpb.data_length",
10838
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
10839
14
            NULL, HFILL }
10840
14
        },
10841
14
        { &hf_bthci_cmd_cpb_data,
10842
14
          { "CPB Data", "bthci_cmd.cpb.data",
10843
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
10844
14
            NULL, HFILL }
10845
14
        },
10846
14
        { &hf_bthci_cmd_authenticated_payload_timeout,
10847
14
          { "Authenticated Payload Timeout", "bthci_cmd.authenticated_payload_timeout",
10848
14
            FT_UINT16, BASE_CUSTOM, CF_FUNC(bluetooth_unit_0p01_sec), 0x0,
10849
14
            NULL, HFILL }
10850
14
        },
10851
14
        { &hf_bthci_cmd_extended_inquiry_length,
10852
14
          { "Extended Inquiry Length",           "bthci_cmd.extended_inquiry_length",
10853
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
10854
14
            NULL, HFILL }
10855
14
        },
10856
14
        { &hf_bthci_cmd_min_encryption_key_size,
10857
14
          { "Minimum Encryption Key Size", "bthci_cmd.min_encryption_key_size",
10858
14
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_octet_octets), 0x0,
10859
14
            NULL, HFILL }
10860
14
        }
10861
14
    };
10862
10863
14
    static ei_register_info ei[] = {
10864
14
        { &ei_command_unknown_command,      { "bthci_cmd.expert.command.unknown_command", PI_PROTOCOL, PI_WARN, "Unknown command", EXPFILL }},
10865
14
        { &ei_command_parameter_unexpected, { "bthci_cmd.expert.parameter.unexpected", PI_PROTOCOL, PI_WARN, "Unexpected command parameter", EXPFILL }},
10866
14
        { &ei_command_undecoded,            { "bthci_cmd.expert.command.undecoded", PI_UNDECODED, PI_NOTE, "Command undecoded", EXPFILL }}
10867
14
    };
10868
10869
14
    static int *ett[] = {
10870
14
        &ett_bthci_cmd,
10871
14
        &ett_opcode,
10872
14
        &ett_cod,
10873
14
        &ett_cod_mask,
10874
14
        &ett_flow_spec_subtree,
10875
14
        &ett_le_channel_map,
10876
14
        &ett_event_mask_page_2,
10877
14
        &ett_le_event_mask,
10878
14
        &ett_adv_properties,
10879
14
        &ett_adv_sets,
10880
14
        &ett_phys_flags,
10881
14
        &ett_phy_param,
10882
14
        &ett_filter_policy,
10883
14
        &ett_sync_cte_type,
10884
14
        &ett_coding_format,
10885
14
        &ett_packet_type,
10886
14
        &ett_sco_packet_type,
10887
14
        &ett_periods,
10888
14
        &ett_period,
10889
14
        &ett_table,
10890
14
        &ett_table_item,
10891
14
        &ett_patterns,
10892
14
        &ett_pattern,
10893
14
        &ett_cis_params,
10894
14
        &ett_addr_change_reasons,
10895
14
        &ett_adv_subevents,
10896
14
        &ett_pref_antenna,
10897
14
        &ett_cs_roles,
10898
14
        &ett_cs_modes,
10899
14
        &ett_cs_capability,
10900
14
        &ett_cs_times,
10901
14
        &ett_adv_test_flags,
10902
14
        &ett_override_config,
10903
14
        &ett_spacing_types
10904
14
    };
10905
10906
14
    proto_bthci_cmd = proto_register_protocol("Bluetooth HCI Command", "HCI_CMD", "bthci_cmd");
10907
14
    bthci_cmd_handle = register_dissector("bthci_cmd", dissect_bthci_cmd, proto_bthci_cmd);
10908
10909
    /* Required function calls to register the header fields and subtrees used */
10910
14
    proto_register_field_array(proto_bthci_cmd, hf, array_length(hf));
10911
14
    proto_register_subtree_array(ett, array_length(ett));
10912
10913
14
    expert_bthci_cmd = expert_register_protocol(proto_bthci_cmd);
10914
14
    expert_register_field_array(expert_bthci_cmd, ei, array_length(ei));
10915
10916
14
    bthci_cmds = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
10917
10918
14
    module = prefs_register_protocol_subtree("Bluetooth", proto_bthci_cmd, NULL);
10919
14
    prefs_register_static_text_preference(module, "hci_cmd.version",
10920
14
            "Bluetooth HCI version: 4.0 (Core)",
10921
14
            "Version of protocol supported by this dissector.");
10922
14
    prefs_register_bool_preference(module, "bthci_vendor_android",
10923
14
        "Android HCI Vendor Commands/Events",
10924
14
        "Whether HCI Vendor Commands/Events should be dissected as Android specific",
10925
14
        &bthci_vendor_android);
10926
10927
14
    vendor_dissector_table = register_decode_as_next_proto(proto_bthci_cmd, "bthci_cmd.vendor",
10928
14
                                                           "BT HCI Command Vendor", bthci_cmd_vendor_prompt);
10929
14
}
10930
10931
10932
/* If this dissector uses sub-dissector registration add a registration routine.
10933
   This format is required because a script is used to find these routines and
10934
   create the code that calls these routines.
10935
   */
10936
void
10937
proto_reg_handoff_bthci_cmd(void)
10938
14
{
10939
14
    hci_vendor_table = find_dissector_table("bluetooth.vendor");
10940
10941
14
    dissector_add_uint("hci_h4.type", HCI_H4_TYPE_CMD, bthci_cmd_handle);
10942
14
    dissector_add_uint("hci_h1.type", BTHCI_CHANNEL_COMMAND, bthci_cmd_handle);
10943
14
}
10944
10945
36
#define PROTO_DATA_BLUETOOTH_EIR_AD_MANUFACTURER_COMPANY_ID  0
10946
6
#define PROTO_DATA_BLUETOOTH_EIR_AD_TDS_ORGANIZATION_ID      1
10947
10948
static void bluetooth_eir_ad_manufacturer_company_id_prompt(packet_info *pinfo, char* result)
10949
0
{
10950
0
    uint16_t *value_data;
10951
10952
0
    value_data = (uint16_t *) p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_MANUFACTURER_COMPANY_ID);
10953
0
    if (value_data)
10954
0
        snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "EIR/AD Manufacturer Company ID 0x%02x as", (unsigned) *value_data);
10955
0
    else
10956
0
        snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "Unknown EIR/AD Manufacturer");
10957
0
}
10958
10959
static void *bluetooth_eir_ad_manufacturer_company_id_value(packet_info *pinfo)
10960
0
{
10961
0
    uint16_t *value_data;
10962
10963
0
    value_data = (uint16_t *) p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_MANUFACTURER_COMPANY_ID);
10964
10965
0
    if (value_data)
10966
0
        return GUINT_TO_POINTER((unsigned long)*value_data);
10967
10968
0
    return NULL;
10969
0
}
10970
10971
static void bluetooth_eir_ad_tds_organization_id_prompt(packet_info *pinfo, char* result)
10972
0
{
10973
0
    uint8_t *value_data;
10974
10975
0
    value_data = (uint8_t *) p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_TDS_ORGANIZATION_ID);
10976
0
    if (value_data)
10977
0
        snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "TDS Organization ID 0x%02x as", (unsigned) *value_data);
10978
0
    else
10979
0
        snprintf(result, MAX_DECODE_AS_PROMPT_LEN, "Unknown TDS Organization ID");
10980
0
}
10981
10982
static void *bluetooth_eir_ad_tds_organization_id_value(packet_info *pinfo)
10983
0
{
10984
0
    uint8_t *value_data;
10985
10986
0
    value_data = (uint8_t *) p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_TDS_ORGANIZATION_ID);
10987
10988
0
    if (value_data)
10989
0
        return GUINT_TO_POINTER((unsigned long)*value_data);
10990
10991
0
    return NULL;
10992
0
}
10993
10994
static int
10995
dissect_eir_ad_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, bluetooth_eir_ad_data_t *bluetooth_eir_ad_data)
10996
82
{
10997
82
    proto_item  *entry_item;
10998
82
    proto_tree  *entry_tree;
10999
82
    proto_item  *sub_item;
11000
82
    proto_tree  *sub_tree;
11001
82
    int          offset = 0;
11002
82
    int          offset_start;
11003
82
    uint8_t      length;
11004
82
    uint8_t      sub_length;
11005
82
    uint8_t      type;
11006
82
    uint8_t      flags;
11007
82
    int          data_size;
11008
82
    int64_t      end_offset;
11009
82
    bool         has_bd_addr = false;
11010
82
    uint8_t      bd_addr[6];
11011
82
    uint8_t     *name = NULL;
11012
82
    bluetooth_uuid_t uuid;
11013
82
    uint32_t     interval, num_bis;
11014
11015
82
    DISSECTOR_ASSERT(bluetooth_eir_ad_data);
11016
11017
82
    data_size = tvb_reported_length(tvb);
11018
11019
504
    while (offset < data_size) {
11020
495
        length = tvb_get_uint8(tvb, offset);
11021
495
        if (length <= 0) break;
11022
11023
461
        type = tvb_get_uint8(tvb, offset + 1);
11024
11025
461
        entry_item = proto_tree_add_none_format(tree, hf_btcommon_eir_ad_entry, tvb, offset, length + 1, "%s",
11026
461
                val_to_str_const(type, bthci_cmd_eir_data_type_vals, "Unknown"));
11027
461
        entry_tree = proto_item_add_subtree(entry_item, ett_eir_ad_entry);
11028
11029
461
        proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_length, tvb, offset, 1, ENC_NA);
11030
461
        offset += 1;
11031
11032
461
        proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_type, tvb, offset, 1, ENC_NA);
11033
461
        offset += 1;
11034
461
        length -= 1;
11035
11036
461
        offset_start = offset;
11037
11038
461
        switch (type) {
11039
65
        case 0x01: /* Flags */
11040
65
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_reserved, tvb, offset, 1, ENC_NA);
11041
65
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_le_bredr_support_host, tvb, offset, 1, ENC_NA);
11042
65
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_le_bredr_support_controller, tvb, offset, 1, ENC_NA);
11043
65
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_bredr_not_support, tvb, offset, 1, ENC_NA);
11044
65
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_le_general_discoverable_mode, tvb, offset, 1, ENC_NA);
11045
65
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_flags_le_limited_discoverable_mode, tvb, offset, 1, ENC_NA);
11046
65
            offset += 1;
11047
11048
65
            break;
11049
2
        case 0x02: /* 16-bit Service Class UUIDs (incomplete) */
11050
11
        case 0x03: /* 16-bit Service Class UUIDs */
11051
11
        case 0x14: /* List of 16-bit Service Solicitation UUIDs */
11052
11
            end_offset = offset + length;
11053
58
            while (offset < end_offset) {
11054
47
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_uuid_16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11055
47
                offset += 2;
11056
47
            }
11057
11058
11
            break;
11059
9
        case 0x04: /* 32-bit Service Class UUIDs (incomplete) */
11060
27
        case 0x05: /* 32-bit Service Class UUIDs */
11061
32
        case 0x1F: /* List of 32-bit Service Solicitation UUIDs */
11062
32
            end_offset = offset + length;
11063
190
            while (offset < end_offset) {
11064
158
                uuid = get_bluetooth_uuid(tvb, offset, 4);
11065
158
                if (uuid.bt_uuid) {
11066
6
                    sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_uuid_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11067
6
                    proto_item_append_text(sub_item, " (%s)", val_to_str_ext_const(uuid.bt_uuid, &bluetooth_uuid_vals_ext, "Unknown"));
11068
152
                } else {
11069
152
                    sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_custom_uuid_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11070
152
                    proto_item_append_text(sub_item, " (%s)", print_bluetooth_uuid(pinfo->pool, &uuid));
11071
152
                }
11072
11073
158
                offset += 4;
11074
158
            }
11075
11076
32
            break;
11077
4
        case 0x06: /* 128-bit Service Class UUIDs (incomplete) */
11078
10
        case 0x07: /* 128-bit Service Class UUIDs */
11079
30
        case 0x15: /* List of 128-bit Service Solicitation UUIDs */
11080
30
            end_offset = offset + length;
11081
132
            while (offset < end_offset) {
11082
102
                uuid = get_bluetooth_uuid(tvb, offset, 16);
11083
102
                if (uuid.bt_uuid) {
11084
0
                    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));
11085
0
                    proto_item_append_text(sub_item, " (%s)", val_to_str_ext_const(uuid.bt_uuid, &bluetooth_uuid_vals_ext, "Unknown"));
11086
0
                }
11087
102
                else {
11088
102
                    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));
11089
102
                    proto_item_append_text(sub_item, " (%s)", print_bluetooth_uuid(pinfo->pool, &uuid));
11090
102
                }
11091
11092
102
                offset += 16;
11093
102
            }
11094
11095
30
            break;
11096
11097
1
        case 0x08: /* Device Name (shortened) */
11098
8
        case 0x09: /* Device Name */
11099
8
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_name, tvb, offset, length, ENC_UTF_8 | ENC_NA);
11100
8
            proto_item_append_text(entry_item, ": %s", tvb_format_text(pinfo->pool, tvb, offset, length));
11101
8
            if (!name || type == 0x09)
11102
6
                name = tvb_get_string_enc(pinfo->pool, tvb, offset, length, ENC_UTF_8);
11103
8
            offset += length;
11104
11105
8
            break;
11106
19
        case 0x10: /* Device ID / Security Manager TK Value */
11107
19
            if (length == 16) { /* little heuristic for recognize Security Manager TK Value */
11108
0
                sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, 16, ENC_NA);
11109
0
                expert_add_info(pinfo, sub_item, &ei_eir_ad_undecoded);
11110
0
            }
11111
19
            else if (length == 8) { /* DID */
11112
0
                uint16_t      vendor_id_source;
11113
0
                uint16_t      vendor_id;
11114
0
                uint16_t      product_id;
11115
0
                const char   *str_val;
11116
11117
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_vendor_id_source, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11118
0
                vendor_id_source = tvb_get_letohs(tvb, offset);
11119
0
                offset += 2;
11120
11121
0
                if (vendor_id_source == DID_VENDOR_ID_SOURCE_BLUETOOTH_SIG) {
11122
0
                    proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_vendor_id_bluetooth_sig, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11123
0
                }
11124
0
                else if (vendor_id_source == DID_VENDOR_ID_SOURCE_USB_FORUM) {
11125
0
                    proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_vendor_id_usb_forum, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11126
0
                }
11127
0
                else {
11128
0
                    proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_vendor_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11129
0
                }
11130
0
                vendor_id = tvb_get_letohs(tvb, offset);
11131
0
                offset += 2;
11132
11133
0
                sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_product_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11134
0
                product_id = tvb_get_letohs(tvb, offset);
11135
0
                offset += 2;
11136
11137
0
                if (vendor_id_source == DID_VENDOR_ID_SOURCE_USB_FORUM) {
11138
0
                    str_val = val_to_str_ext_const(vendor_id << 16 | product_id, &ext_usb_products_vals, "Unknown");
11139
0
                    proto_item_append_text(sub_item, " (%s)", str_val);
11140
0
                }
11141
11142
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_did_version, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11143
0
                offset += 2;
11144
0
            }
11145
19
            else {
11146
19
                sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, length, ENC_NA);
11147
19
                expert_add_info(pinfo, sub_item, &ei_command_unknown_command);
11148
19
            }
11149
11150
19
            break;
11151
0
        case 0x0A: /* Tx Power Level */
11152
0
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_tx_power, tvb, offset, 1, ENC_NA);
11153
0
            offset += 1;
11154
11155
0
            break;
11156
1
        case 0x0B: /* OOB Optional Data Length */
11157
            /* From CSS v3.pdf */
11158
1
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_ssp_oob_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11159
1
            offset += 2;
11160
11161
1
            break;
11162
31
        case 0x0C: /* BD_ADDR */
11163
            /* From CSS v3.pdf */
11164
31
            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);
11165
31
            has_bd_addr = true;
11166
31
            break;
11167
11168
7
        case 0x0D: /* Class Of Device */
11169
7
            call_dissector(btcommon_cod_handle, tvb_new_subset_length(tvb, offset, 3), pinfo, entry_tree);
11170
7
            offset += 3;
11171
11172
7
            break;
11173
1
        case 0x0E: /* Simple Pairing Hash C */
11174
7
        case 0x1D: /* Simple Pairing Hash C-256 */
11175
7
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_hash_c, tvb, offset, 16, ENC_NA);
11176
7
            offset += 16;
11177
11178
7
            break;
11179
15
        case 0x0F: /* Simple Pairing Randomizer R */
11180
20
        case 0x1E: /* Simple Pairing Randomizer R-256 */
11181
20
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_randomizer_r, tvb, offset, 16, ENC_NA);
11182
20
            offset += 16;
11183
11184
20
            break;
11185
0
        case 0x11: /* Security Manager Out of Band Flags */
11186
0
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_oob_flags_reserved, tvb, offset, 1, ENC_NA);
11187
0
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_oob_flags_address_type, tvb, offset, 1, ENC_NA);
11188
0
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_oob_flags_le_bredr_support, tvb, offset, 1, ENC_NA);
11189
0
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_oob_flags_le_supported_host, tvb, offset, 1, ENC_NA);
11190
0
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_oob_flags_data_present, tvb, offset, 1, ENC_NA);
11191
0
            offset += 1;
11192
11193
0
            break;
11194
1
        case 0x12: /* Peripheral Connection Interval Range */
11195
1
            sub_item = proto_tree_add_item(tree, hf_btcommon_eir_ad_connection_interval_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11196
1
            proto_item_append_text(sub_item, " (%g msec)", tvb_get_letohs(tvb, offset) * 1.25);
11197
1
            offset += 2;
11198
11199
1
            sub_item = proto_tree_add_item(tree, hf_btcommon_eir_ad_connection_interval_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11200
1
            proto_item_append_text(sub_item, " (%g msec)", tvb_get_letohs(tvb, offset) * 1.25);
11201
1
            offset += 2;
11202
11203
1
            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);
11204
11205
1
            break;
11206
3
        case 0x16: /* Service Data - 16 bit UUID  */
11207
3
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_uuid_16, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11208
3
            offset += 2;
11209
11210
3
            if (length - 2 > 0) {
11211
3
                uuid = get_bluetooth_uuid(tvb, offset-2, 2);
11212
3
                if (!dissector_try_string_with_data(bluetooth_eir_ad_service_uuid, print_numeric_bluetooth_uuid(pinfo->pool, &uuid),
11213
3
                        tvb_new_subset_length(tvb, offset, length - 2), pinfo, entry_tree, true, bluetooth_eir_ad_data)) {
11214
3
                    proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_service_data, tvb, offset, length - 2, ENC_NA);
11215
3
                }
11216
3
                offset += length - 2;
11217
3
            }
11218
3
            break;
11219
1
        case 0x20: /* Service Data - 32 bit UUID */
11220
1
            uuid = get_bluetooth_uuid(tvb, offset, 4);
11221
1
            if (!dissector_try_string_with_data(bluetooth_eir_ad_service_uuid, print_numeric_bluetooth_uuid(pinfo->pool, &uuid),
11222
1
                    tvb_new_subset_length(tvb, offset + 4, length - 4), pinfo, entry_tree, true, bluetooth_eir_ad_data)) {
11223
1
                if (uuid.bt_uuid) {
11224
0
                        sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_uuid_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11225
0
                        proto_item_append_text(sub_item, " (%s)", val_to_str_ext_const(uuid.bt_uuid, &bluetooth_uuid_vals_ext, "Unknown"));
11226
0
                }
11227
1
                else {
11228
1
                    sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_custom_uuid_32, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11229
1
                    proto_item_append_text(sub_item, " (%s)", print_bluetooth_uuid(pinfo->pool, &uuid));
11230
1
                }
11231
1
            }
11232
1
            offset += 4;
11233
11234
1
            if (length - 4 > 0) {
11235
1
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_service_data, tvb, offset, length - 4, ENC_NA);
11236
1
                offset += length - 4;
11237
1
            }
11238
1
            break;
11239
1
        case 0x21: /* Service Data - 128 bit UUID */
11240
1
            uuid = get_bluetooth_uuid(tvb, offset, 16);
11241
1
            if (!dissector_try_string_with_data(bluetooth_eir_ad_service_uuid, print_numeric_bluetooth_uuid(pinfo->pool, &uuid),
11242
1
                    tvb_new_subset_length(tvb, offset + 16, length - 16), pinfo, entry_tree, true, bluetooth_eir_ad_data)) {
11243
1
                if (uuid.bt_uuid) {
11244
0
                    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));
11245
0
                    proto_item_append_text(sub_item, " (%s)", val_to_str_ext_const(uuid.bt_uuid, &bluetooth_uuid_vals_ext, "Unknown"));
11246
0
                }
11247
1
                else {
11248
1
                    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));
11249
1
                    proto_item_append_text(sub_item, " (%s)", print_bluetooth_uuid(pinfo->pool, &uuid));
11250
1
                }
11251
1
            }
11252
1
            offset += 16;
11253
11254
1
            if (length - 16 > 0) {
11255
1
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_service_data, tvb, offset, length - 16, ENC_NA);
11256
1
                offset += length - 16;
11257
1
            }
11258
1
            break;
11259
2
        case 0x17: /* Public Target Address */
11260
4
        case 0x18: /* Random Target Address */
11261
4
            end_offset = offset + length;
11262
28
            while (offset < end_offset) {
11263
24
                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);
11264
24
            }
11265
11266
4
            break;
11267
0
        case 0x19: /* Appearance */
11268
0
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_appearance, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11269
0
            proto_item_append_text(entry_item, ": %s", val_to_str_const(tvb_get_letohs(tvb, offset), bthci_cmd_appearance_vals, "Unknown"));
11270
0
            offset += 2;
11271
11272
0
            break;
11273
9
        case 0x1A: /* Advertising Interval */
11274
            /* From CSS v3.pdf */
11275
9
            sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_advertising_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11276
9
            proto_item_append_text(sub_item, " (%g msec)", tvb_get_letohs(tvb, offset) * 0.625);
11277
9
            offset += 2;
11278
11279
9
            break;
11280
10
        case 0x1B: /* LE Bluetooth Device Address */
11281
10
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_bd_addr_reserved, tvb, offset, 1, ENC_NA);
11282
10
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_bd_addr_type, tvb, offset, 1, ENC_NA);
11283
10
            offset += 1;
11284
11285
10
            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);
11286
11287
10
            break;
11288
4
        case 0x1C: /* LE Role */
11289
4
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_role, tvb, offset, 1, ENC_NA);
11290
4
            offset += 1;
11291
11292
4
            break;
11293
20
        case 0x22: /* LE Secure Connections Confirmation Value" */
11294
20
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_secure_confirmation_value, tvb, offset, 16, ENC_NA);
11295
20
            offset += 16;
11296
11297
20
            break;
11298
1
        case 0x23: /* LE Secure Connections Random Value" */
11299
1
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_secure_random_value, tvb, offset, 16, ENC_NA);
11300
1
            offset += 16;
11301
11302
1
            break;
11303
0
        case 0x24: /* URI */
11304
0
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_uri, tvb, offset, length, ENC_UTF_8 | ENC_NA);
11305
0
            offset += length;
11306
11307
0
            break;
11308
7
        case 0x25: /* Indoor Positioning */
11309
7
            if (length == 0)
11310
0
                break;
11311
11312
7
            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);
11313
7
            flags = tvb_get_uint8(tvb, offset);
11314
7
            offset += 1;
11315
11316
7
            if (flags & 0x01) {
11317
6
                proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_latitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11318
6
                offset += 4;
11319
11320
6
                proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_longitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11321
6
                offset += 4;
11322
11323
6
                proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_local_north_coordinate, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11324
6
                offset += 2;
11325
11326
6
                proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_local_east_coordinate, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11327
6
                offset += 2;
11328
6
            }
11329
11330
7
            if (flags & 0x04) {
11331
6
                proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_tx_power_level, tvb, offset, 1, ENC_NA);
11332
6
                offset += 1;
11333
6
            }
11334
11335
7
            if (flags & 0x08) {
11336
2
                proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11337
2
                offset += 2;
11338
2
            }
11339
11340
7
            if (flags & 0x10) {
11341
2
                proto_tree_add_item(tree, hf_btcommon_eir_ad_ips_floor_number, tvb, offset, 1, ENC_NA);
11342
2
                offset += 1;
11343
2
            }
11344
11345
7
            if (flags & 0x20) {
11346
6
                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);
11347
6
                offset += 1;
11348
6
            }
11349
11350
7
            if (flags & 0xC0) {
11351
1
                expert_add_info(pinfo, sub_item, &ei_eir_ad_not_used);
11352
1
            }
11353
11354
7
            break;
11355
3
        case 0x26: /* Transport Discovery Data */
11356
3
            end_offset = offset + length;
11357
6
            while (offset < end_offset) {
11358
3
                uint8_t organization_id;
11359
11360
3
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_tds_organization_id, tvb, offset, 1, ENC_NA);
11361
3
                organization_id = tvb_get_uint8(tvb, offset);
11362
3
                offset += 1;
11363
11364
3
                if (p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_TDS_ORGANIZATION_ID) == NULL) {
11365
3
                    uint8_t *value_data;
11366
11367
3
                    value_data = wmem_new(wmem_file_scope(), uint8_t);
11368
3
                    *value_data = organization_id;
11369
11370
3
                    p_add_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_TDS_ORGANIZATION_ID, value_data);
11371
3
                }
11372
11373
3
                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);
11374
3
                offset += 1;
11375
11376
3
                sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_tds_data_length, tvb, offset, 1, ENC_NA);
11377
3
                sub_length = tvb_get_uint8(tvb, offset);
11378
3
                offset += 1;
11379
11380
3
                if (length > 3 && sub_length > length - 3) {
11381
2
                    expert_add_info(pinfo, sub_item, &ei_eir_ad_invalid_length);
11382
2
                }
11383
11384
3
                if (sub_length > 0) {
11385
3
                    tvbuff_t  *new_tvb;
11386
11387
3
                    new_tvb = tvb_new_subset_length(tvb, offset, sub_length);
11388
11389
3
                    if (!dissector_try_uint_with_data(bluetooth_eir_ad_tds_organization_id, organization_id, new_tvb, pinfo, tree, true, bluetooth_eir_ad_data)) {
11390
3
                        sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_tds_data, tvb, offset, sub_length, ENC_NA);
11391
3
                        expert_add_info(pinfo, sub_item, &ei_eir_ad_undecoded);
11392
3
                    }
11393
11394
3
                    offset += length;
11395
3
                }
11396
11397
3
                length -= (3 + sub_length);
11398
3
            }
11399
11400
3
            break;
11401
1
        case 0x27: {/* LE Supported Features */
11402
9
            for (uint8_t i=0; (tvb_captured_length_remaining(tvb, offset) > 0) && (i < 8); i++) {
11403
8
                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);
11404
8
                offset += 1;
11405
8
            }
11406
11407
1
            sub_length = tvb_captured_length_remaining(tvb, offset);
11408
1
            if (sub_length > 0) {
11409
1
                sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, sub_length, ENC_NA);
11410
1
                expert_add_info(pinfo, sub_item, &ei_eir_ad_unknown);
11411
1
                offset += sub_length;
11412
1
            }
11413
1
        }
11414
1
                   break;
11415
1
        case 0x28: /* Channel Map Update Indication */
11416
1
            sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_le_channel_map, tvb, offset, 5, ENC_NA);
11417
1
            sub_tree = proto_item_add_subtree(sub_item, ett_le_channel_map);
11418
11419
1
            call_dissector(btcommon_le_channel_map_handle, tvb_new_subset_length(tvb, offset, 5), pinfo, sub_tree);
11420
1
            offset += 5;
11421
11422
1
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_instant, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11423
1
            offset += 2;
11424
11425
1
            break;
11426
1
        case 0x3D: /* 3D Information Data */
11427
1
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_factory_test_mode, tvb, offset, 1, ENC_NA);
11428
1
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_reserved, tvb, offset, 1, ENC_NA);
11429
1
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_send_battery_level_report_on_startup, tvb, offset, 1, ENC_NA);
11430
1
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_battery_level_reporting, tvb, offset, 1, ENC_NA);
11431
1
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_association_notification, tvb, offset, 1, ENC_NA);
11432
1
            offset += 1;
11433
11434
1
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_path_loss_threshold, tvb, offset, 1, ENC_NA);
11435
1
            offset += 1;
11436
11437
1
            break;
11438
4
        case 0x29: /* PB-ADV */
11439
4
            if (btmesh_pbadv_handle) {
11440
4
                call_dissector(btmesh_pbadv_handle, tvb_new_subset_length(tvb, offset, length), pinfo, proto_tree_get_root(tree));
11441
4
            } else {
11442
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_mesh_pbadv, tvb, offset, length, ENC_NA);
11443
0
            }
11444
4
            offset += length;
11445
11446
4
            break;
11447
10
        case 0x2a: /* Mesh Message */
11448
10
            if (btmesh_handle) {
11449
10
                call_dissector(btmesh_handle, tvb_new_subset_length(tvb, offset, length), pinfo, proto_tree_get_root(tree));
11450
10
            } else {
11451
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_mesh_msg, tvb, offset, length, ENC_NA);
11452
0
            }
11453
10
            offset += length;
11454
11455
10
            break;
11456
1
        case 0x2b: /* Mesh Beacon */
11457
1
            if (btmesh_beacon_handle) {
11458
1
                call_dissector(btmesh_beacon_handle, tvb_new_subset_length(tvb, offset, length), pinfo, proto_tree_get_root(tree));
11459
1
            } else {
11460
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_mesh_beacon, tvb, offset, length, ENC_NA);
11461
0
            }
11462
1
            offset += length;
11463
11464
1
            break;
11465
2
        case 0x2c: /* BIGInfo */
11466
2
            sub_item = proto_tree_add_item_ret_uint(entry_tree, hf_btcommon_eir_ad_biginfo_big_offset, tvb, offset, 4, ENC_LITTLE_ENDIAN, &interval);
11467
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_big_offset_units, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11468
2
            proto_item_append_text(sub_item, " (%u usec)", interval * ((tvb_get_uint32(tvb, offset, ENC_LITTLE_ENDIAN) & 0x00004000) != 0 ? 300 : 30));
11469
2
            sub_item = proto_tree_add_item_ret_uint(entry_tree, hf_btcommon_eir_ad_biginfo_iso_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN, &interval);
11470
2
            proto_item_append_text(sub_item, " (%g msec)", interval * 1.25);
11471
2
            proto_tree_add_item_ret_uint(entry_tree, hf_btcommon_eir_ad_biginfo_num_bis, tvb, offset, 4, ENC_LITTLE_ENDIAN, &num_bis);
11472
2
            offset += 4;
11473
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_nse, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11474
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_bn, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11475
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_sub_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11476
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_pto, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11477
2
            offset += 4;
11478
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_bis_spacing, tvb, offset, 3, ENC_LITTLE_ENDIAN);
11479
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_irc, tvb, offset, 3, ENC_LITTLE_ENDIAN);
11480
2
            offset += 3;
11481
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_max_pdu, tvb, offset, 1, ENC_NA);
11482
2
            offset += 1;
11483
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_rfu, tvb, offset, 1, ENC_NA);
11484
2
            offset += 1;
11485
2
            sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_seed_access_address, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11486
2
            sub_tree = proto_item_add_subtree(sub_item, ett_eir_ad_biginfo_seedaa);
11487
24
            for (uint32_t bis = 0; bis <= num_bis; ++bis) {
11488
22
                uint32_t aa = tvb_get_uint32(tvb, offset, ENC_LITTLE_ENDIAN);
11489
22
                uint8_t d = (35 * bis + 42) & 0x7f;
11490
22
                uint32_t dw = (0xfc000000 * (d & 1)) | ((d & 0x02) << 24) | ((d & 0x40) << 18) | ((d & 0x02) << 22) | ((d & 0x30) << 16) | ((d & 0x0c) << 15);
11491
22
                aa ^= dw;
11492
22
                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);
11493
22
            }
11494
2
            offset += 4;
11495
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_sdu_interval, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11496
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_max_sdu, tvb, offset, 4, ENC_LITTLE_ENDIAN);
11497
2
            offset += 4;
11498
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_base_crc_init, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11499
2
            offset += 2;
11500
2
            sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_channel_map, tvb, offset, 5, ENC_LITTLE_ENDIAN);
11501
2
            sub_tree = proto_item_add_subtree(sub_item, ett_le_channel_map);
11502
2
            call_dissector(btcommon_le_channel_map_handle, tvb_new_subset_length(tvb, offset, 5), pinfo, sub_tree);
11503
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_phy, tvb, offset, 5, ENC_LITTLE_ENDIAN);
11504
2
            offset += 5;
11505
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_bis_payload_count, tvb, offset, 5, ENC_LITTLE_ENDIAN);
11506
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_framing, tvb, offset, 5, ENC_LITTLE_ENDIAN);
11507
2
            offset += 5;
11508
2
            if (length >= 57) {
11509
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_giv, tvb, offset, 8, ENC_NA);
11510
0
                offset += 8;
11511
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_biginfo_gskd, tvb, offset, 16, ENC_NA);
11512
0
                offset += 16;
11513
0
            }
11514
11515
2
            break;
11516
2
        case 0x2d: /* Broadcast Code */
11517
2
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_broadcast_code, tvb, offset, length, ENC_UTF_8 | ENC_NA);
11518
2
            proto_item_append_text(entry_item, ": %s", tvb_format_text(pinfo->pool, tvb, offset, length));
11519
2
            offset += length;
11520
11521
2
            break;
11522
1
        case 0x2e: /* Resolvable Set Identifier */
11523
1
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_rsi, tvb, offset, length, ENC_NA);
11524
1
            offset += length;
11525
11526
1
            break;
11527
0
        case 0x30: /* Broadcast Name */
11528
0
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_broadcast_name, tvb, offset, length, ENC_UTF_8 | ENC_NA);
11529
0
            offset += length;
11530
11531
0
            break;
11532
21
        case 0xFF: /* Manufacturer Specific */ {
11533
21
            uint16_t company_id;
11534
11535
21
            proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11536
21
            company_id = tvb_get_letohs(tvb, offset);
11537
21
            offset += 2;
11538
21
            length -= 2;
11539
11540
21
            if (p_get_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_MANUFACTURER_COMPANY_ID) == NULL) {
11541
15
                uint16_t *value_data;
11542
11543
15
                value_data = wmem_new(wmem_file_scope(), uint16_t);
11544
15
                *value_data = company_id;
11545
11546
15
                p_add_proto_data(pinfo->pool, pinfo, proto_btcommon, PROTO_DATA_BLUETOOTH_EIR_AD_MANUFACTURER_COMPANY_ID, value_data);
11547
15
            }
11548
11549
21
            if (company_id == 0x000F && tvb_get_uint8(tvb, offset) == 0) { /* 3DS profile Legacy Devices */
11550
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_fixed, tvb, offset, 1, ENC_NA);
11551
0
                offset += 1;
11552
11553
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_test_mode, tvb, offset, 1, ENC_NA);
11554
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_fixed_6, tvb, offset, 1, ENC_NA);
11555
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_ignored_5, tvb, offset, 1, ENC_NA);
11556
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_fixed_4, tvb, offset, 1, ENC_NA);
11557
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_ignored_1_3, tvb, offset, 1, ENC_NA);
11558
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_3d_capable_tv, tvb, offset, 1, ENC_NA);
11559
0
                offset += 1;
11560
11561
0
                proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_3ds_legacy_path_loss_threshold, tvb, offset, 1, ENC_NA);
11562
0
                offset += 1;
11563
21
            } else {
11564
21
                tvbuff_t  *new_tvb;
11565
11566
21
                new_tvb = tvb_new_subset_length(tvb, offset, length);
11567
11568
21
                if (!dissector_try_uint_with_data(bluetooth_eir_ad_manufacturer_company_id, company_id, new_tvb, pinfo, entry_tree, true, bluetooth_eir_ad_data)) {
11569
21
                    sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, length, ENC_NA);
11570
21
                    expert_add_info(pinfo, sub_item, &ei_eir_ad_undecoded);
11571
21
                }
11572
11573
21
                offset += length;
11574
21
            }
11575
21
            }
11576
21
            break;
11577
121
        default:
11578
121
            sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, length, ENC_NA);
11579
121
            expert_add_info(pinfo, sub_item, &ei_eir_ad_unknown);
11580
121
            offset += length;
11581
461
        }
11582
11583
422
        if (offset - offset_start > 0 && offset - offset_start < length) {
11584
112
            sub_item = proto_tree_add_item(entry_tree, hf_btcommon_eir_ad_data, tvb, offset, length - (offset - offset_start), ENC_NA);
11585
112
            expert_add_info(pinfo, sub_item, &ei_eir_ad_unknown);
11586
112
            offset += length - (offset - offset_start);
11587
112
        }
11588
422
    }
11589
11590
43
    if (tvb_reported_length_remaining(tvb, offset) > 0) {
11591
34
        proto_tree_add_item(tree, hf_btcommon_eir_ad_unused, tvb, offset, tvb_reported_length_remaining(tvb, offset), ENC_NA);
11592
34
        offset = tvb_reported_length(tvb);
11593
34
    }
11594
11595
43
    if  (bluetooth_eir_ad_data && bluetooth_eir_ad_data->bd_addr && name && have_tap_listener(bluetooth_device_tap)) {
11596
0
        bluetooth_device_tap_t  *tap_device;
11597
11598
0
        tap_device = wmem_new(pinfo->pool, bluetooth_device_tap_t);
11599
0
        tap_device->interface_id  = bluetooth_eir_ad_data->interface_id;
11600
0
        tap_device->adapter_id    = bluetooth_eir_ad_data->adapter_id;
11601
0
        memcpy(tap_device->bd_addr, bluetooth_eir_ad_data->bd_addr, 6);
11602
0
        tap_device->has_bd_addr = true;
11603
0
        tap_device->is_local = false;
11604
0
        tap_device->type = BLUETOOTH_DEVICE_NAME;
11605
0
        tap_device->data.name = name;
11606
0
        tap_queue_packet(bluetooth_device_tap, pinfo, tap_device);
11607
0
    }
11608
11609
43
    if (has_bd_addr && name && have_tap_listener(bluetooth_device_tap)) {
11610
0
        bluetooth_device_tap_t  *tap_device;
11611
11612
0
        tap_device = wmem_new(pinfo->pool, bluetooth_device_tap_t);
11613
0
        if (bluetooth_eir_ad_data) {
11614
0
            tap_device->interface_id  = bluetooth_eir_ad_data->interface_id;
11615
0
            tap_device->adapter_id    = bluetooth_eir_ad_data->adapter_id;
11616
0
        } else {
11617
0
            tap_device->interface_id  = HCI_INTERFACE_DEFAULT;
11618
0
            tap_device->adapter_id    = HCI_ADAPTER_DEFAULT;
11619
0
        }
11620
0
        memcpy(tap_device->bd_addr, bd_addr, 6);
11621
0
        tap_device->has_bd_addr = true;
11622
0
        tap_device->is_local = false;
11623
0
        tap_device->type = BLUETOOTH_DEVICE_NAME;
11624
0
        tap_device->data.name = name;
11625
0
        tap_queue_packet(bluetooth_device_tap, pinfo, tap_device);
11626
0
    }
11627
11628
43
    return offset + data_size;
11629
82
}
11630
11631
static int
11632
dissect_btcommon_cod(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
11633
1.37k
{
11634
1.37k
    proto_item  *cod_item;
11635
1.37k
    proto_item  *cod_tree;
11636
1.37k
    uint16_t     major_service_classes;
11637
1.37k
    uint8_t      major_device_class;
11638
1.37k
    uint8_t      minor_device_class;
11639
1.37k
    const char *minor_device_class_name;
11640
1.37k
    int          offset = 0;
11641
11642
1.37k
    cod_item = proto_tree_add_item(tree, hf_btcommon_cod_class_of_device, tvb, offset, 3, ENC_LITTLE_ENDIAN);
11643
1.37k
    cod_tree = proto_item_add_subtree(cod_item, ett_cod);
11644
11645
1.37k
    major_device_class = tvb_get_uint8(tvb, offset + 1) & 0x1F;
11646
1.37k
    minor_device_class = tvb_get_uint8(tvb, offset) >> 2;
11647
11648
1.37k
    switch(major_device_class) {
11649
39
    case 0x01: /* Computer */
11650
39
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_computer, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11651
39
        minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_computer_vals_ext, "Unknown");
11652
39
        break;
11653
45
    case 0x02: /* Phone */
11654
45
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_phone, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11655
45
        minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_phone_vals_ext, "Unknown");
11656
45
        break;
11657
27
    case 0x03: /* LAN/Network Access Point */
11658
27
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_lan_net_load_factor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11659
27
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_lan_net_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11660
27
        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");
11661
27
        break;
11662
51
    case 0x04: /* Audio/Video */
11663
51
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_audio_video, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11664
51
        minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_audio_video_vals_ext, "Unknown");
11665
51
        break;
11666
43
    case 0x05: /* Peripheral */
11667
43
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_peripheral_class, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11668
43
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_peripheral_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11669
43
        minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_peripheral_class_vals_ext, "Unknown");
11670
43
        break;
11671
82
    case 0x06: /* Imaging */
11672
82
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_imaging_class_printer, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11673
82
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_imaging_class_scanner, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11674
82
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_imaging_class_camera, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11675
82
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_imaging_class_display, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11676
11677
82
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_imaging_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11678
82
        minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, "Unknown");
11679
82
        break;
11680
39
    case 0x07: /* Wearable */
11681
39
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_wearable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11682
39
        minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_wearable_vals_ext, "Unknown");
11683
39
        break;
11684
66
    case 0x08: /* Toy */
11685
66
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_toy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11686
66
        minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_toy_vals_ext, "Unknown");
11687
66
        break;
11688
29
    case 0x09: /* Health */
11689
29
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_health, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11690
29
        minor_device_class_name = val_to_str_ext_const(minor_device_class, &bthci_cmd_cod_minor_device_class_health_vals_ext, "Unknown");
11691
29
        break;
11692
944
    default:
11693
944
        minor_device_class_name = "Unknown";
11694
944
        proto_tree_add_item(cod_tree, hf_btcommon_cod_minor_device_class_unknown, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11695
1.37k
    }
11696
11697
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_format_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11698
1.36k
    offset += 1;
11699
11700
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_information, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11701
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_telephony, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11702
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_audio, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11703
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_object_transfer, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11704
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_capturing, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11705
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_rendering, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11706
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_networking, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11707
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_positioning, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11708
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_reserved, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11709
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_le_audio, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11710
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_service_class_limited_discoverable_mode, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11711
1.36k
    major_service_classes = tvb_get_letohs(tvb, offset) >> 5;
11712
11713
1.36k
    proto_tree_add_item(cod_tree, hf_btcommon_cod_major_device_class, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11714
1.36k
    offset += 2;
11715
11716
1.36k
    proto_item_append_text(cod_item, " (%s:%s - services:",
11717
1.36k
            val_to_str_ext_const(major_device_class, &bthci_cmd_cod_major_device_class_vals_ext, "Unknown"),
11718
1.36k
            minor_device_class_name);
11719
11720
1.36k
    if (major_service_classes & 0x001) proto_item_append_text(cod_item, " LimitedDiscoverableMode");
11721
1.36k
    if (major_service_classes & 0x008) proto_item_append_text(cod_item, " Positioning");
11722
1.36k
    if (major_service_classes & 0x010) proto_item_append_text(cod_item, " Networking");
11723
11724
1.36k
    if (major_service_classes & 0x020) proto_item_append_text(cod_item, " Rendering");
11725
1.36k
    if (major_service_classes & 0x040) proto_item_append_text(cod_item, " Capturing");
11726
1.36k
    if (major_service_classes & 0x080) proto_item_append_text(cod_item, " ObjectTransfer");
11727
1.36k
    if (major_service_classes & 0x100) proto_item_append_text(cod_item, " Audio");
11728
1.36k
    if (major_service_classes & 0x200) proto_item_append_text(cod_item, " Telephony");
11729
1.36k
    if (major_service_classes & 0x400) proto_item_append_text(cod_item, " Information");
11730
11731
1.36k
    proto_item_append_text(cod_item, ")");
11732
11733
1.36k
    return offset;
11734
1.37k
}
11735
11736
static int
11737
dissect_btcommon_ad(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11738
62
{
11739
62
    proto_item *main_item;
11740
62
    proto_tree *main_tree;
11741
11742
62
    main_item = proto_tree_add_item(tree, hf_btcommon_eir_ad_advertising_data, tvb, 0, -1, ENC_NA);
11743
62
    main_tree = proto_item_add_subtree(main_item, ett_eir_ad);
11744
11745
62
    return dissect_eir_ad_data(tvb, pinfo, main_tree, (bluetooth_eir_ad_data_t *) data);
11746
62
}
11747
11748
static int
11749
dissect_btcommon_eir(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
11750
20
{
11751
20
    proto_item *main_item;
11752
20
    proto_tree *main_tree;
11753
11754
20
    main_item = proto_tree_add_item(tree, hf_btcommon_eir_ad_extended_inquiry_response_data, tvb, 0, -1, ENC_NA);
11755
20
    main_tree = proto_item_add_subtree(main_item, ett_eir_ad);
11756
11757
20
    return dissect_eir_ad_data(tvb, pinfo, main_tree, (bluetooth_eir_ad_data_t *) data);
11758
20
}
11759
11760
static int
11761
dissect_btcommon_le_channel_map(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data)
11762
9
{
11763
9
    int offset = 0;
11764
9
    int *reserved_bits_offset = (int *)data;
11765
11766
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_0, tvb, offset, 1, ENC_NA);
11767
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_1, tvb, offset, 1, ENC_NA);
11768
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_2, tvb, offset, 1, ENC_NA);
11769
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_3, tvb, offset, 1, ENC_NA);
11770
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_4, tvb, offset, 1, ENC_NA);
11771
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_5, tvb, offset, 1, ENC_NA);
11772
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_6, tvb, offset, 1, ENC_NA);
11773
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_7, tvb, offset, 1, ENC_NA);
11774
9
    offset += 1;
11775
11776
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_8, tvb, offset, 1, ENC_NA);
11777
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_9, tvb, offset, 1, ENC_NA);
11778
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_10, tvb, offset, 1, ENC_NA);
11779
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_11, tvb, offset, 1, ENC_NA);
11780
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_12, tvb, offset, 1, ENC_NA);
11781
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_13, tvb, offset, 1, ENC_NA);
11782
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_14, tvb, offset, 1, ENC_NA);
11783
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_15, tvb, offset, 1, ENC_NA);
11784
9
    offset += 1;
11785
11786
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_16, tvb, offset, 1, ENC_NA);
11787
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_17, tvb, offset, 1, ENC_NA);
11788
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_18, tvb, offset, 1, ENC_NA);
11789
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_19, tvb, offset, 1, ENC_NA);
11790
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_20, tvb, offset, 1, ENC_NA);
11791
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_21, tvb, offset, 1, ENC_NA);
11792
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_22, tvb, offset, 1, ENC_NA);
11793
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_23, tvb, offset, 1, ENC_NA);
11794
9
    offset += 1;
11795
11796
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_24, tvb, offset, 1, ENC_NA);
11797
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_25, tvb, offset, 1, ENC_NA);
11798
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_26, tvb, offset, 1, ENC_NA);
11799
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_27, tvb, offset, 1, ENC_NA);
11800
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_28, tvb, offset, 1, ENC_NA);
11801
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_29, tvb, offset, 1, ENC_NA);
11802
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_30, tvb, offset, 1, ENC_NA);
11803
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_31, tvb, offset, 1, ENC_NA);
11804
9
    offset += 1;
11805
11806
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_32, tvb, offset, 1, ENC_NA);
11807
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_33, tvb, offset, 1, ENC_NA);
11808
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_34, tvb, offset, 1, ENC_NA);
11809
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_35, tvb, offset, 1, ENC_NA);
11810
9
    proto_tree_add_item(tree, hf_btcommon_le_channel_map_36, tvb, offset, 1, ENC_NA);
11811
11812
9
    if (reserved_bits_offset) {
11813
6
        *reserved_bits_offset = offset;
11814
6
    } else {
11815
3
        proto_tree_add_item(tree, hf_btcommon_le_channel_map_37, tvb, offset, 1, ENC_NA);
11816
3
        proto_tree_add_item(tree, hf_btcommon_le_channel_map_38, tvb, offset, 1, ENC_NA);
11817
3
        proto_tree_add_item(tree, hf_btcommon_le_channel_map_39, tvb, offset, 1, ENC_NA);
11818
3
    }
11819
11820
9
    offset += 1;
11821
11822
9
    return offset;
11823
9
}
11824
11825
void
11826
proto_register_btcommon(void)
11827
14
{
11828
14
    expert_module_t  *expert_module;
11829
11830
14
    static hf_register_info hf[] = {
11831
14
        { &hf_btcommon_eir_ad_extended_inquiry_response_data,
11832
14
          { "Extended Inquiry Response Data",    "btcommon.eir_ad.extended_inquiry_response_data",
11833
14
            FT_NONE, BASE_NONE, NULL, 0x0,
11834
14
            NULL, HFILL }
11835
14
        },
11836
14
        { &hf_btcommon_eir_ad_advertising_data,
11837
14
          { "Advertising Data",                  "btcommon.eir_ad.advertising_data",
11838
14
            FT_NONE, BASE_NONE, NULL, 0x0,
11839
14
            NULL, HFILL }
11840
14
        },
11841
14
        { &hf_btcommon_eir_ad_entry,
11842
14
          { "Entry",                             "btcommon.eir_ad.entry",
11843
14
            FT_NONE, BASE_NONE, NULL, 0x0,
11844
14
            NULL, HFILL }
11845
14
        },
11846
14
        { &hf_btcommon_eir_ad_unused,
11847
14
        { "Unused",                              "btcommon.eir_ad.unused",
11848
14
            FT_NONE, BASE_NONE, NULL, 0x0,
11849
14
            NULL, HFILL }
11850
14
        },
11851
14
        { &hf_btcommon_eir_ad_data,
11852
14
          {"Data",                               "btcommon.eir_ad.entry.data",
11853
14
           FT_BYTES, BASE_NONE, NULL, 0x0,
11854
14
           NULL, HFILL}
11855
14
        },
11856
14
        { &hf_btcommon_eir_ad_service_data,
11857
14
          {"Service Data",                       "btcommon.eir_ad.entry.service_data",
11858
14
           FT_BYTES, BASE_NONE, NULL, 0x0,
11859
14
           NULL, HFILL}
11860
14
        },
11861
14
        { &hf_btcommon_eir_ad_length,
11862
14
          { "Length",                            "btcommon.eir_ad.entry.length",
11863
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
11864
14
            NULL, HFILL }
11865
14
        },
11866
14
        { &hf_btcommon_eir_ad_type,
11867
14
          { "Type",                              "btcommon.eir_ad.entry.type",
11868
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_eir_data_type_vals_ext, 0x0,
11869
14
            NULL, HFILL }
11870
14
        },
11871
14
        { &hf_btcommon_eir_ad_company_id,
11872
14
          { "Company ID",                        "btcommon.eir_ad.entry.company_id",
11873
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
11874
14
            NULL, HFILL }
11875
14
        },
11876
14
        { &hf_btcommon_eir_ad_flags_reserved,
11877
14
          { "Reserved",                          "btcommon.eir_ad.entry.flags.reserved",
11878
14
            FT_UINT8, BASE_HEX, NULL, 0xE0,
11879
14
            NULL, HFILL }
11880
14
        },
11881
14
        { &hf_btcommon_eir_ad_flags_le_bredr_support_host,
11882
14
          { "Simultaneous LE and BR/EDR to Same Device Capable (Host)",        "btcommon.eir_ad.entry.flags.le_bredr_support_host",
11883
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x10,
11884
14
            NULL, HFILL }
11885
14
        },
11886
14
        { &hf_btcommon_eir_ad_flags_le_bredr_support_controller,
11887
14
          { "Simultaneous LE and BR/EDR to Same Device Capable (Controller)",  "btcommon.eir_ad.entry.flags.le_bredr_support_controller",
11888
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x08,
11889
14
            NULL, HFILL }
11890
14
        },
11891
14
        { &hf_btcommon_eir_ad_flags_bredr_not_support,
11892
14
          { "BR/EDR Not Supported",              "btcommon.eir_ad.entry.flags.bredr_not_supported",
11893
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
11894
14
            NULL, HFILL }
11895
14
        },
11896
14
        { &hf_btcommon_eir_ad_flags_le_general_discoverable_mode,
11897
14
          { "LE General Discoverable Mode",      "btcommon.eir_ad.entry.flags.le_general_discoverable_mode",
11898
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
11899
14
            NULL, HFILL }
11900
14
        },
11901
14
        { &hf_btcommon_eir_ad_flags_le_limited_discoverable_mode,
11902
14
          { "LE Limited Discoverable Mode",      "btcommon.eir_ad.entry.flags.le_limited_discoverable_mode",
11903
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
11904
14
            NULL, HFILL }
11905
14
        },
11906
14
        { &hf_btcommon_eir_ad_uuid_16,
11907
14
            { "UUID 16",                         "btcommon.eir_ad.entry.uuid_16",
11908
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_uuid_vals_ext, 0x0,
11909
14
            NULL, HFILL }
11910
14
        },
11911
14
        { &hf_btcommon_eir_ad_uuid_32,
11912
14
            { "UUID 32",                         "btcommon.eir_ad.entry.uuid_32",
11913
14
            FT_UINT32, BASE_HEX | BASE_EXT_STRING, &bluetooth_uuid_vals_ext, 0x0,
11914
14
            NULL, HFILL }
11915
14
        },
11916
14
        { &hf_btcommon_eir_ad_uuid_128,
11917
14
            { "UUID 128",                        "btcommon.eir_ad.entry.uuid_128",
11918
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
11919
14
            NULL, HFILL }
11920
14
        },
11921
14
        { &hf_btcommon_eir_ad_custom_uuid_32,
11922
14
            { "Custom UUID",                     "btcommon.eir_ad.entry.custom_uuid_32",
11923
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
11924
14
            NULL, HFILL }
11925
14
        },
11926
14
        { &hf_btcommon_eir_ad_custom_uuid_128,
11927
14
            { "Custom UUID",                     "btcommon.eir_ad.entry.custom_uuid_128",
11928
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
11929
14
            NULL, HFILL }
11930
14
        },
11931
14
        { &hf_btcommon_eir_ad_name,
11932
14
          { "Device Name",                       "btcommon.eir_ad.entry.device_name",
11933
14
            FT_STRING, BASE_NONE, NULL, 0x0,
11934
14
            NULL, HFILL }
11935
14
        },
11936
14
        { &hf_btcommon_eir_ad_tx_power,
11937
14
          {"Power Level (dBm)",                  "btcommon.eir_ad.entry.power_level",
11938
14
           FT_INT8, BASE_DEC, NULL, 0x0,
11939
14
           NULL, HFILL}
11940
14
        },
11941
14
        { &hf_btcommon_eir_ad_ssp_oob_length,
11942
14
          { "SSP OOB Length",                    "btcommon.eir_ad.entry.ssp_oob_length",
11943
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
11944
14
            NULL, HFILL }
11945
14
        },
11946
14
        { &hf_btcommon_eir_ad_bd_addr,
11947
14
            { "BD_ADDR",                         "btcommon.eir_ad.entry.bd_addr",
11948
14
            FT_ETHER, BASE_NONE, NULL, 0x0,
11949
14
            NULL, HFILL }
11950
14
        },
11951
14
        { &hf_btcommon_eir_ad_le_bd_addr_reserved,
11952
14
            { "Reserved",                        "btcommon.eir_ad.entry.le_bd_addr.reserved",
11953
14
            FT_UINT8, BASE_HEX, NULL, 0xFE,
11954
14
            NULL, HFILL }
11955
14
        },
11956
14
        { &hf_btcommon_eir_ad_le_bd_addr_type,
11957
14
            { "Type",                            "btcommon.eir_ad.entry.le_bd_addr.type",
11958
14
            FT_UINT8, BASE_HEX, VALS(bluetooth_address_type_vals), 0x01,
11959
14
            NULL, HFILL }
11960
14
        },
11961
14
        { &hf_btcommon_eir_ad_le_role,
11962
14
            { "Type",                            "btcommon.eir_ad.entry.le_role",
11963
14
            FT_UINT8, BASE_HEX, VALS(le_role_vals), 0,
11964
14
            NULL, HFILL }
11965
14
        },
11966
14
        { &hf_btcommon_eir_ad_did_vendor_id_source,
11967
14
            { "Vendor ID Source",                "btcommon.eir_ad.entry.did.vendor_id_source",
11968
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &did_vendor_id_source_vals_ext, 0,
11969
14
            NULL, HFILL }
11970
14
        },
11971
14
        { &hf_btcommon_eir_ad_did_vendor_id,
11972
14
            { "Vendor ID",                       "btcommon.eir_ad.entry.did.vendor_id",
11973
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
11974
14
            NULL, HFILL }
11975
14
        },
11976
14
        { &hf_btcommon_eir_ad_did_vendor_id_bluetooth_sig,
11977
14
            { "Vendor ID",                       "btcommon.eir_ad.entry.did.vendor_id",
11978
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
11979
14
            NULL, HFILL }
11980
14
        },
11981
14
        { &hf_btcommon_eir_ad_did_vendor_id_usb_forum,
11982
14
            { "Vendor ID",                       "btcommon.eir_ad.entry.did.vendor_id",
11983
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &ext_usb_vendors_vals, 0x0,
11984
14
            NULL, HFILL }
11985
14
        },
11986
14
        { &hf_btcommon_eir_ad_did_product_id,
11987
14
            { "Product ID",                      "btcommon.eir_ad.entry.did.product_id",
11988
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
11989
14
            NULL, HFILL }
11990
14
        },
11991
14
        { &hf_btcommon_eir_ad_did_version,
11992
14
            { "Version",                         "btcommon.eir_ad.entry.did.version",
11993
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
11994
14
            NULL, HFILL }
11995
14
        },
11996
14
        { &hf_btcommon_eir_ad_3ds_association_notification,
11997
14
          { "3DS Association Notification",                "btcommon.eir_ad.entry.3ds.association_notification",
11998
14
            FT_BOOLEAN, 8, NULL, 0x01,
11999
14
            NULL, HFILL }
12000
14
        },
12001
14
        { &hf_btcommon_eir_ad_3ds_battery_level_reporting,
12002
14
          { "3DS Battery Level Reporting",                 "btcommon.eir_ad.entry.3ds.battery_level_reporting",
12003
14
            FT_BOOLEAN, 8, NULL, 0x02,
12004
14
            NULL, HFILL }
12005
14
        },
12006
14
        { &hf_btcommon_eir_ad_3ds_send_battery_level_report_on_startup,
12007
14
          { "3DS Send Battery Level Report on Startup",    "btcommon.eir_ad.entry.3ds.send_battery_level_report_on_startup",
12008
14
            FT_BOOLEAN, 8, NULL, 0x04,
12009
14
            NULL, HFILL }
12010
14
        },
12011
14
        { &hf_btcommon_eir_ad_3ds_reserved,
12012
14
          { "Reserved",                                    "btcommon.eir_ad.entry.3ds.reserved",
12013
14
            FT_BOOLEAN, 8, NULL, 0x78,
12014
14
            NULL, HFILL }
12015
14
        },
12016
14
        { &hf_btcommon_eir_ad_3ds_factory_test_mode,
12017
14
          { "3DS Factory Test Mode",                       "btcommon.eir_ad.entry.3ds.factory_test_mode",
12018
14
            FT_BOOLEAN, 8, NULL, 0x80,
12019
14
            NULL, HFILL }
12020
14
        },
12021
14
        { &hf_btcommon_eir_ad_3ds_path_loss_threshold,
12022
14
          { "3DS Path Loss Threshold",                     "btcommon.eir_ad.entry.3ds.path_loss_threshold",
12023
14
            FT_UINT8, BASE_DEC, NULL, 0x00,
12024
14
            NULL, HFILL }
12025
14
        },
12026
14
        { &hf_btcommon_eir_ad_3ds_legacy_fixed,
12027
14
          { "3DS Legacy Fixed",                            "btcommon.eir_ad.entry.3ds_legacy.fixed_byte",
12028
14
            FT_UINT8, BASE_DEC, NULL, 0x00,
12029
14
            NULL, HFILL }
12030
14
        },
12031
14
        { &hf_btcommon_eir_ad_3ds_legacy_3d_capable_tv,
12032
14
          { "3DS Legacy Capable TV",                       "btcommon.eir_ad.entry.3ds_legacy.capable_tv",
12033
14
            FT_BOOLEAN, 8, NULL, 0x01,
12034
14
            NULL, HFILL }
12035
14
        },
12036
14
        { &hf_btcommon_eir_ad_3ds_legacy_ignored_1_3,
12037
14
          { "3DS Legacy Ignored",                          "btcommon.eir_ad.entry.3ds_legacy.ignored.1_3",
12038
14
            FT_BOOLEAN, 8, NULL, 0x0E,
12039
14
            NULL, HFILL }
12040
14
        },
12041
14
        { &hf_btcommon_eir_ad_3ds_legacy_fixed_4,
12042
14
          { "3DS Legacy Fixed",                            "btcommon.eir_ad.entry.3ds_legacy.fixed.4",
12043
14
            FT_BOOLEAN, 8, NULL, 0x10,
12044
14
            NULL, HFILL }
12045
14
        },
12046
14
        { &hf_btcommon_eir_ad_3ds_legacy_ignored_5,
12047
14
          { "3DS Legacy Ignored",                          "btcommon.eir_ad.entry.3ds_legacy.ignored.5",
12048
14
            FT_BOOLEAN, 8, NULL, 0x20,
12049
14
            NULL, HFILL }
12050
14
        },
12051
14
        { &hf_btcommon_eir_ad_3ds_legacy_fixed_6,
12052
14
          { "3DS Legacy Fixed",                            "btcommon.eir_ad.entry.3ds_legacy.fixed.6",
12053
14
            FT_BOOLEAN, 8, NULL, 0x40,
12054
14
            NULL, HFILL }
12055
14
        },
12056
14
        { &hf_btcommon_eir_ad_3ds_legacy_test_mode,
12057
14
          { "3DS Legacy Test Mode",                        "btcommon.eir_ad.entry.3ds_legacy.test_mode",
12058
14
            FT_BOOLEAN, 8, NULL, 0x80,
12059
14
            NULL, HFILL }
12060
14
        },
12061
14
        { &hf_btcommon_eir_ad_3ds_legacy_path_loss_threshold,
12062
14
          { "3DS Legacy Path Loss Threshold",              "btcommon.eir_ad.entry.3ds_legacy.path_loss_threshold",
12063
14
            FT_UINT8, BASE_DEC, NULL, 0x00,
12064
14
            NULL, HFILL }
12065
14
        },
12066
14
        { &hf_btcommon_eir_ad_advertising_interval,
12067
14
          { "Advertising Interval",              "btcommon.eir_ad.entry.advertising_interval",
12068
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
12069
14
            NULL, HFILL }
12070
14
        },
12071
14
        { &hf_btcommon_eir_ad_appearance,
12072
14
          { "Appearance",                        "btcommon.eir_ad.entry.appearance",
12073
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_appearance_vals_ext, 0x0,
12074
14
            NULL, HFILL }
12075
14
        },
12076
14
        { &hf_btcommon_eir_ad_hash_c,
12077
14
          {"Hash C",                             "btcommon.eir_ad.entry.hash_c",
12078
14
           FT_BYTES, BASE_NONE, NULL, 0x0,
12079
14
           NULL, HFILL}
12080
14
        },
12081
14
        { &hf_btcommon_eir_ad_randomizer_r,
12082
14
          {"Randomizer R",                       "btcommon.eir_ad.entry.randomizer_r",
12083
14
           FT_BYTES, BASE_NONE, NULL, 0x0,
12084
14
           NULL, HFILL}
12085
14
        },
12086
14
        { &hf_btcommon_eir_ad_le_secure_confirmation_value,
12087
14
          {"LE Secure Connections Confirmation Value", "btcommon.eir_ad.entry.le_secure_confirmation_value",
12088
14
           FT_BYTES, BASE_NONE, NULL, 0x0,
12089
14
           NULL, HFILL}
12090
14
        },
12091
14
        { &hf_btcommon_eir_ad_le_secure_random_value,
12092
14
          {"LE Secure Connections Random Value", "btcommon.eir_ad.entry.le_secure_random_value",
12093
14
           FT_BYTES, BASE_NONE, NULL, 0x0,
12094
14
           NULL, HFILL}
12095
14
        },
12096
14
        { &hf_btcommon_eir_ad_oob_flags_reserved,
12097
14
          { "Reserved",                                                   "btcommon.eir_ad.entry.oob_flags.oob_reserved",
12098
14
            FT_UINT8, BASE_HEX, NULL, 0xF0,
12099
14
            NULL, HFILL }
12100
14
        },
12101
14
        { &hf_btcommon_eir_ad_oob_flags_address_type,
12102
14
          { "Address Type",                                               "btcommon.eir_ad.entry.oob_flags.oob_address_type",
12103
14
            FT_UINT8, BASE_HEX, VALS(cmd_base_address_types_vals), 0x08,
12104
14
            NULL, HFILL }
12105
14
        },
12106
14
        { &hf_btcommon_eir_ad_oob_flags_le_bredr_support,
12107
14
          { "Simultaneous LE and BR/EDR to Same Device Capable (Host)",   "btcommon.eir_ad.entry.oob_flags.oob_le_bredr_support",
12108
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x04,
12109
14
            NULL, HFILL }
12110
14
        },
12111
14
        { &hf_btcommon_eir_ad_oob_flags_le_supported_host,
12112
14
          { "LE Supported By Host",                                       "btcommon.eir_ad.entry.oob_flags.oob_le_supported_host",
12113
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x02,
12114
14
            NULL, HFILL }
12115
14
        },
12116
14
        { &hf_btcommon_eir_ad_oob_flags_data_present,
12117
14
          { "OOB Data Present",                                           "btcommon.eir_ad.entry.oob_flags.oob_data_present",
12118
14
            FT_UINT8, BASE_HEX, VALS(cmd_boolean), 0x01,
12119
14
            NULL, HFILL }
12120
14
        },
12121
14
        { &hf_btcommon_eir_ad_connection_interval_min,
12122
14
          { "Connection Interval Min",           "btcommon.eir_ad.entry.connection_interval_min",
12123
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
12124
14
            NULL, HFILL }
12125
14
        },
12126
14
        { &hf_btcommon_eir_ad_connection_interval_max,
12127
14
          { "Connection Interval Max",           "btcommon.eir_ad.entry.connection_interval_max",
12128
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
12129
14
            NULL, HFILL }
12130
14
        },
12131
14
        { &hf_btcommon_eir_ad_uri,
12132
14
          {"URI",                                "btcommon.eir_ad.entry.uri",
12133
14
           FT_STRING, BASE_NONE, NULL, 0x0,
12134
14
           NULL, HFILL}
12135
14
        },
12136
14
        {&hf_btcommon_eir_ad_ips_flags,
12137
14
            {"Indoor Positioning Configuration", "btcommon.eir_ad.entry.ips.flags",
12138
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
12139
14
            NULL, HFILL}
12140
14
        },
12141
14
        {&hf_btcommon_eir_ad_ips_flags_reserved,
12142
14
            {"Reserved", "btcommon.eir_ad.entry.ips.flags.reserved",
12143
14
            FT_UINT8, BASE_HEX, NULL, 0x80,
12144
14
            NULL, HFILL}
12145
14
        },
12146
14
        {&hf_btcommon_eir_ad_ips_flags_location_name,
12147
14
            {"Location Name", "btcommon.eir_ad.entry.ips.flags.location_name",
12148
14
            FT_BOOLEAN, 8, NULL, 0x40,
12149
14
            NULL, HFILL}
12150
14
        },
12151
14
        {&hf_btcommon_eir_ad_ips_flags_uncertainty,
12152
14
            {"Uncertainty", "btcommon.eir_ad.entry.ips.flags.uncertainty",
12153
14
            FT_BOOLEAN, 8, NULL, 0x20,
12154
14
            NULL, HFILL}
12155
14
        },
12156
14
        {&hf_btcommon_eir_ad_ips_flags_floor_number,
12157
14
            {"Floor Number", "btcommon.eir_ad.entry.ips.flags.floor_number",
12158
14
            FT_BOOLEAN, 8, NULL, 0x10,
12159
14
            NULL, HFILL}
12160
14
        },
12161
14
        {&hf_btcommon_eir_ad_ips_flags_altitude,
12162
14
            {"Altitude", "btcommon.eir_ad.entry.ips.flags.altitude",
12163
14
            FT_BOOLEAN, 8, NULL, 0x08,
12164
14
            NULL, HFILL}
12165
14
        },
12166
14
        {&hf_btcommon_eir_ad_ips_flags_tx_power,
12167
14
            {"Tx Power", "btcommon.eir_ad.entry.ips.flags.tx_power",
12168
14
            FT_BOOLEAN, 8, NULL, 0x04,
12169
14
            NULL, HFILL}
12170
14
        },
12171
14
        {&hf_btcommon_eir_ad_ips_flags_coordinate_system,
12172
14
            {"Coordinate System", "btcommon.eir_ad.entry.ips.flags.coordinate_system",
12173
14
            FT_UINT8, BASE_HEX, VALS(btatt_ips_coordinate_system), 0x02,
12174
14
            NULL, HFILL}
12175
14
        },
12176
14
        {&hf_btcommon_eir_ad_ips_flags_coordinates,
12177
14
            {"Coordinates", "btcommon.eir_ad.entry.ips.flags.coordinates",
12178
14
            FT_BOOLEAN, 8, NULL, 0x01,
12179
14
            NULL, HFILL}
12180
14
        },
12181
14
        {&hf_btcommon_eir_ad_ips_uncertainty,
12182
14
            {"Uncertainty", "btcommon.eir_ad.entry.ips.uncertainty",
12183
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
12184
14
            NULL, HFILL}
12185
14
        },
12186
14
        {&hf_btcommon_eir_ad_ips_uncertainty_reserved,
12187
14
            {"Reserved", "btcommon.eir_ad.entry.ips.uncertainty.reserved",
12188
14
            FT_UINT8, BASE_HEX, NULL, 0x80,
12189
14
            NULL, HFILL}
12190
14
        },
12191
14
        {&hf_btcommon_eir_ad_ips_uncertainty_precision,
12192
14
            {"Precision", "btcommon.eir_ad.entry.ips.uncertainty.precision",
12193
14
            FT_UINT8, BASE_HEX, VALS(btatt_ips_uncertainty_precision_vals), 0x70,
12194
14
            NULL, HFILL}
12195
14
        },
12196
14
        {&hf_btcommon_eir_ad_ips_uncertainty_update_time,
12197
14
            {"Update Time", "btcommon.eir_ad.entry.ips.uncertainty.update_time",
12198
14
            FT_UINT8, BASE_HEX, VALS(btatt_ips_uncertainty_update_time_vals), 0x0E,
12199
14
            NULL, HFILL}
12200
14
        },
12201
14
        {&hf_btcommon_eir_ad_ips_uncertainty_stationary,
12202
14
            {"Stationary", "btcommon.eir_ad.entry.ips.uncertainty.stationary",
12203
14
            FT_UINT8, BASE_HEX, VALS(btatt_ips_uncertainty_stationary_vals), 0x01,
12204
14
            NULL, HFILL}
12205
14
        },
12206
14
        {&hf_btcommon_eir_ad_ips_latitude,
12207
14
            {"Latitude", "btcommon.eir_ad.entry.ips.latitude",
12208
14
            FT_INT32, BASE_DEC, NULL, 0x0,
12209
14
            NULL, HFILL}
12210
14
        },
12211
14
        {&hf_btcommon_eir_ad_ips_longitude,
12212
14
            {"Longitude", "btcommon.eir_ad.entry.ips.longitude",
12213
14
            FT_INT32, BASE_DEC, NULL, 0x0,
12214
14
            NULL, HFILL}
12215
14
        },
12216
14
        {&hf_btcommon_eir_ad_ips_local_north_coordinate,
12217
14
            {"Local North Coordinate", "btcommon.eir_ad.entry.ips.local_north_coordinate",
12218
14
            FT_INT16, BASE_DEC, NULL, 0x0,
12219
14
            NULL, HFILL}
12220
14
        },
12221
14
        {&hf_btcommon_eir_ad_ips_local_east_coordinate,
12222
14
            {"Local East Coordinate", "btcommon.eir_ad.entry.ips.local_east_coordinate",
12223
14
            FT_INT16, BASE_DEC, NULL, 0x0,
12224
14
            NULL, HFILL}
12225
14
        },
12226
14
        {&hf_btcommon_eir_ad_ips_floor_number,
12227
14
            {"Floor Number", "btcommon.eir_ad.entry.ips.floor_number",
12228
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
12229
14
            NULL, HFILL}
12230
14
        },
12231
14
        {&hf_btcommon_eir_ad_ips_altitude,
12232
14
            {"Altitude", "btcommon.eir_ad.entry.ips.altitude",
12233
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
12234
14
            NULL, HFILL}
12235
14
        },
12236
14
        {&hf_btcommon_eir_ad_ips_tx_power_level,
12237
14
            {"Tx Power Level", "btcommon.eir_ad.entry.ips.tx_power_level",
12238
14
            FT_INT8, BASE_DEC, NULL, 0x0,
12239
14
            NULL, HFILL}
12240
14
        },
12241
14
        {&hf_btcommon_eir_ad_tds_organization_id,
12242
14
            {"Organization ID", "btcommon.eir_ad.entry.tds.organization_id",
12243
14
            FT_UINT8, BASE_HEX, VALS(tds_organization_id_vals), 0x0,
12244
14
            NULL, HFILL}
12245
14
        },
12246
14
        {&hf_btcommon_eir_ad_tds_flags,
12247
14
            {"Flags", "btcommon.eir_ad.entry.tds.flags",
12248
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
12249
14
            NULL, HFILL}
12250
14
        },
12251
14
        {&hf_btcommon_eir_ad_tds_flags_reserved,
12252
14
            {"Reserved", "btcommon.eir_ad.entry.tds.flags.reserved",
12253
14
            FT_UINT8, BASE_HEX, NULL, 0xE0,
12254
14
            NULL, HFILL}
12255
14
        },
12256
14
        {&hf_btcommon_eir_ad_tds_flags_transport_state,
12257
14
            {"Transport State", "btcommon.eir_ad.entry.tds.flags.transport_state",
12258
14
            FT_UINT8, BASE_HEX, VALS(tds_transport_state_vals), 0x18,
12259
14
            NULL, HFILL}
12260
14
        },
12261
14
        {&hf_btcommon_eir_ad_tds_flags_transport_data_incomplete,
12262
14
            {"Transport Data Incomplete", "btcommon.eir_ad.entry.tds.flags.transport_data_incomplete",
12263
14
            FT_BOOLEAN, 8, NULL, 0x04,
12264
14
            NULL, HFILL}
12265
14
        },
12266
14
        {&hf_btcommon_eir_ad_tds_flags_role,
12267
14
            {"Role", "btcommon.eir_ad.entry.tds.flags.role",
12268
14
            FT_UINT8, BASE_HEX, VALS(tds_role_vals), 0x03,
12269
14
            NULL, HFILL}
12270
14
        },
12271
12272
14
        {&hf_btcommon_eir_ad_tds_data_length,
12273
14
            {"Data Length", "btcommon.eir_ad.entry.tds.data_length",
12274
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
12275
14
            NULL, HFILL}
12276
14
        },
12277
14
        {&hf_btcommon_eir_ad_tds_data,
12278
14
            {"Data", "btcommon.eir_ad.entry.tds.data",
12279
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
12280
14
            NULL, HFILL}
12281
14
        },
12282
14
        { &hf_btcommon_eir_ad_le_features,
12283
14
          { "LE Features", "btcommon.eir_ad.entry.le_features",
12284
14
            FT_UINT8, BASE_HEX, NULL, 0x0,
12285
14
            NULL, HFILL }
12286
14
        },
12287
14
        { &hf_btcommon_eir_ad_le_channel_map,
12288
14
          { "Channel Map", "btcommon.eir_ad.entry.le_channel_map",
12289
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
12290
14
            NULL, HFILL }
12291
14
        },
12292
14
        { &hf_btcommon_eir_ad_instant,
12293
14
          { "Instant", "btcommon.eir_ad.entry.instant",
12294
14
            FT_UINT16, BASE_DEC, NULL, 0x0,
12295
14
            NULL, HFILL }
12296
14
        },
12297
14
        { &hf_btcommon_eir_ad_le_features_encryption,
12298
14
          { "LE Encryption",                               "btcommon.eir_ad.le_features.encryption",
12299
14
            FT_BOOLEAN, 8, NULL, 0x01,
12300
14
            NULL, HFILL }
12301
14
        },
12302
14
        { &hf_btcommon_eir_ad_le_features_connection_parameters_request_procedure,
12303
14
          { "Connection Parameters Request Procedure",     "btcommon.eir_ad.le_features.connection_parameters_request_procedure",
12304
14
            FT_BOOLEAN, 8, NULL, 0x02,
12305
14
            NULL, HFILL }
12306
14
        },
12307
14
        { &hf_btcommon_eir_ad_le_features_extended_reject_indication,
12308
14
          { "Extended Reject Indication",                  "btcommon.eir_ad.le_features.extended_reject_indication",
12309
14
            FT_BOOLEAN, 8, NULL, 0x04,
12310
14
            NULL, HFILL }
12311
14
        },
12312
14
        { &hf_btcommon_eir_ad_le_features_peripheral_initiated_features_exchange,
12313
14
          { "Peripheral-Initiated Features Exchange",           "btcommon.eir_ad.le_features.peripheral_initiated_features_exchange",
12314
14
            FT_BOOLEAN, 8, NULL, 0x08,
12315
14
            NULL, HFILL }
12316
14
        },
12317
14
        { &hf_btcommon_eir_ad_le_features_ping,
12318
14
          { "Ping",                                        "btcommon.eir_ad.le_features.ping",
12319
14
            FT_BOOLEAN, 8, NULL, 0x10,
12320
14
            NULL, HFILL }
12321
14
        },
12322
14
        { &hf_btcommon_eir_ad_le_features_data_packet_length_extension,
12323
14
          { "Data Packet Length Extension",                "btcommon.eir_ad.le_features.data_packet_length_extension",
12324
14
            FT_BOOLEAN, 8, NULL, 0x20,
12325
14
            NULL, HFILL }
12326
14
        },
12327
14
        { &hf_btcommon_eir_ad_le_features_ll_privacy,
12328
14
          { "LL Privacy",                                  "btcommon.eir_ad.le_features.ll_privacy",
12329
14
            FT_BOOLEAN, 8, NULL, 0x40,
12330
14
            NULL, HFILL }
12331
14
        },
12332
14
        { &hf_btcommon_eir_ad_le_features_extended_scanner_filter_policies,
12333
14
          { "Extended Scanner Filter Policies",            "btcommon.eir_ad.le_features.extended_scanner_filter_policies",
12334
14
            FT_BOOLEAN, 8, NULL, 0x80,
12335
14
            NULL, HFILL }
12336
14
        },
12337
14
        { &hf_btcommon_eir_ad_le_features_2m_phy,
12338
14
          { "LE 2M PHY",            "btcommon.eir_ad.le_features.2m_phy",
12339
14
            FT_BOOLEAN, 8, NULL, 0x01,
12340
14
            NULL, HFILL }
12341
14
        },
12342
14
        { &hf_btcommon_eir_ad_le_features_stable_modulation_index_tx,
12343
14
          { "Stable Modulation Index - Tx",            "btcommon.eir_ad.le_features.stable_modulation_index_tx",
12344
14
            FT_BOOLEAN, 8, NULL, 0x02,
12345
14
            NULL, HFILL }
12346
14
        },
12347
14
        { &hf_btcommon_eir_ad_le_features_stable_modulation_index_rx,
12348
14
          { "Stable Modulation Index - Rx",      "btcommon.eir_ad.le_features.stable_modulation_index_rx",
12349
14
            FT_BOOLEAN, 8, NULL, 0x04,
12350
14
            NULL, HFILL }
12351
14
        },
12352
14
        { &hf_btcommon_eir_ad_le_features_coded_phy,
12353
14
          { "LE Coded PHY",                      "btcommon.eir_ad.le_features.coded_phy",
12354
14
            FT_BOOLEAN, 8, NULL, 0x08,
12355
14
            NULL, HFILL }
12356
14
        },
12357
14
        { &hf_btcommon_eir_ad_le_features_extended_advertising,
12358
14
          { "LE Extended Advertising",           "btcommon.eir_ad.le_features.extended_advertising",
12359
14
            FT_BOOLEAN, 8, NULL, 0x10,
12360
14
            NULL, HFILL }
12361
14
        },
12362
14
        { &hf_btcommon_eir_ad_le_features_periodic_advertising,
12363
14
          { "LE Periodic Advertising",           "btcommon.eir_ad.le_features.periodic_advertising",
12364
14
            FT_BOOLEAN, 8, NULL, 0x20,
12365
14
            NULL, HFILL }
12366
14
        },
12367
14
        { &hf_btcommon_eir_ad_le_features_channel_selection_algorithm_2,
12368
14
          { "Channel Selection Algorithm #2",    "btcommon.eir_ad.le_features.channel_selection_algorithm_2",
12369
14
            FT_BOOLEAN, 8, NULL, 0x40,
12370
14
            NULL, HFILL }
12371
14
        },
12372
14
        { &hf_btcommon_eir_ad_le_features_power_class_1,
12373
14
          { "Power Class 1",                     "btcommon.eir_ad.le_features.power_class_1",
12374
14
            FT_BOOLEAN, 8, NULL, 0x80,
12375
14
            NULL, HFILL }
12376
14
        },
12377
14
        { &hf_btcommon_eir_ad_le_features_minimum_number_of_used_channels_procedure,
12378
14
          { "Minimum Number of Used Channels Procedure", "btcommon.eir_ad.entry.le_features.minimum_number_of_used_channels_procedure",
12379
14
            FT_BOOLEAN, 8, NULL, 0x01,
12380
14
            NULL, HFILL }
12381
14
        },
12382
14
        { &hf_btcommon_eir_ad_le_features_reserved_1_7,
12383
14
          { "Reserved", "btcommon.eir_ad.entry.le_features.reserved.1_7",
12384
14
            FT_UINT8, BASE_HEX, NULL, 0xFE,
12385
14
            NULL, HFILL }
12386
14
        },
12387
14
        { &hf_btcommon_eir_ad_le_features_reserved,
12388
14
          { "Reserved", "btcommon.eir_ad.entry.le_features.reserved",
12389
14
            FT_UINT8, BASE_HEX, NULL, 0xFF,
12390
14
            NULL, HFILL }
12391
14
        },
12392
14
        { &hf_btcommon_eir_ad_biginfo_big_offset,
12393
14
          { "BIG_Offset", "btcommon.eir_ad.entry.biginfo.big_offset",
12394
14
            FT_UINT32, BASE_DEC, NULL, 0x00003fff,
12395
14
            NULL, HFILL}
12396
14
        },
12397
14
        { &hf_btcommon_eir_ad_biginfo_big_offset_units,
12398
14
          { "BIG_Offset_Units", "btcommon.eir_ad.entry.biginfo.big_offset_units",
12399
14
            FT_BOOLEAN, 32, TFS(&tfs_offset_units), 0x00004000,
12400
14
            NULL, HFILL }
12401
14
        },
12402
14
        { &hf_btcommon_eir_ad_biginfo_iso_interval,
12403
14
          { "ISO_Interval", "btcommon.eir_ad.entry.biginfo.iso_interval",
12404
14
            FT_UINT32, BASE_DEC, NULL, 0x07ff8000,
12405
14
            NULL, HFILL}
12406
14
        },
12407
14
        { &hf_btcommon_eir_ad_biginfo_num_bis,
12408
14
          { "Num_BIS", "btcommon.eir_ad.entry.biginfo.num_bis",
12409
14
            FT_UINT32, BASE_DEC, NULL, 0xf8000000,
12410
14
            NULL, HFILL}
12411
14
        },
12412
14
        { &hf_btcommon_eir_ad_biginfo_nse,
12413
14
          { "NSE", "btcommon.eir_ad.entry.biginfo.nse",
12414
14
            FT_UINT32, BASE_DEC, NULL, 0x0000001f,
12415
14
            NULL, HFILL}
12416
14
        },
12417
14
        { &hf_btcommon_eir_ad_biginfo_bn,
12418
14
          { "BN", "btcommon.eir_ad.entry.biginfo.bn",
12419
14
            FT_UINT32, BASE_DEC, NULL, 0x000000e0,
12420
14
            NULL, HFILL}
12421
14
        },
12422
14
        { &hf_btcommon_eir_ad_biginfo_sub_interval,
12423
14
          { "Sub_Interval", "btcommon.eir_ad.entry.biginfo.sub_interval",
12424
14
            FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microsecond_microseconds), 0x0fffff00,
12425
14
            NULL, HFILL}
12426
14
        },
12427
14
        { &hf_btcommon_eir_ad_biginfo_pto,
12428
14
          { "PTO", "btcommon.eir_ad.entry.biginfo.pto",
12429
14
            FT_UINT32, BASE_DEC, NULL, 0xf0000000,
12430
14
            NULL, HFILL}
12431
14
        },
12432
14
        { &hf_btcommon_eir_ad_biginfo_bis_spacing,
12433
14
          { "BIS_Spacing", "btcommon.eir_ad.entry.biginfo.bis_spacing",
12434
14
            FT_UINT24, BASE_DEC|BASE_UNIT_STRING, UNS(&units_microsecond_microseconds), 0x0fffff,
12435
14
            NULL, HFILL}
12436
14
        },
12437
14
        { &hf_btcommon_eir_ad_biginfo_irc,
12438
14
          { "IRC", "btcommon.eir_ad.entry.biginfo.irc",
12439
14
            FT_UINT24, BASE_DEC, NULL, 0xf00000,
12440
14
            NULL, HFILL}
12441
14
        },
12442
14
        { &hf_btcommon_eir_ad_biginfo_max_pdu,
12443
14
          { "Max_PDU", "btcommon.eir_ad.entry.biginfo.max_pdu",
12444
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
12445
14
            NULL, HFILL}
12446
14
        },
12447
14
        { &hf_btcommon_eir_ad_biginfo_rfu,
12448
14
          { "Reserved", "btcommon.eir_ad.entry.biginfo.rfu",
12449
14
            FT_UINT8, BASE_DEC, NULL, 0x0,
12450
14
            NULL, HFILL}
12451
14
        },
12452
14
        { &hf_btcommon_eir_ad_biginfo_seed_access_address,
12453
14
          { "Seed Access Address", "btcommon.eir_ad.entry.biginfo.seed_access_address",
12454
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
12455
14
            NULL, HFILL}
12456
14
        },
12457
14
        { &hf_btcommon_eir_ad_biginfo_sdu_interval,
12458
14
          { "SDU_Interval", "btcommon.eir_ad.entry.biginfo.sdu_interval",
12459
14
            FT_UINT32, BASE_DEC, NULL, 0x000fffff,
12460
14
            NULL, HFILL}
12461
14
        },
12462
14
        { &hf_btcommon_eir_ad_biginfo_max_sdu,
12463
14
          { "Max_SDU", "btcommon.eir_ad.entry.biginfo.max_sdu",
12464
14
            FT_UINT32, BASE_DEC, NULL, 0xfff00000,
12465
14
            NULL, HFILL}
12466
14
        },
12467
14
        { &hf_btcommon_eir_ad_biginfo_base_crc_init,
12468
14
          { "BaseCRCInit", "btcommon.eir_ad.entry.biginfo.base_crc_init",
12469
14
            FT_UINT16, BASE_HEX, NULL, 0x0,
12470
14
            NULL, HFILL}
12471
14
        },
12472
14
        { &hf_btcommon_eir_ad_biginfo_channel_map,
12473
14
          { "Channel Map", "btcommon.eir_ad.entry.biginfo.channel_map",
12474
14
            FT_UINT40, BASE_HEX, NULL, 0x1fffffffff,
12475
14
            NULL, HFILL}
12476
14
        },
12477
14
        { &hf_btcommon_eir_ad_biginfo_phy,
12478
14
          { "PHY", "btcommon.eir_ad.entry.biginfo.phy",
12479
14
            FT_UINT40, BASE_DEC|BASE_VAL64_STRING, VALS64(cmd_biginfo_le_phy_vals64), 0xe000000000,
12480
14
            NULL, HFILL}
12481
14
        },
12482
14
        { &hf_btcommon_eir_ad_biginfo_bis_payload_count,
12483
14
          { "bisPayloadCount", "btcommon.eir_ad.entry.biginfo.bis_payload_count",
12484
14
            FT_UINT40, BASE_DEC, NULL, 0x7fffffffff,
12485
14
            NULL, HFILL}
12486
14
        },
12487
14
        { &hf_btcommon_eir_ad_biginfo_framing,
12488
14
          { "Framing", "btcommon.eir_ad.entry.biginfo.framing",
12489
14
            FT_BOOLEAN, 40, NULL, 0x8000000000,
12490
14
            NULL, HFILL }
12491
14
        },
12492
14
        { &hf_btcommon_eir_ad_biginfo_giv,
12493
14
            { "GIV", "btcommon.eir_ad.entry.biginfo.giv",
12494
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
12495
14
            NULL, HFILL }
12496
14
        },
12497
14
        { &hf_btcommon_eir_ad_biginfo_gskd,
12498
14
            { "GSKD", "btcommon.eir_ad.entry.biginfo.gskd",
12499
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
12500
14
            NULL, HFILL }
12501
14
        },
12502
14
        { &hf_btcommon_eir_ad_biginfo_big_control_access_address,
12503
14
          { "BIG Control Access Address", "btcommon.eir_ad.entry.biginfo.big_control_access_address",
12504
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
12505
14
            NULL, HFILL}
12506
14
        },
12507
14
        { &hf_btcommon_eir_ad_biginfo_bis_access_address,
12508
14
          { "BIS Access Address", "btcommon.eir_ad.entry.biginfo.bis_access_address",
12509
14
            FT_UINT32, BASE_HEX, NULL, 0x0,
12510
14
            NULL, HFILL}
12511
14
        },
12512
14
        { &hf_btcommon_eir_ad_broadcast_code,
12513
14
          { "Broadcast Code", "btcommon.eir_ad.entry.broadcast_code",
12514
14
            FT_STRING, BASE_NONE, NULL, 0x0,
12515
14
            NULL, HFILL }
12516
14
        },
12517
14
        { &hf_btcommon_eir_ad_rsi,
12518
14
          { "Resolvable Set Identifier", "btcommon.eir_ad.entry.rsi",
12519
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
12520
14
            NULL, HFILL }
12521
14
        },
12522
14
        { &hf_btcommon_eir_ad_broadcast_name,
12523
14
          { "Broadcast Name", "btcommon.eir_ad.entry.broadcast_name",
12524
14
            FT_STRING, BASE_NONE, NULL, 0x0,
12525
14
            NULL, HFILL }
12526
14
        },
12527
14
        { &hf_btcommon_cod_class_of_device,
12528
14
          { "Class of Device", "btcommon.cod.class_of_device",
12529
14
            FT_UINT24, BASE_HEX, NULL, 0x0,
12530
14
            NULL, HFILL }
12531
14
        },
12532
14
        { &hf_btcommon_cod_major_service_class_information,
12533
14
          { "Major Service Classes: Information", "btcommon.cod.major_service_classes.information",
12534
14
            FT_BOOLEAN, 16, NULL, 0x8000,
12535
14
            NULL, HFILL }
12536
14
        },
12537
14
        { &hf_btcommon_cod_major_service_class_telephony,
12538
14
          { "Major Service Classes: Telephony", "btcommon.cod.major_service_classes.telephony",
12539
14
            FT_BOOLEAN, 16, NULL, 0x4000,
12540
14
            NULL, HFILL }
12541
14
        },
12542
14
        { &hf_btcommon_cod_major_service_class_audio,
12543
14
          { "Major Service Classes: Audio", "btcommon.cod.major_service_classes.audio",
12544
14
            FT_BOOLEAN, 16, NULL, 0x2000,
12545
14
            NULL, HFILL }
12546
14
        },
12547
14
        { &hf_btcommon_cod_major_service_class_object_transfer,
12548
14
          { "Major Service Classes: Object Transfer", "btcommon.cod.major_service_classes.object_transfer",
12549
14
            FT_BOOLEAN, 16, NULL, 0x1000,
12550
14
            NULL, HFILL }
12551
14
        },
12552
14
        { &hf_btcommon_cod_major_service_class_capturing,
12553
14
          { "Major Service Classes: Capturing", "btcommon.cod.major_service_classes.capturing",
12554
14
            FT_BOOLEAN, 16, NULL, 0x0800,
12555
14
            NULL, HFILL }
12556
14
        },
12557
14
        { &hf_btcommon_cod_major_service_class_rendering,
12558
14
          { "Major Service Classes: Rendering", "btcommon.cod.major_service_classes.rendering",
12559
14
            FT_BOOLEAN, 16, NULL, 0x0400,
12560
14
            NULL, HFILL }
12561
14
        },
12562
14
        { &hf_btcommon_cod_major_service_class_networking,
12563
14
          { "Major Service Classes: Networking", "btcommon.cod.major_service_classes.networking",
12564
14
            FT_BOOLEAN, 16, NULL, 0x0200,
12565
14
            NULL, HFILL }
12566
14
        },
12567
14
        { &hf_btcommon_cod_major_service_class_positioning,
12568
14
          { "Major Service Classes: Positioning", "btcommon.cod.major_service_classes.positioning",
12569
14
            FT_BOOLEAN, 16, NULL, 0x0100,
12570
14
            NULL, HFILL }
12571
14
        },
12572
14
        { &hf_btcommon_cod_major_service_class_reserved,
12573
14
          { "Major Service Classes: Reserved", "btcommon.cod.major_service_classes.reserved",
12574
14
            FT_UINT16, BASE_HEX, NULL, 0x0080,
12575
14
            NULL, HFILL }
12576
14
        },
12577
14
        { &hf_btcommon_cod_major_service_class_le_audio,
12578
14
          { "Major Service Classes: LE Audio", "btcommon.cod.major_service_classes.le_audio",
12579
14
            FT_UINT16, BASE_HEX, NULL, 0x0040,
12580
14
            NULL, HFILL }
12581
14
        },
12582
14
        { &hf_btcommon_cod_major_service_class_limited_discoverable_mode,
12583
14
          { "Major Service Classes: Limited Discoverable Mode", "btcommon.cod.major_service_classes.limited_discoverable_mode",
12584
14
            FT_BOOLEAN, 16, NULL, 0x0020,
12585
14
            NULL, HFILL }
12586
14
        },
12587
14
        { &hf_btcommon_cod_major_device_class,
12588
14
          { "Major Device Class", "btcommon.cod.major_device_class",
12589
14
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_major_device_class_vals_ext, 0x1F,
12590
14
            NULL, HFILL }
12591
14
        },
12592
14
        { &hf_btcommon_cod_minor_device_class_computer,
12593
14
          { "Minor Device Class", "btcommon.cod.minor_device_class",
12594
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_computer_vals_ext, 0xFC,
12595
14
            NULL, HFILL }
12596
14
        },
12597
14
        { &hf_btcommon_cod_minor_device_class_phone,
12598
14
          { "Minor Device Class", "btcommon.cod.minor_device_class",
12599
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_phone_vals_ext, 0xFC,
12600
14
            NULL, HFILL }
12601
14
        },
12602
14
        { &hf_btcommon_cod_minor_device_class_lan_net_load_factor,
12603
14
          { "Minor Device Class: Load Factor", "btcommon.cod.minor_device_class.load_factor",
12604
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_lan_net_load_factor_vals_ext, 0xE0,
12605
14
            NULL, HFILL }
12606
14
        },
12607
14
        { &hf_btcommon_cod_minor_device_class_lan_net_type,
12608
14
          { "Minor Device Class: Type", "btcommon.cod.minor_device_class.type",
12609
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_lan_net_type_vals_ext, 0x1C,
12610
14
            NULL, HFILL }
12611
14
        },
12612
14
        { &hf_btcommon_cod_minor_device_class_audio_video,
12613
14
          { "Minor Device Class", "btcommon.cod.minor_device_class",
12614
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_audio_video_vals_ext, 0xFC,
12615
14
            NULL, HFILL }
12616
14
        },
12617
14
        { &hf_btcommon_cod_minor_device_class_peripheral_class,
12618
14
          { "Minor Device Class", "btcommon.cod.minor_device_class",
12619
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_peripheral_class_vals_ext, 0xC0,
12620
14
            NULL, HFILL }
12621
14
        },
12622
14
        { &hf_btcommon_cod_minor_device_class_peripheral_type,
12623
14
          { "Minor Device Class", "btcommon.cod.minor_device_class",
12624
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_peripheral_type_vals_ext, 0x3C,
12625
14
            NULL, HFILL }
12626
14
        },
12627
14
        { &hf_btcommon_cod_minor_device_class_imaging_class_printer,
12628
14
          { "Minor Device Class: Class: Printer", "btcommon.cod.minor_device_class.class.printer",
12629
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, 0x80,
12630
14
            NULL, HFILL }
12631
14
        },
12632
14
        { &hf_btcommon_cod_minor_device_class_imaging_class_scanner,
12633
14
          { "Minor Device Class: Class: Scanner", "btcommon.cod.minor_device_class.class.scanner",
12634
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, 0x40,
12635
14
            NULL, HFILL }
12636
14
        },
12637
14
        { &hf_btcommon_cod_minor_device_class_imaging_class_camera,
12638
14
          { "Minor Device Class: Class: Camera", "btcommon.cod.minor_device_class.class.camera",
12639
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, 0x20,
12640
14
            NULL, HFILL }
12641
14
        },
12642
14
        { &hf_btcommon_cod_minor_device_class_imaging_class_display,
12643
14
          { "Minor Device Class: Class: Display", "btcommon.cod.minor_device_class.class.display",
12644
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, 0x10,
12645
14
            NULL, HFILL }
12646
14
        },
12647
14
        { &hf_btcommon_cod_minor_device_class_imaging_type,
12648
14
          { "Minor Device Class: Type", "btcommon.cod.minor_device_class.type",
12649
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_imaging_type_vals_ext, 0x0C,
12650
14
            NULL, HFILL }
12651
14
        },
12652
14
        { &hf_btcommon_cod_minor_device_class_wearable,
12653
14
          { "Minor Device Class", "btcommon.cod.minor_device_class",
12654
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_wearable_vals_ext, 0xFC,
12655
14
            NULL, HFILL }
12656
14
        },
12657
14
        { &hf_btcommon_cod_minor_device_class_toy,
12658
14
          { "Minor Device Class", "btcommon.cod.minor_device_class",
12659
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_toy_vals_ext, 0xFC,
12660
14
            NULL, HFILL }
12661
14
        },
12662
14
        { &hf_btcommon_cod_minor_device_class_health,
12663
14
          { "Minor Device Class", "btcommon.cod.minor_device_class",
12664
14
            FT_UINT8, BASE_HEX | BASE_EXT_STRING, &bthci_cmd_cod_minor_device_class_health_vals_ext, 0xFC,
12665
14
            NULL, HFILL }
12666
14
        },
12667
14
        { &hf_btcommon_cod_minor_device_class_unknown,
12668
14
          { "Minor Device Class", "btcommon.cod.minor_device_class",
12669
14
            FT_UINT8, BASE_HEX, NULL, 0xFC,
12670
14
            NULL, HFILL }
12671
14
        },
12672
14
        { &hf_btcommon_cod_format_type,
12673
14
          { "Format Type", "btcommon.cod.format_type",
12674
14
            FT_UINT8, BASE_HEX, NULL, 0x03,
12675
14
            NULL, HFILL }
12676
14
        },
12677
14
        { &hf_btcommon_le_channel_map_39,
12678
14
            { "Reserved",                                            "btcommon.le_channel_map.39",
12679
14
            FT_BOOLEAN, 8, NULL, 0x80,
12680
14
            NULL, HFILL }
12681
14
        },
12682
14
        { &hf_btcommon_le_channel_map_38,
12683
14
            { "Reserved",                                            "btcommon.le_channel_map.38",
12684
14
            FT_BOOLEAN, 8, NULL, 0x40,
12685
14
            NULL, HFILL }
12686
14
        },
12687
14
        { &hf_btcommon_le_channel_map_37,
12688
14
            { "Reserved",                                            "btcommon.le_channel_map.37",
12689
14
            FT_BOOLEAN, 8, NULL, 0x20,
12690
14
            NULL, HFILL }
12691
14
        },
12692
14
        { &hf_btcommon_le_channel_map_36,
12693
14
            { "RF Channel 38 (2478 MHz - Data - 36)",                "btcommon.le_channel_map.36",
12694
14
            FT_BOOLEAN, 8, NULL, 0x10,
12695
14
            NULL, HFILL }
12696
14
        },
12697
14
        { &hf_btcommon_le_channel_map_35,
12698
14
            { "RF Channel 37 (2476 MHz - Data - 35)",                "btcommon.le_channel_map.35",
12699
14
            FT_BOOLEAN, 8, NULL, 0x08,
12700
14
            NULL, HFILL }
12701
14
        },
12702
14
        { &hf_btcommon_le_channel_map_34,
12703
14
            { "RF Channel 36 (2474 MHz - Data - 34)",                "btcommon.le_channel_map.34",
12704
14
            FT_BOOLEAN, 8, NULL, 0x04,
12705
14
            NULL, HFILL }
12706
14
        },
12707
14
        { &hf_btcommon_le_channel_map_33,
12708
14
            { "RF Channel 35 (2472 MHz - Data - 33)",                "btcommon.le_channel_map.33",
12709
14
            FT_BOOLEAN, 8, NULL, 0x02,
12710
14
            NULL, HFILL }
12711
14
        },
12712
14
        { &hf_btcommon_le_channel_map_32,
12713
14
            { "RF Channel 34 (2470 MHz - Data - 32)",                "btcommon.le_channel_map.32",
12714
14
            FT_BOOLEAN, 8, NULL, 0x01,
12715
14
            NULL, HFILL }
12716
14
        },
12717
14
        { &hf_btcommon_le_channel_map_31,
12718
14
            { "RF Channel 33 (2468 MHz - Data - 31)",                "btcommon.le_channel_map.31",
12719
14
            FT_BOOLEAN, 8, NULL, 0x80,
12720
14
            NULL, HFILL }
12721
14
        },
12722
14
        { &hf_btcommon_le_channel_map_30,
12723
14
            { "RF Channel 32 (2466 MHz - Data - 30)",                "btcommon.le_channel_map.30",
12724
14
            FT_BOOLEAN, 8, NULL, 0x40,
12725
14
            NULL, HFILL }
12726
14
        },
12727
14
        { &hf_btcommon_le_channel_map_29,
12728
14
            { "RF Channel 31 (2464 MHz - Data - 29)",                "btcommon.le_channel_map.29",
12729
14
            FT_BOOLEAN, 8, NULL, 0x20,
12730
14
            NULL, HFILL }
12731
14
        },
12732
14
        { &hf_btcommon_le_channel_map_28,
12733
14
            { "RF Channel 30 (2462 MHz - Data - 28)",                "btcommon.le_channel_map.28",
12734
14
            FT_BOOLEAN, 8, NULL, 0x10,
12735
14
            NULL, HFILL }
12736
14
        },
12737
14
        { &hf_btcommon_le_channel_map_27,
12738
14
            { "RF Channel 29 (2460 MHz - Data - 27)",                "btcommon.le_channel_map.27",
12739
14
            FT_BOOLEAN, 8, NULL, 0x08,
12740
14
            NULL, HFILL }
12741
14
        },
12742
14
        { &hf_btcommon_le_channel_map_26,
12743
14
            { "RF Channel 28 (2458 MHz - Data - 26)",                "btcommon.le_channel_map.26",
12744
14
            FT_BOOLEAN, 8, NULL, 0x04,
12745
14
            NULL, HFILL }
12746
14
        },
12747
14
        { &hf_btcommon_le_channel_map_25,
12748
14
            { "RF Channel 27 (2456 MHz - Data - 25)",                "btcommon.le_channel_map.25",
12749
14
            FT_BOOLEAN, 8, NULL, 0x02,
12750
14
            NULL, HFILL }
12751
14
        },
12752
14
        { &hf_btcommon_le_channel_map_24,
12753
14
            { "RF Channel 26 (2454 MHz - Data - 24)",                "btcommon.le_channel_map.24",
12754
14
            FT_BOOLEAN, 8, NULL, 0x01,
12755
14
            NULL, HFILL }
12756
14
        },
12757
14
        { &hf_btcommon_le_channel_map_23,
12758
14
            { "RF Channel 25 (2452 MHz - Data - 23)",                "btcommon.le_channel_map.23",
12759
14
            FT_BOOLEAN, 8, NULL, 0x80,
12760
14
            NULL, HFILL }
12761
14
        },
12762
14
        { &hf_btcommon_le_channel_map_22,
12763
14
            { "RF Channel 24 (2450 MHz - Data - 22)",                "btcommon.le_channel_map.22",
12764
14
            FT_BOOLEAN, 8, NULL, 0x40,
12765
14
            NULL, HFILL }
12766
14
        },
12767
14
        { &hf_btcommon_le_channel_map_21,
12768
14
            { "RF Channel 23 (2448 MHz - Data - 21)",                "btcommon.le_channel_map.21",
12769
14
            FT_BOOLEAN, 8, NULL, 0x20,
12770
14
            NULL, HFILL }
12771
14
        },
12772
14
        { &hf_btcommon_le_channel_map_20,
12773
14
            { "RF Channel 22 (2446 MHz - Data - 20)",                "btcommon.le_channel_map.20",
12774
14
            FT_BOOLEAN, 8, NULL, 0x10,
12775
14
            NULL, HFILL }
12776
14
        },
12777
14
        { &hf_btcommon_le_channel_map_19,
12778
14
            { "RF Channel 21 (2444 MHz - Data - 19)",                "btcommon.le_channel_map.19",
12779
14
            FT_BOOLEAN, 8, NULL, 0x08,
12780
14
            NULL, HFILL }
12781
14
        },
12782
14
        { &hf_btcommon_le_channel_map_18,
12783
14
            { "RF Channel 20 (2442 MHz - Data - 18)",                "btcommon.le_channel_map.18",
12784
14
            FT_BOOLEAN, 8, NULL, 0x04,
12785
14
            NULL, HFILL }
12786
14
        },
12787
14
        { &hf_btcommon_le_channel_map_17,
12788
14
            { "RF Channel 19 (2440 MHz - Data - 17)",                "btcommon.le_channel_map.17",
12789
14
            FT_BOOLEAN, 8, NULL, 0x02,
12790
14
            NULL, HFILL }
12791
14
        },
12792
14
        { &hf_btcommon_le_channel_map_16,
12793
14
            { "RF Channel 18 (2438 MHz - Data - 16)",                "btcommon.le_channel_map.16",
12794
14
            FT_BOOLEAN, 8, NULL, 0x01,
12795
14
            NULL, HFILL }
12796
14
        },
12797
14
        { &hf_btcommon_le_channel_map_15,
12798
14
            { "RF Channel 17 (2436 MHz - Data - 15)",                "btcommon.le_channel_map.15",
12799
14
            FT_BOOLEAN, 8, NULL, 0x80,
12800
14
            NULL, HFILL }
12801
14
        },
12802
14
        { &hf_btcommon_le_channel_map_14,
12803
14
            { "RF Channel 16 (2434 MHz - Data - 14)",                "btcommon.le_channel_map.14",
12804
14
            FT_BOOLEAN, 8, NULL, 0x40,
12805
14
            NULL, HFILL }
12806
14
        },
12807
14
        { &hf_btcommon_le_channel_map_13,
12808
14
            { "RF Channel 15 (2432 MHz - Data - 13)",                "btcommon.le_channel_map.13",
12809
14
            FT_BOOLEAN, 8, NULL, 0x20,
12810
14
            NULL, HFILL }
12811
14
        },
12812
14
        { &hf_btcommon_le_channel_map_12,
12813
14
            { "RF Channel 14 (2430 MHz - Data - 12)",                "btcommon.le_channel_map.12",
12814
14
            FT_BOOLEAN, 8, NULL, 0x10,
12815
14
            NULL, HFILL }
12816
14
        },
12817
14
        { &hf_btcommon_le_channel_map_11,
12818
14
            { "RF Channel 13 (2428 MHz - Data - 11)",                "btcommon.le_channel_map.11",
12819
14
            FT_BOOLEAN, 8, NULL, 0x08,
12820
14
            NULL, HFILL }
12821
14
        },
12822
14
        { &hf_btcommon_le_channel_map_10,
12823
14
            { "RF Channel 11 (2424 MHz - Data - 10)",                "btcommon.le_channel_map.10",
12824
14
            FT_BOOLEAN, 8, NULL, 0x04,
12825
14
            NULL, HFILL }
12826
14
        },
12827
14
        { &hf_btcommon_le_channel_map_9,
12828
14
            { "RF Channel 10 (2422 MHz - Data - 9)",                 "btcommon.le_channel_map.9",
12829
14
            FT_BOOLEAN, 8, NULL, 0x02,
12830
14
            NULL, HFILL }
12831
14
        },
12832
14
        { &hf_btcommon_le_channel_map_8,
12833
14
            { "RF Channel 9 (2420 MHz - Data - 8)",                  "btcommon.le_channel_map.8",
12834
14
            FT_BOOLEAN, 8, NULL, 0x01,
12835
14
            NULL, HFILL }
12836
14
        },
12837
14
        { &hf_btcommon_le_channel_map_7,
12838
14
            { "RF Channel 8 (2418 MHz - Data - 7)",                  "btcommon.le_channel_map.7",
12839
14
            FT_BOOLEAN, 8, NULL, 0x80,
12840
14
            NULL, HFILL }
12841
14
        },
12842
14
        { &hf_btcommon_le_channel_map_6,
12843
14
            { "RF Channel 7 (2416 MHz - Data - 6)",                  "btcommon.le_channel_map.6",
12844
14
            FT_BOOLEAN, 8, NULL, 0x40,
12845
14
            NULL, HFILL }
12846
14
        },
12847
14
        { &hf_btcommon_le_channel_map_5,
12848
14
            { "RF Channel 6 (2414 MHz - Data - 5)",                  "btcommon.le_channel_map.5",
12849
14
            FT_BOOLEAN, 8, NULL, 0x20,
12850
14
            NULL, HFILL }
12851
14
        },
12852
14
        { &hf_btcommon_le_channel_map_4,
12853
14
            { "RF Channel 5 (2412 MHz - Data - 4)",                  "btcommon.le_channel_map.4",
12854
14
            FT_BOOLEAN, 8, NULL, 0x10,
12855
14
            NULL, HFILL }
12856
14
        },
12857
14
        { &hf_btcommon_le_channel_map_3,
12858
14
            { "RF Channel 4 (2410 MHz - Data - 3)",                  "btcommon.le_channel_map.3",
12859
14
            FT_BOOLEAN, 8, NULL, 0x08,
12860
14
            NULL, HFILL }
12861
14
        },
12862
14
        { &hf_btcommon_le_channel_map_2,
12863
14
            { "RF Channel 3 (2408 MHz - Data - 2)",                  "btcommon.le_channel_map.2",
12864
14
            FT_BOOLEAN, 8, NULL, 0x04,
12865
14
            NULL, HFILL }
12866
14
        },
12867
14
        { &hf_btcommon_le_channel_map_1,
12868
14
            { "RF Channel 2 (2406 MHz - Data - 1)",                  "btcommon.le_channel_map.1",
12869
14
            FT_BOOLEAN, 8, NULL, 0x02,
12870
14
            NULL, HFILL }
12871
14
        },
12872
14
        { &hf_btcommon_le_channel_map_0,
12873
14
            { "RF Channel 1 (2404 MHz - Data - 0)",                  "btcommon.le_channel_map.0",
12874
14
            FT_BOOLEAN, 8, NULL, 0x01,
12875
14
            NULL, HFILL }
12876
14
        },
12877
14
        { &hf_btcommon_eir_ad_mesh_msg,
12878
14
            { "Mesh message content",        "btcommon.eir_ad.entry.mesh_msg",
12879
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
12880
14
            NULL, HFILL }
12881
14
        },
12882
14
        { &hf_btcommon_eir_ad_mesh_pbadv,
12883
14
            { "Mesh PB-ADV message content",        "btcommon.eir_ad.entry.mesh_pbadv",
12884
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
12885
14
            NULL, HFILL }
12886
14
        },
12887
14
        { &hf_btcommon_eir_ad_mesh_beacon,
12888
14
            { "Mesh Beacon message content",        "btcommon.eir_ad.entry.mesh_beacon",
12889
14
            FT_BYTES, BASE_NONE, NULL, 0x0,
12890
14
            NULL, HFILL }
12891
14
        },
12892
14
    };
12893
12894
14
    static int *ett[] = {
12895
14
        &ett_eir_ad,
12896
14
        &ett_eir_ad_entry,
12897
14
        &ett_eir_ad_le_features,
12898
14
        &ett_eir_ad_biginfo_seedaa
12899
14
    };
12900
12901
14
    static ei_register_info ei[] = {
12902
14
        { &ei_eir_ad_undecoded,       { "btcommon.eir_ad.undecoded",      PI_UNDECODED, PI_NOTE, "Undecoded", EXPFILL }},
12903
14
        { &ei_eir_ad_unknown,         { "btcommon.eir_ad.unknown",        PI_PROTOCOL,  PI_WARN, "Unknown data", EXPFILL }},
12904
14
        { &ei_eir_ad_not_used,        { "btcommon.eir_ad.not_used",       PI_PROTOCOL,  PI_WARN, "Value should not be used", EXPFILL }},
12905
14
        { &ei_eir_ad_invalid_length,  { "btcommon.eir_ad.invalid_length", PI_PROTOCOL,  PI_WARN, "Invalid Length", EXPFILL }},
12906
14
    };
12907
12908
14
    static build_valid_func bluetooth_eir_ad_manufacturer_company_id_da_build_value[1] = {bluetooth_eir_ad_manufacturer_company_id_value};
12909
14
    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};
12910
14
    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,
12911
14
                                 decode_as_default_populate_list, decode_as_default_reset, decode_as_default_change, NULL};
12912
12913
14
    static build_valid_func bluetooth_eir_ad_tds_organization_id_da_build_value[1] = {bluetooth_eir_ad_tds_organization_id_value};
12914
14
    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};
12915
14
    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,
12916
14
                                 decode_as_default_populate_list, decode_as_default_reset, decode_as_default_change, NULL};
12917
12918
14
    proto_btcommon = proto_register_protocol("Bluetooth Common", "BT Common", "btcommon");
12919
12920
14
    proto_register_field_array(proto_btcommon, hf, array_length(hf));
12921
14
    proto_register_subtree_array(ett, array_length(ett));
12922
12923
14
    expert_module = expert_register_protocol(proto_btcommon);
12924
14
    expert_register_field_array(expert_module, ei, array_length(ei));
12925
14
    (void )ei_command_undecoded; /* Not needed not, but there is upcoming Bluetooth 5 */
12926
12927
14
    btcommon_ad_handle  = register_dissector("btcommon.eir_ad.ad",  dissect_btcommon_ad,  proto_btcommon);
12928
14
    btcommon_eir_handle = register_dissector("btcommon.eir_ad.eir", dissect_btcommon_eir, proto_btcommon);
12929
14
    btcommon_cod_handle = register_dissector("btcommon.cod",        dissect_btcommon_cod, proto_btcommon);
12930
14
    btcommon_le_channel_map_handle = register_dissector("btcommon.le_channel_map", dissect_btcommon_le_channel_map, proto_btcommon);
12931
12932
14
    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);
12933
14
    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);
12934
12935
    // 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.
12936
    // 128-bit UUIDs have 4 dashes in them, and therefore have 36 characters.
12937
14
    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);
12938
12939
14
    register_decode_as(&bluetooth_eir_ad_manufacturer_company_id_da);
12940
14
    register_decode_as(&bluetooth_eir_ad_tds_organization_id_da);
12941
14
}
12942
12943
void
12944
proto_reg_handoff_btcommon(void)
12945
14
{
12946
14
    btmesh_handle = find_dissector("btmesh.msg");
12947
14
    btmesh_pbadv_handle = find_dissector("btmesh.pbadv");
12948
14
    btmesh_beacon_handle = find_dissector("btmesh.beacon");
12949
14
}
12950
12951
12952
12953
/*
12954
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
12955
 *
12956
 * Local variables:
12957
 * c-basic-offset: 4
12958
 * tab-width: 8
12959
 * indent-tabs-mode: nil
12960
 * End:
12961
 *
12962
 * vi: set shiftwidth=4 tabstop=8 expandtab:
12963
 * :indentSize=4:tabSize=8:noTabs=true:
12964
 */