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

📄 hci.c

📁 bluez-libs-2.17.tar.gz网上很少找到这个版本的了
💻 C
📖 第 1 页 / 共 3 页
字号:
	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_READ_VOICE_SETTING;	rq.rparam = &rp;	rq.rlen   = READ_VOICE_SETTING_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*vs = rp.voice_setting;	return 0;}int hci_write_voice_setting(int dd, uint16_t vs, int to){	write_voice_setting_cp cp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	cp.voice_setting = vs;	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_WRITE_VOICE_SETTING;	rq.cparam = &cp;	rq.clen   = WRITE_VOICE_SETTING_CP_SIZE;	return hci_send_req(dd, &rq, to);}int hci_read_current_iac_lap(int dd, uint8_t *num_iac, uint8_t *lap, int to){	read_current_iac_lap_rp rp;	struct hci_request rq;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_READ_CURRENT_IAC_LAP;	rq.rparam = &rp;	rq.rlen   = READ_CURRENT_IAC_LAP_RP_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	*num_iac = rp.num_current_iac;	memcpy(lap, rp.lap, rp.num_current_iac * 3);	return 0;}int hci_write_current_iac_lap(int dd, uint8_t num_iac, uint8_t *lap, int to){	write_current_iac_lap_cp cp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp.num_current_iac = num_iac;	memcpy(&cp.lap, lap, num_iac * 3);	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_WRITE_CURRENT_IAC_LAP;	rq.cparam = &cp;	rq.clen   = num_iac * 3 + 1;	return hci_send_req(dd, &rq, to);}int hci_read_stored_link_key(int dd, bdaddr_t *bdaddr, uint8_t all, int to){	read_stored_link_key_cp cp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	bacpy(&cp.bdaddr, bdaddr);	cp.read_all = all;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_READ_STORED_LINK_KEY;	rq.cparam = &cp;	rq.clen   = READ_STORED_LINK_KEY_CP_SIZE;	return hci_send_req(dd, &rq, to);}int hci_write_stored_link_key(int dd, bdaddr_t *bdaddr, uint8_t *key, int to){	unsigned char cp[WRITE_STORED_LINK_KEY_CP_SIZE + 6 + 16];	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	cp[0] = 1;	bacpy((bdaddr_t *) (cp + 1), bdaddr);	memcpy(cp + 7, key, 16);	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_WRITE_STORED_LINK_KEY;	rq.cparam = &cp;	rq.clen   = WRITE_STORED_LINK_KEY_CP_SIZE + 6 + 16;	return hci_send_req(dd, &rq, to);}int hci_delete_stored_link_key(int dd, bdaddr_t *bdaddr, uint8_t all, int to){	delete_stored_link_key_cp cp;	struct hci_request rq;	memset(&cp, 0, sizeof(cp));	bacpy(&cp.bdaddr, bdaddr);	cp.delete_all = all;	memset(&rq, 0, sizeof(rq));	rq.ogf    = OGF_HOST_CTL;	rq.ocf    = OCF_DELETE_STORED_LINK_KEY;	rq.cparam = &cp;	rq.clen   = DELETE_STORED_LINK_KEY_CP_SIZE;	return hci_send_req(dd, &rq, to);}int hci_authenticate_link(int dd, uint16_t handle, int to){	auth_requested_cp cp;	evt_auth_complete rp;	struct hci_request rq;	cp.handle = handle;	rq.ogf    = OGF_LINK_CTL;	rq.ocf    = OCF_AUTH_REQUESTED;	rq.event  = EVT_AUTH_COMPLETE;	rq.cparam = &cp;	rq.clen   = AUTH_REQUESTED_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = EVT_AUTH_COMPLETE_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_encrypt_link(int dd, uint16_t handle, uint8_t encrypt, int to){	set_conn_encrypt_cp cp;	evt_encrypt_change rp;	struct hci_request rq;	cp.handle  = handle;	cp.encrypt = encrypt;	rq.ogf     = OGF_LINK_CTL;	rq.ocf     = OCF_SET_CONN_ENCRYPT;	rq.event   = EVT_ENCRYPT_CHANGE;	rq.cparam  = &cp;	rq.clen    = SET_CONN_ENCRYPT_CP_SIZE;	rq.rparam  = &rp;	rq.rlen    = EVT_ENCRYPT_CHANGE_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_change_link_key(int dd, uint16_t handle, int to){	change_conn_link_key_cp cp;	evt_change_conn_link_key_complete rp;	struct hci_request rq;	cp.handle = handle;	rq.ogf    = OGF_LINK_CTL;	rq.ocf    = OCF_CHANGE_CONN_LINK_KEY;	rq.event  = EVT_CHANGE_CONN_LINK_KEY_COMPLETE;	rq.cparam = &cp;	rq.clen   = CHANGE_CONN_LINK_KEY_CP_SIZE;	rq.rparam = &rp;	rq.rlen   = EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE;	if (hci_send_req(dd, &rq, to) < 0)		return -1;	if (rp.status) {		errno = EIO;		return -1;	}	return 0;}int hci_switch_role(int dd, bdaddr_t *bdaddr, uint8_t role, int to){	switch_role_cp cp;	evt_role_change rp;	struct hci_request rq;	bacpy(&cp.bdaddr, bdaddr);	cp.role   = role;	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_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_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.link_sup_to;	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.link_sup_to = 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 + -