Fixed xbee wifi perpetual instant timeout
This commit is contained in:
		| @@ -126,24 +126,29 @@ public: | |||||||
|     // empty the saved currently-in-use destination address |     // empty the saved currently-in-use destination address | ||||||
|     at->savedOperatingIP = IPAddress(0, 0, 0, 0); |     at->savedOperatingIP = IPAddress(0, 0, 0, 0); | ||||||
|     at->commandMode(); |     at->commandMode(); | ||||||
|  |  | ||||||
|  |     // Get the current socket timeout | ||||||
|  |     at->sendAT(GF("TM")); | ||||||
|  |     String timeoutUsed = at->readResponseString(5000L); | ||||||
|  |  | ||||||
|     // For WiFi models, there's no direct way to close the socket.  This is a |     // For WiFi models, there's no direct way to close the socket.  This is a | ||||||
|     // hack to shut the socket by setting the timeout to zero. |     // hack to shut the socket by setting the timeout to zero. | ||||||
|     if (at->beeType == XBEE_S6B_WIFI) { |     if (at->beeType == XBEE_S6B_WIFI) { | ||||||
|       at->sendAT(GF("TM0"));  // Set socket timeout (using Digi default of 10 seconds) |       at->sendAT(GF("TM0"));  // Set socket timeout to 0 | ||||||
|       at->waitResponse(maxWaitMs);  // This response can be slow |       at->waitResponse(maxWaitMs);  // This response can be slow | ||||||
|       at->writeChanges(); |       at->writeChanges(); | ||||||
|     } |     } | ||||||
|     // For cellular models, per documentation: If you change the TM (socket |  | ||||||
|  |     // For cellular models, per documentation: If you write the TM (socket | ||||||
|     // timeout) value while in Transparent Mode, the current connection is |     // timeout) value while in Transparent Mode, the current connection is | ||||||
|     // immediately closed. |     // immediately closed - this works even if the TM values is unchanged | ||||||
|     at->sendAT(GF("TM"));  // Get socket timeout |  | ||||||
|     String timeoutUsed = at->readResponseString(5000L); |  | ||||||
|     at->sendAT(GF("TM"), timeoutUsed);  // Re-set socket timeout |     at->sendAT(GF("TM"), timeoutUsed);  // Re-set socket timeout | ||||||
|     at->waitResponse(maxWaitMs);  // This response can be slow |     at->waitResponse(maxWaitMs);  // This response can be slow | ||||||
|     at->writeChanges(); |     at->writeChanges(); | ||||||
|     at->exitCommand(); |     at->exitCommand(); | ||||||
|     at->streamClear();  // Empty anything remaining in the buffer |     at->streamClear();  // Empty anything remaining in the buffer | ||||||
|     sock_connected = false; |     sock_connected = false; | ||||||
|  |      | ||||||
|     // Note:  because settings are saved in flash, the XBEE will attempt to |     // Note:  because settings are saved in flash, the XBEE will attempt to | ||||||
|     // reconnect to the previous socket if it receives any outgoing data. |     // reconnect to the previous socket if it receives any outgoing data. | ||||||
|     // Setting sock_connected to false after the stop ensures that connected() |     // Setting sock_connected to false after the stop ensures that connected() | ||||||
| @@ -1138,7 +1143,6 @@ public: | |||||||
|           // we force close so it can reopen |           // we force close so it can reopen | ||||||
|           case 0x21 : |           case 0x21 : | ||||||
|           case 0x27 : { |           case 0x27 : { | ||||||
|             Serial.println("Here!"); |  | ||||||
|             sendAT(GF("TM"));  // Get socket timeout |             sendAT(GF("TM"));  // Get socket timeout | ||||||
|             String timeoutUsed = readResponseString(5000L); |             String timeoutUsed = readResponseString(5000L); | ||||||
|             sendAT(GF("TM"), timeoutUsed);  // Re-set socket timeout |             sendAT(GF("TM"), timeoutUsed);  // Re-set socket timeout | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user