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