diff options
author | Lalit <quic_lkaim@quicinc.com> | 2024-04-28 20:25:19 +0530 |
---|---|---|
committer | Ravindra Konda <quic_konda@quicinc.com> | 2024-05-20 15:10:15 -0700 |
commit | dcfa74d4adf9e3f426b7c9a1bda66c2077cdcc2f (patch) | |
tree | 32bfd3f9bf7019d6c35eb404d0f744f72d956e1c | |
parent | baab2ef5a208f972106b5e9ca11bf8ddfc74cd39 (diff) |
Fix: Stop RPA generation during IDLE state
CRs-Fixed: 3787443
Change-Id: Ifdd395e790a9543bda4395b31ca62e61882a04d8
-rw-r--r-- | stack/btm/btm_ble_addr.cc | 5 | ||||
-rw-r--r-- | stack/btm/btm_ble_gap.cc | 10 |
2 files changed, 14 insertions, 1 deletions
diff --git a/stack/btm/btm_ble_addr.cc b/stack/btm/btm_ble_addr.cc index 569ef4deb..45a3d801f 100644 --- a/stack/btm/btm_ble_addr.cc +++ b/stack/btm/btm_ble_addr.cc @@ -61,6 +61,7 @@ RawAddress generate_rpa_from_irk_and_rand(const Octet16& irk, * generated */ void btm_gen_resolve_paddr_low(const RawAddress& address) { tBTM_LE_RANDOM_CB* p_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb; + tBTM_BLE_CB* p_ble_cb = &btm_cb.ble_ctr_cb; BTM_TRACE_EVENT("btm_gen_resolve_paddr_low"); @@ -77,8 +78,10 @@ void btm_gen_resolve_paddr_low(const RawAddress& address) { #if (BTM_BLE_CONFORMANCE_TESTING == TRUE) interval_ms = btm_cb.ble_ctr_cb.rpa_tout * 1000; #endif - alarm_set_on_mloop(p_cb->refresh_raddr_timer, interval_ms, + if(BTM_BLE_IS_SCAN_ACTIVE(p_ble_cb->scan_activity)) { + alarm_set_on_mloop(p_cb->refresh_raddr_timer, interval_ms, btm_ble_refresh_raddr_timer_timeout, NULL); + } } else { p_cb->own_addr_type = BLE_ADDR_RANDOM_ID; diff --git a/stack/btm/btm_ble_gap.cc b/stack/btm/btm_ble_gap.cc index b60451e35..bd2a1a5e9 100644 --- a/stack/btm/btm_ble_gap.cc +++ b/stack/btm/btm_ble_gap.cc @@ -501,6 +501,7 @@ tBTM_STATUS BTM_BleObserve(bool start, uint8_t duration, tBTM_INQ_RESULTS_CB* p_results_cb, tBTM_CMPL_CB* p_cmpl_cb) { tBTM_BLE_INQ_CB* p_inq = &btm_cb.ble_ctr_cb.inq_var; + tBTM_LE_RANDOM_CB* p_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb; tBTM_STATUS status = BTM_WRONG_MODE; uint8_t i=0; std::vector<uint16_t> scan_interval = {BTM_BLE_GAP_DISC_SCAN_WIN, BTM_BLE_GAP_DISC_SCAN_WIN}; @@ -565,6 +566,15 @@ tBTM_STATUS BTM_BleObserve(bool start, uint8_t duration, alarm_set_on_mloop(btm_cb.ble_ctr_cb.observer_timer, duration_ms, btm_ble_observer_timer_timeout, NULL); } + if(BTM_BLE_IS_SCAN_ACTIVE(btm_cb.ble_ctr_cb.scan_activity) && !alarm_is_scheduled(p_cb->refresh_raddr_timer)) { + /* start a periodical timer to refresh random addr */ + uint64_t interval_ms = btm_get_next_private_addrress_interval_ms(); +#if (BTM_BLE_CONFORMANCE_TESTING == TRUE) + interval_ms = btm_cb.ble_ctr_cb.rpa_tout * 1000; +#endif + alarm_set_on_mloop(p_cb->refresh_raddr_timer, interval_ms, + btm_ble_refresh_raddr_timer_timeout, NULL); + } } } else if (BTM_BLE_IS_OBS_ACTIVE(btm_cb.ble_ctr_cb.scan_activity)) { status = BTM_CMD_STARTED; |