diff --git a/components/bt/Kconfig b/components/bt/Kconfig index 83ae78ce6..5f379d2d7 100644 --- a/components/bt/Kconfig +++ b/components/bt/Kconfig @@ -192,7 +192,16 @@ config SMP_ENABLE bool depends on BLUEDROID_ENABLED default CLASSIC_BT_ENABLED || BLE_SMP_ENABLE - + +config BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY + bool "Report adv data and scan response individually when BLE active scan" + depends on BLUEDROID_ENABLED + default n + help + Originally, when doing BLE active scan, Bluedroid will not report adv to application layer + until receive scan response. This option is used to disable the behavior. When enable this option, + Bluedroid will report adv data or scan response to application layer immediately. + # Memory reserved at start of DRAM for Bluetooth stack config BT_RESERVE_DRAM hex diff --git a/components/bt/bluedroid/include/bt_target.h b/components/bt/bluedroid/include/bt_target.h index da71657ae..1bd993573 100644 --- a/components/bt/bluedroid/include/bt_target.h +++ b/components/bt/bluedroid/include/bt_target.h @@ -211,6 +211,12 @@ #define BTA_AV_CO_CP_SCMS_T FALSE//FALSE #endif +#ifndef CONFIG_BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY +#define BTM_BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY FALSE +#else +#define BTM_BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY CONFIG_BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY +#endif + /* This feature is used to eanble interleaved scan*/ #ifndef BTA_HOST_INTERLEAVE_SEARCH #define BTA_HOST_INTERLEAVE_SEARCH FALSE//FALSE diff --git a/components/bt/bluedroid/stack/btm/btm_ble_gap.c b/components/bt/bluedroid/stack/btm/btm_ble_gap.c index 46a0c5d50..a49a84253 100644 --- a/components/bt/bluedroid/stack/btm/btm_ble_gap.c +++ b/components/bt/bluedroid/stack/btm/btm_ble_gap.c @@ -2855,7 +2855,9 @@ BOOLEAN btm_ble_update_inq_result(BD_ADDR bda, tINQ_DB_ENT *p_i, UINT8 addr_type BTM_TRACE_DEBUG("btm_ble_update_inq_result scan_rsp=false, to_report=false,\ scan_type_active=%d", btm_cb.ble_ctr_cb.inq_var.scan_type); p_i->scan_rsp = FALSE; +#if BTM_BLE_ACTIVE_SCAN_REPORT_ADV_SCAN_RSP_INDIVIDUALLY == FALSE to_report = FALSE; +#endif } else { p_i->scan_rsp = TRUE; } diff --git a/examples/bluetooth/gatt_client/main/Kconfig.projbuild b/examples/bluetooth/gatt_client/main/Kconfig.projbuild new file mode 100644 index 000000000..15378b1cd --- /dev/null +++ b/examples/bluetooth/gatt_client/main/Kconfig.projbuild @@ -0,0 +1,7 @@ +menu "Example Configuration" + + config EXAMPLE_DUMP_ADV_DATA_AND_SCAN_RESP + bool "Dump whole adv data and scan response data in example" + default n + +endmenu diff --git a/examples/bluetooth/gatt_client/main/gattc_demo.c b/examples/bluetooth/gatt_client/main/gattc_demo.c index b8b52cac0..773a0f4dd 100644 --- a/examples/bluetooth/gatt_client/main/gattc_demo.c +++ b/examples/bluetooth/gatt_client/main/gattc_demo.c @@ -337,7 +337,19 @@ static void esp_gap_cb(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *par ESP_BLE_AD_TYPE_NAME_CMPL, &adv_name_len); ESP_LOGI(GATTC_TAG, "searched Device Name Len %d", adv_name_len); esp_log_buffer_char(GATTC_TAG, adv_name, adv_name_len); + +#if CONFIG_EXAMPLE_DUMP_ADV_DATA_AND_SCAN_RESP + if (scan_result->scan_rst.adv_data_len > 0) { + ESP_LOGI(GATTC_TAG, "adv data:"); + esp_log_buffer_hex(GATTC_TAG, &scan_result->scan_rst.ble_adv[0], scan_result->scan_rst.adv_data_len); + } + if (scan_result->scan_rst.scan_rsp_len > 0) { + ESP_LOGI(GATTC_TAG, "scan resp:"); + esp_log_buffer_hex(GATTC_TAG, &scan_result->scan_rst.ble_adv[scan_result->scan_rst.adv_data_len], scan_result->scan_rst.scan_rsp_len); + } +#endif ESP_LOGI(GATTC_TAG, "\n"); + if (adv_name != NULL) { if (strlen(remote_device_name) == adv_name_len && strncmp((char *)adv_name, remote_device_name, adv_name_len) == 0) { ESP_LOGI(GATTC_TAG, "searched device %s\n", remote_device_name);