Software based digital input debouncer

Committer:
Waldek
Date:
Mon Jun 02 14:09:31 2014 +0000
Revision:
1:b59d305c4365
Parent:
0:76aea589cbdd
.

Who changed what in which revision?

UserRevisionLine numberNew 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 1:b59d305c4365 4 unsigned int TimerSubscriber::TableSize = 0;
Waldek 1:b59d305c4365 5 unsigned int TimerSubscriber::TickerCounter = 1;
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