Timer dispather
TimerSubscriber.cpp@0:4d91c430ba00, 2014-06-04 (annotated)
- Committer:
- Waldek
- Date:
- Wed Jun 04 10:02:31 2014 +0000
- Revision:
- 0:4d91c430ba00
Working version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Waldek | 0:4d91c430ba00 | 1 | #include "TimerSubscriber.h" |
Waldek | 0:4d91c430ba00 | 2 | |
Waldek | 0:4d91c430ba00 | 3 | struct TimerSubscriber::TimerEntry *TimerSubscriber::TimerTable = NULL; |
Waldek | 0:4d91c430ba00 | 4 | unsigned int TimerSubscriber::TableSize = 0; |
Waldek | 0:4d91c430ba00 | 5 | unsigned int TimerSubscriber::TickerCounter = 1; |
Waldek | 0:4d91c430ba00 | 6 | |
Waldek | 0:4d91c430ba00 | 7 | static Ticker timer; |
Waldek | 0:4d91c430ba00 | 8 | extern TimerSubscriber timer_user; |
Waldek | 0:4d91c430ba00 | 9 | |
Waldek | 0:4d91c430ba00 | 10 | TimerSubscriber::TimerSubscriber(const unsigned int inTableSize, const unsigned int inTickerPeriod) : |
Waldek | 0:4d91c430ba00 | 11 | TickerPeriod(inTickerPeriod) |
Waldek | 0:4d91c430ba00 | 12 | { |
Waldek | 0:4d91c430ba00 | 13 | TableSize = inTableSize; |
Waldek | 0:4d91c430ba00 | 14 | TimerTable = new TimerEntry[TableSize]; |
Waldek | 0:4d91c430ba00 | 15 | for (int i=0; i<TableSize; i++) |
Waldek | 0:4d91c430ba00 | 16 | TimerTable[i].CallBack = NULL; |
Waldek | 0:4d91c430ba00 | 17 | TickerCounter = 0; |
Waldek | 0:4d91c430ba00 | 18 | timer.attach_us(&OnTimer, TickerPeriod); |
Waldek | 0:4d91c430ba00 | 19 | |
Waldek | 0:4d91c430ba00 | 20 | return; |
Waldek | 0:4d91c430ba00 | 21 | } |
Waldek | 0:4d91c430ba00 | 22 | |
Waldek | 0:4d91c430ba00 | 23 | TimerSubscriber::~TimerSubscriber() |
Waldek | 0:4d91c430ba00 | 24 | { |
Waldek | 0:4d91c430ba00 | 25 | delete[] TimerTable; |
Waldek | 0:4d91c430ba00 | 26 | } |
Waldek | 0:4d91c430ba00 | 27 | |
Waldek | 0:4d91c430ba00 | 28 | void TimerSubscriber::OnTimer(void) |
Waldek | 0:4d91c430ba00 | 29 | { |
Waldek | 0:4d91c430ba00 | 30 | for (int i=0; i<TableSize; i++) |
Waldek | 0:4d91c430ba00 | 31 | if (NULL != TimerTable[i].CallBack) |
Waldek | 0:4d91c430ba00 | 32 | if (0 == --TimerTable[i].Counter) |
Waldek | 0:4d91c430ba00 | 33 | { |
Waldek | 0:4d91c430ba00 | 34 | TimerTable[i].CallBack->TimerEvent(); |
Waldek | 0:4d91c430ba00 | 35 | TimerTable[i].Counter = TimerTable[i].Divider; |
Waldek | 0:4d91c430ba00 | 36 | }; |
Waldek | 0:4d91c430ba00 | 37 | TickerCounter++; |
Waldek | 0:4d91c430ba00 | 38 | } |
Waldek | 0:4d91c430ba00 | 39 | |
Waldek | 0:4d91c430ba00 | 40 | bool TimerSubscriber::Subscribe(class TimerDependent *adres, const unsigned int inDivider) |
Waldek | 0:4d91c430ba00 | 41 | { |
Waldek | 0:4d91c430ba00 | 42 | for (int i=0; i<TableSize; i++) |
Waldek | 0:4d91c430ba00 | 43 | if (NULL == TimerTable[i].CallBack) |
Waldek | 0:4d91c430ba00 | 44 | { |
Waldek | 0:4d91c430ba00 | 45 | TimerTable[i].CallBack = adres; |
Waldek | 0:4d91c430ba00 | 46 | TimerTable[i].Divider = inDivider; |
Waldek | 0:4d91c430ba00 | 47 | TimerTable[i].Counter = inDivider; |
Waldek | 0:4d91c430ba00 | 48 | return true; |
Waldek | 0:4d91c430ba00 | 49 | } |
Waldek | 0:4d91c430ba00 | 50 | return false; |
Waldek | 0:4d91c430ba00 | 51 | } |
Waldek | 0:4d91c430ba00 | 52 | |
Waldek | 0:4d91c430ba00 | 53 | bool TimerSubscriber::UnSubscribe(const class TimerDependent *adres) |
Waldek | 0:4d91c430ba00 | 54 | { |
Waldek | 0:4d91c430ba00 | 55 | for (int i=0; i<TableSize; i++) |
Waldek | 0:4d91c430ba00 | 56 | if (adres == TimerTable[i].CallBack) |
Waldek | 0:4d91c430ba00 | 57 | { |
Waldek | 0:4d91c430ba00 | 58 | TimerTable[i].CallBack = NULL; |
Waldek | 0:4d91c430ba00 | 59 | return true; |
Waldek | 0:4d91c430ba00 | 60 | } |
Waldek | 0:4d91c430ba00 | 61 | return false; |
Waldek | 0:4d91c430ba00 | 62 | } |
Waldek | 0:4d91c430ba00 | 63 | |
Waldek | 0:4d91c430ba00 | 64 | //--------------------------------------------------------------------------------------- |
Waldek | 0:4d91c430ba00 | 65 | // class TimerDependent |
Waldek | 0:4d91c430ba00 | 66 | //--------------------------------------------------------------------------------------- |
Waldek | 0:4d91c430ba00 | 67 | |
Waldek | 0:4d91c430ba00 | 68 | TimerDependent::TimerDependent() |
Waldek | 0:4d91c430ba00 | 69 | { |
Waldek | 0:4d91c430ba00 | 70 | } |
Waldek | 0:4d91c430ba00 | 71 | |
Waldek | 0:4d91c430ba00 | 72 | TimerDependent::~TimerDependent() |
Waldek | 0:4d91c430ba00 | 73 | { |
Waldek | 0:4d91c430ba00 | 74 | } |
Waldek | 0:4d91c430ba00 | 75 |