Browse Source

Fix UBLOX implementation

v_master
Volodymyr Shymanskyy 6 years ago
parent
commit
d6efbf7328
1 changed files with 26 additions and 9 deletions
  1. +26
    -9
      src/TinyGsmClientU201.h

+ 26
- 9
src/TinyGsmClientU201.h View File

@ -22,6 +22,7 @@
#define GSM_NL "\r\n" #define GSM_NL "\r\n"
static const char GSM_OK[] TINY_GSM_PROGMEM = "OK" GSM_NL; static const char GSM_OK[] TINY_GSM_PROGMEM = "OK" GSM_NL;
static const char GSM_ERROR[] TINY_GSM_PROGMEM = "ERROR" GSM_NL; static const char GSM_ERROR[] TINY_GSM_PROGMEM = "ERROR" GSM_NL;
static const char GSM_CME_ERROR[] TINY_GSM_PROGMEM = GSM_NL "+CME ERROR:";
enum SimStatus { enum SimStatus {
SIM_ERROR = 0, SIM_ERROR = 0,
@ -412,7 +413,9 @@ public:
gprsDisconnect(); gprsDisconnect();
sendAT(GF("+CGATT=1")); sendAT(GF("+CGATT=1"));
waitResponse(60000L);
if (waitResponse(60000L) != 1) {
return false;
}
sendAT(GF("+UPSD=0,1,\""), apn, '"'); sendAT(GF("+UPSD=0,1,\""), apn, '"');
waitResponse(); waitResponse();
@ -430,7 +433,9 @@ public:
waitResponse(); waitResponse();
sendAT(GF("+UPSDA=0,3")); sendAT(GF("+UPSDA=0,3"));
waitResponse(60000L);
if (waitResponse(60000L) != 1) {
return false;
}
// Open a GPRS context // Open a GPRS context
sendAT(GF("+UPSND=0,8")); sendAT(GF("+UPSND=0,8"));
@ -553,6 +558,14 @@ protected:
waitResponse(); waitResponse();
} }
// Enable NODELAY
sendAT(GF("+USOSO="), *mux, GF(",6,1,1"));
waitResponse();
// Enable KEEPALIVE, 30 sec
//sendAT(GF("+USOSO="), *mux, GF(",6,2,30000"));
//waitResponse();
sendAT(GF("+USOCO="), *mux, ",\"", host, "\",", port); sendAT(GF("+USOCO="), *mux, ",\"", host, "\",", port);
int rsp = waitResponse(75000L); int rsp = waitResponse(75000L);
return (1 == rsp); return (1 == rsp);
@ -571,7 +584,9 @@ protected:
return 0; return 0;
} }
streamSkipUntil(','); // Skip mux streamSkipUntil(','); // Skip mux
return stream.readStringUntil('\n').toInt();
int sent = stream.readStringUntil('\n').toInt();
waitResponse();
return sent;
} }
size_t modemRead(size_t size, uint8_t mux) { size_t modemRead(size_t size, uint8_t mux) {
@ -594,7 +609,7 @@ protected:
} }
size_t modemGetAvailable(uint8_t mux) { size_t modemGetAvailable(uint8_t mux) {
sendAT(GF("+USORD="), mux, ',', 0);
sendAT(GF("+USORD="), mux, ",0");
size_t result = 0; size_t result = 0;
if (waitResponse(GF(GSM_NL "+USORD:")) == 1) { if (waitResponse(GF(GSM_NL "+USORD:")) == 1) {
streamSkipUntil(','); // Skip mux streamSkipUntil(','); // Skip mux
@ -615,7 +630,7 @@ protected:
streamSkipUntil(','); // Skip mux streamSkipUntil(','); // Skip mux
streamSkipUntil(','); // Skip type streamSkipUntil(','); // Skip type
int result = stream.readStringUntil('\n').toInt(); int result = stream.readStringUntil('\n').toInt();
waitResponse();
return result != 0; return result != 0;
} }
@ -654,7 +669,7 @@ public:
// TODO: Optimize this! // TODO: Optimize this!
uint8_t waitResponse(uint32_t timeout, String& data, uint8_t waitResponse(uint32_t timeout, String& data,
GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR), GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR),
GsmConstStr r3=NULL, GsmConstStr r4=NULL, GsmConstStr r5=NULL)
GsmConstStr r3=GFP(GSM_CME_ERROR), GsmConstStr r4=NULL, GsmConstStr r5=NULL)
{ {
/*String r1s(r1); r1s.trim(); /*String r1s(r1); r1s.trim();
String r2s(r2); r2s.trim(); String r2s(r2); r2s.trim();
@ -688,17 +703,19 @@ 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');
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;
} }
data = ""; data = "";
DBG("### Got Data:", 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]) {
sockets[mux]->sock_connected = false; sockets[mux]->sock_connected = false;
} }
data = ""; data = "";
DBG("### Closed: ", mux);
DBG("### Closed:", mux);
} }
} }
} while (millis() - startMillis < timeout); } while (millis() - startMillis < timeout);
@ -715,14 +732,14 @@ finish:
uint8_t waitResponse(uint32_t timeout, uint8_t waitResponse(uint32_t timeout,
GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR), GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR),
GsmConstStr r3=NULL, GsmConstStr r4=NULL, GsmConstStr r5=NULL)
GsmConstStr r3=GFP(GSM_CME_ERROR), GsmConstStr r4=NULL, GsmConstStr r5=NULL)
{ {
String data; String data;
return waitResponse(timeout, data, r1, r2, r3, r4, r5); return waitResponse(timeout, data, r1, r2, r3, r4, r5);
} }
uint8_t waitResponse(GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR), uint8_t waitResponse(GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR),
GsmConstStr r3=NULL, GsmConstStr r4=NULL, GsmConstStr r5=NULL)
GsmConstStr r3=GFP(GSM_CME_ERROR), GsmConstStr r4=NULL, GsmConstStr r5=NULL)
{ {
return waitResponse(1000, r1, r2, r3, r4, r5); return waitResponse(1000, r1, r2, r3, r4, r5);
} }


Loading…
Cancel
Save