Async close on R4

This commit is contained in:
Sara Damiano
2019-09-05 11:59:32 -04:00
parent 712d85e7f3
commit d44e6b3b98

View File

@@ -93,8 +93,18 @@ TINY_GSM_CLIENT_CONNECT_OVERLOADS()
virtual void stop(uint32_t maxWaitMs) { virtual void stop(uint32_t maxWaitMs) {
TINY_GSM_CLIENT_DUMP_MODEM_BUFFER() 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; sock_connected = false;
} }
@@ -197,7 +207,8 @@ public:
simUnlock(pin); simUnlock(pin);
return (getSimStatus() == SIM_READY); 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 { else {
return (ret == SIM_READY || ret == SIM_LOCKED); 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 // serial interface. This is the only command set supported by the LTE-M
// and LTE NB-IoT modules (SARA-R4xx, SARA-N4xx) // and LTE NB-IoT modules (SARA-R4xx, SARA-N4xx)
// Set the authentication
if (user && strlen(user) > 0) { 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(); waitResponse();
} }
@@ -570,6 +582,7 @@ protected:
// The SARA-R410M-02B with firmware revisions prior to L0.0.00.00.05.08 // 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 // has a nasty habit of locking up when opening a socket, especially if
// the cellular service is poor. // the cellular service is poor.
// NOT supported on SARA-R404M / SARA-R410M-01B
sendAT(GF("+USOCO="), *mux, ",\"", host, "\",", port, ",1"); sendAT(GF("+USOCO="), *mux, ",\"", host, "\",", port, ",1");
waitResponse(timeout_ms, GF(GSM_NL "+UUSOCO: ")); waitResponse(timeout_ms, GF(GSM_NL "+UUSOCO: "));
stream.readStringUntil(',').toInt(); // skip repeated mux stream.readStringUntil(',').toInt(); // skip repeated mux
@@ -583,7 +596,7 @@ protected:
} }
int16_t modemSend(const void* buff, size_t len, uint8_t mux) { 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) { if (waitResponse(GF("@")) != 1) {
return 0; return 0;
} }
@@ -601,12 +614,12 @@ protected:
} }
size_t modemRead(size_t size, uint8_t mux) { 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) { if (waitResponse(GF(GSM_NL "+USORD:")) != 1) {
return 0; return 0;
} }
streamSkipUntil(','); // Skip mux streamSkipUntil(','); // Skip mux
size_t len = stream.readStringUntil(',').toInt(); int len = stream.readStringUntil(',').toInt();
streamSkipUntil('\"'); streamSkipUntil('\"');
for (size_t i=0; i<len; i++) { for (size_t i=0; i<len; i++) {
@@ -674,9 +687,10 @@ TINY_GSM_MODEM_STREAM_UTILITIES()
// TODO: Optimize this! // TODO: Optimize this!
uint8_t waitResponse(uint32_t timeout_ms, String& data, uint8_t waitResponse(uint32_t timeout_ms, String& data,
GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR), GsmConstStr r1 = GFP(GSM_OK),
GsmConstStr r3=GFP(GSM_CME_ERROR), GsmConstStr r4=NULL, GsmConstStr r5=NULL) GsmConstStr r2 = GFP(GSM_ERROR),
{ GsmConstStr r3 = GFP(GSM_CME_ERROR),
GsmConstStr r4 = NULL, GsmConstStr r5 = NULL) {
/*String r1s(r1); r1s.trim(); /*String r1s(r1); r1s.trim();
String r2s(r2); r2s.trim(); String r2s(r2); r2s.trim();
String r3s(r3); r3s.trim(); String r3s(r3); r3s.trim();
@@ -744,16 +758,18 @@ finish:
} }
uint8_t waitResponse(uint32_t timeout_ms, uint8_t waitResponse(uint32_t timeout_ms,
GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR), GsmConstStr r1 = GFP(GSM_OK),
GsmConstStr r3=GFP(GSM_CME_ERROR), GsmConstStr r4=NULL, GsmConstStr r5=NULL) GsmConstStr r2 = GFP(GSM_ERROR),
{ GsmConstStr r3 = GFP(GSM_CME_ERROR),
GsmConstStr r4 = NULL, GsmConstStr r5 = NULL) {
String data; String data;
return waitResponse(timeout_ms, data, r1, r2, r3, r4, r5); return waitResponse(timeout_ms, data, r1, r2, r3, r4, r5);
} }
uint8_t waitResponse(GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR), uint8_t waitResponse(GsmConstStr r1 = GFP(GSM_OK),
GsmConstStr r3=GFP(GSM_CME_ERROR), GsmConstStr r4=NULL, GsmConstStr r5=NULL) 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); return waitResponse(1000, r1, r2, r3, r4, r5);
} }