?? hci.c
字號:
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_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_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 + -