check if async is supported
Signed-off-by: Sara Damiano <sdamiano@stroudcenter.org>
This commit is contained in:
		| @@ -94,18 +94,21 @@ TINY_GSM_CLIENT_CONNECT_OVERLOADS() | ||||
|   virtual void stop(uint32_t maxWaitMs) { | ||||
|     TINY_GSM_CLIENT_DUMP_MODEM_BUFFER() | ||||
|  | ||||
|     // // 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; | ||||
|     if (at->supportsAsyncSockets) { | ||||
|       DBG("### Closing socket asynchronously!  Socket might remain open until arrival of +UUSOCL: ", mux); | ||||
|       // 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; | ||||
|     } else { | ||||
|       // 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; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   virtual void stop() { stop(135000L); } | ||||
| @@ -206,6 +209,12 @@ public: | ||||
|     } else { | ||||
|       has2GFallback = false; | ||||
|     } | ||||
|     if (modemName.startsWith("u-blox SARA-R404M") || | ||||
|         modemName.startsWith("u-blox SARA-R410M-01B")) { | ||||
|       supportsAsyncSockets = false; | ||||
|     } else { | ||||
|       supportsAsyncSockets = true; | ||||
|     } | ||||
|  | ||||
|     int ret = getSimStatus(); | ||||
|     // if the sim isn't ready and a pin has been provided, try to unlock the sim | ||||
| @@ -591,8 +600,11 @@ protected: | ||||
|     } | ||||
|  | ||||
|     // Enable NODELAY | ||||
|     sendAT(GF("+USOSO="), *mux, GF(",6,1,1")); | ||||
|     waitResponse(); | ||||
|     // AT+USOSO=<socket>,<level>,<opt_name>,<opt_val>[,<opt_val2>] | ||||
|     // <level> - 0 for IP, 6 for TCP, 65535 for socket level options | ||||
|     // <opt_name> TCP/1 = no delay (do not delay send to coalesce packets) | ||||
|     // sendAT(GF("+USOSO="), *mux, GF(",6,1,1")); | ||||
|     // waitResponse(); | ||||
|  | ||||
|     // Enable KEEPALIVE, 30 sec | ||||
|     // sendAT(GF("+USOSO="), *mux, GF(",6,2,30000")); | ||||
| @@ -606,16 +618,21 @@ protected: | ||||
|     // 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 | ||||
|     int connection_status = stream.readStringUntil('\n').toInt(); | ||||
|     return (0 == connection_status); | ||||
|  | ||||
|     // use synchronous open | ||||
|     // sendAT(GF("+USOCO="), *mux, ",\"", host, "\",", port, ",0"); | ||||
|     // int rsp = waitResponse(timeout_ms); | ||||
|     // return (1 == rsp); | ||||
|     if (supportsAsyncSockets) { | ||||
|       DBG("### Opening socket asynchronously!  Socket cannot be used until " | ||||
|           "arrival of +UUSOCO: ", | ||||
|           mux); | ||||
|       sendAT(GF("+USOCO="), *mux, ",\"", host, "\",", port, ",1"); | ||||
|       waitResponse(timeout_ms, GF(GSM_NL "+UUSOCO: ")); | ||||
|       stream.readStringUntil(',').toInt();  // skip repeated mux | ||||
|       int connection_status = stream.readStringUntil('\n').toInt(); | ||||
|       return (0 == connection_status); | ||||
|     } else { | ||||
|       // use synchronous open | ||||
|       sendAT(GF("+USOCO="), *mux, ",\"", host, "\",", port); | ||||
|       int rsp = waitResponse(timeout_ms); | ||||
|       return (1 == rsp); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   int16_t modemSend(const void* buff, size_t len, uint8_t mux) { | ||||
| @@ -764,6 +781,13 @@ TINY_GSM_MODEM_STREAM_UTILITIES() | ||||
|           } | ||||
|           data = ""; | ||||
|           DBG("### URC Sock Closed: ", mux); | ||||
|         } else if (data.endsWith(GF("+UUSOCO:"))) { | ||||
|           int mux = stream.readStringUntil('\n').toInt(); | ||||
|           if (mux >= 0 && mux < TINY_GSM_MUX_COUNT && sockets[mux]) { | ||||
|             sockets[mux]->sock_connected = true; | ||||
|           } | ||||
|           data = ""; | ||||
|           DBG("### URC Sock Opened: ", mux); | ||||
|         } | ||||
|       } | ||||
|     } while (millis() - startMillis < timeout_ms); | ||||
| @@ -802,6 +826,7 @@ public: | ||||
| protected: | ||||
|   GsmClient* sockets[TINY_GSM_MUX_COUNT]; | ||||
|   bool       has2GFallback; | ||||
|   bool       supportsAsyncSockets; | ||||
| }; | ||||
|  | ||||
| #endif | ||||
|   | ||||
		Reference in New Issue
	
	Block a user