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

Commit c7458e2d authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Create stack/acl to contain acl data"

parents 75f65a25 9b02b370
Loading
Loading
Loading
Loading

system/stack/acl/acl.h

0 → 100644
+95 −0
Original line number Diff line number Diff line
/*
 * Copyright 2020 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 <stdint.h>
#include "stack/include/bt_types.h"
#include "types/raw_address.h"

#define BTM_MAX_SCN_ 31  // PORT_MAX_RFC_PORTS packages/modules/Bluetooth/system/stack/include/rfcdefs.h

/* Define the ACL Management control structure
 */
typedef struct {
  uint16_t hci_handle;
  uint16_t pkt_types_mask;
  uint16_t clock_offset;
  RawAddress remote_addr;
  DEV_CLASS remote_dc;
  BD_NAME remote_name;

  uint16_t manufacturer;
  uint16_t lmp_subversion;
  uint16_t link_super_tout;
  BD_FEATURES
  peer_lmp_feature_pages[HCI_EXT_FEATURES_PAGE_MAX + 1]; /* Peer LMP Extended
                                                            features mask table
                                                            for the device */
  uint8_t num_read_pages;
  uint8_t lmp_version;

  bool in_use;
  uint8_t link_role;
  bool link_up_issued; /* True if busy_level link up has been issued */

#define BTM_ACL_SWKEY_STATE_IDLE 0
#define BTM_ACL_SWKEY_STATE_MODE_CHANGE 1
#define BTM_ACL_SWKEY_STATE_ENCRYPTION_OFF 2
#define BTM_ACL_SWKEY_STATE_SWITCHING 3
#define BTM_ACL_SWKEY_STATE_ENCRYPTION_ON 4
#define BTM_ACL_SWKEY_STATE_IN_PROGRESS 5
  uint8_t switch_role_state;

#define BTM_MAX_SW_ROLE_FAILED_ATTEMPTS 3
  uint8_t switch_role_failed_attempts;

#define BTM_ACL_ENCRYPT_STATE_IDLE 0
#define BTM_ACL_ENCRYPT_STATE_ENCRYPT_OFF 1 /* encryption turning off */
#define BTM_ACL_ENCRYPT_STATE_TEMP_FUNC \
  2 /* temporarily off for change link key or role switch */
#define BTM_ACL_ENCRYPT_STATE_ENCRYPT_ON 3 /* encryption turning on */
  uint8_t encrypt_state;                   /* overall BTM encryption state */

  tBT_TRANSPORT transport;
  RawAddress conn_addr;   /* local device address used for this connection */
  uint8_t conn_addr_type; /* local device address type for this connection */
  RawAddress active_remote_addr;   /* remote address used on this connection */
  uint8_t active_remote_addr_type; /* local device address type for this
                                      connection */
  BD_FEATURES peer_le_features; /* Peer LE Used features mask for the device */

} tACL_CONN;

typedef struct {
  /****************************************************
   **      ACL Management
   ****************************************************/
  tACL_CONN acl_db[MAX_L2CAP_LINKS];
  uint8_t btm_scn[BTM_MAX_SCN_]; /* current SCNs: true if SCN is in use */
  uint16_t btm_def_link_policy;
  uint16_t btm_def_link_super_tout;

  tBTM_BL_EVENT_MASK bl_evt_mask;
  tBTM_BL_CHANGE_CB* p_bl_changed_cb; /* Callback for when Busy Level changed */

  uint8_t pm_pend_link; /* the index of acl_db, which has a pending PM cmd */

  /* Packet types supported by the local device */
  uint16_t btm_acl_pkt_types_supported;

  uint8_t acl_disc_reason;
} tACL_CB;  // NEW
+4 −3
Original line number Diff line number Diff line
@@ -198,8 +198,9 @@ void avdt_l2c_connect_ind_cback(const RawAddress& bd_addr, uint16_t lcid,
        tACL_CONN* p_acl_cb = btm_bda_to_acl(bd_addr, BT_TRANSPORT_BR_EDR);
        btm_set_packet_types(
            p_acl_cb,
            (btm_cb.btm_acl_pkt_types_supported | HCI_PKT_TYPES_MASK_NO_3_DH1 |
             HCI_PKT_TYPES_MASK_NO_3_DH3 | HCI_PKT_TYPES_MASK_NO_3_DH5));
            (btm_cb.acl_cb_.btm_acl_pkt_types_supported |
             HCI_PKT_TYPES_MASK_NO_3_DH1 | HCI_PKT_TYPES_MASK_NO_3_DH3 |
             HCI_PKT_TYPES_MASK_NO_3_DH5));
      }

      /* Check the security */
