diff --git a/system/gd/hci/le_advertising_manager.cc b/system/gd/hci/le_advertising_manager.cc index fc2cbd45b5224480f1d6bc91317da3f5d721c454..b9a9ddb1f01663fc5170bc17f95d231bc675bf95 100644 --- a/system/gd/hci/le_advertising_manager.cc +++ b/system/gd/hci/le_advertising_manager.cc @@ -183,7 +183,9 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb uint8_t advertiser_id = event_view.GetAdvertisingHandle(); + bool was_rotating_address = false; if (advertising_sets_[advertiser_id].address_rotation_alarm != nullptr) { + was_rotating_address = true; advertising_sets_[advertiser_id].address_rotation_alarm->Cancel(); advertising_sets_[advertiser_id].address_rotation_alarm.reset(); } @@ -210,6 +212,13 @@ struct LeAdvertisingManager::impl : public bluetooth::hci::LeAddressManagerCallb if (advertising_sets_[advertiser_id].duration == 0 && advertising_sets_[advertiser_id].max_extended_advertising_events == 0) { LOG_INFO("Reenable advertising"); + if (was_rotating_address) { + advertising_sets_[advertiser_id].address_rotation_alarm = std::make_unique<os::Alarm>(module_handler_); + advertising_sets_[advertiser_id].address_rotation_alarm->Schedule( + common::BindOnce( + &impl::set_advertising_set_random_address_on_timer, common::Unretained(this), advertiser_id), + le_address_manager_->GetNextPrivateAddressIntervalMs()); + } enable_advertiser(advertiser_id, true, 0, 0); } }