📄 hci.c
字号:
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: 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: bdaddr_response_dump(level, frm); return; } break; case OGF_LINK_POLICY: switch (ocf) { case OCF_WRITE_LINK_POLICY: case OCF_SNIFF_SUBRATE: generic_response_dump(level, frm); return; } break; case OGF_HOST_CTL: switch (ocf) { case OCF_READ_PIN_TYPE: read_pin_type_dump(level, frm); return; case OCF_READ_STORED_LINK_KEY: read_stored_link_key_dump(level, frm); return; case OCF_WRITE_STORED_LINK_KEY: write_stored_link_key_dump(level, frm); return; case OCF_DELETE_STORED_LINK_KEY: delete_stored_link_key_dump(level, frm); return; case OCF_READ_LOCAL_NAME: read_local_name_dump(level, frm); return; case OCF_READ_CLASS_OF_DEV: read_class_of_dev_dump(level, frm); return; case OCF_READ_VOICE_SETTING: read_voice_setting_dump(level, frm); return; case OCF_READ_CURRENT_IAC_LAP: read_current_iac_lap_dump(level, frm); return; case OCF_READ_SCAN_ENABLE: case OCF_READ_AUTH_ENABLE: read_scan_enable_dump(level, frm); return; case OCF_READ_CONN_ACCEPT_TIMEOUT: case OCF_READ_PAGE_TIMEOUT: read_page_timeout_dump(level, frm); return; case OCF_READ_PAGE_ACTIVITY: case OCF_READ_INQ_ACTIVITY: read_page_activity_dump(level, frm); return; case OCF_READ_INQUIRY_SCAN_TYPE: read_inquiry_scan_type_dump(level, frm); return; case OCF_READ_ENCRYPT_MODE: case OCF_READ_INQUIRY_MODE: case OCF_READ_AFH_MODE: read_inquiry_mode_dump(level, frm); return; case OCF_READ_LINK_SUPERVISION_TIMEOUT: read_link_supervision_timeout_dump(level, frm); return; case OCF_READ_TRANSMIT_POWER_LEVEL: read_transmit_power_level_dump(level, frm); return; case OCF_READ_EXT_INQUIRY_RESPONSE: read_ext_inquiry_response_dump(level, frm); return; case OCF_FLUSH: case OCF_WRITE_LINK_SUPERVISION_TIMEOUT: generic_response_dump(level, frm); return; case OCF_RESET: case OCF_SET_EVENT_MASK: case OCF_SET_EVENT_FLT: case OCF_WRITE_PIN_TYPE: case OCF_CREATE_NEW_UNIT_KEY: case OCF_CHANGE_LOCAL_NAME: case OCF_WRITE_CLASS_OF_DEV: case OCF_WRITE_VOICE_SETTING: case OCF_WRITE_CURRENT_IAC_LAP: case OCF_WRITE_SCAN_ENABLE: case OCF_WRITE_AUTH_ENABLE: case OCF_WRITE_ENCRYPT_MODE: case OCF_WRITE_CONN_ACCEPT_TIMEOUT: case OCF_WRITE_PAGE_TIMEOUT: case OCF_WRITE_PAGE_ACTIVITY: case OCF_WRITE_INQ_ACTIVITY: case OCF_WRITE_INQUIRY_SCAN_TYPE: case OCF_WRITE_INQUIRY_MODE: case OCF_WRITE_AFH_MODE: case OCF_SET_AFH_CLASSIFICATION: case OCF_WRITE_EXT_INQUIRY_RESPONSE: status_response_dump(level, frm); return; } break; case OGF_INFO_PARAM: switch (ocf) { case OCF_READ_LOCAL_VERSION: read_local_version_dump(level, frm); return; case OCF_READ_LOCAL_COMMANDS: read_local_commands_dump(level, frm); return; case OCF_READ_LOCAL_FEATURES: read_local_features_dump(level, frm); return; case OCF_READ_LOCAL_EXT_FEATURES: read_local_ext_features_dump(level, frm); return; case OCF_READ_BUFFER_SIZE: read_buffer_size_dump(level, frm); return; case OCF_READ_BD_ADDR: bdaddr_response_dump(level, frm); return; } break; case OGF_STATUS_PARAM: switch (ocf) { case OCF_READ_FAILED_CONTACT_COUNTER: case OCF_RESET_FAILED_CONTACT_COUNTER: status_response_dump(level, frm); return; case OCF_READ_LINK_QUALITY: read_link_quality_dump(level, frm); return; case OCF_READ_RSSI: read_rssi_dump(level, frm); return; case OCF_READ_AFH_MAP: read_afh_map_dump(level, frm); return; case OCF_READ_CLOCK: read_clock_dump(level, frm); return; } break; } raw_dump(level, frm);}static inline void cmd_status_dump(int level, struct frame *frm){ evt_cmd_status *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) status 0x%2.2x ncmd %d\n", opcode2str(opcode), ogf, ocf, evt->status, evt->ncmd); if (evt->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(evt->status)); }}static inline void hardware_error_dump(int level, struct frame *frm){ evt_hardware_error *evt = frm->ptr; p_indent(level, frm); printf("code %d\n", evt->code);}static inline void inq_result_dump(int level, struct frame *frm){ uint8_t num = get_u8(frm); char addr[18]; int i; for (i = 0; i < num; i++) { inquiry_info *info = frm->ptr; ba2str(&info->bdaddr, addr); p_indent(level, frm); printf("bdaddr %s mode %d clkoffset 0x%4.4x class 0x%2.2x%2.2x%2.2x\n", addr, info->pscan_rep_mode, btohs(info->clock_offset), info->dev_class[2], info->dev_class[1], info->dev_class[0]); frm->ptr += INQUIRY_INFO_SIZE; frm->len -= INQUIRY_INFO_SIZE; }}static inline void conn_complete_dump(int level, struct frame *frm){ evt_conn_complete *evt = frm->ptr; char addr[18]; ba2str(&evt->bdaddr, addr); p_indent(level, frm); printf("status 0x%2.2x handle %d bdaddr %s type %s encrypt 0x%2.2x\n", evt->status, btohs(evt->handle), addr, evt->link_type == 1 ? "ACL" : "SCO", evt->encr_mode); if (evt->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(evt->status)); }}static inline void conn_request_dump(int level, struct frame *frm){ evt_conn_request *evt = frm->ptr; char addr[18]; ba2str(&evt->bdaddr, addr); p_indent(level, frm); printf("bdaddr %s class 0x%2.2x%2.2x%2.2x type %s\n", addr, evt->dev_class[2], evt->dev_class[1], evt->dev_class[0], evt->link_type == 1 ? "ACL" : "SCO");}static inline void disconn_complete_dump(int level, struct frame *frm){ evt_disconn_complete *evt = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x handle %d reason 0x%2.2x\n", evt->status, btohs(evt->handle), evt->reason); if (evt->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(evt->status)); } else if (evt->reason > 0) { p_indent(level, frm); printf("Reason: %s\n", status2str(evt->reason)); }}static inline void remote_name_req_complete_dump(int level, struct frame *frm){ evt_remote_name_req_complete *evt = frm->ptr; char addr[18], name[249]; int i; ba2str(&evt->bdaddr, addr); memset(name, 0, sizeof(name)); for (i = 0; i < 248 && evt->name[i]; i++) if (isprint(evt->name[i])) name[i] = evt->name[i]; else name[i] = '.'; p_indent(level, frm); printf("status 0x%2.2x bdaddr %s name '%s'\n", evt->status, addr, name); if (evt->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(evt->status)); }}static inline void master_link_key_complete_dump(int level, struct frame *frm){ evt_master_link_key_complete *evt = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x handle %d flag %d\n", evt->status, btohs(evt->handle), evt->key_flag); if (evt->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(evt->status)); }}static inline void encrypt_change_dump(int level, struct frame *frm){ evt_encrypt_change *evt = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x handle %d encrypt 0x%2.2x\n", evt->status, btohs(evt->handle), evt->encrypt); if (evt->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(evt->status)); }}static inline void read_remote_features_complete_dump(int level, struct frame *frm){ evt_read_remote_features_complete *evt = frm->ptr; int i; p_indent(level, frm); printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle)); if (evt->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(evt->status)); } else { p_indent(level, frm); printf("Features:"); for (i = 0; i < 8; i++) printf(" 0x%2.2x", evt->features[i]); printf("\n"); }}static inline void read_remote_version_complete_dump(int level, struct frame *frm){ evt_read_remote_version_complete *evt = frm->ptr; uint16_t manufacturer = btohs(evt->manufacturer); p_indent(level, frm); printf("status 0x%2.2x handle %d\n", evt->status, btohs(evt->handle)); if (evt->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(evt->status)); } else { p_indent(level, frm); printf("LMP Version: %s (0x%x) LMP Subversion: 0x%x\n", lmp_vertostr(evt->lmp_ver), evt->lmp_ver, btohs(evt->lmp_subver)); p_indent(level, frm); printf("Manufacturer: %s (%d)\n", bt_compidtostr(manufacturer), manufacturer); }}static inline void qos_setup_complete_dump(int level, struct frame *frm){ evt_qos_setup_complete *evt = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x handle %d flags %d\n", evt->status, btohs(evt->handle), evt->flags); if (evt->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(evt->status)); } else { p_indent(level, frm); printf("Service type: %d\n", evt->qos.service_type); p_indent(level, frm); printf("Token rate: %d\n", btohl(evt->qos.token_rate)); p_indent(level, frm); printf("Peak bandwith: %d\n", btohl(evt->qos.peak_bandwidth)); p_indent(level, frm); printf("Latency: %d\n", btohl(evt->qos.latency)); p_indent(level, frm); printf("Delay variation: %d\n", btohl(evt->qos.delay_variation)); }}static inline void role_change_dump(int level, struct frame *frm){ evt_role_change *evt = frm->ptr; char addr[18]; p_indent(level, frm); ba2str(&evt->bdaddr, addr); printf("status 0x%2.2x bdaddr %s role 0x%2.2x\n", evt->status, addr, evt->role); if (evt->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(evt->status)); } else { p_indent(level, frm); printf("Role: %s\n", role2str(evt->role)); }}static inline void num_comp_pkts_dump(int level, struct frame *frm){ uint8_t num = get_u8(frm); uint16_t handle, packets; int i; for (i = 0; i < num; i++) { handle = btohs(htons(get_u16(frm))); packets = btohs(htons(get_u16(frm))); p_indent(level, frm); printf("handle %d packets %d\n", handle, packets); }}static inline void mode_change_dump(int level, struct frame *frm){ evt_mode_change *evt = frm->ptr; p_indent(level, frm); printf("status 0x%2.2x handle %d mode 0x%2.2x interval %d\n", evt->status, btohs(evt->handle), evt->mode, btohs(evt->interval)); if (evt->status > 0) { p_indent(level, frm); printf("Error: %s\n", status2str(evt->status)); } else { p_indent(level, frm); printf("Mode: %s\n", mode2str(evt->mode)); }}static inline void pin_code_req_dump(int level, struct frame *frm){ evt_pin_code_req *evt = frm->ptr; char addr[18];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -