Some useful stuff

Dependents:   FtEncoder FtControlSet

TimeoutTweaked.h

Committer:
humlet
Date:
2013-03-29
Revision:
2:8882925900db
Parent:
0:d8249ea0b39e

File content as of revision 2:8882925900db:

#ifndef TIMEOUTTWEAKED_H
#define TIMEOUTTWEAKED_H

#include "Timeout.h"

using namespace mbed; 

/// Tweaked Timeout class, that publishes the protected TimerEvent methods
/// remove() and insert(unsigned int), which are a bit faster than detach() and attach(...).
/// Useful when you just want to restart a timeout in a short ISR, without hooking 
/// in a "new" callback function. Saves ~1.5µs. 
class  TimeoutTweaked : public Timeout {
public:
    /// calls protected TimerEvent::remove()that
    /// just removes the timer event from the schedule but keeps the handler that has been attached before
    inline void remove() {
        TimerEvent::remove();
    }
    /// calls proteccted TimerEvent::insert() that inserts a new timeout event to the schedule at the given timestamp.
    /// e.g. insert(us_ticker_read()+timeout_us)
    inline void insert(unsigned int timestamp) {
        TimerEvent::insert(timestamp);
    }
    /// Attach a function to be called by the tweaked Timeout
    void attach(void (*fptr)(void)) {
        attach_us(fptr, 1e9);
        remove();
    }
    /// Attach a member function to be called by the tweaked Timeout
    template<typename T>
    void attach(T* tptr, void (T::*mptr)(void)) {
        attach_us(tptr, mptr, 1e9);
        remove();
    }
};

#endif