LoRa_APRS_iGate/lib/System/TaskManager.cpp

84 wiersze
1.9 KiB
C++
Czysty Zwykły widok Historia

#include "TaskManager.h"
#include <FontConfig.h>
#include <logger.h>
TaskManager::TaskManager() {
}
2021-05-18 23:01:10 +00:00
void TaskManager::addTask(Task *task) {
_tasks.push_back(task);
}
2021-05-18 23:01:10 +00:00
void TaskManager::addAlwaysRunTask(Task *task) {
_alwaysRunTasks.push_back(task);
}
2021-05-18 23:01:10 +00:00
Task *TaskManager::getTask(const char *name) {
std::_List_iterator<Task *> elem = std::find_if(_tasks.begin(), _tasks.end(), [&](Task *task) {
return task->getName() == name;
});
if (elem == _tasks.end()) {
return 0;
}
return *elem;
}
2021-05-18 23:01:10 +00:00
std::list<Task *> TaskManager::getTasks() {
return _tasks;
}
2021-05-18 22:44:37 +00:00
bool TaskManager::setup(System &system) {
logPrintlnV("will setup all tasks...");
2021-05-18 23:01:10 +00:00
for (Task *elem : _alwaysRunTasks) {
2021-05-09 21:09:07 +00:00
logPrintD("call setup from ");
logPrintlnD(elem->getName());
elem->setup(system);
}
2021-05-18 23:01:10 +00:00
for (Task *elem : _tasks) {
2021-05-09 21:09:07 +00:00
logPrintD("call setup from ");
logPrintlnD(elem->getName());
elem->setup(system);
}
_nextTask = _tasks.begin();
return true;
}
2021-05-18 22:44:37 +00:00
bool TaskManager::loop(System &system) {
// logPrintlnD("will loop all tasks...");
2021-05-18 23:01:10 +00:00
for (Task *elem : _alwaysRunTasks) {
// logPrintD("call loop from ");
// logPrintlnD(elem->getName());
elem->loop(system);
}
if (_nextTask == _tasks.end()) {
_nextTask = _tasks.begin();
}
bool ret = (*_nextTask)->loop(system);
2021-04-09 21:14:47 +00:00
++_nextTask;
return ret;
2021-01-19 23:31:02 +00:00
}
void StatusFrame::drawStatusPage(Bitmap &bitmap) {
int y = 0;
2021-05-18 23:01:10 +00:00
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() == "") {
switch (task->getState()) {
case Error:
bitmap.drawString(x, y, "Error");
break;
case Warning:
bitmap.drawString(x, y, "Warning");
default:
break;
}
bitmap.drawString(x, y, "Okay");
} else {
bitmap.drawString(x, y, task->getStateInfo());
}
y += getSystemFont()->heightInPixel;
}
}