From 1aad1a9a1d717a0019def7d959c63187b7c70d80 Mon Sep 17 00:00:00 2001 From: Sara Damiano Date: Mon, 24 Sep 2018 15:46:14 -0400 Subject: [PATCH] Clean-up of timeouts For loggers that return data "immediately" (unbuffered, data sent w/o request) read will "maintain" and look for any incoming data as long as the socket is open. Use timedRead if you want a timeout. For modems that buffer the response and wait for you to request data, read will stop if socket closes OR if there is no longer any data in the modem's response buffer. --- src/TinyGsmClientA6.h | 6 ++---- src/TinyGsmClientESP8266.h | 6 ++---- src/TinyGsmClientM590.h | 6 ++---- src/TinyGsmClientM95.h | 2 +- src/TinyGsmClientMC60.h | 2 +- src/TinyGsmClientSIM800.h | 2 +- 6 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/TinyGsmClientA6.h b/src/TinyGsmClientA6.h index ab37837..af96627 100644 --- a/src/TinyGsmClientA6.h +++ b/src/TinyGsmClientA6.h @@ -125,8 +125,7 @@ public: virtual int read(uint8_t *buf, size_t size) { TINY_GSM_YIELD(); size_t cnt = 0; - uint32_t _startMillis = millis(); - while (cnt < size && millis() - _startMillis < _timeout) { + while (cnt < size && sock_connected) { size_t chunk = TinyGsmMin(size-cnt, rx.size()); if (chunk > 0) { rx.get(buf, chunk); @@ -135,9 +134,8 @@ public: continue; } // TODO: Read directly into user buffer? - if (!rx.size() && sock_connected) { + if (!rx.size()) { at->maintain(); - //break; } } return cnt; diff --git a/src/TinyGsmClientESP8266.h b/src/TinyGsmClientESP8266.h index fa75abe..6f5d7b8 100644 --- a/src/TinyGsmClientESP8266.h +++ b/src/TinyGsmClientESP8266.h @@ -122,8 +122,7 @@ public: virtual int read(uint8_t *buf, size_t size) { TINY_GSM_YIELD(); size_t cnt = 0; - uint32_t _startMillis = millis(); - while (cnt < size && millis() - _startMillis < _timeout) { + while (cnt < size && sock_connected) { size_t chunk = TinyGsmMin(size-cnt, rx.size()); if (chunk > 0) { rx.get(buf, chunk); @@ -132,9 +131,8 @@ public: continue; } // TODO: Read directly into user buffer? - if (!rx.size() && sock_connected) { + if (!rx.size()) { at->maintain(); - //break; } } return cnt; diff --git a/src/TinyGsmClientM590.h b/src/TinyGsmClientM590.h index b2eb97d..877964e 100644 --- a/src/TinyGsmClientM590.h +++ b/src/TinyGsmClientM590.h @@ -122,8 +122,7 @@ public: virtual int read(uint8_t *buf, size_t size) { TINY_GSM_YIELD(); size_t cnt = 0; - uint32_t _startMillis = millis(); - while (cnt < size && millis() - _startMillis < _timeout) { + while (cnt < size && sock_connected) { size_t chunk = TinyGsmMin(size-cnt, rx.size()); if (chunk > 0) { rx.get(buf, chunk); @@ -132,9 +131,8 @@ public: continue; } // TODO: Read directly into user buffer? - if (!rx.size() && sock_connected) { + if (!rx.size()) { at->maintain(); - //break; } } return cnt; diff --git a/src/TinyGsmClientM95.h b/src/TinyGsmClientM95.h index 1b9e869..404ddfa 100644 --- a/src/TinyGsmClientM95.h +++ b/src/TinyGsmClientM95.h @@ -137,7 +137,7 @@ public: // TODO: Read directly into user buffer? at->maintain(); if (sock_available > 0) { - at->modemRead(rx.free(), mux); + sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux); } else { break; } diff --git a/src/TinyGsmClientMC60.h b/src/TinyGsmClientMC60.h index 265cd4b..c2b5226 100644 --- a/src/TinyGsmClientMC60.h +++ b/src/TinyGsmClientMC60.h @@ -141,7 +141,7 @@ public: // TODO: Read directly into user buffer? at->maintain(); if (sock_available > 0) { - at->modemRead(rx.free(), mux); + sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux); } else { break; } diff --git a/src/TinyGsmClientSIM800.h b/src/TinyGsmClientSIM800.h index 24fcacb..122a5bb 100644 --- a/src/TinyGsmClientSIM800.h +++ b/src/TinyGsmClientSIM800.h @@ -150,7 +150,7 @@ public: // TODO: Read directly into user buffer? at->maintain(); if (sock_available > 0) { - at->modemRead(rx.free(), mux); + sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux); } else { break; }