job scheduler works with run once and run periodic schedules. Stop logic is not fully thought through.
Dependents: JobSchedulerDemo Borsch
jobService.cpp@19:965c8721cc8a, 2017-08-04 (annotated)
- 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?
User | Revision | Line number | New 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 |