Browse Source

Merge branch 'bugfix/btdm_ble_data_length_update_fail_v4.2' into 'release/v4.2'

Fix data length update failed(release v4.2)

See merge request espressif/esp-idf!15503
Wang Meng Yang 4 years ago
parent
commit
de22cc8ca7

+ 10 - 8
components/bt/host/bluedroid/bta/dm/bta_dm_act.c

@@ -5351,6 +5351,16 @@ void bta_dm_ble_set_data_length(tBTA_DM_MSG *p_data)
         APPL_TRACE_ERROR("%s error: Invalid connection remote_bda.", __func__);
         APPL_TRACE_ERROR("%s error: Invalid connection remote_bda.", __func__);
         return;
         return;
     }
     }
+
+    p_acl_cb->p_set_pkt_data_cback = p_data->ble_set_data_length.p_set_pkt_data_cback;
+    // if the value of the data length is same, triger callback directly
+    if(p_data->ble_set_data_length.tx_data_length == p_acl_cb->data_length_params.tx_len) {
+        if(p_data->ble_set_data_length.p_set_pkt_data_cback) {
+            (*p_data->ble_set_data_length.p_set_pkt_data_cback)(status, &p_acl_cb->data_length_params);
+        }
+        return;
+    }
+
     if(p_acl_cb->data_len_updating) {
     if(p_acl_cb->data_len_updating) {
         // aleady have one cmd
         // aleady have one cmd
         if(p_acl_cb->data_len_waiting) {
         if(p_acl_cb->data_len_waiting) {
@@ -5363,14 +5373,6 @@ void bta_dm_ble_set_data_length(tBTA_DM_MSG *p_data)
             return;
             return;
         }
         }
     } else {
     } else {
-        p_acl_cb->p_set_pkt_data_cback = p_data->ble_set_data_length.p_set_pkt_data_cback;
-        // if the value of the data length is same, triger callback directly
-        if(p_data->ble_set_data_length.tx_data_length == p_acl_cb->data_length_params.tx_len) {
-            if(p_data->ble_set_data_length.p_set_pkt_data_cback) {
-                (*p_data->ble_set_data_length.p_set_pkt_data_cback)(status, &p_acl_cb->data_length_params);
-            }
-            return;
-        }
         status = BTM_SetBleDataLength(p_data->ble_set_data_length.remote_bda,
         status = BTM_SetBleDataLength(p_data->ble_set_data_length.remote_bda,
                                         p_data->ble_set_data_length.tx_data_length);
                                         p_data->ble_set_data_length.tx_data_length);
     }
     }

+ 4 - 2
components/bt/host/bluedroid/stack/btm/btm_acl.c

@@ -936,8 +936,10 @@ void btm_read_remote_version_complete (UINT8 *p)
                     if (HCI_LE_DATA_LEN_EXT_SUPPORTED(p_acl_cb->peer_le_features)) {
                     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_length = controller_get_interface()->get_ble_default_data_packet_length();
                         uint16_t data_txtime = controller_get_interface()->get_ble_default_data_packet_txtime();
                         uint16_t data_txtime = controller_get_interface()->get_ble_default_data_packet_txtime();
-                        p_acl_cb->data_len_updating = true;
-                        btsnd_hcic_ble_set_data_length(p_acl_cb->hci_handle, data_length, data_txtime);
+                        if (data_length != p_acl_cb->data_length_params.tx_len) {
+                            p_acl_cb->data_len_updating = true;
+                            btsnd_hcic_ble_set_data_length(p_acl_cb->hci_handle, data_length, data_txtime);
+                        }
                     }
                     }
                     l2cble_notify_le_connection (p_acl_cb->remote_addr);
                     l2cble_notify_le_connection (p_acl_cb->remote_addr);
                 } else {
                 } else {