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
76071406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martinsstatic inline void ext_inquiry_data_dump(int level, struct frame *frm,
76171406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins						uint8_t *data)
762e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann{
76371406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	uint8_t len = data[0];
76471406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	uint8_t type;
765e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	char *str;
766e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	int i;
767e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
76871406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	if (len == 0)
76971406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		return;
770e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
77171406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	type = data[1];
77271406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	data += 2;
77371406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	len -= 1;
774e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
77571406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	switch (type) {
77671406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	case 0x01:
77771406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		p_indent(level, frm);
77871406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		printf("Flags:");
77971406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		for (i = 0; i < len; i++)
78071406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins			printf(" 0x%2.2x", data[i]);
78171406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		printf("\n");
78271406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		break;
78307efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann
78471406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	case 0x02:
78571406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	case 0x03:
78671406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		p_indent(level, frm);
78771406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		printf("%s service classes:",
78871406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins				type == 0x02 ? "Shortened" : "Complete");
78907efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann
79071406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		for (i = 0; i < len / 2; i++) {
79171406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins			uint16_t val;
792e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
79371406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins			val = btohs(bt_get_unaligned(((uint16_t *) (data + i * 2))));
79471406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins			printf(" 0x%4.4x", val);
79571406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		}
79671406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		printf("\n");
79771406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		break;
79807efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann
79971406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	case 0x08:
80071406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	case 0x09:
80171406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		str = malloc(len + 1);
80271406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		if (str) {
80371406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins			snprintf(str, len + 1, "%s", (char *) data);
80471406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins			for (i = 0; i < len; i++)
80571406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins				if (!isprint(str[i]))
80671406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins					str[i] = '.';
807e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			p_indent(level, frm);
80871406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins			printf("%s local name: \'%s\'\n",
80971406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins				type == 0x08 ? "Shortened" : "Complete", str);
81071406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins			free(str);
811e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		}
81271406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		break;
81371406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins
81471406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	case 0x0a:
81571406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		p_indent(level, frm);
81671406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		printf("TX power level: %d\n", *((uint8_t *) data));
81771406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		break;
81871406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins
81971406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	default:
82071406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		p_indent(level, frm);
82171406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		printf("Unknown type 0x%02x with %d bytes data\n",
82271406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins							type, len);
82371406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		break;
82471406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	}
82571406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins}
82671406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins
82771406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martinsstatic inline void ext_inquiry_response_dump(int level, struct frame *frm)
82871406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins{
82971406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	void *ptr = frm->ptr;
83071406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	uint32_t len = frm->len;
83171406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	uint8_t length;
83271406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins
83371406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	length = get_u8(frm);
83471406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins
83571406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	while (length > 0) {
83671406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		ext_inquiry_data_dump(level, frm, frm->ptr);
837e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
838e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		frm->ptr += length;
839e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		frm->len -= length;
840e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
841e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		length = get_u8(frm);
842e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	}
843e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
84471406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	frm->ptr = ptr +
84571406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		(EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
84671406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	frm->len = len +
84771406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		(EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
848e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann}
849e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
85090480219be366c65e68ae8612de7a361027e751aMarcel Holtmannstatic inline void bdaddr_command_dump(int level, struct frame *frm)
85190480219be366c65e68ae8612de7a361027e751aMarcel Holtmann{
85290480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
85390480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	char addr[18];
85490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
85590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	frm->ptr += sizeof(bdaddr_t);
85690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	frm->len -= sizeof(bdaddr_t);
85790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
85890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	p_indent(level, frm);
859bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
860e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	printf("bdaddr %s\n", addr);
86190480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
86290480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	raw_dump(level, frm);
86390480219be366c65e68ae8612de7a361027e751aMarcel Holtmann}
86490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
865b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void generic_command_dump(int level, struct frame *frm)
866b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
867b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
868b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
869b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
870b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("handle %d\n", handle);
871b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
872b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	raw_dump(level, frm);
873b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
874b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
875b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void generic_write_mode_dump(int level, struct frame *frm)
876b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
877b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint8_t mode = get_u8(frm);
878b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
879b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
880b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("mode 0x%2.2x\n", mode);
881b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
882b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
883ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void inquiry_dump(int level, struct frame *frm)
884ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
885ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	inquiry_cp *cp = frm->ptr;
886ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
887ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
888ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("lap 0x%2.2x%2.2x%2.2x len %d num %d\n",
889ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);
890ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
891ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
892ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void periodic_inquiry_dump(int level, struct frame *frm)
893ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
894ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	periodic_inquiry_cp *cp = frm->ptr;
895ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
896ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
897ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("max %d min %d lap 0x%2.2x%2.2x%2.2x len %d num %d\n",
898ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		btohs(cp->max_period), btohs(cp->min_period),
899ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);
900ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
901ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
902ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void create_conn_dump(int level, struct frame *frm)
903ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
904ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	create_conn_cp *cp = frm->ptr;
905ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(cp->pkt_type);
906ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t clkoffset = btohs(cp->clock_offset);
907ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18], *str;
908ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
909ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
910bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
911ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s ptype 0x%4.4x rswitch 0x%2.2x clkoffset 0x%4.4x%s\n",
912ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		addr, ptype, cp->role_switch,
913ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");
914ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
915ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_ptypetostr(ptype);
916ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
917ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
918ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Packet type: %s\n", str);
919ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
920ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
921ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
922ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
923ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void disconnect_dump(int level, struct frame *frm)
924ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
925ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	disconnect_cp *cp = frm->ptr;
926ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
927ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
928ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d reason 0x%2.2x\n", btohs(cp->handle), cp->reason);
929ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
930ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
931ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Reason: %s\n", status2str(cp->reason));
932ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
933ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
934ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void add_sco_dump(int level, struct frame *frm)
935ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
936ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	add_sco_cp *cp = frm->ptr;
937ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(cp->pkt_type);
938ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
939ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
940ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
941ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d ptype 0x%4.4x\n", btohs(cp->handle), ptype);
942ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
943ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_ptypetostr(ptype);
944ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
945ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
946ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Packet type: %s\n", str);
947ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
948ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
949ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
950ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
951ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void accept_conn_req_dump(int level, struct frame *frm)
952ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
953ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	accept_conn_req_cp *cp = frm->ptr;
954ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
955ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
956ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
957bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
958ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s role 0x%2.2x\n", addr, cp->role);
959ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
960ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
961ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Role: %s\n", role2str(cp->role));
962ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
963ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
964ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void reject_conn_req_dump(int level, struct frame *frm)
965ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
966ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	reject_conn_req_cp *cp = frm->ptr;
967ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
968ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
969ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
970bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
971ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s reason 0x%2.2x\n", addr, cp->reason);
972ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
973ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
974ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Reason: %s\n", status2str(cp->reason));
975ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
976ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
977ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_reply_dump(int level, struct frame *frm)
978ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
979ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	pin_code_reply_cp *cp = frm->ptr;
980ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18], pin[17];
981ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
982ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
983bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
984ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(pin, 0, sizeof(pin));
985a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann	if (parser.flags & DUMP_NOVENDOR)
986a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		memset(pin, '*', cp->pin_len);
987a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann	else
988a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		memcpy(pin, cp->pin_code, cp->pin_len);
989ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s len %d pin \'%s\'\n", addr, cp->pin_len, pin);
990ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
991ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
992ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_reply_dump(int level, struct frame *frm)
993ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
994ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	link_key_reply_cp *cp = frm->ptr;
995ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
996ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
997ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
998ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
999bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
100044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s key ", addr);
1001ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 16; i++)
1002a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
1003a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("**");
1004a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		else
1005a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("%2.2X", cp->link_key[i]);
1006ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("\n");
1007ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1008ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1009ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_neg_reply_dump(int level, struct frame *frm)
1010ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1011ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
1012ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
1013ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1014ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1015bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
1016ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s\n", addr);
1017ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1018ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1019b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void user_passkey_reply_dump(int level, struct frame *frm)
1020b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
1021b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	user_passkey_reply_cp *cp = frm->ptr;
1022b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
1023b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1024b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1025b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
1026b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s passkey %d\n", addr, btohl(cp->passkey));
1027b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
1028b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1029b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void remote_oob_data_reply_dump(int level, struct frame *frm)
1030b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
1031b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	remote_oob_data_reply_cp *cp = frm->ptr;
1032b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
1033b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	int i;
1034b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1035b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1036b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
1037b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s\n", addr);
1038b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1039b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1040b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("hash 0x");
1041b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	for (i = 0; i < 16; i++)
1042b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("%02x", cp->hash[i]);
1043b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("\n");
1044b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1045b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1046b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("randomizer 0x");
1047b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	for (i = 0; i < 16; i++)
1048b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			printf("%02x", cp->randomizer[i]);
1049b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("\n");
1050b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
1051b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1052b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void io_capability_reply_dump(int level, struct frame *frm)
1053b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
1054b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	io_capability_reply_cp *cp = frm->ptr;
1055b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
1056b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1057b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1058b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
1059b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s capability 0x%2.2x oob 0x%2.2x auth 0x%2.2x\n",
1060b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann					addr, cp->capability, cp->oob_data,
1061b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann							cp->authentication);
1062b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1063b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1064b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("Capability: %s (OOB data %s)\n",
1065b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			capability2str(cp->capability),
1066b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			cp->oob_data == 0x00 ? "not present" : "available");
1067b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1068b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1069b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("Authentication: %s\n", authentication2str(cp->authentication));
1070b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
1071b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1072ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void set_conn_encrypt_dump(int level, struct frame *frm)
1073ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1074ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	set_conn_encrypt_cp *cp = frm->ptr;
1075ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1076ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1077ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d encrypt 0x%2.2x\n", btohs(cp->handle), cp->encrypt);
1078ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1079ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1080ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void remote_name_req_dump(int level, struct frame *frm)
1081ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1082ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	remote_name_req_cp *cp = frm->ptr;
1083ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t clkoffset = btohs(cp->clock_offset);
1084ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
1085ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1086ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1087bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
108872e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann	printf("bdaddr %s mode %d clkoffset 0x%4.4x%s\n",
108972e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		addr, cp->pscan_rep_mode,
109072e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");
1091ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1092ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
109317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_dump(int level, struct frame *frm)
109417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
109517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	master_link_key_cp *cp = frm->ptr;
109617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
109717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
109817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("flag %d\n", cp->key_flag);
109917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
110017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
110117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_dump(int level, struct frame *frm)
110217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
110317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_remote_ext_features_cp *cp = frm->ptr;
110417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1105e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	p_indent(level, frm);
1106e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	printf("handle %d page %d\n", btohs(cp->handle), cp->page_num);
110717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
110817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1109c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmannstatic inline void setup_sync_conn_dump(int level, struct frame *frm)
1110c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann{
1111c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann	setup_sync_conn_cp *cp = frm->ptr;
1112c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann
1113c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann	p_indent(level, frm);
1114cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly	printf("handle %d voice setting 0x%4.4x ptype 0x%4.4x\n",
1115cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly		btohs(cp->handle), btohs(cp->voice_setting),
1116cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly		btohs(cp->pkt_type));
1117c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann}
1118c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann
1119c7f436764386ca845317b678f3330340ccd838b8Inga Stotlandstatic inline void create_physical_link_dump(int level, struct frame *frm)
1120c7f436764386ca845317b678f3330340ccd838b8Inga Stotland{
1121c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	create_physical_link_cp *cp = frm->ptr;
1122c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	int i;
1123c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1124c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	p_indent(level, frm);
1125c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1126c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("handle %d key length %d key type %d\n",
1127c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		cp->handle, cp->key_length, cp->key_type);
1128c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("key ");
1129c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1130c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	for (i = 0; i < cp->key_length && cp->key_length < 32; i++)
1131c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		printf("%2.2x", cp->key[i]);
1132c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("\n");
1133c7f436764386ca845317b678f3330340ccd838b8Inga Stotland}
1134c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1135c7f436764386ca845317b678f3330340ccd838b8Inga Stotlandstatic inline void create_logical_link_dump(int level, struct frame *frm)
1136c7f436764386ca845317b678f3330340ccd838b8Inga Stotland{
1137c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	create_logical_link_cp *cp = frm->ptr;
1138c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	int i;
1139c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1140c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	p_indent(level, frm);
1141c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1142c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("handle %d\n", cp->handle);
1143c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("tx_flow ");
1144c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	for (i = 0; i < 16; i++)
1145c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		printf("%2.2x", cp->tx_flow[i]);
1146c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("\nrx_flow ");
1147c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	for (i = 0; i < 16; i++)
1148c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		printf("%2.2x", cp->rx_flow[i]);
1149c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("\n");
1150c7f436764386ca845317b678f3330340ccd838b8Inga Stotland}
1151c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1152128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pellystatic inline void accept_sync_conn_req_dump(int level, struct frame *frm)
1153128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly{
1154128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly	accept_sync_conn_req_cp *cp = frm->ptr;
1155128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly	char addr[18];
1156128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly
1157128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly	p_indent(level, frm);
1158128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly	p_ba2str(&cp->bdaddr, addr);
1159128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly	printf("bdaddr %s voice_setting 0x%4.4x pkt_type 0x%4.4x\n",
1160128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly		addr, btohs(cp->voice_setting), btohs(cp->pkt_type));
1161128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly}
1162128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly
11639ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void hold_mode_dump(int level, struct frame *frm)
11649ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{
11659ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	hold_mode_cp *cp = frm->ptr;
11669ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
11679ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	p_indent(level, frm);
11689ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	printf("handle %d max %d min %d\n", btohs(cp->handle),
11699ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			btohs(cp->max_interval), btohs(cp->min_interval));
11709ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann}
11719ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
11729ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void sniff_mode_dump(int level, struct frame *frm)
11739ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{
11749ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	sniff_mode_cp *cp = frm->ptr;
11759ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
11769ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	p_indent(level, frm);
11779ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	printf("handle %d max %d min %d attempt %d timeout %d\n",
11789ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		btohs(cp->handle), btohs(cp->max_interval),
11799ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		btohs(cp->min_interval), btohs(cp->attempt), btohs(cp->timeout));
11809ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann}
11819ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
11824894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmannstatic inline void qos_setup_dump(int level, struct frame *frm)
11834894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann{
11844894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	qos_setup_cp *cp = frm->ptr;
11854894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann
11864894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11874894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("handle %d flags 0x%2.2x\n", btohs(cp->handle), cp->flags);
11884894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann
11894894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11904894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Service type: %d\n", cp->qos.service_type);
11914894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11924894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Token rate: %d\n", btohl(cp->qos.token_rate));
11934894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11944894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Peak bandwith: %d\n", btohl(cp->qos.peak_bandwidth));
11954894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11964894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Latency: %d\n", btohl(cp->qos.latency));
11974894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
11984894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Delay variation: %d\n", btohl(cp->qos.delay_variation));
11994894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann}
12004894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann
1201ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_link_policy_dump(int level, struct frame *frm)
1202ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1203ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_link_policy_cp *cp = frm->ptr;
1204ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t policy = btohs(cp->policy);
1205ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
1206ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1207ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1208ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d policy 0x%2.2x\n", btohs(cp->handle), policy);
1209ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1210ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_lptostr(policy);
1211ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
1212ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1213ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Link policy: %s\n", str);
1214ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
1215ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1216ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1217ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1218f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmannstatic inline void write_default_link_policy_dump(int level, struct frame *frm)
1219f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann{
1220f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	uint16_t policy = btohs(htons(get_u16(frm)));
1221f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	char *str;
1222f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
1223f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	p_indent(level, frm);
1224f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	printf("policy 0x%2.2x\n", policy);
1225f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
1226f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	str = hci_lptostr(policy);
1227f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	if (str) {
1228f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		p_indent(level, frm);
1229f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		printf("Link policy: %s\n", str);
1230f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		free(str);
1231f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	}
1232f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann}
1233f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
12343b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void sniff_subrating_dump(int level, struct frame *frm)
1235120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann{
12363b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	sniff_subrating_cp *cp = frm->ptr;
1237120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
1238120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
1239120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("handle %d\n", btohs(cp->handle));
1240120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
1241120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
1242f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann	printf("max latency %d\n", btohs(cp->max_latency));
1243120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
1244120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
1245120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("min timeout remote %d local %d\n",
1246120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		btohs(cp->min_remote_timeout), btohs(cp->min_local_timeout));
1247120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann}
1248120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
124944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_mask_dump(int level, struct frame *frm)
125044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
125144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	set_event_mask_cp *cp = frm->ptr;
125244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	int i;
125344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
125444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
125544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("Mask: 0x");
125644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	for (i = 0; i < 8; i++)
125744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("%2.2x", cp->mask[i]);
125844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("\n");
125944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
126044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
126144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_flt_dump(int level, struct frame *frm)
126244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
126344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	set_event_flt_cp *cp = frm->ptr;
1264cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann	uint8_t dev_class[3], dev_mask[3];
1265cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann	char addr[18];
126644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
126744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
1268662fd6cd30f3adbfef7c39e2bfcfb1107d96ebbbMarcel Holtmann	printf("type %d condition %d\n", cp->flt_type,
1269662fd6cd30f3adbfef7c39e2bfcfb1107d96ebbbMarcel Holtmann				(cp->flt_type == 0) ? 0 : cp->cond_type);
127044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
127144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	switch (cp->flt_type) {
127244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_CLEAR_ALL:
127351c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
127444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Clear all filters\n");
127544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
127644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_INQ_RESULT:
127751c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
127844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Inquiry result");
127944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		switch (cp->cond_type) {
128044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_ALL:
1281cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" for all devices\n");
1282cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
128344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_CLASS:
1284cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			memcpy(dev_class, cp->condition, 3);
1285cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			memcpy(dev_mask, cp->condition + 3, 3);
1286cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" with class 0x%2.2x%2.2x%2.2x mask 0x%2.2x%2.2x%2.2x\n",
1287cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann				dev_class[2], dev_class[1], dev_class[0],
1288cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann				dev_mask[2], dev_mask[1], dev_mask[0]);
1289cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
129044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_BDADDR:
1291bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str((bdaddr_t *) cp->condition, addr);
1292cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" with bdaddr %s\n", addr);
1293cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
129444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		default:
129544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			printf("\n");
129644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			break;
129744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		}
129844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
129944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_CONN_SETUP:
130051c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
130144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Connection setup");
130244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		switch (cp->cond_type) {
130344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_ALL:
130444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_CLASS:
130544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_BDADDR:
130644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		default:
130744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			printf("\n");
130844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			break;
130944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		}
131044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
131144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
131244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
131344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
131444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_pin_type_dump(int level, struct frame *frm)
131544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
131644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	write_pin_type_cp *cp = frm->ptr;
131744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
131844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
131944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("type %d\n", cp->pin_type);
132044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
132144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
132244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void request_stored_link_key_dump(int level, struct frame *frm)
132344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
132444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_stored_link_key_cp *cp = frm->ptr;
132544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	char addr[18];
132644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
132744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
1328bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
132944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s all %d\n", addr, cp->read_all);
133044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
133144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
133244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void return_link_keys_dump(int level, struct frame *frm)
133344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
133444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	uint8_t num = get_u8(frm);
133544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	uint8_t key[16];
133644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	char addr[18];
133744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	int i, n;
133844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
133944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	for (n = 0; n < num; n++) {
1340bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(frm->ptr, addr);
134144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		memcpy(key, frm->ptr + 6, 16);
134244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
134344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
134444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("bdaddr %s key ", addr);
134544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		for (i = 0; i < 16; i++)
1346a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			if (parser.flags & DUMP_NOVENDOR)
1347a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann				printf("**");
1348a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			else
1349a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann				printf("%2.2X", key[i]);
135044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("\n");
135144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
135244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		frm->ptr += 2;
135344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		frm->len -= 2;
135444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
135544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
135644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
1357ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void change_local_name_dump(int level, struct frame *frm)
1358ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1359ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	change_local_name_cp *cp = frm->ptr;
1360ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char name[249];
1361ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
1362ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1363ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(name, 0, sizeof(name));
1364ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 248 && cp->name[i]; i++)
1365ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (isprint(cp->name[i]))
1366ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = cp->name[i];
1367ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		else
1368ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = '.';
1369ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1370ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1371ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("name \'%s\'\n", name);
1372ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1373ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1374ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_class_of_dev_dump(int level, struct frame *frm)
1375ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1376ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_class_of_dev_cp *cp = frm->ptr;
1377ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1378ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1379ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("class 0x%2.2x%2.2x%2.2x\n",
1380120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			cp->dev_class[2], cp->dev_class[1], cp->dev_class[0]);
1381ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1382ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1383ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_voice_setting_dump(int level, struct frame *frm)
1384ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1385ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_voice_setting_cp *cp = frm->ptr;
1386ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1387ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1388ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("voice setting 0x%4.4x\n", btohs(cp->voice_setting));
1389ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1390ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1391fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void write_current_iac_lap_dump(int level, struct frame *frm)
1392fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{
1393fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	write_current_iac_lap_cp *cp = frm->ptr;
1394fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	int i;
1395fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
1396fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	for (i = 0; i < cp->num_current_iac; i++) {
1397fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		p_indent(level, frm);
1398fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("IAC 0x%2.2x%2.2x%2.2x", cp->lap[i][2], cp->lap[i][1], cp->lap[i][0]);
1399fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		if (cp->lap[i][2] == 0x9e && cp->lap[i][1] == 0x8b) {
1400fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			switch (cp->lap[i][0]) {
1401fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x00:
1402fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (Limited Inquiry Access Code)");
1403fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
1404fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x33:
1405fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (General Inquiry Access Code)");
1406fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
1407fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			}
1408fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		}
1409fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("\n");
1410fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	}
1411fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann}
1412fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
141369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void write_scan_enable_dump(int level, struct frame *frm)
141469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{
141569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t enable = get_u8(frm);
141669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
141769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	p_indent(level, frm);
141869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	printf("enable %d\n", enable);
141969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann}
142069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
1421d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_timeout_dump(int level, struct frame *frm)
1422d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
1423d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	write_page_timeout_cp *cp = frm->ptr;
1424d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1425d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
1426d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("timeout %d\n", btohs(cp->timeout));
1427d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
1428d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1429d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_activity_dump(int level, struct frame *frm)
1430d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
1431d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	write_page_activity_cp *cp = frm->ptr;
1432d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1433d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
1434d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("interval %d window %d\n", btohs(cp->interval), btohs(cp->window));
1435d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
1436d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1437a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void write_inquiry_scan_type_dump(int level, struct frame *frm)
1438a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{
1439a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	write_inquiry_scan_type_cp *cp = frm->ptr;
1440a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
1441a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	p_indent(level, frm);
1442a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	printf("type %d\n", cp->type);
1443a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann}
1444a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
1445f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmannstatic inline void write_inquiry_mode_dump(int level, struct frame *frm)
1446f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann{
1447f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	write_inquiry_mode_cp *cp = frm->ptr;
1448f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann
1449f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	p_indent(level, frm);
1450f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	printf("mode %d\n", cp->mode);
1451f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann}
1452f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann
1453994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmannstatic inline void set_afh_classification_dump(int level, struct frame *frm)
1454994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann{
1455994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	set_afh_classification_cp *cp = frm->ptr;
1456994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	int i;
1457994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann
1458994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	p_indent(level, frm);
1459994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	printf("map 0x");
1460994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	for (i = 0; i < 10; i++)
1461994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann		printf("%02x", cp->map[i]);
1462994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	printf("\n");
1463994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann}
1464994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann
14656eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void write_link_supervision_timeout_dump(int level, struct frame *frm)
14666eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
14676eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	write_link_supervision_timeout_cp *cp = frm->ptr;
14686eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
14696eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
14706eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("handle %d timeout %d\n",
1471d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann				btohs(cp->handle), btohs(cp->timeout));
14726eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
14736eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
14741a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void write_ext_inquiry_response_dump(int level, struct frame *frm)
14751a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{
14761a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	write_ext_inquiry_response_cp *cp = frm->ptr;
14771a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
14781a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	p_indent(level, frm);
14791a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	printf("fec 0x%2.2x\n", cp->fec);
1480f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
1481f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	frm->ptr++;
1482f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	frm->len--;
1483f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
1484e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	ext_inquiry_response_dump(level, frm);
14851a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann}
14861a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
14873b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void write_inquiry_transmit_power_level_dump(int level, struct frame *frm)
14883b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
14893b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	write_inquiry_transmit_power_level_cp *cp = frm->ptr;
14903b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
14913b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
14923b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("level %d\n", cp->level);
14933b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
14943b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
14953b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void write_default_error_data_reporting_dump(int level, struct frame *frm)
14963b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
14973b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	write_default_error_data_reporting_cp *cp = frm->ptr;
14983b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
14993b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
15003b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("reporting %d\n", cp->reporting);
15013b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
15023b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
15033b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void enhanced_flush_dump(int level, struct frame *frm)
15043b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
15053b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	enhanced_flush_cp *cp = frm->ptr;
15063b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
15073b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
15083b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("handle %d type %d\n", btohs(cp->handle), cp->type);
15093b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
15103b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
1511b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void send_keypress_notify_dump(int level, struct frame *frm)
1512b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
1513b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	send_keypress_notify_cp *cp = frm->ptr;
1514b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
1515b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1516b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1517b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
1518b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s type %d\n", addr, cp->type);
1519b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
1520b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
15216eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void request_transmit_power_level_dump(int level, struct frame *frm)
15226eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
15236eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_transmit_power_level_cp *cp = frm->ptr;
15246eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
15256eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
15266eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("handle %d type %d (%s)\n",
1527120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(cp->handle), cp->type,
1528120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					cp->type ? "maximum" : "current");
15296eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
15306eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
153117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void request_local_ext_features_dump(int level, struct frame *frm)
153217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
153317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_ext_features_cp *cp = frm->ptr;
153417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
153517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
153617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("page %d\n", cp->page_num);
153717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
153817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1539f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void request_clock_dump(int level, struct frame *frm)
1540f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
1541f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_clock_cp *cp = frm->ptr;
1542f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1543f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
1544f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("handle %d which %d (%s)\n",
1545120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(cp->handle), cp->which_clock,
1546120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					cp->which_clock ? "piconet" : "local");
1547f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
1548f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
15492315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmannstatic inline void host_buffer_size_dump(int level, struct frame *frm)
15502315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann{
15512315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	host_buffer_size_cp *cp = frm->ptr;
15522315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann
15532315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	p_indent(level, frm);
15542315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	printf("ACL MTU %d:%d SCO MTU %d:%d\n",
15552315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann				btohs(cp->acl_mtu), btohs(cp->acl_max_pkt),
15562315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann				cp->sco_mtu, btohs(cp->sco_max_pkt));
15572315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann}
15582315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann
15591b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmannstatic inline void num_comp_pkts_dump(int level, struct frame *frm)
15601b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann{
15611b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	uint8_t num = get_u8(frm);
15621b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	uint16_t handle, packets;
15631b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	int i;
15641b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
15651b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	for (i = 0; i < num; i++) {
15661b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		handle = btohs(htons(get_u16(frm)));
15671b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		packets = btohs(htons(get_u16(frm)));
15681b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
15691b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		p_indent(level, frm);
15701b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		printf("handle %d packets %d\n", handle, packets);
15711b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	}
15721b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann}
15731b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
1574b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void le_create_connection_dump(int level, struct frame *frm)
1575b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{
1576b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	char addr[18];
1577b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	le_create_connection_cp *cp = frm->ptr;
1578b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
1579b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_indent(level, frm);
1580b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_ba2str(&cp->peer_bdaddr, addr);
1581b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	printf("bdaddr %s type %d\n", addr, cp->peer_bdaddr_type);
1582b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo}
1583b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
158406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_event_mask_dump(int level, struct frame *frm)
158506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
158606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	int i;
158706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_set_event_mask_cp *cp = frm->ptr;
158806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
158906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
159006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("mask 0x");
159106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	for (i = 0; i < 8; i++)
159206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		printf("%.2x", cp->mask[i]);
159306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
159406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf(" (%s)\n", eventmask2str(cp->mask));
159506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
159606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
159706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_random_address_dump(int level, struct frame *frm)
159806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
159906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	char addr[18];
160006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_set_random_address_cp *cp = frm->ptr;
160106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
160206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
160306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_ba2str(&cp->bdaddr, addr);
160406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("bdaddr %s\n", addr);
160506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
160606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
160706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
160806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_advertising_parameters_dump(int level, struct frame *frm)
160906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
161006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	char addr[18];
161106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_set_advertising_parameters_cp *cp = frm->ptr;
161206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
161306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
1614713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins	printf("min %.3fms, max %.3fms\n", btohs(cp->min_interval) * 0.625,
1615713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins			btohs(cp->max_interval) * 0.625);
161606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
161706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
161806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("type 0x%02x (%s) ownbdaddr 0x%02x (%s)\n", cp->advtype,
161906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			evttype2str(cp->advtype), cp->own_bdaddr_type,
162006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			bdaddrtype2str(cp->own_bdaddr_type));
162106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
162206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
162306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_ba2str(&cp->direct_bdaddr, addr);
162406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("directbdaddr 0x%02x (%s) %s\n", cp->direct_bdaddr_type,
162506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			bdaddrtype2str(cp->direct_bdaddr_type), addr);
162606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
162706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
162806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("channelmap 0x%02x filterpolicy 0x%02x (%s)\n",
162906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			cp->chan_map, cp->filter, filterpolicy2str(cp->filter));
163006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
163106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
163206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_scan_parameters_dump(int level, struct frame *frm)
163306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
163406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_set_scan_parameters_cp *cp = frm->ptr;
163506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
163606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
163706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("type 0x%02x (%s)\n", cp->type,
163806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		cp->type == 0x00 ? "passive" : "active");
163906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
164006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
1641713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins	printf("interval %.3fms window %.3fms\n", btohs(cp->interval) * 0.625,
1642713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins		btohs(cp->window) * 0.625);
164306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
164406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
164506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("own address: 0x%02x (%s) policy: %s\n", cp->own_bdaddr_type,
164606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			bdaddrtype2str(cp->own_bdaddr_type),
164706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		(cp->filter == 0x00 ? "All" :
164806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			(cp->filter == 0x01 ? "white list only" : "reserved")));
164906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
165006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
165106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_scan_enable_dump(int level, struct frame *frm)
165206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
165306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_set_scan_enable_cp *cp = frm->ptr;
165406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
165506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
165606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("value 0x%02x (%s)\n", cp->enable,
165706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		(cp->enable == 0x00 ? "scanning disabled" :
165806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		"scanning enabled"));
165906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
166006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
166106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("filter duplicates 0x%02x (%s)\n", cp->filter_dup,
166206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		(cp->filter_dup == 0x00 ? "disabled" : "enabled"));
166306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
166406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
1665d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void command_dump(int level, struct frame *frm)
1666d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1667d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	hci_command_hdr *hdr = frm->ptr;
1668d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(hdr->opcode);
1669d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
1670d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
1671d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1672d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (p_filter(FILT_HCI))
1673d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		return;
1674d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
16757b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
16767b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
167765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
16787b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	p_indent(level, frm);
1679803752117135528b1adebf0fa045596e188a996dMarcel Holtmann	printf("HCI Command: %s (0x%2.2x|0x%4.4x) plen %d\n",
1680120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				opcode2str(opcode), ogf, ocf, hdr->plen);
168165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
168265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->ptr += HCI_COMMAND_HDR_SIZE;
168365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->len -= HCI_COMMAND_HDR_SIZE;
168465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
16857b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD) {
16863b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		if (ocf == 0 && get_manufacturer() == 10) {
16877b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			csr_dump(level + 1, frm);
16887b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			return;
16897b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		}
1690be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	}
1691be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann
16924f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
16934f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		raw_dump(level, frm);
16944f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		return;
16954f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	}
16964f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann
1697ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	switch (ogf) {
1698ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_CTL:
1699ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
1700ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_INQUIRY:
1701ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			inquiry_dump(level + 1, frm);
1702ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1703ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PERIODIC_INQUIRY:
1704ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			periodic_inquiry_dump(level + 1, frm);
1705ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1706ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_INQUIRY_CANCEL:
1707ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_PERIODIC_INQUIRY:
1708ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1709ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CREATE_CONN:
1710ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			create_conn_dump(level + 1, frm);
1711ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1712ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_DISCONNECT:
1713ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			disconnect_dump(level + 1, frm);
1714ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
171590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_CREATE_CONN_CANCEL:
171690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REMOTE_NAME_REQ_CANCEL:
171790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann			bdaddr_command_dump(level + 1, frm);
171890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann			return;
1719128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly		case OCF_ACCEPT_SYNC_CONN_REQ:
1720128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly			accept_sync_conn_req_dump(level + 1, frm);
1721128b7012fb76d7e145c5ed29f4efd24e766fca33Nick Pelly			return;
1722ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ADD_SCO:
1723ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SET_CONN_PTYPE:
1724ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			add_sco_dump(level + 1, frm);
1725acc2322e0bed89e8ada2564359a1a6d293c9d514Marcel Holtmann			return;
1726ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ACCEPT_CONN_REQ:
1727ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			accept_conn_req_dump(level + 1, frm);
1728ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1729ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_REJECT_CONN_REQ:
173090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REJECT_SYNC_CONN_REQ:
1731b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_NEG_REPLY:
1732ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			reject_conn_req_dump(level + 1, frm);
1733ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1734ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_REPLY:
1735ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			pin_code_reply_dump(level + 1, frm);
1736ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1737ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_REPLY:
1738ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			link_key_reply_dump(level + 1, frm);
1739ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1740ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_NEG_REPLY:
1741ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_NEG_REPLY:
1742b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_REPLY:
1743b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_NEG_REPLY:
1744b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_NEG_REPLY:
1745b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_NEG_REPLY:
1746ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			pin_code_neg_reply_dump(level + 1, frm);
1747ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1748b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_REPLY:
1749b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			user_passkey_reply_dump(level + 1, frm);
1750b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1751b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_REPLY:
1752b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			remote_oob_data_reply_dump(level + 1, frm);
1753b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1754b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_REPLY:
1755b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			io_capability_reply_dump(level + 1, frm);
1756b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1757ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SET_CONN_ENCRYPT:
1758ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			set_conn_encrypt_dump(level + 1, frm);
1759ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1760ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_AUTH_REQUESTED:
1761ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CHANGE_CONN_LINK_KEY:
1762ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_REMOTE_FEATURES:
1763ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_REMOTE_VERSION:
1764ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_CLOCK_OFFSET:
176590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_READ_LMP_HANDLE:
1766c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_DISCONNECT_LOGICAL_LINK:
1767ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_command_dump(level + 1, frm);
1768ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
176917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_MASTER_LINK_KEY:
177017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			master_link_key_dump(level + 1, frm);
177117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
177217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_REMOTE_EXT_FEATURES:
177317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_remote_ext_features_dump(level + 1, frm);
177417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
1775ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_REMOTE_NAME_REQ:
1776ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			remote_name_req_dump(level + 1, frm);
1777ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1778c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann		case OCF_SETUP_SYNC_CONN:
1779c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann			setup_sync_conn_dump(level + 1, frm);
1780c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann			return;
1781c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_CREATE_PHYSICAL_LINK:
1782c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_ACCEPT_PHYSICAL_LINK:
1783c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			create_physical_link_dump(level + 1, frm);
1784c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			return;
1785c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_CREATE_LOGICAL_LINK:
1786c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_ACCEPT_LOGICAL_LINK:
1787c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			create_logical_link_dump(level + 1, frm);
1788c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			return;
1789ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1790ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1791ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1792ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_POLICY:
1793ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
17949ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_HOLD_MODE:
17959ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_PARK_MODE:
17969ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			hold_mode_dump(level + 1, frm);
17979ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			return;
17989ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_SNIFF_MODE:
17999ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			sniff_mode_dump(level + 1, frm);
18009ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			return;
1801ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_SNIFF_MODE:
1802ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_PARK_MODE:
1803ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ROLE_DISCOVERY:
1804ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_LINK_POLICY:
1805ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_command_dump(level + 1, frm);
1806ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1807f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_READ_DEFAULT_LINK_POLICY:
1808f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
1809ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SWITCH_ROLE:
1810ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			accept_conn_req_dump(level + 1, frm);
1811ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
18124894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann		case OCF_QOS_SETUP:
18134894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann			qos_setup_dump(level + 1, frm);
18144894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann			return;
1815ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_LINK_POLICY:
1816ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_link_policy_dump(level + 1, frm);
1817ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1818f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_WRITE_DEFAULT_LINK_POLICY:
1819f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			write_default_link_policy_dump(level + 1, frm);
1820f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
18213b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_SNIFF_SUBRATING:
18223b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			sniff_subrating_dump(level + 1, frm);
1823120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			return;
1824ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1825ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1826ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1827ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_HOST_CTL:
1828ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
182944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_RESET:
183044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_CREATE_NEW_UNIT_KEY:
183144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
183244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_MASK:
1833c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_SET_EVENT_MASK_PAGE_2:
183444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			set_event_mask_dump(level + 1, frm);
183544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
183644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_FLT:
183744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			set_event_flt_dump(level + 1, frm);
183844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
183944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_PIN_TYPE:
184044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			write_pin_type_dump(level + 1, frm);
184144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
184244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_STORED_LINK_KEY:
184344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_DELETE_STORED_LINK_KEY:
184444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			request_stored_link_key_dump(level + 1, frm);
184544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
184644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_STORED_LINK_KEY:
184744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return_link_keys_dump(level + 1, frm);
184844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
1849ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CHANGE_LOCAL_NAME:
1850ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			change_local_name_dump(level + 1, frm);
1851ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1852ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_CLASS_OF_DEV:
1853ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_class_of_dev_dump(level + 1, frm);
1854ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1855ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_VOICE_SETTING:
1856ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_voice_setting_dump(level + 1, frm);
1857ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1858fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_CURRENT_IAC_LAP:
1859fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			write_current_iac_lap_dump(level + 1, frm);
1860fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			return;
186169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_SCAN_ENABLE:
186269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_AUTH_ENABLE:
18638583de68ea3be3ada739dcc84d811fc752d45a03Marcel Holtmann		case OCF_SET_CONTROLLER_TO_HOST_FC:
186469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			write_scan_enable_dump(level + 1, frm);
186569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			return;
1866c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT:
1867097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_WRITE_CONN_ACCEPT_TIMEOUT:
1868d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_TIMEOUT:
1869d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			write_page_timeout_dump(level + 1, frm);
1870d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
1871d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_ACTIVITY:
1872d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_INQ_ACTIVITY:
1873d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			write_page_activity_dump(level + 1, frm);
1874d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
1875a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_WRITE_INQUIRY_SCAN_TYPE:
1876a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			write_inquiry_scan_type_dump(level + 1, frm);
1877a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			return;
187869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_ENCRYPT_MODE:
1879f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_INQUIRY_MODE:
1880f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_AFH_MODE:
1881f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			write_inquiry_mode_dump(level + 1, frm);
1882f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			return;
1883994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann		case OCF_SET_AFH_CLASSIFICATION:
1884994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann			set_afh_classification_dump(level + 1, frm);
1885994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann			return;
18866eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_TRANSMIT_POWER_LEVEL:
18876eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			request_transmit_power_level_dump(level + 1, frm);
18886eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
18892315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann		case OCF_HOST_BUFFER_SIZE:
18902315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann			host_buffer_size_dump(level + 1, frm);
18912315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann			return;
18921b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		case OCF_HOST_NUM_COMP_PKTS:
18931b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann			num_comp_pkts_dump(level + 1, frm);
18941b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann			return;
189544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_FLUSH:
18966eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_LINK_SUPERVISION_TIMEOUT:
18973b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_REFRESH_ENCRYPTION_KEY:
1898c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT:
18996eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			generic_command_dump(level + 1, frm);
19006eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
19016eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:
19026eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			write_link_supervision_timeout_dump(level + 1, frm);
19036eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
19041a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_WRITE_EXT_INQUIRY_RESPONSE:
19051a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			write_ext_inquiry_response_dump(level + 1, frm);
19061a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			return;
1907b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_MODE:
1908c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_WRITE_FLOW_CONTROL_MODE:
1909b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			generic_write_mode_dump(level + 1, frm);
1910b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
19113b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL:
19123b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			write_inquiry_transmit_power_level_dump(level + 1, frm);
19133b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
19143b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING:
19153b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			write_default_error_data_reporting_dump(level + 1, frm);
19163b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
19173b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_ENHANCED_FLUSH:
19183b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			enhanced_flush_dump(level + 1, frm);
19193b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
1920b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_SEND_KEYPRESS_NOTIFY:
1921b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			send_keypress_notify_dump(level + 1, frm);
1922b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1923ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1924ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
192517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
192617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case OGF_INFO_PARAM:
192717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		switch (ocf) {
192817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_EXT_FEATURES:
192917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			request_local_ext_features_dump(level + 1, frm);
193017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
193117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		}
1932ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1933f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1934f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	case OGF_STATUS_PARAM:
1935f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		switch (ocf) {
1936f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_LINK_QUALITY:
1937f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_RSSI:
1938f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_AFH_MAP:
1939f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			generic_command_dump(level + 1, frm);
1940f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1941f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_CLOCK:
1942f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			request_clock_dump(level + 1, frm);
1943f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1944f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		}
1945f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		break;
1946b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1947b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case OGF_TESTING_CMD:
1948b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		switch (ocf) {
1949b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_LOOPBACK_MODE:
1950b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE:
1951b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			generic_write_mode_dump(level + 1, frm);
1952b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1953b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		}
1954b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
1955b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
1956b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	case OGF_LE_CTL:
1957b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		switch (ocf) {
195806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_EVENT_MASK:
195906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_set_event_mask_dump(level + 1, frm);
196006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
196106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_BUFFER_SIZE:
196206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_LOCAL_SUPPORTED_FEATURES:
196306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER:
196406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
196506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_RANDOM_ADDRESS:
196606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_set_random_address_dump(level + 1, frm);
196706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
196806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_ADVERTISING_PARAMETERS:
196906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_set_advertising_parameters_dump(level + 1, frm);
197006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
197106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_SCAN_PARAMETERS:
197206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_set_scan_parameters_dump(level + 1, frm);
197306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
197406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_SCAN_ENABLE:
197506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_set_scan_enable_dump(level + 1, frm);
197606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
1977b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		case OCF_LE_CREATE_CONN:
1978b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo			le_create_connection_dump(level + 1, frm);
1979b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo			return;
1980b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		}
1981b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
1982ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1983ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
198465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	raw_dump(level, frm);
198595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
198695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
1987d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void status_response_dump(int level, struct frame *frm)
1988d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1989d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t status = get_u8(frm);
1990d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1991d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
1992d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x\n", status);
1993d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1994d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (status > 0) {
1995d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
1996d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(status));
1997d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
1998d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1999d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	raw_dump(level, frm);
2000d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2001d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2002afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void handle_response_dump(int level, struct frame *frm)
2003afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{
2004afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
2005afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
2006afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	p_indent(level, frm);
2007afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	printf("handle %d\n", handle);
2008afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
2009afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	raw_dump(level, frm);
2010afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann}
2011afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
2012ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void bdaddr_response_dump(int level, struct frame *frm)
2013ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2014ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint8_t status = get_u8(frm);
2015ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
2016ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
2017ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2018ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	frm->ptr += sizeof(bdaddr_t);
2019ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	frm->len -= sizeof(bdaddr_t);
2020ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2021ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2022bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
2023ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x bdaddr %s\n", status, addr);
2024ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2025ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (status > 0) {
2026ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2027ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(status));
2028ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2029ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2030ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	raw_dump(level, frm);
2031ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2032ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2033d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void generic_response_dump(int level, struct frame *frm)
2034d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2035d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t status = get_u8(frm);
2036d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
2037d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2038d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2039d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d\n", status, handle);
2040d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2041d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (status > 0) {
2042d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2043d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(status));
2044d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2045d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2046d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	raw_dump(level, frm);
2047d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2048d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2049b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void status_mode_dump(int level, struct frame *frm)
2050b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
2051b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint8_t status = get_u8(frm);
2052b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint8_t mode = get_u8(frm);
2053b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2054b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
2055b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("status 0x%2.2x mode 0x%2.2x\n", status, mode);
2056b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2057b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	if (status > 0) {
2058b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
2059b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("Error: %s\n", status2str(status));
2060b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
2061b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
2062b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
20636d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmannstatic inline void read_link_policy_dump(int level, struct frame *frm)
20646d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann{
20656d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	read_link_policy_rp *rp = frm->ptr;
20666d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	uint16_t policy = btohs(rp->policy);
20676d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	char *str;
20686d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann
20696d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	p_indent(level, frm);
20706d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	printf("status 0x%2.2x handle %d policy 0x%2.2x\n",
20716d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann				rp->status, btohs(rp->handle), policy);
20726d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann
20736d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	if (rp->status > 0) {
20746d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		p_indent(level, frm);
20756d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
20766d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	} else {
20776d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		str = hci_lptostr(policy);
20786d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		if (str) {
20796d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			p_indent(level, frm);
20806d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			printf("Link policy: %s\n", str);
20816d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			free(str);
20826d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		}
20836d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	}
20846d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann}
20856d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann
2086f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmannstatic inline void read_default_link_policy_dump(int level, struct frame *frm)
2087f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann{
2088f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	uint8_t status = get_u8(frm);
2089f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	uint16_t policy = btohs(htons(get_u16(frm)));
2090f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	char *str;
2091f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
2092f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	p_indent(level, frm);
2093f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	printf("status 0x%2.2x policy 0x%2.2x\n", status, policy);
2094f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
2095f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	if (status > 0) {
2096f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		p_indent(level, frm);
2097f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		printf("Error: %s\n", status2str(status));
2098f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	} else {
2099f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		str = hci_lptostr(policy);
2100f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		if (str) {
2101f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			p_indent(level, frm);
2102f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			printf("Link policy: %s\n", str);
2103f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			free(str);
2104f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		}
2105f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	}
2106f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann}
2107f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
210844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_pin_type_dump(int level, struct frame *frm)
210944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
211044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_pin_type_rp *rp = frm->ptr;
211144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
211244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
211344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x type %d\n", rp->status, rp->pin_type);
211444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
211544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
211644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
211744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
211844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
211944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
212044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
212144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_stored_link_key_dump(int level, struct frame *frm)
212244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
212344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_stored_link_key_rp *rp = frm->ptr;
212444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
212544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
212644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x max %d num %d\n",
2127120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, rp->max_keys, rp->num_keys);
212844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
212944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
213044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
213144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
213244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
213344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
213444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
213544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_stored_link_key_dump(int level, struct frame *frm)
213644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
213744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	write_stored_link_key_rp *rp = frm->ptr;
213844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
213944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
214044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x written %d\n", rp->status, rp->num_keys);
214144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
214244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
214344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
214444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
214544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
214644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
214744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
214844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void delete_stored_link_key_dump(int level, struct frame *frm)
214944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
215044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	delete_stored_link_key_rp *rp = frm->ptr;
215144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
215244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
215344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x deleted %d\n", rp->status, btohs(rp->num_keys));
215444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
215544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
215644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
215744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
215844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
215944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
216044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
2161ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_name_dump(int level, struct frame *frm)
2162ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2163ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_name_rp *rp = frm->ptr;
2164ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char name[249];
2165ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
2166ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2167ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(name, 0, sizeof(name));
2168ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 248 && rp->name[i]; i++)
2169ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (isprint(rp->name[i]))
2170ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = rp->name[i];
2171ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		else
2172ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = '.';
2173ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2174ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2175ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x name \'%s\'\n", rp->status, name);
2176ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2177ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2178ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2179ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2180ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2181ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2182ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2183ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_class_of_dev_dump(int level, struct frame *frm)
2184ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2185ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_class_of_dev_rp *rp = frm->ptr;
2186ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2187ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2188ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x class 0x%2.2x%2.2x%2.2x\n", rp->status,
2189120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]);
2190ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2191ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2192ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2193ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2194ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2195ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2196ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2197ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_voice_setting_dump(int level, struct frame *frm)
2198ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2199ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_voice_setting_rp *rp = frm->ptr;
2200ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2201ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2202ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x voice setting 0x%4.4x\n",
2203120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->status, btohs(rp->voice_setting));
2204ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2205ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2206ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2207ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2208ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2209ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2210ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2211fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void read_current_iac_lap_dump(int level, struct frame *frm)
2212fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{
2213fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	read_current_iac_lap_rp *rp = frm->ptr;
2214fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	int i;
2215fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
2216fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	for (i = 0; i < rp->num_current_iac; i++) {
2217fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		p_indent(level, frm);
2218fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("IAC 0x%2.2x%2.2x%2.2x", rp->lap[i][2], rp->lap[i][1], rp->lap[i][0]);
2219fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		if (rp->lap[i][2] == 0x9e && rp->lap[i][1] == 0x8b) {
2220fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			switch (rp->lap[i][0]) {
2221fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x00:
2222fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (Limited Inquiry Access Code)");
2223fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
2224fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x33:
2225fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (General Inquiry Access Code)");
2226fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
2227fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			}
2228fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		}
2229fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("\n");
2230fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	}
2231fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann}
2232fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
223369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void read_scan_enable_dump(int level, struct frame *frm)
223469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{
223569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t status = get_u8(frm);
223669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t enable = get_u8(frm);
223769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
223869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	p_indent(level, frm);
223969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	printf("status 0x%2.2x enable %d\n", status, enable);
224069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
224169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	if (status > 0) {
224269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		p_indent(level, frm);
224369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		printf("Error: %s\n", status2str(status));
224469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	}
224569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann}
224669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
2247d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_timeout_dump(int level, struct frame *frm)
2248d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
2249d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	read_page_timeout_rp *rp = frm->ptr;
2250d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2251d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
2252d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("status 0x%2.2x timeout %d\n", rp->status, btohs(rp->timeout));
2253d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2254d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	if (rp->status > 0) {
2255d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		p_indent(level, frm);
2256d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2257d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	}
2258d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
2259d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2260d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_activity_dump(int level, struct frame *frm)
2261d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
2262d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	read_page_activity_rp *rp = frm->ptr;
2263d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2264d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
2265d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("status 0x%2.2x interval %d window %d\n",
2266120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->status, btohs(rp->interval), btohs(rp->window));
2267d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2268d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	if (rp->status > 0) {
2269d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		p_indent(level, frm);
2270d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2271d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	}
2272d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
2273d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2274a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void read_inquiry_scan_type_dump(int level, struct frame *frm)
2275a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{
2276a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	read_inquiry_scan_type_rp *rp = frm->ptr;
2277a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
2278a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	p_indent(level, frm);
2279a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	printf("status 0x%2.2x type %d\n", rp->status, rp->type);
2280a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
2281a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	if (rp->status > 0) {
2282a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		p_indent(level, frm);
2283a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2284a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	}
2285a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann}
2286a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
22876eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_inquiry_mode_dump(int level, struct frame *frm)
22886eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
22896eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_inquiry_mode_rp *rp = frm->ptr;
22906eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
22916eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
22926eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x mode %d\n", rp->status, rp->mode);
22936eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
22946eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
22956eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
22966eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
22976eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
22986eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
22996eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
23006eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_link_supervision_timeout_dump(int level, struct frame *frm)
23016eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
23026eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_link_supervision_timeout_rp *rp = frm->ptr;
23036eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
23046eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
23056eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x handle %d timeout %d\n",
2306d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann			rp->status, btohs(rp->handle), btohs(rp->timeout));
23076eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
23086eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
23096eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
23106eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
23116eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
23126eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
23136eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
23146eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_transmit_power_level_dump(int level, struct frame *frm)
23156eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
23166eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_transmit_power_level_rp *rp = frm->ptr;
23176eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
23186eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
23196eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x handle %d level %d\n",
2320120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->level);
23216eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
23226eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
23236eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
23246eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
23256eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
23266eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
23276eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
23281a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void read_ext_inquiry_response_dump(int level, struct frame *frm)
23291a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{
23301a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	read_ext_inquiry_response_rp *rp = frm->ptr;
23311a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
23321a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	p_indent(level, frm);
23331a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	printf("status 0x%2.2x fec 0x%2.2x\n", rp->status, rp->fec);
23341a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
23351a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	if (rp->status > 0) {
23361a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		p_indent(level, frm);
23371a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2338f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	} else {
2339f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann		frm->ptr += 2;
2340f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann		frm->len -= 2;
2341f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
2342e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		ext_inquiry_response_dump(level, frm);
23431a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	}
23441a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann}
23451a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
23463b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void read_inquiry_transmit_power_level_dump(int level, struct frame *frm)
23473b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
23483b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	read_inquiry_transmit_power_level_rp *rp = frm->ptr;
23493b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
23503b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
23513b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("status 0x%2.2x level %d\n", rp->status, rp->level);
23523b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
23533b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	if (rp->status > 0) {
23543b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		p_indent(level, frm);
23553b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
23563b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	}
23573b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
23583b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
23593b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void read_default_error_data_reporting_dump(int level, struct frame *frm)
23603b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
23613b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	read_default_error_data_reporting_rp *rp = frm->ptr;
23623b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
23633b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
23643b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("status 0x%2.2x reporting %d\n", rp->status, rp->reporting);
23653b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
23663b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	if (rp->status > 0) {
23673b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		p_indent(level, frm);
23683b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
23693b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	}
23703b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
23713b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
2372b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void read_local_oob_data_dump(int level, struct frame *frm)
2373b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
2374b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	read_local_oob_data_rp *rp = frm->ptr;
2375b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	int i;
2376b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2377b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
2378b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2379b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2380b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	if (rp->status > 0) {
2381b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
2382b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2383b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	} else {
2384b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
2385b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("hash 0x");
2386b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		for (i = 0; i < 16; i++)
2387b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			printf("%02x", rp->hash[i]);
2388b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("\n");
2389b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2390b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
2391b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("randomizer 0x");
2392b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		for (i = 0; i < 16; i++)
2393b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			printf("%02x", rp->randomizer[i]);
2394b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("\n");
2395b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
2396b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
2397b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2398ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_version_dump(int level, struct frame *frm)
2399ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2400ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_version_rp *rp = frm->ptr;
2401ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t manufacturer = btohs(rp->manufacturer);
2402ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2403ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2404ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2405ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2406ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2407ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2408ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2409ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2410ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
24111a5f2bff835728b9df12114adf87c704a1e9b6b8Marcel Holtmann		printf("HCI Version: %s (0x%x) HCI Revision: 0x%x\n",
2412120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					hci_vertostr(rp->hci_ver),
2413120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->hci_ver, btohs(rp->hci_rev));
2414ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2415ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n",
2416120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					lmp_vertostr(rp->lmp_ver),
2417120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->lmp_ver, btohs(rp->lmp_subver));
2418ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2419ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Manufacturer: %s (%d)\n",
2420120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				bt_compidtostr(manufacturer), manufacturer);
2421ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2422ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2423ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
242417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_commands_dump(int level, struct frame *frm)
242517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
242617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_commands_rp *rp = frm->ptr;
242717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i, max = 0;
242817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
242917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
243017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
243117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
243217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (rp->status > 0) {
243317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
243417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
243517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
243617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 64; i++)
243717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			if (rp->commands[i])
243817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann				max = i + 1;
243917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
244017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Commands: ");
244117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < (max > 32 ? 32 : max); i++)
244217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("%2.2x", rp->commands[i]);
244317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
244417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		if (max > 32) {
244517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			p_indent(level, frm);
244617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("          ");
244717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			for (i = 32; i < max; i++)
244817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann				printf("%2.2x", rp->commands[i]);
244917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("\n");
245017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		}
245117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
245217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
245317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
2454ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_features_dump(int level, struct frame *frm)
2455ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2456ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_features_rp *rp = frm->ptr;
2457ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
2458ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2459ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2460ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2461ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2462ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2463ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2464ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2465ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2466ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2467ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Features:");
2468ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		for (i = 0; i < 8; i++)
2469ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf(" 0x%2.2x", rp->features[i]);
2470ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("\n");
2471ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2472ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2473ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
247417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_ext_features_dump(int level, struct frame *frm)
247517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
247617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_ext_features_rp *rp = frm->ptr;
247717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i;
247817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
247917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
248017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x page %d max %d\n",
248117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		rp->status, rp->page_num, rp->max_page_num);
248217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
248317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (rp->status > 0) {
248417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
248517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
248617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
248717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
248817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Features:");
248917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 8; i++)
249017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			 printf(" 0x%2.2x", rp->features[i]);
249117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
249217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
249317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
249417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
2495ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_buffer_size_dump(int level, struct frame *frm)
2496ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2497ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_buffer_size_rp *rp = frm->ptr;
2498ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2499ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2500ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2501ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2502ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2503ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2504ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2505ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2506ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2507ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("ACL MTU %d:%d SCO MTU %d:%d\n",
2508120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				btohs(rp->acl_mtu), btohs(rp->acl_max_pkt),
2509120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->sco_mtu, btohs(rp->sco_max_pkt));
2510ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2511ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2512ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2513f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_link_quality_dump(int level, struct frame *frm)
2514f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2515f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_link_quality_rp *rp = frm->ptr;
2516f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2517f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2518f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d lq %d\n",
2519120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->status, btohs(rp->handle), rp->link_quality);
2520f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2521f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2522f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2523f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2524f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2525f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2526f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2527f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_rssi_dump(int level, struct frame *frm)
2528f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2529f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_rssi_rp *rp = frm->ptr;
2530f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2531f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2532f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d rssi %d\n",
2533120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->rssi);
2534f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2535f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2536f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2537f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2538f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2539f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2540f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2541f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_afh_map_dump(int level, struct frame *frm)
2542f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2543f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_afh_map_rp *rp = frm->ptr;
2544f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	int i;
2545f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2546f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2547f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d mode %d\n",
2548120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->mode);
2549f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2550f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2551f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2552f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2553f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	} else {
2554f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2555f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("AFH map: 0x");
2556f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		for (i = 0; i < 10; i++)
2557f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			printf("%2.2x", rp->map[i]);
2558f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("\n");
2559f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2560f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2561f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2562f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_clock_dump(int level, struct frame *frm)
2563f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2564f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_clock_rp *rp = frm->ptr;
2565f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2566f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2567f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d clock 0x%4.4x accuracy %d\n",
2568120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->status, btohs(rp->handle),
2569120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohl(rp->clock), btohs(rp->accuracy));
2570f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2571f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2572f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2573f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2574f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2575f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2576f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
257785478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void read_local_amp_info_dump(int level, struct frame *frm)
257885478602978104edbd412a87aff926c8f5311337Inga Stotland{
257985478602978104edbd412a87aff926c8f5311337Inga Stotland	read_local_amp_info_rp *rp = frm->ptr;
258085478602978104edbd412a87aff926c8f5311337Inga Stotland
258185478602978104edbd412a87aff926c8f5311337Inga Stotland	p_indent(level, frm);
258285478602978104edbd412a87aff926c8f5311337Inga Stotland	printf("status 0x%2.2x amp status 0x%2.2x\n",
258385478602978104edbd412a87aff926c8f5311337Inga Stotland			rp->status, rp->amp_status);
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		p_indent(level, frm);
258985478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("total bandwidth %d, max guaranteed bandwidth %d\n",
259085478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->total_bandwidth),
259185478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->max_guaranteed_bandwidth));
259285478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
259385478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("min latency %d, max PDU %d, controller type 0x%2.2x\n",
259485478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->min_latency), btohl(rp->max_pdu_size),
259585478602978104edbd412a87aff926c8f5311337Inga Stotland			rp->controller_type);
259685478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
259785478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("pal caps 0x%4.4x, max assoc len %d\n",
259885478602978104edbd412a87aff926c8f5311337Inga Stotland			btohs(rp->pal_caps), btohs(rp->max_amp_assoc_length));
259985478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
260085478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("max flush timeout %d, best effort flush timeout %d\n",
260185478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->max_flush_timeout),
260285478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->best_effort_flush_timeout));
260385478602978104edbd412a87aff926c8f5311337Inga Stotland	}
260485478602978104edbd412a87aff926c8f5311337Inga Stotland}
260585478602978104edbd412a87aff926c8f5311337Inga Stotland
260685478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void read_local_amp_assoc_dump(int level, struct frame *frm)
260785478602978104edbd412a87aff926c8f5311337Inga Stotland{
260885478602978104edbd412a87aff926c8f5311337Inga Stotland	read_local_amp_assoc_rp *rp = frm->ptr;
260985478602978104edbd412a87aff926c8f5311337Inga Stotland	uint16_t len = btohs(rp->length);
261085478602978104edbd412a87aff926c8f5311337Inga Stotland	int i;
261185478602978104edbd412a87aff926c8f5311337Inga Stotland
261285478602978104edbd412a87aff926c8f5311337Inga Stotland	p_indent(level, frm);
261385478602978104edbd412a87aff926c8f5311337Inga Stotland	printf("status 0x%2.2x handle 0x%2.2x length %d\n",
261485478602978104edbd412a87aff926c8f5311337Inga Stotland			rp->status, rp->handle, len);
261585478602978104edbd412a87aff926c8f5311337Inga Stotland	if (rp->status > 0) {
261685478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
261785478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("Error: %s\n", status2str(rp->status));
261885478602978104edbd412a87aff926c8f5311337Inga Stotland	} else {
261985478602978104edbd412a87aff926c8f5311337Inga Stotland		for (i = 0; i < len; i++) {
262085478602978104edbd412a87aff926c8f5311337Inga Stotland			if (!(i % 16)) {
262185478602978104edbd412a87aff926c8f5311337Inga Stotland				printf("\n");
262285478602978104edbd412a87aff926c8f5311337Inga Stotland				p_indent(level, frm);
262385478602978104edbd412a87aff926c8f5311337Inga Stotland			}
262485478602978104edbd412a87aff926c8f5311337Inga Stotland			printf("%2.2x ", rp->fragment[i]);
262585478602978104edbd412a87aff926c8f5311337Inga Stotland		}
262685478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("\n");
262785478602978104edbd412a87aff926c8f5311337Inga Stotland	}
262885478602978104edbd412a87aff926c8f5311337Inga Stotland}
262985478602978104edbd412a87aff926c8f5311337Inga Stotland
263085478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void write_remote_amp_assoc_dump(int level, struct frame *frm)
263185478602978104edbd412a87aff926c8f5311337Inga Stotland{
263285478602978104edbd412a87aff926c8f5311337Inga Stotland	write_remote_amp_assoc_rp *rp = frm->ptr;
263385478602978104edbd412a87aff926c8f5311337Inga Stotland
263485478602978104edbd412a87aff926c8f5311337Inga Stotland	p_indent(level, frm);
263585478602978104edbd412a87aff926c8f5311337Inga Stotland	printf("status 0x%2.2x handle 0x%2.2x\n", rp->status, rp->handle);
263685478602978104edbd412a87aff926c8f5311337Inga Stotland	if (rp->status > 0) {
263785478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
263885478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("Error: %s\n", status2str(rp->status));
263985478602978104edbd412a87aff926c8f5311337Inga Stotland	}
264085478602978104edbd412a87aff926c8f5311337Inga Stotland}
264185478602978104edbd412a87aff926c8f5311337Inga Stotland
264206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_read_buffer_size_response_dump(int level, struct frame *frm)
264306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
264406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_read_buffer_size_rp *rp = frm->ptr;
264506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
264606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
264706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("status 0x%2.2x pktlen 0x%4.4x maxpkt 0x%2.2x\n", rp->status,
264806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			rp->pkt_len, rp->max_pkt);
264906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
265006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	if (rp->status > 0) {
265106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		p_indent(level, frm);
265206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		printf("Error: %s\n", status2str(rp->status));
265306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	}
265406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
265506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
265606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_read_local_supported_features_dump(int level, struct frame *frm)
265706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
265806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	int i;
265906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_read_local_supported_features_rp *rp = frm->ptr;
266006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
266106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
266206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("status 0x%2.2x features 0x", rp->status);
266306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	for (i = 0; i < 8; i++)
266406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		printf("%2.2x", rp->features[i]);
266506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf(" (%s)\n", lefeatures2str(rp->features));
266606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
266706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	if (rp->status > 0) {
266806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		p_indent(level, frm);
266906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		printf("Error: %s\n", status2str(rp->status));
267006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	}
267106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
267206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
267306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_read_advertising_channel_tx_power_dump(int level, struct frame *frm)
267406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{
267506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	le_read_advertising_channel_tx_power_rp *rp = frm->ptr;
267606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
267706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	p_indent(level, frm);
267806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	printf("status 0x%2.2x level 0x%x (dBm)\n", rp->status, rp->level);
267906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
268006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	if (rp->status > 0) {
268106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		p_indent(level, frm);
268206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		printf("Error: %s\n", status2str(rp->status));
268306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	}
268406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins}
268506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
2686d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_complete_dump(int level, struct frame *frm)
2687d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2688d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_cmd_complete *evt = frm->ptr;
2689d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(evt->opcode);
2690d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
2691d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
2692d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
26937b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
26947b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
26957b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
2696d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2697d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("%s (0x%2.2x|0x%4.4x) ncmd %d\n",
2698120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				opcode2str(opcode), ogf, ocf, evt->ncmd);
2699d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2700d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	frm->ptr += EVT_CMD_COMPLETE_SIZE;
2701d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	frm->len -= EVT_CMD_COMPLETE_SIZE;
2702d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
27034f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
27044f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		raw_dump(level, frm);
27054f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		return;
27064f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	}
27074f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann
2708d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	switch (ogf) {
2709ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_CTL:
2710ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
271117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_INQUIRY_CANCEL:
271217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_PERIODIC_INQUIRY:
271317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_EXIT_PERIODIC_INQUIRY:
2714d51f2017d006ab5e9ec6f187142ae2ae1cffff8eMarcel Holtmann		case OCF_READ_REMOTE_EXT_FEATURES:
271517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			status_response_dump(level, frm);
271617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
271790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_CREATE_CONN_CANCEL:
271890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REMOTE_NAME_REQ_CANCEL:
2719ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_REPLY:
2720ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_REPLY:
2721ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_NEG_REPLY:
2722ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_NEG_REPLY:
2723b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_REPLY:
2724b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_NEG_REPLY:
2725b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_REPLY:
2726b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_NEG_REPLY:
2727b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_REPLY:
2728b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_NEG_REPLY:
2729b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_REPLY:
2730b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_NEG_REPLY:
2731ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bdaddr_response_dump(level, frm);
2732ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2733ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
273417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2735ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2736ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_POLICY:
2737ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
27386d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		case OCF_READ_LINK_POLICY:
27396d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			read_link_policy_dump(level, frm);
27406d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			return;
2741ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_LINK_POLICY:
27423b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_SNIFF_SUBRATING:
2743ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_response_dump(level, frm);
2744ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2745f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_READ_DEFAULT_LINK_POLICY:
2746f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			read_default_link_policy_dump(level, frm);
2747f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
2748f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_WRITE_DEFAULT_LINK_POLICY:
2749f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			status_response_dump(level, frm);
2750f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
2751ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
275217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2753ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2754d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_HOST_CTL:
2755d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
275644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_PIN_TYPE:
275744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			read_pin_type_dump(level, frm);
275844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
275944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_STORED_LINK_KEY:
276044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			read_stored_link_key_dump(level, frm);
276144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
276244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_STORED_LINK_KEY:
276344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			write_stored_link_key_dump(level, frm);
276444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
276544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_DELETE_STORED_LINK_KEY:
276644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			delete_stored_link_key_dump(level, frm);
276744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
2768d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_NAME:
2769ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_name_dump(level, frm);
2770ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2771ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_CLASS_OF_DEV:
2772ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_class_of_dev_dump(level, frm);
2773ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2774ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_VOICE_SETTING:
2775ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_voice_setting_dump(level, frm);
2776ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2777fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_READ_CURRENT_IAC_LAP:
2778fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			read_current_iac_lap_dump(level, frm);
2779fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			return;
278069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_SCAN_ENABLE:
278169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_AUTH_ENABLE:
278269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			read_scan_enable_dump(level, frm);
278369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			return;
2784097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_READ_CONN_ACCEPT_TIMEOUT:
2785d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_PAGE_TIMEOUT:
278685478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_LOGICAL_LINK_ACCEPT_TIMEOUT:
2787d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			read_page_timeout_dump(level, frm);
2788d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
2789d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_PAGE_ACTIVITY:
2790d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_INQ_ACTIVITY:
2791d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			read_page_activity_dump(level, frm);
2792d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
2793a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_READ_INQUIRY_SCAN_TYPE:
2794a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			read_inquiry_scan_type_dump(level, frm);
2795a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			return;
279669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_ENCRYPT_MODE:
2797f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_READ_INQUIRY_MODE:
2798f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_READ_AFH_MODE:
2799f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			read_inquiry_mode_dump(level, frm);
2800f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			return;
28016eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_LINK_SUPERVISION_TIMEOUT:
28026eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			read_link_supervision_timeout_dump(level, frm);
28036eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
28046eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_TRANSMIT_POWER_LEVEL:
28056eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			read_transmit_power_level_dump(level, frm);
28066eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
28071a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_READ_EXT_INQUIRY_RESPONSE:
28081a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			read_ext_inquiry_response_dump(level, frm);
28091a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			return;
28103b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL:
28113b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			read_inquiry_transmit_power_level_dump(level, frm);
28123b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
28133b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_READ_DEFAULT_ERROR_DATA_REPORTING:
28143b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			read_default_error_data_reporting_dump(level, frm);
28153b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
2816b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_READ_LOCAL_OOB_DATA:
2817b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			read_local_oob_data_dump(level, frm);
2818b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
2819b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_READ_SIMPLE_PAIRING_MODE:
2820c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_READ_FLOW_CONTROL_MODE:
2821b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			status_mode_dump(level, frm);
2822b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
282344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_FLUSH:
28246eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:
28256eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			generic_response_dump(level, frm);
28266eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
282744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_RESET:
282844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_MASK:
282944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_FLT:
283044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_PIN_TYPE:
283144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_CREATE_NEW_UNIT_KEY:
28321577526370e596583b15d68940c24e975e62a502Marcel Holtmann		case OCF_CHANGE_LOCAL_NAME:
2833f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_CLASS_OF_DEV:
2834f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_VOICE_SETTING:
2835fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_CURRENT_IAC_LAP:
283669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_SCAN_ENABLE:
283769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_AUTH_ENABLE:
283869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_ENCRYPT_MODE:
2839097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_WRITE_CONN_ACCEPT_TIMEOUT:
2840d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_TIMEOUT:
2841d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_ACTIVITY:
2842d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_INQ_ACTIVITY:
2843a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_WRITE_INQUIRY_SCAN_TYPE:
2844fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_INQUIRY_MODE:
2845fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_AFH_MODE:
2846d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_SET_AFH_CLASSIFICATION:
28471a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_WRITE_EXT_INQUIRY_RESPONSE:
2848b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_MODE:
28493b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL:
28503b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING:
28518583de68ea3be3ada739dcc84d811fc752d45a03Marcel Holtmann		case OCF_SET_CONTROLLER_TO_HOST_FC:
28522315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann		case OCF_HOST_BUFFER_SIZE:
2853b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REFRESH_ENCRYPTION_KEY:
2854b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_SEND_KEYPRESS_NOTIFY:
285585478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT:
285685478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_SET_EVENT_MASK_PAGE_2:
2857c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_WRITE_LOCATION_DATA:
285885478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_FLOW_CONTROL_MODE:
285985478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT:
286085478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_BEST_EFFORT_FLUSH_TIMEOUT:
2861d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			status_response_dump(level, frm);
2862ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2863d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
286417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2865d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2866d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_INFO_PARAM:
2867d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
2868d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_VERSION:
2869ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_version_dump(level, frm);
2870ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
287117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_COMMANDS:
287217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_local_commands_dump(level, frm);
287317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
2874d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_FEATURES:
2875ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_features_dump(level, frm);
2876ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
287717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_EXT_FEATURES:
287817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_local_ext_features_dump(level, frm);
287917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
2880d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_BUFFER_SIZE:
2881ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_buffer_size_dump(level, frm);
2882ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2883d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_BD_ADDR:
2884ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bdaddr_response_dump(level, frm);
2885ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2886d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
288717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2888d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2889d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_STATUS_PARAM:
2890d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
2891d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_FAILED_CONTACT_COUNTER:
2892d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_RESET_FAILED_CONTACT_COUNTER:
2893f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			status_response_dump(level, frm);
2894f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2895d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LINK_QUALITY:
2896f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_link_quality_dump(level, frm);
2897f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2898d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_RSSI:
2899f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_rssi_dump(level, frm);
2900f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2901d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_AFH_MAP:
2902f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_afh_map_dump(level, frm);
2903f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2904d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_CLOCK:
2905f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_clock_dump(level, frm);
2906ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
290785478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_LOCAL_AMP_INFO:
290885478602978104edbd412a87aff926c8f5311337Inga Stotland			read_local_amp_info_dump(level, frm);
290985478602978104edbd412a87aff926c8f5311337Inga Stotland			return;
291085478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_LOCAL_AMP_ASSOC:
291185478602978104edbd412a87aff926c8f5311337Inga Stotland			read_local_amp_assoc_dump(level, frm);
291285478602978104edbd412a87aff926c8f5311337Inga Stotland			return;
291385478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_REMOTE_AMP_ASSOC:
291485478602978104edbd412a87aff926c8f5311337Inga Stotland			write_remote_amp_assoc_dump(level, frm);
291585478602978104edbd412a87aff926c8f5311337Inga Stotland			return;
2916d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
291717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2918b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2919b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case OGF_TESTING_CMD:
2920b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		switch (ocf) {
2921b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_READ_LOOPBACK_MODE:
2922b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			status_mode_dump(level, frm);
2923b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
2924b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_LOOPBACK_MODE:
2925b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_ENABLE_DEVICE_UNDER_TEST_MODE:
2926b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE:
2927b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			status_response_dump(level, frm);
2928b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
2929b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		}
2930b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
293106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins
293206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins	case OGF_LE_CTL:
293306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		switch (ocf) {
293406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_EVENT_MASK:
293506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_RANDOM_ADDRESS:
293606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_ADVERTISING_PARAMETERS:
293706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_ADVERTISING_DATA:
293806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_SCAN_RESPONSE_DATA:
293906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_ADVERTISE_ENABLE:
294006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_SCAN_PARAMETERS:
294106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_SCAN_ENABLE:
294206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_CREATE_CONN:
294306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_CLEAR_WHITE_LIST:
294406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_ADD_DEVICE_TO_WHITE_LIST:
294506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST:
294606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION:
294706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_RECEIVER_TEST:
294806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_TRANSMITTER_TEST:
294906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			status_response_dump(level, frm);
295006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
295106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_BUFFER_SIZE:
295206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_read_buffer_size_response_dump(level, frm);
295306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
295406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_LOCAL_SUPPORTED_FEATURES:
295506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_read_local_supported_features_dump(level, frm);
295606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
295706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		case OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER:
295806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			le_read_advertising_channel_tx_power_dump(level, frm);
295906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins			return;
296006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		}
296106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins		break;
2962d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2963ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2964ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	raw_dump(level, frm);
2965d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2966d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2967d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_status_dump(int level, struct frame *frm)
2968d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2969d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_cmd_status *evt = frm->ptr;
2970d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(evt->opcode);
29717b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
29727b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
29737b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
29747b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
29757b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
2976d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2977d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2978d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("%s (0x%2.2x|0x%4.4x) status 0x%2.2x ncmd %d\n",
29797b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			opcode2str(opcode), ogf, ocf, evt->status, evt->ncmd);
2980d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2981d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2982d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2983d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2984d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2985d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2986d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2987afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void hardware_error_dump(int level, struct frame *frm)
2988afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{
2989afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	evt_hardware_error *evt = frm->ptr;
2990afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
2991afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	p_indent(level, frm);
2992afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	printf("code %d\n", evt->code);
2993afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann}
2994afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
2995d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_dump(int level, struct frame *frm)
2996d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2997d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t num = get_u8(frm);
2998b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	char addr[18];
2999d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
3000d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3001d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	for (i = 0; i < num; i++) {
3002d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inquiry_info *info = frm->ptr;
3003d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3004bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(&info->bdaddr, addr);
3005d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3006d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
300772e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x\n",
300872e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann			addr, info->pscan_rep_mode, btohs(info->clock_offset),
300972e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann			info->dev_class[2], info->dev_class[1], info->dev_class[0]);
3010d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3011d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		frm->ptr += INQUIRY_INFO_SIZE;
3012d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		frm->len -= INQUIRY_INFO_SIZE;
3013d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3014d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3015d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3016d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_complete_dump(int level, struct frame *frm)
3017d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3018d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_conn_complete *evt = frm->ptr;
3019d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18];
3020d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3021bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3022d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3023d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
3024d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d bdaddr %s type %s encrypt 0x%2.2x\n",
3025120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			evt->status, btohs(evt->handle), addr,
3026fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann			linktype2str(evt->link_type), evt->encr_mode);
3027d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3028d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
3029d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
3030d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3031d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3032d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3033d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3034d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_request_dump(int level, struct frame *frm)
3035d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3036d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_conn_request *evt = frm->ptr;
3037d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18];
3038d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3039bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3040d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3041d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
3042d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("bdaddr %s class 0x%2.2x%2.2x%2.2x type %s\n",
3043120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			addr, evt->dev_class[2], evt->dev_class[1],
3044fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann			evt->dev_class[0], linktype2str(evt->link_type));
3045d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3046d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3047d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void disconn_complete_dump(int level, struct frame *frm)
3048d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3049d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_disconn_complete *evt = frm->ptr;
3050d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3051d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
3052d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d reason 0x%2.2x\n",
3053120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->reason);
3054d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3055d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
3056d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
3057d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3058d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	} else if (evt->reason > 0) {
3059d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
3060d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Reason: %s\n", status2str(evt->reason));
3061d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3062d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3063d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3064d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void remote_name_req_complete_dump(int level, struct frame *frm)
3065d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3066d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_remote_name_req_complete *evt = frm->ptr;
3067d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18], name[249];
3068d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
3069d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3070bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3071d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3072d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	memset(name, 0, sizeof(name));
3073d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	for (i = 0; i < 248 && evt->name[i]; i++)
3074d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		if (isprint(evt->name[i]))
3075d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			name[i] = evt->name[i];
3076d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		else
3077d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			name[i] = '.';
3078d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3079d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
3080d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x bdaddr %s name '%s'\n", evt->status, addr, name);
3081d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3082d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
3083d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
3084d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3085d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3086d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3087d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
308817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_complete_dump(int level, struct frame *frm)
308917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
309017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	evt_master_link_key_complete *evt = frm->ptr;
309117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
309217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
309317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x handle %d flag %d\n",
3094120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->key_flag);
309517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
309617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (evt->status > 0) {
309717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
309817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
309917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
310017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
310117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
3102d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void encrypt_change_dump(int level, struct frame *frm)
3103d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3104d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_encrypt_change *evt = frm->ptr;
3105d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3106d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
3107d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d encrypt 0x%2.2x\n",
3108120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->encrypt);
3109d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3110d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
3111d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
3112d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3113d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3114d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3115d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3116ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_features_complete_dump(int level, struct frame *frm)
3117ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3118ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_remote_features_complete *evt = frm->ptr;
3119ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
3120ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3121ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3122ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3123ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3124ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3125ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3126ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3127ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
3128ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3129ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Features:");
3130ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		for (i = 0; i < 8; i++)
3131ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf(" 0x%2.2x", evt->features[i]);
3132ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("\n");
3133ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3134ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3135ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3136ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_version_complete_dump(int level, struct frame *frm)
3137ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3138ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_remote_version_complete *evt = frm->ptr;
3139ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t manufacturer = btohs(evt->manufacturer);
3140ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3141ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3142ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3143ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3144ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3145ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3146ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3147ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
3148ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3149ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n",
3150ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			lmp_vertostr(evt->lmp_ver), evt->lmp_ver,
3151ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			btohs(evt->lmp_subver));
3152ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3153ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Manufacturer: %s (%d)\n",
3154ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bt_compidtostr(manufacturer), manufacturer);
3155ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3156ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3157ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
315811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void qos_setup_complete_dump(int level, struct frame *frm)
315911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
316011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_qos_setup_complete *evt = frm->ptr;
316111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
316211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
316311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("status 0x%2.2x handle %d flags %d\n",
3164120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->flags);
316511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
316611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	if (evt->status > 0) {
316711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
316811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Error: %s\n", status2str(evt->status));
316911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	} else {
317011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
317111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Service type: %d\n", evt->qos.service_type);
317211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
317311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Token rate: %d\n", btohl(evt->qos.token_rate));
317411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
317511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth));
317611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
317711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Latency: %d\n", btohl(evt->qos.latency));
317811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
317911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Delay variation: %d\n", btohl(evt->qos.delay_variation));
318011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	}
318111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
318211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
3183ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void role_change_dump(int level, struct frame *frm)
3184ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3185ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_role_change *evt = frm->ptr;
3186ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
3187ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3188ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3189bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3190ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x bdaddr %s role 0x%2.2x\n",
3191120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann						evt->status, addr, evt->role);
3192ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3193ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3194ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3195ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3196ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
3197ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3198ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Role: %s\n", role2str(evt->role));
3199ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3200ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3201ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3202ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void mode_change_dump(int level, struct frame *frm)
3203ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3204ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_mode_change *evt = frm->ptr;
3205ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3206ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3207ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d mode 0x%2.2x interval %d\n",
3208ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		evt->status, btohs(evt->handle), evt->mode, btohs(evt->interval));
3209ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3210ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3211ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3212ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3213ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
3214ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3215ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Mode: %s\n", mode2str(evt->mode));
3216ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3217ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3218ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3219ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_req_dump(int level, struct frame *frm)
3220ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3221ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_pin_code_req *evt = frm->ptr;
3222ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
3223ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3224ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3225bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3226ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s\n", addr);
3227ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3228ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3229ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_notify_dump(int level, struct frame *frm)
3230ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3231ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_link_key_notify *evt = frm->ptr;
3232ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
3233ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
3234ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3235ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3236bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
323744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s key ", addr);
3238ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 16; i++)
3239a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
3240a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("**");
3241a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		else
3242a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("%2.2X", evt->link_key[i]);
324344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf(" type %d\n", evt->key_type);
3244b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
3245b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
3246b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("Type: %s\n", keytype2str(evt->key_type));
3247ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3248ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
324911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void max_slots_change_dump(int level, struct frame *frm)
325011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
325111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_max_slots_change *evt = frm->ptr;
325211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
325311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
325411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("handle %d slots %d\n", btohs(evt->handle), evt->max_slots);
325511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
325611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
3257c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmannstatic inline void data_buffer_overflow_dump(int level, struct frame *frm)
3258c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann{
3259c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	evt_data_buffer_overflow *evt = frm->ptr;
3260c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann
3261c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	p_indent(level, frm);
3262fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann	printf("type %s\n", linktype2str(evt->link_type));
3263c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann}
3264c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann
3265ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_clock_offset_complete_dump(int level, struct frame *frm)
3266ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3267ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_clock_offset_complete *evt = frm->ptr;
3268ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3269ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3270ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d clkoffset 0x%4.4x\n",
3271ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		evt->status, btohs(evt->handle), btohs(evt->clock_offset));
3272ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3273ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3274ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3275ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3276ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3277ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3278ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3279ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void conn_ptype_changed_dump(int level, struct frame *frm)
3280ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
3281ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_conn_ptype_changed *evt = frm->ptr;
3282ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(evt->ptype);
3283ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
3284ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3285ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
3286ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d ptype 0x%4.4x\n",
3287120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), ptype);
3288ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3289ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3290ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3291ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3292ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
3293ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		str = hci_ptypetostr(ptype);
3294ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (str) {
3295ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			p_indent(level, frm);
3296ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf("Packet type: %s\n", str);
3297ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			free(str);
3298ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
3299ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3300ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3301ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
330211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void pscan_rep_mode_change_dump(int level, struct frame *frm)
330311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
330411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_pscan_rep_mode_change *evt = frm->ptr;
330511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	char addr[18];
330611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
330711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
3308bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
330911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("bdaddr %s mode %d\n", addr, evt->pscan_rep_mode);
331011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
3311ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3312f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmannstatic inline void flow_spec_complete_dump(int level, struct frame *frm)
3313f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann{
3314f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	evt_flow_spec_complete *evt = frm->ptr;
3315f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
3316f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	p_indent(level, frm);
3317f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	printf("status 0x%2.2x handle %d flags %d %s\n",
3318120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->flags,
3319120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->direction == 0 ? "outgoing" : "incoming");
3320f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
3321f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	if (evt->status > 0) {
3322f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3323f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3324f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	} else {
3325f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3326f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Service type: %d\n", evt->qos.service_type);
3327f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3328f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Token rate: %d\n", btohl(evt->qos.token_rate));
3329f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3330f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth));
3331f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3332f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Latency: %d\n", btohl(evt->qos.latency));
3333f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3334f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Delay variation: %d\n", btohl(evt->qos.delay_variation));
3335f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	}
3336f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann}
3337f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
3338d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_with_rssi_dump(int level, struct frame *frm)
3339d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3340d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t num = get_u8(frm);
3341b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	char addr[18];
3342d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
3343d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3344ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	if (!num)
3345ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		return;
3346d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3347ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	if (frm->len / num == INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE) {
3348ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		for (i = 0; i < num; i++) {
3349ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			inquiry_info_with_rssi_and_pscan_mode *info = frm->ptr;
3350d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3351ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			p_indent(level, frm);
3352d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3353bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str(&info->bdaddr, addr);
3354ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3355ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				addr, info->pscan_rep_mode, btohs(info->clock_offset),
3356ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
3357ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3358ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
3359ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->len -= INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
3360ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		}
3361ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	} else {
3362ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		for (i = 0; i < num; i++) {
3363ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			inquiry_info_with_rssi *info = frm->ptr;
3364ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3365ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			p_indent(level, frm);
3366ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3367bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str(&info->bdaddr, addr);
3368ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3369ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				addr, info->pscan_rep_mode, btohs(info->clock_offset),
3370ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
3371ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3372ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
3373ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE;
3374ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		}
3375d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3376d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3377d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
337817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_complete_dump(int level, struct frame *frm)
337917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
338017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	evt_read_remote_ext_features_complete *evt = frm->ptr;
338117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i;
338217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
338317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
338417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x handle %d page %d max %d\n",
3385120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->status, btohs(evt->handle),
3386120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->page_num, evt->max_page_num);
338717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
338817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (evt->status > 0) {
338917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
339017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
339117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
339217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
339317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Features:");
339417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 8; i++)
339517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf(" 0x%2.2x", evt->features[i]);
339617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
339717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
339817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
339917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
3400d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_complete_dump(int level, struct frame *frm)
3401d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{
3402d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	evt_sync_conn_complete *evt = frm->ptr;
3403d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	char addr[18];
3404d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3405bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3406d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3407d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	p_indent(level, frm);
3408d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	printf("status 0x%2.2x handle %d bdaddr %s type %s\n",
3409120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->status, btohs(evt->handle), addr,
3410120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->link_type == 0 ? "SCO" : "eSCO");
3411d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3412d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	if (evt->status > 0) {
3413d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
3414d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3415d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	} else {
3416d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
3417d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Air mode: %s\n", airmode2str(evt->air_mode));
3418d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	}
3419d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann}
3420d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3421d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_changed_dump(int level, struct frame *frm)
3422d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{
3423d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	evt_sync_conn_changed *evt = frm->ptr;
3424d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3425d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	p_indent(level, frm);
3426120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3427d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3428d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	if (evt->status > 0) {
3429d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
3430d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3431d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	}
3432d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann}
3433d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
34343b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void sniff_subrating_event_dump(int level, struct frame *frm)
3435120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann{
34363b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	evt_sniff_subrating *evt = frm->ptr;
3437120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3438120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
3439120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3440120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3441120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	if (evt->status > 0) {
3442120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
3443120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3444120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	} else {
3445120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
3446f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann		printf("max latency transmit %d receive %d\n",
3447f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann					btohs(evt->max_tx_latency),
3448f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann					btohs(evt->max_rx_latency));
3449120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3450120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
3451120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		printf("min timeout remote %d local %d\n",
3452120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(evt->min_remote_timeout),
3453120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(evt->min_local_timeout));
3454120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	}
3455120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann}
3456120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3457807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmannstatic inline void extended_inq_result_dump(int level, struct frame *frm)
3458807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann{
3459807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	uint8_t num = get_u8(frm);
3460807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	char addr[18];
3461807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	int i;
3462807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
3463807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	for (i = 0; i < num; i++) {
3464807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		extended_inquiry_info *info = frm->ptr;
3465807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
3466bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(&info->bdaddr, addr);
3467807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
3468807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		p_indent(level, frm);
346927eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3470807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann			addr, info->pscan_rep_mode, btohs(info->clock_offset),
347127eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann			info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
347227eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann
347327eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
347427eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE;
347527eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann
3476e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		ext_inquiry_response_dump(level, frm);
3477807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	}
3478807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann}
3479807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
34803b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void link_supervision_timeout_changed_dump(int level, struct frame *frm)
3481d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann{
34823b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	evt_link_supervision_timeout_changed *evt = frm->ptr;
3483d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann
3484d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	p_indent(level, frm);
3485d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	printf("handle %d timeout %d\n",
3486d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann				btohs(evt->handle), btohs(evt->timeout));
3487d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann}
3488d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann
3489b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void user_passkey_notify_dump(int level, struct frame *frm)
3490b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
3491b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	evt_user_passkey_notify *evt = frm->ptr;
3492b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
3493b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
3494b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
3495b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3496b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s passkey %d\n", addr, btohl(evt->passkey));
3497b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
3498b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
3499b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void keypress_notify_dump(int level, struct frame *frm)
3500b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
3501b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	evt_keypress_notify *evt = frm->ptr;
3502b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
3503b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
3504b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
3505b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3506b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s type %d\n", addr, evt->type);
3507b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
3508b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
35093b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void remote_host_features_notify_dump(int level, struct frame *frm)
35103b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
35113b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	evt_remote_host_features_notify *evt = frm->ptr;
35123b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	char addr[18];
35133b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	int i;
35143b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
35153b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
35163b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
35173b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("bdaddr %s\n", addr);
35183b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
35193b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
35203b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("Features:");
35213b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	for (i = 0; i < 8; i++)
35223b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		printf(" 0x%2.2x", evt->features[i]);
35233b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("\n");
35243b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
35253b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
3526b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void evt_le_conn_complete_dump(int level, struct frame *frm)
3527b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{
3528b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	evt_le_connection_complete *evt = frm->ptr;
3529b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3530b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_indent(level, frm);
3531c82d5e375ca2ae38d4152be6be58483061e2003cVille Tervo	printf("status 0x%2.2x handle %d, role %s\n",
3532c82d5e375ca2ae38d4152be6be58483061e2003cVille Tervo					evt->status, btohs(evt->handle),
3533c82d5e375ca2ae38d4152be6be58483061e2003cVille Tervo					evt->role ? "slave" : "master");
3534b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo}
3535b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3536646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmannstatic inline void evt_le_advertising_report_dump(int level, struct frame *frm)
3537646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann{
353871406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	uint8_t num_reports = get_u8(frm);
353971406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	const uint8_t RSSI_SIZE = 1;
3540646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
354171406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins	while (num_reports--) {
354271406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		char addr[18];
3543646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		le_advertising_info *info = frm->ptr;
3544646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3545646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		p_ba2str(&info->bdaddr, addr);
3546646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3547646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		p_indent(level, frm);
3548646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		printf("%s (%d)\n", evttype2str(info->evt_type), info->evt_type);
3549646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3550646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		p_indent(level, frm);
3551c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann		printf("bdaddr %s (%s)\n", addr,
3552c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann					bdaddrtype2str(info->bdaddr_type));
3553646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
355471406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		if (info->length > 0) {
355571406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins			ext_inquiry_data_dump(level, frm,
355671406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins					((uint8_t *) &info->length) + 1);
355771406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		}
3558646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
355971406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		frm->ptr += LE_ADVERTISING_INFO_SIZE + info->length;
356071406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		frm->len -= LE_ADVERTISING_INFO_SIZE + info->length;
356171406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins
356271406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		p_indent(level, frm);
356371406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		printf("RSSI: %d\n", ((int8_t *) frm->ptr)[frm->len - 1]);
3564646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
356571406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		frm->ptr += RSSI_SIZE;
356671406a5fddcc17f54c22f19bc1166ecbc510d64aAndré Dieb Martins		frm->len -= RSSI_SIZE;
3567646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	}
3568646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann}
3569646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann
3570b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martinsstatic inline void evt_le_conn_update_complete_dump(int level,
3571b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins							struct frame *frm)
3572b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins{
3573b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	evt_le_connection_update_complete *uevt = frm->ptr;
3574b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins
3575b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	p_indent(level, frm);
3576b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	printf("status 0x%2.2x handle %d\n", uevt->status, btohs(uevt->handle));
3577b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins
3578b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	p_indent(level, frm);
3579b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	printf("interval %.2fms, latency %.2fms, superv. timeout %.2fms\n",
3580b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins			btohs(uevt->interval) * 1.25, btohs(uevt->latency) * 1.25,
3581b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins			btohs(uevt->supervision_timeout) * 10.0);
3582b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins}
3583b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins
35840766d9adeddb57249388421cf1138e3aace45265André Dieb Martinsstatic inline void evt_le_read_remote_used_features_complete_dump(int level, struct frame *frm)
35850766d9adeddb57249388421cf1138e3aace45265André Dieb Martins{
35860766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	int i;
35870766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	evt_le_read_remote_used_features_complete *revt = frm->ptr;
35880766d9adeddb57249388421cf1138e3aace45265André Dieb Martins
35890766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	p_indent(level, frm);
35900766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	printf("status 0x%2.2x handle %d\n", revt->status, btohs(revt->handle));
35910766d9adeddb57249388421cf1138e3aace45265André Dieb Martins
35920766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	if (revt->status > 0) {
35930766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		p_indent(level, frm);
35940766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		printf("Error: %s\n", status2str(revt->status));
35950766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	} else {
35960766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		p_indent(level, frm);
35970766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		printf("Features:");
35980766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		for (i = 0; i < 8; i++)
35990766d9adeddb57249388421cf1138e3aace45265André Dieb Martins			printf(" 0x%2.2x", revt->features[i]);
36000766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		printf("\n");
36010766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	}
36020766d9adeddb57249388421cf1138e3aace45265André Dieb Martins}
36030766d9adeddb57249388421cf1138e3aace45265André Dieb Martins
3604b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void le_meta_ev_dump(int level, struct frame *frm)
3605b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{
3606b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	evt_le_meta_event *mevt = frm->ptr;
3607b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	uint8_t subevent;
3608b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3609b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	subevent = mevt->subevent;
3610b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3611b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	frm->ptr += EVT_LE_META_EVENT_SIZE;
3612b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	frm->len -= EVT_LE_META_EVENT_SIZE;
3613b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3614b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_indent(level, frm);
3615b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	printf("%s\n", ev_le_meta_str[subevent]);
3616b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3617b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	switch (mevt->subevent) {
3618b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	case EVT_LE_CONN_COMPLETE:
3619b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		evt_le_conn_complete_dump(level + 1, frm);
3620b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
3621646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann	case EVT_LE_ADVERTISING_REPORT:
3622646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		evt_le_advertising_report_dump(level + 1, frm);
3623646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann		break;
3624b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins	case EVT_LE_CONN_UPDATE_COMPLETE:
3625b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins		evt_le_conn_update_complete_dump(level + 1, frm);
3626b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins		break;
36270766d9adeddb57249388421cf1138e3aace45265André Dieb Martins	case EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE:
36280766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		evt_le_read_remote_used_features_complete_dump(level + 1, frm);
36290766d9adeddb57249388421cf1138e3aace45265André Dieb Martins		break;
3630b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	default:
3631b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		raw_dump(level, frm);
3632b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
3633b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	}
3634b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo}
3635b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3636652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void phys_link_complete_dump(int level, struct frame *frm)
3637652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3638652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_physical_link_complete *evt = frm->ptr;
3639652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3640652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3641652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("status 0x%2.2x handle %d\n", evt->status, evt->handle);
3642652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3643652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	if (evt->status > 0) {
3644652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		p_indent(level, frm);
3645652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		printf("Error: %s\n", status2str(evt->status));
3646652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	}
3647652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3648652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3649652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void disconn_phys_link_complete_dump(int level, struct frame *frm)
3650652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3651652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_disconn_physical_link_complete *evt = frm->ptr;
3652652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3653652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3654652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("status 0x%2.2x handle %d reason 0x%2.2x\n",
3655652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland				evt->status, evt->handle, evt->reason);
3656652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3657652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	if (evt->status > 0) {
3658652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		p_indent(level, frm);
3659652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		printf("Error: %s\n", status2str(evt->status));
3660652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	} else if (evt->reason > 0) {
3661652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		p_indent(level, frm);
3662652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		printf("Reason: %s\n", status2str(evt->reason));
3663652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	}
3664652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3665652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3666652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void phys_link_loss_warning_dump(int level, struct frame *frm)
3667652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3668652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_physical_link_loss_warning *evt = frm->ptr;
3669652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3670652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3671652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("handle %d reason 0x%2.2x\n", evt->handle, evt->reason);
3672652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3673652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3674652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void phys_link_handle_dump(int level, struct frame *frm)
3675652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3676652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_physical_link_recovery *evt = frm->ptr;
3677652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3678652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3679652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("handle %d\n", evt->handle);
3680652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3681652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3682652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void logical_link_complete_dump(int level, struct frame *frm)
3683652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3684652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_logical_link_complete *evt = frm->ptr;
3685652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3686652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3687652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("status 0x%2.2x log_handle %d handle %d tx_flow_id %d\n",
3688652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland			evt->status, btohs(evt->log_handle), evt->handle,
3689652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland			evt->tx_flow_id);
3690652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3691652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	if (evt->status > 0) {
3692652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		p_indent(level, frm);
3693652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		printf("Error: %s\n", status2str(evt->status));
3694652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	}
3695652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3696652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3697652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void flow_spec_modify_dump(int level, struct frame *frm)
3698652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{
3699652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	evt_flow_spec_modify_complete *evt = frm->ptr;
3700652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3701652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	p_indent(level, frm);
3702652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3703652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
3704652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	if (evt->status > 0) {
3705652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		p_indent(level, frm);
3706652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		printf("Error: %s\n", status2str(evt->status));
3707652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	}
3708652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland}
3709652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland
371065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void event_dump(int level, struct frame *frm)
371195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
3712174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	hci_event_hdr *hdr = frm->ptr;
3713be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	uint8_t event = hdr->evt;
371465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
371565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (p_filter(FILT_HCI))
371665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		return;
371765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
3718d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (event <= EVENT_NUM) {
37197b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
3720803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: %s (0x%2.2x) plen %d\n",
37217b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann					event_str[hdr->evt], hdr->evt, hdr->plen);
3722be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	} else if (hdr->evt == EVT_TESTING) {
37237b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
3724803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: Testing (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
3725be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	} else if (hdr->evt == EVT_VENDOR) {
3726a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		uint16_t manufacturer;
3727a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann
37287b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
37297b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			return;
37307b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
37317b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
3732803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: Vendor (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
37337b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
3734a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		manufacturer = get_manufacturer();
3735a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann
3736a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		switch (manufacturer) {
3737a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 0:
3738e1e8e8d65fe211c133b53cf8af8883caf7936314Marcel Holtmann		case 37:
3739a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 48:
3740a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			frm->ptr += HCI_EVENT_HDR_SIZE;
3741a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			frm->len -= HCI_EVENT_HDR_SIZE;
3742a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			ericsson_dump(level + 1, frm);
3743a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			return;
3744a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 10:
3745be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			frm->ptr += HCI_EVENT_HDR_SIZE;
3746be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			frm->len -= HCI_EVENT_HDR_SIZE;
3747be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			csr_dump(level + 1, frm);
3748be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			return;
3749be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		}
37507b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	} else {
37517b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
375266f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky		printf("HCI Event: code 0x%2.2x plen %d\n", hdr->evt, hdr->plen);
37537b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	}
375465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
375565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->ptr += HCI_EVENT_HDR_SIZE;
375665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->len -= HCI_EVENT_HDR_SIZE;
375765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
3758be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	if (event == EVT_CMD_COMPLETE) {
3759be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		evt_cmd_complete *cc = frm->ptr;
3760be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		if (cc->opcode == cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION)) {
3761be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			read_local_version_rp *rp = frm->ptr + EVT_CMD_COMPLETE_SIZE;
3762be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			manufacturer = rp->manufacturer;
3763be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		}
3764be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	}
3765be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann
376625554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann	if (event == EVT_DISCONN_COMPLETE) {
376725554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann		evt_disconn_complete *evt = frm->ptr;
376825554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann		l2cap_clear(btohs(evt->handle));
376925554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann	}
377025554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann
3771d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
3772d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		raw_dump(level, frm);
3773d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		return;
3774d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3775d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3776d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	switch (event) {
3777ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann	case EVT_LOOPBACK_COMMAND:
3778ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		command_dump(level + 1, frm);
3779ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
3780d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CMD_COMPLETE:
3781d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		cmd_complete_dump(level + 1, frm);
3782d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3783d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CMD_STATUS:
3784d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		cmd_status_dump(level + 1, frm);
3785d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3786afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	case EVT_HARDWARE_ERROR:
3787afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		hardware_error_dump(level + 1, frm);
3788afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		break;
3789afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	case EVT_FLUSH_OCCURRED:
3790f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	case EVT_QOS_VIOLATION:
3791afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		handle_response_dump(level + 1, frm);
3792afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		break;
3793d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_COMPLETE:
3794d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		status_response_dump(level + 1, frm);
3795d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3796d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_RESULT:
3797d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inq_result_dump(level + 1, frm);
3798d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3799d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CONN_COMPLETE:
3800d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		conn_complete_dump(level + 1, frm);
3801d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3802d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CONN_REQUEST:
3803d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		conn_request_dump(level + 1, frm);
3804d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3805d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_DISCONN_COMPLETE:
3806652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_DISCONNECT_LOGICAL_LINK_COMPLETE:
3807d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		disconn_complete_dump(level + 1, frm);
3808d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3809d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_AUTH_COMPLETE:
3810d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CHANGE_CONN_LINK_KEY_COMPLETE:
3811d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		generic_response_dump(level + 1, frm);
3812d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
381317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case EVT_MASTER_LINK_KEY_COMPLETE:
381417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		master_link_key_complete_dump(level + 1, frm);
381517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
3816d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_REMOTE_NAME_REQ_COMPLETE:
3817d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		remote_name_req_complete_dump(level + 1, frm);
3818d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3819d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_ENCRYPT_CHANGE:
3820d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		encrypt_change_dump(level + 1, frm);
3821d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3822ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_REMOTE_FEATURES_COMPLETE:
3823ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_remote_features_complete_dump(level + 1, frm);
3824ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3825ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_REMOTE_VERSION_COMPLETE:
3826ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_remote_version_complete_dump(level + 1, frm);
3827ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3828ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_QOS_SETUP_COMPLETE:
382911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		qos_setup_complete_dump(level + 1, frm);
3830ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3831ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_ROLE_CHANGE:
3832ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		role_change_dump(level + 1, frm);
3833ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3834ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_NUM_COMP_PKTS:
3835ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		num_comp_pkts_dump(level + 1, frm);
3836ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3837ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_MODE_CHANGE:
3838ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		mode_change_dump(level + 1, frm);
3839ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3840b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	case EVT_RETURN_LINK_KEYS:
3841b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann		return_link_keys_dump(level + 1, frm);
3842b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann		break;
3843ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_PIN_CODE_REQ:
3844ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_LINK_KEY_REQ:
3845b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_IO_CAPABILITY_REQUEST:
3846b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_USER_PASSKEY_REQUEST:
3847b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_REMOTE_OOB_DATA_REQUEST:
3848ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		pin_code_req_dump(level + 1, frm);
3849ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3850ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_LINK_KEY_NOTIFY:
3851ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		link_key_notify_dump(level + 1, frm);
3852ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3853c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	case EVT_DATA_BUFFER_OVERFLOW:
3854c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann		data_buffer_overflow_dump(level + 1, frm);
3855c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann		break;
385611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	case EVT_MAX_SLOTS_CHANGE:
385711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		max_slots_change_dump(level + 1, frm);
385811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		break;
3859ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_CLOCK_OFFSET_COMPLETE:
3860ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_clock_offset_complete_dump(level + 1, frm);
3861ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3862ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_CONN_PTYPE_CHANGED:
3863ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		conn_ptype_changed_dump(level + 1, frm);
3864ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
386511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	case EVT_PSCAN_REP_MODE_CHANGE:
386611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		pscan_rep_mode_change_dump(level + 1, frm);
386711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		break;
3868f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	case EVT_FLOW_SPEC_COMPLETE:
3869f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		flow_spec_complete_dump(level + 1, frm);
3870f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		break;
3871d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_RESULT_WITH_RSSI:
3872d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inq_result_with_rssi_dump(level + 1, frm);
3873d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
387417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case EVT_READ_REMOTE_EXT_FEATURES_COMPLETE:
387517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		read_remote_ext_features_complete_dump(level + 1, frm);
387617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
3877d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case EVT_SYNC_CONN_COMPLETE:
3878d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		sync_conn_complete_dump(level + 1, frm);
3879d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		break;
3880d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case EVT_SYNC_CONN_CHANGED:
3881d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		sync_conn_changed_dump(level + 1, frm);
3882d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		break;
38833b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_SNIFF_SUBRATING:
38843b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		sniff_subrating_event_dump(level + 1, frm);
3885120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		break;
3886807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	case EVT_EXTENDED_INQUIRY_RESULT:
3887807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		extended_inq_result_dump(level + 1, frm);
3888807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		break;
38893b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_ENCRYPTION_KEY_REFRESH_COMPLETE:
38903b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		generic_response_dump(level + 1, frm);
38913b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		break;
3892b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_SIMPLE_PAIRING_COMPLETE:
3893b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		bdaddr_response_dump(level + 1, frm);
3894b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
38953b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_LINK_SUPERVISION_TIMEOUT_CHANGED:
38963b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		link_supervision_timeout_changed_dump(level + 1, frm);
38973b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		break;
38983b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_ENHANCED_FLUSH_COMPLETE:
38993b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		generic_command_dump(level + 1, frm);
39003b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		break;
3901b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_IO_CAPABILITY_RESPONSE:
3902b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		io_capability_reply_dump(level + 1, frm);
3903b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
3904b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_USER_CONFIRM_REQUEST:
3905b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_USER_PASSKEY_NOTIFY:
3906b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		user_passkey_notify_dump(level + 1, frm);
3907b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
3908b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_KEYPRESS_NOTIFY:
3909b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		keypress_notify_dump(level + 1, frm);
3910b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
39113b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_REMOTE_HOST_FEATURES_NOTIFY:
39123b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		remote_host_features_notify_dump(level + 1, frm);
3913d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann		break;
3914b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	case EVT_LE_META_EVENT:
3915b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		le_meta_ev_dump(level + 1, frm);
3916b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
3917652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_PHYSICAL_LINK_COMPLETE:
3918652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		phys_link_complete_dump(level + 1, frm);
3919652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3920652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE:
3921652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		disconn_phys_link_complete_dump(level + 1, frm);
3922652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3923652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_PHYSICAL_LINK_LOSS_EARLY_WARNING:
3924652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		phys_link_loss_warning_dump(level + 1, frm);
3925652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3926652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_PHYSICAL_LINK_RECOVERY:
3927652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_CHANNEL_SELECTED:
3928652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		phys_link_handle_dump(level + 1, frm);
3929652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3930652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_LOGICAL_LINK_COMPLETE:
3931652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		logical_link_complete_dump(level + 1, frm);
3932652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3933652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland	case EVT_FLOW_SPEC_MODIFY_COMPLETE:
3934652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		flow_spec_modify_dump(level + 1, frm);
3935652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland		break;
3936d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	default:
3937d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		raw_dump(level, frm);
3938d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3939d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
394095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
394195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
394265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void acl_dump(int level, struct frame *frm)
394395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
3944174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	hci_acl_hdr *hdr = (void *) frm->ptr;
39450d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t handle = btohs(hdr->handle);
39460d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t dlen = btohs(hdr->dlen);
39470d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint8_t flags = acl_flags(handle);
394865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
394965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (!p_filter(FILT_HCI)) {
3950ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
3951d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("ACL data: handle %d flags 0x%2.2x dlen %d\n",
395265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky			acl_handle(handle), flags, dlen);
395365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		level++;
395465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	}
3955e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
3956e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann	frm->ptr += HCI_ACL_HDR_SIZE;
3957e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann	frm->len -= HCI_ACL_HDR_SIZE;
3958f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky	frm->flags  = flags;
3959f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky	frm->handle = acl_handle(handle);
396065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
396165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (parser.filter & ~FILT_HCI)
396265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		l2cap_dump(level, frm);
396365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	else
396465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		raw_dump(level, frm);
396595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
396695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
3967d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyanskystatic inline void sco_dump(int level, struct frame *frm)
3968d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky{
3969d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	hci_sco_hdr *hdr = (void *) frm->ptr;
39700d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t handle = btohs(hdr->handle);
39718f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann	uint8_t flags = acl_flags(handle);
39726d3f2066a10cd7d0812fdf97635f1bd77f003493Marcel Holtmann	int len;
3973d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
39749e216633a0f902b7d069c08939c67e03dd4ee516Marcel Holtmann	if (frm->audio_fd > fileno(stderr))
39756d3f2066a10cd7d0812fdf97635f1bd77f003493Marcel Holtmann		len = write(frm->audio_fd, frm->ptr + HCI_SCO_HDR_SIZE, hdr->dlen);
39760033462dddb3b4adf56ea28680c1f135f25a4387Marcel Holtmann
3977d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	if (!p_filter(FILT_SCO)) {
3978ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
39798f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann		printf("SCO data: handle %d flags 0x%2.2x dlen %d\n",
39808f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann				acl_handle(handle), flags, hdr->dlen);
3981d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		level++;
3982d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
3983d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		frm->ptr += HCI_SCO_HDR_SIZE;
3984d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		frm->len -= HCI_SCO_HDR_SIZE;
3985d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		raw_dump(level, frm);
3986d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	}
3987d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky}
3988d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
3989b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmannstatic inline void vendor_dump(int level, struct frame *frm)
3990b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann{
3991b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	if (p_filter(FILT_HCI))
3992b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		return;
3993b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann
399438acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann	if (frm->dev_id == HCI_DEV_NONE) {
3995a4d60061ed080704f1e1c076d59ac0b03aaa0fd1Marcel Holtmann		uint16_t device = btohs(htons(get_u16(frm)));
3996ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann		uint16_t proto = btohs(htons(get_u16(frm)));
399738acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		uint16_t type = btohs(htons(get_u16(frm)));
399838acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		uint16_t plen = btohs(htons(get_u16(frm)));
399938acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
400038acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		p_indent(level, frm);
400138acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
4002ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann		printf("System %s: device hci%d proto 0x%2.2x type 0x%2.2x plen %d\n",
4003ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann			frm->in ? "event" : "command", device, proto, type, plen);
400438acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
400538acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		raw_dump(level, frm);
400638acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		return;
400738acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann	}
400838acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
40097b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (parser.flags & DUMP_NOVENDOR)
40107b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
40117b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
4012b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	if (get_manufacturer() == 12) {
4013b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		bpa_dump(level, frm);
4014b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		return;
4015b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	}
4016b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann
4017b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	p_indent(level, frm);
4018b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	printf("Vendor data: len %d\n", frm->len);
4019b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	raw_dump(level, frm);
4020b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann}
4021b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann
4022174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyanskyvoid hci_dump(int level, struct frame *frm)
402395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
4024d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t type = *(uint8_t *)frm->ptr;
402595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
4026174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	frm->ptr++; frm->len--;
4027e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
402895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	switch (type) {
402995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_COMMAND_PKT:
403065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		command_dump(level, frm);
403195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
403295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
403395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_EVENT_PKT:
403465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		event_dump(level, frm);
403595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
403695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
403795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_ACLDATA_PKT:
403865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		acl_dump(level, frm);
403995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
404095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
4041d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	case HCI_SCODATA_PKT:
4042d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		sco_dump(level, frm);
4043d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		break;
4044e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
4045b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	case HCI_VENDOR_PKT:
4046b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann		vendor_dump(level, frm);
4047b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann		break;
4048b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann
404995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	default:
405065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		if (p_filter(FILT_HCI))
405165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky			break;
405265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
4053ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
4054174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky		printf("Unknown: type 0x%2.2x len %d\n", type, frm->len);
405565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		raw_dump(level, frm);
405695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
405795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	}
405895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
4059