mirror of
https://github.com/KevinMidboe/TinyGSM.git
synced 2025-10-29 18:00:18 +00:00
Ensure that ALL variants of read respect timeout
This commit is contained in:
@@ -599,7 +599,8 @@ TINY_GSP_MODEM_STREAM_UTILITIES()
|
|||||||
DBG("### Got: ", len, "->", sockets[mux]->rx.free());
|
DBG("### Got: ", len, "->", sockets[mux]->rx.free());
|
||||||
}
|
}
|
||||||
while (len--) {
|
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());
|
sockets[mux]->rx.put(stream.read());
|
||||||
}
|
}
|
||||||
if (len_orig > sockets[mux]->available()) { // TODO
|
if (len_orig > sockets[mux]->available()) { // TODO
|
||||||
|
|||||||
@@ -517,7 +517,8 @@ protected:
|
|||||||
sockets[mux]->sock_available = len;
|
sockets[mux]->sock_available = len;
|
||||||
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
uint32_t startMillis = millis();
|
||||||
|
while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||||
char c = stream.read();
|
char c = stream.read();
|
||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -421,7 +421,8 @@ TINY_GSP_MODEM_STREAM_UTILITIES()
|
|||||||
DBG("### Got: ", len, "->", sockets[mux]->rx.free());
|
DBG("### Got: ", len, "->", sockets[mux]->rx.free());
|
||||||
}
|
}
|
||||||
while (len--) {
|
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());
|
sockets[mux]->rx.put(stream.read());
|
||||||
}
|
}
|
||||||
if (len_orig > sockets[mux]->available()) { // TODO
|
if (len_orig > sockets[mux]->available()) { // TODO
|
||||||
|
|||||||
@@ -520,7 +520,8 @@ TINY_GSP_MODEM_STREAM_UTILITIES()
|
|||||||
DBG("### Got: ", len, "->", sockets[mux]->rx.free());
|
DBG("### Got: ", len, "->", sockets[mux]->rx.free());
|
||||||
}
|
}
|
||||||
while (len--) {
|
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());
|
sockets[mux]->rx.put(stream.read());
|
||||||
}
|
}
|
||||||
if (len_orig > sockets[mux]->available()) { // TODO
|
if (len_orig > sockets[mux]->available()) { // TODO
|
||||||
|
|||||||
@@ -571,7 +571,8 @@ protected:
|
|||||||
sockets[mux]->sock_available = len;
|
sockets[mux]->sock_available = len;
|
||||||
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
uint32_t startMillis = millis();
|
||||||
|
while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||||
char c = stream.read();
|
char c = stream.read();
|
||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -591,7 +591,8 @@ protected:
|
|||||||
sockets[mux]->sock_available = len;
|
sockets[mux]->sock_available = len;
|
||||||
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
uint32_t startMillis = millis();
|
||||||
|
while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||||
char c = stream.read();
|
char c = stream.read();
|
||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#ifndef TinyGsmClientSIM7000_h
|
#ifndef TinyGsmClientSIM7000_h
|
||||||
#define TinyGsmClientSIM7000_h
|
#define TinyGsmClientSIM7000_h
|
||||||
|
|
||||||
#define TINY_GSM_DEBUG Serial
|
// #define TINY_GSM_DEBUG Serial
|
||||||
//#define TINY_GSM_USE_HEX
|
//#define TINY_GSM_USE_HEX
|
||||||
|
|
||||||
#if !defined(TINY_GSM_RX_BUFFER)
|
#if !defined(TINY_GSM_RX_BUFFER)
|
||||||
@@ -815,14 +815,15 @@ protected:
|
|||||||
// 0 indicates that no data can be read.
|
// 0 indicates that no data can be read.
|
||||||
|
|
||||||
for (size_t i=0; i<TinyGsmMin(len_confirmed, len_requested) ; i++) {
|
for (size_t i=0; i<TinyGsmMin(len_confirmed, len_requested) ; i++) {
|
||||||
|
uint32_t startMillis = millis();
|
||||||
#ifdef TINY_GSM_USE_HEX
|
#ifdef TINY_GSM_USE_HEX
|
||||||
while (stream.available() < 2) { TINY_GSM_YIELD(); }
|
while (stream.available() < 2 && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||||
char buf[4] = { 0, };
|
char buf[4] = { 0, };
|
||||||
buf[0] = stream.read();
|
buf[0] = stream.read();
|
||||||
buf[1] = stream.read();
|
buf[1] = stream.read();
|
||||||
char c = strtol(buf, NULL, 16);
|
char c = strtol(buf, NULL, 16);
|
||||||
#else
|
#else
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||||
char c = stream.read();
|
char c = stream.read();
|
||||||
#endif
|
#endif
|
||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
|
|||||||
@@ -743,14 +743,15 @@ protected:
|
|||||||
// 0 indicates that no data can be read.
|
// 0 indicates that no data can be read.
|
||||||
|
|
||||||
for (size_t i=0; i<TinyGsmMin(len_confirmed, len_requested) ; i++) {
|
for (size_t i=0; i<TinyGsmMin(len_confirmed, len_requested) ; i++) {
|
||||||
|
uint32_t startMillis = millis();
|
||||||
#ifdef TINY_GSM_USE_HEX
|
#ifdef TINY_GSM_USE_HEX
|
||||||
while (stream.available() < 2) { TINY_GSM_YIELD(); }
|
while (stream.available() < 2 && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||||
char buf[4] = { 0, };
|
char buf[4] = { 0, };
|
||||||
buf[0] = stream.read();
|
buf[0] = stream.read();
|
||||||
buf[1] = stream.read();
|
buf[1] = stream.read();
|
||||||
char c = strtol(buf, NULL, 16);
|
char c = strtol(buf, NULL, 16);
|
||||||
#else
|
#else
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||||
char c = stream.read();
|
char c = stream.read();
|
||||||
#endif
|
#endif
|
||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
|
|||||||
@@ -566,7 +566,6 @@ protected:
|
|||||||
sockets[mux]->sock_connected = false;
|
sockets[mux]->sock_connected = false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
bool success;
|
|
||||||
// These modems allow a faster "asynchronous" close
|
// These modems allow a faster "asynchronous" close
|
||||||
sendAT(GF("+USOCL="), mux, GF(",1"));
|
sendAT(GF("+USOCL="), mux, GF(",1"));
|
||||||
return 1 == waitResponse(120000L); // but it still can take up to 120s to get a response
|
return 1 == waitResponse(120000L); // but it still can take up to 120s to get a response
|
||||||
@@ -602,7 +601,8 @@ protected:
|
|||||||
streamSkipUntil('\"');
|
streamSkipUntil('\"');
|
||||||
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
uint32_t startMillis = millis();
|
||||||
|
while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||||
char c = stream.read();
|
char c = stream.read();
|
||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -541,7 +541,8 @@ protected:
|
|||||||
streamSkipUntil(','); // Skip mux
|
streamSkipUntil(','); // Skip mux
|
||||||
size_t len = stream.readStringUntil('\n').toInt();
|
size_t len = stream.readStringUntil('\n').toInt();
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
uint32_t startMillis = millis();
|
||||||
|
while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||||
char c = stream.read();
|
char c = stream.read();
|
||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -587,7 +587,8 @@ protected:
|
|||||||
streamSkipUntil('\"');
|
streamSkipUntil('\"');
|
||||||
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
uint32_t startMillis = millis();
|
||||||
|
while (!stream.available() && (millis() - startMillis < sockets[mux]->_timeout)) { TINY_GSM_YIELD(); }
|
||||||
char c = stream.read();
|
char c = stream.read();
|
||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ public:
|
|||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
virtual int connect(const char *host, uint16_t port) {
|
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) {
|
virtual int connect(IPAddress ip, uint16_t port, int timeout_s) {
|
||||||
@@ -113,7 +113,7 @@ public:
|
|||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
virtual int connect(IPAddress ip, uint16_t port) {
|
virtual int connect(IPAddress ip, uint16_t port) {
|
||||||
return connect(ip, port, 75000L);
|
return connect(ip, port, 75);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void stop() {
|
virtual void stop() {
|
||||||
|
|||||||
Reference in New Issue
Block a user