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

📄 hci.c

📁 Bluezan implementation of the Bluetooth&#8482 wireless standards specifications for Linux. The code
💻 C
📖 第 1 页 / 共 4 页
字号:
}static inline void set_conn_encrypt_dump(int level, struct frame *frm){	set_conn_encrypt_cp *cp = frm->ptr;	p_indent(level, frm);	printf("handle %d encrypt 0x%2.2x\n", btohs(cp->handle), cp->encrypt);}static inline void remote_name_req_dump(int level, struct frame *frm){	remote_name_req_cp *cp = frm->ptr;	uint16_t clkoffset = btohs(cp->clock_offset);	char addr[18];	p_indent(level, frm);	ba2str(&cp->bdaddr, addr);	printf("bdaddr %s mode %d clkoffset 0x%4.4x%s\n",		addr, cp->pscan_rep_mode,		clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");}static inline void master_link_key_dump(int level, struct frame *frm){	master_link_key_cp *cp = frm->ptr;	p_indent(level, frm);	printf("flag %d\n", cp->key_flag);}static inline void read_remote_ext_features_dump(int level, struct frame *frm){	read_remote_ext_features_cp *cp = frm->ptr;        p_indent(level, frm);        printf("handle %d page %d\n", btohs(cp->handle), cp->page_num);}static inline void write_link_policy_dump(int level, struct frame *frm){	write_link_policy_cp *cp = frm->ptr;	uint16_t policy = btohs(cp->policy);	char *str;	p_indent(level, frm);	printf("handle %d policy 0x%2.2x\n", btohs(cp->handle), policy);	str = hci_lptostr(policy);	if (str) {		p_indent(level, frm);		printf("Link policy: %s\n", str);		free(str);	}}static inline void set_event_mask_dump(int level, struct frame *frm){	set_event_mask_cp *cp = frm->ptr;	int i;	p_indent(level, frm);	printf("Mask: 0x");	for (i = 0; i < 8; i++)		printf("%2.2x", cp->mask[i]);	printf("\n");}static inline void set_event_flt_dump(int level, struct frame *frm){	set_event_flt_cp *cp = frm->ptr;	p_indent(level, frm);	printf("type %d condition %d\n", cp->flt_type, cp->cond_type);	switch (cp->flt_type) {	case FLT_CLEAR_ALL:		printf("Clear all filters\n");		break;	case FLT_INQ_RESULT:		printf("Inquiry result");		switch (cp->cond_type) {		case INQ_RESULT_RETURN_ALL:		case INQ_RESULT_RETURN_CLASS:		case INQ_RESULT_RETURN_BDADDR:		default:			printf("\n");			break;		}		break;	case FLT_CONN_SETUP:		printf("Connection setup");		switch (cp->cond_type) {		case CONN_SETUP_ALLOW_ALL:		case CONN_SETUP_ALLOW_CLASS:		case CONN_SETUP_ALLOW_BDADDR:		default:			printf("\n");			break;		}		break;	}}static inline void write_pin_type_dump(int level, struct frame *frm){	write_pin_type_cp *cp = frm->ptr;	p_indent(level, frm);	printf("type %d\n", cp->pin_type);}static inline void request_stored_link_key_dump(int level, struct frame *frm){	read_stored_link_key_cp *cp = frm->ptr;	char addr[18];	p_indent(level, frm);	ba2str(&cp->bdaddr, addr);	printf("bdaddr %s all %d\n", addr, cp->read_all);}static inline void return_link_keys_dump(int level, struct frame *frm){	uint8_t num = get_u8(frm);	uint8_t key[16];	char addr[18];	int i, n;	for (n = 0; n < num; n++) {		ba2str(frm->ptr, addr);		memcpy(key, frm->ptr + 6, 16);		p_indent(level, frm);		printf("bdaddr %s key ", addr);		for (i = 0; i < 16; i++)			printf("%2.2X", key[i]);		printf("\n");		frm->ptr += 2;		frm->len -= 2;	}}static inline void change_local_name_dump(int level, struct frame *frm){	change_local_name_cp *cp = frm->ptr;	char name[249];	int i;	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_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 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->link_sup_to));}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 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;	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 && ocf == 0 && get_manufacturer() == 10) {		csr_dump(level + 1, 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:			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:			pin_code_neg_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:		case OCF_SETUP_SYNC_CONN:			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;		}		break;	case OGF_LINK_POLICY:		switch (ocf) {		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_WRITE_LINK_POLICY:			write_link_policy_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:			write_scan_enable_dump(level + 1, frm);			return;		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_ENCRYPT_MODE:		case OCF_WRITE_INQUIRY_MODE:		case OCF_WRITE_AFH_MODE:			write_inquiry_mode_dump(level + 1, frm);			return;		case OCF_READ_TRANSMIT_POWER_LEVEL:			request_transmit_power_level_dump(level + 1, frm);			return;		case OCF_FLUSH:		case OCF_READ_LINK_SUPERVISION_TIMEOUT:			generic_command_dump(level + 1, frm);			return;		case OCF_WRITE_LINK_SUPERVISION_TIMEOUT:			write_link_supervision_timeout_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;	}	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);	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));	}	raw_dump(level, frm);}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));	}}

⌨️ 快捷键说明

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