Browse Source

Totally different attempt

v_master
SRGDamia1 8 years ago
parent
commit
8bc626f415
5 changed files with 57 additions and 42 deletions
  1. +3
    -5
      TinyGsmClientA6.h
  2. +3
    -2
      TinyGsmClientESP8266.h
  3. +38
    -20
      TinyGsmClientM590.h
  4. +3
    -2
      TinyGsmClientSIM800.h
  5. +10
    -13
      TinyGsmClientXBee.h

+ 3
- 5
TinyGsmClientA6.h View File

@ -476,13 +476,11 @@ public:
while (!stream.available()) {}
sockets[mux]->rx.put(stream.read());
}
data = "";
return index;
} else if (data.endsWith(GF("+TCPCLOSED:"))) {
int mux = streamReadUntil(',').toInt();
streamReadUntil('\n');
sockets[mux]->sock_connected = false;
data = "";
}
}
} while (millis() - startMillis < timeout);
@ -492,7 +490,6 @@ public:
if (data.length()) {
DBG("### Unhandled:", data);
}
data = "";
}
else {
data.trim();
@ -501,7 +498,6 @@ public:
if (data.length()) {
DBG(GSM_NL, "<<< ", data);
}
data = "";
}
return index;
}
@ -521,8 +517,10 @@ public:
}
private:
int modemConnect(const char* host, uint16_t port, uint8_t* mux) {
int modemConnect(const char* host, uint16_t port, uint8_t* mux, bool isUDP=false) {
sendAT(GF("+CIPSTART="), GF("\"TCP"), GF("\",\""), host, GF("\","), port);
if (isUDP) sendAT(GF("+CIPSTART="), GF("\"UDP"), GF("\",\""), host, GF("\","), port);
else sendAT(GF("+CIPSTART="), GF("\"TCP"), GF("\",\""), host, GF("\","), port);
if (waitResponse(75000L, GF(GSM_NL "+CIPNUM:")) != 1) {
return -1;


+ 3
- 2
TinyGsmClientESP8266.h View File

@ -370,8 +370,9 @@ public:
}
private:
int modemConnect(const char* host, uint16_t port, uint8_t mux) {
sendAT(GF("+CIPSTART="), mux, ',', GF("\"TCP"), GF("\",\""), host, GF("\","), port, GF(",120"));
int modemConnect(const char* host, uint16_t port, uint8_t mux, bool isUDP=false) {
if (isUDP) sendAT(GF("+CIPSTART="), mux, ',', GF("\"UDP"), GF("\",\""), host, GF("\","), port, GF(",120"));
else sendAT(GF("+CIPSTART="), mux, ',', GF("\"TCP"), GF("\",\""), host, GF("\","), port, GF(",120"));
int rsp = waitResponse(75000L,
GFP(GSM_OK),
GFP(GSM_ERROR),


+ 38
- 20
TinyGsmClientM590.h View File

@ -398,8 +398,8 @@ public:
/*
* Messaging functions
*/
void sendUSSD() {
bool gprsConnect(const char* apn, const char* user, const char* pwd) {
return false;
}
void sendSMS() {
@ -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;
}


+ 3
- 2
TinyGsmClientSIM800.h View File

@ -636,8 +636,9 @@ public:
}
private:
int modemConnect(const char* host, uint16_t port, uint8_t mux) {
sendAT(GF("+CIPSTART="), mux, ',', GF("\"TCP"), GF("\",\""), host, GF("\","), port);
int modemConnect(const char* host, uint16_t port, uint8_t mux, bool isUDP=false) {
if (isUDP) sendAT(GF("+CIPSTART="), mux, ',', GF("\"UDP"), GF("\",\""), host, GF("\","), port);
else sendAT(GF("+CIPSTART="), mux, ',', GF("\"TCP"), GF("\",\""), host, GF("\","), port);
int rsp = waitResponse(75000L,
GF("CONNECT OK" GSM_NL),
GF("CONNECT FAIL" GSM_NL),


+ 10
- 13
TinyGsmClientXBee.h View File

@ -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
@ -475,16 +465,16 @@ public:
}
private:
int modemConnect(const char* host, uint16_t port, uint8_t mux = 1) {
int modemConnect(const char* host, uint16_t port, uint8_t mux = 1, bool isUDP=false) {
sendAT(GF("LA"), host);
String ipadd; ipadd.reserve(16);
ipadd = streamReadUntil('\r');
IPAddress ip;
ip.fromString(ipadd);
return modemConnect(ip, port);
return modemConnect(ip, port, mux, isUDP);
}
int modemConnect(IPAddress ip, uint16_t port, uint8_t mux = 1) {
int modemConnect(IPAddress ip, uint16_t port, uint8_t mux = 1, bool isUDP=false) {
String host; host.reserve(16);
host += ip[0];
host += ".";
@ -493,6 +483,13 @@ private:
host += ip[2];
host += ".";
host += ip[3];
if (isUDP) {
sendAT(GF("IP"), 0); // Put in UDP mode
waitResponse();
} else {
sendAT(GF("IP"), 1); // Put in TCP mode
waitResponse();
}
sendAT(GF("DL"), host);
waitResponse();
sendAT(GF("DE"), String(port, HEX));


Loading…
Cancel
Save