Some useful stuff

Dependents:   FtEncoder FtControlSet

Committer:
humlet
Date:
Fri Mar 29 09:55:05 2013 +0000
Revision:
2:8882925900db
Parent:
0:d8249ea0b39e
Buffers tested and fixed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
humlet 0:d8249ea0b39e 1 #ifndef TIMEOUTTWEAKED_H
humlet 0:d8249ea0b39e 2 #define TIMEOUTTWEAKED_H
humlet 0:d8249ea0b39e 3
humlet 0:d8249ea0b39e 4 #include "Timeout.h"
humlet 0:d8249ea0b39e 5
humlet 0:d8249ea0b39e 6 using namespace mbed;
humlet 0:d8249ea0b39e 7
humlet 0:d8249ea0b39e 8 /// Tweaked Timeout class, that publishes the protected TimerEvent methods
humlet 0:d8249ea0b39e 9 /// remove() and insert(unsigned int), which are a bit faster than detach() and attach(...).
humlet 0:d8249ea0b39e 10 /// Useful when you just want to restart a timeout in a short ISR, without hooking
humlet 0:d8249ea0b39e 11 /// in a "new" callback function. Saves ~1.5µs.
humlet 0:d8249ea0b39e 12 class TimeoutTweaked : public Timeout {
humlet 0:d8249ea0b39e 13 public:
humlet 0:d8249ea0b39e 14 /// calls protected TimerEvent::remove()that
humlet 0:d8249ea0b39e 15 /// just removes the timer event from the schedule but keeps the handler that has been attached before
humlet 0:d8249ea0b39e 16 inline void remove() {
humlet 0:d8249ea0b39e 17 TimerEvent::remove();
humlet 0:d8249ea0b39e 18 }
humlet 0:d8249ea0b39e 19 /// calls proteccted TimerEvent::insert() that inserts a new timeout event to the schedule at the given timestamp.
humlet 0:d8249ea0b39e 20 /// e.g. insert(us_ticker_read()+timeout_us)
humlet 0:d8249ea0b39e 21 inline void insert(unsigned int timestamp) {
humlet 0:d8249ea0b39e 22 TimerEvent::insert(timestamp);
humlet 0:d8249ea0b39e 23 }
humlet 0:d8249ea0b39e 24 /// Attach a function to be called by the tweaked Timeout
humlet 0:d8249ea0b39e 25 void attach(void (*fptr)(void)) {
humlet 0:d8249ea0b39e 26 attach_us(fptr, 1e9);
humlet 0:d8249ea0b39e 27 remove();
humlet 0:d8249ea0b39e 28 }
humlet 0:d8249ea0b39e 29 /// Attach a member function to be called by the tweaked Timeout
humlet 0:d8249ea0b39e 30 template<typename T>
humlet 0:d8249ea0b39e 31 void attach(T* tptr, void (T::*mptr)(void)) {
humlet 0:d8249ea0b39e 32 attach_us(tptr, mptr, 1e9);
humlet 0:d8249ea0b39e 33 remove();
humlet 0:d8249ea0b39e 34 }
humlet 0:d8249ea0b39e 35 };
humlet 0:d8249ea0b39e 36
humlet 0:d8249ea0b39e 37 #endif