hci.c revision 18a8555accbbad5dc57f99303dc7718b69b3921c
195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky/*
2e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *
3aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann *  BlueZ - Bluetooth protocol stack for Linux
4e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *
5e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *  Copyright (C) 2000-2002  Maxim Krasnyansky <maxk@qualcomm.com>
6e5e4f00bb96381f8971b9b1ca674902e9771626cMarcel Holtmann *  Copyright (C) 2003-2011  Marcel Holtmann <marcel@holtmann.org>
7e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *
8e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *
9e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *  This program is free software; you can redistribute it and/or modify
10e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *  it under the terms of the GNU General Public License as published by
11e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *  the Free Software Foundation; either version 2 of the License, or
12e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *  (at your option) any later version.
13e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *
14e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *  This program is distributed in the hope that it will be useful,
15e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *  GNU General Public License for more details.
18e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *
19e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *  You should have received a copy of the GNU General Public License
20e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *  along with this program; if not, write to the Free Software
21aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
22e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann *
2395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky */
2495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
25aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#ifdef HAVE_CONFIG_H
26aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#include <config.h>
27aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#endif
28aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann
2995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <stdio.h>
30e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann#include <errno.h>
31d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann#include <ctype.h>
3295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <unistd.h>
33aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#include <stdlib.h>
3495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <string.h>
3595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
3695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <sys/types.h>
370d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann#include <sys/socket.h>
380d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann#include <netinet/in.h>
3995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
4095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <bluetooth/bluetooth.h>
4195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <bluetooth/hci.h>
42ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann#include <bluetooth/hci_lib.h>
4395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
4495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include "parser.h"
4595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
46be9be844106d677ec77acee68935bc9e66772123Marcel Holtmannstatic uint16_t manufacturer = DEFAULT_COMPID;
47be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann
48be9be844106d677ec77acee68935bc9e66772123Marcel Holtmannstatic inline uint16_t get_manufacturer(void)
49be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann{
50be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	return (manufacturer == DEFAULT_COMPID ? parser.defcompid : manufacturer);
51be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann}
52be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann
53b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo#define EVENT_NUM 76
5413acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *event_str[EVENT_NUM + 1] = {
5566f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Unknown",
5666f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Inquiry Complete",
5766f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Inquiry Result",
5866f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Connect Complete",
5966f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Connect Request",
6066f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Disconn Complete",
6166f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Auth Complete",
6266f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Remote Name Req Complete",
63d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	"Encrypt Change",
6466f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Change Connection Link Key Complete",
6566f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Master Link Key Complete",
6666f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Read Remote Supported Features",
6766f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Read Remote Ver Info Complete",
6866f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"QoS Setup Complete",
6966f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Command Complete",
7066f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Command Status",
7166f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Hardware Error",
7266f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Flush Occurred",
7366f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Role Change",
7466f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Number of Completed Packets",
7566f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Mode Change",
7666f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Return Link Keys",
7766f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"PIN Code Request",
7866f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Link Key Request",
7966f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Link Key Notification",
8066f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Loopback Command",
8166f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Data Buffer Overflow",
8266f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Max Slots Change",
8366f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Read Clock Offset Complete",
8466f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Connection Packet Type Changed",
8566f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"QoS Violation",
8666f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky	"Page Scan Mode Change",
87328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Page Scan Repetition Mode Change",
88328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Flow Specification Complete",
89328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Inquiry Result with RSSI",
90328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Remote Extended Features",
91328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
92328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
93328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
94328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
95328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
96328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
97328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
98328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
99328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Synchronous Connect Complete",
1001a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Synchronous Connect Changed",
101120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	"Sniff Subrate",
1021a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Extended Inquiry Result",
1037460c526938c04bb76eb9c44ade94666c4e5c0feMarcel Holtmann	"Encryption Key Refresh Complete",
104b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"IO Capability Request",
105b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"IO Capability Response",
106b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"User Confirmation Request",
107b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"User Passkey Request",
108b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"Remote OOB Data Request",
109b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"Simple Pairing Complete",
110d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	"Unknown",
111d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	"Link Supervision Timeout Change",
1127460c526938c04bb76eb9c44ade94666c4e5c0feMarcel Holtmann	"Enhanced Flush Complete",
1137460c526938c04bb76eb9c44ade94666c4e5c0feMarcel Holtmann	"Unknown",
114b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"User Passkey Notification",
115b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"Keypress Notification",
1167460c526938c04bb76eb9c44ade94666c4e5c0feMarcel Holtmann	"Remote Host Supported Features Notification",
117b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Meta Event",
118b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Physical Link Complete",
119b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Channel Selected",
120b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Disconnection Physical Link Complete",
121b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Physical Link Loss Early Warning",
122b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Physical Link Recovery",
123b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Logical Link Complete",
124b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Disconnection Logical Link Complete",
125b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Flow Spec Modify Complete",
126b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Number Of Completed Data Blocks",
127b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"AMP Start Test",
128b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"AMP Test End",
129b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"AMP Receiver Report",
130b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Short Range Mode Change Complete",
131b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"AMP Status Change",
132b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo};
133b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
134b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo#define LE_EV_NUM 5
135b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic char *ev_le_meta_str[LE_EV_NUM + 1] = {
136b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Unknown",
137b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Connection Complete",
138b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Advertising Report",
139b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Connection Update Complete",
140b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Read Remote Used Features Complete",
141b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Long Term Key Request",
14266f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky};
1432bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
144c7f436764386ca845317b678f3330340ccd838b8Inga Stotland#define CMD_LINKCTL_NUM 60
14513acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_linkctl_str[CMD_LINKCTL_NUM + 1] = {
1462bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Unknown",
1472bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Inquiry",
1482bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Inquiry Cancel",
1492bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Periodic Inquiry Mode",
1502bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Exit Periodic Inquiry Mode",
1512bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Create Connection",
1522bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Disconnect",
1532bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Add SCO Connection",
154328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Create Connection Cancel",
1552bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Accept Connection Request",
1562bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Reject Connection Request",
1572bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Link Key Request Reply",
1582bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Link Key Request Negative Reply",
1592bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"PIN Code Request Reply",
1602bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"PIN Code Request Negative Reply",
1612bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Change Connection Packet Type",
162f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1632bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Authentication Requested",
164f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1652bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Set Connection Encryption",
166f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1672bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Change Connection Link Key",
168f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1692bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Master Link Key",
170f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1712bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Remote Name Request",
172328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Remote Name Request Cancel",
1732bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Remote Supported Features",
174328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Remote Extended Features",
1752bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Remote Version Information",
176f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
177328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Clock Offset",
178a70eea73595ffa34b0b66938f0f8f59f13527e7fMarcel Holtmann	"Read LMP Handle",
179328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
180328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
181328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
182328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
183328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
184328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
185328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
186328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Setup Synchronous Connection",
187328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Accept Synchronous Connection",
1881a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Reject Synchronous Connection",
189b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"IO Capability Request Reply",
190b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"User Confirmation Request Reply",
191b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"User Confirmation Request Negative Reply",
192b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"User Passkey Request Reply",
193b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"User Passkey Request Negative Reply",
194b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"Remote OOB Data Request Reply",
1957df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Unknown",
1967df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Unknown",
197b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"Remote OOB Data Request Negative Reply",
198b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"IO Capability Request Negative Reply",
199c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Create Physical Link",
200c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Accept Physical Link",
201c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Disconnect Physical Link",
202c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Create Logical Link",
203c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Accept Logical Link",
204c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Disconnect Logical Link",
205c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Logical Link Cancel",
206c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Flow Spec Modify",
2072bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky};
2082bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
209120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann#define CMD_LINKPOL_NUM 17
21013acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_linkpol_str[CMD_LINKPOL_NUM + 1] = {
2112bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Unknown",
2122bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Hold Mode",
213f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2142bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Sniff Mode",
2152bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Exit Sniff Mode",
216328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Park State",
217328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Exit Park State",
2182bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"QoS Setup",
219f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2202bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Role Discovery",
221f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2222bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Switch Role",
2232bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Link Policy Settings",
224328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Link Policy Settings",
225328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Default Link Policy Settings",
226328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Default Link Policy Settings",
2271a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Flow Specification",
2287df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Sniff Subrating",
2292bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky};
2302bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
231b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo#define CMD_HOSTCTL_NUM 109
23213acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_hostctl_str[CMD_HOSTCTL_NUM + 1] = {
2332bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Unknown",
2342bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Set Event Mask",
235f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2362bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Reset",
237f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2382bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Set Event Filter",
239f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
240f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2412bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Flush",
2422bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read PIN Type ",
2432bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write PIN Type",
2442bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Create New Unit Key",
245f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2462bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Stored Link Key",
247f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
248f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
249f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2502bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Stored Link Key",
2512bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Delete Stored Link Key",
252328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Local Name",
2532bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Local Name",
2542bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Connection Accept Timeout",
2552bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Connection Accept Timeout",
2562bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Page Timeout",
2572bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Page Timeout",
2582bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Scan Enable",
2592bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Scan Enable",
2602bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Page Scan Activity",
2612bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Page Scan Activity",
2622bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Inquiry Scan Activity",
2632bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Inquiry Scan Activity",
2642bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Authentication Enable",
2652bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Authentication Enable",
2662bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Encryption Mode",
2672bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Encryption Mode",
2682bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Class of Device",
2692bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Class of Device",
2702bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Voice Setting",
2712bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Voice Setting",
2722bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Automatic Flush Timeout",
2732bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Automatic Flush Timeout",
2742bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Num Broadcast Retransmissions",
2752bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Num Broadcast Retransmissions",
2762bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Hold Mode Activity ",
2772bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Hold Mode Activity",
2782bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Transmit Power Level",
279328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Synchronous Flow Control Enable",
280328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Synchronous Flow Control Enable",
281f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2822bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Set Host Controller To Host Flow Control",
283f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2842bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Host Buffer Size",
285f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2862bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Host Number of Completed Packets",
2872bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Link Supervision Timeout",
2882bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Link Supervision Timeout",
2892bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Number of Supported IAC",
2902bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Current IAC LAP",
2912bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Current IAC LAP",
2922bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Page Scan Period Mode",
2932bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Page Scan Period Mode",
2942bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Page Scan Mode",
295328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Page Scan Mode",
296328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Set AFH Host Channel Classification",
297328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
298328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
299328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Inquiry Scan Type",
300328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Inquiry Scan Type",
301328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Inquiry Mode",
302328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Inquiry Mode",
303328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Page Scan Type",
304328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Page Scan Type",
305328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read AFH Channel Assessment Mode",
3061a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Write AFH Channel Assessment Mode",
3071a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Unknown",
30813acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
30913acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
31013acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
31113acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
31213acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
31313acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
3141a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Read Extended Inquiry Response",
3151a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Write Extended Inquiry Response",
3167df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Refresh Encryption Key",
3177df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Unknown",
318b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"Read Simple Pairing Mode",
319b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"Write Simple Pairing Mode",
320b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"Read Local OOB Data",
3217df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Read Inquiry Response Transmit Power Level",
32209d7063d8d3f1d32884cde27ecef80e183549897Marcel Holtmann	"Write Inquiry Transmit Power Level",
3237df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Read Default Erroneous Data Reporting",
3247df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Write Default Erroneous Data Reporting",
3257df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Unknown",
3267df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Unknown",
3277df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Unknown",
328b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Enhanced Flush",
3297df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Unknown",
330b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Read Logical Link Accept Timeout",
331b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Write Logical Link Accept Timeout",
332b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Set Event Mask Page 2",
333b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Read Location Data",
334b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Write Location Data",
335b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Read Flow Control Mode",
336b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Write Flow Control Mode",
337b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Read Enhanced Transmit Power Level",
338b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Read Best Effort Flush Timeout",
339b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Write Best Effort Flush Timeout",
340b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Short Range Mode",
341b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Read LE Host Supported",
342b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Write LE Host Supported",
3432bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky};
3442bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
34513acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define CMD_INFO_NUM 9
34613acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_info_str[CMD_INFO_NUM + 1] = {
3472bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Unknown",
3482bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Local Version Information",
349328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Local Supported Commands",
3502bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Local Supported Features",
351328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Local Extended Features",
3522bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Buffer Size",
353f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
3542bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Country Code",
355f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
3561a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Read BD ADDR",
3572bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky};
3582bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
359c7f436764386ca845317b678f3330340ccd838b8Inga Stotland#define CMD_STATUS_NUM 11
36013acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_status_str[CMD_STATUS_NUM + 1] = {
3612bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Unknown",
3622bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Failed Contact Counter",
3632bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Reset Failed Contact Counter",
364328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Link Quality",
365f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
366328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read RSSI",
367328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read AFH Channel Map",
3681a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Read Clock",
369c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Read Encryption Key Size",
370c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Read Local AMP Info",
371c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Read Local AMP ASSOC",
372c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	"Write Remote AMP ASSOC"
3732bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky};
37466f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky
3757df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann#define CMD_TESTING_NUM 4
3767df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmannstatic char *cmd_testing_str[CMD_TESTING_NUM + 1] = {
3777df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Unknown",
3787df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Read Loopback Mode",
3797df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Write Loopback Mode",
3807df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Enable Device Under Test mode",
3817df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann	"Unknown",
3827df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann};
3837df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann
384d88bf4263a7abb83082b8b492e3992e83df580a2Ville Tervo#define CMD_LE_NUM 31
385b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic char *cmd_le_str[CMD_LE_NUM + 1] = {
386b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Unknown",
387b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Set Event Mask",
388b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Read Buffer Size",
389b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Read Local Supported Features",
390b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"Unknown",
391b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Set Random Address",
392b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Set Advertising Parameters",
393b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Read Advertising Channel Tx Power",
394b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Set Advertising Data",
395b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Set Scan Response Data",
396b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Set Advertise Enable",
397b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Set Scan Parameters",
398b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Set Scan Enable",
399b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Create Connection",
400b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Create Connection Cancel",
401b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Read White List Size",
402b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Clear White List",
403b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Add Device To White List",
404b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Remove Device From White List",
405b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Connection Update",
406d88bf4263a7abb83082b8b492e3992e83df580a2Ville Tervo	"LE Set Host Channel Classification",
407b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Read Channel Map",
408b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Read Remote Used Features",
409b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Encrypt",
410b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Rand",
411b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Start Encryption",
412b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Long Term Key Request Reply",
413b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Long Term Key Request Negative Reply",
414b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Read Supported States",
415b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Receiver Test",
416b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Transmitter Test",
417b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	"LE Test End",
418b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo};
419b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
420895387d97f34fb28942059e1932a6efdc42bb6b0Marcel Holtmann#define ERROR_CODE_NUM 56
42113acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *error_code_str[ERROR_CODE_NUM + 1] = {
422d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Success",
423d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unknown HCI Command",
424d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unknown Connection Identifier",
425d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Hardware Failure",
426d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Page Timeout",
427d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Authentication Failure",
428d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"PIN or Key Missing",
429d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Memory Capacity Exceeded",
430d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Timeout",
431d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Limit Exceeded",
432d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Synchronous Connection to a Device Exceeded",
433d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"ACL Connection Already Exists",
434d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Command Disallowed",
435d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Rejected due to Limited Resources",
436d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Rejected due to Security Reasons",
437d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Rejected due to Unacceptable BD_ADDR",
438d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Accept Timeout Exceeded",
439d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unsupported Feature or Parameter Value",
440d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Invalid HCI Command Parameters",
44160864ce9e77ec159d0914fe8d938565493f08eebMarcel Holtmann	"Remote User Terminated Connection",
442d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Remote Device Terminated Connection due to Low Resources",
443d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Remote Device Terminated Connection due to Power Off",
444d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Terminated by Local Host",
445fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	"Repeated Attempts",
446d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Pairing Not Allowed",
447d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unknown LMP PDU",
448d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unsupported Remote Feature / Unsupported LMP Feature",
449d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"SCO Offset Rejected",
450d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"SCO Interval Rejected",
451d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"SCO Air Mode Rejected",
452d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Invalid LMP Parameters",
453d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unspecified Error",
454d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unsupported LMP Parameter Value",
455d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Role Change Not Allowed",
456d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"LMP Response Timeout",
457d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"LMP Error Transaction Collision",
458d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"LMP PDU Not Allowed",
459d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Encryption Mode Not Acceptable",
460d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Link Key Can Not be Changed",
461d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Requested QoS Not Supported",
462d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Instant Passed",
463fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	"Pairing with Unit Key Not Supported",
464d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Different Transaction Collision",
465d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Reserved",
466d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"QoS Unacceptable Parameter",
467d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"QoS Rejected",
468d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Channel Classification Not Supported",
469d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Insufficient Security",
470d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Parameter out of Mandatory Range",
471d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Reserved",
472d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Role Switch Pending",
473d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Reserved",
474d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Reserved Slot Violation",
4751a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Role Switch Failed",
476895387d97f34fb28942059e1932a6efdc42bb6b0Marcel Holtmann	"Extended Inquiry Response Too Large",
477b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"Simple Pairing Not Supported by Host",
478b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	"Host Busy - Pairing",
479d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann};
480d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
481d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic char *status2str(uint8_t status)
482d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
483d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char *str;
484d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
485d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (status <= ERROR_CODE_NUM)
486d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		str = error_code_str[status];
487d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	else
488d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		str = "Unknown";
489d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
490d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	return str;
491d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
492d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
493d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic char *opcode2str(uint16_t opcode)
49495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
4950d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
4960d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
4972bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	char *cmd;
49895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
4992bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	switch (ogf) {
5002bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	case OGF_INFO_PARAM:
5012bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		if (ocf <= CMD_INFO_NUM)
502d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			cmd = cmd_info_str[ocf];
5032bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		else
5042bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky			cmd = "Unknown";
5052bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
5062bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
5072bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	case OGF_HOST_CTL:
5082bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		if (ocf <= CMD_HOSTCTL_NUM)
509d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			cmd = cmd_hostctl_str[ocf];
5102bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		else
5112bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky			cmd = "Unknown";
5122bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
5132bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
5142bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	case OGF_LINK_CTL:
5152bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		if (ocf <= CMD_LINKCTL_NUM)
516d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			cmd = cmd_linkctl_str[ocf];
5172bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		else
5182bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky			cmd = "Unknown";
5192bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
5202bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
5212bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	case OGF_LINK_POLICY:
5222bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		if (ocf <= CMD_LINKPOL_NUM)
523d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			cmd = cmd_linkpol_str[ocf];
5242bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		else
5252bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky			cmd = "Unknown";
5262bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
5272bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
5282bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	case OGF_STATUS_PARAM:
5292bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		if (ocf <= CMD_STATUS_NUM)
530d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			cmd = cmd_status_str[ocf];
5312bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		else
5322bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky			cmd = "Unknown";
5332bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
5342bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
535cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann	case OGF_TESTING_CMD:
5367df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann		if (ocf <= CMD_TESTING_NUM)
5377df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann			cmd = cmd_testing_str[ocf];
5387df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann		else
5397df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann			cmd = "Unknown";
540cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann		break;
541cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann
542b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	case OGF_LE_CTL:
543b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		if (ocf <= CMD_LE_NUM)
544b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo			cmd = cmd_le_str[ocf];
545b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		else
546b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo			cmd = "Unknown";
547b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
548b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
549cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann	case OGF_VENDOR_CMD:
550cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann		cmd = "Vendor";
551cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann		break;
552cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann
5532bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	default:
5542bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		cmd = "Unknown";
5552bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
5562bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	}
5572bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
558d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	return cmd;
559d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
560d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
561fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmannstatic char *linktype2str(uint8_t type)
562fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann{
563fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann	switch (type) {
564fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann	case 0x00:
565fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann		return "SCO";
566fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann	case 0x01:
567fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann		return "ACL";
568fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann	case 0x02:
569fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann		return "eSCO";
570fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann	default:
571fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann		return "Unknown";
572fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann	}
573fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann}
574fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann
575ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic char *role2str(uint8_t role)
576ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
577ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	switch (role) {
578ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x00:
579ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Master";
580ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x01:
581ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Slave";
582ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	default:
583ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Unknown";
584ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
585ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
586ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
587ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic char *mode2str(uint8_t mode)
588ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
589ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	switch (mode) {
590ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x00:
591ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Active";
592ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x01:
593ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Hold";
594ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x02:
595ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Sniff";
596ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x03:
597ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Park";
598ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	default:
599ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Unknown";
600ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
601ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
602ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
603d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic char *airmode2str(uint8_t mode)
604d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{
605d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	switch (mode) {
606d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case 0x00:
607d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		return "u-law log";
608d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case 0x01:
609d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		return "A-law log";
610d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case 0x02:
611d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		return "CVSD";
612d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case 0x04:
613d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		return "Transparent data";
614d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	default:
615d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		return "Reserved";
616d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	}
617d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann}
618d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
619646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmannstatic const char *bdaddrtype2str(uint8_t type)
620646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann{
621646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	switch (type) {
622646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	case 0x00:
623646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		return "Public";
624646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	case 0x01:
625646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		return "Random";
626646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	default:
627646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		return "Reserved";
628646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	}
629646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann}
630646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
631646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmannstatic const char *evttype2str(uint8_t type)
632646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann{
633646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	switch (type) {
634646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	case 0x00:
635646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		return "ADV_IND - Connectable undirected advertising";
636646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	case 0x01:
637646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		return "ADV_DIRECT_IND - Connectable directed advertising";
638646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	case 0x02:
639646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		return "ADV_SCAN_IND - Scannable undirected advertising";
640646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	case 0x03:
641646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		return "ADV_NONCONN_IND - Non connectable undirected advertising";
642646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	case 0x04:
643646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		return "SCAN_RSP - Scan Response";
644646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	default:
645646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		return "Reserved";
646646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	}
647646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann}
648646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
649b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic char *keytype2str(uint8_t type)
650b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
651b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	switch (type) {
652b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x00:
653b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Combination Key";
654b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x01:
655b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Local Unit Key";
656b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x02:
657b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Remote Unit Key";
658b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x03:
659b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Debug Combination Key";
660b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x04:
661b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Unauthenticated Combination Key";
662b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x05:
663b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Authenticated Combination Key";
664b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x06:
665b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Changed Combination Key";
666b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	default:
667b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Reserved";
668b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
669b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
670b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
671b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic char *capability2str(uint8_t capability)
672b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
673b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	switch (capability) {
674b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x00:
675b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "DisplayOnly";
676b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x01:
677b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "DisplayYesNo";
678b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x02:
679b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "KeyboardOnly";
680b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x03:
681b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "NoInputNoOutput";
682b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	default:
683b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Reserved";
684b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
685b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
686b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
687b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic char *authentication2str(uint8_t authentication)
688b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
689b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	switch (authentication) {
690b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x00:
691b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "No Bonding (No MITM Protection)";
692b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x01:
693b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "No Bonding (MITM Protection)";
694b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x02:
695b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Dedicated Bonding (No MITM Protection)";
696b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x03:
697b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Dedicated Bonding (MITM Protection)";
698b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x04:
699b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "General Bonding (No MITM Protection)";
700b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x05:
701b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "General Bonding (MITM Protection)";
702b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	default:
703b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Reserved";
704b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
705b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
706b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
70718a8555accbbad5dc57f99303dc7718b69b3921cAndré Dieb Martinsstatic char *eventmask2str(const uint8_t mask[8])
70806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
70906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	int i;
71006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
71106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	for (i = 0; i < 7; i++) {
71206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		if (mask[i] != 0x00)
71306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return "Reserved";
71406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	}
71506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
71606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	switch (mask[7]) {
71706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case 0x00:
71806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "No LE events specified";
71906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case 0x01:
72006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "LE Connection Complete Event";
72106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case 0x02:
72206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "LE Advertising Report Event";
72306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case 0x04:
72406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "LE Connection Update Complete Event";
72506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case 0x08:
72606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "LE Read Remote Used Features Complete Event";
72706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case 0x10:
72806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "LE Long Term Key Request Event";
72906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case 0x1F:
73006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "Default";
73106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	default:
73206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "Reserved";
73306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	}
73406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
73506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
73618a8555accbbad5dc57f99303dc7718b69b3921cAndré Dieb Martinsstatic char *lefeatures2str(const uint8_t features[8])
73706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
73806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	if (features[0] & 0x01)
73906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "Link Layer supports LE Encryption";
74006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
74106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	return "RFU";
74206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
74306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
74406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic char *filterpolicy2str(uint8_t policy)
74506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
74606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	switch (policy) {
74706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case 0x00:
74806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "Allow scan from any, connection from any";
74906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case 0x01:
75006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "Allow scan from white list, connection from any";
75106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case 0x02:
75206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "Allow scan from any, connection from white list";
75306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case 0x03:
75406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "Allow scan and connection from white list";
75506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	default:
75606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		return "Reserved";
75706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	}
75806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
75906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
760e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmannstatic inline void ext_inquiry_response_dump(int level, struct frame *frm)
761e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann{
762e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	void *ptr = frm->ptr;
763e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	uint32_t len = frm->len;
764e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	uint8_t type, length;
765e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	char *str;
766e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	int i;
767e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
768e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	length = get_u8(frm);
769e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
770e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	while (length > 0) {
771e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		type = get_u8(frm);
772e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		length--;
773e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
774e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		switch (type) {
77507efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann		case 0x01:
77607efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			p_indent(level, frm);
77707efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			printf("Flags:");
77807efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			for (i = 0; i < length; i++)
77907efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann				printf(" 0x%2.2x", *((uint8_t *) (frm->ptr + i)));
78007efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			printf("\n");
78107efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			break;
78207efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann
78307efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann		case 0x02:
78407efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann		case 0x03:
78507efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			p_indent(level, frm);
78607efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			printf("%s service classes:",
78707efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann					type == 0x02 ? "Shortened" : "Complete");
78807efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			for (i = 0; i < length / 2; i++) {
78907efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann				uint16_t val = btohs(bt_get_unaligned((uint16_t *) (frm->ptr + (i * 2))));
79007efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann				printf(" 0x%4.4x", val);
79107efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			}
79207efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			printf("\n");
79307efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			break;
79407efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann
795e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		case 0x08:
796e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		case 0x09:
797e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			str = malloc(length + 1);
798e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			if (str) {
799ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann				snprintf(str, length + 1, "%s", (char *) frm->ptr);
800e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				for (i = 0; i < length; i++)
80107efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann					if (!isprint(str[i]))
80207efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann						str[i] = '.';
803e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				p_indent(level, frm);
804e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				printf("%s local name: \'%s\'\n",
805e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann					type == 0x08 ? "Shortened" : "Complete", str);
806e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				free(str);
807e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			}
808e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			break;
809e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
81007efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann		case 0x0a:
81107efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			p_indent(level, frm);
81207efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			printf("TX power level: %d\n", *((uint8_t *) frm->ptr));
81307efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			break;
81407efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann
815e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		default:
816e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			p_indent(level, frm);
817e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			printf("Unknown type 0x%02x with %d bytes data\n",
818e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann								type, length);
819e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			break;
820e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		}
821e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
822e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		frm->ptr += length;
823e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		frm->len -= length;
824e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
825e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		length = get_u8(frm);
826e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	}
827e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
828e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	frm->ptr = ptr + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
829e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	frm->len = len + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
830e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann}
831e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
83290480219be366c65e68ae8612de7a361027e751aMarcel Holtmannstatic inline void bdaddr_command_dump(int level, struct frame *frm)
83390480219be366c65e68ae8612de7a361027e751aMarcel Holtmann{
83490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
83590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	char addr[18];
83690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
83790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	frm->ptr += sizeof(bdaddr_t);
83890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	frm->len -= sizeof(bdaddr_t);
83990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
84090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	p_indent(level, frm);
841bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
842e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	printf("bdaddr %s\n", addr);
84390480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
84490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	raw_dump(level, frm);
84590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann}
84690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
847b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void generic_command_dump(int level, struct frame *frm)
848b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
849b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
850b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
851b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
852b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("handle %d\n", handle);
853b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
854b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	raw_dump(level, frm);
855b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
856b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
857b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void generic_write_mode_dump(int level, struct frame *frm)
858b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
859b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint8_t mode = get_u8(frm);
860b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
861b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
862b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("mode 0x%2.2x\n", mode);
863b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
864b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
865ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void inquiry_dump(int level, struct frame *frm)
866ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
867ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	inquiry_cp *cp = frm->ptr;
868ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
869ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
870ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("lap 0x%2.2x%2.2x%2.2x len %d num %d\n",
871ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);
872ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
873ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
874ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void periodic_inquiry_dump(int level, struct frame *frm)
875ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
876ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	periodic_inquiry_cp *cp = frm->ptr;
877ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
878ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
879ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("max %d min %d lap 0x%2.2x%2.2x%2.2x len %d num %d\n",
880ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		btohs(cp->max_period), btohs(cp->min_period),
881ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);
882ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
883ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
884ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void create_conn_dump(int level, struct frame *frm)
885ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
886ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	create_conn_cp *cp = frm->ptr;
887ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(cp->pkt_type);
888ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t clkoffset = btohs(cp->clock_offset);
889ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18], *str;
890ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
891ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
892bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
893ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s ptype 0x%4.4x rswitch 0x%2.2x clkoffset 0x%4.4x%s\n",
894ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		addr, ptype, cp->role_switch,
895ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");
896ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
897ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_ptypetostr(ptype);
898ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
899ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
900ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Packet type: %s\n", str);
901ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
902ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
903ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
904ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
905ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void disconnect_dump(int level, struct frame *frm)
906ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
907ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	disconnect_cp *cp = frm->ptr;
908ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
909ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
910ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d reason 0x%2.2x\n", btohs(cp->handle), cp->reason);
911ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
912ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
913ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Reason: %s\n", status2str(cp->reason));
914ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
915ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
916ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void add_sco_dump(int level, struct frame *frm)
917ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
918ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	add_sco_cp *cp = frm->ptr;
919ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(cp->pkt_type);
920ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
921ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
922ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
923ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d ptype 0x%4.4x\n", btohs(cp->handle), ptype);
924ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
925ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_ptypetostr(ptype);
926ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
927ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
928ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Packet type: %s\n", str);
929ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
930ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
931ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
932ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
933ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void accept_conn_req_dump(int level, struct frame *frm)
934ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
935ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	accept_conn_req_cp *cp = frm->ptr;
936ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
937ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
938ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
939bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
940ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s role 0x%2.2x\n", addr, cp->role);
941ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
942ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
943ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Role: %s\n", role2str(cp->role));
944ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
945ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
946ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void reject_conn_req_dump(int level, struct frame *frm)
947ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
948ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	reject_conn_req_cp *cp = frm->ptr;
949ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
950ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
951ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
952bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
953ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s reason 0x%2.2x\n", addr, cp->reason);
954ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
955ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
956ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Reason: %s\n", status2str(cp->reason));
957ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
958ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
959ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_reply_dump(int level, struct frame *frm)
960ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
961ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	pin_code_reply_cp *cp = frm->ptr;
962ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18], pin[17];
963ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
964ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
965bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
966ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(pin, 0, sizeof(pin));
967a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann	if (parser.flags & DUMP_NOVENDOR)
968a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		memset(pin, '*', cp->pin_len);
969a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann	else
970a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		memcpy(pin, cp->pin_code, cp->pin_len);
971ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s len %d pin \'%s\'\n", addr, cp->pin_len, pin);
972ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
973ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
974ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_reply_dump(int level, struct frame *frm)
975ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
976ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	link_key_reply_cp *cp = frm->ptr;
977ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
978ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
979ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
980ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
981bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
98244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s key ", addr);
983ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 16; i++)
984a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
985a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("**");
986a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		else
987a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("%2.2X", cp->link_key[i]);
988ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("\n");
989ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
990ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
991ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_neg_reply_dump(int level, struct frame *frm)
992ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
993ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
994ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
995ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
996ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
997bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
998ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s\n", addr);
999ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1000ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1001b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void user_passkey_reply_dump(int level, struct frame *frm)
1002b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
1003b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	user_passkey_reply_cp *cp = frm->ptr;
1004b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
1005b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1006b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1007b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
1008b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s passkey %d\n", addr, btohl(cp->passkey));
1009b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
1010b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1011b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void remote_oob_data_reply_dump(int level, struct frame *frm)
1012b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
1013b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	remote_oob_data_reply_cp *cp = frm->ptr;
1014b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
1015b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	int i;
1016b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1017b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1018b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
1019b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s\n", addr);
1020b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1021b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1022b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("hash 0x");
1023b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	for (i = 0; i < 16; i++)
1024b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("%02x", cp->hash[i]);
1025b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("\n");
1026b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1027b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1028b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("randomizer 0x");
1029b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	for (i = 0; i < 16; i++)
1030b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			printf("%02x", cp->randomizer[i]);
1031b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("\n");
1032b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
1033b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1034b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void io_capability_reply_dump(int level, struct frame *frm)
1035b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
1036b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	io_capability_reply_cp *cp = frm->ptr;
1037b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
1038b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1039b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1040b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
1041b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s capability 0x%2.2x oob 0x%2.2x auth 0x%2.2x\n",
1042b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann					addr, cp->capability, cp->oob_data,
1043b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann							cp->authentication);
1044b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1045b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1046b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("Capability: %s (OOB data %s)\n",
1047b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			capability2str(cp->capability),
1048b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			cp->oob_data == 0x00 ? "not present" : "available");
1049b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1050b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1051b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("Authentication: %s\n", authentication2str(cp->authentication));
1052b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
1053b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1054ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void set_conn_encrypt_dump(int level, struct frame *frm)
1055ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1056ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	set_conn_encrypt_cp *cp = frm->ptr;
1057ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1058ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1059ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d encrypt 0x%2.2x\n", btohs(cp->handle), cp->encrypt);
1060ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1061ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1062ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void remote_name_req_dump(int level, struct frame *frm)
1063ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1064ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	remote_name_req_cp *cp = frm->ptr;
1065ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t clkoffset = btohs(cp->clock_offset);
1066ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
1067ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1068ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1069bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
107072e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann	printf("bdaddr %s mode %d clkoffset 0x%4.4x%s\n",
107172e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		addr, cp->pscan_rep_mode,
107272e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");
1073ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1074ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
107517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_dump(int level, struct frame *frm)
107617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
107717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	master_link_key_cp *cp = frm->ptr;
107817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
107917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
108017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("flag %d\n", cp->key_flag);
108117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
108217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
108317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_dump(int level, struct frame *frm)
108417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
108517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_remote_ext_features_cp *cp = frm->ptr;
108617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1087e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	p_indent(level, frm);
1088e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	printf("handle %d page %d\n", btohs(cp->handle), cp->page_num);
108917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
109017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1091c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmannstatic inline void setup_sync_conn_dump(int level, struct frame *frm)
1092c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann{
1093c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann	setup_sync_conn_cp *cp = frm->ptr;
1094c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann
1095c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann	p_indent(level, frm);
1096cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly	printf("handle %d voice setting 0x%4.4x ptype 0x%4.4x\n",
1097cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly		btohs(cp->handle), btohs(cp->voice_setting),
1098cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly		btohs(cp->pkt_type));
1099c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann}
1100c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann
1101c7f436764386ca845317b678f3330340ccd838b8Inga Stotlandstatic inline void create_physical_link_dump(int level, struct frame *frm)
1102c7f436764386ca845317b678f3330340ccd838b8Inga Stotland{
1103c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	create_physical_link_cp *cp = frm->ptr;
1104c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	int i;
1105c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1106c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	p_indent(level, frm);
1107c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1108c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("handle %d key length %d key type %d\n",
1109c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		cp->handle, cp->key_length, cp->key_type);
1110c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("key ");
1111c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1112c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	for (i = 0; i < cp->key_length && cp->key_length < 32; i++)
1113c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		printf("%2.2x", cp->key[i]);
1114c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("\n");
1115c7f436764386ca845317b678f3330340ccd838b8Inga Stotland}
1116c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1117c7f436764386ca845317b678f3330340ccd838b8Inga Stotlandstatic inline void create_logical_link_dump(int level, struct frame *frm)
1118c7f436764386ca845317b678f3330340ccd838b8Inga Stotland{
1119c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	create_logical_link_cp *cp = frm->ptr;
1120c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	int i;
1121c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1122c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	p_indent(level, frm);
1123c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1124c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("handle %d\n", cp->handle);
1125c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("tx_flow ");
1126c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	for (i = 0; i < 16; i++)
1127c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		printf("%2.2x", cp->tx_flow[i]);
1128c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("\nrx_flow ");
1129c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	for (i = 0; i < 16; i++)
1130c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		printf("%2.2x", cp->rx_flow[i]);
1131c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("\n");
1132c7f436764386ca845317b678f3330340ccd838b8Inga Stotland}
1133c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
11349ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void hold_mode_dump(int level, struct frame *frm)
11359ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{
11369ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	hold_mode_cp *cp = frm->ptr;
11379ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
11389ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	p_indent(level, frm);
11399ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	printf("handle %d max %d min %d\n", btohs(cp->handle),
11409ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			btohs(cp->max_interval), btohs(cp->min_interval));
11419ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann}
11429ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
11439ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void sniff_mode_dump(int level, struct frame *frm)
11449ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{
11459ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	sniff_mode_cp *cp = frm->ptr;
11469ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
11479ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	p_indent(level, frm);
11489ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	printf("handle %d max %d min %d attempt %d timeout %d\n",
11499ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		btohs(cp->handle), btohs(cp->max_interval),
11509ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		btohs(cp->min_interval), btohs(cp->attempt), btohs(cp->timeout));
11519ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann}
11529ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
11534894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmannstatic inline void qos_setup_dump(int level, struct frame *frm)
11544894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann{
11554894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	qos_setup_cp *cp = frm->ptr;
11564894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann
11574894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11584894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("handle %d flags 0x%2.2x\n", btohs(cp->handle), cp->flags);
11594894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann
11604894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11614894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Service type: %d\n", cp->qos.service_type);
11624894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11634894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Token rate: %d\n", btohl(cp->qos.token_rate));
11644894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11654894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Peak bandwith: %d\n", btohl(cp->qos.peak_bandwidth));
11664894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11674894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Latency: %d\n", btohl(cp->qos.latency));
11684894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11694894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Delay variation: %d\n", btohl(cp->qos.delay_variation));
11704894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann}
11714894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann
1172ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_link_policy_dump(int level, struct frame *frm)
1173ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1174ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_link_policy_cp *cp = frm->ptr;
1175ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t policy = btohs(cp->policy);
1176ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
1177ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1178ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1179ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d policy 0x%2.2x\n", btohs(cp->handle), policy);
1180ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1181ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_lptostr(policy);
1182ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
1183ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1184ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Link policy: %s\n", str);
1185ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
1186ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1187ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1188ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1189f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmannstatic inline void write_default_link_policy_dump(int level, struct frame *frm)
1190f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann{
1191f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	uint16_t policy = btohs(htons(get_u16(frm)));
1192f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	char *str;
1193f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
1194f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	p_indent(level, frm);
1195f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	printf("policy 0x%2.2x\n", policy);
1196f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
1197f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	str = hci_lptostr(policy);
1198f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	if (str) {
1199f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		p_indent(level, frm);
1200f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		printf("Link policy: %s\n", str);
1201f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		free(str);
1202f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	}
1203f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann}
1204f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
12053b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void sniff_subrating_dump(int level, struct frame *frm)
1206120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann{
12073b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	sniff_subrating_cp *cp = frm->ptr;
1208120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
1209120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
1210120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("handle %d\n", btohs(cp->handle));
1211120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
1212120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
1213f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann	printf("max latency %d\n", btohs(cp->max_latency));
1214120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
1215120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
1216120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("min timeout remote %d local %d\n",
1217120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		btohs(cp->min_remote_timeout), btohs(cp->min_local_timeout));
1218120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann}
1219120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
122044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_mask_dump(int level, struct frame *frm)
122144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
122244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	set_event_mask_cp *cp = frm->ptr;
122344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	int i;
122444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
122544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
122644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("Mask: 0x");
122744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	for (i = 0; i < 8; i++)
122844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("%2.2x", cp->mask[i]);
122944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("\n");
123044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
123144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
123244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_flt_dump(int level, struct frame *frm)
123344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
123444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	set_event_flt_cp *cp = frm->ptr;
1235cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann	uint8_t dev_class[3], dev_mask[3];
1236cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann	char addr[18];
123744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
123844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
1239662fd6cd30f3adbfef7c39e2bfcfb1107d96ebbbMarcel Holtmann	printf("type %d condition %d\n", cp->flt_type,
1240662fd6cd30f3adbfef7c39e2bfcfb1107d96ebbbMarcel Holtmann				(cp->flt_type == 0) ? 0 : cp->cond_type);
124144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
124244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	switch (cp->flt_type) {
124344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_CLEAR_ALL:
124451c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
124544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Clear all filters\n");
124644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
124744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_INQ_RESULT:
124851c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
124944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Inquiry result");
125044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		switch (cp->cond_type) {
125144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_ALL:
1252cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" for all devices\n");
1253cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
125444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_CLASS:
1255cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			memcpy(dev_class, cp->condition, 3);
1256cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			memcpy(dev_mask, cp->condition + 3, 3);
1257cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" with class 0x%2.2x%2.2x%2.2x mask 0x%2.2x%2.2x%2.2x\n",
1258cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann				dev_class[2], dev_class[1], dev_class[0],
1259cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann				dev_mask[2], dev_mask[1], dev_mask[0]);
1260cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
126144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_BDADDR:
1262bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str((bdaddr_t *) cp->condition, addr);
1263cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" with bdaddr %s\n", addr);
1264cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
126544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		default:
126644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			printf("\n");
126744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			break;
126844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		}
126944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
127044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_CONN_SETUP:
127151c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
127244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Connection setup");
127344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		switch (cp->cond_type) {
127444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_ALL:
127544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_CLASS:
127644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_BDADDR:
127744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		default:
127844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			printf("\n");
127944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			break;
128044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		}
128144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
128244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
128344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
128444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
128544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_pin_type_dump(int level, struct frame *frm)
128644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
128744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	write_pin_type_cp *cp = frm->ptr;
128844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
128944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
129044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("type %d\n", cp->pin_type);
129144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
129244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
129344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void request_stored_link_key_dump(int level, struct frame *frm)
129444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
129544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_stored_link_key_cp *cp = frm->ptr;
129644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	char addr[18];
129744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
129844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
1299bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
130044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s all %d\n", addr, cp->read_all);
130144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
130244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
130344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void return_link_keys_dump(int level, struct frame *frm)
130444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
130544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	uint8_t num = get_u8(frm);
130644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	uint8_t key[16];
130744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	char addr[18];
130844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	int i, n;
130944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
131044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	for (n = 0; n < num; n++) {
1311bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(frm->ptr, addr);
131244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		memcpy(key, frm->ptr + 6, 16);
131344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
131444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
131544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("bdaddr %s key ", addr);
131644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		for (i = 0; i < 16; i++)
1317a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			if (parser.flags & DUMP_NOVENDOR)
1318a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann				printf("**");
1319a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			else
1320a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann				printf("%2.2X", key[i]);
132144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("\n");
132244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
132344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		frm->ptr += 2;
132444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		frm->len -= 2;
132544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
132644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
132744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
1328ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void change_local_name_dump(int level, struct frame *frm)
1329ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1330ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	change_local_name_cp *cp = frm->ptr;
1331ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char name[249];
1332ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
1333ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1334ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(name, 0, sizeof(name));
1335ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 248 && cp->name[i]; i++)
1336ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (isprint(cp->name[i]))
1337ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = cp->name[i];
1338ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		else
1339ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = '.';
1340ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1341ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1342ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("name \'%s\'\n", name);
1343ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1344ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1345ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_class_of_dev_dump(int level, struct frame *frm)
1346ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1347ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_class_of_dev_cp *cp = frm->ptr;
1348ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1349ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1350ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("class 0x%2.2x%2.2x%2.2x\n",
1351120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			cp->dev_class[2], cp->dev_class[1], cp->dev_class[0]);
1352ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1353ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1354ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_voice_setting_dump(int level, struct frame *frm)
1355ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1356ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_voice_setting_cp *cp = frm->ptr;
1357ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1358ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1359ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("voice setting 0x%4.4x\n", btohs(cp->voice_setting));
1360ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1361ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1362fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void write_current_iac_lap_dump(int level, struct frame *frm)
1363fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{
1364fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	write_current_iac_lap_cp *cp = frm->ptr;
1365fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	int i;
1366fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
1367fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	for (i = 0; i < cp->num_current_iac; i++) {
1368fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		p_indent(level, frm);
1369fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("IAC 0x%2.2x%2.2x%2.2x", cp->lap[i][2], cp->lap[i][1], cp->lap[i][0]);
1370fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		if (cp->lap[i][2] == 0x9e && cp->lap[i][1] == 0x8b) {
1371fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			switch (cp->lap[i][0]) {
1372fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x00:
1373fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (Limited Inquiry Access Code)");
1374fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
1375fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x33:
1376fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (General Inquiry Access Code)");
1377fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
1378fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			}
1379fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		}
1380fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("\n");
1381fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	}
1382fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann}
1383fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
138469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void write_scan_enable_dump(int level, struct frame *frm)
138569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{
138669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t enable = get_u8(frm);
138769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
138869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	p_indent(level, frm);
138969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	printf("enable %d\n", enable);
139069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann}
139169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
1392d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_timeout_dump(int level, struct frame *frm)
1393d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
1394d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	write_page_timeout_cp *cp = frm->ptr;
1395d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1396d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
1397d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("timeout %d\n", btohs(cp->timeout));
1398d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
1399d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1400d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_activity_dump(int level, struct frame *frm)
1401d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
1402d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	write_page_activity_cp *cp = frm->ptr;
1403d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1404d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
1405d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("interval %d window %d\n", btohs(cp->interval), btohs(cp->window));
1406d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
1407d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1408a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void write_inquiry_scan_type_dump(int level, struct frame *frm)
1409a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{
1410a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	write_inquiry_scan_type_cp *cp = frm->ptr;
1411a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
1412a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	p_indent(level, frm);
1413a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	printf("type %d\n", cp->type);
1414a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann}
1415a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
1416f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmannstatic inline void write_inquiry_mode_dump(int level, struct frame *frm)
1417f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann{
1418f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	write_inquiry_mode_cp *cp = frm->ptr;
1419f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann
1420f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	p_indent(level, frm);
1421f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	printf("mode %d\n", cp->mode);
1422f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann}
1423f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann
1424994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmannstatic inline void set_afh_classification_dump(int level, struct frame *frm)
1425994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann{
1426994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	set_afh_classification_cp *cp = frm->ptr;
1427994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	int i;
1428994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann
1429994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	p_indent(level, frm);
1430994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	printf("map 0x");
1431994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	for (i = 0; i < 10; i++)
1432994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann		printf("%02x", cp->map[i]);
1433994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	printf("\n");
1434994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann}
1435994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann
14366eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void write_link_supervision_timeout_dump(int level, struct frame *frm)
14376eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
14386eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	write_link_supervision_timeout_cp *cp = frm->ptr;
14396eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
14406eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
14416eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("handle %d timeout %d\n",
1442d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann				btohs(cp->handle), btohs(cp->timeout));
14436eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
14446eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
14451a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void write_ext_inquiry_response_dump(int level, struct frame *frm)
14461a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{
14471a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	write_ext_inquiry_response_cp *cp = frm->ptr;
14481a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
14491a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	p_indent(level, frm);
14501a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	printf("fec 0x%2.2x\n", cp->fec);
1451f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
1452f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	frm->ptr++;
1453f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	frm->len--;
1454f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
1455e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	ext_inquiry_response_dump(level, frm);
14561a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann}
14571a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
14583b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void write_inquiry_transmit_power_level_dump(int level, struct frame *frm)
14593b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
14603b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	write_inquiry_transmit_power_level_cp *cp = frm->ptr;
14613b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
14623b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
14633b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("level %d\n", cp->level);
14643b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
14653b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
14663b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void write_default_error_data_reporting_dump(int level, struct frame *frm)
14673b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
14683b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	write_default_error_data_reporting_cp *cp = frm->ptr;
14693b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
14703b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
14713b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("reporting %d\n", cp->reporting);
14723b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
14733b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
14743b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void enhanced_flush_dump(int level, struct frame *frm)
14753b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
14763b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	enhanced_flush_cp *cp = frm->ptr;
14773b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
14783b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
14793b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("handle %d type %d\n", btohs(cp->handle), cp->type);
14803b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
14813b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
1482b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void send_keypress_notify_dump(int level, struct frame *frm)
1483b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
1484b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	send_keypress_notify_cp *cp = frm->ptr;
1485b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
1486b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1487b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1488b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
1489b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s type %d\n", addr, cp->type);
1490b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
1491b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
14926eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void request_transmit_power_level_dump(int level, struct frame *frm)
14936eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
14946eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_transmit_power_level_cp *cp = frm->ptr;
14956eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
14966eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
14976eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("handle %d type %d (%s)\n",
1498120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(cp->handle), cp->type,
1499120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					cp->type ? "maximum" : "current");
15006eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
15016eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
150217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void request_local_ext_features_dump(int level, struct frame *frm)
150317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
150417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_ext_features_cp *cp = frm->ptr;
150517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
150617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
150717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("page %d\n", cp->page_num);
150817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
150917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1510f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void request_clock_dump(int level, struct frame *frm)
1511f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
1512f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_clock_cp *cp = frm->ptr;
1513f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1514f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
1515f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("handle %d which %d (%s)\n",
1516120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(cp->handle), cp->which_clock,
1517120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					cp->which_clock ? "piconet" : "local");
1518f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
1519f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
15202315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmannstatic inline void host_buffer_size_dump(int level, struct frame *frm)
15212315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann{
15222315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	host_buffer_size_cp *cp = frm->ptr;
15232315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann
15242315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	p_indent(level, frm);
15252315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	printf("ACL MTU %d:%d SCO MTU %d:%d\n",
15262315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann				btohs(cp->acl_mtu), btohs(cp->acl_max_pkt),
15272315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann				cp->sco_mtu, btohs(cp->sco_max_pkt));
15282315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann}
15292315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann
15301b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmannstatic inline void num_comp_pkts_dump(int level, struct frame *frm)
15311b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann{
15321b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	uint8_t num = get_u8(frm);
15331b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	uint16_t handle, packets;
15341b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	int i;
15351b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
15361b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	for (i = 0; i < num; i++) {
15371b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		handle = btohs(htons(get_u16(frm)));
15381b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		packets = btohs(htons(get_u16(frm)));
15391b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
15401b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		p_indent(level, frm);
15411b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		printf("handle %d packets %d\n", handle, packets);
15421b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	}
15431b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann}
15441b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
1545b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void le_create_connection_dump(int level, struct frame *frm)
1546b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{
1547b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	char addr[18];
1548b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	le_create_connection_cp *cp = frm->ptr;
1549b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
1550b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_indent(level, frm);
1551b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_ba2str(&cp->peer_bdaddr, addr);
1552b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	printf("bdaddr %s type %d\n", addr, cp->peer_bdaddr_type);
1553b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo}
1554b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
155506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_event_mask_dump(int level, struct frame *frm)
155606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
155706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	int i;
155806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_set_event_mask_cp *cp = frm->ptr;
155906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
156006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
156106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("mask 0x");
156206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	for (i = 0; i < 8; i++)
156306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		printf("%.2x", cp->mask[i]);
156406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
156506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf(" (%s)\n", eventmask2str(cp->mask));
156606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
156706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
156806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_random_address_dump(int level, struct frame *frm)
156906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
157006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	char addr[18];
157106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_set_random_address_cp *cp = frm->ptr;
157206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
157306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
157406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_ba2str(&cp->bdaddr, addr);
157506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("bdaddr %s\n", addr);
157606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
157706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
157806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
157906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_advertising_parameters_dump(int level, struct frame *frm)
158006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
158106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	char addr[18];
158206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_set_advertising_parameters_cp *cp = frm->ptr;
158306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
158406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
1585713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins	printf("min %.3fms, max %.3fms\n", btohs(cp->min_interval) * 0.625,
1586713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins			btohs(cp->max_interval) * 0.625);
158706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
158806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
158906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("type 0x%02x (%s) ownbdaddr 0x%02x (%s)\n", cp->advtype,
159006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			evttype2str(cp->advtype), cp->own_bdaddr_type,
159106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			bdaddrtype2str(cp->own_bdaddr_type));
159206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
159306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
159406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_ba2str(&cp->direct_bdaddr, addr);
159506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("directbdaddr 0x%02x (%s) %s\n", cp->direct_bdaddr_type,
159606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			bdaddrtype2str(cp->direct_bdaddr_type), addr);
159706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
159806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
159906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("channelmap 0x%02x filterpolicy 0x%02x (%s)\n",
160006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			cp->chan_map, cp->filter, filterpolicy2str(cp->filter));
160106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
160206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
160306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_scan_parameters_dump(int level, struct frame *frm)
160406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
160506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_set_scan_parameters_cp *cp = frm->ptr;
160606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
160706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
160806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("type 0x%02x (%s)\n", cp->type,
160906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		cp->type == 0x00 ? "passive" : "active");
161006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
161106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
1612713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins	printf("interval %.3fms window %.3fms\n", btohs(cp->interval) * 0.625,
1613713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins		btohs(cp->window) * 0.625);
161406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
161506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
161606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("own address: 0x%02x (%s) policy: %s\n", cp->own_bdaddr_type,
161706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			bdaddrtype2str(cp->own_bdaddr_type),
161806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		(cp->filter == 0x00 ? "All" :
161906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			(cp->filter == 0x01 ? "white list only" : "reserved")));
162006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
162106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
162206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_scan_enable_dump(int level, struct frame *frm)
162306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
162406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_set_scan_enable_cp *cp = frm->ptr;
162506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
162606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
162706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("value 0x%02x (%s)\n", cp->enable,
162806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		(cp->enable == 0x00 ? "scanning disabled" :
162906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		"scanning enabled"));
163006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
163106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
163206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("filter duplicates 0x%02x (%s)\n", cp->filter_dup,
163306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		(cp->filter_dup == 0x00 ? "disabled" : "enabled"));
163406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
163506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
1636d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void command_dump(int level, struct frame *frm)
1637d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1638d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	hci_command_hdr *hdr = frm->ptr;
1639d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(hdr->opcode);
1640d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
1641d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
1642d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1643d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (p_filter(FILT_HCI))
1644d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		return;
1645d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
16467b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
16477b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
164865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
16497b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	p_indent(level, frm);
1650803752117135528b1adebf0fa045596e188a996dMarcel Holtmann	printf("HCI Command: %s (0x%2.2x|0x%4.4x) plen %d\n",
1651120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				opcode2str(opcode), ogf, ocf, hdr->plen);
165265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
165365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->ptr += HCI_COMMAND_HDR_SIZE;
165465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->len -= HCI_COMMAND_HDR_SIZE;
165565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
16567b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD) {
16573b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		if (ocf == 0 && get_manufacturer() == 10) {
16587b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			csr_dump(level + 1, frm);
16597b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			return;
16607b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		}
1661be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	}
1662be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann
16634f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
16644f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		raw_dump(level, frm);
16654f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		return;
16664f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	}
16674f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann
1668ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	switch (ogf) {
1669ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_CTL:
1670ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
1671ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_INQUIRY:
1672ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			inquiry_dump(level + 1, frm);
1673ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1674ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PERIODIC_INQUIRY:
1675ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			periodic_inquiry_dump(level + 1, frm);
1676ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1677ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_INQUIRY_CANCEL:
1678ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_PERIODIC_INQUIRY:
1679ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1680ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CREATE_CONN:
1681ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			create_conn_dump(level + 1, frm);
1682ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1683ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_DISCONNECT:
1684ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			disconnect_dump(level + 1, frm);
1685ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
168690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_CREATE_CONN_CANCEL:
168790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REMOTE_NAME_REQ_CANCEL:
168890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_ACCEPT_SYNC_CONN_REQ:
168990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann			bdaddr_command_dump(level + 1, frm);
169090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann			return;
1691ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ADD_SCO:
1692ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SET_CONN_PTYPE:
1693ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			add_sco_dump(level + 1, frm);
1694acc2322e0bed89e8ada2564359a1a6d293c9d514Marcel Holtmann			return;
1695ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ACCEPT_CONN_REQ:
1696ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			accept_conn_req_dump(level + 1, frm);
1697ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1698ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_REJECT_CONN_REQ:
169990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REJECT_SYNC_CONN_REQ:
1700b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_NEG_REPLY:
1701ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			reject_conn_req_dump(level + 1, frm);
1702ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1703ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_REPLY:
1704ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			pin_code_reply_dump(level + 1, frm);
1705ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1706ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_REPLY:
1707ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			link_key_reply_dump(level + 1, frm);
1708ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1709ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_NEG_REPLY:
1710ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_NEG_REPLY:
1711b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_REPLY:
1712b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_NEG_REPLY:
1713b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_NEG_REPLY:
1714b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_NEG_REPLY:
1715ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			pin_code_neg_reply_dump(level + 1, frm);
1716ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1717b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_REPLY:
1718b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			user_passkey_reply_dump(level + 1, frm);
1719b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1720b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_REPLY:
1721b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			remote_oob_data_reply_dump(level + 1, frm);
1722b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1723b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_REPLY:
1724b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			io_capability_reply_dump(level + 1, frm);
1725b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1726ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SET_CONN_ENCRYPT:
1727ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			set_conn_encrypt_dump(level + 1, frm);
1728ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1729ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_AUTH_REQUESTED:
1730ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CHANGE_CONN_LINK_KEY:
1731ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_REMOTE_FEATURES:
1732ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_REMOTE_VERSION:
1733ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_CLOCK_OFFSET:
173490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_READ_LMP_HANDLE:
1735c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_DISCONNECT_LOGICAL_LINK:
1736ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_command_dump(level + 1, frm);
1737ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
173817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_MASTER_LINK_KEY:
173917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			master_link_key_dump(level + 1, frm);
174017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
174117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_REMOTE_EXT_FEATURES:
174217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_remote_ext_features_dump(level + 1, frm);
174317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
1744ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_REMOTE_NAME_REQ:
1745ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			remote_name_req_dump(level + 1, frm);
1746ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1747c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann		case OCF_SETUP_SYNC_CONN:
1748c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann			setup_sync_conn_dump(level + 1, frm);
1749c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann			return;
1750c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_CREATE_PHYSICAL_LINK:
1751c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_ACCEPT_PHYSICAL_LINK:
1752c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			create_physical_link_dump(level + 1, frm);
1753c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			return;
1754c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_CREATE_LOGICAL_LINK:
1755c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_ACCEPT_LOGICAL_LINK:
1756c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			create_logical_link_dump(level + 1, frm);
1757c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			return;
1758ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1759ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1760ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1761ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_POLICY:
1762ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
17639ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_HOLD_MODE:
17649ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_PARK_MODE:
17659ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			hold_mode_dump(level + 1, frm);
17669ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			return;
17679ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_SNIFF_MODE:
17689ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			sniff_mode_dump(level + 1, frm);
17699ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			return;
1770ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_SNIFF_MODE:
1771ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_PARK_MODE:
1772ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ROLE_DISCOVERY:
1773ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_LINK_POLICY:
1774ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_command_dump(level + 1, frm);
1775ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1776f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_READ_DEFAULT_LINK_POLICY:
1777f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
1778ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SWITCH_ROLE:
1779ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			accept_conn_req_dump(level + 1, frm);
1780ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
17814894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann		case OCF_QOS_SETUP:
17824894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann			qos_setup_dump(level + 1, frm);
17834894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann			return;
1784ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_LINK_POLICY:
1785ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_link_policy_dump(level + 1, frm);
1786ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1787f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_WRITE_DEFAULT_LINK_POLICY:
1788f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			write_default_link_policy_dump(level + 1, frm);
1789f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
17903b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_SNIFF_SUBRATING:
17913b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			sniff_subrating_dump(level + 1, frm);
1792120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			return;
1793ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1794ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1795ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1796ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_HOST_CTL:
1797ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
179844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_RESET:
179944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_CREATE_NEW_UNIT_KEY:
180044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
180144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_MASK:
1802c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_SET_EVENT_MASK_PAGE_2:
180344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			set_event_mask_dump(level + 1, frm);
180444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
180544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_FLT:
180644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			set_event_flt_dump(level + 1, frm);
180744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
180844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_PIN_TYPE:
180944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			write_pin_type_dump(level + 1, frm);
181044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
181144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_STORED_LINK_KEY:
181244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_DELETE_STORED_LINK_KEY:
181344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			request_stored_link_key_dump(level + 1, frm);
181444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
181544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_STORED_LINK_KEY:
181644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return_link_keys_dump(level + 1, frm);
181744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
1818ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CHANGE_LOCAL_NAME:
1819ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			change_local_name_dump(level + 1, frm);
1820ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1821ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_CLASS_OF_DEV:
1822ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_class_of_dev_dump(level + 1, frm);
1823ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1824ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_VOICE_SETTING:
1825ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_voice_setting_dump(level + 1, frm);
1826ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1827fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_CURRENT_IAC_LAP:
1828fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			write_current_iac_lap_dump(level + 1, frm);
1829fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			return;
183069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_SCAN_ENABLE:
183169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_AUTH_ENABLE:
18328583de68ea3be3ada739dcc84d811fc752d45a03Marcel Holtmann		case OCF_SET_CONTROLLER_TO_HOST_FC:
183369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			write_scan_enable_dump(level + 1, frm);
183469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			return;
1835c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT:
1836097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_WRITE_CONN_ACCEPT_TIMEOUT:
1837d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_TIMEOUT:
1838d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			write_page_timeout_dump(level + 1, frm);
1839d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
1840d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_ACTIVITY:
1841d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_INQ_ACTIVITY:
1842d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			write_page_activity_dump(level + 1, frm);
1843d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
1844a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_WRITE_INQUIRY_SCAN_TYPE:
1845a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			write_inquiry_scan_type_dump(level + 1, frm);
1846a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			return;
184769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_ENCRYPT_MODE:
1848f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_INQUIRY_MODE:
1849f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_AFH_MODE:
1850f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			write_inquiry_mode_dump(level + 1, frm);
1851f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			return;
1852994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann		case OCF_SET_AFH_CLASSIFICATION:
1853994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann			set_afh_classification_dump(level + 1, frm);
1854994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann			return;
18556eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_TRANSMIT_POWER_LEVEL:
18566eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			request_transmit_power_level_dump(level + 1, frm);
18576eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
18582315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann		case OCF_HOST_BUFFER_SIZE:
18592315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann			host_buffer_size_dump(level + 1, frm);
18602315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann			return;
18611b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		case OCF_HOST_NUM_COMP_PKTS:
18621b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann			num_comp_pkts_dump(level + 1, frm);
18631b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann			return;
186444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_FLUSH:
18656eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_LINK_SUPERVISION_TIMEOUT:
18663b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_REFRESH_ENCRYPTION_KEY:
1867c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT:
18686eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			generic_command_dump(level + 1, frm);
18696eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
18706eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:
18716eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			write_link_supervision_timeout_dump(level + 1, frm);
18726eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
18731a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_WRITE_EXT_INQUIRY_RESPONSE:
18741a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			write_ext_inquiry_response_dump(level + 1, frm);
18751a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			return;
1876b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_MODE:
1877c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_WRITE_FLOW_CONTROL_MODE:
1878b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			generic_write_mode_dump(level + 1, frm);
1879b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
18803b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL:
18813b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			write_inquiry_transmit_power_level_dump(level + 1, frm);
18823b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
18833b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING:
18843b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			write_default_error_data_reporting_dump(level + 1, frm);
18853b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
18863b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_ENHANCED_FLUSH:
18873b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			enhanced_flush_dump(level + 1, frm);
18883b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
1889b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_SEND_KEYPRESS_NOTIFY:
1890b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			send_keypress_notify_dump(level + 1, frm);
1891b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1892ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1893ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
189417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
189517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case OGF_INFO_PARAM:
189617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		switch (ocf) {
189717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_EXT_FEATURES:
189817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			request_local_ext_features_dump(level + 1, frm);
189917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
190017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		}
1901ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1902f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1903f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	case OGF_STATUS_PARAM:
1904f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		switch (ocf) {
1905f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_LINK_QUALITY:
1906f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_RSSI:
1907f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_AFH_MAP:
1908f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			generic_command_dump(level + 1, frm);
1909f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1910f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_CLOCK:
1911f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			request_clock_dump(level + 1, frm);
1912f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1913f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		}
1914f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		break;
1915b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1916b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case OGF_TESTING_CMD:
1917b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		switch (ocf) {
1918b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_LOOPBACK_MODE:
1919b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE:
1920b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			generic_write_mode_dump(level + 1, frm);
1921b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1922b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		}
1923b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
1924b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
1925b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	case OGF_LE_CTL:
1926b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		switch (ocf) {
192706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_EVENT_MASK:
192806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_set_event_mask_dump(level + 1, frm);
192906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
193006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_BUFFER_SIZE:
193106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_LOCAL_SUPPORTED_FEATURES:
193206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER:
193306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
193406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_RANDOM_ADDRESS:
193506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_set_random_address_dump(level + 1, frm);
193606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
193706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_ADVERTISING_PARAMETERS:
193806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_set_advertising_parameters_dump(level + 1, frm);
193906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
194006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_SCAN_PARAMETERS:
194106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_set_scan_parameters_dump(level + 1, frm);
194206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
194306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_SCAN_ENABLE:
194406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_set_scan_enable_dump(level + 1, frm);
194506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
1946b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		case OCF_LE_CREATE_CONN:
1947b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo			le_create_connection_dump(level + 1, frm);
1948b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo			return;
1949b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		}
1950b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
1951ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1952ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
195365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	raw_dump(level, frm);
195495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
195595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
1956d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void status_response_dump(int level, struct frame *frm)
1957d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1958d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t status = get_u8(frm);
1959d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1960d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
1961d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x\n", status);
1962d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1963d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (status > 0) {
1964d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
1965d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(status));
1966d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
1967d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1968d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	raw_dump(level, frm);
1969d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
1970d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1971afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void handle_response_dump(int level, struct frame *frm)
1972afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{
1973afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
1974afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
1975afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	p_indent(level, frm);
1976afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	printf("handle %d\n", handle);
1977afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
1978afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	raw_dump(level, frm);
1979afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann}
1980afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
1981ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void bdaddr_response_dump(int level, struct frame *frm)
1982ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1983ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint8_t status = get_u8(frm);
1984ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
1985ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
1986ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1987ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	frm->ptr += sizeof(bdaddr_t);
1988ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	frm->len -= sizeof(bdaddr_t);
1989ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1990ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1991bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
1992ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x bdaddr %s\n", status, addr);
1993ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1994ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (status > 0) {
1995ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1996ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(status));
1997ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1998ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1999ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	raw_dump(level, frm);
2000ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2001ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2002d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void generic_response_dump(int level, struct frame *frm)
2003d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2004d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t status = get_u8(frm);
2005d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
2006d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2007d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2008d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d\n", status, handle);
2009d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2010d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (status > 0) {
2011d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2012d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(status));
2013d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2014d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2015d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	raw_dump(level, frm);
2016d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2017d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2018b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void status_mode_dump(int level, struct frame *frm)
2019b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
2020b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint8_t status = get_u8(frm);
2021b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint8_t mode = get_u8(frm);
2022b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2023b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
2024b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("status 0x%2.2x mode 0x%2.2x\n", status, mode);
2025b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2026b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	if (status > 0) {
2027b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
2028b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("Error: %s\n", status2str(status));
2029b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
2030b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
2031b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
20326d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmannstatic inline void read_link_policy_dump(int level, struct frame *frm)
20336d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann{
20346d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	read_link_policy_rp *rp = frm->ptr;
20356d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	uint16_t policy = btohs(rp->policy);
20366d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	char *str;
20376d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann
20386d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	p_indent(level, frm);
20396d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	printf("status 0x%2.2x handle %d policy 0x%2.2x\n",
20406d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann				rp->status, btohs(rp->handle), policy);
20416d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann
20426d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	if (rp->status > 0) {
20436d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		p_indent(level, frm);
20446d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
20456d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	} else {
20466d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		str = hci_lptostr(policy);
20476d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		if (str) {
20486d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			p_indent(level, frm);
20496d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			printf("Link policy: %s\n", str);
20506d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			free(str);
20516d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		}
20526d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	}
20536d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann}
20546d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann
2055f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmannstatic inline void read_default_link_policy_dump(int level, struct frame *frm)
2056f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann{
2057f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	uint8_t status = get_u8(frm);
2058f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	uint16_t policy = btohs(htons(get_u16(frm)));
2059f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	char *str;
2060f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
2061f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	p_indent(level, frm);
2062f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	printf("status 0x%2.2x policy 0x%2.2x\n", status, policy);
2063f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
2064f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	if (status > 0) {
2065f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		p_indent(level, frm);
2066f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		printf("Error: %s\n", status2str(status));
2067f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	} else {
2068f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		str = hci_lptostr(policy);
2069f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		if (str) {
2070f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			p_indent(level, frm);
2071f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			printf("Link policy: %s\n", str);
2072f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			free(str);
2073f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		}
2074f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	}
2075f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann}
2076f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
207744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_pin_type_dump(int level, struct frame *frm)
207844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
207944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_pin_type_rp *rp = frm->ptr;
208044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
208144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
208244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x type %d\n", rp->status, rp->pin_type);
208344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
208444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
208544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
208644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
208744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
208844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
208944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
209044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_stored_link_key_dump(int level, struct frame *frm)
209144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
209244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_stored_link_key_rp *rp = frm->ptr;
209344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
209444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
209544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x max %d num %d\n",
2096120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, rp->max_keys, rp->num_keys);
209744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
209844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
209944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
210044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
210144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
210244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
210344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
210444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_stored_link_key_dump(int level, struct frame *frm)
210544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
210644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	write_stored_link_key_rp *rp = frm->ptr;
210744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
210844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
210944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x written %d\n", rp->status, rp->num_keys);
211044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
211144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
211244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
211344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
211444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
211544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
211644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
211744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void delete_stored_link_key_dump(int level, struct frame *frm)
211844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
211944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	delete_stored_link_key_rp *rp = frm->ptr;
212044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
212144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
212244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x deleted %d\n", rp->status, btohs(rp->num_keys));
212344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
212444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
212544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
212644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
212744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
212844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
212944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
2130ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_name_dump(int level, struct frame *frm)
2131ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2132ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_name_rp *rp = frm->ptr;
2133ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char name[249];
2134ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
2135ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2136ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(name, 0, sizeof(name));
2137ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 248 && rp->name[i]; i++)
2138ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (isprint(rp->name[i]))
2139ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = rp->name[i];
2140ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		else
2141ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = '.';
2142ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2143ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2144ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x name \'%s\'\n", rp->status, name);
2145ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2146ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2147ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2148ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2149ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2150ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2151ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2152ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_class_of_dev_dump(int level, struct frame *frm)
2153ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2154ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_class_of_dev_rp *rp = frm->ptr;
2155ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2156ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2157ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x class 0x%2.2x%2.2x%2.2x\n", rp->status,
2158120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]);
2159ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2160ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2161ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2162ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2163ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2164ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2165ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2166ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_voice_setting_dump(int level, struct frame *frm)
2167ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2168ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_voice_setting_rp *rp = frm->ptr;
2169ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2170ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2171ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x voice setting 0x%4.4x\n",
2172120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->status, btohs(rp->voice_setting));
2173ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2174ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2175ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2176ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2177ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2178ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2179ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2180fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void read_current_iac_lap_dump(int level, struct frame *frm)
2181fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{
2182fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	read_current_iac_lap_rp *rp = frm->ptr;
2183fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	int i;
2184fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
2185fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	for (i = 0; i < rp->num_current_iac; i++) {
2186fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		p_indent(level, frm);
2187fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("IAC 0x%2.2x%2.2x%2.2x", rp->lap[i][2], rp->lap[i][1], rp->lap[i][0]);
2188fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		if (rp->lap[i][2] == 0x9e && rp->lap[i][1] == 0x8b) {
2189fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			switch (rp->lap[i][0]) {
2190fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x00:
2191fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (Limited Inquiry Access Code)");
2192fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
2193fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x33:
2194fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (General Inquiry Access Code)");
2195fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
2196fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			}
2197fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		}
2198fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("\n");
2199fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	}
2200fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann}
2201fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
220269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void read_scan_enable_dump(int level, struct frame *frm)
220369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{
220469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t status = get_u8(frm);
220569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t enable = get_u8(frm);
220669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
220769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	p_indent(level, frm);
220869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	printf("status 0x%2.2x enable %d\n", status, enable);
220969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
221069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	if (status > 0) {
221169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		p_indent(level, frm);
221269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		printf("Error: %s\n", status2str(status));
221369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	}
221469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann}
221569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
2216d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_timeout_dump(int level, struct frame *frm)
2217d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
2218d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	read_page_timeout_rp *rp = frm->ptr;
2219d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2220d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
2221d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("status 0x%2.2x timeout %d\n", rp->status, btohs(rp->timeout));
2222d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2223d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	if (rp->status > 0) {
2224d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		p_indent(level, frm);
2225d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2226d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	}
2227d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
2228d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2229d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_activity_dump(int level, struct frame *frm)
2230d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
2231d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	read_page_activity_rp *rp = frm->ptr;
2232d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2233d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
2234d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("status 0x%2.2x interval %d window %d\n",
2235120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->status, btohs(rp->interval), btohs(rp->window));
2236d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2237d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	if (rp->status > 0) {
2238d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		p_indent(level, frm);
2239d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2240d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	}
2241d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
2242d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2243a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void read_inquiry_scan_type_dump(int level, struct frame *frm)
2244a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{
2245a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	read_inquiry_scan_type_rp *rp = frm->ptr;
2246a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
2247a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	p_indent(level, frm);
2248a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	printf("status 0x%2.2x type %d\n", rp->status, rp->type);
2249a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
2250a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	if (rp->status > 0) {
2251a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		p_indent(level, frm);
2252a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2253a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	}
2254a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann}
2255a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
22566eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_inquiry_mode_dump(int level, struct frame *frm)
22576eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
22586eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_inquiry_mode_rp *rp = frm->ptr;
22596eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
22606eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
22616eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x mode %d\n", rp->status, rp->mode);
22626eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
22636eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
22646eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
22656eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
22666eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
22676eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
22686eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
22696eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_link_supervision_timeout_dump(int level, struct frame *frm)
22706eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
22716eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_link_supervision_timeout_rp *rp = frm->ptr;
22726eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
22736eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
22746eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x handle %d timeout %d\n",
2275d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann			rp->status, btohs(rp->handle), btohs(rp->timeout));
22766eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
22776eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
22786eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
22796eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
22806eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
22816eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
22826eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
22836eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_transmit_power_level_dump(int level, struct frame *frm)
22846eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
22856eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_transmit_power_level_rp *rp = frm->ptr;
22866eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
22876eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
22886eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x handle %d level %d\n",
2289120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->level);
22906eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
22916eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
22926eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
22936eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
22946eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
22956eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
22966eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
22971a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void read_ext_inquiry_response_dump(int level, struct frame *frm)
22981a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{
22991a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	read_ext_inquiry_response_rp *rp = frm->ptr;
23001a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
23011a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	p_indent(level, frm);
23021a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	printf("status 0x%2.2x fec 0x%2.2x\n", rp->status, rp->fec);
23031a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
23041a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	if (rp->status > 0) {
23051a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		p_indent(level, frm);
23061a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2307f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	} else {
2308f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann		frm->ptr += 2;
2309f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann		frm->len -= 2;
2310f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
2311e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		ext_inquiry_response_dump(level, frm);
23121a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	}
23131a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann}
23141a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
23153b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void read_inquiry_transmit_power_level_dump(int level, struct frame *frm)
23163b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
23173b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	read_inquiry_transmit_power_level_rp *rp = frm->ptr;
23183b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
23193b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
23203b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("status 0x%2.2x level %d\n", rp->status, rp->level);
23213b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
23223b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	if (rp->status > 0) {
23233b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		p_indent(level, frm);
23243b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
23253b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	}
23263b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
23273b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
23283b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void read_default_error_data_reporting_dump(int level, struct frame *frm)
23293b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
23303b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	read_default_error_data_reporting_rp *rp = frm->ptr;
23313b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
23323b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
23333b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("status 0x%2.2x reporting %d\n", rp->status, rp->reporting);
23343b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
23353b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	if (rp->status > 0) {
23363b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		p_indent(level, frm);
23373b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
23383b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	}
23393b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
23403b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
2341b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void read_local_oob_data_dump(int level, struct frame *frm)
2342b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
2343b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	read_local_oob_data_rp *rp = frm->ptr;
2344b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	int i;
2345b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2346b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
2347b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2348b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2349b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	if (rp->status > 0) {
2350b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
2351b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2352b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	} else {
2353b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
2354b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("hash 0x");
2355b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		for (i = 0; i < 16; i++)
2356b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			printf("%02x", rp->hash[i]);
2357b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("\n");
2358b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2359b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
2360b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("randomizer 0x");
2361b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		for (i = 0; i < 16; i++)
2362b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			printf("%02x", rp->randomizer[i]);
2363b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("\n");
2364b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
2365b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
2366b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2367ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_version_dump(int level, struct frame *frm)
2368ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2369ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_version_rp *rp = frm->ptr;
2370ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t manufacturer = btohs(rp->manufacturer);
2371ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2372ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2373ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2374ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2375ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2376ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2377ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2378ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2379ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
23801a5f2bff835728b9df12114adf87c704a1e9b6b8Marcel Holtmann		printf("HCI Version: %s (0x%x) HCI Revision: 0x%x\n",
2381120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					hci_vertostr(rp->hci_ver),
2382120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->hci_ver, btohs(rp->hci_rev));
2383ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2384ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n",
2385120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					lmp_vertostr(rp->lmp_ver),
2386120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->lmp_ver, btohs(rp->lmp_subver));
2387ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2388ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Manufacturer: %s (%d)\n",
2389120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				bt_compidtostr(manufacturer), manufacturer);
2390ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2391ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2392ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
239317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_commands_dump(int level, struct frame *frm)
239417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
239517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_commands_rp *rp = frm->ptr;
239617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i, max = 0;
239717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
239817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
239917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
240017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
240117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (rp->status > 0) {
240217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
240317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
240417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
240517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 64; i++)
240617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			if (rp->commands[i])
240717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann				max = i + 1;
240817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
240917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Commands: ");
241017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < (max > 32 ? 32 : max); i++)
241117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("%2.2x", rp->commands[i]);
241217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
241317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		if (max > 32) {
241417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			p_indent(level, frm);
241517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("          ");
241617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			for (i = 32; i < max; i++)
241717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann				printf("%2.2x", rp->commands[i]);
241817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("\n");
241917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		}
242017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
242117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
242217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
2423ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_features_dump(int level, struct frame *frm)
2424ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2425ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_features_rp *rp = frm->ptr;
2426ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
2427ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2428ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2429ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2430ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2431ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2432ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2433ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2434ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2435ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2436ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Features:");
2437ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		for (i = 0; i < 8; i++)
2438ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf(" 0x%2.2x", rp->features[i]);
2439ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("\n");
2440ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2441ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2442ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
244317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_ext_features_dump(int level, struct frame *frm)
244417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
244517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_ext_features_rp *rp = frm->ptr;
244617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i;
244717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
244817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
244917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x page %d max %d\n",
245017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		rp->status, rp->page_num, rp->max_page_num);
245117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
245217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (rp->status > 0) {
245317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
245417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
245517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
245617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
245717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Features:");
245817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 8; i++)
245917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			 printf(" 0x%2.2x", rp->features[i]);
246017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
246117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
246217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
246317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
2464ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_buffer_size_dump(int level, struct frame *frm)
2465ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2466ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_buffer_size_rp *rp = frm->ptr;
2467ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2468ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2469ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2470ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2471ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2472ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2473ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2474ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2475ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2476ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("ACL MTU %d:%d SCO MTU %d:%d\n",
2477120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				btohs(rp->acl_mtu), btohs(rp->acl_max_pkt),
2478120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->sco_mtu, btohs(rp->sco_max_pkt));
2479ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2480ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2481ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2482f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_link_quality_dump(int level, struct frame *frm)
2483f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2484f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_link_quality_rp *rp = frm->ptr;
2485f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2486f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2487f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d lq %d\n",
2488120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->status, btohs(rp->handle), rp->link_quality);
2489f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2490f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2491f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2492f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2493f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2494f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2495f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2496f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_rssi_dump(int level, struct frame *frm)
2497f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2498f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_rssi_rp *rp = frm->ptr;
2499f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2500f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2501f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d rssi %d\n",
2502120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->rssi);
2503f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2504f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2505f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2506f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2507f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2508f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2509f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2510f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_afh_map_dump(int level, struct frame *frm)
2511f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2512f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_afh_map_rp *rp = frm->ptr;
2513f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	int i;
2514f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2515f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2516f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d mode %d\n",
2517120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->mode);
2518f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2519f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2520f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2521f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2522f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	} else {
2523f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2524f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("AFH map: 0x");
2525f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		for (i = 0; i < 10; i++)
2526f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			printf("%2.2x", rp->map[i]);
2527f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("\n");
2528f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2529f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2530f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2531f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_clock_dump(int level, struct frame *frm)
2532f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2533f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_clock_rp *rp = frm->ptr;
2534f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2535f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2536f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d clock 0x%4.4x accuracy %d\n",
2537120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->status, btohs(rp->handle),
2538120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohl(rp->clock), btohs(rp->accuracy));
2539f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2540f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2541f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2542f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2543f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2544f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2545f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
254685478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void read_local_amp_info_dump(int level, struct frame *frm)
254785478602978104edbd412a87aff926c8f5311337Inga Stotland{
254885478602978104edbd412a87aff926c8f5311337Inga Stotland	read_local_amp_info_rp *rp = frm->ptr;
254985478602978104edbd412a87aff926c8f5311337Inga Stotland
255085478602978104edbd412a87aff926c8f5311337Inga Stotland	p_indent(level, frm);
255185478602978104edbd412a87aff926c8f5311337Inga Stotland	printf("status 0x%2.2x amp status 0x%2.2x\n",
255285478602978104edbd412a87aff926c8f5311337Inga Stotland			rp->status, rp->amp_status);
255385478602978104edbd412a87aff926c8f5311337Inga Stotland	if (rp->status > 0) {
255485478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
255585478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("Error: %s\n", status2str(rp->status));
255685478602978104edbd412a87aff926c8f5311337Inga Stotland	} else {
255785478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
255885478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("total bandwidth %d, max guaranteed bandwidth %d\n",
255985478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->total_bandwidth),
256085478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->max_guaranteed_bandwidth));
256185478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
256285478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("min latency %d, max PDU %d, controller type 0x%2.2x\n",
256385478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->min_latency), btohl(rp->max_pdu_size),
256485478602978104edbd412a87aff926c8f5311337Inga Stotland			rp->controller_type);
256585478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
256685478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("pal caps 0x%4.4x, max assoc len %d\n",
256785478602978104edbd412a87aff926c8f5311337Inga Stotland			btohs(rp->pal_caps), btohs(rp->max_amp_assoc_length));
256885478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
256985478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("max flush timeout %d, best effort flush timeout %d\n",
257085478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->max_flush_timeout),
257185478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->best_effort_flush_timeout));
257285478602978104edbd412a87aff926c8f5311337Inga Stotland	}
257385478602978104edbd412a87aff926c8f5311337Inga Stotland}
257485478602978104edbd412a87aff926c8f5311337Inga Stotland
257585478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void read_local_amp_assoc_dump(int level, struct frame *frm)
257685478602978104edbd412a87aff926c8f5311337Inga Stotland{
257785478602978104edbd412a87aff926c8f5311337Inga Stotland	read_local_amp_assoc_rp *rp = frm->ptr;
257885478602978104edbd412a87aff926c8f5311337Inga Stotland	uint16_t len = btohs(rp->length);
257985478602978104edbd412a87aff926c8f5311337Inga Stotland	int i;
258085478602978104edbd412a87aff926c8f5311337Inga Stotland
258185478602978104edbd412a87aff926c8f5311337Inga Stotland	p_indent(level, frm);
258285478602978104edbd412a87aff926c8f5311337Inga Stotland	printf("status 0x%2.2x handle 0x%2.2x length %d\n",
258385478602978104edbd412a87aff926c8f5311337Inga Stotland			rp->status, rp->handle, len);
258485478602978104edbd412a87aff926c8f5311337Inga Stotland	if (rp->status > 0) {
258585478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
258685478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("Error: %s\n", status2str(rp->status));
258785478602978104edbd412a87aff926c8f5311337Inga Stotland	} else {
258885478602978104edbd412a87aff926c8f5311337Inga Stotland		for (i = 0; i < len; i++) {
258985478602978104edbd412a87aff926c8f5311337Inga Stotland			if (!(i % 16)) {
259085478602978104edbd412a87aff926c8f5311337Inga Stotland				printf("\n");
259185478602978104edbd412a87aff926c8f5311337Inga Stotland				p_indent(level, frm);
259285478602978104edbd412a87aff926c8f5311337Inga Stotland			}
259385478602978104edbd412a87aff926c8f5311337Inga Stotland			printf("%2.2x ", rp->fragment[i]);
259485478602978104edbd412a87aff926c8f5311337Inga Stotland		}
259585478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("\n");
259685478602978104edbd412a87aff926c8f5311337Inga Stotland	}
259785478602978104edbd412a87aff926c8f5311337Inga Stotland}
259885478602978104edbd412a87aff926c8f5311337Inga Stotland
259985478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void write_remote_amp_assoc_dump(int level, struct frame *frm)
260085478602978104edbd412a87aff926c8f5311337Inga Stotland{
260185478602978104edbd412a87aff926c8f5311337Inga Stotland	write_remote_amp_assoc_rp *rp = frm->ptr;
260285478602978104edbd412a87aff926c8f5311337Inga Stotland
260385478602978104edbd412a87aff926c8f5311337Inga Stotland	p_indent(level, frm);
260485478602978104edbd412a87aff926c8f5311337Inga Stotland	printf("status 0x%2.2x handle 0x%2.2x\n", rp->status, rp->handle);
260585478602978104edbd412a87aff926c8f5311337Inga Stotland	if (rp->status > 0) {
260685478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
260785478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("Error: %s\n", status2str(rp->status));
260885478602978104edbd412a87aff926c8f5311337Inga Stotland	}
260985478602978104edbd412a87aff926c8f5311337Inga Stotland}
261085478602978104edbd412a87aff926c8f5311337Inga Stotland
261106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_read_buffer_size_response_dump(int level, struct frame *frm)
261206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
261306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_read_buffer_size_rp *rp = frm->ptr;
261406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
261506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
261606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("status 0x%2.2x pktlen 0x%4.4x maxpkt 0x%2.2x\n", rp->status,
261706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			rp->pkt_len, rp->max_pkt);
261806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
261906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	if (rp->status > 0) {
262006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		p_indent(level, frm);
262106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		printf("Error: %s\n", status2str(rp->status));
262206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	}
262306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
262406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
262506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_read_local_supported_features_dump(int level, struct frame *frm)
262606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
262706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	int i;
262806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_read_local_supported_features_rp *rp = frm->ptr;
262906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
263006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
263106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("status 0x%2.2x features 0x", rp->status);
263206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	for (i = 0; i < 8; i++)
263306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		printf("%2.2x", rp->features[i]);
263406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf(" (%s)\n", lefeatures2str(rp->features));
263506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
263606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	if (rp->status > 0) {
263706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		p_indent(level, frm);
263806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		printf("Error: %s\n", status2str(rp->status));
263906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	}
264006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
264106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
264206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_read_advertising_channel_tx_power_dump(int level, struct frame *frm)
264306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
264406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_read_advertising_channel_tx_power_rp *rp = frm->ptr;
264506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
264606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
264706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("status 0x%2.2x level 0x%x (dBm)\n", rp->status, rp->level);
264806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
264906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	if (rp->status > 0) {
265006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		p_indent(level, frm);
265106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		printf("Error: %s\n", status2str(rp->status));
265206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	}
265306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
265406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
2655d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_complete_dump(int level, struct frame *frm)
2656d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2657d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_cmd_complete *evt = frm->ptr;
2658d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(evt->opcode);
2659d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
2660d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
2661d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
26627b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
26637b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
26647b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
2665d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2666d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("%s (0x%2.2x|0x%4.4x) ncmd %d\n",
2667120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				opcode2str(opcode), ogf, ocf, evt->ncmd);
2668d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2669d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	frm->ptr += EVT_CMD_COMPLETE_SIZE;
2670d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	frm->len -= EVT_CMD_COMPLETE_SIZE;
2671d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
26724f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
26734f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		raw_dump(level, frm);
26744f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		return;
26754f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	}
26764f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann
2677d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	switch (ogf) {
2678ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_CTL:
2679ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
268017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_INQUIRY_CANCEL:
268117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_PERIODIC_INQUIRY:
268217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_EXIT_PERIODIC_INQUIRY:
2683d51f2017d006ab5e9ec6f187142ae2ae1cffff8eMarcel Holtmann		case OCF_READ_REMOTE_EXT_FEATURES:
268417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			status_response_dump(level, frm);
268517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
268690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_CREATE_CONN_CANCEL:
268790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REMOTE_NAME_REQ_CANCEL:
2688ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_REPLY:
2689ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_REPLY:
2690ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_NEG_REPLY:
2691ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_NEG_REPLY:
2692b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_REPLY:
2693b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_NEG_REPLY:
2694b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_REPLY:
2695b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_NEG_REPLY:
2696b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_REPLY:
2697b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_NEG_REPLY:
2698b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_REPLY:
2699b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_NEG_REPLY:
2700ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bdaddr_response_dump(level, frm);
2701ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2702ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
270317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2704ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2705ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_POLICY:
2706ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
27076d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		case OCF_READ_LINK_POLICY:
27086d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			read_link_policy_dump(level, frm);
27096d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			return;
2710ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_LINK_POLICY:
27113b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_SNIFF_SUBRATING:
2712ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_response_dump(level, frm);
2713ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2714f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_READ_DEFAULT_LINK_POLICY:
2715f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			read_default_link_policy_dump(level, frm);
2716f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
2717f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_WRITE_DEFAULT_LINK_POLICY:
2718f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			status_response_dump(level, frm);
2719f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
2720ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
272117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2722ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2723d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_HOST_CTL:
2724d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
272544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_PIN_TYPE:
272644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			read_pin_type_dump(level, frm);
272744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
272844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_STORED_LINK_KEY:
272944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			read_stored_link_key_dump(level, frm);
273044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
273144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_STORED_LINK_KEY:
273244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			write_stored_link_key_dump(level, frm);
273344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
273444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_DELETE_STORED_LINK_KEY:
273544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			delete_stored_link_key_dump(level, frm);
273644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
2737d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_NAME:
2738ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_name_dump(level, frm);
2739ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2740ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_CLASS_OF_DEV:
2741ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_class_of_dev_dump(level, frm);
2742ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2743ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_VOICE_SETTING:
2744ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_voice_setting_dump(level, frm);
2745ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2746fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_READ_CURRENT_IAC_LAP:
2747fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			read_current_iac_lap_dump(level, frm);
2748fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			return;
274969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_SCAN_ENABLE:
275069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_AUTH_ENABLE:
275169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			read_scan_enable_dump(level, frm);
275269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			return;
2753097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_READ_CONN_ACCEPT_TIMEOUT:
2754d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_PAGE_TIMEOUT:
275585478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_LOGICAL_LINK_ACCEPT_TIMEOUT:
2756d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			read_page_timeout_dump(level, frm);
2757d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
2758d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_PAGE_ACTIVITY:
2759d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_INQ_ACTIVITY:
2760d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			read_page_activity_dump(level, frm);
2761d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
2762a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_READ_INQUIRY_SCAN_TYPE:
2763a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			read_inquiry_scan_type_dump(level, frm);
2764a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			return;
276569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_ENCRYPT_MODE:
2766f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_READ_INQUIRY_MODE:
2767f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_READ_AFH_MODE:
2768f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			read_inquiry_mode_dump(level, frm);
2769f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			return;
27706eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_LINK_SUPERVISION_TIMEOUT:
27716eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			read_link_supervision_timeout_dump(level, frm);
27726eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
27736eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_TRANSMIT_POWER_LEVEL:
27746eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			read_transmit_power_level_dump(level, frm);
27756eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
27761a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_READ_EXT_INQUIRY_RESPONSE:
27771a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			read_ext_inquiry_response_dump(level, frm);
27781a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			return;
27793b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL:
27803b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			read_inquiry_transmit_power_level_dump(level, frm);
27813b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
27823b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_READ_DEFAULT_ERROR_DATA_REPORTING:
27833b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			read_default_error_data_reporting_dump(level, frm);
27843b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
2785b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_READ_LOCAL_OOB_DATA:
2786b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			read_local_oob_data_dump(level, frm);
2787b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
2788b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_READ_SIMPLE_PAIRING_MODE:
2789c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_READ_FLOW_CONTROL_MODE:
2790b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			status_mode_dump(level, frm);
2791b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
279244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_FLUSH:
27936eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:
27946eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			generic_response_dump(level, frm);
27956eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
279644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_RESET:
279744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_MASK:
279844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_FLT:
279944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_PIN_TYPE:
280044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_CREATE_NEW_UNIT_KEY:
28011577526370e596583b15d68940c24e975e62a502Marcel Holtmann		case OCF_CHANGE_LOCAL_NAME:
2802f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_CLASS_OF_DEV:
2803f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_VOICE_SETTING:
2804fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_CURRENT_IAC_LAP:
280569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_SCAN_ENABLE:
280669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_AUTH_ENABLE:
280769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_ENCRYPT_MODE:
2808097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_WRITE_CONN_ACCEPT_TIMEOUT:
2809d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_TIMEOUT:
2810d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_ACTIVITY:
2811d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_INQ_ACTIVITY:
2812a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_WRITE_INQUIRY_SCAN_TYPE:
2813fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_INQUIRY_MODE:
2814fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_AFH_MODE:
2815d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_SET_AFH_CLASSIFICATION:
28161a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_WRITE_EXT_INQUIRY_RESPONSE:
2817b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_MODE:
28183b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL:
28193b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING:
28208583de68ea3be3ada739dcc84d811fc752d45a03Marcel Holtmann		case OCF_SET_CONTROLLER_TO_HOST_FC:
28212315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann		case OCF_HOST_BUFFER_SIZE:
2822b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REFRESH_ENCRYPTION_KEY:
2823b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_SEND_KEYPRESS_NOTIFY:
282485478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT:
282585478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_SET_EVENT_MASK_PAGE_2:
2826c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_WRITE_LOCATION_DATA:
282785478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_FLOW_CONTROL_MODE:
282885478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT:
282985478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_BEST_EFFORT_FLUSH_TIMEOUT:
2830d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			status_response_dump(level, frm);
2831ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2832d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
283317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2834d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2835d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_INFO_PARAM:
2836d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
2837d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_VERSION:
2838ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_version_dump(level, frm);
2839ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
284017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_COMMANDS:
284117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_local_commands_dump(level, frm);
284217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
2843d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_FEATURES:
2844ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_features_dump(level, frm);
2845ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
284617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_EXT_FEATURES:
284717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_local_ext_features_dump(level, frm);
284817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
2849d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_BUFFER_SIZE:
2850ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_buffer_size_dump(level, frm);
2851ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2852d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_BD_ADDR:
2853ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bdaddr_response_dump(level, frm);
2854ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2855d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
285617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2857d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2858d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_STATUS_PARAM:
2859d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
2860d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_FAILED_CONTACT_COUNTER:
2861d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_RESET_FAILED_CONTACT_COUNTER:
2862f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			status_response_dump(level, frm);
2863f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2864d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LINK_QUALITY:
2865f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_link_quality_dump(level, frm);
2866f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2867d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_RSSI:
2868f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_rssi_dump(level, frm);
2869f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2870d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_AFH_MAP:
2871f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_afh_map_dump(level, frm);
2872f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2873d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_CLOCK:
2874f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_clock_dump(level, frm);
2875ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
287685478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_LOCAL_AMP_INFO:
287785478602978104edbd412a87aff926c8f5311337Inga Stotland			read_local_amp_info_dump(level, frm);
287885478602978104edbd412a87aff926c8f5311337Inga Stotland			return;
287985478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_LOCAL_AMP_ASSOC:
288085478602978104edbd412a87aff926c8f5311337Inga Stotland			read_local_amp_assoc_dump(level, frm);
288185478602978104edbd412a87aff926c8f5311337Inga Stotland			return;
288285478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_REMOTE_AMP_ASSOC:
288385478602978104edbd412a87aff926c8f5311337Inga Stotland			write_remote_amp_assoc_dump(level, frm);
288485478602978104edbd412a87aff926c8f5311337Inga Stotland			return;
2885d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
288617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2887b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2888b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case OGF_TESTING_CMD:
2889b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		switch (ocf) {
2890b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_READ_LOOPBACK_MODE:
2891b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			status_mode_dump(level, frm);
2892b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
2893b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_LOOPBACK_MODE:
2894b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_ENABLE_DEVICE_UNDER_TEST_MODE:
2895b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE:
2896b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			status_response_dump(level, frm);
2897b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
2898b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		}
2899b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
290006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
290106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case OGF_LE_CTL:
290206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		switch (ocf) {
290306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_EVENT_MASK:
290406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_RANDOM_ADDRESS:
290506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_ADVERTISING_PARAMETERS:
290606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_ADVERTISING_DATA:
290706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_SCAN_RESPONSE_DATA:
290806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_ADVERTISE_ENABLE:
290906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_SCAN_PARAMETERS:
291006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_SCAN_ENABLE:
291106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_CREATE_CONN:
291206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_CLEAR_WHITE_LIST:
291306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_ADD_DEVICE_TO_WHITE_LIST:
291406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST:
291506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION:
291606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_RECEIVER_TEST:
291706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_TRANSMITTER_TEST:
291806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			status_response_dump(level, frm);
291906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
292006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_BUFFER_SIZE:
292106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_read_buffer_size_response_dump(level, frm);
292206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
292306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_LOCAL_SUPPORTED_FEATURES:
292406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_read_local_supported_features_dump(level, frm);
292506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
292606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER:
292706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_read_advertising_channel_tx_power_dump(level, frm);
292806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
292906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		}
293006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		break;
2931d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2932ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2933ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	raw_dump(level, frm);
2934d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2935d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2936d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_status_dump(int level, struct frame *frm)
2937d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2938d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_cmd_status *evt = frm->ptr;
2939d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(evt->opcode);
29407b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
29417b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
29427b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
29437b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
29447b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
2945d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2946d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2947d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("%s (0x%2.2x|0x%4.4x) status 0x%2.2x ncmd %d\n",
29487b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			opcode2str(opcode), ogf, ocf, evt->status, evt->ncmd);
2949d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2950d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2951d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2952d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2953d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2954d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2955d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2956afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void hardware_error_dump(int level, struct frame *frm)
2957afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{
2958afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	evt_hardware_error *evt = frm->ptr;
2959afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
2960afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	p_indent(level, frm);
2961afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	printf("code %d\n", evt->code);
2962afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann}
2963afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
2964d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_dump(int level, struct frame *frm)
2965d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2966d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t num = get_u8(frm);
2967b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	char addr[18];
2968d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
2969d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2970d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	for (i = 0; i < num; i++) {
2971d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inquiry_info *info = frm->ptr;
2972d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2973bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(&info->bdaddr, addr);
2974d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2975d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
297672e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x\n",
297772e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann			addr, info->pscan_rep_mode, btohs(info->clock_offset),
297872e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann			info->dev_class[2], info->dev_class[1], info->dev_class[0]);
2979d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2980d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		frm->ptr += INQUIRY_INFO_SIZE;
2981d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		frm->len -= INQUIRY_INFO_SIZE;
2982d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2983d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2984d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2985d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_complete_dump(int level, struct frame *frm)
2986d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2987d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_conn_complete *evt = frm->ptr;
2988d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18];
2989d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2990bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2991d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2992d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2993d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d bdaddr %s type %s encrypt 0x%2.2x\n",
2994120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			evt->status, btohs(evt->handle), addr,
2995fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann			linktype2str(evt->link_type), evt->encr_mode);
2996d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2997d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2998d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2999d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3000d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3001d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3002d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3003d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_request_dump(int level, struct frame *frm)
3004d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3005d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_conn_request *evt = frm->ptr;
3006d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18];
3007d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3008bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3009d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3010d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
3011d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("bdaddr %s class 0x%2.2x%2.2x%2.2x type %s\n",
3012120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			addr, evt->dev_class[2], evt->dev_class[1],
3013fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann			evt->dev_class[0], linktype2str(evt->link_type));
3014d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3015d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3016d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void disconn_complete_dump(int level, struct frame *frm)
3017d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3018d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_disconn_complete *evt = frm->ptr;
3019d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3020d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
3021d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d reason 0x%2.2x\n",
3022120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->reason);
3023d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3024d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
3025d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
3026d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3027d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	} else if (evt->reason > 0) {
3028d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
3029d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Reason: %s\n", status2str(evt->reason));
3030d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3031d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3032d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3033d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void remote_name_req_complete_dump(int level, struct frame *frm)
3034d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3035d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_remote_name_req_complete *evt = frm->ptr;
3036d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18], name[249];
3037d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
3038d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3039bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3040d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3041d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	memset(name, 0, sizeof(name));
3042d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	for (i = 0; i < 248 && evt->name[i]; i++)
3043d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		if (isprint(evt->name[i]))
3044d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			name[i] = evt->name[i];
3045d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		else
3046d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			name[i] = '.';
3047d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3048d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
3049d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x bdaddr %s name '%s'\n", evt->status, addr, name);
3050d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3051d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
3052d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
3053d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3054d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3055d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3056d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
305717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_complete_dump(int level, struct frame *frm)
305817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
305917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	evt_master_link_key_complete *evt = frm->ptr;
306017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
306117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
306217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x handle %d flag %d\n",
3063120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->key_flag);
306417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
306517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (evt->status > 0) {
306617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
306717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
306817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
306917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
307017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
3071d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void encrypt_change_dump(int level, struct frame *frm)
3072d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3073d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_encrypt_change *evt = frm->ptr;
3074d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3075d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
3076d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d encrypt 0x%2.2x\n",
3077120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->encrypt);
3078d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3079d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
3080d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
3081d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3082d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3083d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3084d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3085ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_features_complete_dump(int level, struct frame *frm)
3086ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3087ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_remote_features_complete *evt = frm->ptr;
3088ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
3089ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3090ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3091ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3092ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3093ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3094ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3095ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3096ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
3097ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3098ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Features:");
3099ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		for (i = 0; i < 8; i++)
3100ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf(" 0x%2.2x", evt->features[i]);
3101ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("\n");
3102ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3103ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3104ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3105ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_version_complete_dump(int level, struct frame *frm)
3106ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3107ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_remote_version_complete *evt = frm->ptr;
3108ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t manufacturer = btohs(evt->manufacturer);
3109ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3110ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3111ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3112ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3113ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3114ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3115ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3116ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
3117ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3118ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n",
3119ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			lmp_vertostr(evt->lmp_ver), evt->lmp_ver,
3120ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			btohs(evt->lmp_subver));
3121ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3122ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Manufacturer: %s (%d)\n",
3123ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bt_compidtostr(manufacturer), manufacturer);
3124ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3125ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3126ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
312711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void qos_setup_complete_dump(int level, struct frame *frm)
312811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
312911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_qos_setup_complete *evt = frm->ptr;
313011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
313111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
313211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("status 0x%2.2x handle %d flags %d\n",
3133120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->flags);
313411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
313511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	if (evt->status > 0) {
313611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
313711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Error: %s\n", status2str(evt->status));
313811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	} else {
313911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
314011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Service type: %d\n", evt->qos.service_type);
314111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
314211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Token rate: %d\n", btohl(evt->qos.token_rate));
314311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
314411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth));
314511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
314611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Latency: %d\n", btohl(evt->qos.latency));
314711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
314811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Delay variation: %d\n", btohl(evt->qos.delay_variation));
314911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	}
315011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
315111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
3152ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void role_change_dump(int level, struct frame *frm)
3153ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3154ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_role_change *evt = frm->ptr;
3155ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
3156ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3157ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3158bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3159ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x bdaddr %s role 0x%2.2x\n",
3160120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann						evt->status, addr, evt->role);
3161ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3162ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3163ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3164ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3165ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
3166ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3167ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Role: %s\n", role2str(evt->role));
3168ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3169ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3170ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3171ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void mode_change_dump(int level, struct frame *frm)
3172ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3173ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_mode_change *evt = frm->ptr;
3174ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3175ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3176ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d mode 0x%2.2x interval %d\n",
3177ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		evt->status, btohs(evt->handle), evt->mode, btohs(evt->interval));
3178ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3179ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3180ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3181ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3182ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
3183ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3184ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Mode: %s\n", mode2str(evt->mode));
3185ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3186ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3187ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3188ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_req_dump(int level, struct frame *frm)
3189ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3190ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_pin_code_req *evt = frm->ptr;
3191ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
3192ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3193ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3194bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3195ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s\n", addr);
3196ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3197ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3198ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_notify_dump(int level, struct frame *frm)
3199ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3200ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_link_key_notify *evt = frm->ptr;
3201ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
3202ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
3203ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3204ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3205bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
320644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s key ", addr);
3207ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 16; i++)
3208a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
3209a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("**");
3210a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		else
3211a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("%2.2X", evt->link_key[i]);
321244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf(" type %d\n", evt->key_type);
3213b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
3214b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
3215b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("Type: %s\n", keytype2str(evt->key_type));
3216ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3217ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
321811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void max_slots_change_dump(int level, struct frame *frm)
321911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
322011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_max_slots_change *evt = frm->ptr;
322111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
322211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
322311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("handle %d slots %d\n", btohs(evt->handle), evt->max_slots);
322411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
322511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
3226c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmannstatic inline void data_buffer_overflow_dump(int level, struct frame *frm)
3227c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann{
3228c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	evt_data_buffer_overflow *evt = frm->ptr;
3229c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann
3230c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	p_indent(level, frm);
3231fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann	printf("type %s\n", linktype2str(evt->link_type));
3232c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann}
3233c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann
3234ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_clock_offset_complete_dump(int level, struct frame *frm)
3235ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3236ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_clock_offset_complete *evt = frm->ptr;
3237ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3238ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3239ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d clkoffset 0x%4.4x\n",
3240ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		evt->status, btohs(evt->handle), btohs(evt->clock_offset));
3241ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3242ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3243ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3244ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3245ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3246ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3247ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3248ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void conn_ptype_changed_dump(int level, struct frame *frm)
3249ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3250ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_conn_ptype_changed *evt = frm->ptr;
3251ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(evt->ptype);
3252ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
3253ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3254ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3255ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d ptype 0x%4.4x\n",
3256120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), ptype);
3257ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3258ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3259ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3260ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3261ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
3262ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		str = hci_ptypetostr(ptype);
3263ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (str) {
3264ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			p_indent(level, frm);
3265ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf("Packet type: %s\n", str);
3266ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			free(str);
3267ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
3268ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3269ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3270ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
327111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void pscan_rep_mode_change_dump(int level, struct frame *frm)
327211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
327311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_pscan_rep_mode_change *evt = frm->ptr;
327411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	char addr[18];
327511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
327611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
3277bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
327811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("bdaddr %s mode %d\n", addr, evt->pscan_rep_mode);
327911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
3280ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3281f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmannstatic inline void flow_spec_complete_dump(int level, struct frame *frm)
3282f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann{
3283f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	evt_flow_spec_complete *evt = frm->ptr;
3284f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
3285f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	p_indent(level, frm);
3286f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	printf("status 0x%2.2x handle %d flags %d %s\n",
3287120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->flags,
3288120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->direction == 0 ? "outgoing" : "incoming");
3289f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
3290f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	if (evt->status > 0) {
3291f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3292f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3293f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	} else {
3294f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3295f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Service type: %d\n", evt->qos.service_type);
3296f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3297f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Token rate: %d\n", btohl(evt->qos.token_rate));
3298f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3299f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth));
3300f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3301f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Latency: %d\n", btohl(evt->qos.latency));
3302f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3303f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Delay variation: %d\n", btohl(evt->qos.delay_variation));
3304f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	}
3305f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann}
3306f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
3307d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_with_rssi_dump(int level, struct frame *frm)
3308d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3309d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t num = get_u8(frm);
3310b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	char addr[18];
3311d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
3312d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3313ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	if (!num)
3314ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		return;
3315d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3316ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	if (frm->len / num == INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE) {
3317ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		for (i = 0; i < num; i++) {
3318ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			inquiry_info_with_rssi_and_pscan_mode *info = frm->ptr;
3319d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3320ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			p_indent(level, frm);
3321d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3322bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str(&info->bdaddr, addr);
3323ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3324ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				addr, info->pscan_rep_mode, btohs(info->clock_offset),
3325ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
3326ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3327ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
3328ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->len -= INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
3329ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		}
3330ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	} else {
3331ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		for (i = 0; i < num; i++) {
3332ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			inquiry_info_with_rssi *info = frm->ptr;
3333ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3334ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			p_indent(level, frm);
3335ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3336bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str(&info->bdaddr, addr);
3337ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3338ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				addr, info->pscan_rep_mode, btohs(info->clock_offset),
3339ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
3340ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3341ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
3342ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE;
3343ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		}
3344d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3345d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3346d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
334717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_complete_dump(int level, struct frame *frm)
334817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
334917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	evt_read_remote_ext_features_complete *evt = frm->ptr;
335017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i;
335117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
335217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
335317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x handle %d page %d max %d\n",
3354120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->status, btohs(evt->handle),
3355120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->page_num, evt->max_page_num);
335617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
335717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (evt->status > 0) {
335817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
335917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
336017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
336117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
336217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Features:");
336317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 8; i++)
336417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf(" 0x%2.2x", evt->features[i]);
336517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
336617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
336717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
336817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
3369d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_complete_dump(int level, struct frame *frm)
3370d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{
3371d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	evt_sync_conn_complete *evt = frm->ptr;
3372d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	char addr[18];
3373d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3374bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3375d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3376d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	p_indent(level, frm);
3377d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	printf("status 0x%2.2x handle %d bdaddr %s type %s\n",
3378120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->status, btohs(evt->handle), addr,
3379120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->link_type == 0 ? "SCO" : "eSCO");
3380d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3381d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	if (evt->status > 0) {
3382d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
3383d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3384d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	} else {
3385d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
3386d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Air mode: %s\n", airmode2str(evt->air_mode));
3387d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	}
3388d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann}
3389d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3390d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_changed_dump(int level, struct frame *frm)
3391d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{
3392d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	evt_sync_conn_changed *evt = frm->ptr;
3393d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3394d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	p_indent(level, frm);
3395120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3396d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3397d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	if (evt->status > 0) {
3398d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
3399d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3400d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	}
3401d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann}
3402d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
34033b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void sniff_subrating_event_dump(int level, struct frame *frm)
3404120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann{
34053b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	evt_sniff_subrating *evt = frm->ptr;
3406120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3407120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
3408120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3409120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3410120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	if (evt->status > 0) {
3411120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
3412120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3413120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	} else {
3414120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
3415f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann		printf("max latency transmit %d receive %d\n",
3416f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann					btohs(evt->max_tx_latency),
3417f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann					btohs(evt->max_rx_latency));
3418120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3419120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
3420120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		printf("min timeout remote %d local %d\n",
3421120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(evt->min_remote_timeout),
3422120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(evt->min_local_timeout));
3423120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	}
3424120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann}
3425120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3426807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmannstatic inline void extended_inq_result_dump(int level, struct frame *frm)
3427807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann{
3428807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	uint8_t num = get_u8(frm);
3429807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	char addr[18];
3430807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	int i;
3431807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
3432807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	for (i = 0; i < num; i++) {
3433807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		extended_inquiry_info *info = frm->ptr;
3434807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
3435bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(&info->bdaddr, addr);
3436807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
3437807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		p_indent(level, frm);
343827eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3439807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann			addr, info->pscan_rep_mode, btohs(info->clock_offset),
344027eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann			info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
344127eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann
344227eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
344327eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE;
344427eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann
3445e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		ext_inquiry_response_dump(level, frm);
3446807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	}
3447807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann}
3448807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
34493b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void link_supervision_timeout_changed_dump(int level, struct frame *frm)
3450d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann{
34513b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	evt_link_supervision_timeout_changed *evt = frm->ptr;
3452d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann
3453d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	p_indent(level, frm);
3454d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	printf("handle %d timeout %d\n",
3455d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann				btohs(evt->handle), btohs(evt->timeout));
3456d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann}
3457d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann
3458b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void user_passkey_notify_dump(int level, struct frame *frm)
3459b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
3460b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	evt_user_passkey_notify *evt = frm->ptr;
3461b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
3462b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
3463b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
3464b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3465b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s passkey %d\n", addr, btohl(evt->passkey));
3466b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
3467b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
3468b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void keypress_notify_dump(int level, struct frame *frm)
3469b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
3470b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	evt_keypress_notify *evt = frm->ptr;
3471b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
3472b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
3473b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
3474b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3475b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s type %d\n", addr, evt->type);
3476b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
3477b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
34783b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void remote_host_features_notify_dump(int level, struct frame *frm)
34793b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
34803b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	evt_remote_host_features_notify *evt = frm->ptr;
34813b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	char addr[18];
34823b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	int i;
34833b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
34843b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
34853b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
34863b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("bdaddr %s\n", addr);
34873b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
34883b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
34893b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("Features:");
34903b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	for (i = 0; i < 8; i++)
34913b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		printf(" 0x%2.2x", evt->features[i]);
34923b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("\n");
34933b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
34943b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
3495b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void evt_le_conn_complete_dump(int level, struct frame *frm)
3496b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{
3497b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	evt_le_connection_complete *evt = frm->ptr;
3498b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3499b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_indent(level, frm);
3500c82d5e375ca2ae38d4152be6be58483061e2003cVille Tervo	printf("status 0x%2.2x handle %d, role %s\n",
3501c82d5e375ca2ae38d4152be6be58483061e2003cVille Tervo					evt->status, btohs(evt->handle),
3502c82d5e375ca2ae38d4152be6be58483061e2003cVille Tervo					evt->role ? "slave" : "master");
3503b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo}
3504b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3505646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmannstatic inline void evt_le_advertising_report_dump(int level, struct frame *frm)
3506646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann{
3507646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	uint8_t num = get_u8(frm);
3508646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	char addr[18];
3509646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	int i;
3510646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3511646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	for (i = 0; i < num; i++) {
3512646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		le_advertising_info *info = frm->ptr;
3513646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		void *ptr = frm->ptr;
3514646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		uint32_t len = frm->len;
3515646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3516646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		p_ba2str(&info->bdaddr, addr);
3517646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3518646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		p_indent(level, frm);
3519646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		printf("%s (%d)\n", evttype2str(info->evt_type), info->evt_type);
3520646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3521646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		p_indent(level, frm);
3522c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann		printf("bdaddr %s (%s)\n", addr,
3523c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann					bdaddrtype2str(info->bdaddr_type));
3524646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3525c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann		frm->ptr += LE_ADVERTISING_INFO_SIZE;
3526c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann		frm->len -= LE_ADVERTISING_INFO_SIZE;
3527646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3528646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		ext_inquiry_response_dump(level, frm);
3529646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3530c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann		frm->ptr = ptr + 1;
3531c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann		frm->len = len - 1;
3532646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	}
3533646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann}
3534646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3535b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martinsstatic inline void evt_le_conn_update_complete_dump(int level,
3536b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins							struct frame *frm)
3537b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins{
3538b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	evt_le_connection_update_complete *uevt = frm->ptr;
3539b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins
3540b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	p_indent(level, frm);
3541b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	printf("status 0x%2.2x handle %d\n", uevt->status, btohs(uevt->handle));
3542b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins
3543b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	p_indent(level, frm);
3544b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	printf("interval %.2fms, latency %.2fms, superv. timeout %.2fms\n",
3545b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins			btohs(uevt->interval) * 1.25, btohs(uevt->latency) * 1.25,
3546b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins			btohs(uevt->supervision_timeout) * 10.0);
3547b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins}
3548b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins
35490766d9adeddb57249388421cf1138e3aace45265André Dieb Martinsstatic inline void evt_le_read_remote_used_features_complete_dump(int level, struct frame *frm)
35500766d9adeddb57249388421cf1138e3aace45265André Dieb Martins{
35510766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	int i;
35520766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	evt_le_read_remote_used_features_complete *revt = frm->ptr;
35530766d9adeddb57249388421cf1138e3aace45265André Dieb Martins
35540766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	p_indent(level, frm);
35550766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	printf("status 0x%2.2x handle %d\n", revt->status, btohs(revt->handle));
35560766d9adeddb57249388421cf1138e3aace45265André Dieb Martins
35570766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	if (revt->status > 0) {
35580766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		p_indent(level, frm);
35590766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		printf("Error: %s\n", status2str(revt->status));
35600766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	} else {
35610766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		p_indent(level, frm);
35620766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		printf("Features:");
35630766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		for (i = 0; i < 8; i++)
35640766d9adeddb57249388421cf1138e3aace45265André Dieb Martins			printf(" 0x%2.2x", revt->features[i]);
35650766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		printf("\n");
35660766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	}
35670766d9adeddb57249388421cf1138e3aace45265André Dieb Martins}
35680766d9adeddb57249388421cf1138e3aace45265André Dieb Martins
3569b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void le_meta_ev_dump(int level, struct frame *frm)
3570b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{
3571b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	evt_le_meta_event *mevt = frm->ptr;
3572b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	uint8_t subevent;
3573b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3574b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	subevent = mevt->subevent;
3575b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3576b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	frm->ptr += EVT_LE_META_EVENT_SIZE;
3577b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	frm->len -= EVT_LE_META_EVENT_SIZE;
3578b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3579b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_indent(level, frm);
3580b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	printf("%s\n", ev_le_meta_str[subevent]);
3581b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3582b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	switch (mevt->subevent) {
3583b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	case EVT_LE_CONN_COMPLETE:
3584b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		evt_le_conn_complete_dump(level + 1, frm);
3585b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
3586646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	case EVT_LE_ADVERTISING_REPORT:
3587646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		evt_le_advertising_report_dump(level + 1, frm);
3588646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		break;
3589b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	case EVT_LE_CONN_UPDATE_COMPLETE:
3590b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins		evt_le_conn_update_complete_dump(level + 1, frm);
3591b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins		break;
35920766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	case EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE:
35930766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		evt_le_read_remote_used_features_complete_dump(level + 1, frm);
35940766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		break;
3595b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	default:
3596b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		raw_dump(level, frm);
3597b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
3598b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	}
3599b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo}
3600b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3601652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void phys_link_complete_dump(int level, struct frame *frm)
3602652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3603652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_physical_link_complete *evt = frm->ptr;
3604652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3605652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3606652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("status 0x%2.2x handle %d\n", evt->status, evt->handle);
3607652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3608652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	if (evt->status > 0) {
3609652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		p_indent(level, frm);
3610652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		printf("Error: %s\n", status2str(evt->status));
3611652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	}
3612652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3613652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3614652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void disconn_phys_link_complete_dump(int level, struct frame *frm)
3615652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3616652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_disconn_physical_link_complete *evt = frm->ptr;
3617652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3618652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3619652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("status 0x%2.2x handle %d reason 0x%2.2x\n",
3620652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland				evt->status, evt->handle, evt->reason);
3621652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3622652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	if (evt->status > 0) {
3623652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		p_indent(level, frm);
3624652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		printf("Error: %s\n", status2str(evt->status));
3625652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	} else if (evt->reason > 0) {
3626652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		p_indent(level, frm);
3627652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		printf("Reason: %s\n", status2str(evt->reason));
3628652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	}
3629652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3630652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3631652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void phys_link_loss_warning_dump(int level, struct frame *frm)
3632652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3633652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_physical_link_loss_warning *evt = frm->ptr;
3634652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3635652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3636652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("handle %d reason 0x%2.2x\n", evt->handle, evt->reason);
3637652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3638652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3639652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void phys_link_handle_dump(int level, struct frame *frm)
3640652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3641652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_physical_link_recovery *evt = frm->ptr;
3642652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3643652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3644652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("handle %d\n", evt->handle);
3645652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3646652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3647652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void logical_link_complete_dump(int level, struct frame *frm)
3648652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3649652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_logical_link_complete *evt = frm->ptr;
3650652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3651652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3652652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("status 0x%2.2x log_handle %d handle %d tx_flow_id %d\n",
3653652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland			evt->status, btohs(evt->log_handle), evt->handle,
3654652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland			evt->tx_flow_id);
3655652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3656652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	if (evt->status > 0) {
3657652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		p_indent(level, frm);
3658652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		printf("Error: %s\n", status2str(evt->status));
3659652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	}
3660652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3661652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3662652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void flow_spec_modify_dump(int level, struct frame *frm)
3663652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3664652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_flow_spec_modify_complete *evt = frm->ptr;
3665652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3666652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3667652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3668652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3669652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	if (evt->status > 0) {
3670652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		p_indent(level, frm);
3671652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		printf("Error: %s\n", status2str(evt->status));
3672652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	}
3673652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3674652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
367565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void event_dump(int level, struct frame *frm)
367695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
3677174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	hci_event_hdr *hdr = frm->ptr;
3678be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	uint8_t event = hdr->evt;
367965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
368065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (p_filter(FILT_HCI))
368165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		return;
368265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
3683d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (event <= EVENT_NUM) {
36847b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
3685803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: %s (0x%2.2x) plen %d\n",
36867b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann					event_str[hdr->evt], hdr->evt, hdr->plen);
3687be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	} else if (hdr->evt == EVT_TESTING) {
36887b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
3689803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: Testing (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
3690be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	} else if (hdr->evt == EVT_VENDOR) {
3691a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		uint16_t manufacturer;
3692a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann
36937b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
36947b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			return;
36957b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
36967b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
3697803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: Vendor (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
36987b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
3699a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		manufacturer = get_manufacturer();
3700a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann
3701a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		switch (manufacturer) {
3702a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 0:
3703e1e8e8d65fe211c133b53cf8af8883caf7936314Marcel Holtmann		case 37:
3704a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 48:
3705a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			frm->ptr += HCI_EVENT_HDR_SIZE;
3706a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			frm->len -= HCI_EVENT_HDR_SIZE;
3707a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			ericsson_dump(level + 1, frm);
3708a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			return;
3709a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 10:
3710be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			frm->ptr += HCI_EVENT_HDR_SIZE;
3711be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			frm->len -= HCI_EVENT_HDR_SIZE;
3712be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			csr_dump(level + 1, frm);
3713be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			return;
3714be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		}
37157b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	} else {
37167b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
371766f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky		printf("HCI Event: code 0x%2.2x plen %d\n", hdr->evt, hdr->plen);
37187b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	}
371965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
372065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->ptr += HCI_EVENT_HDR_SIZE;
372165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->len -= HCI_EVENT_HDR_SIZE;
372265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
3723be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	if (event == EVT_CMD_COMPLETE) {
3724be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		evt_cmd_complete *cc = frm->ptr;
3725be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		if (cc->opcode == cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION)) {
3726be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			read_local_version_rp *rp = frm->ptr + EVT_CMD_COMPLETE_SIZE;
3727be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			manufacturer = rp->manufacturer;
3728be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		}
3729be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	}
3730be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann
373125554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann	if (event == EVT_DISCONN_COMPLETE) {
373225554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann		evt_disconn_complete *evt = frm->ptr;
373325554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann		l2cap_clear(btohs(evt->handle));
373425554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann	}
373525554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann
3736d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
3737d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		raw_dump(level, frm);
3738d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		return;
3739d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3740d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3741d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	switch (event) {
3742ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann	case EVT_LOOPBACK_COMMAND:
3743ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		command_dump(level + 1, frm);
3744ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
3745d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CMD_COMPLETE:
3746d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		cmd_complete_dump(level + 1, frm);
3747d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3748d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CMD_STATUS:
3749d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		cmd_status_dump(level + 1, frm);
3750d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3751afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	case EVT_HARDWARE_ERROR:
3752afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		hardware_error_dump(level + 1, frm);
3753afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		break;
3754afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	case EVT_FLUSH_OCCURRED:
3755f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	case EVT_QOS_VIOLATION:
3756afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		handle_response_dump(level + 1, frm);
3757afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		break;
3758d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_COMPLETE:
3759d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		status_response_dump(level + 1, frm);
3760d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3761d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_RESULT:
3762d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inq_result_dump(level + 1, frm);
3763d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3764d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CONN_COMPLETE:
3765d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		conn_complete_dump(level + 1, frm);
3766d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3767d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CONN_REQUEST:
3768d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		conn_request_dump(level + 1, frm);
3769d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3770d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_DISCONN_COMPLETE:
3771652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_DISCONNECT_LOGICAL_LINK_COMPLETE:
3772d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		disconn_complete_dump(level + 1, frm);
3773d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3774d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_AUTH_COMPLETE:
3775d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CHANGE_CONN_LINK_KEY_COMPLETE:
3776d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		generic_response_dump(level + 1, frm);
3777d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
377817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case EVT_MASTER_LINK_KEY_COMPLETE:
377917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		master_link_key_complete_dump(level + 1, frm);
378017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
3781d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_REMOTE_NAME_REQ_COMPLETE:
3782d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		remote_name_req_complete_dump(level + 1, frm);
3783d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3784d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_ENCRYPT_CHANGE:
3785d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		encrypt_change_dump(level + 1, frm);
3786d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3787ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_REMOTE_FEATURES_COMPLETE:
3788ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_remote_features_complete_dump(level + 1, frm);
3789ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3790ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_REMOTE_VERSION_COMPLETE:
3791ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_remote_version_complete_dump(level + 1, frm);
3792ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3793ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_QOS_SETUP_COMPLETE:
379411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		qos_setup_complete_dump(level + 1, frm);
3795ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3796ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_ROLE_CHANGE:
3797ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		role_change_dump(level + 1, frm);
3798ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3799ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_NUM_COMP_PKTS:
3800ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		num_comp_pkts_dump(level + 1, frm);
3801ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3802ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_MODE_CHANGE:
3803ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		mode_change_dump(level + 1, frm);
3804ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3805b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	case EVT_RETURN_LINK_KEYS:
3806b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann		return_link_keys_dump(level + 1, frm);
3807b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann		break;
3808ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_PIN_CODE_REQ:
3809ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_LINK_KEY_REQ:
3810b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_IO_CAPABILITY_REQUEST:
3811b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_USER_PASSKEY_REQUEST:
3812b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_REMOTE_OOB_DATA_REQUEST:
3813ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		pin_code_req_dump(level + 1, frm);
3814ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3815ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_LINK_KEY_NOTIFY:
3816ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		link_key_notify_dump(level + 1, frm);
3817ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3818c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	case EVT_DATA_BUFFER_OVERFLOW:
3819c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann		data_buffer_overflow_dump(level + 1, frm);
3820c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann		break;
382111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	case EVT_MAX_SLOTS_CHANGE:
382211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		max_slots_change_dump(level + 1, frm);
382311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		break;
3824ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_CLOCK_OFFSET_COMPLETE:
3825ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_clock_offset_complete_dump(level + 1, frm);
3826ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3827ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_CONN_PTYPE_CHANGED:
3828ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		conn_ptype_changed_dump(level + 1, frm);
3829ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
383011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	case EVT_PSCAN_REP_MODE_CHANGE:
383111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		pscan_rep_mode_change_dump(level + 1, frm);
383211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		break;
3833f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	case EVT_FLOW_SPEC_COMPLETE:
3834f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		flow_spec_complete_dump(level + 1, frm);
3835f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		break;
3836d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_RESULT_WITH_RSSI:
3837d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inq_result_with_rssi_dump(level + 1, frm);
3838d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
383917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case EVT_READ_REMOTE_EXT_FEATURES_COMPLETE:
384017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		read_remote_ext_features_complete_dump(level + 1, frm);
384117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
3842d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case EVT_SYNC_CONN_COMPLETE:
3843d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		sync_conn_complete_dump(level + 1, frm);
3844d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		break;
3845d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case EVT_SYNC_CONN_CHANGED:
3846d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		sync_conn_changed_dump(level + 1, frm);
3847d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		break;
38483b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_SNIFF_SUBRATING:
38493b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		sniff_subrating_event_dump(level + 1, frm);
3850120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		break;
3851807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	case EVT_EXTENDED_INQUIRY_RESULT:
3852807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		extended_inq_result_dump(level + 1, frm);
3853807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		break;
38543b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_ENCRYPTION_KEY_REFRESH_COMPLETE:
38553b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		generic_response_dump(level + 1, frm);
38563b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		break;
3857b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_SIMPLE_PAIRING_COMPLETE:
3858b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		bdaddr_response_dump(level + 1, frm);
3859b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
38603b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_LINK_SUPERVISION_TIMEOUT_CHANGED:
38613b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		link_supervision_timeout_changed_dump(level + 1, frm);
38623b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		break;
38633b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_ENHANCED_FLUSH_COMPLETE:
38643b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		generic_command_dump(level + 1, frm);
38653b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		break;
3866b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_IO_CAPABILITY_RESPONSE:
3867b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		io_capability_reply_dump(level + 1, frm);
3868b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
3869b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_USER_CONFIRM_REQUEST:
3870b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_USER_PASSKEY_NOTIFY:
3871b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		user_passkey_notify_dump(level + 1, frm);
3872b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
3873b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_KEYPRESS_NOTIFY:
3874b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		keypress_notify_dump(level + 1, frm);
3875b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
38763b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_REMOTE_HOST_FEATURES_NOTIFY:
38773b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		remote_host_features_notify_dump(level + 1, frm);
3878d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann		break;
3879b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	case EVT_LE_META_EVENT:
3880b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		le_meta_ev_dump(level + 1, frm);
3881b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
3882652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_PHYSICAL_LINK_COMPLETE:
3883652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		phys_link_complete_dump(level + 1, frm);
3884652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3885652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE:
3886652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		disconn_phys_link_complete_dump(level + 1, frm);
3887652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3888652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_PHYSICAL_LINK_LOSS_EARLY_WARNING:
3889652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		phys_link_loss_warning_dump(level + 1, frm);
3890652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3891652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_PHYSICAL_LINK_RECOVERY:
3892652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_CHANNEL_SELECTED:
3893652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		phys_link_handle_dump(level + 1, frm);
3894652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3895652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_LOGICAL_LINK_COMPLETE:
3896652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		logical_link_complete_dump(level + 1, frm);
3897652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3898652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_FLOW_SPEC_MODIFY_COMPLETE:
3899652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		flow_spec_modify_dump(level + 1, frm);
3900652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3901d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	default:
3902d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		raw_dump(level, frm);
3903d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3904d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
390595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
390695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
390765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void acl_dump(int level, struct frame *frm)
390895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
3909174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	hci_acl_hdr *hdr = (void *) frm->ptr;
39100d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t handle = btohs(hdr->handle);
39110d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t dlen = btohs(hdr->dlen);
39120d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint8_t flags = acl_flags(handle);
391365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
391465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (!p_filter(FILT_HCI)) {
3915ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
3916d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("ACL data: handle %d flags 0x%2.2x dlen %d\n",
391765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky			acl_handle(handle), flags, dlen);
391865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		level++;
391965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	}
3920e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
3921e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann	frm->ptr += HCI_ACL_HDR_SIZE;
3922e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann	frm->len -= HCI_ACL_HDR_SIZE;
3923f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky	frm->flags  = flags;
3924f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky	frm->handle = acl_handle(handle);
392565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
392665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (parser.filter & ~FILT_HCI)
392765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		l2cap_dump(level, frm);
392865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	else
392965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		raw_dump(level, frm);
393095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
393195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
3932d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyanskystatic inline void sco_dump(int level, struct frame *frm)
3933d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky{
3934d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	hci_sco_hdr *hdr = (void *) frm->ptr;
39350d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t handle = btohs(hdr->handle);
39368f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann	uint8_t flags = acl_flags(handle);
39376d3f2066a10cd7d0812fdf97635f1bd77f003493Marcel Holtmann	int len;
3938d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
39399e216633a0f902b7d069c08939c67e03dd4ee516Marcel Holtmann	if (frm->audio_fd > fileno(stderr))
39406d3f2066a10cd7d0812fdf97635f1bd77f003493Marcel Holtmann		len = write(frm->audio_fd, frm->ptr + HCI_SCO_HDR_SIZE, hdr->dlen);
39410033462dddb3b4adf56ea28680c1f135f25a4387Marcel Holtmann
3942d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	if (!p_filter(FILT_SCO)) {
3943ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
39448f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann		printf("SCO data: handle %d flags 0x%2.2x dlen %d\n",
39458f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann				acl_handle(handle), flags, hdr->dlen);
3946d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		level++;
3947d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
3948d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		frm->ptr += HCI_SCO_HDR_SIZE;
3949d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		frm->len -= HCI_SCO_HDR_SIZE;
3950d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		raw_dump(level, frm);
3951d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	}
3952d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky}
3953d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
3954b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmannstatic inline void vendor_dump(int level, struct frame *frm)
3955b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann{
3956b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	if (p_filter(FILT_HCI))
3957b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		return;
3958b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann
395938acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann	if (frm->dev_id == HCI_DEV_NONE) {
3960a4d60061ed080704f1e1c076d59ac0b03aaa0fd1Marcel Holtmann		uint16_t device = btohs(htons(get_u16(frm)));
3961ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann		uint16_t proto = btohs(htons(get_u16(frm)));
396238acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		uint16_t type = btohs(htons(get_u16(frm)));
396338acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		uint16_t plen = btohs(htons(get_u16(frm)));
396438acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
396538acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		p_indent(level, frm);
396638acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
3967ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann		printf("System %s: device hci%d proto 0x%2.2x type 0x%2.2x plen %d\n",
3968ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann			frm->in ? "event" : "command", device, proto, type, plen);
396938acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
397038acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		raw_dump(level, frm);
397138acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		return;
397238acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann	}
397338acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
39747b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (parser.flags & DUMP_NOVENDOR)
39757b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
39767b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
3977b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	if (get_manufacturer() == 12) {
3978b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		bpa_dump(level, frm);
3979b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		return;
3980b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	}
3981b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann
3982b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	p_indent(level, frm);
3983b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	printf("Vendor data: len %d\n", frm->len);
3984b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	raw_dump(level, frm);
3985b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann}
3986b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann
3987174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyanskyvoid hci_dump(int level, struct frame *frm)
398895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
3989d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t type = *(uint8_t *)frm->ptr;
399095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
3991174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	frm->ptr++; frm->len--;
3992e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
399395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	switch (type) {
399495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_COMMAND_PKT:
399565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		command_dump(level, frm);
399695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
399795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
399895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_EVENT_PKT:
399965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		event_dump(level, frm);
400095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
400195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
400295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_ACLDATA_PKT:
400365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		acl_dump(level, frm);
400495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
400595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
4006d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	case HCI_SCODATA_PKT:
4007d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		sco_dump(level, frm);
4008d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		break;
4009e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
4010b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	case HCI_VENDOR_PKT:
4011b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann		vendor_dump(level, frm);
4012b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann		break;
4013b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann
401495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	default:
401565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		if (p_filter(FILT_HCI))
401665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky			break;
401765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
4018ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
4019174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky		printf("Unknown: type 0x%2.2x len %d\n", type, frm->len);
402065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		raw_dump(level, frm);
402195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
402295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	}
402395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
4024