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:
Fri Jul 14 00:00:20 2017 +0000
Revision:
11:df18df016d7e
Parent:
10:8cff30b5b90d
Child:
19:965c8721cc8a
changes related to fixes in jobService GetJob

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 11:df18df016d7e 15 bool rv = this->_jobTypeID == j2->_jobTypeID;
sgnezdov 11:df18df016d7e 16 tr_debug("IsEqual %d==%d: %d", this->_jobTypeID, j2->_jobTypeID, rv);
sgnezdov 11:df18df016d7e 17 return rv;
sgnezdov 0:806403f3d0d1 18 }
sgnezdov 0:806403f3d0d1 19
sgnezdov 0:806403f3d0d1 20 bool jtAscending(JobType *j1, JobType *j2)
sgnezdov 0:806403f3d0d1 21 {
sgnezdov 0:806403f3d0d1 22 return j1->AscendingExcl(j2);
sgnezdov 0:806403f3d0d1 23 }
sgnezdov 0:806403f3d0d1 24
sgnezdov 0:806403f3d0d1 25 bool jtIsEqual(JobType *j1, JobType *j2)
sgnezdov 0:806403f3d0d1 26 {
sgnezdov 0:806403f3d0d1 27 return j1->IsEqual(j2);
sgnezdov 0:806403f3d0d1 28 }
sgnezdov 0:806403f3d0d1 29
sgnezdov 9:ee21cd055a97 30 Error JobService::Register(int jobTypeID, jobFunc *job, void *context)
sgnezdov 0:806403f3d0d1 31 {
sgnezdov 9:ee21cd055a97 32 JobType *jt = new JobType(jobTypeID, job, context);
sgnezdov 0:806403f3d0d1 33 node<JobType> *tmp = _jobs.insertOrdered(jt, jtAscending);
sgnezdov 0:806403f3d0d1 34 if (NULL == tmp) {
sgnezdov 10:8cff30b5b90d 35 tr_error("Failed to register job type id %d", jobTypeID);
sgnezdov 0:806403f3d0d1 36 return Error(1);
sgnezdov 0:806403f3d0d1 37 }
sgnezdov 0:806403f3d0d1 38 return NoError;
sgnezdov 0:806403f3d0d1 39 }
sgnezdov 0:806403f3d0d1 40
sgnezdov 9:ee21cd055a97 41 JobType* JobService::GetJob(int jobTypeID)
sgnezdov 0:806403f3d0d1 42 {
sgnezdov 11:df18df016d7e 43 tr_debug("find with job type id %d", jobTypeID);
sgnezdov 9:ee21cd055a97 44 JobType search = JobType(jobTypeID, NULL, NULL);
sgnezdov 0:806403f3d0d1 45 node<JobType> *found = _jobs.pop(&search, jtIsEqual);
sgnezdov 0:806403f3d0d1 46 if (found == NULL) {
sgnezdov 11:df18df016d7e 47 tr_debug("jobTypeID %d is NOT found", jobTypeID);
sgnezdov 0:806403f3d0d1 48 return NULL;
sgnezdov 0:806403f3d0d1 49 }
sgnezdov 9:ee21cd055a97 50 return found->data;
sgnezdov 0:806403f3d0d1 51 }
sgnezdov 0:806403f3d0d1 52
sgnezdov 0:806403f3d0d1 53 } // end of namespace