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