Fix WiFi phy modes due to recent IDF update

This commit is contained in:
Theo Arends 2026-01-07 12:39:12 +01:00
parent 54519dccbf
commit 5bffce9297
3 changed files with 30 additions and 12 deletions

View File

@ -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

View File

@ -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"

View File

@ -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;