From 85825377c835d35b98fb6e63d13a0038f58b5044 Mon Sep 17 00:00:00 2001 From: Tian Hao Date: Wed, 23 Jan 2019 14:11:56 +0800 Subject: [PATCH] component/bt: add a option to make report adv data and scan response individually 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. --- components/bt/Kconfig | 9 +++++++++ .../bt/bluedroid/common/include/common/bt_target.h | 6 ++++++ components/bt/bluedroid/stack/btm/btm_ble_gap.c | 2 ++ .../bluetooth/gatt_client/main/Kconfig.projbuild | 7 +++++++ examples/bluetooth/gatt_client/main/gattc_demo.c | 12 ++++++++++++ 5 files changed, 36 insertions(+) create mode 100644 examples/bluetooth/gatt_client/main/Kconfig.projbuild diff --git a/components/bt/Kconfig b/components/bt/Kconfig index b35b617c58..df1489aede 100644 --- a/components/bt/Kconfig +++ b/components/bt/Kconfig @@ -1052,6 +1052,15 @@ config SMP_ENABLE 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/common/include/common/bt_target.h b/components/bt/bluedroid/common/include/common/bt_target.h index 67abfd4205..c83c14c019 100644 --- a/components/bt/bluedroid/common/include/common/bt_target.h +++ b/components/bt/bluedroid/common/include/common/bt_target.h @@ -317,6 +317,12 @@ #define SCAN_QUEUE_CONGEST_CHECK CONFIG_BLE_HOST_QUEUE_CONGESTION_CHECK #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 3664f03dde..77aa7514ff 100644 --- a/components/bt/bluedroid/stack/btm/btm_ble_gap.c +++ b/components/bt/bluedroid/stack/btm/btm_ble_gap.c @@ -2922,7 +2922,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 0000000000..15378b1cd8 --- /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 ac49348be2..1c350c4f4a 100644 --- a/examples/bluetooth/gatt_client/main/gattc_demo.c +++ b/examples/bluetooth/gatt_client/main/gattc_demo.c @@ -331,7 +331,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);