📄 hci.c
字号:
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 + -