Renamed WifiSettings to NetworkSettings and implemented first ethernet initialization

This commit is contained in:
Thomas Basler 2022-07-13 21:30:53 +02:00
parent 9edd35444d
commit c7aa22ce6c
5 changed files with 71 additions and 24 deletions

View File

@ -2,11 +2,12 @@
#pragma once
#include <DNSServer.h>
#include <WiFi.h>
#include <memory>
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;
extern NetworkSettingsClass NetworkSettings;

View File

@ -4,7 +4,7 @@
*/
#include "MqttSettings.h"
#include "Configuration.h"
#include "WiFiSettings.h"
#include "NetworkSettings.h"
#include <AsyncMqttClient.h>
#include <Ticker.h>
#include <WiFi.h>
@ -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();

View File

@ -2,24 +2,66 @@
/*
* Copyright (C) 2022 Thomas Basler and others
*/
#include "WiFiSettings.h"
#include "NetworkSettings.h"
#include "Configuration.h"
#include "defaults.h"
#include <WiFi.h>
#ifdef OPENDTU_ETHERNET
#include <ETH.h>
#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;
NetworkSettingsClass NetworkSettings;

View File

@ -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();
}

View File

@ -9,7 +9,7 @@
#include "MqttSettings.h"
#include "NtpSettings.h"
#include "WebApi.h"
#include "WiFiSettings.h"
#include "NetworkSettings.h"
#include "defaults.h"
#include <Arduino.h>
#include <LittleFS.h>
@ -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();