@@ -441,6 +441,9 @@ public:
|
||||
String r5s(r5); r5s.trim();
|
||||
DBG("### ..:", r1s, ",", r2s, ",", r3s, ",", r4s, ",", r5s);*/
|
||||
data.reserve(64);
|
||||
bool gotData = false;
|
||||
int mux = -1;
|
||||
int len = 0;
|
||||
int index = 0;
|
||||
unsigned long startMillis = millis();
|
||||
do {
|
||||
@@ -465,24 +468,24 @@ public:
|
||||
index = 5;
|
||||
goto finish;
|
||||
} else if (data.endsWith(GF("+CIPRCV:"))) {
|
||||
int mux = streamReadUntil(',').toInt();
|
||||
int len = streamReadUntil(',').toInt();
|
||||
if (len > sockets[mux]->rx.free()) {
|
||||
DBG("### Buffer overflow: ", len, "->", sockets[mux]->rx.free());
|
||||
} else {
|
||||
DBG("### Got: ", len, "->", sockets[mux]->rx.free());
|
||||
}
|
||||
while (len--) {
|
||||
while (!stream.available()) {}
|
||||
sockets[mux]->rx.put(stream.read());
|
||||
}
|
||||
data = "";
|
||||
return index;
|
||||
mux = stream.readStringUntil(',').toInt();
|
||||
data += mux;
|
||||
data += (',');
|
||||
len = stream.readStringUntil(',').toInt();
|
||||
data += len;
|
||||
data += (',');
|
||||
gotData = true;
|
||||
index = 6;
|
||||
goto finish;
|
||||
} else if (data.endsWith(GF("+TCPCLOSED:"))) {
|
||||
int mux = streamReadUntil(',').toInt();
|
||||
streamReadUntil('\n');
|
||||
mux = stream.readStringUntil(',').toInt();
|
||||
data += mux;
|
||||
data += (',');
|
||||
String concl = stream.readStringUntil('\n');
|
||||
data += concl;
|
||||
sockets[mux]->sock_connected = false;
|
||||
data = "";
|
||||
index = 7;
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
} while (millis() - startMillis < timeout);
|
||||
@@ -492,7 +495,6 @@ public:
|
||||
if (data.length()) {
|
||||
DBG("### Unhandled:", data);
|
||||
}
|
||||
data = "";
|
||||
}
|
||||
else {
|
||||
data.trim();
|
||||
@@ -501,7 +503,23 @@ public:
|
||||
if (data.length()) {
|
||||
DBG(GSM_NL, "<<< ", data);
|
||||
}
|
||||
data = "";
|
||||
}
|
||||
if (gotData) {
|
||||
int len_orig = len;
|
||||
if (len > sockets[mux]->rx.free()) {
|
||||
DBG(GSM_NL, "### Buffer overflow: ", len, "->", sockets[mux]->rx.free());
|
||||
} else {
|
||||
DBG(GSM_NL, "### Got: ", len, "->", sockets[mux]->rx.free());
|
||||
}
|
||||
while (len--) {
|
||||
char c[2] = {0};
|
||||
stream.readBytes(c, 1); // readBytes includes a timeout
|
||||
if(c[0]) sockets[mux]->rx.put(c[0]);
|
||||
// DBG(GSM_NL, c[0], " ", len, " ", stream.available(), " ", sockets[mux]->available());
|
||||
}
|
||||
if (len_orig > sockets[mux]->available()) {
|
||||
DBG(GSM_NL, "### Fewer characters received than expected: ", len_orig, "->", sockets[mux]->available());
|
||||
}
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
@@ -448,6 +448,9 @@ public:
|
||||
String r5s(r5); r5s.trim();
|
||||
DBG("### ..:", r1s, ",", r2s, ",", r3s, ",", r4s, ",", r5s);*/
|
||||
data.reserve(64);
|
||||
bool gotData = false;
|
||||
int mux = -1;
|
||||
int len = 0;
|
||||
int index = 0;
|
||||
unsigned long startMillis = millis();
|
||||
do {
|
||||
@@ -472,24 +475,24 @@ public:
|
||||
index = 5;
|
||||
goto finish;
|
||||
} else if (data.endsWith(GF("+TCPRECV:"))) {
|
||||
int mux = streamReadUntil(',').toInt();
|
||||
int len = streamReadUntil(',').toInt();
|
||||
if (len > sockets[mux]->rx.free()) {
|
||||
DBG("### Buffer overflow: ", len, "->", sockets[mux]->rx.free());
|
||||
} else {
|
||||
DBG("### Got: ", len, "->", sockets[mux]->rx.free());
|
||||
}
|
||||
while (len--) {
|
||||
while (!stream.available()) {}
|
||||
sockets[mux]->rx.put(stream.read());
|
||||
}
|
||||
data = "";
|
||||
return index;
|
||||
mux = stream.readStringUntil(',').toInt();
|
||||
data += mux;
|
||||
data += (',');
|
||||
len = stream.readStringUntil(',').toInt();
|
||||
data += len;
|
||||
data += (',');
|
||||
gotData = true;
|
||||
index = 6;
|
||||
goto finish;
|
||||
} else if (data.endsWith(GF("+TCPCLOSE:"))) {
|
||||
int mux = streamReadUntil(',').toInt();
|
||||
streamReadUntil('\n');
|
||||
mux = stream.readStringUntil(',').toInt();
|
||||
data += mux;
|
||||
data += (',');
|
||||
String concl = stream.readStringUntil('\n');
|
||||
data += concl;
|
||||
sockets[mux]->sock_connected = false;
|
||||
data = "";
|
||||
index = 7;
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
} while (millis() - startMillis < timeout);
|
||||
@@ -499,7 +502,6 @@ public:
|
||||
if (data.length()) {
|
||||
DBG("### Unhandled:", data);
|
||||
}
|
||||
data = "";
|
||||
}
|
||||
else {
|
||||
data.trim();
|
||||
@@ -508,7 +510,23 @@ public:
|
||||
if (data.length()) {
|
||||
DBG(GSM_NL, "<<< ", data);
|
||||
}
|
||||
data = "";
|
||||
}
|
||||
if (gotData) {
|
||||
int len_orig = len;
|
||||
if (len > sockets[mux]->rx.free()) {
|
||||
DBG(GSM_NL, "### Buffer overflow: ", len, "->", sockets[mux]->rx.free());
|
||||
} else {
|
||||
DBG(GSM_NL, "### Got: ", len, "->", sockets[mux]->rx.free());
|
||||
}
|
||||
while (len--) {
|
||||
char c[2] = {0};
|
||||
stream.readBytes(c, 1); // readBytes includes a timeout
|
||||
if(c[0]) sockets[mux]->rx.put(c[0]);
|
||||
// DBG(GSM_NL, c[0], " ", len, " ", stream.available(), " ", sockets[mux]->available());
|
||||
}
|
||||
if (len_orig > sockets[mux]->available()) {
|
||||
DBG(GSM_NL, "### Fewer characters received than expected: ", len_orig, "->", sockets[mux]->available());
|
||||
}
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
@@ -312,10 +312,6 @@ public:
|
||||
|
||||
commandMode();
|
||||
|
||||
sendAT(GF("AP"), 0); // Put in transparent mode
|
||||
waitResponse();
|
||||
sendAT(GF("IP"), 1); // Put in TCP mode
|
||||
waitResponse();
|
||||
sendAT(GF("EE"), 2); // Set security to WPA2
|
||||
waitResponse();
|
||||
|
||||
@@ -348,10 +344,6 @@ public:
|
||||
*/
|
||||
bool gprsConnect(const char* apn, const char* user = "", const char* pw = "") {
|
||||
commandMode();
|
||||
sendAT(GF("AP"), 0); // Put in transparent mode
|
||||
waitResponse();
|
||||
sendAT(GF("IP"), 1); // Put in TCP mode
|
||||
waitResponse();
|
||||
sendAT(GF("AN"), apn); // Set the APN
|
||||
waitResponse();
|
||||
writeChanges();
|
||||
@@ -375,8 +367,6 @@ public:
|
||||
|
||||
bool sendSMS(const String& number, const String& text) {
|
||||
commandMode();
|
||||
sendAT(GF("AP"), 0); // Put in transparent mode
|
||||
waitResponse();
|
||||
sendAT(GF("IP"), 2); // Put in text messaging mode
|
||||
waitResponse();
|
||||
sendAT(GF("PH"), number); // Set the phone number
|
||||
@@ -493,9 +483,11 @@ private:
|
||||
host += ip[2];
|
||||
host += ".";
|
||||
host += ip[3];
|
||||
sendAT(GF("DL"), host);
|
||||
sendAT(GF("IP"), 1); // Put in TCP mode
|
||||
waitResponse();
|
||||
sendAT(GF("DE"), String(port, HEX));
|
||||
sendAT(GF("DL"), host); // Set the "Destination Address Low"
|
||||
waitResponse();
|
||||
sendAT(GF("DE"), String(port, HEX)); // Set the destination port
|
||||
int rsp = waitResponse();
|
||||
return rsp;
|
||||
}
|
||||
|
Reference in New Issue
Block a user