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

Commit c7786459 authored by Hui Peng's avatar Hui Peng
Browse files

[Invisalign2] Separate ACL events from security events

Bug: 301661850
Test: mma packages/modules/Bluetooth

Change-Id: I5ed6c1ef897432277e995646f88a71ba2c1fb6b3
parent d92d868b
Loading
Loading
Loading
Loading
+45 −22
Original line number Original line Diff line number Diff line
@@ -177,6 +177,15 @@ WaitForAllAclConnectionsToDrain::FromAlarmCallbackData(void* data) {
static void bta_dm_delay_role_switch_cback(void* data);
static void bta_dm_delay_role_switch_cback(void* data);
static void bta_dm_wait_for_acl_to_drain_cback(void* data);
static void bta_dm_wait_for_acl_to_drain_cback(void* data);


/** Initialises the BT device manager */
void bta_dm_enable(tBTA_DM_SEC_CBACK* p_sec_cback,
                   tBTA_DM_ACL_CBACK *p_acl_cback) {

  if (p_acl_cback != NULL) bta_dm_acl_cb.p_acl_cback = p_acl_cback;

  bta_dm_sec_enable(p_sec_cback);
}

/*******************************************************************************
/*******************************************************************************
 *
 *
 * Function         bta_dm_init_cb
 * Function         bta_dm_init_cb
@@ -189,6 +198,7 @@ static void bta_dm_wait_for_acl_to_drain_cback(void* data);
 ******************************************************************************/
 ******************************************************************************/
static void bta_dm_init_cb(void) {
static void bta_dm_init_cb(void) {
  bta_dm_cb = {};
  bta_dm_cb = {};
  bta_dm_acl_cb = {};
  bta_dm_cb.disable_timer = alarm_new("bta_dm.disable_timer");
  bta_dm_cb.disable_timer = alarm_new("bta_dm.disable_timer");
  bta_dm_cb.switch_delay_timer = alarm_new("bta_dm.switch_delay_timer");
  bta_dm_cb.switch_delay_timer = alarm_new("bta_dm.switch_delay_timer");
  for (size_t i = 0; i < BTA_DM_NUM_PM_TIMER; i++) {
  for (size_t i = 0; i < BTA_DM_NUM_PM_TIMER; i++) {
@@ -221,6 +231,7 @@ static void bta_dm_deinit_cb(void) {
    }
    }
  }
  }
  bta_dm_cb = {};
  bta_dm_cb = {};
  bta_dm_acl_cb = {};
}
}


void BTA_dm_on_hw_off() {
void BTA_dm_on_hw_off() {
@@ -239,16 +250,22 @@ void BTA_dm_on_hw_off() {


void BTA_dm_on_hw_on() {
void BTA_dm_on_hw_on() {
  DEV_CLASS dev_class;
  DEV_CLASS dev_class;
  tBTA_DM_SEC_CBACK* temp_cback;
  tBTA_DM_SEC_CBACK* temp_sec_cback;
  tBTA_DM_ACL_CBACK* temp_acl_cback;

  uint8_t key_mask = 0;
  uint8_t key_mask = 0;
  tBTA_BLE_LOCAL_ID_KEYS id_key;
  tBTA_BLE_LOCAL_ID_KEYS id_key;


  /* save security callback */
  /* save callbacks */
  temp_cback = bta_dm_cb.p_sec_cback;
  temp_sec_cback = bta_dm_cb.p_sec_cback;
  temp_acl_cback = bta_dm_acl_cb.p_acl_cback;

  /* make sure the control block is properly initialized */
  /* make sure the control block is properly initialized */
  bta_dm_init_cb();
  bta_dm_init_cb();
  /* and retrieve the callback */
  /* and restore the callbacks */
  bta_dm_cb.p_sec_cback = temp_cback;
  bta_dm_cb.p_sec_cback = temp_sec_cback;
  bta_dm_acl_cb.p_acl_cback = temp_acl_cback;



  /* hw is ready, go on with BTA DM initialization */
  /* hw is ready, go on with BTA DM initialization */
  alarm_free(bta_dm_search_cb.search_timer);
  alarm_free(bta_dm_search_cb.search_timer);
@@ -299,8 +316,8 @@ void BTA_dm_on_hw_on() {
    BTM_BleReadControllerFeatures(bta_dm_ctrl_features_rd_cmpl_cback);
    BTM_BleReadControllerFeatures(bta_dm_ctrl_features_rd_cmpl_cback);
  } else {
  } else {
    /* Set controller features even if vendor support is not included */
    /* Set controller features even if vendor support is not included */
    if (bta_dm_cb.p_sec_cback)
    if (bta_dm_acl_cb.p_acl_cback)
      bta_dm_cb.p_sec_cback(BTA_DM_LE_FEATURES_READ, NULL);
      bta_dm_acl_cb.p_acl_cback(BTA_DM_LE_FEATURES_READ, NULL);
  }
  }


  btm_ble_scanner_init();
  btm_ble_scanner_init();
@@ -473,7 +490,7 @@ void bta_dm_process_remove_device(const RawAddress& bd_addr) {


  if (bta_dm_cb.p_sec_cback) {
  if (bta_dm_cb.p_sec_cback) {
    tBTA_DM_SEC sec_event;
    tBTA_DM_SEC sec_event;
    sec_event.link_down.bd_addr = bd_addr;
    sec_event.dev_unpair.bd_addr = bd_addr;
    bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &sec_event);
    bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &sec_event);
  }
  }
}
}
@@ -743,14 +760,13 @@ void bta_dm_acl_up(const RawAddress& bd_addr, tBT_TRANSPORT transport,
    device->set_both_device_ssr_capable();
    device->set_both_device_ssr_capable();
  }
  }


  if (bta_dm_cb.p_sec_cback) {
  if (bta_dm_acl_cb.p_acl_cback) {
    tBTA_DM_SEC conn;
    tBTA_DM_ACL conn{};
    memset(&conn, 0, sizeof(tBTA_DM_SEC));
    conn.link_up.bd_addr = bd_addr;
    conn.link_up.bd_addr = bd_addr;
    conn.link_up.transport_link_type = transport;
    conn.link_up.transport_link_type = transport;
    conn.link_up.acl_handle = acl_handle;
    conn.link_up.acl_handle = acl_handle;


    bta_dm_cb.p_sec_cback(BTA_DM_LINK_UP_EVT, &conn);
    bta_dm_acl_cb.p_acl_cback(BTA_DM_LINK_UP_EVT, &conn);
    LOG_DEBUG("Executed security callback for new connection available");
    LOG_DEBUG("Executed security callback for new connection available");
  }
  }
  bta_dm_adjust_roles(true);
  bta_dm_adjust_roles(true);
