Simple library for scheduling events by polling time, that is, avoiding interrupts.
Dependents: AVC_20110423 AVC_2012
Schedule.h
- Committer:
- shimniok
- Date:
- 2011-04-27
- Revision:
- 0:03d36a9a088b
File content as of revision 0:03d36a9a088b:
typedef unsigned int tick; typedef int value; typedef char flag; /** Simple library for scheduling events by polling time, that is, avoiding interrupts. * Can schedule up to 64 events. The schedule is defined by the number of ticks making * up the initial period of the schedule, and either a start and end value or values * at specific tick values. */ class Schedule { public: /** Sets the behavior of getNext() after the initial schedule period has exceeded. * * @param repeat means the schedule values are repeated * @param hold means the last schedule value is provided after the schdule is done */ enum { repeat=0x02, hold=0x04 }; /** Creates an empty schedule */ Schedule(); /** Creates a schedule based on a linear function. See set() * * @param scale * @param max the maximum tick value of the clock, sets the period * @param start is the value returned at tick == 0 * @param stop is the value returned at tick == ticks-1 * @param m selects the mode / behavior of the schedule when getNext() called after period exceeded */ Schedule(unsigned int scale, tick max, value start, value stop, flag m); /** Sets a ratio of time to ticks. See clockTicked() * * @param timePerTick specifies the number of time units per tick */ void scale(unsigned int scale); /** Sets the total number of ticks to run the loop */ void max(tick max); /** Sets behavior of getNext() when called after tickCount exceeded */ void mode(flag m); /** sets the value at the specified tick * * @param t specifies the scheduled tick * @param v specifies the value to return when tick==whichTick */ void set(tick t, value v); /** Set schedule based on a linear function * * @param ticks total number of ticks over which the schedule is valid * @param startValue is the value returned at tick == 0 * @param stopValue is the value returned at tick == ticks-1 */ void set(unsigned int scale, tick max, value start, value stop, flag m); /** get the next value for schedule's current time. Use with ticked() * * @returns the value at the current schedule's time */ value get(); /** increment the clock and get the next value in the schedule * * @returns the value at the schedule's next clock tick */ value next(); /** Pass in some unit of time and determine if the 'clock' has ticked. * Suppose timePerTick == 20 and you pass in the elapsed time in milliseconds * then this function returns true every 20ms. * * @param time the integer corresponding to elapsed time * @returns true if the elapsed time % timePerTick == 0 */ bool ticked(unsigned int time); /** Are we done with the schedule? * * @returns true if schedule is done; see max() */ bool done(); private: unsigned int _scale; tick _max; tick _clock; flag _mode; int _schedule[64]; bool _validTick(tick t); };