From 573e13c569bf1697bb6ebcd7a1f6bb1066e7a6c9 Mon Sep 17 00:00:00 2001 From: luomanruo Date: Tue, 19 Dec 2023 12:25:08 +0800 Subject: [PATCH 1/3] ble(update): Update c2 lib to 7c6c9d53 Update h2 lib to 0ecb36f0 Update c6 lib to 0ecb36f0 --- components/bt/controller/lib_esp32c2/esp32c2-bt-lib | 2 +- components/bt/controller/lib_esp32c6/esp32c6-bt-lib | 2 +- components/bt/controller/lib_esp32h2/esp32h2-bt-lib | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/bt/controller/lib_esp32c2/esp32c2-bt-lib b/components/bt/controller/lib_esp32c2/esp32c2-bt-lib index d238d53d4ae..909c8bca55a 160000 --- a/components/bt/controller/lib_esp32c2/esp32c2-bt-lib +++ b/components/bt/controller/lib_esp32c2/esp32c2-bt-lib @@ -1 +1 @@ -Subproject commit d238d53d4aef846142e937b0bf344b36e4704080 +Subproject commit 909c8bca55acdcbba1c32620482a7d1a10c28a07 diff --git a/components/bt/controller/lib_esp32c6/esp32c6-bt-lib b/components/bt/controller/lib_esp32c6/esp32c6-bt-lib index 0f0f3ff7e54..8ad84d799a1 160000 --- a/components/bt/controller/lib_esp32c6/esp32c6-bt-lib +++ b/components/bt/controller/lib_esp32c6/esp32c6-bt-lib @@ -1 +1 @@ -Subproject commit 0f0f3ff7e54d9f5499781bc4f3afa2ac40892598 +Subproject commit 8ad84d799a194566be26e487ecfe5e634b8f4248 diff --git a/components/bt/controller/lib_esp32h2/esp32h2-bt-lib b/components/bt/controller/lib_esp32h2/esp32h2-bt-lib index ef7a15381de..f9b322ffdfe 160000 --- a/components/bt/controller/lib_esp32h2/esp32h2-bt-lib +++ b/components/bt/controller/lib_esp32h2/esp32h2-bt-lib @@ -1 +1 @@ -Subproject commit ef7a15381de3b90b58fc2053f654edf4bd8c82e0 +Subproject commit f9b322ffdfe7cb6896ac24f59986d601766dd126 From 0504b60b7a9742ccb0cdfd1809bdeba9106271f0 Mon Sep 17 00:00:00 2001 From: luomanruo Date: Fri, 8 Dec 2023 17:29:25 +0800 Subject: [PATCH 2/3] ble: support for selecting CSA#2 by menuconfig ble(fix): fixed event receiving on host side without returning event buffer to pool --- components/bt/controller/esp32c2/esp_bt_cfg.h | 10 ++++++++++ components/bt/controller/esp32c6/esp_bt_cfg.h | 10 ++++++++++ components/bt/controller/esp32h2/esp_bt_cfg.h | 11 +++++++++++ components/bt/host/bluedroid/hci/hci_hal_h4.c | 3 ++- components/bt/include/esp32c2/include/esp_bt.h | 6 ++++-- components/bt/include/esp32c6/include/esp_bt.h | 2 ++ components/bt/include/esp32h2/include/esp_bt.h | 2 ++ components/esp_rom/esp32c2/ld/esp32c2.rom.ld | 6 ------ 8 files changed, 41 insertions(+), 9 deletions(-) diff --git a/components/bt/controller/esp32c2/esp_bt_cfg.h b/components/bt/controller/esp32c2/esp_bt_cfg.h index 1e44212071c..308d79e3eb0 100644 --- a/components/bt/controller/esp32c2/esp_bt_cfg.h +++ b/components/bt/controller/esp32c2/esp_bt_cfg.h @@ -40,6 +40,11 @@ extern "C" { #define DEFAULT_BT_NIMBLE_WHITELIST_SIZE MYNEWT_VAL(BLE_LL_WHITELIST_SIZE) #define DEFAULT_BT_LE_HCI_EVT_HI_BUF_COUNT MYNEWT_VAL(BLE_TRANSPORT_EVT_COUNT) #define DEFAULT_BT_LE_HCI_EVT_LO_BUF_COUNT MYNEWT_VAL(BLE_TRANSPORT_EVT_DISCARDABLE_COUNT) + #if defined(CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT) + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (1) + #else + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (0) + #endif #else @@ -114,6 +119,11 @@ extern "C" { #else #define DEFAULT_BT_LE_HCI_EVT_LO_BUF_COUNT (8) #endif + #if defined(CONFIG_BT_LE_50_FEATURE_SUPPORT) + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (1) + #else + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (0) + #endif #endif diff --git a/components/bt/controller/esp32c6/esp_bt_cfg.h b/components/bt/controller/esp32c6/esp_bt_cfg.h index 12b8f87f470..9e341e32290 100644 --- a/components/bt/controller/esp32c6/esp_bt_cfg.h +++ b/components/bt/controller/esp32c6/esp_bt_cfg.h @@ -40,6 +40,11 @@ extern "C" { #define DEFAULT_BT_LE_HCI_EVT_HI_BUF_COUNT MYNEWT_VAL(BLE_TRANSPORT_EVT_COUNT) #define DEFAULT_BT_LE_HCI_EVT_LO_BUF_COUNT MYNEWT_VAL(BLE_TRANSPORT_EVT_DISCARDABLE_COUNT) #define DEFAULT_BT_LE_POWER_CONTROL_ENABLED MYNEWT_VAL(BLE_POWER_CONTROL) + #if defined(CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT) + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (1) + #else + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (0) + #endif #else #if CONFIG_BT_LE_LL_CFG_FEAT_LE_CODED_PHY @@ -119,6 +124,11 @@ extern "C" { #else #define DEFAULT_BT_LE_POWER_CONTROL_ENABLED (0) #endif + #if defined(CONFIG_BT_LE_50_FEATURE_SUPPORT) + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (1) + #else + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (0) + #endif #endif #define DEFAULT_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EFF CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EFF diff --git a/components/bt/controller/esp32h2/esp_bt_cfg.h b/components/bt/controller/esp32h2/esp_bt_cfg.h index 12b8f87f470..c0c5801af14 100644 --- a/components/bt/controller/esp32h2/esp_bt_cfg.h +++ b/components/bt/controller/esp32h2/esp_bt_cfg.h @@ -40,6 +40,11 @@ extern "C" { #define DEFAULT_BT_LE_HCI_EVT_HI_BUF_COUNT MYNEWT_VAL(BLE_TRANSPORT_EVT_COUNT) #define DEFAULT_BT_LE_HCI_EVT_LO_BUF_COUNT MYNEWT_VAL(BLE_TRANSPORT_EVT_DISCARDABLE_COUNT) #define DEFAULT_BT_LE_POWER_CONTROL_ENABLED MYNEWT_VAL(BLE_POWER_CONTROL) + #if defined(CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT) + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (1) + #else + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (0) + #endif #else #if CONFIG_BT_LE_LL_CFG_FEAT_LE_CODED_PHY @@ -119,6 +124,12 @@ extern "C" { #else #define DEFAULT_BT_LE_POWER_CONTROL_ENABLED (0) #endif + + #if defined(CONFIG_BT_LE_50_FEATURE_SUPPORT) + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (1) + #else + #define DEFAULT_BT_LE_50_FEATURE_SUPPORT (0) + #endif #endif #define DEFAULT_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EFF CONFIG_BT_LE_COEX_PHY_CODED_TX_RX_TLIM_EFF diff --git a/components/bt/host/bluedroid/hci/hci_hal_h4.c b/components/bt/host/bluedroid/hci/hci_hal_h4.c index 121a4d51016..46284333eb9 100644 --- a/components/bt/host/bluedroid/hci/hci_hal_h4.c +++ b/components/bt/host/bluedroid/hci/hci_hal_h4.c @@ -600,7 +600,8 @@ int ble_hs_hci_rx_evt(uint8_t *hci_ev, void *arg) { if(esp_bluedroid_get_status() == ESP_BLUEDROID_STATUS_UNINITIALIZED) { - return 0; + ble_hci_trans_buf_free(hci_ev); + return 0; } uint16_t len = hci_ev[1] + 3; uint8_t *data = (uint8_t *)malloc(len); diff --git a/components/bt/include/esp32c2/include/esp_bt.h b/components/bt/include/esp32c2/include/esp_bt.h index 175c115438b..ee1bede7e4d 100644 --- a/components/bt/include/esp32c2/include/esp_bt.h +++ b/components/bt/include/esp32c2/include/esp_bt.h @@ -224,8 +224,9 @@ typedef struct { int8_t cca_low_tx_pwr; /*!< Low TX power setting for CCA */ uint8_t main_xtal_freq; /*!< Main crystal frequency */ uint8_t version_num; /*!< Version number */ - uint8_t ignore_wl_for_direct_adv; /*!< Ignore the white list for directed advertising */ - uint32_t config_magic; /*!< Configuration magic value */ + uint8_t ignore_wl_for_direct_adv; /*!< Ignore the white list for directed advertising */ + uint8_t csa2_select; /*!< Select CSA#2 */ + uint32_t config_magic; /*!< Configuration magic value */ } esp_bt_controller_config_t; #define BT_CONTROLLER_INIT_CONFIG_DEFAULT() { \ @@ -277,6 +278,7 @@ typedef struct { .main_xtal_freq = CONFIG_XTAL_FREQ, \ .version_num = esp_ble_get_chip_rev_version(), \ .ignore_wl_for_direct_adv = 0, \ + .csa2_select = DEFAULT_BT_LE_50_FEATURE_SUPPORT, \ .config_magic = CONFIG_MAGIC, \ } diff --git a/components/bt/include/esp32c6/include/esp_bt.h b/components/bt/include/esp32c6/include/esp_bt.h index 93360be1ba3..210ead42da9 100644 --- a/components/bt/include/esp32c6/include/esp_bt.h +++ b/components/bt/include/esp32c6/include/esp_bt.h @@ -216,6 +216,7 @@ typedef struct { uint8_t cpu_freq_mhz; /*!< CPU frequency in megahertz (MHz) */ uint8_t ignore_wl_for_direct_adv; /*!< Ignore the whitelist for direct advertising */ uint8_t enable_pcl; /*!< Enable power control */ + uint8_t csa2_select; /*!< Select CSA#2*/ uint32_t config_magic; /*!< Magic number for configuration validation */ } esp_bt_controller_config_t; @@ -270,6 +271,7 @@ typedef struct { .cpu_freq_mhz = CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ, \ .ignore_wl_for_direct_adv = 0, \ .enable_pcl = DEFAULT_BT_LE_POWER_CONTROL_ENABLED, \ + .csa2_select = DEFAULT_BT_LE_50_FEATURE_SUPPORT, \ .config_magic = CONFIG_MAGIC, \ } diff --git a/components/bt/include/esp32h2/include/esp_bt.h b/components/bt/include/esp32h2/include/esp_bt.h index 90cfcdeeff1..a1c7aed8ee2 100644 --- a/components/bt/include/esp32h2/include/esp_bt.h +++ b/components/bt/include/esp32h2/include/esp_bt.h @@ -220,6 +220,7 @@ typedef struct { uint8_t cpu_freq_mhz; /*!< CPU frequency in megahertz */ uint8_t ignore_wl_for_direct_adv; /*!< Ignore the white list for directed advertising */ uint8_t enable_pcl; /*!< Enable power control */ + uint8_t csa2_select; /*!< Select CSA#2*/ uint32_t config_magic; /*!< Configuration magic value */ } esp_bt_controller_config_t; @@ -274,6 +275,7 @@ typedef struct { .cpu_freq_mhz = CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ, \ .ignore_wl_for_direct_adv = 0, \ .enable_pcl = 0, \ + .csa2_select = DEFAULT_BT_LE_50_FEATURE_SUPPORT, \ .config_magic = CONFIG_MAGIC, \ } diff --git a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld index 89c68c73e2c..99be4b28f34 100644 --- a/components/esp_rom/esp32c2/ld/esp32c2.rom.ld +++ b/components/esp_rom/esp32c2/ld/esp32c2.rom.ld @@ -638,7 +638,6 @@ r_ble_ll_adv_get_local_rpa = 0x40000c30; r_ble_ll_adv_get_peer_rpa = 0x40000c34; r_ble_ll_adv_hci_set_random_addr = 0x40000c38; r_ble_ll_adv_init = 0x40000c3c; -r_ble_ll_adv_legacy_pdu_make = 0x40000c40; r_ble_ll_adv_next_chan = 0x40000c44; r_ble_ll_adv_pdu_make = 0x40000c48; r_ble_ll_adv_periodic_check_data_itvl = 0x40000c4c; @@ -659,7 +658,6 @@ r_ble_ll_adv_scan_req_rxd = 0x40000c98; r_ble_ll_adv_scan_rsp_legacy_pdu_make = 0x40000c9c; r_ble_ll_adv_scan_rsp_pdu_make = 0x40000ca0; r_ble_ll_adv_scheduled = 0x40000ca4; -r_ble_ll_adv_send_conn_comp_ev = 0x40000ca8; r_ble_ll_adv_set_adv_params = 0x40000cb0; r_ble_ll_adv_set_enable = 0x40000cb4; r_ble_ll_adv_set_random_addr = 0x40000cb8; @@ -695,7 +693,6 @@ r_ble_ll_conn_calc_itvl_ticks = 0x40000d44; r_ble_ll_conn_chk_csm_flags = 0x40000d48; r_ble_ll_conn_chk_phy_upd_start = 0x40000d4c; r_ble_ll_conn_comp_event_send = 0x40000d50; -r_ble_ll_conn_connect_ind_pdu_make = 0x40000d54; r_ble_ll_conn_create_cancel = 0x40000d5c; r_ble_ll_conn_cth_flow_enable = 0x40000d64; r_ble_ll_conn_cth_flow_error_fn = 0x40000d68; @@ -1104,7 +1101,6 @@ r_ble_lll_conn_free_rx_mbuf = 0x40001518; r_ble_lll_conn_get_addr_info_from_rx_buf = 0x4000151c; r_ble_lll_conn_get_ce_end_time = 0x40001520; r_ble_lll_conn_get_next_sched_time = 0x40001524; -r_ble_lll_conn_halt = 0x4000152c; r_ble_lll_conn_master_common_init = 0x40001530; r_ble_lll_conn_master_new = 0x40001534; r_ble_lll_conn_module_reset = 0x40001540; @@ -1202,7 +1198,6 @@ r_ble_lll_sched_aux_scan = 0x40001728; r_ble_lll_sched_conn_overlap = 0x4000172c; r_ble_lll_sched_dtm = 0x40001738; r_ble_lll_sched_execute_item = 0x40001744; -r_ble_lll_sched_init = 0x40001748; r_ble_lll_sched_insert_if_empty = 0x4000174c; r_ble_lll_sched_is_overlap = 0x40001750; r_ble_lll_sched_master_new = 0x40001754; @@ -1324,7 +1319,6 @@ r_hal_timer_read = 0x4000197c; r_hal_timer_read_tick = 0x40001980; r_hal_timer_set_cb = 0x40001984; r_hal_timer_start = 0x4000198c; -r_hal_timer_stop = 0x40001994; r_hal_timer_task_start = 0x40001998; r_ll_assert = 0x4000199c; r_mem_init_mbuf_pool = 0x400019a0; From 71901499b9dd9931a4af29126c497ffa32d1edd4 Mon Sep 17 00:00:00 2001 From: cjin Date: Tue, 12 Dec 2023 17:32:59 +0800 Subject: [PATCH 3/3] change(ble): added ble cca en and thresh option --- components/bt/controller/esp32c2/Kconfig.in | 20 ++++++++++++++++++++ components/bt/controller/esp32c6/Kconfig.in | 20 ++++++++++++++++++++ components/bt/controller/esp32h2/Kconfig.in | 20 ++++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/components/bt/controller/esp32c2/Kconfig.in b/components/bt/controller/esp32c2/Kconfig.in index 05e15708f1e..f834701471c 100644 --- a/components/bt/controller/esp32c2/Kconfig.in +++ b/components/bt/controller/esp32c2/Kconfig.in @@ -464,3 +464,23 @@ config BT_CTRL_BLE_ADV_REPORT_DISCARD_THRSHOLD config BT_LE_RELEASE_IRAM_SUPPORTED bool default y + +config BT_LE_TX_CCA_ENABLED + bool "BLE enable TX CCA feature" + default n + help + Enable the BLE (Bluetooth Low Energy) LBT (Listen Before Talk) function. Before transmitting a packet, + monitor the in-band CCA (Clear Channel Assessment). If the airborne carrier energy is too high, abandon + the packet transmission. Enabling this feature may potentially decrease BLE performance. In certain + countries and regions, when the maximum transmission power exceeds a certain limit, support for LBT + interference avoidance mechanisms is required. If the maximum transmission power does not reach the limit, + it may not be necessary to enable this function. + Please refer to the relevant certification regulations for details. + +config BT_LE_CCA_RSSI_THRESH + int "Power threshold to refrain packet transmission in unit of -1 dBm" + depends on BT_LE_TX_CCA_ENABLED + range 1 100 + default 75 + help + If a carrier signal above the threshold is detected in the air, refrain from packet transmission. diff --git a/components/bt/controller/esp32c6/Kconfig.in b/components/bt/controller/esp32c6/Kconfig.in index 884a4740f1d..560e5ada4e7 100644 --- a/components/bt/controller/esp32c6/Kconfig.in +++ b/components/bt/controller/esp32c6/Kconfig.in @@ -571,3 +571,23 @@ config BT_LE_SCAN_DUPL_CACHE_REFRESH_PERIOD config BT_LE_MSYS_INIT_IN_CONTROLLER bool "Msys Mbuf Init in Controller" default y + +config BT_LE_TX_CCA_ENABLED + bool "BLE enable TX CCA feature" + default n + help + Enable the BLE (Bluetooth Low Energy) LBT (Listen Before Talk) function. Before transmitting a packet, + monitor the in-band CCA (Clear Channel Assessment). If the airborne carrier energy is too high, abandon + the packet transmission. Enabling this feature may potentially decrease BLE performance. In certain + countries and regions, when the maximum transmission power exceeds a certain limit, support for LBT + interference avoidance mechanisms is required. If the maximum transmission power does not reach the limit, + it may not be necessary to enable this function. + Please refer to the relevant certification regulations for details. + +config BT_LE_CCA_RSSI_THRESH + int "Power threshold to refrain packet transmission in unit of -1 dBm" + depends on BT_LE_TX_CCA_ENABLED + range 1 100 + default 75 + help + If a carrier signal above the threshold is detected in the air, refrain from packet transmission. diff --git a/components/bt/controller/esp32h2/Kconfig.in b/components/bt/controller/esp32h2/Kconfig.in index b63d4aa8659..ee7106ad899 100644 --- a/components/bt/controller/esp32h2/Kconfig.in +++ b/components/bt/controller/esp32h2/Kconfig.in @@ -564,3 +564,23 @@ config BT_LE_SCAN_DUPL_CACHE_REFRESH_PERIOD config BT_LE_MSYS_INIT_IN_CONTROLLER bool default y + +config BT_LE_TX_CCA_ENABLED + bool "BLE enable TX CCA feature" + default n + help + Enable the BLE (Bluetooth Low Energy) LBT (Listen Before Talk) function. Before transmitting a packet, + monitor the in-band CCA (Clear Channel Assessment). If the airborne carrier energy is too high, abandon + the packet transmission. Enabling this feature may potentially decrease BLE performance. In certain + countries and regions, when the maximum transmission power exceeds a certain limit, support for LBT + interference avoidance mechanisms is required. If the maximum transmission power does not reach the limit, + it may not be necessary to enable this function. + Please refer to the relevant certification regulations for details. + +config BT_LE_CCA_RSSI_THRESH + int "Power threshold to refrain packet transmission in unit of -1 dBm" + depends on BT_LE_TX_CCA_ENABLED + range 1 100 + default 75 + help + If a carrier signal above the threshold is detected in the air, refrain from packet transmission.