hci.c revision 51c927b7eb7f8f78d31d3e8cfe218649c29eb44d
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> 6d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann * Copyright (C) 2003-2005 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 5313acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define EVENT_NUM 47 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", 1011a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Unknown", 1021a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Extended Inquiry Result", 10366f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky}; 1042bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 10513acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define CMD_LINKCTL_NUM 41 10613acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_linkctl_str[CMD_LINKCTL_NUM + 1] = { 1072bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Unknown", 1082bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Inquiry", 1092bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Inquiry Cancel", 1102bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Periodic Inquiry Mode", 1112bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Exit Periodic Inquiry Mode", 1122bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Create Connection", 1132bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Disconnect", 1142bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Add SCO Connection", 115328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Create Connection Cancel", 1162bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Accept Connection Request", 1172bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Reject Connection Request", 1182bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Link Key Request Reply", 1192bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Link Key Request Negative Reply", 1202bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "PIN Code Request Reply", 1212bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "PIN Code Request Negative Reply", 1222bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Change Connection Packet Type", 123f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1242bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Authentication Requested", 125f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1262bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Set Connection Encryption", 127f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1282bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Change Connection Link Key", 129f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1302bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Master Link Key", 131f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1322bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Remote Name Request", 133328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Remote Name Request Cancel", 1342bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Remote Supported Features", 135328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Remote Extended Features", 1362bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Remote Version Information", 137f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 138328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Clock Offset", 139328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read LMP Handle" 140328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 141328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 142328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 143328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 144328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 145328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 146328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 147328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Setup Synchronous Connection", 148328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Accept Synchronous Connection", 1491a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Reject Synchronous Connection", 1502bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky}; 1512bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 15213acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define CMD_LINKPOL_NUM 16 15313acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_linkpol_str[CMD_LINKPOL_NUM + 1] = { 1542bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Unknown", 1552bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Hold Mode", 156f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1572bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Sniff Mode", 1582bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Exit Sniff Mode", 159328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Park State", 160328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Exit Park State", 1612bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "QoS Setup", 162f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1632bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Role Discovery", 164f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1652bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Switch Role", 1662bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Link Policy Settings", 167328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Link Policy Settings", 168328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Default Link Policy Settings", 169328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Default Link Policy Settings", 1701a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Flow Specification", 1712bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky}; 1722bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 17313acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define CMD_HOSTCTL_NUM 82 17413acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_hostctl_str[CMD_HOSTCTL_NUM + 1] = { 1752bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Unknown", 1762bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Set Event Mask", 177f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1782bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Reset", 179f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1802bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Set Event Filter", 181f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 182f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1832bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Flush", 1842bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read PIN Type ", 1852bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write PIN Type", 1862bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Create New Unit Key", 187f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1882bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Stored Link Key", 189f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 190f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 191f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1922bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Stored Link Key", 1932bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Delete Stored Link Key", 194328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Local Name", 1952bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Local Name", 1962bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Connection Accept Timeout", 1972bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Connection Accept Timeout", 1982bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Page Timeout", 1992bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Page Timeout", 2002bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Scan Enable", 2012bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Scan Enable", 2022bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Page Scan Activity", 2032bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Page Scan Activity", 2042bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Inquiry Scan Activity", 2052bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Inquiry Scan Activity", 2062bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Authentication Enable", 2072bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Authentication Enable", 2082bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Encryption Mode", 2092bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Encryption Mode", 2102bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Class of Device", 2112bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Class of Device", 2122bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Voice Setting", 2132bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Voice Setting", 2142bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Automatic Flush Timeout", 2152bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Automatic Flush Timeout", 2162bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Num Broadcast Retransmissions", 2172bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Num Broadcast Retransmissions", 2182bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Hold Mode Activity ", 2192bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Hold Mode Activity", 2202bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Transmit Power Level", 221328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Synchronous Flow Control Enable", 222328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Synchronous Flow Control Enable", 223f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2242bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Set Host Controller To Host Flow Control", 225f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2262bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Host Buffer Size", 227f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2282bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Host Number of Completed Packets", 2292bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Link Supervision Timeout", 2302bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Link Supervision Timeout", 2312bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Number of Supported IAC", 2322bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Current IAC LAP", 2332bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Current IAC LAP", 2342bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Page Scan Period Mode", 2352bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Page Scan Period Mode", 2362bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Page Scan Mode", 237328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Page Scan Mode", 238328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Set AFH Host Channel Classification", 239328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 240328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 241328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Inquiry Scan Type", 242328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Inquiry Scan Type", 243328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Inquiry Mode", 244328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Inquiry Mode", 245328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Page Scan Type", 246328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Page Scan Type", 247328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read AFH Channel Assessment Mode", 2481a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Write AFH Channel Assessment Mode", 2491a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Unknown", 25013acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 25113acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 25213acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 25313acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 25413acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 25513acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 2561a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Read Extended Inquiry Response", 2571a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Write Extended Inquiry Response", 2582bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky}; 2592bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 26013acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define CMD_INFO_NUM 9 26113acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_info_str[CMD_INFO_NUM + 1] = { 2622bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Unknown", 2632bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Local Version Information", 264328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Local Supported Commands", 2652bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Local Supported Features", 266328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Local Extended Features", 2672bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Buffer Size", 268f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2692bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Country Code", 270f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2711a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Read BD ADDR", 2722bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky}; 2732bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 27413acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define CMD_STATUS_NUM 7 27513acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_status_str[CMD_STATUS_NUM + 1] = { 2762bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Unknown", 2772bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Failed Contact Counter", 2782bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Reset Failed Contact Counter", 279328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Link Quality", 280f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 281328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read RSSI", 282328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read AFH Channel Map", 2831a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Read Clock", 2842bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky}; 28566f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky 28613acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define ERROR_CODE_NUM 53 28713acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *error_code_str[ERROR_CODE_NUM + 1] = { 288d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Success", 289d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unknown HCI Command", 290d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unknown Connection Identifier", 291d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Hardware Failure", 292d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Page Timeout", 293d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Authentication Failure", 294d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "PIN or Key Missing", 295d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Memory Capacity Exceeded", 296d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Timeout", 297d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Limit Exceeded", 298d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Synchronous Connection to a Device Exceeded", 299d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "ACL Connection Already Exists", 300d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Command Disallowed", 301d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Rejected due to Limited Resources", 302d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Rejected due to Security Reasons", 303d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Rejected due to Unacceptable BD_ADDR", 304d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Accept Timeout Exceeded", 305d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unsupported Feature or Parameter Value", 306d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Invalid HCI Command Parameters", 30760864ce9e77ec159d0914fe8d938565493f08eebMarcel Holtmann "Remote User Terminated Connection", 308d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Remote Device Terminated Connection due to Low Resources", 309d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Remote Device Terminated Connection due to Power Off", 310d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Terminated by Local Host", 311fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann "Repeated Attempts", 312d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Pairing Not Allowed", 313d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unknown LMP PDU", 314d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unsupported Remote Feature / Unsupported LMP Feature", 315d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "SCO Offset Rejected", 316d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "SCO Interval Rejected", 317d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "SCO Air Mode Rejected", 318d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Invalid LMP Parameters", 319d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unspecified Error", 320d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unsupported LMP Parameter Value", 321d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Role Change Not Allowed", 322d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "LMP Response Timeout", 323d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "LMP Error Transaction Collision", 324d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "LMP PDU Not Allowed", 325d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Encryption Mode Not Acceptable", 326d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Link Key Can Not be Changed", 327d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Requested QoS Not Supported", 328d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Instant Passed", 329fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann "Pairing with Unit Key Not Supported", 330d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Different Transaction Collision", 331d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Reserved", 332d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "QoS Unacceptable Parameter", 333d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "QoS Rejected", 334d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Channel Classification Not Supported", 335d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Insufficient Security", 336d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Parameter out of Mandatory Range", 337d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Reserved", 338d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Role Switch Pending", 339d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Reserved", 340d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Reserved Slot Violation", 3411a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Role Switch Failed", 342d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}; 343d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 344d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic char *status2str(uint8_t status) 345d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 346d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann char *str; 347d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 348d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (status <= ERROR_CODE_NUM) 349d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann str = error_code_str[status]; 350d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann else 351d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann str = "Unknown"; 352d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 353d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann return str; 354d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 355d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 356d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic char *opcode2str(uint16_t opcode) 35795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{ 3580d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint16_t ogf = cmd_opcode_ogf(opcode); 3590d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint16_t ocf = cmd_opcode_ocf(opcode); 3602bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky char *cmd; 36195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 3622bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky switch (ogf) { 3632bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky case OGF_INFO_PARAM: 3642bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky if (ocf <= CMD_INFO_NUM) 365d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd = cmd_info_str[ocf]; 3662bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky else 3672bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 3682bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 3692bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 3702bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky case OGF_HOST_CTL: 3712bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky if (ocf <= CMD_HOSTCTL_NUM) 372d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd = cmd_hostctl_str[ocf]; 3732bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky else 3742bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 3752bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 3762bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 3772bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky case OGF_LINK_CTL: 3782bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky if (ocf <= CMD_LINKCTL_NUM) 379d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd = cmd_linkctl_str[ocf]; 3802bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky else 3812bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 3822bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 3832bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 3842bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky case OGF_LINK_POLICY: 3852bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky if (ocf <= CMD_LINKPOL_NUM) 386d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd = cmd_linkpol_str[ocf]; 3872bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky else 3882bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 3892bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 3902bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 3912bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky case OGF_STATUS_PARAM: 3922bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky if (ocf <= CMD_STATUS_NUM) 393d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd = cmd_status_str[ocf]; 3942bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky else 3952bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 3962bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 3972bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 398cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann case OGF_TESTING_CMD: 399cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann cmd = "Testing"; 400cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann break; 401cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann 402cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann case OGF_VENDOR_CMD: 403cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann cmd = "Vendor"; 404cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann break; 405cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann 4062bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky default: 4072bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 4082bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 4092bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky } 4102bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 411d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann return cmd; 412d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 413d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 414ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic char *role2str(uint8_t role) 415ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 416ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (role) { 417ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x00: 418ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Master"; 419ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x01: 420ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Slave"; 421ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann default: 422ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Unknown"; 423ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 424ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 425ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 426ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic char *mode2str(uint8_t mode) 427ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 428ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (mode) { 429ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x00: 430ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Active"; 431ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x01: 432ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Hold"; 433ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x02: 434ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Sniff"; 435ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x03: 436ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Park"; 437ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann default: 438ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Unknown"; 439ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 440ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 441ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 442d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic char *airmode2str(uint8_t mode) 443d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{ 444d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann switch (mode) { 445d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case 0x00: 446d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann return "u-law log"; 447d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case 0x01: 448d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann return "A-law log"; 449d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case 0x02: 450d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann return "CVSD"; 451d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case 0x04: 452d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann return "Transparent data"; 453d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann default: 454d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann return "Reserved"; 455d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann } 456d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann} 457d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 458e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmannstatic inline void ext_inquiry_response_dump(int level, struct frame *frm) 459e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann{ 460e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann void *ptr = frm->ptr; 461e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann uint32_t len = frm->len; 462e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann uint8_t type, length; 463e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann char *str; 464e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann int i; 465e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 466e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann length = get_u8(frm); 467e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 468e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann while (length > 0) { 469e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann type = get_u8(frm); 470e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann length--; 471e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 472e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann switch (type) { 473e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann case 0x08: 474e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann case 0x09: 475e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann str = malloc(length + 1); 476e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann if (str) { 477ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann snprintf(str, length + 1, "%s", (char *) frm->ptr); 478e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann for (i = 0; i < length; i++) 479e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann if (!isprint(str[i])) 480e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann str[i] = '.'; 481e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann p_indent(level, frm); 482e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann printf("%s local name: \'%s\'\n", 483e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann type == 0x08 ? "Shortened" : "Complete", str); 484e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann free(str); 485e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann } 486e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann break; 487e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 488e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann default: 489e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann p_indent(level, frm); 490e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann printf("Unknown type 0x%02x with %d bytes data\n", 491e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann type, length); 492e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann break; 493e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann } 494e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 495e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann frm->ptr += length; 496e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann frm->len -= length; 497e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 498e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann length = get_u8(frm); 499e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann } 500e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 501e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann frm->ptr = ptr + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE); 502e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann frm->len = len + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE); 503e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann} 504e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 505ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void generic_command_dump(int level, struct frame *frm) 506ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 507ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t handle = btohs(htons(get_u16(frm))); 508ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 509ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 510ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("handle %d\n", handle); 511ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 512ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann raw_dump(level, frm); 513ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 514ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 51590480219be366c65e68ae8612de7a361027e751aMarcel Holtmannstatic inline void bdaddr_command_dump(int level, struct frame *frm) 51690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann{ 51790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann bdaddr_t *bdaddr = frm->ptr; 51890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann char addr[18]; 51990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann 52090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann frm->ptr += sizeof(bdaddr_t); 52190480219be366c65e68ae8612de7a361027e751aMarcel Holtmann frm->len -= sizeof(bdaddr_t); 52290480219be366c65e68ae8612de7a361027e751aMarcel Holtmann 52390480219be366c65e68ae8612de7a361027e751aMarcel Holtmann p_indent(level, frm); 52490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann ba2str(bdaddr, addr); 525e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann printf("bdaddr %s\n", addr); 52690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann 52790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann raw_dump(level, frm); 52890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann} 52990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann 530ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void inquiry_dump(int level, struct frame *frm) 531ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 532ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann inquiry_cp *cp = frm->ptr; 533ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 534ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 535ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("lap 0x%2.2x%2.2x%2.2x len %d num %d\n", 536ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp); 537ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 538ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 539ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void periodic_inquiry_dump(int level, struct frame *frm) 540ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 541ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann periodic_inquiry_cp *cp = frm->ptr; 542ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 543ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 544ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("max %d min %d lap 0x%2.2x%2.2x%2.2x len %d num %d\n", 545ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann btohs(cp->max_period), btohs(cp->min_period), 546ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp); 547ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 548ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 549ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void create_conn_dump(int level, struct frame *frm) 550ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 551ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann create_conn_cp *cp = frm->ptr; 552ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t ptype = btohs(cp->pkt_type); 553ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t clkoffset = btohs(cp->clock_offset); 554ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18], *str; 555ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 556ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 557ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann ba2str(&cp->bdaddr, addr); 558ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s ptype 0x%4.4x rswitch 0x%2.2x clkoffset 0x%4.4x%s\n", 559ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann addr, ptype, cp->role_switch, 560ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : ""); 561ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 562ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann str = hci_ptypetostr(ptype); 563ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (str) { 564ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 565ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Packet type: %s\n", str); 566ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann free(str); 567ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 568ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 569ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 570ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void disconnect_dump(int level, struct frame *frm) 571ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 572ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann disconnect_cp *cp = frm->ptr; 573ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 574ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 575ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("handle %d reason 0x%2.2x\n", btohs(cp->handle), cp->reason); 576ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 577ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 578ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Reason: %s\n", status2str(cp->reason)); 579ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 580ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 581ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void add_sco_dump(int level, struct frame *frm) 582ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 583ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann add_sco_cp *cp = frm->ptr; 584ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t ptype = btohs(cp->pkt_type); 585ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char *str; 586ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 587ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 588ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("handle %d ptype 0x%4.4x\n", btohs(cp->handle), ptype); 589ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 590ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann str = hci_ptypetostr(ptype); 591ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (str) { 592ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 593ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Packet type: %s\n", str); 594ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann free(str); 595ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 596ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 597ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 598ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void accept_conn_req_dump(int level, struct frame *frm) 599ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 600ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann accept_conn_req_cp *cp = frm->ptr; 601ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 602ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 603ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 604ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann ba2str(&cp->bdaddr, addr); 605ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s role 0x%2.2x\n", addr, cp->role); 606ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 607ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 608ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Role: %s\n", role2str(cp->role)); 609ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 610ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 611ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void reject_conn_req_dump(int level, struct frame *frm) 612ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 613ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann reject_conn_req_cp *cp = frm->ptr; 614ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 615ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 616ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 617ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann ba2str(&cp->bdaddr, addr); 618ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s reason 0x%2.2x\n", addr, cp->reason); 619ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 620ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 621ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Reason: %s\n", status2str(cp->reason)); 622ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 623ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 624ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_reply_dump(int level, struct frame *frm) 625ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 626ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann pin_code_reply_cp *cp = frm->ptr; 627ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18], pin[17]; 628ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 629ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 630ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann ba2str(&cp->bdaddr, addr); 631ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann memset(pin, 0, sizeof(pin)); 632ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann memcpy(pin, cp->pin_code, cp->pin_len); 633ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s len %d pin \'%s\'\n", addr, cp->pin_len, pin); 634ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 635ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 636ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_reply_dump(int level, struct frame *frm) 637ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 638ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann link_key_reply_cp *cp = frm->ptr; 639ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 640ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 641ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 642ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 643ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann ba2str(&cp->bdaddr, addr); 64444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("bdaddr %s key ", addr); 645ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 16; i++) 64644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("%2.2X", cp->link_key[i]); 647ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("\n"); 648ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 649ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 650ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_neg_reply_dump(int level, struct frame *frm) 651ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 652ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann bdaddr_t *bdaddr = frm->ptr; 653ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 654ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 655ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 656ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann ba2str(bdaddr, addr); 657ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s\n", addr); 658ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 659ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 660ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void set_conn_encrypt_dump(int level, struct frame *frm) 661ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 662ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann set_conn_encrypt_cp *cp = frm->ptr; 663ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 664ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 665ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("handle %d encrypt 0x%2.2x\n", btohs(cp->handle), cp->encrypt); 666ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 667ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 668ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void remote_name_req_dump(int level, struct frame *frm) 669ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 670ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann remote_name_req_cp *cp = frm->ptr; 671ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t clkoffset = btohs(cp->clock_offset); 672ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 673ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 674ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 675ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann ba2str(&cp->bdaddr, addr); 67672e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann printf("bdaddr %s mode %d clkoffset 0x%4.4x%s\n", 67772e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann addr, cp->pscan_rep_mode, 67872e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : ""); 679ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 680ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 68117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_dump(int level, struct frame *frm) 68217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 68317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann master_link_key_cp *cp = frm->ptr; 68417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 68517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 68617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("flag %d\n", cp->key_flag); 68717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 68817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 68917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_dump(int level, struct frame *frm) 69017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 69117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_remote_ext_features_cp *cp = frm->ptr; 69217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 693e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann p_indent(level, frm); 694e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann printf("handle %d page %d\n", btohs(cp->handle), cp->page_num); 69517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 69617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 6979ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void hold_mode_dump(int level, struct frame *frm) 6989ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{ 6999ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann hold_mode_cp *cp = frm->ptr; 7009ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann 7019ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann p_indent(level, frm); 7029ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann printf("handle %d max %d min %d\n", btohs(cp->handle), 7039ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann btohs(cp->max_interval), btohs(cp->min_interval)); 7049ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann} 7059ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann 7069ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void sniff_mode_dump(int level, struct frame *frm) 7079ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{ 7089ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann sniff_mode_cp *cp = frm->ptr; 7099ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann 7109ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann p_indent(level, frm); 7119ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann printf("handle %d max %d min %d attempt %d timeout %d\n", 7129ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann btohs(cp->handle), btohs(cp->max_interval), 7139ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann btohs(cp->min_interval), btohs(cp->attempt), btohs(cp->timeout)); 7149ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann} 7159ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann 716ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_link_policy_dump(int level, struct frame *frm) 717ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 718ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_link_policy_cp *cp = frm->ptr; 719ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t policy = btohs(cp->policy); 720ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char *str; 721ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 722ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 723ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("handle %d policy 0x%2.2x\n", btohs(cp->handle), policy); 724ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 725ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann str = hci_lptostr(policy); 726ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (str) { 727ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 728ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Link policy: %s\n", str); 729ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann free(str); 730ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 731ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 732ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 73344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_mask_dump(int level, struct frame *frm) 73444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 73544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann set_event_mask_cp *cp = frm->ptr; 73644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann int i; 73744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 73844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 73944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Mask: 0x"); 74044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann for (i = 0; i < 8; i++) 74144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("%2.2x", cp->mask[i]); 74244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("\n"); 74344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 74444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 74544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_flt_dump(int level, struct frame *frm) 74644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 74744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann set_event_flt_cp *cp = frm->ptr; 74844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 74944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 75044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("type %d condition %d\n", cp->flt_type, cp->cond_type); 75144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 75244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann switch (cp->flt_type) { 75344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case FLT_CLEAR_ALL: 75451c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann p_indent(level, frm); 75544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Clear all filters\n"); 75644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann break; 75744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case FLT_INQ_RESULT: 75851c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann p_indent(level, frm); 75944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Inquiry result"); 76044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann switch (cp->cond_type) { 76144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case INQ_RESULT_RETURN_ALL: 76244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case INQ_RESULT_RETURN_CLASS: 76344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case INQ_RESULT_RETURN_BDADDR: 76444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann default: 76544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("\n"); 76644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann break; 76744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 76844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann break; 76944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case FLT_CONN_SETUP: 77051c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann p_indent(level, frm); 77144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Connection setup"); 77244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann switch (cp->cond_type) { 77344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case CONN_SETUP_ALLOW_ALL: 77444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case CONN_SETUP_ALLOW_CLASS: 77544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case CONN_SETUP_ALLOW_BDADDR: 77644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann default: 77744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("\n"); 77844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann break; 77944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 78044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann break; 78144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 78244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 78344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 78444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_pin_type_dump(int level, struct frame *frm) 78544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 78644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann write_pin_type_cp *cp = frm->ptr; 78744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 78844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 78944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("type %d\n", cp->pin_type); 79044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 79144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 79244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void request_stored_link_key_dump(int level, struct frame *frm) 79344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 79444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann read_stored_link_key_cp *cp = frm->ptr; 79544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann char addr[18]; 79644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 79744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 79844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann ba2str(&cp->bdaddr, addr); 79944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("bdaddr %s all %d\n", addr, cp->read_all); 80044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 80144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 80244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void return_link_keys_dump(int level, struct frame *frm) 80344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 80444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann uint8_t num = get_u8(frm); 80544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann uint8_t key[16]; 80644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann char addr[18]; 80744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann int i, n; 80844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 80944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann for (n = 0; n < num; n++) { 81044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann ba2str(frm->ptr, addr); 81144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann memcpy(key, frm->ptr + 6, 16); 81244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 81344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 81444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("bdaddr %s key ", addr); 81544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann for (i = 0; i < 16; i++) 81644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("%2.2X", key[i]); 81744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("\n"); 81844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 81944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann frm->ptr += 2; 82044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann frm->len -= 2; 82144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 82244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 82344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 824ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void change_local_name_dump(int level, struct frame *frm) 825ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 826ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann change_local_name_cp *cp = frm->ptr; 827ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char name[249]; 828ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 829ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 830ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann memset(name, 0, sizeof(name)); 831ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 248 && cp->name[i]; i++) 832ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (isprint(cp->name[i])) 833ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann name[i] = cp->name[i]; 834ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann else 835ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann name[i] = '.'; 836ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 837ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 838ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("name \'%s\'\n", name); 839ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 840ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 841ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_class_of_dev_dump(int level, struct frame *frm) 842ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 843ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_class_of_dev_cp *cp = frm->ptr; 844ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 845ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 846ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("class 0x%2.2x%2.2x%2.2x\n", 847ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann cp->dev_class[2], cp->dev_class[1], cp->dev_class[0]); 848ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 849ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 850ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_voice_setting_dump(int level, struct frame *frm) 851ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 852ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_voice_setting_cp *cp = frm->ptr; 853ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 854ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 855ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("voice setting 0x%4.4x\n", btohs(cp->voice_setting)); 856ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 857ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 858fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void write_current_iac_lap_dump(int level, struct frame *frm) 859fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{ 860fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann write_current_iac_lap_cp *cp = frm->ptr; 861fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann int i; 862fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann 863fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann for (i = 0; i < cp->num_current_iac; i++) { 864fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann p_indent(level, frm); 865fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf("IAC 0x%2.2x%2.2x%2.2x", cp->lap[i][2], cp->lap[i][1], cp->lap[i][0]); 866fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann if (cp->lap[i][2] == 0x9e && cp->lap[i][1] == 0x8b) { 867fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann switch (cp->lap[i][0]) { 868fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case 0x00: 869fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf(" (Limited Inquiry Access Code)"); 870fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann break; 871fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case 0x33: 872fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf(" (General Inquiry Access Code)"); 873fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann break; 874fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 875fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 876fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf("\n"); 877fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 878fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann} 879fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann 88069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void write_scan_enable_dump(int level, struct frame *frm) 88169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{ 88269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann uint8_t enable = get_u8(frm); 88369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann 88469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann p_indent(level, frm); 88569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann printf("enable %d\n", enable); 88669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann} 88769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann 888d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_timeout_dump(int level, struct frame *frm) 889d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{ 890d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann write_page_timeout_cp *cp = frm->ptr; 891d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 892d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 893d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("timeout %d\n", btohs(cp->timeout)); 894d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann} 895d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 896d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_activity_dump(int level, struct frame *frm) 897d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{ 898d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann write_page_activity_cp *cp = frm->ptr; 899d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 900d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 901d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("interval %d window %d\n", btohs(cp->interval), btohs(cp->window)); 902d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann} 903d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 904a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void write_inquiry_scan_type_dump(int level, struct frame *frm) 905a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{ 906a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann write_inquiry_scan_type_cp *cp = frm->ptr; 907a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann 908a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann p_indent(level, frm); 909a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann printf("type %d\n", cp->type); 910a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann} 911a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann 912f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmannstatic inline void write_inquiry_mode_dump(int level, struct frame *frm) 913f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann{ 914f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann write_inquiry_mode_cp *cp = frm->ptr; 915f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann 916f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann p_indent(level, frm); 917f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann printf("mode %d\n", cp->mode); 918f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann} 919f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann 9206eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void write_link_supervision_timeout_dump(int level, struct frame *frm) 9216eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{ 9226eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann write_link_supervision_timeout_cp *cp = frm->ptr; 9236eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 9246eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 9256eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("handle %d timeout %d\n", 9266eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann btohs(cp->handle), btohs(cp->link_sup_to)); 9276eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann} 9286eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 9291a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void write_ext_inquiry_response_dump(int level, struct frame *frm) 9301a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{ 9311a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann write_ext_inquiry_response_cp *cp = frm->ptr; 9321a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann 9331a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann p_indent(level, frm); 9341a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann printf("fec 0x%2.2x\n", cp->fec); 935f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann 936f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann frm->ptr++; 937f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann frm->len--; 938f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann 939e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann ext_inquiry_response_dump(level, frm); 9401a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann} 9411a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann 9426eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void request_transmit_power_level_dump(int level, struct frame *frm) 9436eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{ 9446eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_transmit_power_level_cp *cp = frm->ptr; 9456eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 9466eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 9476eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("handle %d type %d (%s)\n", 9486eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann btohs(cp->handle), cp->type, 9496eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann cp->type ? "maximum" : "current"); 9506eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann} 9516eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 95217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void request_local_ext_features_dump(int level, struct frame *frm) 95317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 95417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_local_ext_features_cp *cp = frm->ptr; 95517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 95617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 95717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("page %d\n", cp->page_num); 95817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 95917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 960f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void request_clock_dump(int level, struct frame *frm) 961f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{ 962f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_clock_cp *cp = frm->ptr; 963f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 964f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 965f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("handle %d which %d (%s)\n", 966f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann btohs(cp->handle), cp->which_clock, 967f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann cp->which_clock ? "piconet" : "local"); 968f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann} 969f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 970d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void command_dump(int level, struct frame *frm) 971d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 972d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann hci_command_hdr *hdr = frm->ptr; 973d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t opcode = btohs(hdr->opcode); 974d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t ogf = cmd_opcode_ogf(opcode); 975d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t ocf = cmd_opcode_ocf(opcode); 976d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 977d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (p_filter(FILT_HCI)) 978d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann return; 979d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 980ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky p_indent(level, frm); 98165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 982803752117135528b1adebf0fa045596e188a996dMarcel Holtmann printf("HCI Command: %s (0x%2.2x|0x%4.4x) plen %d\n", 983d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann opcode2str(opcode), ogf, ocf, hdr->plen); 98465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 98565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky frm->ptr += HCI_COMMAND_HDR_SIZE; 98665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky frm->len -= HCI_COMMAND_HDR_SIZE; 98765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 988be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann if (ogf == OGF_VENDOR_CMD && ocf == 0 && get_manufacturer() == 10) { 989be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann csr_dump(level + 1, frm); 990be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann return; 991be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } 992be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann 9934f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann if (!(parser.flags & DUMP_VERBOSE)) { 9944f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann raw_dump(level, frm); 9954f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann return; 9964f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann } 9974f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann 998ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ogf) { 999ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OGF_LINK_CTL: 1000ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ocf) { 1001ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_INQUIRY: 1002ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann inquiry_dump(level + 1, frm); 1003ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1004ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_PERIODIC_INQUIRY: 1005ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann periodic_inquiry_dump(level + 1, frm); 1006ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1007ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_INQUIRY_CANCEL: 1008ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_EXIT_PERIODIC_INQUIRY: 1009ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1010ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_CREATE_CONN: 1011ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann create_conn_dump(level + 1, frm); 1012ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1013ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_DISCONNECT: 1014ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann disconnect_dump(level + 1, frm); 1015ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 101690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_CREATE_CONN_CANCEL: 101790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_REMOTE_NAME_REQ_CANCEL: 101890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_ACCEPT_SYNC_CONN_REQ: 101990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann bdaddr_command_dump(level + 1, frm); 102090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann return; 1021ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_ADD_SCO: 1022ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_SET_CONN_PTYPE: 1023ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann add_sco_dump(level + 1, frm); 1024acc2322e0bed89e8ada2564359a1a6d293c9d514Marcel Holtmann return; 1025ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_ACCEPT_CONN_REQ: 1026ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann accept_conn_req_dump(level + 1, frm); 1027ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1028ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_REJECT_CONN_REQ: 102990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_REJECT_SYNC_CONN_REQ: 1030ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann reject_conn_req_dump(level + 1, frm); 1031ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1032ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_PIN_CODE_REPLY: 1033ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann pin_code_reply_dump(level + 1, frm); 1034ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1035ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_LINK_KEY_REPLY: 1036ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann link_key_reply_dump(level + 1, frm); 1037ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1038ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_PIN_CODE_NEG_REPLY: 1039ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_LINK_KEY_NEG_REPLY: 1040ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann pin_code_neg_reply_dump(level + 1, frm); 1041ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1042ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_SET_CONN_ENCRYPT: 1043ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann set_conn_encrypt_dump(level + 1, frm); 1044ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1045ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_AUTH_REQUESTED: 1046ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_CHANGE_CONN_LINK_KEY: 1047ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_REMOTE_FEATURES: 1048ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_REMOTE_VERSION: 1049ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_CLOCK_OFFSET: 105090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_READ_LMP_HANDLE: 105190480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_SETUP_SYNC_CONN: 1052ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann generic_command_dump(level + 1, frm); 1053ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 105417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_MASTER_LINK_KEY: 105517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann master_link_key_dump(level + 1, frm); 105617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 105717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_READ_REMOTE_EXT_FEATURES: 105817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_remote_ext_features_dump(level + 1, frm); 105917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 1060ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_REMOTE_NAME_REQ: 1061ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann remote_name_req_dump(level + 1, frm); 1062ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1063ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1064ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann break; 1065ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1066ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OGF_LINK_POLICY: 1067ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ocf) { 10689ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann case OCF_HOLD_MODE: 10699ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann case OCF_PARK_MODE: 10709ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann hold_mode_dump(level + 1, frm); 10719ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann return; 10729ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann case OCF_SNIFF_MODE: 10739ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann sniff_mode_dump(level + 1, frm); 10749ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann return; 1075ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_EXIT_SNIFF_MODE: 1076ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_EXIT_PARK_MODE: 1077ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_ROLE_DISCOVERY: 1078ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_LINK_POLICY: 1079ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann generic_command_dump(level + 1, frm); 1080ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1081ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_SWITCH_ROLE: 1082ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann accept_conn_req_dump(level + 1, frm); 1083ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1084ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_WRITE_LINK_POLICY: 1085ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_link_policy_dump(level + 1, frm); 1086ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1087ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1088ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann break; 1089ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1090ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OGF_HOST_CTL: 1091ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ocf) { 109244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_RESET: 109344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_CREATE_NEW_UNIT_KEY: 109444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 109544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_SET_EVENT_MASK: 109644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann set_event_mask_dump(level + 1, frm); 109744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 109844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_SET_EVENT_FLT: 109944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann set_event_flt_dump(level + 1, frm); 110044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 110144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_WRITE_PIN_TYPE: 110244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann write_pin_type_dump(level + 1, frm); 110344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 110444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_READ_STORED_LINK_KEY: 110544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_DELETE_STORED_LINK_KEY: 110644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann request_stored_link_key_dump(level + 1, frm); 110744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 110844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_WRITE_STORED_LINK_KEY: 110944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return_link_keys_dump(level + 1, frm); 111044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 1111ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_CHANGE_LOCAL_NAME: 1112ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann change_local_name_dump(level + 1, frm); 1113ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1114ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_WRITE_CLASS_OF_DEV: 1115ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_class_of_dev_dump(level + 1, frm); 1116ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1117ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_WRITE_VOICE_SETTING: 1118ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_voice_setting_dump(level + 1, frm); 1119ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1120fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case OCF_WRITE_CURRENT_IAC_LAP: 1121fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann write_current_iac_lap_dump(level + 1, frm); 1122fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann return; 112369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_SCAN_ENABLE: 112469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_AUTH_ENABLE: 112569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann write_scan_enable_dump(level + 1, frm); 112669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann return; 1127097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann case OCF_WRITE_CONN_ACCEPT_TIMEOUT: 1128d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_PAGE_TIMEOUT: 1129d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann write_page_timeout_dump(level + 1, frm); 1130d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann return; 1131d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_PAGE_ACTIVITY: 1132d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_INQ_ACTIVITY: 1133d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann write_page_activity_dump(level + 1, frm); 1134d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann return; 1135a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann case OCF_WRITE_INQUIRY_SCAN_TYPE: 1136a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann write_inquiry_scan_type_dump(level + 1, frm); 1137a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann return; 113869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_ENCRYPT_MODE: 1139f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_WRITE_INQUIRY_MODE: 1140f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_WRITE_AFH_MODE: 1141f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann write_inquiry_mode_dump(level + 1, frm); 1142f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann return; 11436eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_READ_TRANSMIT_POWER_LEVEL: 11446eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann request_transmit_power_level_dump(level + 1, frm); 11456eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 114644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_FLUSH: 11476eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_READ_LINK_SUPERVISION_TIMEOUT: 11486eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann generic_command_dump(level + 1, frm); 11496eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 11506eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_WRITE_LINK_SUPERVISION_TIMEOUT: 11516eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann write_link_supervision_timeout_dump(level + 1, frm); 11526eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 11531a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann case OCF_WRITE_EXT_INQUIRY_RESPONSE: 11541a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann write_ext_inquiry_response_dump(level + 1, frm); 11551a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann return; 1156ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1157ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann break; 115817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 115917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OGF_INFO_PARAM: 116017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann switch (ocf) { 116117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_READ_LOCAL_EXT_FEATURES: 116217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann request_local_ext_features_dump(level + 1, frm); 116317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 116417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 1165ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann break; 1166f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1167f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann case OGF_STATUS_PARAM: 1168f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann switch (ocf) { 1169f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann case OCF_READ_LINK_QUALITY: 1170f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann case OCF_READ_RSSI: 1171f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann case OCF_READ_AFH_MAP: 1172f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann generic_command_dump(level + 1, frm); 1173f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 1174f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann case OCF_READ_CLOCK: 1175f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann request_clock_dump(level + 1, frm); 1176f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 1177f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } 1178f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann break; 1179ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1180ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 118165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky raw_dump(level, frm); 118295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky} 118395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 1184d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void status_response_dump(int level, struct frame *frm) 1185d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1186d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint8_t status = get_u8(frm); 1187d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1188d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1189d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x\n", status); 1190d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1191d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (status > 0) { 1192d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1193d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(status)); 1194d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 1195d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1196d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann raw_dump(level, frm); 1197d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 1198d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1199afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void handle_response_dump(int level, struct frame *frm) 1200afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{ 1201afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann uint16_t handle = btohs(htons(get_u16(frm))); 1202afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann 1203afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann p_indent(level, frm); 1204afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann printf("handle %d\n", handle); 1205afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann 1206afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann raw_dump(level, frm); 1207afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann} 1208afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann 1209ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void bdaddr_response_dump(int level, struct frame *frm) 1210ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1211ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint8_t status = get_u8(frm); 1212ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann bdaddr_t *bdaddr = frm->ptr; 1213ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 1214ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1215ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann frm->ptr += sizeof(bdaddr_t); 1216ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann frm->len -= sizeof(bdaddr_t); 1217ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1218ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1219ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann ba2str(bdaddr, addr); 1220ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x bdaddr %s\n", status, addr); 1221ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1222ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (status > 0) { 1223ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1224ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(status)); 1225ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1226ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1227ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann raw_dump(level, frm); 1228ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1229ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1230d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void generic_response_dump(int level, struct frame *frm) 1231d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1232d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint8_t status = get_u8(frm); 1233d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t handle = btohs(htons(get_u16(frm))); 1234d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1235d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1236d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x handle %d\n", status, handle); 1237d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1238d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (status > 0) { 1239d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1240d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(status)); 1241d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 1242d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1243d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann raw_dump(level, frm); 1244d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 1245d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 124644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_pin_type_dump(int level, struct frame *frm) 124744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 124844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann read_pin_type_rp *rp = frm->ptr; 124944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 125044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 125144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("status 0x%2.2x type %d\n", rp->status, rp->pin_type); 125244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 125344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann if (rp->status > 0) { 125444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 125544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 125644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 125744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 125844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 125944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_stored_link_key_dump(int level, struct frame *frm) 126044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 126144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann read_stored_link_key_rp *rp = frm->ptr; 126244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 126344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 126444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("status 0x%2.2x max %d num %d\n", 126544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann rp->status, rp->max_keys, rp->num_keys); 126644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 126744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann if (rp->status > 0) { 126844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 126944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 127044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 127144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 127244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 127344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_stored_link_key_dump(int level, struct frame *frm) 127444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 127544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann write_stored_link_key_rp *rp = frm->ptr; 127644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 127744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 127844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("status 0x%2.2x written %d\n", rp->status, rp->num_keys); 127944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 128044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann if (rp->status > 0) { 128144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 128244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 128344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 128444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 128544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 128644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void delete_stored_link_key_dump(int level, struct frame *frm) 128744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 128844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann delete_stored_link_key_rp *rp = frm->ptr; 128944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 129044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 129144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("status 0x%2.2x deleted %d\n", rp->status, btohs(rp->num_keys)); 129244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 129344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann if (rp->status > 0) { 129444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 129544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 129644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 129744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 129844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 1299ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_name_dump(int level, struct frame *frm) 1300ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1301ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_name_rp *rp = frm->ptr; 1302ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char name[249]; 1303ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 1304ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1305ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann memset(name, 0, sizeof(name)); 1306ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 248 && rp->name[i]; i++) 1307ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (isprint(rp->name[i])) 1308ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann name[i] = rp->name[i]; 1309ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann else 1310ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann name[i] = '.'; 1311ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1312ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1313ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x name \'%s\'\n", rp->status, name); 1314ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1315ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 1316ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1317ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1318ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1319ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1320ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1321ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_class_of_dev_dump(int level, struct frame *frm) 1322ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1323ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_class_of_dev_rp *rp = frm->ptr; 1324ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1325ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1326ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x class 0x%2.2x%2.2x%2.2x\n", rp->status, 1327ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]); 1328ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1329ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 1330ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1331ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1332ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1333ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1334ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1335ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_voice_setting_dump(int level, struct frame *frm) 1336ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1337ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_voice_setting_rp *rp = frm->ptr; 1338ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1339ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1340ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x voice setting 0x%4.4x\n", 1341ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann rp->status, btohs(rp->voice_setting)); 1342ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1343ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 1344ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1345ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1346ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1347ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1348ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1349fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void read_current_iac_lap_dump(int level, struct frame *frm) 1350fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{ 1351fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann read_current_iac_lap_rp *rp = frm->ptr; 1352fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann int i; 1353fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann 1354fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann for (i = 0; i < rp->num_current_iac; i++) { 1355fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann p_indent(level, frm); 1356fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf("IAC 0x%2.2x%2.2x%2.2x", rp->lap[i][2], rp->lap[i][1], rp->lap[i][0]); 1357fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann if (rp->lap[i][2] == 0x9e && rp->lap[i][1] == 0x8b) { 1358fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann switch (rp->lap[i][0]) { 1359fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case 0x00: 1360fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf(" (Limited Inquiry Access Code)"); 1361fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann break; 1362fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case 0x33: 1363fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf(" (General Inquiry Access Code)"); 1364fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann break; 1365fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 1366fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 1367fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf("\n"); 1368fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 1369fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann} 1370fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann 137169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void read_scan_enable_dump(int level, struct frame *frm) 137269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{ 137369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann uint8_t status = get_u8(frm); 137469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann uint8_t enable = get_u8(frm); 137569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann 137669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann p_indent(level, frm); 137769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann printf("status 0x%2.2x enable %d\n", status, enable); 137869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann 137969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann if (status > 0) { 138069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann p_indent(level, frm); 138169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann printf("Error: %s\n", status2str(status)); 138269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann } 138369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann} 138469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann 1385d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_timeout_dump(int level, struct frame *frm) 1386d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{ 1387d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann read_page_timeout_rp *rp = frm->ptr; 1388d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 1389d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 1390d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("status 0x%2.2x timeout %d\n", rp->status, btohs(rp->timeout)); 1391d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 1392d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann if (rp->status > 0) { 1393d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 1394d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1395d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann } 1396d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann} 1397d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 1398d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_activity_dump(int level, struct frame *frm) 1399d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{ 1400d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann read_page_activity_rp *rp = frm->ptr; 1401d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 1402d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 1403d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("status 0x%2.2x interval %d window %d\n", 1404d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann rp->status, btohs(rp->interval), btohs(rp->window)); 1405d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 1406d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann if (rp->status > 0) { 1407d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 1408d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1409d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann } 1410d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann} 1411d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 1412a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void read_inquiry_scan_type_dump(int level, struct frame *frm) 1413a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{ 1414a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann read_inquiry_scan_type_rp *rp = frm->ptr; 1415a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann 1416a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann p_indent(level, frm); 1417a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann printf("status 0x%2.2x type %d\n", rp->status, rp->type); 1418a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann 1419a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann if (rp->status > 0) { 1420a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann p_indent(level, frm); 1421a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1422a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann } 1423a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann} 1424a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann 14256eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_inquiry_mode_dump(int level, struct frame *frm) 14266eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{ 14276eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_inquiry_mode_rp *rp = frm->ptr; 14286eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14296eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 14306eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("status 0x%2.2x mode %d\n", rp->status, rp->mode); 14316eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14326eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann if (rp->status > 0) { 14336eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 14346eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 14356eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann } 14366eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann} 14376eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14386eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_link_supervision_timeout_dump(int level, struct frame *frm) 14396eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{ 14406eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_link_supervision_timeout_rp *rp = frm->ptr; 14416eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14426eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 14436eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("status 0x%2.2x handle %d timeout %d\n", 14446eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann rp->status, btohs(rp->handle), btohs(rp->link_sup_to)); 14456eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14466eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann if (rp->status > 0) { 14476eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 14486eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 14496eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann } 14506eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann} 14516eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14526eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_transmit_power_level_dump(int level, struct frame *frm) 14536eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{ 14546eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_transmit_power_level_rp *rp = frm->ptr; 14556eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14566eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 14576eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("status 0x%2.2x handle %d level %d\n", 14586eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann rp->status, btohs(rp->handle), rp->level); 14596eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14606eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann if (rp->status > 0) { 14616eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 14626eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 14636eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann } 14646eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann} 14656eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14661a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void read_ext_inquiry_response_dump(int level, struct frame *frm) 14671a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{ 14681a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann read_ext_inquiry_response_rp *rp = frm->ptr; 14691a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann 14701a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann p_indent(level, frm); 14711a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann printf("status 0x%2.2x fec 0x%2.2x\n", rp->status, rp->fec); 14721a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann 14731a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann if (rp->status > 0) { 14741a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann p_indent(level, frm); 14751a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1476f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann } else { 1477f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann frm->ptr += 2; 1478f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann frm->len -= 2; 1479f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann 1480e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann ext_inquiry_response_dump(level, frm); 14811a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann } 14821a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann} 14831a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann 1484ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_version_dump(int level, struct frame *frm) 1485ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1486ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_version_rp *rp = frm->ptr; 1487ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t manufacturer = btohs(rp->manufacturer); 1488ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1489ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1490ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x\n", rp->status); 1491ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1492ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 1493ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1494ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1495ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 1496ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 14971a5f2bff835728b9df12114adf87c704a1e9b6b8Marcel Holtmann printf("HCI Version: %s (0x%x) HCI Revision: 0x%x\n", 1498ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann hci_vertostr(rp->hci_ver), rp->hci_ver, 1499ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann btohs(rp->hci_rev)); 1500ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1501ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n", 1502ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann lmp_vertostr(rp->lmp_ver), rp->lmp_ver, 1503ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann btohs(rp->lmp_subver)); 1504ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1505ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Manufacturer: %s (%d)\n", 1506ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann bt_compidtostr(manufacturer), manufacturer); 1507ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1508ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1509ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 151017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_commands_dump(int level, struct frame *frm) 151117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 151217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_local_commands_rp *rp = frm->ptr; 151317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann int i, max = 0; 151417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 151517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 151617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("status 0x%2.2x\n", rp->status); 151717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 151817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (rp->status > 0) { 151917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 152017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 152117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } else { 152217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann for (i = 0; i < 64; i++) 152317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (rp->commands[i]) 152417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann max = i + 1; 152517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 152617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Commands: "); 152717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann for (i = 0; i < (max > 32 ? 32 : max); i++) 152817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("%2.2x", rp->commands[i]); 152917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("\n"); 153017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (max > 32) { 153117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 153217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf(" "); 153317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann for (i = 32; i < max; i++) 153417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("%2.2x", rp->commands[i]); 153517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("\n"); 153617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 153717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 153817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 153917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 1540ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_features_dump(int level, struct frame *frm) 1541ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1542ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_features_rp *rp = frm->ptr; 1543ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 1544ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1545ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1546ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x\n", rp->status); 1547ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1548ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 1549ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1550ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1551ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 1552ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1553ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Features:"); 1554ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 8; i++) 1555ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf(" 0x%2.2x", rp->features[i]); 1556ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("\n"); 1557ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1558ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1559ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 156017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_ext_features_dump(int level, struct frame *frm) 156117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 156217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_local_ext_features_rp *rp = frm->ptr; 156317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann int i; 156417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 156517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 156617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("status 0x%2.2x page %d max %d\n", 156717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann rp->status, rp->page_num, rp->max_page_num); 156817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 156917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (rp->status > 0) { 157017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 157117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 157217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } else { 157317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 157417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Features:"); 157517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann for (i = 0; i < 8; i++) 157617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf(" 0x%2.2x", rp->features[i]); 157717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("\n"); 157817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 157917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 158017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 1581ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_buffer_size_dump(int level, struct frame *frm) 1582ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1583ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_buffer_size_rp *rp = frm->ptr; 1584ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1585ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1586ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x\n", rp->status); 1587ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1588ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 1589ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1590ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1591ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 1592ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1593ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("ACL MTU %d:%d SCO MTU %d:%d\n", 1594ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann btohs(rp->acl_mtu), btohs(rp->acl_max_pkt), 1595ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann rp->sco_mtu, btohs(rp->sco_max_pkt)); 1596ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1597ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1598ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1599f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_link_quality_dump(int level, struct frame *frm) 1600f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{ 1601f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_link_quality_rp *rp = frm->ptr; 1602f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1603f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 1604f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("status 0x%2.2x handle %d lq %d\n", 1605f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann rp->status, btohs(rp->handle), rp->link_quality); 1606f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1607f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann if (rp->status > 0) { 1608f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 1609f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1610f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } 1611f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann} 1612f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1613f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_rssi_dump(int level, struct frame *frm) 1614f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{ 1615f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_rssi_rp *rp = frm->ptr; 1616f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1617f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 1618f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("status 0x%2.2x handle %d rssi %d\n", 1619f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann rp->status, btohs(rp->handle), rp->rssi); 1620f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1621f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann if (rp->status > 0) { 1622f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 1623f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1624f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } 1625f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann} 1626f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1627f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_afh_map_dump(int level, struct frame *frm) 1628f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{ 1629f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_afh_map_rp *rp = frm->ptr; 1630f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann int i; 1631f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1632f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 1633f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("status 0x%2.2x handle %d mode %d\n", 1634f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann rp->status, btohs(rp->handle), rp->mode); 1635f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1636f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann if (rp->status > 0) { 1637f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 1638f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1639f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } else { 1640f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 1641f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("AFH map: 0x"); 1642f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann for (i = 0; i < 10; i++) 1643f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("%2.2x", rp->map[i]); 1644f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("\n"); 1645f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } 1646f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann} 1647f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1648f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_clock_dump(int level, struct frame *frm) 1649f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{ 1650f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_clock_rp *rp = frm->ptr; 1651f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1652f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 1653f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("status 0x%2.2x handle %d clock 0x%4.4x accuracy %d\n", 1654f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann rp->status, btohs(rp->handle), 1655f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann btohl(rp->clock), btohs(rp->accuracy)); 1656f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1657f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann if (rp->status > 0) { 1658f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 1659f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 1660f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } 1661f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann} 1662f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1663d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_complete_dump(int level, struct frame *frm) 1664d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1665d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_cmd_complete *evt = frm->ptr; 1666d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t opcode = btohs(evt->opcode); 1667d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t ogf = cmd_opcode_ogf(opcode); 1668d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t ocf = cmd_opcode_ocf(opcode); 1669d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1670d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1671d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("%s (0x%2.2x|0x%4.4x) ncmd %d\n", 1672d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann opcode2str(opcode), ogf, ocf, evt->ncmd); 1673d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1674d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann frm->ptr += EVT_CMD_COMPLETE_SIZE; 1675d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann frm->len -= EVT_CMD_COMPLETE_SIZE; 1676d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 16774f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann if (!(parser.flags & DUMP_VERBOSE)) { 16784f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann raw_dump(level, frm); 16794f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann return; 16804f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann } 16814f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann 1682d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann switch (ogf) { 1683ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OGF_LINK_CTL: 1684ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ocf) { 168517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_INQUIRY_CANCEL: 168617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_PERIODIC_INQUIRY: 168717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_EXIT_PERIODIC_INQUIRY: 168817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann status_response_dump(level, frm); 168917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 169090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_CREATE_CONN_CANCEL: 169190480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_REMOTE_NAME_REQ_CANCEL: 1692ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_PIN_CODE_REPLY: 1693ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_LINK_KEY_REPLY: 1694ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_PIN_CODE_NEG_REPLY: 1695ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_LINK_KEY_NEG_REPLY: 1696ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann bdaddr_response_dump(level, frm); 1697ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1698ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 169917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 1700ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1701ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OGF_LINK_POLICY: 1702ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ocf) { 1703ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_WRITE_LINK_POLICY: 1704ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann generic_response_dump(level, frm); 1705ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1706ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 170717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 1708ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1709d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OGF_HOST_CTL: 1710d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann switch (ocf) { 171144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_READ_PIN_TYPE: 171244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann read_pin_type_dump(level, frm); 171344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 171444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_READ_STORED_LINK_KEY: 171544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann read_stored_link_key_dump(level, frm); 171644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 171744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_WRITE_STORED_LINK_KEY: 171844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann write_stored_link_key_dump(level, frm); 171944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 172044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_DELETE_STORED_LINK_KEY: 172144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann delete_stored_link_key_dump(level, frm); 172244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 1723d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_LOCAL_NAME: 1724ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_name_dump(level, frm); 1725ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1726ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_CLASS_OF_DEV: 1727ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_class_of_dev_dump(level, frm); 1728ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1729ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_VOICE_SETTING: 1730ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_voice_setting_dump(level, frm); 1731ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1732fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case OCF_READ_CURRENT_IAC_LAP: 1733fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann read_current_iac_lap_dump(level, frm); 1734fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann return; 173569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_READ_SCAN_ENABLE: 173669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_READ_AUTH_ENABLE: 173769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann read_scan_enable_dump(level, frm); 173869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann return; 1739097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann case OCF_READ_CONN_ACCEPT_TIMEOUT: 1740d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_READ_PAGE_TIMEOUT: 1741d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann read_page_timeout_dump(level, frm); 1742d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann return; 1743d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_READ_PAGE_ACTIVITY: 1744d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_READ_INQ_ACTIVITY: 1745d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann read_page_activity_dump(level, frm); 1746d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann return; 1747a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann case OCF_READ_INQUIRY_SCAN_TYPE: 1748a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann read_inquiry_scan_type_dump(level, frm); 1749a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann return; 175069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_READ_ENCRYPT_MODE: 1751f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_READ_INQUIRY_MODE: 1752f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_READ_AFH_MODE: 1753f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann read_inquiry_mode_dump(level, frm); 1754f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann return; 17556eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_READ_LINK_SUPERVISION_TIMEOUT: 17566eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_link_supervision_timeout_dump(level, frm); 17576eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 17586eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_READ_TRANSMIT_POWER_LEVEL: 17596eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_transmit_power_level_dump(level, frm); 17606eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 17611a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann case OCF_READ_EXT_INQUIRY_RESPONSE: 17621a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann read_ext_inquiry_response_dump(level, frm); 17631a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann return; 176444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_FLUSH: 17656eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_WRITE_LINK_SUPERVISION_TIMEOUT: 17666eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann generic_response_dump(level, frm); 17676eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 176844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_RESET: 176944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_SET_EVENT_MASK: 177044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_SET_EVENT_FLT: 177144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_WRITE_PIN_TYPE: 177244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_CREATE_NEW_UNIT_KEY: 17731577526370e596583b15d68940c24e975e62a502Marcel Holtmann case OCF_CHANGE_LOCAL_NAME: 1774f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_WRITE_CLASS_OF_DEV: 1775f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_WRITE_VOICE_SETTING: 1776fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case OCF_WRITE_CURRENT_IAC_LAP: 177769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_SCAN_ENABLE: 177869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_AUTH_ENABLE: 177969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_ENCRYPT_MODE: 1780097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann case OCF_WRITE_CONN_ACCEPT_TIMEOUT: 1781d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_PAGE_TIMEOUT: 1782d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_PAGE_ACTIVITY: 1783d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_INQ_ACTIVITY: 1784a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann case OCF_WRITE_INQUIRY_SCAN_TYPE: 1785fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case OCF_WRITE_INQUIRY_MODE: 1786fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case OCF_WRITE_AFH_MODE: 1787d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_SET_AFH_CLASSIFICATION: 17881a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann case OCF_WRITE_EXT_INQUIRY_RESPONSE: 1789d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann status_response_dump(level, frm); 1790ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1791d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 179217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 1793d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1794d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OGF_INFO_PARAM: 1795d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann switch (ocf) { 1796d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_LOCAL_VERSION: 1797ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_version_dump(level, frm); 1798ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 179917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_READ_LOCAL_COMMANDS: 180017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_local_commands_dump(level, frm); 180117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 1802d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_LOCAL_FEATURES: 1803ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_features_dump(level, frm); 1804ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 180517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_READ_LOCAL_EXT_FEATURES: 180617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_local_ext_features_dump(level, frm); 180717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 1808d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_BUFFER_SIZE: 1809ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_buffer_size_dump(level, frm); 1810ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1811d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_BD_ADDR: 1812ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann bdaddr_response_dump(level, frm); 1813ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1814d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 181517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 1816d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1817d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OGF_STATUS_PARAM: 1818d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann switch (ocf) { 1819d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_FAILED_CONTACT_COUNTER: 1820d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_RESET_FAILED_CONTACT_COUNTER: 1821f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann status_response_dump(level, frm); 1822f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 1823d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_LINK_QUALITY: 1824f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_link_quality_dump(level, frm); 1825f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 1826d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_RSSI: 1827f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_rssi_dump(level, frm); 1828f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 1829d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_AFH_MAP: 1830f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_afh_map_dump(level, frm); 1831f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 1832d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_CLOCK: 1833f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_clock_dump(level, frm); 1834ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1835d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 183617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 1837d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 1838ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1839ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann raw_dump(level, frm); 1840d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 1841d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1842d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_status_dump(int level, struct frame *frm) 1843d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1844d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_cmd_status *evt = frm->ptr; 1845d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t opcode = btohs(evt->opcode); 1846d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1847d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1848d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("%s (0x%2.2x|0x%4.4x) status 0x%2.2x ncmd %d\n", 1849d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann opcode2str(opcode), 1850d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd_opcode_ogf(opcode), cmd_opcode_ocf(opcode), 1851d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt->status, evt->ncmd); 1852d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1853d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (evt->status > 0) { 1854d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1855d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 1856d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 1857d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 1858d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1859afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void hardware_error_dump(int level, struct frame *frm) 1860afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{ 1861afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann evt_hardware_error *evt = frm->ptr; 1862afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann 1863afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann p_indent(level, frm); 1864afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann printf("code %d\n", evt->code); 1865afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann} 1866afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann 1867d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_dump(int level, struct frame *frm) 1868d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1869d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint8_t num = get_u8(frm); 1870b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann char addr[18]; 1871d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann int i; 1872d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1873d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann for (i = 0; i < num; i++) { 1874d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann inquiry_info *info = frm->ptr; 1875d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1876d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann ba2str(&info->bdaddr, addr); 1877d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1878d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 187972e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x\n", 188072e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann addr, info->pscan_rep_mode, btohs(info->clock_offset), 188172e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann info->dev_class[2], info->dev_class[1], info->dev_class[0]); 1882d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1883d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann frm->ptr += INQUIRY_INFO_SIZE; 1884d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann frm->len -= INQUIRY_INFO_SIZE; 1885d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 1886d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 1887d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1888d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_complete_dump(int level, struct frame *frm) 1889d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1890d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_conn_complete *evt = frm->ptr; 1891d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann char addr[18]; 1892d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1893d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann ba2str(&evt->bdaddr, addr); 1894d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1895d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1896d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x handle %d bdaddr %s type %s encrypt 0x%2.2x\n", 1897d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt->status, btohs(evt->handle), addr, 1898d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt->link_type == 1 ? "ACL" : "SCO", evt->encr_mode); 1899d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1900d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (evt->status > 0) { 1901d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1902d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 1903d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 1904d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 1905d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1906d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_request_dump(int level, struct frame *frm) 1907d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1908d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_conn_request *evt = frm->ptr; 1909d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann char addr[18]; 1910d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1911d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann ba2str(&evt->bdaddr, addr); 1912d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1913d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1914d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("bdaddr %s class 0x%2.2x%2.2x%2.2x type %s\n", 1915d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann addr, evt->dev_class[2], evt->dev_class[1], 1916d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt->dev_class[0], evt->link_type == 1 ? "ACL" : "SCO"); 1917d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 1918d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1919d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void disconn_complete_dump(int level, struct frame *frm) 1920d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1921d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_disconn_complete *evt = frm->ptr; 1922d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1923d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1924d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x handle %d reason 0x%2.2x\n", 1925d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt->status, btohs(evt->handle), evt->reason); 1926d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1927d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (evt->status > 0) { 1928d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1929d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 1930d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } else if (evt->reason > 0) { 1931d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1932d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Reason: %s\n", status2str(evt->reason)); 1933d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 1934d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 1935d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1936d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void remote_name_req_complete_dump(int level, struct frame *frm) 1937d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1938d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_remote_name_req_complete *evt = frm->ptr; 1939d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann char addr[18], name[249]; 1940d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann int i; 1941d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1942d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann ba2str(&evt->bdaddr, addr); 1943d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1944d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann memset(name, 0, sizeof(name)); 1945d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann for (i = 0; i < 248 && evt->name[i]; i++) 1946d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (isprint(evt->name[i])) 1947d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann name[i] = evt->name[i]; 1948d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann else 1949d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann name[i] = '.'; 1950d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1951d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1952d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x bdaddr %s name '%s'\n", evt->status, addr, name); 1953d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1954d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (evt->status > 0) { 1955d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1956d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 1957d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 1958d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 1959d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 196017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_complete_dump(int level, struct frame *frm) 196117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 196217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann evt_master_link_key_complete *evt = frm->ptr; 196317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 196417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 196517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("status 0x%2.2x handle %d flag %d\n", 196617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann evt->status, btohs(evt->handle), evt->key_flag); 196717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 196817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (evt->status > 0) { 196917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 197017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 197117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 197217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 197317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 1974d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void encrypt_change_dump(int level, struct frame *frm) 1975d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1976d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_encrypt_change *evt = frm->ptr; 1977d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1978d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1979d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x handle %d encrypt 0x%2.2x\n", 1980d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt->status, btohs(evt->handle), evt->encrypt); 1981d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1982d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (evt->status > 0) { 1983d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1984d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 1985d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 1986d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 1987d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1988ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_features_complete_dump(int level, struct frame *frm) 1989ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1990ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_read_remote_features_complete *evt = frm->ptr; 1991ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 1992ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1993ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1994ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle)); 1995ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1996ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 1997ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1998ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 1999ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 2000ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2001ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Features:"); 2002ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 8; i++) 2003ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf(" 0x%2.2x", evt->features[i]); 2004ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("\n"); 2005ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2006ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2007ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2008ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_version_complete_dump(int level, struct frame *frm) 2009ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2010ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_read_remote_version_complete *evt = frm->ptr; 2011ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t manufacturer = btohs(evt->manufacturer); 2012ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2013ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2014ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle)); 2015ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2016ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 2017ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2018ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 2019ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 2020ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2021ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n", 2022ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann lmp_vertostr(evt->lmp_ver), evt->lmp_ver, 2023ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann btohs(evt->lmp_subver)); 2024ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2025ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Manufacturer: %s (%d)\n", 2026ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann bt_compidtostr(manufacturer), manufacturer); 2027ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2028ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2029ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 203011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void qos_setup_complete_dump(int level, struct frame *frm) 203111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{ 203211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann evt_qos_setup_complete *evt = frm->ptr; 203311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 203411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 203511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("status 0x%2.2x handle %d flags %d\n", 203611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann evt->status, btohs(evt->handle), evt->flags); 203711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 203811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann if (evt->status > 0) { 203911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 204011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Error: %s\n", status2str(evt->status)); 204111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann } else { 204211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 204311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Service type: %d\n", evt->qos.service_type); 204411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 204511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Token rate: %d\n", btohl(evt->qos.token_rate)); 204611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 204711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth)); 204811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 204911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Latency: %d\n", btohl(evt->qos.latency)); 205011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 205111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Delay variation: %d\n", btohl(evt->qos.delay_variation)); 205211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann } 205311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann} 205411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 2055ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void role_change_dump(int level, struct frame *frm) 2056ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2057ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_role_change *evt = frm->ptr; 2058ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 2059ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2060ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2061ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann ba2str(&evt->bdaddr, addr); 2062ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x bdaddr %s role 0x%2.2x\n", 2063ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt->status, addr, evt->role); 2064ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2065ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 2066ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2067ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 2068ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 2069ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2070ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Role: %s\n", role2str(evt->role)); 2071ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2072ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2073ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2074ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void num_comp_pkts_dump(int level, struct frame *frm) 2075ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2076ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint8_t num = get_u8(frm); 20772374dcc283f6d12aefa7eb59dc17758a2580837bMarcel Holtmann uint16_t handle, packets; 2078ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 2079ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2080ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < num; i++) { 20812374dcc283f6d12aefa7eb59dc17758a2580837bMarcel Holtmann handle = btohs(htons(get_u16(frm))); 20822374dcc283f6d12aefa7eb59dc17758a2580837bMarcel Holtmann packets = btohs(htons(get_u16(frm))); 20832374dcc283f6d12aefa7eb59dc17758a2580837bMarcel Holtmann 20842374dcc283f6d12aefa7eb59dc17758a2580837bMarcel Holtmann p_indent(level, frm); 20852374dcc283f6d12aefa7eb59dc17758a2580837bMarcel Holtmann printf("handle %d packets %d\n", handle, packets); 2086ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2087ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2088ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2089ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void mode_change_dump(int level, struct frame *frm) 2090ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2091ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_mode_change *evt = frm->ptr; 2092ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2093ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2094ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x handle %d mode 0x%2.2x interval %d\n", 2095ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt->status, btohs(evt->handle), evt->mode, btohs(evt->interval)); 2096ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2097ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 2098ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2099ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 2100ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 2101ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2102ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Mode: %s\n", mode2str(evt->mode)); 2103ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2104ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2105ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2106ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_req_dump(int level, struct frame *frm) 2107ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2108ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_pin_code_req *evt = frm->ptr; 2109ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 2110ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2111ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2112ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann ba2str(&evt->bdaddr, addr); 2113ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s\n", addr); 2114ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2115ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2116ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_notify_dump(int level, struct frame *frm) 2117ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2118ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_link_key_notify *evt = frm->ptr; 2119ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 2120ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 2121ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2122ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2123ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann ba2str(&evt->bdaddr, addr); 212444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("bdaddr %s key ", addr); 2125ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 16; i++) 212644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("%2.2X", evt->link_key[i]); 212744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf(" type %d\n", evt->key_type); 2128ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2129ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 213011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void max_slots_change_dump(int level, struct frame *frm) 213111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{ 213211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann evt_max_slots_change *evt = frm->ptr; 213311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 213411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 213511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("handle %d slots %d\n", btohs(evt->handle), evt->max_slots); 213611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann} 213711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 2138c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmannstatic inline void data_buffer_overflow_dump(int level, struct frame *frm) 2139c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann{ 2140c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann evt_data_buffer_overflow *evt = frm->ptr; 2141c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann 2142c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann p_indent(level, frm); 2143c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann printf("type %s\n", evt->link_type == 1 ? "ACL" : "SCO"); 2144c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann} 2145c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann 2146ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_clock_offset_complete_dump(int level, struct frame *frm) 2147ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2148ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_read_clock_offset_complete *evt = frm->ptr; 2149ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2150ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2151ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x handle %d clkoffset 0x%4.4x\n", 2152ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt->status, btohs(evt->handle), btohs(evt->clock_offset)); 2153ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2154ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 2155ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2156ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 2157ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2158ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2159ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2160ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void conn_ptype_changed_dump(int level, struct frame *frm) 2161ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2162ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_conn_ptype_changed *evt = frm->ptr; 2163ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t ptype = btohs(evt->ptype); 2164ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char *str; 2165ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2166ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2167ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x handle %d ptype 0x%4.4x\n", 2168ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt->status, btohs(evt->handle), ptype); 2169ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2170ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 2171ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2172ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 2173ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 2174ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann str = hci_ptypetostr(ptype); 2175ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (str) { 2176ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2177ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Packet type: %s\n", str); 2178ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann free(str); 2179ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2180ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2181ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2182ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 218311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void pscan_rep_mode_change_dump(int level, struct frame *frm) 218411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{ 218511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann evt_pscan_rep_mode_change *evt = frm->ptr; 218611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann char addr[18]; 218711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 218811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 218911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann ba2str(&evt->bdaddr, addr); 219011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("bdaddr %s mode %d\n", addr, evt->pscan_rep_mode); 219111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann} 2192ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann 2193f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmannstatic inline void flow_spec_complete_dump(int level, struct frame *frm) 2194f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann{ 2195f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann evt_flow_spec_complete *evt = frm->ptr; 2196f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann 2197f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 2198f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("status 0x%2.2x handle %d flags %d %s\n", 2199f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann evt->status, btohs(evt->handle), evt->flags, 2200f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann evt->direction == 0 ? "outgoing" : "incoming"); 2201f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann 2202f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann if (evt->status > 0) { 2203f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 2204f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 2205f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann } else { 2206f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 2207f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Service type: %d\n", evt->qos.service_type); 2208f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 2209f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Token rate: %d\n", btohl(evt->qos.token_rate)); 2210f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 2211f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth)); 2212f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 2213f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Latency: %d\n", btohl(evt->qos.latency)); 2214f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 2215f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Delay variation: %d\n", btohl(evt->qos.delay_variation)); 2216f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann } 2217f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann} 2218f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann 2219d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_with_rssi_dump(int level, struct frame *frm) 2220d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 2221d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint8_t num = get_u8(frm); 2222b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann char addr[18]; 2223d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann int i; 2224d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2225ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann if (!num) 2226ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann return; 2227d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2228ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann if (frm->len / num == INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE) { 2229ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann for (i = 0; i < num; i++) { 2230ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann inquiry_info_with_rssi_and_pscan_mode *info = frm->ptr; 2231d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2232ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann p_indent(level, frm); 2233d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2234ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann ba2str(&info->bdaddr, addr); 2235ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n", 2236ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann addr, info->pscan_rep_mode, btohs(info->clock_offset), 2237ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi); 2238ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann 2239ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann frm->ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE; 2240ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann frm->len -= INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE; 2241ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann } 2242ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann } else { 2243ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann for (i = 0; i < num; i++) { 2244ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann inquiry_info_with_rssi *info = frm->ptr; 2245ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann 2246ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann p_indent(level, frm); 2247ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann 2248ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann ba2str(&info->bdaddr, addr); 2249ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n", 2250ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann addr, info->pscan_rep_mode, btohs(info->clock_offset), 2251ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi); 2252ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann 2253ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE; 2254ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE; 2255ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann } 2256d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 2257d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 2258d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 225917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_complete_dump(int level, struct frame *frm) 226017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 226117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann evt_read_remote_ext_features_complete *evt = frm->ptr; 226217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann int i; 226317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 226417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 226517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("status 0x%2.2x handle %d page %d max %d\n", 226617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann evt->status, btohs(evt->handle), 226717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann evt->page_num, evt->max_page_num); 226817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 226917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (evt->status > 0) { 227017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 227117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 227217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } else { 227317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 227417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Features:"); 227517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann for (i = 0; i < 8; i++) 227617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf(" 0x%2.2x", evt->features[i]); 227717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("\n"); 227817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 227917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 228017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 2281d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_complete_dump(int level, struct frame *frm) 2282d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{ 2283d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann evt_sync_conn_complete *evt = frm->ptr; 2284d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann char addr[18]; 2285d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 2286d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann ba2str(&evt->bdaddr, addr); 2287d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 2288d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann p_indent(level, frm); 2289d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann printf("status 0x%2.2x handle %d bdaddr %s type %s\n", 2290d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann evt->status, btohs(evt->handle), addr, 2291d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann evt->link_type == 0 ? "SCO" : "eSCO"); 2292d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 2293d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann if (evt->status > 0) { 2294d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann p_indent(level, frm); 2295d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 2296d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann } else { 2297d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann p_indent(level, frm); 2298d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann printf("Air mode: %s\n", airmode2str(evt->air_mode)); 2299d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann } 2300d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann} 2301d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 2302d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_changed_dump(int level, struct frame *frm) 2303d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{ 2304d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann evt_sync_conn_changed *evt = frm->ptr; 2305d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 2306d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann p_indent(level, frm); 2307d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann printf("status 0x%2.2x handle %d\n", 2308d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann evt->status, btohs(evt->handle)); 2309d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 2310d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann if (evt->status > 0) { 2311d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann p_indent(level, frm); 2312d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 2313d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann } 2314d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann} 2315d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 2316807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmannstatic inline void extended_inq_result_dump(int level, struct frame *frm) 2317807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann{ 2318807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann uint8_t num = get_u8(frm); 2319807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann char addr[18]; 2320807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann int i; 2321807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann 2322807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann for (i = 0; i < num; i++) { 2323807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann extended_inquiry_info *info = frm->ptr; 2324807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann 2325807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann ba2str(&info->bdaddr, addr); 2326807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann 2327807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann p_indent(level, frm); 232827eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n", 2329807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann addr, info->pscan_rep_mode, btohs(info->clock_offset), 233027eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi); 233127eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann 233227eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE; 233327eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE; 233427eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann 2335e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann ext_inquiry_response_dump(level, frm); 2336807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann } 2337807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann} 2338807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann 233965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void event_dump(int level, struct frame *frm) 234095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{ 2341174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky hci_event_hdr *hdr = frm->ptr; 2342be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann uint8_t event = hdr->evt; 234365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 234465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky if (p_filter(FILT_HCI)) 234565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky return; 234665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 2347ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky p_indent(level, frm); 234895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 2349d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (event <= EVENT_NUM) { 2350803752117135528b1adebf0fa045596e188a996dMarcel Holtmann printf("HCI Event: %s (0x%2.2x) plen %d\n", 2351d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann event_str[hdr->evt], hdr->evt, hdr->plen); 2352be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } else if (hdr->evt == EVT_TESTING) { 2353803752117135528b1adebf0fa045596e188a996dMarcel Holtmann printf("HCI Event: Testing (0x%2.2x) plen %d\n", hdr->evt, hdr->plen); 2354be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } else if (hdr->evt == EVT_VENDOR) { 2355803752117135528b1adebf0fa045596e188a996dMarcel Holtmann printf("HCI Event: Vendor (0x%2.2x) plen %d\n", hdr->evt, hdr->plen); 2356be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann if (get_manufacturer() == 10) { 2357be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann frm->ptr += HCI_EVENT_HDR_SIZE; 2358be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann frm->len -= HCI_EVENT_HDR_SIZE; 2359be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann csr_dump(level + 1, frm); 2360be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann return; 2361be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } 2362be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } else 236366f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky printf("HCI Event: code 0x%2.2x plen %d\n", hdr->evt, hdr->plen); 236465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 236565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky frm->ptr += HCI_EVENT_HDR_SIZE; 236665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky frm->len -= HCI_EVENT_HDR_SIZE; 236765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 2368be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann if (event == EVT_CMD_COMPLETE) { 2369be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann evt_cmd_complete *cc = frm->ptr; 2370be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann if (cc->opcode == cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION)) { 2371be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann read_local_version_rp *rp = frm->ptr + EVT_CMD_COMPLETE_SIZE; 2372be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann manufacturer = rp->manufacturer; 2373be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } 2374be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } 2375be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann 237625554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann if (event == EVT_DISCONN_COMPLETE) { 237725554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann evt_disconn_complete *evt = frm->ptr; 237825554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann l2cap_clear(btohs(evt->handle)); 237925554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann } 238025554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann 2381d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (!(parser.flags & DUMP_VERBOSE)) { 2382d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann raw_dump(level, frm); 2383d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann return; 2384d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 2385d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2386d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann switch (event) { 2387ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann case EVT_LOOPBACK_COMMAND: 2388ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann command_dump(level + 1, frm); 2389ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann break; 2390d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_CMD_COMPLETE: 2391d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd_complete_dump(level + 1, frm); 2392d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 2393d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_CMD_STATUS: 2394d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd_status_dump(level + 1, frm); 2395d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 2396afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann case EVT_HARDWARE_ERROR: 2397afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann hardware_error_dump(level + 1, frm); 2398afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann break; 2399afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann case EVT_FLUSH_OCCURRED: 2400f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann case EVT_QOS_VIOLATION: 2401afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann handle_response_dump(level + 1, frm); 2402afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann break; 2403d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_INQUIRY_COMPLETE: 2404d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann status_response_dump(level + 1, frm); 2405d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 2406d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_INQUIRY_RESULT: 2407d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann inq_result_dump(level + 1, frm); 2408d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 2409d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_CONN_COMPLETE: 2410d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann conn_complete_dump(level + 1, frm); 2411d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 2412d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_CONN_REQUEST: 2413d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann conn_request_dump(level + 1, frm); 2414d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 2415d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_DISCONN_COMPLETE: 2416d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann disconn_complete_dump(level + 1, frm); 2417d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 2418d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_AUTH_COMPLETE: 2419d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_CHANGE_CONN_LINK_KEY_COMPLETE: 2420d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann generic_response_dump(level + 1, frm); 2421d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 242217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case EVT_MASTER_LINK_KEY_COMPLETE: 242317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann master_link_key_complete_dump(level + 1, frm); 242417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 2425d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_REMOTE_NAME_REQ_COMPLETE: 2426d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann remote_name_req_complete_dump(level + 1, frm); 2427d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 2428d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_ENCRYPT_CHANGE: 2429d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann encrypt_change_dump(level + 1, frm); 2430d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 2431ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_READ_REMOTE_FEATURES_COMPLETE: 2432ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_remote_features_complete_dump(level + 1, frm); 2433ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 2434ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_READ_REMOTE_VERSION_COMPLETE: 2435ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_remote_version_complete_dump(level + 1, frm); 2436ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 2437ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_QOS_SETUP_COMPLETE: 243811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann qos_setup_complete_dump(level + 1, frm); 2439ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 2440ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_ROLE_CHANGE: 2441ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann role_change_dump(level + 1, frm); 2442ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 2443ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_NUM_COMP_PKTS: 2444ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann num_comp_pkts_dump(level + 1, frm); 2445ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 2446ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_MODE_CHANGE: 2447ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann mode_change_dump(level + 1, frm); 2448ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 2449b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann case EVT_RETURN_LINK_KEYS: 2450b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann return_link_keys_dump(level + 1, frm); 2451b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann break; 2452ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_PIN_CODE_REQ: 2453ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_LINK_KEY_REQ: 2454ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann pin_code_req_dump(level + 1, frm); 2455ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 2456ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_LINK_KEY_NOTIFY: 2457ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann link_key_notify_dump(level + 1, frm); 2458ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 2459c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann case EVT_DATA_BUFFER_OVERFLOW: 2460c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann data_buffer_overflow_dump(level + 1, frm); 2461c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann break; 246211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann case EVT_MAX_SLOTS_CHANGE: 246311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann max_slots_change_dump(level + 1, frm); 246411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann break; 2465ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_READ_CLOCK_OFFSET_COMPLETE: 2466ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_clock_offset_complete_dump(level + 1, frm); 2467ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 2468ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_CONN_PTYPE_CHANGED: 2469ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann conn_ptype_changed_dump(level + 1, frm); 2470ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 247111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann case EVT_PSCAN_REP_MODE_CHANGE: 247211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann pscan_rep_mode_change_dump(level + 1, frm); 247311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann break; 2474f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann case EVT_FLOW_SPEC_COMPLETE: 2475f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann flow_spec_complete_dump(level + 1, frm); 2476f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann break; 2477d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_INQUIRY_RESULT_WITH_RSSI: 2478d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann inq_result_with_rssi_dump(level + 1, frm); 2479d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 248017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case EVT_READ_REMOTE_EXT_FEATURES_COMPLETE: 248117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_remote_ext_features_complete_dump(level + 1, frm); 248217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 2483d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case EVT_SYNC_CONN_COMPLETE: 2484d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann sync_conn_complete_dump(level + 1, frm); 2485d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann break; 2486d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case EVT_SYNC_CONN_CHANGED: 2487d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann sync_conn_changed_dump(level + 1, frm); 2488d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann break; 2489807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann case EVT_EXTENDED_INQUIRY_RESULT: 2490807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann extended_inq_result_dump(level + 1, frm); 2491807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann break; 2492d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann default: 2493d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann raw_dump(level, frm); 2494d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 2495d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 249695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky} 249795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 249865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void acl_dump(int level, struct frame *frm) 249995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{ 2500174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky hci_acl_hdr *hdr = (void *) frm->ptr; 25010d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint16_t handle = btohs(hdr->handle); 25020d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint16_t dlen = btohs(hdr->dlen); 25030d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint8_t flags = acl_flags(handle); 250465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 250565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky if (!p_filter(FILT_HCI)) { 2506ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky p_indent(level, frm); 2507d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("ACL data: handle %d flags 0x%2.2x dlen %d\n", 250865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky acl_handle(handle), flags, dlen); 250965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky level++; 251065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky } 2511e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann 2512e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann frm->ptr += HCI_ACL_HDR_SIZE; 2513e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann frm->len -= HCI_ACL_HDR_SIZE; 2514f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky frm->flags = flags; 2515f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky frm->handle = acl_handle(handle); 251665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 251765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky if (parser.filter & ~FILT_HCI) 251865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky l2cap_dump(level, frm); 251965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky else 252065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky raw_dump(level, frm); 252195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky} 252295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 2523d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyanskystatic inline void sco_dump(int level, struct frame *frm) 2524d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky{ 2525d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky hci_sco_hdr *hdr = (void *) frm->ptr; 25260d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint16_t handle = btohs(hdr->handle); 2527d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky 25280033462dddb3b4adf56ea28680c1f135f25a4387Marcel Holtmann if (frm->audio_fd > 2) 25290033462dddb3b4adf56ea28680c1f135f25a4387Marcel Holtmann write(frm->audio_fd, frm->ptr + HCI_SCO_HDR_SIZE, hdr->dlen); 25300033462dddb3b4adf56ea28680c1f135f25a4387Marcel Holtmann 2531d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky if (!p_filter(FILT_SCO)) { 2532ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky p_indent(level, frm); 2533d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("SCO data: handle %d dlen %d\n", 2534d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky acl_handle(handle), hdr->dlen); 2535d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky level++; 2536d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky 2537d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky frm->ptr += HCI_SCO_HDR_SIZE; 2538d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky frm->len -= HCI_SCO_HDR_SIZE; 2539d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky raw_dump(level, frm); 2540d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky } 2541d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky} 2542d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky 2543b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmannstatic inline void vendor_dump(int level, struct frame *frm) 2544b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann{ 2545b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann if (p_filter(FILT_HCI)) 2546b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann return; 2547b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann 254838acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann if (frm->dev_id == HCI_DEV_NONE) { 2549a4d60061ed080704f1e1c076d59ac0b03aaa0fd1Marcel Holtmann uint16_t device = btohs(htons(get_u16(frm))); 2550ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann uint16_t proto = btohs(htons(get_u16(frm))); 255138acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann uint16_t type = btohs(htons(get_u16(frm))); 255238acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann uint16_t plen = btohs(htons(get_u16(frm))); 255338acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann 255438acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann p_indent(level, frm); 255538acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann 2556ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann printf("System %s: device hci%d proto 0x%2.2x type 0x%2.2x plen %d\n", 2557ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann frm->in ? "event" : "command", device, proto, type, plen); 255838acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann 255938acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann raw_dump(level, frm); 256038acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann return; 256138acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann } 256238acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann 2563b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann if (get_manufacturer() == 12) { 2564b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann bpa_dump(level, frm); 2565b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann return; 2566b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann } 2567b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann 2568b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann p_indent(level, frm); 2569b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann printf("Vendor data: len %d\n", frm->len); 2570b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann raw_dump(level, frm); 2571b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann} 2572b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann 2573174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyanskyvoid hci_dump(int level, struct frame *frm) 257495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{ 2575d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint8_t type = *(uint8_t *)frm->ptr; 257695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 2577174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky frm->ptr++; frm->len--; 2578e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann 257995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky switch (type) { 258095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky case HCI_COMMAND_PKT: 258165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky command_dump(level, frm); 258295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky break; 258395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 258495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky case HCI_EVENT_PKT: 258565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky event_dump(level, frm); 258695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky break; 258795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 258895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky case HCI_ACLDATA_PKT: 258965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky acl_dump(level, frm); 259095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky break; 259195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 2592d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky case HCI_SCODATA_PKT: 2593d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky sco_dump(level, frm); 2594d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky break; 2595e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann 2596b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann case HCI_VENDOR_PKT: 2597b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann vendor_dump(level, frm); 2598b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann break; 2599b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann 260095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky default: 260165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky if (p_filter(FILT_HCI)) 260265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky break; 260365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 2604ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky p_indent(level, frm); 2605174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky printf("Unknown: type 0x%2.2x len %d\n", type, frm->len); 260665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky raw_dump(level, frm); 260795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky break; 260895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky } 260995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky} 2610