refactor: optimizing work with network

This commit is contained in:
Yurii
2024-06-14 18:18:43 +03:00
parent 45e2e0334e
commit 7779076498
4 changed files with 25 additions and 8 deletions

View File

@@ -13,6 +13,7 @@ void NetworkConnection::setup(bool useDhcp) {
void NetworkConnection::reset() { void NetworkConnection::reset() {
status = Status::NONE; status = Status::NONE;
rawDisconnectReason = 0;
disconnectReason = DisconnectReason::NONE; disconnectReason = DisconnectReason::NONE;
} }
@@ -33,22 +34,25 @@ void NetworkConnection::onEvent(System_Event_t *event) {
switch (event->event) { switch (event->event) {
case EVENT_STAMODE_CONNECTED: case EVENT_STAMODE_CONNECTED:
status = useDhcp ? Status::CONNECTING : Status::CONNECTED; status = useDhcp ? Status::CONNECTING : Status::CONNECTED;
rawDisconnectReason = 0;
disconnectReason = DisconnectReason::NONE; disconnectReason = DisconnectReason::NONE;
break; break;
case EVENT_STAMODE_GOT_IP: case EVENT_STAMODE_GOT_IP:
status = Status::CONNECTED; status = Status::CONNECTED;
rawDisconnectReason = 0;
disconnectReason = DisconnectReason::NONE; disconnectReason = DisconnectReason::NONE;
break; break;
case EVENT_STAMODE_DHCP_TIMEOUT: case EVENT_STAMODE_DHCP_TIMEOUT:
status = Status::DISCONNECTED; status = Status::DISCONNECTED;
rawDisconnectReason = 0;
disconnectReason = DisconnectReason::DHCP_TIMEOUT; disconnectReason = DisconnectReason::DHCP_TIMEOUT;
break; break;
case EVENT_STAMODE_DISCONNECTED: case EVENT_STAMODE_DISCONNECTED:
status = Status::DISCONNECTED; status = Status::DISCONNECTED;
rawDisconnectReason = event->event_info.disconnected.reason;
disconnectReason = convertDisconnectReason(event->event_info.disconnected.reason); disconnectReason = convertDisconnectReason(event->event_info.disconnected.reason);
// https://github.com/esp8266/Arduino/blob/d5eb265f78bff9deb7063d10030a02d021c8c66c/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp#L231 // https://github.com/esp8266/Arduino/blob/d5eb265f78bff9deb7063d10030a02d021c8c66c/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp#L231
@@ -63,6 +67,7 @@ void NetworkConnection::onEvent(System_Event_t *event) {
auto& src = event->event_info.auth_change; auto& src = event->event_info.auth_change;
if ((src.old_mode != AUTH_OPEN) && (src.new_mode == AUTH_OPEN)) { if ((src.old_mode != AUTH_OPEN) && (src.new_mode == AUTH_OPEN)) {
status = Status::DISCONNECTED; status = Status::DISCONNECTED;
rawDisconnectReason = 0;
disconnectReason = DisconnectReason::OTHER; disconnectReason = DisconnectReason::OTHER;
wifi_station_disconnect(); wifi_station_disconnect();
@@ -79,25 +84,27 @@ void NetworkConnection::onEvent(WiFiEvent_t event, WiFiEventInfo_t info) {
switch (event) { switch (event) {
case ARDUINO_EVENT_WIFI_STA_CONNECTED: case ARDUINO_EVENT_WIFI_STA_CONNECTED:
status = useDhcp ? Status::CONNECTING : Status::CONNECTED; status = useDhcp ? Status::CONNECTING : Status::CONNECTED;
rawDisconnectReason = 0;
disconnectReason = DisconnectReason::NONE; disconnectReason = DisconnectReason::NONE;
break; break;
case ARDUINO_EVENT_WIFI_STA_GOT_IP: case ARDUINO_EVENT_WIFI_STA_GOT_IP:
case ARDUINO_EVENT_WIFI_STA_GOT_IP6: case ARDUINO_EVENT_WIFI_STA_GOT_IP6:
status = Status::CONNECTED; status = Status::CONNECTED;
rawDisconnectReason = 0;
disconnectReason = DisconnectReason::NONE; disconnectReason = DisconnectReason::NONE;
break; break;
case ARDUINO_EVENT_WIFI_STA_LOST_IP: case ARDUINO_EVENT_WIFI_STA_LOST_IP:
status = Status::DISCONNECTED; status = Status::DISCONNECTED;
rawDisconnectReason = 0;
disconnectReason = DisconnectReason::DHCP_TIMEOUT; disconnectReason = DisconnectReason::DHCP_TIMEOUT;
break; break;
case ARDUINO_EVENT_WIFI_STA_DISCONNECTED: case ARDUINO_EVENT_WIFI_STA_DISCONNECTED:
status = Status::DISCONNECTED; status = Status::DISCONNECTED;
rawDisconnectReason = info.wifi_sta_disconnected.reason;
disconnectReason = convertDisconnectReason(info.wifi_sta_disconnected.reason); disconnectReason = convertDisconnectReason(info.wifi_sta_disconnected.reason);
break; break;
default: default:
@@ -148,3 +155,4 @@ NetworkConnection::DisconnectReason NetworkConnection::convertDisconnectReason(u
bool NetworkConnection::useDhcp = false; bool NetworkConnection::useDhcp = false;
NetworkConnection::Status NetworkConnection::status = Status::NONE; NetworkConnection::Status NetworkConnection::status = Status::NONE;
NetworkConnection::DisconnectReason NetworkConnection::disconnectReason = DisconnectReason::NONE; NetworkConnection::DisconnectReason NetworkConnection::disconnectReason = DisconnectReason::NONE;
uint8_t NetworkConnection::rawDisconnectReason = 0;

View File

@@ -27,6 +27,7 @@ namespace NetworkUtils {
static Status status; static Status status;
static DisconnectReason disconnectReason; static DisconnectReason disconnectReason;
static uint8_t rawDisconnectReason;
static void setup(bool useDhcp); static void setup(bool useDhcp);
static void setUseDhcp(bool value); static void setUseDhcp(bool value);

View File

@@ -212,7 +212,7 @@ namespace NetworkUtils {
} }
#endif*/ #endif*/
WiFi.disconnect(false, true); this->disconnect();
} }
if (!this->hasStaCredentials()) { if (!this->hasStaCredentials()) {
@@ -266,13 +266,17 @@ namespace NetworkUtils {
return false; return false;
} }
void disconnect() {
WiFi.disconnect(false, true);
}
void loop() { void loop() {
if (this->reconnectFlag) { if (this->reconnectFlag) {
this->delayCallback(5000); this->delayCallback(5000);
Log.sinfoln(FPSTR(L_NETWORK), F("Reconnecting...")); Log.sinfoln(FPSTR(L_NETWORK), F("Reconnecting..."));
this->reconnectFlag = false; this->reconnectFlag = false;
this->resetWifi(); this->disconnect();
NetworkConnection::reset(); NetworkConnection::reset();
this->delayCallback(1000); this->delayCallback(1000);
@@ -297,7 +301,7 @@ namespace NetworkUtils {
} }
if (this->isApEnabled() && millis() - this->connectedTime > this->reconnectInterval && !this->hasApClients()) { if (this->isApEnabled() && millis() - this->connectedTime > this->reconnectInterval && !this->hasApClients()) {
Log.sinfoln(FPSTR(L_NETWORK), F("Stop AP because connected, start only STA")); Log.sinfoln(FPSTR(L_NETWORK), F("Stop AP because STA connected"));
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
return; return;
@@ -348,7 +352,7 @@ namespace NetworkUtils {
NetworkConnection::reset(); NetworkConnection::reset();
if (!this->connect(true, this->connectionTimeout)) { if (!this->connect(true, this->connectionTimeout)) {
Log.straceln(FPSTR(L_NETWORK), F("Connection failed. Status: %d, reason: %d"), NetworkConnection::getStatus(), NetworkConnection::getDisconnectReason()); Log.straceln(FPSTR(L_NETWORK), F("Connection failed. Status: %d, reason: %d, raw reason: %d"), NetworkConnection::getStatus(), NetworkConnection::getDisconnectReason(), NetworkConnection::rawDisconnectReason);
} }
this->prevReconnectingTime = millis(); this->prevReconnectingTime = millis();

View File

@@ -623,6 +623,10 @@ protected:
if (this->stateWebServer()) { if (this->stateWebServer()) {
this->webServer->handleClient(); this->webServer->handleClient();
} }
if (!this->stateDnsServer() && !this->stateWebServer()) {
this->delay(250);
}
} }
bool isAuthRequired() { bool isAuthRequired() {