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

📄 capi.c

📁 Bluezan implementation of the Bluetooth&#8482 wireless standards specifications for Linux. The code
💻 C
📖 第 1 页 / 共 2 页
字号:
			hex_dump(level, frm, len);		}		frm->ptr += len;		frm->len -= len;		len = CAPI_U8(frm);		if (len > 0) {			p_indent(level, frm);			printf("Calling party subaddress:\n");			hex_dump(level, frm, len);		}		frm->ptr += len;		frm->len -= len;	}}static void cmd_info(int level, uint8_t subcmd, struct frame *frm){	uint8_t len;	uint16_t info;	cmd_common(level, subcmd, frm);	switch (subcmd) {	case 0x80:		len = CAPI_U8(frm);		if (len > 0) {			p_indent(level, frm);			printf("Called party number:\n");			hex_dump(level, frm, len);		}		frm->ptr += len;		frm->len -= len;		len = CAPI_U8(frm);		if (len > 0) {			p_indent(level, frm);			printf("Additional info:\n");			hex_dump(level, frm, len);		}		break;	case 0x82:		info = CAPI_U16(frm);		p_indent(level, frm);		printf("Info number: %d\n", info);		len = CAPI_U8(frm);		if (len > 0) {			p_indent(level, frm);			printf("Info element:\n");			hex_dump(level, frm, len);		}		break;	}}static void cmd_interoperability(int level, uint8_t subcmd, struct frame *frm){	uint16_t sel, func, info;	uint16_t nconn, datablkcnt, datablklen;	uint32_t ctr, value, major, minor;	info = (subcmd == 0x81) ? CAPI_U16(frm) : 0;	sel = CAPI_U16(frm);	CAPI_U8(frm);	if (subcmd != 0x83) {		func = CAPI_U16(frm);		CAPI_U8(frm);	} else		func = 0;	p_indent(level, frm);	printf("Selector: 0x%04x (%s)\n", sel, interopsel2str(sel));	switch (sel) {	case 0x0001:		p_indent(level, frm);		printf("Function: %d (%s)\n", func, func2str(func));		switch (subcmd) {		case 0x80:			switch (func) {			case 0:				nconn = CAPI_U16(frm);				p_indent(level + 1, frm);				printf("maxLogicalConnections: %d\n", nconn);				datablkcnt = CAPI_U16(frm);				p_indent(level + 1, frm);				printf("maxBDataBlocks: %d\n", datablkcnt);				datablklen = CAPI_U16(frm);				p_indent(level + 1, frm);				printf("maxBDataLen: %d\n", datablklen);				break;			case 2:			case 3:			case 4:			case 5:				ctr = CAPI_U32(frm);				p_indent(level + 1, frm);				printf("Controller: %d\n", ctr);				break;			default:				raw_dump(level + 1, frm);				break;			}			break;		case 0x81:			switch (func) {			case 0:			case 1:				info = CAPI_U16(frm);				p_indent(level + 1, frm);				printf("Info: 0x%04x (%s)\n", info, info2str(info));				break;			case 2:				info = CAPI_U16(frm);				p_indent(level + 1, frm);				printf("Info: 0x%04x (%s)\n", info, info2str(info));				CAPI_U8(frm);				profile(level + 1, frm);				break;			case 3:				info = CAPI_U16(frm);				p_indent(level + 1, frm);				printf("Info: 0x%04x (%s)\n", info, info2str(info));				ctr = CAPI_U32(frm);				p_indent(level + 1, frm);				printf("Controller: %d\n", ctr);				CAPI_U8(frm);				p_indent(level + 1, frm);				printf("Identification: \"%s\"\n", (char *) frm->ptr);				break;			case 4:				value = CAPI_U32(frm);				p_indent(level + 1, frm);				printf("Return value: 0x%04x\n", value);				ctr = CAPI_U32(frm);				p_indent(level + 1, frm);				printf("Controller: %d\n", ctr);				p_indent(level + 1, frm);				major = CAPI_U32(frm);				minor = CAPI_U32(frm);				printf("CAPI: %d.%d\n", major, minor);				major = CAPI_U32(frm);				minor = CAPI_U32(frm);				p_indent(level + 1, frm);				printf("Manufacture: %u.%01x%01x-%02u (%d.%d)\n",					(major & 0xf0) >> 4, (major & 0x0f) << 4,					(minor & 0xf0) >> 4, minor & 0x0f,					major, minor);				break;			case 5:				value = CAPI_U32(frm);				p_indent(level + 1, frm);				printf("Return value: 0x%04x\n", value);				ctr = CAPI_U32(frm);				p_indent(level + 1, frm);				printf("Controller: %d\n", ctr);				CAPI_U8(frm);				p_indent(level + 1, frm);				printf("Serial number: %.7s\n", (char *) frm->ptr);				break;			default:				raw_dump(level + 1, frm);				break;			}			break;		default:			raw_dump(level, frm);			break;		}		break;	default:		p_indent(level, frm);		printf("Function: %d\n", func);		if (subcmd == 0x81) {			p_indent(level, frm);			printf("Info: 0x%04x (%s)\n", info, info2str(info));		}		raw_dump(level + 1, frm);		break;	}}static void cmd_facility(int level, uint8_t subcmd, struct frame *frm){	uint16_t sel;	cmd_common(level, subcmd, frm);	sel = CAPI_U16(frm);	CAPI_U8(frm);	p_indent(level, frm);	printf("Selector: 0x%04x (%s)\n", sel, facilitysel2str(sel));	raw_dump(level, frm);}static void cmd_connect_b3(int level, uint8_t subcmd, struct frame *frm){	uint16_t reject;	uint8_t len;	cmd_common(level, subcmd, frm);	if (subcmd == 0x81)		return;	if (subcmd == 0x83) {		reject = CAPI_U16(frm);		p_indent(level, frm);		printf("Reject: 0x%04x (%s)\n", reject, info2str(reject));	}	len = CAPI_U8(frm);	if (len > 0) {		p_indent(level, frm);		printf("NCPI:\n");		hex_dump(level, frm, len);	}}static void cmd_connect_b3_active(int level, uint8_t subcmd, struct frame *frm){	uint8_t len;	cmd_common(level, subcmd, frm);	if (subcmd == 0x82) {		len = CAPI_U8(frm);		if (len > 0) {			p_indent(level, frm);			printf("NCPI:\n");			hex_dump(level, frm, len);		}	}}static void cmd_disconnect_b3(int level, uint8_t subcmd, struct frame *frm){	uint16_t reason;	uint8_t len;	cmd_common(level, subcmd, frm);	if (subcmd == 0x82) {		reason = CAPI_U16(frm);		p_indent(level, frm);		printf("Reason: 0x%04x (%s)\n", reason, info2str(reason));	}	if (subcmd == 0x80 || subcmd == 0x82) {		len = CAPI_U8(frm);		if (len > 0) {			p_indent(level, frm);			printf("NCPI:\n");			hex_dump(level, frm, len);		}	}}static void cmd_data_b3(int level, uint8_t subcmd, struct frame *frm){	uint32_t data;	uint64_t data64;	uint16_t length, handle, flags, info;	cmd_common(level, 0x00, frm);	if (subcmd == 0x81 || subcmd == 0x83) {		handle = CAPI_U16(frm);		p_indent(level, frm);		printf("Data handle: 0x%04x\n", handle);		if (subcmd == 0x81) {			info = CAPI_U16(frm);			p_indent(level, frm);			printf("Info: 0x%04x (%s)\n", info, info2str(info));		}	} else {		data = CAPI_U32(frm);		length = CAPI_U16(frm);		p_indent(level, frm);		printf("Data length: 0x%04x (%d bytes)\n", length, length);		handle = CAPI_U16(frm);		p_indent(level, frm);		printf("Data handle: 0x%04x\n", handle);		flags = CAPI_U16(frm);		p_indent(level, frm);		printf("Flags: 0x%04x\n", flags);		if (data == 0)			data64 = get_u64(frm);		raw_dump(level, frm);	}}static void cmd_reset_b3(int level, uint8_t subcmd, struct frame *frm){	uint8_t len;	cmd_common(level, subcmd, frm);	if (subcmd == 0x80 || subcmd == 0x82) {		len = CAPI_U8(frm);		if (len > 0) {			p_indent(level, frm);			printf("NCPI:\n");			hex_dump(level, frm, len);		}	}}static void cmd_manufacturer(int level, uint8_t subcmd, struct frame *frm){	uint32_t ctr, class, func;	uint16_t len;	unsigned char *id;	ctr = CAPI_U32(frm);	p_indent(level, frm);	printf("Controller: %d\n", ctr);	id = (unsigned char *) frm->ptr;	p_indent(level, frm);	if (isprint(id[0]) && isprint(id[1]) && isprint(id[2]) && isprint(id[3]))		printf("Manufacturer: %.4s", id);	else		printf("Manufacturer: 0x%02x 0x%02x 0x%02x 0x%02x",						id[0], id[1], id[2], id[3]);	frm->ptr += 4;	frm->len -= 4;	if (!strncmp(id, "AVM!", 4)) {		class = CAPI_U32(frm);		func = CAPI_U32(frm);		len = CAPI_U8(frm);		if (len == 0xff)			len = CAPI_U16(frm);		printf(" [class %d func %d len %d]\n", class, func, len);	} else		printf("\n");	raw_dump(level, frm);}void capi_dump(int level, struct frame *frm){	uint16_t len, appl, msgnum;	uint8_t cmd, subcmd;	len = CAPI_U16(frm) - 8;	appl = CAPI_U16(frm);	cmd = CAPI_U8(frm);	subcmd = CAPI_U8(frm);	msgnum = CAPI_U16(frm);	p_indent(level, frm);	printf("CAPI_%s_%s: appl %d msgnum %d len %d\n",			cmd2str(cmd), subcmd2str(subcmd), appl, msgnum, len);	switch (cmd) {	case 0x01:		cmd_alert(level + 1, subcmd, frm);		break;	case 0x02:		cmd_connect(level + 1, subcmd, frm);		break;	case 0x03:		cmd_connect_active(level + 1, subcmd, frm);		break;	case 0x04:		cmd_disconnect(level + 1, subcmd, frm);		break;	case 0x05:		cmd_listen(level + 1, subcmd, frm);		break;	case 0x08:		cmd_info(level + 1, subcmd, frm);		break;	case 0x20:		cmd_interoperability(level + 1, subcmd, frm);		break;	case 0x80:		cmd_facility(level + 1, subcmd, frm);		break;	case 0x82:		cmd_connect_b3(level + 1, subcmd, frm);		break;	case 0x83:	case 0x88:		cmd_connect_b3_active(level + 1, subcmd, frm);		break;	case 0x84:		cmd_disconnect_b3(level + 1, subcmd, frm);		break;	case 0x86:		cmd_data_b3(level + 1, subcmd, frm);		break;	case 0x87:		cmd_reset_b3(level + 1, subcmd, frm);		break;	case 0xff:		cmd_manufacturer(level + 1, subcmd, frm);		break;	default:		raw_dump(level, frm);		frm->ptr += len;		frm->len -= len;		break;	}}

⌨️ 快捷键说明

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