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

Commit f285ca44 authored by Chris Manton's avatar Chris Manton Committed by Automerger Merge Worker
Browse files

Unify remote name complete bta_dm_remote_name_cmpl am: 4f61ddb2

parents e0c316fa 4f61ddb2
Loading
Loading
Loading
Loading
+66 −60
Original line number Diff line number Diff line
@@ -1127,60 +1127,60 @@ void bta_dm_inq_cmpl(uint8_t num) {
  }
}

/*******************************************************************************
 *
 * Function         bta_dm_rmt_name
 *
 * Description      Process the remote name result from BTM
 *
 * Returns          void
 *
 ******************************************************************************/
void bta_dm_rmt_name(tBTA_DM_MSG* p_data) {
  APPL_TRACE_DEBUG("bta_dm_rmt_name");

  if (p_data->rem_name.result.disc_res.bd_name[0] &&
      bta_dm_search_cb.p_btm_inq_info) {
    bta_dm_search_cb.p_btm_inq_info->appl_knows_rem_name = true;
  }

  bta_dm_discover_device(bta_dm_search_cb.peer_bdaddr);
}

/*******************************************************************************
 *
 * Function         bta_dm_disc_rmt_name
 *
 * Description      Process the remote name result from BTM when application
 *                  wants to find the name for a bdaddr
 *
 * Returns          void
 *
 ******************************************************************************/
void bta_dm_disc_rmt_name(tBTA_DM_MSG* p_data) {
void bta_dm_remote_name_cmpl(const tBTA_DM_MSG* p_data) {
  CHECK(p_data != nullptr);

  APPL_TRACE_DEBUG("bta_dm_disc_rmt_name");

  const tBTA_DM_DISC_RES* disc_res = &p_data->rem_name.result.disc_res;
  const tBTA_DM_REMOTE_NAME& remote_name_msg = p_data->remote_name_msg;

  BTM_LogHistory(
      kBtmLogTag, disc_res->bd_addr, "Remote name completed",
  BTM_LogHistory(kBtmLogTag, remote_name_msg.bd_addr, "Remote name completed",
                 base::StringPrintf(
          "status:%s name:\"%s\" service:0x%x device_type:%s num_uuids:%zu",
          hci_status_code_text(disc_res->hci_status).c_str(), disc_res->bd_name,
          disc_res->services, DeviceTypeText(disc_res->device_type).c_str(),
          disc_res->num_uuids));

  tBTM_INQ_INFO* p_btm_inq_info =
      BTM_InqDbRead(p_data->rem_name.result.disc_res.bd_addr);
  if (p_btm_inq_info) {
    if (p_data->rem_name.result.disc_res.bd_name[0]) {
                     "status:%s state:%s name:\"%s\"",
                     hci_status_code_text(remote_name_msg.hci_status).c_str(),
                     bta_dm_state_text(bta_dm_search_get_state()).c_str(),
                     PRIVATE_NAME(remote_name_msg.bd_name)));

  tBTM_INQ_INFO* p_btm_inq_info = BTM_InqDbRead(remote_name_msg.bd_addr);
  if (remote_name_msg.bd_name[0] != '\0' && bta_dm_search_cb.p_btm_inq_info) {
    p_btm_inq_info->appl_knows_rem_name = true;
  }

  // Callback with this property
  if (bta_dm_search_cb.p_search_cback != nullptr) {
    tBTA_DM_SEARCH search_data = {
        .disc_res =  // tBTA_DM_DISC_RES
        {
            .bd_addr = remote_name_msg.bd_addr,
            .bd_name = {},
            .services = {},
            .device_type = {},
            .num_uuids = 0UL,
            .p_uuid_list = nullptr,
            .result = (remote_name_msg.hci_status == HCI_SUCCESS) ? BTA_SUCCESS
                                                                  : BTA_FAILURE,
            .hci_status = remote_name_msg.hci_status,
        },
    };
    if (remote_name_msg.hci_status == HCI_SUCCESS) {
      bd_name_copy(search_data.disc_res.bd_name, remote_name_msg.bd_name);
    }
    bta_dm_search_cb.p_search_cback(BTA_DM_DISC_RES_EVT, &search_data);
  } else {
    LOG_WARN("Received remote name complete without callback");
  }

  bta_dm_discover_device(p_data->rem_name.result.disc_res.bd_addr);
  switch (bta_dm_search_get_state()) {
    case BTA_DM_SEARCH_ACTIVE:
      bta_dm_discover_device(bta_dm_search_cb.peer_bdaddr);
      break;
    case BTA_DM_DISCOVER_ACTIVE:
      bta_dm_discover_device(remote_name_msg.bd_addr);
      break;
    case BTA_DM_SEARCH_IDLE:
    case BTA_DM_SEARCH_CANCELLING:
      LOG_WARN("Received remote name request in state:%s",
               bta_dm_state_text(bta_dm_search_get_state()).c_str());
      break;
  }
}

static void store_avrcp_profile_feature(tSDP_DISC_REC* sdp_rec) {
@@ -2229,10 +2229,9 @@ static void bta_dm_service_search_remname_cback(const RawAddress& bd_addr,
 * Returns          void
 *
 ******************************************************************************/
static void bta_dm_remname_cback(const tBTM_REMOTE_DEV_NAME* p) {
  CHECK(p != nullptr);
static void bta_dm_remname_cback(const tBTM_REMOTE_DEV_NAME* p_remote_name) {
  CHECK(p_remote_name != nullptr);

  tBTM_REMOTE_DEV_NAME* p_remote_name = (tBTM_REMOTE_DEV_NAME*)p;
  LOG_INFO(
      "Remote name request complete peer:%s btm_status:%s hci_status:%s "
      "name[0]:%c length:%hu",
@@ -2271,14 +2270,21 @@ static void bta_dm_remname_cback(const tBTM_REMOTE_DEV_NAME* p) {
    GAP_BleReadPeerPrefConnParams(bta_dm_search_cb.peer_bdaddr);
  }

  tBTA_DM_REM_NAME* p_msg =
      (tBTA_DM_REM_NAME*)osi_malloc(sizeof(tBTA_DM_REM_NAME));
  p_msg->result.disc_res.hci_status = p->hci_status;
  p_msg->result.disc_res.bd_addr = bta_dm_search_cb.peer_bdaddr;
  strlcpy((char*)p_msg->result.disc_res.bd_name,
          (char*)p_remote_name->remote_bd_name, BD_NAME_LEN + 1);
  p_msg->hdr.event = BTA_DM_REMT_NAME_EVT;

  tBTA_DM_MSG* p_msg = (tBTA_DM_MSG*)osi_malloc(sizeof(tBTA_DM_MSG));
  *p_msg = {
      .remote_name_msg =
          {
              // tBTA_DM_REMOTE_NAME
              .hdr =
                  {
                      .event = BTA_DM_REMT_NAME_EVT,
                  },
              .bd_addr = bta_dm_search_cb.peer_bdaddr,
              .bd_name = {},
              .hci_status = p_remote_name->hci_status,
          },
  };
  bd_name_copy(p_msg->remote_name_msg.bd_name, p_remote_name->remote_bd_name);
  bta_sys_sendmsg(p_msg);
}

+7 −7
Original line number Diff line number Diff line
@@ -131,11 +131,12 @@ typedef struct {
  bool accept;
} tBTA_DM_CI_RMT_OOB;

/* data type for BTA_DM_REMT_NAME_EVT */
typedef struct {
  BT_HDR_RIGID hdr;
  tBTA_DM_SEARCH result;
} tBTA_DM_REM_NAME;
  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 {
@@ -180,7 +181,7 @@ typedef union {

  tBTA_DM_API_DISCOVER discover;

  tBTA_DM_REM_NAME rem_name;
  tBTA_DM_REMOTE_NAME remote_name_msg;

  tBTA_DM_DISC_RESULT disc_result;

@@ -383,6 +384,7 @@ inline std::string bta_dm_state_text(const tBTA_DM_STATE& state) {
      return base::StringPrintf("UNKNOWN[%d]", state);
  }
}
#undef CASE_RETURN_TEXT

/* DM search control block */
typedef struct {
@@ -562,7 +564,7 @@ void bta_dm_search_start(tBTA_DM_MSG* p_data);
void bta_dm_search_cancel();
void bta_dm_discover(tBTA_DM_MSG* p_data);
void bta_dm_inq_cmpl(uint8_t num);
void bta_dm_rmt_name(tBTA_DM_MSG* p_data);
void bta_dm_remote_name_cmpl(const tBTA_DM_MSG* p_data);
void bta_dm_sdp_result(tBTA_DM_MSG* p_data);
void bta_dm_search_cmpl();
void bta_dm_free_sdp_db();
@@ -575,7 +577,6 @@ void bta_dm_execute_queued_request();
bool bta_dm_is_search_request_queued();
void bta_dm_search_clear_queue();
void bta_dm_search_cancel_notify();
void bta_dm_disc_rmt_name(tBTA_DM_MSG* p_data);
tBTA_DM_PEER_DEVICE* bta_dm_find_peer_device(const RawAddress& peer_addr);

void bta_dm_clear_event_filter(void);
@@ -605,5 +606,4 @@ void bta_dm_ble_subrate_request(const RawAddress& bd_addr, uint16_t subrate_min,
                                uint16_t cont_num, uint16_t timeout);
void bta_dm_consolidate(const RawAddress& identity_addr, const RawAddress& rpa);

#undef CASE_RETURN_TEXT
#endif /* BTA_DM_INT_H */
+2 −2
Original line number Diff line number Diff line
@@ -130,7 +130,7 @@ bool bta_dm_search_sm_execute(BT_HDR_RIGID* p_msg) {
    case BTA_DM_SEARCH_ACTIVE:
      switch (p_msg->event) {
        case BTA_DM_REMT_NAME_EVT:
          bta_dm_rmt_name(message);
          bta_dm_remote_name_cmpl(message);
          break;
        case BTA_DM_SEARCH_CMPL_EVT:
          bta_dm_search_cmpl();
@@ -192,7 +192,7 @@ bool bta_dm_search_sm_execute(BT_HDR_RIGID* p_msg) {
    case BTA_DM_DISCOVER_ACTIVE:
      switch (p_msg->event) {
        case BTA_DM_REMT_NAME_EVT:
          bta_dm_disc_rmt_name(message);
          bta_dm_remote_name_cmpl(message);
          break;
        case BTA_DM_SDP_RESULT_EVT:
          bta_dm_sdp_result(message);
+15 −0
Original line number Diff line number Diff line
@@ -525,3 +525,18 @@ TEST_F(BtaDmTest, bta_dm_search_evt_text) {
          static_cast<tBTA_DM_SEARCH_EVT>(std::numeric_limits<uint8_t>::max()))
          .c_str());
}

TEST_F(BtaDmTest, bta_dm_remote_name_cmpl) {
  tBTA_DM_MSG msg = {
      .remote_name_msg =
          {
              // tBTA_DM_REMOTE_NAME
              .hdr = {},
              .bd_addr = kRawAddress,
              .bd_name = {0},
              .hci_status = HCI_SUCCESS,
          },
  };
  bta_dm_remote_name_cmpl(&msg);
  ASSERT_EQ(1, get_func_call_count("BTM_InqDbRead"));
}
+7 −0
Original line number Diff line number Diff line
@@ -44,5 +44,12 @@ typedef uint8_t tBTM_BD_NAME[BTM_MAX_REM_BD_NAME_LEN + 1];
typedef uint8_t tBTM_LOC_BD_NAME[BTM_MAX_LOC_BD_NAME_LEN + 1];

#ifdef __cplusplus
#include "osi/include/compat.h"  // strlcpy
inline constexpr tBTM_BD_NAME kBtmBdNameEmpty = {};
constexpr size_t kBdNameLength = static_cast<size_t>(BD_NAME_LEN);

inline size_t bd_name_copy(BD_NAME bd_name_dest, const BD_NAME bd_name_src) {
  return strlcpy(reinterpret_cast<char*>(bd_name_dest),
                 reinterpret_cast<const char*>(bd_name_src), kBdNameLength + 1);
}
#endif
Loading