From c7aa22ce6c62bd1c34eb94163e0debc9da1cadbd Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 13 Jul 2022 21:30:53 +0200 Subject: [PATCH] Renamed WifiSettings to NetworkSettings and implemented first ethernet initialization --- include/{WiFiSettings.h => NetworkSettings.h} | 8 ++- src/MqttSettings.cpp | 4 +- src/{WiFiSettings.cpp => NetworkSettings.cpp} | 67 ++++++++++++++++--- src/WebApi_network.cpp | 8 +-- src/main.cpp | 8 +-- 5 files changed, 71 insertions(+), 24 deletions(-) rename include/{WiFiSettings.h => NetworkSettings.h} (80%) rename src/{WiFiSettings.cpp => NetworkSettings.cpp} (71%) diff --git a/include/WiFiSettings.h b/include/NetworkSettings.h similarity index 80% rename from include/WiFiSettings.h rename to include/NetworkSettings.h index bd6a3922..78165a1f 100644 --- a/include/WiFiSettings.h +++ b/include/NetworkSettings.h @@ -2,11 +2,12 @@ #pragma once #include +#include #include -class WiFiSettingsClass { +class NetworkSettingsClass { public: - WiFiSettingsClass(); + NetworkSettingsClass(); void init(); void loop(); void applyConfig(); @@ -17,6 +18,7 @@ private: void setHostname(); void setStaticIp(); void setupMode(); + void NetworkEvent(WiFiEvent_t event); bool adminEnabled = true; bool forceDisconnection = false; int adminTimeoutCounter = 0; @@ -30,4 +32,4 @@ private: bool dnsServerStatus = false; }; -extern WiFiSettingsClass WiFiSettings; \ No newline at end of file +extern NetworkSettingsClass NetworkSettings; \ No newline at end of file diff --git a/src/MqttSettings.cpp b/src/MqttSettings.cpp index 679ea7db..c5460885 100644 --- a/src/MqttSettings.cpp +++ b/src/MqttSettings.cpp @@ -4,7 +4,7 @@ */ #include "MqttSettings.h" #include "Configuration.h" -#include "WiFiSettings.h" +#include "NetworkSettings.h" #include #include #include @@ -54,7 +54,7 @@ void MqttSettingsClass::performConnect() willTopic = getPrefix() + config.Mqtt_LwtTopic; mqttClient.setWill(willTopic.c_str(), 2, config.Mqtt_Retain, config.Mqtt_LwtValue_Offline); - clientId = WiFiSettings.getApName(); + clientId = NetworkSettings.getApName(); mqttClient.setClientId(clientId.c_str()); mqttClient.connect(); diff --git a/src/WiFiSettings.cpp b/src/NetworkSettings.cpp similarity index 71% rename from src/WiFiSettings.cpp rename to src/NetworkSettings.cpp index 95080998..a2918566 100644 --- a/src/WiFiSettings.cpp +++ b/src/NetworkSettings.cpp @@ -2,24 +2,66 @@ /* * Copyright (C) 2022 Thomas Basler and others */ -#include "WiFiSettings.h" +#include "NetworkSettings.h" #include "Configuration.h" #include "defaults.h" #include +#ifdef OPENDTU_ETHERNET +#include +#endif -WiFiSettingsClass::WiFiSettingsClass() +NetworkSettingsClass::NetworkSettingsClass() : apIp(192, 168, 4, 1) , apNetmask(255, 255, 255, 0) { dnsServer.reset(new DNSServer()); } -void WiFiSettingsClass::init() +void NetworkSettingsClass::init() { + using namespace std::placeholders; + + WiFi.onEvent(std::bind(&NetworkSettingsClass::NetworkEvent, this, _1)); setupMode(); } -void WiFiSettingsClass::setupMode() +void NetworkSettingsClass::NetworkEvent(WiFiEvent_t event) +{ + switch (event) { +#ifdef OPENDTU_ETHERNET + case ARDUINO_EVENT_ETH_START: + Serial.println("ETH start"); + ETH.setHostname("esp32-ethernet"); + break; + case ARDUINO_EVENT_ETH_STOP: + Serial.println("ETH stop"); + break; + case ARDUINO_EVENT_ETH_CONNECTED: + Serial.println("ETH connected"); + ETH.config(INADDR_NONE, INADDR_NONE, INADDR_NONE, INADDR_NONE); + break; + case ARDUINO_EVENT_ETH_GOT_IP: + Serial.println("ETH got IP"); + break; + case ARDUINO_EVENT_ETH_DISCONNECTED: + Serial.println("ETH disconnected"); + break; +#endif + case ARDUINO_EVENT_WIFI_STA_CONNECTED: + Serial.println("WiFi connected"); + break; + case ARDUINO_EVENT_WIFI_STA_DISCONNECTED: + Serial.println("WiFi disconnected"); + break; + case ARDUINO_EVENT_WIFI_STA_GOT_IP: + Serial.println("WiFi got ip"); + break; + default: + Serial.printf("Event: %d\n", event); + } +} + +void NetworkSettingsClass::setupMode() { if (adminEnabled) { WiFi.mode(WIFI_AP_STA); @@ -34,16 +76,19 @@ void WiFiSettingsClass::setupMode() dnsServerStatus = false; WiFi.mode(WIFI_STA); } +#ifdef OPENDTU_ETHERNET + ETH.begin(); +#endif } -void WiFiSettingsClass::enableAdminMode() +void NetworkSettingsClass::enableAdminMode() { adminEnabled = true; adminTimeoutCounter = 0; setupMode(); } -String WiFiSettingsClass::getApName() +String NetworkSettingsClass::getApName() { uint32_t chipId = 0; for (int i = 0; i < 17; i += 8) { @@ -52,7 +97,7 @@ String WiFiSettingsClass::getApName() return String(ACCESS_POINT_NAME + String(chipId)); } -void WiFiSettingsClass::loop() +void NetworkSettingsClass::loop() { if (millis() - lastTimerCall > 1000) { adminTimeoutCounter++; @@ -101,7 +146,7 @@ void WiFiSettingsClass::loop() } } -void WiFiSettingsClass::applyConfig() +void NetworkSettingsClass::applyConfig() { setHostname(); if (!strcmp(Configuration.get().WiFi_Ssid, "")) { @@ -121,7 +166,7 @@ void WiFiSettingsClass::applyConfig() setStaticIp(); } -void WiFiSettingsClass::setHostname() +void NetworkSettingsClass::setHostname() { Serial.print(F("Setting Hostname... ")); if (strcmp(Configuration.get().WiFi_Hostname, "")) { @@ -135,7 +180,7 @@ void WiFiSettingsClass::setHostname() } } -void WiFiSettingsClass::setStaticIp() +void NetworkSettingsClass::setStaticIp() { if (!Configuration.get().WiFi_Dhcp) { Serial.print(F("Configuring WiFi STA static IP... ")); @@ -149,4 +194,4 @@ void WiFiSettingsClass::setStaticIp() } } -WiFiSettingsClass WiFiSettings; \ No newline at end of file +NetworkSettingsClass NetworkSettings; \ No newline at end of file diff --git a/src/WebApi_network.cpp b/src/WebApi_network.cpp index 124eeea9..15dfe419 100644 --- a/src/WebApi_network.cpp +++ b/src/WebApi_network.cpp @@ -6,7 +6,7 @@ #include "ArduinoJson.h" #include "AsyncJson.h" #include "Configuration.h" -#include "WiFiSettings.h" +#include "NetworkSettings.h" #include "helper.h" void WebApiNetworkClass::init(AsyncWebServer* server) @@ -39,7 +39,7 @@ void WebApiNetworkClass::onNetworkStatus(AsyncWebServerRequest* request) root[F("sta_mac")] = WiFi.macAddress(); root[F("sta_rssi")] = WiFi.RSSI(); root[F("ap_status")] = ((WiFi.getMode() & WIFI_AP) != 0); - root[F("ap_ssid")] = WiFiSettings.getApName(); + root[F("ap_ssid")] = NetworkSettings.getApName(); root[F("ap_ip")] = WiFi.softAPIP().toString(); root[F("ap_mac")] = WiFi.softAPmacAddress(); root[F("ap_stationnum")] = WiFi.softAPgetStationNum(); @@ -199,6 +199,6 @@ void WebApiNetworkClass::onNetworkAdminPost(AsyncWebServerRequest* request) response->setLength(); request->send(response); - WiFiSettings.enableAdminMode(); - WiFiSettings.applyConfig(); + NetworkSettings.enableAdminMode(); + NetworkSettings.applyConfig(); } \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 4f39f1bc..11fe7578 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,7 +9,7 @@ #include "MqttSettings.h" #include "NtpSettings.h" #include "WebApi.h" -#include "WiFiSettings.h" +#include "NetworkSettings.h" #include "defaults.h" #include #include @@ -55,9 +55,9 @@ void setup() // Initialize WiFi Serial.print(F("Initialize WiFi... ")); - WiFiSettings.init(); + NetworkSettings.init(); Serial.println(F("done")); - WiFiSettings.applyConfig(); + NetworkSettings.applyConfig(); // Initialize NTP Serial.print(F("Initialize NTP... ")); @@ -100,7 +100,7 @@ void setup() void loop() { - WiFiSettings.loop(); + NetworkSettings.loop(); yield(); Hoymiles.loop(); yield();