--- bluez-libs-2.17.orig/src/hci.c +++ bluez-libs-2.17/src/hci.c @@ -1298,6 +1298,29 @@ return hci_send_req(dd, &rq, to); } +int hci_read_number_of_supported_iac(int dd, uint8_t *num_iac, int to) +{ + read_number_of_supported_iac_rp rp; + struct hci_request rq; + + memset(&rq, 0, sizeof(rq)); + rq.ogf = OGF_HOST_CTL; + rq.ocf = OCF_READ_NUMBER_OF_SUPPORTED_IAC; + rq.rparam = &rp; + rq.rlen = READ_NUMBER_OF_SUPPORTED_IAC_RP_SIZE; + + if (hci_send_req(dd, &rq, to) < 0) + return -1; + + if (rp.status) { + errno = EIO; + return -1; + } + + *num_iac = rp.num_support_iac; + return 0; +} + int hci_read_current_iac_lap(int dd, uint8_t *num_iac, uint8_t *lap, int to) { read_current_iac_lap_rp rp; --- bluez-libs-2.17.orig/include/hci_lib.h +++ bluez-libs-2.17/include/hci_lib.h @@ -84,6 +84,7 @@ int hci_write_class_of_dev(int dd, uint32_t cls, int to); int hci_read_voice_setting(int dd, uint16_t *vs, int to); int hci_write_voice_setting(int dd, uint16_t vs, int to); +int hci_read_number_of_supported_iac(int dd, uint8_t *num_iac, int to); int hci_read_current_iac_lap(int dd, uint8_t *num_iac, uint8_t *lap, int to); int hci_write_current_iac_lap(int dd, uint8_t num_iac, uint8_t *lap, int to); int hci_read_stored_link_key(int dd, bdaddr_t *bdaddr, uint8_t all, int to); --- bluez-libs-2.17.orig/include/hci.h +++ bluez-libs-2.17/include/hci.h @@ -808,6 +808,13 @@ #define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3 #define MAX_IAC_LAP 0x40 +#define OCF_READ_NUMBER_OF_SUPPORTED_IAC 0x0038 +typedef struct { + uint8_t status; + uint8_t num_support_iac; +} __attribute__ ((packed)) read_number_of_supported_iac_rp; +#define READ_NUMBER_OF_SUPPORTED_IAC_RP_SIZE 2 + #define OCF_READ_CURRENT_IAC_LAP 0x0039 typedef struct { uint8_t status;