Timer dispather

TimerSubscriber.h

Committer:
Waldek
Date:
2014-06-04
Revision:
0:4d91c430ba00

File content as of revision 0:4d91c430ba00:

#pragma once
#include "mbed.h"

/*-------------------------------------------------------------

(c) W.D. 2014

-------------------------------------------------------------*/

/*  ------ sample usage------
#include "TimerSubscriber.h"

TimerSubscriber timer_user(10, 10000); // 10 in table, 10ms period

class TimerUsing : TimerDependent
{
public:
    TimerUsing();
    {
        timer_user.Subscribe (this, 10);
    };
    virtual ~TimerUsing() 
    {
        timer_user.UnSubscribe(this);
    };
    virtual void TimerEvent(void) 
    {
    };
}

};

TimerUsing TimerUsingClass;

main ()
{
}

*/
class TimerDependent
{
public:
    TimerDependent();
    virtual ~TimerDependent();
    
    virtual void TimerEvent (void) = NULL;
};

class TimerSubscriber 
{
public:
    TimerSubscriber(const unsigned int inTableSize=10, const unsigned int inTickerPeriod=10000);
    ~TimerSubscriber();
    inline unsigned int counter_rd(void) {return TickerCounter;};
    inline unsigned int TickerPeriod_rd(void) {return TickerPeriod;};
    bool Subscribe(class TimerDependent *adres, const unsigned int inDivider=1);
    bool UnSubscribe(const class TimerDependent *adres);
private:
    static struct TimerEntry
    {
        class TimerDependent *CallBack;
        unsigned int Divider;
        unsigned int Counter;
    } *TimerTable;
    static void OnTimer(void);
    static unsigned int TableSize;
    unsigned int TickerPeriod;
    static unsigned int TickerCounter;
};