mirror of
				https://github.com/KevinMidboe/TinyGSM.git
				synced 2025-10-29 18:00:18 +00:00 
			
		
		
		
	Improve compatibility with SIM900
This commit is contained in:
		| @@ -63,16 +63,15 @@ enum RegStatus { | ||||
|  | ||||
| class TinyGsm | ||||
| { | ||||
|   typedef TinyGsmFifo<uint8_t, TINY_GSM_RX_BUFFER> RxFifo; | ||||
|  | ||||
| #ifdef GSM_DEBUG | ||||
|   template<typename T> | ||||
|   void DBG(T last) { | ||||
|   static void DBG(T last) { | ||||
|     GSM_DEBUG.println(last); | ||||
|   } | ||||
|  | ||||
|   template<typename T, typename... Args> | ||||
|   void DBG(T head, Args... tail) { | ||||
|   static void DBG(T head, Args... tail) { | ||||
|     GSM_DEBUG.print(head); | ||||
|     GSM_DEBUG.print(' '); | ||||
|     DBG(tail...); | ||||
| @@ -146,7 +145,9 @@ public: | ||||
|   } | ||||
|  | ||||
|   virtual int available() { | ||||
|     if (!rx.size()) { | ||||
|       at->maintain(); | ||||
|     } | ||||
|     return rx.size() + sock_available; | ||||
|   } | ||||
|  | ||||
| @@ -184,7 +185,9 @@ public: | ||||
|   virtual void flush() { at->stream.flush(); } | ||||
|  | ||||
|   virtual uint8_t connected() { | ||||
|     at->maintain(); | ||||
|     if (available()) { | ||||
|       return true; | ||||
|     } | ||||
|     return sock_connected; | ||||
|   } | ||||
|   virtual operator bool() { return connected(); } | ||||
| @@ -227,7 +230,7 @@ public: | ||||
|  | ||||
|   void maintain() { | ||||
|     while (stream.available()) { | ||||
|       waitResponse(10); | ||||
|       waitResponse(10, NULL, NULL); | ||||
|     } | ||||
|   } | ||||
|  | ||||
| @@ -367,8 +370,40 @@ public: | ||||
|   bool gprsConnect(const char* apn, const char* user, const char* pwd) { | ||||
|     gprsDisconnect(); | ||||
|  | ||||
|     // AT+CGATT? | ||||
|     // AT+CGATT=1 | ||||
|     sendAT(GF("+SAPBR=3,1,\"Contype\",\"GPRS\"")); | ||||
|     waitResponse(); | ||||
|  | ||||
|     sendAT(GF("+SAPBR=3,1,\"APN\",\""), apn, '"'); | ||||
|     waitResponse(); | ||||
|  | ||||
|     if (user) { | ||||
|       sendAT(GF("+SAPBR=3,1,\"USER\",\""), user, '"'); | ||||
|       waitResponse(); | ||||
|     } | ||||
|     if (pwd) { | ||||
|       sendAT(GF("+SAPBR=3,1,\"PWD\",\""), pwd, '"'); | ||||
|       waitResponse(); | ||||
|     } | ||||
|  | ||||
|     sendAT(GF("+CGDCONT=1,\"IP\",\""), apn, '"'); | ||||
|     waitResponse(); | ||||
|  | ||||
|     sendAT(GF("+CGACT=1,1")); | ||||
|     waitResponse(60000L); | ||||
|  | ||||
|     // Open a GPRS context | ||||
|     sendAT(GF("+SAPBR=1,1")); | ||||
|     waitResponse(85000L); | ||||
|     // Query the GPRS context | ||||
|     sendAT(GF("+SAPBR=2,1")); | ||||
|     if (waitResponse(30000L) != 1) | ||||
|       return false; | ||||
|  | ||||
|     sendAT(GF("+CGATT=1")); | ||||
|     if (waitResponse(60000L) != 1) | ||||
|       return false; | ||||
|  | ||||
|     // TODO: wait AT+CGATT? | ||||
|  | ||||
|     sendAT(GF("+CIPMUX=1")); | ||||
|     if (waitResponse() != 1) { | ||||
| @@ -549,38 +584,45 @@ private: | ||||
|                        GsmConstStr r1=GFP(GSM_OK), GsmConstStr r2=GFP(GSM_ERROR), | ||||
|                        GsmConstStr r3=NULL, GsmConstStr r4=NULL, GsmConstStr r5=NULL) | ||||
|   { | ||||
|     /*String r1s(r1); r1s.trim(); | ||||
|     String r2s(r2); r2s.trim(); | ||||
|     String r3s(r3); r3s.trim(); | ||||
|     String r4s(r4); r4s.trim(); | ||||
|     String r5s(r5); r5s.trim(); | ||||
|     DBG("### ..:", r1s, ",", r2s, ",", r3s, ",", r4s, ",", r5s);*/ | ||||
|     data.reserve(64); | ||||
|     bool gotNewData = false; | ||||
|     int index = 0; | ||||
|     for (unsigned long start = millis(); millis() - start < timeout; ) { | ||||
|     unsigned long startMillis = millis(); | ||||
|     do { | ||||
|       while (stream.available() > 0) { | ||||
|         int a = streamRead(); | ||||
|         if (a <= 0) continue; // Skip 0x00 bytes, just in case | ||||
|         data += (char)a; | ||||
|         if (r1 && data.indexOf(r1) >= 0) { | ||||
|         if (r1 && data.endsWith(r1)) { | ||||
|           index = 1; | ||||
|           goto finish; | ||||
|         } else if (r2 && data.indexOf(r2) >= 0) { | ||||
|         } else if (r2 && data.endsWith(r2)) { | ||||
|           index = 2; | ||||
|           goto finish; | ||||
|         } else if (r3 && data.indexOf(r3) >= 0) { | ||||
|         } else if (r3 && data.endsWith(r3)) { | ||||
|           index = 3; | ||||
|           goto finish; | ||||
|         } else if (r4 && data.indexOf(r4) >= 0) { | ||||
|         } else if (r4 && data.endsWith(r4)) { | ||||
|           index = 4; | ||||
|           goto finish; | ||||
|         } else if (r5 && data.indexOf(r5) >= 0) { | ||||
|         } else if (r5 && data.endsWith(r5)) { | ||||
|           index = 5; | ||||
|           goto finish; | ||||
|         } else if (data.indexOf(GF(GSM_NL "+CIPRXGET: 1,1" GSM_NL)) >= 0) { //TODO: use mux | ||||
|         } else if (data.endsWith(GF(GSM_NL "+CIPRXGET: 1,1" GSM_NL))) { //TODO: use mux | ||||
|           gotNewData = true; | ||||
|           data = ""; | ||||
|         } else if (data.indexOf(GF(GSM_NL "1, CLOSED" GSM_NL)) >= 0) { //TODO: use mux | ||||
|         } else if (data.endsWith(GF(GSM_NL "1, CLOSED" GSM_NL))) { //TODO: use mux | ||||
|           sockets[1]->sock_connected = false; | ||||
|           data = ""; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     } while (millis() - startMillis < timeout); | ||||
| finish: | ||||
|     if (!index) { | ||||
|       if (data.length()) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user