Further implementation of the TaskSchedulerManager class

This commit is contained in:
Anatole SCHRAMM 2019-05-02 17:22:40 +02:00
parent e013103fd1
commit 67174c1f7c

View File

@ -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++;
}