From 7d6108e03c2822e2aabaf88700606a2200586194 Mon Sep 17 00:00:00 2001 From: Sara Damiano Date: Thu, 18 Jul 2019 10:32:49 -0400 Subject: [PATCH] Modify 5360 based on guide for 7600 --- library.json | 2 +- library.properties | 2 +- src/TinyGsmClientSIM5360.h | 85 ++++++++++++++++++++++---------------- src/TinyGsmCommon.h | 2 +- 4 files changed, 53 insertions(+), 38 deletions(-) diff --git a/library.json b/library.json index 993935c..c38e3ee 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "TinyGSM", - "version": "0.9.2", + "version": "0.9.3", "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", "authors": diff --git a/library.properties b/library.properties index c5e34f5..8b6dae2 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=TinyGSM -version=0.9.2 +version=0.9.3 author=Volodymyr Shymanskyy maintainer=Volodymyr Shymanskyy sentence=A small Arduino library for GPRS modules, that just works. diff --git a/src/TinyGsmClientSIM5360.h b/src/TinyGsmClientSIM5360.h index 0f0a2e5..8319f48 100644 --- a/src/TinyGsmClientSIM5360.h +++ b/src/TinyGsmClientSIM5360.h @@ -312,24 +312,52 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK() */ bool gprsConnect(const char* apn, const char* user = NULL, const char* pwd = NULL) { - gprsDisconnect(); + gprsDisconnect(); // Make sure we're not connected first // Define the PDP context + + // Using CGDCONT sets up an "external" PCP context, i.e. a data connection + // using the external IP stack (e.g. Windows dial up) and PPP link over the + // serial interface. Is this preferred? + + // Set the authentication + if (user && strlen(user) > 0) { + sendAT(GF("+CGAUTH=1,0,\""), user, GF("\",\""), pwd, '"'); + waitResponse(); + } + + // Define PDP context 1 + sendAT(GF("+CGDCONT=1,\"IP\",\""), apn, '"'); + waitResponse(); + + sendAT(GF("+CGACT=1,1")); // activate PDP profile/context 1 + if (waitResponse(75000L) != 1) { + return false; + } + // Using CGSOCKCONT commands defines a PDP context for Embedded TCP/IP application // CGDCONT commands could be used for an external PDP context + + // ?? Unsure if this step is needed - redundant with +CGDCONT sendAT(GF("+CGSOCKCONT=1,\"IP\",\""), apn, '"'); waitResponse(); // Set the user name and password + // ?? Unsure if this step is needed - redundant with +CGAUTH if (user && strlen(user) > 0) { sendAT(GF("+CSOCKAUTH=1,1,\""), user, "\",\"", pwd, '"'); waitResponse(); } // Set active PDP context’s profile number + // ?? Unsure if this step is needed - redundant with +CGAUTH sendAT(GF("+CSOCKSETPN=1")); waitResponse(); + // Set Sending Mode - send without waiting for peer TCP ACK + sendAT(GF("+CIPSENDMODE=0")); + waitResponse(); + // Configure TCP parameters //AT+CIPCCFG= [][,[][,[][,[][,]][,[[][,[]]]]]]]] // NmRetry = number of retransmission to be made for an IP packet = 10 (default) @@ -353,39 +381,18 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK() sendAT(GF("+CIPTIMEOUT="), 75000, ',', 15000, ',', 15000); waitResponse(); - // Set to get data manually - sendAT(GF("+CIPRXGET=1")); - if (waitResponse() != 1) { - return false; - } - - sendAT(GF("+CGATT=1")); // attach to GPRS + // attach to GPRS + sendAT(GF("+CGATT=1")); if (waitResponse(360000L) != 1) { return false; } - // Using CGDCONT sets up an "external" PCP context, i.e. a data connection - // using the external IP stack (e.g. Windows dial up) and PPP link over the - // serial interface. Is this preferred? - - if (user && strlen(user) > 0) { - sendAT(GF("+CGAUTH=1,0,\""), user, GF("\",\""), pwd, '"'); // Set the authentication - waitResponse(); - } - - sendAT(GF("+CGDCONT=1,\"IP\",\""), apn, '"'); // Define PDP context 1 - waitResponse(); - - sendAT(GF("+CGACT=1,1")); // activate PDP profile/context 1 - if (waitResponse(75000L) != 1) { - return false; - } - - // Actually open network socket - // NOTE: AT command manual hints this might be depricated or other options preferred - // but all application notes use it (and nothing states what *IS* preferred) + // Start the socket service + // Response may be an immediate "+NETOPEN: 0,0\r\n\r\nOK\r\n" followed later by + // a URC "+NETOPEN: 1". We to ignore any immediate response and wait for the + // URC to show it's realy connected. sendAT(GF("+NETOPEN")); - if (waitResponse(75000L) != 1) { + if (waitResponse(75000L, GF(GSM_NL "+NETOPEN: 1")) != 1) { return false; } @@ -394,7 +401,8 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK() bool gprsDisconnect() { - // Close the network (note, all sockets should be closed first) + // Stop the socket service + // Note: all sockets should be closed first sendAT(GF("+NETCLOSE")); if (waitResponse(60000L) != 1) return false; @@ -422,7 +430,8 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK() if (res != 1) return false; - sendAT(GF("+IPADDR")); // Make sure we have a local IP address + sendAT(GF("+IPADDR")); // Inquire Socket PDP address + // sendAT(GF("+CGPADDR=1")); // Show PDP address if (waitResponse() != 1) return false; @@ -434,7 +443,8 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK() */ String getLocalIP() { - sendAT(GF("+IPADDR")); + sendAT(GF("+IPADDR")); // Inquire Socket PDP address + // sendAT(GF("+CGPADDR=1")); // Show PDP address String res; if (waitResponse(10000L, res) != 1) { return ""; @@ -445,7 +455,7 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK() return res; } - IPAddress localIP() { + CGPADDR=1ess localIP() { return TinyGsmIpFromString(getLocalIP()); } @@ -616,8 +626,13 @@ TINY_GSM_MODEM_WAIT_FOR_NETWORK() protected: bool modemConnect(const char* host, uint16_t port, uint8_t mux, - bool ssl = false, int timeout_s = 75) - { + bool ssl = false, int timeout_s = 75) { + // Make sure we'll be getting data manually on this connection + sendAT(GF("+CIPRXGET=1")); + if (waitResponse() != 1) { + return false; + } + // Establish connection in multi-socket mode sendAT(GF("+CIOPEN="), mux, ',', GF("\"TCP"), GF("\",\""), host, GF("\","), port); if (waitResponse(GF(GSM_NL "+CIOPEN:")) != 1) { // reply is +USOCR: ## of socket created diff --git a/src/TinyGsmCommon.h b/src/TinyGsmCommon.h index e63702f..12cc1c1 100644 --- a/src/TinyGsmCommon.h +++ b/src/TinyGsmCommon.h @@ -10,7 +10,7 @@ #define TinyGsmCommon_h // The current library version number -#define TINYGSM_VERSION "0.9.2" +#define TINYGSM_VERSION "0.9.3" #if defined(SPARK) || defined(PARTICLE) #include "Particle.h"