diff --git a/TinyGsmClientA6.h b/TinyGsmClientA6.h index e41113b..79e3680 100644 --- a/TinyGsmClientA6.h +++ b/TinyGsmClientA6.h @@ -441,6 +441,9 @@ public: String r5s(r5); r5s.trim(); DBG("### ..:", r1s, ",", r2s, ",", r3s, ",", r4s, ",", r5s);*/ data.reserve(64); + bool gotData = false; + int mux = -1; + int len = 0; int index = 0; unsigned long startMillis = millis(); do { @@ -465,22 +468,24 @@ public: index = 5; goto finish; } else if (data.endsWith(GF("+CIPRCV:"))) { - int mux = streamReadUntil(',').toInt(); - int len = streamReadUntil(',').toInt(); - if (len > sockets[mux]->rx.free()) { - DBG("### Buffer overflow: ", len, "->", sockets[mux]->rx.free()); - } else { - DBG("### Got: ", len, "->", sockets[mux]->rx.free()); - } - while (len--) { - while (!stream.available()) {} - sockets[mux]->rx.put(stream.read()); - } - return index; + mux = stream.readStringUntil(',').toInt(); + data += mux; + data += (','); + len = stream.readStringUntil(',').toInt(); + data += len; + data += (','); + gotData = true; + index = 6; + goto finish; } else if (data.endsWith(GF("+TCPCLOSED:"))) { - int mux = streamReadUntil(',').toInt(); - streamReadUntil('\n'); + mux = stream.readStringUntil(',').toInt(); + data += mux; + data += (','); + String concl = stream.readStringUntil('\n'); + data += concl; sockets[mux]->sock_connected = false; + index = 7; + goto finish; } } } while (millis() - startMillis < timeout); @@ -499,6 +504,23 @@ public: DBG(GSM_NL, "<<< ", data); } } + if (gotData) { + int len_orig = len; + if (len > sockets[mux]->rx.free()) { + DBG(GSM_NL, "### Buffer overflow: ", len, "->", sockets[mux]->rx.free()); + } else { + DBG(GSM_NL, "### Got: ", len, "->", sockets[mux]->rx.free()); + } + while (len--) { + char c[2] = {0}; + stream.readBytes(c, 1); // readBytes includes a timeout + if(c[0]) sockets[mux]->rx.put(c[0]); + // DBG(GSM_NL, c[0], " ", len, " ", stream.available(), " ", sockets[mux]->available()); + } + if (len_orig > sockets[mux]->available()) { + DBG(GSM_NL, "### Fewer characters received than expected: ", len_orig, "->", sockets[mux]->available()); + } + } return index; } diff --git a/TinyGsmClientM590.h b/TinyGsmClientM590.h index 5e7490c..776091a 100644 --- a/TinyGsmClientM590.h +++ b/TinyGsmClientM590.h @@ -398,8 +398,8 @@ public: /* * Messaging functions */ - bool gprsConnect(const char* apn, const char* user, const char* pwd) { - return false; + + void sendUSSD() { } void sendSMS() {