diff --git a/cpu/esp32/Kconfig b/cpu/esp32/Kconfig index 11016679ea..84027323f1 100644 --- a/cpu/esp32/Kconfig +++ b/cpu/esp32/Kconfig @@ -16,6 +16,17 @@ config HAS_CPU_ESP32 help Indicates that the current CPU belongs to the ESP32x SoC series. +config HAS_ESP_BLE + bool + help + Indicates that the used ESP32x SoC supports Bluetooth LE. + +config HAS_ESP_BLE_ESP32 + bool + help + Indicates that the ESP32x SoC uses the SDK Bluetooth LE library + for the ESP32 variant. + config HAS_ESP_HW_COUNTER bool help diff --git a/cpu/esp32/Kconfig.common b/cpu/esp32/Kconfig.common index 9f8b47e1b1..cd4ab2448d 100644 --- a/cpu/esp32/Kconfig.common +++ b/cpu/esp32/Kconfig.common @@ -9,6 +9,13 @@ if TEST_KCONFIG && HAS_ARCH_ESP32 # define configuration menu entries that common for all ESP32x SoC variants +config MODULE_ESP_BLE + bool "Enable Bluetooth LE interface" + depends on HAS_ESP_BLE + select MODULE_ESP_IDF_BLE + select PACKAGE_ESP32_SDK_LIB_PHY + select PACKAGE_ESP32_SDK_LIB_BT_ESP32 if HAS_ESP_BLE_ESP32 + config MODULE_ESP_JTAG bool "Enable JTAG debugging interface" depends on HAS_ESP_JTAG diff --git a/cpu/esp32/Kconfig.esp32 b/cpu/esp32/Kconfig.esp32 index d5cb48c052..de478800db 100644 --- a/cpu/esp32/Kconfig.esp32 +++ b/cpu/esp32/Kconfig.esp32 @@ -18,6 +18,8 @@ config CPU_FAM_ESP32 select CPU_CORE_XTENSA_LX6 select HAS_ARCH_ESP32 select HAS_CPU_ESP32 + select HAS_ESP_BLE + select HAS_ESP_BLE_ESP32 select HAS_ESP_HW_COUNTER select HAS_ESP_WIFI_ENTERPRISE select HAS_PUF_SRAM diff --git a/cpu/esp32/Makefile.dep b/cpu/esp32/Makefile.dep index be2049fb1c..8435b4ddd5 100644 --- a/cpu/esp32/Makefile.dep +++ b/cpu/esp32/Makefile.dep @@ -17,6 +17,17 @@ ifneq (,$(filter cpp,$(USEMODULE))) USEMODULE += pthread endif +ifneq (,$(filter esp_ble,$(USEMODULE))) + # add additional modules and packages used for any BLE interface + FEATURES_REQUIRED += esp_ble + USEMODULE += esp_idf_ble + USEPKG += esp32_sdk_lib_phy + ifeq (esp32,$(CPU_FAM)) + FEATURES_REQUIRED += esp_ble_esp32 + USEPKG += esp32_sdk_lib_bt_esp32 + endif +endif + ifneq (,$(filter esp_eth,$(USEMODULE))) FEATURES_REQUIRED += esp_eth USEMODULE += esp_idf_eth diff --git a/cpu/esp32/Makefile.features b/cpu/esp32/Makefile.features index 098e647906..11459aa417 100644 --- a/cpu/esp32/Makefile.features +++ b/cpu/esp32/Makefile.features @@ -23,6 +23,12 @@ ifeq (xtensa,$(CPU_ARCH)) FEATURES_PROVIDED += esp_hw_counter endif +ifeq (esp32,$(CPU_FAM)) + FEATURES_PROVIDED += ble_nimble + FEATURES_PROVIDED += esp_ble + FEATURES_PROVIDED += esp_ble_esp32 +endif + ifneq (,$(filter esp32-wrover% esp32s2%r2 esp32s3%r2 esp32s3%r8 esp32s3%r8v,$(CPU_MODEL))) FEATURES_PROVIDED += esp_spi_ram ifneq (,$(filter esp32s3%r8 esp32s3%r8v,$(CPU_MODEL))) diff --git a/cpu/esp32/Makefile.include b/cpu/esp32/Makefile.include index 89830bce12..a318ff6196 100644 --- a/cpu/esp32/Makefile.include +++ b/cpu/esp32/Makefile.include @@ -36,6 +36,7 @@ else $(error Unkwnown ESP32x SoC architecture) endif +PSEUDOMODULES += esp_ble PSEUDOMODULES += esp_bootloader PSEUDOMODULES += esp_gdbstub PSEUDOMODULES += esp_hw_counter @@ -80,6 +81,14 @@ ifneq (,$(filter xtensa%,$(TARGET_ARCH))) INCLUDES += -I$(ESP32_SDK_DIR)/components/xtensa/$(CPU_FAM)/include endif +ifneq (,$(filter esp_ble,$(USEMODULE))) + INCLUDES += -I$(ESP32_SDK_DIR)/components/bt/include/$(CPU_FAM)/include +endif + +ifneq (,$(filter esp_ble_nimble,$(USEMODULE))) + INCLUDES += $(NIMIBASE)/nimble/transport/common/hci_h4/include +endif + ifneq (,$(filter esp_spi_ram,$(USEMODULE))) INCLUDES += -I$(ESP32_SDK_DIR)/components/esp_hw_support/include/soc/$(CPU_FAM) endif @@ -150,8 +159,14 @@ ifneq (,$(filter xtensa%,$(TARGET_ARCH))) endif LINKFLAGS += -L$(RIOTCPU)/$(CPU)/ld/$(CPU_FAM)/ -LINKFLAGS += -T$(RIOTCPU)/$(CPU)/ld/$(CPU_FAM)/memory.ld + +ifeq (,$(filter esp_ble,$(USEMODULE))) + LINKFLAGS += -T$(RIOTCPU)/$(CPU)/ld/$(CPU_FAM)/memory.ld +else + LINKFLAGS += -T$(RIOTCPU)/$(CPU)/ld/$(CPU_FAM)/memory_bt.ld +endif LINKFLAGS += -T$(RIOTCPU)/$(CPU)/ld/$(CPU_FAM)/sections.ld + LINKFLAGS += -T$(ESP32_SDK_DIR)/components/soc/$(CPU_FAM)/ld/$(CPU_FAM).peripherals.ld LINKFLAGS += -T$(ESP32_SDK_DIR)/components/esp_rom/$(CPU_FAM)/ld/$(CPU_FAM).rom.api.ld LINKFLAGS += -T$(ESP32_SDK_DIR)/components/esp_rom/$(CPU_FAM)/ld/$(CPU_FAM).rom.ld @@ -182,7 +197,7 @@ ifneq (,$(filter esp_wifi_any,$(USEMODULE))) LINKFLAGS += -L$(ESP32_SDK_LIB_PHY_DIR)/$(CPU_FAM) ARCHIVES += -lcoexist -lcore -lmesh -lnet80211 -lpp ARCHIVES += -lphy -lstdc++ - ifneq (,$(filter esp32,$(CPU_FAM))) + ifeq (esp32,$(CPU_FAM)) ARCHIVES += -lrtc endif endif @@ -192,6 +207,17 @@ ifneq (,$(filter esp_now,$(USEMODULE))) ARCHIVES += -lespnow -lmesh endif +# Libraries needed when using esp_ble +ifneq (,$(filter esp_ble,$(USEMODULE))) + LINKFLAGS += -L$(ESP32_SDK_LIB_PHY_DIR)/$(CPU_FAM) + LINKFLAGS += -L$(ESP32_SDK_LIB_BT_DIR)/$(CPU_FAM) + ARCHIVES += -lbtdm_app + ARCHIVES += -lphy -lstdc++ + ifeq (esp32,$(CPU_FAM)) + ARCHIVES += -lrtc + endif +endif + ifneq (,$(filter cpp,$(USEMODULE))) ARCHIVES += -lstdc++ endif diff --git a/cpu/esp32/include/sdkconfig.h b/cpu/esp32/include/sdkconfig.h index 325c53226e..8f9b98160f 100644 --- a/cpu/esp32/include/sdkconfig.h +++ b/cpu/esp32/include/sdkconfig.h @@ -100,10 +100,16 @@ #define CONFIG_PARTITION_TABLE_OFFSET 0x8000 /** - * Bluetooth configuration (DO NOT CHANGE) + * BLE driver configuration (DO NOT CHANGE) */ -#define CONFIG_BT_ENABLED 0 -#define CONFIG_BT_RESERVE_DRAM 0 +#ifdef MODULE_ESP_BLE +#define CONFIG_ESP32_WIFI_ENABLED 1 /* WiFi module has to be enabled */ +#define CONFIG_BT_ENABLED 1 +#define CONFIG_BT_CONTROLLER_ONLY 1 +#else +#define CONFIG_BT_ENABLED 0 +#define CONFIG_BTDM_RESERVE_DRAM 0 +#endif /** * SPI RAM configuration (DO NOT CHANGE) @@ -179,6 +185,9 @@ #if defined(MODULE_ESP_WIFI_AP) || defined(MODULE_ESP_NOW) #define CONFIG_ESP_WIFI_SOFTAP_SUPPORT 1 #endif +#ifdef MODULE_ESP_BLE +#define CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE 1 +#endif #endif /** diff --git a/cpu/esp32/include/sdkconfig_esp32.h b/cpu/esp32/include/sdkconfig_esp32.h index 05fec6a33f..289cd916e6 100644 --- a/cpu/esp32/include/sdkconfig_esp32.h +++ b/cpu/esp32/include/sdkconfig_esp32.h @@ -162,6 +162,55 @@ extern "C" { #define CONFIG_ETH_DMA_TX_BUFFER_NUM 10 #endif +/** + * ESP32 specific BLE driver configuration (DO NOT CHANGE) + */ +#ifdef MODULE_ESP_BLE +#define CONFIG_BTDM_BLE_ADV_REPORT_DISCARD_THRSHOLD 20 +#define CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_SUPP 1 +#define CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_NUM 100 +#define CONFIG_BTDM_BLE_DEFAULT_SCA_250PPM 1 +#define CONFIG_BTDM_BLE_SCAN_DUPL 1 +#define CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF 1 +#define CONFIG_BTDM_CTRL_BLE_MAX_CONN 3 +#define CONFIG_BTDM_CTRL_BLE_MAX_CONN_EFF 3 +#define CONFIG_BTDM_CTRL_BR_EDR_MAX_ACL_CONN_EFF 0 +#define CONFIG_BTDM_CTRL_BR_EDR_MAX_SYNC_CONN_EFF 0 +#define CONFIG_BTDM_CTRL_BR_EDR_SCO_DATA_PATH_EFF 0 +#define CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED 1 +#define CONFIG_BTDM_CTRL_HCI_MODE_VHCI 1 +#define CONFIG_BTDM_CTRL_HLI 0 /* ESP-IDF uses 1 by default */ +#define CONFIG_BTDM_CTRL_LPCLK_SEL_MAIN_XTAL 1 +#define CONFIG_BTDM_CTRL_MODE_BLE_ONLY 1 +#define CONFIG_BTDM_CTRL_MODEM_SLEEP 1 +#define CONFIG_BTDM_CTRL_MODEM_SLEEP_MODE_ORIG 1 +#define CONFIG_BTDM_CTRL_PCM_ROLE_EFF 0 +#define CONFIG_BTDM_CTRL_PCM_POLAR_EFF 0 +#define CONFIG_BTDM_CTRL_PINNED_TO_CORE_0 1 +#define CONFIG_BTDM_CTRL_PINNED_TO_CORE 0 +#define CONFIG_BTDM_RESERVE_DRAM 0xdb5c +#define CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE 200 +#define CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE 1 +#define CONFIG_BTDM_SCAN_DUPL_TYPE 0 + +#define CONFIG_BLE_ADV_REPORT_DISCARD_THRSHOLD CONFIG_ BTDM_BLE_ADV_REPORT_DISCARD_THRSHOLD +#define CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_NUM CONFIG_ BTDM_BLE_ADV_REPORT_FLOW_CTRL_NUM +#define CONFIG_BLE_ADV_REPORT_FLOW_CONTROL_SUPPORTED CONFIG_BTDM_BLE_ADV_REPORT_FLOW_CTRL_SUPP +#define CONFIG_BLE_SCAN_DUPLICATE CONFIG_BTDM_BLE_SCAN_DUPL +#define CONFIG_BTDM_CONTROLLER_BLE_MAX_CONN CONFIG_BTDM_CTRL_BLE_MAX_CONN +#define CONFIG_BTDM_CONTROLLER_FULL_SCAN_SUPPORTED CONFIG_BTDM_CTRL_FULL_SCAN_SUPPORTED +#define CONFIG_BTDM_CONTROLLER_HCI_MODE_VHCI CONFIG_BTDM_CTRL_HCI_MODE_VHCI +#define CONFIG_BTDM_CONTROLLER_MODEM_SLEEP CONFIG_BTDM_CTRL_MODEM_SLEEP +#define CONFIG_BTDM_CONTROLLER_MODE_BLE_ONLY CONFIG_BTDM_CTRL_MODE_BLE_ONLY +#define CONFIG_DUPLICATE_SCAN_CACHE_SIZE CONFIG_BTDM_SCAN_DUPL_CACHE_SIZE +#define CONFIG_SCAN_DUPLICATE_BY_DEVICE_ADDR CONFIG_BTDM_SCAN_DUPL_TYPE_DEVICE + +#else + +#define CONFIG_BTDM_RESERVE_DRAM 0 + +#endif + #ifdef __cplusplus } #endif