job scheduler works with run once and run periodic schedules. Stop logic is not fully thought through.

Dependencies:   LinkedList

Dependents:   JobSchedulerDemo Borsch

Committer:
sgnezdov
Date:
Thu Jul 13 23:07:09 2017 +0000
Revision:
10:8cff30b5b90d
Parent:
9:ee21cd055a97
Child:
11:df18df016d7e
work in progress

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sgnezdov 0:806403f3d0d1 1 #include "jobService.h"
sgnezdov 0:806403f3d0d1 2
sgnezdov 10:8cff30b5b90d 3 #include "mbed-trace/mbed_trace.h"
sgnezdov 10:8cff30b5b90d 4 #define TRACE_GROUP "scjs"
sgnezdov 10:8cff30b5b90d 5
sgnezdov 0:806403f3d0d1 6 namespace JobScheduler {
sgnezdov 0:806403f3d0d1 7
sgnezdov 0:806403f3d0d1 8 bool JobType::AscendingExcl(JobType *j2)
sgnezdov 0:806403f3d0d1 9 {
sgnezdov 10:8cff30b5b90d 10 return this->_jobTypeID > j2->_jobTypeID;
sgnezdov 0:806403f3d0d1 11 }
sgnezdov 0:806403f3d0d1 12
sgnezdov 0:806403f3d0d1 13 bool JobType::IsEqual(JobType *j2)
sgnezdov 0:806403f3d0d1 14 {
sgnezdov 10:8cff30b5b90d 15 tr_debug("IsEqual %d %d", this->_jobTypeID, j2->_jobTypeID);
sgnezdov 0:806403f3d0d1 16 return this->_jobTypeID == j2->_jobTypeID;
sgnezdov 0:806403f3d0d1 17 }
sgnezdov 0:806403f3d0d1 18
sgnezdov 0:806403f3d0d1 19 bool jtAscending(JobType *j1, JobType *j2)
sgnezdov 0:806403f3d0d1 20 {
sgnezdov 0:806403f3d0d1 21 return j1->AscendingExcl(j2);
sgnezdov 0:806403f3d0d1 22 }
sgnezdov 0:806403f3d0d1 23
sgnezdov 0:806403f3d0d1 24 bool jtIsEqual(JobType *j1, JobType *j2)
sgnezdov 0:806403f3d0d1 25 {
sgnezdov 0:806403f3d0d1 26 return j1->IsEqual(j2);
sgnezdov 0:806403f3d0d1 27 }
sgnezdov 0:806403f3d0d1 28
sgnezdov 9:ee21cd055a97 29 Error JobService::Register(int jobTypeID, jobFunc *job, void *context)
sgnezdov 0:806403f3d0d1 30 {
sgnezdov 9:ee21cd055a97 31 JobType *jt = new JobType(jobTypeID, job, context);
sgnezdov 0:806403f3d0d1 32 node<JobType> *tmp = _jobs.insertOrdered(jt, jtAscending);
sgnezdov 0:806403f3d0d1 33 if (NULL == tmp) {
sgnezdov 10:8cff30b5b90d 34 tr_error("Failed to register job type id %d", jobTypeID);
sgnezdov 0:806403f3d0d1 35 return Error(1);
sgnezdov 0:806403f3d0d1 36 }
sgnezdov 0:806403f3d0d1 37 return NoError;
sgnezdov 0:806403f3d0d1 38 }
sgnezdov 0:806403f3d0d1 39
sgnezdov 9:ee21cd055a97 40 JobType* JobService::GetJob(int jobTypeID)
sgnezdov 0:806403f3d0d1 41 {
sgnezdov 9:ee21cd055a97 42 JobType search = JobType(jobTypeID, NULL, NULL);
sgnezdov 0:806403f3d0d1 43 node<JobType> *found = _jobs.pop(&search, jtIsEqual);
sgnezdov 0:806403f3d0d1 44 if (found == NULL) {
sgnezdov 0:806403f3d0d1 45 return NULL;
sgnezdov 0:806403f3d0d1 46 }
sgnezdov 9:ee21cd055a97 47 return found->data;
sgnezdov 0:806403f3d0d1 48 }
sgnezdov 0:806403f3d0d1 49
sgnezdov 0:806403f3d0d1 50 } // end of namespace