@@ -317,7 +318,7 @@ void avdt_l2c_connect_cfm_cback(uint16_t lcid, uint16_t result) {
                  btm_bda_to_acl(p_ccb->peer_addr, BT_TRANSPORT_BR_EDR);
              btm_set_packet_types(
                  p_acl_cb,
                  (btm_cb.btm_acl_pkt_types_supported |
                  (btm_cb.acl_cb_.btm_acl_pkt_types_supported |
                   HCI_PKT_TYPES_MASK_NO_3_DH1 | HCI_PKT_TYPES_MASK_NO_3_DH3 |
                   HCI_PKT_TYPES_MASK_NO_3_DH5));
            }
+58 −53
Original line number Diff line number Diff line
@@ -73,8 +73,8 @@ static void btm_process_remote_ext_features(tACL_CONN* p_acl_cb,
void btm_acl_init(void) {
  BTM_TRACE_DEBUG("btm_acl_init");
  /* Initialize nonzero defaults */
  btm_cb.btm_def_link_super_tout = HCI_DEFAULT_INACT_TOUT;
  btm_cb.acl_disc_reason = 0xff;
  btm_cb.acl_cb_.btm_def_link_super_tout = HCI_DEFAULT_INACT_TOUT;
  btm_cb.acl_cb_.acl_disc_reason = 0xff;
}

/*******************************************************************************
@@ -93,7 +93,7 @@ void btm_acl_init(void) {
 *
 ******************************************************************************/
tACL_CONN* btm_bda_to_acl(const RawAddress& bda, tBT_TRANSPORT transport) {
  tACL_CONN* p = &btm_cb.acl_db[0];
  tACL_CONN* p = &btm_cb.acl_cb_.acl_db[0];
  uint16_t xx;
  for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p++) {
    if ((p->in_use) && p->remote_addr == bda && p->transport == transport) {
@@ -117,7 +117,7 @@ tACL_CONN* btm_bda_to_acl(const RawAddress& bda, tBT_TRANSPORT transport) {
 *
 ******************************************************************************/
uint8_t btm_handle_to_acl_index(uint16_t hci_handle) {
  tACL_CONN* p = &btm_cb.acl_db[0];
  tACL_CONN* p = &btm_cb.acl_cb_.acl_db[0];
  uint8_t xx;
  BTM_TRACE_DEBUG("btm_handle_to_acl_index");
  for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p++) {
@@ -204,12 +204,12 @@ void btm_acl_created(const RawAddress& bda, DEV_CLASS dc, BD_NAME bdn,
    p->link_role = link_role;
    p->transport = transport;
    VLOG(1) << "Duplicate btm_acl_created: RemBdAddr: " << bda;
    BTM_SetLinkPolicy(p->remote_addr, &btm_cb.btm_def_link_policy);
    BTM_SetLinkPolicy(p->remote_addr, &btm_cb.acl_cb_.btm_def_link_policy);
    return;
  }

  /* Allocate acl_db entry */
  for (xx = 0, p = &btm_cb.acl_db[0]; xx < MAX_L2CAP_LINKS; xx++, p++) {
  for (xx = 0, p = &btm_cb.acl_cb_.acl_db[0]; xx < MAX_L2CAP_LINKS; xx++, p++) {
    if (!p->in_use) {
      p->in_use = true;
      p->hci_handle = hci_handle;
@@ -297,7 +297,7 @@ void btm_acl_created(const RawAddress& bda, DEV_CLASS dc, BD_NAME bdn,
void btm_acl_update_conn_addr(uint16_t conn_handle, const RawAddress& address) {
  uint8_t idx = btm_handle_to_acl_index(conn_handle);
  if (idx != MAX_L2CAP_LINKS) {
    btm_cb.acl_db[idx].conn_addr = address;
    btm_cb.acl_cb_.acl_db[idx].conn_addr = address;
  }
}

@@ -353,13 +353,13 @@ void btm_acl_removed(const RawAddress& bda, tBT_TRANSPORT transport) {
      p->link_up_issued = false;

      /* If anyone cares, indicate the database changed */
      if (btm_cb.p_bl_changed_cb) {
      if (btm_cb.acl_cb_.p_bl_changed_cb) {
        tBTM_BL_EVENT_DATA evt_data;
        evt_data.event = BTM_BL_DISCN_EVT;
        evt_data.discn.p_bda = &bda;
        evt_data.discn.handle = p->hci_handle;
        evt_data.discn.transport = p->transport;
        (*btm_cb.p_bl_changed_cb)(&evt_data);
        (*btm_cb.acl_cb_.p_bl_changed_cb)(&evt_data);
      }

      btm_acl_update_busy_level(BTM_BLI_ACL_DOWN_EVT);
@@ -411,7 +411,7 @@ void btm_acl_removed(const RawAddress& bda, tBT_TRANSPORT transport) {
 *
 ******************************************************************************/
void btm_acl_device_down(void) {
  tACL_CONN* p = &btm_cb.acl_db[0];
  tACL_CONN* p = &btm_cb.acl_cb_.acl_db[0];
  uint16_t xx;
  BTM_TRACE_DEBUG("btm_acl_device_down");
  for (xx = 0; xx < MAX_L2CAP_LINKS; xx++, p++) {
@@ -481,10 +481,11 @@ void btm_acl_update_busy_level(tBTM_BLI_EVENT event) {
    evt.event = BTM_BL_UPDATE_EVT;
    evt.busy_level = busy_level;
    btm_cb.busy_level = busy_level;
    if (btm_cb.p_bl_changed_cb && (btm_cb.bl_evt_mask & BTM_BL_UPDATE_MASK)) {
    if (btm_cb.acl_cb_.p_bl_changed_cb &&
        (btm_cb.acl_cb_.bl_evt_mask & BTM_BL_UPDATE_MASK)) {
      tBTM_BL_EVENT_DATA btm_bl_event_data;
      btm_bl_event_data.update = evt;
      (*btm_cb.p_bl_changed_cb)(&btm_bl_event_data);
      (*btm_cb.acl_cb_.p_bl_changed_cb)(&btm_bl_event_data);
    }
  }
}
@@ -651,7 +652,7 @@ void btm_acl_encrypt_change(uint16_t handle, uint8_t status,
  xx = btm_handle_to_acl_index(handle);
  /* don't assume that we can never get a bad hci_handle */
  if (xx < MAX_L2CAP_LINKS)
    p = &btm_cb.acl_db[xx];
    p = &btm_cb.acl_cb_.acl_db[xx];
  else
    return;

@@ -681,7 +682,8 @@ void btm_acl_encrypt_change(uint16_t handle, uint8_t status,
                               &p->remote_addr);

    /* if role change event is registered, report it now */
    if (btm_cb.p_bl_changed_cb && (btm_cb.bl_evt_mask & BTM_BL_ROLE_CHG_MASK)) {
    if (btm_cb.acl_cb_.p_bl_changed_cb &&
        (btm_cb.acl_cb_.bl_evt_mask & BTM_BL_ROLE_CHG_MASK)) {
      tBTM_BL_ROLE_CHG_DATA evt;
      evt.event = BTM_BL_ROLE_CHG_EVT;
      evt.new_role = btm_cb.devcb.switch_role_ref_data.role;
@@ -689,7 +691,7 @@ void btm_acl_encrypt_change(uint16_t handle, uint8_t status,
      evt.hci_status = btm_cb.devcb.switch_role_ref_data.hci_status;
      tBTM_BL_EVENT_DATA btm_bl_event_data;
      btm_bl_event_data.role_chg = evt;
      (*btm_cb.p_bl_changed_cb)(&btm_bl_event_data);
      (*btm_cb.acl_cb_.p_bl_changed_cb)(&btm_bl_event_data);

      BTM_TRACE_DEBUG(
          "%s: Role Switch Event: new_role 0x%02x, HCI Status 0x%02x, rs_st:%d",
@@ -782,7 +784,7 @@ void BTM_SetDefaultLinkPolicy(uint16_t settings) {
  BTM_TRACE_DEBUG("BTM_SetDefaultLinkPolicy setting:0x%04x", settings);

  check_link_policy(&settings);
  btm_cb.btm_def_link_policy = settings;
  btm_cb.acl_cb_.btm_def_link_policy = settings;
  BTM_TRACE_DEBUG("Set DefaultLinkPolicy:0x%04x", settings);

  /* Set the default Link Policy of the controller */
@@ -839,7 +841,7 @@ void btm_use_preferred_conn_params(const RawAddress& bda) {
 *
 ******************************************************************************/
void btm_read_remote_version_complete(uint8_t* p) {
  tACL_CONN* p_acl_cb = &btm_cb.acl_db[0];
  tACL_CONN* p_acl_cb = &btm_cb.acl_cb_.acl_db[0];
  uint8_t status;
  uint16_t handle;
  int xx;
@@ -957,7 +959,7 @@ void btm_read_remote_features(uint16_t handle) {
    return;
  }

  p_acl_cb = &btm_cb.acl_db[acl_idx];
  p_acl_cb = &btm_cb.acl_cb_.acl_db[acl_idx];
  p_acl_cb->num_read_pages = 0;
  memset(p_acl_cb->peer_lmp_feature_pages, 0,
         sizeof(p_acl_cb->peer_lmp_feature_pages));
@@ -1019,7 +1021,7 @@ void btm_read_remote_features_complete(uint8_t* p) {
    return;
  }

  p_acl_cb = &btm_cb.acl_db[acl_idx];
  p_acl_cb = &btm_cb.acl_cb_.acl_db[acl_idx];

  /* Copy the received features page */
  STREAM_TO_ARRAY(p_acl_cb->peer_lmp_feature_pages[0], p,
@@ -1102,7 +1104,7 @@ void btm_read_remote_ext_features_complete(uint8_t* p, uint8_t evt_len) {
        "invalid", page_num, max_page);
  }

  p_acl_cb = &btm_cb.acl_db[acl_idx];
  p_acl_cb = &btm_cb.acl_cb_.acl_db[acl_idx];

  /* Copy the received features page */
  STREAM_TO_ARRAY(p_acl_cb->peer_lmp_feature_pages[page_num], p,
@@ -1154,7 +1156,7 @@ void btm_read_remote_ext_features_failed(uint8_t status, uint16_t handle) {
    return;
  }

  p_acl_cb = &btm_cb.acl_db[acl_idx];
  p_acl_cb = &btm_cb.acl_cb_.acl_db[acl_idx];

  /* Process supported features only */
  btm_process_remote_ext_features(p_acl_cb, 1);
@@ -1182,10 +1184,11 @@ void btm_establish_continue(tACL_CONN* p_acl_cb) {
    /* For now there are a some devices that do not like sending */
    /* commands events and data at the same time. */
    /* Set the packet types to the default allowed by the device */
    btm_set_packet_types(p_acl_cb, btm_cb.btm_acl_pkt_types_supported);
    btm_set_packet_types(p_acl_cb, btm_cb.acl_cb_.btm_acl_pkt_types_supported);

    if (btm_cb.btm_def_link_policy)
      BTM_SetLinkPolicy(p_acl_cb->remote_addr, &btm_cb.btm_def_link_policy);
    if (btm_cb.acl_cb_.btm_def_link_policy)
      BTM_SetLinkPolicy(p_acl_cb->remote_addr,
                        &btm_cb.acl_cb_.btm_def_link_policy);
  }
#endif
  if (p_acl_cb->link_up_issued) {
@@ -1195,7 +1198,7 @@ void btm_establish_continue(tACL_CONN* p_acl_cb) {
  p_acl_cb->link_up_issued = true;

  /* If anyone cares, tell them that the database changed */
  if (btm_cb.p_bl_changed_cb) {
  if (btm_cb.acl_cb_.p_bl_changed_cb) {
    evt_data.event = BTM_BL_CONN_EVT;
    evt_data.conn.p_bda = &p_acl_cb->remote_addr;
    evt_data.conn.p_bdn = p_acl_cb->remote_name;
@@ -1204,7 +1207,7 @@ void btm_establish_continue(tACL_CONN* p_acl_cb) {
    evt_data.conn.handle = p_acl_cb->hci_handle;
    evt_data.conn.transport = p_acl_cb->transport;

    (*btm_cb.p_bl_changed_cb)(&evt_data);
    (*btm_cb.acl_cb_.p_bl_changed_cb)(&evt_data);
  }
  btm_acl_update_busy_level(BTM_BLI_ACL_UP_EVT);
}
@@ -1222,7 +1225,7 @@ void btm_establish_continue(tACL_CONN* p_acl_cb) {
 ******************************************************************************/
void BTM_SetDefaultLinkSuperTout(uint16_t timeout) {
  BTM_TRACE_DEBUG("BTM_SetDefaultLinkSuperTout");
  btm_cb.btm_def_link_super_tout = timeout;
  btm_cb.acl_cb_.btm_def_link_super_tout = timeout;
}

/*******************************************************************************
@@ -1317,7 +1320,7 @@ uint16_t BTM_GetNumAclLinks(void) {
  uint16_t num_acl = 0;

  for (uint16_t i = 0; i < MAX_L2CAP_LINKS; ++i) {
    if (btm_cb.acl_db[i].in_use) ++num_acl;
    if (btm_cb.acl_cb_.acl_db[i].in_use) ++num_acl;
  }

  return num_acl;
@@ -1334,7 +1337,7 @@ uint16_t BTM_GetNumAclLinks(void) {
 *
 ******************************************************************************/
uint16_t btm_get_acl_disc_reason_code(void) {
  uint8_t res = btm_cb.acl_disc_reason;
  uint8_t res = btm_cb.acl_cb_.acl_disc_reason;
  BTM_TRACE_DEBUG("btm_get_acl_disc_reason_code");
  return (res);
}
@@ -1383,7 +1386,8 @@ void btm_process_clk_off_comp_evt(uint16_t hci_handle, uint16_t clock_offset) {
  BTM_TRACE_DEBUG("btm_process_clk_off_comp_evt");
  /* Look up the connection by handle and set the current mode */
  xx = btm_handle_to_acl_index(hci_handle);
  if (xx < MAX_L2CAP_LINKS) btm_cb.acl_db[xx].clock_offset = clock_offset;
  if (xx < MAX_L2CAP_LINKS)
    btm_cb.acl_cb_.acl_db[xx].clock_offset = clock_offset;
}

/*******************************************************************************
@@ -1509,7 +1513,8 @@ void btm_acl_role_changed(uint8_t hci_status, const RawAddress* bd_addr,
  btm_acl_report_role_change(hci_status, bd_addr);

  /* if role change event is registered, report it now */
  if (btm_cb.p_bl_changed_cb && (btm_cb.bl_evt_mask & BTM_BL_ROLE_CHG_MASK)) {
  if (btm_cb.acl_cb_.p_bl_changed_cb &&
      (btm_cb.acl_cb_.bl_evt_mask & BTM_BL_ROLE_CHG_MASK)) {
    tBTM_BL_ROLE_CHG_DATA evt;
    evt.event = BTM_BL_ROLE_CHG_EVT;
    evt.new_role = new_role;
@@ -1517,7 +1522,7 @@ void btm_acl_role_changed(uint8_t hci_status, const RawAddress* bd_addr,
    evt.hci_status = hci_status;
    tBTM_BL_EVENT_DATA btm_bl_event_data;
    btm_bl_event_data.role_chg = evt;
    (*btm_cb.p_bl_changed_cb)(&btm_bl_event_data);
    (*btm_cb.acl_cb_.p_bl_changed_cb)(&btm_bl_event_data);
  }

  BTM_TRACE_DEBUG(
@@ -1562,8 +1567,8 @@ uint8_t BTM_AllocateSCN(void) {

  // stack reserves scn 1 for HFP, HSP we still do the correct way
  for (x = 1; x < BTM_MAX_SCN; x++) {
    if (!btm_cb.btm_scn[x]) {
      btm_cb.btm_scn[x] = true;
    if (!btm_cb.acl_cb_.btm_scn[x]) {
      btm_cb.acl_cb_.btm_scn[x] = true;
      return (x + 1);
    }
  }
@@ -1588,8 +1593,8 @@ bool BTM_TryAllocateSCN(uint8_t scn) {
  if ((scn >= BTM_MAX_SCN) || (scn == 1)) return false;

  /* check if this port is available */
  if (!btm_cb.btm_scn[scn - 1]) {
    btm_cb.btm_scn[scn - 1] = true;
  if (!btm_cb.acl_cb_.btm_scn[scn - 1]) {
    btm_cb.acl_cb_.btm_scn[scn - 1] = true;
    return true;
  }

@@ -1608,7 +1613,7 @@ bool BTM_TryAllocateSCN(uint8_t scn) {
bool BTM_FreeSCN(uint8_t scn) {
  BTM_TRACE_DEBUG("BTM_FreeSCN ");
  if (scn <= BTM_MAX_SCN) {
    btm_cb.btm_scn[scn - 1] = false;
    btm_cb.acl_cb_.btm_scn[scn - 1] = false;
    return (true);
  } else {
    return (false); /* Illegal SCN passed in */
@@ -1631,12 +1636,12 @@ tBTM_STATUS btm_set_packet_types(tACL_CONN* p, uint16_t pkt_types) {
  BTM_TRACE_DEBUG("btm_set_packet_types");
  /* Save in the ACL control blocks, types that we support */
  temp_pkt_types = (pkt_types & BTM_ACL_SUPPORTED_PKTS_MASK &
                    btm_cb.btm_acl_pkt_types_supported);
                    btm_cb.acl_cb_.btm_acl_pkt_types_supported);

  /* OR in any exception packet types if at least 2.0 version of spec */
  temp_pkt_types |=
      ((pkt_types & BTM_ACL_EXCEPTION_PKTS_MASK) |
       (btm_cb.btm_acl_pkt_types_supported & BTM_ACL_EXCEPTION_PKTS_MASK));
  temp_pkt_types |= ((pkt_types & BTM_ACL_EXCEPTION_PKTS_MASK) |
                     (btm_cb.acl_cb_.btm_acl_pkt_types_supported &
                      BTM_ACL_EXCEPTION_PKTS_MASK));

  /* Exclude packet types not supported by the peer */
  btm_acl_chk_peer_pkt_type_support(p, &temp_pkt_types);
@@ -1667,7 +1672,7 @@ uint16_t btm_get_max_packet_size(const RawAddress& addr) {
  } else {
    /* Special case for when info for the local device is requested */
    if (addr == *controller_get_interface()->get_address()) {
      pkt_types = btm_cb.btm_acl_pkt_types_supported;
      pkt_types = btm_cb.acl_cb_.btm_acl_pkt_types_supported;
    }
  }

@@ -1756,14 +1761,14 @@ tBTM_STATUS BTM_RegBusyLevelNotif(tBTM_BL_CHANGE_CB* p_cb, uint8_t* p_level,
  BTM_TRACE_DEBUG("BTM_RegBusyLevelNotif");
  if (p_level) *p_level = btm_cb.busy_level;

  btm_cb.bl_evt_mask = evt_mask;
  btm_cb.acl_cb_.bl_evt_mask = evt_mask;

  if (!p_cb)
    btm_cb.p_bl_changed_cb = NULL;
  else if (btm_cb.p_bl_changed_cb)
    btm_cb.acl_cb_.p_bl_changed_cb = NULL;
  else if (btm_cb.acl_cb_.p_bl_changed_cb)
    return (BTM_BUSY);
  else
    btm_cb.p_bl_changed_cb = p_cb;
    btm_cb.acl_cb_.p_bl_changed_cb = p_cb;

  return (BTM_SUCCESS);
}
@@ -1958,7 +1963,7 @@ void btm_read_tx_power_timeout(UNUSED_ATTR void* data) {
void btm_read_tx_power_complete(uint8_t* p, bool is_ble) {
  tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_tx_power_cmpl_cb;
  tBTM_TX_POWER_RESULT result;
  tACL_CONN* p_acl_cb = &btm_cb.acl_db[0];
  tACL_CONN* p_acl_cb = &btm_cb.acl_cb_.acl_db[0];

  BTM_TRACE_DEBUG("%s", __func__);
  alarm_cancel(btm_cb.devcb.read_tx_power_timer);
@@ -2027,7 +2032,7 @@ void btm_read_rssi_timeout(UNUSED_ATTR void* data) {
void btm_read_rssi_complete(uint8_t* p) {
  tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_rssi_cmpl_cb;
  tBTM_RSSI_RESULT result;
  tACL_CONN* p_acl_cb = &btm_cb.acl_db[0];
  tACL_CONN* p_acl_cb = &btm_cb.acl_cb_.acl_db[0];

  BTM_TRACE_DEBUG("%s", __func__);
  alarm_cancel(btm_cb.devcb.read_rssi_timer);
@@ -2093,7 +2098,7 @@ void btm_read_failed_contact_counter_timeout(UNUSED_ATTR void* data) {
void btm_read_failed_contact_counter_complete(uint8_t* p) {
  tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_failed_contact_counter_cmpl_cb;
  tBTM_FAILED_CONTACT_COUNTER_RESULT result;
  tACL_CONN* p_acl_cb = &btm_cb.acl_db[0];
  tACL_CONN* p_acl_cb = &btm_cb.acl_cb_.acl_db[0];

  BTM_TRACE_DEBUG("%s", __func__);
  alarm_cancel(btm_cb.devcb.read_failed_contact_counter_timer);
@@ -2160,7 +2165,7 @@ void btm_read_automatic_flush_timeout_timeout(UNUSED_ATTR void* data) {
void btm_read_automatic_flush_timeout_complete(uint8_t* p) {
  tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_automatic_flush_timeout_cmpl_cb;
  tBTM_AUTOMATIC_FLUSH_TIMEOUT_RESULT result;
  tACL_CONN* p_acl_cb = &btm_cb.acl_db[0];
  tACL_CONN* p_acl_cb = &btm_cb.acl_cb_.acl_db[0];

  BTM_TRACE_DEBUG("%s", __func__);
  alarm_cancel(btm_cb.devcb.read_automatic_flush_timeout_timer);
@@ -2224,7 +2229,7 @@ void btm_read_link_quality_timeout(UNUSED_ATTR void* data) {
void btm_read_link_quality_complete(uint8_t* p) {
  tBTM_CMPL_CB* p_cb = btm_cb.devcb.p_link_qual_cmpl_cb;
  tBTM_LINK_QUALITY_RESULT result;
  tACL_CONN* p_acl_cb = &btm_cb.acl_db[0];
  tACL_CONN* p_acl_cb = &btm_cb.acl_cb_.acl_db[0];

  BTM_TRACE_DEBUG("%s", __func__);
  alarm_cancel(btm_cb.devcb.read_link_quality_timer);
@@ -2453,7 +2458,7 @@ void btm_acl_paging(BT_HDR* p, const RawAddress& bda) {
 ******************************************************************************/
bool btm_acl_notif_conn_collision(const RawAddress& bda) {
  /* Report possible collision to the upper layer. */
  if (btm_cb.p_bl_changed_cb) {
  if (btm_cb.acl_cb_.p_bl_changed_cb) {
    VLOG(1) << __func__ << " RemBdAddr: " << bda;

    tBTM_BL_EVENT_DATA evt_data;
@@ -2461,7 +2466,7 @@ bool btm_acl_notif_conn_collision(const RawAddress& bda) {
    evt_data.conn.p_bda = &bda;
    evt_data.conn.transport = BT_TRANSPORT_BR_EDR;
    evt_data.conn.handle = BTM_INVALID_HCI_HANDLE;
    (*btm_cb.p_bl_changed_cb)(&evt_data);
    (*btm_cb.acl_cb_.p_bl_changed_cb)(&evt_data);
    return true;
  } else {
    return false;
+1 −1
Original line number Diff line number Diff line
@@ -281,7 +281,7 @@ bool BTM_IsBleConnection(uint16_t conn_handle) {
  xx = btm_handle_to_acl_index(conn_handle);
  if (xx >= MAX_L2CAP_LINKS) return false;

  p = &btm_cb.acl_db[xx];
  p = &btm_cb.acl_cb_.acl_db[xx];

  return (p->transport == BT_TRANSPORT_LE);
}
+2 −1
Original line number Diff line number Diff line
@@ -2270,7 +2270,8 @@ void btm_ble_read_remote_features_complete(uint8_t* p) {
  }

  if (status == HCI_SUCCESS) {
    STREAM_TO_ARRAY(btm_cb.acl_db[idx].peer_le_features, p, BD_FEATURES_LEN);
    STREAM_TO_ARRAY(btm_cb.acl_cb_.acl_db[idx].peer_le_features, p,
                    BD_FEATURES_LEN);
  }

  btsnd_hcic_rmt_ver_req(handle);
Loading