diff --git a/lib/System/TaskManager.cpp b/lib/System/TaskManager.cpp index be0fdce..de8173c 100644 --- a/lib/System/TaskManager.cpp +++ b/lib/System/TaskManager.cpp @@ -9,6 +9,10 @@ void TaskManager::addTask(std::shared_ptr task) { _tasks.push_back(task); } +void TaskManager::addAlwaysRunTask(std::shared_ptr task) { + _alwaysRunTasks.push_back(task); +} + std::shared_ptr TaskManager::getTask(const char *name) { std::_List_iterator> elem = std::find_if(_tasks.begin(), _tasks.end(), [&](std::shared_ptr task) { return task->getName() == name; @@ -25,6 +29,11 @@ std::list> TaskManager::getTasks() { bool TaskManager::setup(std::shared_ptr system) { logPrintlnV("will setup all tasks..."); + for (std::shared_ptr &elem : _alwaysRunTasks) { + logPrintW("call setup from "); + logPrintlnW(elem->getName()); + elem->setup(system); + } for (std::shared_ptr &elem : _tasks) { logPrintW("call setup from "); logPrintlnW(elem->getName()); @@ -36,6 +45,12 @@ bool TaskManager::setup(std::shared_ptr system) { bool TaskManager::loop(std::shared_ptr system) { // logPrintlnD("will loop all tasks..."); + for (std::shared_ptr &elem : _alwaysRunTasks) { + // logPrintD("call loop from "); + // logPrintlnD(elem->getName()); + elem->loop(system); + } + if (_nextTask == _tasks.end()) { _nextTask = _tasks.begin(); } diff --git a/lib/System/TaskManager.h b/lib/System/TaskManager.h index f1925a9..edb8f14 100644 --- a/lib/System/TaskManager.h +++ b/lib/System/TaskManager.h @@ -62,6 +62,7 @@ public: } void addTask(std::shared_ptr task); + void addAlwaysRunTask(std::shared_ptr task); std::shared_ptr getTask(const char *name); std::list> getTasks(); @@ -71,6 +72,7 @@ public: private: std::list> _tasks; std::list>::iterator _nextTask; + std::list> _alwaysRunTasks; }; class StatusFrame : public DisplayFrame { diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index 1d62d38..e7f3308 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -83,9 +83,9 @@ void setup() { LoRaSystem->getTaskManager().addTask(std::shared_ptr(new DisplayTask())); LoRaSystem->getTaskManager().addTask(std::shared_ptr(new LoraTask())); if (boardConfig->Type == eETH_BOARD) { - LoRaSystem->getTaskManager().addTask(std::shared_ptr(new EthTask())); + LoRaSystem->getTaskManager().addAlwaysRunTask(std::shared_ptr(new EthTask())); } else { - LoRaSystem->getTaskManager().addTask(std::shared_ptr(new WifiTask())); + LoRaSystem->getTaskManager().addAlwaysRunTask(std::shared_ptr(new WifiTask())); } LoRaSystem->getTaskManager().addTask(std::shared_ptr(new OTATask())); LoRaSystem->getTaskManager().addTask(std::shared_ptr(new NTPTask()));