@@ -764,12 +780,12 @@ void BTA_dm_acl_up(const RawAddress bd_addr, tBT_TRANSPORT transport,


static void bta_dm_acl_up_failed(const RawAddress bd_addr,
static void bta_dm_acl_up_failed(const RawAddress bd_addr,
                                 tBT_TRANSPORT transport, tHCI_STATUS status) {
                                 tBT_TRANSPORT transport, tHCI_STATUS status) {
  if (bta_dm_cb.p_sec_cback) {
  if (bta_dm_acl_cb.p_acl_cback) {
    tBTA_DM_SEC conn = {};
    tBTA_DM_ACL conn = {};
    conn.link_up_failed.bd_addr = bd_addr;
    conn.link_up_failed.bd_addr = bd_addr;
    conn.link_up_failed.transport_link_type = transport;
    conn.link_up_failed.transport_link_type = transport;
    conn.link_up_failed.status = status;
    conn.link_up_failed.status = status;
    bta_dm_cb.p_sec_cback(BTA_DM_LINK_UP_FAILED_EVT, &conn);
    bta_dm_acl_cb.p_acl_cback(BTA_DM_LINK_UP_FAILED_EVT, &conn);
  }
  }
}
}


@@ -849,14 +865,21 @@ static void bta_dm_acl_down(const RawAddress& bd_addr,
    bta_dm_process_remove_device_no_callback(bd_addr);
    bta_dm_process_remove_device_no_callback(bd_addr);
  }
  }


  if (bta_dm_cb.p_sec_cback) {
  if (bta_dm_acl_cb.p_acl_cback) {
    tBTA_DM_SEC conn;
    tBTA_DM_ACL conn{};
    memset(&conn, 0, sizeof(tBTA_DM_SEC));
    conn.link_down.bd_addr = bd_addr;
    conn.link_down.bd_addr = bd_addr;
    conn.link_down.transport_link_type = transport;
    conn.link_down.transport_link_type = transport;


    bta_dm_cb.p_sec_cback(BTA_DM_LINK_DOWN_EVT, &conn);
    bta_dm_acl_cb.p_acl_cback(BTA_DM_LINK_DOWN_EVT, &conn);
    if (issue_unpair_cb) bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &conn);
  }

  // TODO: reorganize and factor out the following logic
  if (issue_unpair_cb && bta_dm_cb.p_sec_cback) {
    tBTA_DM_SEC conn{};
    conn.dev_unpair.bd_addr = bd_addr;
    conn.dev_unpair.transport_link_type = transport;

    bta_dm_cb.p_sec_cback(BTA_DM_DEV_UNPAIRED_EVT, &conn);
  }
  }


  bta_dm_adjust_roles(true);
  bta_dm_adjust_roles(true);
