From e68ea1db125920121b29c95ecd919438e660a398 Mon Sep 17 00:00:00 2001 From: Sara Damiano Date: Tue, 2 Oct 2018 15:32:38 -0400 Subject: [PATCH] Read timeout for modules that immediately spit out data (no buffer) They do need a millis() based timeout so that data left in the buffer after the socket closes can still be read in but the maintain doesn't sit and wait forever. --- src/TinyGsmClientA6.h | 5 +++-- src/TinyGsmClientESP8266.h | 5 +++-- src/TinyGsmClientM590.h | 3 ++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/TinyGsmClientA6.h b/src/TinyGsmClientA6.h index 5e9d84d..c254623 100644 --- a/src/TinyGsmClientA6.h +++ b/src/TinyGsmClientA6.h @@ -121,7 +121,8 @@ public: virtual int read(uint8_t *buf, size_t size) { TINY_GSM_YIELD(); size_t cnt = 0; - while (cnt < size && sock_connected) { + uint32_t _startMillis = millis(); + while (cnt < size && millis() - _startMillis < _timeout) { size_t chunk = TinyGsmMin(size-cnt, rx.size()); if (chunk > 0) { rx.get(buf, chunk); @@ -130,7 +131,7 @@ public: continue; } // TODO: Read directly into user buffer? - if (!rx.size()) { + if (!rx.size() && sock_connected) { at->maintain(); } } diff --git a/src/TinyGsmClientESP8266.h b/src/TinyGsmClientESP8266.h index 91f0319..6e7fda5 100644 --- a/src/TinyGsmClientESP8266.h +++ b/src/TinyGsmClientESP8266.h @@ -118,7 +118,8 @@ public: virtual int read(uint8_t *buf, size_t size) { TINY_GSM_YIELD(); size_t cnt = 0; - while (cnt < size && sock_connected) { + uint32_t _startMillis = millis(); + while (cnt < size && millis() - _startMillis < _timeout) { size_t chunk = TinyGsmMin(size-cnt, rx.size()); if (chunk > 0) { rx.get(buf, chunk); @@ -127,7 +128,7 @@ public: continue; } // TODO: Read directly into user buffer? - if (!rx.size()) { + if (!rx.size() && sock_connected) { at->maintain(); } } diff --git a/src/TinyGsmClientM590.h b/src/TinyGsmClientM590.h index fa4eb57..092dfdd 100644 --- a/src/TinyGsmClientM590.h +++ b/src/TinyGsmClientM590.h @@ -118,7 +118,8 @@ public: virtual int read(uint8_t *buf, size_t size) { TINY_GSM_YIELD(); size_t cnt = 0; - while (cnt < size && sock_connected) { + uint32_t _startMillis = millis(); + while (cnt < size && millis() - _startMillis < _timeout) { size_t chunk = TinyGsmMin(size-cnt, rx.size()); if (chunk > 0) { rx.get(buf, chunk);