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 #pragma once
sgnezdov 0:806403f3d0d1 2
sgnezdov 0:806403f3d0d1 3 #include "LinkedList.h"
sgnezdov 0:806403f3d0d1 4
sgnezdov 0:806403f3d0d1 5 namespace JobScheduler {
sgnezdov 0:806403f3d0d1 6
sgnezdov 9:ee21cd055a97 7 typedef void (jobFunc)(void *context);
sgnezdov 0:806403f3d0d1 8
sgnezdov 0:806403f3d0d1 9 // Error type uses zero to indicate no Error.
sgnezdov 0:806403f3d0d1 10 // Any other value is an error with error code.
sgnezdov 0:806403f3d0d1 11 typedef int Error;
sgnezdov 0:806403f3d0d1 12
sgnezdov 0:806403f3d0d1 13 const Error NoError = Error(0);
sgnezdov 0:806403f3d0d1 14
sgnezdov 0:806403f3d0d1 15 /**
sgnezdov 0:806403f3d0d1 16 JobType connects job type ID to job function.
sgnezdov 0:806403f3d0d1 17 */
sgnezdov 0:806403f3d0d1 18 class JobType {
sgnezdov 0:806403f3d0d1 19 public:
sgnezdov 9:ee21cd055a97 20 JobType(int jobTypeID, jobFunc *job, void *context)
sgnezdov 9:ee21cd055a97 21 : _jobTypeID(jobTypeID), _job(job), _context(context) {}
sgnezdov 0:806403f3d0d1 22
sgnezdov 9:ee21cd055a97 23 void RunJob() {
sgnezdov 9:ee21cd055a97 24 _job(_context);
sgnezdov 9:ee21cd055a97 25 }
sgnezdov 0:806403f3d0d1 26
sgnezdov 0:806403f3d0d1 27 bool AscendingExcl(JobType *d2);
sgnezdov 0:806403f3d0d1 28 bool IsEqual(JobType *d2);
sgnezdov 0:806403f3d0d1 29
sgnezdov 0:806403f3d0d1 30 private:
sgnezdov 0:806403f3d0d1 31 int _jobTypeID;
sgnezdov 0:806403f3d0d1 32 jobFunc *_job;
sgnezdov 9:ee21cd055a97 33 void *_context;
sgnezdov 0:806403f3d0d1 34 };
sgnezdov 0:806403f3d0d1 35
sgnezdov 0:806403f3d0d1 36 /**
sgnezdov 0:806403f3d0d1 37 JobService connects job type ID to job function.
sgnezdov 0:806403f3d0d1 38 */
sgnezdov 0:806403f3d0d1 39 class JobService {
sgnezdov 0:806403f3d0d1 40 public:
sgnezdov 0:806403f3d0d1 41
sgnezdov 0:806403f3d0d1 42 JobService() {}
sgnezdov 0:806403f3d0d1 43
sgnezdov 0:806403f3d0d1 44 /**
sgnezdov 0:806403f3d0d1 45 Register associates jobTypeID with job and stores association.
sgnezdov 0:806403f3d0d1 46 @returns Error if failed to register.
sgnezdov 0:806403f3d0d1 47 */
sgnezdov 9:ee21cd055a97 48 Error Register(int jobTypeID, jobFunc *job, void *context);
sgnezdov 0:806403f3d0d1 49
sgnezdov 0:806403f3d0d1 50 /**
sgnezdov 0:806403f3d0d1 51 GetJob returns job function based on jobTypeID.
sgnezdov 0:806403f3d0d1 52 @returns NULL if job is not found.
sgnezdov 0:806403f3d0d1 53 */
sgnezdov 9:ee21cd055a97 54 JobType* GetJob(int jobTypeID);
sgnezdov 11:df18df016d7e 55
sgnezdov 0:806403f3d0d1 56 private:
sgnezdov 0:806403f3d0d1 57 /*
sgnezdov 0:806403f3d0d1 58 _jobs stores job registrations.
sgnezdov 0:806403f3d0d1 59 Current implementation uses LinkedList, because it assumes that
sgnezdov 0:806403f3d0d1 60 number of jobs is no more than 10 or 20.
sgnezdov 0:806403f3d0d1 61 */
sgnezdov 0:806403f3d0d1 62 LinkedList<JobType> _jobs;
sgnezdov 0:806403f3d0d1 63 };
sgnezdov 0:806403f3d0d1 64
sgnezdov 0:806403f3d0d1 65 } // end of namespace