Some useful stuff
Dependents: FtEncoder FtControlSet
TimeoutTweaked.h@2:8882925900db, 2013-03-29 (annotated)
- 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?
User | Revision | Line number | New 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 |