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

📄 hci.c

📁 bluetooth 开发程序bluez-hcidump-1.28
💻 C
📖 第 1 页 / 共 5 页
字号:
	periodic_inquiry_cp *cp = frm->ptr;	p_indent(level, frm);	printf("max %d min %d lap 0x%2.2x%2.2x%2.2x len %d num %d\n",		btohs(cp->max_period), btohs(cp->min_period),		cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);}static inline void create_conn_dump(int level, struct frame *frm){	create_conn_cp *cp = frm->ptr;	uint16_t ptype = btohs(cp->pkt_type);	uint16_t clkoffset = btohs(cp->clock_offset);	char addr[18], *str;	p_indent(level, frm);	ba2str(&cp->bdaddr, addr);	printf("bdaddr %s ptype 0x%4.4x rswitch 0x%2.2x clkoffset 0x%4.4x%s\n",		addr, ptype, cp->role_switch,		clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");	str = hci_ptypetostr(ptype);	if (str) {		p_indent(level, frm);		printf("Packet type: %s\n", str);		free(str);	}}static inline void disconnect_dump(int level, struct frame *frm){	disconnect_cp *cp = frm->ptr;	p_indent(level, frm);	printf("handle %d reason 0x%2.2x\n", btohs(cp->handle), cp->reason);	p_indent(level, frm);	printf("Reason: %s\n", status2str(cp->reason));}static inline void add_sco_dump(int level, struct frame *frm){	add_sco_cp *cp = frm->ptr;	uint16_t ptype = btohs(cp->pkt_type);	char *str;	p_indent(level, frm);	printf("handle %d ptype 0x%4.4x\n", btohs(cp->handle), ptype);	str = hci_ptypetostr(ptype);	if (str) {		p_indent(level, frm);		printf("Packet type: %s\n", str);		free(str);	}}static inline void accept_conn_req_dump(int level, struct frame *frm){	accept_conn_req_cp *cp = frm->ptr;	char addr[18];	p_indent(level, frm);	ba2str(&cp->bdaddr, addr);	printf("bdaddr %s role 0x%2.2x\n", addr, cp->role);	p_indent(level, frm);	printf("Role: %s\n", role2str(cp->role));}static inline void reject_conn_req_dump(int level, struct frame *frm){	reject_conn_req_cp *cp = frm->ptr;	char addr[18];	p_indent(level, frm);	ba2str(&cp->bdaddr, addr);	printf("bdaddr %s reason 0x%2.2x\n", addr, cp->reason);	p_indent(level, frm);	printf("Reason: %s\n", status2str(cp->reason));}static inline void pin_code_reply_dump(int level, struct frame *frm){	pin_code_reply_cp *cp = frm->ptr;	char addr[18], pin[17];	p_indent(level, frm);	ba2str(&cp->bdaddr, addr);	memset(pin, 0, sizeof(pin));	if (parser.flags & DUMP_NOVENDOR)		memset(pin, '*', cp->pin_len);	else		memcpy(pin, cp->pin_code, cp->pin_len);	printf("bdaddr %s len %d pin \'%s\'\n", addr, cp->pin_len, pin);}static inline void link_key_reply_dump(int level, struct frame *frm){	link_key_reply_cp *cp = frm->ptr;	char addr[18];	int i;	p_indent(level, frm);	ba2str(&cp->bdaddr, addr);	printf("bdaddr %s key ", addr);	for (i = 0; i < 16; i++)		if (parser.flags & DUMP_NOVENDOR)			printf("**");		else			printf("%2.2X", cp->link_key[i]);	printf("\n");}static inline void pin_code_neg_reply_dump(int level, struct frame *frm){	bdaddr_t *bdaddr = frm->ptr;	char addr[18];	p_indent(level, frm);	ba2str(bdaddr, addr);	printf("bdaddr %s\n", addr);}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 hold_mode_dump(int level, struct frame *frm){	hold_mode_cp *cp = frm->ptr;	p_indent(level, frm);	printf("handle %d max %d min %d\n", btohs(cp->handle),			btohs(cp->max_interval), btohs(cp->min_interval));}static inline void sniff_mode_dump(int level, struct frame *frm){	sniff_mode_cp *cp = frm->ptr;	p_indent(level, frm);	printf("handle %d max %d min %d attempt %d timeout %d\n",		btohs(cp->handle), btohs(cp->max_interval),		btohs(cp->min_interval), btohs(cp->attempt), btohs(cp->timeout));}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 sniff_subrate_dump(int level, struct frame *frm){	sniff_subrate_cp *cp = frm->ptr;	p_indent(level, frm);	printf("handle %d\n", btohs(cp->handle));	p_indent(level, frm);	printf("max latency remote %d local %d\n",		btohs(cp->max_remote_latency), btohs(cp->max_local_latency));	p_indent(level, frm);	printf("min timeout remote %d local %d\n",		btohs(cp->min_remote_timeout), btohs(cp->min_local_timeout));}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;	uint8_t dev_class[3], dev_mask[3];	char addr[18];	p_indent(level, frm);	printf("type %d condition %d\n", cp->flt_type,				(cp->flt_type == 0) ? 0 : cp->cond_type);	switch (cp->flt_type) {	case FLT_CLEAR_ALL:		p_indent(level, frm);		printf("Clear all filters\n");		break;	case FLT_INQ_RESULT:		p_indent(level, frm);		printf("Inquiry result");		switch (cp->cond_type) {		case INQ_RESULT_RETURN_ALL:			printf(" for all devices\n");			break;		case INQ_RESULT_RETURN_CLASS:			memcpy(dev_class, cp->condition, 3);			memcpy(dev_mask, cp->condition + 3, 3);			printf(" with class 0x%2.2x%2.2x%2.2x mask 0x%2.2x%2.2x%2.2x\n",				dev_class[2], dev_class[1], dev_class[0],				dev_mask[2], dev_mask[1], dev_mask[0]);			break;		case INQ_RESULT_RETURN_BDADDR:			ba2str((bdaddr_t *) cp->condition, addr);			printf(" with bdaddr %s\n", addr);			break;		default:			printf("\n");			break;		}		break;	case FLT_CONN_SETUP:		p_indent(level, frm);		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++)			if (parser.flags & DUMP_NOVENDOR)				printf("**");			else				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_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 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 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 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;	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:			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:

⌨️ 快捷键说明

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