@@ -1700,8 +1723,8 @@ void bta_dm_ble_reset_id(void) {
static void bta_dm_ctrl_features_rd_cmpl_cback(tHCI_STATUS result) {
static void bta_dm_ctrl_features_rd_cmpl_cback(tHCI_STATUS result) {
  APPL_TRACE_DEBUG("%s  status = %d ", __func__, result);
  APPL_TRACE_DEBUG("%s  status = %d ", __func__, result);
  if (result == HCI_SUCCESS) {
  if (result == HCI_SUCCESS) {
    if (bta_dm_cb.p_sec_cback)
    if (bta_dm_acl_cb.p_acl_cback)
      bta_dm_cb.p_sec_cback(BTA_DM_LE_FEATURES_READ, NULL);
      bta_dm_acl_cb.p_acl_cback(BTA_DM_LE_FEATURES_READ, NULL);
  } else {
  } else {
    APPL_TRACE_ERROR("%s Ctrl BLE feature read failed: status :%d", __func__,
    APPL_TRACE_ERROR("%s Ctrl BLE feature read failed: status :%d", __func__,
                     result);
                     result);
+8 −0
Original line number Original line Diff line number Diff line
@@ -346,6 +346,10 @@ extern tBTA_DM_CONNECTED_SRVCS bta_dm_conn_srvcs;


#define BTA_DM_NUM_PM_TIMER 7
#define BTA_DM_NUM_PM_TIMER 7


typedef struct {
  tBTA_DM_ACL_CBACK* p_acl_cback;
} tBTA_DM_ACL_CB;

/* DM control block */
/* DM control block */
typedef struct {
typedef struct {
  tBTA_DM_ACTIVE_LINK device_list;
  tBTA_DM_ACTIVE_LINK device_list;
@@ -516,12 +520,16 @@ extern const tBTA_DM_EIR_CONF* p_bta_dm_eir_cfg;
/* DM control block */
/* DM control block */
extern tBTA_DM_CB bta_dm_cb;
extern tBTA_DM_CB bta_dm_cb;


/* DM control block for ACL management */
extern tBTA_DM_ACL_CB bta_dm_acl_cb;

/* DM search control block */
/* DM search control block */
extern tBTA_DM_SEARCH_CB bta_dm_search_cb;
extern tBTA_DM_SEARCH_CB bta_dm_search_cb;


/* DI control block */
/* DI control block */
extern tBTA_DM_DI_CB bta_dm_di_cb;
extern tBTA_DM_DI_CB bta_dm_di_cb;


void bta_dm_enable(tBTA_DM_SEC_CBACK*, tBTA_DM_ACL_CBACK*);
void bta_dm_disable();
void bta_dm_disable();
void bta_dm_set_dev_name(const std::vector<uint8_t>&);
void bta_dm_set_dev_name(const std::vector<uint8_t>&);
void bta_dm_remove_device(const RawAddress& bd_addr);
void bta_dm_remove_device(const RawAddress& bd_addr);
+1 −0
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@
#include "stack/include/bt_hdr.h"
#include "stack/include/bt_hdr.h"
#include "stack/include/bt_types.h"
#include "stack/include/bt_types.h"


tBTA_DM_ACL_CB bta_dm_acl_cb;
tBTA_DM_CB bta_dm_cb;
tBTA_DM_CB bta_dm_cb;
tBTA_DM_DI_CB bta_dm_di_cb;
tBTA_DM_DI_CB bta_dm_di_cb;


+1 −1
Original line number Original line Diff line number Diff line
@@ -104,7 +104,7 @@ void btm_dm_sec_init() {
}
}


/** Initialises the BT device security manager */
/** Initialises the BT device security manager */
void bta_dm_enable(tBTA_DM_SEC_CBACK* p_sec_cback) {
void bta_dm_sec_enable(tBTA_DM_SEC_CBACK* p_sec_cback) {
  /* make sure security callback is saved - if no callback, do not erase the
  /* make sure security callback is saved - if no callback, do not erase the
  previous one,
  previous one,
  it could be an error recovery mechanism */
  it could be an error recovery mechanism */
+2 −0
Original line number Original line Diff line number Diff line
@@ -22,6 +22,8 @@
#include "bta/include/bta_api.h"
#include "bta/include/bta_api.h"
#include "osi/include/osi.h"  // UNUSED_ATTR
#include "osi/include/osi.h"  // UNUSED_ATTR


void bta_dm_sec_enable(tBTA_DM_SEC_CBACK* p_sec_cback);

void bta_dm_add_ble_device(const RawAddress& bd_addr, tBLE_ADDR_TYPE addr_type,
void bta_dm_add_ble_device(const RawAddress& bd_addr, tBLE_ADDR_TYPE addr_type,
                           tBT_DEVICE_TYPE dev_type);
                           tBT_DEVICE_TYPE dev_type);
void bta_dm_add_blekey(const RawAddress& bd_addr, tBTA_LE_KEY_VALUE blekey,
void bta_dm_add_blekey(const RawAddress& bd_addr, tBTA_LE_KEY_VALUE blekey,
Loading