diff --git a/components/esp8266/include/internal/esp_wifi_internal.h b/components/esp8266/include/internal/esp_wifi_internal.h index f96bcadd..97ea9ad0 100644 --- a/components/esp8266/include/internal/esp_wifi_internal.h +++ b/components/esp8266/include/internal/esp_wifi_internal.h @@ -38,6 +38,8 @@ void esp_wifi_set_rx_pbuf_mem_type(wifi_rx_pbuf_mem_type_t type); */ wifi_rx_pbuf_mem_type_t esp_wifi_get_rx_pbuf_mem_type(void); +int8_t esp_wifi_get_ap_rssi(void); + #ifdef __cplusplus } #endif diff --git a/components/esp8266/source/esp_wifi.c b/components/esp8266/source/esp_wifi.c index 2ba6817e..a7c3d9ba 100644 --- a/components/esp8266/source/esp_wifi.c +++ b/components/esp8266/source/esp_wifi.c @@ -16,6 +16,7 @@ #include "esp_libc.h" #include "esp_system.h" #include "esp_wifi.h" +#include "internal/esp_wifi_internal.h" #include "esp_socket.h" #include "net/sockio.h" #include "phy.h" @@ -61,8 +62,13 @@ size_t __attribute__((weak)) esp_wifi_scan_get_ap_num_max(void) bool IRAM_ATTR esp_wifi_try_rate_from_high(void) { #if CONFIG_WIFI_TX_RATE_SEQUENCE_FROM_HIGH - return true; -#else - return false; + int8_t rssi; + rssi = esp_wifi_get_ap_rssi(); + wifi_mode_t mode; + esp_wifi_get_mode( &mode ); + if (rssi < -26 && mode == WIFI_MODE_STA) { + return true; + } #endif + return false; } \ No newline at end of file