Merge branch 'bugfix/fix_ble_disconnect_due_to_channel_map_instant_passed_v4.4' into 'release/v4.4'

Fixed BLE disconnection issue when channel map update failed due to bad channels(backport v4.4)

See merge request espressif/esp-idf!20376
This commit is contained in:
Jiang Jiang Jian
2022-09-28 16:24:58 +08:00
11 changed files with 21 additions and 10 deletions

View File

@ -768,6 +768,9 @@ typedef uint8_t esp_ble_gap_sync_t;
typedef uint8_t esp_ble_gap_adv_type_t;
/// Extend advertising tx power, range: [-127, +126] dBm
#define EXT_ADV_TX_PWR_NO_PREFERENCE (127) /*!< host has no preference for tx power */
/**
* @brief ext adv parameters
*/

View File

@ -1469,7 +1469,7 @@ typedef struct {
tBLE_ADDR_TYPE peer_addr_type;
BD_ADDR peer_addr;
tBTA_BLE_AFP filter_policy;
UINT8 tx_power;
INT8 tx_power;
tBTA_DM_BLE_GAP_PHY primary_phy;
UINT8 max_skip;
tBTA_DM_BLE_GAP_PHY secondary_phy;

View File

@ -1990,7 +1990,7 @@ void btm_ble_conn_complete(UINT8 *p, UINT16 evt_len, BOOLEAN enhanced)
}
#if (BLE_PRIVACY_SPT == TRUE )
peer_addr_type = bda_type;
match = btm_identity_addr_to_random_pseudo (bda, &bda_type, TRUE);
match = btm_identity_addr_to_random_pseudo (bda, &bda_type, FALSE);
/* possiblly receive connection complete with resolvable random on
slave role while the device has been paired */

View File

