Timer dispather
TimerSubscriber.cpp
- Committer:
- Waldek
- Date:
- 2014-06-04
- Revision:
- 0:4d91c430ba00
File content as of revision 0:4d91c430ba00:
#include "TimerSubscriber.h" struct TimerSubscriber::TimerEntry *TimerSubscriber::TimerTable = NULL; unsigned int TimerSubscriber::TableSize = 0; unsigned int TimerSubscriber::TickerCounter = 1; static Ticker timer; extern TimerSubscriber timer_user; TimerSubscriber::TimerSubscriber(const unsigned int inTableSize, const unsigned int inTickerPeriod) : TickerPeriod(inTickerPeriod) { TableSize = inTableSize; TimerTable = new TimerEntry[TableSize]; for (int i=0; i<TableSize; i++) TimerTable[i].CallBack = NULL; TickerCounter = 0; timer.attach_us(&OnTimer, TickerPeriod); return; } TimerSubscriber::~TimerSubscriber() { delete[] TimerTable; } void TimerSubscriber::OnTimer(void) { for (int i=0; i<TableSize; i++) if (NULL != TimerTable[i].CallBack) if (0 == --TimerTable[i].Counter) { TimerTable[i].CallBack->TimerEvent(); TimerTable[i].Counter = TimerTable[i].Divider; }; TickerCounter++; } bool TimerSubscriber::Subscribe(class TimerDependent *adres, const unsigned int inDivider) { for (int i=0; i<TableSize; i++) if (NULL == TimerTable[i].CallBack) { TimerTable[i].CallBack = adres; TimerTable[i].Divider = inDivider; TimerTable[i].Counter = inDivider; return true; } return false; } bool TimerSubscriber::UnSubscribe(const class TimerDependent *adres) { for (int i=0; i<TableSize; i++) if (adres == TimerTable[i].CallBack) { TimerTable[i].CallBack = NULL; return true; } return false; } //--------------------------------------------------------------------------------------- // class TimerDependent //--------------------------------------------------------------------------------------- TimerDependent::TimerDependent() { } TimerDependent::~TimerDependent() { }