@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "TinyGSM",
|
"name": "TinyGSM",
|
||||||
"version": "0.6.1",
|
"version": "0.6.2",
|
||||||
"description": "A small Arduino library for GPRS modules, that just works. Includes examples for Blynk, MQTT, File Download, and Web Client. Supports many GSM, LTE, and WiFi modules with AT command interfaces.",
|
"description": "A small Arduino library for GPRS modules, that just works. Includes examples for Blynk, MQTT, File Download, and Web Client. Supports many GSM, LTE, and WiFi modules with AT command interfaces.",
|
||||||
"keywords": "GSM, AT commands, AT, SIM800, SIM900, A6, A7, M590, ESP8266, SIM7000, SIM800A, SIM800C, SIM800L, SIM800H, SIM808, SIM868, SIM900A, SIM900D, SIM908, SIM968, M95, MC60, MC60E, BG96, ublox, Quectel, SIMCOM, AI Thinker, LTE, LTE-M",
|
"keywords": "GSM, AT commands, AT, SIM800, SIM900, A6, A7, M590, ESP8266, SIM7000, SIM800A, SIM800C, SIM800L, SIM800H, SIM808, SIM868, SIM900A, SIM900D, SIM908, SIM968, M95, MC60, MC60E, BG96, ublox, Quectel, SIMCOM, AI Thinker, LTE, LTE-M",
|
||||||
"authors":
|
"authors":
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
name=TinyGSM
|
name=TinyGSM
|
||||||
version=0.6.1
|
version=0.6.2
|
||||||
author=Volodymyr Shymanskyy
|
author=Volodymyr Shymanskyy
|
||||||
maintainer=Volodymyr Shymanskyy
|
maintainer=Volodymyr Shymanskyy
|
||||||
sentence=A small Arduino library for GPRS modules, that just works.
|
sentence=A small Arduino library for GPRS modules, that just works.
|
||||||
|
@@ -58,6 +58,10 @@ public:
|
|||||||
this->mux = -1;
|
this->mux = -1;
|
||||||
sock_connected = false;
|
sock_connected = false;
|
||||||
|
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socket here at init? Or later at connect?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,6 +75,8 @@ public:
|
|||||||
if (sock_connected) {
|
if (sock_connected) {
|
||||||
mux = newMux;
|
mux = newMux;
|
||||||
at->sockets[mux] = this;
|
at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socet after attempting connection or above at init?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
}
|
}
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
@@ -112,7 +118,7 @@ public:
|
|||||||
|
|
||||||
virtual int available() {
|
virtual int available() {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
if (!rx.size()) {
|
if (!rx.size() && sock_connected) {
|
||||||
at->maintain();
|
at->maintain();
|
||||||
}
|
}
|
||||||
return rx.size();
|
return rx.size();
|
||||||
|
@@ -62,6 +62,8 @@ public:
|
|||||||
got_data = false;
|
got_data = false;
|
||||||
|
|
||||||
at->sockets[mux] = this;
|
at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socket here at init? Or later at connect?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -72,6 +74,10 @@ public:
|
|||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
sock_connected = at->modemConnect(host, port, mux);
|
sock_connected = at->modemConnect(host, port, mux);
|
||||||
|
// sock_connected = at->modemConnect(host, port, &mux);
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socet after attempting connection or above at init?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,7 +103,7 @@ public:
|
|||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
while (sock_available > 0) {
|
while (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
}
|
}
|
||||||
@@ -144,7 +150,7 @@ public:
|
|||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
at->maintain();
|
at->maintain();
|
||||||
if (sock_available > 0) {
|
if (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -632,6 +638,7 @@ protected:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// TODO: Wait for ACK? AT+QISEND=id,0
|
// TODO: Wait for ACK? AT+QISEND=id,0
|
||||||
|
maintain(); // look for a very quick response from the remote
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -641,6 +648,7 @@ protected:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
size_t len = stream.readStringUntil('\n').toInt();
|
size_t len = stream.readStringUntil('\n').toInt();
|
||||||
|
sockets[mux]->sock_available = len;
|
||||||
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
while (!stream.available()) { TINY_GSM_YIELD(); }
|
||||||
@@ -648,7 +656,8 @@ protected:
|
|||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
waitResponse();
|
waitResponse();
|
||||||
DBG("### READ:", mux, ",", len);
|
DBG("### READ:", len, "from", mux);
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -659,12 +668,13 @@ protected:
|
|||||||
streamSkipUntil(','); // Skip total received
|
streamSkipUntil(','); // Skip total received
|
||||||
streamSkipUntil(','); // Skip have read
|
streamSkipUntil(','); // Skip have read
|
||||||
result = stream.readStringUntil('\n').toInt();
|
result = stream.readStringUntil('\n').toInt();
|
||||||
DBG("### STILL:", mux, "has", result);
|
DBG("### DATA AVAILABLE:", result, "on", mux);
|
||||||
waitResponse();
|
waitResponse();
|
||||||
}
|
}
|
||||||
if (!result) {
|
if (!result) {
|
||||||
sockets[mux]->sock_connected = modemGetConnected(mux);
|
sockets[mux]->sock_connected = modemGetConnected(mux);
|
||||||
}
|
}
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -683,6 +693,7 @@ protected:
|
|||||||
int res = stream.readStringUntil(',').toInt(); // socket state
|
int res = stream.readStringUntil(',').toInt(); // socket state
|
||||||
|
|
||||||
waitResponse();
|
waitResponse();
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
|
|
||||||
// 0 Initial, 1 Opening, 2 Connected, 3 Listening, 4 Closing
|
// 0 Initial, 1 Opening, 2 Connected, 3 Listening, 4 Closing
|
||||||
return 2 == res;
|
return 2 == res;
|
||||||
|
@@ -59,6 +59,8 @@ public:
|
|||||||
sock_connected = false;
|
sock_connected = false;
|
||||||
|
|
||||||
at->sockets[mux] = this;
|
at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socket here at init? Or later at connect?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -69,6 +71,10 @@ public:
|
|||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
sock_connected = at->modemConnect(host, port, mux);
|
sock_connected = at->modemConnect(host, port, mux);
|
||||||
|
// sock_connected = at->modemConnect(host, port, &mux);
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socet after attempting connection or above at init?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,7 +115,7 @@ public:
|
|||||||
|
|
||||||
virtual int available() {
|
virtual int available() {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
if (!rx.size()) {
|
if (!rx.size() && sock_connected) {
|
||||||
at->maintain();
|
at->maintain();
|
||||||
}
|
}
|
||||||
return rx.size();
|
return rx.size();
|
||||||
@@ -183,6 +189,10 @@ public:
|
|||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
sock_connected = at->modemConnect(host, port, mux, true);
|
sock_connected = at->modemConnect(host, port, mux, true);
|
||||||
|
// sock_connected = at->modemConnect(host, port, &mux);
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socet after attempting connection or above at init?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -59,6 +59,8 @@ public:
|
|||||||
sock_connected = false;
|
sock_connected = false;
|
||||||
|
|
||||||
at->sockets[mux] = this;
|
at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socket here at init? Or later at connect?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -69,6 +71,10 @@ public:
|
|||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
sock_connected = at->modemConnect(host, port, mux);
|
sock_connected = at->modemConnect(host, port, mux);
|
||||||
|
// sock_connected = at->modemConnect(host, port, &mux);
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socet after attempting connection or above at init?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,7 +134,7 @@ public:
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
if (!rx.size()) {
|
if (!rx.size() && sock_connected) {
|
||||||
at->maintain();
|
at->maintain();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -62,6 +62,8 @@ public:
|
|||||||
got_data = false;
|
got_data = false;
|
||||||
|
|
||||||
at->sockets[mux] = this;
|
at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socket here at init? Or later at connect?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -72,6 +74,10 @@ public:
|
|||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
sock_connected = at->modemConnect(host, port, mux);
|
sock_connected = at->modemConnect(host, port, mux);
|
||||||
|
// sock_connected = at->modemConnect(host, port, &mux);
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socet after attempting connection or above at init?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,7 +103,7 @@ public:
|
|||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
while (sock_available > 0) {
|
while (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
}
|
}
|
||||||
@@ -144,7 +150,7 @@ public:
|
|||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
at->maintain();
|
at->maintain();
|
||||||
if (sock_available > 0) {
|
if (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -684,10 +690,11 @@ protected:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
waitResponse(5000L);
|
waitResponse(5000L);
|
||||||
|
maintain(); // look for a very quick response from the remote
|
||||||
|
|
||||||
// streamSkipUntil(','); // Skip mux
|
// streamSkipUntil(','); // Skip mux
|
||||||
// return stream.readStringUntil('\n').toInt();
|
// return stream.readStringUntil('\n').toInt();
|
||||||
return 1;
|
return len; // TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t modemRead(size_t size, uint8_t mux) {
|
size_t modemRead(size_t size, uint8_t mux) {
|
||||||
@@ -696,6 +703,7 @@ protected:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
size_t len = stream.readStringUntil('\n').toInt();
|
size_t len = stream.readStringUntil('\n').toInt();
|
||||||
|
sockets[mux]->sock_available = len;
|
||||||
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
while (!stream.available()) { TINY_GSM_YIELD(); }
|
||||||
@@ -703,7 +711,8 @@ protected:
|
|||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
waitResponse();
|
waitResponse();
|
||||||
DBG("### READ:", mux, ",", len);
|
DBG("### READ:", len, "from", mux);
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -714,12 +723,13 @@ protected:
|
|||||||
streamSkipUntil(','); // Skip total received
|
streamSkipUntil(','); // Skip total received
|
||||||
streamSkipUntil(','); // Skip have read
|
streamSkipUntil(','); // Skip have read
|
||||||
result = stream.readStringUntil('\n').toInt();
|
result = stream.readStringUntil('\n').toInt();
|
||||||
DBG("### STILL:", mux, "has", result);
|
DBG("### DATA AVAILABLE:", result, "on", mux);
|
||||||
waitResponse();
|
waitResponse();
|
||||||
}
|
}
|
||||||
if (!result) {
|
if (!result) {
|
||||||
sockets[mux]->sock_connected = modemGetConnected(mux);
|
sockets[mux]->sock_connected = modemGetConnected(mux);
|
||||||
}
|
}
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -738,6 +748,7 @@ protected:
|
|||||||
int res = stream.readStringUntil(',').toInt(); // socket state
|
int res = stream.readStringUntil(',').toInt(); // socket state
|
||||||
|
|
||||||
waitResponse();
|
waitResponse();
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
|
|
||||||
// 0 Initial, 1 Opening, 2 Connected, 3 Listening, 4 Closing
|
// 0 Initial, 1 Opening, 2 Connected, 3 Listening, 4 Closing
|
||||||
return 2 == res;
|
return 2 == res;
|
||||||
|
@@ -66,6 +66,8 @@ public:
|
|||||||
got_data = false;
|
got_data = false;
|
||||||
|
|
||||||
at->sockets[mux] = this;
|
at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socket here at init? Or later at connect?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -76,6 +78,10 @@ public:
|
|||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
sock_connected = at->modemConnect(host, port, mux);
|
sock_connected = at->modemConnect(host, port, mux);
|
||||||
|
// sock_connected = at->modemConnect(host, port, &mux);
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socet after attempting connection or above at init?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,7 +107,7 @@ public:
|
|||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
while (sock_available > 0) {
|
while (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
}
|
}
|
||||||
@@ -148,7 +154,7 @@ public:
|
|||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
at->maintain();
|
at->maintain();
|
||||||
if (sock_available > 0) {
|
if (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -715,7 +721,9 @@ protected:
|
|||||||
|
|
||||||
// streamSkipUntil(','); // Skip mux
|
// streamSkipUntil(','); // Skip mux
|
||||||
// return stream.readStringUntil('\n').toInt();
|
// return stream.readStringUntil('\n').toInt();
|
||||||
return 1;
|
|
||||||
|
maintain(); // look for a very quick response from the remote
|
||||||
|
return len; // TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t modemRead(size_t size, uint8_t mux) {
|
size_t modemRead(size_t size, uint8_t mux) {
|
||||||
@@ -724,6 +732,7 @@ protected:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
size_t len = stream.readStringUntil('\n').toInt();
|
size_t len = stream.readStringUntil('\n').toInt();
|
||||||
|
sockets[mux]->sock_available = len;
|
||||||
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
while (!stream.available()) { TINY_GSM_YIELD(); }
|
while (!stream.available()) { TINY_GSM_YIELD(); }
|
||||||
@@ -731,7 +740,8 @@ protected:
|
|||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
waitResponse();
|
waitResponse();
|
||||||
DBG("### READ:", mux, ",", len);
|
DBG("### READ:", len, "from", mux);
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -742,12 +752,13 @@ protected:
|
|||||||
streamSkipUntil(','); // Skip total received
|
streamSkipUntil(','); // Skip total received
|
||||||
streamSkipUntil(','); // Skip have read
|
streamSkipUntil(','); // Skip have read
|
||||||
result = stream.readStringUntil('\n').toInt();
|
result = stream.readStringUntil('\n').toInt();
|
||||||
DBG("### STILL:", mux, "has", result);
|
DBG("### DATA AVAILABLE:", result, "on", mux);
|
||||||
waitResponse();
|
waitResponse();
|
||||||
}
|
}
|
||||||
if (!result) {
|
if (!result) {
|
||||||
sockets[mux]->sock_connected = modemGetConnected(mux);
|
sockets[mux]->sock_connected = modemGetConnected(mux);
|
||||||
}
|
}
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -766,6 +777,7 @@ protected:
|
|||||||
int res = stream.readStringUntil(',').toInt(); // socket state
|
int res = stream.readStringUntil(',').toInt(); // socket state
|
||||||
|
|
||||||
waitResponse();
|
waitResponse();
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
|
|
||||||
// 0 Initial, 1 Opening, 2 Connected, 3 Listening, 4 Closing
|
// 0 Initial, 1 Opening, 2 Connected, 3 Listening, 4 Closing
|
||||||
return 2 == res;
|
return 2 == res;
|
||||||
|
@@ -71,6 +71,8 @@ public:
|
|||||||
got_data = false;
|
got_data = false;
|
||||||
|
|
||||||
at->sockets[mux] = this;
|
at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socket here at init? Or later at connect?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -81,6 +83,10 @@ public:
|
|||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
sock_connected = at->modemConnect(host, port, mux);
|
sock_connected = at->modemConnect(host, port, mux);
|
||||||
|
// sock_connected = at->modemConnect(host, port, &mux);
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socet after attempting connection or above at init?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,7 +112,7 @@ public:
|
|||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
while (sock_available > 0) {
|
while (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
}
|
}
|
||||||
@@ -166,10 +172,10 @@ public:
|
|||||||
got_data = true;
|
got_data = true;
|
||||||
prev_check = millis();
|
prev_check = millis();
|
||||||
}
|
}
|
||||||
at->maintain();
|
|
||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
|
at->maintain();
|
||||||
if (sock_available > 0) {
|
if (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -228,6 +234,9 @@ public:
|
|||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
sock_connected = at->modemConnect(host, port, mux, true);
|
sock_connected = at->modemConnect(host, port, mux, true);
|
||||||
|
// sock_connected = at->modemConnect(host, port, &mux, true);
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// TODO: When is the socket attached?
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -421,6 +430,7 @@ public:
|
|||||||
|
|
||||||
RegStatus getRegistrationStatus() {
|
RegStatus getRegistrationStatus() {
|
||||||
sendAT(GF("+CGREG?"));
|
sendAT(GF("+CGREG?"));
|
||||||
|
// TODO: Shouldn't this be CEREG for the EPS status of this 4G module?
|
||||||
if (waitResponse(GF(GSM_NL "+CGREG:")) != 1) {
|
if (waitResponse(GF(GSM_NL "+CGREG:")) != 1) {
|
||||||
return REG_UNKNOWN;
|
return REG_UNKNOWN;
|
||||||
}
|
}
|
||||||
@@ -932,6 +942,7 @@ protected:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
streamSkipUntil(','); // Skip mux
|
streamSkipUntil(','); // Skip mux
|
||||||
|
maintain(); // look for a very quick response from the remote
|
||||||
return stream.readStringUntil('\n').toInt();
|
return stream.readStringUntil('\n').toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -947,12 +958,19 @@ protected:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
streamSkipUntil(','); // Skip mode 2/3
|
streamSkipUntil(','); // Skip Rx mode 2/normal or 3/HEX
|
||||||
streamSkipUntil(','); // Skip mux
|
streamSkipUntil(','); // Skip mux
|
||||||
size_t len = stream.readStringUntil(',').toInt();
|
size_t len_requested = stream.readStringUntil(',').toInt();
|
||||||
sockets[mux]->sock_available = stream.readStringUntil('\n').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) {
|
||||||
|
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; i++) {
|
for (size_t i=0; i<len_confirmed; i++) {
|
||||||
#ifdef TINY_GSM_USE_HEX
|
#ifdef TINY_GSM_USE_HEX
|
||||||
while (stream.available() < 2) { TINY_GSM_YIELD(); }
|
while (stream.available() < 2) { TINY_GSM_YIELD(); }
|
||||||
char buf[4] = { 0, };
|
char buf[4] = { 0, };
|
||||||
@@ -966,7 +984,9 @@ protected:
|
|||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
waitResponse();
|
waitResponse();
|
||||||
return len;
|
DBG("### READ:", len_confirmed, "from", mux);
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
|
return len_confirmed;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t modemGetAvailable(uint8_t mux) {
|
size_t modemGetAvailable(uint8_t mux) {
|
||||||
@@ -981,6 +1001,7 @@ protected:
|
|||||||
if (!result) {
|
if (!result) {
|
||||||
sockets[mux]->sock_connected = modemGetConnected(mux);
|
sockets[mux]->sock_connected = modemGetConnected(mux);
|
||||||
}
|
}
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -988,6 +1009,7 @@ protected:
|
|||||||
sendAT(GF("+CIPSTATUS="), mux);
|
sendAT(GF("+CIPSTATUS="), mux);
|
||||||
int res = waitResponse(GF(",\"CONNECTED\""), GF(",\"CLOSED\""), GF(",\"CLOSING\""), GF(",\"INITIAL\""));
|
int res = waitResponse(GF(",\"CONNECTED\""), GF(",\"CLOSED\""), GF(",\"CLOSING\""), GF(",\"INITIAL\""));
|
||||||
waitResponse();
|
waitResponse();
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return 1 == res;
|
return 1 == res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1048,9 +1070,19 @@ public:
|
|||||||
sockets[mux]->got_data = true;
|
sockets[mux]->got_data = true;
|
||||||
}
|
}
|
||||||
data = "";
|
data = "";
|
||||||
|
DBG("### Got Data:", mux);
|
||||||
} else {
|
} else {
|
||||||
data += mode;
|
data += mode;
|
||||||
}
|
}
|
||||||
|
} else if (data.endsWith(GF(GSM_NL "+RECEIVE:"))) {
|
||||||
|
int mux = stream.readStringUntil(',').toInt();
|
||||||
|
int len = stream.readStringUntil('\n').toInt();
|
||||||
|
if (mux >= 0 && mux < TINY_GSM_MUX_COUNT && sockets[mux]) {
|
||||||
|
sockets[mux]->got_data = true;
|
||||||
|
sockets[mux]->sock_available = len;
|
||||||
|
}
|
||||||
|
data = "";
|
||||||
|
DBG("### Got Data:", len, "on", mux);
|
||||||
} else if (data.endsWith(GF("CLOSED" GSM_NL))) {
|
} else if (data.endsWith(GF("CLOSED" GSM_NL))) {
|
||||||
int nl = data.lastIndexOf(GSM_NL, data.length()-8);
|
int nl = data.lastIndexOf(GSM_NL, data.length()-8);
|
||||||
int coma = data.indexOf(',', nl+2);
|
int coma = data.indexOf(',', nl+2);
|
||||||
|
@@ -68,6 +68,8 @@ public:
|
|||||||
got_data = false;
|
got_data = false;
|
||||||
|
|
||||||
at->sockets[mux] = this;
|
at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socket here at init? Or later at connect?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -78,6 +80,10 @@ public:
|
|||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
sock_connected = at->modemConnect(host, port, mux);
|
sock_connected = at->modemConnect(host, port, mux);
|
||||||
|
// sock_connected = at->modemConnect(host, port, &mux);
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socet after attempting connection or above at init?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +109,7 @@ public:
|
|||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
while (sock_available > 0) {
|
while (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
}
|
}
|
||||||
@@ -161,10 +167,10 @@ public:
|
|||||||
got_data = true;
|
got_data = true;
|
||||||
prev_check = millis();
|
prev_check = millis();
|
||||||
}
|
}
|
||||||
at->maintain();
|
|
||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
|
at->maintain();
|
||||||
if (sock_available > 0) {
|
if (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -223,6 +229,9 @@ public:
|
|||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
sock_connected = at->modemConnect(host, port, mux, true);
|
sock_connected = at->modemConnect(host, port, mux, true);
|
||||||
|
// sock_connected = at->modemConnect(host, port, &mux, true);
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// TODO: When is the socket attached?
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -578,6 +587,7 @@ public:
|
|||||||
|
|
||||||
bool gprsDisconnect() {
|
bool gprsDisconnect() {
|
||||||
// Shut the TCP/IP connection
|
// Shut the TCP/IP connection
|
||||||
|
// CIPSHUT will close *all* open connections
|
||||||
sendAT(GF("+CIPSHUT"));
|
sendAT(GF("+CIPSHUT"));
|
||||||
if (waitResponse(60000L) != 1)
|
if (waitResponse(60000L) != 1)
|
||||||
return false;
|
return false;
|
||||||
@@ -791,6 +801,7 @@ public:
|
|||||||
/*
|
/*
|
||||||
* Battery functions
|
* Battery functions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Use: float vBatt = modem.getBattVoltage() / 1000.0;
|
// Use: float vBatt = modem.getBattVoltage() / 1000.0;
|
||||||
uint16_t getBattVoltage() {
|
uint16_t getBattVoltage() {
|
||||||
sendAT(GF("+CBC"));
|
sendAT(GF("+CBC"));
|
||||||
@@ -853,6 +864,7 @@ protected:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
streamSkipUntil(','); // Skip mux
|
streamSkipUntil(','); // Skip mux
|
||||||
|
maintain(); // look for a very quick response from the remote
|
||||||
return stream.readStringUntil('\n').toInt();
|
return stream.readStringUntil('\n').toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -868,12 +880,19 @@ protected:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
streamSkipUntil(','); // Skip mode 2/3
|
streamSkipUntil(','); // Skip Rx mode 2/normal or 3/HEX
|
||||||
streamSkipUntil(','); // Skip mux
|
streamSkipUntil(','); // Skip mux
|
||||||
size_t len = stream.readStringUntil(',').toInt();
|
size_t len_requested = stream.readStringUntil(',').toInt();
|
||||||
sockets[mux]->sock_available = stream.readStringUntil('\n').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) {
|
||||||
|
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; i++) {
|
for (size_t i=0; i<len_confirmed; i++) {
|
||||||
#ifdef TINY_GSM_USE_HEX
|
#ifdef TINY_GSM_USE_HEX
|
||||||
while (stream.available() < 2) { TINY_GSM_YIELD(); }
|
while (stream.available() < 2) { TINY_GSM_YIELD(); }
|
||||||
char buf[4] = { 0, };
|
char buf[4] = { 0, };
|
||||||
@@ -887,7 +906,9 @@ protected:
|
|||||||
sockets[mux]->rx.put(c);
|
sockets[mux]->rx.put(c);
|
||||||
}
|
}
|
||||||
waitResponse();
|
waitResponse();
|
||||||
return len;
|
DBG("### READ:", len_confirmed, "from", mux);
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
|
return len_confirmed;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t modemGetAvailable(uint8_t mux) {
|
size_t modemGetAvailable(uint8_t mux) {
|
||||||
@@ -902,6 +923,7 @@ protected:
|
|||||||
if (!result) {
|
if (!result) {
|
||||||
sockets[mux]->sock_connected = modemGetConnected(mux);
|
sockets[mux]->sock_connected = modemGetConnected(mux);
|
||||||
}
|
}
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -909,6 +931,7 @@ protected:
|
|||||||
sendAT(GF("+CIPSTATUS="), mux);
|
sendAT(GF("+CIPSTATUS="), mux);
|
||||||
int res = waitResponse(GF(",\"CONNECTED\""), GF(",\"CLOSED\""), GF(",\"CLOSING\""), GF(",\"INITIAL\""));
|
int res = waitResponse(GF(",\"CONNECTED\""), GF(",\"CLOSED\""), GF(",\"CLOSING\""), GF(",\"INITIAL\""));
|
||||||
waitResponse();
|
waitResponse();
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return 1 == res;
|
return 1 == res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -969,9 +992,19 @@ public:
|
|||||||
sockets[mux]->got_data = true;
|
sockets[mux]->got_data = true;
|
||||||
}
|
}
|
||||||
data = "";
|
data = "";
|
||||||
|
DBG("### Got Data:", mux);
|
||||||
} else {
|
} else {
|
||||||
data += mode;
|
data += mode;
|
||||||
}
|
}
|
||||||
|
} else if (data.endsWith(GF(GSM_NL "+RECEIVE:"))) {
|
||||||
|
int mux = stream.readStringUntil(',').toInt();
|
||||||
|
int len = stream.readStringUntil('\n').toInt();
|
||||||
|
if (mux >= 0 && mux < TINY_GSM_MUX_COUNT && sockets[mux]) {
|
||||||
|
sockets[mux]->got_data = true;
|
||||||
|
sockets[mux]->sock_available = len;
|
||||||
|
}
|
||||||
|
data = "";
|
||||||
|
DBG("### Got Data:", len, "on", mux);
|
||||||
} else if (data.endsWith(GF("CLOSED" GSM_NL))) {
|
} else if (data.endsWith(GF("CLOSED" GSM_NL))) {
|
||||||
int nl = data.lastIndexOf(GSM_NL, data.length()-8);
|
int nl = data.lastIndexOf(GSM_NL, data.length()-8);
|
||||||
int coma = data.indexOf(',', nl+2);
|
int coma = data.indexOf(',', nl+2);
|
||||||
|
@@ -61,6 +61,11 @@ public:
|
|||||||
prev_check = 0;
|
prev_check = 0;
|
||||||
sock_connected = false;
|
sock_connected = false;
|
||||||
got_data = false;
|
got_data = false;
|
||||||
|
|
||||||
|
// at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socket here at init? Or later at connect?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,8 +86,11 @@ public:
|
|||||||
}
|
}
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
|
// sock_connected = at->modemConnect(host, port, mux);
|
||||||
sock_connected = at->modemConnect(host, port, &mux);
|
sock_connected = at->modemConnect(host, port, &mux);
|
||||||
at->sockets[mux] = this;
|
at->sockets[mux] = this;
|
||||||
|
// ^^ TODO: attach the socet after attempting connection or above at init?
|
||||||
|
// Currently done inconsistently between modems
|
||||||
at->maintain();
|
at->maintain();
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
@@ -109,7 +117,7 @@ public:
|
|||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
while (sock_available > 0) {
|
while (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
rx.clear();
|
rx.clear();
|
||||||
at->maintain();
|
at->maintain();
|
||||||
}
|
}
|
||||||
@@ -168,10 +176,10 @@ public:
|
|||||||
got_data = true;
|
got_data = true;
|
||||||
prev_check = millis();
|
prev_check = millis();
|
||||||
}
|
}
|
||||||
at->maintain();
|
|
||||||
// TODO: Read directly into user buffer?
|
// TODO: Read directly into user buffer?
|
||||||
|
at->maintain();
|
||||||
if (sock_available > 0) {
|
if (sock_available > 0) {
|
||||||
sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -229,8 +237,10 @@ public:
|
|||||||
stop();
|
stop();
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
rx.clear();
|
rx.clear();
|
||||||
|
// sock_connected = at->modemConnect(host, port, mux, true);
|
||||||
sock_connected = at->modemConnect(host, port, &mux, true);
|
sock_connected = at->modemConnect(host, port, &mux, true);
|
||||||
at->sockets[mux] = this;
|
at->sockets[mux] = this;
|
||||||
|
// TODO: When is the socket attached?
|
||||||
at->maintain();
|
at->maintain();
|
||||||
return sock_connected;
|
return sock_connected;
|
||||||
}
|
}
|
||||||
@@ -772,6 +782,7 @@ protected:
|
|||||||
|
|
||||||
bool modemDisconnect(uint8_t mux) {
|
bool modemDisconnect(uint8_t mux) {
|
||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
|
if (!modemGetConnected(mux)) return true;
|
||||||
if (isCatM) { // These modems allow a faster "asynchronous" close
|
if (isCatM) { // These modems allow a faster "asynchronous" close
|
||||||
sendAT(GF("+USOCL="), mux, GF(",1"));
|
sendAT(GF("+USOCL="), mux, GF(",1"));
|
||||||
int rsp = waitResponse(120000L);
|
int rsp = waitResponse(120000L);
|
||||||
@@ -798,7 +809,7 @@ protected:
|
|||||||
streamSkipUntil(','); // Skip mux
|
streamSkipUntil(','); // Skip mux
|
||||||
int sent = stream.readStringUntil('\n').toInt();
|
int sent = stream.readStringUntil('\n').toInt();
|
||||||
waitResponse();
|
waitResponse();
|
||||||
maintain(); // look for a very quick response
|
maintain(); // look for a very quick response from the remote
|
||||||
return sent;
|
return sent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -809,6 +820,7 @@ protected:
|
|||||||
}
|
}
|
||||||
streamSkipUntil(','); // Skip mux
|
streamSkipUntil(','); // Skip mux
|
||||||
size_t len = stream.readStringUntil(',').toInt();
|
size_t len = stream.readStringUntil(',').toInt();
|
||||||
|
sockets[mux]->sock_available = len;
|
||||||
streamSkipUntil('\"');
|
streamSkipUntil('\"');
|
||||||
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
@@ -818,6 +830,8 @@ protected:
|
|||||||
}
|
}
|
||||||
streamSkipUntil('\"');
|
streamSkipUntil('\"');
|
||||||
waitResponse();
|
waitResponse();
|
||||||
|
DBG("### READ:", len, "from", mux);
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -830,11 +844,13 @@ protected:
|
|||||||
if (res == 1) {
|
if (res == 1) {
|
||||||
streamSkipUntil(','); // Skip mux
|
streamSkipUntil(','); // Skip mux
|
||||||
result = stream.readStringUntil('\n').toInt();
|
result = stream.readStringUntil('\n').toInt();
|
||||||
|
DBG("### DATA AVAILABLE:", result, "on", mux);
|
||||||
waitResponse();
|
waitResponse();
|
||||||
}
|
}
|
||||||
if (!result && res != 2 && res != 3) { // Don't check modemGetConnected after an error
|
if (!result && res != 2 && res != 3) { // Don't check modemGetConnected after an error
|
||||||
sockets[mux]->sock_connected = modemGetConnected(mux);
|
sockets[mux]->sock_connected = modemGetConnected(mux);
|
||||||
}
|
}
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -860,6 +876,7 @@ protected:
|
|||||||
// 9: the socket is in LAST_ACK status
|
// 9: the socket is in LAST_ACK status
|
||||||
// 10: the socket is in TIME_WAIT status
|
// 10: the socket is in TIME_WAIT status
|
||||||
waitResponse();
|
waitResponse();
|
||||||
|
maintain(); // Listen for a close or other URC
|
||||||
return (result != 0);
|
return (result != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -895,7 +912,7 @@ public:
|
|||||||
TINY_GSM_YIELD();
|
TINY_GSM_YIELD();
|
||||||
while (stream.available() > 0) {
|
while (stream.available() > 0) {
|
||||||
int a = stream.read();
|
int a = stream.read();
|
||||||
if (a < 0) continue;
|
if (a <= 0) continue; // Skip 0x00 bytes, just in case
|
||||||
data += (char)a;
|
data += (char)a;
|
||||||
if (r1 && data.endsWith(r1)) {
|
if (r1 && data.endsWith(r1)) {
|
||||||
index = 1;
|
index = 1;
|
||||||
@@ -914,12 +931,13 @@ public:
|
|||||||
goto finish;
|
goto finish;
|
||||||
} else if (data.endsWith(GF(GSM_NL "+UUSORD:"))) {
|
} else if (data.endsWith(GF(GSM_NL "+UUSORD:"))) {
|
||||||
int mux = stream.readStringUntil(',').toInt();
|
int mux = stream.readStringUntil(',').toInt();
|
||||||
streamSkipUntil('\n');
|
int len = stream.readStringUntil('\n').toInt();
|
||||||
if (mux >= 0 && mux < TINY_GSM_MUX_COUNT && sockets[mux]) {
|
if (mux >= 0 && mux < TINY_GSM_MUX_COUNT && sockets[mux]) {
|
||||||
sockets[mux]->got_data = true;
|
sockets[mux]->got_data = true;
|
||||||
|
sockets[mux]->sock_available = len;
|
||||||
}
|
}
|
||||||
data = "";
|
data = "";
|
||||||
DBG("### Got Data:", mux);
|
DBG("### Got Data:", len, "on", mux);
|
||||||
} else if (data.endsWith(GF(GSM_NL "+UUSOCL:"))) {
|
} else if (data.endsWith(GF(GSM_NL "+UUSOCL:"))) {
|
||||||
int mux = stream.readStringUntil('\n').toInt();
|
int mux = stream.readStringUntil('\n').toInt();
|
||||||
if (mux >= 0 && mux < TINY_GSM_MUX_COUNT && sockets[mux]) {
|
if (mux >= 0 && mux < TINY_GSM_MUX_COUNT && sockets[mux]) {
|
||||||
|
@@ -992,8 +992,8 @@ finish:
|
|||||||
streamClear(); // Empty everything in the buffer before starting
|
streamClear(); // Empty everything in the buffer before starting
|
||||||
while (!success and triesMade < retries) {
|
while (!success and triesMade < retries) {
|
||||||
// Cannot send anything for 1 "guard time" before entering command mode
|
// Cannot send anything for 1 "guard time" before entering command mode
|
||||||
// Default guard time is 1s, but the init fxn decreases it to 250 ms
|
// Default guard time is 1s, but the init fxn decreases it to 100 ms
|
||||||
delay(guardTime);
|
delay(guardTime + 50);
|
||||||
streamWrite(GF("+++")); // enter command mode
|
streamWrite(GF("+++")); // enter command mode
|
||||||
int res = waitResponse(guardTime*2);
|
int res = waitResponse(guardTime*2);
|
||||||
success = (1 == res);
|
success = (1 == res);
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
#define TinyGsmCommon_h
|
#define TinyGsmCommon_h
|
||||||
|
|
||||||
// The current library version number
|
// The current library version number
|
||||||
#define TINYGSM_VERSION "0.6.1"
|
#define TINYGSM_VERSION "0.6.2"
|
||||||
|
|
||||||
#if defined(SPARK) || defined(PARTICLE)
|
#if defined(SPARK) || defined(PARTICLE)
|
||||||
#include "Particle.h"
|
#include "Particle.h"
|
||||||
|
Reference in New Issue
Block a user