/src/wireshark/epan/dissectors/packet-btlmp.c
Line | Count | Source |
1 | | /* packet-btlmp.c |
2 | | * Routines for the Bluetooth Link Manager Protocol |
3 | | * |
4 | | * Copyright 2020, Thomas Sailer <t.sailer@alumni.ethz.ch> |
5 | | * |
6 | | * Wireshark - Network traffic analyzer |
7 | | * By Gerald Combs <gerald@wireshark.org> |
8 | | * Copyright 1998 Gerald Combs |
9 | | * |
10 | | * SPDX-License-Identifier: GPL-2.0-or-later |
11 | | */ |
12 | | |
13 | | #include "config.h" |
14 | | |
15 | | #include <epan/packet.h> |
16 | | #include <epan/unit_strings.h> |
17 | | |
18 | | |
19 | | #include "packet-btbredr_rf.h" |
20 | | |
21 | | static int proto_btlmp; |
22 | | |
23 | | static int hf_opcode[3]; |
24 | | static int hf_escopcode[4]; |
25 | | static int hf_accept_opcode; |
26 | | static int hf_accept_escopcode[4]; |
27 | | static int hf_errorcode; |
28 | | static int hf_param_feature_page0_byte0[9]; |
29 | | static int hf_param_feature_page0_byte1[9]; |
30 | | static int hf_param_feature_page0_byte2[7]; |
31 | | static int hf_param_feature_page0_byte3[9]; |
32 | | static int hf_param_feature_page0_byte4[9]; |
33 | | static int hf_param_feature_page0_byte5[9]; |
34 | | static int hf_param_feature_page0_byte6[9]; |
35 | | static int hf_param_feature_page0_byte7[6]; |
36 | | static int hf_param_feature_page1_byte0[6]; |
37 | | static int hf_param_feature_page2_byte0[9]; |
38 | | static int hf_param_feature_page2_byte1[6]; |
39 | | static int hf_param_features_page; |
40 | | static int hf_param_max_supported_page; |
41 | | static int hf_param_versnr; |
42 | | static int hf_param_compid; |
43 | | static int hf_param_subversnr; |
44 | | static int hf_param_namelength; |
45 | | static int hf_param_nameoffset; |
46 | | static int hf_param_namefragment; |
47 | | static int hf_param_afh_mode; |
48 | | static int hf_param_afh_instant; |
49 | | static int hf_param_afh_channelmap[10]; |
50 | | static int hf_param_afh_reportingmode; |
51 | | static int hf_param_afh_mininterval; |
52 | | static int hf_param_afh_maxinterval; |
53 | | static int hf_param_afh_channelclass[10][4]; |
54 | | static int hf_param_rand; |
55 | | static int hf_param_key; |
56 | | static int hf_param_clockoffset; |
57 | | static int hf_param_authresp; |
58 | | static int hf_param_encryptionmode; |
59 | | static int hf_param_encryptionkeysize; |
60 | | static int hf_param_switchinstant; |
61 | | static int hf_param_holdtime; |
62 | | static int hf_param_holdinstant; |
63 | | static int hf_param_dsniff; |
64 | | static int hf_param_tsniff; |
65 | | static int hf_param_sniffattempt; |
66 | | static int hf_param_snifftimeout; |
67 | | static int hf_param_timingcontrolflags[5]; |
68 | | static int hf_param_futureuse1; |
69 | | static int hf_param_datarate[6]; |
70 | | static int hf_param_pollinterval; |
71 | | static int hf_param_nbc; |
72 | | static int hf_param_scohandle; |
73 | | static int hf_param_dsco; |
74 | | static int hf_param_tsco; |
75 | | static int hf_param_scopacket; |
76 | | static int hf_param_airmode; |
77 | | static int hf_param_slots; |
78 | | static int hf_param_tmgacc_drift; |
79 | | static int hf_param_tmgacc_jitter; |
80 | | static int hf_param_slotoffset; |
81 | | static int hf_param_bdaddr; |
82 | | static int hf_param_pagingscheme; |
83 | | static int hf_param_pagingschemesettings; |
84 | | static int hf_param_supervisiontimeout; |
85 | | static int hf_param_testscenario; |
86 | | static int hf_param_testhoppingmode; |
87 | | static int hf_param_testtxfrequency; |
88 | | static int hf_param_testrxfrequency; |
89 | | static int hf_param_testpowercontrolmode; |
90 | | static int hf_param_testpollperiod; |
91 | | static int hf_param_testpackettype; |
92 | | static int hf_param_testdatalength; |
93 | | static int hf_param_keysizemask; |
94 | | static int hf_param_encapsulatedmajor; |
95 | | static int hf_param_encapsulatedminor; |
96 | | static int hf_param_encapsulatedlength; |
97 | | static int hf_param_encapsulateddata; |
98 | | static int hf_param_simplepaircommit; |
99 | | static int hf_param_simplepairnonce; |
100 | | static int hf_param_dhkeyconfirm; |
101 | | static int hf_param_clkadjid; |
102 | | static int hf_param_clkadjinstant; |
103 | | static int hf_param_clkadjus; |
104 | | static int hf_param_clkadjslots; |
105 | | static int hf_param_clkadjmode; |
106 | | static int hf_param_clkadjclk; |
107 | | static int hf_param_clkadjperiod; |
108 | | static int hf_param_packettypetable; |
109 | | static int hf_param_escohandle; |
110 | | static int hf_param_escoltaddr; |
111 | | static int hf_param_escod; |
112 | | static int hf_param_escot; |
113 | | static int hf_param_escow; |
114 | | static int hf_param_escopackettypems; |
115 | | static int hf_param_escopackettypesm; |
116 | | static int hf_param_escopacketlengthms; |
117 | | static int hf_param_escopacketlengthsm; |
118 | | static int hf_param_negostate; |
119 | | static int hf_param_maxsniffsubrate; |
120 | | static int hf_param_minsniffmodetimeout; |
121 | | static int hf_param_sniffsubratinginstant; |
122 | | static int hf_param_iocapcap; |
123 | | static int hf_param_iocapoobauthdata; |
124 | | static int hf_param_iocapauthreq; |
125 | | static int hf_param_keypressnotificationtype; |
126 | | static int hf_param_poweradjreq; |
127 | | static int hf_param_poweradjresp[5]; |
128 | | static int hf_param_samindex; |
129 | | static int hf_param_samtsm; |
130 | | static int hf_param_samnsm; |
131 | | static int hf_param_samsubmaps; |
132 | | static int hf_param_samupdatemode; |
133 | | static int hf_param_samtype0submap; |
134 | | static int hf_param_samd; |
135 | | static int hf_param_saminstant; |
136 | | static int hf_params; |
137 | | |
138 | | static int ett_btlmp; |
139 | | |
140 | | static dissector_handle_t btlmp_handle; |
141 | | |
142 | | static const value_string opcode_vals[] = { |
143 | | { 1, "LMP_name_req" }, |
144 | | { 2, "LMP_name_res" }, |
145 | | { 3, "LMP_accepted" }, |
146 | | { 4, "LMP_not_accepted" }, |
147 | | { 5, "LMP_clkoffset_req" }, |
148 | | { 6, "LMP_clkoffset_res" }, |
149 | | { 7, "LMP_detach" }, |
150 | | { 8, "LMP_in_rand" }, |
151 | | { 9, "LMP_comb_key" }, |
152 | | { 10, "LMP_unit_key" }, |
153 | | { 11, "LMP_au_rand" }, |
154 | | { 12, "LMP_sres" }, |
155 | | { 13, "LMP_temp_rand" }, |
156 | | { 14, "LMP_temp_key" }, |
157 | | { 15, "LMP_encryption_mode_req" }, |
158 | | { 16, "LMP_encryption_key_size_req" }, |
159 | | { 17, "LMP_start_encryption_req" }, |
160 | | { 18, "LMP_stop_encryption_req" }, |
161 | | { 19, "LMP_switch_req" }, |
162 | | { 20, "LMP_hold" }, |
163 | | { 21, "LMP_hold_req" }, |
164 | | { 23, "LMP_sniff_req" }, |
165 | | { 24, "LMP_unsniff_req" }, |
166 | | { 31, "LMP_incr_power_req" }, |
167 | | { 32, "LMP_decr_power_req" }, |
168 | | { 33, "LMP_max_power" }, |
169 | | { 34, "LMP_min_power" }, |
170 | | { 35, "LMP_auto_rate" }, |
171 | | { 36, "LMP_preferred_rate" }, |
172 | | { 37, "LMP_version_req" }, |
173 | | { 38, "LMP_version_res" }, |
174 | | { 39, "LMP_features_req" }, |
175 | | { 40, "LMP_features_res" }, |
176 | | { 41, "LMP_quality_of_service" }, |
177 | | { 42, "LMP_quality_of_service_req" }, |
178 | | { 43, "LMP_SCO_link_req" }, |
179 | | { 44, "LMP_remove_SCO_link_req" }, |
180 | | { 45, "LMP_max_slot" }, |
181 | | { 46, "LMP_max_slot_req" }, |
182 | | { 47, "LMP_timing_accuracy_req" }, |
183 | | { 48, "LMP_timing_accuracy_res" }, |
184 | | { 49, "LMP_setup_complete" }, |
185 | | { 50, "LMP_use_semi_permanent_key" }, |
186 | | { 51, "LMP_host_connection_req" }, |
187 | | { 52, "LMP_slot_offset" }, |
188 | | { 53, "LMP_page_mode_req" }, |
189 | | { 54, "LMP_page_scan_mode_req" }, |
190 | | { 55, "LMP_supervision_timeout" }, |
191 | | { 56, "LMP_test_activate" }, |
192 | | { 57, "LMP_test_control" }, |
193 | | { 58, "LMP_encryption_key_size_mask_req" }, |
194 | | { 59, "LMP_encryption_key_size_mask_res" }, |
195 | | { 60, "LMP_set_AFH" }, |
196 | | { 61, "LMP_encapsulated_header" }, |
197 | | { 62, "LMP_encapsulated_payload" }, |
198 | | { 63, "LMP_Simple_Pairing_Confirm" }, |
199 | | { 64, "LMP_Simple_Pairing_Number" }, |
200 | | { 65, "LMP_DHkey_Check" }, |
201 | | { 66, "LMP_pause_encryption_aes_req" }, |
202 | | { 124, "Escape 1" }, |
203 | | { 125, "Escape 2" }, |
204 | | { 126, "Escape 3" }, |
205 | | { 127, "Escape 4" }, |
206 | | { 0, NULL } |
207 | | }; |
208 | | |
209 | | static const value_string escape1_2_3_opcode_vals[] = { |
210 | | { 0x00, "Mandatory Scan Mode" }, |
211 | | { 0, NULL } |
212 | | }; |
213 | | |
214 | | static const value_string escape4_opcode_vals[] = { |
215 | | { 1, "LMP_accepted_ext" }, |
216 | | { 2, "LMP_not_accepted_ext" }, |
217 | | { 3, "LMP_features_req_ext" }, |
218 | | { 4, "LMP_features_res_ext" }, |
219 | | { 5, "LMP_clk_adj" }, |
220 | | { 6, "LMP_clk_adj_ack" }, |
221 | | { 7, "LMP_clk_adj_req" }, |
222 | | { 11, "LMP_packet_type_table_req" }, |
223 | | { 12, "LMP_eSCO_link_req" }, |
224 | | { 13, "LMP_remove_eSCO_link_req" }, |
225 | | { 16, "LMP_channel_classification_req" }, |
226 | | { 17, "LMP_channel_classification" }, |
227 | | { 21, "LMP_sniff_subrating_req" }, |
228 | | { 22, "LMP_sniff_subrating_res" }, |
229 | | { 23, "LMP_pause_encryption_req" }, |
230 | | { 24, "LMP_resume_encryption_req" }, |
231 | | { 25, "LMP_IO_Capability_req" }, |
232 | | { 26, "LMP_IO_Capability_res" }, |
233 | | { 27, "LMP_numeric_comparison_failed" }, |
234 | | { 28, "LMP_passkey_failed" }, |
235 | | { 29, "LMP_oob_failed" }, |
236 | | { 30, "LMP_keypress_notification" }, |
237 | | { 31, "LMP_power_control_req" }, |
238 | | { 32, "LMP_power_control_res" }, |
239 | | { 33, "LMP_ping_req" }, |
240 | | { 34, "LMP_ping_res" }, |
241 | | { 35, "LMP_SAM_set_type0" }, |
242 | | { 36, "LMP_SAM_define_map" }, |
243 | | { 37, "LMP_SAM_switch" }, |
244 | | { 0, NULL } |
245 | | }; |
246 | | |
247 | | static const value_string errorcode_vals[] = { |
248 | | { 0x00, "Success" }, |
249 | | { 0x01, "Unknown HCI Command" }, |
250 | | { 0x02, "Unknown Connection Identifier" }, |
251 | | { 0x03, "Hardware Failure" }, |
252 | | { 0x04, "Page Timeout" }, |
253 | | { 0x05, "Authentication Failure" }, |
254 | | { 0x06, "PIN or Key Missing" }, |
255 | | { 0x07, "Memory Capacity Exceeded" }, |
256 | | { 0x08, "Connection Timeout" }, |
257 | | { 0x09, "Connection Limit Exceeded" }, |
258 | | { 0x0A, "Synchronous Connection Limit To A Device Exceeded" }, |
259 | | { 0x0B, "Connection Already Exists" }, |
260 | | { 0x0C, "Command Disallowed" }, |
261 | | { 0x0D, "Connection Rejected due to Limited Resources" }, |
262 | | { 0x0E, "Connection Rejected Due To Security Reasons" }, |
263 | | { 0x0F, "Connection Rejected due to Unacceptable BD_ADDR" }, |
264 | | { 0x10, "Connection Accept Timeout Exceeded" }, |
265 | | { 0x11, "Unsupported Feature or Parameter Value" }, |
266 | | { 0x12, "Invalid HCI Command Parameters" }, |
267 | | { 0x13, "Remote User Terminated Connection" }, |
268 | | { 0x14, "Remote Device Terminated Connection due to Low Resources" }, |
269 | | { 0x15, "Remote Device Terminated Connection due to Power Off" }, |
270 | | { 0x16, "Connection Terminated By Local Host" }, |
271 | | { 0x17, "Repeated Attempts" }, |
272 | | { 0x18, "Pairing Not Allowed" }, |
273 | | { 0x19, "Unknown LMP PDU" }, |
274 | | { 0x1A, "Unsupported Remote Feature / Unsupported LMP Feature" }, |
275 | | { 0x1B, "SCO Offset Rejected" }, |
276 | | { 0x1C, "SCO Interval Rejected" }, |
277 | | { 0x1D, "SCO Air Mode Rejected" }, |
278 | | { 0x1E, "Invalid LMP Parameters / Invalid LL Parameters" }, |
279 | | { 0x1F, "Unspecified Error" }, |
280 | | { 0x20, "Unsupported LMP Parameter Value / Unsupported LL Parameter Value" }, |
281 | | { 0x21, "Role Change Not Allowed" }, |
282 | | { 0x22, "LMP Response Timeout / LL Response Timeout" }, |
283 | | { 0x23, "LMP Error Transaction Collision / LL Procedure Collision" }, |
284 | | { 0x24, "LMP PDU Not Allowed" }, |
285 | | { 0x25, "Encryption Mode Not Acceptable" }, |
286 | | { 0x26, "Link Key cannot be Changed" }, |
287 | | { 0x27, "Requested QoS Not Supported" }, |
288 | | { 0x28, "Instant Passed" }, |
289 | | { 0x29, "Pairing With Unit Key Not Supported" }, |
290 | | { 0x2A, "Different Transaction Collision" }, |
291 | | { 0x2B, "Reserved for future use" }, |
292 | | { 0x2C, "QoS Unacceptable Parameter" }, |
293 | | { 0x2D, "QoS Rejected" }, |
294 | | { 0x2E, "Channel Classification Not Supported" }, |
295 | | { 0x2F, "Insufficient Security" }, |
296 | | { 0x30, "Parameter Out Of Mandatory Range" }, |
297 | | { 0x31, "Reserved for future use" }, |
298 | | { 0x32, "Role Switch Pending" }, |
299 | | { 0x33, "Reserved for future use" }, |
300 | | { 0x34, "Reserved Slot Violation" }, |
301 | | { 0x35, "Role Switch Failed" }, |
302 | | { 0x36, "Extended Inquiry Response Too Large" }, |
303 | | { 0x37, "Secure Simple Pairing Not Supported By Host" }, |
304 | | { 0x38, "Host Busy - Pairing" }, |
305 | | { 0x39, "Connection Rejected due to No Suitable Channel Found" }, |
306 | | { 0x3A, "Controller Busy" }, |
307 | | { 0x3B, "Unacceptable Connection Parameters" }, |
308 | | { 0x3C, "Advertising Timeout" }, |
309 | | { 0x3D, "Connection Terminated due to MIC Failure" }, |
310 | | { 0x3E, "Connection Failed to be Established / Synchronization Timeout" }, |
311 | | { 0x3F, "MAC Connection Failed" }, |
312 | | { 0x40, "Coarse Clock Adjustment Rejected but Will Try to Adjust Using Clock" }, |
313 | | { 0x41, "Type0 Submap Not Defined" }, |
314 | | { 0x42, "Unknown Advertising Identifier" }, |
315 | | { 0x43, "Limit Reached" }, |
316 | | { 0x44, "Operation Cancelled by Host" }, |
317 | | { 0x45, "Packet Too Long" }, |
318 | | { 0x00, NULL } |
319 | | }; |
320 | | static value_string_ext errorcode_vals_ext = VALUE_STRING_EXT_INIT(errorcode_vals); |
321 | | |
322 | | static const value_string afh_mode_vals[] = { |
323 | | { 0x00, "AFH disabled" }, |
324 | | { 0x01, "AFH enabled" }, |
325 | | { 0x00, NULL } |
326 | | }; |
327 | | |
328 | | static const value_string afh_reportingmode_vals[] = { |
329 | | { 0x00, "AFH reporting disabled" }, |
330 | | { 0x01, "AFH reporting enabled" }, |
331 | | { 0x00, NULL } |
332 | | }; |
333 | | |
334 | | static const value_string afh_channelclass_vals[] = { |
335 | | { 0x00, "unknown" }, |
336 | | { 0x01, "good" }, |
337 | | { 0x02, "reserved" }, |
338 | | { 0x03, "bad" }, |
339 | | { 0x00, NULL } |
340 | | }; |
341 | | |
342 | | static const value_string encryptionmode_vals[] = { |
343 | | { 0x00, "no encryption" }, |
344 | | { 0x01, "encryption" }, |
345 | | { 0x02, "encryption" }, |
346 | | { 0x00, NULL } |
347 | | }; |
348 | | |
349 | | static const value_string timingcontrol_timingchange_vals[] = { |
350 | | { 0x00, "no timing change" }, |
351 | | { 0x01, "timing change" }, |
352 | | { 0x00, NULL } |
353 | | }; |
354 | | |
355 | | static const value_string timingcontrol_useinit2[] = { |
356 | | { 0x00, "use initialization 1" }, |
357 | | { 0x01, "use initialization 2" }, |
358 | | { 0x00, NULL } |
359 | | }; |
360 | | |
361 | | static const value_string timingcontrol_noaccesswindow[] = { |
362 | | { 0x00, "access window" }, |
363 | | { 0x01, "no access window" }, |
364 | | { 0x00, NULL } |
365 | | }; |
366 | | |
367 | | static const value_string dataratenofec_vals[] = { |
368 | | { 0x00, "use FEC" }, |
369 | | { 0x01, "do not use FEC" }, |
370 | | { 0x00, NULL } |
371 | | }; |
372 | | |
373 | | static const value_string dataratepacketsizepreference_vals[] = { |
374 | | { 0x00, "no packet size preference" }, |
375 | | { 0x01, "use 1-slot packets" }, |
376 | | { 0x02, "use 3-slot packets" }, |
377 | | { 0x03, "use 5-slot packets" }, |
378 | | { 0x00, NULL } |
379 | | }; |
380 | | |
381 | | static const value_string dataratedrpreference_vals[] = { |
382 | | { 0x00, "use DM1 packets" }, |
383 | | { 0x01, "use 2Mb/s packets" }, |
384 | | { 0x02, "use 3Mb/s packets" }, |
385 | | { 0x00, NULL } |
386 | | }; |
387 | | |
388 | | static const value_string scopacket_vals[] = { |
389 | | { 0x00, "HV1" }, |
390 | | { 0x01, "HV2" }, |
391 | | { 0x02, "HV3" }, |
392 | | { 0x00, NULL } |
393 | | }; |
394 | | |
395 | | static const value_string airmode_vals[] = { |
396 | | { 0x00, "ulaw log" }, |
397 | | { 0x01, "Alaw log" }, |
398 | | { 0x02, "CVSD" }, |
399 | | { 0x03, "transparent data" }, |
400 | | { 0x00, NULL } |
401 | | }; |
402 | | |
403 | | static const value_string pagingscheme_vals[] = { |
404 | | { 0x00, "mandatory scheme" }, |
405 | | { 0x00, NULL } |
406 | | }; |
407 | | |
408 | | static const value_string pagingschemesettings_vals[] = { |
409 | | { 0x00, "R0" }, |
410 | | { 0x01, "R1" }, |
411 | | { 0x02, "R2" }, |
412 | | { 0x00, NULL } |
413 | | }; |
414 | | |
415 | | static const value_string encapsulatedmajor_vals[] = { |
416 | | { 0x01, "public key" }, |
417 | | { 0x00, NULL } |
418 | | }; |
419 | | |
420 | | static const value_string encapsulatedminor_vals[] = { |
421 | | { 0x01, "P-192 public key" }, |
422 | | { 0x02, "P-256 public key" }, |
423 | | { 0x00, NULL } |
424 | | }; |
425 | | |
426 | | static const value_string clkadjmode_vals[] = { |
427 | | { 0x00, "before instant" }, |
428 | | { 0x01, "after instant" }, |
429 | | { 0x00, NULL } |
430 | | }; |
431 | | |
432 | | static const value_string packettypetable_vals[] = { |
433 | | { 0x00, "1Mb/s only" }, |
434 | | { 0x01, "2/3Mb/s" }, |
435 | | { 0x00, NULL } |
436 | | }; |
437 | | |
438 | | static const value_string escopackettypems_vals[] = { |
439 | | { 0x00, "POLL" }, |
440 | | { 0x07, "EV3" }, |
441 | | { 0x0c, "EV4" }, |
442 | | { 0x0d, "EV5" }, |
443 | | { 0x26, "2-EV3" }, |
444 | | { 0x2c, "2-EV5" }, |
445 | | { 0x37, "3-EV3" }, |
446 | | { 0x3d, "3-EV5" }, |
447 | | { 0x00, NULL } |
448 | | }; |
449 | | |
450 | | static const value_string escopackettypesm_vals[] = { |
451 | | { 0x00, "NULL" }, |
452 | | { 0x07, "EV3" }, |
453 | | { 0x0c, "EV4" }, |
454 | | { 0x0d, "EV5" }, |
455 | | { 0x26, "2-EV3" }, |
456 | | { 0x2c, "2-EV5" }, |
457 | | { 0x37, "3-EV3" }, |
458 | | { 0x3d, "3-EV5" }, |
459 | | { 0x00, NULL } |
460 | | }; |
461 | | |
462 | | static const value_string negostate_vals[] = { |
463 | | { 0, "initiate negotiation" }, |
464 | | { 1, "the latest received set of negotiable parameters were possible but these parameters are preferred" }, |
465 | | { 2, "the latest received set of negotiable parameters would cause a reserved slot violation" }, |
466 | | { 3, "the latest received set of negotiable parameters would cause a latency violation" }, |
467 | | { 4, "the latest received set of negotiable parameters are not supported" }, |
468 | | { 0, NULL } |
469 | | }; |
470 | | |
471 | | static const value_string iocapcap_vals[] = { |
472 | | { 0x00, "Display Only" }, |
473 | | { 0x01, "Display Yes/No" }, |
474 | | { 0x02, "Keyboard Only" }, |
475 | | { 0x03, "No Input No Output" }, |
476 | | { 0x00, NULL } |
477 | | }; |
478 | | |
479 | | static const value_string iocapoobauthdata_vals[] = { |
480 | | { 0x00, "No OOB Authentication Data received" }, |
481 | | { 0x01, "OOB Authentication Data received" }, |
482 | | { 0x00, NULL } |
483 | | }; |
484 | | |
485 | | static const value_string iocapauthreq_vals[] = { |
486 | | { 0x00, "MITM Protection Not Required - No Bonding" }, |
487 | | { 0x01, "MITM Protection Required - No Bonding" }, |
488 | | { 0x02, "MITM Protection Not Required - Dedicated Bonding" }, |
489 | | { 0x03, "MITM Protection Required - Dedicated Bonding" }, |
490 | | { 0x04, "MITM Protection Not Required - General Bonding" }, |
491 | | { 0x05, "MITM Protection Required - General Bonding" }, |
492 | | { 0x00, NULL } |
493 | | }; |
494 | | |
495 | | static const value_string keypressnotificationtype_vals[] = { |
496 | | { 0x00, "passkey entry started" }, |
497 | | { 0x01, "passkey digit entered" }, |
498 | | { 0x02, "passkey digit erased" }, |
499 | | { 0x03, "passkey cleared" }, |
500 | | { 0x04, "passkey entry completed" }, |
501 | | { 0x00, NULL } |
502 | | }; |
503 | | |
504 | | static const value_string poweradjreq_vals[] = { |
505 | | { 0x00, "decrement power one step" }, |
506 | | { 0x01, "increment power one step" }, |
507 | | { 0x02, "increase to maximum power" }, |
508 | | { 0x00, NULL } |
509 | | }; |
510 | | |
511 | | static const value_string poweradjresp_vals[] = { |
512 | | { 0x00, "not supported" }, |
513 | | { 0x01, "changed one step" }, |
514 | | { 0x02, "max power" }, |
515 | | { 0x03, "min power" }, |
516 | | { 0x00, NULL } |
517 | | }; |
518 | | |
519 | | static const value_string samupdatemode_vals[] = { |
520 | | { 0, "Existing SAM slot maps containing any type 0 submaps are invalidated" }, |
521 | | { 1, "The defined type 0 submap takes effect immediately" }, |
522 | | { 2, "The defined type 0 submap takes effect at the start of the next sub-interval" }, |
523 | | { 0, NULL } |
524 | | }; |
525 | | |
526 | | static const unit_name_string units_slots = { " slot", " slots" }; |
527 | | |
528 | | static const unit_name_string units_slotpairs = { " slot pair", " slot pairs" }; |
529 | | |
530 | | |
531 | | |
532 | | |
533 | | static void decode_uint8_binary(char *s, uint8_t value) |
534 | 0 | { |
535 | 0 | for (unsigned i = 0; i < 8 && i + 1 < ITEM_LABEL_LENGTH; ++i, value <<= 1) |
536 | 0 | *s++ = '0' + ((value >> 7) & 1); |
537 | 0 | *s = 0; |
538 | 0 | } |
539 | | |
540 | | void proto_register_btlmp(void); |
541 | | void proto_reg_handoff_btlmp(void); |
542 | | |
543 | | static int |
544 | | dissect_btlmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) |
545 | 3 | { |
546 | 3 | proto_item *btlmp_item; |
547 | 3 | proto_tree *btlmp_tree; |
548 | 3 | int offset = 0; |
549 | 3 | uint16_t opcode; |
550 | 3 | connection_info_t *connection_info = (connection_info_t *)data; |
551 | | |
552 | 3 | btlmp_item = proto_tree_add_item(tree, proto_btlmp, tvb, offset, -1, ENC_NA); |
553 | 3 | btlmp_tree = proto_item_add_subtree(btlmp_item, ett_btlmp); |
554 | | |
555 | 3 | col_set_str(pinfo->cinfo, COL_PROTOCOL, "BT LMP"); |
556 | | |
557 | 12 | for (unsigned i = 0; i < array_length(hf_opcode); ++i) |
558 | 9 | proto_tree_add_item(btlmp_tree, hf_opcode[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
559 | 3 | opcode = tvb_get_uint8(tvb, offset) >> 1; |
560 | 3 | offset += 1; |
561 | 3 | if (opcode >= 0x7c) { |
562 | 0 | opcode &= 3; |
563 | 0 | proto_tree_add_item(btlmp_tree, hf_escopcode[opcode], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
564 | 0 | ++opcode; |
565 | 0 | opcode <<= 8; |
566 | 0 | opcode |= tvb_get_uint8(tvb, offset); |
567 | 0 | offset += 1; |
568 | 0 | } |
569 | 3 | switch (opcode) { |
570 | 0 | case 0x001: // LMP_name_req |
571 | 0 | break; |
572 | | |
573 | 0 | case 0x002: // LMP_name_res |
574 | 0 | proto_tree_add_item(btlmp_tree, hf_param_nameoffset, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
575 | 0 | ++offset; |
576 | 0 | proto_tree_add_item(btlmp_tree, hf_param_namelength, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
577 | 0 | ++offset; |
578 | 0 | if (tvb_captured_length_remaining(tvb, offset) == 0) |
579 | 0 | break; |
580 | 0 | proto_tree_add_item(btlmp_tree, hf_param_namefragment, tvb, offset, tvb_captured_length_remaining(tvb, offset), ENC_NA); |
581 | 0 | offset = tvb_reported_length(tvb); |
582 | 0 | break; |
583 | | |
584 | 0 | case 0x003: // LMP_accepted |
585 | 0 | proto_tree_add_item(btlmp_tree, hf_accept_opcode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
586 | 0 | ++offset; |
587 | 0 | break; |
588 | | |
589 | 0 | case 0x004: // LMP_not_accepted |
590 | 0 | proto_tree_add_item(btlmp_tree, hf_accept_opcode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
591 | 0 | ++offset; |
592 | 0 | proto_tree_add_item(btlmp_tree, hf_errorcode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
593 | 0 | ++offset; |
594 | 0 | break; |
595 | | |
596 | 0 | case 0x005: // LMP_clkoffset_req |
597 | 0 | break; |
598 | | |
599 | 0 | case 0x006: // LMP_clkoffset_res |
600 | 0 | proto_tree_add_item(btlmp_tree, hf_param_clockoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
601 | 0 | offset += 2; |
602 | 0 | break; |
603 | | |
604 | 0 | case 0x007: // LMP_detach |
605 | 0 | proto_tree_add_item(btlmp_tree, hf_errorcode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
606 | 0 | ++offset; |
607 | 0 | break; |
608 | | |
609 | 0 | case 0x008: // LMP_in_rand |
610 | 0 | case 0x009: // LMP_comb_key |
611 | 0 | case 0x00b: // LMP_au_rand |
612 | 0 | case 0x00d: // LMP_temp_rand |
613 | 0 | case 0x011: // LMP_start_encryption_req |
614 | 0 | case 0x042: // LMP_pause_encryption_aes_req |
615 | 0 | proto_tree_add_item(btlmp_tree, hf_param_rand, tvb, offset, 16, ENC_NA); |
616 | 0 | offset += 16; |
617 | 0 | break; |
618 | | |
619 | 0 | case 0x00a: // LMP_unit_key |
620 | 0 | case 0x00e: // LMP_temp_key |
621 | 0 | proto_tree_add_item(btlmp_tree, hf_param_key, tvb, offset, 16, ENC_NA); |
622 | 0 | offset += 16; |
623 | 0 | break; |
624 | | |
625 | 0 | case 0x00c: // LMP_sres |
626 | 0 | proto_tree_add_item(btlmp_tree, hf_param_authresp, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
627 | 0 | offset += 4; |
628 | 0 | break; |
629 | | |
630 | 0 | case 0x00f: // LMP_encryption_mode_req |
631 | 0 | proto_tree_add_item(btlmp_tree, hf_param_encryptionmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
632 | 0 | ++offset; |
633 | 0 | break; |
634 | | |
635 | 0 | case 0x010: // LMP_encryption_key_size_req |
636 | 0 | proto_tree_add_item(btlmp_tree, hf_param_encryptionkeysize, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
637 | 0 | ++offset; |
638 | 0 | break; |
639 | | |
640 | 0 | case 0x012: // LMP_stop_encryption_req |
641 | 0 | break; |
642 | | |
643 | 0 | case 0x013: // LMP_switch_req |
644 | 0 | proto_tree_add_item(btlmp_tree, hf_param_switchinstant, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
645 | 0 | offset += 4; |
646 | 0 | break; |
647 | | |
648 | 0 | case 0x014: // LMP_hold |
649 | 0 | case 0x015: // LMP_hold_req |
650 | 0 | proto_tree_add_item(btlmp_tree, hf_param_holdtime, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
651 | 0 | offset += 2; |
652 | 0 | proto_tree_add_item(btlmp_tree, hf_param_holdinstant, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
653 | 0 | offset += 4; |
654 | 0 | break; |
655 | | |
656 | 0 | case 0x017: // LMP_sniff_req |
657 | 0 | for (unsigned i = 0; i < array_length(hf_param_timingcontrolflags); ++i) |
658 | 0 | proto_tree_add_item(btlmp_tree, hf_param_timingcontrolflags[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
659 | 0 | ++offset; |
660 | 0 | proto_tree_add_item(btlmp_tree, hf_param_dsniff, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
661 | 0 | offset += 2; |
662 | 0 | proto_tree_add_item(btlmp_tree, hf_param_tsniff, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
663 | 0 | offset += 2; |
664 | 0 | proto_tree_add_item(btlmp_tree, hf_param_sniffattempt, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
665 | 0 | offset += 2; |
666 | 0 | proto_tree_add_item(btlmp_tree, hf_param_snifftimeout, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
667 | 0 | offset += 2; |
668 | 0 | break; |
669 | | |
670 | 0 | case 0x018: // LMP_unsniff_req |
671 | 0 | break; |
672 | | |
673 | 0 | case 0x01f: // LMP_incr_power_req |
674 | 0 | case 0x020: // LMP_decr_power_req |
675 | 0 | proto_tree_add_item(btlmp_tree, hf_param_futureuse1, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
676 | 0 | ++offset; |
677 | 0 | break; |
678 | | |
679 | 0 | case 0x021: // LMP_max_power |
680 | 0 | case 0x022: // LMP_min_power |
681 | 0 | case 0x023: // LMP_auto_rate |
682 | 0 | break; |
683 | | |
684 | 0 | case 0x024: // LMP_preferred_rate |
685 | 0 | for (unsigned i = 0; i < array_length(hf_param_datarate); ++i) |
686 | 0 | proto_tree_add_item(btlmp_tree, hf_param_datarate[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
687 | 0 | break; |
688 | | |
689 | 0 | case 0x025: // LMP_version_req |
690 | 0 | case 0x026: // LMP_version_res |
691 | 0 | proto_tree_add_item(btlmp_tree, hf_param_versnr, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
692 | 0 | ++offset; |
693 | 0 | proto_tree_add_item(btlmp_tree, hf_param_compid, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
694 | 0 | offset += 2; |
695 | 0 | proto_tree_add_item(btlmp_tree, hf_param_subversnr, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
696 | 0 | offset += 2; |
697 | 0 | break; |
698 | | |
699 | 1 | case 0x027: // LMP_features_req |
700 | 1 | case 0x028: // LMP_features_res |
701 | 10 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte0); ++i) |
702 | 9 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte0[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
703 | 1 | ++offset; |
704 | 10 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte1); ++i) |
705 | 9 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte1[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
706 | 1 | ++offset; |
707 | 8 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte2); ++i) |
708 | 7 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte2[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
709 | 1 | ++offset; |
710 | 10 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte3); ++i) |
711 | 9 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte3[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
712 | 1 | ++offset; |
713 | 10 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte4); ++i) |
714 | 9 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte4[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
715 | 1 | ++offset; |
716 | 10 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte5); ++i) |
717 | 9 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte5[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
718 | 1 | ++offset; |
719 | 10 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte6); ++i) |
720 | 9 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte6[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
721 | 1 | ++offset; |
722 | 7 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte7); ++i) |
723 | 6 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte7[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
724 | 1 | ++offset; |
725 | 1 | break; |
726 | | |
727 | 0 | case 0x029: // LMP_quality_of_service |
728 | 0 | case 0x02a: // LMP_quality_of_service_req |
729 | 0 | proto_tree_add_item(btlmp_tree, hf_param_pollinterval, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
730 | 0 | offset += 2; |
731 | 0 | proto_tree_add_item(btlmp_tree, hf_param_nbc, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
732 | 0 | ++offset; |
733 | 0 | break; |
734 | | |
735 | 0 | case 0x02b: // LMP_SCO_link_req |
736 | 0 | proto_tree_add_item(btlmp_tree, hf_param_scohandle, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
737 | 0 | ++offset; |
738 | 0 | for (unsigned i = 0; i < array_length(hf_param_timingcontrolflags); ++i) |
739 | 0 | proto_tree_add_item(btlmp_tree, hf_param_timingcontrolflags[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
740 | 0 | ++offset; |
741 | 0 | proto_tree_add_item(btlmp_tree, hf_param_dsco, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
742 | 0 | ++offset; |
743 | 0 | proto_tree_add_item(btlmp_tree, hf_param_tsco, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
744 | 0 | ++offset; |
745 | 0 | proto_tree_add_item(btlmp_tree, hf_param_scopacket, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
746 | 0 | ++offset; |
747 | 0 | proto_tree_add_item(btlmp_tree, hf_param_airmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
748 | 0 | ++offset; |
749 | 0 | break; |
750 | | |
751 | 0 | case 0x02c: // LMP_remove_SCO_link_req |
752 | 0 | proto_tree_add_item(btlmp_tree, hf_param_scohandle, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
753 | 0 | ++offset; |
754 | 0 | proto_tree_add_item(btlmp_tree, hf_errorcode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
755 | 0 | ++offset; |
756 | 0 | break; |
757 | | |
758 | 0 | case 0x02d: // LMP_max_slot |
759 | 0 | case 0x02e: // LMP_max_slot_req |
760 | 0 | proto_tree_add_item(btlmp_tree, hf_param_slots, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
761 | 0 | ++offset; |
762 | 0 | break; |
763 | | |
764 | 0 | case 0x02f: // LMP_timing_accuracy_req |
765 | 0 | break; |
766 | | |
767 | 0 | case 0x030: // LMP_timing_accuracy_res |
768 | 0 | proto_tree_add_item(btlmp_tree, hf_param_tmgacc_drift, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
769 | 0 | ++offset; |
770 | 0 | proto_tree_add_item(btlmp_tree, hf_param_tmgacc_jitter, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
771 | 0 | ++offset; |
772 | 0 | break; |
773 | | |
774 | 0 | case 0x031: // LMP_setup_complete |
775 | 0 | case 0x032: // LMP_use_semi_permanent_key |
776 | 0 | case 0x033: // LMP_host_connection_req |
777 | 0 | break; |
778 | | |
779 | 0 | case 0x034: // LMP_slot_offset |
780 | 0 | proto_tree_add_item(btlmp_tree, hf_param_slotoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
781 | 0 | offset += 2; |
782 | 0 | proto_tree_add_item(btlmp_tree, hf_param_bdaddr, tvb, offset, 6, ENC_NA); |
783 | 0 | offset += 6; |
784 | 0 | break; |
785 | | |
786 | 0 | case 0x035: // LMP_page_mode_req |
787 | 0 | case 0x036: // LMP_page_scan_mode_req |
788 | 0 | proto_tree_add_item(btlmp_tree, hf_param_pagingscheme, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
789 | 0 | ++offset; |
790 | 0 | proto_tree_add_item(btlmp_tree, hf_param_pagingschemesettings, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
791 | 0 | ++offset; |
792 | 0 | break; |
793 | | |
794 | 0 | case 0x037: // LMP_supervision_timeout |
795 | 0 | proto_tree_add_item(btlmp_tree, hf_param_supervisiontimeout, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
796 | 0 | offset += 2; |
797 | 0 | break; |
798 | | |
799 | 0 | case 0x038: // LMP_test_activate |
800 | 0 | break; |
801 | | |
802 | 0 | case 0x039: // LMP_test_control |
803 | 0 | proto_tree_add_item(btlmp_tree, hf_param_testscenario, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
804 | 0 | ++offset; |
805 | 0 | proto_tree_add_item(btlmp_tree, hf_param_testhoppingmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
806 | 0 | ++offset; |
807 | 0 | proto_tree_add_item(btlmp_tree, hf_param_testtxfrequency, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
808 | 0 | ++offset; |
809 | 0 | proto_tree_add_item(btlmp_tree, hf_param_testrxfrequency, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
810 | 0 | ++offset; |
811 | 0 | proto_tree_add_item(btlmp_tree, hf_param_testpowercontrolmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
812 | 0 | ++offset; |
813 | 0 | proto_tree_add_item(btlmp_tree, hf_param_testpollperiod, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
814 | 0 | ++offset; |
815 | 0 | proto_tree_add_item(btlmp_tree, hf_param_testpackettype, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
816 | 0 | ++offset; |
817 | 0 | proto_tree_add_item(btlmp_tree, hf_param_testdatalength, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
818 | 0 | ++offset; |
819 | 0 | break; |
820 | | |
821 | 0 | case 0x03a: // LMP_encryption_key_size_mask_req |
822 | 0 | break; |
823 | | |
824 | 0 | case 0x03b: // LMP_encryption_key_size_mask_res |
825 | 0 | proto_tree_add_item(btlmp_tree, hf_param_keysizemask, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
826 | 0 | offset += 2; |
827 | 0 | break; |
828 | | |
829 | 0 | case 0x03c: // LMP_set_AFH |
830 | 0 | proto_tree_add_item(btlmp_tree, hf_param_afh_instant, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
831 | 0 | offset += 4; |
832 | 0 | proto_tree_add_item(btlmp_tree, hf_param_afh_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
833 | 0 | ++offset; |
834 | 0 | for (unsigned i = 0; i < array_length(hf_param_afh_channelmap); ++i, ++offset) |
835 | 0 | proto_tree_add_item(btlmp_tree, hf_param_afh_channelmap[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
836 | 0 | break; |
837 | | |
838 | 1 | case 0x03d: // LMP_encapsulated_header |
839 | 1 | proto_tree_add_item(btlmp_tree, hf_param_encapsulatedmajor, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
840 | 1 | ++offset; |
841 | 1 | proto_tree_add_item(btlmp_tree, hf_param_encapsulatedminor, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
842 | 1 | ++offset; |
843 | 1 | proto_tree_add_item(btlmp_tree, hf_param_encapsulatedlength, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
844 | 1 | ++offset; |
845 | 1 | break; |
846 | | |
847 | 0 | case 0x03e: // LMP_encapsulated_payload |
848 | 0 | proto_tree_add_item(btlmp_tree, hf_param_encapsulateddata, tvb, offset, 16, ENC_NA); |
849 | 0 | offset += 16; |
850 | 0 | break; |
851 | | |
852 | 0 | case 0x03f: // LMP_Simple_Pairing_Confirm |
853 | 0 | proto_tree_add_item(btlmp_tree, hf_param_simplepaircommit, tvb, offset, 16, ENC_NA); |
854 | 0 | offset += 16; |
855 | 0 | break; |
856 | | |
857 | 0 | case 0x040: // LMP_Simple_Pairing_Number |
858 | 0 | proto_tree_add_item(btlmp_tree, hf_param_simplepairnonce, tvb, offset, 16, ENC_NA); |
859 | 0 | offset += 16; |
860 | 0 | break; |
861 | | |
862 | 0 | case 0x041: // LMP_DHkey_Check |
863 | 0 | proto_tree_add_item(btlmp_tree, hf_param_dhkeyconfirm, tvb, offset, 16, ENC_NA); |
864 | 0 | offset += 16; |
865 | 0 | break; |
866 | | |
867 | 0 | case 0x401: // LMP_accepted_ext |
868 | 0 | proto_tree_add_item(btlmp_tree, hf_accept_opcode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
869 | 0 | ++offset; |
870 | 0 | proto_tree_add_item(btlmp_tree, hf_accept_escopcode[tvb_get_uint8(tvb, offset - 1) & 3], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
871 | 0 | ++offset; |
872 | 0 | break; |
873 | | |
874 | 0 | case 0x402: // LMP_not_accepted_ext |
875 | 0 | proto_tree_add_item(btlmp_tree, hf_accept_opcode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
876 | 0 | ++offset; |
877 | 0 | proto_tree_add_item(btlmp_tree, hf_accept_escopcode[tvb_get_uint8(tvb, offset - 1) & 3], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
878 | 0 | ++offset; |
879 | 0 | proto_tree_add_item(btlmp_tree, hf_errorcode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
880 | 0 | ++offset; |
881 | 0 | break; |
882 | | |
883 | 0 | case 0x403: // LMP_features_req_ext |
884 | 0 | case 0x404: // LMP_features_res_ext |
885 | 0 | proto_tree_add_item(btlmp_tree, hf_param_features_page, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
886 | 0 | ++offset; |
887 | 0 | proto_tree_add_item(btlmp_tree, hf_param_max_supported_page, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
888 | 0 | ++offset; |
889 | 0 | switch (tvb_get_uint8(tvb, offset - 2)) { |
890 | 0 | case 0: |
891 | 0 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte0); ++i) |
892 | 0 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte0[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
893 | 0 | ++offset; |
894 | 0 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte1); ++i) |
895 | 0 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte1[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
896 | 0 | ++offset; |
897 | 0 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte2); ++i) |
898 | 0 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte2[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
899 | 0 | ++offset; |
900 | 0 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte3); ++i) |
901 | 0 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte3[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
902 | 0 | ++offset; |
903 | 0 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte4); ++i) |
904 | 0 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte4[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
905 | 0 | ++offset; |
906 | 0 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte5); ++i) |
907 | 0 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte5[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
908 | 0 | ++offset; |
909 | 0 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte6); ++i) |
910 | 0 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte6[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
911 | 0 | ++offset; |
912 | 0 | for (unsigned i = 0; i < array_length(hf_param_feature_page0_byte7); ++i) |
913 | 0 | proto_tree_add_item(btlmp_tree, hf_param_feature_page0_byte7[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
914 | 0 | ++offset; |
915 | 0 | break; |
916 | | |
917 | 0 | case 1: |
918 | 0 | for (unsigned i = 0; i < array_length(hf_param_feature_page1_byte0); ++i) |
919 | 0 | proto_tree_add_item(btlmp_tree, hf_param_feature_page1_byte0[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
920 | 0 | ++offset; |
921 | 0 | break; |
922 | | |
923 | 0 | case 2: |
924 | 0 | for (unsigned i = 0; i < array_length(hf_param_feature_page2_byte0); ++i) |
925 | 0 | proto_tree_add_item(btlmp_tree, hf_param_feature_page2_byte0[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
926 | 0 | ++offset; |
927 | 0 | for (unsigned i = 0; i < array_length(hf_param_feature_page2_byte1); ++i) |
928 | 0 | proto_tree_add_item(btlmp_tree, hf_param_feature_page2_byte1[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
929 | 0 | ++offset; |
930 | 0 | break; |
931 | | |
932 | 0 | default: |
933 | 0 | break; |
934 | 0 | } |
935 | 0 | break; |
936 | | |
937 | 0 | case 0x405: // LMP_clk_adj |
938 | 0 | proto_tree_add_item(btlmp_tree, hf_param_clkadjid, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
939 | 0 | ++offset; |
940 | 0 | proto_tree_add_item(btlmp_tree, hf_param_clkadjinstant, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
941 | 0 | offset += 4; |
942 | 0 | proto_tree_add_item(btlmp_tree, hf_param_clkadjus, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
943 | 0 | offset += 2; |
944 | 0 | proto_tree_add_item(btlmp_tree, hf_param_clkadjslots, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
945 | 0 | ++offset; |
946 | 0 | proto_tree_add_item(btlmp_tree, hf_param_clkadjmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
947 | 0 | ++offset; |
948 | 0 | proto_tree_add_item(btlmp_tree, hf_param_clkadjclk, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
949 | 0 | offset += 4; |
950 | 0 | break; |
951 | | |
952 | 0 | case 0x406: // LMP_clk_adj_ack |
953 | 0 | proto_tree_add_item(btlmp_tree, hf_param_clkadjid, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
954 | 0 | ++offset; |
955 | 0 | break; |
956 | | |
957 | 0 | case 0x407: // LMP_clk_adj_req |
958 | 0 | proto_tree_add_item(btlmp_tree, hf_param_clkadjus, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
959 | 0 | offset += 2; |
960 | 0 | proto_tree_add_item(btlmp_tree, hf_param_clkadjslots, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
961 | 0 | ++offset; |
962 | 0 | proto_tree_add_item(btlmp_tree, hf_param_clkadjperiod, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
963 | 0 | ++offset; |
964 | 0 | break; |
965 | | |
966 | 0 | case 0x40b: // LMP_packet_type_table_req |
967 | 0 | proto_tree_add_item(btlmp_tree, hf_param_packettypetable, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
968 | 0 | ++offset; |
969 | 0 | break; |
970 | | |
971 | 0 | case 0x40c: // LMP_eSCO_link_req |
972 | 0 | btbredr_rf_add_esco_link(connection_info, pinfo, tvb_get_uint8(tvb, offset), tvb_get_uint8(tvb, offset + 1), |
973 | 0 | tvb_get_uint16(tvb, offset + 8, ENC_LITTLE_ENDIAN), tvb_get_uint16(tvb, offset + 10, ENC_LITTLE_ENDIAN)); |
974 | 0 | proto_tree_add_item(btlmp_tree, hf_param_escohandle, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
975 | 0 | ++offset; |
976 | 0 | proto_tree_add_item(btlmp_tree, hf_param_escoltaddr, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
977 | 0 | ++offset; |
978 | 0 | for (unsigned i = 0; i < array_length(hf_param_timingcontrolflags); ++i) |
979 | 0 | proto_tree_add_item(btlmp_tree, hf_param_timingcontrolflags[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
980 | 0 | ++offset; |
981 | 0 | proto_tree_add_item(btlmp_tree, hf_param_escod, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
982 | 0 | ++offset; |
983 | 0 | proto_tree_add_item(btlmp_tree, hf_param_escot, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
984 | 0 | ++offset; |
985 | 0 | proto_tree_add_item(btlmp_tree, hf_param_escow, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
986 | 0 | ++offset; |
987 | 0 | proto_tree_add_item(btlmp_tree, hf_param_escopackettypems, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
988 | 0 | ++offset; |
989 | 0 | proto_tree_add_item(btlmp_tree, hf_param_escopackettypesm, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
990 | 0 | ++offset; |
991 | 0 | proto_tree_add_item(btlmp_tree, hf_param_escopacketlengthms, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
992 | 0 | offset += 2; |
993 | 0 | proto_tree_add_item(btlmp_tree, hf_param_escopacketlengthsm, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
994 | 0 | offset += 2; |
995 | 0 | proto_tree_add_item(btlmp_tree, hf_param_airmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
996 | 0 | ++offset; |
997 | 0 | proto_tree_add_item(btlmp_tree, hf_param_negostate, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
998 | 0 | ++offset; |
999 | 0 | break; |
1000 | | |
1001 | 0 | case 0x40d: // LMP_remove_eSCO_link_req |
1002 | 0 | btbredr_rf_remove_esco_link(connection_info, pinfo, tvb_get_uint8(tvb, offset)); |
1003 | 0 | proto_tree_add_item(btlmp_tree, hf_param_escohandle, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1004 | 0 | ++offset; |
1005 | 0 | proto_tree_add_item(btlmp_tree, hf_errorcode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1006 | 0 | ++offset; |
1007 | 0 | break; |
1008 | | |
1009 | 0 | case 0x410: // LMP_channel_classification_req |
1010 | 0 | proto_tree_add_item(btlmp_tree, hf_param_afh_reportingmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1011 | 0 | ++offset; |
1012 | 0 | proto_tree_add_item(btlmp_tree, hf_param_afh_mininterval, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
1013 | 0 | offset += 2; |
1014 | 0 | proto_tree_add_item(btlmp_tree, hf_param_afh_maxinterval, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
1015 | 0 | offset += 2; |
1016 | 0 | break; |
1017 | | |
1018 | 0 | case 0x411: // LMP_channel_classification |
1019 | 0 | for (unsigned i = 0; i < array_length(hf_param_afh_channelclass); ++i) |
1020 | 0 | for (unsigned j = 0; j < array_length(hf_param_afh_channelclass[0]); ++j) |
1021 | 0 | proto_tree_add_item(btlmp_tree, hf_param_afh_channelclass[i][j], tvb, offset + i, 1, ENC_LITTLE_ENDIAN); |
1022 | 0 | offset += array_length(hf_param_afh_channelclass); |
1023 | 0 | break; |
1024 | | |
1025 | 0 | case 0x415: // LMP_sniff_subrating_req |
1026 | 0 | case 0x416: // LMP_sniff_subrating_res |
1027 | 0 | proto_tree_add_item(btlmp_tree, hf_param_maxsniffsubrate, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1028 | 0 | ++offset; |
1029 | 0 | proto_tree_add_item(btlmp_tree, hf_param_minsniffmodetimeout, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
1030 | 0 | offset += 2; |
1031 | 0 | proto_tree_add_item(btlmp_tree, hf_param_sniffsubratinginstant, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
1032 | 0 | offset += 4; |
1033 | 0 | break; |
1034 | | |
1035 | 0 | case 0x417: // LMP_pause_encryption_req |
1036 | 0 | case 0x418: // LMP_resume_encryption_req |
1037 | 0 | break; |
1038 | | |
1039 | 0 | case 0x419: // LMP_IO_Capability_req |
1040 | 0 | case 0x41a: // LMP_IO_Capability_res |
1041 | 0 | proto_tree_add_item(btlmp_tree, hf_param_iocapcap, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1042 | 0 | ++offset; |
1043 | 0 | proto_tree_add_item(btlmp_tree, hf_param_iocapoobauthdata, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1044 | 0 | ++offset; |
1045 | 0 | proto_tree_add_item(btlmp_tree, hf_param_iocapauthreq, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1046 | 0 | ++offset; |
1047 | 0 | break; |
1048 | | |
1049 | 0 | case 0x41b: // LMP_numeric_comparison_failed |
1050 | 0 | case 0x41c: // LMP_passkey_failed |
1051 | 0 | case 0x41d: // LMP_oob_failed |
1052 | 0 | break; |
1053 | | |
1054 | 0 | case 0x41e: // LMP_keypress_notification |
1055 | 0 | proto_tree_add_item(btlmp_tree, hf_param_keypressnotificationtype, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1056 | 0 | ++offset; |
1057 | 0 | break; |
1058 | | |
1059 | 0 | case 0x41f: // LMP_power_control_req |
1060 | 0 | proto_tree_add_item(btlmp_tree, hf_param_poweradjreq, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1061 | 0 | ++offset; |
1062 | 0 | break; |
1063 | | |
1064 | 0 | case 0x420: // LMP_power_control_res |
1065 | 0 | for (unsigned i = 0; i < array_length(hf_param_poweradjresp); ++i) |
1066 | 0 | proto_tree_add_item(btlmp_tree, hf_param_poweradjresp[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1067 | 0 | ++offset; |
1068 | 0 | break; |
1069 | | |
1070 | 0 | case 0x421: // LMP_ping_req |
1071 | 0 | case 0x422: // LMP_ping_res |
1072 | 0 | break; |
1073 | | |
1074 | 0 | case 0x423: // LMP_SAM_set_type0 |
1075 | 0 | proto_tree_add_item(btlmp_tree, hf_param_samupdatemode, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1076 | 0 | ++offset; |
1077 | 0 | proto_tree_add_item(btlmp_tree, hf_param_samtype0submap, tvb, offset, 14, ENC_NA); |
1078 | 0 | offset += 14; |
1079 | 0 | break; |
1080 | | |
1081 | 0 | case 0x424: // LMP_SAM_define_map |
1082 | 0 | proto_tree_add_item(btlmp_tree, hf_param_samindex, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1083 | 0 | ++offset; |
1084 | 0 | proto_tree_add_item(btlmp_tree, hf_param_samtsm, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1085 | 0 | ++offset; |
1086 | 0 | proto_tree_add_item(btlmp_tree, hf_param_samnsm, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1087 | 0 | ++offset; |
1088 | 0 | proto_tree_add_item(btlmp_tree, hf_param_samsubmaps, tvb, offset, 12, ENC_NA); |
1089 | 0 | offset += 12; |
1090 | 0 | break; |
1091 | | |
1092 | 0 | case 0x425: // LMP_SAM_switch |
1093 | 0 | proto_tree_add_item(btlmp_tree, hf_param_samindex, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1094 | 0 | ++offset; |
1095 | 0 | for (unsigned i = 0; i < array_length(hf_param_timingcontrolflags); ++i) |
1096 | 0 | proto_tree_add_item(btlmp_tree, hf_param_timingcontrolflags[i], tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1097 | 0 | ++offset; |
1098 | 0 | proto_tree_add_item(btlmp_tree, hf_param_samd, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
1099 | 0 | ++offset; |
1100 | 0 | proto_tree_add_item(btlmp_tree, hf_param_saminstant, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
1101 | 0 | offset += 4; |
1102 | 0 | break; |
1103 | | |
1104 | 1 | default: |
1105 | 1 | break; |
1106 | 3 | } |
1107 | 3 | if (tvb_captured_length_remaining(tvb, offset) > 0) { |
1108 | 3 | proto_tree_add_item(btlmp_tree, hf_params, tvb, offset, tvb_captured_length_remaining(tvb, offset), ENC_NA); |
1109 | 3 | offset = tvb_reported_length(tvb); |
1110 | 3 | } |
1111 | 3 | return offset; |
1112 | 3 | } |
1113 | | |
1114 | | void |
1115 | | proto_register_btlmp(void) |
1116 | 16 | { |
1117 | 16 | static hf_register_info hf[] = { |
1118 | 16 | { &hf_opcode[0], |
1119 | 16 | { "Opcode", "btlmp.opcode.byte0", |
1120 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1121 | 16 | NULL, HFILL } |
1122 | 16 | }, |
1123 | 16 | { &hf_opcode[1], |
1124 | 16 | { "TID", "btlmp.opcode.tid", |
1125 | 16 | FT_UINT8, BASE_HEX, NULL, 0x01, |
1126 | 16 | NULL, HFILL } |
1127 | 16 | }, |
1128 | 16 | { &hf_opcode[2], |
1129 | 16 | { "Opcode", "btlmp.opcode.opcode", |
1130 | 16 | FT_UINT8, BASE_DEC_HEX, VALS(opcode_vals), 0xfe, |
1131 | 16 | NULL, HFILL } |
1132 | 16 | }, |
1133 | 16 | { &hf_escopcode[0], |
1134 | 16 | { "Escape 1 Opcode", "btlmp.opcode.escaped", |
1135 | 16 | FT_UINT16, BASE_DEC_HEX, VALS(escape1_2_3_opcode_vals), 0x00, |
1136 | 16 | NULL, HFILL } |
1137 | 16 | }, |
1138 | 16 | { &hf_escopcode[1], |
1139 | 16 | { "Escape 2 Opcode", "btlmp.opcode.escaped", |
1140 | 16 | FT_UINT16, BASE_DEC_HEX, VALS(escape1_2_3_opcode_vals), 0x00, |
1141 | 16 | NULL, HFILL } |
1142 | 16 | }, |
1143 | 16 | { &hf_escopcode[2], |
1144 | 16 | { "Escape 3 Opcode", "btlmp.opcode.escaped", |
1145 | 16 | FT_UINT16, BASE_DEC_HEX, VALS(escape1_2_3_opcode_vals), 0x00, |
1146 | 16 | NULL, HFILL } |
1147 | 16 | }, |
1148 | 16 | { &hf_escopcode[3], |
1149 | 16 | { "Escape 4 Opcode", "btlmp.opcode.escaped", |
1150 | 16 | FT_UINT16, BASE_DEC_HEX, VALS(escape4_opcode_vals), 0x00, |
1151 | 16 | NULL, HFILL } |
1152 | 16 | }, |
1153 | 16 | { &hf_accept_opcode, |
1154 | 16 | { "Opcode", "btlmp.accept_opcode", |
1155 | 16 | FT_UINT8, BASE_DEC_HEX, VALS(opcode_vals), 0x00, |
1156 | 16 | NULL, HFILL } |
1157 | 16 | }, |
1158 | 16 | { &hf_accept_escopcode[0], |
1159 | 16 | { "Escape 1 Opcode", "btlmp.accept_opcode1", |
1160 | 16 | FT_UINT16, BASE_DEC_HEX, VALS(escape1_2_3_opcode_vals), 0x00, |
1161 | 16 | NULL, HFILL } |
1162 | 16 | }, |
1163 | 16 | { &hf_accept_escopcode[1], |
1164 | 16 | { "Escape 2 Opcode", "btlmp.accept_opcode2", |
1165 | 16 | FT_UINT16, BASE_DEC_HEX, VALS(escape1_2_3_opcode_vals), 0x00, |
1166 | 16 | NULL, HFILL } |
1167 | 16 | }, |
1168 | 16 | { &hf_accept_escopcode[2], |
1169 | 16 | { "Escape 3 Opcode", "btlmp.accept_opcode3", |
1170 | 16 | FT_UINT16, BASE_DEC_HEX, VALS(escape1_2_3_opcode_vals), 0x00, |
1171 | 16 | NULL, HFILL } |
1172 | 16 | }, |
1173 | 16 | { &hf_accept_escopcode[3], |
1174 | 16 | { "Escape 4 Opcode", "btlmp.accept_opcode4", |
1175 | 16 | FT_UINT16, BASE_DEC_HEX, VALS(escape4_opcode_vals), 0x00, |
1176 | 16 | NULL, HFILL } |
1177 | 16 | }, |
1178 | 16 | { &hf_errorcode, |
1179 | 16 | { "Error Code", "btlmp.errorcode", |
1180 | 16 | FT_UINT8, BASE_DEC_HEX|BASE_EXT_STRING, &errorcode_vals_ext, 0x00, |
1181 | 16 | NULL, HFILL } |
1182 | 16 | }, |
1183 | 16 | { &hf_param_feature_page0_byte0[0], |
1184 | 16 | { "Feature Page 0 Byte 0", "btlmp.feature.page0.byte0", |
1185 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1186 | 16 | NULL, HFILL } |
1187 | 16 | }, |
1188 | 16 | { &hf_param_feature_page0_byte0[1], |
1189 | 16 | { "3 slot packets", "btlmp.feature.page0.3slotpackets", |
1190 | 16 | FT_UINT8, BASE_DEC, NULL, 0x01, |
1191 | 16 | NULL, HFILL } |
1192 | 16 | }, |
1193 | 16 | { &hf_param_feature_page0_byte0[2], |
1194 | 16 | { "5 slot packets", "btlmp.feature.page0.5slotpackets", |
1195 | 16 | FT_UINT8, BASE_DEC, NULL, 0x02, |
1196 | 16 | NULL, HFILL } |
1197 | 16 | }, |
1198 | 16 | { &hf_param_feature_page0_byte0[3], |
1199 | 16 | { "Encryption", "btlmp.feature.page0.encryption", |
1200 | 16 | FT_UINT8, BASE_DEC, NULL, 0x04, |
1201 | 16 | NULL, HFILL } |
1202 | 16 | }, |
1203 | 16 | { &hf_param_feature_page0_byte0[4], |
1204 | 16 | { "Slot offset", "btlmp.feature.page0.slotoffset", |
1205 | 16 | FT_UINT8, BASE_DEC, NULL, 0x08, |
1206 | 16 | NULL, HFILL } |
1207 | 16 | }, |
1208 | 16 | { &hf_param_feature_page0_byte0[5], |
1209 | 16 | { "Timing accuracy", "btlmp.feature.page0.timingaccuracy", |
1210 | 16 | FT_UINT8, BASE_DEC, NULL, 0x10, |
1211 | 16 | NULL, HFILL } |
1212 | 16 | }, |
1213 | 16 | { &hf_param_feature_page0_byte0[6], |
1214 | 16 | { "Role switch", "btlmp.feature.page0.roleswitch", |
1215 | 16 | FT_UINT8, BASE_DEC, NULL, 0x20, |
1216 | 16 | NULL, HFILL } |
1217 | 16 | }, |
1218 | 16 | { &hf_param_feature_page0_byte0[7], |
1219 | 16 | { "Hold mode", "btlmp.feature.page0.holdmode", |
1220 | 16 | FT_UINT8, BASE_DEC, NULL, 0x40, |
1221 | 16 | NULL, HFILL } |
1222 | 16 | }, |
1223 | 16 | { &hf_param_feature_page0_byte0[8], |
1224 | 16 | { "Sniff mode", "btlmp.feature.page0.sniffmode", |
1225 | 16 | FT_UINT8, BASE_DEC, NULL, 0x80, |
1226 | 16 | NULL, HFILL } |
1227 | 16 | }, |
1228 | 16 | { &hf_param_feature_page0_byte1[0], |
1229 | 16 | { "Feature Page 0 Byte 1", "btlmp.feature.page0.byte1", |
1230 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1231 | 16 | NULL, HFILL } |
1232 | 16 | }, |
1233 | 16 | { &hf_param_feature_page0_byte1[1], |
1234 | 16 | { "Reserved", "btlmp.feature.page0.reserved1", |
1235 | 16 | FT_UINT8, BASE_DEC, NULL, 0x01, |
1236 | 16 | NULL, HFILL } |
1237 | 16 | }, |
1238 | 16 | { &hf_param_feature_page0_byte1[2], |
1239 | 16 | { "Power control requests", "btlmp.feature.page0.powercontrolrequests", |
1240 | 16 | FT_UINT8, BASE_DEC, NULL, 0x02, |
1241 | 16 | NULL, HFILL } |
1242 | 16 | }, |
1243 | 16 | { &hf_param_feature_page0_byte1[3], |
1244 | 16 | { "Channel quality driven data rate (CQDDR)", "btlmp.feature.page0.cqddr", |
1245 | 16 | FT_UINT8, BASE_DEC, NULL, 0x04, |
1246 | 16 | NULL, HFILL } |
1247 | 16 | }, |
1248 | 16 | { &hf_param_feature_page0_byte1[4], |
1249 | 16 | { "SCO link", "btlmp.feature.page0.scolink", |
1250 | 16 | FT_UINT8, BASE_DEC, NULL, 0x08, |
1251 | 16 | NULL, HFILL } |
1252 | 16 | }, |
1253 | 16 | { &hf_param_feature_page0_byte1[5], |
1254 | 16 | { "HV2 packets", "btlmp.feature.page0.hv2packets", |
1255 | 16 | FT_UINT8, BASE_DEC, NULL, 0x10, |
1256 | 16 | NULL, HFILL } |
1257 | 16 | }, |
1258 | 16 | { &hf_param_feature_page0_byte1[6], |
1259 | 16 | { "HV3 packets", "btlmp.feature.page0.hv3packets", |
1260 | 16 | FT_UINT8, BASE_DEC, NULL, 0x20, |
1261 | 16 | NULL, HFILL } |
1262 | 16 | }, |
1263 | 16 | { &hf_param_feature_page0_byte1[7], |
1264 | 16 | { "u-law log synchronous data", "btlmp.feature.page0.ulaw", |
1265 | 16 | FT_UINT8, BASE_DEC, NULL, 0x40, |
1266 | 16 | NULL, HFILL } |
1267 | 16 | }, |
1268 | 16 | { &hf_param_feature_page0_byte1[8], |
1269 | 16 | { "A-law log synchronous data", "btlmp.feature.page0.alaw", |
1270 | 16 | FT_UINT8, BASE_DEC, NULL, 0x80, |
1271 | 16 | NULL, HFILL } |
1272 | 16 | }, |
1273 | 16 | { &hf_param_feature_page0_byte2[0], |
1274 | 16 | { "Feature Page 0 Byte 2", "btlmp.feature.page0.byte2", |
1275 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1276 | 16 | NULL, HFILL } |
1277 | 16 | }, |
1278 | 16 | { &hf_param_feature_page0_byte2[1], |
1279 | 16 | { "CVSD synchronous data", "btlmp.feature.page0.cvsd", |
1280 | 16 | FT_UINT8, BASE_DEC, NULL, 0x01, |
1281 | 16 | NULL, HFILL } |
1282 | 16 | }, |
1283 | 16 | { &hf_param_feature_page0_byte2[2], |
1284 | 16 | { "Paging parameter negotiation", "btlmp.feature.page0.pagingparameter", |
1285 | 16 | FT_UINT8, BASE_DEC, NULL, 0x02, |
1286 | 16 | NULL, HFILL } |
1287 | 16 | }, |
1288 | 16 | { &hf_param_feature_page0_byte2[3], |
1289 | 16 | { "Power control", "btlmp.feature.page0.powercontrol", |
1290 | 16 | FT_UINT8, BASE_DEC, NULL, 0x04, |
1291 | 16 | NULL, HFILL } |
1292 | 16 | }, |
1293 | 16 | { &hf_param_feature_page0_byte2[4], |
1294 | 16 | { "Transparent synchronous data", "btlmp.feature.page0.transparentsynchronous", |
1295 | 16 | FT_UINT8, BASE_DEC, NULL, 0x08, |
1296 | 16 | NULL, HFILL } |
1297 | 16 | }, |
1298 | 16 | { &hf_param_feature_page0_byte2[5], |
1299 | 16 | { "Flow control lag (least significant bit)", "btlmp.feature.page0.flowcontrollag", |
1300 | 16 | FT_UINT8, BASE_DEC, NULL, 0x70, |
1301 | 16 | NULL, HFILL } |
1302 | 16 | }, |
1303 | 16 | { &hf_param_feature_page0_byte2[6], |
1304 | 16 | { "Broadcast Encryption", "btlmp.feature.page0.broadcastencryption", |
1305 | 16 | FT_UINT8, BASE_DEC, NULL, 0x80, |
1306 | 16 | NULL, HFILL } |
1307 | 16 | }, |
1308 | 16 | { &hf_param_feature_page0_byte3[0], |
1309 | 16 | { "Feature Page 0 Byte 3", "btlmp.feature.page0.byte3", |
1310 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1311 | 16 | NULL, HFILL } |
1312 | 16 | }, |
1313 | 16 | { &hf_param_feature_page0_byte3[1], |
1314 | 16 | { "Reserved", "btlmp.feature.page0.reserved2", |
1315 | 16 | FT_UINT8, BASE_DEC, NULL, 0x01, |
1316 | 16 | NULL, HFILL } |
1317 | 16 | }, |
1318 | 16 | { &hf_param_feature_page0_byte3[2], |
1319 | 16 | { "Enhanced Data Rate ACL 2 Mb/s mode", "btlmp.feature.page0.edracl2", |
1320 | 16 | FT_UINT8, BASE_DEC, NULL, 0x02, |
1321 | 16 | NULL, HFILL } |
1322 | 16 | }, |
1323 | 16 | { &hf_param_feature_page0_byte3[3], |
1324 | 16 | { "Enhanced Data Rate ACL 3 Mb/s mode", "btlmp.feature.page0.edracl3", |
1325 | 16 | FT_UINT8, BASE_DEC, NULL, 0x04, |
1326 | 16 | NULL, HFILL } |
1327 | 16 | }, |
1328 | 16 | { &hf_param_feature_page0_byte3[4], |
1329 | 16 | { "Enhanced inquiry scan", "btlmp.feature.page0.enhinqscan", |
1330 | 16 | FT_UINT8, BASE_DEC, NULL, 0x08, |
1331 | 16 | NULL, HFILL } |
1332 | 16 | }, |
1333 | 16 | { &hf_param_feature_page0_byte3[5], |
1334 | 16 | { "Interlaced inquiry scan", "btlmp.feature.page0.interlacedinqscan", |
1335 | 16 | FT_UINT8, BASE_DEC, NULL, 0x10, |
1336 | 16 | NULL, HFILL } |
1337 | 16 | }, |
1338 | 16 | { &hf_param_feature_page0_byte3[6], |
1339 | 16 | { "Interlaced page scan", "btlmp.feature.page0.interlacedpgscan", |
1340 | 16 | FT_UINT8, BASE_DEC, NULL, 0x20, |
1341 | 16 | NULL, HFILL } |
1342 | 16 | }, |
1343 | 16 | { &hf_param_feature_page0_byte3[7], |
1344 | 16 | { "RSSI with inquiry results", "btlmp.feature.page0.inqrssi", |
1345 | 16 | FT_UINT8, BASE_DEC, NULL, 0x40, |
1346 | 16 | NULL, HFILL } |
1347 | 16 | }, |
1348 | 16 | { &hf_param_feature_page0_byte3[8], |
1349 | 16 | { "Extended SCO link (EV3 packets)", "btlmp.feature.page0.escolink", |
1350 | 16 | FT_UINT8, BASE_DEC, NULL, 0x80, |
1351 | 16 | NULL, HFILL } |
1352 | 16 | }, |
1353 | 16 | { &hf_param_feature_page0_byte4[0], |
1354 | 16 | { "Feature Page 0 Byte 4", "btlmp.feature.page0.byte4", |
1355 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1356 | 16 | NULL, HFILL } |
1357 | 16 | }, |
1358 | 16 | { &hf_param_feature_page0_byte4[1], |
1359 | 16 | { "EV4 packets", "btlmp.feature.page0.ev4", |
1360 | 16 | FT_UINT8, BASE_DEC, NULL, 0x01, |
1361 | 16 | NULL, HFILL } |
1362 | 16 | }, |
1363 | 16 | { &hf_param_feature_page0_byte4[2], |
1364 | 16 | { "EV5 packets", "btlmp.feature.page0.ev5", |
1365 | 16 | FT_UINT8, BASE_DEC, NULL, 0x02, |
1366 | 16 | NULL, HFILL } |
1367 | 16 | }, |
1368 | 16 | { &hf_param_feature_page0_byte4[3], |
1369 | 16 | { "Reserved", "btlmp.feature.page0.reserved3", |
1370 | 16 | FT_UINT8, BASE_DEC, NULL, 0x04, |
1371 | 16 | NULL, HFILL } |
1372 | 16 | }, |
1373 | 16 | { &hf_param_feature_page0_byte4[4], |
1374 | 16 | { "AFH capable peripheral", "btlmp.feature.page0.afhcapableperipheral", |
1375 | 16 | FT_UINT8, BASE_DEC, NULL, 0x08, |
1376 | 16 | NULL, HFILL } |
1377 | 16 | }, |
1378 | 16 | { &hf_param_feature_page0_byte4[5], |
1379 | 16 | { "AFH classification peripheral", "btlmp.feature.page0.afhclassificationperipheral", |
1380 | 16 | FT_UINT8, BASE_DEC, NULL, 0x10, |
1381 | 16 | NULL, HFILL } |
1382 | 16 | }, |
1383 | 16 | { &hf_param_feature_page0_byte4[6], |
1384 | 16 | { "BR/EDR Not Supported", "btlmp.feature.page0.bredrnotsupp", |
1385 | 16 | FT_UINT8, BASE_DEC, NULL, 0x20, |
1386 | 16 | NULL, HFILL } |
1387 | 16 | }, |
1388 | 16 | { &hf_param_feature_page0_byte4[7], |
1389 | 16 | { "LE Supported (Controller)", "btlmp.feature.page0.lesuppcontroller", |
1390 | 16 | FT_UINT8, BASE_DEC, NULL, 0x40, |
1391 | 16 | NULL, HFILL } |
1392 | 16 | }, |
1393 | 16 | { &hf_param_feature_page0_byte4[8], |
1394 | 16 | { "3-slot Enhanced Data Rate ACL packets", "btlmp.feature.page0.3slotedracl", |
1395 | 16 | FT_UINT8, BASE_DEC, NULL, 0x80, |
1396 | 16 | NULL, HFILL } |
1397 | 16 | }, |
1398 | 16 | { &hf_param_feature_page0_byte5[0], |
1399 | 16 | { "Feature Page 0 Byte 5", "btlmp.feature.page0.byte5", |
1400 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1401 | 16 | NULL, HFILL } |
1402 | 16 | }, |
1403 | 16 | { &hf_param_feature_page0_byte5[1], |
1404 | 16 | { "5-slot Enhanced Data Rate ACL packets", "btlmp.feature.page0.5slotedracl", |
1405 | 16 | FT_UINT8, BASE_DEC, NULL, 0x01, |
1406 | 16 | NULL, HFILL } |
1407 | 16 | }, |
1408 | 16 | { &hf_param_feature_page0_byte5[2], |
1409 | 16 | { "Sniff subrating", "btlmp.feature.page0.sniffsubrating", |
1410 | 16 | FT_UINT8, BASE_DEC, NULL, 0x02, |
1411 | 16 | NULL, HFILL } |
1412 | 16 | }, |
1413 | 16 | { &hf_param_feature_page0_byte5[3], |
1414 | 16 | { "Pause encryption", "btlmp.feature.page0.pauseencrypt", |
1415 | 16 | FT_UINT8, BASE_DEC, NULL, 0x04, |
1416 | 16 | NULL, HFILL } |
1417 | 16 | }, |
1418 | 16 | { &hf_param_feature_page0_byte5[4], |
1419 | 16 | { "AFH capable central", "btlmp.feature.page0.afhcapablecentral", |
1420 | 16 | FT_UINT8, BASE_DEC, NULL, 0x08, |
1421 | 16 | NULL, HFILL } |
1422 | 16 | }, |
1423 | 16 | { &hf_param_feature_page0_byte5[5], |
1424 | 16 | { "AFH classification central", "btlmp.feature.page0.afhclassificationcentral", |
1425 | 16 | FT_UINT8, BASE_DEC, NULL, 0x10, |
1426 | 16 | NULL, HFILL } |
1427 | 16 | }, |
1428 | 16 | { &hf_param_feature_page0_byte5[6], |
1429 | 16 | { "Enhanced Data Rate eSCO 2 Mb/s mode", "btlmp.feature.page0.edresco2", |
1430 | 16 | FT_UINT8, BASE_DEC, NULL, 0x20, |
1431 | 16 | NULL, HFILL } |
1432 | 16 | }, |
1433 | 16 | { &hf_param_feature_page0_byte5[7], |
1434 | 16 | { "Enhanced Data Rate eSCO 3 Mb/s mode", "btlmp.feature.page0.edresco3", |
1435 | 16 | FT_UINT8, BASE_DEC, NULL, 0x40, |
1436 | 16 | NULL, HFILL } |
1437 | 16 | }, |
1438 | 16 | { &hf_param_feature_page0_byte5[8], |
1439 | 16 | { "3-slot Enhanced Data Rate eSCO packets", "btlmp.feature.page0.3slotedresco", |
1440 | 16 | FT_UINT8, BASE_DEC, NULL, 0x80, |
1441 | 16 | NULL, HFILL } |
1442 | 16 | }, |
1443 | 16 | { &hf_param_feature_page0_byte6[0], |
1444 | 16 | { "Feature Page 0 Byte 6", "btlmp.feature.page0.byte6", |
1445 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1446 | 16 | NULL, HFILL } |
1447 | 16 | }, |
1448 | 16 | { &hf_param_feature_page0_byte6[1], |
1449 | 16 | { "Extended Inquiry Response", "btlmp.feature.page0.extinqresp", |
1450 | 16 | FT_UINT8, BASE_DEC, NULL, 0x01, |
1451 | 16 | NULL, HFILL } |
1452 | 16 | }, |
1453 | 16 | { &hf_param_feature_page0_byte6[2], |
1454 | 16 | { "Simultaneous LE and BR/EDR to Same Device Capable (Controller)", "btlmp.feature.page0.simullebredrcontroller", |
1455 | 16 | FT_UINT8, BASE_DEC, NULL, 0x02, |
1456 | 16 | NULL, HFILL } |
1457 | 16 | }, |
1458 | 16 | { &hf_param_feature_page0_byte6[3], |
1459 | 16 | { "Reserved", "btlmp.feature.page0.reserved4", |
1460 | 16 | FT_UINT8, BASE_DEC, NULL, 0x04, |
1461 | 16 | NULL, HFILL } |
1462 | 16 | }, |
1463 | 16 | { &hf_param_feature_page0_byte6[4], |
1464 | 16 | { "Secure Simple Pairing (Controller Support)", "btlmp.feature.page0.securesimplepaircontroller", |
1465 | 16 | FT_UINT8, BASE_DEC, NULL, 0x08, |
1466 | 16 | NULL, HFILL } |
1467 | 16 | }, |
1468 | 16 | { &hf_param_feature_page0_byte6[5], |
1469 | 16 | { "Encapsulated PDU", "btlmp.feature.page0.encpdu", |
1470 | 16 | FT_UINT8, BASE_DEC, NULL, 0x10, |
1471 | 16 | NULL, HFILL } |
1472 | 16 | }, |
1473 | 16 | { &hf_param_feature_page0_byte6[6], |
1474 | 16 | { "Erroneous Data Reporting", "btlmp.feature.page0.errdatareport", |
1475 | 16 | FT_UINT8, BASE_DEC, NULL, 0x20, |
1476 | 16 | NULL, HFILL } |
1477 | 16 | }, |
1478 | 16 | { &hf_param_feature_page0_byte6[7], |
1479 | 16 | { "Non-flushable Packet Boundary Flag", "btlmp.feature.page0.nonflushboundary", |
1480 | 16 | FT_UINT8, BASE_DEC, NULL, 0x40, |
1481 | 16 | NULL, HFILL } |
1482 | 16 | }, |
1483 | 16 | { &hf_param_feature_page0_byte6[8], |
1484 | 16 | { "Reserved", "btlmp.feature.page0.reserved5", |
1485 | 16 | FT_UINT8, BASE_DEC, NULL, 0x80, |
1486 | 16 | NULL, HFILL } |
1487 | 16 | }, |
1488 | 16 | { &hf_param_feature_page0_byte7[0], |
1489 | 16 | { "Feature Page 0 Byte 1", "btlmp.feature.page0.byte7", |
1490 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1491 | 16 | NULL, HFILL } |
1492 | 16 | }, |
1493 | 16 | { &hf_param_feature_page0_byte7[1], |
1494 | 16 | { "HCI Link Supervision Timeout Changed event", "btlmp.feature.page0.hcilinksupervisiontimeoutchgevt", |
1495 | 16 | FT_UINT8, BASE_DEC, NULL, 0x01, |
1496 | 16 | NULL, HFILL } |
1497 | 16 | }, |
1498 | 16 | { &hf_param_feature_page0_byte7[2], |
1499 | 16 | { "Variable Inquiry TX Power Level", "btlmp.feature.page0.varinqtxpwr", |
1500 | 16 | FT_UINT8, BASE_DEC, NULL, 0x02, |
1501 | 16 | NULL, HFILL } |
1502 | 16 | }, |
1503 | 16 | { &hf_param_feature_page0_byte7[3], |
1504 | 16 | { "Enhanced Power Control", "btlmp.feature.page0.enhpowercontrol", |
1505 | 16 | FT_UINT8, BASE_DEC, NULL, 0x04, |
1506 | 16 | NULL, HFILL } |
1507 | 16 | }, |
1508 | 16 | { &hf_param_feature_page0_byte7[4], |
1509 | 16 | { "Reserved", "btlmp.feature.page0.reserved6", |
1510 | 16 | FT_UINT8, BASE_DEC, NULL, 0x78, |
1511 | 16 | NULL, HFILL } |
1512 | 16 | }, |
1513 | 16 | { &hf_param_feature_page0_byte7[5], |
1514 | 16 | { "Extended features", "btlmp.feature.page0.extftr", |
1515 | 16 | FT_UINT8, BASE_DEC, NULL, 0x80, |
1516 | 16 | NULL, HFILL } |
1517 | 16 | }, |
1518 | 16 | { &hf_param_feature_page1_byte0[0], |
1519 | 16 | { "Feature Page 1 Byte 0", "btlmp.feature.page1.byte0", |
1520 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1521 | 16 | NULL, HFILL } |
1522 | 16 | }, |
1523 | 16 | { &hf_param_feature_page1_byte0[1], |
1524 | 16 | { "Secure Simple Pairing (Host Support)", "btlmp.feature.page1.securesimplepairhost", |
1525 | 16 | FT_UINT8, BASE_DEC, NULL, 0x01, |
1526 | 16 | NULL, HFILL } |
1527 | 16 | }, |
1528 | 16 | { &hf_param_feature_page1_byte0[2], |
1529 | 16 | { "LE Supported (Host)", "btlmp.feature.page1.lesupphost", |
1530 | 16 | FT_UINT8, BASE_DEC, NULL, 0x02, |
1531 | 16 | NULL, HFILL } |
1532 | 16 | }, |
1533 | 16 | { &hf_param_feature_page1_byte0[3], |
1534 | 16 | { "Simultaneous LE and BR/EDR to Same Device Capable (Host)", "btlmp.feature.page1.simullebredrhost", |
1535 | 16 | FT_UINT8, BASE_DEC, NULL, 0x04, |
1536 | 16 | NULL, HFILL } |
1537 | 16 | }, |
1538 | 16 | { &hf_param_feature_page1_byte0[4], |
1539 | 16 | { "Secure Connections (Host Support)", "btlmp.feature.page1.secureconnhost", |
1540 | 16 | FT_UINT8, BASE_DEC, NULL, 0x08, |
1541 | 16 | NULL, HFILL } |
1542 | 16 | }, |
1543 | 16 | { &hf_param_feature_page1_byte0[5], |
1544 | 16 | { "Reserved", "btlmp.feature.page1.reserved1", |
1545 | 16 | FT_UINT8, BASE_DEC, NULL, 0xf0, |
1546 | 16 | NULL, HFILL } |
1547 | 16 | }, |
1548 | 16 | { &hf_param_feature_page2_byte0[0], |
1549 | 16 | { "Feature Page 2 Byte 0", "btlmp.feature.page2.byte0", |
1550 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1551 | 16 | NULL, HFILL } |
1552 | 16 | }, |
1553 | 16 | { &hf_param_feature_page2_byte0[1], |
1554 | 16 | { "Connectionless Peripheral Broadcast - Central", "btlmp.feature.page2.cpbcentral", |
1555 | 16 | FT_UINT8, BASE_DEC, NULL, 0x01, |
1556 | 16 | NULL, HFILL } |
1557 | 16 | }, |
1558 | 16 | { &hf_param_feature_page2_byte0[2], |
1559 | 16 | { "Connectionless Peripheral Broadcast - Peripheral", "btlmp.feature.page2.cpbperipheral", |
1560 | 16 | FT_UINT8, BASE_DEC, NULL, 0x02, |
1561 | 16 | NULL, HFILL } |
1562 | 16 | }, |
1563 | 16 | { &hf_param_feature_page2_byte0[3], |
1564 | 16 | { "Synchronization Train", "btlmp.feature.page2.synctrain", |
1565 | 16 | FT_UINT8, BASE_DEC, NULL, 0x04, |
1566 | 16 | NULL, HFILL } |
1567 | 16 | }, |
1568 | 16 | { &hf_param_feature_page2_byte0[4], |
1569 | 16 | { "Synchronization Scan", "btlmp.feature.page2.syncscan", |
1570 | 16 | FT_UINT8, BASE_DEC, NULL, 0x08, |
1571 | 16 | NULL, HFILL } |
1572 | 16 | }, |
1573 | 16 | { &hf_param_feature_page2_byte0[5], |
1574 | 16 | { "HCI_Inquiry_Response_Notification event", "btlmp.feature.page2.hciinqrespnotifevt", |
1575 | 16 | FT_UINT8, BASE_DEC, NULL, 0x10, |
1576 | 16 | NULL, HFILL } |
1577 | 16 | }, |
1578 | 16 | { &hf_param_feature_page2_byte0[6], |
1579 | 16 | { "Generalized interlaced scan", "btlmp.feature.page2.generalinterlacedscan", |
1580 | 16 | FT_UINT8, BASE_DEC, NULL, 0x20, |
1581 | 16 | NULL, HFILL } |
1582 | 16 | }, |
1583 | 16 | { &hf_param_feature_page2_byte0[7], |
1584 | 16 | { "Coarse Clock Adjustment", "btlmp.feature.page2.coarseclockadj", |
1585 | 16 | FT_UINT8, BASE_DEC, NULL, 0x40, |
1586 | 16 | NULL, HFILL } |
1587 | 16 | }, |
1588 | 16 | { &hf_param_feature_page2_byte0[8], |
1589 | 16 | { "Reserved", "btlmp.feature.page2.reserved1", |
1590 | 16 | FT_UINT8, BASE_DEC, NULL, 0x80, |
1591 | 16 | NULL, HFILL } |
1592 | 16 | }, |
1593 | 16 | { &hf_param_feature_page2_byte1[0], |
1594 | 16 | { "Feature Page 2 Byte 1", "btlmp.feature.page2.byte1", |
1595 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1596 | 16 | NULL, HFILL } |
1597 | 16 | }, |
1598 | 16 | { &hf_param_feature_page2_byte1[1], |
1599 | 16 | { "Secure Connections (Controller Support)", "btlmp.feature.page2.secureconncontroller", |
1600 | 16 | FT_UINT8, BASE_DEC, NULL, 0x01, |
1601 | 16 | NULL, HFILL } |
1602 | 16 | }, |
1603 | 16 | { &hf_param_feature_page2_byte1[2], |
1604 | 16 | { "Ping", "btlmp.feature.page2.ping", |
1605 | 16 | FT_UINT8, BASE_DEC, NULL, 0x02, |
1606 | 16 | NULL, HFILL } |
1607 | 16 | }, |
1608 | 16 | { &hf_param_feature_page2_byte1[3], |
1609 | 16 | { "Slot Availability Mask", "btlmp.feature.page2.slotavailabilitymask", |
1610 | 16 | FT_UINT8, BASE_DEC, NULL, 0x04, |
1611 | 16 | NULL, HFILL } |
1612 | 16 | }, |
1613 | 16 | { &hf_param_feature_page2_byte1[4], |
1614 | 16 | { "Train nudging", "btlmp.feature.page2.trainnudging", |
1615 | 16 | FT_UINT8, BASE_DEC, NULL, 0x08, |
1616 | 16 | NULL, HFILL } |
1617 | 16 | }, |
1618 | 16 | { &hf_param_feature_page2_byte1[5], |
1619 | 16 | { "Reserved", "btlmp.feature.page2.reserved2", |
1620 | 16 | FT_UINT8, BASE_DEC, NULL, 0xf0, |
1621 | 16 | NULL, HFILL } |
1622 | 16 | }, |
1623 | 16 | { &hf_param_features_page, |
1624 | 16 | { "Feature Page", "btlmp.feature.features_page", |
1625 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1626 | 16 | NULL, HFILL } |
1627 | 16 | }, |
1628 | 16 | { &hf_param_max_supported_page, |
1629 | 16 | { "Max Supported Page", "btlmp.feature.max_supported_page", |
1630 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1631 | 16 | NULL, HFILL } |
1632 | 16 | }, |
1633 | 16 | { &hf_param_versnr, |
1634 | 16 | { "VersNr", "btlmp.version.versnr", |
1635 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1636 | 16 | NULL, HFILL } |
1637 | 16 | }, |
1638 | 16 | { &hf_param_compid, |
1639 | 16 | { "CompId", "btlmp.version.CompId", |
1640 | 16 | FT_UINT16, BASE_HEX, NULL, 0x00, |
1641 | 16 | NULL, HFILL } |
1642 | 16 | }, |
1643 | 16 | { &hf_param_subversnr, |
1644 | 16 | { "SubVersNr", "btlmp.version.SubVersNr", |
1645 | 16 | FT_UINT16, BASE_HEX, NULL, 0x00, |
1646 | 16 | NULL, HFILL } |
1647 | 16 | }, |
1648 | 16 | { &hf_param_namelength, |
1649 | 16 | { "Name Length", "btlmp.name.length", |
1650 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1651 | 16 | NULL, HFILL } |
1652 | 16 | }, |
1653 | 16 | { &hf_param_nameoffset, |
1654 | 16 | { "Name Offset", "btlmp.name.offset", |
1655 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1656 | 16 | NULL, HFILL } |
1657 | 16 | }, |
1658 | 16 | { &hf_param_namefragment, |
1659 | 16 | { "Name Fragment", "btlmp.name.fragment", |
1660 | 16 | FT_STRINGZPAD, BASE_NONE, NULL, 0x00, |
1661 | 16 | NULL, HFILL } |
1662 | 16 | }, |
1663 | 16 | { &hf_param_afh_mode, |
1664 | 16 | { "AFH Mode", "btlmp.afh.mode", |
1665 | 16 | FT_UINT8, BASE_HEX, VALS(afh_mode_vals), 0x00, |
1666 | 16 | NULL, HFILL } |
1667 | 16 | }, |
1668 | 16 | { &hf_param_afh_instant, |
1669 | 16 | { "AFH Instant", "btlmp.afh.instant", |
1670 | 16 | FT_UINT32, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
1671 | 16 | NULL, HFILL } |
1672 | 16 | }, |
1673 | 16 | { &hf_param_afh_channelmap[0], |
1674 | 16 | { "AFH Channel Map 0", "btlmp.afh.channelmap0", |
1675 | 16 | FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_uint8_binary), 0x00, |
1676 | 16 | NULL, HFILL } |
1677 | 16 | }, |
1678 | 16 | { &hf_param_afh_channelmap[1], |
1679 | 16 | { "AFH Channel Map 1", "btlmp.afh.channelmap1", |
1680 | 16 | FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_uint8_binary), 0x00, |
1681 | 16 | NULL, HFILL } |
1682 | 16 | }, |
1683 | 16 | { &hf_param_afh_channelmap[2], |
1684 | 16 | { "AFH Channel Map 2", "btlmp.afh.channelmap2", |
1685 | 16 | FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_uint8_binary), 0x00, |
1686 | 16 | NULL, HFILL } |
1687 | 16 | }, |
1688 | 16 | { &hf_param_afh_channelmap[3], |
1689 | 16 | { "AFH Channel Map 3", "btlmp.afh.channelmap3", |
1690 | 16 | FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_uint8_binary), 0x00, |
1691 | 16 | NULL, HFILL } |
1692 | 16 | }, |
1693 | 16 | { &hf_param_afh_channelmap[4], |
1694 | 16 | { "AFH Channel Map 4", "btlmp.afh.channelmap4", |
1695 | 16 | FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_uint8_binary), 0x00, |
1696 | 16 | NULL, HFILL } |
1697 | 16 | }, |
1698 | 16 | { &hf_param_afh_channelmap[5], |
1699 | 16 | { "AFH Channel Map 5", "btlmp.afh.channelmap5", |
1700 | 16 | FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_uint8_binary), 0x00, |
1701 | 16 | NULL, HFILL } |
1702 | 16 | }, |
1703 | 16 | { &hf_param_afh_channelmap[6], |
1704 | 16 | { "AFH Channel Map 6", "btlmp.afh.channelmap6", |
1705 | 16 | FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_uint8_binary), 0x00, |
1706 | 16 | NULL, HFILL } |
1707 | 16 | }, |
1708 | 16 | { &hf_param_afh_channelmap[7], |
1709 | 16 | { "AFH Channel Map 7", "btlmp.afh.channelmap7", |
1710 | 16 | FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_uint8_binary), 0x00, |
1711 | 16 | NULL, HFILL } |
1712 | 16 | }, |
1713 | 16 | { &hf_param_afh_channelmap[8], |
1714 | 16 | { "AFH Channel Map 8", "btlmp.afh.channelmap8", |
1715 | 16 | FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_uint8_binary), 0x00, |
1716 | 16 | NULL, HFILL } |
1717 | 16 | }, |
1718 | 16 | { &hf_param_afh_channelmap[9], |
1719 | 16 | { "AFH Channel Map 9", "btlmp.afh.channelmap9", |
1720 | 16 | FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_uint8_binary), 0x00, |
1721 | 16 | NULL, HFILL } |
1722 | 16 | }, |
1723 | 16 | { &hf_param_afh_reportingmode, |
1724 | 16 | { "AFH Reporting Mode", "btlmp.afh.reportingmode", |
1725 | 16 | FT_UINT8, BASE_HEX, VALS(afh_reportingmode_vals), 0x00, |
1726 | 16 | NULL, HFILL } |
1727 | 16 | }, |
1728 | 16 | { &hf_param_afh_mininterval, |
1729 | 16 | { "AFH Min Interval", "btlmp.afh.mininterval", |
1730 | 16 | FT_UINT16, BASE_HEX_DEC | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
1731 | 16 | NULL, HFILL } |
1732 | 16 | }, |
1733 | 16 | { &hf_param_afh_maxinterval, |
1734 | 16 | { "AFH Max Interval", "btlmp.afh.maxinterval", |
1735 | 16 | FT_UINT16, BASE_HEX_DEC | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
1736 | 16 | NULL, HFILL } |
1737 | 16 | }, |
1738 | 16 | { &hf_param_afh_channelclass[0][0], |
1739 | 16 | { "AFH Channel 0-1 Classification", "btlmp.afh.channelclass0", |
1740 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x03, |
1741 | 16 | NULL, HFILL } |
1742 | 16 | }, |
1743 | 16 | { &hf_param_afh_channelclass[0][1], |
1744 | 16 | { "AFH Channel 2-3 Classification", "btlmp.afh.channelclass2", |
1745 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x0C, |
1746 | 16 | NULL, HFILL } |
1747 | 16 | }, |
1748 | 16 | { &hf_param_afh_channelclass[0][2], |
1749 | 16 | { "AFH Channel 4-5 Classification", "btlmp.afh.channelclass4", |
1750 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x30, |
1751 | 16 | NULL, HFILL } |
1752 | 16 | }, |
1753 | 16 | { &hf_param_afh_channelclass[0][3], |
1754 | 16 | { "AFH Channel 6-7 Classification", "btlmp.afh.channelclass6", |
1755 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0xC0, |
1756 | 16 | NULL, HFILL } |
1757 | 16 | }, |
1758 | 16 | { &hf_param_afh_channelclass[1][0], |
1759 | 16 | { "AFH Channel 8-9 Classification", "btlmp.afh.channelclass8", |
1760 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x03, |
1761 | 16 | NULL, HFILL } |
1762 | 16 | }, |
1763 | 16 | { &hf_param_afh_channelclass[1][1], |
1764 | 16 | { "AFH Channel 10-11 Classification", "btlmp.afh.channelclass10", |
1765 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x0C, |
1766 | 16 | NULL, HFILL } |
1767 | 16 | }, |
1768 | 16 | { &hf_param_afh_channelclass[1][2], |
1769 | 16 | { "AFH Channel 12-13 Classification", "btlmp.afh.channelclass12", |
1770 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x30, |
1771 | 16 | NULL, HFILL } |
1772 | 16 | }, |
1773 | 16 | { &hf_param_afh_channelclass[1][3], |
1774 | 16 | { "AFH Channel 14-15 Classification", "btlmp.afh.channelclass14", |
1775 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0xC0, |
1776 | 16 | NULL, HFILL } |
1777 | 16 | }, |
1778 | 16 | { &hf_param_afh_channelclass[2][0], |
1779 | 16 | { "AFH Channel 16-17 Classification", "btlmp.afh.channelclass16", |
1780 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x03, |
1781 | 16 | NULL, HFILL } |
1782 | 16 | }, |
1783 | 16 | { &hf_param_afh_channelclass[2][1], |
1784 | 16 | { "AFH Channel 18-19 Classification", "btlmp.afh.channelclass18", |
1785 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x0C, |
1786 | 16 | NULL, HFILL } |
1787 | 16 | }, |
1788 | 16 | { &hf_param_afh_channelclass[2][2], |
1789 | 16 | { "AFH Channel 20-21 Classification", "btlmp.afh.channelclass20", |
1790 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x30, |
1791 | 16 | NULL, HFILL } |
1792 | 16 | }, |
1793 | 16 | { &hf_param_afh_channelclass[2][3], |
1794 | 16 | { "AFH Channel 22-23 Classification", "btlmp.afh.channelclass22", |
1795 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0xC0, |
1796 | 16 | NULL, HFILL } |
1797 | 16 | }, |
1798 | 16 | { &hf_param_afh_channelclass[3][0], |
1799 | 16 | { "AFH Channel 24-25 Classification", "btlmp.afh.channelclass24", |
1800 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x03, |
1801 | 16 | NULL, HFILL } |
1802 | 16 | }, |
1803 | 16 | { &hf_param_afh_channelclass[3][1], |
1804 | 16 | { "AFH Channel 26-27 Classification", "btlmp.afh.channelclass26", |
1805 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x0C, |
1806 | 16 | NULL, HFILL } |
1807 | 16 | }, |
1808 | 16 | { &hf_param_afh_channelclass[3][2], |
1809 | 16 | { "AFH Channel 28-29 Classification", "btlmp.afh.channelclass28", |
1810 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x30, |
1811 | 16 | NULL, HFILL } |
1812 | 16 | }, |
1813 | 16 | { &hf_param_afh_channelclass[3][3], |
1814 | 16 | { "AFH Channel 30-31 Classification", "btlmp.afh.channelclass30", |
1815 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0xC0, |
1816 | 16 | NULL, HFILL } |
1817 | 16 | }, |
1818 | 16 | { &hf_param_afh_channelclass[4][0], |
1819 | 16 | { "AFH Channel 32-33 Classification", "btlmp.afh.channelclass32", |
1820 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x03, |
1821 | 16 | NULL, HFILL } |
1822 | 16 | }, |
1823 | 16 | { &hf_param_afh_channelclass[4][1], |
1824 | 16 | { "AFH Channel 34-35 Classification", "btlmp.afh.channelclass34", |
1825 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x0C, |
1826 | 16 | NULL, HFILL } |
1827 | 16 | }, |
1828 | 16 | { &hf_param_afh_channelclass[4][2], |
1829 | 16 | { "AFH Channel 36-37 Classification", "btlmp.afh.channelclass36", |
1830 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x30, |
1831 | 16 | NULL, HFILL } |
1832 | 16 | }, |
1833 | 16 | { &hf_param_afh_channelclass[4][3], |
1834 | 16 | { "AFH Channel 38-39 Classification", "btlmp.afh.channelclass38", |
1835 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0xC0, |
1836 | 16 | NULL, HFILL } |
1837 | 16 | }, |
1838 | 16 | { &hf_param_afh_channelclass[5][0], |
1839 | 16 | { "AFH Channel 40-41 Classification", "btlmp.afh.channelclass40", |
1840 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x03, |
1841 | 16 | NULL, HFILL } |
1842 | 16 | }, |
1843 | 16 | { &hf_param_afh_channelclass[5][1], |
1844 | 16 | { "AFH Channel 42-43 Classification", "btlmp.afh.channelclass42", |
1845 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x0C, |
1846 | 16 | NULL, HFILL } |
1847 | 16 | }, |
1848 | 16 | { &hf_param_afh_channelclass[5][2], |
1849 | 16 | { "AFH Channel 44-45 Classification", "btlmp.afh.channelclass44", |
1850 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x30, |
1851 | 16 | NULL, HFILL } |
1852 | 16 | }, |
1853 | 16 | { &hf_param_afh_channelclass[5][3], |
1854 | 16 | { "AFH Channel 46-47 Classification", "btlmp.afh.channelclass46", |
1855 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0xC0, |
1856 | 16 | NULL, HFILL } |
1857 | 16 | }, |
1858 | 16 | { &hf_param_afh_channelclass[6][0], |
1859 | 16 | { "AFH Channel 48-49 Classification", "btlmp.afh.channelclass48", |
1860 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x03, |
1861 | 16 | NULL, HFILL } |
1862 | 16 | }, |
1863 | 16 | { &hf_param_afh_channelclass[6][1], |
1864 | 16 | { "AFH Channel 50-51 Classification", "btlmp.afh.channelclass50", |
1865 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x0C, |
1866 | 16 | NULL, HFILL } |
1867 | 16 | }, |
1868 | 16 | { &hf_param_afh_channelclass[6][2], |
1869 | 16 | { "AFH Channel 52-53 Classification", "btlmp.afh.channelclass52", |
1870 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x30, |
1871 | 16 | NULL, HFILL } |
1872 | 16 | }, |
1873 | 16 | { &hf_param_afh_channelclass[6][3], |
1874 | 16 | { "AFH Channel 54-55 Classification", "btlmp.afh.channelclass54", |
1875 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0xC0, |
1876 | 16 | NULL, HFILL } |
1877 | 16 | }, |
1878 | 16 | { &hf_param_afh_channelclass[7][0], |
1879 | 16 | { "AFH Channel 56-57 Classification", "btlmp.afh.channelclass56", |
1880 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x03, |
1881 | 16 | NULL, HFILL } |
1882 | 16 | }, |
1883 | 16 | { &hf_param_afh_channelclass[7][1], |
1884 | 16 | { "AFH Channel 58-59 Classification", "btlmp.afh.channelclass58", |
1885 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x0C, |
1886 | 16 | NULL, HFILL } |
1887 | 16 | }, |
1888 | 16 | { &hf_param_afh_channelclass[7][2], |
1889 | 16 | { "AFH Channel 60-61 Classification", "btlmp.afh.channelclass60", |
1890 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x30, |
1891 | 16 | NULL, HFILL } |
1892 | 16 | }, |
1893 | 16 | { &hf_param_afh_channelclass[7][3], |
1894 | 16 | { "AFH Channel 62-63 Classification", "btlmp.afh.channelclass62", |
1895 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0xC0, |
1896 | 16 | NULL, HFILL } |
1897 | 16 | }, |
1898 | 16 | { &hf_param_afh_channelclass[8][0], |
1899 | 16 | { "AFH Channel 64-65 Classification", "btlmp.afh.channelclass64", |
1900 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x03, |
1901 | 16 | NULL, HFILL } |
1902 | 16 | }, |
1903 | 16 | { &hf_param_afh_channelclass[8][1], |
1904 | 16 | { "AFH Channel 66-67 Classification", "btlmp.afh.channelclass66", |
1905 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x0C, |
1906 | 16 | NULL, HFILL } |
1907 | 16 | }, |
1908 | 16 | { &hf_param_afh_channelclass[8][2], |
1909 | 16 | { "AFH Channel 68-69 Classification", "btlmp.afh.channelclass68", |
1910 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x30, |
1911 | 16 | NULL, HFILL } |
1912 | 16 | }, |
1913 | 16 | { &hf_param_afh_channelclass[8][3], |
1914 | 16 | { "AFH Channel 70-71 Classification", "btlmp.afh.channelclass70", |
1915 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0xC0, |
1916 | 16 | NULL, HFILL } |
1917 | 16 | }, |
1918 | 16 | { &hf_param_afh_channelclass[9][0], |
1919 | 16 | { "AFH Channel 72-73 Classification", "btlmp.afh.channelclass72", |
1920 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x03, |
1921 | 16 | NULL, HFILL } |
1922 | 16 | }, |
1923 | 16 | { &hf_param_afh_channelclass[9][1], |
1924 | 16 | { "AFH Channel 74-75 Classification", "btlmp.afh.channelclass74", |
1925 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x0C, |
1926 | 16 | NULL, HFILL } |
1927 | 16 | }, |
1928 | 16 | { &hf_param_afh_channelclass[9][2], |
1929 | 16 | { "AFH Channel 76-77 Classification", "btlmp.afh.channelclass76", |
1930 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0x30, |
1931 | 16 | NULL, HFILL } |
1932 | 16 | }, |
1933 | 16 | { &hf_param_afh_channelclass[9][3], |
1934 | 16 | { "AFH Channel 78 Classification", "btlmp.afh.channelclass78", |
1935 | 16 | FT_UINT8, BASE_HEX, VALS(afh_channelclass_vals), 0xC0, |
1936 | 16 | NULL, HFILL } |
1937 | 16 | }, |
1938 | 16 | { &hf_param_rand, |
1939 | 16 | { "Random Number", "btlmp.randomnumber", |
1940 | 16 | FT_BYTES, BASE_NONE, NULL, 0x00, |
1941 | 16 | NULL, HFILL } |
1942 | 16 | }, |
1943 | 16 | { &hf_param_key, |
1944 | 16 | { "Key", "btlmp.key", |
1945 | 16 | FT_BYTES, BASE_NONE, NULL, 0x00, |
1946 | 16 | NULL, HFILL } |
1947 | 16 | }, |
1948 | 16 | { &hf_param_clockoffset, |
1949 | 16 | { "Clock Offset", "btlmp.clockoffset", |
1950 | 16 | FT_UINT16, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slotpairs), 0x00, |
1951 | 16 | NULL, HFILL } |
1952 | 16 | }, |
1953 | 16 | { &hf_param_authresp, |
1954 | 16 | { "Authentication Response", "btlmp.authenticationresponse", |
1955 | 16 | FT_UINT32, BASE_HEX, NULL, 0x00, |
1956 | 16 | NULL, HFILL } |
1957 | 16 | }, |
1958 | 16 | { &hf_param_encryptionmode, |
1959 | 16 | { "Encryption Mode", "btlmp.encryptionmode", |
1960 | 16 | FT_UINT8, BASE_HEX, VALS(encryptionmode_vals), 0x00, |
1961 | 16 | NULL, HFILL } |
1962 | 16 | }, |
1963 | 16 | { &hf_param_encryptionkeysize, |
1964 | 16 | { "Encryption Key Size", "btlmp.encryptionkeysize", |
1965 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
1966 | 16 | NULL, HFILL } |
1967 | 16 | }, |
1968 | 16 | { &hf_param_switchinstant, |
1969 | 16 | { "Switch Instant", "btlmp.switchinstant", |
1970 | 16 | FT_UINT32, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
1971 | 16 | NULL, HFILL } |
1972 | 16 | }, |
1973 | 16 | { &hf_param_holdtime, |
1974 | 16 | { "Hold Time", "btlmp.holdtime", |
1975 | 16 | FT_UINT16, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
1976 | 16 | NULL, HFILL } |
1977 | 16 | }, |
1978 | 16 | { &hf_param_holdinstant, |
1979 | 16 | { "Hold Instant", "btlmp.holdinstant", |
1980 | 16 | FT_UINT32, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
1981 | 16 | NULL, HFILL } |
1982 | 16 | }, |
1983 | 16 | { &hf_param_dsniff, |
1984 | 16 | { "Dsniff", "btlmp.sniff.d", |
1985 | 16 | FT_UINT16, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
1986 | 16 | NULL, HFILL } |
1987 | 16 | }, |
1988 | 16 | { &hf_param_tsniff, |
1989 | 16 | { "Tsniff", "btlmp.sniff.t", |
1990 | 16 | FT_UINT16, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
1991 | 16 | NULL, HFILL } |
1992 | 16 | }, |
1993 | 16 | { &hf_param_sniffattempt, |
1994 | 16 | { "Sniff Attempt", "btlmp.sniff.attempt", |
1995 | 16 | FT_UINT16, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
1996 | 16 | NULL, HFILL } |
1997 | 16 | }, |
1998 | 16 | { &hf_param_snifftimeout, |
1999 | 16 | { "Sniff Timeout", "btlmp.sniff.timeout", |
2000 | 16 | FT_UINT16, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2001 | 16 | NULL, HFILL } |
2002 | 16 | }, |
2003 | 16 | { &hf_param_timingcontrolflags[0], |
2004 | 16 | { "Timing Control Flags", "btlmp.timingcontrol.flags", |
2005 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2006 | 16 | NULL, HFILL } |
2007 | 16 | }, |
2008 | 16 | { &hf_param_timingcontrolflags[1], |
2009 | 16 | { "Timing Change", "btlmp.timingcontrol.timingchange", |
2010 | 16 | FT_UINT8, BASE_DEC, VALS(timingcontrol_timingchange_vals), 0x01, |
2011 | 16 | NULL, HFILL } |
2012 | 16 | }, |
2013 | 16 | { &hf_param_timingcontrolflags[2], |
2014 | 16 | { "Use Initialization 2", "btlmp.timingcontrol.useinit2", |
2015 | 16 | FT_UINT8, BASE_DEC, VALS(timingcontrol_useinit2), 0x02, |
2016 | 16 | NULL, HFILL } |
2017 | 16 | }, |
2018 | 16 | { &hf_param_timingcontrolflags[3], |
2019 | 16 | { "No Access Window", "btlmp.timingcontrol.noaccesswindow", |
2020 | 16 | FT_UINT8, BASE_DEC, VALS(timingcontrol_noaccesswindow), 0x04, |
2021 | 16 | NULL, HFILL } |
2022 | 16 | }, |
2023 | 16 | { &hf_param_timingcontrolflags[4], |
2024 | 16 | { "Reserved", "btlmp.timingcontrol.reserved", |
2025 | 16 | FT_UINT8, BASE_HEX, NULL, 0xf8, |
2026 | 16 | NULL, HFILL } |
2027 | 16 | }, |
2028 | 16 | { &hf_param_futureuse1, |
2029 | 16 | { "Future Use", "btlmp.futureuse1", |
2030 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2031 | 16 | NULL, HFILL } |
2032 | 16 | }, |
2033 | 16 | { &hf_param_datarate[0], |
2034 | 16 | { "Datarate", "btlmp.datarate.flags", |
2035 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2036 | 16 | NULL, HFILL } |
2037 | 16 | }, |
2038 | 16 | { &hf_param_datarate[1], |
2039 | 16 | { "Do not use FEC", "btlmp.datarate.nofec", |
2040 | 16 | FT_UINT8, BASE_DEC, VALS(dataratenofec_vals), 0x01, |
2041 | 16 | NULL, HFILL } |
2042 | 16 | }, |
2043 | 16 | { &hf_param_datarate[2], |
2044 | 16 | { "Basic Rate Packet Size Preference", "btlmp.datarate.brpacketsizepreference", |
2045 | 16 | FT_UINT8, BASE_DEC, VALS(dataratepacketsizepreference_vals), 0x06, |
2046 | 16 | NULL, HFILL } |
2047 | 16 | }, |
2048 | 16 | { &hf_param_datarate[3], |
2049 | 16 | { "Enhanced Data Rate Datarate Preference", "btlmp.datarate.edrdataratepreference", |
2050 | 16 | FT_UINT8, BASE_DEC, VALS(dataratedrpreference_vals), 0x18, |
2051 | 16 | NULL, HFILL } |
2052 | 16 | }, |
2053 | 16 | { &hf_param_datarate[4], |
2054 | 16 | { "Enhanced Data Rate Packet Size Preference", "btlmp.datarate.edrpacketsizepreference", |
2055 | 16 | FT_UINT8, BASE_DEC, VALS(dataratepacketsizepreference_vals), 0x60, |
2056 | 16 | NULL, HFILL } |
2057 | 16 | }, |
2058 | 16 | { &hf_param_datarate[5], |
2059 | 16 | { "Reserved", "btlmp.datarate.reserved", |
2060 | 16 | FT_UINT8, BASE_DEC, NULL, 0x80, |
2061 | 16 | NULL, HFILL } |
2062 | 16 | }, |
2063 | 16 | { &hf_param_pollinterval, |
2064 | 16 | { "Poll Interval", "btlmp.qos.pollinterval", |
2065 | 16 | FT_UINT16, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2066 | 16 | NULL, HFILL } |
2067 | 16 | }, |
2068 | 16 | { &hf_param_nbc, |
2069 | 16 | { "NBC", "btlmp.qos.nbc", |
2070 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2071 | 16 | NULL, HFILL } |
2072 | 16 | }, |
2073 | 16 | { &hf_param_scohandle, |
2074 | 16 | { "SCO Handle", "btlmp.sco.handle", |
2075 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2076 | 16 | NULL, HFILL } |
2077 | 16 | }, |
2078 | 16 | { &hf_param_dsco, |
2079 | 16 | { "Dsco", "btlmp.sco.d", |
2080 | 16 | FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2081 | 16 | NULL, HFILL } |
2082 | 16 | }, |
2083 | 16 | { &hf_param_tsco, |
2084 | 16 | { "Tsco", "btlmp.sco.t", |
2085 | 16 | FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2086 | 16 | NULL, HFILL } |
2087 | 16 | }, |
2088 | 16 | { &hf_param_scopacket, |
2089 | 16 | { "SCO packet", "btlmp.sco.packet", |
2090 | 16 | FT_UINT8, BASE_HEX, VALS(scopacket_vals), 0x00, |
2091 | 16 | NULL, HFILL } |
2092 | 16 | }, |
2093 | 16 | { &hf_param_airmode, |
2094 | 16 | { "Air Mode", "btlmp.sco.airmode", |
2095 | 16 | FT_UINT8, BASE_HEX, VALS(airmode_vals), 0x00, |
2096 | 16 | NULL, HFILL } |
2097 | 16 | }, |
2098 | 16 | { &hf_param_slots, |
2099 | 16 | { "Slots", "btlmp.slots", |
2100 | 16 | FT_UINT8, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2101 | 16 | NULL, HFILL } |
2102 | 16 | }, |
2103 | 16 | { &hf_param_tmgacc_drift, |
2104 | 16 | { "Drift", "btlmp.timingaccuracy.drift", |
2105 | 16 | FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_ppm), 0x00, |
2106 | 16 | NULL, HFILL } |
2107 | 16 | }, |
2108 | 16 | { &hf_param_tmgacc_jitter, |
2109 | 16 | { "Jitter", "btlmp.timingaccuracy.jitter", |
2110 | 16 | FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_microsecond_microseconds), 0x00, |
2111 | 16 | NULL, HFILL } |
2112 | 16 | }, |
2113 | 16 | { &hf_param_slotoffset, |
2114 | 16 | { "Slot Offset", "btlmp.slotoffset", |
2115 | 16 | FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_microsecond_microseconds), 0x00, |
2116 | 16 | NULL, HFILL } |
2117 | 16 | }, |
2118 | 16 | { &hf_param_bdaddr, |
2119 | 16 | { "Address", "btlmp.bd_addr", |
2120 | 16 | FT_ETHER, BASE_NONE, NULL, 0x00, |
2121 | 16 | NULL, HFILL } |
2122 | 16 | }, |
2123 | 16 | { &hf_param_pagingscheme, |
2124 | 16 | { "Paging Scheme", "btlmp.paging.scheme", |
2125 | 16 | FT_UINT8, BASE_HEX, VALS(pagingscheme_vals), 0x00, |
2126 | 16 | NULL, HFILL } |
2127 | 16 | }, |
2128 | 16 | { &hf_param_pagingschemesettings, |
2129 | 16 | { "Paging Scheme Settings", "btlmp.paging.schemesettings", |
2130 | 16 | FT_UINT8, BASE_HEX, VALS(pagingschemesettings_vals), 0x00, |
2131 | 16 | NULL, HFILL } |
2132 | 16 | }, |
2133 | 16 | { &hf_param_supervisiontimeout, |
2134 | 16 | { "Supervision Timeout", "btlmp.supervisiontimeout", |
2135 | 16 | FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2136 | 16 | NULL, HFILL } |
2137 | 16 | }, |
2138 | 16 | { &hf_param_testscenario, |
2139 | 16 | { "Scenario", "btlmp.test.scenario", |
2140 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2141 | 16 | NULL, HFILL } |
2142 | 16 | }, |
2143 | 16 | { &hf_param_testhoppingmode, |
2144 | 16 | { "Hopping Mode", "btlmp.test.hoppingmode", |
2145 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2146 | 16 | NULL, HFILL } |
2147 | 16 | }, |
2148 | 16 | { &hf_param_testtxfrequency, |
2149 | 16 | { "TX frequency", "btlmp.test.txfrequency", |
2150 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2151 | 16 | NULL, HFILL } |
2152 | 16 | }, |
2153 | 16 | { &hf_param_testrxfrequency, |
2154 | 16 | { "RX frequency", "btlmp.test.rxfrequency", |
2155 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2156 | 16 | NULL, HFILL } |
2157 | 16 | }, |
2158 | 16 | { &hf_param_testpowercontrolmode, |
2159 | 16 | { "Power Control Mode", "btlmp.test.powercontrolmode", |
2160 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2161 | 16 | NULL, HFILL } |
2162 | 16 | }, |
2163 | 16 | { &hf_param_testpollperiod, |
2164 | 16 | { "Poll Period", "btlmp.test.pollperiod", |
2165 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2166 | 16 | NULL, HFILL } |
2167 | 16 | }, |
2168 | 16 | { &hf_param_testpackettype, |
2169 | 16 | { "Packet Type", "btlmp.test.packettype", |
2170 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2171 | 16 | NULL, HFILL } |
2172 | 16 | }, |
2173 | 16 | { &hf_param_testdatalength, |
2174 | 16 | { "Length of Test Data", "btlmp.test.datalength", |
2175 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2176 | 16 | NULL, HFILL } |
2177 | 16 | }, |
2178 | 16 | { &hf_param_keysizemask, |
2179 | 16 | { "Key Size Mask", "btlmp.keysizemask", |
2180 | 16 | FT_UINT16, BASE_HEX, NULL, 0x00, |
2181 | 16 | NULL, HFILL } |
2182 | 16 | }, |
2183 | 16 | { &hf_param_encapsulatedmajor, |
2184 | 16 | { "Encapsulated Major Type", "btlmp.encapsulated.major", |
2185 | 16 | FT_UINT8, BASE_HEX, VALS(encapsulatedmajor_vals), 0x00, |
2186 | 16 | NULL, HFILL } |
2187 | 16 | }, |
2188 | 16 | { &hf_param_encapsulatedminor, |
2189 | 16 | { "Encapsulated Minor Type", "btlmp.encapsulated.minor", |
2190 | 16 | FT_UINT8, BASE_HEX, VALS(encapsulatedminor_vals), 0x00, |
2191 | 16 | NULL, HFILL } |
2192 | 16 | }, |
2193 | 16 | { &hf_param_encapsulatedlength, |
2194 | 16 | { "Encapsulated Payload Length", "btlmp.encapsulated.payloadlength", |
2195 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2196 | 16 | NULL, HFILL } |
2197 | 16 | }, |
2198 | 16 | { &hf_param_encapsulateddata, |
2199 | 16 | { "Encapsulated Data", "btlmp.encapsulated.data", |
2200 | 16 | FT_BYTES, BASE_NONE, NULL, 0x00, |
2201 | 16 | NULL, HFILL } |
2202 | 16 | }, |
2203 | 16 | { &hf_param_simplepaircommit, |
2204 | 16 | { "Commitment Value", "btlmp.simplepair.commit", |
2205 | 16 | FT_BYTES, BASE_NONE, NULL, 0x00, |
2206 | 16 | NULL, HFILL } |
2207 | 16 | }, |
2208 | 16 | { &hf_param_simplepairnonce, |
2209 | 16 | { "Nonce Value", "btlmp.simplepair.nonce", |
2210 | 16 | FT_BYTES, BASE_NONE, NULL, 0x00, |
2211 | 16 | NULL, HFILL } |
2212 | 16 | }, |
2213 | 16 | { &hf_param_dhkeyconfirm, |
2214 | 16 | { "Confirmation Value", "btlmp.dhkey.confirm", |
2215 | 16 | FT_BYTES, BASE_NONE, NULL, 0x00, |
2216 | 16 | NULL, HFILL } |
2217 | 16 | }, |
2218 | 16 | { &hf_param_clkadjid, |
2219 | 16 | { "Clock Adjust ID", "btlmp.clkadj.id", |
2220 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2221 | 16 | NULL, HFILL } |
2222 | 16 | }, |
2223 | 16 | { &hf_param_clkadjinstant, |
2224 | 16 | { "Clock Adjust Instant", "btlmp.clkadj.instant", |
2225 | 16 | FT_UINT32, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2226 | 16 | NULL, HFILL } |
2227 | 16 | }, |
2228 | 16 | { &hf_param_clkadjus, |
2229 | 16 | { "Clock Adjust Microseconds", "btlmp.clkadj.us", |
2230 | 16 | FT_INT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_microsecond_microseconds), 0x00, |
2231 | 16 | NULL, HFILL } |
2232 | 16 | }, |
2233 | 16 | { &hf_param_clkadjslots, |
2234 | 16 | { "Clock Adjust Slots", "btlmp.clkadj.slots", |
2235 | 16 | FT_UINT8, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2236 | 16 | NULL, HFILL } |
2237 | 16 | }, |
2238 | 16 | { &hf_param_clkadjmode, |
2239 | 16 | { "Clock Adjust Mode", "btlmp.clkadj.mode", |
2240 | 16 | FT_UINT8, BASE_HEX, VALS(clkadjmode_vals), 0x00, |
2241 | 16 | NULL, HFILL } |
2242 | 16 | }, |
2243 | 16 | { &hf_param_clkadjclk, |
2244 | 16 | { "Clock Adjust Clock", "btlmp.clkadj.clk", |
2245 | 16 | FT_UINT32, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slotpairs), 0x00, |
2246 | 16 | NULL, HFILL } |
2247 | 16 | }, |
2248 | 16 | { &hf_param_clkadjperiod, |
2249 | 16 | { "Clock Adjust Period", "btlmp.clkadj.period", |
2250 | 16 | FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2251 | 16 | NULL, HFILL } |
2252 | 16 | }, |
2253 | 16 | { &hf_param_packettypetable, |
2254 | 16 | { "Packet Type Table", "btlmp.packettypetable", |
2255 | 16 | FT_UINT8, BASE_HEX, VALS(packettypetable_vals), 0x00, |
2256 | 16 | NULL, HFILL } |
2257 | 16 | }, |
2258 | 16 | { &hf_param_escohandle, |
2259 | 16 | { "eSCO Handle", "btlmp.esco.handle", |
2260 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2261 | 16 | NULL, HFILL } |
2262 | 16 | }, |
2263 | 16 | { &hf_param_escoltaddr, |
2264 | 16 | { "eSCO LT_ADDR", "btlmp.esco.ltaddr", |
2265 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2266 | 16 | NULL, HFILL } |
2267 | 16 | }, |
2268 | 16 | { &hf_param_escod, |
2269 | 16 | { "Desco", "btlmp.esco.d", |
2270 | 16 | FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2271 | 16 | NULL, HFILL } |
2272 | 16 | }, |
2273 | 16 | { &hf_param_escot, |
2274 | 16 | { "Tesco", "btlmp.esco.t", |
2275 | 16 | FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2276 | 16 | NULL, HFILL } |
2277 | 16 | }, |
2278 | 16 | { &hf_param_escow, |
2279 | 16 | { "Wesco", "btlmp.esco.w", |
2280 | 16 | FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2281 | 16 | NULL, HFILL } |
2282 | 16 | }, |
2283 | 16 | { &hf_param_escopackettypems, |
2284 | 16 | { "eSCO Packet Type M->S", "btlmp.esco.packettypems", |
2285 | 16 | FT_UINT8, BASE_HEX, VALS(escopackettypems_vals), 0x00, |
2286 | 16 | NULL, HFILL } |
2287 | 16 | }, |
2288 | 16 | { &hf_param_escopackettypesm, |
2289 | 16 | { "eSCO Packet Type S->M", "btlmp.esco.packettypesm", |
2290 | 16 | FT_UINT8, BASE_HEX, VALS(escopackettypesm_vals), 0x00, |
2291 | 16 | NULL, HFILL } |
2292 | 16 | }, |
2293 | 16 | { &hf_param_escopacketlengthms, |
2294 | 16 | { "eSCO Packet Length M->S", "btlmp.esco.packetlengthms", |
2295 | 16 | FT_UINT16, BASE_HEX, NULL, 0x00, |
2296 | 16 | NULL, HFILL } |
2297 | 16 | }, |
2298 | 16 | { &hf_param_escopacketlengthsm, |
2299 | 16 | { "eSCO Packet Length S->M", "btlmp.esco.packetlengthsm", |
2300 | 16 | FT_UINT16, BASE_HEX, NULL, 0x00, |
2301 | 16 | NULL, HFILL } |
2302 | 16 | }, |
2303 | 16 | { &hf_param_negostate, |
2304 | 16 | { "Negotiation State", "btlmp.negotiationstate", |
2305 | 16 | FT_UINT8, BASE_HEX, VALS(negostate_vals), 0x00, |
2306 | 16 | NULL, HFILL } |
2307 | 16 | }, |
2308 | 16 | { &hf_param_maxsniffsubrate, |
2309 | 16 | { "Max Sniff Subrate", "btlmp.sniffsubrate.max", |
2310 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2311 | 16 | NULL, HFILL } |
2312 | 16 | }, |
2313 | 16 | { &hf_param_minsniffmodetimeout, |
2314 | 16 | { "Min Sniff Mode Timeout", "btlmp.sniffsubrate.minmodetimeout", |
2315 | 16 | FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2316 | 16 | NULL, HFILL } |
2317 | 16 | }, |
2318 | 16 | { &hf_param_sniffsubratinginstant, |
2319 | 16 | { "Sniff Subrating Instant", "btlmp.sniffsubrate.instant", |
2320 | 16 | FT_UINT32, BASE_HEX, NULL, 0x00, |
2321 | 16 | NULL, HFILL } |
2322 | 16 | }, |
2323 | 16 | { &hf_param_iocapcap, |
2324 | 16 | { "IO Capabilities", "btlmp.iocap.cap", |
2325 | 16 | FT_UINT8, BASE_HEX, VALS(iocapcap_vals), 0x00, |
2326 | 16 | NULL, HFILL } |
2327 | 16 | }, |
2328 | 16 | { &hf_param_iocapoobauthdata, |
2329 | 16 | { "OOB Authentication Data", "btlmp.iocap.oobauthdata", |
2330 | 16 | FT_UINT8, BASE_HEX, VALS(iocapoobauthdata_vals), 0x00, |
2331 | 16 | NULL, HFILL } |
2332 | 16 | }, |
2333 | 16 | { &hf_param_iocapauthreq, |
2334 | 16 | { "Authentication Requirement", "btlmp.iocap.authreq", |
2335 | 16 | FT_UINT8, BASE_HEX, VALS(iocapauthreq_vals), 0x00, |
2336 | 16 | NULL, HFILL } |
2337 | 16 | }, |
2338 | 16 | { &hf_param_keypressnotificationtype, |
2339 | 16 | { "Notification Type", "btlmp.keypress.notificationtype", |
2340 | 16 | FT_UINT8, BASE_HEX, VALS(keypressnotificationtype_vals), 0x00, |
2341 | 16 | NULL, HFILL } |
2342 | 16 | }, |
2343 | 16 | { &hf_param_poweradjreq, |
2344 | 16 | { "Power Adjustment Request", "btlmp.poweradj.request", |
2345 | 16 | FT_UINT8, BASE_HEX, VALS(poweradjreq_vals), 0x00, |
2346 | 16 | NULL, HFILL } |
2347 | 16 | }, |
2348 | 16 | { &hf_param_poweradjresp[0], |
2349 | 16 | { "Power Adjustment Response", "btlmp.poweradj.response", |
2350 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2351 | 16 | NULL, HFILL } |
2352 | 16 | }, |
2353 | 16 | { &hf_param_poweradjresp[1], |
2354 | 16 | { "GFSK", "btlmp.poweradj.gfsk", |
2355 | 16 | FT_UINT8, BASE_HEX, VALS(poweradjresp_vals), 0x03, |
2356 | 16 | NULL, HFILL } |
2357 | 16 | }, |
2358 | 16 | { &hf_param_poweradjresp[2], |
2359 | 16 | { "Pi/4-DQPSK", "btlmp.poweradj.pi4dqsk", |
2360 | 16 | FT_UINT8, BASE_HEX, VALS(poweradjresp_vals), 0x0C, |
2361 | 16 | NULL, HFILL } |
2362 | 16 | }, |
2363 | 16 | { &hf_param_poweradjresp[3], |
2364 | 16 | { "8DPSK", "btlmp.poweradj.8dpsk", |
2365 | 16 | FT_UINT8, BASE_HEX, VALS(poweradjresp_vals), 0x30, |
2366 | 16 | NULL, HFILL } |
2367 | 16 | }, |
2368 | 16 | { &hf_param_poweradjresp[4], |
2369 | 16 | { "Reserved", "btlmp.poweradj.reserved", |
2370 | 16 | FT_UINT8, BASE_HEX, NULL, 0xC0, |
2371 | 16 | NULL, HFILL } |
2372 | 16 | }, |
2373 | 16 | { &hf_param_samindex, |
2374 | 16 | { "SAM Index", "btlmp.sam.index", |
2375 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2376 | 16 | NULL, HFILL } |
2377 | 16 | }, |
2378 | 16 | { &hf_param_samtsm, |
2379 | 16 | { "Tsam-sm", "btlmp.sam.tsm", |
2380 | 16 | FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2381 | 16 | NULL, HFILL } |
2382 | 16 | }, |
2383 | 16 | { &hf_param_samnsm, |
2384 | 16 | { "Nsam-sm", "btlmp.sam.nsm", |
2385 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2386 | 16 | NULL, HFILL } |
2387 | 16 | }, |
2388 | 16 | { &hf_param_samsubmaps, |
2389 | 16 | { "SAM Submaps", "btlmp.sam.submaps", |
2390 | 16 | FT_BYTES, BASE_NONE, NULL, 0x00, |
2391 | 16 | NULL, HFILL } |
2392 | 16 | }, |
2393 | 16 | { &hf_param_samupdatemode, |
2394 | 16 | { "Update Mode", "btlmp.sam.updatemode", |
2395 | 16 | FT_UINT8, BASE_HEX, VALS(samupdatemode_vals), 0x00, |
2396 | 16 | NULL, HFILL } |
2397 | 16 | }, |
2398 | 16 | { &hf_param_samtype0submap, |
2399 | 16 | { "SAM Type 0 Submap", "btlmp.sam.type0submap", |
2400 | 16 | FT_BYTES, BASE_NONE, NULL, 0x00, |
2401 | 16 | NULL, HFILL } |
2402 | 16 | }, |
2403 | 16 | { &hf_param_samd, |
2404 | 16 | { "Dsam", "btlmp.sam.d", |
2405 | 16 | FT_UINT8, BASE_HEX, NULL, 0x00, |
2406 | 16 | NULL, HFILL } |
2407 | 16 | }, |
2408 | 16 | { &hf_param_saminstant, |
2409 | 16 | { "SAM Instant", "btlmp.sam.instant", |
2410 | 16 | FT_UINT32, BASE_HEX | BASE_UNIT_STRING, UNS(&units_slots), 0x00, |
2411 | 16 | NULL, HFILL } |
2412 | 16 | }, |
2413 | 16 | { &hf_params, |
2414 | 16 | { "Parameters", "btlmp.parameters", |
2415 | 16 | FT_NONE, BASE_NONE, NULL, 0x00, |
2416 | 16 | NULL, HFILL } |
2417 | 16 | } |
2418 | 16 | }; |
2419 | | |
2420 | 16 | static int *ett[] = { |
2421 | 16 | &ett_btlmp |
2422 | 16 | }; |
2423 | | |
2424 | 16 | proto_btlmp = proto_register_protocol("Bluetooth Link Manager Protocol", "BT LMP", "btlmp"); |
2425 | 16 | proto_register_field_array(proto_btlmp, hf, array_length(hf)); |
2426 | 16 | proto_register_subtree_array(ett, array_length(ett)); |
2427 | 16 | btlmp_handle = register_dissector("btlmp", dissect_btlmp, proto_btlmp); |
2428 | 16 | } |
2429 | | |
2430 | | void |
2431 | | proto_reg_handoff_btlmp(void) |
2432 | 16 | { |
2433 | 16 | } |
2434 | | |
2435 | | /* |
2436 | | * Editor modelines - https://www.wireshark.org/tools/modelines.html |
2437 | | * |
2438 | | * Local variables: |
2439 | | * c-basic-offset: 4 |
2440 | | * tab-width: 8 |
2441 | | * indent-tabs-mode: nil |
2442 | | * End: |
2443 | | * |
2444 | | * vi: set shiftwidth=4 tabstop=8 expandtab: |
2445 | | * :indentSize=4:tabSize=8:noTabs=true: |
2446 | | */ |