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

Commit c9462b40 authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Device search/service discovery header cleanup

Separate the internal header, and clean up shared message types.

Bug: 330675788
Bug: 335732980
Flag: com.android.bluetooth.flags.separate_service_and_device_discovery
Test: mma -j32
Change-Id: Iec20d21caf57a0626c6d0cd2892b040232677c5c
parent 9380fb66
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@
#include <vector>

#include "android_bluetooth_flags.h"
#include "bta/dm/bta_dm_disc_int.h"
#include "bta/dm/bta_dm_device_search_int.h"
#include "bta/dm/bta_dm_disc_legacy.h"
#include "bta/include/bta_gatt_api.h"
#include "bta/include/bta_sdp_api.h"
@@ -83,7 +83,7 @@ static void bta_dm_search_cancel_notify();
static void bta_dm_disable_search();

static void bta_dm_search_sm_execute(tBTA_DM_DEV_SEARCH_EVT event,
                                     std::unique_ptr<tBTA_DM_MSG> msg);
                                     std::unique_ptr<tBTA_DM_SEARCH_MSG> msg);
static void bta_dm_observe_results_cb(tBTM_INQ_RESULTS* p_inq,
                                      const uint8_t* p_eir, uint16_t eir_len);
static void bta_dm_observe_cmpl_cb(void* p_result);
@@ -96,7 +96,7 @@ static tBTA_DM_DEVICE_SEARCH_STATE bta_dm_search_get_state() {
}

