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.
This commit is contained in:
@@ -125,8 +125,7 @@ public:
|
|||||||
virtual int read(uint8_t *buf, size_t size) {
|
virtual int read(uint8_t *buf, size_t size) {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
size_t cnt = 0;
|
size_t cnt = 0;
|
||||||
uint32_t _startMillis = millis();
|
while (cnt < size && sock_connected) {
|
||||||
while (cnt < size && millis() - _startMillis < _timeout) {
|
|
||||||
size_t chunk = TinyGsmMin(size-cnt, rx.size());
|
size_t chunk = TinyGsmMin(size-cnt, rx.size());
|
||||||
if (chunk > 0) {
|
if (chunk > 0) {
|
||||||
rx.get(buf, chunk);
|
rx.get(buf, chunk);
|
||||||
@@ -135,9 +134,8 @@ public:
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
if (!rx.size() && sock_connected) {
|
if (!rx.size()) {
|
||||||
at->maintain();
|
at->maintain();
|
||||||
//break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cnt;
|
return cnt;
|
||||||
|
@@ -122,8 +122,7 @@ public:
|
|||||||
virtual int read(uint8_t *buf, size_t size) {
|
virtual int read(uint8_t *buf, size_t size) {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
size_t cnt = 0;
|
size_t cnt = 0;
|
||||||
uint32_t _startMillis = millis();
|
while (cnt < size && sock_connected) {
|
||||||
while (cnt < size && millis() - _startMillis < _timeout) {
|
|
||||||
size_t chunk = TinyGsmMin(size-cnt, rx.size());
|
size_t chunk = TinyGsmMin(size-cnt, rx.size());
|
||||||
if (chunk > 0) {
|
if (chunk > 0) {
|
||||||
rx.get(buf, chunk);
|
rx.get(buf, chunk);
|
||||||
@@ -132,9 +131,8 @@ public:
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
if (!rx.size() && sock_connected) {
|
if (!rx.size()) {
|
||||||
at->maintain();
|
at->maintain();
|
||||||
//break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cnt;
|
return cnt;
|
||||||
|
@@ -122,8 +122,7 @@ public:
|
|||||||
virtual int read(uint8_t *buf, size_t size) {
|
virtual int read(uint8_t *buf, size_t size) {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
size_t cnt = 0;
|
size_t cnt = 0;
|
||||||
uint32_t _startMillis = millis();
|
while (cnt < size && sock_connected) {
|
||||||
while (cnt < size && millis() - _startMillis < _timeout) {
|
|
||||||
size_t chunk = TinyGsmMin(size-cnt, rx.size());
|
size_t chunk = TinyGsmMin(size-cnt, rx.size());
|
||||||
if (chunk > 0) {
|
if (chunk > 0) {
|
||||||
rx.get(buf, chunk);
|
rx.get(buf, chunk);
|
||||||
@@ -132,9 +131,8 @@ public:
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
if (!rx.size() && sock_connected) {
|
if (!rx.size()) {
|
||||||
at->maintain();
|
at->maintain();
|
||||||
//break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cnt;
|
return cnt;
|
||||||
|
@@ -137,7 +137,7 @@ public:
|
|||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
at->maintain();
|
at->maintain();
|
||||||
if (sock_available > 0) {
|
if (sock_available > 0) {
|
||||||
at->modemRead(rx.free(), mux);
|
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -141,7 +141,7 @@ public:
|
|||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
at->maintain();
|
at->maintain();
|
||||||
if (sock_available > 0) {
|
if (sock_available > 0) {
|
||||||
at->modemRead(rx.free(), mux);
|
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -150,7 +150,7 @@ public:
|
|||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
at->maintain();
|
at->maintain();
|
||||||
if (sock_available > 0) {
|
if (sock_available > 0) {
|
||||||
at->modemRead(rx.free(), mux);
|
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user