78 lines
2.2 KiB
C++
78 lines
2.2 KiB
C++
#include "network.h"
|
|
#include "WiFi.h"
|
|
#include "display.h"
|
|
#include "options.h"
|
|
#include "config.h"
|
|
#include "telnet.h"
|
|
|
|
Network network;
|
|
|
|
void syncTime() {
|
|
network.requestTimeSync(true);
|
|
}
|
|
|
|
void Network::begin() {
|
|
config.initNetwork();
|
|
if (config.ssidsCount == 0) {
|
|
raiseSoftAP();
|
|
return;
|
|
}
|
|
byte ls = (config.store.lastSSID == 0 || config.store.lastSSID > config.ssidsCount) ? 0 : config.store.lastSSID - 1;
|
|
byte startedls = ls;
|
|
byte errcnt = 0;
|
|
WiFi.mode(WIFI_STA);
|
|
char buf[40] = { 0 };
|
|
while (true) {
|
|
Serial.printf("Attempt to connect to %s\n", config.ssids[ls].ssid);
|
|
snprintf(buf, sizeof(buf) - 1, "ATTEMPT TO %s", config.ssids[ls].ssid);
|
|
display.bootString(buf, 110);
|
|
WiFi.begin(config.ssids[ls].ssid, config.ssids[ls].password);
|
|
strcpy(buf, ".");
|
|
while (WiFi.status() != WL_CONNECTED) {
|
|
delay(500);
|
|
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
|
|
strcat(buf, ".");
|
|
display.bootString(buf, 90);
|
|
errcnt++;
|
|
if (errcnt > 16) {
|
|
errcnt = 0;
|
|
ls++;
|
|
if (ls > config.ssidsCount - 1) ls = 0;
|
|
break;
|
|
}
|
|
}
|
|
if (WiFi.status() != WL_CONNECTED && ls == startedls) {
|
|
raiseSoftAP();
|
|
return;
|
|
}
|
|
if (WiFi.status() == WL_CONNECTED) {
|
|
config.setLastSSID(ls + 1);
|
|
break;
|
|
}
|
|
}
|
|
digitalWrite(LED_BUILTIN, LOW);
|
|
status = CONNECTED;
|
|
requestTimeSync();
|
|
ntimer.attach_ms(TSYNC_DELAY, syncTime);
|
|
}
|
|
|
|
void Network::requestTimeSync(bool withTelnetOutput) {
|
|
configTime(config.store.tzHour * 3600 + config.store.tzMin * 60, config.getTimezoneOffset(), "pool.ntp.org", "ru.pool.ntp.org");
|
|
if (withTelnetOutput) {
|
|
getLocalTime(&timeinfo);
|
|
char timeStringBuff[50];
|
|
strftime(timeStringBuff, sizeof(timeStringBuff), "%Y-%m-%dT%H:%M:%S", &timeinfo);
|
|
if (config.store.tzHour < 0) {
|
|
telnet.printf(0, "##SYS.DATE#: %s%03d:%02d\n> ", timeStringBuff, config.store.tzHour, config.store.tzMin);
|
|
} else {
|
|
telnet.printf(0, "##SYS.DATE#: %s+%02d:%02d\n> ", timeStringBuff, config.store.tzHour, config.store.tzMin);
|
|
}
|
|
}
|
|
}
|
|
|
|
void Network::raiseSoftAP() {
|
|
WiFi.mode(WIFI_AP);
|
|
WiFi.softAP(apSsid, apPassword);
|
|
status = SOFT_AP;
|
|
}
|