diff --git a/TinyGsmClientESP8266.h b/TinyGsmClientESP8266.h index 33017af..3dfffac 100644 --- a/TinyGsmClientESP8266.h +++ b/TinyGsmClientESP8266.h @@ -208,32 +208,38 @@ public: */ /* - * Generic network functions + * Generic network functions */ int getSignalQuality() { - sendAT(GF("+CWLAP=\""), _ssid, GF("\"")); - DBG(GSM_NL, "<<< "); - streamSkipUntil(':'); - streamSkipUntil(','); - streamSkipUntil(','); - streamSkipUntil(','); - String res2 = streamReadUntil(','); - streamSkipUntil(')'); + sendAT(GF("+CWJAP_CUR?")); + int res1 = waitResponse(GF("No AP"), GF("+CWJAP_CUR:")); + if (res1 != 2){ + waitResponse(); + return 0; + } + streamSkipUntil(','); // Skip SSID + streamSkipUntil(','); // Skip BSSID/MAC address + streamSkipUntil(','); // Skip Chanel number + int res2 = stream.parseInt(); // Read RSSI + DBG(res2); waitResponse(); - return res2.toInt(); + return res2; } bool waitForNetwork(unsigned long timeout = 60000L) { for (unsigned long start = millis(); millis() - start < timeout; ) { sendAT(GF("+CIPSTATUS")); - DBG(GSM_NL, "<<< "); - String res1 = streamReadUntil(':'); - String res2 = streamReadUntil(*GSM_NL); - waitResponse(); - if (res2 == GF("2") || res2 == GF("3") || res2 == GF("4")) { - return true; + int res1 = waitResponse(3000, GF("busy p..."), GF("STATUS:")); + if (res1 == 2){ + int res2 = waitResponse(GFP(GSM_ERROR), GF("2"), GF("3"), GF("4"), GF("5")); + if (res2 == 2 || res2 == 3 || res2 == 4) return true; } + // status of ESP8266 station interface + // 2 : ESP8266 station connected to an AP and has obtained IP + // 3 : ESP8266 station created a TCP or UDP transmission + // 4 : the TCP or UDP transmission of ESP8266 station disconnected (but AP is connected) + // 5 : ESP8266 station did NOT connect to an AP delay(1000); } return false; @@ -244,8 +250,6 @@ public: */ bool networkConnect(const char* ssid, const char* pwd) { - _ssid = ssid; - sendAT(GF("+CIPMUX=1")); if (waitResponse() != 1) { return false; @@ -459,7 +463,6 @@ private: private: Stream& stream; GsmClient* sockets[5]; - const char* _ssid; }; typedef TinyGsm::GsmClient TinyGsmClient;