From 29f5ad66389ccbca42aa325407e18ed4cbf5cd4c Mon Sep 17 00:00:00 2001 From: zhiweijian Date: Tue, 16 Apr 2019 11:11:08 +0800 Subject: [PATCH] Component/bt: add ble link timeout config in menuconfig - add ble link timeout config in menuconfig - disable background connection when call gatts_open --- components/bt/Kconfig | 10 ++++++++++ .../bt/bluedroid/btc/profile/std/gatt/btc_gatts.c | 3 +++ .../bt/bluedroid/common/include/common/bt_target.h | 6 ++++++ components/bt/bluedroid/stack/btm/btm_ble.c | 11 ++++++++++- components/bt/bluedroid/stack/btm/btm_ble_gap.c | 7 +++++-- .../bt/bluedroid/stack/btm/include/btm_ble_int.h | 2 +- components/bt/bluedroid/stack/l2cap/include/l2c_int.h | 2 +- 7 files changed, 36 insertions(+), 5 deletions(-) diff --git a/components/bt/Kconfig b/components/bt/Kconfig index 296b67632..346055c11 100644 --- a/components/bt/Kconfig +++ b/components/bt/Kconfig @@ -1107,6 +1107,16 @@ config BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY Bluedroid will report adv data or scan response to application layer immediately. # Memory reserved at start of DRAM for Bluetooth stack + +config BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT + int "Timeout of BLE connection establishment" + depends on BLUEDROID_ENABLED + range 1 60 + default 30 + help + Bluetooth Connection establishment maximum time, if connection time exceeds this value, the connection + establishment fails, ESP_GATTC_OPEN_EVT or ESP_GATTS_OPEN_EVT is triggered. + config BT_RESERVE_DRAM hex default 0x10000 if BT_ENABLED diff --git a/components/bt/bluedroid/btc/profile/std/gatt/btc_gatts.c b/components/bt/bluedroid/btc/profile/std/gatt/btc_gatts.c index bfe9cc04e..84cc1753e 100644 --- a/components/bt/bluedroid/btc/profile/std/gatt/btc_gatts.c +++ b/components/bt/bluedroid/btc/profile/std/gatt/btc_gatts.c @@ -690,10 +690,13 @@ void btc_gatts_call_handler(btc_msg_t *msg) #else //BTA_DmAddBleDevice(p_cb->bd_addr.address, addr_type, device_type); #endif + /* + not support background connection // Mark background connections if (!arg->open.is_direct) { BTA_DmBleSetBgConnType(BTM_BLE_CONN_AUTO, NULL); } + */ transport = BTA_GATT_TRANSPORT_LE; diff --git a/components/bt/bluedroid/common/include/common/bt_target.h b/components/bt/bluedroid/common/include/common/bt_target.h index 19640de77..528d5afbc 100644 --- a/components/bt/bluedroid/common/include/common/bt_target.h +++ b/components/bt/bluedroid/common/include/common/bt_target.h @@ -162,6 +162,12 @@ #define GATT_MAX_PHY_CHANNEL CONFIG_BT_ACL_CONNECTIONS #endif /* CONFIG_BT_ACL_CONNECTIONS */ +#if(CONFIG_BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT) +#define BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT CONFIG_BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT +#else +#define BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT 30 +#endif + //------------------Added from bdroid_buildcfg.h--------------------- #ifndef L2CAP_EXTFEA_SUPPORTED_MASK #define L2CAP_EXTFEA_SUPPORTED_MASK (L2CAP_EXTFEA_ENH_RETRANS | L2CAP_EXTFEA_STREAM_MODE | L2CAP_EXTFEA_NO_CRC | L2CAP_EXTFEA_FIXED_CHNLS) diff --git a/components/bt/bluedroid/stack/btm/btm_ble.c b/components/bt/bluedroid/stack/btm/btm_ble.c index 6a88cfe9f..6a1de1fd4 100644 --- a/components/bt/bluedroid/stack/btm/btm_ble.c +++ b/components/bt/bluedroid/stack/btm/btm_ble.c @@ -1997,9 +1997,18 @@ void btm_ble_conn_complete(UINT8 *p, UINT16 evt_len, BOOLEAN enhanced) btm_ble_disable_resolving_list(BTM_BLE_RL_ADV, TRUE); #endif } + } - btm_ble_update_mode_operation(role, bda, status); + BOOLEAN bg_con = btm_ble_update_mode_operation(role, bda, status); + if (status != HCI_SUCCESS && !bg_con) { + // notify connection failed + l2c_link_hci_disc_comp (handle, status); +#if (SMP_INCLUDED == TRUE) + /* Notify security manager */ + btm_sec_disconnected (handle, status); +#endif ///SMP_INCLUDED == TRUE + } } diff --git a/components/bt/bluedroid/stack/btm/btm_ble_gap.c b/components/bt/bluedroid/stack/btm/btm_ble_gap.c index 9452defff..d2d9c41bb 100644 --- a/components/bt/bluedroid/stack/btm/btm_ble_gap.c +++ b/components/bt/bluedroid/stack/btm/btm_ble_gap.c @@ -3977,8 +3977,9 @@ void btm_ble_update_link_topology_mask(UINT8 link_role, BOOLEAN increase) ** Returns void ** *******************************************************************************/ -void btm_ble_update_mode_operation(UINT8 link_role, BD_ADDR bd_addr, UINT8 status) +BOOLEAN btm_ble_update_mode_operation(UINT8 link_role, BD_ADDR bd_addr, UINT8 status) { + BOOLEAN bg_con = FALSE; if (status == HCI_ERR_DIRECTED_ADVERTISING_TIMEOUT) { btm_cb.ble_ctr_cb.inq_var.adv_mode = BTM_BLE_ADV_DISABLE; /* make device fall back into undirected adv mode by default */ @@ -3997,8 +3998,10 @@ void btm_ble_update_mode_operation(UINT8 link_role, BD_ADDR bd_addr, UINT8 statu now in order */ if (btm_ble_get_conn_st() == BLE_CONN_IDLE && status != HCI_ERR_HOST_REJECT_RESOURCES && !btm_send_pending_direct_conn()) { - btm_ble_resume_bg_conn(); + bg_con = btm_ble_resume_bg_conn(); } + + return bg_con; } /******************************************************************************* diff --git a/components/bt/bluedroid/stack/btm/include/btm_ble_int.h b/components/bt/bluedroid/stack/btm/include/btm_ble_int.h index bfd366832..42bb4d66c 100644 --- a/components/bt/bluedroid/stack/btm/include/btm_ble_int.h +++ b/components/bt/bluedroid/stack/btm/include/btm_ble_int.h @@ -436,7 +436,7 @@ BOOLEAN btm_ble_start_auto_conn(BOOLEAN start); BOOLEAN btm_ble_start_select_conn(BOOLEAN start, tBTM_BLE_SEL_CBACK *p_select_cback); BOOLEAN btm_ble_renew_bg_conn_params(BOOLEAN add, BD_ADDR bd_addr); void btm_write_dir_conn_wl(BD_ADDR target_addr); -void btm_ble_update_mode_operation(UINT8 link_role, BD_ADDR bda, UINT8 status); +BOOLEAN btm_ble_update_mode_operation(UINT8 link_role, BD_ADDR bda, UINT8 status); BOOLEAN btm_execute_wl_dev_operation(void); void btm_ble_update_link_topology_mask(UINT8 role, BOOLEAN increase); diff --git a/components/bt/bluedroid/stack/l2cap/include/l2c_int.h b/components/bt/bluedroid/stack/l2cap/include/l2c_int.h index e2c0ef6a7..e4cd48749 100644 --- a/components/bt/bluedroid/stack/l2cap/include/l2c_int.h +++ b/components/bt/bluedroid/stack/l2cap/include/l2c_int.h @@ -66,7 +66,7 @@ #define L2CAP_WAIT_UNPARK_TOUT 2 /* 2 seconds */ #define L2CAP_LINK_INFO_RESP_TOUT 2 /* 2 seconds */ #define L2CAP_UPDATE_CONN_PARAM_TOUT 6 /* 6 seconds */ -#define L2CAP_BLE_LINK_CONNECT_TOUT 30 /* 30 seconds */ +#define L2CAP_BLE_LINK_CONNECT_TOUT BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT // configed in menuconfig #define L2CAP_BLE_CONN_PARAM_UPD_TOUT 30 /* 30 seconds */ /* quick timer uses millisecond unit */