diff --git a/src/app/TaskSchedulerManager.cpp b/src/app/TaskSchedulerManager.cpp index 4ee38a3..f443263 100644 --- a/src/app/TaskSchedulerManager.cpp +++ b/src/app/TaskSchedulerManager.cpp @@ -116,7 +116,7 @@ boolean TaskSchedulerManager::addTask(const char *name, TaskSchedulerManagerHelp return result; } -boolean TaskSchedulerManager::addTask(uint8_t id, TaskSchedulerManagerHelper::Schedule *schedule, boolean (*taskRoutine)(void*), void *pData) +boolean TaskSchedulerManager::addTask(uint16_t id, TaskSchedulerManagerHelper::Schedule *schedule, boolean (*taskRoutine)(void*), void *pData) { boolean result = _taskDataDictio.add(id, new TaskData({*schedule, taskRoutine, pData})); delete schedule; @@ -128,7 +128,7 @@ boolean TaskSchedulerManager::removeTask(const char *name) return _taskDataDictio.remove(name); } -boolean TaskSchedulerManager::removeTask(uint8_t id) +boolean TaskSchedulerManager::removeTask(uint16_t id) { return _taskDataDictio.remove(id); } @@ -138,7 +138,7 @@ boolean TaskSchedulerManager::enableTask(const char *name) _taskDataDictio(name)->schedule.setEnabled(true); } -boolean TaskSchedulerManager::enableTask(uint8_t id) +boolean TaskSchedulerManager::enableTask(uint16_t id) { char indiceToStr[10]; sprintf(indiceToStr,"%d", id); @@ -150,7 +150,7 @@ boolean TaskSchedulerManager::disableTask(const char *name) _taskDataDictio(name)->schedule.setEnabled(false); } -boolean TaskSchedulerManager::disableTask(uint8_t id) +boolean TaskSchedulerManager::disableTask(uint16_t id) { char indiceToStr[10]; sprintf(indiceToStr,"%d", id); @@ -168,7 +168,7 @@ void TaskSchedulerManager::runTaskScheduler() if(_nextTaskIndexToBeRun >= _taskDataDictio.count())_nextTaskIndexToBeRun = 0; - TaskData *p = _taskDataDictio(_nextTaskIndexToBeRun); + TaskData *p = _taskDataDictio.getAt(_nextTaskIndexToBeRun); if(p == NULL)//Shouldn't happen return; @@ -206,14 +206,24 @@ void TaskSchedulerManager::runTaskScheduler() } if(p->schedule._triggerType != TaskSchedulerManagerHelper::Schedule::TRIGGER_ONCE_AND_DELETE)_nextTaskIndexToBeRun++; + else if(p->schedule._triggerType == TaskSchedulerManagerHelper::Schedule::TRIGGER_ONCE_AND_DELETE && !(p->schedule._triggered))_nextTaskIndexToBeRun++; else if(p->schedule._triggerType == TaskSchedulerManagerHelper::Schedule::TRIGGER_ONCE_AND_DELETE && p->schedule._triggered) //If the task has to be deleted after executing and if it has been executed, we delete it { _taskDataDictio.removeAt(_nextTaskIndexToBeRun); } - } const unsigned int TaskSchedulerManager::taskCount() { return _taskDataDictio.count(); } + +uint16_t TaskSchedulerManager::findFreeTaskId() +{ + uint16_t idToTry(1); + while(_taskDataDictio(idToTry) != NULL) + { + idToTry++; + } + return idToTry; +} diff --git a/src/app/TaskSchedulerManager.h b/src/app/TaskSchedulerManager.h index ad7bbb7..3d050ee 100644 --- a/src/app/TaskSchedulerManager.h +++ b/src/app/TaskSchedulerManager.h @@ -61,16 +61,17 @@ class TaskSchedulerManager _taskDataDictio.dispose(); } boolean addTask(const char *name, TaskSchedulerManagerHelper::Schedule *schedule, boolean (*taskRoutine)(void*), void *pData = NULL); - boolean addTask(uint8_t id, TaskSchedulerManagerHelper::Schedule *schedule, boolean (*taskRoutine)(void*), void *pData = NULL); + boolean addTask(uint16_t id, TaskSchedulerManagerHelper::Schedule *schedule, boolean (*taskRoutine)(void*), void *pData = NULL); boolean removeTask(const char *name); - boolean removeTask(uint8_t id); + boolean removeTask(uint16_t id); boolean enableTask(const char *name); - boolean enableTask(uint8_t id); + boolean enableTask(uint16_t id); boolean disableTask(const char *name); - boolean disableTask(uint8_t id); + boolean disableTask(uint16_t id); boolean clearTask(); void runTaskScheduler(); const unsigned int taskCount(); + uint16_t findFreeTaskId(); protected: TaskSchedulerManager(); TaskSchedulerManager(RtcManager &rtcManager); @@ -82,7 +83,7 @@ class TaskSchedulerManager void *pData; }; - uint8_t _nextTaskIndexToBeRun; + uint16_t _nextTaskIndexToBeRun; RtcManager *_rtcManager; Dictionary _taskDataDictio; };