EventFramework library allows the creation of an event-driven infrastructure in which small "threads" can handle events in a multithreaded execution context. The EventFramework can be configured to act as a cooperative or a fully-preemptive kernel with fixed-priority scheduling. Furthermore, this kernel matches run-to-completion semantics, and hence a single-stack configuration is enough to keep running this multithreaded execution environment. As running threads shares global stack, a huge quantity of RAM is saved in contrast with traditional RTOSes.

Dependents:   sensors_KL46Z_xmn

Committer:
raulMrello
Date:
Mon Oct 01 10:38:45 2012 +0000
Revision:
0:9d09acc8f9d9
Release 1.00; EventFramework library allows the creation of an event-driven infrastructure for lightweight multithreaded applications with cooperative or fully-preemptive scheduling.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
raulMrello 0:9d09acc8f9d9 1 /* mbed EventFramework Library
raulMrello 0:9d09acc8f9d9 2 * Copyright (c) 2012-2016 raulMrello
raulMrello 0:9d09acc8f9d9 3 *
raulMrello 0:9d09acc8f9d9 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
raulMrello 0:9d09acc8f9d9 5 * of this software and associated documentation files (the "Software"), to deal
raulMrello 0:9d09acc8f9d9 6 * in the Software without restriction, including without limitation the rights
raulMrello 0:9d09acc8f9d9 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
raulMrello 0:9d09acc8f9d9 8 * copies of the Software, and to permit persons to whom the Software is
raulMrello 0:9d09acc8f9d9 9 * furnished to do so, subject to the following conditions:
raulMrello 0:9d09acc8f9d9 10 *
raulMrello 0:9d09acc8f9d9 11 * The above copyright notice and this permission notice shall be included in
raulMrello 0:9d09acc8f9d9 12 * all copies or substantial portions of the Software.
raulMrello 0:9d09acc8f9d9 13 *
raulMrello 0:9d09acc8f9d9 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
raulMrello 0:9d09acc8f9d9 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
raulMrello 0:9d09acc8f9d9 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
raulMrello 0:9d09acc8f9d9 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
raulMrello 0:9d09acc8f9d9 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
raulMrello 0:9d09acc8f9d9 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
raulMrello 0:9d09acc8f9d9 20 * THE SOFTWARE.
raulMrello 0:9d09acc8f9d9 21 */
raulMrello 0:9d09acc8f9d9 22
raulMrello 0:9d09acc8f9d9 23 #ifndef _EVENTHANDLER_H_
raulMrello 0:9d09acc8f9d9 24 #define _EVENTHANDLER_H_
raulMrello 0:9d09acc8f9d9 25
raulMrello 0:9d09acc8f9d9 26 #include "../Types/Types.h"
raulMrello 0:9d09acc8f9d9 27
raulMrello 0:9d09acc8f9d9 28 /** EventHandler class
raulMrello 0:9d09acc8f9d9 29 *
raulMrello 0:9d09acc8f9d9 30 * EventHandler instances are the EventFramework entities which will process published
raulMrello 0:9d09acc8f9d9 31 * events. Each handler has a fixed priority in the range: 0(max) to 65535(min) that the
raulMrello 0:9d09acc8f9d9 32 * scheduler will use to fire its EventDispatchingRoutine when the event they are listening
raulMrello 0:9d09acc8f9d9 33 * has been published. * Each EventHandler can listen to several events, through one or
raulMrello 0:9d09acc8f9d9 34 * various EventDispatchingRoutines.
raulMrello 0:9d09acc8f9d9 35 *
raulMrello 0:9d09acc8f9d9 36 */
raulMrello 0:9d09acc8f9d9 37 class EventHandler{
raulMrello 0:9d09acc8f9d9 38 public:
raulMrello 0:9d09acc8f9d9 39 /** Creates an EventHandler with up to two arguments: the event dispatching function
raulMrello 0:9d09acc8f9d9 40 * and a fixed priority
raulMrello 0:9d09acc8f9d9 41 *
raulMrello 0:9d09acc8f9d9 42 * @param func Dispatching routine to be invoked to process a published event.
raulMrello 0:9d09acc8f9d9 43 * @param data event handler attached data object reference
raulMrello 0:9d09acc8f9d9 44 * @param prio EventHandler priority in the range: 0[max] - 65535[min].
raulMrello 0:9d09acc8f9d9 45 */
raulMrello 0:9d09acc8f9d9 46 EventHandler(uint16_t prio, EventDispatchingRoutine* func=NULL, void* data=NULL);
raulMrello 0:9d09acc8f9d9 47
raulMrello 0:9d09acc8f9d9 48 ~EventHandler();
raulMrello 0:9d09acc8f9d9 49
raulMrello 0:9d09acc8f9d9 50 /** Gets the EventHandler priority.
raulMrello 0:9d09acc8f9d9 51 *
raulMrello 0:9d09acc8f9d9 52 * @returns EventHandler priority
raulMrello 0:9d09acc8f9d9 53 */
raulMrello 0:9d09acc8f9d9 54 uint16_t GetPrio();
raulMrello 0:9d09acc8f9d9 55
raulMrello 0:9d09acc8f9d9 56 /** Executes its dispatching function to process a published event.
raulMrello 0:9d09acc8f9d9 57 *
raulMrello 0:9d09acc8f9d9 58 * @param args data reference to be notified about the event processing.
raulMrello 0:9d09acc8f9d9 59 * @returns Error code in uint32_t format or 0 if success.
raulMrello 0:9d09acc8f9d9 60 */
raulMrello 0:9d09acc8f9d9 61 uint32_t Execute(void * args);
raulMrello 0:9d09acc8f9d9 62
raulMrello 0:9d09acc8f9d9 63 /** Attaches a dispatching function to this handler, if NULL is passed, then has no effect.
raulMrello 0:9d09acc8f9d9 64 *
raulMrello 0:9d09acc8f9d9 65 * @param func Dispatching function to be invoked for event processing.
raulMrello 0:9d09acc8f9d9 66 */
raulMrello 0:9d09acc8f9d9 67 void Attach(EventDispatchingRoutine* func);
raulMrello 0:9d09acc8f9d9 68
raulMrello 0:9d09acc8f9d9 69 protected:
raulMrello 0:9d09acc8f9d9 70 uint32_t(*func)(void*, void*);
raulMrello 0:9d09acc8f9d9 71 uint16_t prio;
raulMrello 0:9d09acc8f9d9 72 void* data;
raulMrello 0:9d09acc8f9d9 73 };
raulMrello 0:9d09acc8f9d9 74
raulMrello 0:9d09acc8f9d9 75 #endif