static void post_search_evt(tBTA_DM_DEV_SEARCH_EVT event,
                            std::unique_ptr<tBTA_DM_MSG> msg) {
                            std::unique_ptr<tBTA_DM_SEARCH_MSG> msg) {
  if (do_in_main_thread(FROM_HERE, base::BindOnce(&bta_dm_search_sm_execute,
                                                  event, std::move(msg))) !=
      BT_STATUS_SUCCESS) {
@@ -290,7 +290,7 @@ static void bta_dm_remname_cback(const tBTM_REMOTE_DEV_NAME* p_remote_name) {
  bta_dm_search_cb.name_discover_done = true;
  bd_name_copy(bta_dm_search_cb.peer_name, p_remote_name->remote_bd_name);

  auto msg = std::make_unique<tBTA_DM_MSG>(tBTA_DM_REMOTE_NAME{});
  auto msg = std::make_unique<tBTA_DM_SEARCH_MSG>(tBTA_DM_REMOTE_NAME{});
  auto& rmt_name_msg = std::get<tBTA_DM_REMOTE_NAME>(*msg);
  rmt_name_msg.bd_addr = bta_dm_search_cb.peer_bdaddr;
  rmt_name_msg.hci_status = p_remote_name->hci_status;
@@ -639,7 +639,7 @@ static void bta_dm_queue_search(tBTA_DM_API_SEARCH& search) {
  if (bta_dm_search_cb.p_pending_search) {
    log::warn("Overwrote previous device discovery inquiry scan request");
  }
  bta_dm_search_cb.p_pending_search.reset(new tBTA_DM_MSG(search));
  bta_dm_search_cb.p_pending_search.reset(new tBTA_DM_SEARCH_MSG(search));
  log::info("Queued device discovery inquiry scan request");
}

@@ -859,7 +859,7 @@ bluetooth::common::TimestampedCircularBuffer<tSEARCH_STATE_HISTORY>
 *
 ******************************************************************************/
static void bta_dm_search_sm_execute(tBTA_DM_DEV_SEARCH_EVT event,
                                     std::unique_ptr<tBTA_DM_MSG> msg) {
                                     std::unique_ptr<tBTA_DM_SEARCH_MSG> msg) {
  log::info("state:{}, event:{}[0x{:x}]",
            bta_dm_state_text(bta_dm_search_get_state()),
            bta_dm_event_text(event), event);
@@ -957,9 +957,9 @@ void bta_dm_disc_start_device_discovery(tBTA_DM_SEARCH_CBACK* p_cback) {
    bta_dm_disc_legacy::bta_dm_disc_start_device_discovery(p_cback);
    return;
  }
  bta_dm_search_sm_execute(
      BTA_DM_API_SEARCH_EVT,
      std::make_unique<tBTA_DM_MSG>(tBTA_DM_API_SEARCH{.p_cback = p_cback}));
  bta_dm_search_sm_execute(BTA_DM_API_SEARCH_EVT,
                           std::make_unique<tBTA_DM_SEARCH_MSG>(
                               tBTA_DM_API_SEARCH{.p_cback = p_cback}));
}

void bta_dm_disc_stop_device_discovery() {
+109 −0
Original line number Diff line number Diff line
/*
 * Copyright 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

#include <base/strings/stringprintf.h>
#include <bluetooth/log.h>

#include <queue>
#include <string>

#include "macros.h"
#include "stack/btm/neighbor_inquiry.h"
#include "types/raw_address.h"

/* DM search events */
typedef enum : uint16_t {
  /* DM search API events */
  BTA_DM_API_SEARCH_EVT,
  BTA_DM_API_SEARCH_CANCEL_EVT,
  BTA_DM_INQUIRY_CMPL_EVT,
  BTA_DM_REMT_NAME_EVT,
  BTA_DM_SEARCH_CMPL_EVT,
} tBTA_DM_DEV_SEARCH_EVT;

inline std::string bta_dm_event_text(const tBTA_DM_DEV_SEARCH_EVT& event) {
  switch (event) {
    CASE_RETURN_TEXT(BTA_DM_API_SEARCH_EVT);
    CASE_RETURN_TEXT(BTA_DM_API_SEARCH_CANCEL_EVT);
    CASE_RETURN_TEXT(BTA_DM_INQUIRY_CMPL_EVT);
    CASE_RETURN_TEXT(BTA_DM_REMT_NAME_EVT);
    CASE_RETURN_TEXT(BTA_DM_SEARCH_CMPL_EVT);
  }
}

/* data type for BTA_DM_API_SEARCH_EVT */
typedef struct {
  tBTA_DM_SEARCH_CBACK* p_cback;
} tBTA_DM_API_SEARCH;

typedef struct {
} tBTA_DM_API_DISCOVERY_CANCEL;

typedef struct {
  RawAddress bd_addr;
  BD_NAME bd_name; /* Name of peer device. */
  tHCI_STATUS hci_status;
} tBTA_DM_REMOTE_NAME;

/* data type for tBTA_DM_DISC_RESULT */
typedef struct {
  tBTA_DM_SEARCH result;
} tBTA_DM_DISC_RESULT;

using tBTA_DM_SEARCH_MSG =
    std::variant<tBTA_DM_API_SEARCH, tBTA_DM_REMOTE_NAME, tBTA_DM_DISC_RESULT>;

/* DM search state */
typedef enum {
  BTA_DM_SEARCH_IDLE,
  BTA_DM_SEARCH_ACTIVE,
  BTA_DM_SEARCH_CANCELLING,
} tBTA_DM_DEVICE_SEARCH_STATE;

inline std::string bta_dm_state_text(const tBTA_DM_DEVICE_SEARCH_STATE& state) {
  switch (state) {
    CASE_RETURN_TEXT(BTA_DM_SEARCH_IDLE);
    CASE_RETURN_TEXT(BTA_DM_SEARCH_ACTIVE);
    CASE_RETURN_TEXT(BTA_DM_SEARCH_CANCELLING);
  }
}

/* DM search control block */
typedef struct {
  tBTA_DM_SEARCH_CBACK* p_device_search_cback;
  tBTM_INQ_INFO* p_btm_inq_info;
  /* This covers device search state. That is scanning through android Settings
   * to discover LE and Classic devices. Runs Name discovery on Inquiry Results
   */
  tBTA_DM_DEVICE_SEARCH_STATE search_state;
  bool name_discover_done;
  /* peer address used for name discovery */
  RawAddress peer_bdaddr;
  BD_NAME peer_name;
  std::unique_ptr<tBTA_DM_SEARCH_MSG> p_pending_search;
  tBTA_DM_SEARCH_CBACK* p_csis_scan_cback;
} tBTA_DM_SEARCH_CB;

namespace fmt {
template <>
struct formatter<tBTA_DM_DEV_SEARCH_EVT>
    : enum_formatter<tBTA_DM_DEV_SEARCH_EVT> {};
template <>
struct formatter<tBTA_DM_DEVICE_SEARCH_STATE>
    : enum_formatter<tBTA_DM_DEVICE_SEARCH_STATE> {};
}  // namespace fmt
+1 −3
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@
// Bta module start and stop entry points
void bta_dm_disc_start(bool delay_close_gatt);
void bta_dm_disc_stop();
void bta_dm_search_stop();

// Bta device discovery start and stop entry points
void bta_dm_disc_start_device_discovery(tBTA_DM_SEARCH_CBACK*);
@@ -67,4 +66,3 @@ void bta_dm_disc_remove_device(const RawAddress& bd_addr);

// Provide data for the dumpsys procedure
void DumpsysBtaDmDisc(int fd);
 No newline at end of file
void DumpsysBtaDmSearch(int fd);
+2 −82
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@
#include "bta/include/bta_api.h"
#include "bta/sys/bta_sys.h"
#include "macros.h"
#include "stack/btm/neighbor_inquiry.h"
#include "stack/include/sdp_status.h"
#include "stack/sdp/sdp_discovery_db.h"
#include "types/bluetooth/uuid.h"
@@ -33,16 +32,6 @@

#define BTA_SERVICE_ID_TO_SERVICE_MASK(id) (1 << (id))

/* DM search events */
typedef enum : uint16_t {
  /* DM search API events */
  BTA_DM_API_SEARCH_EVT,
  BTA_DM_API_SEARCH_CANCEL_EVT,
  BTA_DM_INQUIRY_CMPL_EVT,
  BTA_DM_REMT_NAME_EVT,
  BTA_DM_SEARCH_CMPL_EVT,
} tBTA_DM_DEV_SEARCH_EVT;

typedef enum : uint16_t {
  /* service discovery events */
  BTA_DM_API_DISCOVER_EVT,
@@ -51,16 +40,6 @@ typedef enum : uint16_t {
  BTA_DM_DISC_CLOSE_TOUT_EVT,
} tBTA_DM_DISC_EVT;

inline std::string bta_dm_event_text(const tBTA_DM_DEV_SEARCH_EVT& event) {
  switch (event) {
    CASE_RETURN_TEXT(BTA_DM_API_SEARCH_EVT);
    CASE_RETURN_TEXT(BTA_DM_API_SEARCH_CANCEL_EVT);
    CASE_RETURN_TEXT(BTA_DM_INQUIRY_CMPL_EVT);
    CASE_RETURN_TEXT(BTA_DM_REMT_NAME_EVT);
    CASE_RETURN_TEXT(BTA_DM_SEARCH_CMPL_EVT);
  }
}

inline std::string bta_dm_event_text(const tBTA_DM_DISC_EVT& event) {
  switch (event) {
    CASE_RETURN_TEXT(BTA_DM_API_DISCOVER_EVT);
@@ -70,11 +49,6 @@ inline std::string bta_dm_event_text(const tBTA_DM_DISC_EVT& event) {
  }
}

/* data type for BTA_DM_API_SEARCH_EVT */
typedef struct {
  tBTA_DM_SEARCH_CBACK* p_cback;
} tBTA_DM_API_SEARCH;

/* data type for BTA_DM_API_DISCOVER_EVT */
typedef struct {
  RawAddress bd_addr;
@@ -85,31 +59,16 @@ typedef struct {
typedef struct {
} tBTA_DM_API_DISCOVERY_CANCEL;

typedef struct {
  RawAddress bd_addr;
  BD_NAME bd_name; /* Name of peer device. */
  tHCI_STATUS hci_status;
} tBTA_DM_REMOTE_NAME;

/* data type for tBTA_DM_DISC_RESULT */
typedef struct {
  tBTA_DM_SEARCH result;
} tBTA_DM_DISC_RESULT;

/* data type for BTA_DM_INQUIRY_CMPL_EVT */
typedef struct {
  uint8_t num;
} tBTA_DM_INQUIRY_CMPL;

/* data type for BTA_DM_SDP_RESULT_EVT */
typedef struct {
  tSDP_RESULT sdp_result;
} tBTA_DM_SDP_RESULT;

typedef struct {
  bool enable;
} tBTA_DM_API_BLE_FEATURE;

typedef struct {
  RawAddress bd_addr;          /* BD address peer device. */
  tBTA_SERVICE_MASK services;  /* Services found on peer device. */
@@ -119,31 +78,14 @@ typedef struct {
  tHCI_STATUS hci_status;
} tBTA_DM_SVC_RES;

using tBTA_DM_MSG =
    std::variant<tBTA_DM_API_SEARCH, tBTA_DM_API_DISCOVER, tBTA_DM_REMOTE_NAME,
                 tBTA_DM_DISC_RESULT, tBTA_DM_INQUIRY_CMPL, tBTA_DM_SDP_RESULT,
                 tBTA_DM_SVC_RES>;

/* DM search state */
typedef enum {
  BTA_DM_SEARCH_IDLE,
  BTA_DM_SEARCH_ACTIVE,
  BTA_DM_SEARCH_CANCELLING,
} tBTA_DM_DEVICE_SEARCH_STATE;
using tBTA_DM_MSG = std::variant<tBTA_DM_API_DISCOVER, tBTA_DM_DISC_RESULT,
                                 tBTA_DM_SDP_RESULT, tBTA_DM_SVC_RES>;

typedef enum {
  BTA_DM_DISCOVER_IDLE,
  BTA_DM_DISCOVER_ACTIVE
} tBTA_DM_SERVICE_DISCOVERY_STATE;

inline std::string bta_dm_state_text(const tBTA_DM_DEVICE_SEARCH_STATE& state) {
  switch (state) {
    CASE_RETURN_TEXT(BTA_DM_SEARCH_IDLE);
    CASE_RETURN_TEXT(BTA_DM_SEARCH_ACTIVE);
    CASE_RETURN_TEXT(BTA_DM_SEARCH_CANCELLING);
  }
}

inline std::string bta_dm_state_text(
    const tBTA_DM_SERVICE_DISCOVERY_STATE& state) {
  switch (state) {
@@ -152,22 +94,6 @@ inline std::string bta_dm_state_text(
  }
}

/* DM search control block */
typedef struct {
  tBTA_DM_SEARCH_CBACK* p_device_search_cback;
  tBTM_INQ_INFO* p_btm_inq_info;
  /* This covers device search state. That is scanning through android Settings
   * to discover LE and Classic devices. Runs Name discovery on Inquiry Results
   */
  tBTA_DM_DEVICE_SEARCH_STATE search_state;
  bool name_discover_done;
  /* peer address used for name discovery */
  RawAddress peer_bdaddr;
  BD_NAME peer_name;
  std::unique_ptr<tBTA_DM_MSG> p_pending_search;
  tBTA_DM_SEARCH_CBACK* p_csis_scan_cback;
} tBTA_DM_SEARCH_CB;

typedef struct {
  RawAddress peer_bdaddr;
  service_discovery_callbacks service_search_cbacks;
@@ -198,14 +124,8 @@ extern const uint16_t bta_service_id_to_uuid_lkup_tbl[];

namespace fmt {
template <>
struct formatter<tBTA_DM_DEV_SEARCH_EVT>
    : enum_formatter<tBTA_DM_DEV_SEARCH_EVT> {};
template <>
struct formatter<tBTA_DM_DISC_EVT> : enum_formatter<tBTA_DM_DISC_EVT> {};
template <>
struct formatter<tBTA_DM_DEVICE_SEARCH_STATE>
    : enum_formatter<tBTA_DM_DEVICE_SEARCH_STATE> {};
template <>
struct formatter<tBTA_DM_SERVICE_DISCOVERY_STATE>
    : enum_formatter<tBTA_DM_SERVICE_DISCOVERY_STATE> {};
}  // namespace fmt
+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
#include <base/strings/stringprintf.h>
#include <stddef.h>

#include "bta/dm/bta_dm_device_search.h"
#include "bta/dm/bta_dm_disc.h"
#include "bta/dm/bta_dm_gatt_client.h"
#include "bta/dm/bta_dm_int.h"
Loading