From d44e6b3b98644fdb17946141fdaa5ee303cde113 Mon Sep 17 00:00:00 2001 From: Sara Damiano Date: Thu, 5 Sep 2019 11:59:32 -0400 Subject: [PATCH] Async close on R4 --- src/TinyGsmClientSaraR4.h | 72 ++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 28 deletions(-) diff --git a/src/TinyGsmClientSaraR4.h b/src/TinyGsmClientSaraR4.h index 9117704..eaf1606 100644 --- a/src/TinyGsmClientSaraR4.h +++ b/src/TinyGsmClientSaraR4.h @@ -93,8 +93,18 @@ TINY_GSM_CLIENT_CONNECT_OVERLOADS() virtual void stop(uint32_t maxWaitMs) { TINY_GSM_CLIENT_DUMP_MODEM_BUFFER() - at->sendAT(GF("+USOCL="), mux); - at->waitResponse((maxWaitMs - (millis() - startMillis))); // NOTE: can take up to 120s to get a response + + // // synchronous close + // at->sendAT(GF("+USOCL="), mux); + // // NOTE: can take up to 120s to get a response + // at->waitResponse((maxWaitMs - (millis() - startMillis))); + // sock_connected = false; + + // faster asynchronous close + // NOT supported on SARA-R404M / SARA-R410M-01B + at->sendAT(GF("+USOCL="), mux, GF(",1")); + // NOTE: can take up to 120s to get a response + at->waitResponse((maxWaitMs - (millis() - startMillis))); sock_connected = false; } @@ -197,7 +207,8 @@ public: simUnlock(pin); return (getSimStatus() == SIM_READY); } - // if the sim is ready, or it's locked but no pin has been provided, return true + // if the sim is ready, or it's locked but no pin has been provided,return + // return true else { return (ret == SIM_READY || ret == SIM_LOCKED); } @@ -382,8 +393,9 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK() // serial interface. This is the only command set supported by the LTE-M // and LTE NB-IoT modules (SARA-R4xx, SARA-N4xx) + // Set the authentication if (user && strlen(user) > 0) { - sendAT(GF("+CGAUTH=1,0,\""), user, GF("\",\""), pwd, '"'); // Set the authentication + sendAT(GF("+CGAUTH=1,0,\""), user, GF("\",\""), pwd, '"'); waitResponse(); } @@ -560,8 +572,8 @@ protected: waitResponse(); // Enable KEEPALIVE, 30 sec - //sendAT(GF("+USOSO="), *mux, GF(",6,2,30000")); - //waitResponse(); + // sendAT(GF("+USOSO="), *mux, GF(",6,2,30000")); + // waitResponse(); // connect on the allocated socket @@ -570,6 +582,7 @@ protected: // The SARA-R410M-02B with firmware revisions prior to L0.0.00.00.05.08 // has a nasty habit of locking up when opening a socket, especially if // the cellular service is poor. + // NOT supported on SARA-R404M / SARA-R410M-01B sendAT(GF("+USOCO="), *mux, ",\"", host, "\",", port, ",1"); waitResponse(timeout_ms, GF(GSM_NL "+UUSOCO: ")); stream.readStringUntil(',').toInt(); // skip repeated mux @@ -583,7 +596,7 @@ protected: } int16_t modemSend(const void* buff, size_t len, uint8_t mux) { - sendAT(GF("+USOWR="), mux, ',', len); + sendAT(GF("+USOWR="), mux, ',', (uint16_t)len); if (waitResponse(GF("@")) != 1) { return 0; } @@ -594,19 +607,19 @@ protected: if (waitResponse(GF(GSM_NL "+USOWR:")) != 1) { return 0; } - streamSkipUntil(','); // Skip mux + streamSkipUntil(','); // Skip mux int sent = stream.readStringUntil('\n').toInt(); waitResponse(); // sends back OK after the confirmation of number sent return sent; } size_t modemRead(size_t size, uint8_t mux) { - sendAT(GF("+USORD="), mux, ',', size); + sendAT(GF("+USORD="), mux, ',', (uint16_t)size); if (waitResponse(GF(GSM_NL "+USORD:")) != 1) { return 0; } - streamSkipUntil(','); // Skip mux - size_t len = stream.readStringUntil(',').toInt(); + streamSkipUntil(','); // Skip mux + int len = stream.readStringUntil(',').toInt(); streamSkipUntil('\"'); for (size_t i=0; i 0) { TINY_GSM_YIELD(); int a = stream.read(); - if (a <= 0) continue; // Skip 0x00 bytes, just in case + if (a <= 0) continue; // Skip 0x00 bytes, just in case data += (char)a; if (r1 && data.endsWith(r1)) { index = 1; @@ -738,30 +752,32 @@ finish: } data = ""; } - //data.replace(GSM_NL, "/"); - //DBG('<', index, '>', data); + // data.replace(GSM_NL, "/"); + // DBG('<', index, '>', data); return index; } uint8_t waitResponse(uint32_t timeout_ms, - GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR), - GsmConstStr r3=GFP(GSM_CME_ERROR), GsmConstStr r4=NULL, GsmConstStr r5=NULL) - { + GsmConstStr r1 = GFP(GSM_OK), + GsmConstStr r2 = GFP(GSM_ERROR), + GsmConstStr r3 = GFP(GSM_CME_ERROR), + GsmConstStr r4 = NULL, GsmConstStr r5 = NULL) { String data; return waitResponse(timeout_ms, data, r1, r2, r3, r4, r5); } - uint8_t waitResponse(GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR), - GsmConstStr r3=GFP(GSM_CME_ERROR), GsmConstStr r4=NULL, GsmConstStr r5=NULL) - { + uint8_t waitResponse(GsmConstStr r1 = GFP(GSM_OK), + GsmConstStr r2 = GFP(GSM_ERROR), + GsmConstStr r3 = GFP(GSM_CME_ERROR), + GsmConstStr r4 = NULL, GsmConstStr r5 = NULL) { return waitResponse(1000, r1, r2, r3, r4, r5); } public: - Stream& stream; + Stream& stream; protected: - GsmClient* sockets[TINY_GSM_MUX_COUNT]; + GsmClient* sockets[TINY_GSM_MUX_COUNT]; }; #endif