mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-14 22:56:12 -04:00
A small refactor to start BLE V2 advertisement
PiperOrigin-RevId: 730619310
This commit is contained in:
committed by
Copybara-Service
parent
40fe5ec318
commit
eb914ecc59
@@ -113,9 +113,9 @@ bool BleV2::IsAvailable() const {
|
||||
}
|
||||
|
||||
ErrorOr<bool> BleV2::StartAdvertising(const std::string& service_id,
|
||||
const ByteArray& advertisement_bytes,
|
||||
PowerLevel power_level,
|
||||
bool is_fast_advertisement) {
|
||||
AdvertisingType advertising_type,
|
||||
const ByteArray& advertisement_bytes) {
|
||||
MutexLock lock(&mutex_);
|
||||
|
||||
if (advertisement_bytes.Empty()) {
|
||||
@@ -157,7 +157,9 @@ ErrorOr<bool> BleV2::StartAdvertising(const std::string& service_id,
|
||||
mediums::BleAdvertisement medium_advertisement = {
|
||||
mediums::BleAdvertisement::Version::kV2,
|
||||
mediums::BleAdvertisement::SocketVersion::kV2,
|
||||
/*service_id_hash=*/is_fast_advertisement ? ByteArray{} : service_id_hash,
|
||||
/*service_id_hash=*/advertising_type == AdvertisingType::kFast
|
||||
? ByteArray{}
|
||||
: service_id_hash,
|
||||
advertisement_bytes,
|
||||
mediums::bleutils::GenerateDeviceToken(),
|
||||
psm};
|
||||
@@ -171,7 +173,8 @@ ErrorOr<bool> BleV2::StartAdvertising(const std::string& service_id,
|
||||
{service_id,
|
||||
AdvertisingInfo{.medium_advertisement = medium_advertisement,
|
||||
.power_level = power_level,
|
||||
.is_fast_advertisement = is_fast_advertisement}});
|
||||
.is_fast_advertisement =
|
||||
advertising_type == AdvertisingType::kFast}});
|
||||
|
||||
// TODO(hais): need to update here after cros support RAII StartAdvertising.
|
||||
// After all platforms support RAII StartAdvertising, then we can stop
|
||||
|
||||
@@ -60,6 +60,14 @@ class BleV2 final {
|
||||
using AcceptedConnectionCallback = absl::AnyInvocable<void(
|
||||
BleV2Socket socket, const std::string& service_id)>;
|
||||
|
||||
// The type of the BLE advertising. In current implementation, we don't
|
||||
// support multiple advertising types on a Medium instance.
|
||||
enum class AdvertisingType : int {
|
||||
kRegular = 0,
|
||||
kFast = 1,
|
||||
kDct = 2,
|
||||
};
|
||||
|
||||
explicit BleV2(BluetoothRadio& bluetooth_radio);
|
||||
~BleV2();
|
||||
|
||||
@@ -70,15 +78,14 @@ class BleV2 final {
|
||||
// supports it.
|
||||
//
|
||||
// service_id - The service ID to track.
|
||||
// power_level - The power level to use for the advertisement.
|
||||
// advertising_type - The type of the BLE advertisement.
|
||||
// advertisement_bytes - The connections BLE Advertisement used in
|
||||
// advertising.
|
||||
// power_level - The power level to use for the advertisement.
|
||||
// is_fast_advertisement - True to use fast advertisements, which are smaller
|
||||
// but much more efficient to discover.
|
||||
ErrorOr<bool> StartAdvertising(const std::string& service_id,
|
||||
const ByteArray& advertisement_bytes,
|
||||
PowerLevel power_level,
|
||||
bool is_fast_advertisement)
|
||||
AdvertisingType advertising_type,
|
||||
const ByteArray& advertisement_bytes)
|
||||
ABSL_LOCKS_EXCLUDED(mutex_);
|
||||
|
||||
// Disables BLE advertising.
|
||||
|
||||
@@ -96,9 +96,9 @@ TEST_P(BleV2Test, CanConnect) {
|
||||
accept_latch.CountDown();
|
||||
}));
|
||||
|
||||
ble_server.StartAdvertising(service_id, advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/true);
|
||||
ble_server.StartAdvertising(service_id, PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kFast,
|
||||
advertisement_bytes);
|
||||
|
||||
BleV2Peripheral discovered_peripheral;
|
||||
ble_client.StartScanning(
|
||||
@@ -156,9 +156,9 @@ TEST_P(BleV2Test, CanCancelConnect) {
|
||||
accept_latch.CountDown();
|
||||
}));
|
||||
|
||||
ble_server.StartAdvertising(service_id, advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/true);
|
||||
ble_server.StartAdvertising(service_id, PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kFast,
|
||||
advertisement_bytes);
|
||||
|
||||
BleV2Peripheral discovered_peripheral;
|
||||
ble_client.StartScanning(
|
||||
@@ -247,8 +247,8 @@ TEST_F(BleV2Test, CanStartFastAdvertising) {
|
||||
});
|
||||
|
||||
EXPECT_TRUE(ble_a.StartAdvertising(
|
||||
std::string(kServiceIDA), advertisement_bytes, PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/true));
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kFast, advertisement_bytes));
|
||||
EXPECT_TRUE(found_latch.Await(kWaitDuration).result());
|
||||
EXPECT_TRUE(ble_a.StopAdvertising(std::string(kServiceIDA)));
|
||||
ble_b.StopScanning(std::string(kServiceIDA));
|
||||
@@ -266,9 +266,8 @@ TEST_F(BleV2Test, CanStartFastScanning) {
|
||||
ByteArray advertisement_bytes((std::string(kAdvertisementString)));
|
||||
CountDownLatch found_latch(1);
|
||||
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/true);
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kFast, advertisement_bytes);
|
||||
|
||||
EXPECT_TRUE(ble_a.StartScanning(
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
@@ -314,8 +313,8 @@ TEST_F(BleV2Test, CanStartAdvertising) {
|
||||
});
|
||||
|
||||
EXPECT_TRUE(ble_a.StartAdvertising(
|
||||
std::string(kServiceIDA), advertisement_bytes, PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false));
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes));
|
||||
EXPECT_TRUE(found_latch.Await(kWaitDuration).result());
|
||||
EXPECT_TRUE(ble_a.StopAdvertising(std::string(kServiceIDA)));
|
||||
ble_b.StopScanning(std::string(kServiceIDA));
|
||||
@@ -333,9 +332,8 @@ TEST_F(BleV2Test, CanStartScanning) {
|
||||
ByteArray advertisement_bytes((std::string(kAdvertisementString)));
|
||||
CountDownLatch found_latch(1);
|
||||
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes);
|
||||
|
||||
EXPECT_TRUE(ble_a.StartScanning(
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
@@ -391,11 +389,11 @@ TEST_F(BleV2Test, DestructWorksForStartAdvertisingAndScanningWithoutStop) {
|
||||
|
||||
// Device A starts advertising with service IDA and IDB.
|
||||
EXPECT_TRUE(ble_a.StartAdvertising(
|
||||
std::string(kServiceIDA), advertisement_bytes, PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/true));
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kFast, advertisement_bytes));
|
||||
EXPECT_TRUE(ble_a.StartAdvertising(
|
||||
std::string(kServiceIDB), advertisement_bytes, PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/true));
|
||||
std::string(kServiceIDB), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kFast, advertisement_bytes));
|
||||
|
||||
// Device B starts scanning with service IDA and IDB
|
||||
EXPECT_TRUE(ble_b.StartScanning(std::string(kServiceIDA),
|
||||
@@ -419,9 +417,8 @@ TEST_F(BleV2Test, StartFastScanningDiscoverAndLostPeripheral) {
|
||||
CountDownLatch found_latch(1);
|
||||
CountDownLatch lost_latch(1);
|
||||
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/true);
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kFast, advertisement_bytes);
|
||||
|
||||
ble_a.StartScanning(
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
@@ -468,9 +465,8 @@ TEST_F(BleV2Test,
|
||||
CountDownLatch found_latch(1);
|
||||
CountDownLatch lost_latch(1);
|
||||
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/true);
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kFast, advertisement_bytes);
|
||||
|
||||
ble_a.StartScanning(
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
@@ -514,9 +510,8 @@ TEST_F(BleV2Test, StartScanningDiscoverAndLostPeripheral) {
|
||||
CountDownLatch found_latch(1);
|
||||
CountDownLatch lost_latch(1);
|
||||
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes);
|
||||
|
||||
ble_a.StartScanning(
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
@@ -562,9 +557,8 @@ TEST_F(BleV2Test, StartScanningDiscoverButNoPeripheralLostAfterStopScanning) {
|
||||
CountDownLatch found_latch(1);
|
||||
CountDownLatch lost_latch(1);
|
||||
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes);
|
||||
|
||||
ble_a.StartScanning(
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
@@ -650,9 +644,8 @@ TEST_F(BleV2Test, StartLegacyAdvertisingNotBlockedByRegularAdvertising) {
|
||||
std::string service_id(kServiceIDA);
|
||||
ByteArray advertisement_bytes((std::string(kAdvertisementString)));
|
||||
|
||||
ble_a.StartAdvertising(std::string(kServiceIDA), advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
ble_a.StartAdvertising(std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes);
|
||||
EXPECT_TRUE(ble_a.IsAdvertising(service_id));
|
||||
EXPECT_TRUE(
|
||||
ble_a.StartLegacyAdvertising(service_id, std::string(kLocalEndpointId),
|
||||
@@ -732,9 +725,8 @@ TEST_F(BleV2Test, CanStartAsyncScanning) {
|
||||
ByteArray advertisement_bytes((std::string(kAdvertisementString)));
|
||||
CountDownLatch found_latch(1);
|
||||
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes);
|
||||
|
||||
EXPECT_TRUE(ble_a.StartScanning(
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
@@ -767,9 +759,8 @@ TEST_F(BleV2Test, StartAsyncScanningWithPlatformErrors) {
|
||||
ByteArray advertisement_bytes((std::string(kAdvertisementString)));
|
||||
CountDownLatch found_latch(1);
|
||||
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes);
|
||||
|
||||
// Disable radio a to simulate platform error.
|
||||
radio_a.Disable();
|
||||
@@ -823,9 +814,8 @@ TEST_F(BleV2Test, StartAsyncScanningDiscoverAndLostPeripheral) {
|
||||
CountDownLatch found_latch(1);
|
||||
CountDownLatch lost_latch(1);
|
||||
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes);
|
||||
|
||||
EXPECT_TRUE(ble_a.StartScanning(
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
@@ -872,9 +862,8 @@ TEST_F(BleV2Test,
|
||||
CountDownLatch found_latch(1);
|
||||
CountDownLatch lost_latch(1);
|
||||
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), advertisement_bytes,
|
||||
PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
ble_b.StartAdvertising(std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes);
|
||||
|
||||
EXPECT_TRUE(ble_a.StartScanning(
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
@@ -924,11 +913,11 @@ TEST_F(BleV2Test, CanStartStopMultipleAsyncScanningWithDifferentServiceIds) {
|
||||
CountDownLatch found_latch_b(1);
|
||||
|
||||
ble_advertiser_a.StartAdvertising(
|
||||
std::string(kServiceIDA), advertisement_bytes_a, PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes_a);
|
||||
ble_advertiser_b.StartAdvertising(
|
||||
std::string(kServiceIDB), advertisement_bytes_b, PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
std::string(kServiceIDB), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes_b);
|
||||
|
||||
ble_scanner.StartScanning(
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
@@ -985,11 +974,11 @@ TEST_F(BleV2Test, StartMultipleAsyncScanningDiscoverAndLostPeripheral) {
|
||||
CountDownLatch lost_latch_b(1);
|
||||
|
||||
ble_advertiser_a.StartAdvertising(
|
||||
std::string(kServiceIDA), advertisement_bytes_a, PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes_a);
|
||||
ble_advertiser_b.StartAdvertising(
|
||||
std::string(kServiceIDB), advertisement_bytes_b, PowerLevel::kHighPower,
|
||||
/*is_fast_advertisement=*/false);
|
||||
std::string(kServiceIDB), PowerLevel::kHighPower,
|
||||
BleV2::AdvertisingType::kRegular, advertisement_bytes_b);
|
||||
|
||||
ble_scanner.StartScanning(
|
||||
std::string(kServiceIDA), PowerLevel::kHighPower,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user