From 7f7a7563cffa1909eb65609fb1d43a31eef096a2 Mon Sep 17 00:00:00 2001 From: Sara Damiano Date: Mon, 20 May 2019 13:12:09 -0400 Subject: [PATCH] Ensure that ALL variants of read respect timeout --- src/TinyGsmClientA6.h | 3 ++- src/TinyGsmClientBG96.h | 3 ++- src/TinyGsmClientESP8266.h | 3 ++- src/TinyGsmClientM590.h | 3 ++- src/TinyGsmClientM95.h | 3 ++- src/TinyGsmClientMC60.h | 3 ++- src/TinyGsmClientSIM7000.h | 7 ++++--- src/TinyGsmClientSIM800.h | 5 +++-- src/TinyGsmClientSaraR4.h | 4 ++-- src/TinyGsmClientSequansMonarch.h | 3 ++- src/TinyGsmClientUBLOX.h | 3 ++- src/TinyGsmClientXBee.h | 4 ++-- 12 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/TinyGsmClientA6.h b/src/TinyGsmClientA6.h index 7030526..939be0e 100644 --- a/src/TinyGsmClientA6.h +++ b/src/TinyGsmClientA6.h @@ -599,7 +599,8 @@ TINY_GSP_MODEM_STREAM_UTILITIES() DBG("### Got: ", len, "->", sockets[mux]->rx.free()); } while (len--) { - while (!stream.available()) { TINY_GSM_YIELD(); } + startMillis = millis(); + while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); } sockets[mux]->rx.put(stream.read()); } if (len_orig > sockets[mux]->available()) { // TODO diff --git a/src/TinyGsmClientBG96.h b/src/TinyGsmClientBG96.h index c1f7e2c..e5ba25d 100644 --- a/src/TinyGsmClientBG96.h +++ b/src/TinyGsmClientBG96.h @@ -517,7 +517,8 @@ protected: sockets[mux]->sock_available = len; for (size_t i=0; i_timeout)) { TINY_GSM_YIELD(); } char c = stream.read(); sockets[mux]->rx.put(c); } diff --git a/src/TinyGsmClientESP8266.h b/src/TinyGsmClientESP8266.h index e1f6608..aeaa0d9 100644 --- a/src/TinyGsmClientESP8266.h +++ b/src/TinyGsmClientESP8266.h @@ -421,7 +421,8 @@ TINY_GSP_MODEM_STREAM_UTILITIES() DBG("### Got: ", len, "->", sockets[mux]->rx.free()); } while (len--) { - while (!stream.available()) { TINY_GSM_YIELD(); } + startMillis = millis(); + while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); } sockets[mux]->rx.put(stream.read()); } if (len_orig > sockets[mux]->available()) { // TODO diff --git a/src/TinyGsmClientM590.h b/src/TinyGsmClientM590.h index 890cd07..b057596 100644 --- a/src/TinyGsmClientM590.h +++ b/src/TinyGsmClientM590.h @@ -520,7 +520,8 @@ TINY_GSP_MODEM_STREAM_UTILITIES() DBG("### Got: ", len, "->", sockets[mux]->rx.free()); } while (len--) { - while (!stream.available()) { TINY_GSM_YIELD(); } + uint32_t startMillis = millis(); + while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); } sockets[mux]->rx.put(stream.read()); } if (len_orig > sockets[mux]->available()) { // TODO diff --git a/src/TinyGsmClientM95.h b/src/TinyGsmClientM95.h index 18c90d7..4f4f3bf 100644 --- a/src/TinyGsmClientM95.h +++ b/src/TinyGsmClientM95.h @@ -571,7 +571,8 @@ protected: sockets[mux]->sock_available = len; for (size_t i=0; i_timeout)) { TINY_GSM_YIELD(); } char c = stream.read(); sockets[mux]->rx.put(c); } diff --git a/src/TinyGsmClientMC60.h b/src/TinyGsmClientMC60.h index e356f47..8d49875 100644 --- a/src/TinyGsmClientMC60.h +++ b/src/TinyGsmClientMC60.h @@ -591,7 +591,8 @@ protected: sockets[mux]->sock_available = len; for (size_t i=0; i_timeout)) { TINY_GSM_YIELD(); } char c = stream.read(); sockets[mux]->rx.put(c); } diff --git a/src/TinyGsmClientSIM7000.h b/src/TinyGsmClientSIM7000.h index 4b2c914..e547540 100644 --- a/src/TinyGsmClientSIM7000.h +++ b/src/TinyGsmClientSIM7000.h @@ -9,7 +9,7 @@ #ifndef TinyGsmClientSIM7000_h #define TinyGsmClientSIM7000_h -#define TINY_GSM_DEBUG Serial +// #define TINY_GSM_DEBUG Serial //#define TINY_GSM_USE_HEX #if !defined(TINY_GSM_RX_BUFFER) @@ -815,14 +815,15 @@ protected: // 0 indicates that no data can be read. for (size_t i=0; i_timeout)) { TINY_GSM_YIELD(); } char buf[4] = { 0, }; buf[0] = stream.read(); buf[1] = stream.read(); char c = strtol(buf, NULL, 16); #else - while (!stream.available()) { TINY_GSM_YIELD(); } + while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); } char c = stream.read(); #endif sockets[mux]->rx.put(c); diff --git a/src/TinyGsmClientSIM800.h b/src/TinyGsmClientSIM800.h index 63882eb..0a8abf1 100644 --- a/src/TinyGsmClientSIM800.h +++ b/src/TinyGsmClientSIM800.h @@ -743,14 +743,15 @@ protected: // 0 indicates that no data can be read. for (size_t i=0; i_timeout)) { TINY_GSM_YIELD(); } char buf[4] = { 0, }; buf[0] = stream.read(); buf[1] = stream.read(); char c = strtol(buf, NULL, 16); #else - while (!stream.available()) { TINY_GSM_YIELD(); } + while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); } char c = stream.read(); #endif sockets[mux]->rx.put(c); diff --git a/src/TinyGsmClientSaraR4.h b/src/TinyGsmClientSaraR4.h index 72fce09..bd26733 100644 --- a/src/TinyGsmClientSaraR4.h +++ b/src/TinyGsmClientSaraR4.h @@ -566,7 +566,6 @@ protected: sockets[mux]->sock_connected = false; return true; } - bool success; // These modems allow a faster "asynchronous" close sendAT(GF("+USOCL="), mux, GF(",1")); return 1 == waitResponse(120000L); // but it still can take up to 120s to get a response @@ -602,7 +601,8 @@ protected: streamSkipUntil('\"'); for (size_t i=0; i_timeout)) { TINY_GSM_YIELD(); } char c = stream.read(); sockets[mux]->rx.put(c); } diff --git a/src/TinyGsmClientSequansMonarch.h b/src/TinyGsmClientSequansMonarch.h index 1fb2615..9c75ee1 100644 --- a/src/TinyGsmClientSequansMonarch.h +++ b/src/TinyGsmClientSequansMonarch.h @@ -541,7 +541,8 @@ protected: streamSkipUntil(','); // Skip mux size_t len = stream.readStringUntil('\n').toInt(); for (size_t i=0; i_timeout)) { TINY_GSM_YIELD(); } char c = stream.read(); sockets[mux]->rx.put(c); } diff --git a/src/TinyGsmClientUBLOX.h b/src/TinyGsmClientUBLOX.h index f86d1d6..7a56ace 100644 --- a/src/TinyGsmClientUBLOX.h +++ b/src/TinyGsmClientUBLOX.h @@ -587,7 +587,8 @@ protected: streamSkipUntil('\"'); for (size_t i=0; i_timeout)) { TINY_GSM_YIELD(); } char c = stream.read(); sockets[mux]->rx.put(c); } diff --git a/src/TinyGsmClientXBee.h b/src/TinyGsmClientXBee.h index 2a1c1c1..f080aa7 100644 --- a/src/TinyGsmClientXBee.h +++ b/src/TinyGsmClientXBee.h @@ -103,7 +103,7 @@ public: return sock_connected; } virtual int connect(const char *host, uint16_t port) { - return connect(host, port, 75000L); + return connect(host, port, 75); } virtual int connect(IPAddress ip, uint16_t port, int timeout_s) { @@ -113,7 +113,7 @@ public: return sock_connected; } virtual int connect(IPAddress ip, uint16_t port) { - return connect(ip, port, 75000L); + return connect(ip, port, 75); } virtual void stop() {