diff --git a/include/NetworkSettings.h b/include/NetworkSettings.h index fa94c8b..6bd99ec 100644 --- a/include/NetworkSettings.h +++ b/include/NetworkSettings.h @@ -2,6 +2,7 @@ #pragma once #include +#include #include #include @@ -38,8 +39,7 @@ typedef struct NetworkEventCbList { class NetworkSettingsClass { public: NetworkSettingsClass(); - void init(); - void loop(); + void init(Scheduler* scheduler); void applyConfig(); void enableAdminMode(); String getApName(); @@ -57,11 +57,15 @@ public: void raiseEvent(network_event event); private: + void loop(); void setHostname(); void setStaticIp(); void handleMDNS(); void setupMode(); void NetworkEvent(WiFiEvent_t event); + + Task _loopTask; + bool adminEnabled = true; bool forceDisconnection = false; uint32_t adminTimeoutCounter = 0; diff --git a/src/NetworkSettings.cpp b/src/NetworkSettings.cpp index 5d43ba5..9d22f17 100644 --- a/src/NetworkSettings.cpp +++ b/src/NetworkSettings.cpp @@ -18,7 +18,7 @@ NetworkSettingsClass::NetworkSettingsClass() dnsServer.reset(new DNSServer()); } -void NetworkSettingsClass::init() +void NetworkSettingsClass::init(Scheduler* scheduler) { using std::placeholders::_1; @@ -27,6 +27,11 @@ void NetworkSettingsClass::init() WiFi.onEvent(std::bind(&NetworkSettingsClass::NetworkEvent, this, _1)); setupMode(); + + scheduler->addTask(_loopTask); + _loopTask.setCallback(std::bind(&NetworkSettingsClass::loop, this)); + _loopTask.setIterations(TASK_FOREVER); + _loopTask.enable(); } void NetworkSettingsClass::NetworkEvent(WiFiEvent_t event) diff --git a/src/main.cpp b/src/main.cpp index 9e3404a..63bc83c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -82,7 +82,7 @@ void setup() // Initialize WiFi MessageOutput.print("Initialize Network... "); - NetworkSettings.init(); + NetworkSettings.init(&scheduler); MessageOutput.println("done"); NetworkSettings.applyConfig(); @@ -153,8 +153,6 @@ void loop() { scheduler.execute(); - NetworkSettings.loop(); - yield(); InverterSettings.loop(); yield(); WebApi.loop();