utils
utilities in C for microcontrollers
Data Structures | Macros | Functions
event.h File Reference

an implementation of the publish/subscribe pattern More...

#include "list.h"

Go to the source code of this file.

Data Structures

struct  event
 event state More...
 
struct  event_handler
 event handler state More...
 

Macros

#define EVENT_HANDLER_INIT(handler_fun)
 allows static initialization of an event_handler More...
 
#define EVENT_INIT(event)   { .handlers = LIST_INIT((event).handlers) }
 allows static initialization of an event More...
 

Functions

int event_handler_init (struct event_handler *handler, void(*fun)(struct event *, void *))
 initialize an event handler More...
 
int event_init (struct event *evt)
 initialize a event More...
 
int event_subscribe (struct event *evt, struct event_handler *handler)
 attach an event_handler to an event More...
 
int event_unsubscribe (struct event *evt, struct event_handler *handler)
 detach an event_handler from an event More...
 
int event_publish (struct event *evt, void *ctx)
 publish an event More...
 

Detailed Description

an implementation of the publish/subscribe pattern

depends on list.h

Macro Definition Documentation

◆ EVENT_HANDLER_INIT

#define EVENT_HANDLER_INIT (   handler_fun)
Value:
{ \
.element = (struct list_element){ NULL, NULL }, \
.fun = handler_fun, \
.evt = NULL, \
.flags = 0 \
}
list element state
Definition: list.h:15

allows static initialization of an event_handler

struct event_handler my_handler = EVENT_HANDLER_INIT(my_handler_fun);

◆ EVENT_INIT

#define EVENT_INIT (   event)    { .handlers = LIST_INIT((event).handlers) }

allows static initialization of an event

struct event my_event = EVENT_INIT(my_event);

Function Documentation

◆ event_handler_init()

int event_handler_init ( struct event_handler handler,
void(*)(struct event *, void *)  fun 
)

initialize an event handler

Parameters
handlerpointer to event_handler
funa function to be called when the subscribed event is published

◆ event_init()

int event_init ( struct event evt)

initialize a event

Parameters
evtpointer to event
Returns
0 if successful

◆ event_publish()

int event_publish ( struct event evt,
void *  ctx 
)

publish an event

all subscribed events will have their handler functions called in an unspecified order

See also
event_handler_init and event_subscribe
Parameters
evtpointer to initialized event
ctxpointer to context to pass to subscribed event_handler functions
Returns
0 if successful

◆ event_subscribe()

int event_subscribe ( struct event evt,
struct event_handler handler 
)

attach an event_handler to an event

Note
if one subscribes to an event from within a handler for that event the newly subscribed handler won't be called until the next time that event is published
Parameters
evtpointer to initialized event
handlerpointer to initialized event_handler
Returns
0 if successful

◆ event_unsubscribe()

int event_unsubscribe ( struct event evt,
struct event_handler handler 
)

detach an event_handler from an event

Note
unsubscribing a handler from within that handler's callback function is undefined
Parameters
evtpointer to initialized event
handlerpointer to initialized event_handler
Returns
0 if the handler was unsubscribed