aboutsummaryrefslogtreecommitdiffstats
path: root/os/rt/include/chevents.h
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-08-13 10:28:22 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-08-13 10:28:22 +0000
commitfeb5c483c226819bfcf2b0b48080988e4603dae7 (patch)
tree4e603b73daa38648abdac7b719a0269c24b3fa81 /os/rt/include/chevents.h
parent0c1ba01812cf1509a6c92a08fffb0ee670ce5a2e (diff)
downloadChibiOS-feb5c483c226819bfcf2b0b48080988e4603dae7.tar.gz
ChibiOS-feb5c483c226819bfcf2b0b48080988e4603dae7.tar.bz2
ChibiOS-feb5c483c226819bfcf2b0b48080988e4603dae7.zip
Enhance events in RT. Events documentation cleanup.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7169 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/rt/include/chevents.h')
-rw-r--r--os/rt/include/chevents.h67
1 files changed, 45 insertions, 22 deletions
diff --git a/os/rt/include/chevents.h b/os/rt/include/chevents.h
index f5abb8df7..996cef31a 100644
--- a/os/rt/include/chevents.h
+++ b/os/rt/include/chevents.h
@@ -61,9 +61,12 @@ struct event_listener {
source. */
thread_t *el_listener; /**< @brief Thread interested in the
event source. */
- eventmask_t el_mask; /**< @brief Event identifiers mask. */
+ eventmask_t el_events; /**< @brief Events to be set in
+ the listening thread. */
eventflags_t el_flags; /**< @brief Flags added to the listener
- by the event source.*/
+ by the event source. */
+ eventflags_t el_wflags; /**< @brief Flags that this listener
+ interested in. */
};
/**
@@ -118,28 +121,29 @@ typedef void (*evhandler_t)(eventid_t);
#ifdef __cplusplus
extern "C" {
#endif
- void chEvtRegisterMask(event_source_t *esp,
- event_listener_t *elp,
- eventmask_t mask);
+ void chEvtRegisterMaskWithFlags(event_source_t *esp,
+ event_listener_t *elp,
+ eventmask_t events,
+ eventflags_t wflags);
void chEvtUnregister(event_source_t *esp, event_listener_t *elp);
- eventmask_t chEvtGetAndClearEvents(eventmask_t mask);
- eventmask_t chEvtAddEvents(eventmask_t mask);
+ eventmask_t chEvtGetAndClearEvents(eventmask_t events);
+ eventmask_t chEvtAddEvents(eventmask_t events);
eventflags_t chEvtGetAndClearFlags(event_listener_t *elp);
eventflags_t chEvtGetAndClearFlagsI(event_listener_t *elp);
- void chEvtSignal(thread_t *tp, eventmask_t mask);
- void chEvtSignalI(thread_t *tp, eventmask_t mask);
+ void chEvtSignal(thread_t *tp, eventmask_t events);
+ void chEvtSignalI(thread_t *tp, eventmask_t events);
void chEvtBroadcastFlags(event_source_t *esp, eventflags_t flags);
void chEvtBroadcastFlagsI(event_source_t *esp, eventflags_t flags);
- void chEvtDispatch(const evhandler_t *handlers, eventmask_t mask);
+ void chEvtDispatch(const evhandler_t *handlers, eventmask_t events);
#if CH_CFG_OPTIMIZE_SPEED || !CH_CFG_USE_EVENTS_TIMEOUT
- eventmask_t chEvtWaitOne(eventmask_t mask);
- eventmask_t chEvtWaitAny(eventmask_t mask);
- eventmask_t chEvtWaitAll(eventmask_t mask);
+ eventmask_t chEvtWaitOne(eventmask_t events);
+ eventmask_t chEvtWaitAny(eventmask_t events);
+ eventmask_t chEvtWaitAll(eventmask_t events);
#endif
#if CH_CFG_USE_EVENTS_TIMEOUT
- eventmask_t chEvtWaitOneTimeout(eventmask_t mask, systime_t time);
- eventmask_t chEvtWaitAnyTimeout(eventmask_t mask, systime_t time);
- eventmask_t chEvtWaitAllTimeout(eventmask_t mask, systime_t time);
+ eventmask_t chEvtWaitOneTimeout(eventmask_t events, systime_t time);
+ eventmask_t chEvtWaitAnyTimeout(eventmask_t events, systime_t time);
+ eventmask_t chEvtWaitAllTimeout(eventmask_t events, systime_t time);
#endif
#ifdef __cplusplus
}
@@ -170,25 +174,44 @@ static inline void chEvtObjectInit(event_source_t *esp) {
}
/**
+ * @brief Registers an Event Listener on an Event Source.
+ * @details Once a thread has registered as listener on an event source it
+ * will be notified of all events broadcasted there.
+ * @note Multiple Event Listeners can specify the same bits to be ORed to
+ * different threads.
+ *
+ * @param[in] esp pointer to the @p event_source_t structure
+ * @param[out] elp pointer to the @p event_listener_t structure
+ * @param[in] events the mask of events to be ORed to the thread when
+ * the event source is broadcasted
+ *
+ * @api
+ */
+static inline void chEvtRegisterMask(event_source_t *esp,
+ event_listener_t *elp,
+ eventflags_t events) {
+
+ chEvtRegisterMaskWithFlags(esp, elp, events, (eventflags_t)-1);
+}
+
+/**
* @brief Registers an Event Listener on an Event Source.
* @note Multiple Event Listeners can use the same event identifier, the
* listener will share the callback function.
*
* @param[in] esp pointer to the @p event_source_t structure
* @param[out] elp pointer to the @p event_listener_t structure
- * @param[in] eid numeric identifier assigned to the Event Listener. The
- * identifier is used as index for the event callback
- * function.
+ * @param[in] event numeric identifier assigned to the Event Listener.
* The value must range between zero and the size, in bit,
- * of the @p eventid_t type minus one.
+ * of the @p eventmask_t type minus one.
*
* @api
*/
static inline void chEvtRegister(event_source_t *esp,
event_listener_t *elp,
- eventid_t eid) {
+ eventid_t event) {
- chEvtRegisterMask(esp, elp, EVENT_MASK(eid));
+ chEvtRegisterMask(esp, elp, EVENT_MASK(event));
}
/**