diff --git a/components/bt/bluedroid/btc/profile/esp/blufi/blufi_prf.c b/components/bt/bluedroid/btc/profile/esp/blufi/blufi_prf.c index 5bcc2ebea3..ad24892007 100644 --- a/components/bt/bluedroid/btc/profile/esp/blufi/blufi_prf.c +++ b/components/bt/bluedroid/btc/profile/esp/blufi/blufi_prf.c @@ -36,6 +36,7 @@ #include "blufi_int.h" #include "esp_blufi_api.h" +#include "esp_gatt_common_api.h" #if (GATTS_INCLUDED == TRUE) @@ -456,6 +457,7 @@ static void btc_blufi_recv_handler(uint8_t *data, int len) } } } + void btc_blufi_send_encap(uint8_t type, uint8_t *data, int total_data_len) { struct blufi_hdr *hdr = NULL; @@ -526,10 +528,21 @@ void btc_blufi_send_encap(uint8_t type, uint8_t *data, int total_data_len) remain_len -= hdr->data_len; } - btc_blufi_send_notify((uint8_t *)hdr, +retry: + if (blufi_env.is_connected == false) { + return; + } + + if (esp_ble_get_cur_sendable_packets_num(BTC_GATT_GET_CONN_ID(blufi_env.conn_id)) > 0) { + btc_blufi_send_notify((uint8_t *)hdr, ((hdr->fc & BLUFI_FC_CHECK) ? hdr->data_len + sizeof(struct blufi_hdr) + 2 : hdr->data_len + sizeof(struct blufi_hdr))); + } else { + BTC_TRACE_WARNING("%s wait to send blufi custom data\n", __func__); + vTaskDelay(pdMS_TO_TICKS(10)); + goto retry; + } osi_free(hdr); hdr = NULL;