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

📄 hci.c

📁 实现蓝牙的各种profile
💻 C
📖 第 1 页 / 共 4 页
字号:
	rq.ogf    = OGF_LINK_POLICY;	rq.ocf    = OCF_SWITCH_ROLE;	rq.cparam = &cp;	rq.clen   = SWITCH_ROLE_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = EVT_ROLE_CHANGE_SIZE;	rq.event  = EVT_ROLE_CHANGE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_park_mode(int dd, uint16_t handle, uint16_t max_interval, uint16_t min_interval, int to){	park_mode_cp cp;	evt_mode_change rp;	struct hci_request rq;	memset(&cp, 0, sizeof (cp));	cp.handle       = handle;	cp.max_interval = max_interval;	cp.min_interval = min_interval;	memset(&rq, 0, sizeof (rq));	rq.ogf    = OGF_LINK_POLICY;	rq.ocf    = OCF_PARK_MODE;	rq.event  = EVT_MODE_CHANGE;	rq.cparam = &cp;	rq.clen   = PARK_MODE_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = EVT_MODE_CHANGE_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_exit_park_mode(int dd, uint16_t handle, int to){	exit_park_mode_cp cp;	evt_mode_change rp;	struct hci_request rq;	memset(&cp, 0, sizeof (cp));	cp.handle = handle;	memset (&rq, 0, sizeof (rq));	rq.ogf    = OGF_LINK_POLICY;	rq.ocf    = OCF_EXIT_PARK_MODE;	rq.event  = EVT_MODE_CHANGE;	rq.cparam = &cp;	rq.clen   = EXIT_PARK_MODE_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = EVT_MODE_CHANGE_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_read_inquiry_scan_type(int dd, uint8_t *type, int to){	read_inquiry_scan_type_rp rp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_READ_INQUIRY_SCAN_TYPE;	rq.rparam = &rp;	rq.rlen   = READ_INQUIRY_SCAN_TYPE_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*type = rp.type;	return 0;}int hci_write_inquiry_scan_type(int dd, uint8_t type, int to){	write_inquiry_scan_type_cp cp;	write_inquiry_scan_type_rp rp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp.type = type;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_WRITE_INQUIRY_SCAN_TYPE;	rq.cparam = &cp;	rq.clen   = WRITE_INQUIRY_SCAN_TYPE_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = WRITE_INQUIRY_SCAN_TYPE_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_read_inquiry_mode(int dd, uint8_t *mode, int to){	read_inquiry_mode_rp rp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_READ_INQUIRY_MODE;	rq.rparam = &rp;	rq.rlen   = READ_INQUIRY_MODE_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*mode = rp.mode;	return 0;}int hci_write_inquiry_mode(int dd, uint8_t mode, int to){	write_inquiry_mode_cp cp;	write_inquiry_mode_rp rp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp.mode = mode;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_WRITE_INQUIRY_MODE;	rq.cparam = &cp;	rq.clen   = WRITE_INQUIRY_MODE_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = WRITE_INQUIRY_MODE_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_read_afh_mode(int dd, uint8_t *mode, int to){	read_afh_mode_rp rp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_READ_AFH_MODE;	rq.rparam = &rp;	rq.rlen   = READ_AFH_MODE_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*mode = rp.mode;	return 0;}int hci_write_afh_mode(int dd, uint8_t mode, int to){	write_afh_mode_cp cp;	write_afh_mode_rp rp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp.mode = mode;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_WRITE_AFH_MODE;	rq.cparam = &cp;	rq.clen   = WRITE_AFH_MODE_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = WRITE_AFH_MODE_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_read_ext_inquiry_response(int dd, uint8_t *fec, uint8_t *data, int to){	read_ext_inquiry_response_rp rp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_READ_EXT_INQUIRY_RESPONSE;	rq.rparam = &rp;	rq.rlen   = READ_EXT_INQUIRY_RESPONSE_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*fec = rp.fec;	memcpy(data, rp.data, 240);	return 0;}int hci_write_ext_inquiry_response(int dd, uint8_t fec, uint8_t *data, int to){	write_ext_inquiry_response_cp cp;	write_ext_inquiry_response_rp rp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp.fec = fec;	memcpy(cp.data, data, 240);	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_WRITE_EXT_INQUIRY_RESPONSE;	rq.cparam = &cp;	rq.clen   = WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_read_simple_pairing_mode(int dd, uint8_t *mode, int to){	read_simple_pairing_mode_rp rp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_READ_SIMPLE_PAIRING_MODE;	rq.rparam = &rp;	rq.rlen   = READ_SIMPLE_PAIRING_MODE_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*mode = rp.mode;	return 0;}int hci_write_simple_pairing_mode(int dd, uint8_t mode, int to){	write_simple_pairing_mode_cp cp;	write_simple_pairing_mode_rp rp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp.mode = mode;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_WRITE_SIMPLE_PAIRING_MODE;	rq.cparam = &cp;	rq.clen   = WRITE_SIMPLE_PAIRING_MODE_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = WRITE_SIMPLE_PAIRING_MODE_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_read_local_oob_data(int dd, uint8_t *hash, uint8_t *randomizer, int to){	read_local_oob_data_rp rp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_READ_LOCAL_OOB_DATA;	rq.rparam = &rp;	rq.rlen   = READ_LOCAL_OOB_DATA_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	memcpy(hash, rp.hash, 16);	memcpy(randomizer, rp.randomizer, 16);	return 0;}int hci_read_transmit_power_level(int dd, uint16_t handle, uint8_t type, int8_t *level, int to){	read_transmit_power_level_cp cp;	read_transmit_power_level_rp rp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp.handle = handle;	cp.type   = type;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_READ_TRANSMIT_POWER_LEVEL;	rq.cparam = &cp;	rq.clen   = READ_TRANSMIT_POWER_LEVEL_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = READ_TRANSMIT_POWER_LEVEL_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*level = rp.level;	return 0;}int hci_read_link_supervision_timeout(int dd, uint16_t handle, uint16_t *timeout, int to){	read_link_supervision_timeout_rp rp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_READ_LINK_SUPERVISION_TIMEOUT;	rq.cparam = &handle;	rq.clen   = 2;	rq.rparam = &rp;	rq.rlen   = READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*timeout = rp.timeout;	return 0;}int hci_write_link_supervision_timeout(int dd, uint16_t handle, uint16_t timeout, int to){	write_link_supervision_timeout_cp cp;	write_link_supervision_timeout_rp rp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp.handle  = handle;	cp.timeout = timeout;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_WRITE_LINK_SUPERVISION_TIMEOUT;	rq.cparam = &cp;	rq.clen   = WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_set_afh_classification(int dd, uint8_t *map, int to){	set_afh_classification_cp cp;	set_afh_classification_rp rp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	memcpy(cp.map, map, 10);	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_SET_AFH_CLASSIFICATION;	rq.cparam = &cp;	rq.clen   = SET_AFH_CLASSIFICATION_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = SET_AFH_CLASSIFICATION_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_read_link_quality(int dd, uint16_t handle, uint8_t *link_quality, int to){	read_link_quality_rp rp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_STATUS_PARAM;	rq.ocf    = OCF_READ_LINK_QUALITY;	rq.cparam = &handle;	rq.clen   = 2;	rq.rparam = &rp;	rq.rlen   = READ_LINK_QUALITY_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*link_quality = rp.link_quality;	return 0;}int hci_read_rssi(int dd, uint16_t handle, int8_t *rssi, int to){	read_rssi_rp rp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_STATUS_PARAM;	rq.ocf    = OCF_READ_RSSI;	rq.cparam = &handle;	rq.clen   = 2;	rq.rparam = &rp;	rq.rlen   = READ_RSSI_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*rssi = rp.rssi;	return 0;}int hci_read_afh_map(int dd, uint16_t handle, uint8_t *mode, uint8_t *map, int to){	read_afh_map_rp rp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_STATUS_PARAM;	rq.ocf    = OCF_READ_AFH_MAP;	rq.cparam = &handle;	rq.clen   = 2;	rq.rparam = &rp;	rq.rlen   = READ_AFH_MAP_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*mode = rp.mode;	memcpy(map, rp.map, 10);	return 0;}int hci_read_clock(int dd, uint16_t handle, uint8_t which, uint32_t *clock, uint16_t *accuracy, int to){	read_clock_cp cp;	read_clock_rp rp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp.handle      = handle;	cp.which_clock = which;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_STATUS_PARAM;	rq.ocf    = OCF_READ_CLOCK;	rq.cparam = &cp;	rq.clen   = READ_CLOCK_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = READ_CLOCK_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*clock    = rp.clock;	*accuracy = rp.accuracy;	return 0;}int hci_local_name(int dd, int len, char *name, int to){	return hci_read_local_name(dd, len, name, to);}int hci_remote_name(int dd, const bdaddr_t *bdaddr, int len, char *name, int to){	return hci_read_remote_name(dd, bdaddr, len, name, to);}

⌨️ 快捷键说明

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