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

📄 csr.c

📁 Bluezan implementation of the Bluetooth&#8482 wireless standards specifications for Linux. The code
💻 C
📖 第 1 页 / 共 2 页
字号:
	{ 2033, "Sniff 44 (2005-04-18)" },	{ 2034, "Sniff 44 (2005-04-18)" },	{    0, }};char *csr_buildidtostr(uint16_t id){	static char str[12];	int i;	for (i = 0; csr_map[i].id; i++)		if (csr_map[i].id == id)			return csr_map[i].str;	snprintf(str, 11, "Build %d", id);	return str;}char *csr_chipvertostr(uint16_t ver, uint16_t rev){	switch (ver) {	case 0x00:		return "BlueCore01a";	case 0x01:		if (rev == 0x64)			return "BlueCore01b (ES)";		else			return "BlueCore01b";	case 0x02:		switch (rev) {		case 0x89:			return "BlueCore02-External (ES2)";		case 0x8a:			return "BlueCore02-External";		case 0x28:			return "BlueCore02-ROM/Audio/Flash";		default:			return "BlueCore02";		}	case 0x03:		switch (rev) {		case 0x43:			return "BlueCore3-MM";		case 0x15:			return "BlueCore3-ROM";		case 0xe2:			return "BlueCore3-Flash";		case 0x26:			return "BlueCore4-External";		case 0x30:			return "BlueCore4-ROM";		default:			return "BlueCore3 or BlueCore4";		}	default:		return "Unknown";	}}char *csr_pskeytostr(uint16_t pskey){	switch (pskey) {	case CSR_PSKEY_ENC_KEY_LMIN:		return "Minimum encryption key length";	case CSR_PSKEY_ENC_KEY_LMAX:		return "Maximum encryption key length";	case CSR_PSKEY_LOCAL_SUPPORTED_FEATURES:		return "Local supported features block";	case CSR_PSKEY_HCI_LMP_LOCAL_VERSION:		return "The HCI and LMP version reported locally";	case CSR_PSKEY_LMP_REMOTE_VERSION:		return "The LMP version reported remotely";	case CSR_PSKEY_HOSTIO_MAP_SCO_PCM:		return "Map SCO over PCM";	case CSR_PSKEY_UART_BAUDRATE:		return "UART Baud rate";	case CSR_PSKEY_HOST_INTERFACE:		return "Host interface";	case CSR_PSKEY_USB_VENDOR_ID:		return "USB vendor identifier";	case CSR_PSKEY_USB_PRODUCT_ID:		return "USB product identifier";	case CSR_PSKEY_USB_DFU_PRODUCT_ID:		return "USB DFU product ID";	case CSR_PSKEY_INITIAL_BOOTMODE:		return "Initial device bootmode";	default:		return "Unknown";	}}int csr_read_varid_complex(int dd, uint16_t seqnum, uint16_t varid, uint8_t *value, uint16_t length){	unsigned char cmd[] = { 0x00, 0x00, ((length / 2) + 5) & 0xff, ((length / 2) + 5) >> 8,				seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };	unsigned char cp[254], rp[254];	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp[0] = 0xc2;	memcpy(cp + 1, cmd, sizeof(cmd));	memcpy(cp + 11, value, length);	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = 0x00;	rq.event  = EVT_VENDOR;	rq.cparam = cp;	rq.clen   = sizeof(cmd) + 1;	rq.rparam = rp;	rq.rlen   = sizeof(rp);	if (hci_send_req(dd, &rq, 2000) < 0)		return -1;	if (rp[0] != 0xc2) {		errno = EIO;		return -1;	}	if ((rp[9] + (rp[10] << 8)) != 0) {		errno = ENXIO;		return -1;	}	memcpy(value, rp + 11, length);	return 0;}int csr_read_varid_uint16(int dd, uint16_t seqnum, uint16_t varid, uint16_t *value){	unsigned char cmd[] = { 0x00, 0x00, 0x09, 0x00,				seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };	unsigned char cp[254], rp[254];	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp[0] = 0xc2;	memcpy(cp + 1, cmd, sizeof(cmd));	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = 0x00;	rq.event  = EVT_VENDOR;	rq.cparam = cp;	rq.clen   = sizeof(cmd) + 1;	rq.rparam = rp;	rq.rlen   = sizeof(rp);	if (hci_send_req(dd, &rq, 2000) < 0)		return -1;	if (rp[0] != 0xc2) {		errno = EIO;		return -1;	}	if ((rp[9] + (rp[10] << 8)) != 0) {		errno = ENXIO;		return -1;	}	*value = rp[11] + (rp[12] << 8);	return 0;}int csr_read_varid_uint32(int dd, uint16_t seqnum, uint16_t varid, uint32_t *value){	unsigned char cmd[] = { 0x00, 0x00, 0x09, 0x00,				seqnum & 0xff, seqnum >> 8, varid & 0xff, varid >> 8, 0x00, 0x00,				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };	unsigned char cp[254], rp[254];	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp[0] = 0xc2;	memcpy(cp + 1, cmd, sizeof(cmd));	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = 0x00;	rq.event  = EVT_VENDOR;	rq.cparam = cp;	rq.clen   = sizeof(cmd) + 1;	rq.rparam = rp;	rq.rlen   = sizeof(rp);	if (hci_send_req(dd, &rq, 2000) < 0)		return -1;	if (rp[0] != 0xc2) {		errno = EIO;		return -1;	}	if ((rp[9] + (rp[10] << 8)) != 0) {		errno = ENXIO;		return -1;	}	*value = ((rp[11] + (rp[12] << 8)) << 16) + (rp[13] + (rp[14] << 8));	return 0;}int csr_read_pskey_complex(int dd, uint16_t seqnum, uint16_t pskey, uint8_t *value, uint16_t length){	unsigned char cmd[] = { 0x00, 0x00, ((length / 2) + 8) & 0xff, ((length / 2) + 8) >> 8,				seqnum & 0xff, seqnum >> 8, 0x03, 0x70, 0x00, 0x00,				pskey & 0xff, pskey >> 8,				(length / 2) & 0xff, (length / 2) >> 8,				0x00, 0x00, 0x00, 0x00 };	unsigned char cp[254], rp[254];	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp[0] = 0xc2;	memcpy(cp + 1, cmd, sizeof(cmd));	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = 0x00;	rq.event  = EVT_VENDOR;	rq.cparam = cp;	rq.clen   = sizeof(cmd) + 1;	rq.rparam = rp;	rq.rlen   = sizeof(rp);	if (hci_send_req(dd, &rq, 2000) < 0)		return -1;	if (rp[0] != 0xc2) {		errno = EIO;		return -1;	}	if ((rp[9] + (rp[10] << 8)) != 0) {		errno = ENXIO;		return -1;	}	memcpy(value, rp + 17, length);	return 0;}int csr_read_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t *value){	unsigned char cmd[] = { 0x00, 0x00, 0x09, 0x00,				seqnum & 0xff, seqnum >> 8, 0x03, 0x70, 0x00, 0x00,				pskey & 0xff, pskey >> 8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 };	unsigned char cp[254], rp[254];	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp[0] = 0xc2;	memcpy(cp + 1, cmd, sizeof(cmd));	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = 0x00;	rq.event  = EVT_VENDOR;	rq.cparam = cp;	rq.clen   = sizeof(cmd) + 1;	rq.rparam = rp;	rq.rlen   = sizeof(rp);	if (hci_send_req(dd, &rq, 2000) < 0)		return -1;	if (rp[0] != 0xc2) {		errno = EIO;		return -1;	}	if ((rp[9] + (rp[10] << 8)) != 0) {		errno = ENXIO;		return -1;	}	*value = rp[17] + (rp[18] << 8);	return 0;}int csr_write_pskey_uint16(int dd, uint16_t seqnum, uint16_t pskey, uint16_t value){	unsigned char cmd[] = { 0x02, 0x00, 0x09, 0x00,				seqnum & 0xff, seqnum >> 8, 0x03, 0x70, 0x00, 0x00,				pskey & 0xff, pskey >> 8, 0x01, 0x00, 0x00, 0x00,				value & 0xff, value >> 8 };	unsigned char cp[254], rp[254];	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp[0] = 0xc2;	memcpy(cp + 1, cmd, sizeof(cmd));	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_VENDOR_CMD;	rq.ocf    = 0x00;	rq.event  = EVT_VENDOR;	rq.cparam = cp;	rq.clen   = sizeof(cmd) + 1;	rq.rparam = rp;	rq.rlen   = sizeof(rp);	if (hci_send_req(dd, &rq, 2000) < 0)		return -1;	if (rp[0] != 0xc2) {		errno = EIO;		return -1;	}	if ((rp[9] + (rp[10] << 8)) != 0) {		errno = ENXIO;		return -1;	}	return 0;}

⌨️ 快捷键说明

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