@@ -1114,6 +1114,130 @@ void ESP8266::attach(Callback<void()> status_cb)
11141114 _conn_stat_cb = status_cb;
11151115}
11161116
1117+ bool ESP8266::set_sntp_config (bool enable, int timezone, const char *server0,
1118+ const char *server1, const char *server2)
1119+ {
1120+ bool done = false ;
1121+ _smutex.lock ();
1122+ if ((server0 == nullptr || server0[0 ] == ' \0 ' )) {
1123+ done = _parser.send (" AT+CIPSNTPCFG=%d,%d" ,
1124+ enable ? 1 : 0 , timezone);
1125+ } else if ((server0 != nullptr || server0[0 ] != ' \0 ' )
1126+ && (server1 == nullptr && server1[0 ] == ' \0 ' )) {
1127+ done = _parser.send (" AT+CIPSNTPCFG=%d,%d,%s" ,
1128+ enable ? 1 : 0 , timezone, server0);
1129+ } else if ((server0 != nullptr || server0[0 ] != ' \0 ' )
1130+ && (server1 != nullptr && server1[0 ] != ' \0 ' )
1131+ && (server2 == nullptr && server2[0 ] == ' \0 ' )) {
1132+ done = _parser.send (" AT+CIPSNTPCFG=%d,%d,%s,%s" ,
1133+ enable ? 1 : 0 , timezone, server0, server1);
1134+ } else {
1135+ done = _parser.send (" AT+CIPSNTPCFG=%d,%d,%s,%s,%s" ,
1136+ enable ? 1 : 0 , timezone, server0, server1, server2);
1137+ }
1138+ done &= _parser.recv (" OK\n " );
1139+ _smutex.unlock ();
1140+ return done;
1141+ }
1142+
1143+ bool ESP8266::get_sntp_config (bool *enable, int *timezone, char *server0,
1144+ char *server1, char *server2)
1145+ {
1146+ _smutex.lock ();
1147+ unsigned int tmp;
1148+ bool done = _parser.send (" AT+CIPSNTPCFG?" )
1149+ && _parser.scanf (" +CIPSNTPCFG:%d,%d,\" %32[^\" ]\" ,\" %32[^\" ]\" ,\" %32[^\" ]\" " ,
1150+ &tmp, timezone, server0, server1, server2)
1151+ && _parser.recv (" OK\n " );
1152+ _smutex.unlock ();
1153+ *enable = tmp ? true : false ;
1154+ return done;
1155+ }
1156+
1157+ bool ESP8266::get_sntp_time (std::tm *t)
1158+ {
1159+ _smutex.lock ();
1160+ char buf[25 ]; // Thu Aug 04 14:48:05 2016 (always 24 chars + \0)
1161+ memset (buf, 0 , 25 );
1162+
1163+ bool done = _parser.send (" AT+CIPSNTPTIME?" )
1164+ && _parser.scanf (" +CIPSNTPTIME:%24c" , &buf)
1165+ && _parser.recv (" OK\n " );
1166+ _smutex.unlock ();
1167+
1168+ if (!done) {
1169+ return false ;
1170+ }
1171+
1172+ char wday[4 ] = " \0 " , mon[4 ] = " \0 " ;
1173+ int mday = 0 , hour = 0 , min = 0 , sec = 0 , year = 0 ;
1174+ int ret = sscanf (buf, " %s %s %d %d:%d:%d %d" ,
1175+ wday, mon, &mday, &hour, &min, &sec, &year);
1176+ if (ret != 7 ) {
1177+ tr_debug (" get_sntp_time(): sscanf returned %d" , ret);
1178+ return false ;
1179+ }
1180+
1181+ t->tm_sec = sec;
1182+ t->tm_min = min;
1183+ t->tm_hour = hour;
1184+ t->tm_mday = mday;
1185+
1186+ t->tm_wday = 0 ;
1187+ if (strcmp (wday, " Mon" ) == 0 ) {
1188+ t->tm_wday = 0 ;
1189+ } else if (strcmp (wday, " Tue" ) == 0 ) {
1190+ t->tm_wday = 1 ;
1191+ } else if (strcmp (wday, " Wed" ) == 0 ) {
1192+ t->tm_wday = 2 ;
1193+ } else if (strcmp (wday, " Thu" ) == 0 ) {
1194+ t->tm_wday = 3 ;
1195+ } else if (strcmp (wday, " Fri" ) == 0 ) {
1196+ t->tm_wday = 4 ;
1197+ } else if (strcmp (wday, " Sat" ) == 0 ) {
1198+ t->tm_wday = 5 ;
1199+ } else if (strcmp (wday, " Sun" ) == 0 ) {
1200+ t->tm_wday = 6 ;
1201+ } else {
1202+ tr_debug (" get_sntp_time(): Invalid weekday: %s" , wday);
1203+ return false ;
1204+ }
1205+
1206+ t->tm_mon = 0 ;
1207+ if (strcmp (mon, " Jan" ) == 0 ) {
1208+ t->tm_mon = 0 ;
1209+ } else if (strcmp (mon, " Feb" ) == 0 ) {
1210+ t->tm_mon = 1 ;
1211+ } else if (strcmp (mon, " Mar" ) == 0 ) {
1212+ t->tm_mon = 2 ;
1213+ } else if (strcmp (mon, " Apr" ) == 0 ) {
1214+ t->tm_mon = 3 ;
1215+ } else if (strcmp (mon, " May" ) == 0 ) {
1216+ t->tm_mon = 4 ;
1217+ } else if (strcmp (mon, " Jun" ) == 0 ) {
1218+ t->tm_mon = 5 ;
1219+ } else if (strcmp (mon, " Jul" ) == 0 ) {
1220+ t->tm_mon = 6 ;
1221+ } else if (strcmp (mon, " Aug" ) == 0 ) {
1222+ t->tm_mon = 7 ;
1223+ } else if (strcmp (mon, " Sep" ) == 0 ) {
1224+ t->tm_mon = 8 ;
1225+ } else if (strcmp (mon, " Oct" ) == 0 ) {
1226+ t->tm_mon = 9 ;
1227+ } else if (strcmp (mon, " Nov" ) == 0 ) {
1228+ t->tm_mon = 10 ;
1229+ } else if (strcmp (mon, " Dec" ) == 0 ) {
1230+ t->tm_mon = 11 ;
1231+ } else {
1232+ tr_debug (" get_sntp_time(): Invalid month: %s" , mon);
1233+ return false ;
1234+ }
1235+
1236+ t->tm_year = (year - 1900 );
1237+
1238+ return true ;
1239+ }
1240+
11171241bool ESP8266::_recv_ap (nsapi_wifi_ap_t *ap)
11181242{
11191243 int sec = NSAPI_SECURITY_UNKNOWN;
0 commit comments