Control Advertising/Scanning of instant on lost separately

PiperOrigin-RevId: 778356456
This commit is contained in:
Guogang Li
2025-07-01 23:30:17 -07:00
committed by Copybara-Service
parent cf92356d02
commit 0614f439d9
7 changed files with 77 additions and 46 deletions
+1 -1
View File
@@ -256,7 +256,7 @@ NC_INSTANCE NcCreateService() {
true);
nearby::NearbyFlags::GetInstance().OverrideBoolFlagValue(
::nearby::connections::config_package_nearby::nearby_connections_feature::
kEnableStopBLEScanningOnWifiUpgrade,
kEnableStopBleScanningOnWifiUpgrade,
true);
nearby::NearbyFlags::GetInstance().OverrideBoolFlagValue(
::nearby::connections::config_package_nearby::nearby_connections_feature::
+2 -2
View File
@@ -983,7 +983,7 @@ BwuManager::ProcessBwuPathAvailableEventInternal(
config_package_nearby::nearby_connections_feature::kEnableBleV2);
if (NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableStopBLEScanningOnWifiUpgrade)) {
kEnableStopBleScanningOnWifiUpgrade)) {
if (client->GetLocalOsInfo().type() ==
location::nearby::connections::OsInfo::APPLE &&
old_medium == Medium::BLE && medium == Medium::WIFI_HOTSPOT) {
@@ -1005,7 +1005,7 @@ BwuManager::ProcessBwuPathAvailableEventInternal(
if (NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableStopBLEScanningOnWifiUpgrade)) {
kEnableStopBleScanningOnWifiUpgrade)) {
if (disable_ble_scanning) {
if (enable_ble_v2) {
NEARBY_LOGS(INFO) << "Resume BLE_V2 scanning.";
@@ -34,15 +34,33 @@ constexpr auto kBlePeripheralLostTimeoutMillis =
// When true, disable Bluetooth classic scanning.
constexpr auto kDisableBluetoothClassicScanning =
flags::Flag<bool>(kConfigPackage, "45639961", false);
// Disable instant on lost on BLE without extended feature.
constexpr auto kDisableInstantOnLostOnBleWithoutExtended =
flags::Flag<bool>(kConfigPackage, "45687098", true);
// When true, enable advertising for instant on lost feature.
constexpr auto kEnableAdvertisingForInstantOnLost =
flags::Flag<bool>(kConfigPackage, "45708614", false);
// Enable/Disable auto_reconnect feature.
constexpr auto kEnableAutoReconnect =
flags::Flag<bool>(kConfigPackage, "45427690", false);
// Disable/Enable BLE v2 in Nearby Connections SDK.
constexpr auto kEnableBleV2 =
flags::Flag<bool>(kConfigPackage, "45401515", false);
// Enable/Disable AWDL in Nearby connections SDK.
constexpr auto kEnableAwdl =
flags::Flag<bool>(kConfigPackage, "45690762", false);
// Disable/Enable BLE L2CAP in Nearby Connections SDK.
constexpr auto kEnableBleL2cap =
flags::Flag<bool>(kConfigPackage, "45685706", false);
// Disable/Enable BLE v2 in Nearby Connections SDK.
constexpr auto kEnableBleV2 =
flags::Flag<bool>(kConfigPackage, "45401515", false);
// Enable/Disable DCT advertising/scanning specification.
constexpr auto kEnableDct =
flags::Flag<bool>(kConfigPackage, "45697202", false);
// Disable/Enable dynamic role switch in Nearby Connections SDK.
constexpr auto kEnableDynamicRoleSwitch =
flags::Flag<bool>(kConfigPackage, "45696452", false);
// Enable/Disable GATT client disconnection.
constexpr auto kEnableGattClientDisconnection =
flags::Flag<bool>(kConfigPackage, "45698964", false);
// Disable/Enable GATT query in thread in BLE V2.
// Manual edit: setting this to false for ChromeOS rollout as well.
constexpr auto kEnableGattQueryInThread =
@@ -53,10 +71,13 @@ constexpr auto kEnableInstantOnLost =
// When true, enable multiplexing in NC.
constexpr auto kEnableMultiplex =
flags::Flag<bool>(kConfigPackage, "45647946", false);
// Enable/disable multiplex in NC for AWDL.
constexpr auto kEnableMultiplexAwdl =
flags::Flag<bool>(kConfigPackage, "45690761", false);
// When true, enable multiplexing in NC for Bluetooth.
constexpr auto kEnableMultiplexBluetooth =
flags::Flag<bool>(kConfigPackage, "45676646", false);
// When true, enable multiplexing in NC for WifiLan.
// When true, enable multiplexing in NC for Wifi.
constexpr auto kEnableMultiplexWifiLan =
flags::Flag<bool>(kConfigPackage, "45676647", false);
// Enable/Disable payload manager to skip chunk update.
@@ -68,6 +89,12 @@ constexpr auto kEnablePayloadReceivedAck =
// Enable/Disable safe-to-disconnect feature.
constexpr auto kEnableSafeToDisconnect =
flags::Flag<bool>(kConfigPackage, "45425789", false);
// When true, enable scanning for instant on lost feature.
constexpr auto kEnableScanningForInstantOnLost =
flags::Flag<bool>(kConfigPackage, "45708613", false);
// Stop BLE_V2 scanning when upgrading to WIFI Hotspot or WFD.
constexpr auto kEnableStopBleScanningOnWifiUpgrade =
flags::Flag<bool>(kConfigPackage, "45687902", false);
// by default, enable Wi-Fi Hotspot client.
constexpr auto kEnableWifiHotspotClient =
flags::Flag<bool>(kConfigPackage, "45648734", true);
@@ -86,27 +113,7 @@ constexpr auto kSafeToDisconnectVersion =
// When true, use stable endpoint ID.
constexpr auto kUseStableEndpointId =
flags::Flag<bool>(kConfigPackage, "45639298", false);
// When true, disable instant on lost on BLE without extended feature.
constexpr auto kDisableInstantOnLostOnBleWithoutExtended =
flags::Flag<bool>(kConfigPackage, "45687098", true);
// When true, stop BLE_V2 scanning when upgrading to WIFI Hotspot or WFD.
constexpr auto kEnableStopBLEScanningOnWifiUpgrade =
flags::Flag<bool>(kConfigPackage, "45687902", false);
// When true, enable multiplexing in NC for AWDL.
constexpr auto kEnableMultiplexAwdl =
flags::Flag<bool>(kConfigPackage, "45690761", false);
// Enable/Disable AWDL in Nearby connections SDK.
constexpr auto kEnableAwdl =
flags::Flag<bool>(kConfigPackage, "45690762", false);
// When true, enable dynamic role switch in NC.
constexpr auto kEnableDynamicRoleSwitch =
flags::Flag<bool>(kConfigPackage, "45696452", false);
// Enable/Disable DCT advertising/scanning specification.
constexpr auto kEnableDct =
flags::Flag<bool>(kConfigPackage, "45697202", false);
// Enable/Disable GATT client disconnection.
constexpr auto kEnableGattClientDisconnection =
flags::Flag<bool>(kConfigPackage, "45698964", false);
} // namespace nearby_connections_feature
} // namespace config_package_nearby
} // namespace connections
+22 -8
View File
@@ -107,7 +107,10 @@ BleV2::~BleV2() {
if (NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableInstantOnLost)) {
kEnableInstantOnLost) ||
NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableAdvertisingForInstantOnLost)) {
instant_on_lost_manager_.Shutdown();
}
}
@@ -272,7 +275,10 @@ bool BleV2::StopAdvertising(const std::string& service_id) {
if (NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableInstantOnLost)) {
kEnableInstantOnLost) ||
NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableAdvertisingForInstantOnLost)) {
instant_on_lost_manager_.OnAdvertisingStopped(service_id);
}
@@ -1197,7 +1203,10 @@ bool BleV2::StartFastAdvertisingLocked(
if (NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableInstantOnLost)) {
kEnableInstantOnLost) ||
NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableAdvertisingForInstantOnLost)) {
instant_on_lost_manager_.OnAdvertisingStarted(service_id,
medium_advertisement_bytes);
}
@@ -1233,7 +1242,10 @@ bool BleV2::StartRegularAdvertisingLocked(
} else {
if (NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableInstantOnLost)) {
kEnableInstantOnLost) ||
NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableAdvertisingForInstantOnLost)) {
instant_on_lost_manager_.OnAdvertisingStarted(
service_id, medium_advertisement_bytes);
}
@@ -1319,10 +1331,12 @@ bool BleV2::StartGattAdvertisingLocked(
if (NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableInstantOnLost)) {
for (const auto& item : advertising_data.service_data) {
instant_on_lost_manager_.OnAdvertisingStarted(service_id, item.second);
}
kEnableInstantOnLost) ||
NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableAdvertisingForInstantOnLost)) {
instant_on_lost_manager_.OnAdvertisingStarted(service_id,
medium_advertisement_bytes);
}
return true;
@@ -196,8 +196,7 @@ bool DiscoveredPeripheralTracker::HandleOnLostAdvertisementLocked(
for (const auto& hash : on_lost_advertisement->hashes()) {
for (const auto& it : gatt_advertisement_infos_) {
if (it.second.advertisement_header.GetAdvertisementHash().string_data() ==
hash) {
if (it.second.instant_on_lost_hash.string_data() == hash) {
auto discovery_cb_it = service_id_infos_.find(it.second.service_id);
if (discovery_cb_it == service_id_infos_.end()) {
LOG(INFO)
@@ -216,7 +215,10 @@ bool DiscoveredPeripheralTracker::HandleOnLostAdvertisementLocked(
if (gatt_advertisement.IsValid()) {
if (NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableInstantOnLost)) {
kEnableInstantOnLost) ||
NearbyFlags::GetInstance().GetBoolFlag(
config_package_nearby::nearby_connections_feature::
kEnableScanningForInstantOnLost)) {
AddInstantLostAdvertisement(it.second.advertisement_header);
discovery_cb_it->second.discovered_peripheral_callback
.instant_lost_cb(lost_peripheral, it.second.service_id,
@@ -500,7 +502,10 @@ BleAdvertisementHeader DiscoveredPeripheralTracker::HandleRawGattAdvertisements(
GattAdvertisementInfo gatt_advertisement_info = {
.service_id = service_id,
.advertisement_header = new_advertisement_header,
.peripheral = peripheral};
.peripheral = peripheral,
.instant_on_lost_hash = bleutils::GenerateAdvertisementHash(
gatt_advertisement.ByteArrayWithExtraField())};
gatt_advertisement_infos_.insert_or_assign(
gatt_advertisement, std::move(gatt_advertisement_info));
}
@@ -141,8 +141,11 @@ class DiscoveredPeripheralTracker {
// gatt_advertisements_.
BleAdvertisementHeader advertisement_header;
// A proxy BlePeripheral for found/lost disovery callback.
// A proxy BlePeripheral for found/lost discovery callback.
BleV2Peripheral peripheral;
// Hash for instant on lost.
ByteArray instant_on_lost_hash;
};
// Clears stale data from any previous sessions.
@@ -341,8 +341,7 @@ TEST_P(DiscoveredPeripheralTrackerTest,
EXPECT_EQ(GetFetchAdvertisementCallbackCount(), 0);
}
TEST_P(DiscoveredPeripheralTrackerTest,
DctAdvertisementPeripheralDiscovered) {
TEST_P(DiscoveredPeripheralTrackerTest, DctAdvertisementPeripheralDiscovered) {
ByteArray dct_advertisement_bytes = CreateDctAdvertisement(
std::string(kServiceIdA), std::string(kDeviceName));
CountDownLatch found_latch(1);
@@ -1204,7 +1203,8 @@ TEST_P(DiscoveredPeripheralTrackerTest, LostPeripheralForInstantOnLost) {
EXPECT_EQ(GetFetchAdvertisementCallbackCount(), 1);
auto advertisement = InstantOnLostAdvertisement::CreateFromHashes(
std::list<std::string>({std::string(advertisement_hash)}));
std::list<std::string>({std::string(
bleutils::GenerateAdvertisementHash(advertisement_bytes))}));
ASSERT_OK(advertisement);
api::ble_v2::BleAdvertisementData loss_advertisement_data{};
loss_advertisement_data.service_data.insert(
@@ -1269,7 +1269,8 @@ TEST_P(DiscoveredPeripheralTrackerTest, InstantLostPeripheralForInstantOnLost) {
EXPECT_EQ(GetFetchAdvertisementCallbackCount(), 1);
auto advertisement = InstantOnLostAdvertisement::CreateFromHashes(
std::list<std::string>({std::string(advertisement_hash)}));
std::list<std::string>({std::string(
bleutils::GenerateAdvertisementHash(advertisement_bytes))}));
ASSERT_OK(advertisement);
api::ble_v2::BleAdvertisementData loss_advertisement_data{};
loss_advertisement_data.service_data.insert(
@@ -1340,7 +1341,8 @@ TEST_P(DiscoveredPeripheralTrackerTest,
CountDownLatch fetch_latch2(1);
auto advertisement = InstantOnLostAdvertisement::CreateFromHashes(
std::list<std::string>({std::string(advertisement_hash)}));
std::list<std::string>({std::string(
bleutils::GenerateAdvertisementHash(advertisement_bytes))}));
ASSERT_OK(advertisement);
api::ble_v2::BleAdvertisementData loss_advertisement_data{};
loss_advertisement_data.service_data.insert(