From e06cbce940863906f1653cc7a0f359bf30c3f99d Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Thu, 13 Feb 2020 16:03:25 +0100 Subject: [PATCH] sys/event: add event_wait_timeout64() --- sys/event/event.c | 22 ++++++++++++++++++---- sys/include/event.h | 11 +++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/sys/event/event.c b/sys/event/event.c index 96579d0a7d..56c1ae5b94 100644 --- a/sys/event/event.c +++ b/sys/event/event.c @@ -115,14 +115,12 @@ event_t *event_wait(event_queue_t *queue) } #ifdef MODULE_XTIMER -event_t *event_wait_timeout(event_queue_t *queue, uint32_t timeout) +static event_t *_wait_timeout(event_queue_t *queue, xtimer_t *timer) { assert(queue); event_t *result; - xtimer_t timer; thread_flags_t flags = 0; - xtimer_set_timeout_flag(&timer, timeout); do { result = event_get(queue); if (result == NULL) { @@ -131,11 +129,27 @@ event_t *event_wait_timeout(event_queue_t *queue, uint32_t timeout) } while ((result == NULL) && (flags & THREAD_FLAG_EVENT)); if (result) { - xtimer_remove(&timer); + xtimer_remove(timer); } return result; } + +event_t *event_wait_timeout(event_queue_t *queue, uint32_t timeout) +{ + xtimer_t timer; + + xtimer_set_timeout_flag(&timer, timeout); + return _wait_timeout(queue, &timer); +} + +event_t *event_wait_timeout64(event_queue_t *queue, uint64_t timeout) +{ + xtimer_t timer; + + xtimer_set_timeout_flag64(&timer, timeout); + return _wait_timeout(queue, &timer); +} #endif void event_loop(event_queue_t *queue) diff --git a/sys/include/event.h b/sys/include/event.h index 292f64af8c..2814a16347 100644 --- a/sys/include/event.h +++ b/sys/include/event.h @@ -242,6 +242,17 @@ event_t *event_wait(event_queue_t *queue); * @return NULL if timeout expired before an event was posted */ event_t *event_wait_timeout(event_queue_t *queue, uint32_t timeout); + +/** + * @brief Get next event from event queue, blocking until timeout expires + * + * @param[in] queue queue to query for an event + * @param[in] timeout maximum time to wait for an event to be posted in us + * + * @return pointer to next event if event was taken from the queue + * @return NULL if timeout expired before an event was posted + */ +event_t *event_wait_timeout64(event_queue_t *queue, uint64_t timeout); #endif /**