#ifndef TASK_MANAGER_H_ #define TASK_MANAGER_H_ #include #include #include #include #include #include #include "TaskQueue.h" 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; } virtual bool setup(std::shared_ptr config, std::shared_ptr boardConfig) = 0; virtual bool loop(std::shared_ptr config) = 0; protected: TaskDisplayState _state; String _stateInfo; private: String _name; int _taskId; }; class TaskManager { public: static TaskManager &instance() { static TaskManager _instance; return _instance; } ~TaskManager() { } void addTask(std::shared_ptr task); std::shared_ptr getTask(const char *name); std::list> getTasks(); bool setup(std::shared_ptr config, std::shared_ptr boardConfig); bool loop(std::shared_ptr config); private: std::list> _tasks; TaskManager(); TaskManager(const TaskManager &); TaskManager &operator=(const TaskManager &); }; class StatusFrame : public DisplayFrame { public: explicit StatusFrame(const std::list> &tasks) : _tasks(tasks) { } virtual ~StatusFrame() { } void drawStatusPage(Bitmap &bitmap) override; bool isPrio() const; private: std::list> _tasks; }; #endif