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

Commit 8d1cf82d authored by Chris Manton's avatar Chris Manton
Browse files

IA2: Add device and service discovery lifecycle APIs

Bug: 308474065
Test: atest bt_host_test_bta

Change-Id: I0f974192748e23b1821fd728a8cbcbf57bb95280
parent 27de968b
Loading
Loading
Loading
Loading
+3 −22
Original line number Diff line number Diff line
@@ -239,12 +239,7 @@ void BTA_dm_on_hw_off() {
  /* reinitialize the control block */
  bta_dm_deinit_cb();

  /* hw is ready, go on with BTA DM initialization */
  alarm_free(bta_dm_search_cb.search_timer);
  alarm_free(bta_dm_search_cb.gatt_close_timer);
  osi_free_and_reset((void**)&bta_dm_search_cb.p_pending_search);
  fixed_queue_free(bta_dm_search_cb.pending_discovery_queue, osi_free);
  bta_dm_search_cb = {};
  bta_dm_disc_stop();
}

void BTA_dm_on_hw_on() {
@@ -256,22 +251,8 @@ void BTA_dm_on_hw_on() {
  /* make sure the control block is properly initialized */
  bta_dm_init_cb();

  /* hw is ready, go on with BTA DM initialization */
  alarm_free(bta_dm_search_cb.search_timer);
  alarm_free(bta_dm_search_cb.gatt_close_timer);
  osi_free_and_reset((void**)&bta_dm_search_cb.p_pending_search);
  fixed_queue_free(bta_dm_search_cb.pending_discovery_queue, osi_free);
  bta_dm_search_cb = {};
  /*
   * TODO: Should alarm_free() the bta_dm_search_cb timers during
   * graceful shutdown.
   */
  bta_dm_search_cb.search_timer = alarm_new("bta_dm_search.search_timer");
  bool delay_close_gatt =
      osi_property_get_bool("bluetooth.gatt.delay_close.enabled", true);
  bta_dm_search_cb.gatt_close_timer =
      delay_close_gatt ? alarm_new("bta_dm_search.gatt_close_timer") : nullptr;
  bta_dm_search_cb.pending_discovery_queue = fixed_queue_new(SIZE_MAX);
  bta_dm_disc_start(
      osi_property_get_bool("bluetooth.gatt.delay_close.enabled", true));

  memset(&bta_dm_conn_srvcs, 0, sizeof(bta_dm_conn_srvcs));
  memset(&bta_dm_di_cb, 0, sizeof(tBTA_DM_DI_CB));
+18 −0
Original line number Diff line number Diff line
@@ -2370,6 +2370,24 @@ bool bta_dm_search_sm_execute(const BT_HDR_RIGID* p_msg) {
  return true;
}

static void bta_dm_disc_reset() {
  alarm_free(bta_dm_search_cb.search_timer);
  alarm_free(bta_dm_search_cb.gatt_close_timer);
  osi_free_and_reset((void**)&bta_dm_search_cb.p_pending_search);
  fixed_queue_free(bta_dm_search_cb.pending_discovery_queue, osi_free);
  bta_dm_search_cb = {};
}

void bta_dm_disc_start(bool delay_close_gatt) {
  bta_dm_disc_reset();
  bta_dm_search_cb.search_timer = alarm_new("bta_dm_search.search_timer");
  bta_dm_search_cb.gatt_close_timer =
      delay_close_gatt ? alarm_new("bta_dm_search.gatt_close_timer") : nullptr;
  bta_dm_search_cb.pending_discovery_queue = fixed_queue_new(SIZE_MAX);
}

void bta_dm_disc_stop() { bta_dm_disc_reset(); }

#define DUMPSYS_TAG "shim::legacy::bta::dm"
void DumpsysBtaDmDisc(int fd) {
  auto copy = search_state_history_.Pull();
+4 −0
Original line number Diff line number Diff line
@@ -20,6 +20,10 @@
#include "stack/include/bt_hdr.h"
#include "types/raw_address.h"

// Bta module start and stop entry points
void bta_dm_disc_start(bool delay_close_gatt);
void bta_dm_disc_stop();

// Bta subsystem entrypoint and lifecycle
bool bta_dm_search_sm_execute(const BT_HDR_RIGID* p_msg);
void bta_dm_search_sm_disable();
+6 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@

#include <string>

#include "bta/dm/bta_dm_disc.h"
#include "bta/dm/bta_dm_int.h"
#include "bta/dm/bta_dm_sec_int.h"
#include "bta/hf_client/bta_hf_client_int.h"
@@ -556,3 +557,8 @@ TEST_F(BtaDmTest, bta_dm_remote_name_cmpl) {
  bluetooth::legacy::testing::bta_dm_remote_name_cmpl(&msg);
  ASSERT_EQ(1, get_func_call_count("BTM_InqDbRead"));
}

TEST_F(BtaDmTest, bta_dm_disc_start__true) { bta_dm_disc_start(true); }
TEST_F(BtaDmTest, bta_dm_disc_start__false) { bta_dm_disc_start(false); }

TEST_F(BtaDmTest, bta_dm_disc_stop) { bta_dm_disc_stop(); }