hci.c revision 85478602978104edbd412a87aff926c8f5311337
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>
64b24738bac78ba8dca229aabb5735cf9df123abcMarcel Holtmann *  Copyright (C) 2003-2010  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
384b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo#define CMD_LE_NUM 30
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",
406b26718ede1fc41b10071b9ee22d21638542275dbVille 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
619b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic char *keytype2str(uint8_t type)
620b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
621b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	switch (type) {
622b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x00:
623b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Combination Key";
624b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x01:
625b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Local Unit Key";
626b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x02:
627b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Remote Unit Key";
628b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x03:
629b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Debug Combination Key";
630b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x04:
631b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Unauthenticated Combination Key";
632b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x05:
633b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Authenticated Combination Key";
634b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x06:
635b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Changed Combination Key";
636b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	default:
637b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Reserved";
638b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
639b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
640b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
641b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic char *capability2str(uint8_t capability)
642b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
643b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	switch (capability) {
644b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x00:
645b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "DisplayOnly";
646b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x01:
647b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "DisplayYesNo";
648b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x02:
649b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "KeyboardOnly";
650b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x03:
651b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "NoInputNoOutput";
652b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	default:
653b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Reserved";
654b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
655b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
656b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
657b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic char *authentication2str(uint8_t authentication)
658b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
659b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	switch (authentication) {
660b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x00:
661b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "No Bonding (No MITM Protection)";
662b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x01:
663b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "No Bonding (MITM Protection)";
664b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x02:
665b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Dedicated Bonding (No MITM Protection)";
666b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x03:
667b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Dedicated Bonding (MITM Protection)";
668b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x04:
669b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "General Bonding (No MITM Protection)";
670b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case 0x05:
671b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "General Bonding (MITM Protection)";
672b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	default:
673b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		return "Reserved";
674b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
675b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
676b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
677e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmannstatic inline void ext_inquiry_response_dump(int level, struct frame *frm)
678e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann{
679e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	void *ptr = frm->ptr;
680e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	uint32_t len = frm->len;
681e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	uint8_t type, length;
682e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	char *str;
683e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	int i;
684e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
685e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	length = get_u8(frm);
686e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
687e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	while (length > 0) {
688e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		type = get_u8(frm);
689e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		length--;
690e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
691e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		switch (type) {
69207efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann		case 0x01:
69307efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			p_indent(level, frm);
69407efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			printf("Flags:");
69507efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			for (i = 0; i < length; i++)
69607efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann				printf(" 0x%2.2x", *((uint8_t *) (frm->ptr + i)));
69707efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			printf("\n");
69807efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			break;
69907efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann
70007efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann		case 0x02:
70107efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann		case 0x03:
70207efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			p_indent(level, frm);
70307efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			printf("%s service classes:",
70407efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann					type == 0x02 ? "Shortened" : "Complete");
70507efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			for (i = 0; i < length / 2; i++) {
70607efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann				uint16_t val = btohs(bt_get_unaligned((uint16_t *) (frm->ptr + (i * 2))));
70707efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann				printf(" 0x%4.4x", val);
70807efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			}
70907efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			printf("\n");
71007efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			break;
71107efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann
712e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		case 0x08:
713e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		case 0x09:
714e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			str = malloc(length + 1);
715e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			if (str) {
716ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann				snprintf(str, length + 1, "%s", (char *) frm->ptr);
717e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				for (i = 0; i < length; i++)
71807efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann					if (!isprint(str[i]))
71907efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann						str[i] = '.';
720e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				p_indent(level, frm);
721e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				printf("%s local name: \'%s\'\n",
722e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann					type == 0x08 ? "Shortened" : "Complete", str);
723e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				free(str);
724e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			}
725e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			break;
726e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
72707efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann		case 0x0a:
72807efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			p_indent(level, frm);
72907efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			printf("TX power level: %d\n", *((uint8_t *) frm->ptr));
73007efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann			break;
73107efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann
732e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		default:
733e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			p_indent(level, frm);
734e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			printf("Unknown type 0x%02x with %d bytes data\n",
735e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann								type, length);
736e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			break;
737e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		}
738e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
739e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		frm->ptr += length;
740e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		frm->len -= length;
741e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
742e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		length = get_u8(frm);
743e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	}
744e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
745e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	frm->ptr = ptr + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
746e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	frm->len = len + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
747e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann}
748e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
74990480219be366c65e68ae8612de7a361027e751aMarcel Holtmannstatic inline void bdaddr_command_dump(int level, struct frame *frm)
75090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann{
75190480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
75290480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	char addr[18];
75390480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
75490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	frm->ptr += sizeof(bdaddr_t);
75590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	frm->len -= sizeof(bdaddr_t);
75690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
75790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	p_indent(level, frm);
758bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
759e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	printf("bdaddr %s\n", addr);
76090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
76190480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	raw_dump(level, frm);
76290480219be366c65e68ae8612de7a361027e751aMarcel Holtmann}
76390480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
764b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void generic_command_dump(int level, struct frame *frm)
765b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
766b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
767b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
768b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
769b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("handle %d\n", handle);
770b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
771b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	raw_dump(level, frm);
772b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
773b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
774b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void generic_write_mode_dump(int level, struct frame *frm)
775b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
776b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint8_t mode = get_u8(frm);
777b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
778b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
779b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("mode 0x%2.2x\n", mode);
780b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
781b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
782ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void inquiry_dump(int level, struct frame *frm)
783ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
784ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	inquiry_cp *cp = frm->ptr;
785ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
786ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
787ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("lap 0x%2.2x%2.2x%2.2x len %d num %d\n",
788ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);
789ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
790ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
791ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void periodic_inquiry_dump(int level, struct frame *frm)
792ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
793ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	periodic_inquiry_cp *cp = frm->ptr;
794ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
795ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
796ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("max %d min %d lap 0x%2.2x%2.2x%2.2x len %d num %d\n",
797ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		btohs(cp->max_period), btohs(cp->min_period),
798ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);
799ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
800ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
801ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void create_conn_dump(int level, struct frame *frm)
802ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
803ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	create_conn_cp *cp = frm->ptr;
804ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(cp->pkt_type);
805ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t clkoffset = btohs(cp->clock_offset);
806ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18], *str;
807ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
808ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
809bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
810ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s ptype 0x%4.4x rswitch 0x%2.2x clkoffset 0x%4.4x%s\n",
811ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		addr, ptype, cp->role_switch,
812ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");
813ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
814ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_ptypetostr(ptype);
815ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
816ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
817ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Packet type: %s\n", str);
818ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
819ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
820ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
821ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
822ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void disconnect_dump(int level, struct frame *frm)
823ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
824ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	disconnect_cp *cp = frm->ptr;
825ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
826ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
827ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d reason 0x%2.2x\n", btohs(cp->handle), cp->reason);
828ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
829ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
830ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Reason: %s\n", status2str(cp->reason));
831ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
832ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
833ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void add_sco_dump(int level, struct frame *frm)
834ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
835ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	add_sco_cp *cp = frm->ptr;
836ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(cp->pkt_type);
837ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
838ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
839ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
840ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d ptype 0x%4.4x\n", btohs(cp->handle), ptype);
841ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
842ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_ptypetostr(ptype);
843ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
844ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
845ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Packet type: %s\n", str);
846ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
847ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
848ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
849ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
850ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void accept_conn_req_dump(int level, struct frame *frm)
851ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
852ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	accept_conn_req_cp *cp = frm->ptr;
853ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
854ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
855ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
856bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
857ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s role 0x%2.2x\n", addr, cp->role);
858ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
859ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
860ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Role: %s\n", role2str(cp->role));
861ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
862ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
863ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void reject_conn_req_dump(int level, struct frame *frm)
864ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
865ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	reject_conn_req_cp *cp = frm->ptr;
866ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
867ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
868ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
869bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
870ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s reason 0x%2.2x\n", addr, cp->reason);
871ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
872ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
873ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Reason: %s\n", status2str(cp->reason));
874ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
875ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
876ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_reply_dump(int level, struct frame *frm)
877ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
878ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	pin_code_reply_cp *cp = frm->ptr;
879ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18], pin[17];
880ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
881ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
882bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
883ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(pin, 0, sizeof(pin));
884a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann	if (parser.flags & DUMP_NOVENDOR)
885a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		memset(pin, '*', cp->pin_len);
886a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann	else
887a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		memcpy(pin, cp->pin_code, cp->pin_len);
888ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s len %d pin \'%s\'\n", addr, cp->pin_len, pin);
889ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
890ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
891ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_reply_dump(int level, struct frame *frm)
892ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
893ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	link_key_reply_cp *cp = frm->ptr;
894ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
895ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
896ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
897ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
898bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
89944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s key ", addr);
900ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 16; i++)
901a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
902a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("**");
903a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		else
904a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("%2.2X", cp->link_key[i]);
905ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("\n");
906ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
907ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
908ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_neg_reply_dump(int level, struct frame *frm)
909ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
910ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
911ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
912ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
913ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
914bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
915ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s\n", addr);
916ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
917ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
918b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void user_passkey_reply_dump(int level, struct frame *frm)
919b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
920b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	user_passkey_reply_cp *cp = frm->ptr;
921b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
922b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
923b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
924b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
925b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s passkey %d\n", addr, btohl(cp->passkey));
926b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
927b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
928b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void remote_oob_data_reply_dump(int level, struct frame *frm)
929b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
930b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	remote_oob_data_reply_cp *cp = frm->ptr;
931b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
932b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	int i;
933b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
934b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
935b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
936b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s\n", addr);
937b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
938b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
939b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("hash 0x");
940b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	for (i = 0; i < 16; i++)
941b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("%02x", cp->hash[i]);
942b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("\n");
943b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
944b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
945b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("randomizer 0x");
946b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	for (i = 0; i < 16; i++)
947b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			printf("%02x", cp->randomizer[i]);
948b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("\n");
949b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
950b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
951b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void io_capability_reply_dump(int level, struct frame *frm)
952b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
953b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	io_capability_reply_cp *cp = frm->ptr;
954b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
955b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
956b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
957b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
958b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s capability 0x%2.2x oob 0x%2.2x auth 0x%2.2x\n",
959b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann					addr, cp->capability, cp->oob_data,
960b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann							cp->authentication);
961b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
962b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
963b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("Capability: %s (OOB data %s)\n",
964b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			capability2str(cp->capability),
965b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			cp->oob_data == 0x00 ? "not present" : "available");
966b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
967b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
968b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("Authentication: %s\n", authentication2str(cp->authentication));
969b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
970b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
971ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void set_conn_encrypt_dump(int level, struct frame *frm)
972ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
973ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	set_conn_encrypt_cp *cp = frm->ptr;
974ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
975ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
976ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d encrypt 0x%2.2x\n", btohs(cp->handle), cp->encrypt);
977ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
978ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
979ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void remote_name_req_dump(int level, struct frame *frm)
980ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
981ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	remote_name_req_cp *cp = frm->ptr;
982ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t clkoffset = btohs(cp->clock_offset);
983ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
984ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
985ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
986bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
98772e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann	printf("bdaddr %s mode %d clkoffset 0x%4.4x%s\n",
98872e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		addr, cp->pscan_rep_mode,
98972e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");
990ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
991ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
99217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_dump(int level, struct frame *frm)
99317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
99417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	master_link_key_cp *cp = frm->ptr;
99517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
99617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
99717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("flag %d\n", cp->key_flag);
99817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
99917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
100017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_dump(int level, struct frame *frm)
100117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
100217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_remote_ext_features_cp *cp = frm->ptr;
100317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1004e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	p_indent(level, frm);
1005e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	printf("handle %d page %d\n", btohs(cp->handle), cp->page_num);
100617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
100717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1008c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmannstatic inline void setup_sync_conn_dump(int level, struct frame *frm)
1009c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann{
1010c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann	setup_sync_conn_cp *cp = frm->ptr;
1011c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann
1012c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann	p_indent(level, frm);
1013cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly	printf("handle %d voice setting 0x%4.4x ptype 0x%4.4x\n",
1014cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly		btohs(cp->handle), btohs(cp->voice_setting),
1015cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly		btohs(cp->pkt_type));
1016c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann}
1017c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann
1018c7f436764386ca845317b678f3330340ccd838b8Inga Stotlandstatic inline void create_physical_link_dump(int level, struct frame *frm)
1019c7f436764386ca845317b678f3330340ccd838b8Inga Stotland{
1020c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	create_physical_link_cp *cp = frm->ptr;
1021c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	int i;
1022c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1023c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	p_indent(level, frm);
1024c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1025c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("handle %d key length %d key type %d\n",
1026c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		cp->handle, cp->key_length, cp->key_type);
1027c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("key ");
1028c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1029c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	for (i = 0; i < cp->key_length && cp->key_length < 32; i++)
1030c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		printf("%2.2x", cp->key[i]);
1031c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("\n");
1032c7f436764386ca845317b678f3330340ccd838b8Inga Stotland}
1033c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1034c7f436764386ca845317b678f3330340ccd838b8Inga Stotlandstatic inline void create_logical_link_dump(int level, struct frame *frm)
1035c7f436764386ca845317b678f3330340ccd838b8Inga Stotland{
1036c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	create_logical_link_cp *cp = frm->ptr;
1037c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	int i;
1038c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1039c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	p_indent(level, frm);
1040c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
1041c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("handle %d\n", cp->handle);
1042c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("tx_flow ");
1043c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	for (i = 0; i < 16; i++)
1044c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		printf("%2.2x", cp->tx_flow[i]);
1045c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("\nrx_flow ");
1046c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	for (i = 0; i < 16; i++)
1047c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		printf("%2.2x", cp->rx_flow[i]);
1048c7f436764386ca845317b678f3330340ccd838b8Inga Stotland	printf("\n");
1049c7f436764386ca845317b678f3330340ccd838b8Inga Stotland}
1050c7f436764386ca845317b678f3330340ccd838b8Inga Stotland
10519ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void hold_mode_dump(int level, struct frame *frm)
10529ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{
10539ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	hold_mode_cp *cp = frm->ptr;
10549ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
10559ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	p_indent(level, frm);
10569ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	printf("handle %d max %d min %d\n", btohs(cp->handle),
10579ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			btohs(cp->max_interval), btohs(cp->min_interval));
10589ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann}
10599ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
10609ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void sniff_mode_dump(int level, struct frame *frm)
10619ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{
10629ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	sniff_mode_cp *cp = frm->ptr;
10639ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
10649ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	p_indent(level, frm);
10659ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	printf("handle %d max %d min %d attempt %d timeout %d\n",
10669ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		btohs(cp->handle), btohs(cp->max_interval),
10679ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		btohs(cp->min_interval), btohs(cp->attempt), btohs(cp->timeout));
10689ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann}
10699ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
10704894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmannstatic inline void qos_setup_dump(int level, struct frame *frm)
10714894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann{
10724894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	qos_setup_cp *cp = frm->ptr;
10734894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann
10744894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
10754894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("handle %d flags 0x%2.2x\n", btohs(cp->handle), cp->flags);
10764894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann
10774894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
10784894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Service type: %d\n", cp->qos.service_type);
10794894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
10804894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Token rate: %d\n", btohl(cp->qos.token_rate));
10814894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
10824894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Peak bandwith: %d\n", btohl(cp->qos.peak_bandwidth));
10834894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
10844894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Latency: %d\n", btohl(cp->qos.latency));
10854894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	p_indent(level, frm);
10864894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann	printf("Delay variation: %d\n", btohl(cp->qos.delay_variation));
10874894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann}
10884894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann
1089ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_link_policy_dump(int level, struct frame *frm)
1090ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1091ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_link_policy_cp *cp = frm->ptr;
1092ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t policy = btohs(cp->policy);
1093ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
1094ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1095ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1096ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d policy 0x%2.2x\n", btohs(cp->handle), policy);
1097ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1098ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_lptostr(policy);
1099ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
1100ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1101ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Link policy: %s\n", str);
1102ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
1103ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1104ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1105ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1106f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmannstatic inline void write_default_link_policy_dump(int level, struct frame *frm)
1107f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann{
1108f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	uint16_t policy = btohs(htons(get_u16(frm)));
1109f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	char *str;
1110f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
1111f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	p_indent(level, frm);
1112f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	printf("policy 0x%2.2x\n", policy);
1113f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
1114f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	str = hci_lptostr(policy);
1115f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	if (str) {
1116f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		p_indent(level, frm);
1117f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		printf("Link policy: %s\n", str);
1118f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		free(str);
1119f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	}
1120f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann}
1121f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
11223b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void sniff_subrating_dump(int level, struct frame *frm)
1123120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann{
11243b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	sniff_subrating_cp *cp = frm->ptr;
1125120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
1126120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
1127120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("handle %d\n", btohs(cp->handle));
1128120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
1129120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
1130f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann	printf("max latency %d\n", btohs(cp->max_latency));
1131120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
1132120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
1133120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("min timeout remote %d local %d\n",
1134120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		btohs(cp->min_remote_timeout), btohs(cp->min_local_timeout));
1135120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann}
1136120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
113744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_mask_dump(int level, struct frame *frm)
113844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
113944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	set_event_mask_cp *cp = frm->ptr;
114044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	int i;
114144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
114244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
114344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("Mask: 0x");
114444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	for (i = 0; i < 8; i++)
114544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("%2.2x", cp->mask[i]);
114644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("\n");
114744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
114844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
114944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_flt_dump(int level, struct frame *frm)
115044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
115144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	set_event_flt_cp *cp = frm->ptr;
1152cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann	uint8_t dev_class[3], dev_mask[3];
1153cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann	char addr[18];
115444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
115544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
1156662fd6cd30f3adbfef7c39e2bfcfb1107d96ebbbMarcel Holtmann	printf("type %d condition %d\n", cp->flt_type,
1157662fd6cd30f3adbfef7c39e2bfcfb1107d96ebbbMarcel Holtmann				(cp->flt_type == 0) ? 0 : cp->cond_type);
115844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
115944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	switch (cp->flt_type) {
116044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_CLEAR_ALL:
116151c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
116244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Clear all filters\n");
116344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
116444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_INQ_RESULT:
116551c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
116644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Inquiry result");
116744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		switch (cp->cond_type) {
116844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_ALL:
1169cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" for all devices\n");
1170cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
117144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_CLASS:
1172cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			memcpy(dev_class, cp->condition, 3);
1173cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			memcpy(dev_mask, cp->condition + 3, 3);
1174cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" with class 0x%2.2x%2.2x%2.2x mask 0x%2.2x%2.2x%2.2x\n",
1175cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann				dev_class[2], dev_class[1], dev_class[0],
1176cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann				dev_mask[2], dev_mask[1], dev_mask[0]);
1177cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
117844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_BDADDR:
1179bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str((bdaddr_t *) cp->condition, addr);
1180cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" with bdaddr %s\n", addr);
1181cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
118244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		default:
118344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			printf("\n");
118444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			break;
118544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		}
118644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
118744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_CONN_SETUP:
118851c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
118944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Connection setup");
119044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		switch (cp->cond_type) {
119144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_ALL:
119244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_CLASS:
119344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_BDADDR:
119444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		default:
119544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			printf("\n");
119644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			break;
119744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		}
119844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
119944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
120044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
120144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
120244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_pin_type_dump(int level, struct frame *frm)
120344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
120444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	write_pin_type_cp *cp = frm->ptr;
120544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
120644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
120744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("type %d\n", cp->pin_type);
120844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
120944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
121044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void request_stored_link_key_dump(int level, struct frame *frm)
121144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
121244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_stored_link_key_cp *cp = frm->ptr;
121344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	char addr[18];
121444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
121544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
1216bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
121744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s all %d\n", addr, cp->read_all);
121844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
121944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
122044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void return_link_keys_dump(int level, struct frame *frm)
122144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
122244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	uint8_t num = get_u8(frm);
122344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	uint8_t key[16];
122444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	char addr[18];
122544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	int i, n;
122644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
122744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	for (n = 0; n < num; n++) {
1228bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(frm->ptr, addr);
122944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		memcpy(key, frm->ptr + 6, 16);
123044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
123144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
123244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("bdaddr %s key ", addr);
123344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		for (i = 0; i < 16; i++)
1234a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			if (parser.flags & DUMP_NOVENDOR)
1235a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann				printf("**");
1236a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			else
1237a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann				printf("%2.2X", key[i]);
123844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("\n");
123944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
124044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		frm->ptr += 2;
124144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		frm->len -= 2;
124244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
124344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
124444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
1245ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void change_local_name_dump(int level, struct frame *frm)
1246ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1247ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	change_local_name_cp *cp = frm->ptr;
1248ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char name[249];
1249ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
1250ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1251ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(name, 0, sizeof(name));
1252ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 248 && cp->name[i]; i++)
1253ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (isprint(cp->name[i]))
1254ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = cp->name[i];
1255ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		else
1256ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = '.';
1257ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1258ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1259ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("name \'%s\'\n", name);
1260ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1261ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1262ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_class_of_dev_dump(int level, struct frame *frm)
1263ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1264ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_class_of_dev_cp *cp = frm->ptr;
1265ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1266ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1267ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("class 0x%2.2x%2.2x%2.2x\n",
1268120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			cp->dev_class[2], cp->dev_class[1], cp->dev_class[0]);
1269ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1270ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1271ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_voice_setting_dump(int level, struct frame *frm)
1272ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1273ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_voice_setting_cp *cp = frm->ptr;
1274ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1275ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1276ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("voice setting 0x%4.4x\n", btohs(cp->voice_setting));
1277ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1278ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1279fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void write_current_iac_lap_dump(int level, struct frame *frm)
1280fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{
1281fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	write_current_iac_lap_cp *cp = frm->ptr;
1282fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	int i;
1283fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
1284fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	for (i = 0; i < cp->num_current_iac; i++) {
1285fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		p_indent(level, frm);
1286fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("IAC 0x%2.2x%2.2x%2.2x", cp->lap[i][2], cp->lap[i][1], cp->lap[i][0]);
1287fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		if (cp->lap[i][2] == 0x9e && cp->lap[i][1] == 0x8b) {
1288fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			switch (cp->lap[i][0]) {
1289fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x00:
1290fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (Limited Inquiry Access Code)");
1291fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
1292fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x33:
1293fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (General Inquiry Access Code)");
1294fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
1295fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			}
1296fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		}
1297fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("\n");
1298fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	}
1299fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann}
1300fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
130169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void write_scan_enable_dump(int level, struct frame *frm)
130269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{
130369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t enable = get_u8(frm);
130469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
130569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	p_indent(level, frm);
130669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	printf("enable %d\n", enable);
130769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann}
130869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
1309d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_timeout_dump(int level, struct frame *frm)
1310d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
1311d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	write_page_timeout_cp *cp = frm->ptr;
1312d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1313d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
1314d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("timeout %d\n", btohs(cp->timeout));
1315d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
1316d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1317d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_activity_dump(int level, struct frame *frm)
1318d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
1319d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	write_page_activity_cp *cp = frm->ptr;
1320d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1321d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
1322d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("interval %d window %d\n", btohs(cp->interval), btohs(cp->window));
1323d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
1324d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1325a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void write_inquiry_scan_type_dump(int level, struct frame *frm)
1326a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{
1327a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	write_inquiry_scan_type_cp *cp = frm->ptr;
1328a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
1329a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	p_indent(level, frm);
1330a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	printf("type %d\n", cp->type);
1331a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann}
1332a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
1333f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmannstatic inline void write_inquiry_mode_dump(int level, struct frame *frm)
1334f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann{
1335f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	write_inquiry_mode_cp *cp = frm->ptr;
1336f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann
1337f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	p_indent(level, frm);
1338f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	printf("mode %d\n", cp->mode);
1339f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann}
1340f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann
1341994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmannstatic inline void set_afh_classification_dump(int level, struct frame *frm)
1342994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann{
1343994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	set_afh_classification_cp *cp = frm->ptr;
1344994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	int i;
1345994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann
1346994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	p_indent(level, frm);
1347994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	printf("map 0x");
1348994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	for (i = 0; i < 10; i++)
1349994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann		printf("%02x", cp->map[i]);
1350994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	printf("\n");
1351994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann}
1352994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann
13536eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void write_link_supervision_timeout_dump(int level, struct frame *frm)
13546eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
13556eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	write_link_supervision_timeout_cp *cp = frm->ptr;
13566eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
13576eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
13586eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("handle %d timeout %d\n",
1359d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann				btohs(cp->handle), btohs(cp->timeout));
13606eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
13616eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
13621a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void write_ext_inquiry_response_dump(int level, struct frame *frm)
13631a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{
13641a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	write_ext_inquiry_response_cp *cp = frm->ptr;
13651a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
13661a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	p_indent(level, frm);
13671a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	printf("fec 0x%2.2x\n", cp->fec);
1368f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
1369f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	frm->ptr++;
1370f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	frm->len--;
1371f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
1372e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	ext_inquiry_response_dump(level, frm);
13731a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann}
13741a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
13753b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void write_inquiry_transmit_power_level_dump(int level, struct frame *frm)
13763b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
13773b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	write_inquiry_transmit_power_level_cp *cp = frm->ptr;
13783b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
13793b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
13803b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("level %d\n", cp->level);
13813b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
13823b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
13833b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void write_default_error_data_reporting_dump(int level, struct frame *frm)
13843b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
13853b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	write_default_error_data_reporting_cp *cp = frm->ptr;
13863b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
13873b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
13883b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("reporting %d\n", cp->reporting);
13893b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
13903b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
13913b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void enhanced_flush_dump(int level, struct frame *frm)
13923b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
13933b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	enhanced_flush_cp *cp = frm->ptr;
13943b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
13953b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
13963b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("handle %d type %d\n", btohs(cp->handle), cp->type);
13973b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
13983b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
1399b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void send_keypress_notify_dump(int level, struct frame *frm)
1400b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
1401b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	send_keypress_notify_cp *cp = frm->ptr;
1402b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
1403b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1404b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1405b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
1406b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s type %d\n", addr, cp->type);
1407b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
1408b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
14096eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void request_transmit_power_level_dump(int level, struct frame *frm)
14106eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
14116eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_transmit_power_level_cp *cp = frm->ptr;
14126eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
14136eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
14146eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("handle %d type %d (%s)\n",
1415120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(cp->handle), cp->type,
1416120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					cp->type ? "maximum" : "current");
14176eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
14186eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
141917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void request_local_ext_features_dump(int level, struct frame *frm)
142017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
142117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_ext_features_cp *cp = frm->ptr;
142217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
142317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
142417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("page %d\n", cp->page_num);
142517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
142617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1427f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void request_clock_dump(int level, struct frame *frm)
1428f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
1429f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_clock_cp *cp = frm->ptr;
1430f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1431f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
1432f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("handle %d which %d (%s)\n",
1433120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(cp->handle), cp->which_clock,
1434120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					cp->which_clock ? "piconet" : "local");
1435f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
1436f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
14372315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmannstatic inline void host_buffer_size_dump(int level, struct frame *frm)
14382315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann{
14392315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	host_buffer_size_cp *cp = frm->ptr;
14402315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann
14412315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	p_indent(level, frm);
14422315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	printf("ACL MTU %d:%d SCO MTU %d:%d\n",
14432315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann				btohs(cp->acl_mtu), btohs(cp->acl_max_pkt),
14442315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann				cp->sco_mtu, btohs(cp->sco_max_pkt));
14452315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann}
14462315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann
14471b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmannstatic inline void num_comp_pkts_dump(int level, struct frame *frm)
14481b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann{
14491b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	uint8_t num = get_u8(frm);
14501b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	uint16_t handle, packets;
14511b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	int i;
14521b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
14531b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	for (i = 0; i < num; i++) {
14541b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		handle = btohs(htons(get_u16(frm)));
14551b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		packets = btohs(htons(get_u16(frm)));
14561b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
14571b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		p_indent(level, frm);
14581b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		printf("handle %d packets %d\n", handle, packets);
14591b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	}
14601b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann}
14611b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
1462b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void le_create_connection_dump(int level, struct frame *frm)
1463b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{
1464b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	char addr[18];
1465b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	le_create_connection_cp *cp = frm->ptr;
1466b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
1467b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_indent(level, frm);
1468b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_ba2str(&cp->peer_bdaddr, addr);
1469b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	printf("bdaddr %s type %d\n", addr, cp->peer_bdaddr_type);
1470b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo}
1471b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
1472d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void command_dump(int level, struct frame *frm)
1473d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1474d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	hci_command_hdr *hdr = frm->ptr;
1475d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(hdr->opcode);
1476d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
1477d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
1478d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1479d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (p_filter(FILT_HCI))
1480d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		return;
1481d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
14827b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
14837b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
148465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
14857b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	p_indent(level, frm);
1486803752117135528b1adebf0fa045596e188a996dMarcel Holtmann	printf("HCI Command: %s (0x%2.2x|0x%4.4x) plen %d\n",
1487120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				opcode2str(opcode), ogf, ocf, hdr->plen);
148865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
148965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->ptr += HCI_COMMAND_HDR_SIZE;
149065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->len -= HCI_COMMAND_HDR_SIZE;
149165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
14927b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD) {
14933b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		if (ocf == 0 && get_manufacturer() == 10) {
14947b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			csr_dump(level + 1, frm);
14957b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			return;
14967b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		}
1497be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	}
1498be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann
14994f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
15004f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		raw_dump(level, frm);
15014f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		return;
15024f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	}
15034f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann
1504ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	switch (ogf) {
1505ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_CTL:
1506ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
1507ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_INQUIRY:
1508ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			inquiry_dump(level + 1, frm);
1509ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1510ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PERIODIC_INQUIRY:
1511ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			periodic_inquiry_dump(level + 1, frm);
1512ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1513ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_INQUIRY_CANCEL:
1514ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_PERIODIC_INQUIRY:
1515ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1516ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CREATE_CONN:
1517ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			create_conn_dump(level + 1, frm);
1518ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1519ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_DISCONNECT:
1520ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			disconnect_dump(level + 1, frm);
1521ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
152290480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_CREATE_CONN_CANCEL:
152390480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REMOTE_NAME_REQ_CANCEL:
152490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_ACCEPT_SYNC_CONN_REQ:
152590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann			bdaddr_command_dump(level + 1, frm);
152690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann			return;
1527ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ADD_SCO:
1528ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SET_CONN_PTYPE:
1529ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			add_sco_dump(level + 1, frm);
1530acc2322e0bed89e8ada2564359a1a6d293c9d514Marcel Holtmann			return;
1531ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ACCEPT_CONN_REQ:
1532ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			accept_conn_req_dump(level + 1, frm);
1533ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1534ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_REJECT_CONN_REQ:
153590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REJECT_SYNC_CONN_REQ:
1536b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_NEG_REPLY:
1537ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			reject_conn_req_dump(level + 1, frm);
1538ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1539ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_REPLY:
1540ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			pin_code_reply_dump(level + 1, frm);
1541ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1542ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_REPLY:
1543ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			link_key_reply_dump(level + 1, frm);
1544ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1545ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_NEG_REPLY:
1546ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_NEG_REPLY:
1547b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_REPLY:
1548b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_NEG_REPLY:
1549b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_NEG_REPLY:
1550b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_NEG_REPLY:
1551ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			pin_code_neg_reply_dump(level + 1, frm);
1552ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1553b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_REPLY:
1554b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			user_passkey_reply_dump(level + 1, frm);
1555b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1556b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_REPLY:
1557b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			remote_oob_data_reply_dump(level + 1, frm);
1558b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1559b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_REPLY:
1560b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			io_capability_reply_dump(level + 1, frm);
1561b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1562ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SET_CONN_ENCRYPT:
1563ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			set_conn_encrypt_dump(level + 1, frm);
1564ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1565ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_AUTH_REQUESTED:
1566ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CHANGE_CONN_LINK_KEY:
1567ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_REMOTE_FEATURES:
1568ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_REMOTE_VERSION:
1569ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_CLOCK_OFFSET:
157090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_READ_LMP_HANDLE:
1571c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_DISCONNECT_LOGICAL_LINK:
1572ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_command_dump(level + 1, frm);
1573ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
157417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_MASTER_LINK_KEY:
157517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			master_link_key_dump(level + 1, frm);
157617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
157717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_REMOTE_EXT_FEATURES:
157817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_remote_ext_features_dump(level + 1, frm);
157917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
1580ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_REMOTE_NAME_REQ:
1581ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			remote_name_req_dump(level + 1, frm);
1582ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1583c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann		case OCF_SETUP_SYNC_CONN:
1584c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann			setup_sync_conn_dump(level + 1, frm);
1585c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann			return;
1586c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_CREATE_PHYSICAL_LINK:
1587c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_ACCEPT_PHYSICAL_LINK:
1588c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			create_physical_link_dump(level + 1, frm);
1589c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			return;
1590c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_CREATE_LOGICAL_LINK:
1591c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_ACCEPT_LOGICAL_LINK:
1592c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			create_logical_link_dump(level + 1, frm);
1593c7f436764386ca845317b678f3330340ccd838b8Inga Stotland			return;
1594ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1595ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1596ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1597ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_POLICY:
1598ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
15999ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_HOLD_MODE:
16009ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_PARK_MODE:
16019ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			hold_mode_dump(level + 1, frm);
16029ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			return;
16039ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_SNIFF_MODE:
16049ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			sniff_mode_dump(level + 1, frm);
16059ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			return;
1606ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_SNIFF_MODE:
1607ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_PARK_MODE:
1608ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ROLE_DISCOVERY:
1609ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_LINK_POLICY:
1610ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_command_dump(level + 1, frm);
1611ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1612f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_READ_DEFAULT_LINK_POLICY:
1613f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
1614ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SWITCH_ROLE:
1615ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			accept_conn_req_dump(level + 1, frm);
1616ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
16174894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann		case OCF_QOS_SETUP:
16184894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann			qos_setup_dump(level + 1, frm);
16194894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann			return;
1620ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_LINK_POLICY:
1621ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_link_policy_dump(level + 1, frm);
1622ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1623f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_WRITE_DEFAULT_LINK_POLICY:
1624f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			write_default_link_policy_dump(level + 1, frm);
1625f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
16263b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_SNIFF_SUBRATING:
16273b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			sniff_subrating_dump(level + 1, frm);
1628120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			return;
1629ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1630ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1631ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1632ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_HOST_CTL:
1633ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
163444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_RESET:
163544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_CREATE_NEW_UNIT_KEY:
163644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
163744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_MASK:
1638c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_SET_EVENT_MASK_PAGE_2:
163944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			set_event_mask_dump(level + 1, frm);
164044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
164144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_FLT:
164244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			set_event_flt_dump(level + 1, frm);
164344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
164444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_PIN_TYPE:
164544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			write_pin_type_dump(level + 1, frm);
164644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
164744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_STORED_LINK_KEY:
164844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_DELETE_STORED_LINK_KEY:
164944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			request_stored_link_key_dump(level + 1, frm);
165044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
165144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_STORED_LINK_KEY:
165244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return_link_keys_dump(level + 1, frm);
165344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
1654ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CHANGE_LOCAL_NAME:
1655ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			change_local_name_dump(level + 1, frm);
1656ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1657ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_CLASS_OF_DEV:
1658ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_class_of_dev_dump(level + 1, frm);
1659ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1660ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_VOICE_SETTING:
1661ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_voice_setting_dump(level + 1, frm);
1662ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1663fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_CURRENT_IAC_LAP:
1664fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			write_current_iac_lap_dump(level + 1, frm);
1665fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			return;
166669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_SCAN_ENABLE:
166769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_AUTH_ENABLE:
16688583de68ea3be3ada739dcc84d811fc752d45a03Marcel Holtmann		case OCF_SET_CONTROLLER_TO_HOST_FC:
166969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			write_scan_enable_dump(level + 1, frm);
167069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			return;
1671c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT:
1672097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_WRITE_CONN_ACCEPT_TIMEOUT:
1673d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_TIMEOUT:
1674d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			write_page_timeout_dump(level + 1, frm);
1675d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
1676d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_ACTIVITY:
1677d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_INQ_ACTIVITY:
1678d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			write_page_activity_dump(level + 1, frm);
1679d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
1680a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_WRITE_INQUIRY_SCAN_TYPE:
1681a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			write_inquiry_scan_type_dump(level + 1, frm);
1682a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			return;
168369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_ENCRYPT_MODE:
1684f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_INQUIRY_MODE:
1685f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_AFH_MODE:
1686f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			write_inquiry_mode_dump(level + 1, frm);
1687f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			return;
1688994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann		case OCF_SET_AFH_CLASSIFICATION:
1689994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann			set_afh_classification_dump(level + 1, frm);
1690994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann			return;
16916eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_TRANSMIT_POWER_LEVEL:
16926eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			request_transmit_power_level_dump(level + 1, frm);
16936eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
16942315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann		case OCF_HOST_BUFFER_SIZE:
16952315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann			host_buffer_size_dump(level + 1, frm);
16962315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann			return;
16971b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		case OCF_HOST_NUM_COMP_PKTS:
16981b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann			num_comp_pkts_dump(level + 1, frm);
16991b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann			return;
170044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_FLUSH:
17016eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_LINK_SUPERVISION_TIMEOUT:
17023b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_REFRESH_ENCRYPTION_KEY:
1703c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT:
17046eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			generic_command_dump(level + 1, frm);
17056eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
17066eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:
17076eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			write_link_supervision_timeout_dump(level + 1, frm);
17086eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
17091a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_WRITE_EXT_INQUIRY_RESPONSE:
17101a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			write_ext_inquiry_response_dump(level + 1, frm);
17111a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			return;
1712b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_MODE:
1713c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_WRITE_FLOW_CONTROL_MODE:
1714b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			generic_write_mode_dump(level + 1, frm);
1715b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
17163b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL:
17173b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			write_inquiry_transmit_power_level_dump(level + 1, frm);
17183b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
17193b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING:
17203b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			write_default_error_data_reporting_dump(level + 1, frm);
17213b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
17223b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_ENHANCED_FLUSH:
17233b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			enhanced_flush_dump(level + 1, frm);
17243b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
1725b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_SEND_KEYPRESS_NOTIFY:
1726b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			send_keypress_notify_dump(level + 1, frm);
1727b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1728ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1729ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
173017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
173117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case OGF_INFO_PARAM:
173217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		switch (ocf) {
173317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_EXT_FEATURES:
173417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			request_local_ext_features_dump(level + 1, frm);
173517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
173617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		}
1737ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1738f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1739f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	case OGF_STATUS_PARAM:
1740f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		switch (ocf) {
1741f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_LINK_QUALITY:
1742f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_RSSI:
1743f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_AFH_MAP:
1744f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			generic_command_dump(level + 1, frm);
1745f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1746f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_CLOCK:
1747f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			request_clock_dump(level + 1, frm);
1748f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1749f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		}
1750f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		break;
1751b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1752b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case OGF_TESTING_CMD:
1753b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		switch (ocf) {
1754b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_LOOPBACK_MODE:
1755b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE:
1756b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			generic_write_mode_dump(level + 1, frm);
1757b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
1758b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		}
1759b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
1760b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
1761b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	case OGF_LE_CTL:
1762b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		switch (ocf) {
1763b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		case OCF_LE_CREATE_CONN:
1764b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo			le_create_connection_dump(level + 1, frm);
1765b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo			return;
1766b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		}
1767b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
1768ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1769ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
177065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	raw_dump(level, frm);
177195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
177295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
1773d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void status_response_dump(int level, struct frame *frm)
1774d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1775d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t status = get_u8(frm);
1776d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1777d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
1778d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x\n", status);
1779d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1780d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (status > 0) {
1781d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
1782d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(status));
1783d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
1784d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1785d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	raw_dump(level, frm);
1786d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
1787d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1788afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void handle_response_dump(int level, struct frame *frm)
1789afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{
1790afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
1791afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
1792afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	p_indent(level, frm);
1793afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	printf("handle %d\n", handle);
1794afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
1795afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	raw_dump(level, frm);
1796afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann}
1797afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
1798ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void bdaddr_response_dump(int level, struct frame *frm)
1799ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1800ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint8_t status = get_u8(frm);
1801ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
1802ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
1803ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1804ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	frm->ptr += sizeof(bdaddr_t);
1805ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	frm->len -= sizeof(bdaddr_t);
1806ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1807ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1808bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
1809ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x bdaddr %s\n", status, addr);
1810ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1811ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (status > 0) {
1812ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1813ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(status));
1814ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1815ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1816ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	raw_dump(level, frm);
1817ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1818ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1819d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void generic_response_dump(int level, struct frame *frm)
1820d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1821d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t status = get_u8(frm);
1822d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
1823d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1824d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
1825d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d\n", status, handle);
1826d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1827d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (status > 0) {
1828d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
1829d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(status));
1830d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
1831d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1832d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	raw_dump(level, frm);
1833d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
1834d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1835b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void status_mode_dump(int level, struct frame *frm)
1836b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
1837b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint8_t status = get_u8(frm);
1838b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	uint8_t mode = get_u8(frm);
1839b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1840b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
1841b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("status 0x%2.2x mode 0x%2.2x\n", status, mode);
1842b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
1843b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	if (status > 0) {
1844b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
1845b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("Error: %s\n", status2str(status));
1846b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
1847b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
1848b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
18496d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmannstatic inline void read_link_policy_dump(int level, struct frame *frm)
18506d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann{
18516d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	read_link_policy_rp *rp = frm->ptr;
18526d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	uint16_t policy = btohs(rp->policy);
18536d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	char *str;
18546d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann
18556d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	p_indent(level, frm);
18566d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	printf("status 0x%2.2x handle %d policy 0x%2.2x\n",
18576d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann				rp->status, btohs(rp->handle), policy);
18586d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann
18596d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	if (rp->status > 0) {
18606d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		p_indent(level, frm);
18616d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
18626d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	} else {
18636d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		str = hci_lptostr(policy);
18646d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		if (str) {
18656d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			p_indent(level, frm);
18666d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			printf("Link policy: %s\n", str);
18676d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			free(str);
18686d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		}
18696d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann	}
18706d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann}
18716d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann
1872f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmannstatic inline void read_default_link_policy_dump(int level, struct frame *frm)
1873f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann{
1874f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	uint8_t status = get_u8(frm);
1875f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	uint16_t policy = btohs(htons(get_u16(frm)));
1876f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	char *str;
1877f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
1878f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	p_indent(level, frm);
1879f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	printf("status 0x%2.2x policy 0x%2.2x\n", status, policy);
1880f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
1881f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	if (status > 0) {
1882f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		p_indent(level, frm);
1883f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		printf("Error: %s\n", status2str(status));
1884f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	} else {
1885f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		str = hci_lptostr(policy);
1886f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		if (str) {
1887f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			p_indent(level, frm);
1888f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			printf("Link policy: %s\n", str);
1889f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			free(str);
1890f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		}
1891f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann	}
1892f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann}
1893f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann
189444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_pin_type_dump(int level, struct frame *frm)
189544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
189644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_pin_type_rp *rp = frm->ptr;
189744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
189844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
189944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x type %d\n", rp->status, rp->pin_type);
190044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
190144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
190244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
190344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
190444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
190544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
190644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
190744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_stored_link_key_dump(int level, struct frame *frm)
190844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
190944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_stored_link_key_rp *rp = frm->ptr;
191044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
191144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
191244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x max %d num %d\n",
1913120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, rp->max_keys, rp->num_keys);
191444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
191544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
191644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
191744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
191844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
191944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
192044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
192144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_stored_link_key_dump(int level, struct frame *frm)
192244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
192344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	write_stored_link_key_rp *rp = frm->ptr;
192444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
192544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
192644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x written %d\n", rp->status, rp->num_keys);
192744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
192844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
192944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
193044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
193144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
193244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
193344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
193444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void delete_stored_link_key_dump(int level, struct frame *frm)
193544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
193644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	delete_stored_link_key_rp *rp = frm->ptr;
193744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
193844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
193944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x deleted %d\n", rp->status, btohs(rp->num_keys));
194044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
194144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
194244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
194344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
194444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
194544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
194644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
1947ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_name_dump(int level, struct frame *frm)
1948ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1949ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_name_rp *rp = frm->ptr;
1950ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char name[249];
1951ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
1952ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1953ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(name, 0, sizeof(name));
1954ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 248 && rp->name[i]; i++)
1955ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (isprint(rp->name[i]))
1956ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = rp->name[i];
1957ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		else
1958ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = '.';
1959ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1960ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1961ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x name \'%s\'\n", rp->status, name);
1962ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1963ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
1964ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1965ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1966ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1967ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1968ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1969ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_class_of_dev_dump(int level, struct frame *frm)
1970ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1971ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_class_of_dev_rp *rp = frm->ptr;
1972ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1973ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1974ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x class 0x%2.2x%2.2x%2.2x\n", rp->status,
1975120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]);
1976ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1977ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
1978ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1979ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1980ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1981ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1982ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1983ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_voice_setting_dump(int level, struct frame *frm)
1984ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1985ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_voice_setting_rp *rp = frm->ptr;
1986ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1987ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1988ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x voice setting 0x%4.4x\n",
1989120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->status, btohs(rp->voice_setting));
1990ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1991ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
1992ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1993ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1994ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1995ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1996ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1997fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void read_current_iac_lap_dump(int level, struct frame *frm)
1998fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{
1999fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	read_current_iac_lap_rp *rp = frm->ptr;
2000fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	int i;
2001fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
2002fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	for (i = 0; i < rp->num_current_iac; i++) {
2003fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		p_indent(level, frm);
2004fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("IAC 0x%2.2x%2.2x%2.2x", rp->lap[i][2], rp->lap[i][1], rp->lap[i][0]);
2005fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		if (rp->lap[i][2] == 0x9e && rp->lap[i][1] == 0x8b) {
2006fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			switch (rp->lap[i][0]) {
2007fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x00:
2008fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (Limited Inquiry Access Code)");
2009fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
2010fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x33:
2011fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (General Inquiry Access Code)");
2012fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
2013fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			}
2014fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		}
2015fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("\n");
2016fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	}
2017fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann}
2018fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
201969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void read_scan_enable_dump(int level, struct frame *frm)
202069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{
202169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t status = get_u8(frm);
202269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t enable = get_u8(frm);
202369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
202469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	p_indent(level, frm);
202569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	printf("status 0x%2.2x enable %d\n", status, enable);
202669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
202769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	if (status > 0) {
202869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		p_indent(level, frm);
202969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		printf("Error: %s\n", status2str(status));
203069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	}
203169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann}
203269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
2033d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_timeout_dump(int level, struct frame *frm)
2034d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
2035d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	read_page_timeout_rp *rp = frm->ptr;
2036d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2037d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
2038d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("status 0x%2.2x timeout %d\n", rp->status, btohs(rp->timeout));
2039d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2040d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	if (rp->status > 0) {
2041d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		p_indent(level, frm);
2042d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2043d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	}
2044d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
2045d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2046d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_activity_dump(int level, struct frame *frm)
2047d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
2048d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	read_page_activity_rp *rp = frm->ptr;
2049d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2050d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
2051d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("status 0x%2.2x interval %d window %d\n",
2052120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->status, btohs(rp->interval), btohs(rp->window));
2053d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2054d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	if (rp->status > 0) {
2055d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		p_indent(level, frm);
2056d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2057d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	}
2058d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
2059d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
2060a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void read_inquiry_scan_type_dump(int level, struct frame *frm)
2061a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{
2062a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	read_inquiry_scan_type_rp *rp = frm->ptr;
2063a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
2064a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	p_indent(level, frm);
2065a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	printf("status 0x%2.2x type %d\n", rp->status, rp->type);
2066a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
2067a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	if (rp->status > 0) {
2068a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		p_indent(level, frm);
2069a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2070a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	}
2071a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann}
2072a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
20736eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_inquiry_mode_dump(int level, struct frame *frm)
20746eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
20756eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_inquiry_mode_rp *rp = frm->ptr;
20766eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
20776eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
20786eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x mode %d\n", rp->status, rp->mode);
20796eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
20806eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
20816eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
20826eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
20836eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
20846eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
20856eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
20866eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_link_supervision_timeout_dump(int level, struct frame *frm)
20876eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
20886eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_link_supervision_timeout_rp *rp = frm->ptr;
20896eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
20906eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
20916eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x handle %d timeout %d\n",
2092d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann			rp->status, btohs(rp->handle), btohs(rp->timeout));
20936eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
20946eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
20956eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
20966eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
20976eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
20986eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
20996eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
21006eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_transmit_power_level_dump(int level, struct frame *frm)
21016eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
21026eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_transmit_power_level_rp *rp = frm->ptr;
21036eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
21046eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
21056eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x handle %d level %d\n",
2106120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->level);
21076eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
21086eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
21096eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
21106eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
21116eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
21126eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
21136eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
21141a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void read_ext_inquiry_response_dump(int level, struct frame *frm)
21151a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{
21161a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	read_ext_inquiry_response_rp *rp = frm->ptr;
21171a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
21181a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	p_indent(level, frm);
21191a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	printf("status 0x%2.2x fec 0x%2.2x\n", rp->status, rp->fec);
21201a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
21211a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	if (rp->status > 0) {
21221a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		p_indent(level, frm);
21231a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2124f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	} else {
2125f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann		frm->ptr += 2;
2126f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann		frm->len -= 2;
2127f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
2128e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		ext_inquiry_response_dump(level, frm);
21291a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	}
21301a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann}
21311a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
21323b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void read_inquiry_transmit_power_level_dump(int level, struct frame *frm)
21333b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
21343b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	read_inquiry_transmit_power_level_rp *rp = frm->ptr;
21353b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
21363b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
21373b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("status 0x%2.2x level %d\n", rp->status, rp->level);
21383b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
21393b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	if (rp->status > 0) {
21403b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		p_indent(level, frm);
21413b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
21423b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	}
21433b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
21443b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
21453b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void read_default_error_data_reporting_dump(int level, struct frame *frm)
21463b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
21473b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	read_default_error_data_reporting_rp *rp = frm->ptr;
21483b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
21493b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
21503b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("status 0x%2.2x reporting %d\n", rp->status, rp->reporting);
21513b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
21523b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	if (rp->status > 0) {
21533b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		p_indent(level, frm);
21543b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
21553b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	}
21563b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
21573b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
2158b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void read_local_oob_data_dump(int level, struct frame *frm)
2159b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
2160b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	read_local_oob_data_rp *rp = frm->ptr;
2161b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	int i;
2162b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2163b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
2164b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2165b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2166b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	if (rp->status > 0) {
2167b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
2168b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2169b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	} else {
2170b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
2171b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("hash 0x");
2172b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		for (i = 0; i < 16; i++)
2173b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			printf("%02x", rp->hash[i]);
2174b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("\n");
2175b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2176b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		p_indent(level, frm);
2177b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("randomizer 0x");
2178b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		for (i = 0; i < 16; i++)
2179b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			printf("%02x", rp->randomizer[i]);
2180b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		printf("\n");
2181b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	}
2182b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
2183b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2184ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_version_dump(int level, struct frame *frm)
2185ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2186ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_version_rp *rp = frm->ptr;
2187ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t manufacturer = btohs(rp->manufacturer);
2188ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2189ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2190ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2191ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2192ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2193ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2194ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2195ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2196ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
21971a5f2bff835728b9df12114adf87c704a1e9b6b8Marcel Holtmann		printf("HCI Version: %s (0x%x) HCI Revision: 0x%x\n",
2198120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					hci_vertostr(rp->hci_ver),
2199120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->hci_ver, btohs(rp->hci_rev));
2200ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2201ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n",
2202120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					lmp_vertostr(rp->lmp_ver),
2203120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->lmp_ver, btohs(rp->lmp_subver));
2204ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2205ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Manufacturer: %s (%d)\n",
2206120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				bt_compidtostr(manufacturer), manufacturer);
2207ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2208ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2209ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
221017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_commands_dump(int level, struct frame *frm)
221117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
221217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_commands_rp *rp = frm->ptr;
221317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i, max = 0;
221417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
221517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
221617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
221717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
221817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (rp->status > 0) {
221917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
222017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
222117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
222217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 64; i++)
222317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			if (rp->commands[i])
222417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann				max = i + 1;
222517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
222617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Commands: ");
222717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < (max > 32 ? 32 : max); i++)
222817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("%2.2x", rp->commands[i]);
222917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
223017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		if (max > 32) {
223117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			p_indent(level, frm);
223217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("          ");
223317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			for (i = 32; i < max; i++)
223417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann				printf("%2.2x", rp->commands[i]);
223517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("\n");
223617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		}
223717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
223817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
223917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
2240ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_features_dump(int level, struct frame *frm)
2241ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2242ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_features_rp *rp = frm->ptr;
2243ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
2244ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2245ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2246ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2247ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2248ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2249ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2250ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2251ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2252ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2253ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Features:");
2254ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		for (i = 0; i < 8; i++)
2255ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf(" 0x%2.2x", rp->features[i]);
2256ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("\n");
2257ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2258ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2259ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
226017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_ext_features_dump(int level, struct frame *frm)
226117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
226217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_ext_features_rp *rp = frm->ptr;
226317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i;
226417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
226517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
226617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x page %d max %d\n",
226717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		rp->status, rp->page_num, rp->max_page_num);
226817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
226917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (rp->status > 0) {
227017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
227117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
227217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
227317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
227417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Features:");
227517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 8; i++)
227617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			 printf(" 0x%2.2x", rp->features[i]);
227717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
227817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
227917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
228017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
2281ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_buffer_size_dump(int level, struct frame *frm)
2282ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2283ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_buffer_size_rp *rp = frm->ptr;
2284ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2285ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2286ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
2287ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2288ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
2289ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2290ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2291ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2292ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2293ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("ACL MTU %d:%d SCO MTU %d:%d\n",
2294120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				btohs(rp->acl_mtu), btohs(rp->acl_max_pkt),
2295120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->sco_mtu, btohs(rp->sco_max_pkt));
2296ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2297ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2298ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2299f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_link_quality_dump(int level, struct frame *frm)
2300f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2301f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_link_quality_rp *rp = frm->ptr;
2302f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2303f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2304f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d lq %d\n",
2305120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->status, btohs(rp->handle), rp->link_quality);
2306f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2307f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2308f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2309f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2310f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2311f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2312f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2313f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_rssi_dump(int level, struct frame *frm)
2314f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2315f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_rssi_rp *rp = frm->ptr;
2316f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2317f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2318f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d rssi %d\n",
2319120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->rssi);
2320f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2321f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2322f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2323f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2324f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2325f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2326f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2327f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_afh_map_dump(int level, struct frame *frm)
2328f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2329f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_afh_map_rp *rp = frm->ptr;
2330f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	int i;
2331f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2332f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2333f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d mode %d\n",
2334120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->mode);
2335f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2336f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2337f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2338f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2339f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	} else {
2340f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2341f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("AFH map: 0x");
2342f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		for (i = 0; i < 10; i++)
2343f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			printf("%2.2x", rp->map[i]);
2344f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("\n");
2345f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2346f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2347f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2348f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_clock_dump(int level, struct frame *frm)
2349f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
2350f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_clock_rp *rp = frm->ptr;
2351f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2352f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
2353f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d clock 0x%4.4x accuracy %d\n",
2354120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->status, btohs(rp->handle),
2355120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohl(rp->clock), btohs(rp->accuracy));
2356f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
2357f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
2358f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
2359f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
2360f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
2361f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
2362f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
236385478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void read_local_amp_info_dump(int level, struct frame *frm)
236485478602978104edbd412a87aff926c8f5311337Inga Stotland{
236585478602978104edbd412a87aff926c8f5311337Inga Stotland	read_local_amp_info_rp *rp = frm->ptr;
236685478602978104edbd412a87aff926c8f5311337Inga Stotland
236785478602978104edbd412a87aff926c8f5311337Inga Stotland	p_indent(level, frm);
236885478602978104edbd412a87aff926c8f5311337Inga Stotland	printf("status 0x%2.2x amp status 0x%2.2x\n",
236985478602978104edbd412a87aff926c8f5311337Inga Stotland			rp->status, rp->amp_status);
237085478602978104edbd412a87aff926c8f5311337Inga Stotland	if (rp->status > 0) {
237185478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
237285478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("Error: %s\n", status2str(rp->status));
237385478602978104edbd412a87aff926c8f5311337Inga Stotland	} else {
237485478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
237585478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("total bandwidth %d, max guaranteed bandwidth %d\n",
237685478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->total_bandwidth),
237785478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->max_guaranteed_bandwidth));
237885478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
237985478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("min latency %d, max PDU %d, controller type 0x%2.2x\n",
238085478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->min_latency), btohl(rp->max_pdu_size),
238185478602978104edbd412a87aff926c8f5311337Inga Stotland			rp->controller_type);
238285478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
238385478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("pal caps 0x%4.4x, max assoc len %d\n",
238485478602978104edbd412a87aff926c8f5311337Inga Stotland			btohs(rp->pal_caps), btohs(rp->max_amp_assoc_length));
238585478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
238685478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("max flush timeout %d, best effort flush timeout %d\n",
238785478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->max_flush_timeout),
238885478602978104edbd412a87aff926c8f5311337Inga Stotland			btohl(rp->best_effort_flush_timeout));
238985478602978104edbd412a87aff926c8f5311337Inga Stotland	}
239085478602978104edbd412a87aff926c8f5311337Inga Stotland}
239185478602978104edbd412a87aff926c8f5311337Inga Stotland
239285478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void read_local_amp_assoc_dump(int level, struct frame *frm)
239385478602978104edbd412a87aff926c8f5311337Inga Stotland{
239485478602978104edbd412a87aff926c8f5311337Inga Stotland	read_local_amp_assoc_rp *rp = frm->ptr;
239585478602978104edbd412a87aff926c8f5311337Inga Stotland	uint16_t len = btohs(rp->length);
239685478602978104edbd412a87aff926c8f5311337Inga Stotland	int i;
239785478602978104edbd412a87aff926c8f5311337Inga Stotland
239885478602978104edbd412a87aff926c8f5311337Inga Stotland	p_indent(level, frm);
239985478602978104edbd412a87aff926c8f5311337Inga Stotland	printf("status 0x%2.2x handle 0x%2.2x length %d\n",
240085478602978104edbd412a87aff926c8f5311337Inga Stotland			rp->status, rp->handle, len);
240185478602978104edbd412a87aff926c8f5311337Inga Stotland	if (rp->status > 0) {
240285478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
240385478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("Error: %s\n", status2str(rp->status));
240485478602978104edbd412a87aff926c8f5311337Inga Stotland	} else {
240585478602978104edbd412a87aff926c8f5311337Inga Stotland		for (i = 0; i < len; i++) {
240685478602978104edbd412a87aff926c8f5311337Inga Stotland			if (!(i % 16)) {
240785478602978104edbd412a87aff926c8f5311337Inga Stotland				printf("\n");
240885478602978104edbd412a87aff926c8f5311337Inga Stotland				p_indent(level, frm);
240985478602978104edbd412a87aff926c8f5311337Inga Stotland			}
241085478602978104edbd412a87aff926c8f5311337Inga Stotland			printf("%2.2x ", rp->fragment[i]);
241185478602978104edbd412a87aff926c8f5311337Inga Stotland		}
241285478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("\n");
241385478602978104edbd412a87aff926c8f5311337Inga Stotland	}
241485478602978104edbd412a87aff926c8f5311337Inga Stotland}
241585478602978104edbd412a87aff926c8f5311337Inga Stotland
241685478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void write_remote_amp_assoc_dump(int level, struct frame *frm)
241785478602978104edbd412a87aff926c8f5311337Inga Stotland{
241885478602978104edbd412a87aff926c8f5311337Inga Stotland	write_remote_amp_assoc_rp *rp = frm->ptr;
241985478602978104edbd412a87aff926c8f5311337Inga Stotland
242085478602978104edbd412a87aff926c8f5311337Inga Stotland	p_indent(level, frm);
242185478602978104edbd412a87aff926c8f5311337Inga Stotland	printf("status 0x%2.2x handle 0x%2.2x\n", rp->status, rp->handle);
242285478602978104edbd412a87aff926c8f5311337Inga Stotland	if (rp->status > 0) {
242385478602978104edbd412a87aff926c8f5311337Inga Stotland		p_indent(level, frm);
242485478602978104edbd412a87aff926c8f5311337Inga Stotland		printf("Error: %s\n", status2str(rp->status));
242585478602978104edbd412a87aff926c8f5311337Inga Stotland	}
242685478602978104edbd412a87aff926c8f5311337Inga Stotland}
242785478602978104edbd412a87aff926c8f5311337Inga Stotland
2428d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_complete_dump(int level, struct frame *frm)
2429d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2430d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_cmd_complete *evt = frm->ptr;
2431d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(evt->opcode);
2432d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
2433d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
2434d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
24357b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
24367b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
24377b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
2438d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2439d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("%s (0x%2.2x|0x%4.4x) ncmd %d\n",
2440120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				opcode2str(opcode), ogf, ocf, evt->ncmd);
2441d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2442d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	frm->ptr += EVT_CMD_COMPLETE_SIZE;
2443d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	frm->len -= EVT_CMD_COMPLETE_SIZE;
2444d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
24454f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
24464f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		raw_dump(level, frm);
24474f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		return;
24484f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	}
24494f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann
2450d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	switch (ogf) {
2451ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_CTL:
2452ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
245317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_INQUIRY_CANCEL:
245417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_PERIODIC_INQUIRY:
245517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_EXIT_PERIODIC_INQUIRY:
2456d51f2017d006ab5e9ec6f187142ae2ae1cffff8eMarcel Holtmann		case OCF_READ_REMOTE_EXT_FEATURES:
245717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			status_response_dump(level, frm);
245817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
245990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_CREATE_CONN_CANCEL:
246090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REMOTE_NAME_REQ_CANCEL:
2461ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_REPLY:
2462ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_REPLY:
2463ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_NEG_REPLY:
2464ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_NEG_REPLY:
2465b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_REPLY:
2466b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_CONFIRM_NEG_REPLY:
2467b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_REPLY:
2468b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_USER_PASSKEY_NEG_REPLY:
2469b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_REPLY:
2470b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REMOTE_OOB_DATA_NEG_REPLY:
2471b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_REPLY:
2472b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_IO_CAPABILITY_NEG_REPLY:
2473ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bdaddr_response_dump(level, frm);
2474ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2475ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
247617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2477ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2478ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_POLICY:
2479ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
24806d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann		case OCF_READ_LINK_POLICY:
24816d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			read_link_policy_dump(level, frm);
24826d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann			return;
2483ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_LINK_POLICY:
24843b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_SNIFF_SUBRATING:
2485ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_response_dump(level, frm);
2486ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2487f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_READ_DEFAULT_LINK_POLICY:
2488f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			read_default_link_policy_dump(level, frm);
2489f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
2490f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann		case OCF_WRITE_DEFAULT_LINK_POLICY:
2491f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			status_response_dump(level, frm);
2492f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann			return;
2493ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
249417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2495ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2496d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_HOST_CTL:
2497d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
249844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_PIN_TYPE:
249944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			read_pin_type_dump(level, frm);
250044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
250144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_STORED_LINK_KEY:
250244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			read_stored_link_key_dump(level, frm);
250344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
250444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_STORED_LINK_KEY:
250544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			write_stored_link_key_dump(level, frm);
250644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
250744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_DELETE_STORED_LINK_KEY:
250844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			delete_stored_link_key_dump(level, frm);
250944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
2510d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_NAME:
2511ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_name_dump(level, frm);
2512ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2513ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_CLASS_OF_DEV:
2514ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_class_of_dev_dump(level, frm);
2515ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2516ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_VOICE_SETTING:
2517ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_voice_setting_dump(level, frm);
2518ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2519fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_READ_CURRENT_IAC_LAP:
2520fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			read_current_iac_lap_dump(level, frm);
2521fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			return;
252269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_SCAN_ENABLE:
252369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_AUTH_ENABLE:
252469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			read_scan_enable_dump(level, frm);
252569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			return;
2526097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_READ_CONN_ACCEPT_TIMEOUT:
2527d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_PAGE_TIMEOUT:
252885478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_LOGICAL_LINK_ACCEPT_TIMEOUT:
2529d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			read_page_timeout_dump(level, frm);
2530d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
2531d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_PAGE_ACTIVITY:
2532d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_INQ_ACTIVITY:
2533d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			read_page_activity_dump(level, frm);
2534d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
2535a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_READ_INQUIRY_SCAN_TYPE:
2536a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			read_inquiry_scan_type_dump(level, frm);
2537a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			return;
253869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_ENCRYPT_MODE:
2539f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_READ_INQUIRY_MODE:
2540f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_READ_AFH_MODE:
2541f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			read_inquiry_mode_dump(level, frm);
2542f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			return;
25436eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_LINK_SUPERVISION_TIMEOUT:
25446eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			read_link_supervision_timeout_dump(level, frm);
25456eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
25466eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_TRANSMIT_POWER_LEVEL:
25476eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			read_transmit_power_level_dump(level, frm);
25486eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
25491a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_READ_EXT_INQUIRY_RESPONSE:
25501a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			read_ext_inquiry_response_dump(level, frm);
25511a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			return;
25523b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL:
25533b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			read_inquiry_transmit_power_level_dump(level, frm);
25543b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
25553b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_READ_DEFAULT_ERROR_DATA_REPORTING:
25563b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			read_default_error_data_reporting_dump(level, frm);
25573b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann			return;
2558b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_READ_LOCAL_OOB_DATA:
2559b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			read_local_oob_data_dump(level, frm);
2560b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
2561b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_READ_SIMPLE_PAIRING_MODE:
2562c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_READ_FLOW_CONTROL_MODE:
2563b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			status_mode_dump(level, frm);
2564b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
256544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_FLUSH:
25666eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:
25676eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			generic_response_dump(level, frm);
25686eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
256944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_RESET:
257044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_MASK:
257144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_FLT:
257244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_PIN_TYPE:
257344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_CREATE_NEW_UNIT_KEY:
25741577526370e596583b15d68940c24e975e62a502Marcel Holtmann		case OCF_CHANGE_LOCAL_NAME:
2575f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_CLASS_OF_DEV:
2576f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_VOICE_SETTING:
2577fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_CURRENT_IAC_LAP:
257869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_SCAN_ENABLE:
257969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_AUTH_ENABLE:
258069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_ENCRYPT_MODE:
2581097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_WRITE_CONN_ACCEPT_TIMEOUT:
2582d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_TIMEOUT:
2583d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_ACTIVITY:
2584d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_INQ_ACTIVITY:
2585a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_WRITE_INQUIRY_SCAN_TYPE:
2586fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_INQUIRY_MODE:
2587fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_AFH_MODE:
2588d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_SET_AFH_CLASSIFICATION:
25891a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_WRITE_EXT_INQUIRY_RESPONSE:
2590b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_MODE:
25913b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL:
25923b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		case OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING:
25938583de68ea3be3ada739dcc84d811fc752d45a03Marcel Holtmann		case OCF_SET_CONTROLLER_TO_HOST_FC:
25942315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann		case OCF_HOST_BUFFER_SIZE:
2595b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_REFRESH_ENCRYPTION_KEY:
2596b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_SEND_KEYPRESS_NOTIFY:
259785478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT:
259885478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_SET_EVENT_MASK_PAGE_2:
2599c7f436764386ca845317b678f3330340ccd838b8Inga Stotland		case OCF_WRITE_LOCATION_DATA:
260085478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_FLOW_CONTROL_MODE:
260185478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT:
260285478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_BEST_EFFORT_FLUSH_TIMEOUT:
2603d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			status_response_dump(level, frm);
2604ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2605d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
260617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2607d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2608d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_INFO_PARAM:
2609d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
2610d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_VERSION:
2611ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_version_dump(level, frm);
2612ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
261317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_COMMANDS:
261417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_local_commands_dump(level, frm);
261517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
2616d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_FEATURES:
2617ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_features_dump(level, frm);
2618ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
261917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_EXT_FEATURES:
262017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_local_ext_features_dump(level, frm);
262117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
2622d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_BUFFER_SIZE:
2623ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_buffer_size_dump(level, frm);
2624ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2625d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_BD_ADDR:
2626ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bdaddr_response_dump(level, frm);
2627ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
2628d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
262917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2630d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2631d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_STATUS_PARAM:
2632d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
2633d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_FAILED_CONTACT_COUNTER:
2634d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_RESET_FAILED_CONTACT_COUNTER:
2635f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			status_response_dump(level, frm);
2636f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2637d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LINK_QUALITY:
2638f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_link_quality_dump(level, frm);
2639f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2640d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_RSSI:
2641f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_rssi_dump(level, frm);
2642f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2643d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_AFH_MAP:
2644f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_afh_map_dump(level, frm);
2645f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
2646d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_CLOCK:
2647f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_clock_dump(level, frm);
2648ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
264985478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_LOCAL_AMP_INFO:
265085478602978104edbd412a87aff926c8f5311337Inga Stotland			read_local_amp_info_dump(level, frm);
265185478602978104edbd412a87aff926c8f5311337Inga Stotland			return;
265285478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_READ_LOCAL_AMP_ASSOC:
265385478602978104edbd412a87aff926c8f5311337Inga Stotland			read_local_amp_assoc_dump(level, frm);
265485478602978104edbd412a87aff926c8f5311337Inga Stotland			return;
265585478602978104edbd412a87aff926c8f5311337Inga Stotland		case OCF_WRITE_REMOTE_AMP_ASSOC:
265685478602978104edbd412a87aff926c8f5311337Inga Stotland			write_remote_amp_assoc_dump(level, frm);
265785478602978104edbd412a87aff926c8f5311337Inga Stotland			return;
2658d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
265917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2660b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2661b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case OGF_TESTING_CMD:
2662b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		switch (ocf) {
2663b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_READ_LOOPBACK_MODE:
2664b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			status_mode_dump(level, frm);
2665b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
2666b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_LOOPBACK_MODE:
2667b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_ENABLE_DEVICE_UNDER_TEST_MODE:
2668b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		case OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE:
2669b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			status_response_dump(level, frm);
2670b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann			return;
2671b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		}
2672b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
2673d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2674ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2675ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	raw_dump(level, frm);
2676d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2677d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2678d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_status_dump(int level, struct frame *frm)
2679d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2680d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_cmd_status *evt = frm->ptr;
2681d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(evt->opcode);
26827b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
26837b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
26847b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
26857b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
26867b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
2687d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2688d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2689d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("%s (0x%2.2x|0x%4.4x) status 0x%2.2x ncmd %d\n",
26907b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			opcode2str(opcode), ogf, ocf, evt->status, evt->ncmd);
2691d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2692d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2693d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2694d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2695d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2696d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2697d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2698afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void hardware_error_dump(int level, struct frame *frm)
2699afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{
2700afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	evt_hardware_error *evt = frm->ptr;
2701afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
2702afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	p_indent(level, frm);
2703afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	printf("code %d\n", evt->code);
2704afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann}
2705afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
2706d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_dump(int level, struct frame *frm)
2707d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2708d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t num = get_u8(frm);
2709b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	char addr[18];
2710d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
2711d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2712d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	for (i = 0; i < num; i++) {
2713d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inquiry_info *info = frm->ptr;
2714d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2715bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(&info->bdaddr, addr);
2716d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2717d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
271872e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x\n",
271972e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann			addr, info->pscan_rep_mode, btohs(info->clock_offset),
272072e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann			info->dev_class[2], info->dev_class[1], info->dev_class[0]);
2721d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2722d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		frm->ptr += INQUIRY_INFO_SIZE;
2723d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		frm->len -= INQUIRY_INFO_SIZE;
2724d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2725d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2726d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2727d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_complete_dump(int level, struct frame *frm)
2728d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2729d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_conn_complete *evt = frm->ptr;
2730d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18];
2731d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2732bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2733d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2734d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2735d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d bdaddr %s type %s encrypt 0x%2.2x\n",
2736120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			evt->status, btohs(evt->handle), addr,
2737fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann			linktype2str(evt->link_type), evt->encr_mode);
2738d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2739d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2740d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2741d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2742d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2743d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2744d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2745d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_request_dump(int level, struct frame *frm)
2746d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2747d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_conn_request *evt = frm->ptr;
2748d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18];
2749d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2750bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2751d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2752d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2753d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("bdaddr %s class 0x%2.2x%2.2x%2.2x type %s\n",
2754120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			addr, evt->dev_class[2], evt->dev_class[1],
2755fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann			evt->dev_class[0], linktype2str(evt->link_type));
2756d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2757d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2758d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void disconn_complete_dump(int level, struct frame *frm)
2759d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2760d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_disconn_complete *evt = frm->ptr;
2761d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2762d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2763d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d reason 0x%2.2x\n",
2764120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->reason);
2765d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2766d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2767d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2768d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2769d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	} else if (evt->reason > 0) {
2770d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2771d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Reason: %s\n", status2str(evt->reason));
2772d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2773d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2774d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2775d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void remote_name_req_complete_dump(int level, struct frame *frm)
2776d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2777d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_remote_name_req_complete *evt = frm->ptr;
2778d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18], name[249];
2779d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
2780d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2781bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2782d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2783d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	memset(name, 0, sizeof(name));
2784d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	for (i = 0; i < 248 && evt->name[i]; i++)
2785d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		if (isprint(evt->name[i]))
2786d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			name[i] = evt->name[i];
2787d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		else
2788d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			name[i] = '.';
2789d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2790d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2791d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x bdaddr %s name '%s'\n", evt->status, addr, name);
2792d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2793d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2794d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2795d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2796d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2797d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2798d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
279917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_complete_dump(int level, struct frame *frm)
280017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
280117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	evt_master_link_key_complete *evt = frm->ptr;
280217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
280317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
280417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x handle %d flag %d\n",
2805120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->key_flag);
280617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
280717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (evt->status > 0) {
280817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
280917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
281017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
281117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
281217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
2813d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void encrypt_change_dump(int level, struct frame *frm)
2814d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2815d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_encrypt_change *evt = frm->ptr;
2816d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2817d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2818d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d encrypt 0x%2.2x\n",
2819120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->encrypt);
2820d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2821d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2822d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2823d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2824d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2825d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2826d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2827ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_features_complete_dump(int level, struct frame *frm)
2828ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2829ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_remote_features_complete *evt = frm->ptr;
2830ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
2831ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2832ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2833ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
2834ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2835ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
2836ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2837ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2838ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2839ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2840ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Features:");
2841ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		for (i = 0; i < 8; i++)
2842ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf(" 0x%2.2x", evt->features[i]);
2843ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("\n");
2844ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2845ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2846ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2847ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_version_complete_dump(int level, struct frame *frm)
2848ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2849ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_remote_version_complete *evt = frm->ptr;
2850ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t manufacturer = btohs(evt->manufacturer);
2851ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2852ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2853ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
2854ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2855ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
2856ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2857ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2858ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2859ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2860ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n",
2861ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			lmp_vertostr(evt->lmp_ver), evt->lmp_ver,
2862ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			btohs(evt->lmp_subver));
2863ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2864ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Manufacturer: %s (%d)\n",
2865ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bt_compidtostr(manufacturer), manufacturer);
2866ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2867ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2868ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
286911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void qos_setup_complete_dump(int level, struct frame *frm)
287011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
287111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_qos_setup_complete *evt = frm->ptr;
287211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
287311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
287411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("status 0x%2.2x handle %d flags %d\n",
2875120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->flags);
287611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
287711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	if (evt->status > 0) {
287811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
287911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Error: %s\n", status2str(evt->status));
288011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	} else {
288111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
288211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Service type: %d\n", evt->qos.service_type);
288311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
288411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Token rate: %d\n", btohl(evt->qos.token_rate));
288511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
288611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth));
288711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
288811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Latency: %d\n", btohl(evt->qos.latency));
288911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
289011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Delay variation: %d\n", btohl(evt->qos.delay_variation));
289111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	}
289211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
289311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
2894ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void role_change_dump(int level, struct frame *frm)
2895ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2896ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_role_change *evt = frm->ptr;
2897ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
2898ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2899ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2900bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2901ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x bdaddr %s role 0x%2.2x\n",
2902120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann						evt->status, addr, evt->role);
2903ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2904ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
2905ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2906ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2907ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2908ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2909ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Role: %s\n", role2str(evt->role));
2910ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2911ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2912ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2913ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void mode_change_dump(int level, struct frame *frm)
2914ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2915ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_mode_change *evt = frm->ptr;
2916ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2917ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2918ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d mode 0x%2.2x interval %d\n",
2919ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		evt->status, btohs(evt->handle), evt->mode, btohs(evt->interval));
2920ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2921ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
2922ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2923ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2924ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2925ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2926ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Mode: %s\n", mode2str(evt->mode));
2927ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2928ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2929ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2930ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_req_dump(int level, struct frame *frm)
2931ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2932ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_pin_code_req *evt = frm->ptr;
2933ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
2934ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2935ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2936bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2937ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s\n", addr);
2938ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2939ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2940ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_notify_dump(int level, struct frame *frm)
2941ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2942ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_link_key_notify *evt = frm->ptr;
2943ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
2944ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
2945ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2946ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2947bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
294844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s key ", addr);
2949ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 16; i++)
2950a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
2951a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("**");
2952a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		else
2953a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("%2.2X", evt->link_key[i]);
295444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf(" type %d\n", evt->key_type);
2955b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
2956b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
2957b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("Type: %s\n", keytype2str(evt->key_type));
2958ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2959ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
296011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void max_slots_change_dump(int level, struct frame *frm)
296111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
296211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_max_slots_change *evt = frm->ptr;
296311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
296411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
296511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("handle %d slots %d\n", btohs(evt->handle), evt->max_slots);
296611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
296711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
2968c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmannstatic inline void data_buffer_overflow_dump(int level, struct frame *frm)
2969c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann{
2970c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	evt_data_buffer_overflow *evt = frm->ptr;
2971c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann
2972c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	p_indent(level, frm);
2973fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann	printf("type %s\n", linktype2str(evt->link_type));
2974c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann}
2975c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann
2976ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_clock_offset_complete_dump(int level, struct frame *frm)
2977ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2978ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_clock_offset_complete *evt = frm->ptr;
2979ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2980ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2981ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d clkoffset 0x%4.4x\n",
2982ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		evt->status, btohs(evt->handle), btohs(evt->clock_offset));
2983ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2984ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
2985ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2986ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2987ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2988ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2989ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2990ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void conn_ptype_changed_dump(int level, struct frame *frm)
2991ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2992ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_conn_ptype_changed *evt = frm->ptr;
2993ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(evt->ptype);
2994ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
2995ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2996ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2997ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d ptype 0x%4.4x\n",
2998120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), ptype);
2999ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
3000ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
3001ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
3002ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3003ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
3004ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		str = hci_ptypetostr(ptype);
3005ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (str) {
3006ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			p_indent(level, frm);
3007ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf("Packet type: %s\n", str);
3008ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			free(str);
3009ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
3010ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
3011ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
3012ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
301311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void pscan_rep_mode_change_dump(int level, struct frame *frm)
301411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
301511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_pscan_rep_mode_change *evt = frm->ptr;
301611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	char addr[18];
301711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
301811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
3019bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
302011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("bdaddr %s mode %d\n", addr, evt->pscan_rep_mode);
302111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
3022ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3023f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmannstatic inline void flow_spec_complete_dump(int level, struct frame *frm)
3024f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann{
3025f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	evt_flow_spec_complete *evt = frm->ptr;
3026f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
3027f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	p_indent(level, frm);
3028f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	printf("status 0x%2.2x handle %d flags %d %s\n",
3029120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->flags,
3030120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->direction == 0 ? "outgoing" : "incoming");
3031f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
3032f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	if (evt->status > 0) {
3033f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3034f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3035f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	} else {
3036f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3037f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Service type: %d\n", evt->qos.service_type);
3038f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3039f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Token rate: %d\n", btohl(evt->qos.token_rate));
3040f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3041f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth));
3042f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3043f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Latency: %d\n", btohl(evt->qos.latency));
3044f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
3045f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Delay variation: %d\n", btohl(evt->qos.delay_variation));
3046f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	}
3047f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann}
3048f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
3049d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_with_rssi_dump(int level, struct frame *frm)
3050d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
3051d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t num = get_u8(frm);
3052b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	char addr[18];
3053d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
3054d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3055ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	if (!num)
3056ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		return;
3057d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3058ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	if (frm->len / num == INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE) {
3059ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		for (i = 0; i < num; i++) {
3060ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			inquiry_info_with_rssi_and_pscan_mode *info = frm->ptr;
3061d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3062ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			p_indent(level, frm);
3063d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3064bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str(&info->bdaddr, addr);
3065ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3066ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				addr, info->pscan_rep_mode, btohs(info->clock_offset),
3067ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
3068ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3069ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
3070ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->len -= INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
3071ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		}
3072ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	} else {
3073ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		for (i = 0; i < num; i++) {
3074ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			inquiry_info_with_rssi *info = frm->ptr;
3075ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3076ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			p_indent(level, frm);
3077ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3078bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str(&info->bdaddr, addr);
3079ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3080ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				addr, info->pscan_rep_mode, btohs(info->clock_offset),
3081ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
3082ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
3083ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
3084ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE;
3085ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		}
3086d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3087d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
3088d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
308917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_complete_dump(int level, struct frame *frm)
309017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
309117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	evt_read_remote_ext_features_complete *evt = frm->ptr;
309217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i;
309317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
309417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
309517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x handle %d page %d max %d\n",
3096120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->status, btohs(evt->handle),
3097120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->page_num, evt->max_page_num);
309817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
309917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (evt->status > 0) {
310017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
310117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
310217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
310317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
310417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Features:");
310517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 8; i++)
310617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf(" 0x%2.2x", evt->features[i]);
310717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
310817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
310917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
311017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
3111d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_complete_dump(int level, struct frame *frm)
3112d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{
3113d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	evt_sync_conn_complete *evt = frm->ptr;
3114d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	char addr[18];
3115d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3116bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3117d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3118d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	p_indent(level, frm);
3119d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	printf("status 0x%2.2x handle %d bdaddr %s type %s\n",
3120120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->status, btohs(evt->handle), addr,
3121120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->link_type == 0 ? "SCO" : "eSCO");
3122d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3123d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	if (evt->status > 0) {
3124d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
3125d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3126d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	} else {
3127d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
3128d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Air mode: %s\n", airmode2str(evt->air_mode));
3129d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	}
3130d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann}
3131d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3132d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_changed_dump(int level, struct frame *frm)
3133d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{
3134d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	evt_sync_conn_changed *evt = frm->ptr;
3135d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3136d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	p_indent(level, frm);
3137120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3138d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
3139d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	if (evt->status > 0) {
3140d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
3141d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3142d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	}
3143d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann}
3144d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
31453b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void sniff_subrating_event_dump(int level, struct frame *frm)
3146120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann{
31473b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	evt_sniff_subrating *evt = frm->ptr;
3148120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3149120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
3150120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3151120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3152120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	if (evt->status > 0) {
3153120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
3154120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
3155120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	} else {
3156120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
3157f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann		printf("max latency transmit %d receive %d\n",
3158f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann					btohs(evt->max_tx_latency),
3159f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann					btohs(evt->max_rx_latency));
3160120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3161120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
3162120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		printf("min timeout remote %d local %d\n",
3163120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(evt->min_remote_timeout),
3164120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(evt->min_local_timeout));
3165120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	}
3166120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann}
3167120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
3168807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmannstatic inline void extended_inq_result_dump(int level, struct frame *frm)
3169807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann{
3170807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	uint8_t num = get_u8(frm);
3171807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	char addr[18];
3172807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	int i;
3173807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
3174807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	for (i = 0; i < num; i++) {
3175807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		extended_inquiry_info *info = frm->ptr;
3176807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
3177bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(&info->bdaddr, addr);
3178807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
3179807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		p_indent(level, frm);
318027eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3181807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann			addr, info->pscan_rep_mode, btohs(info->clock_offset),
318227eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann			info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
318327eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann
318427eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
318527eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE;
318627eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann
3187e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		ext_inquiry_response_dump(level, frm);
3188807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	}
3189807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann}
3190807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
31913b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void link_supervision_timeout_changed_dump(int level, struct frame *frm)
3192d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann{
31933b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	evt_link_supervision_timeout_changed *evt = frm->ptr;
3194d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann
3195d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	p_indent(level, frm);
3196d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	printf("handle %d timeout %d\n",
3197d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann				btohs(evt->handle), btohs(evt->timeout));
3198d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann}
3199d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann
3200b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void user_passkey_notify_dump(int level, struct frame *frm)
3201b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
3202b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	evt_user_passkey_notify *evt = frm->ptr;
3203b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
3204b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
3205b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
3206b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3207b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s passkey %d\n", addr, btohl(evt->passkey));
3208b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
3209b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
3210b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void keypress_notify_dump(int level, struct frame *frm)
3211b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{
3212b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	evt_keypress_notify *evt = frm->ptr;
3213b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	char addr[18];
3214b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
3215b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_indent(level, frm);
3216b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
3217b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	printf("bdaddr %s type %d\n", addr, evt->type);
3218b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann}
3219b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann
32203b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void remote_host_features_notify_dump(int level, struct frame *frm)
32213b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{
32223b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	evt_remote_host_features_notify *evt = frm->ptr;
32233b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	char addr[18];
32243b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	int i;
32253b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
32263b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
32273b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
32283b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("bdaddr %s\n", addr);
32293b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
32303b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	p_indent(level, frm);
32313b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("Features:");
32323b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	for (i = 0; i < 8; i++)
32333b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		printf(" 0x%2.2x", evt->features[i]);
32343b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	printf("\n");
32353b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann}
32363b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann
3237b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void evt_le_conn_complete_dump(int level, struct frame *frm)
3238b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{
3239b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	evt_le_connection_complete *evt = frm->ptr;
3240b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3241b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_indent(level, frm);
3242b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3243b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo}
3244b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3245b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void le_meta_ev_dump(int level, struct frame *frm)
3246b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{
3247b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	evt_le_meta_event *mevt = frm->ptr;
3248b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	uint8_t subevent;
3249b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3250b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	subevent = mevt->subevent;
3251b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3252b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	frm->ptr += EVT_LE_META_EVENT_SIZE;
3253b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	frm->len -= EVT_LE_META_EVENT_SIZE;
3254b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3255b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	p_indent(level, frm);
3256b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	printf("%s\n", ev_le_meta_str[subevent]);
3257b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
3258b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	switch (mevt->subevent) {
3259b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	case EVT_LE_CONN_COMPLETE:
3260b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		evt_le_conn_complete_dump(level + 1, frm);
3261b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
3262b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	default:
3263b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		raw_dump(level, frm);
3264b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
3265b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	}
3266b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo}
3267b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo
326865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void event_dump(int level, struct frame *frm)
326995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
3270174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	hci_event_hdr *hdr = frm->ptr;
3271be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	uint8_t event = hdr->evt;
327265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
327365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (p_filter(FILT_HCI))
327465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		return;
327565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
3276d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (event <= EVENT_NUM) {
32777b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
3278803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: %s (0x%2.2x) plen %d\n",
32797b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann					event_str[hdr->evt], hdr->evt, hdr->plen);
3280be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	} else if (hdr->evt == EVT_TESTING) {
32817b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
3282803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: Testing (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
3283be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	} else if (hdr->evt == EVT_VENDOR) {
3284a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		uint16_t manufacturer;
3285a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann
32867b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
32877b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			return;
32887b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
32897b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
3290803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: Vendor (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
32917b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
3292a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		manufacturer = get_manufacturer();
3293a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann
3294a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		switch (manufacturer) {
3295a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 0:
3296e1e8e8d65fe211c133b53cf8af8883caf7936314Marcel Holtmann		case 37:
3297a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 48:
3298a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			frm->ptr += HCI_EVENT_HDR_SIZE;
3299a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			frm->len -= HCI_EVENT_HDR_SIZE;
3300a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			ericsson_dump(level + 1, frm);
3301a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			return;
3302a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 10:
3303be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			frm->ptr += HCI_EVENT_HDR_SIZE;
3304be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			frm->len -= HCI_EVENT_HDR_SIZE;
3305be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			csr_dump(level + 1, frm);
3306be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			return;
3307be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		}
33087b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	} else {
33097b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
331066f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky		printf("HCI Event: code 0x%2.2x plen %d\n", hdr->evt, hdr->plen);
33117b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	}
331265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
331365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->ptr += HCI_EVENT_HDR_SIZE;
331465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->len -= HCI_EVENT_HDR_SIZE;
331565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
3316be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	if (event == EVT_CMD_COMPLETE) {
3317be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		evt_cmd_complete *cc = frm->ptr;
3318be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		if (cc->opcode == cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION)) {
3319be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			read_local_version_rp *rp = frm->ptr + EVT_CMD_COMPLETE_SIZE;
3320be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			manufacturer = rp->manufacturer;
3321be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		}
3322be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	}
3323be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann
332425554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann	if (event == EVT_DISCONN_COMPLETE) {
332525554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann		evt_disconn_complete *evt = frm->ptr;
332625554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann		l2cap_clear(btohs(evt->handle));
332725554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann	}
332825554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann
3329d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
3330d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		raw_dump(level, frm);
3331d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		return;
3332d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
3333d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
3334d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	switch (event) {
3335ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann	case EVT_LOOPBACK_COMMAND:
3336ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		command_dump(level + 1, frm);
3337ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
3338d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CMD_COMPLETE:
3339d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		cmd_complete_dump(level + 1, frm);
3340d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3341d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CMD_STATUS:
3342d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		cmd_status_dump(level + 1, frm);
3343d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3344afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	case EVT_HARDWARE_ERROR:
3345afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		hardware_error_dump(level + 1, frm);
3346afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		break;
3347afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	case EVT_FLUSH_OCCURRED:
3348f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	case EVT_QOS_VIOLATION:
3349afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		handle_response_dump(level + 1, frm);
3350afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		break;
3351d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_COMPLETE:
3352d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		status_response_dump(level + 1, frm);
3353d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3354d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_RESULT:
3355d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inq_result_dump(level + 1, frm);
3356d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3357d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CONN_COMPLETE:
3358d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		conn_complete_dump(level + 1, frm);
3359d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3360d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CONN_REQUEST:
3361d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		conn_request_dump(level + 1, frm);
3362d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3363d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_DISCONN_COMPLETE:
3364d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		disconn_complete_dump(level + 1, frm);
3365d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3366d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_AUTH_COMPLETE:
3367d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CHANGE_CONN_LINK_KEY_COMPLETE:
3368d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		generic_response_dump(level + 1, frm);
3369d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
337017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case EVT_MASTER_LINK_KEY_COMPLETE:
337117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		master_link_key_complete_dump(level + 1, frm);
337217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
3373d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_REMOTE_NAME_REQ_COMPLETE:
3374d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		remote_name_req_complete_dump(level + 1, frm);
3375d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3376d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_ENCRYPT_CHANGE:
3377d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		encrypt_change_dump(level + 1, frm);
3378d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3379ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_REMOTE_FEATURES_COMPLETE:
3380ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_remote_features_complete_dump(level + 1, frm);
3381ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3382ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_REMOTE_VERSION_COMPLETE:
3383ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_remote_version_complete_dump(level + 1, frm);
3384ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3385ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_QOS_SETUP_COMPLETE:
338611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		qos_setup_complete_dump(level + 1, frm);
3387ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3388ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_ROLE_CHANGE:
3389ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		role_change_dump(level + 1, frm);
3390ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3391ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_NUM_COMP_PKTS:
3392ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		num_comp_pkts_dump(level + 1, frm);
3393ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3394ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_MODE_CHANGE:
3395ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		mode_change_dump(level + 1, frm);
3396ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3397b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	case EVT_RETURN_LINK_KEYS:
3398b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann		return_link_keys_dump(level + 1, frm);
3399b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann		break;
3400ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_PIN_CODE_REQ:
3401ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_LINK_KEY_REQ:
3402b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_IO_CAPABILITY_REQUEST:
3403b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_USER_PASSKEY_REQUEST:
3404b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_REMOTE_OOB_DATA_REQUEST:
3405ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		pin_code_req_dump(level + 1, frm);
3406ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3407ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_LINK_KEY_NOTIFY:
3408ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		link_key_notify_dump(level + 1, frm);
3409ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3410c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	case EVT_DATA_BUFFER_OVERFLOW:
3411c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann		data_buffer_overflow_dump(level + 1, frm);
3412c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann		break;
341311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	case EVT_MAX_SLOTS_CHANGE:
341411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		max_slots_change_dump(level + 1, frm);
341511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		break;
3416ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_CLOCK_OFFSET_COMPLETE:
3417ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_clock_offset_complete_dump(level + 1, frm);
3418ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
3419ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_CONN_PTYPE_CHANGED:
3420ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		conn_ptype_changed_dump(level + 1, frm);
3421ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
342211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	case EVT_PSCAN_REP_MODE_CHANGE:
342311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		pscan_rep_mode_change_dump(level + 1, frm);
342411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		break;
3425f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	case EVT_FLOW_SPEC_COMPLETE:
3426f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		flow_spec_complete_dump(level + 1, frm);
3427f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		break;
3428d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_RESULT_WITH_RSSI:
3429d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inq_result_with_rssi_dump(level + 1, frm);
3430d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
343117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case EVT_READ_REMOTE_EXT_FEATURES_COMPLETE:
343217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		read_remote_ext_features_complete_dump(level + 1, frm);
343317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
3434d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case EVT_SYNC_CONN_COMPLETE:
3435d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		sync_conn_complete_dump(level + 1, frm);
3436d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		break;
3437d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case EVT_SYNC_CONN_CHANGED:
3438d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		sync_conn_changed_dump(level + 1, frm);
3439d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		break;
34403b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_SNIFF_SUBRATING:
34413b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		sniff_subrating_event_dump(level + 1, frm);
3442120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		break;
3443807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	case EVT_EXTENDED_INQUIRY_RESULT:
3444807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		extended_inq_result_dump(level + 1, frm);
3445807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		break;
34463b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_ENCRYPTION_KEY_REFRESH_COMPLETE:
34473b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		generic_response_dump(level + 1, frm);
34483b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		break;
3449b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_SIMPLE_PAIRING_COMPLETE:
3450b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		bdaddr_response_dump(level + 1, frm);
3451b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
34523b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_LINK_SUPERVISION_TIMEOUT_CHANGED:
34533b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		link_supervision_timeout_changed_dump(level + 1, frm);
34543b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		break;
34553b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_ENHANCED_FLUSH_COMPLETE:
34563b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		generic_command_dump(level + 1, frm);
34573b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		break;
3458b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_IO_CAPABILITY_RESPONSE:
3459b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		io_capability_reply_dump(level + 1, frm);
3460b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
3461b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_USER_CONFIRM_REQUEST:
3462b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_USER_PASSKEY_NOTIFY:
3463b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		user_passkey_notify_dump(level + 1, frm);
3464b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
3465b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann	case EVT_KEYPRESS_NOTIFY:
3466b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		keypress_notify_dump(level + 1, frm);
3467b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann		break;
34683b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann	case EVT_REMOTE_HOST_FEATURES_NOTIFY:
34693b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann		remote_host_features_notify_dump(level + 1, frm);
3470d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann		break;
3471b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo	case EVT_LE_META_EVENT:
3472b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		le_meta_ev_dump(level + 1, frm);
3473b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo		break;
3474d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	default:
3475d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		raw_dump(level, frm);
3476d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
3477d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
347895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
347995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
348065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void acl_dump(int level, struct frame *frm)
348195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
3482174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	hci_acl_hdr *hdr = (void *) frm->ptr;
34830d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t handle = btohs(hdr->handle);
34840d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t dlen = btohs(hdr->dlen);
34850d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint8_t flags = acl_flags(handle);
348665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
348765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (!p_filter(FILT_HCI)) {
3488ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
3489d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("ACL data: handle %d flags 0x%2.2x dlen %d\n",
349065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky			acl_handle(handle), flags, dlen);
349165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		level++;
349265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	}
3493e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
3494e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann	frm->ptr += HCI_ACL_HDR_SIZE;
3495e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann	frm->len -= HCI_ACL_HDR_SIZE;
3496f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky	frm->flags  = flags;
3497f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky	frm->handle = acl_handle(handle);
349865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
349965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (parser.filter & ~FILT_HCI)
350065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		l2cap_dump(level, frm);
350165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	else
350265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		raw_dump(level, frm);
350395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
350495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
3505d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyanskystatic inline void sco_dump(int level, struct frame *frm)
3506d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky{
3507d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	hci_sco_hdr *hdr = (void *) frm->ptr;
35080d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t handle = btohs(hdr->handle);
35098f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann	uint8_t flags = acl_flags(handle);
35106d3f2066a10cd7d0812fdf97635f1bd77f003493Marcel Holtmann	int len;
3511d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
35129e216633a0f902b7d069c08939c67e03dd4ee516Marcel Holtmann	if (frm->audio_fd > fileno(stderr))
35136d3f2066a10cd7d0812fdf97635f1bd77f003493Marcel Holtmann		len = write(frm->audio_fd, frm->ptr + HCI_SCO_HDR_SIZE, hdr->dlen);
35140033462dddb3b4adf56ea28680c1f135f25a4387Marcel Holtmann
3515d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	if (!p_filter(FILT_SCO)) {
3516ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
35178f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann		printf("SCO data: handle %d flags 0x%2.2x dlen %d\n",
35188f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann				acl_handle(handle), flags, hdr->dlen);
3519d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		level++;
3520d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
3521d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		frm->ptr += HCI_SCO_HDR_SIZE;
3522d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		frm->len -= HCI_SCO_HDR_SIZE;
3523d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		raw_dump(level, frm);
3524d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	}
3525d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky}
3526d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
3527b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmannstatic inline void vendor_dump(int level, struct frame *frm)
3528b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann{
3529b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	if (p_filter(FILT_HCI))
3530b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		return;
3531b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann
353238acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann	if (frm->dev_id == HCI_DEV_NONE) {
3533a4d60061ed080704f1e1c076d59ac0b03aaa0fd1Marcel Holtmann		uint16_t device = btohs(htons(get_u16(frm)));
3534ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann		uint16_t proto = btohs(htons(get_u16(frm)));
353538acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		uint16_t type = btohs(htons(get_u16(frm)));
353638acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		uint16_t plen = btohs(htons(get_u16(frm)));
353738acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
353838acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		p_indent(level, frm);
353938acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
3540ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann		printf("System %s: device hci%d proto 0x%2.2x type 0x%2.2x plen %d\n",
3541ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann			frm->in ? "event" : "command", device, proto, type, plen);
354238acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
354338acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		raw_dump(level, frm);
354438acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		return;
354538acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann	}
354638acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
35477b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (parser.flags & DUMP_NOVENDOR)
35487b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
35497b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
3550b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	if (get_manufacturer() == 12) {
3551b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		bpa_dump(level, frm);
3552b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		return;
3553b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	}
3554b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann
3555b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	p_indent(level, frm);
3556b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	printf("Vendor data: len %d\n", frm->len);
3557b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	raw_dump(level, frm);
3558b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann}
3559b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann
3560174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyanskyvoid hci_dump(int level, struct frame *frm)
356195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
3562d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t type = *(uint8_t *)frm->ptr;
356395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
3564174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	frm->ptr++; frm->len--;
3565e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
356695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	switch (type) {
356795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_COMMAND_PKT:
356865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		command_dump(level, frm);
356995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
357095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
357195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_EVENT_PKT:
357265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		event_dump(level, frm);
357395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
357495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
357595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_ACLDATA_PKT:
357665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		acl_dump(level, frm);
357795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
357895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
3579d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	case HCI_SCODATA_PKT:
3580d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		sco_dump(level, frm);
3581d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		break;
3582e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
3583b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	case HCI_VENDOR_PKT:
3584b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann		vendor_dump(level, frm);
3585b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann		break;
3586b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann
358795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	default:
358865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		if (p_filter(FILT_HCI))
358965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky			break;
359065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
3591ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
3592174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky		printf("Unknown: type 0x%2.2x len %d\n", type, frm->len);
359365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		raw_dump(level, frm);
359495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
359595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	}
359695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
3597