hci.c revision 994875fdee06bd4c8a902db513ab6482371c0795
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>
6fa3dc8fee8b3525e53b8b2513b57abfc8bf93927Marcel Holtmann *  Copyright (C) 2003-2006  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
53d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann#define EVENT_NUM 55
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",
103d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	"Unknown",
104d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	"Unknown",
105d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	"Unknown",
106d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	"Unknown",
107d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	"Unknown",
108d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	"Unknown",
109d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	"Unknown",
110d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	"Link Supervision Timeout Change",
11166f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky};
1122bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
11313acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define CMD_LINKCTL_NUM 41
11413acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_linkctl_str[CMD_LINKCTL_NUM + 1] = {
1152bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Unknown",
1162bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Inquiry",
1172bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Inquiry Cancel",
1182bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Periodic Inquiry Mode",
1192bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Exit Periodic Inquiry Mode",
1202bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Create Connection",
1212bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Disconnect",
1222bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Add SCO Connection",
123328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Create Connection Cancel",
1242bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Accept Connection Request",
1252bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Reject Connection Request",
1262bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Link Key Request Reply",
1272bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Link Key Request Negative Reply",
1282bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"PIN Code Request Reply",
1292bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"PIN Code Request Negative Reply",
1302bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Change Connection Packet Type",
131f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1322bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Authentication Requested",
133f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1342bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Set Connection Encryption",
135f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1362bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Change Connection Link Key",
137f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1382bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Master Link Key",
139f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1402bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Remote Name Request",
141328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Remote Name Request Cancel",
1422bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Remote Supported Features",
143328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Remote Extended Features",
1442bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Remote Version Information",
145f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
146328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Clock Offset",
147328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read LMP Handle"
148328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
149328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
150328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
151328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
152328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
153328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
154328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
155328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Setup Synchronous Connection",
156328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Accept Synchronous Connection",
1571a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Reject Synchronous Connection",
1582bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky};
1592bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
160120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann#define CMD_LINKPOL_NUM 17
16113acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_linkpol_str[CMD_LINKPOL_NUM + 1] = {
1622bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Unknown",
1632bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Hold Mode",
164f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1652bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Sniff Mode",
1662bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Exit Sniff Mode",
167328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Park State",
168328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Exit Park State",
1692bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"QoS Setup",
170f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1712bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Role Discovery",
172f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1732bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Switch Role",
1742bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Link Policy Settings",
175328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Link Policy Settings",
176328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Default Link Policy Settings",
177328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Default Link Policy Settings",
1781a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Flow Specification",
179120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	"Sniff Subrate",
1802bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky};
1812bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
18213acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define CMD_HOSTCTL_NUM 82
18313acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_hostctl_str[CMD_HOSTCTL_NUM + 1] = {
1842bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Unknown",
1852bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Set Event Mask",
186f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1872bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Reset",
188f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1892bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Set Event Filter",
190f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
191f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1922bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Flush",
1932bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read PIN Type ",
1942bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write PIN Type",
1952bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Create New Unit Key",
196f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
1972bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Stored Link Key",
198f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
199f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
200f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2012bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Stored Link Key",
2022bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Delete Stored Link Key",
203328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Local Name",
2042bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Local Name",
2052bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Connection Accept Timeout",
2062bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Connection Accept Timeout",
2072bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Page Timeout",
2082bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Page Timeout",
2092bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Scan Enable",
2102bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Scan Enable",
2112bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Page Scan Activity",
2122bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Page Scan Activity",
2132bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Inquiry Scan Activity",
2142bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Inquiry Scan Activity",
2152bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Authentication Enable",
2162bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Authentication Enable",
2172bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Encryption Mode",
2182bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Encryption Mode",
2192bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Class of Device",
2202bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Class of Device",
2212bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Voice Setting",
2222bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Voice Setting",
2232bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Automatic Flush Timeout",
2242bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Automatic Flush Timeout",
2252bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Num Broadcast Retransmissions",
2262bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Num Broadcast Retransmissions",
2272bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Hold Mode Activity ",
2282bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Hold Mode Activity",
2292bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Transmit Power Level",
230328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Synchronous Flow Control Enable",
231328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Synchronous Flow Control Enable",
232f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2332bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Set Host Controller To Host Flow Control",
234f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2352bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Host Buffer Size",
236f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2372bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Host Number of Completed Packets",
2382bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Link Supervision Timeout",
2392bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Link Supervision Timeout",
2402bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Number of Supported IAC",
2412bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Current IAC LAP",
2422bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Current IAC LAP",
2432bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Page Scan Period Mode",
2442bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Write Page Scan Period Mode",
2452bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Page Scan Mode",
246328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Page Scan Mode",
247328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Set AFH Host Channel Classification",
248328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
249328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Unknown",
250328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Inquiry Scan Type",
251328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Inquiry Scan Type",
252328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Inquiry Mode",
253328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Inquiry Mode",
254328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Page Scan Type",
255328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Write Page Scan Type",
256328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read AFH Channel Assessment Mode",
2571a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Write AFH Channel Assessment Mode",
2581a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Unknown",
25913acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
26013acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
26113acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
26213acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
26313acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
26413acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann	"Unknown",
2651a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Read Extended Inquiry Response",
2661a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Write Extended Inquiry Response",
2672bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky};
2682bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
26913acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define CMD_INFO_NUM 9
27013acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_info_str[CMD_INFO_NUM + 1] = {
2712bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Unknown",
2722bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Local Version Information",
273328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Local Supported Commands",
2742bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Local Supported Features",
275328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Local Extended Features",
2762bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Buffer Size",
277f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2782bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Country Code",
279f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
2801a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Read BD ADDR",
2812bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky};
2822bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
28313acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define CMD_STATUS_NUM 7
28413acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_status_str[CMD_STATUS_NUM + 1] = {
2852bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Unknown",
2862bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Read Failed Contact Counter",
2872bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	"Reset Failed Contact Counter",
288328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read Link Quality",
289f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky	"Unknown",
290328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read RSSI",
291328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann	"Read AFH Channel Map",
2921a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Read Clock",
2932bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky};
29466f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky
29513acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define ERROR_CODE_NUM 53
29613acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *error_code_str[ERROR_CODE_NUM + 1] = {
297d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Success",
298d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unknown HCI Command",
299d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unknown Connection Identifier",
300d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Hardware Failure",
301d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Page Timeout",
302d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Authentication Failure",
303d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"PIN or Key Missing",
304d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Memory Capacity Exceeded",
305d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Timeout",
306d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Limit Exceeded",
307d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Synchronous Connection to a Device Exceeded",
308d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"ACL Connection Already Exists",
309d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Command Disallowed",
310d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Rejected due to Limited Resources",
311d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Rejected due to Security Reasons",
312d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Rejected due to Unacceptable BD_ADDR",
313d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Accept Timeout Exceeded",
314d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unsupported Feature or Parameter Value",
315d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Invalid HCI Command Parameters",
31660864ce9e77ec159d0914fe8d938565493f08eebMarcel Holtmann	"Remote User Terminated Connection",
317d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Remote Device Terminated Connection due to Low Resources",
318d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Remote Device Terminated Connection due to Power Off",
319d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Connection Terminated by Local Host",
320fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	"Repeated Attempts",
321d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Pairing Not Allowed",
322d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unknown LMP PDU",
323d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unsupported Remote Feature / Unsupported LMP Feature",
324d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"SCO Offset Rejected",
325d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"SCO Interval Rejected",
326d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"SCO Air Mode Rejected",
327d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Invalid LMP Parameters",
328d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unspecified Error",
329d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Unsupported LMP Parameter Value",
330d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Role Change Not Allowed",
331d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"LMP Response Timeout",
332d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"LMP Error Transaction Collision",
333d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"LMP PDU Not Allowed",
334d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Encryption Mode Not Acceptable",
335d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Link Key Can Not be Changed",
336d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Requested QoS Not Supported",
337d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Instant Passed",
338fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	"Pairing with Unit Key Not Supported",
339d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Different Transaction Collision",
340d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Reserved",
341d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"QoS Unacceptable Parameter",
342d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"QoS Rejected",
343d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Channel Classification Not Supported",
344d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Insufficient Security",
345d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Parameter out of Mandatory Range",
346d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Reserved",
347d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Role Switch Pending",
348d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Reserved",
349d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	"Reserved Slot Violation",
3501a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	"Role Switch Failed",
351d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann};
352d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
353d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic char *status2str(uint8_t status)
354d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
355d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char *str;
356d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
357d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (status <= ERROR_CODE_NUM)
358d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		str = error_code_str[status];
359d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	else
360d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		str = "Unknown";
361d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
362d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	return str;
363d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
364d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
365d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic char *opcode2str(uint16_t opcode)
36695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
3670d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
3680d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
3692bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	char *cmd;
37095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
3712bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	switch (ogf) {
3722bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	case OGF_INFO_PARAM:
3732bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		if (ocf <= CMD_INFO_NUM)
374d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			cmd = cmd_info_str[ocf];
3752bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		else
3762bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky			cmd = "Unknown";
3772bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
3782bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
3792bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	case OGF_HOST_CTL:
3802bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		if (ocf <= CMD_HOSTCTL_NUM)
381d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			cmd = cmd_hostctl_str[ocf];
3822bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		else
3832bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky			cmd = "Unknown";
3842bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
3852bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
3862bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	case OGF_LINK_CTL:
3872bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		if (ocf <= CMD_LINKCTL_NUM)
388d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			cmd = cmd_linkctl_str[ocf];
3892bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		else
3902bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky			cmd = "Unknown";
3912bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
3922bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
3932bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	case OGF_LINK_POLICY:
3942bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		if (ocf <= CMD_LINKPOL_NUM)
395d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			cmd = cmd_linkpol_str[ocf];
3962bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		else
3972bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky			cmd = "Unknown";
3982bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
3992bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
4002bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	case OGF_STATUS_PARAM:
4012bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		if (ocf <= CMD_STATUS_NUM)
402d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			cmd = cmd_status_str[ocf];
4032bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		else
4042bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky			cmd = "Unknown";
4052bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
4062bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
407cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann	case OGF_TESTING_CMD:
408cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann		cmd = "Testing";
409cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann		break;
410cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann
411cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann	case OGF_VENDOR_CMD:
412cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann		cmd = "Vendor";
413cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann		break;
414cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann
4152bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	default:
4162bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		cmd = "Unknown";
4172bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky		break;
4182bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky	}
4192bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky
420d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	return cmd;
421d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
422d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
423ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic char *role2str(uint8_t role)
424ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
425ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	switch (role) {
426ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x00:
427ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Master";
428ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x01:
429ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Slave";
430ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	default:
431ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Unknown";
432ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
433ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
434ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
435ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic char *mode2str(uint8_t mode)
436ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
437ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	switch (mode) {
438ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x00:
439ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Active";
440ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x01:
441ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Hold";
442ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x02:
443ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Sniff";
444ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case 0x03:
445ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Park";
446ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	default:
447ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		return "Unknown";
448ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
449ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
450ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
451d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic char *airmode2str(uint8_t mode)
452d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{
453d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	switch (mode) {
454d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case 0x00:
455d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		return "u-law log";
456d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case 0x01:
457d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		return "A-law log";
458d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case 0x02:
459d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		return "CVSD";
460d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case 0x04:
461d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		return "Transparent data";
462d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	default:
463d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		return "Reserved";
464d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	}
465d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann}
466d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
467e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmannstatic inline void ext_inquiry_response_dump(int level, struct frame *frm)
468e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann{
469e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	void *ptr = frm->ptr;
470e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	uint32_t len = frm->len;
471e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	uint8_t type, length;
472e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	char *str;
473e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	int i;
474e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
475e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	length = get_u8(frm);
476e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
477e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	while (length > 0) {
478e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		type = get_u8(frm);
479e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		length--;
480e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
481e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		switch (type) {
482e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		case 0x08:
483e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		case 0x09:
484e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			str = malloc(length + 1);
485e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			if (str) {
486ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann				snprintf(str, length + 1, "%s", (char *) frm->ptr);
487e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				for (i = 0; i < length; i++)
488e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				if (!isprint(str[i]))
489e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann					str[i] = '.';
490e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				p_indent(level, frm);
491e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				printf("%s local name: \'%s\'\n",
492e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann					type == 0x08 ? "Shortened" : "Complete", str);
493e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann				free(str);
494e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			}
495e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			break;
496e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
497e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		default:
498e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			p_indent(level, frm);
499e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			printf("Unknown type 0x%02x with %d bytes data\n",
500e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann								type, length);
501e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann			break;
502e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		}
503e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
504e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		frm->ptr += length;
505e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		frm->len -= length;
506e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
507e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		length = get_u8(frm);
508e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	}
509e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
510e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	frm->ptr = ptr + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
511e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	frm->len = len + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
512e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann}
513e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann
514ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void generic_command_dump(int level, struct frame *frm)
515ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
516ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
517ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
518ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
519ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d\n", handle);
520ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
521ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	raw_dump(level, frm);
522ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
523ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
52490480219be366c65e68ae8612de7a361027e751aMarcel Holtmannstatic inline void bdaddr_command_dump(int level, struct frame *frm)
52590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann{
52690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
52790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	char addr[18];
52890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
52990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	frm->ptr += sizeof(bdaddr_t);
53090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	frm->len -= sizeof(bdaddr_t);
53190480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
53290480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	p_indent(level, frm);
533bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
534e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	printf("bdaddr %s\n", addr);
53590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
53690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann	raw_dump(level, frm);
53790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann}
53890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann
539ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void inquiry_dump(int level, struct frame *frm)
540ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
541ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	inquiry_cp *cp = frm->ptr;
542ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
543ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
544ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("lap 0x%2.2x%2.2x%2.2x len %d num %d\n",
545ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);
546ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
547ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
548ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void periodic_inquiry_dump(int level, struct frame *frm)
549ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
550ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	periodic_inquiry_cp *cp = frm->ptr;
551ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
552ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
553ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("max %d min %d lap 0x%2.2x%2.2x%2.2x len %d num %d\n",
554ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		btohs(cp->max_period), btohs(cp->min_period),
555ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);
556ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
557ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
558ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void create_conn_dump(int level, struct frame *frm)
559ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
560ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	create_conn_cp *cp = frm->ptr;
561ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(cp->pkt_type);
562ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t clkoffset = btohs(cp->clock_offset);
563ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18], *str;
564ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
565ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
566bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
567ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s ptype 0x%4.4x rswitch 0x%2.2x clkoffset 0x%4.4x%s\n",
568ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		addr, ptype, cp->role_switch,
569ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");
570ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
571ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_ptypetostr(ptype);
572ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
573ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
574ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Packet type: %s\n", str);
575ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
576ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
577ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
578ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
579ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void disconnect_dump(int level, struct frame *frm)
580ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
581ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	disconnect_cp *cp = frm->ptr;
582ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
583ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
584ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d reason 0x%2.2x\n", btohs(cp->handle), cp->reason);
585ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
586ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
587ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Reason: %s\n", status2str(cp->reason));
588ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
589ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
590ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void add_sco_dump(int level, struct frame *frm)
591ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
592ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	add_sco_cp *cp = frm->ptr;
593ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(cp->pkt_type);
594ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
595ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
596ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
597ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d ptype 0x%4.4x\n", btohs(cp->handle), ptype);
598ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
599ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_ptypetostr(ptype);
600ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
601ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
602ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Packet type: %s\n", str);
603ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
604ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
605ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
606ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
607ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void accept_conn_req_dump(int level, struct frame *frm)
608ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
609ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	accept_conn_req_cp *cp = frm->ptr;
610ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
611ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
612ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
613bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
614ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s role 0x%2.2x\n", addr, cp->role);
615ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
616ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
617ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Role: %s\n", role2str(cp->role));
618ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
619ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
620ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void reject_conn_req_dump(int level, struct frame *frm)
621ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
622ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	reject_conn_req_cp *cp = frm->ptr;
623ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
624ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
625ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
626bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
627ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s reason 0x%2.2x\n", addr, cp->reason);
628ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
629ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
630ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("Reason: %s\n", status2str(cp->reason));
631ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
632ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
633ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_reply_dump(int level, struct frame *frm)
634ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
635ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	pin_code_reply_cp *cp = frm->ptr;
636ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18], pin[17];
637ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
638ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
639bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
640ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(pin, 0, sizeof(pin));
641a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann	if (parser.flags & DUMP_NOVENDOR)
642a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		memset(pin, '*', cp->pin_len);
643a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann	else
644a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		memcpy(pin, cp->pin_code, cp->pin_len);
645ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s len %d pin \'%s\'\n", addr, cp->pin_len, pin);
646ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
647ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
648ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_reply_dump(int level, struct frame *frm)
649ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
650ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	link_key_reply_cp *cp = frm->ptr;
651ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
652ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
653ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
654ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
655bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
65644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s key ", addr);
657ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 16; i++)
658a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
659a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("**");
660a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		else
661a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("%2.2X", cp->link_key[i]);
662ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("\n");
663ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
664ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
665ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_neg_reply_dump(int level, struct frame *frm)
666ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
667ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
668ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
669ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
670ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
671bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
672ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s\n", addr);
673ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
674ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
675ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void set_conn_encrypt_dump(int level, struct frame *frm)
676ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
677ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	set_conn_encrypt_cp *cp = frm->ptr;
678ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
679ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
680ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d encrypt 0x%2.2x\n", btohs(cp->handle), cp->encrypt);
681ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
682ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
683ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void remote_name_req_dump(int level, struct frame *frm)
684ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
685ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	remote_name_req_cp *cp = frm->ptr;
686ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t clkoffset = btohs(cp->clock_offset);
687ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
688ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
689ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
690bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
69172e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann	printf("bdaddr %s mode %d clkoffset 0x%4.4x%s\n",
69272e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		addr, cp->pscan_rep_mode,
69372e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");
694ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
695ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
69617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_dump(int level, struct frame *frm)
69717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
69817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	master_link_key_cp *cp = frm->ptr;
69917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
70017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
70117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("flag %d\n", cp->key_flag);
70217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
70317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
70417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_dump(int level, struct frame *frm)
70517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
70617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_remote_ext_features_cp *cp = frm->ptr;
70717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
708e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	p_indent(level, frm);
709e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	printf("handle %d page %d\n", btohs(cp->handle), cp->page_num);
71017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
71117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
7129ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void hold_mode_dump(int level, struct frame *frm)
7139ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{
7149ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	hold_mode_cp *cp = frm->ptr;
7159ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
7169ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	p_indent(level, frm);
7179ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	printf("handle %d max %d min %d\n", btohs(cp->handle),
7189ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			btohs(cp->max_interval), btohs(cp->min_interval));
7199ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann}
7209ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
7219ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void sniff_mode_dump(int level, struct frame *frm)
7229ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{
7239ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	sniff_mode_cp *cp = frm->ptr;
7249ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
7259ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	p_indent(level, frm);
7269ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann	printf("handle %d max %d min %d attempt %d timeout %d\n",
7279ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		btohs(cp->handle), btohs(cp->max_interval),
7289ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		btohs(cp->min_interval), btohs(cp->attempt), btohs(cp->timeout));
7299ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann}
7309ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann
731ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_link_policy_dump(int level, struct frame *frm)
732ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
733ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_link_policy_cp *cp = frm->ptr;
734ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t policy = btohs(cp->policy);
735ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
736ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
737ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
738ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("handle %d policy 0x%2.2x\n", btohs(cp->handle), policy);
739ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
740ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	str = hci_lptostr(policy);
741ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (str) {
742ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
743ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Link policy: %s\n", str);
744ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		free(str);
745ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
746ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
747ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
748120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmannstatic inline void sniff_subrate_dump(int level, struct frame *frm)
749120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann{
750120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	sniff_subrate_cp *cp = frm->ptr;
751120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
752120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
753120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("handle %d\n", btohs(cp->handle));
754120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
755120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
756f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann	printf("max latency %d\n", btohs(cp->max_latency));
757120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
758120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
759120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("min timeout remote %d local %d\n",
760120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		btohs(cp->min_remote_timeout), btohs(cp->min_local_timeout));
761120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann}
762120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
76344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_mask_dump(int level, struct frame *frm)
76444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
76544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	set_event_mask_cp *cp = frm->ptr;
76644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	int i;
76744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
76844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
76944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("Mask: 0x");
77044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	for (i = 0; i < 8; i++)
77144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("%2.2x", cp->mask[i]);
77244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("\n");
77344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
77444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
77544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_flt_dump(int level, struct frame *frm)
77644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
77744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	set_event_flt_cp *cp = frm->ptr;
778cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann	uint8_t dev_class[3], dev_mask[3];
779cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann	char addr[18];
78044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
78144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
782662fd6cd30f3adbfef7c39e2bfcfb1107d96ebbbMarcel Holtmann	printf("type %d condition %d\n", cp->flt_type,
783662fd6cd30f3adbfef7c39e2bfcfb1107d96ebbbMarcel Holtmann				(cp->flt_type == 0) ? 0 : cp->cond_type);
78444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
78544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	switch (cp->flt_type) {
78644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_CLEAR_ALL:
78751c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
78844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Clear all filters\n");
78944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
79044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_INQ_RESULT:
79151c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
79244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Inquiry result");
79344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		switch (cp->cond_type) {
79444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_ALL:
795cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" for all devices\n");
796cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
79744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_CLASS:
798cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			memcpy(dev_class, cp->condition, 3);
799cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			memcpy(dev_mask, cp->condition + 3, 3);
800cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" with class 0x%2.2x%2.2x%2.2x mask 0x%2.2x%2.2x%2.2x\n",
801cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann				dev_class[2], dev_class[1], dev_class[0],
802cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann				dev_mask[2], dev_mask[1], dev_mask[0]);
803cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
80444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case INQ_RESULT_RETURN_BDADDR:
805bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str((bdaddr_t *) cp->condition, addr);
806cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			printf(" with bdaddr %s\n", addr);
807cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann			break;
80844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		default:
80944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			printf("\n");
81044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			break;
81144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		}
81244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
81344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	case FLT_CONN_SETUP:
81451c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann		p_indent(level, frm);
81544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Connection setup");
81644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		switch (cp->cond_type) {
81744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_ALL:
81844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_CLASS:
81944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case CONN_SETUP_ALLOW_BDADDR:
82044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		default:
82144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			printf("\n");
82244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			break;
82344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		}
82444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		break;
82544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
82644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
82744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
82844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_pin_type_dump(int level, struct frame *frm)
82944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
83044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	write_pin_type_cp *cp = frm->ptr;
83144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
83244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
83344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("type %d\n", cp->pin_type);
83444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
83544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
83644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void request_stored_link_key_dump(int level, struct frame *frm)
83744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
83844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_stored_link_key_cp *cp = frm->ptr;
83944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	char addr[18];
84044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
84144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
842bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&cp->bdaddr, addr);
84344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s all %d\n", addr, cp->read_all);
84444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
84544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
84644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void return_link_keys_dump(int level, struct frame *frm)
84744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
84844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	uint8_t num = get_u8(frm);
84944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	uint8_t key[16];
85044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	char addr[18];
85144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	int i, n;
85244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
85344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	for (n = 0; n < num; n++) {
854bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(frm->ptr, addr);
85544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		memcpy(key, frm->ptr + 6, 16);
85644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
85744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
85844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("bdaddr %s key ", addr);
85944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		for (i = 0; i < 16; i++)
860a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			if (parser.flags & DUMP_NOVENDOR)
861a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann				printf("**");
862a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			else
863a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann				printf("%2.2X", key[i]);
86444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("\n");
86544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
86644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		frm->ptr += 2;
86744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		frm->len -= 2;
86844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
86944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
87044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
871ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void change_local_name_dump(int level, struct frame *frm)
872ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
873ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	change_local_name_cp *cp = frm->ptr;
874ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char name[249];
875ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
876ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
877ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(name, 0, sizeof(name));
878ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 248 && cp->name[i]; i++)
879ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (isprint(cp->name[i]))
880ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = cp->name[i];
881ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		else
882ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = '.';
883ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
884ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
885ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("name \'%s\'\n", name);
886ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
887ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
888ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_class_of_dev_dump(int level, struct frame *frm)
889ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
890ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_class_of_dev_cp *cp = frm->ptr;
891ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
892ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
893ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("class 0x%2.2x%2.2x%2.2x\n",
894120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			cp->dev_class[2], cp->dev_class[1], cp->dev_class[0]);
895ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
896ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
897ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_voice_setting_dump(int level, struct frame *frm)
898ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
899ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	write_voice_setting_cp *cp = frm->ptr;
900ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
901ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
902ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("voice setting 0x%4.4x\n", btohs(cp->voice_setting));
903ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
904ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
905fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void write_current_iac_lap_dump(int level, struct frame *frm)
906fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{
907fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	write_current_iac_lap_cp *cp = frm->ptr;
908fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	int i;
909fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
910fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	for (i = 0; i < cp->num_current_iac; i++) {
911fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		p_indent(level, frm);
912fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("IAC 0x%2.2x%2.2x%2.2x", cp->lap[i][2], cp->lap[i][1], cp->lap[i][0]);
913fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		if (cp->lap[i][2] == 0x9e && cp->lap[i][1] == 0x8b) {
914fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			switch (cp->lap[i][0]) {
915fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x00:
916fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (Limited Inquiry Access Code)");
917fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
918fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x33:
919fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (General Inquiry Access Code)");
920fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
921fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			}
922fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		}
923fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("\n");
924fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	}
925fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann}
926fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
92769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void write_scan_enable_dump(int level, struct frame *frm)
92869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{
92969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t enable = get_u8(frm);
93069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
93169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	p_indent(level, frm);
93269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	printf("enable %d\n", enable);
93369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann}
93469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
935d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_timeout_dump(int level, struct frame *frm)
936d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
937d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	write_page_timeout_cp *cp = frm->ptr;
938d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
939d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
940d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("timeout %d\n", btohs(cp->timeout));
941d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
942d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
943d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_activity_dump(int level, struct frame *frm)
944d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
945d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	write_page_activity_cp *cp = frm->ptr;
946d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
947d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
948d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("interval %d window %d\n", btohs(cp->interval), btohs(cp->window));
949d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
950d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
951a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void write_inquiry_scan_type_dump(int level, struct frame *frm)
952a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{
953a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	write_inquiry_scan_type_cp *cp = frm->ptr;
954a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
955a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	p_indent(level, frm);
956a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	printf("type %d\n", cp->type);
957a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann}
958a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
959f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmannstatic inline void write_inquiry_mode_dump(int level, struct frame *frm)
960f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann{
961f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	write_inquiry_mode_cp *cp = frm->ptr;
962f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann
963f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	p_indent(level, frm);
964f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann	printf("mode %d\n", cp->mode);
965f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann}
966f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann
967994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmannstatic inline void set_afh_classification_dump(int level, struct frame *frm)
968994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann{
969994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	set_afh_classification_cp *cp = frm->ptr;
970994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	int i;
971994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann
972994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	p_indent(level, frm);
973994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	printf("map 0x");
974994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	for (i = 0; i < 10; i++)
975994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann		printf("%02x", cp->map[i]);
976994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann	printf("\n");
977994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann}
978994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann
9796eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void write_link_supervision_timeout_dump(int level, struct frame *frm)
9806eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
9816eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	write_link_supervision_timeout_cp *cp = frm->ptr;
9826eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
9836eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
9846eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("handle %d timeout %d\n",
985d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann				btohs(cp->handle), btohs(cp->timeout));
9866eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
9876eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
9881a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void write_ext_inquiry_response_dump(int level, struct frame *frm)
9891a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{
9901a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	write_ext_inquiry_response_cp *cp = frm->ptr;
9911a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
9921a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	p_indent(level, frm);
9931a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	printf("fec 0x%2.2x\n", cp->fec);
994f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
995f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	frm->ptr++;
996f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	frm->len--;
997f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
998e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann	ext_inquiry_response_dump(level, frm);
9991a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann}
10001a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
10016eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void request_transmit_power_level_dump(int level, struct frame *frm)
10026eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
10036eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_transmit_power_level_cp *cp = frm->ptr;
10046eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
10056eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
10066eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("handle %d type %d (%s)\n",
1007120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(cp->handle), cp->type,
1008120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					cp->type ? "maximum" : "current");
10096eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
10106eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
101117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void request_local_ext_features_dump(int level, struct frame *frm)
101217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
101317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_ext_features_cp *cp = frm->ptr;
101417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
101517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
101617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("page %d\n", cp->page_num);
101717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
101817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1019f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void request_clock_dump(int level, struct frame *frm)
1020f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
1021f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_clock_cp *cp = frm->ptr;
1022f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1023f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
1024f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("handle %d which %d (%s)\n",
1025120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(cp->handle), cp->which_clock,
1026120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					cp->which_clock ? "piconet" : "local");
1027f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
1028f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
10292315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmannstatic inline void host_buffer_size_dump(int level, struct frame *frm)
10302315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann{
10312315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	host_buffer_size_cp *cp = frm->ptr;
10322315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann
10332315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	p_indent(level, frm);
10342315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann	printf("ACL MTU %d:%d SCO MTU %d:%d\n",
10352315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann				btohs(cp->acl_mtu), btohs(cp->acl_max_pkt),
10362315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann				cp->sco_mtu, btohs(cp->sco_max_pkt));
10372315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann}
10382315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann
10391b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmannstatic inline void num_comp_pkts_dump(int level, struct frame *frm)
10401b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann{
10411b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	uint8_t num = get_u8(frm);
10421b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	uint16_t handle, packets;
10431b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	int i;
10441b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
10451b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	for (i = 0; i < num; i++) {
10461b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		handle = btohs(htons(get_u16(frm)));
10471b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		packets = btohs(htons(get_u16(frm)));
10481b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
10491b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		p_indent(level, frm);
10501b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		printf("handle %d packets %d\n", handle, packets);
10511b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann	}
10521b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann}
10531b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann
1054d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void command_dump(int level, struct frame *frm)
1055d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1056d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	hci_command_hdr *hdr = frm->ptr;
1057d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(hdr->opcode);
1058d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
1059d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
1060d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1061d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (p_filter(FILT_HCI))
1062d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		return;
1063d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
10647b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
10657b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
106665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
10677b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	p_indent(level, frm);
1068803752117135528b1adebf0fa045596e188a996dMarcel Holtmann	printf("HCI Command: %s (0x%2.2x|0x%4.4x) plen %d\n",
1069120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				opcode2str(opcode), ogf, ocf, hdr->plen);
107065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
107165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->ptr += HCI_COMMAND_HDR_SIZE;
107265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->len -= HCI_COMMAND_HDR_SIZE;
107365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
10747b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD) {
10757b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	       	if (ocf == 0 && get_manufacturer() == 10) {
10767b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			csr_dump(level + 1, frm);
10777b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			return;
10787b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		}
1079be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	}
1080be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann
10814f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
10824f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		raw_dump(level, frm);
10834f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		return;
10844f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	}
10854f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann
1086ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	switch (ogf) {
1087ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_CTL:
1088ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
1089ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_INQUIRY:
1090ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			inquiry_dump(level + 1, frm);
1091ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1092ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PERIODIC_INQUIRY:
1093ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			periodic_inquiry_dump(level + 1, frm);
1094ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1095ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_INQUIRY_CANCEL:
1096ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_PERIODIC_INQUIRY:
1097ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1098ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CREATE_CONN:
1099ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			create_conn_dump(level + 1, frm);
1100ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1101ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_DISCONNECT:
1102ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			disconnect_dump(level + 1, frm);
1103ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
110490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_CREATE_CONN_CANCEL:
110590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REMOTE_NAME_REQ_CANCEL:
110690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_ACCEPT_SYNC_CONN_REQ:
110790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann			bdaddr_command_dump(level + 1, frm);
110890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann			return;
1109ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ADD_SCO:
1110ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SET_CONN_PTYPE:
1111ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			add_sco_dump(level + 1, frm);
1112acc2322e0bed89e8ada2564359a1a6d293c9d514Marcel Holtmann			return;
1113ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ACCEPT_CONN_REQ:
1114ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			accept_conn_req_dump(level + 1, frm);
1115ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1116ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_REJECT_CONN_REQ:
111790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REJECT_SYNC_CONN_REQ:
1118ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			reject_conn_req_dump(level + 1, frm);
1119ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1120ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_REPLY:
1121ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			pin_code_reply_dump(level + 1, frm);
1122ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1123ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_REPLY:
1124ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			link_key_reply_dump(level + 1, frm);
1125ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1126ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_NEG_REPLY:
1127ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_NEG_REPLY:
1128ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			pin_code_neg_reply_dump(level + 1, frm);
1129ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1130ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SET_CONN_ENCRYPT:
1131ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			set_conn_encrypt_dump(level + 1, frm);
1132ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1133ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_AUTH_REQUESTED:
1134ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CHANGE_CONN_LINK_KEY:
1135ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_REMOTE_FEATURES:
1136ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_REMOTE_VERSION:
1137ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_CLOCK_OFFSET:
113890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_READ_LMP_HANDLE:
113990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_SETUP_SYNC_CONN:
1140ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_command_dump(level + 1, frm);
1141ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
114217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_MASTER_LINK_KEY:
114317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			master_link_key_dump(level + 1, frm);
114417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
114517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_REMOTE_EXT_FEATURES:
114617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_remote_ext_features_dump(level + 1, frm);
114717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
1148ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_REMOTE_NAME_REQ:
1149ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			remote_name_req_dump(level + 1, frm);
1150ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1151ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1152ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1153ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1154ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_POLICY:
1155ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
11569ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_HOLD_MODE:
11579ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_PARK_MODE:
11589ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			hold_mode_dump(level + 1, frm);
11599ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			return;
11609ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann		case OCF_SNIFF_MODE:
11619ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			sniff_mode_dump(level + 1, frm);
11629ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann			return;
1163ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_SNIFF_MODE:
1164ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_EXIT_PARK_MODE:
1165ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_ROLE_DISCOVERY:
1166ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_LINK_POLICY:
1167ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_command_dump(level + 1, frm);
1168ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1169ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_SWITCH_ROLE:
1170ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			accept_conn_req_dump(level + 1, frm);
1171ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1172ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_LINK_POLICY:
1173ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_link_policy_dump(level + 1, frm);
1174ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1175120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		case OCF_SNIFF_SUBRATE:
1176120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			sniff_subrate_dump(level + 1, frm);
1177120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			return;
1178ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1179ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1180ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1181ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_HOST_CTL:
1182ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
118344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_RESET:
118444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_CREATE_NEW_UNIT_KEY:
118544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
118644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_MASK:
118744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			set_event_mask_dump(level + 1, frm);
118844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
118944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_FLT:
119044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			set_event_flt_dump(level + 1, frm);
119144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
119244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_PIN_TYPE:
119344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			write_pin_type_dump(level + 1, frm);
119444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
119544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_STORED_LINK_KEY:
119644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_DELETE_STORED_LINK_KEY:
119744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			request_stored_link_key_dump(level + 1, frm);
119844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
119944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_STORED_LINK_KEY:
120044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return_link_keys_dump(level + 1, frm);
120144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
1202ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_CHANGE_LOCAL_NAME:
1203ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			change_local_name_dump(level + 1, frm);
1204ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1205ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_CLASS_OF_DEV:
1206ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_class_of_dev_dump(level + 1, frm);
1207ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1208ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_VOICE_SETTING:
1209ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			write_voice_setting_dump(level + 1, frm);
1210ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1211fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_CURRENT_IAC_LAP:
1212fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			write_current_iac_lap_dump(level + 1, frm);
1213fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			return;
121469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_SCAN_ENABLE:
121569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_AUTH_ENABLE:
12168583de68ea3be3ada739dcc84d811fc752d45a03Marcel Holtmann		case OCF_SET_CONTROLLER_TO_HOST_FC:
121769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			write_scan_enable_dump(level + 1, frm);
121869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			return;
1219097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_WRITE_CONN_ACCEPT_TIMEOUT:
1220d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_TIMEOUT:
1221d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			write_page_timeout_dump(level + 1, frm);
1222d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
1223d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_ACTIVITY:
1224d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_INQ_ACTIVITY:
1225d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			write_page_activity_dump(level + 1, frm);
1226d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
1227a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_WRITE_INQUIRY_SCAN_TYPE:
1228a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			write_inquiry_scan_type_dump(level + 1, frm);
1229a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			return;
123069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_ENCRYPT_MODE:
1231f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_INQUIRY_MODE:
1232f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_AFH_MODE:
1233f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			write_inquiry_mode_dump(level + 1, frm);
1234f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			return;
1235994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann		case OCF_SET_AFH_CLASSIFICATION:
1236994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann			set_afh_classification_dump(level + 1, frm);
1237994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann			return;
12386eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_TRANSMIT_POWER_LEVEL:
12396eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			request_transmit_power_level_dump(level + 1, frm);
12406eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
12412315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann		case OCF_HOST_BUFFER_SIZE:
12422315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann			host_buffer_size_dump(level + 1, frm);
12432315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann			return;
12441b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann		case OCF_HOST_NUM_COMP_PKTS:
12451b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann			num_comp_pkts_dump(level + 1, frm);
12461b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann			return;
124744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_FLUSH:
12486eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_LINK_SUPERVISION_TIMEOUT:
12496eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			generic_command_dump(level + 1, frm);
12506eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
12516eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:
12526eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			write_link_supervision_timeout_dump(level + 1, frm);
12536eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
12541a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_WRITE_EXT_INQUIRY_RESPONSE:
12551a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			write_ext_inquiry_response_dump(level + 1, frm);
12561a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			return;
1257ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
1258ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
125917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
126017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case OGF_INFO_PARAM:
126117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		switch (ocf) {
126217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_EXT_FEATURES:
126317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			request_local_ext_features_dump(level + 1, frm);
126417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
126517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		}
1266ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
1267f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1268f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	case OGF_STATUS_PARAM:
1269f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		switch (ocf) {
1270f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_LINK_QUALITY:
1271f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_RSSI:
1272f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_AFH_MAP:
1273f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			generic_command_dump(level + 1, frm);
1274f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1275f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		case OCF_READ_CLOCK:
1276f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			request_clock_dump(level + 1, frm);
1277f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1278f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		}
1279f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		break;
1280ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1281ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
128265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	raw_dump(level, frm);
128395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
128495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
1285d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void status_response_dump(int level, struct frame *frm)
1286d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1287d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t status = get_u8(frm);
1288d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1289d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
1290d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x\n", status);
1291d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1292d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (status > 0) {
1293d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
1294d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(status));
1295d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
1296d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1297d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	raw_dump(level, frm);
1298d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
1299d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1300afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void handle_response_dump(int level, struct frame *frm)
1301afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{
1302afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
1303afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
1304afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	p_indent(level, frm);
1305afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	printf("handle %d\n", handle);
1306afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
1307afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	raw_dump(level, frm);
1308afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann}
1309afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
1310ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void bdaddr_response_dump(int level, struct frame *frm)
1311ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1312ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint8_t status = get_u8(frm);
1313ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	bdaddr_t *bdaddr = frm->ptr;
1314ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
1315ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1316ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	frm->ptr += sizeof(bdaddr_t);
1317ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	frm->len -= sizeof(bdaddr_t);
1318ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1319ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1320bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(bdaddr, addr);
1321ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x bdaddr %s\n", status, addr);
1322ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1323ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (status > 0) {
1324ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1325ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(status));
1326ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1327ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1328ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	raw_dump(level, frm);
1329ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1330ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1331d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void generic_response_dump(int level, struct frame *frm)
1332d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1333d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t status = get_u8(frm);
1334d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t handle = btohs(htons(get_u16(frm)));
1335d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1336d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
1337d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d\n", status, handle);
1338d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1339d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (status > 0) {
1340d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
1341d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(status));
1342d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
1343d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1344d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	raw_dump(level, frm);
1345d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
1346d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
134744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_pin_type_dump(int level, struct frame *frm)
134844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
134944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_pin_type_rp *rp = frm->ptr;
135044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
135144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
135244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x type %d\n", rp->status, rp->pin_type);
135344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
135444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
135544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
135644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
135744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
135844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
135944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
136044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_stored_link_key_dump(int level, struct frame *frm)
136144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
136244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	read_stored_link_key_rp *rp = frm->ptr;
136344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
136444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
136544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x max %d num %d\n",
1366120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, rp->max_keys, rp->num_keys);
136744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
136844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
136944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
137044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
137144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
137244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
137344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
137444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_stored_link_key_dump(int level, struct frame *frm)
137544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
137644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	write_stored_link_key_rp *rp = frm->ptr;
137744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
137844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
137944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x written %d\n", rp->status, rp->num_keys);
138044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
138144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
138244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
138344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
138444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
138544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
138644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
138744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void delete_stored_link_key_dump(int level, struct frame *frm)
138844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{
138944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	delete_stored_link_key_rp *rp = frm->ptr;
139044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
139144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	p_indent(level, frm);
139244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("status 0x%2.2x deleted %d\n", rp->status, btohs(rp->num_keys));
139344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
139444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	if (rp->status > 0) {
139544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		p_indent(level, frm);
139644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
139744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	}
139844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann}
139944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann
1400ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_name_dump(int level, struct frame *frm)
1401ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1402ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_name_rp *rp = frm->ptr;
1403ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char name[249];
1404ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
1405ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1406ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	memset(name, 0, sizeof(name));
1407ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 248 && rp->name[i]; i++)
1408ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (isprint(rp->name[i]))
1409ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = rp->name[i];
1410ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		else
1411ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			name[i] = '.';
1412ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1413ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1414ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x name \'%s\'\n", rp->status, name);
1415ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1416ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
1417ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1418ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1419ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1420ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1421ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1422ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_class_of_dev_dump(int level, struct frame *frm)
1423ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1424ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_class_of_dev_rp *rp = frm->ptr;
1425ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1426ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1427ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x class 0x%2.2x%2.2x%2.2x\n", rp->status,
1428120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]);
1429ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1430ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
1431ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1432ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1433ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1434ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1435ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1436ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_voice_setting_dump(int level, struct frame *frm)
1437ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1438ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_voice_setting_rp *rp = frm->ptr;
1439ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1440ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1441ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x voice setting 0x%4.4x\n",
1442120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->status, btohs(rp->voice_setting));
1443ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1444ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
1445ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1446ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1447ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1448ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1449ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1450fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void read_current_iac_lap_dump(int level, struct frame *frm)
1451fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{
1452fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	read_current_iac_lap_rp *rp = frm->ptr;
1453fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	int i;
1454fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
1455fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	for (i = 0; i < rp->num_current_iac; i++) {
1456fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		p_indent(level, frm);
1457fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("IAC 0x%2.2x%2.2x%2.2x", rp->lap[i][2], rp->lap[i][1], rp->lap[i][0]);
1458fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		if (rp->lap[i][2] == 0x9e && rp->lap[i][1] == 0x8b) {
1459fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			switch (rp->lap[i][0]) {
1460fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x00:
1461fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (Limited Inquiry Access Code)");
1462fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
1463fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			case 0x33:
1464fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				printf(" (General Inquiry Access Code)");
1465fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann				break;
1466fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			}
1467fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		}
1468fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		printf("\n");
1469fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann	}
1470fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann}
1471fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann
147269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void read_scan_enable_dump(int level, struct frame *frm)
147369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{
147469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t status = get_u8(frm);
147569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	uint8_t enable = get_u8(frm);
147669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
147769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	p_indent(level, frm);
147869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	printf("status 0x%2.2x enable %d\n", status, enable);
147969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
148069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	if (status > 0) {
148169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		p_indent(level, frm);
148269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		printf("Error: %s\n", status2str(status));
148369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann	}
148469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann}
148569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann
1486d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_timeout_dump(int level, struct frame *frm)
1487d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
1488d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	read_page_timeout_rp *rp = frm->ptr;
1489d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1490d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
1491d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("status 0x%2.2x timeout %d\n", rp->status, btohs(rp->timeout));
1492d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1493d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	if (rp->status > 0) {
1494d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		p_indent(level, frm);
1495d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1496d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	}
1497d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
1498d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1499d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_activity_dump(int level, struct frame *frm)
1500d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{
1501d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	read_page_activity_rp *rp = frm->ptr;
1502d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1503d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	p_indent(level, frm);
1504d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	printf("status 0x%2.2x interval %d window %d\n",
1505120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->status, btohs(rp->interval), btohs(rp->window));
1506d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1507d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	if (rp->status > 0) {
1508d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		p_indent(level, frm);
1509d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1510d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann	}
1511d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann}
1512d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann
1513a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void read_inquiry_scan_type_dump(int level, struct frame *frm)
1514a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{
1515a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	read_inquiry_scan_type_rp *rp = frm->ptr;
1516a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
1517a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	p_indent(level, frm);
1518a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	printf("status 0x%2.2x type %d\n", rp->status, rp->type);
1519a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
1520a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	if (rp->status > 0) {
1521a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		p_indent(level, frm);
1522a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1523a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann	}
1524a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann}
1525a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann
15266eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_inquiry_mode_dump(int level, struct frame *frm)
15276eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
15286eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_inquiry_mode_rp *rp = frm->ptr;
15296eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
15306eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
15316eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x mode %d\n", rp->status, rp->mode);
15326eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
15336eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
15346eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
15356eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
15366eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
15376eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
15386eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
15396eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_link_supervision_timeout_dump(int level, struct frame *frm)
15406eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
15416eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_link_supervision_timeout_rp *rp = frm->ptr;
15426eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
15436eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
15446eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x handle %d timeout %d\n",
1545d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann			rp->status, btohs(rp->handle), btohs(rp->timeout));
15466eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
15476eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
15486eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
15496eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
15506eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
15516eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
15526eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
15536eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_transmit_power_level_dump(int level, struct frame *frm)
15546eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{
15556eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	read_transmit_power_level_rp *rp = frm->ptr;
15566eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
15576eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	p_indent(level, frm);
15586eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	printf("status 0x%2.2x handle %d level %d\n",
1559120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->level);
15606eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
15616eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	if (rp->status > 0) {
15626eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		p_indent(level, frm);
15636eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
15646eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann	}
15656eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann}
15666eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann
15671a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void read_ext_inquiry_response_dump(int level, struct frame *frm)
15681a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{
15691a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	read_ext_inquiry_response_rp *rp = frm->ptr;
15701a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
15711a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	p_indent(level, frm);
15721a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	printf("status 0x%2.2x fec 0x%2.2x\n", rp->status, rp->fec);
15731a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
15741a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	if (rp->status > 0) {
15751a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		p_indent(level, frm);
15761a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1577f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann	} else {
1578f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann		frm->ptr += 2;
1579f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann		frm->len -= 2;
1580f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann
1581e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		ext_inquiry_response_dump(level, frm);
15821a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann	}
15831a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann}
15841a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann
1585ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_version_dump(int level, struct frame *frm)
1586ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1587ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_version_rp *rp = frm->ptr;
1588ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t manufacturer = btohs(rp->manufacturer);
1589ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1590ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1591ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
1592ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1593ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
1594ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1595ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1596ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
1597ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
15981a5f2bff835728b9df12114adf87c704a1e9b6b8Marcel Holtmann		printf("HCI Version: %s (0x%x) HCI Revision: 0x%x\n",
1599120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					hci_vertostr(rp->hci_ver),
1600120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->hci_ver, btohs(rp->hci_rev));
1601ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1602ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n",
1603120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					lmp_vertostr(rp->lmp_ver),
1604120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->lmp_ver, btohs(rp->lmp_subver));
1605ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1606ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Manufacturer: %s (%d)\n",
1607120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				bt_compidtostr(manufacturer), manufacturer);
1608ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1609ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1610ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
161117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_commands_dump(int level, struct frame *frm)
161217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
161317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_commands_rp *rp = frm->ptr;
161417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i, max = 0;
161517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
161617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
161717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
161817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
161917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (rp->status > 0) {
162017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
162117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
162217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
162317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 64; i++)
162417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			if (rp->commands[i])
162517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann				max = i + 1;
162617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
162717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Commands: ");
162817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < (max > 32 ? 32 : max); i++)
162917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("%2.2x", rp->commands[i]);
163017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
163117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		if (max > 32) {
163217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			p_indent(level, frm);
163317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("          ");
163417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			for (i = 32; i < max; i++)
163517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann				printf("%2.2x", rp->commands[i]);
163617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf("\n");
163717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		}
163817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
163917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
164017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1641ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_features_dump(int level, struct frame *frm)
1642ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1643ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_local_features_rp *rp = frm->ptr;
1644ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
1645ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1646ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1647ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
1648ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1649ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
1650ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1651ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1652ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
1653ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1654ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Features:");
1655ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		for (i = 0; i < 8; i++)
1656ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf(" 0x%2.2x", rp->features[i]);
1657ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("\n");
1658ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1659ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1660ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
166117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_ext_features_dump(int level, struct frame *frm)
166217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
166317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	read_local_ext_features_rp *rp = frm->ptr;
166417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i;
166517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
166617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
166717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x page %d max %d\n",
166817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		rp->status, rp->page_num, rp->max_page_num);
166917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
167017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (rp->status > 0) {
167117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
167217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
167317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
167417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
167517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Features:");
167617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 8; i++)
167717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			 printf(" 0x%2.2x", rp->features[i]);
167817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
167917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
168017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
168117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
1682ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_buffer_size_dump(int level, struct frame *frm)
1683ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
1684ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	read_buffer_size_rp *rp = frm->ptr;
1685ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1686ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
1687ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x\n", rp->status);
1688ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1689ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (rp->status > 0) {
1690ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1691ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1692ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
1693ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
1694ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("ACL MTU %d:%d SCO MTU %d:%d\n",
1695120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				btohs(rp->acl_mtu), btohs(rp->acl_max_pkt),
1696120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->sco_mtu, btohs(rp->sco_max_pkt));
1697ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
1698ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
1699ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1700f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_link_quality_dump(int level, struct frame *frm)
1701f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
1702f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_link_quality_rp *rp = frm->ptr;
1703f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1704f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
1705f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d lq %d\n",
1706120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			rp->status, btohs(rp->handle), rp->link_quality);
1707f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1708f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
1709f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
1710f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1711f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
1712f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
1713f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1714f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_rssi_dump(int level, struct frame *frm)
1715f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
1716f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_rssi_rp *rp = frm->ptr;
1717f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1718f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
1719f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d rssi %d\n",
1720120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->rssi);
1721f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1722f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
1723f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
1724f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1725f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
1726f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
1727f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1728f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_afh_map_dump(int level, struct frame *frm)
1729f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
1730f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_afh_map_rp *rp = frm->ptr;
1731f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	int i;
1732f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1733f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
1734f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d mode %d\n",
1735120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				rp->status, btohs(rp->handle), rp->mode);
1736f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1737f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
1738f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
1739f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1740f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	} else {
1741f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
1742f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("AFH map: 0x");
1743f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		for (i = 0; i < 10; i++)
1744f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			printf("%2.2x", rp->map[i]);
1745f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("\n");
1746f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
1747f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
1748f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1749f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_clock_dump(int level, struct frame *frm)
1750f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{
1751f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	read_clock_rp *rp = frm->ptr;
1752f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1753f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	p_indent(level, frm);
1754f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	printf("status 0x%2.2x handle %d clock 0x%4.4x accuracy %d\n",
1755120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					rp->status, btohs(rp->handle),
1756120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohl(rp->clock), btohs(rp->accuracy));
1757f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1758f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	if (rp->status > 0) {
1759f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		p_indent(level, frm);
1760f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann		printf("Error: %s\n", status2str(rp->status));
1761f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann	}
1762f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann}
1763f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann
1764d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_complete_dump(int level, struct frame *frm)
1765d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1766d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_cmd_complete *evt = frm->ptr;
1767d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(evt->opcode);
1768d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
1769d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
1770d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
17717b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
17727b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
17737b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
1774d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
1775d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("%s (0x%2.2x|0x%4.4x) ncmd %d\n",
1776120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				opcode2str(opcode), ogf, ocf, evt->ncmd);
1777d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1778d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	frm->ptr += EVT_CMD_COMPLETE_SIZE;
1779d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	frm->len -= EVT_CMD_COMPLETE_SIZE;
1780d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
17814f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
17824f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		raw_dump(level, frm);
17834f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann		return;
17844f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann	}
17854f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann
1786d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	switch (ogf) {
1787ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_CTL:
1788ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
178917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_INQUIRY_CANCEL:
179017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_PERIODIC_INQUIRY:
179117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_EXIT_PERIODIC_INQUIRY:
1792d51f2017d006ab5e9ec6f187142ae2ae1cffff8eMarcel Holtmann		case OCF_READ_REMOTE_EXT_FEATURES:
179317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			status_response_dump(level, frm);
179417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
179590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_CREATE_CONN_CANCEL:
179690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann		case OCF_REMOTE_NAME_REQ_CANCEL:
1797ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_REPLY:
1798ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_REPLY:
1799ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_PIN_CODE_NEG_REPLY:
1800ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_LINK_KEY_NEG_REPLY:
1801ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bdaddr_response_dump(level, frm);
1802ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1803ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
180417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
1805ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1806ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case OGF_LINK_POLICY:
1807ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		switch (ocf) {
1808ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_WRITE_LINK_POLICY:
1809d5262a5f39508334f5f54a91702b064b4f7bb134Marcel Holtmann		case OCF_SNIFF_SUBRATE:
1810ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			generic_response_dump(level, frm);
1811ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1812ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
181317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
1814ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1815d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_HOST_CTL:
1816d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
181744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_PIN_TYPE:
181844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			read_pin_type_dump(level, frm);
181944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
182044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_READ_STORED_LINK_KEY:
182144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			read_stored_link_key_dump(level, frm);
182244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
182344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_STORED_LINK_KEY:
182444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			write_stored_link_key_dump(level, frm);
182544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
182644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_DELETE_STORED_LINK_KEY:
182744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			delete_stored_link_key_dump(level, frm);
182844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann			return;
1829d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_NAME:
1830ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_name_dump(level, frm);
1831ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1832ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_CLASS_OF_DEV:
1833ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_class_of_dev_dump(level, frm);
1834ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1835ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		case OCF_READ_VOICE_SETTING:
1836ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_voice_setting_dump(level, frm);
1837ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1838fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_READ_CURRENT_IAC_LAP:
1839fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			read_current_iac_lap_dump(level, frm);
1840fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann			return;
184169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_SCAN_ENABLE:
184269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_AUTH_ENABLE:
184369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			read_scan_enable_dump(level, frm);
184469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann			return;
1845097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_READ_CONN_ACCEPT_TIMEOUT:
1846d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_PAGE_TIMEOUT:
1847d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			read_page_timeout_dump(level, frm);
1848d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
1849d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_PAGE_ACTIVITY:
1850d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_READ_INQ_ACTIVITY:
1851d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			read_page_activity_dump(level, frm);
1852d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann			return;
1853a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_READ_INQUIRY_SCAN_TYPE:
1854a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			read_inquiry_scan_type_dump(level, frm);
1855a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann			return;
185669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_READ_ENCRYPT_MODE:
1857f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_READ_INQUIRY_MODE:
1858f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_READ_AFH_MODE:
1859f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			read_inquiry_mode_dump(level, frm);
1860f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann			return;
18616eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_LINK_SUPERVISION_TIMEOUT:
18626eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			read_link_supervision_timeout_dump(level, frm);
18636eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
18646eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_READ_TRANSMIT_POWER_LEVEL:
18656eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			read_transmit_power_level_dump(level, frm);
18666eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
18671a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_READ_EXT_INQUIRY_RESPONSE:
18681a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			read_ext_inquiry_response_dump(level, frm);
18691a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann			return;
187044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_FLUSH:
18716eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann		case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:
18726eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			generic_response_dump(level, frm);
18736eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann			return;
187444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_RESET:
187544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_MASK:
187644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_SET_EVENT_FLT:
187744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_WRITE_PIN_TYPE:
187844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann		case OCF_CREATE_NEW_UNIT_KEY:
18791577526370e596583b15d68940c24e975e62a502Marcel Holtmann		case OCF_CHANGE_LOCAL_NAME:
1880f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_CLASS_OF_DEV:
1881f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann		case OCF_WRITE_VOICE_SETTING:
1882fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_CURRENT_IAC_LAP:
188369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_SCAN_ENABLE:
188469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_AUTH_ENABLE:
188569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann		case OCF_WRITE_ENCRYPT_MODE:
1886097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann		case OCF_WRITE_CONN_ACCEPT_TIMEOUT:
1887d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_TIMEOUT:
1888d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_PAGE_ACTIVITY:
1889d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann		case OCF_WRITE_INQ_ACTIVITY:
1890a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann		case OCF_WRITE_INQUIRY_SCAN_TYPE:
1891fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_INQUIRY_MODE:
1892fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann		case OCF_WRITE_AFH_MODE:
1893d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_SET_AFH_CLASSIFICATION:
18941a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann		case OCF_WRITE_EXT_INQUIRY_RESPONSE:
18958583de68ea3be3ada739dcc84d811fc752d45a03Marcel Holtmann		case OCF_SET_CONTROLLER_TO_HOST_FC:
18962315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann		case OCF_HOST_BUFFER_SIZE:
1897d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			status_response_dump(level, frm);
1898ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1899d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
190017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
1901d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1902d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_INFO_PARAM:
1903d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
1904d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_VERSION:
1905ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_version_dump(level, frm);
1906ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
190717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_COMMANDS:
190817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_local_commands_dump(level, frm);
190917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
1910d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LOCAL_FEATURES:
1911ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_local_features_dump(level, frm);
1912ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
191317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		case OCF_READ_LOCAL_EXT_FEATURES:
191417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			read_local_ext_features_dump(level, frm);
191517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			return;
1916d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_BUFFER_SIZE:
1917ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			read_buffer_size_dump(level, frm);
1918ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1919d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_BD_ADDR:
1920ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bdaddr_response_dump(level, frm);
1921ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1922d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
192317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
1924d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1925d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case OGF_STATUS_PARAM:
1926d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		switch (ocf) {
1927d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_FAILED_CONTACT_COUNTER:
1928d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_RESET_FAILED_CONTACT_COUNTER:
1929f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			status_response_dump(level, frm);
1930f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1931d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_LINK_QUALITY:
1932f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_link_quality_dump(level, frm);
1933f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1934d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_RSSI:
1935f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_rssi_dump(level, frm);
1936f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1937d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_AFH_MAP:
1938f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_afh_map_dump(level, frm);
1939f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			return;
1940d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		case OCF_READ_CLOCK:
1941f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann			read_clock_dump(level, frm);
1942ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			return;
1943d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		}
194417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
1945d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
1946ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
1947ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	raw_dump(level, frm);
1948d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
1949d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1950d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_status_dump(int level, struct frame *frm)
1951d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1952d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_cmd_status *evt = frm->ptr;
1953d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint16_t opcode = btohs(evt->opcode);
19547b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	uint16_t ogf = cmd_opcode_ogf(opcode);
19557b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	uint16_t ocf = cmd_opcode_ocf(opcode);
19567b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
19577b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
19587b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
1959d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1960d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
1961d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("%s (0x%2.2x|0x%4.4x) status 0x%2.2x ncmd %d\n",
19627b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			opcode2str(opcode), ogf, ocf, evt->status, evt->ncmd);
1963d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1964d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
1965d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
1966d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
1967d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
1968d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
1969d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1970afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void hardware_error_dump(int level, struct frame *frm)
1971afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{
1972afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	evt_hardware_error *evt = frm->ptr;
1973afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
1974afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	p_indent(level, frm);
1975afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	printf("code %d\n", evt->code);
1976afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann}
1977afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann
1978d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_dump(int level, struct frame *frm)
1979d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
1980d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t num = get_u8(frm);
1981b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	char addr[18];
1982d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
1983d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1984d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	for (i = 0; i < num; i++) {
1985d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inquiry_info *info = frm->ptr;
1986d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1987bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(&info->bdaddr, addr);
1988d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1989d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
199072e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann		printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x\n",
199172e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann			addr, info->pscan_rep_mode, btohs(info->clock_offset),
199272e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann			info->dev_class[2], info->dev_class[1], info->dev_class[0]);
1993d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1994d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		frm->ptr += INQUIRY_INFO_SIZE;
1995d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		frm->len -= INQUIRY_INFO_SIZE;
1996d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
1997d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
1998d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
1999d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_complete_dump(int level, struct frame *frm)
2000d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2001d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_conn_complete *evt = frm->ptr;
2002d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18];
2003d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2004bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2005d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2006d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2007d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d bdaddr %s type %s encrypt 0x%2.2x\n",
2008120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			evt->status, btohs(evt->handle), addr,
2009120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			evt->link_type == 1 ? "ACL" : "SCO", evt->encr_mode);
2010d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2011d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2012d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2013d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2014d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2015d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2016d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2017d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_request_dump(int level, struct frame *frm)
2018d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2019d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_conn_request *evt = frm->ptr;
2020d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18];
2021d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2022bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2023d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2024d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2025d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("bdaddr %s class 0x%2.2x%2.2x%2.2x type %s\n",
2026120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			addr, evt->dev_class[2], evt->dev_class[1],
2027120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann			evt->dev_class[0], evt->link_type == 1 ? "ACL" : "SCO");
2028d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2029d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2030d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void disconn_complete_dump(int level, struct frame *frm)
2031d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2032d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_disconn_complete *evt = frm->ptr;
2033d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2034d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2035d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d reason 0x%2.2x\n",
2036120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->reason);
2037d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2038d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2039d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2040d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2041d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	} else if (evt->reason > 0) {
2042d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2043d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Reason: %s\n", status2str(evt->reason));
2044d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2045d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2046d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2047d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void remote_name_req_complete_dump(int level, struct frame *frm)
2048d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2049d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_remote_name_req_complete *evt = frm->ptr;
2050d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	char addr[18], name[249];
2051d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
2052d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2053bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2054d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2055d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	memset(name, 0, sizeof(name));
2056d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	for (i = 0; i < 248 && evt->name[i]; i++)
2057d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		if (isprint(evt->name[i]))
2058d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			name[i] = evt->name[i];
2059d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		else
2060d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann			name[i] = '.';
2061d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2062d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2063d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x bdaddr %s name '%s'\n", evt->status, addr, name);
2064d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2065d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2066d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2067d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2068d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2069d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2070d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
207117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_complete_dump(int level, struct frame *frm)
207217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
207317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	evt_master_link_key_complete *evt = frm->ptr;
207417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
207517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
207617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x handle %d flag %d\n",
2077120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->key_flag);
207817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
207917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (evt->status > 0) {
208017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
208117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
208217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
208317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
208417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
2085d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void encrypt_change_dump(int level, struct frame *frm)
2086d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2087d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	evt_encrypt_change *evt = frm->ptr;
2088d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2089d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	p_indent(level, frm);
2090d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	printf("status 0x%2.2x handle %d encrypt 0x%2.2x\n",
2091120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->encrypt);
2092d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2093d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (evt->status > 0) {
2094d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		p_indent(level, frm);
2095d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2096d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2097d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2098d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2099ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_features_complete_dump(int level, struct frame *frm)
2100ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2101ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_remote_features_complete *evt = frm->ptr;
2102ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
2103ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2104ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2105ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
2106ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2107ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
2108ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2109ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2110ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2111ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2112ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Features:");
2113ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		for (i = 0; i < 8; i++)
2114ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf(" 0x%2.2x", evt->features[i]);
2115ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("\n");
2116ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2117ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2118ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2119ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_version_complete_dump(int level, struct frame *frm)
2120ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2121ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_remote_version_complete *evt = frm->ptr;
2122ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t manufacturer = btohs(evt->manufacturer);
2123ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2124ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2125ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
2126ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2127ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
2128ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2129ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2130ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2131ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2132ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n",
2133ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			lmp_vertostr(evt->lmp_ver), evt->lmp_ver,
2134ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			btohs(evt->lmp_subver));
2135ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2136ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Manufacturer: %s (%d)\n",
2137ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			bt_compidtostr(manufacturer), manufacturer);
2138ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2139ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2140ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
214111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void qos_setup_complete_dump(int level, struct frame *frm)
214211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
214311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_qos_setup_complete *evt = frm->ptr;
214411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
214511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
214611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("status 0x%2.2x handle %d flags %d\n",
2147120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->flags);
214811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
214911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	if (evt->status > 0) {
215011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
215111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Error: %s\n", status2str(evt->status));
215211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	} else {
215311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
215411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Service type: %d\n", evt->qos.service_type);
215511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
215611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Token rate: %d\n", btohl(evt->qos.token_rate));
215711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
215811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth));
215911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
216011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Latency: %d\n", btohl(evt->qos.latency));
216111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		p_indent(level, frm);
216211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		printf("Delay variation: %d\n", btohl(evt->qos.delay_variation));
216311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	}
216411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
216511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
2166ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void role_change_dump(int level, struct frame *frm)
2167ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2168ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_role_change *evt = frm->ptr;
2169ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
2170ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2171ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2172bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2173ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x bdaddr %s role 0x%2.2x\n",
2174120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann						evt->status, addr, evt->role);
2175ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2176ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
2177ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2178ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2179ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2180ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2181ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Role: %s\n", role2str(evt->role));
2182ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2183ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2184ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2185ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void mode_change_dump(int level, struct frame *frm)
2186ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2187ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_mode_change *evt = frm->ptr;
2188ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2189ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2190ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d mode 0x%2.2x interval %d\n",
2191ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		evt->status, btohs(evt->handle), evt->mode, btohs(evt->interval));
2192ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2193ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
2194ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2195ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2196ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2197ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2198ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Mode: %s\n", mode2str(evt->mode));
2199ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2200ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2201ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2202ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_req_dump(int level, struct frame *frm)
2203ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2204ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_pin_code_req *evt = frm->ptr;
2205ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
2206ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2207ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2208bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2209ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("bdaddr %s\n", addr);
2210ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2211ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2212ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_notify_dump(int level, struct frame *frm)
2213ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2214ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_link_key_notify *evt = frm->ptr;
2215ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char addr[18];
2216ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	int i;
2217ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2218ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2219bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
222044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf("bdaddr %s key ", addr);
2221ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	for (i = 0; i < 16; i++)
2222a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
2223a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("**");
2224a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann		else
2225a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann			printf("%2.2X", evt->link_key[i]);
222644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann	printf(" type %d\n", evt->key_type);
2227ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2228ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
222911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void max_slots_change_dump(int level, struct frame *frm)
223011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
223111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_max_slots_change *evt = frm->ptr;
223211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
223311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
223411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("handle %d slots %d\n", btohs(evt->handle), evt->max_slots);
223511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
223611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
2237c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmannstatic inline void data_buffer_overflow_dump(int level, struct frame *frm)
2238c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann{
2239c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	evt_data_buffer_overflow *evt = frm->ptr;
2240c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann
2241c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	p_indent(level, frm);
2242c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	printf("type %s\n", evt->link_type == 1 ? "ACL" : "SCO");
2243c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann}
2244c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann
2245ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_clock_offset_complete_dump(int level, struct frame *frm)
2246ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2247ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_read_clock_offset_complete *evt = frm->ptr;
2248ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2249ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2250ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d clkoffset 0x%4.4x\n",
2251ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		evt->status, btohs(evt->handle), btohs(evt->clock_offset));
2252ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2253ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
2254ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2255ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2256ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2257ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2258ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2259ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void conn_ptype_changed_dump(int level, struct frame *frm)
2260ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{
2261ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	evt_conn_ptype_changed *evt = frm->ptr;
2262ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	uint16_t ptype = btohs(evt->ptype);
2263ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	char *str;
2264ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2265ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	p_indent(level, frm);
2266ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	printf("status 0x%2.2x handle %d ptype 0x%4.4x\n",
2267120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), ptype);
2268ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
2269ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	if (evt->status > 0) {
2270ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		p_indent(level, frm);
2271ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2272ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	} else {
2273ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		str = hci_ptypetostr(ptype);
2274ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		if (str) {
2275ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			p_indent(level, frm);
2276ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			printf("Packet type: %s\n", str);
2277ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann			free(str);
2278ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		}
2279ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	}
2280ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann}
2281ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann
228211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void pscan_rep_mode_change_dump(int level, struct frame *frm)
228311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{
228411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	evt_pscan_rep_mode_change *evt = frm->ptr;
228511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	char addr[18];
228611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann
228711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	p_indent(level, frm);
2288bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
228911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	printf("bdaddr %s mode %d\n", addr, evt->pscan_rep_mode);
229011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann}
2291ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
2292f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmannstatic inline void flow_spec_complete_dump(int level, struct frame *frm)
2293f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann{
2294f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	evt_flow_spec_complete *evt = frm->ptr;
2295f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
2296f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	p_indent(level, frm);
2297f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	printf("status 0x%2.2x handle %d flags %d %s\n",
2298120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->status, btohs(evt->handle), evt->flags,
2299120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann				evt->direction == 0 ? "outgoing" : "incoming");
2300f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
2301f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	if (evt->status > 0) {
2302f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
2303f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2304f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	} else {
2305f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
2306f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Service type: %d\n", evt->qos.service_type);
2307f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
2308f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Token rate: %d\n", btohl(evt->qos.token_rate));
2309f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
2310f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth));
2311f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
2312f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Latency: %d\n", btohl(evt->qos.latency));
2313f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		p_indent(level, frm);
2314f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		printf("Delay variation: %d\n", btohl(evt->qos.delay_variation));
2315f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	}
2316f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann}
2317f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann
2318d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_with_rssi_dump(int level, struct frame *frm)
2319d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{
2320d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t num = get_u8(frm);
2321b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	char addr[18];
2322d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	int i;
2323d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2324ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	if (!num)
2325ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		return;
2326d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2327ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	if (frm->len / num == INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE) {
2328ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		for (i = 0; i < num; i++) {
2329ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			inquiry_info_with_rssi_and_pscan_mode *info = frm->ptr;
2330d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2331ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			p_indent(level, frm);
2332d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2333bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str(&info->bdaddr, addr);
2334ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
2335ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				addr, info->pscan_rep_mode, btohs(info->clock_offset),
2336ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
2337ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
2338ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
2339ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->len -= INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
2340ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		}
2341ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann	} else {
2342ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		for (i = 0; i < num; i++) {
2343ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			inquiry_info_with_rssi *info = frm->ptr;
2344ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
2345ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			p_indent(level, frm);
2346ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
2347bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann			p_ba2str(&info->bdaddr, addr);
2348ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
2349ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				addr, info->pscan_rep_mode, btohs(info->clock_offset),
2350ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann				info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
2351ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann
2352ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
2353ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann			frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE;
2354ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann		}
2355d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2356d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}
2357d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
235817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_complete_dump(int level, struct frame *frm)
235917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{
236017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	evt_read_remote_ext_features_complete *evt = frm->ptr;
236117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	int i;
236217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
236317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	p_indent(level, frm);
236417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	printf("status 0x%2.2x handle %d page %d max %d\n",
2365120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->status, btohs(evt->handle),
2366120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->page_num, evt->max_page_num);
236717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
236817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	if (evt->status > 0) {
236917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
237017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
237117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	} else {
237217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		p_indent(level, frm);
237317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("Features:");
237417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		for (i = 0; i < 8; i++)
237517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann			printf(" 0x%2.2x", evt->features[i]);
237617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		printf("\n");
237717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	}
237817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann}
237917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann
2380d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_complete_dump(int level, struct frame *frm)
2381d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{
2382d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	evt_sync_conn_complete *evt = frm->ptr;
2383d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	char addr[18];
2384d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
2385bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann	p_ba2str(&evt->bdaddr, addr);
2386d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
2387d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	p_indent(level, frm);
2388d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	printf("status 0x%2.2x handle %d bdaddr %s type %s\n",
2389120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->status, btohs(evt->handle), addr,
2390120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					evt->link_type == 0 ? "SCO" : "eSCO");
2391d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
2392d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	if (evt->status > 0) {
2393d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
2394d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2395d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	} else {
2396d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
2397d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Air mode: %s\n", airmode2str(evt->air_mode));
2398d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	}
2399d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann}
2400d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
2401d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_changed_dump(int level, struct frame *frm)
2402d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{
2403d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	evt_sync_conn_changed *evt = frm->ptr;
2404d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
2405d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	p_indent(level, frm);
2406120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
2407d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
2408d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	if (evt->status > 0) {
2409d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		p_indent(level, frm);
2410d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2411d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	}
2412d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann}
2413d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann
2414120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmannstatic inline void sniff_subrate_event_dump(int level, struct frame *frm)
2415120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann{
2416120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	evt_sniff_subrate *evt = frm->ptr;
2417120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
2418120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	p_indent(level, frm);
2419120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
2420120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
2421120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	if (evt->status > 0) {
2422120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
2423120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		printf("Error: %s\n", status2str(evt->status));
2424120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	} else {
2425120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
2426f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann		printf("max latency transmit %d receive %d\n",
2427f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann					btohs(evt->max_tx_latency),
2428f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann					btohs(evt->max_rx_latency));
2429120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
2430120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		p_indent(level, frm);
2431120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		printf("min timeout remote %d local %d\n",
2432120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(evt->min_remote_timeout),
2433120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					btohs(evt->min_local_timeout));
2434120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	}
2435120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann}
2436120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann
2437807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmannstatic inline void extended_inq_result_dump(int level, struct frame *frm)
2438807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann{
2439807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	uint8_t num = get_u8(frm);
2440807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	char addr[18];
2441807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	int i;
2442807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
2443807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	for (i = 0; i < num; i++) {
2444807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		extended_inquiry_info *info = frm->ptr;
2445807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
2446bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann		p_ba2str(&info->bdaddr, addr);
2447807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
2448807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		p_indent(level, frm);
244927eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
2450807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann			addr, info->pscan_rep_mode, btohs(info->clock_offset),
245127eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann			info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
245227eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann
245327eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
245427eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann		frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE;
245527eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann
2456e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann		ext_inquiry_response_dump(level, frm);
2457807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	}
2458807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann}
2459807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann
246059a173312fca00f7a01abca0c60713334f48d7c9Marcel Holtmannstatic inline void link_supervision_timeout_change_dump(int level, struct frame *frm)
2461d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann{
246259a173312fca00f7a01abca0c60713334f48d7c9Marcel Holtmann	evt_link_supervision_timeout_change *evt = frm->ptr;
2463d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann
2464d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	p_indent(level, frm);
2465d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann	printf("handle %d timeout %d\n",
2466d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann				btohs(evt->handle), btohs(evt->timeout));
2467d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann}
2468d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann
246965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void event_dump(int level, struct frame *frm)
247095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
2471174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	hci_event_hdr *hdr = frm->ptr;
2472be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	uint8_t event = hdr->evt;
247365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
247465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (p_filter(FILT_HCI))
247565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		return;
247665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
2477d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (event <= EVENT_NUM) {
24787b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
2479803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: %s (0x%2.2x) plen %d\n",
24807b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann					event_str[hdr->evt], hdr->evt, hdr->plen);
2481be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	} else if (hdr->evt == EVT_TESTING) {
24827b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
2483803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: Testing (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
2484be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	} else if (hdr->evt == EVT_VENDOR) {
2485a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		uint16_t manufacturer;
2486a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann
24877b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		if (parser.flags & DUMP_NOVENDOR)
24887b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann			return;
24897b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
24907b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
2491803752117135528b1adebf0fa045596e188a996dMarcel Holtmann		printf("HCI Event: Vendor (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
24927b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
2493a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		manufacturer = get_manufacturer();
2494a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann
2495a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		switch (manufacturer) {
2496a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 0:
2497e1e8e8d65fe211c133b53cf8af8883caf7936314Marcel Holtmann		case 37:
2498a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 48:
2499a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			frm->ptr += HCI_EVENT_HDR_SIZE;
2500a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			frm->len -= HCI_EVENT_HDR_SIZE;
2501a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			ericsson_dump(level + 1, frm);
2502a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann			return;
2503a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann		case 10:
2504be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			frm->ptr += HCI_EVENT_HDR_SIZE;
2505be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			frm->len -= HCI_EVENT_HDR_SIZE;
2506be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			csr_dump(level + 1, frm);
2507be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			return;
2508be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		}
25097b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	} else {
25107b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		p_indent(level, frm);
251166f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky		printf("HCI Event: code 0x%2.2x plen %d\n", hdr->evt, hdr->plen);
25127b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	}
251365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
251465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->ptr += HCI_EVENT_HDR_SIZE;
251565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	frm->len -= HCI_EVENT_HDR_SIZE;
251665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
2517be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	if (event == EVT_CMD_COMPLETE) {
2518be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		evt_cmd_complete *cc = frm->ptr;
2519be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		if (cc->opcode == cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION)) {
2520be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			read_local_version_rp *rp = frm->ptr + EVT_CMD_COMPLETE_SIZE;
2521be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann			manufacturer = rp->manufacturer;
2522be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann		}
2523be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann	}
2524be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann
252525554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann	if (event == EVT_DISCONN_COMPLETE) {
252625554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann		evt_disconn_complete *evt = frm->ptr;
252725554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann		l2cap_clear(btohs(evt->handle));
252825554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann	}
252925554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann
2530d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	if (!(parser.flags & DUMP_VERBOSE)) {
2531d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		raw_dump(level, frm);
2532d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		return;
2533d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
2534d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann
2535d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	switch (event) {
2536ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann	case EVT_LOOPBACK_COMMAND:
2537ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		command_dump(level + 1, frm);
2538ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann		break;
2539d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CMD_COMPLETE:
2540d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		cmd_complete_dump(level + 1, frm);
2541d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
2542d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CMD_STATUS:
2543d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		cmd_status_dump(level + 1, frm);
2544d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
2545afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	case EVT_HARDWARE_ERROR:
2546afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		hardware_error_dump(level + 1, frm);
2547afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		break;
2548afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann	case EVT_FLUSH_OCCURRED:
2549f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	case EVT_QOS_VIOLATION:
2550afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		handle_response_dump(level + 1, frm);
2551afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann		break;
2552d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_COMPLETE:
2553d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		status_response_dump(level + 1, frm);
2554d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
2555d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_RESULT:
2556d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inq_result_dump(level + 1, frm);
2557d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
2558d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CONN_COMPLETE:
2559d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		conn_complete_dump(level + 1, frm);
2560d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
2561d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CONN_REQUEST:
2562d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		conn_request_dump(level + 1, frm);
2563d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
2564d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_DISCONN_COMPLETE:
2565d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		disconn_complete_dump(level + 1, frm);
2566d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
2567d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_AUTH_COMPLETE:
2568d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_CHANGE_CONN_LINK_KEY_COMPLETE:
2569d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		generic_response_dump(level + 1, frm);
2570d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
257117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case EVT_MASTER_LINK_KEY_COMPLETE:
257217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		master_link_key_complete_dump(level + 1, frm);
257317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2574d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_REMOTE_NAME_REQ_COMPLETE:
2575d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		remote_name_req_complete_dump(level + 1, frm);
2576d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
2577d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_ENCRYPT_CHANGE:
2578d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		encrypt_change_dump(level + 1, frm);
2579d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
2580ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_REMOTE_FEATURES_COMPLETE:
2581ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_remote_features_complete_dump(level + 1, frm);
2582ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
2583ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_REMOTE_VERSION_COMPLETE:
2584ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_remote_version_complete_dump(level + 1, frm);
2585ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
2586ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_QOS_SETUP_COMPLETE:
258711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		qos_setup_complete_dump(level + 1, frm);
2588ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
2589ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_ROLE_CHANGE:
2590ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		role_change_dump(level + 1, frm);
2591ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
2592ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_NUM_COMP_PKTS:
2593ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		num_comp_pkts_dump(level + 1, frm);
2594ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
2595ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_MODE_CHANGE:
2596ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		mode_change_dump(level + 1, frm);
2597ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
2598b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann	case EVT_RETURN_LINK_KEYS:
2599b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann		return_link_keys_dump(level + 1, frm);
2600b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann		break;
2601ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_PIN_CODE_REQ:
2602ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_LINK_KEY_REQ:
2603ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		pin_code_req_dump(level + 1, frm);
2604ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
2605ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_LINK_KEY_NOTIFY:
2606ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		link_key_notify_dump(level + 1, frm);
2607ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
2608c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann	case EVT_DATA_BUFFER_OVERFLOW:
2609c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann		data_buffer_overflow_dump(level + 1, frm);
2610c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann		break;
261111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	case EVT_MAX_SLOTS_CHANGE:
261211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		max_slots_change_dump(level + 1, frm);
261311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		break;
2614ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_READ_CLOCK_OFFSET_COMPLETE:
2615ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		read_clock_offset_complete_dump(level + 1, frm);
2616ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
2617ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann	case EVT_CONN_PTYPE_CHANGED:
2618ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		conn_ptype_changed_dump(level + 1, frm);
2619ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann		break;
262011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann	case EVT_PSCAN_REP_MODE_CHANGE:
262111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		pscan_rep_mode_change_dump(level + 1, frm);
262211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann		break;
2623f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann	case EVT_FLOW_SPEC_COMPLETE:
2624f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		flow_spec_complete_dump(level + 1, frm);
2625f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann		break;
2626d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	case EVT_INQUIRY_RESULT_WITH_RSSI:
2627d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		inq_result_with_rssi_dump(level + 1, frm);
2628d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
262917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann	case EVT_READ_REMOTE_EXT_FEATURES_COMPLETE:
263017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		read_remote_ext_features_complete_dump(level + 1, frm);
263117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann		break;
2632d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case EVT_SYNC_CONN_COMPLETE:
2633d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		sync_conn_complete_dump(level + 1, frm);
2634d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		break;
2635d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann	case EVT_SYNC_CONN_CHANGED:
2636d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		sync_conn_changed_dump(level + 1, frm);
2637d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann		break;
2638120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann	case EVT_SNIFF_SUBRATE:
2639120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		sniff_subrate_event_dump(level + 1, frm);
2640120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann		break;
2641807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann	case EVT_EXTENDED_INQUIRY_RESULT:
2642807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		extended_inq_result_dump(level + 1, frm);
2643807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann		break;
264459a173312fca00f7a01abca0c60713334f48d7c9Marcel Holtmann	case EVT_LINK_SUPERVISION_TIMEOUT_CHANGE:
264559a173312fca00f7a01abca0c60713334f48d7c9Marcel Holtmann		link_supervision_timeout_change_dump(level + 1, frm);
2646d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann		break;
2647d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	default:
2648d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		raw_dump(level, frm);
2649d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		break;
2650d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	}
265195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
265295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
265365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void acl_dump(int level, struct frame *frm)
265495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
2655174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	hci_acl_hdr *hdr = (void *) frm->ptr;
26560d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t handle = btohs(hdr->handle);
26570d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t dlen = btohs(hdr->dlen);
26580d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint8_t flags = acl_flags(handle);
265965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
266065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (!p_filter(FILT_HCI)) {
2661ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
2662d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("ACL data: handle %d flags 0x%2.2x dlen %d\n",
266365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky			acl_handle(handle), flags, dlen);
266465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		level++;
266565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	}
2666e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
2667e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann	frm->ptr += HCI_ACL_HDR_SIZE;
2668e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann	frm->len -= HCI_ACL_HDR_SIZE;
2669f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky	frm->flags  = flags;
2670f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky	frm->handle = acl_handle(handle);
267165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
267265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	if (parser.filter & ~FILT_HCI)
267365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		l2cap_dump(level, frm);
267465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky	else
267565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		raw_dump(level, frm);
267695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
267795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
2678d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyanskystatic inline void sco_dump(int level, struct frame *frm)
2679d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky{
2680d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	hci_sco_hdr *hdr = (void *) frm->ptr;
26810d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann	uint16_t handle = btohs(hdr->handle);
26826d3f2066a10cd7d0812fdf97635f1bd77f003493Marcel Holtmann	int len;
2683d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
26849e216633a0f902b7d069c08939c67e03dd4ee516Marcel Holtmann	if (frm->audio_fd > fileno(stderr))
26856d3f2066a10cd7d0812fdf97635f1bd77f003493Marcel Holtmann		len = write(frm->audio_fd, frm->ptr + HCI_SCO_HDR_SIZE, hdr->dlen);
26860033462dddb3b4adf56ea28680c1f135f25a4387Marcel Holtmann
2687d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	if (!p_filter(FILT_SCO)) {
2688ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
2689d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann		printf("SCO data: handle %d dlen %d\n",
2690120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann					acl_handle(handle), hdr->dlen);
2691d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		level++;
2692d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
2693d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		frm->ptr += HCI_SCO_HDR_SIZE;
2694d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		frm->len -= HCI_SCO_HDR_SIZE;
2695d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		raw_dump(level, frm);
2696d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	}
2697d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky}
2698d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky
2699b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmannstatic inline void vendor_dump(int level, struct frame *frm)
2700b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann{
2701b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	if (p_filter(FILT_HCI))
2702b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		return;
2703b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann
270438acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann	if (frm->dev_id == HCI_DEV_NONE) {
2705a4d60061ed080704f1e1c076d59ac0b03aaa0fd1Marcel Holtmann		uint16_t device = btohs(htons(get_u16(frm)));
2706ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann		uint16_t proto = btohs(htons(get_u16(frm)));
270738acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		uint16_t type = btohs(htons(get_u16(frm)));
270838acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		uint16_t plen = btohs(htons(get_u16(frm)));
270938acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
271038acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		p_indent(level, frm);
271138acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
2712ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann		printf("System %s: device hci%d proto 0x%2.2x type 0x%2.2x plen %d\n",
2713ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann			frm->in ? "event" : "command", device, proto, type, plen);
271438acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
271538acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		raw_dump(level, frm);
271638acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann		return;
271738acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann	}
271838acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann
27197b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann	if (parser.flags & DUMP_NOVENDOR)
27207b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann		return;
27217b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann
2722b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	if (get_manufacturer() == 12) {
2723b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		bpa_dump(level, frm);
2724b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann		return;
2725b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann	}
2726b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann
2727b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	p_indent(level, frm);
2728b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	printf("Vendor data: len %d\n", frm->len);
2729b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	raw_dump(level, frm);
2730b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann}
2731b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann
2732174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyanskyvoid hci_dump(int level, struct frame *frm)
273395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{
2734d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann	uint8_t type = *(uint8_t *)frm->ptr;
273595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
2736174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky	frm->ptr++; frm->len--;
2737e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
273895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	switch (type) {
273995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_COMMAND_PKT:
274065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		command_dump(level, frm);
274195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
274295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
274395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_EVENT_PKT:
274465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		event_dump(level, frm);
274595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
274695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
274795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	case HCI_ACLDATA_PKT:
274865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		acl_dump(level, frm);
274995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
275095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky
2751d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky	case HCI_SCODATA_PKT:
2752d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		sco_dump(level, frm);
2753d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky		break;
2754e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann
2755b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann	case HCI_VENDOR_PKT:
2756b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann		vendor_dump(level, frm);
2757b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann		break;
2758b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann
275995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	default:
276065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		if (p_filter(FILT_HCI))
276165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky			break;
276265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky
2763ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky		p_indent(level, frm);
2764174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky		printf("Unknown: type 0x%2.2x len %d\n", type, frm->len);
276565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky		raw_dump(level, frm);
276695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky		break;
276795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky	}
276895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky}
2769