📄 hci.c
字号:
raw_dump(level, frm);}static inline void status_mode_dump(int level, struct frame *frm){ uint8_t status = get_u8(frm); uint8_t mode = get_u8(frm); p_indent(level, frm); printf("status 0x%2.2x mode 0x%2.2x\n", status, mode); if (status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(status)); }}static inline void read_pin_type_dump(int level, struct frame *frm){ read_pin_type_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x type %d\n", rp->status, rp->pin_type); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_stored_link_key_dump(int level, struct frame *frm){ read_stored_link_key_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x max %d num %d\n", rp->status, rp->max_keys, rp->num_keys); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void write_stored_link_key_dump(int level, struct frame *frm){ write_stored_link_key_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x written %d\n", rp->status, rp->num_keys); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void delete_stored_link_key_dump(int level, struct frame *frm){ delete_stored_link_key_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x deleted %d\n", rp->status, btohs(rp->num_keys)); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_local_name_dump(int level, struct frame *frm){ read_local_name_rp *rp = frm->ptr; char name[249]; int i; memset(name, 0, sizeof(name)); for (i = 0; i < 248 && rp->name[i]; i++) if (isprint(rp->name[i])) name[i] = rp->name[i]; else name[i] = '.'; p_indent(level, frm); printf("status 0x%2.2x name \'%s\'\n", rp->status, name); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_class_of_dev_dump(int level, struct frame *frm){ read_class_of_dev_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x class 0x%2.2x%2.2x%2.2x\n", rp->status, rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_voice_setting_dump(int level, struct frame *frm){ read_voice_setting_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x voice setting 0x%4.4x\n", rp->status, btohs(rp->voice_setting)); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_current_iac_lap_dump(int level, struct frame *frm){ read_current_iac_lap_rp *rp = frm->ptr; int i; for (i = 0; i < rp->num_current_iac; i++) { p_indent(level, frm); printf("IAC 0x%2.2x%2.2x%2.2x", rp->lap[i][2], rp->lap[i][1], rp->lap[i][0]); if (rp->lap[i][2] == 0x9e && rp->lap[i][1] == 0x8b) { switch (rp->lap[i][0]) { case 0x00: printf(" (Limited Inquiry Access Code)"); break; case 0x33: printf(" (General Inquiry Access Code)"); break; } } printf("\n"); }}static inline void read_scan_enable_dump(int level, struct frame *frm){ uint8_t status = get_u8(frm); uint8_t enable = get_u8(frm); p_indent(level, frm); printf("status 0x%2.2x enable %d\n", status, enable); if (status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(status)); }}static inline void read_page_timeout_dump(int level, struct frame *frm){ read_page_timeout_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x timeout %d\n", rp->status, btohs(rp->timeout)); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_page_activity_dump(int level, struct frame *frm){ read_page_activity_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x interval %d window %d\n", rp->status, btohs(rp->interval), btohs(rp->window)); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_inquiry_scan_type_dump(int level, struct frame *frm){ read_inquiry_scan_type_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x type %d\n", rp->status, rp->type); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_inquiry_mode_dump(int level, struct frame *frm){ read_inquiry_mode_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x mode %d\n", rp->status, rp->mode); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_link_supervision_timeout_dump(int level, struct frame *frm){ read_link_supervision_timeout_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x handle %d timeout %d\n", rp->status, btohs(rp->handle), btohs(rp->timeout)); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_transmit_power_level_dump(int level, struct frame *frm){ read_transmit_power_level_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x handle %d level %d\n", rp->status, btohs(rp->handle), rp->level); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_ext_inquiry_response_dump(int level, struct frame *frm){ read_ext_inquiry_response_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x fec 0x%2.2x\n", rp->status, rp->fec); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); } else { frm->ptr += 2; frm->len -= 2; ext_inquiry_response_dump(level, frm); }}static inline void read_inquiry_transmit_power_level_dump(int level, struct frame *frm){ read_inquiry_transmit_power_level_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x level %d\n", rp->status, rp->level); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_default_error_data_reporting_dump(int level, struct frame *frm){ read_default_error_data_reporting_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x reporting %d\n", rp->status, rp->reporting); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_local_oob_data_dump(int level, struct frame *frm){ read_local_oob_data_rp *rp = frm->ptr; int i; p_indent(level, frm); printf("status 0x%2.2x\n", rp->status); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); } else { p_indent(level, frm); printf("hash 0x"); for (i = 0; i < 16; i++) printf("%02x", rp->hash[i]); printf("\n"); p_indent(level, frm); printf("randomizer 0x"); for (i = 0; i < 16; i++) printf("%02x", rp->randomizer[i]); printf("\n"); }}static inline void read_local_version_dump(int level, struct frame *frm){ read_local_version_rp *rp = frm->ptr; uint16_t manufacturer = btohs(rp->manufacturer); p_indent(level, frm); printf("status 0x%2.2x\n", rp->status); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); } else { p_indent(level, frm); printf("HCI Version: %s (0x%x) HCI Revision: 0x%x\n", hci_vertostr(rp->hci_ver), rp->hci_ver, btohs(rp->hci_rev)); p_indent(level, frm); printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n", lmp_vertostr(rp->lmp_ver), rp->lmp_ver, btohs(rp->lmp_subver)); p_indent(level, frm); printf("Manufacturer: %s (%d)\n", bt_compidtostr(manufacturer), manufacturer); }}static inline void read_local_commands_dump(int level, struct frame *frm){ read_local_commands_rp *rp = frm->ptr; int i, max = 0; p_indent(level, frm); printf("status 0x%2.2x\n", rp->status); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); } else { for (i = 0; i < 64; i++) if (rp->commands[i]) max = i + 1; p_indent(level, frm); printf("Commands: "); for (i = 0; i < (max > 32 ? 32 : max); i++) printf("%2.2x", rp->commands[i]); printf("\n"); if (max > 32) { p_indent(level, frm); printf(" "); for (i = 32; i < max; i++) printf("%2.2x", rp->commands[i]); printf("\n"); } }}static inline void read_local_features_dump(int level, struct frame *frm){ read_local_features_rp *rp = frm->ptr; int i; p_indent(level, frm); printf("status 0x%2.2x\n", rp->status); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); } else { p_indent(level, frm); printf("Features:"); for (i = 0; i < 8; i++) printf(" 0x%2.2x", rp->features[i]); printf("\n"); }}static inline void read_local_ext_features_dump(int level, struct frame *frm){ read_local_ext_features_rp *rp = frm->ptr; int i; p_indent(level, frm); printf("status 0x%2.2x page %d max %d\n", rp->status, rp->page_num, rp->max_page_num); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); } else { p_indent(level, frm); printf("Features:"); for (i = 0; i < 8; i++) printf(" 0x%2.2x", rp->features[i]); printf("\n"); }}static inline void read_buffer_size_dump(int level, struct frame *frm){ read_buffer_size_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x\n", rp->status); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); } else { p_indent(level, frm); printf("ACL MTU %d:%d SCO MTU %d:%d\n", btohs(rp->acl_mtu), btohs(rp->acl_max_pkt), rp->sco_mtu, btohs(rp->sco_max_pkt)); }}static inline void read_link_quality_dump(int level, struct frame *frm){ read_link_quality_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x handle %d lq %d\n", rp->status, btohs(rp->handle), rp->link_quality); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_rssi_dump(int level, struct frame *frm){ read_rssi_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x handle %d rssi %d\n", rp->status, btohs(rp->handle), rp->rssi); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void read_afh_map_dump(int level, struct frame *frm){ read_afh_map_rp *rp = frm->ptr; int i; p_indent(level, frm); printf("status 0x%2.2x handle %d mode %d\n", rp->status, btohs(rp->handle), rp->mode); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); } else { p_indent(level, frm); printf("AFH map: 0x"); for (i = 0; i < 10; i++) printf("%2.2x", rp->map[i]); printf("\n"); }}static inline void read_clock_dump(int level, struct frame *frm){ read_clock_rp *rp = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x handle %d clock 0x%4.4x accuracy %d\n", rp->status, btohs(rp->handle), btohl(rp->clock), btohs(rp->accuracy)); if (rp->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(rp->status)); }}static inline void cmd_complete_dump(int level, struct frame *frm){ evt_cmd_complete *evt = frm->ptr; uint16_t opcode = btohs(evt->opcode); uint16_t ogf = cmd_opcode_ogf(opcode); uint16_t ocf = cmd_opcode_ocf(opcode); if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR)) return; p_indent(level, frm); printf("%s (0x%2.2x|0x%4.4x) ncmd %d\n", opcode2str(opcode), ogf, ocf, evt->ncmd); frm->ptr += EVT_CMD_COMPLETE_SIZE; frm->len -= EVT_CMD_COMPLETE_SIZE; if (!(parser.flags & DUMP_VERBOSE)) { raw_dump(level, frm); return; } switch (ogf) { case OGF_LINK_CTL: switch (ocf) { case OCF_INQUIRY_CANCEL: case OCF_PERIODIC_INQUIRY: case OCF_EXIT_PERIODIC_INQUIRY: case OCF_READ_REMOTE_EXT_FEATURES: status_response_dump(level, frm); return; case OCF_CREATE_CONN_CANCEL: case OCF_REMOTE_NAME_REQ_CANCEL: case OCF_PIN_CODE_REPLY: case OCF_LINK_KEY_REPLY: case OCF_PIN_CODE_NEG_REPLY: case OCF_LINK_KEY_NEG_REPLY: case OCF_USER_CONFIRM_REPLY: case OCF_USER_CONFIRM_NEG_REPLY: case OCF_USER_PASSKEY_REPLY: case OCF_USER_PASSKEY_NEG_REPLY: case OCF_REMOTE_OOB_DATA_REPLY: case OCF_REMOTE_OOB_DATA_NEG_REPLY: case OCF_IO_CAPABILITY_REPLY: case OCF_IO_CAPABILITY_NEG_REPLY: bdaddr_response_dump(level, frm); return; } break; case OGF_LINK_POLICY: switch (ocf) { case OCF_WRITE_LINK_POLICY: case OCF_SNIFF_SUBRATING: generic_response_dump(level, frm); return; } break; case OGF_HOST_CTL:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -