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

Commit f8199c8d authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "stack::rnr Extract rnr data structure from inquiry vars to tBTM_CB" into main am: 1ca4bdd4

parents 85b69fbc 1ca4bdd4
Loading
Loading
Loading
Loading
+13 −14
Original line number Diff line number Diff line
@@ -1696,22 +1696,21 @@ tBTM_STATUS btm_ble_read_remote_name(const RawAddress& remote_bda,
  }

  /* read remote device name using GATT procedure */
  if (btm_cb.btm_inq_vars.rnr.remname_active) {
    log::warn(
        "Unable to start GATT RNR procedure for peer:{} busy with peer:{}",
        remote_bda, btm_cb.btm_inq_vars.rnr.remname_bda);
  if (btm_cb.rnr.remname_active) {
    log::warn("Unable to start GATT RNR procedure for peer:{} busy with peer:{}", remote_bda,
              btm_cb.rnr.remname_bda);
    return BTM_BUSY;
  }

  if (!GAP_BleReadPeerDevName(remote_bda, btm_ble_read_remote_name_cmpl))
    return BTM_BUSY;

  btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = p_cb;
  btm_cb.btm_inq_vars.rnr.remname_active = true;
  btm_cb.btm_inq_vars.rnr.remname_bda = remote_bda;
  btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_BLE;
  btm_cb.rnr.p_remname_cmpl_cb = p_cb;
  btm_cb.rnr.remname_active = true;
  btm_cb.rnr.remname_bda = remote_bda;
  btm_cb.rnr.remname_dev_type = BT_DEVICE_TYPE_BLE;

  alarm_set_on_mloop(btm_cb.btm_inq_vars.rnr.remote_name_timer,
                     BTM_EXT_BLE_RMT_NAME_TIMEOUT_MS,
  alarm_set_on_mloop(btm_cb.rnr.remote_name_timer, BTM_EXT_BLE_RMT_NAME_TIMEOUT_MS,
                     btm_inq_remote_name_timer_timeout, NULL);

  return BTM_CMD_STARTED;
@@ -1733,10 +1732,10 @@ bool btm_ble_cancel_remote_name(const RawAddress& remote_bda) {

  status = GAP_BleCancelReadPeerDevName(remote_bda);

  btm_cb.btm_inq_vars.rnr.remname_active = false;
  btm_cb.btm_inq_vars.rnr.remname_bda = RawAddress::kEmpty;
  btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN;
  alarm_cancel(btm_cb.btm_inq_vars.rnr.remote_name_timer);
  btm_cb.rnr.remname_active = false;
  btm_cb.rnr.remname_bda = RawAddress::kEmpty;
  btm_cb.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN;
  alarm_cancel(btm_cb.rnr.remote_name_timer);

  return status;
}
+39 −46
Original line number Diff line number Diff line
@@ -859,14 +859,14 @@ tBTM_STATUS BTM_CancelRemoteDeviceName(void) {
  bool is_le;

  /* Make sure there is not already one in progress */
  if (!btm_cb.btm_inq_vars.rnr.remname_active) {
  if (!btm_cb.rnr.remname_active) {
    return (BTM_WRONG_MODE);
  }

  if (com::android::bluetooth::flags::rnr_store_device_type()) {
    is_le = (btm_cb.btm_inq_vars.rnr.remname_dev_type == BT_DEVICE_TYPE_BLE);
    is_le = (btm_cb.rnr.remname_dev_type == BT_DEVICE_TYPE_BLE);
  } else {
    is_le = BTM_UseLeLink(btm_cb.btm_inq_vars.rnr.remname_bda);
    is_le = BTM_UseLeLink(btm_cb.rnr.remname_bda);
  }

  if (is_le) {
@@ -874,11 +874,9 @@ tBTM_STATUS BTM_CancelRemoteDeviceName(void) {
     * callback. */
    btm_inq_rmt_name_failed_cancelled();
  } else {
    bluetooth::shim::ACL_CancelRemoteNameRequest(
        btm_cb.btm_inq_vars.rnr.remname_bda);
    bluetooth::shim::ACL_CancelRemoteNameRequest(btm_cb.rnr.remname_bda);
    if (com::android::bluetooth::flags::rnr_reset_state_at_cancel()) {
      btm_process_remote_name(&btm_cb.btm_inq_vars.rnr.remname_bda, nullptr, 0,
                              HCI_ERR_UNSPECIFIED);
      btm_process_remote_name(&btm_cb.rnr.remname_bda, nullptr, 0, HCI_ERR_UNSPECIFIED);
    }
  }
  return (BTM_CMD_STARTED);
@@ -1049,18 +1047,18 @@ void btm_inq_db_reset(void) {

  /* Cancel a remote name request if active, and notify the caller (if waiting)
   */
  if (btm_cb.btm_inq_vars.rnr.remname_active) {
    alarm_cancel(btm_cb.btm_inq_vars.rnr.remote_name_timer);
    btm_cb.btm_inq_vars.rnr.remname_active = false;
    btm_cb.btm_inq_vars.rnr.remname_bda = RawAddress::kEmpty;
    btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN;
  if (btm_cb.rnr.remname_active) {
    alarm_cancel(btm_cb.rnr.remote_name_timer);
    btm_cb.rnr.remname_active = false;
    btm_cb.rnr.remname_bda = RawAddress::kEmpty;
    btm_cb.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN;

    if (btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb) {
    if (btm_cb.rnr.p_remname_cmpl_cb) {
      rem_name.status = BTM_DEV_RESET;
      rem_name.hci_status = HCI_SUCCESS;

      (*btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb)(&rem_name);
      btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = NULL;
      (*btm_cb.rnr.p_remname_cmpl_cb)(&rem_name);
      btm_cb.rnr.p_remname_cmpl_cb = NULL;
    }
  }

@@ -1876,7 +1874,7 @@ tBTM_STATUS btm_initiate_rem_name(const RawAddress& remote_bda,
                                  tBTM_NAME_CMPL_CB* p_cb) {
  /*** Make sure the device is ready ***/
  if (!BTM_IsDeviceUp()) return (BTM_WRONG_MODE);
  if (btm_cb.btm_inq_vars.rnr.remname_active) {
  if (btm_cb.rnr.remname_active) {
    return (BTM_BUSY);
  } else {
    /* If the database entry exists for the device, use its clock offset */
@@ -1915,15 +1913,14 @@ tBTM_STATUS btm_initiate_rem_name(const RawAddress& remote_bda,
          clock_offset);
    }

    btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = p_cb;
    btm_cb.btm_inq_vars.rnr.remname_bda = remote_bda;
    btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_BREDR;
    btm_cb.btm_inq_vars.rnr.remname_active = true;
    btm_cb.rnr.p_remname_cmpl_cb = p_cb;
    btm_cb.rnr.remname_bda = remote_bda;
    btm_cb.rnr.remname_dev_type = BT_DEVICE_TYPE_BREDR;
    btm_cb.rnr.remname_active = true;

    alarm_set_on_mloop(btm_cb.btm_inq_vars.rnr.remote_name_timer, timeout_ms,
                       btm_inq_remote_name_timer_timeout, NULL);
    alarm_set_on_mloop(btm_cb.rnr.remote_name_timer, timeout_ms, btm_inq_remote_name_timer_timeout,
                       NULL);

    btm_cb.btm_inq_vars.rnr.remname_active = true;
    return BTM_CMD_STARTED;
  }
}
@@ -1950,26 +1947,24 @@ void btm_process_remote_name(const RawAddress* bda, const BD_NAME bdn,

  bool on_le_link;
  if (com::android::bluetooth::flags::rnr_store_device_type()) {
    on_le_link =
        (btm_cb.btm_inq_vars.rnr.remname_dev_type == BT_DEVICE_TYPE_BLE);
    on_le_link = (btm_cb.rnr.remname_dev_type == BT_DEVICE_TYPE_BLE);
  } else {
    on_le_link = BTM_UseLeLink(btm_cb.btm_inq_vars.rnr.remname_bda);
    on_le_link = BTM_UseLeLink(btm_cb.rnr.remname_bda);
  }

  /* If the inquire BDA and remote DBA are the same, then stop the timer and set
   * the active to false */
  if (btm_cb.btm_inq_vars.rnr.remname_active) {
    if (rem_name.bd_addr == RawAddress::kEmpty ||
        rem_name.bd_addr == btm_cb.btm_inq_vars.rnr.remname_bda) {
  if (btm_cb.rnr.remname_active) {
    if (rem_name.bd_addr == RawAddress::kEmpty || rem_name.bd_addr == btm_cb.rnr.remname_bda) {
      log::info(
          "RNR received expected name bd_addr:{} hci_status:{} le_link:{}",
          rem_name.bd_addr.ToRedactedStringForLogging(),
          hci_status_code_text(hci_status), on_le_link);

      if (on_le_link && hci_status == HCI_ERR_UNSPECIFIED) {
        btm_ble_cancel_remote_name(btm_cb.btm_inq_vars.rnr.remname_bda);
        btm_ble_cancel_remote_name(btm_cb.rnr.remname_bda);
      }
      alarm_cancel(btm_cb.btm_inq_vars.rnr.remote_name_timer);
      alarm_cancel(btm_cb.rnr.remote_name_timer);
      /* Clean up and return the status if the command was not successful */
      /* Note: If part of the inquiry, the name is not stored, and the    */
      /*       inquiry complete callback is called.                       */
@@ -1987,12 +1982,12 @@ void btm_process_remote_name(const RawAddress* bda, const BD_NAME bdn,
        }
      }
      /* Reset the remote BDA and call callback if possible */
      btm_cb.btm_inq_vars.rnr.remname_active = false;
      btm_cb.btm_inq_vars.rnr.remname_bda = RawAddress::kEmpty;
      btm_cb.btm_inq_vars.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN;
      btm_cb.rnr.remname_active = false;
      btm_cb.rnr.remname_bda = RawAddress::kEmpty;
      btm_cb.rnr.remname_dev_type = BT_DEVICE_TYPE_UNKNOWN;

      tBTM_NAME_CMPL_CB* p_cb = btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb;
      btm_cb.btm_inq_vars.rnr.p_remname_cmpl_cb = nullptr;
      tBTM_NAME_CMPL_CB* p_cb = btm_cb.rnr.p_remname_cmpl_cb;
      btm_cb.rnr.p_remname_cmpl_cb = nullptr;
      if (p_cb) (p_cb)(&rem_name);
    } else {
      log::warn("RNR received UNKNOWN name bd_addr:{} hci_status:{} le_link:{}",
@@ -2004,9 +1999,8 @@ void btm_process_remote_name(const RawAddress* bda, const BD_NAME bdn,
            "RNR received UNEXPECTED name bd_addr:{} inq_addr:{} hci_status:{} "
            "le_link:{} rnr_active:{}",
            rem_name.bd_addr.ToRedactedStringForLogging(),
        btm_cb.btm_inq_vars.rnr.remname_bda.ToRedactedStringForLogging(),
        hci_status_code_text(hci_status), on_le_link,
        btm_cb.btm_inq_vars.rnr.remname_active);
            btm_cb.rnr.remname_bda.ToRedactedStringForLogging(), hci_status_code_text(hci_status),
            on_le_link, btm_cb.rnr.remname_active);
  }
}

@@ -2026,11 +2020,10 @@ void btm_inq_remote_name_timer_timeout(void* /* data */) {
 *
 ******************************************************************************/
void btm_inq_rmt_name_failed_cancelled(void) {
  log::error("remname_active={}", btm_cb.btm_inq_vars.rnr.remname_active);
  log::error("remname_active={}", btm_cb.rnr.remname_active);

  if (btm_cb.btm_inq_vars.rnr.remname_active) {
    btm_process_remote_name(&btm_cb.btm_inq_vars.rnr.remname_bda, NULL, 0,
                            HCI_ERR_UNSPECIFIED);
  if (btm_cb.rnr.remname_active) {
    btm_process_remote_name(&btm_cb.rnr.remname_bda, NULL, 0, HCI_ERR_UNSPECIFIED);
  }

  btm_sec_rmt_name_request_complete(NULL, NULL, HCI_ERR_UNSPECIFIED);
+6 −1
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@
#include <string>

#include "common/circular_buffer.h"
#include "internal_include/bt_target.h"
#include "osi/include/fixed_queue.h"
#include "stack/acl/acl.h"
#include "stack/btm/btm_ble_int_types.h"
@@ -33,6 +32,7 @@
#include "stack/btm/neighbor_inquiry.h"
#include "stack/include/btm_ble_api_types.h"
#include "stack/include/security_client_callbacks.h"
#include "stack/rnr/remote_name_request.h"
#include "types/raw_address.h"

constexpr size_t kMaxLogSize = 255;
@@ -172,6 +172,8 @@ typedef struct tBTM_CB {
            kMaxInquiryScanHistory);
  } neighbor;

  bluetooth::rnr::RemoteNameRequest rnr;

  void Init() {
    memset(&devcb, 0, sizeof(devcb));
    memset(&ble_ctr_cb, 0, sizeof(ble_ctr_cb));
@@ -182,6 +184,8 @@ typedef struct tBTM_CB {

    acl_cb_ = {};
    neighbor = {};
    rnr = {};
    rnr.remote_name_timer = alarm_new("rnr.remote_name_timer");

    /* Initialize BTM component structures */
    btm_inq_vars.Init(); /* Inquiry Database and Structures */
@@ -196,6 +200,7 @@ typedef struct tBTM_CB {
  }

  void Free() {
    alarm_free(rnr.remote_name_timer);
    history_.reset();

    devcb.Free();
+1 −11
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@
#include "stack/include/bt_name.h"
#include "stack/include/btm_api_types.h"
#include "stack/include/hci_error_code.h"
#include "stack/rnr/remote_name_request.h"
#include "types/ble_address_with_type.h"
#include "types/raw_address.h"

@@ -211,8 +210,6 @@ struct tBTM_INQUIRY_VAR_ST {
  uint16_t inq_scan_type;
  uint16_t page_scan_type; /* current page scan type */

  bluetooth::rnr::RemoteNameRequest rnr;

  tBTM_CMPL_CB* p_inq_cmpl_cb;
  tBTM_INQ_RESULTS_CB* p_inq_results_cb;
  uint32_t inq_counter; /* Counter incremented each time an inquiry completes */
@@ -238,12 +235,8 @@ struct tBTM_INQUIRY_VAR_ST {
  bool registered_for_hci_events;

  void Init() {
    alarm_free(rnr.remote_name_timer);
    alarm_free(classic_inquiry_timer);

    rnr = {};

    rnr.remote_name_timer = alarm_new("rnr.remote_name_timer");
    classic_inquiry_timer = alarm_new("btm_inq.classic_inquiry_timer");

    discoverable_mode = BTM_NON_DISCOVERABLE;
@@ -269,10 +262,7 @@ struct tBTM_INQUIRY_VAR_ST {
    inq_active = 0;
    registered_for_hci_events = false;
  }
  void Free() {
    alarm_free(rnr.remote_name_timer);
    alarm_free(classic_inquiry_timer);
  }
  void Free() { alarm_free(classic_inquiry_timer); }
};

bool btm_inq_find_bdaddr(const RawAddress& p_bda);
+1 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#include "stack/btm/neighbor_inquiry.h"
#include "stack/include/btm_api_types.h"
#include "stack/include/btm_status.h"
#include "stack/rnr/remote_name_request.h"
#include "types/bt_transport.h"
#include "types/raw_address.h"

Loading