Fixed bug with the 'trigger once and delete' tasks
This commit is contained in:
parent
ae31aac4ee
commit
c97db9f6a9
@ -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;
|
||||
}
|
||||
|
@ -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<TaskData> _taskDataDictio;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user