Skip to content

Commit 30c612a

Browse files
committed
Fix Coded phy scanning and scan filtering for esp h2/c6/c5
1 parent 69ccfac commit 30c612a

File tree

3 files changed

+45
-5
lines changed

3 files changed

+45
-5
lines changed

src/NimBLEDevice.cpp

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
# if defined(CONFIG_BT_NIMBLE_ROLE_PERIPHERAL)
6767
# include "NimBLEServer.h"
6868
# if CONFIG_BT_NIMBLE_L2CAP_COC_MAX_NUM > 0
69-
# include "NimBLEL2CAPServer.h"
69+
# include "NimBLEL2CAPServer.h"
7070
# endif
7171
# endif
7272

@@ -113,9 +113,16 @@ std::vector<NimBLEAddress> NimBLEDevice::m_whiteList{};
113113
uint8_t NimBLEDevice::m_ownAddrType{BLE_OWN_ADDR_PUBLIC};
114114

115115
# ifdef ESP_PLATFORM
116-
# ifdef CONFIG_BTDM_BLE_SCAN_DUPL
116+
# if CONFIG_BTDM_BLE_SCAN_DUPL
117117
uint16_t NimBLEDevice::m_scanDuplicateSize{CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE};
118118
uint8_t NimBLEDevice::m_scanFilterMode{CONFIG_BTDM_SCAN_DUPL_TYPE};
119+
# elif CONFIG_BT_LE_SCAN_DUPL
120+
uint16_t NimBLEDevice::m_scanDuplicateSize{CONFIG_BT_LE_LL_DUP_SCAN_LIST_COUNT};
121+
uint8_t NimBLEDevice::m_scanFilterMode{CONFIG_BT_LE_SCAN_DUPL_TYPE};
122+
extern "C" int ble_vhci_disc_duplicate_set_max_cache_size(int max_cache_size);
123+
extern "C" int ble_vhci_disc_duplicate_set_period_refresh_time(int refresh_period_time);
124+
extern "C" int ble_vhci_disc_duplicate_mode_disable(int mode);
125+
extern "C" int ble_vhci_disc_duplicate_mode_enable(int mode);
119126
# endif
120127
# endif
121128

@@ -258,7 +265,7 @@ NimBLEScan* NimBLEDevice::getScan() {
258265
} // getScan
259266

260267
# ifdef ESP_PLATFORM
261-
# ifdef CONFIG_BTDM_BLE_SCAN_DUPL
268+
# if CONFIG_BTDM_BLE_SCAN_DUPL || CONFIG_BT_LE_SCAN_DUPL
262269
/**
263270
* @brief Set the duplicate filter cache size for filtering scanned devices.
264271
* @param [in] size The number of advertisements filtered before the cache is reset.\n
@@ -900,16 +907,37 @@ bool NimBLEDevice::init(const std::string& deviceName) {
900907
bt_cfg.nimble_max_connections = CONFIG_BT_NIMBLE_MAX_CONNECTIONS;
901908
# endif
902909

903-
# ifdef CONFIG_BTDM_BLE_SCAN_DUPL
910+
# if CONFIG_BTDM_BLE_SCAN_DUPL
904911
bt_cfg.normal_adv_size = m_scanDuplicateSize;
905912
bt_cfg.scan_duplicate_type = m_scanFilterMode;
913+
# elif CONFIG_BT_LE_SCAN_DUPL
914+
bt_cfg.ble_ll_rsp_dup_list_count = m_scanDuplicateSize;
915+
bt_cfg.ble_ll_adv_dup_list_count = m_scanDuplicateSize;
906916
# endif
907917
err = esp_bt_controller_init(&bt_cfg);
908918
if (err != ESP_OK) {
909919
NIMBLE_LOGE(LOG_TAG, "esp_bt_controller_init() failed; err=%d", err);
910920
return false;
911921
}
912922

923+
# if CONFIG_BT_LE_SCAN_DUPL
924+
int mode = (1UL << 4); // FILTER_DUPLICATE_EXCEPTION_FOR_MESH
925+
switch (m_scanFilterMode) {
926+
case 1:
927+
mode |= (1UL << 3); // FILTER_DUPLICATE_ADVDATA
928+
break;
929+
case 2:
930+
mode |= ((1UL << 2) | (1UL << 3)); // FILTER_DUPLICATE_ADDRESS | FILTER_DUPLICATE_ADVDATA
931+
break;
932+
default:
933+
mode |= (1UL << 0) | (1UL << 2); // FILTER_DUPLICATE_PDUTYPE | FILTER_DUPLICATE_ADDRESS
934+
}
935+
936+
ble_vhci_disc_duplicate_mode_disable(0xFFFFFFFF);
937+
ble_vhci_disc_duplicate_mode_enable(mode);
938+
ble_vhci_disc_duplicate_set_max_cache_size(m_scanDuplicateSize);
939+
# endif
940+
913941
err = esp_bt_controller_enable(ESP_BT_MODE_BLE);
914942
if (err != ESP_OK) {
915943
NIMBLE_LOGE(LOG_TAG, "esp_bt_controller_enable() failed; err=%d", err);

src/NimBLEDevice.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ class NimBLEDevice {
248248
# endif
249249

250250
# ifdef ESP_PLATFORM
251-
# ifdef CONFIG_BTDM_BLE_SCAN_DUPL
251+
# if CONFIG_BTDM_BLE_SCAN_DUPL || CONFIG_BT_LE_SCAN_DUPL
252252
static uint16_t m_scanDuplicateSize;
253253
static uint8_t m_scanFilterMode;
254254
# endif

src/nimconfig_rename.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,15 @@
7979
#if !defined(CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE) && defined(CONFIG_BT_CTRL_SCAN_DUPL_TYPE_DATA_DEVICE)
8080
#define CONFIG_BTDM_SCAN_DUPL_TYPE_DATA_DEVICE CONFIG_BT_CTRL_SCAN_DUPL_TYPE_DATA_DEVICE
8181
#endif
82+
83+
#ifdef CONFIG_BT_LE_LL_CFG_FEAT_LE_CODED_PHY
84+
#define CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_CODED_PHY CONFIG_BT_LE_LL_CFG_FEAT_LE_CODED_PHY
85+
#endif
86+
87+
#ifdef CONFIG_BT_LE_LL_CFG_FEAT_LE_2M_PHY
88+
#define CONFIG_BT_NIMBLE_LL_CFG_FEAT_LE_2M_PHY CONFIG_BT_LE_LL_CFG_FEAT_LE_2M_PHY
89+
#endif
90+
91+
#ifdef CONFIG_BT_LE_50_FEATURE_SUPPORT
92+
#define CONFIG_BT_NIMBLE_50_FEATURE_SUPPORT CONFIG_BT_LE_50_FEATURE_SUPPORT
93+
#endif

0 commit comments

Comments
 (0)