From 57bee3ec960ba9712573a417ea261fbe5748d454 Mon Sep 17 00:00:00 2001 From: yinqingzhao Date: Tue, 3 Dec 2024 17:15:00 +0800 Subject: [PATCH 1/2] feat(wifi): wifi support 80211tx using 11ax rate --- components/esp_wifi/include/esp_now.h | 10 ++-------- components/esp_wifi/include/esp_wifi.h | 18 +++++++++++++++++- components/esp_wifi/include/esp_wifi_types.h | 11 +++++++++++ components/esp_wifi/lib | 2 +- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/components/esp_wifi/include/esp_now.h b/components/esp_wifi/include/esp_now.h index 0e3dd85ab6..f585cbd20f 100644 --- a/components/esp_wifi/include/esp_now.h +++ b/components/esp_wifi/include/esp_now.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2019-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2019-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -92,14 +92,8 @@ typedef struct esp_now_recv_info { /** * @brief ESPNOW rate config - * */ -typedef struct esp_now_rate_config { - wifi_phy_mode_t phymode; /**< ESPNOW phymode of specified interface */ - wifi_phy_rate_t rate; /**< ESPNOW rate of specified interface*/ - bool ersu; /**< ESPNOW using ersu send frame*/ - bool dcm; /**< ESPNOW using dcm rate to send frame*/ -} esp_now_rate_config_t; +typedef wifi_tx_rate_config_t esp_now_rate_config_t; /** * @brief Callback function of receiving ESPNOW data diff --git a/components/esp_wifi/include/esp_wifi.h b/components/esp_wifi/include/esp_wifi.h index fd7bad31b8..8943e4028f 100644 --- a/components/esp_wifi/include/esp_wifi.h +++ b/components/esp_wifi/include/esp_wifi.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -1451,6 +1451,7 @@ esp_err_t esp_wifi_get_country_code(char *country); * @brief Config 80211 tx rate of specified interface * * @attention 1. This API should be called after esp_wifi_init() and before esp_wifi_start(). + * @attention 2. Can not set 80211 tx rate under 11A/11AC/11AX protocol, you can use esp_wifi_config_80211_tx instead. * * @param ifx Interface to be configured. * @param rate Phy rate to be configured. @@ -1461,6 +1462,21 @@ esp_err_t esp_wifi_get_country_code(char *country); */ esp_err_t esp_wifi_config_80211_tx_rate(wifi_interface_t ifx, wifi_phy_rate_t rate); +/** + * @brief Config 80211 tx rate and phymode of specified interface + * + * @attention 1. This API should be called after esp_wifi_init() and before esp_wifi_start(). + + * + * @param ifx Interface to be configured. + * @param config rate_config to be configured. + * + * @return + * - ESP_OK: succeed + * - others: failed + */ +esp_err_t esp_wifi_config_80211_tx(wifi_interface_t ifx, wifi_tx_rate_config_t *config); + /** * @brief Disable PMF configuration for specified interface * diff --git a/components/esp_wifi/include/esp_wifi_types.h b/components/esp_wifi/include/esp_wifi_types.h index 588332e707..deeb27a0d8 100644 --- a/components/esp_wifi/include/esp_wifi_types.h +++ b/components/esp_wifi/include/esp_wifi_types.h @@ -1137,6 +1137,17 @@ typedef struct { uint8_t init_ndi[6]; /**< Initiator's NAN Data Interface MAC */ } wifi_event_ndp_terminated_t; +/** + * @brief Argument structure for wifi_tx_rate_config + */ +typedef struct { + wifi_phy_mode_t phymode; /**< Phymode of specified interface */ + wifi_phy_rate_t rate; /**< Rate of specified interface */ + bool ersu; /**< Using ERSU to send frame, ERSU is a transmission mode related to 802.11 ax. + ERSU is always used in long distance transmission, and its frame has lower rate compared with SU mode */ + bool dcm; /**< Using dcm rate to send frame */ +} wifi_tx_rate_config_t; + #ifdef __cplusplus } #endif diff --git a/components/esp_wifi/lib b/components/esp_wifi/lib index b4bf075b15..3986e134d2 160000 --- a/components/esp_wifi/lib +++ b/components/esp_wifi/lib @@ -1 +1 @@ -Subproject commit b4bf075b152ba2faedb58d79a5aa40ad049c5b07 +Subproject commit 3986e134d2280b54f0892b703915a931eb2aaa73 From 26e77f9a38afd02cc07bf66179b21b0a0e0bc4f1 Mon Sep 17 00:00:00 2001 From: yinqingzhao Date: Wed, 8 Jan 2025 10:27:36 +0800 Subject: [PATCH 2/2] feat(wifi): avoid compiling components related to wifi when wifi is not supported --- components/esp_wifi/CMakeLists.txt | 15 +++++++++++++++ components/esp_wifi/Kconfig | 4 +--- components/wifi_provisioning/CMakeLists.txt | 9 +++++++++ components/wifi_provisioning/Kconfig | 2 +- components/wpa_supplicant/CMakeLists.txt | 8 ++++++++ .../advanced/components/cmd_wifi/CMakeLists.txt | 8 +++++++- .../console/advanced/main/console_example_main.c | 2 +- .../console/basic/main/console_example_main.c | 2 +- tools/unit-test-app/configs/default_3_h2 | 2 +- 9 files changed, 44 insertions(+), 8 deletions(-) diff --git a/components/esp_wifi/CMakeLists.txt b/components/esp_wifi/CMakeLists.txt index 0844b89578..0f754dcec4 100644 --- a/components/esp_wifi/CMakeLists.txt +++ b/components/esp_wifi/CMakeLists.txt @@ -1,3 +1,18 @@ +if( NOT CONFIG_ESP_WIFI_ENABLED + AND NOT CMAKE_BUILD_EARLY_EXPANSION ) + # No local wifi: provide only netif bindings + set(srcs + "src/wifi_default.c" + "src/wifi_netif.c" + "src/wifi_default_ap.c") + + # This component provides "esp_wifi" "wifi_apps" headers if WiFi not enabled + # (implementation supported optionally in a managed component esp_wifi_remote) + idf_component_register(SRCS "${srcs}" + INCLUDE_DIRS "include" "wifi_apps/include") + return() +endif() + if(CONFIG_ESP_WIFI_ENABLED) idf_build_get_property(idf_target IDF_TARGET) diff --git a/components/esp_wifi/Kconfig b/components/esp_wifi/Kconfig index d77ae6aa9c..86ebccd032 100644 --- a/components/esp_wifi/Kconfig +++ b/components/esp_wifi/Kconfig @@ -1,8 +1,6 @@ menu "Wi-Fi" - # TODO: Disable WIFI support on ESP32-H2 (WIFI-5796) - # visible if SOC_WIFI_SUPPORTED - + visible if (SOC_WIFI_SUPPORTED) config ESP_WIFI_ENABLED bool default y if SOC_WIFI_SUPPORTED diff --git a/components/wifi_provisioning/CMakeLists.txt b/components/wifi_provisioning/CMakeLists.txt index fd8b1cb0f8..a04450ca71 100644 --- a/components/wifi_provisioning/CMakeLists.txt +++ b/components/wifi_provisioning/CMakeLists.txt @@ -1,3 +1,12 @@ + +if( NOT CONFIG_ESP_WIFI_ENABLED + AND NOT CMAKE_BUILD_EARLY_EXPANSION ) + # This component provides only "esp_provisioning" headers if WiFi not enabled + # (implementation supported optionally in a managed component esp_wifi_remote) + idf_component_register(INCLUDE_DIRS include) + return() +endif() + set(srcs "src/wifi_config.c" "src/wifi_scan.c" "src/wifi_ctrl.c" diff --git a/components/wifi_provisioning/Kconfig b/components/wifi_provisioning/Kconfig index 9403d0ee23..273289f36e 100644 --- a/components/wifi_provisioning/Kconfig +++ b/components/wifi_provisioning/Kconfig @@ -1,5 +1,5 @@ menu "Wi-Fi Provisioning Manager" - + visible if (SOC_WIFI_SUPPORTED) config WIFI_PROV_SCAN_MAX_ENTRIES int "Max Wi-Fi Scan Result Entries" default 16 diff --git a/components/wpa_supplicant/CMakeLists.txt b/components/wpa_supplicant/CMakeLists.txt index 3b50a1db44..0fa0988e03 100644 --- a/components/wpa_supplicant/CMakeLists.txt +++ b/components/wpa_supplicant/CMakeLists.txt @@ -1,5 +1,13 @@ set(linker_fragments linker.lf) +if( NOT CONFIG_ESP_WIFI_ENABLED + AND NOT CMAKE_BUILD_EARLY_EXPANSION ) + # This component provides only "esp_supplicant" headers if WiFi not enabled + # (implementation supported optionally in a managed component esp_wifi_remote) + idf_component_register(INCLUDE_DIRS esp_supplicant/include) + return() +endif() + set(srcs "port/os_xtensa.c" "port/eloop.c" "src/ap/ap_config.c" diff --git a/examples/system/console/advanced/components/cmd_wifi/CMakeLists.txt b/examples/system/console/advanced/components/cmd_wifi/CMakeLists.txt index ca51905567..b529d0328a 100644 --- a/examples/system/console/advanced/components/cmd_wifi/CMakeLists.txt +++ b/examples/system/console/advanced/components/cmd_wifi/CMakeLists.txt @@ -1,3 +1,9 @@ -idf_component_register(SRCS "cmd_wifi.c" +if(CONFIG_ESP_WIFI_ENABLED) + set(srcs "cmd_wifi.c") +else() + set(srcs) +endif() + +idf_component_register(SRCS "${srcs}" INCLUDE_DIRS . REQUIRES console esp_wifi) diff --git a/examples/system/console/advanced/main/console_example_main.c b/examples/system/console/advanced/main/console_example_main.c index 4f7d7cd893..d9856ee38b 100644 --- a/examples/system/console/advanced/main/console_example_main.c +++ b/examples/system/console/advanced/main/console_example_main.c @@ -157,7 +157,7 @@ void app_main(void) esp_console_register_help_command(); register_system_common(); register_system_sleep(); -#if SOC_WIFI_SUPPORTED +#if CONFIG_ESP_WIFI_ENABLED register_wifi(); #endif register_nvs(); diff --git a/examples/system/console/basic/main/console_example_main.c b/examples/system/console/basic/main/console_example_main.c index 34fd94d131..1ee06a33cd 100644 --- a/examples/system/console/basic/main/console_example_main.c +++ b/examples/system/console/basic/main/console_example_main.c @@ -81,7 +81,7 @@ void app_main(void) esp_console_register_help_command(); register_system_common(); register_system_sleep(); -#if SOC_WIFI_SUPPORTED +#if CONFIG_ESP_WIFI_ENABLED register_wifi(); #endif register_nvs(); diff --git a/tools/unit-test-app/configs/default_3_h2 b/tools/unit-test-app/configs/default_3_h2 index 6768e9bbda..ef39a6d847 100644 --- a/tools/unit-test-app/configs/default_3_h2 +++ b/tools/unit-test-app/configs/default_3_h2 @@ -1,3 +1,3 @@ # This config is split between targets since different component needs to be included CONFIG_IDF_TARGET="esp32h2" -TEST_EXCLUDE_COMPONENTS=app_trace esp_eth esp_hid esp_netif esp_phy esp_ringbuf esp_wifi espcoredump hal lwip mdns newlib nvs_flash partition_table sdmmc driver soc spi_flash vfs +TEST_EXCLUDE_COMPONENTS=app_trace esp_eth esp_hid esp_netif esp_phy esp_ringbuf esp_wifi espcoredump hal lwip mdns newlib nvs_flash partition_table sdmmc driver soc spi_flash vfs wpa_supplicant