Browse Source

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.
v_master
Sara Damiano 6 years ago
parent
commit
e68ea1db12
3 changed files with 8 additions and 5 deletions
  1. +3
    -2
      src/TinyGsmClientA6.h
  2. +3
    -2
      src/TinyGsmClientESP8266.h
  3. +2
    -1
      src/TinyGsmClientM590.h

+ 3
- 2
src/TinyGsmClientA6.h View File

@ -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();
}
}


+ 3
- 2
src/TinyGsmClientESP8266.h View File

@ -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();
}
}


+ 2
- 1
src/TinyGsmClientM590.h View File

@ -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);


Loading…
Cancel
Save