summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLalit <quic_lkaim@quicinc.com>2024-04-28 20:25:19 +0530
committerRavindra Konda <quic_konda@quicinc.com>2024-05-20 15:10:15 -0700
commitdcfa74d4adf9e3f426b7c9a1bda66c2077cdcc2f (patch)
tree32bfd3f9bf7019d6c35eb404d0f744f72d956e1c
parentbaab2ef5a208f972106b5e9ca11bf8ddfc74cd39 (diff)
Fix: Stop RPA generation during IDLE state
CRs-Fixed: 3787443 Change-Id: Ifdd395e790a9543bda4395b31ca62e61882a04d8
-rw-r--r--stack/btm/btm_ble_addr.cc5
-rw-r--r--stack/btm/btm_ble_gap.cc10
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;