3 * BlueZ - Bluetooth protocol stack for Linux
5 * Copyright (C) 2000-2002 Maxim Krasnyansky <maxk@qualcomm.com>
6 * Copyright (C) 2003-2011 Marcel Holtmann <marcel@holtmann.org>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
38 #include "lib/hci_lib.h"
41 static uint16_t manufacturer = DEFAULT_COMPID;
43 static inline uint16_t get_manufacturer(void)
45 return (manufacturer == DEFAULT_COMPID ? parser.defcompid : manufacturer);
49 static char *event_str[EVENT_NUM + 1] = {
57 "Remote Name Req Complete",
59 "Change Connection Link Key Complete",
60 "Master Link Key Complete",
61 "Read Remote Supported Features",
62 "Read Remote Ver Info Complete",
69 "Number of Completed Packets",
74 "Link Key Notification",
76 "Data Buffer Overflow",
78 "Read Clock Offset Complete",
79 "Connection Packet Type Changed",
81 "Page Scan Mode Change",
82 "Page Scan Repetition Mode Change",
83 "Flow Specification Complete",
84 "Inquiry Result with RSSI",
85 "Read Remote Extended Features",
94 "Synchronous Connect Complete",
95 "Synchronous Connect Changed",
97 "Extended Inquiry Result",
98 "Encryption Key Refresh Complete",
99 "IO Capability Request",
100 "IO Capability Response",
101 "User Confirmation Request",
102 "User Passkey Request",
103 "Remote OOB Data Request",
104 "Simple Pairing Complete",
106 "Link Supervision Timeout Change",
107 "Enhanced Flush Complete",
109 "User Passkey Notification",
110 "Keypress Notification",
111 "Remote Host Supported Features Notification",
114 "Physical Link Complete",
116 "Disconnection Physical Link Complete",
117 "Physical Link Loss Early Warning",
118 "Physical Link Recovery",
119 "Logical Link Complete",
120 "Disconnection Logical Link Complete",
121 "Flow Spec Modify Complete",
122 "Number Of Completed Data Blocks",
125 "AMP Receiver Report",
126 "Short Range Mode Change Complete",
131 static char *ev_le_meta_str[LE_EV_NUM + 1] = {
133 "LE Connection Complete",
134 "LE Advertising Report",
135 "LE Connection Update Complete",
136 "LE Read Remote Used Features Complete",
137 "LE Long Term Key Request",
140 #define CMD_LINKCTL_NUM 60
141 static char *cmd_linkctl_str[CMD_LINKCTL_NUM + 1] = {
145 "Periodic Inquiry Mode",
146 "Exit Periodic Inquiry Mode",
149 "Add SCO Connection",
150 "Create Connection Cancel",
151 "Accept Connection Request",
152 "Reject Connection Request",
153 "Link Key Request Reply",
154 "Link Key Request Negative Reply",
155 "PIN Code Request Reply",
156 "PIN Code Request Negative Reply",
157 "Change Connection Packet Type",
159 "Authentication Requested",
161 "Set Connection Encryption",
163 "Change Connection Link Key",
167 "Remote Name Request",
168 "Remote Name Request Cancel",
169 "Read Remote Supported Features",
170 "Read Remote Extended Features",
171 "Read Remote Version Information",
182 "Setup Synchronous Connection",
183 "Accept Synchronous Connection",
184 "Reject Synchronous Connection",
185 "IO Capability Request Reply",
186 "User Confirmation Request Reply",
187 "User Confirmation Request Negative Reply",
188 "User Passkey Request Reply",
189 "User Passkey Request Negative Reply",
190 "Remote OOB Data Request Reply",
193 "Remote OOB Data Request Negative Reply",
194 "IO Capability Request Negative Reply",
195 "Create Physical Link",
196 "Accept Physical Link",
197 "Disconnect Physical Link",
198 "Create Logical Link",
199 "Accept Logical Link",
200 "Disconnect Logical Link",
201 "Logical Link Cancel",
205 #define CMD_LINKPOL_NUM 17
206 static char *cmd_linkpol_str[CMD_LINKPOL_NUM + 1] = {
219 "Read Link Policy Settings",
220 "Write Link Policy Settings",
221 "Read Default Link Policy Settings",
222 "Write Default Link Policy Settings",
223 "Flow Specification",
227 #define CMD_HOSTCTL_NUM 109
228 static char *cmd_hostctl_str[CMD_HOSTCTL_NUM + 1] = {
240 "Create New Unit Key",
242 "Read Stored Link Key",
246 "Write Stored Link Key",
247 "Delete Stored Link Key",
250 "Read Connection Accept Timeout",
251 "Write Connection Accept Timeout",
253 "Write Page Timeout",
256 "Read Page Scan Activity",
257 "Write Page Scan Activity",
258 "Read Inquiry Scan Activity",
259 "Write Inquiry Scan Activity",
260 "Read Authentication Enable",
261 "Write Authentication Enable",
262 "Read Encryption Mode",
263 "Write Encryption Mode",
264 "Read Class of Device",
265 "Write Class of Device",
266 "Read Voice Setting",
267 "Write Voice Setting",
268 "Read Automatic Flush Timeout",
269 "Write Automatic Flush Timeout",
270 "Read Num Broadcast Retransmissions",
271 "Write Num Broadcast Retransmissions",
272 "Read Hold Mode Activity ",
273 "Write Hold Mode Activity",
274 "Read Transmit Power Level",
275 "Read Synchronous Flow Control Enable",
276 "Write Synchronous Flow Control Enable",
278 "Set Host Controller To Host Flow Control",
282 "Host Number of Completed Packets",
283 "Read Link Supervision Timeout",
284 "Write Link Supervision Timeout",
285 "Read Number of Supported IAC",
286 "Read Current IAC LAP",
287 "Write Current IAC LAP",
288 "Read Page Scan Period Mode",
289 "Write Page Scan Period Mode",
290 "Read Page Scan Mode",
291 "Write Page Scan Mode",
292 "Set AFH Host Channel Classification",
295 "Read Inquiry Scan Type",
296 "Write Inquiry Scan Type",
298 "Write Inquiry Mode",
299 "Read Page Scan Type",
300 "Write Page Scan Type",
301 "Read AFH Channel Assessment Mode",
302 "Write AFH Channel Assessment Mode",
310 "Read Extended Inquiry Response",
311 "Write Extended Inquiry Response",
312 "Refresh Encryption Key",
314 "Read Simple Pairing Mode",
315 "Write Simple Pairing Mode",
316 "Read Local OOB Data",
317 "Read Inquiry Response Transmit Power Level",
318 "Write Inquiry Transmit Power Level",
319 "Read Default Erroneous Data Reporting",
320 "Write Default Erroneous Data Reporting",
326 "Read Logical Link Accept Timeout",
327 "Write Logical Link Accept Timeout",
328 "Set Event Mask Page 2",
329 "Read Location Data",
330 "Write Location Data",
331 "Read Flow Control Mode",
332 "Write Flow Control Mode",
333 "Read Enhanced Transmit Power Level",
334 "Read Best Effort Flush Timeout",
335 "Write Best Effort Flush Timeout",
337 "Read LE Host Supported",
338 "Write LE Host Supported",
341 #define CMD_INFO_NUM 10
342 static char *cmd_info_str[CMD_INFO_NUM + 1] = {
344 "Read Local Version Information",
345 "Read Local Supported Commands",
346 "Read Local Supported Features",
347 "Read Local Extended Features",
353 "Read Data Block Size",
356 #define CMD_STATUS_NUM 11
357 static char *cmd_status_str[CMD_STATUS_NUM + 1] = {
359 "Read Failed Contact Counter",
360 "Reset Failed Contact Counter",
364 "Read AFH Channel Map",
366 "Read Encryption Key Size",
367 "Read Local AMP Info",
368 "Read Local AMP ASSOC",
369 "Write Remote AMP ASSOC"
372 #define CMD_TESTING_NUM 4
373 static char *cmd_testing_str[CMD_TESTING_NUM + 1] = {
375 "Read Loopback Mode",
376 "Write Loopback Mode",
377 "Enable Device Under Test mode",
381 #define CMD_LE_NUM 31
382 static char *cmd_le_str[CMD_LE_NUM + 1] = {
385 "LE Read Buffer Size",
386 "LE Read Local Supported Features",
388 "LE Set Random Address",
389 "LE Set Advertising Parameters",
390 "LE Read Advertising Channel Tx Power",
391 "LE Set Advertising Data",
392 "LE Set Scan Response Data",
393 "LE Set Advertise Enable",
394 "LE Set Scan Parameters",
395 "LE Set Scan Enable",
396 "LE Create Connection",
397 "LE Create Connection Cancel",
398 "LE Read White List Size",
399 "LE Clear White List",
400 "LE Add Device To White List",
401 "LE Remove Device From White List",
402 "LE Connection Update",
403 "LE Set Host Channel Classification",
404 "LE Read Channel Map",
405 "LE Read Remote Used Features",
408 "LE Start Encryption",
409 "LE Long Term Key Request Reply",
410 "LE Long Term Key Request Negative Reply",
411 "LE Read Supported States",
413 "LE Transmitter Test",
417 #define ERROR_CODE_NUM 63
418 static char *error_code_str[ERROR_CODE_NUM + 1] = {
420 "Unknown HCI Command",
421 "Unknown Connection Identifier",
424 "Authentication Failure",
425 "PIN or Key Missing",
426 "Memory Capacity Exceeded",
427 "Connection Timeout",
428 "Connection Limit Exceeded",
429 "Synchronous Connection to a Device Exceeded",
430 "ACL Connection Already Exists",
431 "Command Disallowed",
432 "Connection Rejected due to Limited Resources",
433 "Connection Rejected due to Security Reasons",
434 "Connection Rejected due to Unacceptable BD_ADDR",
435 "Connection Accept Timeout Exceeded",
436 "Unsupported Feature or Parameter Value",
437 "Invalid HCI Command Parameters",
438 "Remote User Terminated Connection",
439 "Remote Device Terminated Connection due to Low Resources",
440 "Remote Device Terminated Connection due to Power Off",
441 "Connection Terminated by Local Host",
443 "Pairing Not Allowed",
445 "Unsupported Remote Feature / Unsupported LMP Feature",
446 "SCO Offset Rejected",
447 "SCO Interval Rejected",
448 "SCO Air Mode Rejected",
449 "Invalid LMP Parameters / Invalid LL Parameters",
451 "Unsupported LMP Parameter Value / Unsupported LL Parameter Value",
452 "Role Change Not Allowed",
453 "LMP Response Timeout",
454 "LMP Error Transaction Collision",
455 "LMP PDU Not Allowed",
456 "Encryption Mode Not Acceptable",
457 "Link Key Can Not be Changed",
458 "Requested QoS Not Supported",
460 "Pairing with Unit Key Not Supported",
461 "Different Transaction Collision",
463 "QoS Unacceptable Parameter",
465 "Channel Classification Not Supported",
466 "Insufficient Security",
467 "Parameter out of Mandatory Range",
469 "Role Switch Pending",
471 "Reserved Slot Violation",
472 "Role Switch Failed",
473 "Extended Inquiry Response Too Large",
474 "Simple Pairing Not Supported by Host",
475 "Host Busy - Pairing",
476 "Connection Rejected due to No Suitable Channel Found",
478 "Unacceptable Connection Parameters",
479 "Directed Advertising Timeout",
480 "Connection Terminated Due to MIC Failure",
481 "Connection Failed to be Established",
482 "MAC Connection Failed",
485 static char *status2str(uint8_t status)
489 if (status <= ERROR_CODE_NUM)
490 str = error_code_str[status];
497 static char *opcode2str(uint16_t opcode)
499 uint16_t ogf = cmd_opcode_ogf(opcode);
500 uint16_t ocf = cmd_opcode_ocf(opcode);
505 if (ocf <= CMD_INFO_NUM)
506 cmd = cmd_info_str[ocf];
512 if (ocf <= CMD_HOSTCTL_NUM)
513 cmd = cmd_hostctl_str[ocf];
519 if (ocf <= CMD_LINKCTL_NUM)
520 cmd = cmd_linkctl_str[ocf];
525 case OGF_LINK_POLICY:
526 if (ocf <= CMD_LINKPOL_NUM)
527 cmd = cmd_linkpol_str[ocf];
532 case OGF_STATUS_PARAM:
533 if (ocf <= CMD_STATUS_NUM)
534 cmd = cmd_status_str[ocf];
539 case OGF_TESTING_CMD:
540 if (ocf <= CMD_TESTING_NUM)
541 cmd = cmd_testing_str[ocf];
547 if (ocf <= CMD_LE_NUM)
548 cmd = cmd_le_str[ocf];
565 static char *linktype2str(uint8_t type)
579 static char *role2str(uint8_t role)
591 static char *mode2str(uint8_t mode)
607 static char *airmode2str(uint8_t mode)
617 return "Transparent data";
623 static const char *bdaddrtype2str(uint8_t type)
635 static const char *evttype2str(uint8_t type)
639 return "ADV_IND - Connectable undirected advertising";
641 return "ADV_DIRECT_IND - Connectable directed advertising";
643 return "ADV_SCAN_IND - Scannable undirected advertising";
645 return "ADV_NONCONN_IND - Non connectable undirected advertising";
647 return "SCAN_RSP - Scan Response";
653 static char *keytype2str(uint8_t type)
657 return "Combination Key";
659 return "Local Unit Key";
661 return "Remote Unit Key";
663 return "Debug Combination Key";
665 return "Unauthenticated Combination Key";
667 return "Authenticated Combination Key";
669 return "Changed Combination Key";
675 static char *capability2str(uint8_t capability)
677 switch (capability) {
679 return "DisplayOnly";
681 return "DisplayYesNo";
683 return "KeyboardOnly";
685 return "NoInputNoOutput";
691 static char *authentication2str(uint8_t authentication)
693 switch (authentication) {
695 return "No Bonding (No MITM Protection)";
697 return "No Bonding (MITM Protection)";
699 return "Dedicated Bonding (No MITM Protection)";
701 return "Dedicated Bonding (MITM Protection)";
703 return "General Bonding (No MITM Protection)";
705 return "General Bonding (MITM Protection)";
711 static char *eventmask2str(const uint8_t mask[8])
715 for (i = 0; i < 7; i++) {
722 return "No LE events specified";
724 return "LE Connection Complete Event";
726 return "LE Advertising Report Event";
728 return "LE Connection Update Complete Event";
730 return "LE Read Remote Used Features Complete Event";
732 return "LE Long Term Key Request Event";
740 static char *lefeatures2str(const uint8_t features[8])
742 if (features[0] & 0x01)
743 return "Link Layer supports LE Encryption";
748 static char *filterpolicy2str(uint8_t policy)
752 return "Allow scan from any, connection from any";
754 return "Allow scan from white list, connection from any";
756 return "Allow scan from any, connection from white list";
758 return "Allow scan and connection from white list";
764 static inline void ext_inquiry_data_dump(int level, struct frame *frm,
767 uint8_t len = data[0];
781 p_indent(level, frm);
783 for (i = 0; i < len; i++)
784 printf(" 0x%2.2x", data[i]);
790 p_indent(level, frm);
791 printf("%s service classes:",
792 type == 0x02 ? "Shortened" : "Complete");
794 for (i = 0; i < len / 2; i++)
795 printf(" 0x%4.4x", get_le16(data + i * 2));
802 str = malloc(len + 1);
804 snprintf(str, len + 1, "%s", (char *) data);
805 for (i = 0; i < len; i++)
806 if (!isprint(str[i]))
808 p_indent(level, frm);
809 printf("%s local name: \'%s\'\n",
810 type == 0x08 ? "Shortened" : "Complete", str);
816 p_indent(level, frm);
817 printf("TX power level: %d\n", *((uint8_t *) data));
821 p_indent(level, frm);
822 printf("Unknown type 0x%02x with %d bytes data\n",
828 static inline void ext_inquiry_response_dump(int level, struct frame *frm)
830 void *ptr = frm->ptr;
831 uint32_t len = frm->len;
836 length = p_get_u8(frm);
839 ext_inquiry_data_dump(level, frm, data);
845 length = p_get_u8(frm);
849 (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
851 (EXTENDED_INQUIRY_INFO_SIZE - INQUIRY_INFO_WITH_RSSI_SIZE);
854 static inline void bdaddr_command_dump(int level, struct frame *frm)
856 bdaddr_t *bdaddr = frm->ptr;
859 frm->ptr += sizeof(bdaddr_t);
860 frm->len -= sizeof(bdaddr_t);
862 p_indent(level, frm);
863 p_ba2str(bdaddr, addr);
864 printf("bdaddr %s\n", addr);
866 raw_dump(level, frm);
869 static inline void generic_command_dump(int level, struct frame *frm)
871 uint16_t handle = btohs(htons(p_get_u16(frm)));
873 p_indent(level, frm);
874 printf("handle %d\n", handle);
876 raw_dump(level, frm);
879 static inline void generic_write_mode_dump(int level, struct frame *frm)
881 uint8_t mode = p_get_u8(frm);
883 p_indent(level, frm);
884 printf("mode 0x%2.2x\n", mode);
887 static inline void inquiry_dump(int level, struct frame *frm)
889 inquiry_cp *cp = frm->ptr;
891 p_indent(level, frm);
892 printf("lap 0x%2.2x%2.2x%2.2x len %d num %d\n",
893 cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);
896 static inline void periodic_inquiry_dump(int level, struct frame *frm)
898 periodic_inquiry_cp *cp = frm->ptr;
900 p_indent(level, frm);
901 printf("max %d min %d lap 0x%2.2x%2.2x%2.2x len %d num %d\n",
902 btohs(cp->max_period), btohs(cp->min_period),
903 cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);
906 static inline void create_conn_dump(int level, struct frame *frm)
908 create_conn_cp *cp = frm->ptr;
909 uint16_t ptype = btohs(cp->pkt_type);
910 uint16_t clkoffset = btohs(cp->clock_offset);
913 p_indent(level, frm);
914 p_ba2str(&cp->bdaddr, addr);
915 printf("bdaddr %s ptype 0x%4.4x rswitch 0x%2.2x clkoffset 0x%4.4x%s\n",
916 addr, ptype, cp->role_switch,
917 clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");
919 str = hci_ptypetostr(ptype);
921 p_indent(level, frm);
922 printf("Packet type: %s\n", str);
927 static inline void disconnect_dump(int level, struct frame *frm)
929 disconnect_cp *cp = frm->ptr;
931 p_indent(level, frm);
932 printf("handle %d reason 0x%2.2x\n", btohs(cp->handle), cp->reason);
934 p_indent(level, frm);
935 printf("Reason: %s\n", status2str(cp->reason));
938 static inline void add_sco_dump(int level, struct frame *frm)
940 add_sco_cp *cp = frm->ptr;
941 uint16_t ptype = btohs(cp->pkt_type);
944 p_indent(level, frm);
945 printf("handle %d ptype 0x%4.4x\n", btohs(cp->handle), ptype);
947 str = hci_ptypetostr(ptype);
949 p_indent(level, frm);
950 printf("Packet type: %s\n", str);
955 static inline void accept_conn_req_dump(int level, struct frame *frm)
957 accept_conn_req_cp *cp = frm->ptr;
960 p_indent(level, frm);
961 p_ba2str(&cp->bdaddr, addr);
962 printf("bdaddr %s role 0x%2.2x\n", addr, cp->role);
964 p_indent(level, frm);
965 printf("Role: %s\n", role2str(cp->role));
968 static inline void reject_conn_req_dump(int level, struct frame *frm)
970 reject_conn_req_cp *cp = frm->ptr;
973 p_indent(level, frm);
974 p_ba2str(&cp->bdaddr, addr);
975 printf("bdaddr %s reason 0x%2.2x\n", addr, cp->reason);
977 p_indent(level, frm);
978 printf("Reason: %s\n", status2str(cp->reason));
981 static inline void pin_code_reply_dump(int level, struct frame *frm)
983 pin_code_reply_cp *cp = frm->ptr;
984 char addr[18], pin[17];
986 p_indent(level, frm);
987 p_ba2str(&cp->bdaddr, addr);
988 memset(pin, 0, sizeof(pin));
989 if (parser.flags & DUMP_NOVENDOR)
990 memset(pin, '*', cp->pin_len);
992 memcpy(pin, cp->pin_code, cp->pin_len);
993 printf("bdaddr %s len %d pin \'%s\'\n", addr, cp->pin_len, pin);
996 static inline void link_key_reply_dump(int level, struct frame *frm)
998 link_key_reply_cp *cp = frm->ptr;
1002 p_indent(level, frm);
1003 p_ba2str(&cp->bdaddr, addr);
1004 printf("bdaddr %s key ", addr);
1005 for (i = 0; i < 16; i++)
1006 if (parser.flags & DUMP_NOVENDOR)
1009 printf("%2.2X", cp->link_key[i]);
1013 static inline void pin_code_neg_reply_dump(int level, struct frame *frm)
1015 bdaddr_t *bdaddr = frm->ptr;
1018 p_indent(level, frm);
1019 p_ba2str(bdaddr, addr);
1020 printf("bdaddr %s\n", addr);
1023 static inline void user_passkey_reply_dump(int level, struct frame *frm)
1025 user_passkey_reply_cp *cp = frm->ptr;
1028 p_indent(level, frm);
1029 p_ba2str(&cp->bdaddr, addr);
1030 printf("bdaddr %s passkey %d\n", addr, btohl(cp->passkey));
1033 static inline void remote_oob_data_reply_dump(int level, struct frame *frm)
1035 remote_oob_data_reply_cp *cp = frm->ptr;
1039 p_indent(level, frm);
1040 p_ba2str(&cp->bdaddr, addr);
1041 printf("bdaddr %s\n", addr);
1043 p_indent(level, frm);
1045 for (i = 0; i < 16; i++)
1046 printf("%02x", cp->hash[i]);
1049 p_indent(level, frm);
1050 printf("randomizer 0x");
1051 for (i = 0; i < 16; i++)
1052 printf("%02x", cp->randomizer[i]);
1056 static inline void io_capability_reply_dump(int level, struct frame *frm)
1058 io_capability_reply_cp *cp = frm->ptr;
1061 p_indent(level, frm);
1062 p_ba2str(&cp->bdaddr, addr);
1063 printf("bdaddr %s capability 0x%2.2x oob 0x%2.2x auth 0x%2.2x\n",
1064 addr, cp->capability, cp->oob_data,
1065 cp->authentication);
1067 p_indent(level, frm);
1068 printf("Capability: %s (OOB data %s)\n",
1069 capability2str(cp->capability),
1070 cp->oob_data == 0x00 ? "not present" : "available");
1072 p_indent(level, frm);
1073 printf("Authentication: %s\n", authentication2str(cp->authentication));
1076 static inline void set_conn_encrypt_dump(int level, struct frame *frm)
1078 set_conn_encrypt_cp *cp = frm->ptr;
1080 p_indent(level, frm);
1081 printf("handle %d encrypt 0x%2.2x\n", btohs(cp->handle), cp->encrypt);
1084 static inline void remote_name_req_dump(int level, struct frame *frm)
1086 remote_name_req_cp *cp = frm->ptr;
1087 uint16_t clkoffset = btohs(cp->clock_offset);
1090 p_indent(level, frm);
1091 p_ba2str(&cp->bdaddr, addr);
1092 printf("bdaddr %s mode %d clkoffset 0x%4.4x%s\n",
1093 addr, cp->pscan_rep_mode,
1094 clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");
1097 static inline void master_link_key_dump(int level, struct frame *frm)
1099 master_link_key_cp *cp = frm->ptr;
1101 p_indent(level, frm);
1102 printf("flag %d\n", cp->key_flag);
1105 static inline void read_remote_ext_features_dump(int level, struct frame *frm)
1107 read_remote_ext_features_cp *cp = frm->ptr;
1109 p_indent(level, frm);
1110 printf("handle %d page %d\n", btohs(cp->handle), cp->page_num);
1113 static inline void setup_sync_conn_dump(int level, struct frame *frm)
1115 setup_sync_conn_cp *cp = frm->ptr;
1117 p_indent(level, frm);
1118 printf("handle %d voice setting 0x%4.4x ptype 0x%4.4x\n",
1119 btohs(cp->handle), btohs(cp->voice_setting),
1120 btohs(cp->pkt_type));
1123 static inline void create_physical_link_dump(int level, struct frame *frm)
1125 create_physical_link_cp *cp = frm->ptr;
1128 p_indent(level, frm);
1129 printf("phy handle 0x%2.2x key length %d key type %d\n",
1130 cp->handle, cp->key_length, cp->key_type);
1131 p_indent(level, frm);
1133 for (i = 0; i < cp->key_length && cp->key_length <= 32; i++)
1134 printf("%2.2x", cp->key[i]);
1138 static inline void create_logical_link_dump(int level, struct frame *frm)
1140 create_logical_link_cp *cp = frm->ptr;
1143 p_indent(level, frm);
1144 printf("phy handle 0x%2.2x\n", cp->handle);
1146 p_indent(level, frm);
1148 for (i = 0; i < 16; i++)
1149 printf("%2.2x", cp->tx_flow[i]);
1152 p_indent(level, frm);
1154 for (i = 0; i < 16; i++)
1155 printf("%2.2x", cp->rx_flow[i]);
1159 static inline void hold_mode_dump(int level, struct frame *frm)
1161 hold_mode_cp *cp = frm->ptr;
1163 p_indent(level, frm);
1164 printf("handle %d max %d min %d\n", btohs(cp->handle),
1165 btohs(cp->max_interval), btohs(cp->min_interval));
1168 static inline void sniff_mode_dump(int level, struct frame *frm)
1170 sniff_mode_cp *cp = frm->ptr;
1172 p_indent(level, frm);
1173 printf("handle %d max %d min %d attempt %d timeout %d\n",
1174 btohs(cp->handle), btohs(cp->max_interval),
1175 btohs(cp->min_interval), btohs(cp->attempt), btohs(cp->timeout));
1178 static inline void qos_setup_dump(int level, struct frame *frm)
1180 qos_setup_cp *cp = frm->ptr;
1182 p_indent(level, frm);
1183 printf("handle %d flags 0x%2.2x\n", btohs(cp->handle), cp->flags);
1185 p_indent(level, frm);
1186 printf("Service type: %d\n", cp->qos.service_type);
1187 p_indent(level, frm);
1188 printf("Token rate: %d\n", btohl(cp->qos.token_rate));
1189 p_indent(level, frm);
1190 printf("Peak bandwith: %d\n", btohl(cp->qos.peak_bandwidth));
1191 p_indent(level, frm);
1192 printf("Latency: %d\n", btohl(cp->qos.latency));
1193 p_indent(level, frm);
1194 printf("Delay variation: %d\n", btohl(cp->qos.delay_variation));
1197 static inline void write_link_policy_dump(int level, struct frame *frm)
1199 write_link_policy_cp *cp = frm->ptr;
1200 uint16_t policy = btohs(cp->policy);
1203 p_indent(level, frm);
1204 printf("handle %d policy 0x%2.2x\n", btohs(cp->handle), policy);
1206 str = hci_lptostr(policy);
1208 p_indent(level, frm);
1209 printf("Link policy: %s\n", str);
1214 static inline void write_default_link_policy_dump(int level, struct frame *frm)
1216 uint16_t policy = btohs(htons(p_get_u16(frm)));
1219 p_indent(level, frm);
1220 printf("policy 0x%2.2x\n", policy);
1222 str = hci_lptostr(policy);
1224 p_indent(level, frm);
1225 printf("Link policy: %s\n", str);
1230 static inline void sniff_subrating_dump(int level, struct frame *frm)
1232 sniff_subrating_cp *cp = frm->ptr;
1234 p_indent(level, frm);
1235 printf("handle %d\n", btohs(cp->handle));
1237 p_indent(level, frm);
1238 printf("max latency %d\n", btohs(cp->max_latency));
1240 p_indent(level, frm);
1241 printf("min timeout remote %d local %d\n",
1242 btohs(cp->min_remote_timeout), btohs(cp->min_local_timeout));
1245 static inline void set_event_mask_dump(int level, struct frame *frm)
1247 set_event_mask_cp *cp = frm->ptr;
1250 p_indent(level, frm);
1252 for (i = 0; i < 8; i++)
1253 printf("%2.2x", cp->mask[i]);
1257 static inline void set_event_flt_dump(int level, struct frame *frm)
1259 set_event_flt_cp *cp = frm->ptr;
1260 uint8_t dev_class[3], dev_mask[3];
1263 p_indent(level, frm);
1264 printf("type %d condition %d\n", cp->flt_type,
1265 (cp->flt_type == 0) ? 0 : cp->cond_type);
1267 switch (cp->flt_type) {
1269 p_indent(level, frm);
1270 printf("Clear all filters\n");
1272 case FLT_INQ_RESULT:
1273 p_indent(level, frm);
1274 printf("Inquiry result");
1275 switch (cp->cond_type) {
1276 case INQ_RESULT_RETURN_ALL:
1277 printf(" for all devices\n");
1279 case INQ_RESULT_RETURN_CLASS:
1280 memcpy(dev_class, cp->condition, 3);
1281 memcpy(dev_mask, cp->condition + 3, 3);
1282 printf(" with class 0x%2.2x%2.2x%2.2x mask 0x%2.2x%2.2x%2.2x\n",
1283 dev_class[2], dev_class[1], dev_class[0],
1284 dev_mask[2], dev_mask[1], dev_mask[0]);
1286 case INQ_RESULT_RETURN_BDADDR:
1287 p_ba2str((bdaddr_t *) cp->condition, addr);
1288 printf(" with bdaddr %s\n", addr);
1295 case FLT_CONN_SETUP:
1296 p_indent(level, frm);
1297 printf("Connection setup");
1298 switch (cp->cond_type) {
1299 case CONN_SETUP_ALLOW_ALL:
1300 case CONN_SETUP_ALLOW_CLASS:
1301 case CONN_SETUP_ALLOW_BDADDR:
1310 static inline void write_pin_type_dump(int level, struct frame *frm)
1312 write_pin_type_cp *cp = frm->ptr;
1314 p_indent(level, frm);
1315 printf("type %d\n", cp->pin_type);
1318 static inline void request_stored_link_key_dump(int level, struct frame *frm)
1320 read_stored_link_key_cp *cp = frm->ptr;
1323 p_indent(level, frm);
1324 p_ba2str(&cp->bdaddr, addr);
1325 printf("bdaddr %s all %d\n", addr, cp->read_all);
1328 static inline void return_link_keys_dump(int level, struct frame *frm)
1330 uint8_t num = p_get_u8(frm);
1335 for (n = 0; n < num; n++) {
1336 p_ba2str(frm->ptr, addr);
1337 memcpy(key, frm->ptr + 6, 16);
1339 p_indent(level, frm);
1340 printf("bdaddr %s key ", addr);
1341 for (i = 0; i < 16; i++)
1342 if (parser.flags & DUMP_NOVENDOR)
1345 printf("%2.2X", key[i]);
1353 static inline void change_local_name_dump(int level, struct frame *frm)
1355 change_local_name_cp *cp = frm->ptr;
1359 memset(name, 0, sizeof(name));
1360 for (i = 0; i < 248 && cp->name[i]; i++)
1361 if (isprint(cp->name[i]))
1362 name[i] = cp->name[i];
1366 p_indent(level, frm);
1367 printf("name \'%s\'\n", name);
1370 static inline void write_class_of_dev_dump(int level, struct frame *frm)
1372 write_class_of_dev_cp *cp = frm->ptr;
1374 p_indent(level, frm);
1375 printf("class 0x%2.2x%2.2x%2.2x\n",
1376 cp->dev_class[2], cp->dev_class[1], cp->dev_class[0]);
1379 static inline void write_voice_setting_dump(int level, struct frame *frm)
1381 write_voice_setting_cp *cp = frm->ptr;
1383 p_indent(level, frm);
1384 printf("voice setting 0x%4.4x\n", btohs(cp->voice_setting));
1387 static inline void write_current_iac_lap_dump(int level, struct frame *frm)
1389 write_current_iac_lap_cp *cp = frm->ptr;
1392 for (i = 0; i < cp->num_current_iac; i++) {
1393 p_indent(level, frm);
1394 printf("IAC 0x%2.2x%2.2x%2.2x", cp->lap[i][2], cp->lap[i][1], cp->lap[i][0]);
1395 if (cp->lap[i][2] == 0x9e && cp->lap[i][1] == 0x8b) {
1396 switch (cp->lap[i][0]) {
1398 printf(" (Limited Inquiry Access Code)");
1401 printf(" (General Inquiry Access Code)");
1409 static inline void write_scan_enable_dump(int level, struct frame *frm)
1411 uint8_t enable = p_get_u8(frm);
1413 p_indent(level, frm);
1414 printf("enable %d\n", enable);
1417 static inline void write_page_timeout_dump(int level, struct frame *frm)
1419 write_page_timeout_cp *cp = frm->ptr;
1421 p_indent(level, frm);
1422 printf("timeout %d\n", btohs(cp->timeout));
1425 static inline void write_page_activity_dump(int level, struct frame *frm)
1427 write_page_activity_cp *cp = frm->ptr;
1429 p_indent(level, frm);
1430 printf("interval %d window %d\n", btohs(cp->interval), btohs(cp->window));
1433 static inline void write_inquiry_scan_type_dump(int level, struct frame *frm)
1435 write_inquiry_scan_type_cp *cp = frm->ptr;
1437 p_indent(level, frm);
1438 printf("type %d\n", cp->type);
1441 static inline void write_inquiry_mode_dump(int level, struct frame *frm)
1443 write_inquiry_mode_cp *cp = frm->ptr;
1445 p_indent(level, frm);
1446 printf("mode %d\n", cp->mode);
1449 static inline void set_afh_classification_dump(int level, struct frame *frm)
1451 set_afh_classification_cp *cp = frm->ptr;
1454 p_indent(level, frm);
1456 for (i = 0; i < 10; i++)
1457 printf("%02x", cp->map[i]);
1461 static inline void write_link_supervision_timeout_dump(int level, struct frame *frm)
1463 write_link_supervision_timeout_cp *cp = frm->ptr;
1465 p_indent(level, frm);
1466 printf("handle %d timeout %d\n",
1467 btohs(cp->handle), btohs(cp->timeout));
1470 static inline void write_ext_inquiry_response_dump(int level, struct frame *frm)
1472 write_ext_inquiry_response_cp *cp = frm->ptr;
1474 p_indent(level, frm);
1475 printf("fec 0x%2.2x\n", cp->fec);
1480 ext_inquiry_response_dump(level, frm);
1483 static inline void write_inquiry_transmit_power_level_dump(int level, struct frame *frm)
1485 write_inquiry_transmit_power_level_cp *cp = frm->ptr;
1487 p_indent(level, frm);
1488 printf("level %d\n", cp->level);
1491 static inline void write_default_error_data_reporting_dump(int level, struct frame *frm)
1493 write_default_error_data_reporting_cp *cp = frm->ptr;
1495 p_indent(level, frm);
1496 printf("reporting %d\n", cp->reporting);
1499 static inline void enhanced_flush_dump(int level, struct frame *frm)
1501 enhanced_flush_cp *cp = frm->ptr;
1503 p_indent(level, frm);
1504 printf("handle %d type %d\n", btohs(cp->handle), cp->type);
1507 static inline void send_keypress_notify_dump(int level, struct frame *frm)
1509 send_keypress_notify_cp *cp = frm->ptr;
1512 p_indent(level, frm);
1513 p_ba2str(&cp->bdaddr, addr);
1514 printf("bdaddr %s type %d\n", addr, cp->type);
1517 static inline void request_transmit_power_level_dump(int level, struct frame *frm)
1519 read_transmit_power_level_cp *cp = frm->ptr;
1521 p_indent(level, frm);
1522 printf("handle %d type %d (%s)\n",
1523 btohs(cp->handle), cp->type,
1524 cp->type ? "maximum" : "current");
1527 static inline void request_local_ext_features_dump(int level, struct frame *frm)
1529 read_local_ext_features_cp *cp = frm->ptr;
1531 p_indent(level, frm);
1532 printf("page %d\n", cp->page_num);
1535 static inline void request_clock_dump(int level, struct frame *frm)
1537 read_clock_cp *cp = frm->ptr;
1539 p_indent(level, frm);
1540 printf("handle %d which %d (%s)\n",
1541 btohs(cp->handle), cp->which_clock,
1542 cp->which_clock ? "piconet" : "local");
1545 static inline void host_buffer_size_dump(int level, struct frame *frm)
1547 host_buffer_size_cp *cp = frm->ptr;
1549 p_indent(level, frm);
1550 printf("ACL MTU %d:%d SCO MTU %d:%d\n",
1551 btohs(cp->acl_mtu), btohs(cp->acl_max_pkt),
1552 cp->sco_mtu, btohs(cp->sco_max_pkt));
1555 static inline void num_comp_pkts_dump(int level, struct frame *frm)
1557 uint8_t num = p_get_u8(frm);
1558 uint16_t handle, packets;
1561 for (i = 0; i < num; i++) {
1562 handle = btohs(htons(p_get_u16(frm)));
1563 packets = btohs(htons(p_get_u16(frm)));
1565 p_indent(level, frm);
1566 printf("handle %d packets %d\n", handle, packets);
1570 static inline void le_create_connection_dump(int level, struct frame *frm)
1573 le_create_connection_cp *cp = frm->ptr;
1575 p_indent(level, frm);
1576 p_ba2str(&cp->peer_bdaddr, addr);
1577 printf("bdaddr %s type %d\n", addr, cp->peer_bdaddr_type);
1578 p_indent(level, frm);
1579 printf("interval %u window %u initiator_filter %u\n",
1580 btohs(cp->interval), btohs(cp->window), cp->initiator_filter);
1581 p_indent(level, frm);
1582 printf("own_bdaddr_type %u min_interval %u max_interval %u\n",
1583 cp->own_bdaddr_type, btohs(cp->min_interval),
1584 btohs(cp->max_interval));
1585 p_indent(level, frm);
1586 printf("latency %u supervision_to %u min_ce %u max_ce %u\n",
1587 btohs(cp->latency), btohs(cp->supervision_timeout),
1588 btohs(cp->min_ce_length), btohs(cp->max_ce_length));
1591 static inline void le_set_event_mask_dump(int level, struct frame *frm)
1594 le_set_event_mask_cp *cp = frm->ptr;
1596 p_indent(level, frm);
1598 for (i = 0; i < 8; i++)
1599 printf("%.2x", cp->mask[i]);
1601 printf(" (%s)\n", eventmask2str(cp->mask));
1604 static inline void le_set_random_address_dump(int level, struct frame *frm)
1607 le_set_random_address_cp *cp = frm->ptr;
1609 p_indent(level, frm);
1610 p_ba2str(&cp->bdaddr, addr);
1611 printf("bdaddr %s\n", addr);
1615 static inline void le_set_advertising_parameters_dump(int level, struct frame *frm)
1618 le_set_advertising_parameters_cp *cp = frm->ptr;
1620 p_indent(level, frm);
1621 printf("min %.3fms, max %.3fms\n", btohs(cp->min_interval) * 0.625,
1622 btohs(cp->max_interval) * 0.625);
1624 p_indent(level, frm);
1625 printf("type 0x%02x (%s) ownbdaddr 0x%02x (%s)\n", cp->advtype,
1626 evttype2str(cp->advtype), cp->own_bdaddr_type,
1627 bdaddrtype2str(cp->own_bdaddr_type));
1629 p_indent(level, frm);
1630 p_ba2str(&cp->direct_bdaddr, addr);
1631 printf("directbdaddr 0x%02x (%s) %s\n", cp->direct_bdaddr_type,
1632 bdaddrtype2str(cp->direct_bdaddr_type), addr);
1634 p_indent(level, frm);
1635 printf("channelmap 0x%02x filterpolicy 0x%02x (%s)\n",
1636 cp->chan_map, cp->filter, filterpolicy2str(cp->filter));
1639 static inline void le_set_scan_parameters_dump(int level, struct frame *frm)
1641 le_set_scan_parameters_cp *cp = frm->ptr;
1643 p_indent(level, frm);
1644 printf("type 0x%02x (%s)\n", cp->type,
1645 cp->type == 0x00 ? "passive" : "active");
1647 p_indent(level, frm);
1648 printf("interval %.3fms window %.3fms\n", btohs(cp->interval) * 0.625,
1649 btohs(cp->window) * 0.625);
1651 p_indent(level, frm);
1652 printf("own address: 0x%02x (%s) policy: %s\n", cp->own_bdaddr_type,
1653 bdaddrtype2str(cp->own_bdaddr_type),
1654 (cp->filter == 0x00 ? "All" :
1655 (cp->filter == 0x01 ? "white list only" : "reserved")));
1658 static inline void le_set_scan_enable_dump(int level, struct frame *frm)
1660 le_set_scan_enable_cp *cp = frm->ptr;
1662 p_indent(level, frm);
1663 printf("value 0x%02x (%s)\n", cp->enable,
1664 (cp->enable == 0x00 ? "scanning disabled" :
1665 "scanning enabled"));
1667 p_indent(level, frm);
1668 printf("filter duplicates 0x%02x (%s)\n", cp->filter_dup,
1669 (cp->filter_dup == 0x00 ? "disabled" : "enabled"));
1672 static inline void write_remote_amp_assoc_cmd_dump(int level,
1675 write_remote_amp_assoc_cp *cp = frm->ptr;
1677 p_indent(level, frm);
1678 printf("handle 0x%2.2x len_so_far %d remaining_len %d\n", cp->handle,
1679 cp->length_so_far, cp->remaining_length);
1681 amp_assoc_dump(level + 1, cp->fragment, frm->len - 5);
1684 static inline void command_dump(int level, struct frame *frm)
1686 hci_command_hdr *hdr = frm->ptr;
1687 uint16_t opcode = btohs(hdr->opcode);
1688 uint16_t ogf = cmd_opcode_ogf(opcode);
1689 uint16_t ocf = cmd_opcode_ocf(opcode);
1691 if (p_filter(FILT_HCI))
1694 if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
1697 p_indent(level, frm);
1698 printf("HCI Command: %s (0x%2.2x|0x%4.4x) plen %d\n",
1699 opcode2str(opcode), ogf, ocf, hdr->plen);
1701 frm->ptr += HCI_COMMAND_HDR_SIZE;
1702 frm->len -= HCI_COMMAND_HDR_SIZE;
1704 if (ogf == OGF_VENDOR_CMD) {
1705 if (ocf == 0 && get_manufacturer() == 10) {
1706 csr_dump(level + 1, frm);
1711 if (!(parser.flags & DUMP_VERBOSE)) {
1712 raw_dump(level, frm);
1720 inquiry_dump(level + 1, frm);
1722 case OCF_PERIODIC_INQUIRY:
1723 periodic_inquiry_dump(level + 1, frm);
1725 case OCF_INQUIRY_CANCEL:
1726 case OCF_EXIT_PERIODIC_INQUIRY:
1728 case OCF_CREATE_CONN:
1729 create_conn_dump(level + 1, frm);
1731 case OCF_DISCONNECT:
1732 disconnect_dump(level + 1, frm);
1734 case OCF_CREATE_CONN_CANCEL:
1735 case OCF_REMOTE_NAME_REQ_CANCEL:
1736 case OCF_ACCEPT_SYNC_CONN_REQ:
1737 bdaddr_command_dump(level + 1, frm);
1740 case OCF_SET_CONN_PTYPE:
1741 add_sco_dump(level + 1, frm);
1743 case OCF_ACCEPT_CONN_REQ:
1744 accept_conn_req_dump(level + 1, frm);
1746 case OCF_REJECT_CONN_REQ:
1747 case OCF_REJECT_SYNC_CONN_REQ:
1748 case OCF_IO_CAPABILITY_NEG_REPLY:
1749 reject_conn_req_dump(level + 1, frm);
1751 case OCF_PIN_CODE_REPLY:
1752 pin_code_reply_dump(level + 1, frm);
1754 case OCF_LINK_KEY_REPLY:
1755 link_key_reply_dump(level + 1, frm);
1757 case OCF_PIN_CODE_NEG_REPLY:
1758 case OCF_LINK_KEY_NEG_REPLY:
1759 case OCF_USER_CONFIRM_REPLY:
1760 case OCF_USER_CONFIRM_NEG_REPLY:
1761 case OCF_USER_PASSKEY_NEG_REPLY:
1762 case OCF_REMOTE_OOB_DATA_NEG_REPLY:
1763 pin_code_neg_reply_dump(level + 1, frm);
1765 case OCF_USER_PASSKEY_REPLY:
1766 user_passkey_reply_dump(level + 1, frm);
1768 case OCF_REMOTE_OOB_DATA_REPLY:
1769 remote_oob_data_reply_dump(level + 1, frm);
1771 case OCF_IO_CAPABILITY_REPLY:
1772 io_capability_reply_dump(level + 1, frm);
1774 case OCF_SET_CONN_ENCRYPT:
1775 set_conn_encrypt_dump(level + 1, frm);
1777 case OCF_AUTH_REQUESTED:
1778 case OCF_CHANGE_CONN_LINK_KEY:
1779 case OCF_READ_REMOTE_FEATURES:
1780 case OCF_READ_REMOTE_VERSION:
1781 case OCF_READ_CLOCK_OFFSET:
1782 case OCF_READ_LMP_HANDLE:
1783 case OCF_DISCONNECT_LOGICAL_LINK:
1784 generic_command_dump(level + 1, frm);
1786 case OCF_MASTER_LINK_KEY:
1787 master_link_key_dump(level + 1, frm);
1789 case OCF_READ_REMOTE_EXT_FEATURES:
1790 read_remote_ext_features_dump(level + 1, frm);
1792 case OCF_REMOTE_NAME_REQ:
1793 remote_name_req_dump(level + 1, frm);
1795 case OCF_SETUP_SYNC_CONN:
1796 setup_sync_conn_dump(level + 1, frm);
1798 case OCF_CREATE_PHYSICAL_LINK:
1799 case OCF_ACCEPT_PHYSICAL_LINK:
1800 create_physical_link_dump(level + 1, frm);
1802 case OCF_CREATE_LOGICAL_LINK:
1803 case OCF_ACCEPT_LOGICAL_LINK:
1804 create_logical_link_dump(level + 1, frm);
1809 case OGF_LINK_POLICY:
1813 hold_mode_dump(level + 1, frm);
1815 case OCF_SNIFF_MODE:
1816 sniff_mode_dump(level + 1, frm);
1818 case OCF_EXIT_SNIFF_MODE:
1819 case OCF_EXIT_PARK_MODE:
1820 case OCF_ROLE_DISCOVERY:
1821 case OCF_READ_LINK_POLICY:
1822 generic_command_dump(level + 1, frm);
1824 case OCF_READ_DEFAULT_LINK_POLICY:
1826 case OCF_SWITCH_ROLE:
1827 accept_conn_req_dump(level + 1, frm);
1830 qos_setup_dump(level + 1, frm);
1832 case OCF_WRITE_LINK_POLICY:
1833 write_link_policy_dump(level + 1, frm);
1835 case OCF_WRITE_DEFAULT_LINK_POLICY:
1836 write_default_link_policy_dump(level + 1, frm);
1838 case OCF_SNIFF_SUBRATING:
1839 sniff_subrating_dump(level + 1, frm);
1847 case OCF_CREATE_NEW_UNIT_KEY:
1849 case OCF_SET_EVENT_MASK:
1850 case OCF_SET_EVENT_MASK_PAGE_2:
1851 set_event_mask_dump(level + 1, frm);
1853 case OCF_SET_EVENT_FLT:
1854 set_event_flt_dump(level + 1, frm);
1856 case OCF_WRITE_PIN_TYPE:
1857 write_pin_type_dump(level + 1, frm);
1859 case OCF_READ_STORED_LINK_KEY:
1860 case OCF_DELETE_STORED_LINK_KEY:
1861 request_stored_link_key_dump(level + 1, frm);
1863 case OCF_WRITE_STORED_LINK_KEY:
1864 return_link_keys_dump(level + 1, frm);
1866 case OCF_CHANGE_LOCAL_NAME:
1867 change_local_name_dump(level + 1, frm);
1869 case OCF_WRITE_CLASS_OF_DEV:
1870 write_class_of_dev_dump(level + 1, frm);
1872 case OCF_WRITE_VOICE_SETTING:
1873 write_voice_setting_dump(level + 1, frm);
1875 case OCF_WRITE_CURRENT_IAC_LAP:
1876 write_current_iac_lap_dump(level + 1, frm);
1878 case OCF_WRITE_SCAN_ENABLE:
1879 case OCF_WRITE_AUTH_ENABLE:
1880 case OCF_SET_CONTROLLER_TO_HOST_FC:
1881 write_scan_enable_dump(level + 1, frm);
1883 case OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT:
1884 case OCF_WRITE_CONN_ACCEPT_TIMEOUT:
1885 case OCF_WRITE_PAGE_TIMEOUT:
1886 write_page_timeout_dump(level + 1, frm);
1888 case OCF_WRITE_PAGE_ACTIVITY:
1889 case OCF_WRITE_INQ_ACTIVITY:
1890 write_page_activity_dump(level + 1, frm);
1892 case OCF_WRITE_INQUIRY_SCAN_TYPE:
1893 write_inquiry_scan_type_dump(level + 1, frm);
1895 case OCF_WRITE_ENCRYPT_MODE:
1896 case OCF_WRITE_INQUIRY_MODE:
1897 case OCF_WRITE_AFH_MODE:
1898 write_inquiry_mode_dump(level + 1, frm);
1900 case OCF_SET_AFH_CLASSIFICATION:
1901 set_afh_classification_dump(level + 1, frm);
1903 case OCF_READ_TRANSMIT_POWER_LEVEL:
1904 request_transmit_power_level_dump(level + 1, frm);
1906 case OCF_HOST_BUFFER_SIZE:
1907 host_buffer_size_dump(level + 1, frm);
1909 case OCF_HOST_NUM_COMP_PKTS:
1910 num_comp_pkts_dump(level + 1, frm);
1913 case OCF_READ_LINK_SUPERVISION_TIMEOUT:
1914 case OCF_REFRESH_ENCRYPTION_KEY:
1915 case OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT:
1916 generic_command_dump(level + 1, frm);
1918 case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:
1919 write_link_supervision_timeout_dump(level + 1, frm);
1921 case OCF_WRITE_EXT_INQUIRY_RESPONSE:
1922 write_ext_inquiry_response_dump(level + 1, frm);
1924 case OCF_WRITE_SIMPLE_PAIRING_MODE:
1925 case OCF_WRITE_FLOW_CONTROL_MODE:
1926 generic_write_mode_dump(level + 1, frm);
1928 case OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL:
1929 write_inquiry_transmit_power_level_dump(level + 1, frm);
1931 case OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING:
1932 write_default_error_data_reporting_dump(level + 1, frm);
1934 case OCF_ENHANCED_FLUSH:
1935 enhanced_flush_dump(level + 1, frm);
1937 case OCF_SEND_KEYPRESS_NOTIFY:
1938 send_keypress_notify_dump(level + 1, frm);
1943 case OGF_INFO_PARAM:
1945 case OCF_READ_LOCAL_EXT_FEATURES:
1946 request_local_ext_features_dump(level + 1, frm);
1951 case OGF_STATUS_PARAM:
1953 case OCF_READ_LINK_QUALITY:
1955 case OCF_READ_AFH_MAP:
1956 generic_command_dump(level + 1, frm);
1958 case OCF_READ_CLOCK:
1959 request_clock_dump(level + 1, frm);
1961 case OCF_WRITE_REMOTE_AMP_ASSOC:
1962 write_remote_amp_assoc_cmd_dump(level + 1, frm);
1967 case OGF_TESTING_CMD:
1969 case OCF_WRITE_LOOPBACK_MODE:
1970 case OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE:
1971 generic_write_mode_dump(level + 1, frm);
1978 case OCF_LE_SET_EVENT_MASK:
1979 le_set_event_mask_dump(level + 1, frm);
1981 case OCF_LE_READ_BUFFER_SIZE:
1982 case OCF_LE_READ_LOCAL_SUPPORTED_FEATURES:
1983 case OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER:
1985 case OCF_LE_SET_RANDOM_ADDRESS:
1986 le_set_random_address_dump(level + 1, frm);
1988 case OCF_LE_SET_ADVERTISING_PARAMETERS:
1989 le_set_advertising_parameters_dump(level + 1, frm);
1991 case OCF_LE_SET_SCAN_PARAMETERS:
1992 le_set_scan_parameters_dump(level + 1, frm);
1994 case OCF_LE_SET_SCAN_ENABLE:
1995 le_set_scan_enable_dump(level + 1, frm);
1997 case OCF_LE_CREATE_CONN:
1998 le_create_connection_dump(level + 1, frm);
2004 raw_dump(level, frm);
2007 static inline void status_response_dump(int level, struct frame *frm)
2009 uint8_t status = p_get_u8(frm);
2011 p_indent(level, frm);
2012 printf("status 0x%2.2x\n", status);
2015 p_indent(level, frm);
2016 printf("Error: %s\n", status2str(status));
2019 raw_dump(level, frm);
2022 static inline void handle_response_dump(int level, struct frame *frm)
2024 uint16_t handle = btohs(htons(p_get_u16(frm)));
2026 p_indent(level, frm);
2027 printf("handle %d\n", handle);
2029 raw_dump(level, frm);
2032 static inline void bdaddr_response_dump(int level, struct frame *frm)
2034 uint8_t status = p_get_u8(frm);
2035 bdaddr_t *bdaddr = frm->ptr;
2038 frm->ptr += sizeof(bdaddr_t);
2039 frm->len -= sizeof(bdaddr_t);
2041 p_indent(level, frm);
2042 p_ba2str(bdaddr, addr);
2043 printf("status 0x%2.2x bdaddr %s\n", status, addr);
2046 p_indent(level, frm);
2047 printf("Error: %s\n", status2str(status));
2050 raw_dump(level, frm);
2053 static inline void read_data_block_size_dump(int level, struct frame *frm)
2055 read_data_block_size_rp *rp = frm->ptr;
2057 p_indent(level, frm);
2058 printf("status 0x%2.2x\n", rp->status);
2060 if (rp->status > 0) {
2061 p_indent(level, frm);
2062 printf("Error: %s\n", status2str(rp->status));
2064 p_indent(level, frm);
2065 printf("Max ACL %d Block len %d Num blocks %d\n",
2066 btohs(rp->max_acl_len), btohs(rp->data_block_len),
2067 btohs(rp->num_blocks));
2071 static inline void generic_response_dump(int level, struct frame *frm)
2073 uint8_t status = p_get_u8(frm);
2074 uint16_t handle = btohs(htons(p_get_u16(frm)));
2076 p_indent(level, frm);
2077 printf("status 0x%2.2x handle %d\n", status, handle);
2080 p_indent(level, frm);
2081 printf("Error: %s\n", status2str(status));
2084 raw_dump(level, frm);
2087 static inline void status_mode_dump(int level, struct frame *frm)
2089 uint8_t status = p_get_u8(frm);
2090 uint8_t mode = p_get_u8(frm);
2092 p_indent(level, frm);
2093 printf("status 0x%2.2x mode 0x%2.2x\n", status, mode);
2096 p_indent(level, frm);
2097 printf("Error: %s\n", status2str(status));
2101 static inline void read_link_policy_dump(int level, struct frame *frm)
2103 read_link_policy_rp *rp = frm->ptr;
2104 uint16_t policy = btohs(rp->policy);
2107 p_indent(level, frm);
2108 printf("status 0x%2.2x handle %d policy 0x%2.2x\n",
2109 rp->status, btohs(rp->handle), policy);
2111 if (rp->status > 0) {
2112 p_indent(level, frm);
2113 printf("Error: %s\n", status2str(rp->status));
2115 str = hci_lptostr(policy);
2117 p_indent(level, frm);
2118 printf("Link policy: %s\n", str);
2124 static inline void read_default_link_policy_dump(int level, struct frame *frm)
2126 uint8_t status = p_get_u8(frm);
2127 uint16_t policy = btohs(htons(p_get_u16(frm)));
2130 p_indent(level, frm);
2131 printf("status 0x%2.2x policy 0x%2.2x\n", status, policy);
2134 p_indent(level, frm);
2135 printf("Error: %s\n", status2str(status));
2137 str = hci_lptostr(policy);
2139 p_indent(level, frm);
2140 printf("Link policy: %s\n", str);
2146 static inline void read_pin_type_dump(int level, struct frame *frm)
2148 read_pin_type_rp *rp = frm->ptr;
2150 p_indent(level, frm);
2151 printf("status 0x%2.2x type %d\n", rp->status, rp->pin_type);
2153 if (rp->status > 0) {
2154 p_indent(level, frm);
2155 printf("Error: %s\n", status2str(rp->status));
2159 static inline void read_stored_link_key_dump(int level, struct frame *frm)
2161 read_stored_link_key_rp *rp = frm->ptr;
2163 p_indent(level, frm);
2164 printf("status 0x%2.2x max %d num %d\n",
2165 rp->status, rp->max_keys, rp->num_keys);
2167 if (rp->status > 0) {
2168 p_indent(level, frm);
2169 printf("Error: %s\n", status2str(rp->status));
2173 static inline void write_stored_link_key_dump(int level, struct frame *frm)
2175 write_stored_link_key_rp *rp = frm->ptr;
2177 p_indent(level, frm);
2178 printf("status 0x%2.2x written %d\n", rp->status, rp->num_keys);
2180 if (rp->status > 0) {
2181 p_indent(level, frm);
2182 printf("Error: %s\n", status2str(rp->status));
2186 static inline void delete_stored_link_key_dump(int level, struct frame *frm)
2188 delete_stored_link_key_rp *rp = frm->ptr;
2190 p_indent(level, frm);
2191 printf("status 0x%2.2x deleted %d\n", rp->status, btohs(rp->num_keys));
2193 if (rp->status > 0) {
2194 p_indent(level, frm);
2195 printf("Error: %s\n", status2str(rp->status));
2199 static inline void read_local_name_dump(int level, struct frame *frm)
2201 read_local_name_rp *rp = frm->ptr;
2205 memset(name, 0, sizeof(name));
2206 for (i = 0; i < 248 && rp->name[i]; i++)
2207 if (isprint(rp->name[i]))
2208 name[i] = rp->name[i];
2212 p_indent(level, frm);
2213 printf("status 0x%2.2x name \'%s\'\n", rp->status, name);
2215 if (rp->status > 0) {
2216 p_indent(level, frm);
2217 printf("Error: %s\n", status2str(rp->status));
2221 static inline void read_class_of_dev_dump(int level, struct frame *frm)
2223 read_class_of_dev_rp *rp = frm->ptr;
2225 p_indent(level, frm);
2226 printf("status 0x%2.2x class 0x%2.2x%2.2x%2.2x\n", rp->status,
2227 rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]);
2229 if (rp->status > 0) {
2230 p_indent(level, frm);
2231 printf("Error: %s\n", status2str(rp->status));
2235 static inline void read_voice_setting_dump(int level, struct frame *frm)
2237 read_voice_setting_rp *rp = frm->ptr;
2239 p_indent(level, frm);
2240 printf("status 0x%2.2x voice setting 0x%4.4x\n",
2241 rp->status, btohs(rp->voice_setting));
2243 if (rp->status > 0) {
2244 p_indent(level, frm);
2245 printf("Error: %s\n", status2str(rp->status));
2249 static inline void read_current_iac_lap_dump(int level, struct frame *frm)
2251 read_current_iac_lap_rp *rp = frm->ptr;
2254 for (i = 0; i < rp->num_current_iac; i++) {
2255 p_indent(level, frm);
2256 printf("IAC 0x%2.2x%2.2x%2.2x", rp->lap[i][2], rp->lap[i][1], rp->lap[i][0]);
2257 if (rp->lap[i][2] == 0x9e && rp->lap[i][1] == 0x8b) {
2258 switch (rp->lap[i][0]) {
2260 printf(" (Limited Inquiry Access Code)");
2263 printf(" (General Inquiry Access Code)");
2271 static inline void read_scan_enable_dump(int level, struct frame *frm)
2273 uint8_t status = p_get_u8(frm);
2274 uint8_t enable = p_get_u8(frm);
2276 p_indent(level, frm);
2277 printf("status 0x%2.2x enable %d\n", status, enable);
2280 p_indent(level, frm);
2281 printf("Error: %s\n", status2str(status));
2285 static inline void read_page_timeout_dump(int level, struct frame *frm)
2287 read_page_timeout_rp *rp = frm->ptr;
2289 p_indent(level, frm);
2290 printf("status 0x%2.2x timeout %d\n", rp->status, btohs(rp->timeout));
2292 if (rp->status > 0) {
2293 p_indent(level, frm);
2294 printf("Error: %s\n", status2str(rp->status));
2298 static inline void read_page_activity_dump(int level, struct frame *frm)
2300 read_page_activity_rp *rp = frm->ptr;
2302 p_indent(level, frm);
2303 printf("status 0x%2.2x interval %d window %d\n",
2304 rp->status, btohs(rp->interval), btohs(rp->window));
2306 if (rp->status > 0) {
2307 p_indent(level, frm);
2308 printf("Error: %s\n", status2str(rp->status));
2312 static inline void read_inquiry_scan_type_dump(int level, struct frame *frm)
2314 read_inquiry_scan_type_rp *rp = frm->ptr;
2316 p_indent(level, frm);
2317 printf("status 0x%2.2x type %d\n", rp->status, rp->type);
2319 if (rp->status > 0) {
2320 p_indent(level, frm);
2321 printf("Error: %s\n", status2str(rp->status));
2325 static inline void read_inquiry_mode_dump(int level, struct frame *frm)
2327 read_inquiry_mode_rp *rp = frm->ptr;
2329 p_indent(level, frm);
2330 printf("status 0x%2.2x mode %d\n", rp->status, rp->mode);
2332 if (rp->status > 0) {
2333 p_indent(level, frm);
2334 printf("Error: %s\n", status2str(rp->status));
2338 static inline void read_link_supervision_timeout_dump(int level, struct frame *frm)
2340 read_link_supervision_timeout_rp *rp = frm->ptr;
2342 p_indent(level, frm);
2343 printf("status 0x%2.2x handle %d timeout %d\n",
2344 rp->status, btohs(rp->handle), btohs(rp->timeout));
2346 if (rp->status > 0) {
2347 p_indent(level, frm);
2348 printf("Error: %s\n", status2str(rp->status));
2352 static inline void read_transmit_power_level_dump(int level, struct frame *frm)
2354 read_transmit_power_level_rp *rp = frm->ptr;
2356 p_indent(level, frm);
2357 printf("status 0x%2.2x handle %d level %d\n",
2358 rp->status, btohs(rp->handle), rp->level);
2360 if (rp->status > 0) {
2361 p_indent(level, frm);
2362 printf("Error: %s\n", status2str(rp->status));
2366 static inline void read_ext_inquiry_response_dump(int level, struct frame *frm)
2368 read_ext_inquiry_response_rp *rp = frm->ptr;
2370 p_indent(level, frm);
2371 printf("status 0x%2.2x fec 0x%2.2x\n", rp->status, rp->fec);
2373 if (rp->status > 0) {
2374 p_indent(level, frm);
2375 printf("Error: %s\n", status2str(rp->status));
2380 ext_inquiry_response_dump(level, frm);
2384 static inline void read_inquiry_transmit_power_level_dump(int level, struct frame *frm)
2386 read_inquiry_transmit_power_level_rp *rp = frm->ptr;
2388 p_indent(level, frm);
2389 printf("status 0x%2.2x level %d\n", rp->status, rp->level);
2391 if (rp->status > 0) {
2392 p_indent(level, frm);
2393 printf("Error: %s\n", status2str(rp->status));
2397 static inline void read_default_error_data_reporting_dump(int level, struct frame *frm)
2399 read_default_error_data_reporting_rp *rp = frm->ptr;
2401 p_indent(level, frm);
2402 printf("status 0x%2.2x reporting %d\n", rp->status, rp->reporting);
2404 if (rp->status > 0) {
2405 p_indent(level, frm);
2406 printf("Error: %s\n", status2str(rp->status));
2410 static inline void read_local_oob_data_dump(int level, struct frame *frm)
2412 read_local_oob_data_rp *rp = frm->ptr;
2415 p_indent(level, frm);
2416 printf("status 0x%2.2x\n", rp->status);
2418 if (rp->status > 0) {
2419 p_indent(level, frm);
2420 printf("Error: %s\n", status2str(rp->status));
2422 p_indent(level, frm);
2424 for (i = 0; i < 16; i++)
2425 printf("%02x", rp->hash[i]);
2428 p_indent(level, frm);
2429 printf("randomizer 0x");
2430 for (i = 0; i < 16; i++)
2431 printf("%02x", rp->randomizer[i]);
2436 static inline void read_local_version_dump(int level, struct frame *frm)
2438 read_local_version_rp *rp = frm->ptr;
2439 uint16_t manufacturer = btohs(rp->manufacturer);
2441 p_indent(level, frm);
2442 printf("status 0x%2.2x\n", rp->status);
2444 if (rp->status > 0) {
2445 p_indent(level, frm);
2446 printf("Error: %s\n", status2str(rp->status));
2448 char *lmpver = lmp_vertostr(rp->lmp_ver);
2449 char *hciver = hci_vertostr(rp->hci_ver);
2451 p_indent(level, frm);
2452 printf("HCI Version: %s (0x%x) HCI Revision: 0x%x\n",
2453 hciver ? hciver : "n/a",
2454 rp->hci_ver, btohs(rp->hci_rev));
2455 p_indent(level, frm);
2456 printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n",
2457 lmpver ? lmpver : "n/a",
2458 rp->lmp_ver, btohs(rp->lmp_subver));
2459 p_indent(level, frm);
2460 printf("Manufacturer: %s (%d)\n",
2461 bt_compidtostr(manufacturer), manufacturer);
2470 static inline void read_local_commands_dump(int level, struct frame *frm)
2472 read_local_commands_rp *rp = frm->ptr;
2475 p_indent(level, frm);
2476 printf("status 0x%2.2x\n", rp->status);
2478 if (rp->status > 0) {
2479 p_indent(level, frm);
2480 printf("Error: %s\n", status2str(rp->status));
2482 for (i = 0; i < 64; i++)
2483 if (rp->commands[i])
2485 p_indent(level, frm);
2486 printf("Commands: ");
2487 for (i = 0; i < (max > 32 ? 32 : max); i++)
2488 printf("%2.2x", rp->commands[i]);
2491 p_indent(level, frm);
2493 for (i = 32; i < max; i++)
2494 printf("%2.2x", rp->commands[i]);
2500 static inline void read_local_features_dump(int level, struct frame *frm)
2502 read_local_features_rp *rp = frm->ptr;
2505 p_indent(level, frm);
2506 printf("status 0x%2.2x\n", rp->status);
2508 if (rp->status > 0) {
2509 p_indent(level, frm);
2510 printf("Error: %s\n", status2str(rp->status));
2512 p_indent(level, frm);
2513 printf("Features:");
2514 for (i = 0; i < 8; i++)
2515 printf(" 0x%2.2x", rp->features[i]);
2520 static inline void read_local_ext_features_dump(int level, struct frame *frm)
2522 read_local_ext_features_rp *rp = frm->ptr;
2525 p_indent(level, frm);
2526 printf("status 0x%2.2x page %d max %d\n",
2527 rp->status, rp->page_num, rp->max_page_num);
2529 if (rp->status > 0) {
2530 p_indent(level, frm);
2531 printf("Error: %s\n", status2str(rp->status));
2533 p_indent(level, frm);
2534 printf("Features:");
2535 for (i = 0; i < 8; i++)
2536 printf(" 0x%2.2x", rp->features[i]);
2541 static inline void read_buffer_size_dump(int level, struct frame *frm)
2543 read_buffer_size_rp *rp = frm->ptr;
2545 p_indent(level, frm);
2546 printf("status 0x%2.2x\n", rp->status);
2548 if (rp->status > 0) {
2549 p_indent(level, frm);
2550 printf("Error: %s\n", status2str(rp->status));
2552 p_indent(level, frm);
2553 printf("ACL MTU %d:%d SCO MTU %d:%d\n",
2554 btohs(rp->acl_mtu), btohs(rp->acl_max_pkt),
2555 rp->sco_mtu, btohs(rp->sco_max_pkt));
2559 static inline void read_link_quality_dump(int level, struct frame *frm)
2561 read_link_quality_rp *rp = frm->ptr;
2563 p_indent(level, frm);
2564 printf("status 0x%2.2x handle %d lq %d\n",
2565 rp->status, btohs(rp->handle), rp->link_quality);
2567 if (rp->status > 0) {
2568 p_indent(level, frm);
2569 printf("Error: %s\n", status2str(rp->status));
2573 static inline void read_rssi_dump(int level, struct frame *frm)
2575 read_rssi_rp *rp = frm->ptr;
2577 p_indent(level, frm);
2578 printf("status 0x%2.2x handle %d rssi %d\n",
2579 rp->status, btohs(rp->handle), rp->rssi);
2581 if (rp->status > 0) {
2582 p_indent(level, frm);
2583 printf("Error: %s\n", status2str(rp->status));
2587 static inline void read_afh_map_dump(int level, struct frame *frm)
2589 read_afh_map_rp *rp = frm->ptr;
2592 p_indent(level, frm);
2593 printf("status 0x%2.2x handle %d mode %d\n",
2594 rp->status, btohs(rp->handle), rp->mode);
2596 if (rp->status > 0) {
2597 p_indent(level, frm);
2598 printf("Error: %s\n", status2str(rp->status));
2600 p_indent(level, frm);
2601 printf("AFH map: 0x");
2602 for (i = 0; i < 10; i++)
2603 printf("%2.2x", rp->map[i]);
2608 static inline void read_clock_dump(int level, struct frame *frm)
2610 read_clock_rp *rp = frm->ptr;
2612 p_indent(level, frm);
2613 printf("status 0x%2.2x handle %d clock 0x%4.4x accuracy %d\n",
2614 rp->status, btohs(rp->handle),
2615 btohl(rp->clock), btohs(rp->accuracy));
2617 if (rp->status > 0) {
2618 p_indent(level, frm);
2619 printf("Error: %s\n", status2str(rp->status));
2623 static inline void read_local_amp_info_dump(int level, struct frame *frm)
2625 read_local_amp_info_rp *rp = frm->ptr;
2627 p_indent(level, frm);
2628 printf("status 0x%2.2x amp status 0x%2.2x\n",
2629 rp->status, rp->amp_status);
2630 if (rp->status > 0) {
2631 p_indent(level, frm);
2632 printf("Error: %s\n", status2str(rp->status));
2634 p_indent(level, frm);
2635 printf("total bandwidth %d, max guaranteed bandwidth %d\n",
2636 btohl(rp->total_bandwidth),
2637 btohl(rp->max_guaranteed_bandwidth));
2638 p_indent(level, frm);
2639 printf("min latency %d, max PDU %d, controller type 0x%2.2x\n",
2640 btohl(rp->min_latency), btohl(rp->max_pdu_size),
2641 rp->controller_type);
2642 p_indent(level, frm);
2643 printf("pal caps 0x%4.4x, max assoc len %d\n",
2644 btohs(rp->pal_caps), btohs(rp->max_amp_assoc_length));
2645 p_indent(level, frm);
2646 printf("max flush timeout %d, best effort flush timeout %d\n",
2647 btohl(rp->max_flush_timeout),
2648 btohl(rp->best_effort_flush_timeout));
2652 static inline void read_local_amp_assoc_dump(int level, struct frame *frm)
2654 read_local_amp_assoc_rp *rp = frm->ptr;
2655 uint16_t len = btohs(rp->length);
2657 p_indent(level, frm);
2658 printf("status 0x%2.2x handle 0x%2.2x remaining len %d\n",
2659 rp->status, rp->handle, len);
2660 if (rp->status > 0) {
2661 p_indent(level, frm);
2662 printf("Error: %s\n", status2str(rp->status));
2664 amp_assoc_dump(level + 1, rp->fragment, len);
2668 static inline void write_remote_amp_assoc_dump(int level, struct frame *frm)
2670 write_remote_amp_assoc_rp *rp = frm->ptr;
2672 p_indent(level, frm);
2673 printf("status 0x%2.2x handle 0x%2.2x\n", rp->status, rp->handle);
2674 if (rp->status > 0) {
2675 p_indent(level, frm);
2676 printf("Error: %s\n", status2str(rp->status));
2680 static inline void le_read_buffer_size_response_dump(int level, struct frame *frm)
2682 le_read_buffer_size_rp *rp = frm->ptr;
2684 p_indent(level, frm);
2685 printf("status 0x%2.2x pktlen 0x%4.4x maxpkt 0x%2.2x\n", rp->status,
2686 rp->pkt_len, rp->max_pkt);
2688 if (rp->status > 0) {
2689 p_indent(level, frm);
2690 printf("Error: %s\n", status2str(rp->status));
2694 static inline void le_read_local_supported_features_dump(int level, struct frame *frm)
2697 le_read_local_supported_features_rp *rp = frm->ptr;
2699 p_indent(level, frm);
2700 printf("status 0x%2.2x features 0x", rp->status);
2701 for (i = 0; i < 8; i++)
2702 printf("%2.2x", rp->features[i]);
2703 printf(" (%s)\n", lefeatures2str(rp->features));
2705 if (rp->status > 0) {
2706 p_indent(level, frm);
2707 printf("Error: %s\n", status2str(rp->status));
2711 static inline void le_read_advertising_channel_tx_power_dump(int level, struct frame *frm)
2713 le_read_advertising_channel_tx_power_rp *rp = frm->ptr;
2715 p_indent(level, frm);
2716 printf("status 0x%2.2x level 0x%x (dBm)\n", rp->status, rp->level);
2718 if (rp->status > 0) {
2719 p_indent(level, frm);
2720 printf("Error: %s\n", status2str(rp->status));
2724 static inline void cmd_complete_dump(int level, struct frame *frm)
2726 evt_cmd_complete *evt = frm->ptr;
2727 uint16_t opcode = btohs(evt->opcode);
2728 uint16_t ogf = cmd_opcode_ogf(opcode);
2729 uint16_t ocf = cmd_opcode_ocf(opcode);
2731 if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
2734 p_indent(level, frm);
2735 printf("%s (0x%2.2x|0x%4.4x) ncmd %d\n",
2736 opcode2str(opcode), ogf, ocf, evt->ncmd);
2738 frm->ptr += EVT_CMD_COMPLETE_SIZE;
2739 frm->len -= EVT_CMD_COMPLETE_SIZE;
2741 if (!(parser.flags & DUMP_VERBOSE)) {
2742 raw_dump(level, frm);
2749 case OCF_INQUIRY_CANCEL:
2750 case OCF_PERIODIC_INQUIRY:
2751 case OCF_EXIT_PERIODIC_INQUIRY:
2752 case OCF_READ_REMOTE_EXT_FEATURES:
2753 status_response_dump(level, frm);
2755 case OCF_CREATE_CONN_CANCEL:
2756 case OCF_REMOTE_NAME_REQ_CANCEL:
2757 case OCF_PIN_CODE_REPLY:
2758 case OCF_LINK_KEY_REPLY:
2759 case OCF_PIN_CODE_NEG_REPLY:
2760 case OCF_LINK_KEY_NEG_REPLY:
2761 case OCF_USER_CONFIRM_REPLY:
2762 case OCF_USER_CONFIRM_NEG_REPLY:
2763 case OCF_USER_PASSKEY_REPLY:
2764 case OCF_USER_PASSKEY_NEG_REPLY:
2765 case OCF_REMOTE_OOB_DATA_REPLY:
2766 case OCF_REMOTE_OOB_DATA_NEG_REPLY:
2767 case OCF_IO_CAPABILITY_REPLY:
2768 case OCF_IO_CAPABILITY_NEG_REPLY:
2769 bdaddr_response_dump(level, frm);
2774 case OGF_LINK_POLICY:
2776 case OCF_READ_LINK_POLICY:
2777 read_link_policy_dump(level, frm);
2779 case OCF_WRITE_LINK_POLICY:
2780 case OCF_SNIFF_SUBRATING:
2781 generic_response_dump(level, frm);
2783 case OCF_READ_DEFAULT_LINK_POLICY:
2784 read_default_link_policy_dump(level, frm);
2786 case OCF_WRITE_DEFAULT_LINK_POLICY:
2787 status_response_dump(level, frm);
2794 case OCF_READ_PIN_TYPE:
2795 read_pin_type_dump(level, frm);
2797 case OCF_READ_STORED_LINK_KEY:
2798 read_stored_link_key_dump(level, frm);
2800 case OCF_WRITE_STORED_LINK_KEY:
2801 write_stored_link_key_dump(level, frm);
2803 case OCF_DELETE_STORED_LINK_KEY:
2804 delete_stored_link_key_dump(level, frm);
2806 case OCF_READ_LOCAL_NAME:
2807 read_local_name_dump(level, frm);
2809 case OCF_READ_CLASS_OF_DEV:
2810 read_class_of_dev_dump(level, frm);
2812 case OCF_READ_VOICE_SETTING:
2813 read_voice_setting_dump(level, frm);
2815 case OCF_READ_CURRENT_IAC_LAP:
2816 read_current_iac_lap_dump(level, frm);
2818 case OCF_READ_SCAN_ENABLE:
2819 case OCF_READ_AUTH_ENABLE:
2820 read_scan_enable_dump(level, frm);
2822 case OCF_READ_CONN_ACCEPT_TIMEOUT:
2823 case OCF_READ_PAGE_TIMEOUT:
2824 case OCF_READ_LOGICAL_LINK_ACCEPT_TIMEOUT:
2825 read_page_timeout_dump(level, frm);
2827 case OCF_READ_PAGE_ACTIVITY:
2828 case OCF_READ_INQ_ACTIVITY:
2829 read_page_activity_dump(level, frm);
2831 case OCF_READ_INQUIRY_SCAN_TYPE:
2832 read_inquiry_scan_type_dump(level, frm);
2834 case OCF_READ_ENCRYPT_MODE:
2835 case OCF_READ_INQUIRY_MODE:
2836 case OCF_READ_AFH_MODE:
2837 read_inquiry_mode_dump(level, frm);
2839 case OCF_READ_LINK_SUPERVISION_TIMEOUT:
2840 read_link_supervision_timeout_dump(level, frm);
2842 case OCF_READ_TRANSMIT_POWER_LEVEL:
2843 read_transmit_power_level_dump(level, frm);
2845 case OCF_READ_EXT_INQUIRY_RESPONSE:
2846 read_ext_inquiry_response_dump(level, frm);
2848 case OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL:
2849 read_inquiry_transmit_power_level_dump(level, frm);
2851 case OCF_READ_DEFAULT_ERROR_DATA_REPORTING:
2852 read_default_error_data_reporting_dump(level, frm);
2854 case OCF_READ_LOCAL_OOB_DATA:
2855 read_local_oob_data_dump(level, frm);
2857 case OCF_READ_SIMPLE_PAIRING_MODE:
2858 case OCF_READ_FLOW_CONTROL_MODE:
2859 status_mode_dump(level, frm);
2862 case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:
2863 generic_response_dump(level, frm);
2866 case OCF_SET_EVENT_MASK:
2867 case OCF_SET_EVENT_FLT:
2868 case OCF_WRITE_PIN_TYPE:
2869 case OCF_CREATE_NEW_UNIT_KEY:
2870 case OCF_CHANGE_LOCAL_NAME:
2871 case OCF_WRITE_CLASS_OF_DEV:
2872 case OCF_WRITE_VOICE_SETTING:
2873 case OCF_WRITE_CURRENT_IAC_LAP:
2874 case OCF_WRITE_SCAN_ENABLE:
2875 case OCF_WRITE_AUTH_ENABLE:
2876 case OCF_WRITE_ENCRYPT_MODE:
2877 case OCF_WRITE_CONN_ACCEPT_TIMEOUT:
2878 case OCF_WRITE_PAGE_TIMEOUT:
2879 case OCF_WRITE_PAGE_ACTIVITY:
2880 case OCF_WRITE_INQ_ACTIVITY:
2881 case OCF_WRITE_INQUIRY_SCAN_TYPE:
2882 case OCF_WRITE_INQUIRY_MODE:
2883 case OCF_WRITE_AFH_MODE:
2884 case OCF_SET_AFH_CLASSIFICATION:
2885 case OCF_WRITE_EXT_INQUIRY_RESPONSE:
2886 case OCF_WRITE_SIMPLE_PAIRING_MODE:
2887 case OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL:
2888 case OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING:
2889 case OCF_SET_CONTROLLER_TO_HOST_FC:
2890 case OCF_HOST_BUFFER_SIZE:
2891 case OCF_REFRESH_ENCRYPTION_KEY:
2892 case OCF_SEND_KEYPRESS_NOTIFY:
2893 case OCF_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT:
2894 case OCF_SET_EVENT_MASK_PAGE_2:
2895 case OCF_WRITE_LOCATION_DATA:
2896 case OCF_WRITE_FLOW_CONTROL_MODE:
2897 case OCF_READ_BEST_EFFORT_FLUSH_TIMEOUT:
2898 case OCF_WRITE_BEST_EFFORT_FLUSH_TIMEOUT:
2899 status_response_dump(level, frm);
2904 case OGF_INFO_PARAM:
2906 case OCF_READ_LOCAL_VERSION:
2907 read_local_version_dump(level, frm);
2909 case OCF_READ_LOCAL_COMMANDS:
2910 read_local_commands_dump(level, frm);
2912 case OCF_READ_LOCAL_FEATURES:
2913 read_local_features_dump(level, frm);
2915 case OCF_READ_LOCAL_EXT_FEATURES:
2916 read_local_ext_features_dump(level, frm);
2918 case OCF_READ_BUFFER_SIZE:
2919 read_buffer_size_dump(level, frm);
2921 case OCF_READ_BD_ADDR:
2922 bdaddr_response_dump(level, frm);
2924 case OCF_READ_DATA_BLOCK_SIZE:
2925 read_data_block_size_dump(level, frm);
2930 case OGF_STATUS_PARAM:
2932 case OCF_READ_FAILED_CONTACT_COUNTER:
2933 case OCF_RESET_FAILED_CONTACT_COUNTER:
2934 status_response_dump(level, frm);
2936 case OCF_READ_LINK_QUALITY:
2937 read_link_quality_dump(level, frm);
2940 read_rssi_dump(level, frm);
2942 case OCF_READ_AFH_MAP:
2943 read_afh_map_dump(level, frm);
2945 case OCF_READ_CLOCK:
2946 read_clock_dump(level, frm);
2948 case OCF_READ_LOCAL_AMP_INFO:
2949 read_local_amp_info_dump(level, frm);
2951 case OCF_READ_LOCAL_AMP_ASSOC:
2952 read_local_amp_assoc_dump(level, frm);
2954 case OCF_WRITE_REMOTE_AMP_ASSOC:
2955 write_remote_amp_assoc_dump(level, frm);
2960 case OGF_TESTING_CMD:
2962 case OCF_READ_LOOPBACK_MODE:
2963 status_mode_dump(level, frm);
2965 case OCF_WRITE_LOOPBACK_MODE:
2966 case OCF_ENABLE_DEVICE_UNDER_TEST_MODE:
2967 case OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE:
2968 status_response_dump(level, frm);
2975 case OCF_LE_SET_EVENT_MASK:
2976 case OCF_LE_SET_RANDOM_ADDRESS:
2977 case OCF_LE_SET_ADVERTISING_PARAMETERS:
2978 case OCF_LE_SET_ADVERTISING_DATA:
2979 case OCF_LE_SET_SCAN_RESPONSE_DATA:
2980 case OCF_LE_SET_ADVERTISE_ENABLE:
2981 case OCF_LE_SET_SCAN_PARAMETERS:
2982 case OCF_LE_SET_SCAN_ENABLE:
2983 case OCF_LE_CREATE_CONN:
2984 case OCF_LE_CLEAR_WHITE_LIST:
2985 case OCF_LE_ADD_DEVICE_TO_WHITE_LIST:
2986 case OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST:
2987 case OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION:
2988 case OCF_LE_RECEIVER_TEST:
2989 case OCF_LE_TRANSMITTER_TEST:
2990 status_response_dump(level, frm);
2992 case OCF_LE_READ_BUFFER_SIZE:
2993 le_read_buffer_size_response_dump(level, frm);
2995 case OCF_LE_READ_LOCAL_SUPPORTED_FEATURES:
2996 le_read_local_supported_features_dump(level, frm);
2998 case OCF_LE_READ_ADVERTISING_CHANNEL_TX_POWER:
2999 le_read_advertising_channel_tx_power_dump(level, frm);
3005 raw_dump(level, frm);
3008 static inline void cmd_status_dump(int level, struct frame *frm)
3010 evt_cmd_status *evt = frm->ptr;
3011 uint16_t opcode = btohs(evt->opcode);
3012 uint16_t ogf = cmd_opcode_ogf(opcode);
3013 uint16_t ocf = cmd_opcode_ocf(opcode);
3015 if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))
3018 p_indent(level, frm);
3019 printf("%s (0x%2.2x|0x%4.4x) status 0x%2.2x ncmd %d\n",
3020 opcode2str(opcode), ogf, ocf, evt->status, evt->ncmd);
3022 if (evt->status > 0) {
3023 p_indent(level, frm);
3024 printf("Error: %s\n", status2str(evt->status));
3028 static inline void hardware_error_dump(int level, struct frame *frm)
3030 evt_hardware_error *evt = frm->ptr;
3032 p_indent(level, frm);
3033 printf("code %d\n", evt->code);
3036 static inline void inq_result_dump(int level, struct frame *frm)
3038 uint8_t num = p_get_u8(frm);
3042 for (i = 0; i < num; i++) {
3043 inquiry_info *info = frm->ptr;
3045 p_ba2str(&info->bdaddr, addr);
3047 p_indent(level, frm);
3048 printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x\n",
3049 addr, info->pscan_rep_mode, btohs(info->clock_offset),
3050 info->dev_class[2], info->dev_class[1], info->dev_class[0]);
3052 frm->ptr += INQUIRY_INFO_SIZE;
3053 frm->len -= INQUIRY_INFO_SIZE;
3057 static inline void conn_complete_dump(int level, struct frame *frm)
3059 evt_conn_complete *evt = frm->ptr;
3062 p_ba2str(&evt->bdaddr, addr);
3064 p_indent(level, frm);
3065 printf("status 0x%2.2x handle %d bdaddr %s type %s encrypt 0x%2.2x\n",
3066 evt->status, btohs(evt->handle), addr,
3067 linktype2str(evt->link_type), evt->encr_mode);
3069 if (evt->status > 0) {
3070 p_indent(level, frm);
3071 printf("Error: %s\n", status2str(evt->status));
3075 static inline void conn_request_dump(int level, struct frame *frm)
3077 evt_conn_request *evt = frm->ptr;
3080 p_ba2str(&evt->bdaddr, addr);
3082 p_indent(level, frm);
3083 printf("bdaddr %s class 0x%2.2x%2.2x%2.2x type %s\n",
3084 addr, evt->dev_class[2], evt->dev_class[1],
3085 evt->dev_class[0], linktype2str(evt->link_type));
3088 static inline void disconn_complete_dump(int level, struct frame *frm)
3090 evt_disconn_complete *evt = frm->ptr;
3092 p_indent(level, frm);
3093 printf("status 0x%2.2x handle %d reason 0x%2.2x\n",
3094 evt->status, btohs(evt->handle), evt->reason);
3096 if (evt->status > 0) {
3097 p_indent(level, frm);
3098 printf("Error: %s\n", status2str(evt->status));
3099 } else if (evt->reason > 0) {
3100 p_indent(level, frm);
3101 printf("Reason: %s\n", status2str(evt->reason));
3105 static inline void remote_name_req_complete_dump(int level, struct frame *frm)
3107 evt_remote_name_req_complete *evt = frm->ptr;
3108 char addr[18], name[249];
3111 p_ba2str(&evt->bdaddr, addr);
3113 memset(name, 0, sizeof(name));
3114 for (i = 0; i < 248 && evt->name[i]; i++)
3115 if (isprint(evt->name[i]))
3116 name[i] = evt->name[i];
3120 p_indent(level, frm);
3121 printf("status 0x%2.2x bdaddr %s name '%s'\n", evt->status, addr, name);
3123 if (evt->status > 0) {
3124 p_indent(level, frm);
3125 printf("Error: %s\n", status2str(evt->status));
3129 static inline void master_link_key_complete_dump(int level, struct frame *frm)
3131 evt_master_link_key_complete *evt = frm->ptr;
3133 p_indent(level, frm);
3134 printf("status 0x%2.2x handle %d flag %d\n",
3135 evt->status, btohs(evt->handle), evt->key_flag);
3137 if (evt->status > 0) {
3138 p_indent(level, frm);
3139 printf("Error: %s\n", status2str(evt->status));
3143 static inline void encrypt_change_dump(int level, struct frame *frm)
3145 evt_encrypt_change *evt = frm->ptr;
3147 p_indent(level, frm);
3148 printf("status 0x%2.2x handle %d encrypt 0x%2.2x\n",
3149 evt->status, btohs(evt->handle), evt->encrypt);
3151 if (evt->status > 0) {
3152 p_indent(level, frm);
3153 printf("Error: %s\n", status2str(evt->status));
3157 static inline void read_remote_features_complete_dump(int level, struct frame *frm)
3159 evt_read_remote_features_complete *evt = frm->ptr;
3162 p_indent(level, frm);
3163 printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3165 if (evt->status > 0) {
3166 p_indent(level, frm);
3167 printf("Error: %s\n", status2str(evt->status));
3169 p_indent(level, frm);
3170 printf("Features:");
3171 for (i = 0; i < 8; i++)
3172 printf(" 0x%2.2x", evt->features[i]);
3177 static inline void read_remote_version_complete_dump(int level, struct frame *frm)
3179 evt_read_remote_version_complete *evt = frm->ptr;
3180 uint16_t manufacturer = btohs(evt->manufacturer);
3182 p_indent(level, frm);
3183 printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3185 if (evt->status > 0) {
3186 p_indent(level, frm);
3187 printf("Error: %s\n", status2str(evt->status));
3189 char *lmpver = lmp_vertostr(evt->lmp_ver);
3191 p_indent(level, frm);
3192 printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n",
3193 lmpver ? lmpver : "n/a", evt->lmp_ver,
3194 btohs(evt->lmp_subver));
3195 p_indent(level, frm);
3196 printf("Manufacturer: %s (%d)\n",
3197 bt_compidtostr(manufacturer), manufacturer);
3204 static inline void qos_setup_complete_dump(int level, struct frame *frm)
3206 evt_qos_setup_complete *evt = frm->ptr;
3208 p_indent(level, frm);
3209 printf("status 0x%2.2x handle %d flags %d\n",
3210 evt->status, btohs(evt->handle), evt->flags);
3212 if (evt->status > 0) {
3213 p_indent(level, frm);
3214 printf("Error: %s\n", status2str(evt->status));
3216 p_indent(level, frm);
3217 printf("Service type: %d\n", evt->qos.service_type);
3218 p_indent(level, frm);
3219 printf("Token rate: %d\n", btohl(evt->qos.token_rate));
3220 p_indent(level, frm);
3221 printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth));
3222 p_indent(level, frm);
3223 printf("Latency: %d\n", btohl(evt->qos.latency));
3224 p_indent(level, frm);
3225 printf("Delay variation: %d\n", btohl(evt->qos.delay_variation));
3229 static inline void role_change_dump(int level, struct frame *frm)
3231 evt_role_change *evt = frm->ptr;
3234 p_indent(level, frm);
3235 p_ba2str(&evt->bdaddr, addr);
3236 printf("status 0x%2.2x bdaddr %s role 0x%2.2x\n",
3237 evt->status, addr, evt->role);
3239 if (evt->status > 0) {
3240 p_indent(level, frm);
3241 printf("Error: %s\n", status2str(evt->status));
3243 p_indent(level, frm);
3244 printf("Role: %s\n", role2str(evt->role));
3248 static inline void mode_change_dump(int level, struct frame *frm)
3250 evt_mode_change *evt = frm->ptr;
3252 p_indent(level, frm);
3253 printf("status 0x%2.2x handle %d mode 0x%2.2x interval %d\n",
3254 evt->status, btohs(evt->handle), evt->mode, btohs(evt->interval));
3256 if (evt->status > 0) {
3257 p_indent(level, frm);
3258 printf("Error: %s\n", status2str(evt->status));
3260 p_indent(level, frm);
3261 printf("Mode: %s\n", mode2str(evt->mode));
3265 static inline void pin_code_req_dump(int level, struct frame *frm)
3267 evt_pin_code_req *evt = frm->ptr;
3270 p_indent(level, frm);
3271 p_ba2str(&evt->bdaddr, addr);
3272 printf("bdaddr %s\n", addr);
3275 static inline void link_key_notify_dump(int level, struct frame *frm)
3277 evt_link_key_notify *evt = frm->ptr;
3281 p_indent(level, frm);
3282 p_ba2str(&evt->bdaddr, addr);
3283 printf("bdaddr %s key ", addr);
3284 for (i = 0; i < 16; i++)
3285 if (parser.flags & DUMP_NOVENDOR)
3288 printf("%2.2X", evt->link_key[i]);
3289 printf(" type %d\n", evt->key_type);
3291 p_indent(level, frm);
3292 printf("Type: %s\n", keytype2str(evt->key_type));
3295 static inline void max_slots_change_dump(int level, struct frame *frm)
3297 evt_max_slots_change *evt = frm->ptr;
3299 p_indent(level, frm);
3300 printf("handle %d slots %d\n", btohs(evt->handle), evt->max_slots);
3303 static inline void data_buffer_overflow_dump(int level, struct frame *frm)
3305 evt_data_buffer_overflow *evt = frm->ptr;
3307 p_indent(level, frm);
3308 printf("type %s\n", linktype2str(evt->link_type));
3311 static inline void read_clock_offset_complete_dump(int level, struct frame *frm)
3313 evt_read_clock_offset_complete *evt = frm->ptr;
3315 p_indent(level, frm);
3316 printf("status 0x%2.2x handle %d clkoffset 0x%4.4x\n",
3317 evt->status, btohs(evt->handle), btohs(evt->clock_offset));
3319 if (evt->status > 0) {
3320 p_indent(level, frm);
3321 printf("Error: %s\n", status2str(evt->status));
3325 static inline void conn_ptype_changed_dump(int level, struct frame *frm)
3327 evt_conn_ptype_changed *evt = frm->ptr;
3328 uint16_t ptype = btohs(evt->ptype);
3331 p_indent(level, frm);
3332 printf("status 0x%2.2x handle %d ptype 0x%4.4x\n",
3333 evt->status, btohs(evt->handle), ptype);
3335 if (evt->status > 0) {
3336 p_indent(level, frm);
3337 printf("Error: %s\n", status2str(evt->status));
3339 str = hci_ptypetostr(ptype);
3341 p_indent(level, frm);
3342 printf("Packet type: %s\n", str);
3348 static inline void pscan_rep_mode_change_dump(int level, struct frame *frm)
3350 evt_pscan_rep_mode_change *evt = frm->ptr;
3353 p_indent(level, frm);
3354 p_ba2str(&evt->bdaddr, addr);
3355 printf("bdaddr %s mode %d\n", addr, evt->pscan_rep_mode);
3358 static inline void flow_spec_complete_dump(int level, struct frame *frm)
3360 evt_flow_spec_complete *evt = frm->ptr;
3362 p_indent(level, frm);
3363 printf("status 0x%2.2x handle 0x%4.4x flags %d %s\n",
3364 evt->status, btohs(evt->handle), evt->flags,
3365 evt->direction == 0 ? "outgoing" : "incoming");
3367 if (evt->status > 0) {
3368 p_indent(level, frm);
3369 printf("Error: %s\n", status2str(evt->status));
3371 p_indent(level, frm);
3372 printf("Service type: %d\n", evt->qos.service_type);
3373 p_indent(level, frm);
3374 printf("Token rate: %d\n", btohl(evt->qos.token_rate));
3375 p_indent(level, frm);
3376 printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth));
3377 p_indent(level, frm);
3378 printf("Latency: %d\n", btohl(evt->qos.latency));
3379 p_indent(level, frm);
3380 printf("Delay variation: %d\n", btohl(evt->qos.delay_variation));
3384 static inline void inq_result_with_rssi_dump(int level, struct frame *frm)
3386 uint8_t num = p_get_u8(frm);
3393 if (frm->len / num == INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE) {
3394 for (i = 0; i < num; i++) {
3395 inquiry_info_with_rssi_and_pscan_mode *info = frm->ptr;
3397 p_indent(level, frm);
3399 p_ba2str(&info->bdaddr, addr);
3400 printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3401 addr, info->pscan_rep_mode, btohs(info->clock_offset),
3402 info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
3404 frm->ptr += INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
3405 frm->len -= INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE;
3408 for (i = 0; i < num; i++) {
3409 inquiry_info_with_rssi *info = frm->ptr;
3411 p_indent(level, frm);
3413 p_ba2str(&info->bdaddr, addr);
3414 printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3415 addr, info->pscan_rep_mode, btohs(info->clock_offset),
3416 info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
3418 frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
3419 frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE;
3424 static inline void read_remote_ext_features_complete_dump(int level, struct frame *frm)
3426 evt_read_remote_ext_features_complete *evt = frm->ptr;
3429 p_indent(level, frm);
3430 printf("status 0x%2.2x handle %d page %d max %d\n",
3431 evt->status, btohs(evt->handle),
3432 evt->page_num, evt->max_page_num);
3434 if (evt->status > 0) {
3435 p_indent(level, frm);
3436 printf("Error: %s\n", status2str(evt->status));
3438 p_indent(level, frm);
3439 printf("Features:");
3440 for (i = 0; i < 8; i++)
3441 printf(" 0x%2.2x", evt->features[i]);
3446 static inline void sync_conn_complete_dump(int level, struct frame *frm)
3448 evt_sync_conn_complete *evt = frm->ptr;
3451 p_ba2str(&evt->bdaddr, addr);
3453 p_indent(level, frm);
3454 printf("status 0x%2.2x handle %d bdaddr %s type %s\n",
3455 evt->status, btohs(evt->handle), addr,
3456 evt->link_type == 0 ? "SCO" : "eSCO");
3458 if (evt->status > 0) {
3459 p_indent(level, frm);
3460 printf("Error: %s\n", status2str(evt->status));
3462 p_indent(level, frm);
3463 printf("Air mode: %s\n", airmode2str(evt->air_mode));
3467 static inline void sync_conn_changed_dump(int level, struct frame *frm)
3469 evt_sync_conn_changed *evt = frm->ptr;
3471 p_indent(level, frm);
3472 printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3474 if (evt->status > 0) {
3475 p_indent(level, frm);
3476 printf("Error: %s\n", status2str(evt->status));
3480 static inline void sniff_subrating_event_dump(int level, struct frame *frm)
3482 evt_sniff_subrating *evt = frm->ptr;
3484 p_indent(level, frm);
3485 printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle));
3487 if (evt->status > 0) {
3488 p_indent(level, frm);
3489 printf("Error: %s\n", status2str(evt->status));
3491 p_indent(level, frm);
3492 printf("max latency transmit %d receive %d\n",
3493 btohs(evt->max_tx_latency),
3494 btohs(evt->max_rx_latency));
3496 p_indent(level, frm);
3497 printf("min timeout remote %d local %d\n",
3498 btohs(evt->min_remote_timeout),
3499 btohs(evt->min_local_timeout));
3503 static inline void extended_inq_result_dump(int level, struct frame *frm)
3505 uint8_t num = p_get_u8(frm);
3509 for (i = 0; i < num; i++) {
3510 extended_inquiry_info *info = frm->ptr;
3512 p_ba2str(&info->bdaddr, addr);
3514 p_indent(level, frm);
3515 printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x rssi %d\n",
3516 addr, info->pscan_rep_mode, btohs(info->clock_offset),
3517 info->dev_class[2], info->dev_class[1], info->dev_class[0], info->rssi);
3519 frm->ptr += INQUIRY_INFO_WITH_RSSI_SIZE;
3520 frm->len -= INQUIRY_INFO_WITH_RSSI_SIZE;
3522 ext_inquiry_response_dump(level, frm);
3526 static inline void link_supervision_timeout_changed_dump(int level, struct frame *frm)
3528 evt_link_supervision_timeout_changed *evt = frm->ptr;
3530 p_indent(level, frm);
3531 printf("handle %d timeout %d\n",
3532 btohs(evt->handle), btohs(evt->timeout));
3535 static inline void user_passkey_notify_dump(int level, struct frame *frm)
3537 evt_user_passkey_notify *evt = frm->ptr;
3540 p_indent(level, frm);
3541 p_ba2str(&evt->bdaddr, addr);
3542 printf("bdaddr %s passkey %d\n", addr, btohl(evt->passkey));
3545 static inline void keypress_notify_dump(int level, struct frame *frm)
3547 evt_keypress_notify *evt = frm->ptr;
3550 p_indent(level, frm);
3551 p_ba2str(&evt->bdaddr, addr);
3552 printf("bdaddr %s type %d\n", addr, evt->type);
3555 static inline void remote_host_features_notify_dump(int level, struct frame *frm)
3557 evt_remote_host_features_notify *evt = frm->ptr;
3561 p_indent(level, frm);
3562 p_ba2str(&evt->bdaddr, addr);
3563 printf("bdaddr %s\n", addr);
3565 p_indent(level, frm);
3566 printf("Features:");
3567 for (i = 0; i < 8; i++)
3568 printf(" 0x%2.2x", evt->features[i]);
3572 static inline void evt_le_conn_complete_dump(int level, struct frame *frm)
3574 evt_le_connection_complete *evt = frm->ptr;
3577 p_indent(level, frm);
3578 printf("status 0x%2.2x handle %d, role %s\n",
3579 evt->status, btohs(evt->handle),
3580 evt->role ? "slave" : "master");
3582 p_indent(level, frm);
3583 p_ba2str(&evt->peer_bdaddr, addr);
3584 printf("bdaddr %s (%s)\n", addr, bdaddrtype2str(evt->peer_bdaddr_type));
3587 static inline void evt_le_advertising_report_dump(int level, struct frame *frm)
3589 uint8_t num_reports = p_get_u8(frm);
3590 const uint8_t RSSI_SIZE = 1;
3592 while (num_reports--) {
3594 le_advertising_info *info = frm->ptr;
3597 p_ba2str(&info->bdaddr, addr);
3599 p_indent(level, frm);
3600 printf("%s (%d)\n", evttype2str(info->evt_type), info->evt_type);
3602 p_indent(level, frm);
3603 printf("bdaddr %s (%s)\n", addr,
3604 bdaddrtype2str(info->bdaddr_type));
3606 while (offset < info->length) {
3607 int eir_data_len = info->data[offset];
3609 ext_inquiry_data_dump(level, frm, &info->data[offset]);
3611 offset += eir_data_len + 1;
3614 frm->ptr += LE_ADVERTISING_INFO_SIZE + info->length;
3615 frm->len -= LE_ADVERTISING_INFO_SIZE + info->length;
3617 p_indent(level, frm);
3618 printf("RSSI: %d\n", ((int8_t *) frm->ptr)[frm->len - 1]);
3620 frm->ptr += RSSI_SIZE;
3621 frm->len -= RSSI_SIZE;
3625 static inline void evt_le_conn_update_complete_dump(int level,
3628 evt_le_connection_update_complete *uevt = frm->ptr;
3630 p_indent(level, frm);
3631 printf("status 0x%2.2x handle %d\n", uevt->status, btohs(uevt->handle));
3633 p_indent(level, frm);
3634 printf("interval %.2fms, latency %.2fms, superv. timeout %.2fms\n",
3635 btohs(uevt->interval) * 1.25, btohs(uevt->latency) * 1.25,
3636 btohs(uevt->supervision_timeout) * 10.0);
3639 static inline void evt_le_read_remote_used_features_complete_dump(int level, struct frame *frm)
3642 evt_le_read_remote_used_features_complete *revt = frm->ptr;
3644 p_indent(level, frm);
3645 printf("status 0x%2.2x handle %d\n", revt->status, btohs(revt->handle));
3647 if (revt->status > 0) {
3648 p_indent(level, frm);
3649 printf("Error: %s\n", status2str(revt->status));
3651 p_indent(level, frm);
3652 printf("Features:");
3653 for (i = 0; i < 8; i++)
3654 printf(" 0x%2.2x", revt->features[i]);
3659 static inline void le_meta_ev_dump(int level, struct frame *frm)
3661 evt_le_meta_event *mevt = frm->ptr;
3664 subevent = mevt->subevent;
3666 frm->ptr += EVT_LE_META_EVENT_SIZE;
3667 frm->len -= EVT_LE_META_EVENT_SIZE;
3669 p_indent(level, frm);
3670 printf("%s\n", ev_le_meta_str[subevent]);
3672 switch (mevt->subevent) {
3673 case EVT_LE_CONN_COMPLETE:
3674 evt_le_conn_complete_dump(level + 1, frm);
3676 case EVT_LE_ADVERTISING_REPORT:
3677 evt_le_advertising_report_dump(level + 1, frm);
3679 case EVT_LE_CONN_UPDATE_COMPLETE:
3680 evt_le_conn_update_complete_dump(level + 1, frm);
3682 case EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE:
3683 evt_le_read_remote_used_features_complete_dump(level + 1, frm);
3686 raw_dump(level, frm);
3691 static inline void phys_link_complete_dump(int level, struct frame *frm)
3693 evt_physical_link_complete *evt = frm->ptr;
3695 p_indent(level, frm);
3696 printf("status 0x%2.2x phy handle 0x%2.2x\n", evt->status, evt->handle);
3698 if (evt->status > 0) {
3699 p_indent(level, frm);
3700 printf("Error: %s\n", status2str(evt->status));
3704 static inline void disconn_phys_link_complete_dump(int level, struct frame *frm)
3706 evt_disconn_physical_link_complete *evt = frm->ptr;
3708 p_indent(level, frm);
3709 printf("status 0x%2.2x handle 0x%2.2x reason 0x%2.2x\n",
3710 evt->status, evt->handle, evt->reason);
3712 if (evt->status > 0) {
3713 p_indent(level, frm);
3714 printf("Error: %s\n", status2str(evt->status));
3715 } else if (evt->reason > 0) {
3716 p_indent(level, frm);
3717 printf("Reason: %s\n", status2str(evt->reason));
3721 static inline void phys_link_loss_warning_dump(int level, struct frame *frm)
3723 evt_physical_link_loss_warning *evt = frm->ptr;
3725 p_indent(level, frm);
3726 printf("phy handle 0x%2.2x reason 0x%2.2x\n", evt->handle, evt->reason);
3729 static inline void phys_link_handle_dump(int level, struct frame *frm)
3731 evt_physical_link_recovery *evt = frm->ptr;
3733 p_indent(level, frm);
3734 printf("phy handle 0x%2.2x\n", evt->handle);
3737 static inline void logical_link_complete_dump(int level, struct frame *frm)
3739 evt_logical_link_complete *evt = frm->ptr;
3741 p_indent(level, frm);
3742 printf("status 0x%2.2x log handle 0x%4.4x phy handle 0x%2.2x"
3744 evt->status, btohs(evt->log_handle), evt->handle,
3747 if (evt->status > 0) {
3748 p_indent(level, frm);
3749 printf("Error: %s\n", status2str(evt->status));
3753 static inline void flow_spec_modify_dump(int level, struct frame *frm)
3755 evt_flow_spec_modify_complete *evt = frm->ptr;
3757 p_indent(level, frm);
3758 printf("status 0x%2.2x handle 0x%4.4x\n",
3759 evt->status, btohs(evt->handle));
3761 if (evt->status > 0) {
3762 p_indent(level, frm);
3763 printf("Error: %s\n", status2str(evt->status));
3767 static inline void num_completed_blocks_dump(int level, struct frame *frm)
3769 evt_num_completed_blocks *evt = frm->ptr;
3772 p_indent(level, frm);
3773 printf("Total num blocks %d Num handles %d\n",
3774 btohs(evt->total_num_blocks), evt->num_handles);
3776 for (i = 0; i < evt->num_handles; i++) {
3777 cmplt_handle *h = &evt->handles[i];
3779 p_indent(level + 1, frm);
3780 printf("Handle 0x%4.4x: Num complt pkts %d Num complt blks %d\n",
3781 btohs(h->handle), btohs(h->num_cmplt_pkts),
3782 btohs(h->num_cmplt_blks));
3786 static inline void event_dump(int level, struct frame *frm)
3788 hci_event_hdr *hdr = frm->ptr;
3789 uint8_t event = hdr->evt;
3791 if (p_filter(FILT_HCI))
3794 if (event <= EVENT_NUM) {
3795 p_indent(level, frm);
3796 printf("HCI Event: %s (0x%2.2x) plen %d\n",
3797 event_str[hdr->evt], hdr->evt, hdr->plen);
3798 } else if (hdr->evt == EVT_TESTING) {
3799 p_indent(level, frm);
3800 printf("HCI Event: Testing (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
3801 } else if (hdr->evt == EVT_VENDOR) {
3802 uint16_t manufacturer;
3804 if (parser.flags & DUMP_NOVENDOR)
3807 p_indent(level, frm);
3808 printf("HCI Event: Vendor (0x%2.2x) plen %d\n", hdr->evt, hdr->plen);
3810 manufacturer = get_manufacturer();
3812 switch (manufacturer) {
3816 frm->ptr += HCI_EVENT_HDR_SIZE;
3817 frm->len -= HCI_EVENT_HDR_SIZE;
3818 ericsson_dump(level + 1, frm);
3821 frm->ptr += HCI_EVENT_HDR_SIZE;
3822 frm->len -= HCI_EVENT_HDR_SIZE;
3823 csr_dump(level + 1, frm);
3827 p_indent(level, frm);
3828 printf("HCI Event: code 0x%2.2x plen %d\n", hdr->evt, hdr->plen);
3831 frm->ptr += HCI_EVENT_HDR_SIZE;
3832 frm->len -= HCI_EVENT_HDR_SIZE;
3834 if (event == EVT_CMD_COMPLETE) {
3835 evt_cmd_complete *cc = frm->ptr;
3836 if (cc->opcode == cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_LOCAL_VERSION)) {
3837 read_local_version_rp *rp = frm->ptr + EVT_CMD_COMPLETE_SIZE;
3838 manufacturer = rp->manufacturer;
3842 if (event == EVT_DISCONN_COMPLETE) {
3843 evt_disconn_complete *evt = frm->ptr;
3844 l2cap_clear(btohs(evt->handle));
3847 if (!(parser.flags & DUMP_VERBOSE)) {
3848 raw_dump(level, frm);
3853 case EVT_LOOPBACK_COMMAND:
3854 command_dump(level + 1, frm);
3856 case EVT_CMD_COMPLETE:
3857 cmd_complete_dump(level + 1, frm);
3859 case EVT_CMD_STATUS:
3860 cmd_status_dump(level + 1, frm);
3862 case EVT_HARDWARE_ERROR:
3863 hardware_error_dump(level + 1, frm);
3865 case EVT_FLUSH_OCCURRED:
3866 case EVT_QOS_VIOLATION:
3867 handle_response_dump(level + 1, frm);
3869 case EVT_INQUIRY_COMPLETE:
3870 status_response_dump(level + 1, frm);
3872 case EVT_INQUIRY_RESULT:
3873 inq_result_dump(level + 1, frm);
3875 case EVT_CONN_COMPLETE:
3876 conn_complete_dump(level + 1, frm);
3878 case EVT_CONN_REQUEST:
3879 conn_request_dump(level + 1, frm);
3881 case EVT_DISCONN_COMPLETE:
3882 case EVT_DISCONNECT_LOGICAL_LINK_COMPLETE:
3883 disconn_complete_dump(level + 1, frm);
3885 case EVT_AUTH_COMPLETE:
3886 case EVT_CHANGE_CONN_LINK_KEY_COMPLETE:
3887 generic_response_dump(level + 1, frm);
3889 case EVT_MASTER_LINK_KEY_COMPLETE:
3890 master_link_key_complete_dump(level + 1, frm);
3892 case EVT_REMOTE_NAME_REQ_COMPLETE:
3893 remote_name_req_complete_dump(level + 1, frm);
3895 case EVT_ENCRYPT_CHANGE:
3896 encrypt_change_dump(level + 1, frm);
3898 case EVT_READ_REMOTE_FEATURES_COMPLETE:
3899 read_remote_features_complete_dump(level + 1, frm);
3901 case EVT_READ_REMOTE_VERSION_COMPLETE:
3902 read_remote_version_complete_dump(level + 1, frm);
3904 case EVT_QOS_SETUP_COMPLETE:
3905 qos_setup_complete_dump(level + 1, frm);
3907 case EVT_ROLE_CHANGE:
3908 role_change_dump(level + 1, frm);
3910 case EVT_NUM_COMP_PKTS:
3911 num_comp_pkts_dump(level + 1, frm);
3913 case EVT_MODE_CHANGE:
3914 mode_change_dump(level + 1, frm);
3916 case EVT_RETURN_LINK_KEYS:
3917 return_link_keys_dump(level + 1, frm);
3919 case EVT_PIN_CODE_REQ:
3920 case EVT_LINK_KEY_REQ:
3921 case EVT_IO_CAPABILITY_REQUEST:
3922 case EVT_USER_PASSKEY_REQUEST:
3923 case EVT_REMOTE_OOB_DATA_REQUEST:
3924 pin_code_req_dump(level + 1, frm);
3926 case EVT_LINK_KEY_NOTIFY:
3927 link_key_notify_dump(level + 1, frm);
3929 case EVT_DATA_BUFFER_OVERFLOW:
3930 data_buffer_overflow_dump(level + 1, frm);
3932 case EVT_MAX_SLOTS_CHANGE:
3933 max_slots_change_dump(level + 1, frm);
3935 case EVT_READ_CLOCK_OFFSET_COMPLETE:
3936 read_clock_offset_complete_dump(level + 1, frm);
3938 case EVT_CONN_PTYPE_CHANGED:
3939 conn_ptype_changed_dump(level + 1, frm);
3941 case EVT_PSCAN_REP_MODE_CHANGE:
3942 pscan_rep_mode_change_dump(level + 1, frm);
3944 case EVT_FLOW_SPEC_COMPLETE:
3945 flow_spec_complete_dump(level + 1, frm);
3947 case EVT_INQUIRY_RESULT_WITH_RSSI:
3948 inq_result_with_rssi_dump(level + 1, frm);
3950 case EVT_READ_REMOTE_EXT_FEATURES_COMPLETE:
3951 read_remote_ext_features_complete_dump(level + 1, frm);
3953 case EVT_SYNC_CONN_COMPLETE:
3954 sync_conn_complete_dump(level + 1, frm);
3956 case EVT_SYNC_CONN_CHANGED:
3957 sync_conn_changed_dump(level + 1, frm);
3959 case EVT_SNIFF_SUBRATING:
3960 sniff_subrating_event_dump(level + 1, frm);
3962 case EVT_EXTENDED_INQUIRY_RESULT:
3963 extended_inq_result_dump(level + 1, frm);
3965 case EVT_ENCRYPTION_KEY_REFRESH_COMPLETE:
3966 generic_response_dump(level + 1, frm);
3968 case EVT_SIMPLE_PAIRING_COMPLETE:
3969 bdaddr_response_dump(level + 1, frm);
3971 case EVT_LINK_SUPERVISION_TIMEOUT_CHANGED:
3972 link_supervision_timeout_changed_dump(level + 1, frm);
3974 case EVT_ENHANCED_FLUSH_COMPLETE:
3975 generic_command_dump(level + 1, frm);
3977 case EVT_IO_CAPABILITY_RESPONSE:
3978 io_capability_reply_dump(level + 1, frm);
3980 case EVT_USER_CONFIRM_REQUEST:
3981 case EVT_USER_PASSKEY_NOTIFY:
3982 user_passkey_notify_dump(level + 1, frm);
3984 case EVT_KEYPRESS_NOTIFY:
3985 keypress_notify_dump(level + 1, frm);
3987 case EVT_REMOTE_HOST_FEATURES_NOTIFY:
3988 remote_host_features_notify_dump(level + 1, frm);
3990 case EVT_LE_META_EVENT:
3991 le_meta_ev_dump(level + 1, frm);
3993 case EVT_PHYSICAL_LINK_COMPLETE:
3994 phys_link_complete_dump(level + 1, frm);
3996 case EVT_DISCONNECT_PHYSICAL_LINK_COMPLETE:
3997 disconn_phys_link_complete_dump(level + 1, frm);
3999 case EVT_PHYSICAL_LINK_LOSS_EARLY_WARNING:
4000 phys_link_loss_warning_dump(level + 1, frm);
4002 case EVT_PHYSICAL_LINK_RECOVERY:
4003 case EVT_CHANNEL_SELECTED:
4004 phys_link_handle_dump(level + 1, frm);
4006 case EVT_LOGICAL_LINK_COMPLETE:
4007 logical_link_complete_dump(level + 1, frm);
4009 case EVT_FLOW_SPEC_MODIFY_COMPLETE:
4010 flow_spec_modify_dump(level + 1, frm);
4012 case EVT_NUMBER_COMPLETED_BLOCKS:
4013 num_completed_blocks_dump(level + 1, frm);
4016 raw_dump(level, frm);
4021 static inline void acl_dump(int level, struct frame *frm)
4023 hci_acl_hdr *hdr = (void *) frm->ptr;
4024 uint16_t handle = btohs(hdr->handle);
4025 uint16_t dlen = btohs(hdr->dlen);
4026 uint8_t flags = acl_flags(handle);
4028 if (!p_filter(FILT_HCI)) {
4029 p_indent(level, frm);
4030 printf("ACL data: handle %d flags 0x%2.2x dlen %d\n",
4031 acl_handle(handle), flags, dlen);
4035 frm->ptr += HCI_ACL_HDR_SIZE;
4036 frm->len -= HCI_ACL_HDR_SIZE;
4038 frm->handle = acl_handle(handle);
4040 if (parser.filter & ~FILT_HCI)
4041 l2cap_dump(level, frm);
4043 raw_dump(level, frm);
4046 static inline void sco_dump(int level, struct frame *frm)
4048 hci_sco_hdr *hdr = (void *) frm->ptr;
4049 uint16_t handle = btohs(hdr->handle);
4050 uint8_t flags = acl_flags(handle);
4053 if (frm->audio_fd > fileno(stderr)) {
4054 len = write(frm->audio_fd, frm->ptr + HCI_SCO_HDR_SIZE, hdr->dlen);
4059 if (!p_filter(FILT_SCO)) {
4060 p_indent(level, frm);
4061 printf("SCO data: handle %d flags 0x%2.2x dlen %d\n",
4062 acl_handle(handle), flags, hdr->dlen);
4065 frm->ptr += HCI_SCO_HDR_SIZE;
4066 frm->len -= HCI_SCO_HDR_SIZE;
4067 raw_dump(level, frm);
4071 static inline void vendor_dump(int level, struct frame *frm)
4073 if (p_filter(FILT_HCI))
4076 if (frm->dev_id == HCI_DEV_NONE) {
4077 uint16_t device = btohs(htons(p_get_u16(frm)));
4078 uint16_t proto = btohs(htons(p_get_u16(frm)));
4079 uint16_t type = btohs(htons(p_get_u16(frm)));
4080 uint16_t plen = btohs(htons(p_get_u16(frm)));
4082 p_indent(level, frm);
4084 printf("System %s: device hci%d proto 0x%2.2x type 0x%2.2x plen %d\n",
4085 frm->in ? "event" : "command", device, proto, type, plen);
4087 raw_dump(level, frm);
4091 if (parser.flags & DUMP_NOVENDOR)
4094 if (get_manufacturer() == 12) {
4095 bpa_dump(level, frm);
4099 p_indent(level, frm);
4100 printf("Vendor data: len %d\n", frm->len);
4101 raw_dump(level, frm);
4104 void hci_dump(int level, struct frame *frm)
4106 uint8_t type = *(uint8_t *)frm->ptr;
4108 frm->ptr++; frm->len--;
4111 case HCI_COMMAND_PKT:
4112 command_dump(level, frm);
4116 event_dump(level, frm);
4119 case HCI_ACLDATA_PKT:
4120 acl_dump(level, frm);
4123 case HCI_SCODATA_PKT:
4124 sco_dump(level, frm);
4127 case HCI_VENDOR_PKT:
4128 vendor_dump(level, frm);
4132 if (p_filter(FILT_HCI))
4135 p_indent(level, frm);
4136 printf("Unknown: type 0x%2.2x len %d\n", type, frm->len);
4137 raw_dump(level, frm);