diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 0c3acc28688..838c23bf5cd 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -542,6 +542,20 @@ bool tcpipInit(){ * */ static bool lowLevelInitDone = false; +bool WiFiGenericClass::_wifiUseStaticBuffers = false; + +bool WiFiGenericClass::useStaticBuffers(){ + return _wifiUseStaticBuffers; +} + +void WiFiGenericClass::useStaticBuffers(bool bufferMode){ + if (lowLevelInitDone) { + log_w("WiFi already started. Call WiFi.mode(WIFI_MODE_NULL) before setting Static Buffer Mode."); + } + _wifiUseStaticBuffers = bufferMode; +} + + bool wifiLowLevelInit(bool persistent){ if(!lowLevelInitDone){ lowLevelInitDone = true; @@ -557,6 +571,16 @@ bool wifiLowLevelInit(bool persistent){ } wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + + if(!WiFiGenericClass::useStaticBuffers()) { + cfg.static_tx_buf_num = 0; + cfg.dynamic_tx_buf_num = 32; + cfg.tx_buf_type = 1; + cfg.cache_tx_buf_num = 1; // can't be zero! + cfg.static_rx_buf_num = 4; + cfg.dynamic_rx_buf_num = 32; + } + esp_err_t err = esp_wifi_init(&cfg); if(err){ log_e("esp_wifi_init %d", err); @@ -644,7 +668,6 @@ wifi_ps_type_t WiFiGenericClass::_sleepEnabled = WIFI_PS_MIN_MODEM; WiFiGenericClass::WiFiGenericClass() { - } const char * WiFiGenericClass::getHostname() diff --git a/libraries/WiFi/src/WiFiGeneric.h b/libraries/WiFi/src/WiFiGeneric.h index 0d07d1ed29e..e3fd62689ad 100644 --- a/libraries/WiFi/src/WiFiGeneric.h +++ b/libraries/WiFi/src/WiFiGeneric.h @@ -179,12 +179,16 @@ class WiFiGenericClass static bool hostname(const String& aHostname) { return setHostname(aHostname.c_str()); } static esp_err_t _eventCallback(arduino_event_t *event); + + static void useStaticBuffers(bool bufferMode); + static bool useStaticBuffers(); protected: static bool _persistent; static bool _long_range; static wifi_mode_t _forceSleepLastMode; static wifi_ps_type_t _sleepEnabled; + static bool _wifiUseStaticBuffers; static int setStatusBits(int bits); static int clearStatusBits(int bits);