Alex Pirciu
/
BFMC
a
Diff: include/TaskManager/taskmanager.hpp
- Revision:
- 1:ceee5a608e7c
diff -r c3e774091195 -r ceee5a608e7c include/TaskManager/taskmanager.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/TaskManager/taskmanager.hpp Thu Mar 28 07:44:42 2019 +0000 @@ -0,0 +1,97 @@ +/** + ****************************************************************************** + * @file TaskManager.hpp + * @author RBRO/PJ-IU + * @version V1.0.0 + * @date day-month-2017 + * @brief This file contains the class declaration for task manager. + ****************************************************************************** + */ + +/* Inclusion guard */ +#ifndef TASK_MANAGER_HPP +#define TASK_MANAGER_HPP + +#include <mbed.h> + +namespace task{ + /** + * @brief It is used for implementing the task functionality. + * + */ + class CTask + { + public: + /* Constructor */ + CTask(uint32_t f_period); + /* Destructor */ + virtual ~CTask(); + /* Run method */ + virtual void run(); + /* Timer callback */ + void timerCallback() + { + m_ticks++; + if (m_ticks >= m_period) + { + m_ticks = 0; + Trigger(); + } + } + /* Trigger */ + void Trigger() + { + m_triggered = true; + } + protected: + /* _run methof */ + virtual void _run() = 0; + /* period */ + const uint32_t m_period; + /* ticks */ + uint32_t m_ticks; + /* trigger flag */ + bool m_triggered; + }; + + /** + * @brief It is used for implementing the task manager functionality. + * + */ + class CTaskManager + { + public: + /* Constructor */ + CTaskManager(CTask** f_taskList, uint32_t f_taskCount, float f_baseFreq); + /* Destructor */ + virtual ~CTaskManager(); + /* Main callback */ + inline void mainCallback() + { + for(uint32_t i = 0; i < m_taskCount; i++) + { + m_taskList[i]->run(); + } + } + /* Timer callback */ + inline void timerCallback() + { + for(uint32_t i = 0; i < m_taskCount; i++) + { + m_taskList[i]->timerCallback(); + } + } + private: + /* Callback */ + static void callback(void *thisPointer); + /* task list */ + CTask** m_taskList; + /* task count */ + uint32_t m_taskCount; + /* ticker */ /* A Ticker is used to call a function at a recurring interval */ + Ticker m_ticker; + }; + +}; // namespace task + +#endif