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

Commit ddfecc09 authored by Hansong Zhang's avatar Hansong Zhang
Browse files

L2cap: Add more Link Management API

Bug: 159815595
Tag: #refactor
Test: compile & verify basic functions working
Change-Id: I1a9007190c815531f09f44946f04365293c7dc78
parent 80958822
Loading
Loading
Loading
Loading
+2 −41
Original line number Diff line number Diff line
@@ -47,11 +47,11 @@
#include "device/include/interop.h"
#include "hcidefs.h"
#include "hcimsgs.h"
#include "l2c_int.h"
#include "main/shim/btm_api.h"
#include "main/shim/shim.h"
#include "osi/include/log.h"
#include "osi/include/osi.h"
#include "stack/include/l2cap_hci_link_interface.h"

static void btm_read_remote_features(uint16_t handle);
static void btm_read_remote_ext_features(uint16_t handle, uint8_t page_number);
@@ -791,45 +791,6 @@ void BTM_SetDefaultLinkPolicy(uint16_t settings) {
  btsnd_hcic_write_def_policy_set(settings);
}

void btm_use_preferred_conn_params(const RawAddress& bda) {
  tL2C_LCB* p_lcb = l2cu_find_lcb_by_bd_addr(bda, BT_TRANSPORT_LE);
  tBTM_SEC_DEV_REC* p_dev_rec = btm_find_or_alloc_dev(bda);

  /* If there are any preferred connection parameters, set them now */
  if ((p_lcb != NULL) && (p_dev_rec != NULL) &&
      (p_dev_rec->conn_params.min_conn_int >= BTM_BLE_CONN_INT_MIN) &&
      (p_dev_rec->conn_params.min_conn_int <= BTM_BLE_CONN_INT_MAX) &&
      (p_dev_rec->conn_params.max_conn_int >= BTM_BLE_CONN_INT_MIN) &&
      (p_dev_rec->conn_params.max_conn_int <= BTM_BLE_CONN_INT_MAX) &&
      (p_dev_rec->conn_params.slave_latency <= BTM_BLE_CONN_LATENCY_MAX) &&
      (p_dev_rec->conn_params.supervision_tout >= BTM_BLE_CONN_SUP_TOUT_MIN) &&
      (p_dev_rec->conn_params.supervision_tout <= BTM_BLE_CONN_SUP_TOUT_MAX) &&
      ((p_lcb->min_interval < p_dev_rec->conn_params.min_conn_int &&
        p_dev_rec->conn_params.min_conn_int != BTM_BLE_CONN_PARAM_UNDEF) ||
       (p_lcb->min_interval > p_dev_rec->conn_params.max_conn_int) ||
       (p_lcb->latency > p_dev_rec->conn_params.slave_latency) ||
       (p_lcb->timeout > p_dev_rec->conn_params.supervision_tout))) {
    BTM_TRACE_DEBUG(
        "%s: HANDLE=%d min_conn_int=%d max_conn_int=%d slave_latency=%d "
        "supervision_tout=%d",
        __func__, p_lcb->handle, p_dev_rec->conn_params.min_conn_int,
        p_dev_rec->conn_params.max_conn_int,
        p_dev_rec->conn_params.slave_latency,
        p_dev_rec->conn_params.supervision_tout);

    p_lcb->min_interval = p_dev_rec->conn_params.min_conn_int;
    p_lcb->max_interval = p_dev_rec->conn_params.max_conn_int;
    p_lcb->timeout = p_dev_rec->conn_params.supervision_tout;
    p_lcb->latency = p_dev_rec->conn_params.slave_latency;

    btsnd_hcic_ble_upd_ll_conn_params(
        p_lcb->handle, p_dev_rec->conn_params.min_conn_int,
        p_dev_rec->conn_params.max_conn_int,
        p_dev_rec->conn_params.slave_latency,
        p_dev_rec->conn_params.supervision_tout, 0, 0);
  }
}

/*******************************************************************************
 *
 * Function         btm_read_remote_version_complete
@@ -870,7 +831,7 @@ void btm_read_remote_version_complete(uint8_t* p) {

      if (p_acl_cb->transport == BT_TRANSPORT_LE) {
        l2cble_notify_le_connection(p_acl_cb->remote_addr);
        btm_use_preferred_conn_params(p_acl_cb->remote_addr);
        l2cble_use_preferred_conn_params(p_acl_cb->remote_addr);
      }
      break;
    }
+2 −3
Original line number Diff line number Diff line
@@ -39,13 +39,13 @@
#include "gap_api.h"
#include "gatt_api.h"
#include "hcimsgs.h"
#include "l2c_int.h"
#include "log/log.h"
#include "main/shim/btm_api.h"
#include "main/shim/shim.h"
#include "osi/include/log.h"
#include "osi/include/osi.h"
#include "stack/crypto_toolbox/crypto_toolbox.h"
#include "stack/include/l2cap_security_interface.h"

extern void gatt_notify_phy_updated(uint8_t status, uint16_t handle,
                                    uint8_t tx_phy, uint8_t rx_phy);
@@ -1134,8 +1134,7 @@ tL2CAP_LE_RESULT_CODE btm_ble_start_sec_check(const RawAddress& bd_addr,

  if (ble_sec_act == BTM_BLE_SEC_NONE) return result;

  tL2C_LCB* p_lcb = l2cu_find_lcb_by_bd_addr(bd_addr, BT_TRANSPORT_LE);
  p_lcb->sec_act = sec_act;
  l2cble_update_sec_act(bd_addr, sec_act);
  BTM_SetEncryption(bd_addr, BT_TRANSPORT_LE, p_callback, p_ref_data,
                    ble_sec_act);

+0 −1
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@
#include "btu.h"
#include "device/include/controller.h"
#include "hcimsgs.h"
#include "l2c_int.h"

extern void btm_send_hci_create_connection(
    uint16_t scan_int, uint16_t scan_win, uint8_t init_filter_policy,
+8 −0
Original line number Diff line number Diff line
@@ -46,6 +46,11 @@ extern void l2cble_process_data_length_change_event(uint16_t handle,
                                                    uint16_t tx_data_len,
                                                    uint16_t rx_data_len);

// Notify to L2cap layer that ACL data or remote version is received
extern void l2cble_notify_le_connection(const RawAddress& bda);

void l2cble_use_preferred_conn_params(const RawAddress& bda);

#if (BLE_LLT_INCLUDED == TRUE)
extern void l2cble_process_rc_param_request_evt(uint16_t handle,
                                                uint16_t int_min,
@@ -56,3 +61,6 @@ extern void l2cble_process_rc_param_request_evt(uint16_t handle,

// Invoked when HCI mode is changed to HCI_MODE_ACTIVE or HCI_MODE_SNIFF
extern void l2c_OnHciModeChangeSendPendingPackets(RawAddress remote);

// Invoked when HCI indicates to L2cap to check Security requirement
extern void l2cu_resubmit_pending_sec_req(const RawAddress* p_bda);
+3 −1
Original line number Diff line number Diff line
@@ -34,3 +34,5 @@ extern void l2cu_resubmit_pending_sec_req(const RawAddress* p_bda);
// Returns BTM_CMD_STARTED if already connecting, BTM_NO_RESOURCES if can't
// allocate lcb, BTM_SUCCESS if initiated the connection
tBTM_STATUS l2cu_ConnectAclForSecurity(const RawAddress& bd_addr);

extern void l2cble_update_sec_act(const RawAddress& bd_addr, uint16_t sec_act);
Loading