diff --git a/src/TinyGsmClientSIM7000.h b/src/TinyGsmClientSIM7000.h index 68a57d3..4222a1d 100644 --- a/src/TinyGsmClientSIM7000.h +++ b/src/TinyGsmClientSIM7000.h @@ -140,6 +140,51 @@ class TinyGsmSim7000 : public TinyGsmModem, }; */ +public: + boolean isValidNumber(String str) { + if (!(str.charAt(0) == '+' || str.charAt(0) == '-' || + isDigit(str.charAt(0)))) + return false; + + for (byte i = 1; i < str.length(); i++) { + if (!(isDigit(str.charAt(i)) || str.charAt(i) == '.')) { return false; } + } + return true; + } + + String ShowNTPError(byte error) { + switch (error) { + case 1: return "Network time synchronization is successful"; + case 61: return "Network error"; + case 62: return "DNS resolution error"; + case 63: return "Connection error"; + case 64: return "Service response error"; + case 65: return "Service response timeout"; + default: return "Unknown error: " + String(error); + } + } + + byte NTPServerSync(String server = "pool.ntp.org", byte TimeZone = 3) { + // Set GPRS bearer profile to associate with NTP sync + sendAT(GF("+CNTPCID=1")); + if (waitResponse(10000L) != 1) { return -1; } + + // Set NTP server and timezone + sendAT(GF("+CNTP="), server, ',', String(TimeZone)); + if (waitResponse(10000L) != 1) { return -1; } + + // Request network synchronization + sendAT(GF("+CNTP")); + if (waitResponse(10000L, GF(GSM_NL "+CNTP:"))) { + String result = stream.readStringUntil('\n'); + result.trim(); + if (isValidNumber(result)) { return result.toInt(); } + } else { + return -1; + } + return -1; + } + /* * Constructor */