From 661c414c2afd0b09a0579c6b665cc7297611a6df Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 7 Jan 2015 02:45:46 +0300 Subject: [PATCH] Automatically call yield() in WiFiClient::available and WiFiServer::available --- libraries/ESP8266WiFi/src/WiFiClient.cpp | 5 +++-- libraries/ESP8266WiFi/src/WiFiServer.cpp | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/libraries/ESP8266WiFi/src/WiFiClient.cpp b/libraries/ESP8266WiFi/src/WiFiClient.cpp index 63acbccfd..b7b037401 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClient.cpp @@ -158,13 +158,14 @@ extern "C" uint32_t esp_micros_at_task_start(); int ICACHE_FLASH_ATTR WiFiClient::available() { + static uint32_t lastPollTime = 0; if (!_client) return 0; - if (_lastPollTime > esp_micros_at_task_start()) + if (lastPollTime > esp_micros_at_task_start()) yield(); - _lastPollTime = micros(); + lastPollTime = micros(); int result = _client->getSize(); return result; diff --git a/libraries/ESP8266WiFi/src/WiFiServer.cpp b/libraries/ESP8266WiFi/src/WiFiServer.cpp index b4782ed2c..5752f9424 100644 --- a/libraries/ESP8266WiFi/src/WiFiServer.cpp +++ b/libraries/ESP8266WiFi/src/WiFiServer.cpp @@ -74,9 +74,12 @@ void WiFiServer::begin() tcp_arg(listen_pcb, (void*) this); } +extern "C" uint32_t esp_micros_at_task_start(); WiFiClient WiFiServer::available(byte* status) { + static uint32_t lastPollTime = 0; + if (_unclaimed) { WiFiClient result(_unclaimed); @@ -85,6 +88,10 @@ WiFiClient WiFiServer::available(byte* status) return result; } + if (lastPollTime > esp_micros_at_task_start()) + yield(); + lastPollTime = micros(); + return WiFiClient(); }