Further implementation of the TaskSchedulerManager class
This commit is contained in:
parent
e013103fd1
commit
67174c1f7c
@ -18,7 +18,18 @@ TaskSchedulerManagerHelper::Schedule::Schedule() :
|
||||
|
||||
}
|
||||
|
||||
TaskSchedulerManagerHelper::Schedule::Schedule(const TaskSchedulerManagerHelper::Schedule &Object)
|
||||
TaskSchedulerManagerHelper::Schedule::Schedule(const TaskSchedulerManagerHelper::Schedule &Object) :
|
||||
_days(Object._days),
|
||||
_months(Object._months),
|
||||
_triggered(Object._triggered),
|
||||
_triggerRightAway(Object._triggerRightAway),
|
||||
_hasBeenTriggeredRightAway(Object._hasBeenTriggeredRightAway),
|
||||
_triggerType(Object._triggerType),
|
||||
_mode(Object._mode),
|
||||
_enabled(Object._enabled),
|
||||
_millis(0),
|
||||
_everyMillis(Object._everyMillis),
|
||||
_dateTime(NULL)
|
||||
{
|
||||
if(Object._dateTime != NULL)
|
||||
_dateTime = new DateTime(*(Object._dateTime));
|
||||
@ -98,7 +109,6 @@ boolean TaskSchedulerManager::addTask(const char *name, TaskSchedulerManagerHelp
|
||||
return _taskDataDictio.add(name, new TaskData({*schedule, taskRoutine, pData}));
|
||||
}
|
||||
|
||||
|
||||
boolean TaskSchedulerManager::addTask(uint8_t id, TaskSchedulerManagerHelper::Schedule *schedule, boolean (*taskRoutine)(void*), void *pData)
|
||||
{
|
||||
return _taskDataDictio.add(id, new TaskData({*schedule, taskRoutine, pData}));
|
||||
@ -147,30 +157,43 @@ void TaskSchedulerManager::runTaskScheduler()
|
||||
{
|
||||
if(_taskDataDictio.count() == 0)return;
|
||||
|
||||
if(_taskDataDictio.count() >= _nextTaskIndexToBeRun)_nextTaskIndexToBeRun = 0;
|
||||
if(_nextTaskIndexToBeRun >= _taskDataDictio.count())_nextTaskIndexToBeRun = 0;
|
||||
|
||||
TaskData *p = _taskDataDictio(_nextTaskIndexToBeRun);
|
||||
|
||||
if(p == NULL)//Shouldn't happen
|
||||
return;
|
||||
|
||||
if(p->schedule._everyMillis != 0)
|
||||
if(p->schedule._enabled)
|
||||
{
|
||||
if(p->schedule._triggerRightAway || p->schedule._millis != 0)
|
||||
if(p->schedule._everyMillis != 0)
|
||||
{
|
||||
if(millis() - p->schedule._millis >= p->schedule._everyMillis) //We execute the task
|
||||
{
|
||||
|
||||
if(p->schedule._triggerRightAway || p->schedule._millis != 0)
|
||||
{
|
||||
if(p->schedule._triggerRightAway && !p->schedule._hasBeenTriggeredRightAway)
|
||||
{
|
||||
p->schedule._millis = millis();
|
||||
p->schedule._hasBeenTriggeredRightAway = true;
|
||||
(*(p->taskRoutine))(p->pData);
|
||||
}
|
||||
else if(millis() - p->schedule._millis >= p->schedule._everyMillis) //We execute the task
|
||||
{
|
||||
p->schedule._millis = millis();
|
||||
(*(p->taskRoutine))(p->pData);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
p->schedule._millis = millis();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
p->schedule._millis = millis();
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
if(p->schedule._mode != TaskSchedulerManagerHelper::Schedule::TRIGGER_ONCE_AND_DELETE)_nextTaskIndexToBeRun++;
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user