#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: StatusFrame(std::list> tasks) : _tasks(tasks) {} virtual ~StatusFrame() {} void drawStatusPage(Bitmap & bitmap) override; bool isPrio() const; private: std::list> _tasks; }; #endif