hci.c revision 18a8555accbbad5dc57f99303dc7718b69b3921c
195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky/* 2e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * 3aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann * BlueZ - Bluetooth protocol stack for Linux 4e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * 5e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * Copyright (C) 2000-2002 Maxim Krasnyansky <maxk@qualcomm.com> 6e5e4f00bb96381f8971b9b1ca674902e9771626cMarcel Holtmann * Copyright (C) 2003-2011 Marcel Holtmann <marcel@holtmann.org> 7e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * 8e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * 9e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * This program is free software; you can redistribute it and/or modify 10e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * it under the terms of the GNU General Public License as published by 11e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * the Free Software Foundation; either version 2 of the License, or 12e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * (at your option) any later version. 13e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * 14e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * This program is distributed in the hope that it will be useful, 15e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * but WITHOUT ANY WARRANTY; without even the implied warranty of 16e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * GNU General Public License for more details. 18e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * 19e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * You should have received a copy of the GNU General Public License 20e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * along with this program; if not, write to the Free Software 21aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 22e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann * 2395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky */ 2495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 25aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#ifdef HAVE_CONFIG_H 26aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#include <config.h> 27aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#endif 28aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann 2995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <stdio.h> 30e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann#include <errno.h> 31d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann#include <ctype.h> 3295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <unistd.h> 33aace363653bba5b4b20648014a5b4103723d5991Marcel Holtmann#include <stdlib.h> 3495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <string.h> 3595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 3695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <sys/types.h> 370d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann#include <sys/socket.h> 380d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann#include <netinet/in.h> 3995e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 4095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <bluetooth/bluetooth.h> 4195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include <bluetooth/hci.h> 42ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann#include <bluetooth/hci_lib.h> 4395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 4495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky#include "parser.h" 4595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 46be9be844106d677ec77acee68935bc9e66772123Marcel Holtmannstatic uint16_t manufacturer = DEFAULT_COMPID; 47be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann 48be9be844106d677ec77acee68935bc9e66772123Marcel Holtmannstatic inline uint16_t get_manufacturer(void) 49be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann{ 50be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann return (manufacturer == DEFAULT_COMPID ? parser.defcompid : manufacturer); 51be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann} 52be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann 53b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo#define EVENT_NUM 76 5413acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *event_str[EVENT_NUM + 1] = { 5566f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Unknown", 5666f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Inquiry Complete", 5766f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Inquiry Result", 5866f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Connect Complete", 5966f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Connect Request", 6066f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Disconn Complete", 6166f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Auth Complete", 6266f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Remote Name Req Complete", 63d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky "Encrypt Change", 6466f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Change Connection Link Key Complete", 6566f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Master Link Key Complete", 6666f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Read Remote Supported Features", 6766f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Read Remote Ver Info Complete", 6866f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "QoS Setup Complete", 6966f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Command Complete", 7066f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Command Status", 7166f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Hardware Error", 7266f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Flush Occurred", 7366f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Role Change", 7466f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Number of Completed Packets", 7566f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Mode Change", 7666f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Return Link Keys", 7766f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "PIN Code Request", 7866f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Link Key Request", 7966f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Link Key Notification", 8066f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Loopback Command", 8166f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Data Buffer Overflow", 8266f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Max Slots Change", 8366f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Read Clock Offset Complete", 8466f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Connection Packet Type Changed", 8566f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "QoS Violation", 8666f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky "Page Scan Mode Change", 87328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Page Scan Repetition Mode Change", 88328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Flow Specification Complete", 89328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Inquiry Result with RSSI", 90328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Remote Extended Features", 91328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 92328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 93328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 94328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 95328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 96328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 97328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 98328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 99328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Synchronous Connect Complete", 1001a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Synchronous Connect Changed", 101120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann "Sniff Subrate", 1021a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Extended Inquiry Result", 1037460c526938c04bb76eb9c44ade94666c4e5c0feMarcel Holtmann "Encryption Key Refresh Complete", 104b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "IO Capability Request", 105b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "IO Capability Response", 106b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "User Confirmation Request", 107b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "User Passkey Request", 108b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "Remote OOB Data Request", 109b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "Simple Pairing Complete", 110d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann "Unknown", 111d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann "Link Supervision Timeout Change", 1127460c526938c04bb76eb9c44ade94666c4e5c0feMarcel Holtmann "Enhanced Flush Complete", 1137460c526938c04bb76eb9c44ade94666c4e5c0feMarcel Holtmann "Unknown", 114b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "User Passkey Notification", 115b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "Keypress Notification", 1167460c526938c04bb76eb9c44ade94666c4e5c0feMarcel Holtmann "Remote Host Supported Features Notification", 117b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Meta Event", 118b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Physical Link Complete", 119b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Channel Selected", 120b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Disconnection Physical Link Complete", 121b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Physical Link Loss Early Warning", 122b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Physical Link Recovery", 123b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Logical Link Complete", 124b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Disconnection Logical Link Complete", 125b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Flow Spec Modify Complete", 126b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Number Of Completed Data Blocks", 127b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "AMP Start Test", 128b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "AMP Test End", 129b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "AMP Receiver Report", 130b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Short Range Mode Change Complete", 131b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "AMP Status Change", 132b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo}; 133b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 134b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo#define LE_EV_NUM 5 135b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic char *ev_le_meta_str[LE_EV_NUM + 1] = { 136b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Unknown", 137b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Connection Complete", 138b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Advertising Report", 139b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Connection Update Complete", 140b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Read Remote Used Features Complete", 141b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Long Term Key Request", 14266f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky}; 1432bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 144c7f436764386ca845317b678f3330340ccd838b8Inga Stotland#define CMD_LINKCTL_NUM 60 14513acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_linkctl_str[CMD_LINKCTL_NUM + 1] = { 1462bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Unknown", 1472bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Inquiry", 1482bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Inquiry Cancel", 1492bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Periodic Inquiry Mode", 1502bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Exit Periodic Inquiry Mode", 1512bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Create Connection", 1522bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Disconnect", 1532bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Add SCO Connection", 154328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Create Connection Cancel", 1552bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Accept Connection Request", 1562bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Reject Connection Request", 1572bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Link Key Request Reply", 1582bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Link Key Request Negative Reply", 1592bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "PIN Code Request Reply", 1602bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "PIN Code Request Negative Reply", 1612bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Change Connection Packet Type", 162f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1632bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Authentication Requested", 164f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1652bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Set Connection Encryption", 166f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1672bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Change Connection Link Key", 168f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1692bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Master Link Key", 170f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 1712bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Remote Name Request", 172328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Remote Name Request Cancel", 1732bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Remote Supported Features", 174328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Remote Extended Features", 1752bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Remote Version Information", 176f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 177328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Clock Offset", 178a70eea73595ffa34b0b66938f0f8f59f13527e7fMarcel Holtmann "Read LMP Handle", 179328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 180328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 181328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 182328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 183328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 184328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 185328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 186328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Setup Synchronous Connection", 187328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Accept Synchronous Connection", 1881a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Reject Synchronous Connection", 189b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "IO Capability Request Reply", 190b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "User Confirmation Request Reply", 191b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "User Confirmation Request Negative Reply", 192b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "User Passkey Request Reply", 193b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "User Passkey Request Negative Reply", 194b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "Remote OOB Data Request Reply", 1957df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Unknown", 1967df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Unknown", 197b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "Remote OOB Data Request Negative Reply", 198b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "IO Capability Request Negative Reply", 199c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Create Physical Link", 200c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Accept Physical Link", 201c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Disconnect Physical Link", 202c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Create Logical Link", 203c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Accept Logical Link", 204c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Disconnect Logical Link", 205c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Logical Link Cancel", 206c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Flow Spec Modify", 2072bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky}; 2082bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 209120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann#define CMD_LINKPOL_NUM 17 21013acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_linkpol_str[CMD_LINKPOL_NUM + 1] = { 2112bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Unknown", 2122bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Hold Mode", 213f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2142bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Sniff Mode", 2152bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Exit Sniff Mode", 216328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Park State", 217328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Exit Park State", 2182bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "QoS Setup", 219f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2202bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Role Discovery", 221f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2222bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Switch Role", 2232bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Link Policy Settings", 224328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Link Policy Settings", 225328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Default Link Policy Settings", 226328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Default Link Policy Settings", 2271a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Flow Specification", 2287df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Sniff Subrating", 2292bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky}; 2302bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 231b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo#define CMD_HOSTCTL_NUM 109 23213acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_hostctl_str[CMD_HOSTCTL_NUM + 1] = { 2332bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Unknown", 2342bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Set Event Mask", 235f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2362bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Reset", 237f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2382bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Set Event Filter", 239f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 240f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2412bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Flush", 2422bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read PIN Type ", 2432bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write PIN Type", 2442bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Create New Unit Key", 245f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2462bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Stored Link Key", 247f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 248f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 249f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2502bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Stored Link Key", 2512bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Delete Stored Link Key", 252328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Local Name", 2532bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Local Name", 2542bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Connection Accept Timeout", 2552bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Connection Accept Timeout", 2562bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Page Timeout", 2572bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Page Timeout", 2582bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Scan Enable", 2592bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Scan Enable", 2602bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Page Scan Activity", 2612bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Page Scan Activity", 2622bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Inquiry Scan Activity", 2632bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Inquiry Scan Activity", 2642bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Authentication Enable", 2652bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Authentication Enable", 2662bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Encryption Mode", 2672bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Encryption Mode", 2682bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Class of Device", 2692bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Class of Device", 2702bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Voice Setting", 2712bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Voice Setting", 2722bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Automatic Flush Timeout", 2732bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Automatic Flush Timeout", 2742bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Num Broadcast Retransmissions", 2752bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Num Broadcast Retransmissions", 2762bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Hold Mode Activity ", 2772bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Hold Mode Activity", 2782bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Transmit Power Level", 279328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Synchronous Flow Control Enable", 280328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Synchronous Flow Control Enable", 281f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2822bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Set Host Controller To Host Flow Control", 283f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2842bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Host Buffer Size", 285f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 2862bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Host Number of Completed Packets", 2872bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Link Supervision Timeout", 2882bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Link Supervision Timeout", 2892bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Number of Supported IAC", 2902bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Current IAC LAP", 2912bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Current IAC LAP", 2922bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Page Scan Period Mode", 2932bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Write Page Scan Period Mode", 2942bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Page Scan Mode", 295328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Page Scan Mode", 296328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Set AFH Host Channel Classification", 297328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 298328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Unknown", 299328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Inquiry Scan Type", 300328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Inquiry Scan Type", 301328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Inquiry Mode", 302328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Inquiry Mode", 303328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Page Scan Type", 304328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Write Page Scan Type", 305328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read AFH Channel Assessment Mode", 3061a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Write AFH Channel Assessment Mode", 3071a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Unknown", 30813acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 30913acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 31013acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 31113acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 31213acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 31313acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann "Unknown", 3141a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Read Extended Inquiry Response", 3151a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Write Extended Inquiry Response", 3167df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Refresh Encryption Key", 3177df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Unknown", 318b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "Read Simple Pairing Mode", 319b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "Write Simple Pairing Mode", 320b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "Read Local OOB Data", 3217df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Read Inquiry Response Transmit Power Level", 32209d7063d8d3f1d32884cde27ecef80e183549897Marcel Holtmann "Write Inquiry Transmit Power Level", 3237df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Read Default Erroneous Data Reporting", 3247df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Write Default Erroneous Data Reporting", 3257df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Unknown", 3267df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Unknown", 3277df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Unknown", 328b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Enhanced Flush", 3297df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Unknown", 330b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Read Logical Link Accept Timeout", 331b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Write Logical Link Accept Timeout", 332b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Set Event Mask Page 2", 333b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Read Location Data", 334b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Write Location Data", 335b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Read Flow Control Mode", 336b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Write Flow Control Mode", 337b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Read Enhanced Transmit Power Level", 338b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Read Best Effort Flush Timeout", 339b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Write Best Effort Flush Timeout", 340b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Short Range Mode", 341b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Read LE Host Supported", 342b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Write LE Host Supported", 3432bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky}; 3442bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 34513acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmann#define CMD_INFO_NUM 9 34613acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_info_str[CMD_INFO_NUM + 1] = { 3472bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Unknown", 3482bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Local Version Information", 349328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Local Supported Commands", 3502bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Local Supported Features", 351328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Local Extended Features", 3522bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Buffer Size", 353f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 3542bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Country Code", 355f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 3561a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Read BD ADDR", 3572bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky}; 3582bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 359c7f436764386ca845317b678f3330340ccd838b8Inga Stotland#define CMD_STATUS_NUM 11 36013acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *cmd_status_str[CMD_STATUS_NUM + 1] = { 3612bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Unknown", 3622bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Read Failed Contact Counter", 3632bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky "Reset Failed Contact Counter", 364328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read Link Quality", 365f8af6e30983794741e5d45b32c8d6b2f79ff7e1cMax Krasnyansky "Unknown", 366328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read RSSI", 367328789cab8eae78c87d97fa0f2859956e674ca5dMarcel Holtmann "Read AFH Channel Map", 3681a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Read Clock", 369c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Read Encryption Key Size", 370c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Read Local AMP Info", 371c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Read Local AMP ASSOC", 372c7f436764386ca845317b678f3330340ccd838b8Inga Stotland "Write Remote AMP ASSOC" 3732bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky}; 37466f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky 3757df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann#define CMD_TESTING_NUM 4 3767df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmannstatic char *cmd_testing_str[CMD_TESTING_NUM + 1] = { 3777df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Unknown", 3787df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Read Loopback Mode", 3797df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Write Loopback Mode", 3807df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Enable Device Under Test mode", 3817df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann "Unknown", 3827df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann}; 3837df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann 384d88bf4263a7abb83082b8b492e3992e83df580a2Ville Tervo#define CMD_LE_NUM 31 385b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic char *cmd_le_str[CMD_LE_NUM + 1] = { 386b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Unknown", 387b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Set Event Mask", 388b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Read Buffer Size", 389b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Read Local Supported Features", 390b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "Unknown", 391b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Set Random Address", 392b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Set Advertising Parameters", 393b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Read Advertising Channel Tx Power", 394b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Set Advertising Data", 395b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Set Scan Response Data", 396b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Set Advertise Enable", 397b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Set Scan Parameters", 398b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Set Scan Enable", 399b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Create Connection", 400b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Create Connection Cancel", 401b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Read White List Size", 402b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Clear White List", 403b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Add Device To White List", 404b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Remove Device From White List", 405b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Connection Update", 406d88bf4263a7abb83082b8b492e3992e83df580a2Ville Tervo "LE Set Host Channel Classification", 407b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Read Channel Map", 408b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Read Remote Used Features", 409b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Encrypt", 410b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Rand", 411b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Start Encryption", 412b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Long Term Key Request Reply", 413b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Long Term Key Request Negative Reply", 414b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Read Supported States", 415b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Receiver Test", 416b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Transmitter Test", 417b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo "LE Test End", 418b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo}; 419b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 420895387d97f34fb28942059e1932a6efdc42bb6b0Marcel Holtmann#define ERROR_CODE_NUM 56 42113acd00538e98ea31757ea1146fb579b767bc58cMarcel Holtmannstatic char *error_code_str[ERROR_CODE_NUM + 1] = { 422d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Success", 423d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unknown HCI Command", 424d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unknown Connection Identifier", 425d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Hardware Failure", 426d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Page Timeout", 427d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Authentication Failure", 428d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "PIN or Key Missing", 429d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Memory Capacity Exceeded", 430d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Timeout", 431d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Limit Exceeded", 432d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Synchronous Connection to a Device Exceeded", 433d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "ACL Connection Already Exists", 434d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Command Disallowed", 435d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Rejected due to Limited Resources", 436d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Rejected due to Security Reasons", 437d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Rejected due to Unacceptable BD_ADDR", 438d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Accept Timeout Exceeded", 439d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unsupported Feature or Parameter Value", 440d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Invalid HCI Command Parameters", 44160864ce9e77ec159d0914fe8d938565493f08eebMarcel Holtmann "Remote User Terminated Connection", 442d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Remote Device Terminated Connection due to Low Resources", 443d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Remote Device Terminated Connection due to Power Off", 444d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Connection Terminated by Local Host", 445fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann "Repeated Attempts", 446d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Pairing Not Allowed", 447d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unknown LMP PDU", 448d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unsupported Remote Feature / Unsupported LMP Feature", 449d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "SCO Offset Rejected", 450d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "SCO Interval Rejected", 451d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "SCO Air Mode Rejected", 452d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Invalid LMP Parameters", 453d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unspecified Error", 454d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Unsupported LMP Parameter Value", 455d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Role Change Not Allowed", 456d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "LMP Response Timeout", 457d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "LMP Error Transaction Collision", 458d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "LMP PDU Not Allowed", 459d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Encryption Mode Not Acceptable", 460d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Link Key Can Not be Changed", 461d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Requested QoS Not Supported", 462d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Instant Passed", 463fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann "Pairing with Unit Key Not Supported", 464d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Different Transaction Collision", 465d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Reserved", 466d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "QoS Unacceptable Parameter", 467d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "QoS Rejected", 468d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Channel Classification Not Supported", 469d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Insufficient Security", 470d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Parameter out of Mandatory Range", 471d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Reserved", 472d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Role Switch Pending", 473d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Reserved", 474d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann "Reserved Slot Violation", 4751a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann "Role Switch Failed", 476895387d97f34fb28942059e1932a6efdc42bb6b0Marcel Holtmann "Extended Inquiry Response Too Large", 477b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "Simple Pairing Not Supported by Host", 478b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann "Host Busy - Pairing", 479d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann}; 480d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 481d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic char *status2str(uint8_t status) 482d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 483d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann char *str; 484d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 485d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (status <= ERROR_CODE_NUM) 486d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann str = error_code_str[status]; 487d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann else 488d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann str = "Unknown"; 489d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 490d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann return str; 491d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 492d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 493d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic char *opcode2str(uint16_t opcode) 49495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{ 4950d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint16_t ogf = cmd_opcode_ogf(opcode); 4960d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint16_t ocf = cmd_opcode_ocf(opcode); 4972bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky char *cmd; 49895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 4992bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky switch (ogf) { 5002bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky case OGF_INFO_PARAM: 5012bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky if (ocf <= CMD_INFO_NUM) 502d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd = cmd_info_str[ocf]; 5032bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky else 5042bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 5052bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 5062bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 5072bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky case OGF_HOST_CTL: 5082bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky if (ocf <= CMD_HOSTCTL_NUM) 509d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd = cmd_hostctl_str[ocf]; 5102bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky else 5112bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 5122bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 5132bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 5142bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky case OGF_LINK_CTL: 5152bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky if (ocf <= CMD_LINKCTL_NUM) 516d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd = cmd_linkctl_str[ocf]; 5172bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky else 5182bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 5192bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 5202bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 5212bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky case OGF_LINK_POLICY: 5222bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky if (ocf <= CMD_LINKPOL_NUM) 523d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd = cmd_linkpol_str[ocf]; 5242bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky else 5252bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 5262bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 5272bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 5282bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky case OGF_STATUS_PARAM: 5292bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky if (ocf <= CMD_STATUS_NUM) 530d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd = cmd_status_str[ocf]; 5312bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky else 5322bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 5332bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 5342bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 535cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann case OGF_TESTING_CMD: 5367df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann if (ocf <= CMD_TESTING_NUM) 5377df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann cmd = cmd_testing_str[ocf]; 5387df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann else 5397df30b303eea6e4e20255a8e3332338d7e17af46Marcel Holtmann cmd = "Unknown"; 540cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann break; 541cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann 542b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo case OGF_LE_CTL: 543b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo if (ocf <= CMD_LE_NUM) 544b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo cmd = cmd_le_str[ocf]; 545b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo else 546b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo cmd = "Unknown"; 547b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo break; 548b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 549cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann case OGF_VENDOR_CMD: 550cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann cmd = "Vendor"; 551cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann break; 552cb24bb6a44ae526d0631fcd36075776f66690e2aMarcel Holtmann 5532bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky default: 5542bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky cmd = "Unknown"; 5552bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky break; 5562bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky } 5572bb451888267740621e80a89abf15ad2821c8619Max Krasnyansky 558d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann return cmd; 559d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 560d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 561fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmannstatic char *linktype2str(uint8_t type) 562fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann{ 563fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann switch (type) { 564fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann case 0x00: 565fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann return "SCO"; 566fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann case 0x01: 567fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann return "ACL"; 568fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann case 0x02: 569fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann return "eSCO"; 570fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann default: 571fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann return "Unknown"; 572fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann } 573fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann} 574fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann 575ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic char *role2str(uint8_t role) 576ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 577ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (role) { 578ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x00: 579ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Master"; 580ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x01: 581ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Slave"; 582ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann default: 583ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Unknown"; 584ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 585ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 586ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 587ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic char *mode2str(uint8_t mode) 588ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 589ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (mode) { 590ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x00: 591ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Active"; 592ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x01: 593ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Hold"; 594ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x02: 595ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Sniff"; 596ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case 0x03: 597ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Park"; 598ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann default: 599ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return "Unknown"; 600ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 601ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 602ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 603d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic char *airmode2str(uint8_t mode) 604d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{ 605d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann switch (mode) { 606d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case 0x00: 607d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann return "u-law log"; 608d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case 0x01: 609d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann return "A-law log"; 610d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case 0x02: 611d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann return "CVSD"; 612d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case 0x04: 613d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann return "Transparent data"; 614d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann default: 615d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann return "Reserved"; 616d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann } 617d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann} 618d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 619646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmannstatic const char *bdaddrtype2str(uint8_t type) 620646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann{ 621646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann switch (type) { 622646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann case 0x00: 623646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann return "Public"; 624646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann case 0x01: 625646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann return "Random"; 626646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann default: 627646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann return "Reserved"; 628646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann } 629646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann} 630646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann 631646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmannstatic const char *evttype2str(uint8_t type) 632646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann{ 633646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann switch (type) { 634646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann case 0x00: 635646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann return "ADV_IND - Connectable undirected advertising"; 636646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann case 0x01: 637646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann return "ADV_DIRECT_IND - Connectable directed advertising"; 638646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann case 0x02: 639646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann return "ADV_SCAN_IND - Scannable undirected advertising"; 640646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann case 0x03: 641646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann return "ADV_NONCONN_IND - Non connectable undirected advertising"; 642646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann case 0x04: 643646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann return "SCAN_RSP - Scan Response"; 644646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann default: 645646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann return "Reserved"; 646646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann } 647646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann} 648646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann 649b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic char *keytype2str(uint8_t type) 650b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 651b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann switch (type) { 652b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x00: 653b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Combination Key"; 654b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x01: 655b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Local Unit Key"; 656b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x02: 657b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Remote Unit Key"; 658b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x03: 659b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Debug Combination Key"; 660b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x04: 661b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Unauthenticated Combination Key"; 662b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x05: 663b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Authenticated Combination Key"; 664b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x06: 665b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Changed Combination Key"; 666b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann default: 667b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Reserved"; 668b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann } 669b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 670b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 671b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic char *capability2str(uint8_t capability) 672b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 673b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann switch (capability) { 674b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x00: 675b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "DisplayOnly"; 676b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x01: 677b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "DisplayYesNo"; 678b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x02: 679b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "KeyboardOnly"; 680b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x03: 681b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "NoInputNoOutput"; 682b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann default: 683b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Reserved"; 684b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann } 685b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 686b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 687b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic char *authentication2str(uint8_t authentication) 688b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 689b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann switch (authentication) { 690b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x00: 691b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "No Bonding (No MITM Protection)"; 692b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x01: 693b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "No Bonding (MITM Protection)"; 694b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x02: 695b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Dedicated Bonding (No MITM Protection)"; 696b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x03: 697b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Dedicated Bonding (MITM Protection)"; 698b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x04: 699b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "General Bonding (No MITM Protection)"; 700b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case 0x05: 701b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "General Bonding (MITM Protection)"; 702b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann default: 703b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return "Reserved"; 704b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann } 705b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 706b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 70718a8555accbbad5dc57f99303dc7718b69b3921cAndré Dieb Martinsstatic char *eventmask2str(const uint8_t mask[8]) 70806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{ 70906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins int i; 71006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 71106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins for (i = 0; i < 7; i++) { 71206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins if (mask[i] != 0x00) 71306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "Reserved"; 71406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins } 71506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 71606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins switch (mask[7]) { 71706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case 0x00: 71806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "No LE events specified"; 71906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case 0x01: 72006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "LE Connection Complete Event"; 72106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case 0x02: 72206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "LE Advertising Report Event"; 72306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case 0x04: 72406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "LE Connection Update Complete Event"; 72506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case 0x08: 72606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "LE Read Remote Used Features Complete Event"; 72706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case 0x10: 72806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "LE Long Term Key Request Event"; 72906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case 0x1F: 73006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "Default"; 73106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins default: 73206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "Reserved"; 73306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins } 73406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins} 73506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 73618a8555accbbad5dc57f99303dc7718b69b3921cAndré Dieb Martinsstatic char *lefeatures2str(const uint8_t features[8]) 73706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{ 73806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins if (features[0] & 0x01) 73906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "Link Layer supports LE Encryption"; 74006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 74106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "RFU"; 74206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins} 74306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 74406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic char *filterpolicy2str(uint8_t policy) 74506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{ 74606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins switch (policy) { 74706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case 0x00: 74806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "Allow scan from any, connection from any"; 74906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case 0x01: 75006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "Allow scan from white list, connection from any"; 75106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case 0x02: 75206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "Allow scan from any, connection from white list"; 75306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case 0x03: 75406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "Allow scan and connection from white list"; 75506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins default: 75606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return "Reserved"; 75706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins } 75806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins} 75906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 760e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmannstatic inline void ext_inquiry_response_dump(int level, struct frame *frm) 761e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann{ 762e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann void *ptr = frm->ptr; 763e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann uint32_t len = frm->len; 764e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann uint8_t type, length; 765e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann char *str; 766e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann int i; 767e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 768e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann length = get_u8(frm); 769e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 770e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann while (length > 0) { 771e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann type = get_u8(frm); 772e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann length--; 773e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 774e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann switch (type) { 77507efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann case 0x01: 77607efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann p_indent(level, frm); 77707efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann printf("Flags:"); 77807efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann for (i = 0; i < length; i++) 77907efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann printf(" 0x%2.2x", *((uint8_t *) (frm->ptr + i))); 78007efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann printf("\n"); 78107efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann break; 78207efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann 78307efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann case 0x02: 78407efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann case 0x03: 78507efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann p_indent(level, frm); 78607efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann printf("%s service classes:", 78707efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann type == 0x02 ? "Shortened" : "Complete"); 78807efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann for (i = 0; i < length / 2; i++) { 78907efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann uint16_t val = btohs(bt_get_unaligned((uint16_t *) (frm->ptr + (i * 2)))); 79007efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann printf(" 0x%4.4x", val); 79107efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann } 79207efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann printf("\n"); 79307efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann break; 79407efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann 795e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann case 0x08: 796e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann case 0x09: 797e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann str = malloc(length + 1); 798e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann if (str) { 799ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann snprintf(str, length + 1, "%s", (char *) frm->ptr); 800e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann for (i = 0; i < length; i++) 80107efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann if (!isprint(str[i])) 80207efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann str[i] = '.'; 803e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann p_indent(level, frm); 804e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann printf("%s local name: \'%s\'\n", 805e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann type == 0x08 ? "Shortened" : "Complete", str); 806e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann free(str); 807e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann } 808e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann break; 809e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 81007efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann case 0x0a: 81107efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann p_indent(level, frm); 81207efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann printf("TX power level: %d\n", *((uint8_t *) frm->ptr)); 81307efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann break; 81407efe9a63e052505d5fed13005337b7c7a6e33e1Marcel Holtmann 815e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann default: 816e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann p_indent(level, frm); 817e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann printf("Unknown type 0x%02x with %d bytes data\n", 818e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann type, length); 819e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann break; 820e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann } 821e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 822e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann frm->ptr += length; 823e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann frm->len -= length; 824e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 825e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann length = get_u8(frm); 826e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann } 827e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 828e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann frm->ptr = ptr + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE); 829e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann frm->len = len + (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE); 830e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann} 831e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann 83290480219be366c65e68ae8612de7a361027e751aMarcel Holtmannstatic inline void bdaddr_command_dump(int level, struct frame *frm) 83390480219be366c65e68ae8612de7a361027e751aMarcel Holtmann{ 83490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann bdaddr_t *bdaddr = frm->ptr; 83590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann char addr[18]; 83690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann 83790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann frm->ptr += sizeof(bdaddr_t); 83890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann frm->len -= sizeof(bdaddr_t); 83990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann 84090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann p_indent(level, frm); 841bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(bdaddr, addr); 842e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann printf("bdaddr %s\n", addr); 84390480219be366c65e68ae8612de7a361027e751aMarcel Holtmann 84490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann raw_dump(level, frm); 84590480219be366c65e68ae8612de7a361027e751aMarcel Holtmann} 84690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann 847b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void generic_command_dump(int level, struct frame *frm) 848b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 849b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann uint16_t handle = btohs(htons(get_u16(frm))); 850b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 851b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 852b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("handle %d\n", handle); 853b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 854b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann raw_dump(level, frm); 855b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 856b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 857b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void generic_write_mode_dump(int level, struct frame *frm) 858b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 859b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann uint8_t mode = get_u8(frm); 860b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 861b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 862b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("mode 0x%2.2x\n", mode); 863b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 864b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 865ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void inquiry_dump(int level, struct frame *frm) 866ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 867ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann inquiry_cp *cp = frm->ptr; 868ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 869ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 870ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("lap 0x%2.2x%2.2x%2.2x len %d num %d\n", 871ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp); 872ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 873ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 874ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void periodic_inquiry_dump(int level, struct frame *frm) 875ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 876ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann periodic_inquiry_cp *cp = frm->ptr; 877ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 878ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 879ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("max %d min %d lap 0x%2.2x%2.2x%2.2x len %d num %d\n", 880ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann btohs(cp->max_period), btohs(cp->min_period), 881ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp); 882ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 883ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 884ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void create_conn_dump(int level, struct frame *frm) 885ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 886ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann create_conn_cp *cp = frm->ptr; 887ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t ptype = btohs(cp->pkt_type); 888ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t clkoffset = btohs(cp->clock_offset); 889ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18], *str; 890ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 891ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 892bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&cp->bdaddr, addr); 893ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s ptype 0x%4.4x rswitch 0x%2.2x clkoffset 0x%4.4x%s\n", 894ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann addr, ptype, cp->role_switch, 895ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : ""); 896ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 897ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann str = hci_ptypetostr(ptype); 898ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (str) { 899ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 900ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Packet type: %s\n", str); 901ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann free(str); 902ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 903ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 904ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 905ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void disconnect_dump(int level, struct frame *frm) 906ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 907ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann disconnect_cp *cp = frm->ptr; 908ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 909ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 910ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("handle %d reason 0x%2.2x\n", btohs(cp->handle), cp->reason); 911ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 912ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 913ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Reason: %s\n", status2str(cp->reason)); 914ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 915ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 916ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void add_sco_dump(int level, struct frame *frm) 917ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 918ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann add_sco_cp *cp = frm->ptr; 919ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t ptype = btohs(cp->pkt_type); 920ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char *str; 921ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 922ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 923ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("handle %d ptype 0x%4.4x\n", btohs(cp->handle), ptype); 924ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 925ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann str = hci_ptypetostr(ptype); 926ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (str) { 927ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 928ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Packet type: %s\n", str); 929ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann free(str); 930ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 931ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 932ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 933ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void accept_conn_req_dump(int level, struct frame *frm) 934ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 935ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann accept_conn_req_cp *cp = frm->ptr; 936ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 937ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 938ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 939bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&cp->bdaddr, addr); 940ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s role 0x%2.2x\n", addr, cp->role); 941ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 942ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 943ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Role: %s\n", role2str(cp->role)); 944ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 945ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 946ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void reject_conn_req_dump(int level, struct frame *frm) 947ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 948ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann reject_conn_req_cp *cp = frm->ptr; 949ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 950ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 951ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 952bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&cp->bdaddr, addr); 953ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s reason 0x%2.2x\n", addr, cp->reason); 954ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 955ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 956ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Reason: %s\n", status2str(cp->reason)); 957ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 958ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 959ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_reply_dump(int level, struct frame *frm) 960ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 961ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann pin_code_reply_cp *cp = frm->ptr; 962ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18], pin[17]; 963ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 964ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 965bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&cp->bdaddr, addr); 966ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann memset(pin, 0, sizeof(pin)); 967a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann if (parser.flags & DUMP_NOVENDOR) 968a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann memset(pin, '*', cp->pin_len); 969a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann else 970a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann memcpy(pin, cp->pin_code, cp->pin_len); 971ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s len %d pin \'%s\'\n", addr, cp->pin_len, pin); 972ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 973ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 974ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_reply_dump(int level, struct frame *frm) 975ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 976ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann link_key_reply_cp *cp = frm->ptr; 977ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 978ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 979ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 980ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 981bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&cp->bdaddr, addr); 98244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("bdaddr %s key ", addr); 983ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 16; i++) 984a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann if (parser.flags & DUMP_NOVENDOR) 985a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann printf("**"); 986a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann else 987a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann printf("%2.2X", cp->link_key[i]); 988ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("\n"); 989ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 990ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 991ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_neg_reply_dump(int level, struct frame *frm) 992ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 993ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann bdaddr_t *bdaddr = frm->ptr; 994ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 995ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 996ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 997bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(bdaddr, addr); 998ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s\n", addr); 999ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1000ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1001b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void user_passkey_reply_dump(int level, struct frame *frm) 1002b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 1003b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann user_passkey_reply_cp *cp = frm->ptr; 1004b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann char addr[18]; 1005b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1006b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 1007b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_ba2str(&cp->bdaddr, addr); 1008b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("bdaddr %s passkey %d\n", addr, btohl(cp->passkey)); 1009b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 1010b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1011b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void remote_oob_data_reply_dump(int level, struct frame *frm) 1012b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 1013b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann remote_oob_data_reply_cp *cp = frm->ptr; 1014b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann char addr[18]; 1015b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann int i; 1016b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1017b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 1018b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_ba2str(&cp->bdaddr, addr); 1019b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("bdaddr %s\n", addr); 1020b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1021b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 1022b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("hash 0x"); 1023b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann for (i = 0; i < 16; i++) 1024b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("%02x", cp->hash[i]); 1025b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("\n"); 1026b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1027b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 1028b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("randomizer 0x"); 1029b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann for (i = 0; i < 16; i++) 1030b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("%02x", cp->randomizer[i]); 1031b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("\n"); 1032b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 1033b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1034b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void io_capability_reply_dump(int level, struct frame *frm) 1035b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 1036b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann io_capability_reply_cp *cp = frm->ptr; 1037b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann char addr[18]; 1038b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1039b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 1040b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_ba2str(&cp->bdaddr, addr); 1041b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("bdaddr %s capability 0x%2.2x oob 0x%2.2x auth 0x%2.2x\n", 1042b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann addr, cp->capability, cp->oob_data, 1043b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann cp->authentication); 1044b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1045b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 1046b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("Capability: %s (OOB data %s)\n", 1047b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann capability2str(cp->capability), 1048b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann cp->oob_data == 0x00 ? "not present" : "available"); 1049b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1050b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 1051b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("Authentication: %s\n", authentication2str(cp->authentication)); 1052b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 1053b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1054ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void set_conn_encrypt_dump(int level, struct frame *frm) 1055ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1056ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann set_conn_encrypt_cp *cp = frm->ptr; 1057ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1058ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1059ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("handle %d encrypt 0x%2.2x\n", btohs(cp->handle), cp->encrypt); 1060ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1061ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1062ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void remote_name_req_dump(int level, struct frame *frm) 1063ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1064ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann remote_name_req_cp *cp = frm->ptr; 1065ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t clkoffset = btohs(cp->clock_offset); 1066ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 1067ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1068ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1069bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&cp->bdaddr, addr); 107072e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann printf("bdaddr %s mode %d clkoffset 0x%4.4x%s\n", 107172e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann addr, cp->pscan_rep_mode, 107272e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : ""); 1073ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1074ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 107517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_dump(int level, struct frame *frm) 107617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 107717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann master_link_key_cp *cp = frm->ptr; 107817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 107917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 108017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("flag %d\n", cp->key_flag); 108117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 108217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 108317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_dump(int level, struct frame *frm) 108417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 108517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_remote_ext_features_cp *cp = frm->ptr; 108617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 1087e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann p_indent(level, frm); 1088e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann printf("handle %d page %d\n", btohs(cp->handle), cp->page_num); 108917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 109017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 1091c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmannstatic inline void setup_sync_conn_dump(int level, struct frame *frm) 1092c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann{ 1093c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann setup_sync_conn_cp *cp = frm->ptr; 1094c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann 1095c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann p_indent(level, frm); 1096cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly printf("handle %d voice setting 0x%4.4x ptype 0x%4.4x\n", 1097cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly btohs(cp->handle), btohs(cp->voice_setting), 1098cc26e121e2aaca26217ace63fb15c263048b565fNick Pelly btohs(cp->pkt_type)); 1099c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann} 1100c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann 1101c7f436764386ca845317b678f3330340ccd838b8Inga Stotlandstatic inline void create_physical_link_dump(int level, struct frame *frm) 1102c7f436764386ca845317b678f3330340ccd838b8Inga Stotland{ 1103c7f436764386ca845317b678f3330340ccd838b8Inga Stotland create_physical_link_cp *cp = frm->ptr; 1104c7f436764386ca845317b678f3330340ccd838b8Inga Stotland int i; 1105c7f436764386ca845317b678f3330340ccd838b8Inga Stotland 1106c7f436764386ca845317b678f3330340ccd838b8Inga Stotland p_indent(level, frm); 1107c7f436764386ca845317b678f3330340ccd838b8Inga Stotland 1108c7f436764386ca845317b678f3330340ccd838b8Inga Stotland printf("handle %d key length %d key type %d\n", 1109c7f436764386ca845317b678f3330340ccd838b8Inga Stotland cp->handle, cp->key_length, cp->key_type); 1110c7f436764386ca845317b678f3330340ccd838b8Inga Stotland printf("key "); 1111c7f436764386ca845317b678f3330340ccd838b8Inga Stotland 1112c7f436764386ca845317b678f3330340ccd838b8Inga Stotland for (i = 0; i < cp->key_length && cp->key_length < 32; i++) 1113c7f436764386ca845317b678f3330340ccd838b8Inga Stotland printf("%2.2x", cp->key[i]); 1114c7f436764386ca845317b678f3330340ccd838b8Inga Stotland printf("\n"); 1115c7f436764386ca845317b678f3330340ccd838b8Inga Stotland} 1116c7f436764386ca845317b678f3330340ccd838b8Inga Stotland 1117c7f436764386ca845317b678f3330340ccd838b8Inga Stotlandstatic inline void create_logical_link_dump(int level, struct frame *frm) 1118c7f436764386ca845317b678f3330340ccd838b8Inga Stotland{ 1119c7f436764386ca845317b678f3330340ccd838b8Inga Stotland create_logical_link_cp *cp = frm->ptr; 1120c7f436764386ca845317b678f3330340ccd838b8Inga Stotland int i; 1121c7f436764386ca845317b678f3330340ccd838b8Inga Stotland 1122c7f436764386ca845317b678f3330340ccd838b8Inga Stotland p_indent(level, frm); 1123c7f436764386ca845317b678f3330340ccd838b8Inga Stotland 1124c7f436764386ca845317b678f3330340ccd838b8Inga Stotland printf("handle %d\n", cp->handle); 1125c7f436764386ca845317b678f3330340ccd838b8Inga Stotland printf("tx_flow "); 1126c7f436764386ca845317b678f3330340ccd838b8Inga Stotland for (i = 0; i < 16; i++) 1127c7f436764386ca845317b678f3330340ccd838b8Inga Stotland printf("%2.2x", cp->tx_flow[i]); 1128c7f436764386ca845317b678f3330340ccd838b8Inga Stotland printf("\nrx_flow "); 1129c7f436764386ca845317b678f3330340ccd838b8Inga Stotland for (i = 0; i < 16; i++) 1130c7f436764386ca845317b678f3330340ccd838b8Inga Stotland printf("%2.2x", cp->rx_flow[i]); 1131c7f436764386ca845317b678f3330340ccd838b8Inga Stotland printf("\n"); 1132c7f436764386ca845317b678f3330340ccd838b8Inga Stotland} 1133c7f436764386ca845317b678f3330340ccd838b8Inga Stotland 11349ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void hold_mode_dump(int level, struct frame *frm) 11359ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{ 11369ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann hold_mode_cp *cp = frm->ptr; 11379ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann 11389ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann p_indent(level, frm); 11399ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann printf("handle %d max %d min %d\n", btohs(cp->handle), 11409ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann btohs(cp->max_interval), btohs(cp->min_interval)); 11419ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann} 11429ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann 11439ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmannstatic inline void sniff_mode_dump(int level, struct frame *frm) 11449ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann{ 11459ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann sniff_mode_cp *cp = frm->ptr; 11469ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann 11479ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann p_indent(level, frm); 11489ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann printf("handle %d max %d min %d attempt %d timeout %d\n", 11499ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann btohs(cp->handle), btohs(cp->max_interval), 11509ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann btohs(cp->min_interval), btohs(cp->attempt), btohs(cp->timeout)); 11519ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann} 11529ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann 11534894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmannstatic inline void qos_setup_dump(int level, struct frame *frm) 11544894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann{ 11554894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann qos_setup_cp *cp = frm->ptr; 11564894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann 11574894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann p_indent(level, frm); 11584894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann printf("handle %d flags 0x%2.2x\n", btohs(cp->handle), cp->flags); 11594894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann 11604894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann p_indent(level, frm); 11614894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann printf("Service type: %d\n", cp->qos.service_type); 11624894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann p_indent(level, frm); 11634894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann printf("Token rate: %d\n", btohl(cp->qos.token_rate)); 11644894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann p_indent(level, frm); 11654894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann printf("Peak bandwith: %d\n", btohl(cp->qos.peak_bandwidth)); 11664894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann p_indent(level, frm); 11674894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann printf("Latency: %d\n", btohl(cp->qos.latency)); 11684894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann p_indent(level, frm); 11694894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann printf("Delay variation: %d\n", btohl(cp->qos.delay_variation)); 11704894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann} 11714894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann 1172ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_link_policy_dump(int level, struct frame *frm) 1173ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1174ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_link_policy_cp *cp = frm->ptr; 1175ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t policy = btohs(cp->policy); 1176ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char *str; 1177ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1178ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1179ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("handle %d policy 0x%2.2x\n", btohs(cp->handle), policy); 1180ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1181ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann str = hci_lptostr(policy); 1182ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (str) { 1183ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1184ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Link policy: %s\n", str); 1185ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann free(str); 1186ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1187ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1188ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1189f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmannstatic inline void write_default_link_policy_dump(int level, struct frame *frm) 1190f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann{ 1191f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann uint16_t policy = btohs(htons(get_u16(frm))); 1192f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann char *str; 1193f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann 1194f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann p_indent(level, frm); 1195f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann printf("policy 0x%2.2x\n", policy); 1196f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann 1197f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann str = hci_lptostr(policy); 1198f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann if (str) { 1199f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann p_indent(level, frm); 1200f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann printf("Link policy: %s\n", str); 1201f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann free(str); 1202f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann } 1203f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann} 1204f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann 12053b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void sniff_subrating_dump(int level, struct frame *frm) 1206120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann{ 12073b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann sniff_subrating_cp *cp = frm->ptr; 1208120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann 1209120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann p_indent(level, frm); 1210120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann printf("handle %d\n", btohs(cp->handle)); 1211120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann 1212120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann p_indent(level, frm); 1213f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann printf("max latency %d\n", btohs(cp->max_latency)); 1214120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann 1215120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann p_indent(level, frm); 1216120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann printf("min timeout remote %d local %d\n", 1217120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann btohs(cp->min_remote_timeout), btohs(cp->min_local_timeout)); 1218120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann} 1219120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann 122044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_mask_dump(int level, struct frame *frm) 122144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 122244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann set_event_mask_cp *cp = frm->ptr; 122344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann int i; 122444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 122544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 122644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Mask: 0x"); 122744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann for (i = 0; i < 8; i++) 122844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("%2.2x", cp->mask[i]); 122944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("\n"); 123044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 123144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 123244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void set_event_flt_dump(int level, struct frame *frm) 123344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 123444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann set_event_flt_cp *cp = frm->ptr; 1235cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann uint8_t dev_class[3], dev_mask[3]; 1236cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann char addr[18]; 123744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 123844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 1239662fd6cd30f3adbfef7c39e2bfcfb1107d96ebbbMarcel Holtmann printf("type %d condition %d\n", cp->flt_type, 1240662fd6cd30f3adbfef7c39e2bfcfb1107d96ebbbMarcel Holtmann (cp->flt_type == 0) ? 0 : cp->cond_type); 124144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 124244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann switch (cp->flt_type) { 124344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case FLT_CLEAR_ALL: 124451c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann p_indent(level, frm); 124544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Clear all filters\n"); 124644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann break; 124744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case FLT_INQ_RESULT: 124851c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann p_indent(level, frm); 124944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Inquiry result"); 125044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann switch (cp->cond_type) { 125144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case INQ_RESULT_RETURN_ALL: 1252cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann printf(" for all devices\n"); 1253cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann break; 125444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case INQ_RESULT_RETURN_CLASS: 1255cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann memcpy(dev_class, cp->condition, 3); 1256cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann memcpy(dev_mask, cp->condition + 3, 3); 1257cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann printf(" with class 0x%2.2x%2.2x%2.2x mask 0x%2.2x%2.2x%2.2x\n", 1258cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann dev_class[2], dev_class[1], dev_class[0], 1259cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann dev_mask[2], dev_mask[1], dev_mask[0]); 1260cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann break; 126144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case INQ_RESULT_RETURN_BDADDR: 1262bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str((bdaddr_t *) cp->condition, addr); 1263cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann printf(" with bdaddr %s\n", addr); 1264cfdc4bc6b3f7bd814049e31d11c901f8ad95f9a1Marcel Holtmann break; 126544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann default: 126644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("\n"); 126744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann break; 126844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 126944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann break; 127044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case FLT_CONN_SETUP: 127151c927b7eb7f8f78d31d3e8cfe218649c29eb44dMarcel Holtmann p_indent(level, frm); 127244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Connection setup"); 127344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann switch (cp->cond_type) { 127444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case CONN_SETUP_ALLOW_ALL: 127544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case CONN_SETUP_ALLOW_CLASS: 127644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case CONN_SETUP_ALLOW_BDADDR: 127744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann default: 127844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("\n"); 127944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann break; 128044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 128144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann break; 128244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 128344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 128444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 128544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_pin_type_dump(int level, struct frame *frm) 128644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 128744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann write_pin_type_cp *cp = frm->ptr; 128844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 128944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 129044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("type %d\n", cp->pin_type); 129144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 129244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 129344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void request_stored_link_key_dump(int level, struct frame *frm) 129444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 129544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann read_stored_link_key_cp *cp = frm->ptr; 129644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann char addr[18]; 129744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 129844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 1299bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&cp->bdaddr, addr); 130044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("bdaddr %s all %d\n", addr, cp->read_all); 130144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 130244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 130344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void return_link_keys_dump(int level, struct frame *frm) 130444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 130544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann uint8_t num = get_u8(frm); 130644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann uint8_t key[16]; 130744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann char addr[18]; 130844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann int i, n; 130944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 131044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann for (n = 0; n < num; n++) { 1311bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(frm->ptr, addr); 131244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann memcpy(key, frm->ptr + 6, 16); 131344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 131444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 131544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("bdaddr %s key ", addr); 131644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann for (i = 0; i < 16; i++) 1317a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann if (parser.flags & DUMP_NOVENDOR) 1318a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann printf("**"); 1319a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann else 1320a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann printf("%2.2X", key[i]); 132144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("\n"); 132244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 132344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann frm->ptr += 2; 132444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann frm->len -= 2; 132544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 132644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 132744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 1328ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void change_local_name_dump(int level, struct frame *frm) 1329ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1330ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann change_local_name_cp *cp = frm->ptr; 1331ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char name[249]; 1332ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 1333ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1334ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann memset(name, 0, sizeof(name)); 1335ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 248 && cp->name[i]; i++) 1336ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (isprint(cp->name[i])) 1337ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann name[i] = cp->name[i]; 1338ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann else 1339ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann name[i] = '.'; 1340ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1341ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1342ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("name \'%s\'\n", name); 1343ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1344ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1345ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_class_of_dev_dump(int level, struct frame *frm) 1346ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1347ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_class_of_dev_cp *cp = frm->ptr; 1348ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1349ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1350ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("class 0x%2.2x%2.2x%2.2x\n", 1351120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann cp->dev_class[2], cp->dev_class[1], cp->dev_class[0]); 1352ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1353ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1354ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void write_voice_setting_dump(int level, struct frame *frm) 1355ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1356ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_voice_setting_cp *cp = frm->ptr; 1357ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1358ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1359ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("voice setting 0x%4.4x\n", btohs(cp->voice_setting)); 1360ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 1361ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1362fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void write_current_iac_lap_dump(int level, struct frame *frm) 1363fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{ 1364fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann write_current_iac_lap_cp *cp = frm->ptr; 1365fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann int i; 1366fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann 1367fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann for (i = 0; i < cp->num_current_iac; i++) { 1368fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann p_indent(level, frm); 1369fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf("IAC 0x%2.2x%2.2x%2.2x", cp->lap[i][2], cp->lap[i][1], cp->lap[i][0]); 1370fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann if (cp->lap[i][2] == 0x9e && cp->lap[i][1] == 0x8b) { 1371fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann switch (cp->lap[i][0]) { 1372fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case 0x00: 1373fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf(" (Limited Inquiry Access Code)"); 1374fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann break; 1375fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case 0x33: 1376fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf(" (General Inquiry Access Code)"); 1377fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann break; 1378fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 1379fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 1380fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf("\n"); 1381fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 1382fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann} 1383fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann 138469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void write_scan_enable_dump(int level, struct frame *frm) 138569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{ 138669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann uint8_t enable = get_u8(frm); 138769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann 138869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann p_indent(level, frm); 138969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann printf("enable %d\n", enable); 139069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann} 139169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann 1392d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_timeout_dump(int level, struct frame *frm) 1393d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{ 1394d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann write_page_timeout_cp *cp = frm->ptr; 1395d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 1396d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 1397d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("timeout %d\n", btohs(cp->timeout)); 1398d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann} 1399d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 1400d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void write_page_activity_dump(int level, struct frame *frm) 1401d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{ 1402d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann write_page_activity_cp *cp = frm->ptr; 1403d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 1404d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 1405d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("interval %d window %d\n", btohs(cp->interval), btohs(cp->window)); 1406d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann} 1407d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 1408a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void write_inquiry_scan_type_dump(int level, struct frame *frm) 1409a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{ 1410a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann write_inquiry_scan_type_cp *cp = frm->ptr; 1411a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann 1412a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann p_indent(level, frm); 1413a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann printf("type %d\n", cp->type); 1414a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann} 1415a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann 1416f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmannstatic inline void write_inquiry_mode_dump(int level, struct frame *frm) 1417f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann{ 1418f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann write_inquiry_mode_cp *cp = frm->ptr; 1419f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann 1420f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann p_indent(level, frm); 1421f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann printf("mode %d\n", cp->mode); 1422f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann} 1423f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann 1424994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmannstatic inline void set_afh_classification_dump(int level, struct frame *frm) 1425994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann{ 1426994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann set_afh_classification_cp *cp = frm->ptr; 1427994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann int i; 1428994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann 1429994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann p_indent(level, frm); 1430994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann printf("map 0x"); 1431994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann for (i = 0; i < 10; i++) 1432994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann printf("%02x", cp->map[i]); 1433994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann printf("\n"); 1434994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann} 1435994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann 14366eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void write_link_supervision_timeout_dump(int level, struct frame *frm) 14376eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{ 14386eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann write_link_supervision_timeout_cp *cp = frm->ptr; 14396eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14406eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 14416eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("handle %d timeout %d\n", 1442d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann btohs(cp->handle), btohs(cp->timeout)); 14436eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann} 14446eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14451a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void write_ext_inquiry_response_dump(int level, struct frame *frm) 14461a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{ 14471a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann write_ext_inquiry_response_cp *cp = frm->ptr; 14481a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann 14491a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann p_indent(level, frm); 14501a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann printf("fec 0x%2.2x\n", cp->fec); 1451f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann 1452f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann frm->ptr++; 1453f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann frm->len--; 1454f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann 1455e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann ext_inquiry_response_dump(level, frm); 14561a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann} 14571a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann 14583b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void write_inquiry_transmit_power_level_dump(int level, struct frame *frm) 14593b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{ 14603b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann write_inquiry_transmit_power_level_cp *cp = frm->ptr; 14613b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 14623b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann p_indent(level, frm); 14633b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann printf("level %d\n", cp->level); 14643b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann} 14653b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 14663b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void write_default_error_data_reporting_dump(int level, struct frame *frm) 14673b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{ 14683b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann write_default_error_data_reporting_cp *cp = frm->ptr; 14693b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 14703b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann p_indent(level, frm); 14713b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann printf("reporting %d\n", cp->reporting); 14723b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann} 14733b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 14743b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void enhanced_flush_dump(int level, struct frame *frm) 14753b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{ 14763b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann enhanced_flush_cp *cp = frm->ptr; 14773b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 14783b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann p_indent(level, frm); 14793b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann printf("handle %d type %d\n", btohs(cp->handle), cp->type); 14803b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann} 14813b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 1482b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void send_keypress_notify_dump(int level, struct frame *frm) 1483b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 1484b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann send_keypress_notify_cp *cp = frm->ptr; 1485b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann char addr[18]; 1486b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1487b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 1488b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_ba2str(&cp->bdaddr, addr); 1489b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("bdaddr %s type %d\n", addr, cp->type); 1490b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 1491b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 14926eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void request_transmit_power_level_dump(int level, struct frame *frm) 14936eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{ 14946eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_transmit_power_level_cp *cp = frm->ptr; 14956eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 14966eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 14976eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("handle %d type %d (%s)\n", 1498120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann btohs(cp->handle), cp->type, 1499120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann cp->type ? "maximum" : "current"); 15006eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann} 15016eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 150217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void request_local_ext_features_dump(int level, struct frame *frm) 150317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 150417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_local_ext_features_cp *cp = frm->ptr; 150517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 150617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 150717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("page %d\n", cp->page_num); 150817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 150917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 1510f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void request_clock_dump(int level, struct frame *frm) 1511f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{ 1512f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_clock_cp *cp = frm->ptr; 1513f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1514f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 1515f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("handle %d which %d (%s)\n", 1516120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann btohs(cp->handle), cp->which_clock, 1517120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann cp->which_clock ? "piconet" : "local"); 1518f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann} 1519f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 15202315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmannstatic inline void host_buffer_size_dump(int level, struct frame *frm) 15212315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann{ 15222315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann host_buffer_size_cp *cp = frm->ptr; 15232315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann 15242315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann p_indent(level, frm); 15252315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann printf("ACL MTU %d:%d SCO MTU %d:%d\n", 15262315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann btohs(cp->acl_mtu), btohs(cp->acl_max_pkt), 15272315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann cp->sco_mtu, btohs(cp->sco_max_pkt)); 15282315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann} 15292315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann 15301b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmannstatic inline void num_comp_pkts_dump(int level, struct frame *frm) 15311b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann{ 15321b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann uint8_t num = get_u8(frm); 15331b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann uint16_t handle, packets; 15341b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann int i; 15351b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann 15361b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann for (i = 0; i < num; i++) { 15371b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann handle = btohs(htons(get_u16(frm))); 15381b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann packets = btohs(htons(get_u16(frm))); 15391b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann 15401b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann p_indent(level, frm); 15411b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann printf("handle %d packets %d\n", handle, packets); 15421b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann } 15431b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann} 15441b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann 1545b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void le_create_connection_dump(int level, struct frame *frm) 1546b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{ 1547b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo char addr[18]; 1548b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo le_create_connection_cp *cp = frm->ptr; 1549b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 1550b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo p_indent(level, frm); 1551b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo p_ba2str(&cp->peer_bdaddr, addr); 1552b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo printf("bdaddr %s type %d\n", addr, cp->peer_bdaddr_type); 1553b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo} 1554b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 155506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_event_mask_dump(int level, struct frame *frm) 155606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{ 155706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins int i; 155806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_set_event_mask_cp *cp = frm->ptr; 155906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 156006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 156106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("mask 0x"); 156206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins for (i = 0; i < 8; i++) 156306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("%.2x", cp->mask[i]); 156406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 156506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf(" (%s)\n", eventmask2str(cp->mask)); 156606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins} 156706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 156806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_random_address_dump(int level, struct frame *frm) 156906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{ 157006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins char addr[18]; 157106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_set_random_address_cp *cp = frm->ptr; 157206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 157306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 157406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_ba2str(&cp->bdaddr, addr); 157506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("bdaddr %s\n", addr); 157606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins} 157706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 157806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 157906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_advertising_parameters_dump(int level, struct frame *frm) 158006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{ 158106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins char addr[18]; 158206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_set_advertising_parameters_cp *cp = frm->ptr; 158306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 158406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 1585713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins printf("min %.3fms, max %.3fms\n", btohs(cp->min_interval) * 0.625, 1586713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins btohs(cp->max_interval) * 0.625); 158706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 158806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 158906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("type 0x%02x (%s) ownbdaddr 0x%02x (%s)\n", cp->advtype, 159006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins evttype2str(cp->advtype), cp->own_bdaddr_type, 159106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins bdaddrtype2str(cp->own_bdaddr_type)); 159206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 159306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 159406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_ba2str(&cp->direct_bdaddr, addr); 159506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("directbdaddr 0x%02x (%s) %s\n", cp->direct_bdaddr_type, 159606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins bdaddrtype2str(cp->direct_bdaddr_type), addr); 159706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 159806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 159906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("channelmap 0x%02x filterpolicy 0x%02x (%s)\n", 160006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins cp->chan_map, cp->filter, filterpolicy2str(cp->filter)); 160106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins} 160206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 160306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_scan_parameters_dump(int level, struct frame *frm) 160406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{ 160506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_set_scan_parameters_cp *cp = frm->ptr; 160606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 160706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 160806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("type 0x%02x (%s)\n", cp->type, 160906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins cp->type == 0x00 ? "passive" : "active"); 161006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 161106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 1612713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins printf("interval %.3fms window %.3fms\n", btohs(cp->interval) * 0.625, 1613713d10682f4232ada10f302b99feff63498d269cAndré Dieb Martins btohs(cp->window) * 0.625); 161406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 161506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 161606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("own address: 0x%02x (%s) policy: %s\n", cp->own_bdaddr_type, 161706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins bdaddrtype2str(cp->own_bdaddr_type), 161806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins (cp->filter == 0x00 ? "All" : 161906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins (cp->filter == 0x01 ? "white list only" : "reserved"))); 162006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins} 162106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 162206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_set_scan_enable_dump(int level, struct frame *frm) 162306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{ 162406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_set_scan_enable_cp *cp = frm->ptr; 162506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 162606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 162706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("value 0x%02x (%s)\n", cp->enable, 162806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins (cp->enable == 0x00 ? "scanning disabled" : 162906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins "scanning enabled")); 163006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 163106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 163206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("filter duplicates 0x%02x (%s)\n", cp->filter_dup, 163306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins (cp->filter_dup == 0x00 ? "disabled" : "enabled")); 163406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins} 163506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 1636d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void command_dump(int level, struct frame *frm) 1637d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1638d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann hci_command_hdr *hdr = frm->ptr; 1639d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t opcode = btohs(hdr->opcode); 1640d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t ogf = cmd_opcode_ogf(opcode); 1641d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t ocf = cmd_opcode_ocf(opcode); 1642d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1643d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (p_filter(FILT_HCI)) 1644d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann return; 1645d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 16467b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR)) 16477b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann return; 164865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 16497b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann p_indent(level, frm); 1650803752117135528b1adebf0fa045596e188a996dMarcel Holtmann printf("HCI Command: %s (0x%2.2x|0x%4.4x) plen %d\n", 1651120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann opcode2str(opcode), ogf, ocf, hdr->plen); 165265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 165365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky frm->ptr += HCI_COMMAND_HDR_SIZE; 165465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky frm->len -= HCI_COMMAND_HDR_SIZE; 165565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 16567b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann if (ogf == OGF_VENDOR_CMD) { 16573b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann if (ocf == 0 && get_manufacturer() == 10) { 16587b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann csr_dump(level + 1, frm); 16597b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann return; 16607b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann } 1661be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } 1662be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann 16634f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann if (!(parser.flags & DUMP_VERBOSE)) { 16644f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann raw_dump(level, frm); 16654f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann return; 16664f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann } 16674f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann 1668ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ogf) { 1669ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OGF_LINK_CTL: 1670ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ocf) { 1671ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_INQUIRY: 1672ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann inquiry_dump(level + 1, frm); 1673ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1674ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_PERIODIC_INQUIRY: 1675ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann periodic_inquiry_dump(level + 1, frm); 1676ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1677ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_INQUIRY_CANCEL: 1678ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_EXIT_PERIODIC_INQUIRY: 1679ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1680ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_CREATE_CONN: 1681ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann create_conn_dump(level + 1, frm); 1682ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1683ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_DISCONNECT: 1684ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann disconnect_dump(level + 1, frm); 1685ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 168690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_CREATE_CONN_CANCEL: 168790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_REMOTE_NAME_REQ_CANCEL: 168890480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_ACCEPT_SYNC_CONN_REQ: 168990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann bdaddr_command_dump(level + 1, frm); 169090480219be366c65e68ae8612de7a361027e751aMarcel Holtmann return; 1691ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_ADD_SCO: 1692ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_SET_CONN_PTYPE: 1693ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann add_sco_dump(level + 1, frm); 1694acc2322e0bed89e8ada2564359a1a6d293c9d514Marcel Holtmann return; 1695ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_ACCEPT_CONN_REQ: 1696ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann accept_conn_req_dump(level + 1, frm); 1697ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1698ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_REJECT_CONN_REQ: 169990480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_REJECT_SYNC_CONN_REQ: 1700b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_IO_CAPABILITY_NEG_REPLY: 1701ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann reject_conn_req_dump(level + 1, frm); 1702ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1703ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_PIN_CODE_REPLY: 1704ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann pin_code_reply_dump(level + 1, frm); 1705ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1706ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_LINK_KEY_REPLY: 1707ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann link_key_reply_dump(level + 1, frm); 1708ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1709ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_PIN_CODE_NEG_REPLY: 1710ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_LINK_KEY_NEG_REPLY: 1711b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_USER_CONFIRM_REPLY: 1712b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_USER_CONFIRM_NEG_REPLY: 1713b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_USER_PASSKEY_NEG_REPLY: 1714b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_REMOTE_OOB_DATA_NEG_REPLY: 1715ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann pin_code_neg_reply_dump(level + 1, frm); 1716ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1717b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_USER_PASSKEY_REPLY: 1718b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann user_passkey_reply_dump(level + 1, frm); 1719b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return; 1720b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_REMOTE_OOB_DATA_REPLY: 1721b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann remote_oob_data_reply_dump(level + 1, frm); 1722b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return; 1723b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_IO_CAPABILITY_REPLY: 1724b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann io_capability_reply_dump(level + 1, frm); 1725b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return; 1726ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_SET_CONN_ENCRYPT: 1727ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann set_conn_encrypt_dump(level + 1, frm); 1728ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1729ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_AUTH_REQUESTED: 1730ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_CHANGE_CONN_LINK_KEY: 1731ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_REMOTE_FEATURES: 1732ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_REMOTE_VERSION: 1733ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_CLOCK_OFFSET: 173490480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_READ_LMP_HANDLE: 1735c7f436764386ca845317b678f3330340ccd838b8Inga Stotland case OCF_DISCONNECT_LOGICAL_LINK: 1736ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann generic_command_dump(level + 1, frm); 1737ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 173817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_MASTER_LINK_KEY: 173917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann master_link_key_dump(level + 1, frm); 174017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 174117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_READ_REMOTE_EXT_FEATURES: 174217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_remote_ext_features_dump(level + 1, frm); 174317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 1744ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_REMOTE_NAME_REQ: 1745ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann remote_name_req_dump(level + 1, frm); 1746ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1747c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann case OCF_SETUP_SYNC_CONN: 1748c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann setup_sync_conn_dump(level + 1, frm); 1749c1e2f4636b2658b89cc27deb21b2ddd3fbafb569Marcel Holtmann return; 1750c7f436764386ca845317b678f3330340ccd838b8Inga Stotland case OCF_CREATE_PHYSICAL_LINK: 1751c7f436764386ca845317b678f3330340ccd838b8Inga Stotland case OCF_ACCEPT_PHYSICAL_LINK: 1752c7f436764386ca845317b678f3330340ccd838b8Inga Stotland create_physical_link_dump(level + 1, frm); 1753c7f436764386ca845317b678f3330340ccd838b8Inga Stotland return; 1754c7f436764386ca845317b678f3330340ccd838b8Inga Stotland case OCF_CREATE_LOGICAL_LINK: 1755c7f436764386ca845317b678f3330340ccd838b8Inga Stotland case OCF_ACCEPT_LOGICAL_LINK: 1756c7f436764386ca845317b678f3330340ccd838b8Inga Stotland create_logical_link_dump(level + 1, frm); 1757c7f436764386ca845317b678f3330340ccd838b8Inga Stotland return; 1758ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1759ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann break; 1760ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1761ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OGF_LINK_POLICY: 1762ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ocf) { 17639ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann case OCF_HOLD_MODE: 17649ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann case OCF_PARK_MODE: 17659ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann hold_mode_dump(level + 1, frm); 17669ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann return; 17679ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann case OCF_SNIFF_MODE: 17689ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann sniff_mode_dump(level + 1, frm); 17699ec015999c457ba1ff49925708d5c93d4b0c2c20Marcel Holtmann return; 1770ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_EXIT_SNIFF_MODE: 1771ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_EXIT_PARK_MODE: 1772ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_ROLE_DISCOVERY: 1773ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_LINK_POLICY: 1774ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann generic_command_dump(level + 1, frm); 1775ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1776f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann case OCF_READ_DEFAULT_LINK_POLICY: 1777f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann return; 1778ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_SWITCH_ROLE: 1779ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann accept_conn_req_dump(level + 1, frm); 1780ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 17814894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann case OCF_QOS_SETUP: 17824894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann qos_setup_dump(level + 1, frm); 17834894165e8a8a4c91d6553b7a38c60092759e5287Marcel Holtmann return; 1784ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_WRITE_LINK_POLICY: 1785ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_link_policy_dump(level + 1, frm); 1786ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1787f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann case OCF_WRITE_DEFAULT_LINK_POLICY: 1788f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann write_default_link_policy_dump(level + 1, frm); 1789f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann return; 17903b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case OCF_SNIFF_SUBRATING: 17913b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann sniff_subrating_dump(level + 1, frm); 1792120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann return; 1793ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1794ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann break; 1795ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1796ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OGF_HOST_CTL: 1797ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ocf) { 179844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_RESET: 179944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_CREATE_NEW_UNIT_KEY: 180044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 180144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_SET_EVENT_MASK: 1802c7f436764386ca845317b678f3330340ccd838b8Inga Stotland case OCF_SET_EVENT_MASK_PAGE_2: 180344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann set_event_mask_dump(level + 1, frm); 180444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 180544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_SET_EVENT_FLT: 180644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann set_event_flt_dump(level + 1, frm); 180744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 180844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_WRITE_PIN_TYPE: 180944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann write_pin_type_dump(level + 1, frm); 181044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 181144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_READ_STORED_LINK_KEY: 181244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_DELETE_STORED_LINK_KEY: 181344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann request_stored_link_key_dump(level + 1, frm); 181444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 181544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_WRITE_STORED_LINK_KEY: 181644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return_link_keys_dump(level + 1, frm); 181744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 1818ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_CHANGE_LOCAL_NAME: 1819ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann change_local_name_dump(level + 1, frm); 1820ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1821ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_WRITE_CLASS_OF_DEV: 1822ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_class_of_dev_dump(level + 1, frm); 1823ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1824ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_WRITE_VOICE_SETTING: 1825ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann write_voice_setting_dump(level + 1, frm); 1826ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 1827fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case OCF_WRITE_CURRENT_IAC_LAP: 1828fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann write_current_iac_lap_dump(level + 1, frm); 1829fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann return; 183069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_SCAN_ENABLE: 183169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_AUTH_ENABLE: 18328583de68ea3be3ada739dcc84d811fc752d45a03Marcel Holtmann case OCF_SET_CONTROLLER_TO_HOST_FC: 183369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann write_scan_enable_dump(level + 1, frm); 183469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann return; 1835c7f436764386ca845317b678f3330340ccd838b8Inga Stotland case OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT: 1836097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann case OCF_WRITE_CONN_ACCEPT_TIMEOUT: 1837d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_PAGE_TIMEOUT: 1838d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann write_page_timeout_dump(level + 1, frm); 1839d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann return; 1840d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_PAGE_ACTIVITY: 1841d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_INQ_ACTIVITY: 1842d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann write_page_activity_dump(level + 1, frm); 1843d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann return; 1844a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann case OCF_WRITE_INQUIRY_SCAN_TYPE: 1845a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann write_inquiry_scan_type_dump(level + 1, frm); 1846a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann return; 184769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_ENCRYPT_MODE: 1848f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_WRITE_INQUIRY_MODE: 1849f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_WRITE_AFH_MODE: 1850f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann write_inquiry_mode_dump(level + 1, frm); 1851f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann return; 1852994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann case OCF_SET_AFH_CLASSIFICATION: 1853994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann set_afh_classification_dump(level + 1, frm); 1854994875fdee06bd4c8a902db513ab6482371c0795Marcel Holtmann return; 18556eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_READ_TRANSMIT_POWER_LEVEL: 18566eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann request_transmit_power_level_dump(level + 1, frm); 18576eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 18582315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann case OCF_HOST_BUFFER_SIZE: 18592315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann host_buffer_size_dump(level + 1, frm); 18602315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann return; 18611b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann case OCF_HOST_NUM_COMP_PKTS: 18621b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann num_comp_pkts_dump(level + 1, frm); 18631b932dc7a7a586b3fdfb09dab10c116ec6f96324Marcel Holtmann return; 186444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_FLUSH: 18656eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_READ_LINK_SUPERVISION_TIMEOUT: 18663b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case OCF_REFRESH_ENCRYPTION_KEY: 1867c7f436764386ca845317b678f3330340ccd838b8Inga Stotland case OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT: 18686eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann generic_command_dump(level + 1, frm); 18696eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 18706eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_WRITE_LINK_SUPERVISION_TIMEOUT: 18716eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann write_link_supervision_timeout_dump(level + 1, frm); 18726eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 18731a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann case OCF_WRITE_EXT_INQUIRY_RESPONSE: 18741a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann write_ext_inquiry_response_dump(level + 1, frm); 18751a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann return; 1876b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_WRITE_SIMPLE_PAIRING_MODE: 1877c7f436764386ca845317b678f3330340ccd838b8Inga Stotland case OCF_WRITE_FLOW_CONTROL_MODE: 1878b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann generic_write_mode_dump(level + 1, frm); 1879b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return; 18803b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL: 18813b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann write_inquiry_transmit_power_level_dump(level + 1, frm); 18823b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann return; 18833b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING: 18843b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann write_default_error_data_reporting_dump(level + 1, frm); 18853b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann return; 18863b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case OCF_ENHANCED_FLUSH: 18873b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann enhanced_flush_dump(level + 1, frm); 18883b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann return; 1889b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_SEND_KEYPRESS_NOTIFY: 1890b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann send_keypress_notify_dump(level + 1, frm); 1891b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return; 1892ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1893ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann break; 189417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 189517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OGF_INFO_PARAM: 189617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann switch (ocf) { 189717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_READ_LOCAL_EXT_FEATURES: 189817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann request_local_ext_features_dump(level + 1, frm); 189917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 190017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 1901ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann break; 1902f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 1903f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann case OGF_STATUS_PARAM: 1904f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann switch (ocf) { 1905f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann case OCF_READ_LINK_QUALITY: 1906f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann case OCF_READ_RSSI: 1907f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann case OCF_READ_AFH_MAP: 1908f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann generic_command_dump(level + 1, frm); 1909f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 1910f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann case OCF_READ_CLOCK: 1911f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann request_clock_dump(level + 1, frm); 1912f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 1913f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } 1914f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann break; 1915b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 1916b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OGF_TESTING_CMD: 1917b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann switch (ocf) { 1918b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_WRITE_LOOPBACK_MODE: 1919b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE: 1920b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann generic_write_mode_dump(level + 1, frm); 1921b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return; 1922b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann } 1923b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann break; 1924b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 1925b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo case OGF_LE_CTL: 1926b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo switch (ocf) { 192706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_EVENT_MASK: 192806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_set_event_mask_dump(level + 1, frm); 192906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return; 193006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_READ_BUFFER_SIZE: 193106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_READ_LOCAL_SUPPORTED_FEATURES: 193206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER: 193306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return; 193406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_RANDOM_ADDRESS: 193506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_set_random_address_dump(level + 1, frm); 193606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return; 193706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_ADVERTISING_PARAMETERS: 193806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_set_advertising_parameters_dump(level + 1, frm); 193906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return; 194006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_SCAN_PARAMETERS: 194106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_set_scan_parameters_dump(level + 1, frm); 194206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return; 194306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_SCAN_ENABLE: 194406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_set_scan_enable_dump(level + 1, frm); 194506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return; 1946b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo case OCF_LE_CREATE_CONN: 1947b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo le_create_connection_dump(level + 1, frm); 1948b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo return; 1949b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo } 1950b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo break; 1951ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1952ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 195365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky raw_dump(level, frm); 195495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky} 195595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 1956d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void status_response_dump(int level, struct frame *frm) 1957d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 1958d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint8_t status = get_u8(frm); 1959d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1960d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1961d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x\n", status); 1962d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1963d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (status > 0) { 1964d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 1965d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(status)); 1966d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 1967d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1968d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann raw_dump(level, frm); 1969d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 1970d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 1971afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void handle_response_dump(int level, struct frame *frm) 1972afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{ 1973afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann uint16_t handle = btohs(htons(get_u16(frm))); 1974afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann 1975afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann p_indent(level, frm); 1976afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann printf("handle %d\n", handle); 1977afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann 1978afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann raw_dump(level, frm); 1979afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann} 1980afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann 1981ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void bdaddr_response_dump(int level, struct frame *frm) 1982ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 1983ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint8_t status = get_u8(frm); 1984ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann bdaddr_t *bdaddr = frm->ptr; 1985ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 1986ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1987ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann frm->ptr += sizeof(bdaddr_t); 1988ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann frm->len -= sizeof(bdaddr_t); 1989ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1990ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1991bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(bdaddr, addr); 1992ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x bdaddr %s\n", status, addr); 1993ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1994ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (status > 0) { 1995ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 1996ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(status)); 1997ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 1998ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 1999ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann raw_dump(level, frm); 2000ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2001ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2002d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void generic_response_dump(int level, struct frame *frm) 2003d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 2004d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint8_t status = get_u8(frm); 2005d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t handle = btohs(htons(get_u16(frm))); 2006d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2007d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 2008d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x handle %d\n", status, handle); 2009d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2010d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (status > 0) { 2011d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 2012d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(status)); 2013d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 2014d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2015d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann raw_dump(level, frm); 2016d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 2017d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2018b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void status_mode_dump(int level, struct frame *frm) 2019b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 2020b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann uint8_t status = get_u8(frm); 2021b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann uint8_t mode = get_u8(frm); 2022b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 2023b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 2024b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("status 0x%2.2x mode 0x%2.2x\n", status, mode); 2025b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 2026b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann if (status > 0) { 2027b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 2028b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("Error: %s\n", status2str(status)); 2029b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann } 2030b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 2031b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 20326d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmannstatic inline void read_link_policy_dump(int level, struct frame *frm) 20336d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann{ 20346d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann read_link_policy_rp *rp = frm->ptr; 20356d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann uint16_t policy = btohs(rp->policy); 20366d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann char *str; 20376d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann 20386d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann p_indent(level, frm); 20396d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann printf("status 0x%2.2x handle %d policy 0x%2.2x\n", 20406d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann rp->status, btohs(rp->handle), policy); 20416d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann 20426d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann if (rp->status > 0) { 20436d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann p_indent(level, frm); 20446d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 20456d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann } else { 20466d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann str = hci_lptostr(policy); 20476d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann if (str) { 20486d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann p_indent(level, frm); 20496d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann printf("Link policy: %s\n", str); 20506d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann free(str); 20516d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann } 20526d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann } 20536d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann} 20546d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann 2055f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmannstatic inline void read_default_link_policy_dump(int level, struct frame *frm) 2056f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann{ 2057f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann uint8_t status = get_u8(frm); 2058f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann uint16_t policy = btohs(htons(get_u16(frm))); 2059f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann char *str; 2060f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann 2061f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann p_indent(level, frm); 2062f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann printf("status 0x%2.2x policy 0x%2.2x\n", status, policy); 2063f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann 2064f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann if (status > 0) { 2065f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann p_indent(level, frm); 2066f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann printf("Error: %s\n", status2str(status)); 2067f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann } else { 2068f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann str = hci_lptostr(policy); 2069f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann if (str) { 2070f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann p_indent(level, frm); 2071f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann printf("Link policy: %s\n", str); 2072f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann free(str); 2073f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann } 2074f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann } 2075f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann} 2076f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann 207744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_pin_type_dump(int level, struct frame *frm) 207844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 207944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann read_pin_type_rp *rp = frm->ptr; 208044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 208144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 208244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("status 0x%2.2x type %d\n", rp->status, rp->pin_type); 208344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 208444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann if (rp->status > 0) { 208544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 208644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 208744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 208844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 208944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 209044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void read_stored_link_key_dump(int level, struct frame *frm) 209144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 209244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann read_stored_link_key_rp *rp = frm->ptr; 209344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 209444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 209544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("status 0x%2.2x max %d num %d\n", 2096120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->status, rp->max_keys, rp->num_keys); 209744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 209844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann if (rp->status > 0) { 209944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 210044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 210144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 210244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 210344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 210444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void write_stored_link_key_dump(int level, struct frame *frm) 210544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 210644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann write_stored_link_key_rp *rp = frm->ptr; 210744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 210844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 210944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("status 0x%2.2x written %d\n", rp->status, rp->num_keys); 211044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 211144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann if (rp->status > 0) { 211244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 211344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 211444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 211544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 211644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 211744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmannstatic inline void delete_stored_link_key_dump(int level, struct frame *frm) 211844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann{ 211944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann delete_stored_link_key_rp *rp = frm->ptr; 212044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 212144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 212244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("status 0x%2.2x deleted %d\n", rp->status, btohs(rp->num_keys)); 212344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 212444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann if (rp->status > 0) { 212544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann p_indent(level, frm); 212644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 212744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann } 212844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann} 212944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann 2130ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_name_dump(int level, struct frame *frm) 2131ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2132ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_name_rp *rp = frm->ptr; 2133ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char name[249]; 2134ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 2135ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2136ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann memset(name, 0, sizeof(name)); 2137ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 248 && rp->name[i]; i++) 2138ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (isprint(rp->name[i])) 2139ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann name[i] = rp->name[i]; 2140ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann else 2141ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann name[i] = '.'; 2142ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2143ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2144ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x name \'%s\'\n", rp->status, name); 2145ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2146ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 2147ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2148ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2149ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2150ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2151ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2152ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_class_of_dev_dump(int level, struct frame *frm) 2153ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2154ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_class_of_dev_rp *rp = frm->ptr; 2155ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2156ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2157ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x class 0x%2.2x%2.2x%2.2x\n", rp->status, 2158120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]); 2159ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2160ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 2161ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2162ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2163ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2164ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2165ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2166ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_voice_setting_dump(int level, struct frame *frm) 2167ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2168ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_voice_setting_rp *rp = frm->ptr; 2169ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2170ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2171ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x voice setting 0x%4.4x\n", 2172120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->status, btohs(rp->voice_setting)); 2173ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2174ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 2175ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2176ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2177ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2178ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2179ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2180fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmannstatic inline void read_current_iac_lap_dump(int level, struct frame *frm) 2181fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann{ 2182fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann read_current_iac_lap_rp *rp = frm->ptr; 2183fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann int i; 2184fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann 2185fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann for (i = 0; i < rp->num_current_iac; i++) { 2186fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann p_indent(level, frm); 2187fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf("IAC 0x%2.2x%2.2x%2.2x", rp->lap[i][2], rp->lap[i][1], rp->lap[i][0]); 2188fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann if (rp->lap[i][2] == 0x9e && rp->lap[i][1] == 0x8b) { 2189fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann switch (rp->lap[i][0]) { 2190fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case 0x00: 2191fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf(" (Limited Inquiry Access Code)"); 2192fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann break; 2193fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case 0x33: 2194fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf(" (General Inquiry Access Code)"); 2195fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann break; 2196fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 2197fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 2198fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann printf("\n"); 2199fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann } 2200fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann} 2201fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann 220269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmannstatic inline void read_scan_enable_dump(int level, struct frame *frm) 220369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann{ 220469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann uint8_t status = get_u8(frm); 220569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann uint8_t enable = get_u8(frm); 220669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann 220769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann p_indent(level, frm); 220869ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann printf("status 0x%2.2x enable %d\n", status, enable); 220969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann 221069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann if (status > 0) { 221169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann p_indent(level, frm); 221269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann printf("Error: %s\n", status2str(status)); 221369ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann } 221469ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann} 221569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann 2216d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_timeout_dump(int level, struct frame *frm) 2217d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{ 2218d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann read_page_timeout_rp *rp = frm->ptr; 2219d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 2220d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 2221d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("status 0x%2.2x timeout %d\n", rp->status, btohs(rp->timeout)); 2222d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 2223d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann if (rp->status > 0) { 2224d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 2225d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2226d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann } 2227d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann} 2228d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 2229d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmannstatic inline void read_page_activity_dump(int level, struct frame *frm) 2230d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann{ 2231d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann read_page_activity_rp *rp = frm->ptr; 2232d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 2233d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 2234d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("status 0x%2.2x interval %d window %d\n", 2235120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->status, btohs(rp->interval), btohs(rp->window)); 2236d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 2237d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann if (rp->status > 0) { 2238d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann p_indent(level, frm); 2239d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2240d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann } 2241d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann} 2242d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann 2243a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmannstatic inline void read_inquiry_scan_type_dump(int level, struct frame *frm) 2244a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann{ 2245a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann read_inquiry_scan_type_rp *rp = frm->ptr; 2246a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann 2247a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann p_indent(level, frm); 2248a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann printf("status 0x%2.2x type %d\n", rp->status, rp->type); 2249a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann 2250a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann if (rp->status > 0) { 2251a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann p_indent(level, frm); 2252a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2253a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann } 2254a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann} 2255a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann 22566eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_inquiry_mode_dump(int level, struct frame *frm) 22576eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{ 22586eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_inquiry_mode_rp *rp = frm->ptr; 22596eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 22606eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 22616eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("status 0x%2.2x mode %d\n", rp->status, rp->mode); 22626eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 22636eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann if (rp->status > 0) { 22646eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 22656eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 22666eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann } 22676eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann} 22686eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 22696eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_link_supervision_timeout_dump(int level, struct frame *frm) 22706eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{ 22716eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_link_supervision_timeout_rp *rp = frm->ptr; 22726eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 22736eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 22746eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("status 0x%2.2x handle %d timeout %d\n", 2275d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann rp->status, btohs(rp->handle), btohs(rp->timeout)); 22766eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 22776eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann if (rp->status > 0) { 22786eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 22796eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 22806eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann } 22816eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann} 22826eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 22836eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmannstatic inline void read_transmit_power_level_dump(int level, struct frame *frm) 22846eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann{ 22856eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_transmit_power_level_rp *rp = frm->ptr; 22866eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 22876eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 22886eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("status 0x%2.2x handle %d level %d\n", 2289120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->status, btohs(rp->handle), rp->level); 22906eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 22916eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann if (rp->status > 0) { 22926eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann p_indent(level, frm); 22936eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 22946eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann } 22956eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann} 22966eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann 22971a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmannstatic inline void read_ext_inquiry_response_dump(int level, struct frame *frm) 22981a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann{ 22991a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann read_ext_inquiry_response_rp *rp = frm->ptr; 23001a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann 23011a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann p_indent(level, frm); 23021a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann printf("status 0x%2.2x fec 0x%2.2x\n", rp->status, rp->fec); 23031a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann 23041a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann if (rp->status > 0) { 23051a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann p_indent(level, frm); 23061a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2307f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann } else { 2308f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann frm->ptr += 2; 2309f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann frm->len -= 2; 2310f2328fe0a0b690214e3d1df32606a561ec2a9896Marcel Holtmann 2311e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann ext_inquiry_response_dump(level, frm); 23121a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann } 23131a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann} 23141a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann 23153b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void read_inquiry_transmit_power_level_dump(int level, struct frame *frm) 23163b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{ 23173b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann read_inquiry_transmit_power_level_rp *rp = frm->ptr; 23183b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 23193b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann p_indent(level, frm); 23203b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann printf("status 0x%2.2x level %d\n", rp->status, rp->level); 23213b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 23223b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann if (rp->status > 0) { 23233b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann p_indent(level, frm); 23243b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 23253b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann } 23263b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann} 23273b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 23283b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void read_default_error_data_reporting_dump(int level, struct frame *frm) 23293b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{ 23303b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann read_default_error_data_reporting_rp *rp = frm->ptr; 23313b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 23323b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann p_indent(level, frm); 23333b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann printf("status 0x%2.2x reporting %d\n", rp->status, rp->reporting); 23343b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 23353b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann if (rp->status > 0) { 23363b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann p_indent(level, frm); 23373b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 23383b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann } 23393b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann} 23403b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 2341b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void read_local_oob_data_dump(int level, struct frame *frm) 2342b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 2343b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann read_local_oob_data_rp *rp = frm->ptr; 2344b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann int i; 2345b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 2346b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 2347b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("status 0x%2.2x\n", rp->status); 2348b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 2349b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann if (rp->status > 0) { 2350b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 2351b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2352b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann } else { 2353b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 2354b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("hash 0x"); 2355b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann for (i = 0; i < 16; i++) 2356b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("%02x", rp->hash[i]); 2357b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("\n"); 2358b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 2359b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 2360b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("randomizer 0x"); 2361b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann for (i = 0; i < 16; i++) 2362b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("%02x", rp->randomizer[i]); 2363b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("\n"); 2364b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann } 2365b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 2366b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 2367ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_version_dump(int level, struct frame *frm) 2368ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2369ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_version_rp *rp = frm->ptr; 2370ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t manufacturer = btohs(rp->manufacturer); 2371ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2372ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2373ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x\n", rp->status); 2374ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2375ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 2376ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2377ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2378ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 2379ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 23801a5f2bff835728b9df12114adf87c704a1e9b6b8Marcel Holtmann printf("HCI Version: %s (0x%x) HCI Revision: 0x%x\n", 2381120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann hci_vertostr(rp->hci_ver), 2382120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->hci_ver, btohs(rp->hci_rev)); 2383ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2384ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n", 2385120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann lmp_vertostr(rp->lmp_ver), 2386120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->lmp_ver, btohs(rp->lmp_subver)); 2387ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2388ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Manufacturer: %s (%d)\n", 2389120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann bt_compidtostr(manufacturer), manufacturer); 2390ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2391ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2392ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 239317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_commands_dump(int level, struct frame *frm) 239417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 239517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_local_commands_rp *rp = frm->ptr; 239617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann int i, max = 0; 239717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 239817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 239917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("status 0x%2.2x\n", rp->status); 240017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 240117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (rp->status > 0) { 240217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 240317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 240417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } else { 240517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann for (i = 0; i < 64; i++) 240617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (rp->commands[i]) 240717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann max = i + 1; 240817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 240917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Commands: "); 241017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann for (i = 0; i < (max > 32 ? 32 : max); i++) 241117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("%2.2x", rp->commands[i]); 241217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("\n"); 241317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (max > 32) { 241417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 241517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf(" "); 241617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann for (i = 32; i < max; i++) 241717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("%2.2x", rp->commands[i]); 241817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("\n"); 241917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 242017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 242117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 242217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 2423ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_local_features_dump(int level, struct frame *frm) 2424ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2425ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_features_rp *rp = frm->ptr; 2426ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 2427ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2428ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2429ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x\n", rp->status); 2430ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2431ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 2432ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2433ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2434ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 2435ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2436ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Features:"); 2437ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 8; i++) 2438ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf(" 0x%2.2x", rp->features[i]); 2439ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("\n"); 2440ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2441ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2442ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 244317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_local_ext_features_dump(int level, struct frame *frm) 244417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 244517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_local_ext_features_rp *rp = frm->ptr; 244617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann int i; 244717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 244817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 244917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("status 0x%2.2x page %d max %d\n", 245017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann rp->status, rp->page_num, rp->max_page_num); 245117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 245217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (rp->status > 0) { 245317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 245417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 245517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } else { 245617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 245717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Features:"); 245817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann for (i = 0; i < 8; i++) 245917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf(" 0x%2.2x", rp->features[i]); 246017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("\n"); 246117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 246217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 246317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 2464ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_buffer_size_dump(int level, struct frame *frm) 2465ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 2466ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_buffer_size_rp *rp = frm->ptr; 2467ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2468ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2469ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x\n", rp->status); 2470ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2471ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (rp->status > 0) { 2472ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2473ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2474ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 2475ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 2476ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("ACL MTU %d:%d SCO MTU %d:%d\n", 2477120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann btohs(rp->acl_mtu), btohs(rp->acl_max_pkt), 2478120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->sco_mtu, btohs(rp->sco_max_pkt)); 2479ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 2480ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 2481ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2482f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_link_quality_dump(int level, struct frame *frm) 2483f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{ 2484f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_link_quality_rp *rp = frm->ptr; 2485f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 2486f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 2487f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("status 0x%2.2x handle %d lq %d\n", 2488120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->status, btohs(rp->handle), rp->link_quality); 2489f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 2490f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann if (rp->status > 0) { 2491f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 2492f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2493f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } 2494f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann} 2495f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 2496f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_rssi_dump(int level, struct frame *frm) 2497f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{ 2498f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_rssi_rp *rp = frm->ptr; 2499f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 2500f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 2501f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("status 0x%2.2x handle %d rssi %d\n", 2502120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->status, btohs(rp->handle), rp->rssi); 2503f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 2504f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann if (rp->status > 0) { 2505f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 2506f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2507f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } 2508f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann} 2509f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 2510f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_afh_map_dump(int level, struct frame *frm) 2511f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{ 2512f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_afh_map_rp *rp = frm->ptr; 2513f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann int i; 2514f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 2515f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 2516f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("status 0x%2.2x handle %d mode %d\n", 2517120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->status, btohs(rp->handle), rp->mode); 2518f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 2519f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann if (rp->status > 0) { 2520f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 2521f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2522f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } else { 2523f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 2524f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("AFH map: 0x"); 2525f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann for (i = 0; i < 10; i++) 2526f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("%2.2x", rp->map[i]); 2527f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("\n"); 2528f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } 2529f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann} 2530f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 2531f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmannstatic inline void read_clock_dump(int level, struct frame *frm) 2532f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann{ 2533f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_clock_rp *rp = frm->ptr; 2534f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 2535f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 2536f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("status 0x%2.2x handle %d clock 0x%4.4x accuracy %d\n", 2537120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann rp->status, btohs(rp->handle), 2538120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann btohl(rp->clock), btohs(rp->accuracy)); 2539f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 2540f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann if (rp->status > 0) { 2541f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann p_indent(level, frm); 2542f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann printf("Error: %s\n", status2str(rp->status)); 2543f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann } 2544f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann} 2545f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann 254685478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void read_local_amp_info_dump(int level, struct frame *frm) 254785478602978104edbd412a87aff926c8f5311337Inga Stotland{ 254885478602978104edbd412a87aff926c8f5311337Inga Stotland read_local_amp_info_rp *rp = frm->ptr; 254985478602978104edbd412a87aff926c8f5311337Inga Stotland 255085478602978104edbd412a87aff926c8f5311337Inga Stotland p_indent(level, frm); 255185478602978104edbd412a87aff926c8f5311337Inga Stotland printf("status 0x%2.2x amp status 0x%2.2x\n", 255285478602978104edbd412a87aff926c8f5311337Inga Stotland rp->status, rp->amp_status); 255385478602978104edbd412a87aff926c8f5311337Inga Stotland if (rp->status > 0) { 255485478602978104edbd412a87aff926c8f5311337Inga Stotland p_indent(level, frm); 255585478602978104edbd412a87aff926c8f5311337Inga Stotland printf("Error: %s\n", status2str(rp->status)); 255685478602978104edbd412a87aff926c8f5311337Inga Stotland } else { 255785478602978104edbd412a87aff926c8f5311337Inga Stotland p_indent(level, frm); 255885478602978104edbd412a87aff926c8f5311337Inga Stotland printf("total bandwidth %d, max guaranteed bandwidth %d\n", 255985478602978104edbd412a87aff926c8f5311337Inga Stotland btohl(rp->total_bandwidth), 256085478602978104edbd412a87aff926c8f5311337Inga Stotland btohl(rp->max_guaranteed_bandwidth)); 256185478602978104edbd412a87aff926c8f5311337Inga Stotland p_indent(level, frm); 256285478602978104edbd412a87aff926c8f5311337Inga Stotland printf("min latency %d, max PDU %d, controller type 0x%2.2x\n", 256385478602978104edbd412a87aff926c8f5311337Inga Stotland btohl(rp->min_latency), btohl(rp->max_pdu_size), 256485478602978104edbd412a87aff926c8f5311337Inga Stotland rp->controller_type); 256585478602978104edbd412a87aff926c8f5311337Inga Stotland p_indent(level, frm); 256685478602978104edbd412a87aff926c8f5311337Inga Stotland printf("pal caps 0x%4.4x, max assoc len %d\n", 256785478602978104edbd412a87aff926c8f5311337Inga Stotland btohs(rp->pal_caps), btohs(rp->max_amp_assoc_length)); 256885478602978104edbd412a87aff926c8f5311337Inga Stotland p_indent(level, frm); 256985478602978104edbd412a87aff926c8f5311337Inga Stotland printf("max flush timeout %d, best effort flush timeout %d\n", 257085478602978104edbd412a87aff926c8f5311337Inga Stotland btohl(rp->max_flush_timeout), 257185478602978104edbd412a87aff926c8f5311337Inga Stotland btohl(rp->best_effort_flush_timeout)); 257285478602978104edbd412a87aff926c8f5311337Inga Stotland } 257385478602978104edbd412a87aff926c8f5311337Inga Stotland} 257485478602978104edbd412a87aff926c8f5311337Inga Stotland 257585478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void read_local_amp_assoc_dump(int level, struct frame *frm) 257685478602978104edbd412a87aff926c8f5311337Inga Stotland{ 257785478602978104edbd412a87aff926c8f5311337Inga Stotland read_local_amp_assoc_rp *rp = frm->ptr; 257885478602978104edbd412a87aff926c8f5311337Inga Stotland uint16_t len = btohs(rp->length); 257985478602978104edbd412a87aff926c8f5311337Inga Stotland int i; 258085478602978104edbd412a87aff926c8f5311337Inga Stotland 258185478602978104edbd412a87aff926c8f5311337Inga Stotland p_indent(level, frm); 258285478602978104edbd412a87aff926c8f5311337Inga Stotland printf("status 0x%2.2x handle 0x%2.2x length %d\n", 258385478602978104edbd412a87aff926c8f5311337Inga Stotland rp->status, rp->handle, len); 258485478602978104edbd412a87aff926c8f5311337Inga Stotland if (rp->status > 0) { 258585478602978104edbd412a87aff926c8f5311337Inga Stotland p_indent(level, frm); 258685478602978104edbd412a87aff926c8f5311337Inga Stotland printf("Error: %s\n", status2str(rp->status)); 258785478602978104edbd412a87aff926c8f5311337Inga Stotland } else { 258885478602978104edbd412a87aff926c8f5311337Inga Stotland for (i = 0; i < len; i++) { 258985478602978104edbd412a87aff926c8f5311337Inga Stotland if (!(i % 16)) { 259085478602978104edbd412a87aff926c8f5311337Inga Stotland printf("\n"); 259185478602978104edbd412a87aff926c8f5311337Inga Stotland p_indent(level, frm); 259285478602978104edbd412a87aff926c8f5311337Inga Stotland } 259385478602978104edbd412a87aff926c8f5311337Inga Stotland printf("%2.2x ", rp->fragment[i]); 259485478602978104edbd412a87aff926c8f5311337Inga Stotland } 259585478602978104edbd412a87aff926c8f5311337Inga Stotland printf("\n"); 259685478602978104edbd412a87aff926c8f5311337Inga Stotland } 259785478602978104edbd412a87aff926c8f5311337Inga Stotland} 259885478602978104edbd412a87aff926c8f5311337Inga Stotland 259985478602978104edbd412a87aff926c8f5311337Inga Stotlandstatic inline void write_remote_amp_assoc_dump(int level, struct frame *frm) 260085478602978104edbd412a87aff926c8f5311337Inga Stotland{ 260185478602978104edbd412a87aff926c8f5311337Inga Stotland write_remote_amp_assoc_rp *rp = frm->ptr; 260285478602978104edbd412a87aff926c8f5311337Inga Stotland 260385478602978104edbd412a87aff926c8f5311337Inga Stotland p_indent(level, frm); 260485478602978104edbd412a87aff926c8f5311337Inga Stotland printf("status 0x%2.2x handle 0x%2.2x\n", rp->status, rp->handle); 260585478602978104edbd412a87aff926c8f5311337Inga Stotland if (rp->status > 0) { 260685478602978104edbd412a87aff926c8f5311337Inga Stotland p_indent(level, frm); 260785478602978104edbd412a87aff926c8f5311337Inga Stotland printf("Error: %s\n", status2str(rp->status)); 260885478602978104edbd412a87aff926c8f5311337Inga Stotland } 260985478602978104edbd412a87aff926c8f5311337Inga Stotland} 261085478602978104edbd412a87aff926c8f5311337Inga Stotland 261106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_read_buffer_size_response_dump(int level, struct frame *frm) 261206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{ 261306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_read_buffer_size_rp *rp = frm->ptr; 261406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 261506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 261606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("status 0x%2.2x pktlen 0x%4.4x maxpkt 0x%2.2x\n", rp->status, 261706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins rp->pkt_len, rp->max_pkt); 261806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 261906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins if (rp->status > 0) { 262006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 262106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("Error: %s\n", status2str(rp->status)); 262206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins } 262306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins} 262406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 262506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_read_local_supported_features_dump(int level, struct frame *frm) 262606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{ 262706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins int i; 262806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_read_local_supported_features_rp *rp = frm->ptr; 262906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 263006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 263106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("status 0x%2.2x features 0x", rp->status); 263206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins for (i = 0; i < 8; i++) 263306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("%2.2x", rp->features[i]); 263406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf(" (%s)\n", lefeatures2str(rp->features)); 263506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 263606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins if (rp->status > 0) { 263706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 263806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("Error: %s\n", status2str(rp->status)); 263906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins } 264006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins} 264106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 264206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martinsstatic inline void le_read_advertising_channel_tx_power_dump(int level, struct frame *frm) 264306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins{ 264406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_read_advertising_channel_tx_power_rp *rp = frm->ptr; 264506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 264606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 264706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("status 0x%2.2x level 0x%x (dBm)\n", rp->status, rp->level); 264806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 264906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins if (rp->status > 0) { 265006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins p_indent(level, frm); 265106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins printf("Error: %s\n", status2str(rp->status)); 265206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins } 265306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins} 265406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 2655d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_complete_dump(int level, struct frame *frm) 2656d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 2657d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_cmd_complete *evt = frm->ptr; 2658d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t opcode = btohs(evt->opcode); 2659d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t ogf = cmd_opcode_ogf(opcode); 2660d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t ocf = cmd_opcode_ocf(opcode); 2661d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 26627b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR)) 26637b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann return; 26647b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann 2665d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 2666d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("%s (0x%2.2x|0x%4.4x) ncmd %d\n", 2667120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann opcode2str(opcode), ogf, ocf, evt->ncmd); 2668d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2669d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann frm->ptr += EVT_CMD_COMPLETE_SIZE; 2670d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann frm->len -= EVT_CMD_COMPLETE_SIZE; 2671d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 26724f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann if (!(parser.flags & DUMP_VERBOSE)) { 26734f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann raw_dump(level, frm); 26744f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann return; 26754f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann } 26764f25b38c95c6ef0d89af93fe385023bc627747adMarcel Holtmann 2677d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann switch (ogf) { 2678ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OGF_LINK_CTL: 2679ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ocf) { 268017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_INQUIRY_CANCEL: 268117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_PERIODIC_INQUIRY: 268217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_EXIT_PERIODIC_INQUIRY: 2683d51f2017d006ab5e9ec6f187142ae2ae1cffff8eMarcel Holtmann case OCF_READ_REMOTE_EXT_FEATURES: 268417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann status_response_dump(level, frm); 268517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 268690480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_CREATE_CONN_CANCEL: 268790480219be366c65e68ae8612de7a361027e751aMarcel Holtmann case OCF_REMOTE_NAME_REQ_CANCEL: 2688ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_PIN_CODE_REPLY: 2689ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_LINK_KEY_REPLY: 2690ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_PIN_CODE_NEG_REPLY: 2691ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_LINK_KEY_NEG_REPLY: 2692b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_USER_CONFIRM_REPLY: 2693b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_USER_CONFIRM_NEG_REPLY: 2694b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_USER_PASSKEY_REPLY: 2695b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_USER_PASSKEY_NEG_REPLY: 2696b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_REMOTE_OOB_DATA_REPLY: 2697b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_REMOTE_OOB_DATA_NEG_REPLY: 2698b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_IO_CAPABILITY_REPLY: 2699b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_IO_CAPABILITY_NEG_REPLY: 2700ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann bdaddr_response_dump(level, frm); 2701ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 2702ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 270317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 2704ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2705ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OGF_LINK_POLICY: 2706ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann switch (ocf) { 27076d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann case OCF_READ_LINK_POLICY: 27086d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann read_link_policy_dump(level, frm); 27096d012a81f80dadc7394c92a4de994b88545cb95eMarcel Holtmann return; 2710ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_WRITE_LINK_POLICY: 27113b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case OCF_SNIFF_SUBRATING: 2712ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann generic_response_dump(level, frm); 2713ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 2714f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann case OCF_READ_DEFAULT_LINK_POLICY: 2715f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann read_default_link_policy_dump(level, frm); 2716f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann return; 2717f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann case OCF_WRITE_DEFAULT_LINK_POLICY: 2718f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann status_response_dump(level, frm); 2719f981c2aef1a76718cec35e7f439939af59dc6a00Marcel Holtmann return; 2720ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 272117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 2722ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2723d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OGF_HOST_CTL: 2724d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann switch (ocf) { 272544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_READ_PIN_TYPE: 272644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann read_pin_type_dump(level, frm); 272744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 272844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_READ_STORED_LINK_KEY: 272944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann read_stored_link_key_dump(level, frm); 273044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 273144ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_WRITE_STORED_LINK_KEY: 273244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann write_stored_link_key_dump(level, frm); 273344ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 273444ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_DELETE_STORED_LINK_KEY: 273544ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann delete_stored_link_key_dump(level, frm); 273644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann return; 2737d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_LOCAL_NAME: 2738ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_name_dump(level, frm); 2739ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 2740ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_CLASS_OF_DEV: 2741ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_class_of_dev_dump(level, frm); 2742ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 2743ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case OCF_READ_VOICE_SETTING: 2744ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_voice_setting_dump(level, frm); 2745ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 2746fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case OCF_READ_CURRENT_IAC_LAP: 2747fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann read_current_iac_lap_dump(level, frm); 2748fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann return; 274969ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_READ_SCAN_ENABLE: 275069ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_READ_AUTH_ENABLE: 275169ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann read_scan_enable_dump(level, frm); 275269ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann return; 2753097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann case OCF_READ_CONN_ACCEPT_TIMEOUT: 2754d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_READ_PAGE_TIMEOUT: 275585478602978104edbd412a87aff926c8f5311337Inga Stotland case OCF_READ_LOGICAL_LINK_ACCEPT_TIMEOUT: 2756d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann read_page_timeout_dump(level, frm); 2757d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann return; 2758d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_READ_PAGE_ACTIVITY: 2759d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_READ_INQ_ACTIVITY: 2760d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann read_page_activity_dump(level, frm); 2761d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann return; 2762a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann case OCF_READ_INQUIRY_SCAN_TYPE: 2763a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann read_inquiry_scan_type_dump(level, frm); 2764a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann return; 276569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_READ_ENCRYPT_MODE: 2766f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_READ_INQUIRY_MODE: 2767f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_READ_AFH_MODE: 2768f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann read_inquiry_mode_dump(level, frm); 2769f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann return; 27706eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_READ_LINK_SUPERVISION_TIMEOUT: 27716eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_link_supervision_timeout_dump(level, frm); 27726eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 27736eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_READ_TRANSMIT_POWER_LEVEL: 27746eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann read_transmit_power_level_dump(level, frm); 27756eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 27761a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann case OCF_READ_EXT_INQUIRY_RESPONSE: 27771a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann read_ext_inquiry_response_dump(level, frm); 27781a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann return; 27793b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL: 27803b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann read_inquiry_transmit_power_level_dump(level, frm); 27813b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann return; 27823b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case OCF_READ_DEFAULT_ERROR_DATA_REPORTING: 27833b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann read_default_error_data_reporting_dump(level, frm); 27843b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann return; 2785b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_READ_LOCAL_OOB_DATA: 2786b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann read_local_oob_data_dump(level, frm); 2787b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return; 2788b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_READ_SIMPLE_PAIRING_MODE: 2789c7f436764386ca845317b678f3330340ccd838b8Inga Stotland case OCF_READ_FLOW_CONTROL_MODE: 2790b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann status_mode_dump(level, frm); 2791b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return; 279244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_FLUSH: 27936eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann case OCF_WRITE_LINK_SUPERVISION_TIMEOUT: 27946eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann generic_response_dump(level, frm); 27956eb2fe8fbd65261409f7fb3bffd7fee2c2e59471Marcel Holtmann return; 279644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_RESET: 279744ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_SET_EVENT_MASK: 279844ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_SET_EVENT_FLT: 279944ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_WRITE_PIN_TYPE: 280044ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann case OCF_CREATE_NEW_UNIT_KEY: 28011577526370e596583b15d68940c24e975e62a502Marcel Holtmann case OCF_CHANGE_LOCAL_NAME: 2802f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_WRITE_CLASS_OF_DEV: 2803f78da84489a5505c3fd7dc82e12440791c67d75fMarcel Holtmann case OCF_WRITE_VOICE_SETTING: 2804fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case OCF_WRITE_CURRENT_IAC_LAP: 280569ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_SCAN_ENABLE: 280669ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_AUTH_ENABLE: 280769ba8ac696c4c302ba555b4521f5a62deff9861aMarcel Holtmann case OCF_WRITE_ENCRYPT_MODE: 2808097e546707e1f6ce7a2339f8f9348a840e9617b3Marcel Holtmann case OCF_WRITE_CONN_ACCEPT_TIMEOUT: 2809d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_PAGE_TIMEOUT: 2810d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_PAGE_ACTIVITY: 2811d4276e6224edc7bf6ba0a5453d4ece24160690cbMarcel Holtmann case OCF_WRITE_INQ_ACTIVITY: 2812a781bd700183ce0ddce9010ce3314ef96c87b929Marcel Holtmann case OCF_WRITE_INQUIRY_SCAN_TYPE: 2813fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case OCF_WRITE_INQUIRY_MODE: 2814fb1bd2e479aa5f4031d8f6704b392c34eb241e91Marcel Holtmann case OCF_WRITE_AFH_MODE: 2815d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_SET_AFH_CLASSIFICATION: 28161a750e04b93ee975b43108852a3e6ecb1326fe5aMarcel Holtmann case OCF_WRITE_EXT_INQUIRY_RESPONSE: 2817b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_WRITE_SIMPLE_PAIRING_MODE: 28183b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL: 28193b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING: 28208583de68ea3be3ada739dcc84d811fc752d45a03Marcel Holtmann case OCF_SET_CONTROLLER_TO_HOST_FC: 28212315ac9e430b8cd8c42777e6ec7b4bb10870458bMarcel Holtmann case OCF_HOST_BUFFER_SIZE: 2822b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_REFRESH_ENCRYPTION_KEY: 2823b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_SEND_KEYPRESS_NOTIFY: 282485478602978104edbd412a87aff926c8f5311337Inga Stotland case OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT: 282585478602978104edbd412a87aff926c8f5311337Inga Stotland case OCF_SET_EVENT_MASK_PAGE_2: 2826c7f436764386ca845317b678f3330340ccd838b8Inga Stotland case OCF_WRITE_LOCATION_DATA: 282785478602978104edbd412a87aff926c8f5311337Inga Stotland case OCF_WRITE_FLOW_CONTROL_MODE: 282885478602978104edbd412a87aff926c8f5311337Inga Stotland case OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT: 282985478602978104edbd412a87aff926c8f5311337Inga Stotland case OCF_WRITE_BEST_EFFORT_FLUSH_TIMEOUT: 2830d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann status_response_dump(level, frm); 2831ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 2832d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 283317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 2834d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2835d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OGF_INFO_PARAM: 2836d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann switch (ocf) { 2837d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_LOCAL_VERSION: 2838ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_version_dump(level, frm); 2839ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 284017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_READ_LOCAL_COMMANDS: 284117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_local_commands_dump(level, frm); 284217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 2843d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_LOCAL_FEATURES: 2844ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_local_features_dump(level, frm); 2845ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 284617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case OCF_READ_LOCAL_EXT_FEATURES: 284717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_local_ext_features_dump(level, frm); 284817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann return; 2849d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_BUFFER_SIZE: 2850ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_buffer_size_dump(level, frm); 2851ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 2852d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_BD_ADDR: 2853ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann bdaddr_response_dump(level, frm); 2854ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 2855d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 285617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 2857d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2858d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OGF_STATUS_PARAM: 2859d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann switch (ocf) { 2860d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_FAILED_CONTACT_COUNTER: 2861d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_RESET_FAILED_CONTACT_COUNTER: 2862f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann status_response_dump(level, frm); 2863f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 2864d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_LINK_QUALITY: 2865f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_link_quality_dump(level, frm); 2866f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 2867d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_RSSI: 2868f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_rssi_dump(level, frm); 2869f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 2870d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_AFH_MAP: 2871f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_afh_map_dump(level, frm); 2872f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann return; 2873d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case OCF_READ_CLOCK: 2874f14ea6555d5ccd5ffee3564c0eaaaa304024c83fMarcel Holtmann read_clock_dump(level, frm); 2875ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann return; 287685478602978104edbd412a87aff926c8f5311337Inga Stotland case OCF_READ_LOCAL_AMP_INFO: 287785478602978104edbd412a87aff926c8f5311337Inga Stotland read_local_amp_info_dump(level, frm); 287885478602978104edbd412a87aff926c8f5311337Inga Stotland return; 287985478602978104edbd412a87aff926c8f5311337Inga Stotland case OCF_READ_LOCAL_AMP_ASSOC: 288085478602978104edbd412a87aff926c8f5311337Inga Stotland read_local_amp_assoc_dump(level, frm); 288185478602978104edbd412a87aff926c8f5311337Inga Stotland return; 288285478602978104edbd412a87aff926c8f5311337Inga Stotland case OCF_WRITE_REMOTE_AMP_ASSOC: 288385478602978104edbd412a87aff926c8f5311337Inga Stotland write_remote_amp_assoc_dump(level, frm); 288485478602978104edbd412a87aff926c8f5311337Inga Stotland return; 2885d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 288617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 2887b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 2888b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OGF_TESTING_CMD: 2889b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann switch (ocf) { 2890b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_READ_LOOPBACK_MODE: 2891b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann status_mode_dump(level, frm); 2892b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return; 2893b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_WRITE_LOOPBACK_MODE: 2894b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_ENABLE_DEVICE_UNDER_TEST_MODE: 2895b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE: 2896b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann status_response_dump(level, frm); 2897b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann return; 2898b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann } 2899b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann break; 290006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins 290106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OGF_LE_CTL: 290206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins switch (ocf) { 290306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_EVENT_MASK: 290406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_RANDOM_ADDRESS: 290506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_ADVERTISING_PARAMETERS: 290606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_ADVERTISING_DATA: 290706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_SCAN_RESPONSE_DATA: 290806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_ADVERTISE_ENABLE: 290906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_SCAN_PARAMETERS: 291006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_SCAN_ENABLE: 291106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_CREATE_CONN: 291206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_CLEAR_WHITE_LIST: 291306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_ADD_DEVICE_TO_WHITE_LIST: 291406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST: 291506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION: 291606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_RECEIVER_TEST: 291706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_TRANSMITTER_TEST: 291806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins status_response_dump(level, frm); 291906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return; 292006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_READ_BUFFER_SIZE: 292106c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_read_buffer_size_response_dump(level, frm); 292206c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return; 292306c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_READ_LOCAL_SUPPORTED_FEATURES: 292406c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_read_local_supported_features_dump(level, frm); 292506c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return; 292606c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins case OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER: 292706c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins le_read_advertising_channel_tx_power_dump(level, frm); 292806c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins return; 292906c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins } 293006c932e3c8957e9ac2eb7b3e94f08678e5583ee9André Dieb Martins break; 2931d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 2932ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 2933ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann raw_dump(level, frm); 2934d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 2935d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2936d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void cmd_status_dump(int level, struct frame *frm) 2937d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 2938d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_cmd_status *evt = frm->ptr; 2939d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint16_t opcode = btohs(evt->opcode); 29407b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann uint16_t ogf = cmd_opcode_ogf(opcode); 29417b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann uint16_t ocf = cmd_opcode_ocf(opcode); 29427b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann 29437b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR)) 29447b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann return; 2945d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2946d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 2947d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("%s (0x%2.2x|0x%4.4x) status 0x%2.2x ncmd %d\n", 29487b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann opcode2str(opcode), ogf, ocf, evt->status, evt->ncmd); 2949d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2950d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (evt->status > 0) { 2951d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 2952d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 2953d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 2954d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 2955d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2956afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmannstatic inline void hardware_error_dump(int level, struct frame *frm) 2957afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann{ 2958afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann evt_hardware_error *evt = frm->ptr; 2959afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann 2960afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann p_indent(level, frm); 2961afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann printf("code %d\n", evt->code); 2962afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann} 2963afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann 2964d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_dump(int level, struct frame *frm) 2965d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 2966d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint8_t num = get_u8(frm); 2967b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann char addr[18]; 2968d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann int i; 2969d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2970d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann for (i = 0; i < num; i++) { 2971d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann inquiry_info *info = frm->ptr; 2972d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2973bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&info->bdaddr, addr); 2974d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2975d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 297672e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x\n", 297772e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann addr, info->pscan_rep_mode, btohs(info->clock_offset), 297872e332140c186ebca02d7744f4264cfd0718201aMarcel Holtmann info->dev_class[2], info->dev_class[1], info->dev_class[0]); 2979d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2980d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann frm->ptr += INQUIRY_INFO_SIZE; 2981d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann frm->len -= INQUIRY_INFO_SIZE; 2982d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 2983d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 2984d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2985d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_complete_dump(int level, struct frame *frm) 2986d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 2987d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_conn_complete *evt = frm->ptr; 2988d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann char addr[18]; 2989d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2990bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&evt->bdaddr, addr); 2991d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2992d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 2993d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x handle %d bdaddr %s type %s encrypt 0x%2.2x\n", 2994120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->status, btohs(evt->handle), addr, 2995fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann linktype2str(evt->link_type), evt->encr_mode); 2996d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 2997d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (evt->status > 0) { 2998d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 2999d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3000d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 3001d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 3002d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3003d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void conn_request_dump(int level, struct frame *frm) 3004d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 3005d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_conn_request *evt = frm->ptr; 3006d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann char addr[18]; 3007d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3008bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&evt->bdaddr, addr); 3009d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3010d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 3011d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("bdaddr %s class 0x%2.2x%2.2x%2.2x type %s\n", 3012120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann addr, evt->dev_class[2], evt->dev_class[1], 3013fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann evt->dev_class[0], linktype2str(evt->link_type)); 3014d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 3015d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3016d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void disconn_complete_dump(int level, struct frame *frm) 3017d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 3018d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_disconn_complete *evt = frm->ptr; 3019d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3020d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 3021d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x handle %d reason 0x%2.2x\n", 3022120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->status, btohs(evt->handle), evt->reason); 3023d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3024d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (evt->status > 0) { 3025d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 3026d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3027d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } else if (evt->reason > 0) { 3028d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 3029d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Reason: %s\n", status2str(evt->reason)); 3030d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 3031d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 3032d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3033d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void remote_name_req_complete_dump(int level, struct frame *frm) 3034d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 3035d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_remote_name_req_complete *evt = frm->ptr; 3036d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann char addr[18], name[249]; 3037d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann int i; 3038d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3039bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&evt->bdaddr, addr); 3040d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3041d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann memset(name, 0, sizeof(name)); 3042d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann for (i = 0; i < 248 && evt->name[i]; i++) 3043d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (isprint(evt->name[i])) 3044d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann name[i] = evt->name[i]; 3045d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann else 3046d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann name[i] = '.'; 3047d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3048d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 3049d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x bdaddr %s name '%s'\n", evt->status, addr, name); 3050d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3051d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (evt->status > 0) { 3052d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 3053d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3054d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 3055d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 3056d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 305717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void master_link_key_complete_dump(int level, struct frame *frm) 305817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 305917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann evt_master_link_key_complete *evt = frm->ptr; 306017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 306117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 306217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("status 0x%2.2x handle %d flag %d\n", 3063120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->status, btohs(evt->handle), evt->key_flag); 306417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 306517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (evt->status > 0) { 306617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 306717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 306817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 306917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 307017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 3071d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void encrypt_change_dump(int level, struct frame *frm) 3072d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 3073d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann evt_encrypt_change *evt = frm->ptr; 3074d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3075d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 3076d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("status 0x%2.2x handle %d encrypt 0x%2.2x\n", 3077120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->status, btohs(evt->handle), evt->encrypt); 3078d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3079d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (evt->status > 0) { 3080d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann p_indent(level, frm); 3081d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3082d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 3083d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 3084d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3085ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_features_complete_dump(int level, struct frame *frm) 3086ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 3087ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_read_remote_features_complete *evt = frm->ptr; 3088ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 3089ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3090ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3091ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle)); 3092ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3093ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 3094ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3095ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3096ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 3097ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3098ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Features:"); 3099ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 8; i++) 3100ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf(" 0x%2.2x", evt->features[i]); 3101ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("\n"); 3102ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 3103ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 3104ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3105ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_remote_version_complete_dump(int level, struct frame *frm) 3106ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 3107ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_read_remote_version_complete *evt = frm->ptr; 3108ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t manufacturer = btohs(evt->manufacturer); 3109ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3110ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3111ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle)); 3112ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3113ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 3114ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3115ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3116ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 3117ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3118ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n", 3119ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann lmp_vertostr(evt->lmp_ver), evt->lmp_ver, 3120ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann btohs(evt->lmp_subver)); 3121ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3122ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Manufacturer: %s (%d)\n", 3123ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann bt_compidtostr(manufacturer), manufacturer); 3124ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 3125ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 3126ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 312711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void qos_setup_complete_dump(int level, struct frame *frm) 312811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{ 312911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann evt_qos_setup_complete *evt = frm->ptr; 313011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 313111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 313211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("status 0x%2.2x handle %d flags %d\n", 3133120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->status, btohs(evt->handle), evt->flags); 313411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 313511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann if (evt->status > 0) { 313611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 313711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Error: %s\n", status2str(evt->status)); 313811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann } else { 313911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 314011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Service type: %d\n", evt->qos.service_type); 314111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 314211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Token rate: %d\n", btohl(evt->qos.token_rate)); 314311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 314411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth)); 314511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 314611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Latency: %d\n", btohl(evt->qos.latency)); 314711c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 314811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("Delay variation: %d\n", btohl(evt->qos.delay_variation)); 314911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann } 315011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann} 315111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 3152ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void role_change_dump(int level, struct frame *frm) 3153ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 3154ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_role_change *evt = frm->ptr; 3155ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 3156ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3157ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3158bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&evt->bdaddr, addr); 3159ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x bdaddr %s role 0x%2.2x\n", 3160120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->status, addr, evt->role); 3161ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3162ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 3163ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3164ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3165ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 3166ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3167ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Role: %s\n", role2str(evt->role)); 3168ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 3169ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 3170ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3171ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void mode_change_dump(int level, struct frame *frm) 3172ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 3173ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_mode_change *evt = frm->ptr; 3174ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3175ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3176ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x handle %d mode 0x%2.2x interval %d\n", 3177ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt->status, btohs(evt->handle), evt->mode, btohs(evt->interval)); 3178ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3179ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 3180ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3181ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3182ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 3183ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3184ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Mode: %s\n", mode2str(evt->mode)); 3185ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 3186ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 3187ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3188ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void pin_code_req_dump(int level, struct frame *frm) 3189ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 3190ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_pin_code_req *evt = frm->ptr; 3191ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 3192ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3193ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3194bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&evt->bdaddr, addr); 3195ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("bdaddr %s\n", addr); 3196ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 3197ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3198ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void link_key_notify_dump(int level, struct frame *frm) 3199ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 3200ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_link_key_notify *evt = frm->ptr; 3201ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char addr[18]; 3202ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann int i; 3203ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3204ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3205bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&evt->bdaddr, addr); 320644ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf("bdaddr %s key ", addr); 3207ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann for (i = 0; i < 16; i++) 3208a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann if (parser.flags & DUMP_NOVENDOR) 3209a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann printf("**"); 3210a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann else 3211a82beb6911e6ef88e5f83617bfca59985d98a7d8Marcel Holtmann printf("%2.2X", evt->link_key[i]); 321244ae5fbcbf615898849e30305d565d45bb3b768bMarcel Holtmann printf(" type %d\n", evt->key_type); 3213b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 3214b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 3215b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("Type: %s\n", keytype2str(evt->key_type)); 3216ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 3217ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 321811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void max_slots_change_dump(int level, struct frame *frm) 321911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{ 322011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann evt_max_slots_change *evt = frm->ptr; 322111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 322211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 322311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("handle %d slots %d\n", btohs(evt->handle), evt->max_slots); 322411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann} 322511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 3226c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmannstatic inline void data_buffer_overflow_dump(int level, struct frame *frm) 3227c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann{ 3228c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann evt_data_buffer_overflow *evt = frm->ptr; 3229c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann 3230c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann p_indent(level, frm); 3231fa025b7e858fc6228713bec8364f63ae2331b302Marcel Holtmann printf("type %s\n", linktype2str(evt->link_type)); 3232c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann} 3233c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann 3234ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void read_clock_offset_complete_dump(int level, struct frame *frm) 3235ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 3236ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_read_clock_offset_complete *evt = frm->ptr; 3237ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3238ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3239ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x handle %d clkoffset 0x%4.4x\n", 3240ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt->status, btohs(evt->handle), btohs(evt->clock_offset)); 3241ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3242ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 3243ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3244ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3245ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 3246ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 3247ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3248ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmannstatic inline void conn_ptype_changed_dump(int level, struct frame *frm) 3249ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann{ 3250ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann evt_conn_ptype_changed *evt = frm->ptr; 3251ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann uint16_t ptype = btohs(evt->ptype); 3252ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann char *str; 3253ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3254ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3255ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("status 0x%2.2x handle %d ptype 0x%4.4x\n", 3256120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->status, btohs(evt->handle), ptype); 3257ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 3258ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (evt->status > 0) { 3259ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3260ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3261ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } else { 3262ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann str = hci_ptypetostr(ptype); 3263ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann if (str) { 3264ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann p_indent(level, frm); 3265ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann printf("Packet type: %s\n", str); 3266ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann free(str); 3267ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 3268ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann } 3269ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann} 3270ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann 327111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmannstatic inline void pscan_rep_mode_change_dump(int level, struct frame *frm) 327211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann{ 327311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann evt_pscan_rep_mode_change *evt = frm->ptr; 327411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann char addr[18]; 327511c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann 327611c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann p_indent(level, frm); 3277bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&evt->bdaddr, addr); 327811c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann printf("bdaddr %s mode %d\n", addr, evt->pscan_rep_mode); 327911c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann} 3280ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann 3281f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmannstatic inline void flow_spec_complete_dump(int level, struct frame *frm) 3282f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann{ 3283f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann evt_flow_spec_complete *evt = frm->ptr; 3284f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann 3285f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 3286f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("status 0x%2.2x handle %d flags %d %s\n", 3287120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->status, btohs(evt->handle), evt->flags, 3288120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->direction == 0 ? "outgoing" : "incoming"); 3289f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann 3290f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann if (evt->status > 0) { 3291f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 3292f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3293f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann } else { 3294f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 3295f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Service type: %d\n", evt->qos.service_type); 3296f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 3297f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Token rate: %d\n", btohl(evt->qos.token_rate)); 3298f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 3299f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth)); 3300f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 3301f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Latency: %d\n", btohl(evt->qos.latency)); 3302f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann p_indent(level, frm); 3303f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann printf("Delay variation: %d\n", btohl(evt->qos.delay_variation)); 3304f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann } 3305f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann} 3306f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann 3307d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmannstatic inline void inq_result_with_rssi_dump(int level, struct frame *frm) 3308d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann{ 3309d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint8_t num = get_u8(frm); 3310b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann char addr[18]; 3311d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann int i; 3312d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3313ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann if (!num) 3314ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann return; 3315d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3316ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann if (frm->len / num == INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE) { 3317ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann for (i = 0; i < num; i++) { 3318ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann inquiry_info_with_rssi_and_pscan_mode *info = frm->ptr; 3319d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3320ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann p_indent(level, frm); 3321d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3322bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&info->bdaddr, addr); 3323ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n", 3324ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann addr, info->pscan_rep_mode, btohs(info->clock_offset), 3325ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi); 3326ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann 3327ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann frm->ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE; 3328ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann frm->len -= INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE; 3329ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann } 3330ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann } else { 3331ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann for (i = 0; i < num; i++) { 3332ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann inquiry_info_with_rssi *info = frm->ptr; 3333ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann 3334ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann p_indent(level, frm); 3335ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann 3336bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&info->bdaddr, addr); 3337ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n", 3338ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann addr, info->pscan_rep_mode, btohs(info->clock_offset), 3339ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi); 3340ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann 3341ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE; 3342ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE; 3343ee6e41bf8cacd36a0558bf685d34617660a58e90Marcel Holtmann } 3344d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 3345d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann} 3346d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 334717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmannstatic inline void read_remote_ext_features_complete_dump(int level, struct frame *frm) 334817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann{ 334917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann evt_read_remote_ext_features_complete *evt = frm->ptr; 335017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann int i; 335117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 335217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 335317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("status 0x%2.2x handle %d page %d max %d\n", 3354120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->status, btohs(evt->handle), 3355120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->page_num, evt->max_page_num); 335617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 335717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann if (evt->status > 0) { 335817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 335917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 336017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } else { 336117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann p_indent(level, frm); 336217658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("Features:"); 336317658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann for (i = 0; i < 8; i++) 336417658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf(" 0x%2.2x", evt->features[i]); 336517658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann printf("\n"); 336617658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann } 336717658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann} 336817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann 3369d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_complete_dump(int level, struct frame *frm) 3370d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{ 3371d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann evt_sync_conn_complete *evt = frm->ptr; 3372d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann char addr[18]; 3373d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 3374bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&evt->bdaddr, addr); 3375d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 3376d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann p_indent(level, frm); 3377d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann printf("status 0x%2.2x handle %d bdaddr %s type %s\n", 3378120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->status, btohs(evt->handle), addr, 3379120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann evt->link_type == 0 ? "SCO" : "eSCO"); 3380d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 3381d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann if (evt->status > 0) { 3382d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann p_indent(level, frm); 3383d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3384d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann } else { 3385d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann p_indent(level, frm); 3386d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann printf("Air mode: %s\n", airmode2str(evt->air_mode)); 3387d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann } 3388d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann} 3389d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 3390d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmannstatic inline void sync_conn_changed_dump(int level, struct frame *frm) 3391d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann{ 3392d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann evt_sync_conn_changed *evt = frm->ptr; 3393d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 3394d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann p_indent(level, frm); 3395120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle)); 3396d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 3397d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann if (evt->status > 0) { 3398d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann p_indent(level, frm); 3399d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3400d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann } 3401d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann} 3402d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann 34033b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void sniff_subrating_event_dump(int level, struct frame *frm) 3404120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann{ 34053b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann evt_sniff_subrating *evt = frm->ptr; 3406120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann 3407120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann p_indent(level, frm); 3408120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle)); 3409120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann 3410120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann if (evt->status > 0) { 3411120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann p_indent(level, frm); 3412120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann printf("Error: %s\n", status2str(evt->status)); 3413120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann } else { 3414120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann p_indent(level, frm); 3415f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann printf("max latency transmit %d receive %d\n", 3416f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann btohs(evt->max_tx_latency), 3417f6c497efadbb0173986eb3da2d8982474a1da9caMarcel Holtmann btohs(evt->max_rx_latency)); 3418120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann 3419120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann p_indent(level, frm); 3420120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann printf("min timeout remote %d local %d\n", 3421120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann btohs(evt->min_remote_timeout), 3422120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann btohs(evt->min_local_timeout)); 3423120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann } 3424120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann} 3425120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann 3426807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmannstatic inline void extended_inq_result_dump(int level, struct frame *frm) 3427807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann{ 3428807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann uint8_t num = get_u8(frm); 3429807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann char addr[18]; 3430807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann int i; 3431807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann 3432807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann for (i = 0; i < num; i++) { 3433807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann extended_inquiry_info *info = frm->ptr; 3434807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann 3435bda29c1eba75f38240df570735d3e4bfc9c5a4d6Marcel Holtmann p_ba2str(&info->bdaddr, addr); 3436807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann 3437807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann p_indent(level, frm); 343827eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n", 3439807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann addr, info->pscan_rep_mode, btohs(info->clock_offset), 344027eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi); 344127eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann 344227eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE; 344327eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE; 344427eb1cb2512b886662cab125e53305ca6d779e7fMarcel Holtmann 3445e6bc40f4895cbd256bfa15922d8df2ebf37b4b09Marcel Holtmann ext_inquiry_response_dump(level, frm); 3446807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann } 3447807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann} 3448807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann 34493b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void link_supervision_timeout_changed_dump(int level, struct frame *frm) 3450d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann{ 34513b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann evt_link_supervision_timeout_changed *evt = frm->ptr; 3452d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann 3453d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann p_indent(level, frm); 3454d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann printf("handle %d timeout %d\n", 3455d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann btohs(evt->handle), btohs(evt->timeout)); 3456d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann} 3457d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann 3458b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void user_passkey_notify_dump(int level, struct frame *frm) 3459b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 3460b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann evt_user_passkey_notify *evt = frm->ptr; 3461b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann char addr[18]; 3462b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 3463b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 3464b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_ba2str(&evt->bdaddr, addr); 3465b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("bdaddr %s passkey %d\n", addr, btohl(evt->passkey)); 3466b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 3467b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 3468b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmannstatic inline void keypress_notify_dump(int level, struct frame *frm) 3469b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann{ 3470b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann evt_keypress_notify *evt = frm->ptr; 3471b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann char addr[18]; 3472b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 3473b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_indent(level, frm); 3474b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann p_ba2str(&evt->bdaddr, addr); 3475b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann printf("bdaddr %s type %d\n", addr, evt->type); 3476b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann} 3477b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann 34783b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmannstatic inline void remote_host_features_notify_dump(int level, struct frame *frm) 34793b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann{ 34803b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann evt_remote_host_features_notify *evt = frm->ptr; 34813b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann char addr[18]; 34823b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann int i; 34833b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 34843b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann p_indent(level, frm); 34853b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann p_ba2str(&evt->bdaddr, addr); 34863b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann printf("bdaddr %s\n", addr); 34873b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 34883b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann p_indent(level, frm); 34893b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann printf("Features:"); 34903b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann for (i = 0; i < 8; i++) 34913b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann printf(" 0x%2.2x", evt->features[i]); 34923b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann printf("\n"); 34933b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann} 34943b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann 3495b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void evt_le_conn_complete_dump(int level, struct frame *frm) 3496b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{ 3497b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo evt_le_connection_complete *evt = frm->ptr; 3498b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 3499b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo p_indent(level, frm); 3500c82d5e375ca2ae38d4152be6be58483061e2003cVille Tervo printf("status 0x%2.2x handle %d, role %s\n", 3501c82d5e375ca2ae38d4152be6be58483061e2003cVille Tervo evt->status, btohs(evt->handle), 3502c82d5e375ca2ae38d4152be6be58483061e2003cVille Tervo evt->role ? "slave" : "master"); 3503b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo} 3504b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 3505646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmannstatic inline void evt_le_advertising_report_dump(int level, struct frame *frm) 3506646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann{ 3507646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann uint8_t num = get_u8(frm); 3508646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann char addr[18]; 3509646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann int i; 3510646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann 3511646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann for (i = 0; i < num; i++) { 3512646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann le_advertising_info *info = frm->ptr; 3513646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann void *ptr = frm->ptr; 3514646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann uint32_t len = frm->len; 3515646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann 3516646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann p_ba2str(&info->bdaddr, addr); 3517646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann 3518646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann p_indent(level, frm); 3519646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann printf("%s (%d)\n", evttype2str(info->evt_type), info->evt_type); 3520646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann 3521646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann p_indent(level, frm); 3522c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann printf("bdaddr %s (%s)\n", addr, 3523c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann bdaddrtype2str(info->bdaddr_type)); 3524646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann 3525c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann frm->ptr += LE_ADVERTISING_INFO_SIZE; 3526c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann frm->len -= LE_ADVERTISING_INFO_SIZE; 3527646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann 3528646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann ext_inquiry_response_dump(level, frm); 3529646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann 3530c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann frm->ptr = ptr + 1; 3531c17020b4896833f03d4b40da48ee87a99b10bc6dMarcel Holtmann frm->len = len - 1; 3532646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann } 3533646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann} 3534646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann 3535b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martinsstatic inline void evt_le_conn_update_complete_dump(int level, 3536b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins struct frame *frm) 3537b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins{ 3538b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins evt_le_connection_update_complete *uevt = frm->ptr; 3539b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins 3540b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins p_indent(level, frm); 3541b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins printf("status 0x%2.2x handle %d\n", uevt->status, btohs(uevt->handle)); 3542b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins 3543b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins p_indent(level, frm); 3544b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins printf("interval %.2fms, latency %.2fms, superv. timeout %.2fms\n", 3545b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins btohs(uevt->interval) * 1.25, btohs(uevt->latency) * 1.25, 3546b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins btohs(uevt->supervision_timeout) * 10.0); 3547b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins} 3548b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins 35490766d9adeddb57249388421cf1138e3aace45265André Dieb Martinsstatic inline void evt_le_read_remote_used_features_complete_dump(int level, struct frame *frm) 35500766d9adeddb57249388421cf1138e3aace45265André Dieb Martins{ 35510766d9adeddb57249388421cf1138e3aace45265André Dieb Martins int i; 35520766d9adeddb57249388421cf1138e3aace45265André Dieb Martins evt_le_read_remote_used_features_complete *revt = frm->ptr; 35530766d9adeddb57249388421cf1138e3aace45265André Dieb Martins 35540766d9adeddb57249388421cf1138e3aace45265André Dieb Martins p_indent(level, frm); 35550766d9adeddb57249388421cf1138e3aace45265André Dieb Martins printf("status 0x%2.2x handle %d\n", revt->status, btohs(revt->handle)); 35560766d9adeddb57249388421cf1138e3aace45265André Dieb Martins 35570766d9adeddb57249388421cf1138e3aace45265André Dieb Martins if (revt->status > 0) { 35580766d9adeddb57249388421cf1138e3aace45265André Dieb Martins p_indent(level, frm); 35590766d9adeddb57249388421cf1138e3aace45265André Dieb Martins printf("Error: %s\n", status2str(revt->status)); 35600766d9adeddb57249388421cf1138e3aace45265André Dieb Martins } else { 35610766d9adeddb57249388421cf1138e3aace45265André Dieb Martins p_indent(level, frm); 35620766d9adeddb57249388421cf1138e3aace45265André Dieb Martins printf("Features:"); 35630766d9adeddb57249388421cf1138e3aace45265André Dieb Martins for (i = 0; i < 8; i++) 35640766d9adeddb57249388421cf1138e3aace45265André Dieb Martins printf(" 0x%2.2x", revt->features[i]); 35650766d9adeddb57249388421cf1138e3aace45265André Dieb Martins printf("\n"); 35660766d9adeddb57249388421cf1138e3aace45265André Dieb Martins } 35670766d9adeddb57249388421cf1138e3aace45265André Dieb Martins} 35680766d9adeddb57249388421cf1138e3aace45265André Dieb Martins 3569b26718ede1fc41b10071b9ee22d21638542275dbVille Tervostatic inline void le_meta_ev_dump(int level, struct frame *frm) 3570b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo{ 3571b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo evt_le_meta_event *mevt = frm->ptr; 3572b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo uint8_t subevent; 3573b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 3574b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo subevent = mevt->subevent; 3575b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 3576b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo frm->ptr += EVT_LE_META_EVENT_SIZE; 3577b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo frm->len -= EVT_LE_META_EVENT_SIZE; 3578b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 3579b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo p_indent(level, frm); 3580b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo printf("%s\n", ev_le_meta_str[subevent]); 3581b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 3582b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo switch (mevt->subevent) { 3583b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo case EVT_LE_CONN_COMPLETE: 3584b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo evt_le_conn_complete_dump(level + 1, frm); 3585b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo break; 3586646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann case EVT_LE_ADVERTISING_REPORT: 3587646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann evt_le_advertising_report_dump(level + 1, frm); 3588646bd738cce8186a6aa592738ffaf4fa9b12761dMarcel Holtmann break; 3589b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins case EVT_LE_CONN_UPDATE_COMPLETE: 3590b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins evt_le_conn_update_complete_dump(level + 1, frm); 3591b426956e64104a0561d8e6b10e4cc66ffee3cb9bAndré Dieb Martins break; 35920766d9adeddb57249388421cf1138e3aace45265André Dieb Martins case EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE: 35930766d9adeddb57249388421cf1138e3aace45265André Dieb Martins evt_le_read_remote_used_features_complete_dump(level + 1, frm); 35940766d9adeddb57249388421cf1138e3aace45265André Dieb Martins break; 3595b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo default: 3596b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo raw_dump(level, frm); 3597b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo break; 3598b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo } 3599b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo} 3600b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo 3601652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void phys_link_complete_dump(int level, struct frame *frm) 3602652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{ 3603652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland evt_physical_link_complete *evt = frm->ptr; 3604652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3605652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland p_indent(level, frm); 3606652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland printf("status 0x%2.2x handle %d\n", evt->status, evt->handle); 3607652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3608652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland if (evt->status > 0) { 3609652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland p_indent(level, frm); 3610652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland printf("Error: %s\n", status2str(evt->status)); 3611652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland } 3612652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland} 3613652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3614652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void disconn_phys_link_complete_dump(int level, struct frame *frm) 3615652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{ 3616652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland evt_disconn_physical_link_complete *evt = frm->ptr; 3617652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3618652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland p_indent(level, frm); 3619652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland printf("status 0x%2.2x handle %d reason 0x%2.2x\n", 3620652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland evt->status, evt->handle, evt->reason); 3621652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3622652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland if (evt->status > 0) { 3623652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland p_indent(level, frm); 3624652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland printf("Error: %s\n", status2str(evt->status)); 3625652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland } else if (evt->reason > 0) { 3626652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland p_indent(level, frm); 3627652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland printf("Reason: %s\n", status2str(evt->reason)); 3628652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland } 3629652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland} 3630652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3631652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void phys_link_loss_warning_dump(int level, struct frame *frm) 3632652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{ 3633652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland evt_physical_link_loss_warning *evt = frm->ptr; 3634652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3635652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland p_indent(level, frm); 3636652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland printf("handle %d reason 0x%2.2x\n", evt->handle, evt->reason); 3637652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland} 3638652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3639652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void phys_link_handle_dump(int level, struct frame *frm) 3640652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{ 3641652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland evt_physical_link_recovery *evt = frm->ptr; 3642652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3643652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland p_indent(level, frm); 3644652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland printf("handle %d\n", evt->handle); 3645652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland} 3646652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3647652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void logical_link_complete_dump(int level, struct frame *frm) 3648652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{ 3649652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland evt_logical_link_complete *evt = frm->ptr; 3650652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3651652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland p_indent(level, frm); 3652652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland printf("status 0x%2.2x log_handle %d handle %d tx_flow_id %d\n", 3653652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland evt->status, btohs(evt->log_handle), evt->handle, 3654652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland evt->tx_flow_id); 3655652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3656652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland if (evt->status > 0) { 3657652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland p_indent(level, frm); 3658652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland printf("Error: %s\n", status2str(evt->status)); 3659652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland } 3660652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland} 3661652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3662652ae93351acf4510956eaa034283ce2d951eea8Inga Stotlandstatic inline void flow_spec_modify_dump(int level, struct frame *frm) 3663652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland{ 3664652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland evt_flow_spec_modify_complete *evt = frm->ptr; 3665652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3666652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland p_indent(level, frm); 3667652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle)); 3668652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 3669652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland if (evt->status > 0) { 3670652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland p_indent(level, frm); 3671652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland printf("Error: %s\n", status2str(evt->status)); 3672652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland } 3673652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland} 3674652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland 367565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void event_dump(int level, struct frame *frm) 367695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{ 3677174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky hci_event_hdr *hdr = frm->ptr; 3678be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann uint8_t event = hdr->evt; 367965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 368065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky if (p_filter(FILT_HCI)) 368165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky return; 368265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 3683d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (event <= EVENT_NUM) { 36847b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann p_indent(level, frm); 3685803752117135528b1adebf0fa045596e188a996dMarcel Holtmann printf("HCI Event: %s (0x%2.2x) plen %d\n", 36867b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann event_str[hdr->evt], hdr->evt, hdr->plen); 3687be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } else if (hdr->evt == EVT_TESTING) { 36887b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann p_indent(level, frm); 3689803752117135528b1adebf0fa045596e188a996dMarcel Holtmann printf("HCI Event: Testing (0x%2.2x) plen %d\n", hdr->evt, hdr->plen); 3690be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } else if (hdr->evt == EVT_VENDOR) { 3691a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann uint16_t manufacturer; 3692a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann 36937b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann if (parser.flags & DUMP_NOVENDOR) 36947b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann return; 36957b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann 36967b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann p_indent(level, frm); 3697803752117135528b1adebf0fa045596e188a996dMarcel Holtmann printf("HCI Event: Vendor (0x%2.2x) plen %d\n", hdr->evt, hdr->plen); 36987b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann 3699a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann manufacturer = get_manufacturer(); 3700a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann 3701a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann switch (manufacturer) { 3702a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann case 0: 3703e1e8e8d65fe211c133b53cf8af8883caf7936314Marcel Holtmann case 37: 3704a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann case 48: 3705a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann frm->ptr += HCI_EVENT_HDR_SIZE; 3706a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann frm->len -= HCI_EVENT_HDR_SIZE; 3707a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann ericsson_dump(level + 1, frm); 3708a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann return; 3709a6f87c461a00bacaa481084418ed0a94f6b06b51Marcel Holtmann case 10: 3710be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann frm->ptr += HCI_EVENT_HDR_SIZE; 3711be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann frm->len -= HCI_EVENT_HDR_SIZE; 3712be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann csr_dump(level + 1, frm); 3713be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann return; 3714be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } 37157b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann } else { 37167b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann p_indent(level, frm); 371766f5420f4bf345b06f5b2f651d505b57afa6628cMax Krasnyansky printf("HCI Event: code 0x%2.2x plen %d\n", hdr->evt, hdr->plen); 37187b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann } 371965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 372065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky frm->ptr += HCI_EVENT_HDR_SIZE; 372165eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky frm->len -= HCI_EVENT_HDR_SIZE; 372265eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 3723be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann if (event == EVT_CMD_COMPLETE) { 3724be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann evt_cmd_complete *cc = frm->ptr; 3725be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann if (cc->opcode == cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION)) { 3726be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann read_local_version_rp *rp = frm->ptr + EVT_CMD_COMPLETE_SIZE; 3727be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann manufacturer = rp->manufacturer; 3728be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } 3729be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann } 3730be9be844106d677ec77acee68935bc9e66772123Marcel Holtmann 373125554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann if (event == EVT_DISCONN_COMPLETE) { 373225554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann evt_disconn_complete *evt = frm->ptr; 373325554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann l2cap_clear(btohs(evt->handle)); 373425554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann } 373525554b7695f8c13c5ff4da1305109d2746b28021Marcel Holtmann 3736d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann if (!(parser.flags & DUMP_VERBOSE)) { 3737d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann raw_dump(level, frm); 3738d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann return; 3739d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 3740d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann 3741d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann switch (event) { 3742ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann case EVT_LOOPBACK_COMMAND: 3743ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann command_dump(level + 1, frm); 3744ed75dab3ba0fdb777c1620b3a2a997519c91889aMarcel Holtmann break; 3745d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_CMD_COMPLETE: 3746d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd_complete_dump(level + 1, frm); 3747d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 3748d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_CMD_STATUS: 3749d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann cmd_status_dump(level + 1, frm); 3750d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 3751afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann case EVT_HARDWARE_ERROR: 3752afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann hardware_error_dump(level + 1, frm); 3753afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann break; 3754afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann case EVT_FLUSH_OCCURRED: 3755f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann case EVT_QOS_VIOLATION: 3756afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann handle_response_dump(level + 1, frm); 3757afc1d860f072974b6c5f605251f34b3318a4060aMarcel Holtmann break; 3758d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_INQUIRY_COMPLETE: 3759d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann status_response_dump(level + 1, frm); 3760d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 3761d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_INQUIRY_RESULT: 3762d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann inq_result_dump(level + 1, frm); 3763d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 3764d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_CONN_COMPLETE: 3765d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann conn_complete_dump(level + 1, frm); 3766d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 3767d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_CONN_REQUEST: 3768d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann conn_request_dump(level + 1, frm); 3769d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 3770d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_DISCONN_COMPLETE: 3771652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland case EVT_DISCONNECT_LOGICAL_LINK_COMPLETE: 3772d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann disconn_complete_dump(level + 1, frm); 3773d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 3774d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_AUTH_COMPLETE: 3775d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_CHANGE_CONN_LINK_KEY_COMPLETE: 3776d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann generic_response_dump(level + 1, frm); 3777d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 377817658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case EVT_MASTER_LINK_KEY_COMPLETE: 377917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann master_link_key_complete_dump(level + 1, frm); 378017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 3781d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_REMOTE_NAME_REQ_COMPLETE: 3782d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann remote_name_req_complete_dump(level + 1, frm); 3783d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 3784d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_ENCRYPT_CHANGE: 3785d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann encrypt_change_dump(level + 1, frm); 3786d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 3787ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_READ_REMOTE_FEATURES_COMPLETE: 3788ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_remote_features_complete_dump(level + 1, frm); 3789ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 3790ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_READ_REMOTE_VERSION_COMPLETE: 3791ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_remote_version_complete_dump(level + 1, frm); 3792ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 3793ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_QOS_SETUP_COMPLETE: 379411c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann qos_setup_complete_dump(level + 1, frm); 3795ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 3796ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_ROLE_CHANGE: 3797ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann role_change_dump(level + 1, frm); 3798ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 3799ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_NUM_COMP_PKTS: 3800ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann num_comp_pkts_dump(level + 1, frm); 3801ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 3802ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_MODE_CHANGE: 3803ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann mode_change_dump(level + 1, frm); 3804ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 3805b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann case EVT_RETURN_LINK_KEYS: 3806b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann return_link_keys_dump(level + 1, frm); 3807b25b9075df78236f81d8018727dd55708c9ee3edMarcel Holtmann break; 3808ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_PIN_CODE_REQ: 3809ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_LINK_KEY_REQ: 3810b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case EVT_IO_CAPABILITY_REQUEST: 3811b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case EVT_USER_PASSKEY_REQUEST: 3812b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case EVT_REMOTE_OOB_DATA_REQUEST: 3813ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann pin_code_req_dump(level + 1, frm); 3814ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 3815ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_LINK_KEY_NOTIFY: 3816ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann link_key_notify_dump(level + 1, frm); 3817ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 3818c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann case EVT_DATA_BUFFER_OVERFLOW: 3819c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann data_buffer_overflow_dump(level + 1, frm); 3820c2441f0f7171f370271ef66592b81c5276576697Marcel Holtmann break; 382111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann case EVT_MAX_SLOTS_CHANGE: 382211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann max_slots_change_dump(level + 1, frm); 382311c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann break; 3824ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_READ_CLOCK_OFFSET_COMPLETE: 3825ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann read_clock_offset_complete_dump(level + 1, frm); 3826ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 3827ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann case EVT_CONN_PTYPE_CHANGED: 3828ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann conn_ptype_changed_dump(level + 1, frm); 3829ee919f458b664daf179fb00548378ad851f89d02Marcel Holtmann break; 383011c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann case EVT_PSCAN_REP_MODE_CHANGE: 383111c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann pscan_rep_mode_change_dump(level + 1, frm); 383211c1fc83f077dc7fda24c5b26e78ea2b0bd2d19fMarcel Holtmann break; 3833f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann case EVT_FLOW_SPEC_COMPLETE: 3834f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann flow_spec_complete_dump(level + 1, frm); 3835f5e58ed78f6328182cbf2dd23c326251492bb945Marcel Holtmann break; 3836d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann case EVT_INQUIRY_RESULT_WITH_RSSI: 3837d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann inq_result_with_rssi_dump(level + 1, frm); 3838d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 383917658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann case EVT_READ_REMOTE_EXT_FEATURES_COMPLETE: 384017658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann read_remote_ext_features_complete_dump(level + 1, frm); 384117658e63399e2e2bba842322a1ccb543a9040cc4Marcel Holtmann break; 3842d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case EVT_SYNC_CONN_COMPLETE: 3843d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann sync_conn_complete_dump(level + 1, frm); 3844d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann break; 3845d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann case EVT_SYNC_CONN_CHANGED: 3846d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann sync_conn_changed_dump(level + 1, frm); 3847d9cfcf1c719f5be05f731d421d664bed00ca5d04Marcel Holtmann break; 38483b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case EVT_SNIFF_SUBRATING: 38493b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann sniff_subrating_event_dump(level + 1, frm); 3850120063f07f207a7d1f349d1b199a4e06a12d6635Marcel Holtmann break; 3851807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann case EVT_EXTENDED_INQUIRY_RESULT: 3852807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann extended_inq_result_dump(level + 1, frm); 3853807e20593d2c2c0b9475e31f43bec75d2796a2ddMarcel Holtmann break; 38543b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case EVT_ENCRYPTION_KEY_REFRESH_COMPLETE: 38553b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann generic_response_dump(level + 1, frm); 38563b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann break; 3857b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case EVT_SIMPLE_PAIRING_COMPLETE: 3858b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann bdaddr_response_dump(level + 1, frm); 3859b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann break; 38603b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case EVT_LINK_SUPERVISION_TIMEOUT_CHANGED: 38613b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann link_supervision_timeout_changed_dump(level + 1, frm); 38623b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann break; 38633b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case EVT_ENHANCED_FLUSH_COMPLETE: 38643b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann generic_command_dump(level + 1, frm); 38653b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann break; 3866b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case EVT_IO_CAPABILITY_RESPONSE: 3867b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann io_capability_reply_dump(level + 1, frm); 3868b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann break; 3869b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case EVT_USER_CONFIRM_REQUEST: 3870b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case EVT_USER_PASSKEY_NOTIFY: 3871b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann user_passkey_notify_dump(level + 1, frm); 3872b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann break; 3873b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann case EVT_KEYPRESS_NOTIFY: 3874b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann keypress_notify_dump(level + 1, frm); 3875b7ce6233023543eba1e93346fb92ce18e23d4ca1Marcel Holtmann break; 38763b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann case EVT_REMOTE_HOST_FEATURES_NOTIFY: 38773b0387db28ca8ae1dcb8ff31009ce750083f8a13Marcel Holtmann remote_host_features_notify_dump(level + 1, frm); 3878d6821ff2b800acae15702935d84a0b3cbbf04c6cMarcel Holtmann break; 3879b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo case EVT_LE_META_EVENT: 3880b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo le_meta_ev_dump(level + 1, frm); 3881b26718ede1fc41b10071b9ee22d21638542275dbVille Tervo break; 3882652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland case EVT_PHYSICAL_LINK_COMPLETE: 3883652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland phys_link_complete_dump(level + 1, frm); 3884652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland break; 3885652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland case EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE: 3886652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland disconn_phys_link_complete_dump(level + 1, frm); 3887652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland break; 3888652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland case EVT_PHYSICAL_LINK_LOSS_EARLY_WARNING: 3889652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland phys_link_loss_warning_dump(level + 1, frm); 3890652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland break; 3891652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland case EVT_PHYSICAL_LINK_RECOVERY: 3892652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland case EVT_CHANNEL_SELECTED: 3893652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland phys_link_handle_dump(level + 1, frm); 3894652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland break; 3895652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland case EVT_LOGICAL_LINK_COMPLETE: 3896652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland logical_link_complete_dump(level + 1, frm); 3897652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland break; 3898652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland case EVT_FLOW_SPEC_MODIFY_COMPLETE: 3899652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland flow_spec_modify_dump(level + 1, frm); 3900652ae93351acf4510956eaa034283ce2d951eea8Inga Stotland break; 3901d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann default: 3902d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann raw_dump(level, frm); 3903d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann break; 3904d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann } 390595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky} 390695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 390765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyanskystatic inline void acl_dump(int level, struct frame *frm) 390895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{ 3909174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky hci_acl_hdr *hdr = (void *) frm->ptr; 39100d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint16_t handle = btohs(hdr->handle); 39110d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint16_t dlen = btohs(hdr->dlen); 39120d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint8_t flags = acl_flags(handle); 391365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 391465eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky if (!p_filter(FILT_HCI)) { 3915ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky p_indent(level, frm); 3916d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann printf("ACL data: handle %d flags 0x%2.2x dlen %d\n", 391765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky acl_handle(handle), flags, dlen); 391865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky level++; 391965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky } 3920e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann 3921e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann frm->ptr += HCI_ACL_HDR_SIZE; 3922e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann frm->len -= HCI_ACL_HDR_SIZE; 3923f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky frm->flags = flags; 3924f52b57b5f26caf9b8d2a8cc9c01c8f6027a16d1fMax Krasnyansky frm->handle = acl_handle(handle); 392565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 392665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky if (parser.filter & ~FILT_HCI) 392765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky l2cap_dump(level, frm); 392865eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky else 392965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky raw_dump(level, frm); 393095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky} 393195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 3932d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyanskystatic inline void sco_dump(int level, struct frame *frm) 3933d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky{ 3934d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky hci_sco_hdr *hdr = (void *) frm->ptr; 39350d93444945039e6acf74a874053d07fb0114fee7Marcel Holtmann uint16_t handle = btohs(hdr->handle); 39368f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann uint8_t flags = acl_flags(handle); 39376d3f2066a10cd7d0812fdf97635f1bd77f003493Marcel Holtmann int len; 3938d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky 39399e216633a0f902b7d069c08939c67e03dd4ee516Marcel Holtmann if (frm->audio_fd > fileno(stderr)) 39406d3f2066a10cd7d0812fdf97635f1bd77f003493Marcel Holtmann len = write(frm->audio_fd, frm->ptr + HCI_SCO_HDR_SIZE, hdr->dlen); 39410033462dddb3b4adf56ea28680c1f135f25a4387Marcel Holtmann 3942d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky if (!p_filter(FILT_SCO)) { 3943ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky p_indent(level, frm); 39448f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann printf("SCO data: handle %d flags 0x%2.2x dlen %d\n", 39458f519c95faf49f2ef3c79fb759a0a91713f1be15Marcel Holtmann acl_handle(handle), flags, hdr->dlen); 3946d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky level++; 3947d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky 3948d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky frm->ptr += HCI_SCO_HDR_SIZE; 3949d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky frm->len -= HCI_SCO_HDR_SIZE; 3950d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky raw_dump(level, frm); 3951d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky } 3952d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky} 3953d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky 3954b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmannstatic inline void vendor_dump(int level, struct frame *frm) 3955b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann{ 3956b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann if (p_filter(FILT_HCI)) 3957b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann return; 3958b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann 395938acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann if (frm->dev_id == HCI_DEV_NONE) { 3960a4d60061ed080704f1e1c076d59ac0b03aaa0fd1Marcel Holtmann uint16_t device = btohs(htons(get_u16(frm))); 3961ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann uint16_t proto = btohs(htons(get_u16(frm))); 396238acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann uint16_t type = btohs(htons(get_u16(frm))); 396338acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann uint16_t plen = btohs(htons(get_u16(frm))); 396438acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann 396538acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann p_indent(level, frm); 396638acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann 3967ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann printf("System %s: device hci%d proto 0x%2.2x type 0x%2.2x plen %d\n", 3968ef55fce5a5a981237ed3d6fd3b0bfd09d9e2c20aMarcel Holtmann frm->in ? "event" : "command", device, proto, type, plen); 396938acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann 397038acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann raw_dump(level, frm); 397138acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann return; 397238acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann } 397338acf6c4b654265055359f113f5a301115ca0947Marcel Holtmann 39747b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann if (parser.flags & DUMP_NOVENDOR) 39757b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann return; 39767b569efa1aca959152329631d0fc9f9bf70bc49bMarcel Holtmann 3977b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann if (get_manufacturer() == 12) { 3978b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann bpa_dump(level, frm); 3979b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann return; 3980b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann } 3981b87fd61b9db5ae801fd257e1613028e35e9dcae2Marcel Holtmann 3982b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann p_indent(level, frm); 3983b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann printf("Vendor data: len %d\n", frm->len); 3984b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann raw_dump(level, frm); 3985b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann} 3986b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann 3987174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyanskyvoid hci_dump(int level, struct frame *frm) 398895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky{ 3989d56313fb721793c92a1618eeb4d155e8561226b8Marcel Holtmann uint8_t type = *(uint8_t *)frm->ptr; 399095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 3991174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky frm->ptr++; frm->len--; 3992e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann 399395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky switch (type) { 399495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky case HCI_COMMAND_PKT: 399565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky command_dump(level, frm); 399695e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky break; 399795e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 399895e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky case HCI_EVENT_PKT: 399965eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky event_dump(level, frm); 400095e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky break; 400195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 400295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky case HCI_ACLDATA_PKT: 400365eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky acl_dump(level, frm); 400495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky break; 400595e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky 4006d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky case HCI_SCODATA_PKT: 4007d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky sco_dump(level, frm); 4008d467427f3634db7678a6d8e9ff1aecd1b76f66c3Max Krasnyansky break; 4009e918e1383e6e80ba4e4808404999521f984f0b5cMarcel Holtmann 4010b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann case HCI_VENDOR_PKT: 4011b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann vendor_dump(level, frm); 4012b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann break; 4013b1953d7820f5fdbdde4951c7ad4047aa63a31644Marcel Holtmann 401495e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky default: 401565eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky if (p_filter(FILT_HCI)) 401665eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky break; 401765eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky 4018ac107582bff10f3b4c80b2f158ec4281476c2b2fMax Krasnyansky p_indent(level, frm); 4019174f39016a9aa77cda60ee578f535c8c026ef787Max Krasnyansky printf("Unknown: type 0x%2.2x len %d\n", type, frm->len); 402065eccecf5c288b7b1bc8bf985fa59d3dd4ce0cfbMax Krasnyansky raw_dump(level, frm); 402195e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky break; 402295e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky } 402395e558b9f6fd21e1b60b35ea86fcb502f333954aMax Krasnyansky} 4024