UserAllocatedEvent class example to manually instantiate, configure and post events onto the static EventQueue.

Committer:
macboc01@E110593.Arm.com
Date:
Wed Sep 04 10:28:32 2019 +0200
Revision:
0:c7b889925ac6
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
macboc01@E110593.Arm.com 0:c7b889925ac6 1 #include "mbed.h"
macboc01@E110593.Arm.com 0:c7b889925ac6 2
macboc01@E110593.Arm.com 0:c7b889925ac6 3
macboc01@E110593.Arm.com 0:c7b889925ac6 4 // Creates static event queue
macboc01@E110593.Arm.com 0:c7b889925ac6 5 static EventQueue queue(0);
macboc01@E110593.Arm.com 0:c7b889925ac6 6 void handler(int count);
macboc01@E110593.Arm.com 0:c7b889925ac6 7 // Creates an event for later bound
macboc01@E110593.Arm.com 0:c7b889925ac6 8 auto event1 = make_user_allocated_event(handler, 1);
macboc01@E110593.Arm.com 0:c7b889925ac6 9 auto event2 = make_user_allocated_event(handler, 2);
macboc01@E110593.Arm.com 0:c7b889925ac6 10 // Creates an event bound to the specified event queue
macboc01@E110593.Arm.com 0:c7b889925ac6 11 auto event3 = queue.make_user_allocated_event(handler, 3);
macboc01@E110593.Arm.com 0:c7b889925ac6 12
macboc01@E110593.Arm.com 0:c7b889925ac6 13 void handler(int count) {
macboc01@E110593.Arm.com 0:c7b889925ac6 14 printf("UserAllocatedEvent = %d \n\r", count);
macboc01@E110593.Arm.com 0:c7b889925ac6 15 return;
macboc01@E110593.Arm.com 0:c7b889925ac6 16 }
macboc01@E110593.Arm.com 0:c7b889925ac6 17
macboc01@E110593.Arm.com 0:c7b889925ac6 18 void post_events(void)
macboc01@E110593.Arm.com 0:c7b889925ac6 19 {
macboc01@E110593.Arm.com 0:c7b889925ac6 20 // Events can be posted multiple times and enqueue gracefully until
macboc01@E110593.Arm.com 0:c7b889925ac6 21 // the dispatch function is called.
macboc01@E110593.Arm.com 0:c7b889925ac6 22 event1.call_on(&queue);
macboc01@E110593.Arm.com 0:c7b889925ac6 23 event2.call_on(&queue);
macboc01@E110593.Arm.com 0:c7b889925ac6 24 event3.call();
macboc01@E110593.Arm.com 0:c7b889925ac6 25 }
macboc01@E110593.Arm.com 0:c7b889925ac6 26
macboc01@E110593.Arm.com 0:c7b889925ac6 27 int main()
macboc01@E110593.Arm.com 0:c7b889925ac6 28 {
macboc01@E110593.Arm.com 0:c7b889925ac6 29 Thread event_thread;
macboc01@E110593.Arm.com 0:c7b889925ac6 30
macboc01@E110593.Arm.com 0:c7b889925ac6 31 // The event can be manually configured for special timing requirements
macboc01@E110593.Arm.com 0:c7b889925ac6 32 // specified in milliseconds
macboc01@E110593.Arm.com 0:c7b889925ac6 33 // Starting delay - 100 msec
macboc01@E110593.Arm.com 0:c7b889925ac6 34 // Delay between each event - 200msec
macboc01@E110593.Arm.com 0:c7b889925ac6 35 event1.delay(100);
macboc01@E110593.Arm.com 0:c7b889925ac6 36 event1.period(200);
macboc01@E110593.Arm.com 0:c7b889925ac6 37 event2.delay(100);
macboc01@E110593.Arm.com 0:c7b889925ac6 38 event2.period(200);
macboc01@E110593.Arm.com 0:c7b889925ac6 39 event3.delay(100);
macboc01@E110593.Arm.com 0:c7b889925ac6 40 event3.period(200);
macboc01@E110593.Arm.com 0:c7b889925ac6 41
macboc01@E110593.Arm.com 0:c7b889925ac6 42 event_thread.start(callback(post_events));
macboc01@E110593.Arm.com 0:c7b889925ac6 43
macboc01@E110593.Arm.com 0:c7b889925ac6 44 // Posted events are dispatched in the context of the queue's
macboc01@E110593.Arm.com 0:c7b889925ac6 45 // dispatch function
macboc01@E110593.Arm.com 0:c7b889925ac6 46 queue.dispatch(400); // Dispatch time - 400msec
macboc01@E110593.Arm.com 0:c7b889925ac6 47 // 400 msec - Only 2 set of events will be dispatched as period is 200 msec
macboc01@E110593.Arm.com 0:c7b889925ac6 48
macboc01@E110593.Arm.com 0:c7b889925ac6 49 event_thread.join();
macboc01@E110593.Arm.com 0:c7b889925ac6 50 }