LoRa_APRS_iGate/lib/System/TaskManager.h

93 wiersze
1.8 KiB
C
Czysty Zwykły widok Historia

#ifndef TASK_MANAGER_H_
#define TASK_MANAGER_H_
#include <Arduino.h>
#include <list>
#include <memory>
2021-01-04 22:10:23 +00:00
#include <BoardFinder.h>
#include <Display.h>
#include <configuration.h>
2021-01-04 22:10:23 +00:00
#include "TaskQueue.h"
class System;
enum TaskDisplayState
{
Error,
Warning,
Okay,
};
class Task {
public:
Task(String &name, int taskId) : _state(Okay), _stateInfo("Booting"), _name(name), _taskId(taskId) {
}
Task(const char *name, int taskId) : _state(Okay), _stateInfo("Booting"), _name(name), _taskId(taskId) {
}
virtual ~Task() {
}
String getName() const {
return _name;
}
int getTaskId() const {
return _taskId;
}
TaskDisplayState getState() const {
return _state;
}
String getStateInfo() const {
return _stateInfo;
}
2021-05-18 22:44:37 +00:00
virtual bool setup(System &system) = 0;
virtual bool loop(System &system) = 0;
protected:
TaskDisplayState _state;
String _stateInfo;
private:
String _name;
int _taskId;
};
class TaskManager {
public:
TaskManager();
~TaskManager() {
}
void addTask(std::shared_ptr<Task> task);
void addAlwaysRunTask(std::shared_ptr<Task> task);
std::shared_ptr<Task> getTask(const char *name);
std::list<std::shared_ptr<Task>> getTasks();
2021-05-18 22:44:37 +00:00
bool setup(System &system);
bool loop(System &system);
private:
std::list<std::shared_ptr<Task>> _tasks;
std::list<std::shared_ptr<Task>>::iterator _nextTask;
std::list<std::shared_ptr<Task>> _alwaysRunTasks;
};
class StatusFrame : public DisplayFrame {
public:
explicit StatusFrame(const std::list<std::shared_ptr<Task>> &tasks) : _tasks(tasks) {
}
virtual ~StatusFrame() {
}
void drawStatusPage(Bitmap &bitmap) override;
private:
std::list<std::shared_ptr<Task>> _tasks;
};
#include "System.h"
#endif