Browse Source

Fix SIMCOM length read/confirmed/requested

v_master
Sara Damiano 5 years ago
parent
commit
9201cbde86
2 changed files with 16 additions and 23 deletions
  1. +8
    -19
      src/TinyGsmClientSIM7000.h
  2. +8
    -4
      src/TinyGsmClientSIM800.h

+ 8
- 19
src/TinyGsmClientSIM7000.h View File

@ -807,44 +807,33 @@ protected:
size_t len_requested = stream.readStringUntil(',').toInt();
// ^^ Requested number of data bytes (1-1460 bytes)to be read
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!");
}
sockets[mux]->sock_available = len_confirmed;
// ^^ Confirmed number of data bytes to be read, which may be less than requested.
// 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
while (stream.available() < 2) { TINY_GSM_YIELD(); }
char buf[4] = { 0, };
buf[0] = stream.read();
len_read++;
buf[1] = stream.read();
char c = strtol(buf, NULL, 16);
len_read++;
#else
while (!stream.available()) { TINY_GSM_YIELD(); }
char c = stream.read();
len_read++;
#endif
sockets[mux]->rx.put(c);
}
waitResponse();
DBG("### READ:", len_confirmed, "from", mux);
return len_confirmed;
}
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;
DBG("### READ:", len_read, "from", mux);
return len_read;
}
bool modemGetConnected(uint8_t mux) {


+ 8
- 4
src/TinyGsmClientSIM800.h View File

@ -735,29 +735,33 @@ protected:
size_t len_requested = stream.readStringUntil(',').toInt();
// ^^ Requested number of data bytes (1-1460 bytes)to be read
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!");
}
sockets[mux]->sock_available = len_confirmed;
// ^^ Confirmed number of data bytes to be read, which may be less than requested.
// 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
while (stream.available() < 2) { TINY_GSM_YIELD(); }
char buf[4] = { 0, };
buf[0] = stream.read();
len_read++;
buf[1] = stream.read();
char c = strtol(buf, NULL, 16);
len_read++;
#else
while (!stream.available()) { TINY_GSM_YIELD(); }
char c = stream.read();
len_read++;
#endif
sockets[mux]->rx.put(c);
}
waitResponse();
DBG("### READ:", len_confirmed, "from", mux);
return len_confirmed;
DBG("### READ:", len_read, "from", mux);
return len_read;
}
size_t modemGetAvailable(uint8_t mux) {


Loading…
Cancel
Save