@ -4250,10 +4250,11 @@ void btm_ble_read_remote_features_complete(UINT8 *p)
btsnd_hcic_rmt_ver_req (p_acl_cb->hci_handle);
}
else{
uint16_t data_length = controller_get_interface()->get_ble_default_data_packet_length();
uint16_t data_txtime = controller_get_interface()->get_ble_default_data_packet_txtime();
if (p_acl_cb->transport == BT_TRANSPORT_LE) {
if (HCI_LE_DATA_LEN_EXT_SUPPORTED(p_acl_cb->peer_le_features)) {
uint16_t data_length = controller_get_interface()->get_ble_default_data_packet_length();
uint16_t data_txtime = controller_get_interface()->get_ble_default_data_packet_txtime();
if (HCI_LE_DATA_LEN_EXT_SUPPORTED(p_acl_cb->peer_le_features) &&
(p_acl_cb->data_length_params.tx_len != data_length)) {
p_acl_cb->data_len_updating = true;
btsnd_hcic_ble_set_data_length(p_acl_cb->hci_handle, data_length, data_txtime);
}

View File

@ -1214,7 +1214,7 @@ UINT8 btsnd_hcic_ble_set_extend_rand_address(UINT8 adv_handle, BD_ADDR rand_addr
UINT8 btsnd_hcic_ble_set_ext_adv_params(UINT8 adv_handle, UINT16 properties, UINT32 interval_min,
UINT32 interval_max, UINT8 channel_map, UINT8 own_addr_type,
UINT8 peer_addr_type, BD_ADDR peer_addr,
UINT8 adv_filter_policy, UINT8 adv_tx_power,
UINT8 adv_filter_policy, INT8 adv_tx_power,
UINT8 primary_adv_phy, UINT8 secondary_adv_max_skip,
UINT8 secondary_adv_phy,
UINT8 adv_sid, UINT8 scan_req_ntf_enable)
@ -1244,7 +1244,7 @@ UINT8 btsnd_hcic_ble_set_ext_adv_params(UINT8 adv_handle, UINT16 properties, UIN
UINT8_TO_STREAM(pp, peer_addr_type);
BDADDR_TO_STREAM (pp, peer_addr);
UINT8_TO_STREAM(pp, adv_filter_policy);
UINT8_TO_STREAM(pp, adv_tx_power);
INT8_TO_STREAM(pp, adv_tx_power);
UINT8_TO_STREAM(pp, primary_adv_phy);
UINT8_TO_STREAM(pp, secondary_adv_max_skip);
UINT8_TO_STREAM(pp, secondary_adv_phy);

View File

@ -767,7 +767,7 @@ typedef struct {
tBLE_ADDR_TYPE peer_addr_type;
BD_ADDR peer_addr;
tBTM_BLE_AFP filter_policy;
UINT8 tx_power;
INT8 tx_power;
tBTM_BLE_GAP_PHY primary_phy;
UINT8 max_skip;
tBTM_BLE_GAP_PHY secondary_phy;

View File

@ -962,7 +962,7 @@ UINT8 btsnd_hcic_ble_set_extend_rand_address(UINT8 adv_handle, BD_ADDR rand_addr
UINT8 btsnd_hcic_ble_set_ext_adv_params(UINT8 adv_handle, UINT16 properties, UINT32 interval_min,
UINT32 interval_max, UINT8 channel_map, UINT8 own_addr_type,
UINT8 peer_addr_type, BD_ADDR peer_addr,
UINT8 adv_filter_policy, UINT8 adv_tx_power,
UINT8 adv_filter_policy, INT8 adv_tx_power,
UINT8 primary_adv_phy, UINT8 secondary_adv_max_skip,
UINT8 secondary_adv_phy,
UINT8 adv_sid, UINT8 scan_req_ntf_enable);

View File

@ -57,6 +57,7 @@ esp_ble_gap_ext_adv_params_t ext_adv_params_2M = {
.sid = 0,
.scan_req_notif = false,
.own_addr_type = BLE_ADDR_TYPE_PUBLIC,
.tx_power = EXT_ADV_TX_PWR_NO_PREFERENCE,
};
struct gatts_profile_inst {

View File

@ -6,6 +6,7 @@
CONDITIONS OF ANY KIND, either express or implied.
*/
/****************************************************************************
*
* This demo showcases BLE GATT server. It can send adv data, be connected by client.
@ -66,6 +67,7 @@ esp_ble_gap_ext_adv_params_t ext_adv_params_1M = {
.sid = 0,
.scan_req_notif = false,
.own_addr_type = BLE_ADDR_TYPE_RANDOM,
.tx_power = EXT_ADV_TX_PWR_NO_PREFERENCE,
};
esp_ble_gap_ext_adv_params_t ext_adv_params_2M = {
@ -80,6 +82,7 @@ esp_ble_gap_ext_adv_params_t ext_adv_params_2M = {
.sid = 1,
.scan_req_notif = false,
.own_addr_type = BLE_ADDR_TYPE_RANDOM,
.tx_power = EXT_ADV_TX_PWR_NO_PREFERENCE,
};
esp_ble_gap_ext_adv_params_t legacy_adv_params = {
@ -94,6 +97,7 @@ esp_ble_gap_ext_adv_params_t legacy_adv_params = {
.sid = 2,
.scan_req_notif = false,
.own_addr_type = BLE_ADDR_TYPE_RANDOM,
.tx_power = EXT_ADV_TX_PWR_NO_PREFERENCE,
};
esp_ble_gap_ext_adv_params_t ext_adv_params_coded = {
@ -108,6 +112,7 @@ esp_ble_gap_ext_adv_params_t ext_adv_params_coded = {
.sid = 3,
.scan_req_notif = false,
.own_addr_type = BLE_ADDR_TYPE_RANDOM,
.tx_power = EXT_ADV_TX_PWR_NO_PREFERENCE,
};
static uint8_t raw_adv_data_1m[] = {

View File

@ -67,6 +67,7 @@ esp_ble_gap_ext_adv_params_t ext_adv_params_2M = {
.sid = 0,
.scan_req_notif = false,
.own_addr_type = BLE_ADDR_TYPE_RANDOM,
.tx_power = EXT_ADV_TX_PWR_NO_PREFERENCE,
};
static esp_ble_gap_periodic_adv_params_t periodic_adv_params = {