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 Aug 04 00:20:06 2017 +0000
Revision:
19:965c8721cc8a
Parent:
11:df18df016d7e
disabled some trace of core modules, because it is no longer necessary

Who changed what in which revision?

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