From f382fc9d77a868fae7e6f467c994406a83e33367 Mon Sep 17 00:00:00 2001 From: "Dirk O. Kaar" Date: Mon, 2 Dec 2019 16:07:36 +0100 Subject: [PATCH] Refactoring to PolledTimeout or optimistic_yield on the grounds that these are not wait loops on slow input. --- cores/esp8266/HardwareSerial.cpp | 1 - cores/esp8266/debug.cpp | 2 +- libraries/ESP8266AVRISP/src/ESP8266AVRISP.cpp | 2 +- libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp | 5 ++-- .../ESP8266WiFiMesh/src/ESP8266WiFiMesh.cpp | 30 +++++++++---------- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/cores/esp8266/HardwareSerial.cpp b/cores/esp8266/HardwareSerial.cpp index 26383dd43..4f09d26f4 100644 --- a/cores/esp8266/HardwareSerial.cpp +++ b/cores/esp8266/HardwareSerial.cpp @@ -146,7 +146,6 @@ unsigned long HardwareSerial::detectBaudrate(time_t timeoutMillis) if ((detectedBaudrate = testBaudrate())) { break; } - yield(); delay(100); } return detectedBaudrate; diff --git a/cores/esp8266/debug.cpp b/cores/esp8266/debug.cpp index f26316f0f..06af1e424 100644 --- a/cores/esp8266/debug.cpp +++ b/cores/esp8266/debug.cpp @@ -54,7 +54,7 @@ void hexdump(const void *mem, uint32_t len, uint8_t cols) } src += linesize; len -= linesize; - yield(); + optimistic_yield(10000); } os_printf("\n"); } diff --git a/libraries/ESP8266AVRISP/src/ESP8266AVRISP.cpp b/libraries/ESP8266AVRISP/src/ESP8266AVRISP.cpp index e03ab072e..7f1ddc534 100644 --- a/libraries/ESP8266AVRISP/src/ESP8266AVRISP.cpp +++ b/libraries/ESP8266AVRISP/src/ESP8266AVRISP.cpp @@ -281,7 +281,7 @@ uint8_t ESP8266AVRISP::write_flash_pages(int length) { int x = 0; int page = addr_page(here); while (x < length) { - yield(); + optimistic_yield(10000); if (page != addr_page(here)) { commit(page); page = addr_page(here); diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp index 38f197c91..e141a1045 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp @@ -431,10 +431,9 @@ int8_t ESP8266WiFiSTAClass::waitForConnectResult(unsigned long timeoutLength) { if((wifi_get_opmode() & 1) == 0) { return WL_DISCONNECTED; } - using esp8266::polledTimeout::oneShot; - oneShot timeout(timeoutLength); // number of milliseconds to wait before returning timeout error + using oneShotYieldMs = esp8266::polledTimeout::timeoutTemplate; + oneShotYieldMs timeout(timeoutLength); // number of milliseconds to wait before returning timeout error while(!timeout) { - yield(); if(status() != WL_DISCONNECTED) { return status(); } diff --git a/libraries/ESP8266WiFiMesh/src/ESP8266WiFiMesh.cpp b/libraries/ESP8266WiFiMesh/src/ESP8266WiFiMesh.cpp index 5775fa300..9a00b4585 100644 --- a/libraries/ESP8266WiFiMesh/src/ESP8266WiFiMesh.cpp +++ b/libraries/ESP8266WiFiMesh/src/ESP8266WiFiMesh.cpp @@ -150,7 +150,7 @@ IPAddress ESP8266WiFiMesh::getStaticIP() void ESP8266WiFiMesh::disableStaticIP() { WiFi.config(0u,0u,0u); - yield(); + optimistic_yield(10000); staticIPActivated = false; } @@ -185,9 +185,9 @@ void ESP8266WiFiMesh::deactivateAP() void ESP8266WiFiMesh::restartAP() { deactivateAP(); - yield(); + optimistic_yield(10000); activateAP(); - yield(); + optimistic_yield(10000); } ESP8266WiFiMesh * ESP8266WiFiMesh::getAPController() @@ -331,9 +331,9 @@ bool ESP8266WiFiMesh::latestTransmissionSuccessful() void ESP8266WiFiMesh::fullStop(WiFiClient &currClient) { currClient.stop(); - yield(); + optimistic_yield(10000); WiFi.disconnect(); - yield(); + optimistic_yield(10000); } /** @@ -375,7 +375,7 @@ transmission_status_t ESP8266WiFiMesh::exchangeInfo(WiFiClient &currClient) verboseModePrint("Transmitting"); // Not storing strings in flash (via F()) to avoid performance impacts when using the string. currClient.print(getMessage() + '\r'); - yield(); + optimistic_yield(10000); if (!waitForClientTransmission(currClient, _stationModeTimeoutMs)) { @@ -390,7 +390,7 @@ transmission_status_t ESP8266WiFiMesh::exchangeInfo(WiFiClient &currClient) } String response = currClient.readStringUntil('\r'); - yield(); + optimistic_yield(10000); currClient.flush(); /* Pass data to user callback */ @@ -443,7 +443,7 @@ transmission_status_t ESP8266WiFiMesh::attemptDataTransferKernel() } currClient.stop(); - yield(); + optimistic_yield(10000); return transmissionOutcome; } @@ -476,7 +476,7 @@ transmission_status_t ESP8266WiFiMesh::connectToNode(const String &targetSSID, i WiFiMode_t storedWiFiMode = WiFi.getMode(); WiFi.mode(WIFI_OFF); WiFi.mode(storedWiFiMode); - yield(); + optimistic_yield(10000); #else // Disable static IP so that we can connect to other servers via DHCP (DHCP is slower but required for connecting to more than one server, it seems (possible bug?)). @@ -500,7 +500,7 @@ transmission_status_t ESP8266WiFiMesh::connectToNode(const String &targetSSID, i { verboseModePrint(F("... "), false); WiFi.disconnect(); - yield(); + optimistic_yield(10000); initiateConnectionToAP(targetSSID, targetChannel, targetBSSID); attemptNumber++; } @@ -527,7 +527,7 @@ void ESP8266WiFiMesh::attemptTransmission(const String &message, bool concluding if(initialDisconnect) { WiFi.disconnect(); - yield(); + optimistic_yield(10000); } latestTransmissionOutcomes.clear(); @@ -565,7 +565,7 @@ void ESP8266WiFiMesh::attemptTransmission(const String &message, bool concluding for(NetworkInfo ¤tNetwork : connectionQueue) { WiFi.disconnect(); - yield(); + optimistic_yield(10000); String currentSSID; int currentWiFiChannel = NETWORK_INFO_DEFAULT_INT; @@ -614,7 +614,7 @@ void ESP8266WiFiMesh::attemptTransmission(const String &message, bool concluding if(concludingDisconnect) { WiFi.disconnect(); - yield(); + optimistic_yield(10000); } } @@ -658,7 +658,7 @@ void ESP8266WiFiMesh::acceptRequest() /* Read in request and pass it to the supplied requestHandler */ String request = _client.readStringUntil('\r'); - yield(); + optimistic_yield(10000); _client.flush(); String response = _requestHandler(request, *this); @@ -669,7 +669,7 @@ void ESP8266WiFiMesh::acceptRequest() verboseModePrint("Responding"); // Not storing strings in flash (via F()) to avoid performance impacts when using the string. _client.print(response + '\r'); _client.flush(); - yield(); + optimistic_yield(10000); } } }