LoRa_APRS_iGate/lib/TaskManager/TaskManager.cpp

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

#include <logger.h>
#include "TaskManager.h"
#include <FontConfig.h>
TaskManager::TaskManager()
{
}
void TaskManager::addTask(std::shared_ptr<Task> task)
{
_tasks.push_back(task);
}
2021-01-04 22:10:23 +00:00
std::shared_ptr<Task> TaskManager::getTask(const char * name)
{
2021-01-19 23:31:02 +00:00
std::_List_iterator<std::shared_ptr<Task>> elem = std::find_if(_tasks.begin(), _tasks.end(), [&](std::shared_ptr<Task> task)
{
2021-01-19 23:31:02 +00:00
return task->getName() == name;
});
if(elem == _tasks.end())
{
return 0;
}
2021-01-19 23:31:02 +00:00
return *elem;
}
std::list<std::shared_ptr<Task>> TaskManager::getTasks()
{
return _tasks;
}
2021-01-04 22:10:23 +00:00
bool TaskManager::setup(std::shared_ptr<Configuration> config, std::shared_ptr<BoardConfig> boardConfig)
{
logPrintlnV("will setup all tasks...");
for(std::shared_ptr<Task> & elem : _tasks)
{
logPrintW("call setup from ");
logPrintlnW(elem->getName());
2021-01-04 22:10:23 +00:00
if(!elem->setup(config, boardConfig))
{
return false;
}
}
return true;
}
bool TaskManager::loop(std::shared_ptr<Configuration> config)
{
//logPrintlnD("will loop all tasks...");
for(std::shared_ptr<Task> & elem : _tasks)
{
//logPrintD("call loop from ");
//logPrintlnD(elem->getName());
if(!elem->loop(config))
{
return false;
}
}
return true;
2021-01-19 23:31:02 +00:00
}
void StatusFrame::drawStatusPage(Bitmap & bitmap)
{
int y = 0;
for(std::shared_ptr<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;
}
}
bool StatusFrame::isPrio() const
{
for(std::shared_ptr<Task> task : _tasks)
{
if(task->getState() != Okay)
{
return true;
}
}
return false;
}