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