From 67174c1f7c3cc7ed32d10f464b283c07931a64e1 Mon Sep 17 00:00:00 2001 From: Anatole SCHRAMM Date: Thu, 2 May 2019 17:22:40 +0200 Subject: [PATCH] Further implementation of the TaskSchedulerManager class --- src/app/TaskSchedulerManager.cpp | 53 +++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/src/app/TaskSchedulerManager.cpp b/src/app/TaskSchedulerManager.cpp index 410b6ef..f48d567 100644 --- a/src/app/TaskSchedulerManager.cpp +++ b/src/app/TaskSchedulerManager.cpp @@ -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})); @@ -146,31 +156,44 @@ boolean TaskSchedulerManager::clearTask() 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 + else { - p->schedule._millis = millis(); + } } - else - { - - } + + if(p->schedule._mode != TaskSchedulerManagerHelper::Schedule::TRIGGER_ONCE_AND_DELETE)_nextTaskIndexToBeRun++; }