diff --git a/lib/System/TaskManager.cpp b/lib/System/TaskManager.cpp index e2741c2..9cf7e33 100644 --- a/lib/System/TaskManager.cpp +++ b/lib/System/TaskManager.cpp @@ -5,16 +5,16 @@ TaskManager::TaskManager() { } -void TaskManager::addTask(std::shared_ptr task) { +void TaskManager::addTask(Task *task) { _tasks.push_back(task); } -void TaskManager::addAlwaysRunTask(std::shared_ptr task) { +void TaskManager::addAlwaysRunTask(Task *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) { +Task *TaskManager::getTask(const char *name) { + std::_List_iterator elem = std::find_if(_tasks.begin(), _tasks.end(), [&](Task *task) { return task->getName() == name; }); if (elem == _tasks.end()) { @@ -23,18 +23,18 @@ std::shared_ptr TaskManager::getTask(const char *name) { return *elem; } -std::list> TaskManager::getTasks() { +std::list TaskManager::getTasks() { return _tasks; } bool TaskManager::setup(System &system) { logPrintlnV("will setup all tasks..."); - for (std::shared_ptr &elem : _alwaysRunTasks) { + for (Task *elem : _alwaysRunTasks) { logPrintD("call setup from "); logPrintlnD(elem->getName()); elem->setup(system); } - for (std::shared_ptr &elem : _tasks) { + for (Task *elem : _tasks) { logPrintD("call setup from "); logPrintlnD(elem->getName()); elem->setup(system); @@ -45,7 +45,7 @@ bool TaskManager::setup(System &system) { bool TaskManager::loop(System &system) { // logPrintlnD("will loop all tasks..."); - for (std::shared_ptr &elem : _alwaysRunTasks) { + for (Task *elem : _alwaysRunTasks) { // logPrintD("call loop from "); // logPrintlnD(elem->getName()); elem->loop(system); @@ -61,7 +61,7 @@ bool TaskManager::loop(System &system) { void StatusFrame::drawStatusPage(Bitmap &bitmap) { int y = 0; - for (std::shared_ptr task : _tasks) { + for (Task *task : _tasks) { int x = bitmap.drawString(0, y, (task->getName()).substring(0, task->getName().indexOf("Task"))); x = bitmap.drawString(x, y, ": "); if (task->getStateInfo() == "") { diff --git a/lib/System/TaskManager.h b/lib/System/TaskManager.h index ffb7ff6..8a7ad3b 100644 --- a/lib/System/TaskManager.h +++ b/lib/System/TaskManager.h @@ -61,30 +61,30 @@ public: ~TaskManager() { } - void addTask(std::shared_ptr task); - void addAlwaysRunTask(std::shared_ptr task); - std::shared_ptr getTask(const char *name); - std::list> getTasks(); + void addTask(Task *task); + void addAlwaysRunTask(Task *task); + Task * getTask(const char *name); + std::list getTasks(); bool setup(System &system); bool loop(System &system); private: - std::list> _tasks; - std::list>::iterator _nextTask; - std::list> _alwaysRunTasks; + std::list _tasks; + std::list::iterator _nextTask; + std::list _alwaysRunTasks; }; class StatusFrame : public DisplayFrame { public: - explicit StatusFrame(const std::list> &tasks) : _tasks(tasks) { + explicit StatusFrame(const std::list &tasks) : _tasks(tasks) { } virtual ~StatusFrame() { } void drawStatusPage(Bitmap &bitmap) override; private: - std::list> _tasks; + std::list _tasks; }; #include "System.h" diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index 482cf83..f1902dc 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -24,11 +24,21 @@ String create_lat_aprs(double lat); String create_long_aprs(double lng); -System LoRaSystem; - TaskQueue> toAprsIs; TaskQueue> fromModem; +System LoRaSystem; + +DisplayTask displayTask; +ModemTask modemTask(fromModem); +EthTask ethTask; +WifiTask wifiTask; +OTATask otaTask; +NTPTask ntpTask; +FTPTask ftpTask; +AprsIsTask aprsIsTask(toAprsIs); +RouterTask routerTask(fromModem, toAprsIs); + // cppcheck-suppress unusedFunction void setup() { Serial.begin(115200); @@ -84,20 +94,20 @@ void setup() { LoRaSystem.setBoardConfig(boardConfig); LoRaSystem.setUserConfig(&userConfig); - LoRaSystem.getTaskManager().addTask(std::shared_ptr(new DisplayTask())); - LoRaSystem.getTaskManager().addTask(std::shared_ptr(new ModemTask(fromModem))); + LoRaSystem.getTaskManager().addTask(&displayTask); + LoRaSystem.getTaskManager().addTask(&modemTask); if (boardConfig->Type == eETH_BOARD) { - LoRaSystem.getTaskManager().addAlwaysRunTask(std::shared_ptr(new EthTask())); + LoRaSystem.getTaskManager().addAlwaysRunTask(ðTask); } else { - LoRaSystem.getTaskManager().addAlwaysRunTask(std::shared_ptr(new WifiTask())); + LoRaSystem.getTaskManager().addAlwaysRunTask(&wifiTask); } - LoRaSystem.getTaskManager().addTask(std::shared_ptr(new OTATask())); - LoRaSystem.getTaskManager().addTask(std::shared_ptr(new NTPTask())); + LoRaSystem.getTaskManager().addTask(&otaTask); + LoRaSystem.getTaskManager().addTask(&ntpTask); if (userConfig.ftp.active) { - LoRaSystem.getTaskManager().addTask(std::shared_ptr(new FTPTask())); + LoRaSystem.getTaskManager().addTask(&ftpTask); } - LoRaSystem.getTaskManager().addTask(std::shared_ptr(new AprsIsTask(toAprsIs))); - LoRaSystem.getTaskManager().addTask(std::shared_ptr(new RouterTask(fromModem, toAprsIs))); + LoRaSystem.getTaskManager().addTask(&aprsIsTask); + LoRaSystem.getTaskManager().addTask(&routerTask); LoRaSystem.getTaskManager().setup(LoRaSystem);