Timer dispather

Committer:
Waldek
Date:
Wed Jun 04 10:02:31 2014 +0000
Revision:
0:4d91c430ba00
Working version

Who changed what in which revision?

UserRevisionLine numberNew 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