diff --git a/.gitmodules b/.gitmodules index f054087dd..53315b72d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -67,14 +67,6 @@ path = examples/build_system/cmake/import_lib/main/lib/tinyxml2 url = ../../leethomason/tinyxml2.git -[submodule "components/esp_wifi/lib_esp32"] - path = components/esp_wifi/lib_esp32 - url = ../../espressif/esp32-wifi-lib.git - -[submodule "components/esp_wifi/lib_esp32s2beta"] - path = components/esp_wifi/lib_esp32s2beta - url = ../../espressif/esp32-wifi-lib.git - [submodule "components/bt/host/nimble/nimble"] path = components/bt/host/nimble/nimble url = ../../espressif/esp-nimble.git @@ -83,3 +75,6 @@ path = components/cbor/tinycbor url = ../../intel/tinycbor.git +[submodule "components/esp_wifi/lib"] + path = components/esp_wifi/lib + url = ../../espressif/esp32-wifi-lib.git diff --git a/components/bootloader/subproject/main/Makefile.projbuild b/components/bootloader/subproject/main/Makefile.projbuild index 2e628b6d5..92ecc4934 100644 --- a/components/bootloader/subproject/main/Makefile.projbuild +++ b/components/bootloader/subproject/main/Makefile.projbuild @@ -1,4 +1,4 @@ # Submodules normally added in component.mk, but fully qualified # paths can be added at this level (we need binary librtc to be # available to link bootloader). -COMPONENT_SUBMODULES += $(IDF_PATH)/components/esp_wifi/lib_esp32 +COMPONENT_SUBMODULES += $(IDF_PATH)/components/esp_wifi/lib diff --git a/components/esp_wifi/CMakeLists.txt b/components/esp_wifi/CMakeLists.txt index f852a2095..e1478a3a2 100644 --- a/components/esp_wifi/CMakeLists.txt +++ b/components/esp_wifi/CMakeLists.txt @@ -20,7 +20,7 @@ idf_component_register(SRCS "src/coexist.c" LDFRAGMENTS "${ldfragments}") idf_build_get_property(build_dir BUILD_DIR) -target_link_libraries(${COMPONENT_LIB} PUBLIC "-L ${CMAKE_CURRENT_SOURCE_DIR}/lib_${idf_target}") +target_link_libraries(${COMPONENT_LIB} PUBLIC "-L ${CMAKE_CURRENT_SOURCE_DIR}/lib/${idf_target}") if(link_binary_libs) if(CONFIG_IDF_TARGET_ESP32) @@ -39,7 +39,7 @@ if(link_binary_libs) foreach(blob ${blobs}) add_library(${blob} STATIC IMPORTED) - set_property(TARGET ${blob} PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/lib_${idf_target}/lib${blob}.a) + set_property(TARGET ${blob} PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/lib/${idf_target}/lib${blob}.a) target_link_libraries(${COMPONENT_LIB} PUBLIC ${blob}) foreach(_blob ${blobs}) diff --git a/components/esp_wifi/component.mk b/components/esp_wifi/component.mk index aa196fd4f..578041750 100644 --- a/components/esp_wifi/component.mk +++ b/components/esp_wifi/component.mk @@ -7,14 +7,14 @@ COMPONENT_SRCDIRS := src ifndef CONFIG_ESP32_NO_BLOBS LIBS := core rtc net80211 pp smartconfig coexist espnow phy mesh - COMPONENT_ADD_LDFLAGS += -L$(COMPONENT_PATH)/lib_$(IDF_TARGET) \ + COMPONENT_ADD_LDFLAGS += -L$(COMPONENT_PATH)/lib/$(IDF_TARGET) \ $(addprefix -l,$(LIBS)) COMPONENT_ADD_LDFRAGMENTS += linker.lf - COMPONENT_SUBMODULES += lib_$(IDF_TARGET) + COMPONENT_SUBMODULES += lib - ALL_LIB_FILES := $(patsubst %,$(COMPONENT_PATH)/lib_$(IDF_TARGET)/lib%.a,$(LIBS)) + ALL_LIB_FILES := $(patsubst %,$(COMPONENT_PATH)/lib/$(IDF_TARGET)/lib%.a,$(LIBS)) COMPONENT_ADD_LINKER_DEPS += $(ALL_LIB_FILES) endif diff --git a/components/esp_wifi/include/esp_private/wifi.h b/components/esp_wifi/include/esp_private/wifi.h index 8671d1705..5115169ab 100644 --- a/components/esp_wifi/include/esp_private/wifi.h +++ b/components/esp_wifi/include/esp_private/wifi.h @@ -102,6 +102,23 @@ typedef enum { */ esp_err_t esp_wifi_init_internal(const wifi_init_config_t *config); +/** + * @brief Deinitialize Wi-Fi Driver + * Free resource for WiFi driver, such as WiFi control structure, RX/TX buffer, + * WiFi NVS structure among others. + * + * For the most part, you need not call this function directly. It gets called + * from esp_wifi_deinit(). + * + * This function may be called, if you call esp_wifi_init_internal to initialize + * WiFi driver. + * + * @return + * - ESP_OK: succeed + * - others: refer to error code esp_err.h + */ +esp_err_t esp_wifi_deinit_internal(void); + /** * @brief get whether the wifi driver is allowed to transmit data or not * diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib new file mode 160000 index 000000000..d38f75b16 --- /dev/null +++ b/components/esp_wifi/lib @@ -0,0 +1 @@ +Subproject commit d38f75b16016636734eb747e0706c9f62d3d5e93 diff --git a/components/esp_wifi/lib_esp32 b/components/esp_wifi/lib_esp32 deleted file mode 160000 index 1d830bc24..000000000 --- a/components/esp_wifi/lib_esp32 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1d830bc2433b6e166d23329c612db6b86aabc59b diff --git a/components/esp_wifi/lib_esp32s2beta b/components/esp_wifi/lib_esp32s2beta deleted file mode 160000 index 8ea1c6512..000000000 --- a/components/esp_wifi/lib_esp32s2beta +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8ea1c651254560c59f816c9d16aa71322dcd15e5 diff --git a/components/esp_wifi/src/wifi_init.c b/components/esp_wifi/src/wifi_init.c index d08cea3bb..e1d15dd99 100644 --- a/components/esp_wifi/src/wifi_init.c +++ b/components/esp_wifi/src/wifi_init.c @@ -98,6 +98,21 @@ static void esp_wifi_set_debug_log(void) } +esp_err_t esp_wifi_deinit(void) +{ + esp_err_t err = ESP_OK; + + esp_supplicant_deinit(); + err = esp_wifi_deinit_internal(); + if (err != ESP_OK) { + ESP_LOGE(TAG, "Failed to deinit Wi-Fi driver (0x%x)", err); + } + + tcpip_adapter_clear_default_wifi_handlers(); + + return err; +} + esp_err_t esp_wifi_init(const wifi_init_config_t *config) { #ifdef CONFIG_PM_ENABLE diff --git a/components/wpa_supplicant/include/esp_supplicant/esp_wpa.h b/components/wpa_supplicant/include/esp_supplicant/esp_wpa.h index c7fbcfacb..a268d9a46 100644 --- a/components/wpa_supplicant/include/esp_supplicant/esp_wpa.h +++ b/components/wpa_supplicant/include/esp_supplicant/esp_wpa.h @@ -54,6 +54,16 @@ const mesh_crypto_funcs_t g_wifi_default_mesh_crypto_funcs; */ esp_err_t esp_supplicant_init(void); +/** + * @brief Supplicant deinitialization + * + * @return + * - ESP_OK : succeed + * - others: failed + */ +esp_err_t esp_supplicant_deinit(void); + + /** * @} */ diff --git a/components/wpa_supplicant/src/esp_supplicant/esp_wpa_main.c b/components/wpa_supplicant/src/esp_supplicant/esp_wpa_main.c index 51f9e40f4..1b76b6407 100644 --- a/components/wpa_supplicant/src/esp_supplicant/esp_wpa_main.c +++ b/components/wpa_supplicant/src/esp_supplicant/esp_wpa_main.c @@ -232,7 +232,7 @@ int esp_supplicant_init(void) return ESP_OK; } -bool wpa_hook_deinit(void) +int esp_supplicant_deinit(void) { return esp_wifi_unregister_wpa_cb_internal(); } diff --git a/tools/ci/config/build.yml b/tools/ci/config/build.yml index 6fb4c5e4a..51fd84c98 100644 --- a/tools/ci/config/build.yml +++ b/tools/ci/config/build.yml @@ -83,9 +83,9 @@ build_template_app: - export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS} # Check if there are any stray printf/ets_printf references in WiFi libs - - pushd ../components/esp_wifi/lib_esp32 - - test $(xtensa-esp32-elf-nm *.a | grep -w printf | wc -l) -eq 0 - - test $(xtensa-esp32-elf-nm *.a | grep -w ets_printf | wc -l) -eq 0 + - pushd ../components/esp_wifi/lib + - for dir in esp32 esp32s2beta; do test $(xtensa-esp32-elf-nm $dir/*.a | grep -w printf | wc -l) -eq 0; done; + - for dir in esp32 esp32s2beta; do test $(xtensa-esp32-elf-nm $dir/*.a | grep -w ets_printf | wc -l) -eq 0; done; - popd build_ssc: