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)
|
if(Object._dateTime != NULL)
|
||||||
_dateTime = new DateTime(*(Object._dateTime));
|
_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}));
|
return _taskDataDictio.add(name, new TaskData({*schedule, taskRoutine, pData}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
boolean TaskSchedulerManager::addTask(uint8_t id, TaskSchedulerManagerHelper::Schedule *schedule, boolean (*taskRoutine)(void*), void *pData)
|
boolean TaskSchedulerManager::addTask(uint8_t id, TaskSchedulerManagerHelper::Schedule *schedule, boolean (*taskRoutine)(void*), void *pData)
|
||||||
{
|
{
|
||||||
return _taskDataDictio.add(id, new TaskData({*schedule, taskRoutine, pData}));
|
return _taskDataDictio.add(id, new TaskData({*schedule, taskRoutine, pData}));
|
||||||
@ -146,31 +156,44 @@ boolean TaskSchedulerManager::clearTask()
|
|||||||
void TaskSchedulerManager::runTaskScheduler()
|
void TaskSchedulerManager::runTaskScheduler()
|
||||||
{
|
{
|
||||||
if(_taskDataDictio.count() == 0)return;
|
if(_taskDataDictio.count() == 0)return;
|
||||||
|
|
||||||
if(_taskDataDictio.count() >= _nextTaskIndexToBeRun)_nextTaskIndexToBeRun = 0;
|
if(_nextTaskIndexToBeRun >= _taskDataDictio.count())_nextTaskIndexToBeRun = 0;
|
||||||
|
|
||||||
TaskData *p = _taskDataDictio(_nextTaskIndexToBeRun);
|
TaskData *p = _taskDataDictio(_nextTaskIndexToBeRun);
|
||||||
|
|
||||||
if(p == NULL)//Shouldn't happen
|
if(p == NULL)//Shouldn't happen
|
||||||
return;
|
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
|
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