Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ecdea713 authored by Jakub Pawlowski's avatar Jakub Pawlowski Committed by Andre Eisenbach
Browse files

Unify advertising API (1/3)

This patch unifies advertising API. On startup, if VSC multi advertising
is avaliable, it will be used, otherwise
BleAdvertiserLegacyHciInterfaceImpl will be used, which provides one
advertising instance.

Test: sl4a tests are passing, all proper tests updated accordingly
Change-Id: I73753962e3a33a980e8a9a1174c8d88611a47e6b
parent 95caef49
Loading
Loading
Loading
Loading
+17 −58
Original line number Diff line number Diff line
@@ -69,15 +69,14 @@ int8_t ble_map_adv_tx_power(int tx_power_index) {
  return 0;
}

void bta_adv_set_data_cback(tBTA_STATUS call_status) {}

class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface {
  ~BleAdvertiserInterfaceImpl(){};

  void RegisterAdvertiserCb(
      base::Callback<void(uint8_t /* adv_id */, uint8_t /* status */)> cb,
      uint8_t advertiser_id, uint8_t status) {
    LOG(INFO) << __func__ << " status: " << +status << " , adveriser_id: " << +advertiser_id;
    LOG(INFO) << __func__ << " status: " << +status
              << " , adveriser_id: " << +advertiser_id;
    do_in_jni_thread(Bind(cb, advertiser_id, status));
  }

@@ -98,54 +97,14 @@ class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface {
             base::Unretained(BleAdvertisingManager::Get()), advertiser_id));
  }

  void SetData(bool set_scan_rsp, vector<uint8_t> data) override {
    uint8_t* data_ptr = nullptr;
    if (data.size()) {
      // base::Owned will free this ptr
      data_ptr = new uint8_t[data.size()];
      memcpy(data_ptr, data.data(), data.size());
    }

    if (!set_scan_rsp) {
      if (data_ptr) {
        do_in_bta_thread(FROM_HERE,
                         Bind(&BTM_BleWriteAdvData, OwnedArray(data_ptr),
                              data.size(), bta_adv_set_data_cback));
      } else {
        do_in_bta_thread(FROM_HERE, Bind(&BTM_BleWriteAdvData, nullptr,
                                         data.size(), bta_adv_set_data_cback));
      }
    } else {
      if (data_ptr) {
        do_in_bta_thread(FROM_HERE,
                         Bind(&BTM_BleWriteScanRsp, OwnedArray(data_ptr),
                              data.size(), bta_adv_set_data_cback));
      } else {
        do_in_bta_thread(FROM_HERE, Bind(&BTM_BleWriteScanRsp, nullptr,
                                         data.size(), bta_adv_set_data_cback));
      }
    }
  }

  void EnableCb(BleAdvertiserCb cb, uint8_t status) {
    LOG(INFO) << __func__ << " status: " << +status;
    do_in_jni_thread(Bind(cb, status));
  }

  void Enable(bool start, BleAdvertiserCb cb) override {
    do_in_jni_thread(Bind(&GATT_Listen, start));
    cb.Run(BT_STATUS_SUCCESS);
  }

  void MultiAdvSetParametersCb(BleAdvertiserCb cb, uint8_t status) {
  void SetParametersCb(Callback cb, uint8_t status) {
    LOG(INFO) << __func__ << " status: " << +status;
    do_in_jni_thread(Bind(cb, status));
  }

  virtual void MultiAdvSetParameters(int advertiser_id, int min_interval,
                                     int max_interval, int adv_type,
                                     int chnl_map, int tx_power,
                                     BleAdvertiserCb cb) {
  virtual void SetParameters(int advertiser_id, int min_interval,
                             int max_interval, int adv_type, int chnl_map,
                             int tx_power, Callback cb) {
    tBTM_BLE_ADV_PARAMS* params = new tBTM_BLE_ADV_PARAMS;
    params->adv_int_min = min_interval;
    params->adv_int_max = max_interval;
@@ -159,35 +118,35 @@ class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface {
        Bind(&BleAdvertisingManager::SetParameters,
             base::Unretained(BleAdvertisingManager::Get()), advertiser_id,
             base::Owned(params),
             Bind(&BleAdvertiserInterfaceImpl::MultiAdvSetParametersCb,
             Bind(&BleAdvertiserInterfaceImpl::SetParametersCb,
                  base::Unretained(this), cb)));
  }

  void MultiAdvSetInstDataCb(BleAdvertiserCb cb, uint8_t advertiser_id,
  void SetDataCb(Callback cb, uint8_t advertiser_id,
                             uint8_t status) {
    do_in_jni_thread(Bind(cb, status));
  }

  void MultiAdvSetInstData(int advertiser_id, bool set_scan_rsp,
                           vector<uint8_t> data, BleAdvertiserCb cb) override {
  void SetData(int advertiser_id, bool set_scan_rsp, vector<uint8_t> data,
               Callback cb) override {
    do_in_bta_thread(
        FROM_HERE, Bind(&BleAdvertisingManager::SetData,
                        base::Unretained(BleAdvertisingManager::Get()),
                        advertiser_id, set_scan_rsp, std::move(data),
                        Bind(&BleAdvertiserInterfaceImpl::MultiAdvSetInstDataCb,
                        Bind(&BleAdvertiserInterfaceImpl::SetDataCb,
                             base::Unretained(this), cb, advertiser_id)));
  }

  void MultiAdvEnableTimeoutCb(BleAdvertiserCb cb, uint8_t status) {
  void EnableTimeoutCb(Callback cb, uint8_t status) {
    do_in_jni_thread(Bind(cb, status));
  }

  void MultiAdvEnableCb(BleAdvertiserCb cb, uint8_t status) {
  void EnableCb(Callback cb, uint8_t status) {
    do_in_jni_thread(Bind(cb, status));
  }

  void MultiAdvEnable(uint8_t advertiser_id, bool enable, BleAdvertiserCb cb,
                      int timeout_s, BleAdvertiserCb timeout_cb) override {
  void Enable(uint8_t advertiser_id, bool enable, Callback cb,
              int timeout_s, Callback timeout_cb) override {
    VLOG(1) << __func__ << " advertiser_id: " << +advertiser_id
            << " ,enable: " << enable;

@@ -195,10 +154,10 @@ class BleAdvertiserInterfaceImpl : public BleAdvertiserInterface {
        FROM_HERE,
        Bind(&BleAdvertisingManager::Enable,
             base::Unretained(BleAdvertisingManager::Get()), advertiser_id,
             enable, Bind(&BleAdvertiserInterfaceImpl::MultiAdvEnableCb,
             enable, Bind(&BleAdvertiserInterfaceImpl::EnableCb,
                          base::Unretained(this), cb),
             timeout_s,
             Bind(&BleAdvertiserInterfaceImpl::MultiAdvEnableTimeoutCb,
             Bind(&BleAdvertiserInterfaceImpl::EnableTimeoutCb,
                  base::Unretained(this), timeout_cb)));
  }
};
+12 −9
Original line number Diff line number Diff line
@@ -77,6 +77,8 @@ enum { kPipeReadEnd = 0, kPipeWriteEnd = 1, kPipeNumEnds = 2 };

}  // namespace

void DoNothing(uint8_t p) {}

namespace bluetooth {
namespace gatt {

@@ -349,12 +351,13 @@ void RegisterClientCallback(int status, int client_if, bt_uuid_t *app_uuid) {
  g_internal->client_if = client_if;

  // Setup our advertisement. This has no callback.
  g_internal->gatt->advertiser->SetData(false, {/*TODO: put inverval 2,2 here*/});
  g_internal->gatt->advertiser->SetData(0 /* std_inst */, false,
                                        {/*TODO: put inverval 2,2 here*/},
                                        base::Bind(&DoNothing));

  // TODO(icoolidge): Deprecated, use multi-adv interface.
  // This calls back to EnableAdvertisingCallback.
  g_internal->gatt->advertiser->Enable(true,
                                       base::Bind(&EnableAdvertisingCallback));
  g_internal->gatt->advertiser->Enable(
      0 /* std_inst */, true, base::Bind(&EnableAdvertisingCallback),
      0 /* no timeout */, base::Bind(&DoNothing));
}

void RegisterScannerCallback(int status, int scanner_id, bt_uuid_t *app_uuid) {
@@ -585,9 +588,9 @@ bool Server::SetAdvertisement(const std::vector<UUID>& ids,
  std::lock_guard<std::mutex> lock(internal_->lock);

  // Setup our advertisement. This has no callback.
  internal_->gatt->advertiser->SetData(
  internal_->gatt->advertiser->SetData(0,
      false, /* beacon, not scan response */
      {});
      {}, base::Bind(&DoNothing));
      // transmit_name,               /* name */
      // 2, 2,                         interval 
      // mutable_manufacturer_data,
@@ -612,9 +615,9 @@ bool Server::SetScanResponse(const std::vector<UUID>& ids,
  std::lock_guard<std::mutex> lock(internal_->lock);

  // Setup our advertisement. This has no callback.
  internal_->gatt->advertiser->SetData(
  internal_->gatt->advertiser->SetData(0,
      true, /* scan response */
      {});
      {}, base::Bind(&DoNothing));
      // transmit_name,              /* name */
      // false,                      /* no txpower */
      // 2, 2,                        interval 
+16 −17
Original line number Diff line number Diff line
@@ -116,7 +116,7 @@ LowEnergyAdvertiser::~LowEnergyAdvertiser() {

  // Stop advertising and ignore the result.
  hal::BluetoothGattInterface::Get()->
      GetAdvertiserHALInterface()->MultiAdvEnable(advertiser_id_, false, base::Bind(&DoNothing), 0, base::Bind(&DoNothing));
      GetAdvertiserHALInterface()->Enable(advertiser_id_, false, base::Bind(&DoNothing), 0, base::Bind(&DoNothing));
  hal::BluetoothGattInterface::Get()->
      GetAdvertiserHALInterface()->Unregister(advertiser_id_);
}
@@ -159,14 +159,14 @@ bool LowEnergyAdvertiser::StartAdvertising(const AdvertiseSettings& settings,
  GetAdvertiseParams(settings, !scan_response_.data().empty(), &params);

  hal::BluetoothGattInterface::Get()->
      GetAdvertiserHALInterface()->MultiAdvSetParameters(
      GetAdvertiserHALInterface()->SetParameters(
          advertiser_id_,
          params.min_interval,
          params.max_interval,
          params.event_type,
          kAdvertisingChannelAll,
          params.tx_power_level,
          base::Bind(&LowEnergyAdvertiser::MultiAdvSetParamsCallback, base::Unretained(this), advertiser_id_));
          base::Bind(&LowEnergyAdvertiser::SetParamsCallback, base::Unretained(this), advertiser_id_));

  // Always update advertising data.
  adv_data_needs_update_ = true;
@@ -200,11 +200,11 @@ bool LowEnergyAdvertiser::StopAdvertising(const StatusCallback& callback) {

  hal::BluetoothGattInterface::Get()
      ->GetAdvertiserHALInterface()
      ->MultiAdvEnable(
      ->Enable(
          advertiser_id_, false,
          base::Bind(&LowEnergyAdvertiser::MultiAdvEnableCallback,
          base::Bind(&LowEnergyAdvertiser::EnableCallback,
                     base::Unretained(this), false, advertiser_id_),
          0, base::Bind(&LowEnergyAdvertiser::MultiAdvEnableCallback,
          0, base::Bind(&LowEnergyAdvertiser::EnableCallback,
                        base::Unretained(this), false, advertiser_id_));

  // OK to set this at the end since we're still holding |adv_fields_lock_|.
@@ -264,16 +264,16 @@ void LowEnergyAdvertiser::HandleDeferredAdvertiseData() {

  hal::BluetoothGattInterface::Get()
      ->GetAdvertiserHALInterface()
      ->MultiAdvEnable(
      ->Enable(
          advertiser_id_, true,
          base::Bind(&LowEnergyAdvertiser::MultiAdvEnableCallback,
          base::Bind(&LowEnergyAdvertiser::EnableCallback,
                     base::Unretained(this), true, advertiser_id_),
          params.timeout_s,
          base::Bind(&LowEnergyAdvertiser::MultiAdvEnableCallback,
          base::Bind(&LowEnergyAdvertiser::EnableCallback,
                     base::Unretained(this), false, advertiser_id_));
}

void LowEnergyAdvertiser::MultiAdvSetParamsCallback(
void LowEnergyAdvertiser::SetParamsCallback(
    uint8_t advertiser_id, uint8_t status) {
  if (advertiser_id != advertiser_id_)
    return;
@@ -293,7 +293,7 @@ void LowEnergyAdvertiser::MultiAdvSetParamsCallback(
  HandleDeferredAdvertiseData();
}

void LowEnergyAdvertiser::MultiAdvDataCallback(
void LowEnergyAdvertiser::SetDataCallback(
    uint8_t advertiser_id, uint8_t status) {
  if (advertiser_id != advertiser_id_)
    return;
@@ -315,7 +315,7 @@ void LowEnergyAdvertiser::MultiAdvDataCallback(
  HandleDeferredAdvertiseData();
}

void LowEnergyAdvertiser::MultiAdvEnableCallback(
void LowEnergyAdvertiser::EnableCallback(
    bool enable, uint8_t advertiser_id, uint8_t status) {
  if (advertiser_id != advertiser_id_)
    return;
@@ -370,11 +370,10 @@ bt_status_t LowEnergyAdvertiser::SetAdvertiseData(
  // integers so a call to std::vector::size might get capped. This is very
  // unlikely anyway but it's safer to stop using signed-integer types for
  // length in APIs, so we should change that.
  hal::BluetoothGattInterface::Get()
      ->GetAdvertiserHALInterface()
      ->MultiAdvSetInstData(
  hal::BluetoothGattInterface::Get()->GetAdvertiserHALInterface()->SetData(
      advertiser_id_, set_scan_rsp, data.data(),
          base::Bind(&LowEnergyAdvertiser::MultiAdvDataCallback, base::Unretained(this), advertiser_id_));
      base::Bind(&LowEnergyAdvertiser::SetDataCallback,
                 base::Unretained(this), advertiser_id_));

  if (set_scan_rsp)
    scan_rsp_needs_update_ = false;
+3 −3
Original line number Diff line number Diff line
@@ -87,11 +87,11 @@ class LowEnergyAdvertiser : public BluetoothInstance {
  LowEnergyAdvertiser(const UUID& uuid, int advertiser_id);

  // BluetoothGattInterface::AdvertiserObserver overrides:
  void MultiAdvDataCallback(
  void SetDataCallback(
      uint8_t advertiser_id, uint8_t status);
  void MultiAdvSetParamsCallback(
  void SetParamsCallback(
      uint8_t advertiser_id, uint8_t status);
  void MultiAdvEnableCallback(
  void EnableCallback(
      bool enable, uint8_t advertiser_id, uint8_t status);

  // Helper method called from SetAdvertiseData/SetScanResponse.
+33 −39
Original line number Diff line number Diff line
@@ -49,19 +49,13 @@ class MockAdvertiserHandler : public BleAdvertiserInterface {
               void(base::Callback<void(uint8_t /* advertiser_id */,
                                        uint8_t /* status */)>));
  MOCK_METHOD1(Unregister, void(uint8_t));

  MOCK_METHOD2(SetData, void(bool set_scan_rsp, vector<uint8_t> data));
  MOCK_METHOD2(Enable, void(bool enablle, BleAdvertiserCb cb));
  MOCK_METHOD7(MultiAdvSetParameters,
  MOCK_METHOD7(SetParameters,
               void(int advertiser_id, int min_interval, int max_interval,
                    int adv_type, int chnl_map, int tx_power,
                    BleAdvertiserCb cb));
  MOCK_METHOD4(MultiAdvSetInstData,
               void(int advertiser_id, bool set_scan_rsp, vector<uint8_t> data,
                    BleAdvertiserCb cb));
  MOCK_METHOD5(MultiAdvEnable,
               void(uint8_t advertiser_id, bool enable, BleAdvertiserCb cb,
                    int timeout_s, BleAdvertiserCb timeout_cb));
                    int adv_type, int chnl_map, int tx_power, Callback cb));
  MOCK_METHOD4(SetData, void(int advertiser_id, bool set_scan_rsp,
                             vector<uint8_t> data, Callback cb));
  MOCK_METHOD5(Enable, void(uint8_t advertiser_id, bool enable, Callback cb,
                            int timeout_s, Callback timeout_cb));

 private:
  DISALLOW_COPY_AND_ASSIGN(MockAdvertiserHandler);
@@ -110,7 +104,7 @@ class LowEnergyAdvertiserPostRegisterTest : public LowEnergyAdvertiserTest {
  }

  void TearDown() override {
    EXPECT_CALL(*mock_handler_, MultiAdvEnable(_, false, _, _, _)).Times(1);
    EXPECT_CALL(*mock_handler_, Enable(_, false, _, _, _)).Times(1);
    EXPECT_CALL(*mock_handler_, Unregister(_)).Times(1);
    le_advertiser_.reset();
    LowEnergyAdvertiserTest::TearDown();
@@ -147,15 +141,15 @@ class LowEnergyAdvertiserPostRegisterTest : public LowEnergyAdvertiserTest {
    ASSERT_FALSE(le_advertiser_->IsStoppingAdvertising());

    status_cb set_params_cb;
    EXPECT_CALL(*mock_handler_, MultiAdvSetParameters(_, _, _, _, _, _, _))
    EXPECT_CALL(*mock_handler_, SetParameters(_, _, _, _, _, _, _))
        .Times(1)
        .WillOnce(SaveArg<6>(&set_params_cb));
    status_cb set_data_cb;
    EXPECT_CALL(*mock_handler_, MultiAdvSetInstData(_, _, _, _))
    EXPECT_CALL(*mock_handler_, SetData(_, _, _, _))
        .Times(1)
        .WillOnce(SaveArg<3>(&set_data_cb));
    status_cb enable_cb;
    EXPECT_CALL(*mock_handler_, MultiAdvEnable(_, true, _, _, _))
    EXPECT_CALL(*mock_handler_, Enable(_, true, _, _, _))
        .Times(1)
        .WillOnce(SaveArg<2>(&enable_cb));

@@ -180,12 +174,12 @@ class LowEnergyAdvertiserPostRegisterTest : public LowEnergyAdvertiserTest {
    LOG_ASSERT(set_data_cb) << "set_data_cb must be set";

    status_cb set_params_cb;
    EXPECT_CALL(*mock_handler_, MultiAdvSetParameters(_, _, _, _, _, _, _))
    EXPECT_CALL(*mock_handler_, SetParameters(_, _, _, _, _, _, _))
        .Times(1)
        .WillOnce(SaveArg<6>(&set_params_cb));

    status_cb enable_cb;
    EXPECT_CALL(*mock_handler_, MultiAdvEnable(_, true, _, _, _))
    EXPECT_CALL(*mock_handler_, Enable(_, true, _, _, _))
        .Times(1)
        .WillOnce(SaveArg<2>(&enable_cb));

@@ -197,7 +191,7 @@ class LowEnergyAdvertiserPostRegisterTest : public LowEnergyAdvertiserTest {
    enable_cb.Run(BT_STATUS_SUCCESS);

    status_cb disable_cb;
    EXPECT_CALL(*mock_handler_, MultiAdvEnable(_, false, _, _, _))
    EXPECT_CALL(*mock_handler_, Enable(_, false, _, _, _))
        .Times(1)
        .WillOnce(SaveArg<2>(&disable_cb));

@@ -268,7 +262,7 @@ TEST_F(LowEnergyAdvertiserTest, RegisterInstance) {
  EXPECT_EQ(uuid0, cb_uuid);

  // The advertiser should unregister itself when deleted.
  EXPECT_CALL(*mock_handler_, MultiAdvEnable(client_if0, false, _, _, _))
  EXPECT_CALL(*mock_handler_, Enable(client_if0, false, _, _, _))
      .Times(1);
  EXPECT_CALL(*mock_handler_, Unregister(client_if0))
      .Times(1);
@@ -301,7 +295,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, StartAdvertisingBasic) {
  };

  status_cb set_params_cb;
  EXPECT_CALL(*mock_handler_, MultiAdvSetParameters(_, _, _, _, _, _, _))
  EXPECT_CALL(*mock_handler_, SetParameters(_, _, _, _, _, _, _))
      .Times(3)
      .WillRepeatedly(SaveArg<6>(&set_params_cb));

@@ -337,7 +331,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, StartAdvertisingBasic) {

  // Success notification should trigger advertise data update.
  status_cb set_data_cb;
  EXPECT_CALL(*mock_handler_, MultiAdvSetInstData(_, false, /* set_scan_rsp */
  EXPECT_CALL(*mock_handler_, SetData(_, false, /* set_scan_rsp */
                                                  _, _))
      .Times(2)
      .WillRepeatedly(SaveArg<3>(&set_data_cb));
@@ -367,7 +361,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, StartAdvertisingBasic) {
  EXPECT_EQ(2, callback_count);

  status_cb enable_cb;
  EXPECT_CALL(*mock_handler_, MultiAdvEnable(_, true, _, _, _))
  EXPECT_CALL(*mock_handler_, Enable(_, true, _, _, _))
      .Times(1)
      .WillOnce(SaveArg<2>(&enable_cb));

@@ -403,7 +397,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, StopAdvertisingBasic) {
  };

  status_cb enable_cb;
  EXPECT_CALL(*mock_handler_, MultiAdvEnable(_, false, _, _, _))
  EXPECT_CALL(*mock_handler_, Enable(_, false, _, _, _))
      .Times(2)
      .WillRepeatedly(SaveArg<2>(&enable_cb));

@@ -468,7 +462,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, InvalidAdvertiseData) {
  const std::vector<uint8_t> data2{ 0x01, HCI_EIR_MANUFACTURER_SPECIFIC_TYPE };
  AdvertiseData invalid_mfc(data2);

  EXPECT_CALL(*mock_handler_, MultiAdvSetParameters(_, _, _, _, _, _, _))
  EXPECT_CALL(*mock_handler_, SetParameters(_, _, _, _, _, _, _))
      .Times(1);
  EXPECT_TRUE(le_advertiser_->StartAdvertising(
      settings, invalid_mfc, valid_adv, LowEnergyAdvertiser::StatusCallback()));
@@ -503,7 +497,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, ScanResponse) {

  status_cb set_params_cb;
  EXPECT_CALL(*mock_handler_,
              MultiAdvSetParameters(le_advertiser_->GetInstanceId(), _, _,
              SetParameters(le_advertiser_->GetInstanceId(), _, _,
                             kAdvertisingEventTypeScannable,
                             _, _, _))
      .Times(2)
@@ -511,14 +505,14 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, ScanResponse) {
  status_cb set_adv_data_cb;
  EXPECT_CALL(
      *mock_handler_,
      MultiAdvSetInstData(_,
      SetData(_,
          false,  // set_scan_rsp
          _, _))
      .Times(2)
      .WillRepeatedly(SaveArg<3>(&set_adv_data_cb));
  status_cb set_scan_rsp_cb;
  EXPECT_CALL(*mock_handler_,
              MultiAdvSetInstData(_, true /* set_scan_rsp */, _, _))
              SetData(_, true /* set_scan_rsp */, _, _))
      .Times(2)
      .WillRepeatedly(SaveArg<3>(&set_scan_rsp_cb));

@@ -534,7 +528,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, ScanResponse) {

  status_cb enable_cb;
  EXPECT_CALL(*mock_handler_,
              MultiAdvEnable(le_advertiser_->GetInstanceId(), true, _, _, _))
              Enable(le_advertiser_->GetInstanceId(), true, _, _, _))
      .Times(1)
      .WillOnce(SaveArg<2>(&enable_cb));

@@ -627,7 +621,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, AdvertiseDataParsing) {

  status_cb set_data_cb;
  // Multiple UUID test
  EXPECT_CALL(*mock_handler_, MultiAdvSetInstData(_, _, _, _))
  EXPECT_CALL(*mock_handler_, SetData(_, _, _, _))
            .Times(1)
      .WillOnce(SaveArg<3>(&set_data_cb));
  AdvertiseDataTestHelper(multi_uuid_adv, callback, &set_data_cb);
@@ -635,7 +629,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, AdvertiseDataParsing) {
  ::testing::Mock::VerifyAndClearExpectations(mock_handler_.get());

  // Multiple Service Data test
  EXPECT_CALL(*mock_handler_, MultiAdvSetInstData(_, _, _, _))
  EXPECT_CALL(*mock_handler_, SetData(_, _, _, _))
            .Times(1)
      .WillOnce(SaveArg<3>(&set_data_cb));
  AdvertiseDataTestHelper(multi_service_adv, callback, &set_data_cb);
@@ -648,7 +642,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, AdvertiseDataParsing) {
      0xFB, 0x34, 0x9b, 0x5F, 0x80, 0x00, 0x00, 0x80,
      0x00, 0x10, 0x00, 0x00, 0xDE, 0xAD, 0x00, 0x00};
  EXPECT_CALL(*mock_handler_,
              MultiAdvSetInstData(_, _, _, _))
              SetData(_, _, _, _))
      .Times(1)
      .WillOnce(SaveArg<3>(&set_data_cb));
  AdvertiseDataTestHelper(uuid_16bit_adv, callback, &set_data_cb);
@@ -661,7 +655,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, AdvertiseDataParsing) {
    0xDE, 0xAD, 0x01, 0x02
  };
  EXPECT_CALL(*mock_handler_,
              MultiAdvSetInstData(_, _, _, _))
              SetData(_, _, _, _))
      .Times(1)
      .WillOnce(SaveArg<3>(&set_data_cb));
  AdvertiseDataTestHelper(uuid_32bit_adv, callback, &set_data_cb);
@@ -674,7 +668,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, AdvertiseDataParsing) {
    0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E
  };
  EXPECT_CALL(*mock_handler_,
              MultiAdvSetInstData(_, _, _, _))
              SetData(_, _, _, _))
      .Times(1)
      .WillOnce(SaveArg<3>(&set_data_cb));
  AdvertiseDataTestHelper(uuid_128bit_adv, callback, &set_data_cb);
@@ -686,7 +680,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, AdvertiseDataParsing) {
  // Service data with 16bit uuid included, should succeed with
  // uuid and service data parsed out
  EXPECT_CALL(*mock_handler_,
              MultiAdvSetInstData(_, _, _, _))
              SetData(_, _, _, _))
      .Times(1)
      .WillOnce(SaveArg<3>(&set_data_cb));
  AdvertiseDataTestHelper(service_16bit_adv, callback, &set_data_cb);
@@ -696,7 +690,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, AdvertiseDataParsing) {
  // Service data with 32bit uuid included, should succeed with
  // uuid and service data parsed out
  EXPECT_CALL(*mock_handler_,
              MultiAdvSetInstData(_, _, _, _))
              SetData(_, _, _, _))
      .Times(1)
      .WillOnce(SaveArg<3>(&set_data_cb));
  AdvertiseDataTestHelper(service_32bit_adv, callback, &set_data_cb);
@@ -705,7 +699,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, AdvertiseDataParsing) {

  // Service data with 128bit uuid included, should succeed with
  // uuid and service data parsed out
  EXPECT_CALL(*mock_handler_, MultiAdvSetInstData(_, _, _, _))
  EXPECT_CALL(*mock_handler_, SetData(_, _, _, _))
      .Times(1)
      .WillOnce(SaveArg<3>(&set_data_cb));
  AdvertiseDataTestHelper(service_128bit_adv, callback, &set_data_cb);
@@ -713,7 +707,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, AdvertiseDataParsing) {
  ::testing::Mock::VerifyAndClearExpectations(mock_handler_.get());

  // Service data and UUID where the UUID for both match, should succeed.
  EXPECT_CALL(*mock_handler_, MultiAdvSetInstData(_, _, _, _))
  EXPECT_CALL(*mock_handler_, SetData(_, _, _, _))
      .Times(1)
      .WillOnce(SaveArg<3>(&set_data_cb));
  AdvertiseDataTestHelper(service_uuid_match, callback, &set_data_cb);
@@ -721,7 +715,7 @@ TEST_F(LowEnergyAdvertiserPostRegisterTest, AdvertiseDataParsing) {
  ::testing::Mock::VerifyAndClearExpectations(mock_handler_.get());

  // Service data and UUID where the UUID for dont match, should fail
  EXPECT_CALL(*mock_handler_, MultiAdvSetInstData(_, _, _, _))
  EXPECT_CALL(*mock_handler_, SetData(_, _, _, _))
      .Times(1)
      .WillOnce(SaveArg<3>(&set_data_cb));
  AdvertiseDataTestHelper(service_uuid_match, callback, &set_data_cb);
Loading