⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hci.c

📁 Linux下蓝牙探测工具
💻 C
📖 第 1 页 / 共 5 页
字号:
	memset(name, 0, sizeof(name));	for (i = 0; i < 248 && cp->name[i]; i++)		if (isprint(cp->name[i]))			name[i] = cp->name[i];		else			name[i] = '.';	p_indent(level, frm);	printf("name \'%s\'\n", name);}static inline void write_class_of_dev_dump(int level, struct frame *frm){	write_class_of_dev_cp *cp = frm->ptr;	p_indent(level, frm);	printf("class 0x%2.2x%2.2x%2.2x\n",			cp->dev_class[2], cp->dev_class[1], cp->dev_class[0]);}static inline void write_voice_setting_dump(int level, struct frame *frm){	write_voice_setting_cp *cp = frm->ptr;	p_indent(level, frm);	printf("voice setting 0x%4.4x\n", btohs(cp->voice_setting));}static inline void write_current_iac_lap_dump(int level, struct frame *frm){	write_current_iac_lap_cp *cp = frm->ptr;	int i;	for (i = 0; i < cp->num_current_iac; i++) {		p_indent(level, frm);		printf("IAC 0x%2.2x%2.2x%2.2x", cp->lap[i][2], cp->lap[i][1], cp->lap[i][0]);		if (cp->lap[i][2] == 0x9e && cp->lap[i][1] == 0x8b) {			switch (cp->lap[i][0]) {			case 0x00:				printf(" (Limited Inquiry Access Code)");				break;			case 0x33:				printf(" (General Inquiry Access Code)");				break;			}		}		printf("\n");	}}static inline void write_scan_enable_dump(int level, struct frame *frm){	uint8_t enable = get_u8(frm);	p_indent(level, frm);	printf("enable %d\n", enable);}static inline void write_page_timeout_dump(int level, struct frame *frm){	write_page_timeout_cp *cp = frm->ptr;	p_indent(level, frm);	printf("timeout %d\n", btohs(cp->timeout));}static inline void write_page_activity_dump(int level, struct frame *frm){	write_page_activity_cp *cp = frm->ptr;	p_indent(level, frm);	printf("interval %d window %d\n", btohs(cp->interval), btohs(cp->window));}static inline void write_inquiry_scan_type_dump(int level, struct frame *frm){	write_inquiry_scan_type_cp *cp = frm->ptr;	p_indent(level, frm);	printf("type %d\n", cp->type);}static inline void write_inquiry_mode_dump(int level, struct frame *frm){	write_inquiry_mode_cp *cp = frm->ptr;	p_indent(level, frm);	printf("mode %d\n", cp->mode);}static inline void set_afh_classification_dump(int level, struct frame *frm){	set_afh_classification_cp *cp = frm->ptr;	int i;	p_indent(level, frm);	printf("map 0x");	for (i = 0; i < 10; i++)		printf("%02x", cp->map[i]);	printf("\n");}static inline void write_link_supervision_timeout_dump(int level, struct frame *frm){	write_link_supervision_timeout_cp *cp = frm->ptr;	p_indent(level, frm);	printf("handle %d timeout %d\n",				btohs(cp->handle), btohs(cp->timeout));}static inline void write_ext_inquiry_response_dump(int level, struct frame *frm){	write_ext_inquiry_response_cp *cp = frm->ptr;	p_indent(level, frm);	printf("fec 0x%2.2x\n", cp->fec);	frm->ptr++;	frm->len--;	ext_inquiry_response_dump(level, frm);}static inline void write_inquiry_transmit_power_level_dump(int level, struct frame *frm){	write_inquiry_transmit_power_level_cp *cp = frm->ptr;	p_indent(level, frm);	printf("level %d\n", cp->level);}static inline void write_default_error_data_reporting_dump(int level, struct frame *frm){	write_default_error_data_reporting_cp *cp = frm->ptr;	p_indent(level, frm);	printf("reporting %d\n", cp->reporting);}static inline void enhanced_flush_dump(int level, struct frame *frm){	enhanced_flush_cp *cp = frm->ptr;	p_indent(level, frm);	printf("handle %d type %d\n", btohs(cp->handle), cp->type);}static inline void send_keypress_notify_dump(int level, struct frame *frm){	send_keypress_notify_cp *cp = frm->ptr;	char addr[18];	p_indent(level, frm);	p_ba2str(&cp->bdaddr, addr);	printf("bdaddr %s type %d\n", addr, cp->type);}static inline void request_transmit_power_level_dump(int level, struct frame *frm){	read_transmit_power_level_cp *cp = frm->ptr;	p_indent(level, frm);	printf("handle %d type %d (%s)\n",					btohs(cp->handle), cp->type,					cp->type ? "maximum" : "current");}static inline void request_local_ext_features_dump(int level, struct frame *frm){	read_local_ext_features_cp *cp = frm->ptr;	p_indent(level, frm);	printf("page %d\n", cp->page_num);}static inline void request_clock_dump(int level, struct frame *frm){	read_clock_cp *cp = frm->ptr;	p_indent(level, frm);	printf("handle %d which %d (%s)\n",					btohs(cp->handle), cp->which_clock,					cp->which_clock ? "piconet" : "local");}static inline void host_buffer_size_dump(int level, struct frame *frm){	host_buffer_size_cp *cp = frm->ptr;	p_indent(level, frm);	printf("ACL MTU %d:%d SCO MTU %d:%d\n",				btohs(cp->acl_mtu), btohs(cp->acl_max_pkt),				cp->sco_mtu, btohs(cp->sco_max_pkt));}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 command_dump(int level, struct frame *frm){	hci_command_hdr *hdr = frm->ptr;	uint16_t opcode = btohs(hdr->opcode);	uint16_t ogf = cmd_opcode_ogf(opcode);	uint16_t ocf = cmd_opcode_ocf(opcode);	if (p_filter(FILT_HCI))		return;	if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR))		return;	p_indent(level, frm);	printf("HCI Command: %s (0x%2.2x|0x%4.4x) plen %d\n", 				opcode2str(opcode), ogf, ocf, hdr->plen);	frm->ptr += HCI_COMMAND_HDR_SIZE;	frm->len -= HCI_COMMAND_HDR_SIZE;	if (ogf == OGF_VENDOR_CMD) {		if (ocf == 0 && get_manufacturer() == 10) {			csr_dump(level + 1, frm);			return;		}	}	if (!(parser.flags & DUMP_VERBOSE)) {		raw_dump(level, frm);		return;	}	switch (ogf) {	case OGF_LINK_CTL:		switch (ocf) {		case OCF_INQUIRY:			inquiry_dump(level + 1, frm);			return;		case OCF_PERIODIC_INQUIRY:			periodic_inquiry_dump(level + 1, frm);			return;		case OCF_INQUIRY_CANCEL:		case OCF_EXIT_PERIODIC_INQUIRY:			return;		case OCF_CREATE_CONN:			create_conn_dump(level + 1, frm);			return;		case OCF_DISCONNECT:			disconnect_dump(level + 1, frm);			return;		case OCF_CREATE_CONN_CANCEL:		case OCF_REMOTE_NAME_REQ_CANCEL:		case OCF_ACCEPT_SYNC_CONN_REQ:			bdaddr_command_dump(level + 1, frm);			return;		case OCF_ADD_SCO:		case OCF_SET_CONN_PTYPE:			add_sco_dump(level + 1, frm);			return;		case OCF_ACCEPT_CONN_REQ:			accept_conn_req_dump(level + 1, frm);			return;		case OCF_REJECT_CONN_REQ:		case OCF_REJECT_SYNC_CONN_REQ:		case OCF_IO_CAPABILITY_NEG_REPLY:			reject_conn_req_dump(level + 1, frm);			return;		case OCF_PIN_CODE_REPLY:			pin_code_reply_dump(level + 1, frm);			return;		case OCF_LINK_KEY_REPLY:			link_key_reply_dump(level + 1, frm);			return;		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_NEG_REPLY:		case OCF_REMOTE_OOB_DATA_NEG_REPLY:			pin_code_neg_reply_dump(level + 1, frm);			return;		case OCF_USER_PASSKEY_REPLY:			user_passkey_reply_dump(level + 1, frm);			return;		case OCF_REMOTE_OOB_DATA_REPLY:			remote_oob_data_reply_dump(level + 1, frm);			return;		case OCF_IO_CAPABILITY_REPLY:			io_capability_reply_dump(level + 1, frm);			return;		case OCF_SET_CONN_ENCRYPT:			set_conn_encrypt_dump(level + 1, frm);			return;		case OCF_AUTH_REQUESTED:		case OCF_CHANGE_CONN_LINK_KEY:		case OCF_READ_REMOTE_FEATURES:		case OCF_READ_REMOTE_VERSION:		case OCF_READ_CLOCK_OFFSET:		case OCF_READ_LMP_HANDLE:			generic_command_dump(level + 1, frm);			return;		case OCF_MASTER_LINK_KEY:			master_link_key_dump(level + 1, frm);			return;		case OCF_READ_REMOTE_EXT_FEATURES:			read_remote_ext_features_dump(level + 1, frm);			return;		case OCF_REMOTE_NAME_REQ:			remote_name_req_dump(level + 1, frm);			return;		case OCF_SETUP_SYNC_CONN:			setup_sync_conn_dump(level + 1, frm);			return;		}		break;	case OGF_LINK_POLICY:		switch (ocf) {		case OCF_HOLD_MODE:		case OCF_PARK_MODE:			hold_mode_dump(level + 1, frm);			return;		case OCF_SNIFF_MODE:			sniff_mode_dump(level + 1, frm);			return;		case OCF_EXIT_SNIFF_MODE:		case OCF_EXIT_PARK_MODE:		case OCF_ROLE_DISCOVERY:		case OCF_READ_LINK_POLICY:			generic_command_dump(level + 1, frm);			return;		case OCF_SWITCH_ROLE:			accept_conn_req_dump(level + 1, frm);			return;		case OCF_QOS_SETUP:			qos_setup_dump(level + 1, frm);			return;		case OCF_WRITE_LINK_POLICY:			write_link_policy_dump(level + 1, frm);			return;		case OCF_SNIFF_SUBRATING:			sniff_subrating_dump(level + 1, frm);			return;		}		break;	case OGF_HOST_CTL:		switch (ocf) {		case OCF_RESET:		case OCF_CREATE_NEW_UNIT_KEY:			return;		case OCF_SET_EVENT_MASK:			set_event_mask_dump(level + 1, frm);			return;		case OCF_SET_EVENT_FLT:			set_event_flt_dump(level + 1, frm);			return;		case OCF_WRITE_PIN_TYPE:			write_pin_type_dump(level + 1, frm);			return;		case OCF_READ_STORED_LINK_KEY:		case OCF_DELETE_STORED_LINK_KEY:			request_stored_link_key_dump(level + 1, frm);			return;		case OCF_WRITE_STORED_LINK_KEY:			return_link_keys_dump(level + 1, frm);			return;		case OCF_CHANGE_LOCAL_NAME:			change_local_name_dump(level + 1, frm);			return;		case OCF_WRITE_CLASS_OF_DEV:			write_class_of_dev_dump(level + 1, frm);			return;		case OCF_WRITE_VOICE_SETTING:			write_voice_setting_dump(level + 1, frm);			return;		case OCF_WRITE_CURRENT_IAC_LAP:			write_current_iac_lap_dump(level + 1, frm);			return;		case OCF_WRITE_SCAN_ENABLE:		case OCF_WRITE_AUTH_ENABLE:		case OCF_SET_CONTROLLER_TO_HOST_FC:			write_scan_enable_dump(level + 1, frm);			return;		case OCF_WRITE_CONN_ACCEPT_TIMEOUT:		case OCF_WRITE_PAGE_TIMEOUT:			write_page_timeout_dump(level + 1, frm);			return;		case OCF_WRITE_PAGE_ACTIVITY:		case OCF_WRITE_INQ_ACTIVITY:			write_page_activity_dump(level + 1, frm);			return;		case OCF_WRITE_INQUIRY_SCAN_TYPE:			write_inquiry_scan_type_dump(level + 1, frm);			return;		case OCF_WRITE_ENCRYPT_MODE:		case OCF_WRITE_INQUIRY_MODE:		case OCF_WRITE_AFH_MODE:			write_inquiry_mode_dump(level + 1, frm);			return;		case OCF_SET_AFH_CLASSIFICATION:			set_afh_classification_dump(level + 1, frm);			return;		case OCF_READ_TRANSMIT_POWER_LEVEL:			request_transmit_power_level_dump(level + 1, frm);			return;		case OCF_HOST_BUFFER_SIZE:			host_buffer_size_dump(level + 1, frm);			return;		case OCF_HOST_NUM_COMP_PKTS:			num_comp_pkts_dump(level + 1, frm);			return;		case OCF_FLUSH:		case OCF_READ_LINK_SUPERVISION_TIMEOUT:		case OCF_REFRESH_ENCRYPTION_KEY:			generic_command_dump(level + 1, frm);			return;		case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:			write_link_supervision_timeout_dump(level + 1, frm);			return;		case OCF_WRITE_EXT_INQUIRY_RESPONSE:			write_ext_inquiry_response_dump(level + 1, frm);			return;		case OCF_WRITE_SIMPLE_PAIRING_MODE:			generic_write_mode_dump(level + 1, frm);			return;		case OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL:			write_inquiry_transmit_power_level_dump(level + 1, frm);			return;		case OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING:			write_default_error_data_reporting_dump(level + 1, frm);			return;		case OCF_ENHANCED_FLUSH:			enhanced_flush_dump(level + 1, frm);			return;		case OCF_SEND_KEYPRESS_NOTIFY:			send_keypress_notify_dump(level + 1, frm);			return;		}		break;	case OGF_INFO_PARAM:		switch (ocf) {		case OCF_READ_LOCAL_EXT_FEATURES:			request_local_ext_features_dump(level + 1, frm);			return;		}		break;	case OGF_STATUS_PARAM:		switch (ocf) {		case OCF_READ_LINK_QUALITY:		case OCF_READ_RSSI:		case OCF_READ_AFH_MAP:			generic_command_dump(level + 1, frm);			return;		case OCF_READ_CLOCK:			request_clock_dump(level + 1, frm);			return;		}		break;	case OGF_TESTING_CMD:		switch (ocf) {		case OCF_WRITE_LOOPBACK_MODE:		case OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE:			generic_write_mode_dump(level + 1, frm);			return;		}		break;	}	raw_dump(level, frm);}static inline void status_response_dump(int level, struct frame *frm){	uint8_t status = get_u8(frm);	p_indent(level, frm);	printf("status 0x%2.2x\n", status);	if (status > 0) {		p_indent(level, frm);		printf("Error: %s\n", status2str(status));	}	raw_dump(level, frm);}static inline void handle_response_dump(int level, struct frame *frm){	uint16_t handle = btohs(htons(get_u16(frm)));	p_indent(level, frm);	printf("handle %d\n", handle);	raw_dump(level, frm);}static inline void bdaddr_response_dump(int level, struct frame *frm){	uint8_t status = get_u8(frm);	bdaddr_t *bdaddr = frm->ptr;	char addr[18];	frm->ptr += sizeof(bdaddr_t);	frm->len -= sizeof(bdaddr_t);	p_indent(level, frm);	p_ba2str(bdaddr, addr);	printf("status 0x%2.2x bdaddr %s\n", status, addr);	if (status > 0) {		p_indent(level, frm);		printf("Error: %s\n", status2str(status));	}	raw_dump(level, frm);}static inline void generic_response_dump(int level, struct frame *frm){	uint8_t status = get_u8(frm);	uint16_t handle = btohs(htons(get_u16(frm)));	p_indent(level, frm);	printf("status 0x%2.2x handle %d\n", status, handle);	if (status > 0) {		p_indent(level, frm);		printf("Error: %s\n", status2str(status));	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -