job scheduler works with run once and run periodic schedules. Stop logic is not fully thought through.
Dependents: JobSchedulerDemo Borsch
jobService.cpp@10:8cff30b5b90d, 2017-07-13 (annotated)
- 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?
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 | 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 |