From 5bffce92977c242ea0260dca0e1f8cfd5c787bd8 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Wed, 7 Jan 2026 12:39:12 +0100 Subject: [PATCH] Fix WiFi phy modes due to recent IDF update --- .../WiFiHelper/src/WiFiHelper_ESP32.cpp | 26 +++++++++++++++---- tasmota/tasmota_support/support_esp32.ino | 4 +-- tasmota/tasmota_support/support_wifi.ino | 12 +++++---- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/lib/default/WiFiHelper/src/WiFiHelper_ESP32.cpp b/lib/default/WiFiHelper/src/WiFiHelper_ESP32.cpp index 82bd774e1..384f1f0aa 100644 --- a/lib/default/WiFiHelper/src/WiFiHelper_ESP32.cpp +++ b/lib/default/WiFiHelper/src/WiFiHelper_ESP32.cpp @@ -156,8 +156,8 @@ void WiFiHelper::setSleepMode(int iSleepMode) { int WiFiHelper::getPhyMode() { /* - typedef enum - { + // IDF v5.2.6 + typedef enum { WIFI_PHY_MODE_LR, // PHY mode for Low Rate WIFI_PHY_MODE_11B, // PHY mode for 11b WIFI_PHY_MODE_11G, // PHY mode for 11g @@ -165,19 +165,35 @@ int WiFiHelper::getPhyMode() { WIFI_PHY_MODE_HT40, // PHY mode for Bandwidth HT40 (11n) WIFI_PHY_MODE_HE20, // PHY mode for Bandwidth HE20 (11ax) } wifi_phy_mode_t; + + // IDF v5.3.4 + typedef enum { + WIFI_PHY_MODE_LR, // PHY mode for Low Rate + WIFI_PHY_MODE_11B, // PHY mode for 11b + WIFI_PHY_MODE_11G, // PHY mode for 11g + WIFI_PHY_MODE_11A, // PHY mode for 11a + WIFI_PHY_MODE_HT20, // PHY mode for Bandwidth HT20 + WIFI_PHY_MODE_HT40, // PHY mode for Bandwidth HT40 + WIFI_PHY_MODE_HE20, // PHY mode for Bandwidth HE20 + WIFI_PHY_MODE_VHT20,// PHY mode for Bandwidth VHT20 + } wifi_phy_mode_t; */ - int phy_mode = 0; // "low rate|11b|11g|HT20|HT40|HE20" + int phy_mode = 0; // "low rate|11b|11g|11a|HT20|HT40|HE20|VHT20" wifi_phy_mode_t WiFiMode; if (esp_wifi_sta_get_negotiated_phymode(&WiFiMode) == ESP_OK) { phy_mode = (int)WiFiMode; - if (phy_mode > 5) { - phy_mode = 5; + if (phy_mode > 7) { + phy_mode = 7; } } return phy_mode; } bool WiFiHelper::setPhyMode(WiFiPhyMode_t mode) { + // 1 = B + // 2 = BG + // 3 = BGN + // 4 = BGNAX uint8_t protocol_bitmap = WIFI_PROTOCOL_11B; // 1 switch (mode) { case 4: protocol_bitmap |= WIFI_PROTOCOL_11AX; // 16 diff --git a/tasmota/tasmota_support/support_esp32.ino b/tasmota/tasmota_support/support_esp32.ino index 7c530320d..90e0e1e49 100644 --- a/tasmota/tasmota_support/support_esp32.ino +++ b/tasmota/tasmota_support/support_esp32.ino @@ -11,8 +11,8 @@ * ESP32, ESP32-C2, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-H2, ESP32-P4, ESP32-S2 and ESP32-S3 Support \*********************************************************************************************/ -// 11b 11g 11n 11n 11ax -const static char kWifiPhyMode[] PROGMEM = "low rate|11b|11g|HT20|HT40|HE20"; // Wi-Fi Modes +// 11b 11g 11a 11n 11n 11ax 11ac +const static char kWifiPhyMode[] PROGMEM = "low rate|11b|11g|11a|HT20|HT40|HE20|VHT20"; // Wi-Fi Modes #include "soc/soc.h" #include "soc/spi_reg.h" diff --git a/tasmota/tasmota_support/support_wifi.ino b/tasmota/tasmota_support/support_wifi.ino index de1673230..cb1755b79 100644 --- a/tasmota/tasmota_support/support_wifi.ino +++ b/tasmota/tasmota_support/support_wifi.ino @@ -1352,17 +1352,19 @@ void WiFiSetTXpowerBasedOnRssi(void) { int threshold = WIFI_SENSITIVITY_n; int phy_mode = WiFiHelper::getPhyMode(); switch (phy_mode) { - case 1: // 11b (WIFI_PHY_MODE_11B) + case 1: // 1: 11b (WIFI_PHY_MODE_11B) threshold = WIFI_SENSITIVITY_11b; if (max_tx_pwr > MAX_TX_PWR_DBM_11b) max_tx_pwr = MAX_TX_PWR_DBM_11b; break; - case 2: // 11bg (WIFI_PHY_MODE_11G) + case 2: // 2: 11bg (WIFI_PHY_MODE_11G) threshold = WIFI_SENSITIVITY_54g; if (max_tx_pwr > MAX_TX_PWR_DBM_54g) max_tx_pwr = MAX_TX_PWR_DBM_54g; break; - case 3: // 11bgn (WIFI_PHY_MODE_HT20 = WIFI_PHY_MODE_11N) - case 4: // 11bgn (WIFI_PHY_MODE_HT40) - case 5: // 11ax (WIFI_PHY_MODE_HE20) + default: // 3: 11bgn (WIFI_PHY_MODE_11A) + // 4: 11n (WIFI_PHY_MODE_HT20) + // 5: 11n (WIFI_PHY_MODE_HT40) + // 6: 11ax (WIFI_PHY_MODE_HE20) + // 7: 11ax (WIFI_PHY_MODE_VHT20) threshold = WIFI_SENSITIVITY_n; if (max_tx_pwr > MAX_TX_PWR_DBM_n) max_tx_pwr = MAX_TX_PWR_DBM_n; break;