Skip to content

Commit fecbac2

Browse files
authored
Modified LowPowerMode functions in WiFiClass.cpp/.h for better connection stability (#1046)
* Modified LowPowerMode functions in WiFiClass.cpp/.h * Added noLowPowerMode() in the WiFiClass::begin()/beginAP()
1 parent e2e65fd commit fecbac2

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

libraries/WiFi/keywords.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ beginEnterprise KEYWORD2
5757
setHostname KEYWORD2
5858
end KEYWORD2
5959
getTime KEYWORD2
60-
lowPowerMode KEYWORD2
60+
aggressiveLowPowerMode KEYWORD2
61+
defaultLowPowerMode KEYWORD2
6162
noLowPowerMode KEYWORD2
6263
ping KEYWORD2
6364
beginMulticast KEYWORD2

libraries/WiFi/src/WiFiClass.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ int WiFiClass::begin(const char* ssid, const char *passphrase) {
9999
if (!_wifi.begin()) {
100100
return WL_IDLE_STATUS;
101101
}
102+
noLowPowerMode();
102103
// Enable CYW43 event debugging (make sure Debug Port is set)
103104
//cyw43_state.trace_flags = 0xffff;
104105
while (!_calledESP && ((millis() - start < (uint32_t)2 * _timeout)) && !connected()) {
@@ -134,6 +135,7 @@ uint8_t WiFiClass::beginAP(const char *ssid, const char* passphrase) {
134135
if (!_wifi.begin()) {
135136
return WL_IDLE_STATUS;
136137
}
138+
noLowPowerMode();
137139
IPAddress gw = _wifi.gatewayIP();
138140
if (!gw.isSet()) {
139141
gw = IPAddress(192, 168, 42, 1);
@@ -565,14 +567,19 @@ unsigned long WiFiClass::getTime() {
565567
return millis();
566568
}
567569

568-
void WiFiClass::lowPowerMode() {
570+
void WiFiClass::aggressiveLowPowerMode() {
569571
cyw43_wifi_pm(&cyw43_state, CYW43_AGGRESSIVE_PM);
570572
}
571573

572-
void WiFiClass::noLowPowerMode() {
574+
void WiFiClass::defaultLowPowerMode() {
573575
cyw43_wifi_pm(&cyw43_state, CYW43_DEFAULT_PM);
574576
}
575577

578+
// The difference between the default CYW43_DEFAULT_PM (0xA11142) and not low power (0xA11140) is that it changed from "Powersave mode on specified interface with High throughput" to "No Powersave mode". All other parameters stayed the same.
579+
void WiFiClass::noLowPowerMode() {
580+
cyw43_wifi_pm(&cyw43_state, 0xA11140);
581+
}
582+
576583
int WiFiClass::ping(const char* hostname, uint8_t ttl) {
577584
IPAddress ip;
578585
if (!hostByName(hostname, ip)) {

libraries/WiFi/src/WiFiClass.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,8 @@ class WiFiClass {
368368

369369
unsigned long getTime();
370370

371-
void lowPowerMode();
371+
void aggressiveLowPowerMode();
372+
void defaultLowPowerMode();
372373
void noLowPowerMode();
373374

374375
int ping(const char* hostname, uint8_t ttl = 128);

0 commit comments

Comments
 (0)