Coverage Report

Created: 2026-08-14 06:45

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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
 */