diff --git a/TinyGsmClientSIM800.h b/TinyGsmClientSIM800.h index ac50aec..f887fb8 100644 --- a/TinyGsmClientSIM800.h +++ b/TinyGsmClientSIM800.h @@ -250,6 +250,16 @@ public: return waitResponse() == 1; } + String getModemInfo() { + sendAT(GF("I")); + String res; + if (waitResponse(1000L, res) != 1) { + return ""; + } + res.trim(); + return res; + } + /* * Power functions */ @@ -494,17 +504,23 @@ public: } bool callNumber(const String& number) { - sendAT(GF("D"), number); - return waitResponse() == 1; + sendAT(GF("D"), number, ";"); + int status = waitResponse(60000L, GF("OK"), GF("BUSY"), GF("NO ANSWER"), GF("NO CARRIER")); + switch (status) { + case 1: return true; + case 2: + case 3: return false; + default: return false; + } } - bool callRedial() { - sendAT(GF("DL")); - return waitResponse() == 1; - } + //bool callRedial() { + // sendAT(GF("DL")); + // return waitResponse() == 1; + //} - bool callHangup(const String& number) { - sendAT(GF("H"), number); + bool callHangup() { + sendAT(GF("H")); return waitResponse() == 1; } @@ -512,7 +528,21 @@ public: * Messaging functions */ - void sendUSSD() TINY_GSM_ATTR_NOT_IMPLEMENTED; + String sendUSSD(const String& code) { + sendAT(GF("+CSCS=\"8859-1\"")); + waitResponse(); + sendAT(GF("+CUSD=1,\""), code, GF("\"")); + if (waitResponse() != 1) { + return ""; + } + if (waitResponse(10000L, GF(GSM_NL "+CUSD:")) != 1) { + return ""; + } + stream.readStringUntil('"'); + String res = stream.readStringUntil('"'); + stream.readStringUntil('\n'); + return res; + } bool sendSMS(const String& number, const String& text) { sendAT(GF("+CMGF=1")); @@ -588,9 +618,6 @@ public: } int getBattPercent() { - if (!autoBaud()) { - return false; - } sendAT(GF("+CBC")); if (waitResponse(GF(GSM_NL "+CBC:")) != 1) { return false;