Fix SIMCOM length read/confirmed/requested
This commit is contained in:
@@ -807,44 +807,33 @@ protected:
|
|||||||
size_t len_requested = stream.readStringUntil(',').toInt();
|
size_t len_requested = stream.readStringUntil(',').toInt();
|
||||||
// ^^ Requested number of data bytes (1-1460 bytes)to be read
|
// ^^ Requested number of data bytes (1-1460 bytes)to be read
|
||||||
size_t len_confirmed = stream.readStringUntil('\n').toInt();
|
size_t len_confirmed = stream.readStringUntil('\n').toInt();
|
||||||
if (len_confirmed > len_requested) {
|
if (len_confirmed < len_requested) {
|
||||||
DBG(len_requested - len_confirmed, "fewer bytes confirmed than requested!");
|
DBG(len_requested - len_confirmed, "fewer bytes confirmed than requested!");
|
||||||
}
|
}
|
||||||
sockets[mux]->sock_available = len_confirmed;
|
sockets[mux]->sock_available = len_confirmed;
|
||||||
// ^^ Confirmed number of data bytes to be read, which may be less than requested.
|
// ^^ Confirmed number of data bytes to be read, which may be less than requested.
|
||||||
// 0 indicates that no data can be read.
|
// 0 indicates that no data can be read.
|
||||||
|
|
||||||
for (size_t i=0; i<len_confirmed; i++) {
|
size_t len_read = 0;
|
||||||
|
for (size_t i=0; i<TinyGsmMin(len_confirmed, len_requested) ; i++) {
|
||||||
#ifdef TINY_GSM_USE_HEX
|
#ifdef TINY_GSM_USE_HEX
|
||||||
while (stream.available() < 2) { TINY_GSM_YIELD(); }
|
while (stream.available() < 2) { TINY_GSM_YIELD(); }
|
||||||
char buf[4] = { 0, };
|
char buf[4] = { 0, };
|
||||||
buf[0] = stream.read();
|
buf[0] = stream.read();
|
||||||
|
len_read++;
|
||||||
buf[1] = stream.read();
|
buf[1] = stream.read();
|
||||||
char c = strtol(buf, NULL, 16);
|
char c = strtol(buf, NULL, 16);
|
||||||
|
len_read++;
|
||||||
#else
|
#else
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
while (!stream.available()) { TINY_GSM_YIELD(); }
|
||||||
char c = stream.read();
|
char c = stream.read();
|
||||||
|
len_read++;
|
||||||
#endif
|
#endif
|
||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
waitResponse();
|
waitResponse();
|
||||||
DBG("### READ:", len_confirmed, "from", mux);
|
DBG("### READ:", len_read, "from", mux);
|
||||||
return len_confirmed;
|
return len_read;
|
||||||
}
|
|
||||||
|
|
||||||
size_t modemGetAvailable(uint8_t mux) {
|
|
||||||
sendAT(GF("+CIPRXGET=4,"), mux);
|
|
||||||
size_t result = 0;
|
|
||||||
if (waitResponse(GF("+CIPRXGET:")) == 1) {
|
|
||||||
streamSkipUntil(','); // Skip mode 4
|
|
||||||
streamSkipUntil(','); // Skip mux
|
|
||||||
result = stream.readStringUntil('\n').toInt();
|
|
||||||
waitResponse();
|
|
||||||
}
|
|
||||||
if (!result) {
|
|
||||||
sockets[mux]->sock_connected = modemGetConnected(mux);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool modemGetConnected(uint8_t mux) {
|
bool modemGetConnected(uint8_t mux) {
|
||||||
|
@@ -735,29 +735,33 @@ protected:
|
|||||||
size_t len_requested = stream.readStringUntil(',').toInt();
|
size_t len_requested = stream.readStringUntil(',').toInt();
|
||||||
// ^^ Requested number of data bytes (1-1460 bytes)to be read
|
// ^^ Requested number of data bytes (1-1460 bytes)to be read
|
||||||
size_t len_confirmed = stream.readStringUntil('\n').toInt();
|
size_t len_confirmed = stream.readStringUntil('\n').toInt();
|
||||||
if (len_confirmed > len_requested) {
|
if (len_confirmed < len_requested) {
|
||||||
DBG(len_requested - len_confirmed, "fewer bytes confirmed than requested!");
|
DBG(len_requested - len_confirmed, "fewer bytes confirmed than requested!");
|
||||||
}
|
}
|
||||||
sockets[mux]->sock_available = len_confirmed;
|
sockets[mux]->sock_available = len_confirmed;
|
||||||
// ^^ Confirmed number of data bytes to be read, which may be less than requested.
|
// ^^ Confirmed number of data bytes to be read, which may be less than requested.
|
||||||
// 0 indicates that no data can be read.
|
// 0 indicates that no data can be read.
|
||||||
|
|
||||||
for (size_t i=0; i<len_confirmed; i++) {
|
size_t len_read = 0;
|
||||||
|
for (size_t i=0; i<TinyGsmMin(len_confirmed, len_requested) ; i++) {
|
||||||
#ifdef TINY_GSM_USE_HEX
|
#ifdef TINY_GSM_USE_HEX
|
||||||
while (stream.available() < 2) { TINY_GSM_YIELD(); }
|
while (stream.available() < 2) { TINY_GSM_YIELD(); }
|
||||||
char buf[4] = { 0, };
|
char buf[4] = { 0, };
|
||||||
buf[0] = stream.read();
|
buf[0] = stream.read();
|
||||||
|
len_read++;
|
||||||
buf[1] = stream.read();
|
buf[1] = stream.read();
|
||||||
char c = strtol(buf, NULL, 16);
|
char c = strtol(buf, NULL, 16);
|
||||||
|
len_read++;
|
||||||
#else
|
#else
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
while (!stream.available()) { TINY_GSM_YIELD(); }
|
||||||
char c = stream.read();
|
char c = stream.read();
|
||||||
|
len_read++;
|
||||||
#endif
|
#endif
|
||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
waitResponse();
|
waitResponse();
|
||||||
DBG("### READ:", len_confirmed, "from", mux);
|
DBG("### READ:", len_read, "from", mux);
|
||||||
return len_confirmed;
|
return len_read;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t modemGetAvailable(uint8_t mux) {
|
size_t modemGetAvailable(uint8_t mux) {
|
||||||
|
Reference in New Issue
Block a user