From fb572f98422f75f5d6685cce1ec9aa4a6bd9a3d2 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Mon, 7 Jun 2021 12:07:57 +0000 Subject: [PATCH] Added chEvtRegisterMaskWithFlagsI(). git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@14512 27425a3e-05d8-49a3-a47f-9c15f0e5edd8 --- os/rt/include/chevents.h | 4 ++++ os/rt/src/chevents.c | 38 ++++++++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/os/rt/include/chevents.h b/os/rt/include/chevents.h index 43962c636..563667c8c 100644 --- a/os/rt/include/chevents.h +++ b/os/rt/include/chevents.h @@ -120,6 +120,10 @@ typedef void (*evhandler_t)(eventid_t id); #ifdef __cplusplus extern "C" { #endif + void chEvtRegisterMaskWithFlagsI(event_source_t *esp, + event_listener_t *elp, + eventmask_t events, + eventflags_t wflags); void chEvtRegisterMaskWithFlags(event_source_t *esp, event_listener_t *elp, eventmask_t events, diff --git a/os/rt/src/chevents.c b/os/rt/src/chevents.c index 81138ab1b..3a2594c1a 100644 --- a/os/rt/src/chevents.c +++ b/os/rt/src/chevents.c @@ -98,23 +98,47 @@ * the event source is broadcasted * @param[in] wflags mask of flags the listening thread is interested in * - * @api + * @iclass */ -void chEvtRegisterMaskWithFlags(event_source_t *esp, - event_listener_t *elp, - eventmask_t events, - eventflags_t wflags) { +void chEvtRegisterMaskWithFlagsI(event_source_t *esp, + event_listener_t *elp, + eventmask_t events, + eventflags_t wflags) { thread_t *currtp = chThdGetSelfX(); + chDbgCheckClassI(); chDbgCheck((esp != NULL) && (elp != NULL)); - chSysLock(); elp->next = esp->next; esp->next = elp; elp->listener = currtp; elp->events = events; elp->flags = (eventflags_t)0; elp->wflags = wflags; +} + +/** + * @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[in] elp pointer to the @p event_listener_t structure + * @param[in] events events to be ORed to the thread when + * the event source is broadcasted + * @param[in] wflags mask of flags the listening thread is interested in + * + * @api + */ +void chEvtRegisterMaskWithFlags(event_source_t *esp, + event_listener_t *elp, + eventmask_t events, + eventflags_t wflags) { + + chSysLock(); + chEvtRegisterMaskWithFlagsI(esp, elp, events, wflags); chSysUnlock(); } @@ -164,6 +188,8 @@ eventmask_t chEvtGetAndClearEventsI(eventmask_t events) { thread_t *currtp = chThdGetSelfX(); eventmask_t m; + chDbgCheckClassI(); + m = currtp->epending & events; currtp->epending &= ~events;