Note! This project has moved to github.com/armmbed/mbed-events

Dependents:   SimpleHTTPExample

This repository has been superceded

This project has moved to mbed-events

Composable event loops combine the cheap synchronicity of event loops with the composability of preempted threads.

Two modular event queue classes are provided:

  • EventLoop - for loops coupled with a c++ managed thread
  • EventQueue - for manually managed event queues

The Event class takes advantage of the extensibility of FuncPtr to allow an event to be passed through APIs as a normal function.

More information on composable event loops.

Committer:
Christopher Haster
Date:
Fri Apr 22 02:59:41 2016 -0500
Revision:
10:62767e708bb6
Parent:
2:11cda6bead99
Child:
14:5abf2ccf2dbf
Clean mbed namespace from events

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Christopher Haster 0:b1b901ae3696 1 /* EventQueue
Christopher Haster 0:b1b901ae3696 2 *
Christopher Haster 0:b1b901ae3696 3 * Flexible queue for managing events
Christopher Haster 0:b1b901ae3696 4 */
Christopher Haster 0:b1b901ae3696 5 #ifndef EVENT_QUEUE_H
Christopher Haster 0:b1b901ae3696 6 #define EVENT_QUEUE_H
Christopher Haster 0:b1b901ae3696 7
Christopher Haster 10:62767e708bb6 8 #include "Timer.h"
Christopher Haster 10:62767e708bb6 9 #include "Ticker.h"
Christopher Haster 2:11cda6bead99 10
Christopher Haster 0:b1b901ae3696 11
Christopher Haster 0:b1b901ae3696 12 /** Flexible queue for managing events
Christopher Haster 0:b1b901ae3696 13 */
Christopher Haster 0:b1b901ae3696 14 class EventQueue {
Christopher Haster 0:b1b901ae3696 15 public:
Christopher Haster 2:11cda6bead99 16 /** Create an event queue
Christopher Haster 2:11cda6bead99 17 */
Christopher Haster 2:11cda6bead99 18 EventQueue();
Christopher Haster 2:11cda6bead99 19
Christopher Haster 0:b1b901ae3696 20 /** Dispatch pending events
Christopher Haster 1:2202c19570e5 21 * @param ms Time to wait for events in milliseconds,
Christopher Haster 0:b1b901ae3696 22 * 0 indicates to return immediately if no events are pending
Christopher Haster 0:b1b901ae3696 23 */
Christopher Haster 1:2202c19570e5 24 void dispatch(int ms=-1);
Christopher Haster 0:b1b901ae3696 25
Christopher Haster 2:11cda6bead99 26 /** Get current tick of the event queue
Christopher Haster 2:11cda6bead99 27 * @return Number of milliseconds since the queue was instantiated,
Christopher Haster 2:11cda6bead99 28 * this count intentionally overflows to 0 after 2^32-1
Christopher Haster 2:11cda6bead99 29 */
Christopher Haster 2:11cda6bead99 30 unsigned get_tick();
Christopher Haster 2:11cda6bead99 31
Christopher Haster 0:b1b901ae3696 32 private:
Christopher Haster 0:b1b901ae3696 33 struct event {
Christopher Haster 1:2202c19570e5 34 struct event *volatile next;
Christopher Haster 2:11cda6bead99 35 unsigned target;
Christopher Haster 2:11cda6bead99 36 bool registered;
Christopher Haster 2:11cda6bead99 37
Christopher Haster 2:11cda6bead99 38 int delay;
Christopher Haster 2:11cda6bead99 39 int period;
Christopher Haster 2:11cda6bead99 40
Christopher Haster 0:b1b901ae3696 41 void (*callback)(void *);
Christopher Haster 0:b1b901ae3696 42 void *data;
Christopher Haster 0:b1b901ae3696 43 };
Christopher Haster 0:b1b901ae3696 44
Christopher Haster 2:11cda6bead99 45 void event_register(struct event *event, int ms);
Christopher Haster 0:b1b901ae3696 46 void event_unregister(struct event *event);
Christopher Haster 0:b1b901ae3696 47
Christopher Haster 2:11cda6bead99 48 void tick();
Christopher Haster 2:11cda6bead99 49 void wakeup();
Christopher Haster 2:11cda6bead99 50
Christopher Haster 2:11cda6bead99 51 struct event *volatile _queue;
Christopher Haster 2:11cda6bead99 52 unsigned _tick;
Christopher Haster 2:11cda6bead99 53 mbed::Ticker _ticker;
Christopher Haster 2:11cda6bead99 54 mbed::Timer _timer;
Christopher Haster 2:11cda6bead99 55
Christopher Haster 0:b1b901ae3696 56 template <typename F>
Christopher Haster 0:b1b901ae3696 57 friend class Event;
Christopher Haster 0:b1b901ae3696 58 };
Christopher Haster 0:b1b901ae3696 59
Christopher Haster 0:b1b901ae3696 60
Christopher Haster 0:b1b901ae3696 61 #endif