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

Commit 25dca882 authored by Łukasz Rymanowski's avatar Łukasz Rymanowski Committed by Automerger Merge Worker
Browse files

Merge "csis: Use opportunistic connect when bonded" into main am: 958dd017

parents 56855ea2 958dd017
Loading
Loading
Loading
Loading
+16 −27
Original line number Diff line number Diff line
@@ -259,8 +259,6 @@ class CsisClientImpl : public CsisClient {
  void Disconnect(const RawAddress& addr) override {
    LOG_DEBUG("%s ", ADDRESS_TO_LOGGABLE_CSTR(addr));

    btif_storage_set_csis_autoconnect(addr, false);

    auto device = FindDeviceByAddress(addr);
    if (device == nullptr) {
      LOG_WARN("Device not connected to profile %s",
@@ -656,17 +654,26 @@ class CsisClientImpl : public CsisClient {
    return group_rank_map;
  }

  void AddFromStorage(const RawAddress& addr, const std::vector<uint8_t>& in,
                      bool autoconnect) {
  void StartOpportunisticConnect(const RawAddress& address) {
    /* Oportunistic works only for direct connect,
     * but in fact this is background connect
     */
    LOG_INFO(": %s ", ADDRESS_TO_LOGGABLE_CSTR(address));
    BTA_GATTC_Open(gatt_if_, address, BTM_BLE_DIRECT_CONNECTION, true);
  }

  void AddFromStorage(const RawAddress& addr, const std::vector<uint8_t>& in) {
    auto group_rank_map = DeserializeSets(addr, in);

    LOG_DEBUG(" %s, number of groups %d", ADDRESS_TO_LOGGABLE_CSTR(addr),
              static_cast<int>(csis_groups_.size()));

    auto device = FindDeviceByAddress(addr);
    if (device == nullptr) {
      device = std::make_shared<CsisDevice>(addr, false);
      devices_.push_back(device);
    }

    bool is_le_audio_device = false;
    for (const auto& csis_group : csis_groups_) {
      if (!csis_group->IsDeviceInTheGroup(device)) continue;

@@ -680,21 +687,11 @@ class CsisClientImpl : public CsisClient {
        callbacks_->OnDeviceAvailable(device->addr, group_id,
                                      csis_group->GetDesiredSize(), rank,
                                      csis_group->GetUuid());

        if (csis_group->GetUuid() ==
            bluetooth::Uuid::From16Bit(UUID_COMMON_AUDIO_SERVICE)) {
          is_le_audio_device = true;
      }
    }
    }

    /* For now, if this is LeAudio device, CSIP is opportunistic profile. */
    bool is_opportunistic = is_le_audio_device;

    if (autoconnect) {
      BTA_GATTC_Open(gatt_if_, addr, BTM_BLE_BKG_CONNECT_ALLOW_LIST,
                     is_opportunistic);
    }
    /* For bonded devices, CSIP can be always opportunistic service */
    StartOpportunisticConnect(addr);
  }

  void CleanUp() {
@@ -913,11 +910,6 @@ class CsisClientImpl : public CsisClient {
        }
      }
    }

    if (device->first_connection) {
      device->first_connection = false;
      btif_storage_set_csis_autoconnect(device->addr, true);
    }
  }

  void OnGattWriteCcc(uint16_t conn_id, tGATT_STATUS status, uint16_t handle,
@@ -2140,7 +2132,6 @@ class CsisClientImpl : public CsisClient {
    if (device->is_gatt_service_valid) {
      instance->OnEncrypted(device);
    } else {
      device->first_connection = true;
      BTA_GATTC_ServiceSearchRequest(device->conn_id, &kCsisServiceUuid);
    }
  }
@@ -2155,7 +2146,6 @@ class CsisClientImpl : public CsisClient {

    /* Invalidate service discovery results */
    BtaGattQueue::Clean(device->conn_id);
    device->first_connection = true;
    DeregisterNotifications(device);
    device->ClearSvcData();
    BTA_GATTC_ServiceSearchRequest(device->conn_id, &kCsisServiceUuid);
@@ -2407,14 +2397,13 @@ CsisClient* CsisClient::Get(void) {
}

void CsisClient::AddFromStorage(const RawAddress& addr,
                                const std::vector<uint8_t>& in,
                                bool autoconnect) {
                                const std::vector<uint8_t>& in) {
  if (!instance) {
    LOG_ERROR("Not initialized yet!");
    return;
  }

  instance->AddFromStorage(addr, in, autoconnect);
  instance->AddFromStorage(addr, in);
}

bool CsisClient::GetForStorage(const RawAddress& addr,
+2 −8
Original line number Diff line number Diff line
@@ -554,12 +554,8 @@ class CsisClientTest : public ::testing::Test {
    EXPECT_CALL(*callbacks, OnDeviceAvailable(address, _, _, _, _))
        .Times(AtLeast(1));

    /* In testing only whe set info is empty, there is no CAP context. */
    bool is_opportunistic = (storage_buf.size() != 0);

    EXPECT_CALL(gatt_interface,
                Open(gatt_if, address, BTM_BLE_BKG_CONNECT_ALLOW_LIST,
                     is_opportunistic))
                Open(gatt_if, address, BTM_BLE_DIRECT_CONNECTION, true))
        .WillOnce(Invoke([this, conn_id](tGATT_IF client_if,
                                         const RawAddress& remote_bda,
                                         bool is_direct, bool opportunistic) {
@@ -568,7 +564,7 @@ class CsisClientTest : public ::testing::Test {
        }));

    DeviceGroups::AddFromStorage(address, storage_group_buf);
    CsisClient::AddFromStorage(address, storage_buf, true);
    CsisClient::AddFromStorage(address, storage_buf);
  }

  void InjectEncryptionEvent(const RawAddress& test_address, uint16_t conn_id) {
@@ -1387,11 +1383,9 @@ TEST_F(CsisClientTest, test_storage_calls) {
  ASSERT_EQ(1, get_func_call_count("btif_storage_load_bonded_csis_devices"));

  ASSERT_EQ(0, get_func_call_count("btif_storage_update_csis_info"));
  ASSERT_EQ(0, get_func_call_count("btif_storage_set_csis_autoconnect"));
  TestConnect(test_address);
  InjectConnectedEvent(test_address, 1);
  GetSearchCompleteEvent(1);
  ASSERT_EQ(1, get_func_call_count("btif_storage_set_csis_autoconnect"));
  ASSERT_EQ(1, get_func_call_count("btif_storage_update_csis_info"));

  ASSERT_EQ(0, get_func_call_count("btif_storage_remove_csis_device"));
+1 −7
Original line number Diff line number Diff line
@@ -89,12 +89,6 @@ enum class CsisDiscoveryState : uint8_t {
class GattServiceDevice {
 public:
  RawAddress addr;
  /*
   * This is true only during first connection to profile, until we store the
   * device.
   */
  bool first_connection;

  /*
   * We are making active attempt to connect to this device, 'direct connect'.
   */
@@ -105,7 +99,7 @@ class GattServiceDevice {
  bool is_gatt_service_valid = false;

  GattServiceDevice(const RawAddress& addr, bool first_connection)
      : addr(addr), first_connection(first_connection) {}
      : addr(addr) {}

  GattServiceDevice() : GattServiceDevice(RawAddress::kEmpty, false) {}

+1 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ class CsisClient {
  static void Initialize(bluetooth::csis::CsisClientCallbacks* callbacks,
                         base::Closure initCb);
  static void AddFromStorage(const RawAddress& addr,
                             const std::vector<uint8_t>& in, bool autoconnect);
                             const std::vector<uint8_t>& in);
  static bool GetForStorage(const RawAddress& addr, std::vector<uint8_t>& out);
  static void CleanUp();
  static CsisClient* Get();
+0 −2
Original line number Diff line number Diff line
@@ -391,8 +391,6 @@ void btif_storage_add_groups(const RawAddress& addr);
void btif_storage_load_bonded_groups(void);
void btif_storage_remove_groups(const RawAddress& address);

void btif_storage_set_csis_autoconnect(const RawAddress& addr,
                                       bool autoconnect);
void btif_storage_update_csis_info(const RawAddress& addr);
void btif_storage_load_bonded_csis_devices();
void btif_storage_remove_csis_device(const RawAddress& address);
Loading