diff --git a/system/bta/hearing_aid/hearing_aid.cc b/system/bta/hearing_aid/hearing_aid.cc index 4dbab3963afa1c91a030eae29691a8b160bf581b..89d16b2ba4c7790b866eb93f82b857d54a770dc8 100644 --- a/system/bta/hearing_aid/hearing_aid.cc +++ b/system/bta/hearing_aid/hearing_aid.cc @@ -259,19 +259,23 @@ class HearingAidImpl : public HearingAid { uint8_t capabilities, uint16_t codecs, uint16_t audio_control_point_handle, uint16_t volume_handle, uint64_t hiSyncId, - uint16_t render_delay, uint16_t preparation_delay) { - DVLOG(2) << __func__ << " " << address << ", hiSyncId=" << loghex(hiSyncId); - hearingDevices.Add(HearingDevice( - address, psm, capabilities, codecs, audio_control_point_handle, - volume_handle, hiSyncId, render_delay, preparation_delay)); + uint16_t render_delay, uint16_t preparation_delay, + uint16_t is_white_listed) { + DVLOG(2) << __func__ << " " << address << ", hiSyncId=" << loghex(hiSyncId) + << ", isWhiteListed=" << is_white_listed; + if (is_white_listed) { + hearingDevices.Add(HearingDevice( + address, psm, capabilities, codecs, audio_control_point_handle, + volume_handle, hiSyncId, render_delay, preparation_delay)); + + // TODO: we should increase the scanning window for few seconds, to get + // faster initial connection, same after hearing aid disconnects, i.e. + // BTM_BleSetConnScanParams(2048, 1024); - // TODO: we should increase the scanning window for few seconds, to get - // faster initial connection, same after hearing aid disconnects, i.e. - // BTM_BleSetConnScanParams(2048, 1024); - - /* add device into BG connection to accept remote initiated connection */ - BTA_GATTC_Open(gatt_if, address, false, GATT_TRANSPORT_LE, false); - BTA_DmBleStartAutoConn(); + /* add device into BG connection to accept remote initiated connection */ + BTA_GATTC_Open(gatt_if, address, false, GATT_TRANSPORT_LE, false); + BTA_DmBleStartAutoConn(); + } callbacks->OnDeviceAvailable(capabilities, hiSyncId, address); } @@ -1125,14 +1129,15 @@ void HearingAid::AddFromStorage(const RawAddress& address, uint16_t psm, uint16_t audio_control_point_handle, uint16_t volume_handle, uint64_t hiSyncId, uint16_t render_delay, - uint16_t preparation_delay) { + uint16_t preparation_delay, + uint16_t is_white_listed) { if (!instance) { LOG(ERROR) << "Not initialized yet"; } instance->AddFromStorage(address, psm, capabilities, codecs, audio_control_point_handle, volume_handle, hiSyncId, - render_delay, preparation_delay); + render_delay, preparation_delay, is_white_listed); }; void HearingAid::CleanUp() { diff --git a/system/bta/include/bta_hearing_aid_api.h b/system/bta/include/bta_hearing_aid_api.h index 59cdf563ad57c5238ad6c285832d863faecbb192..afe08ae7c9f19352cda5da68eb821b4f61746f47 100644 --- a/system/bta/include/bta_hearing_aid_api.h +++ b/system/bta/include/bta_hearing_aid_api.h @@ -46,7 +46,8 @@ class HearingAid { uint8_t capabilities, uint16_t codec, uint16_t audioControlPointHandle, uint16_t volumeHandle, uint64_t hiSyncId, - uint16_t render_delay, uint16_t preparation_delay); + uint16_t render_delay, uint16_t preparation_delay, + uint16_t is_white_listed); virtual void Connect(const RawAddress& address) = 0; virtual void Disconnect(const RawAddress& address) = 0; diff --git a/system/btif/include/btif_storage.h b/system/btif/include/btif_storage.h index 7e90162327c78171c415e408d1162c098591bfb6..fb906737e638b0b38faf8dd3094ea3b0353bd12a 100644 --- a/system/btif/include/btif_storage.h +++ b/system/btif/include/btif_storage.h @@ -201,6 +201,9 @@ void btif_storage_load_bonded_hearing_aids(); /** Deletes the bonded hearing aid device info from NVRAM */ void btif_storage_remove_hearing_aid(const RawAddress& address); +/** Remove the hearing aid device from white list */ +void btif_storage_remove_hearing_aid_white_list(const RawAddress& address); + /******************************************************************************* * * Function btif_storage_is_retricted_device diff --git a/system/btif/src/btif_hearing_aid.cc b/system/btif/src/btif_hearing_aid.cc index 961a5420d341fb65ed0856385f71cff7aa1d5c3b..ef91369f5424a4afbf863c1daced42ce7d9c52bb 100644 --- a/system/btif/src/btif_hearing_aid.cc +++ b/system/btif/src/btif_hearing_aid.cc @@ -91,8 +91,8 @@ class HearingAidInterfaceImpl DVLOG(2) << __func__ << " address: " << address; do_in_bta_thread(FROM_HERE, Bind(&HearingAid::Disconnect, Unretained(HearingAid::Get()), address)); - do_in_jni_thread(FROM_HERE, - Bind(&btif_storage_remove_hearing_aid, address)); + do_in_jni_thread( + FROM_HERE, Bind(&btif_storage_remove_hearing_aid_white_list, address)); } void SetVolume(int8_t volume) override { diff --git a/system/btif/src/btif_storage.cc b/system/btif/src/btif_storage.cc index e40281201c9cc2d9279f77b6445bccc2444fb1d6..fe00a2b5d3dcaded6825f901c752666216559a87 100644 --- a/system/btif/src/btif_storage.cc +++ b/system/btif/src/btif_storage.cc @@ -1364,6 +1364,7 @@ constexpr char HEARING_AID_VOLUME_HANDLE[] = "HearingAidVolumeHandle"; constexpr char HEARING_AID_SYNC_ID[] = "HearingAidSyncId"; constexpr char HEARING_AID_RENDER_DELAY[] = "HearingAidRenderDelay"; constexpr char HEARING_AID_PREPARATION_DELAY[] = "HearingAidPreparationDelay"; +constexpr char HEARING_AID_IS_WHITE_LISTED[] = "HearingAidIsWhiteListed"; void btif_storage_add_hearing_aid(const RawAddress& address, uint16_t psm, uint8_t capabilities, uint16_t codecs, @@ -1391,6 +1392,7 @@ void btif_storage_add_hearing_aid(const RawAddress& address, uint16_t psm, btif_config_set_int(bdstr, HEARING_AID_RENDER_DELAY, render_delay); btif_config_set_int(bdstr, HEARING_AID_PREPARATION_DELAY, preparation_delay); + btif_config_set_int(bdstr, HEARING_AID_IS_WHITE_LISTED, true); btif_config_save(); }, address, psm, capabilities, codecs, audio_control_point_handle, @@ -1446,13 +1448,18 @@ void btif_storage_load_bonded_hearing_aids() { if (btif_config_get_int(name, HEARING_AID_PREPARATION_DELAY, &value)) preparation_delay = value; + uint16_t is_white_listed = 0; + if (btif_config_get_int(name, HEARING_AID_IS_WHITE_LISTED, &value)) + is_white_listed = value; + RawAddress bd_addr; RawAddress::FromString(name, bd_addr); // add extracted information to BTA Hearing Aid do_in_bta_thread( - FROM_HERE, Bind(&HearingAid::AddFromStorage, bd_addr, psm, capabilities, - codecs, audio_control_point_handle, volume_handle, - hi_sync_id, render_delay, preparation_delay)); + FROM_HERE, + Bind(&HearingAid::AddFromStorage, bd_addr, psm, capabilities, codecs, + audio_control_point_handle, volume_handle, hi_sync_id, + render_delay, preparation_delay, is_white_listed)); } } @@ -1466,9 +1473,17 @@ void btif_storage_remove_hearing_aid(const RawAddress& address) { btif_config_remove(addrstr, HEARING_AID_AUDIO_CONTROL_POINT); btif_config_remove(addrstr, HEARING_AID_VOLUME_HANDLE); btif_config_remove(addrstr, HEARING_AID_SYNC_ID); + btif_config_remove(addrstr, HEARING_AID_IS_WHITE_LISTED); btif_config_save(); } +/** Remove the hearing aid device from white list */ +void btif_storage_remove_hearing_aid_white_list(const RawAddress& address) { + std::string addrstr = address.ToString(); + + btif_config_set_int(addrstr, HEARING_AID_IS_WHITE_LISTED, false); +} + /******************************************************************************* * * Function btif_storage_is_restricted_device