@@ -619,8 +619,13 @@ static std::vector<WiFiEventCbList_t> cbEventList;
619619bool WiFiGenericClass::_persistent = true ;
620620bool WiFiGenericClass::_long_range = false ;
621621wifi_mode_t WiFiGenericClass::_forceSleepLastMode = WIFI_MODE_NULL;
622+ #if CONFIG_IDF_TARGET_ESP32S2
623+ wifi_ps_type_t WiFiGenericClass::_sleepEnabled = WIFI_PS_NONE;
624+ #else
625+ wifi_ps_type_t WiFiGenericClass::_sleepEnabled = WIFI_PS_MIN_MODEM;
626+ #endif
622627
623- WiFiGenericClass::WiFiGenericClass ()
628+ WiFiGenericClass::WiFiGenericClass ()
624629{
625630
626631}
@@ -789,6 +794,9 @@ esp_err_t WiFiGenericClass::_eventCallback(arduino_event_t *event)
789794 } else if (event->event_id == ARDUINO_EVENT_WIFI_STA_START) {
790795 WiFiSTAClass::_setStatus (WL_DISCONNECTED);
791796 setStatusBits (STA_STARTED_BIT);
797+ if (esp_wifi_set_ps (_sleepEnabled) != ESP_OK){
798+ log_e (" esp_wifi_set_ps failed" );
799+ }
792800 } else if (event->event_id == ARDUINO_EVENT_WIFI_STA_STOP) {
793801 WiFiSTAClass::_setStatus (WL_NO_SHIELD);
794802 clearStatusBits (STA_STARTED_BIT | STA_CONNECTED_BIT | STA_HAS_IP_BIT | STA_HAS_IP6_BIT);
@@ -1053,13 +1061,22 @@ bool WiFiGenericClass::enableAP(bool enable)
10531061 * @param enable bool
10541062 * @return ok
10551063 */
1056- bool WiFiGenericClass::setSleep (bool enable)
1064+ bool WiFiGenericClass::setSleep (bool enabled){
1065+ return setSleep (enabled?WIFI_PS_MIN_MODEM:WIFI_PS_NONE);
1066+ }
1067+
1068+ bool WiFiGenericClass::setSleep (wifi_ps_type_t sleepType)
10571069{
1058- if ((getMode () & WIFI_MODE_STA) == 0 ){
1059- log_w (" STA has not been started" );
1060- return false ;
1070+ if (sleepType != _sleepEnabled){
1071+ _sleepEnabled = sleepType;
1072+ if ((getMode () & WIFI_MODE_STA) != 0 ){
1073+ if (esp_wifi_set_ps (_sleepEnabled) != ESP_OK){
1074+ log_e (" esp_wifi_set_ps failed!" );
1075+ }
1076+ }
1077+ return true ;
10611078 }
1062- return esp_wifi_set_ps (enable?WIFI_PS_MIN_MODEM:WIFI_PS_NONE) == ESP_OK ;
1079+ return false ;
10631080}
10641081
10651082/* *
@@ -1080,17 +1097,9 @@ bool WiFiGenericClass::setSleep(wifi_ps_type_t mode)
10801097 * get modem sleep enabled
10811098 * @return true if modem sleep is enabled
10821099 */
1083- bool WiFiGenericClass::getSleep ()
1100+ wifi_ps_type_t WiFiGenericClass::getSleep ()
10841101{
1085- wifi_ps_type_t ps;
1086- if ((getMode () & WIFI_MODE_STA) == 0 ){
1087- log_w (" STA has not been started" );
1088- return false ;
1089- }
1090- if (esp_wifi_get_ps (&ps) == ESP_OK){
1091- return ps == WIFI_PS_MIN_MODEM;
1092- }
1093- return false ;
1102+ return _sleepEnabled;
10941103}
10951104
10961105/* *
0 commit comments