diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index e568d87..3054435 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -8,6 +8,7 @@ #include #include "TaskAprsIs.h" +#include "TaskConfig.h" #include "TaskDisplay.h" #include "TaskEth.h" #include "TaskFTP.h" @@ -27,12 +28,10 @@ TaskQueue> toAprsIs; TaskQueue> fromModem; TaskQueue> toModem; -System LoRaSystem; -Configuration userConfig; -ConfigHTML html; -ConfigFactory fact; -const String config_filename = "/is-cfg.json"; -AsyncWebServer server(80); +System LoRaSystem; +Configuration userConfig; +ConfigFactory fact; +const String config_filename("/is-cfg.json"); DisplayTask displayTask; ModemTask modemTask(fromModem, toModem); @@ -43,6 +42,7 @@ NTPTask ntpTask; FTPTask ftpTask; AprsIsTask aprsIsTask(toAprsIs); RouterTask routerTask(fromModem, toModem, toAprsIs); +ConfigTask configTask; void setup() { Serial.begin(115200); @@ -62,14 +62,7 @@ void setup() { boardConfigs.push_back(&HELTEC_WIFI_LORA_32_V1); boardConfigs.push_back(&HELTEC_WIFI_LORA_32_V2); - fact.addPage(&page); - fact.loadConfig(config_filename); - - html.addPage(&page); - html.registerWebServer(server); - server.onNotFound([](AsyncWebServerRequest *request) { - request->send(404, "text/plain", "Not found"); - }); + configTask.setup(LoRaSystem); BoardFinder finder(boardConfigs); BoardConfig const *boardConfig = finder.getBoardConfig(userConfig.board()); @@ -107,6 +100,7 @@ void setup() { LoRaSystem.setBoardConfig(boardConfig); LoRaSystem.setUserConfig(&userConfig); LoRaSystem.getTaskManager().addTask(&displayTask); + LoRaSystem.getTaskManager().addTask(&configTask); if (userConfig.callsign() != "NOCALL-10") { LoRaSystem.getTaskManager().addTask(&modemTask); LoRaSystem.getTaskManager().addTask(&routerTask); @@ -143,17 +137,6 @@ void setup() { void loop() { LoRaSystem.getTaskManager().loop(LoRaSystem); - if (html.wasSaved()) { - fact.saveConfig(config_filename); - ESP.restart(); - } - - // we can start the http server just when we are connected to something - static bool httpServerInitDone = false; - if (LoRaSystem.isWifiEthConnected() && !httpServerInitDone) { - server.begin(); - httpServerInitDone = true; - } } String create_lat_aprs(double lat) { diff --git a/src/Task.h b/src/Task.h index 4c8163b..b68c826 100644 --- a/src/Task.h +++ b/src/Task.h @@ -4,6 +4,7 @@ enum TaskNames { TaskAprsIs = 1, + TaskConfig, TaskEth, TaskFtp, TaskModem, @@ -15,6 +16,7 @@ enum TaskNames }; #define TASK_APRS_IS "AprsIsTask" +#define TASK_CONFIG "ConfigTask" #define TASK_ETH "EthTask" #define TASK_FTP "FTPTask" #define TASK_MODEM "ModemTask" diff --git a/src/TaskConfig.cpp b/src/TaskConfig.cpp new file mode 100644 index 0000000..39ed7d6 --- /dev/null +++ b/src/TaskConfig.cpp @@ -0,0 +1,45 @@ +#include +#include + +#include "Task.h" +#include "TaskConfig.h" +#include "configuration.h" + +ConfigTask::ConfigTask() : Task(TASK_CONFIG, TaskConfig), _server(80), _config_filename("/is-cfg.json"), _setupDone(false) { +} + +ConfigTask::~ConfigTask() { +} + +bool ConfigTask::setup(System &system) { + if (_setupDone) { + return true; + } + fact.addPage(&page); + fact.loadConfig(_config_filename); + + _html.addPage(&page); + _html.registerWebServer(_server); + _server.onNotFound([](AsyncWebServerRequest *request) { + request->send(404, "text/plain", "Not found"); + }); + _stateInfo = "waiting"; + _setupDone = true; + return true; +} + +bool ConfigTask::loop(System &system) { + // we can start the http server just when we are connected to something + static bool httpServerInitDone = false; + if (system.isWifiEthConnected() && !httpServerInitDone) { + _server.begin(); + httpServerInitDone = true; + } + + if (_html.wasSaved()) { + fact.saveConfig(_config_filename); + ESP.restart(); + } + + return true; +} diff --git a/src/TaskConfig.h b/src/TaskConfig.h new file mode 100644 index 0000000..e9b65fc --- /dev/null +++ b/src/TaskConfig.h @@ -0,0 +1,24 @@ +#ifndef TASK_CONFIG_H_ +#define TASK_CONFIG_H_ + +#include "configuration.h" +#include + +class ConfigTask : public Task { +public: + ConfigTask(); + virtual ~ConfigTask(); + + virtual bool setup(System &system) override; + virtual bool loop(System &system) override; + + ConfigFactory fact; + +private: + ConfigHTML _html; + AsyncWebServer _server; + const String _config_filename; + bool _setupDone; +}; + +#endif