From 03dccb568dee0085cd5863eb9120de45785cd162 Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Tue, 9 Jan 2018 14:37:45 +0100 Subject: [PATCH 1/5] sys/event/timeout: add timeout_clear() function --- sys/event/timeout.c | 5 +++++ sys/include/event/timeout.h | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/sys/event/timeout.c b/sys/event/timeout.c index c26e63f091..e7d4d0a4d3 100644 --- a/sys/event/timeout.c +++ b/sys/event/timeout.c @@ -26,3 +26,8 @@ void event_timeout_set(event_timeout_t *event_timeout, uint32_t timeout) { xtimer_set(&event_timeout->timer, timeout); } + +void event_timeout_clear(event_timeout_t *event_timeout) +{ + xtimer_remove(&event_timeout->timer); +} diff --git a/sys/include/event/timeout.h b/sys/include/event/timeout.h index 0d13e65ea7..1d101ba3fd 100644 --- a/sys/include/event/timeout.h +++ b/sys/include/event/timeout.h @@ -74,6 +74,18 @@ void event_timeout_init(event_timeout_t *event_timeout, event_queue_t *queue, ev */ void event_timeout_set(event_timeout_t *event_timeout, uint32_t timeout); +/** + * @brief Clear a timeout event + * + * Calling this function will cancel the timeout by removing its underlying + * timer. If the timer has already fired before calling this function, the + * connected event will be put already into the given event queue and this + * function does not have any effect. + * + * @param[in] event_timeout event_timeout context object to use + */ +void event_timeout_clear(event_timeout_t *event_timeout); + #ifdef __cplusplus } #endif From cef3d307c72e1a6fe507d6a424124f8a552b3da3 Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Tue, 9 Jan 2018 15:21:40 +0100 Subject: [PATCH 2/5] sys/event/timeout: fixed typos and line lengths --- sys/include/event/timeout.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/include/event/timeout.h b/sys/include/event/timeout.h index 1d101ba3fd..cbd65a18f3 100644 --- a/sys/include/event/timeout.h +++ b/sys/include/event/timeout.h @@ -54,11 +54,12 @@ typedef struct { /** * @brief Initialize timeout event object * - * @param[in] event_timeout event_timeout object to initilalize + * @param[in] event_timeout event_timeout object to initialize * @param[in] queue queue that the timed-out event will be added to * @param[in] event event to add to queue after timeout */ -void event_timeout_init(event_timeout_t *event_timeout, event_queue_t *queue, event_t *event); +void event_timeout_init(event_timeout_t *event_timeout, event_queue_t *queue, + event_t *event); /** * @brief Set a timeout @@ -69,7 +70,7 @@ void event_timeout_init(event_timeout_t *event_timeout, event_queue_t *queue, ev * @note: the used event_timeout struct must stay valid until after the timeout * event has been processed! * - * @param[in] event_timeout event_timout context onject to use + * @param[in] event_timeout event_timout context object to use * @param[in] timeout timeout in miliseconds */ void event_timeout_set(event_timeout_t *event_timeout, uint32_t timeout); From 6c55b36943246c502332d330ebec8b3f92ca7c1c Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Tue, 9 Jan 2018 14:38:24 +0100 Subject: [PATCH 3/5] tests/event: add test for timeout_clear + cleanup --- tests/events/main.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/events/main.c b/tests/events/main.c index d25212d818..9f0fca411d 100644 --- a/tests/events/main.c +++ b/tests/events/main.c @@ -31,6 +31,7 @@ static uint32_t before; static void callback(event_t *arg); static void custom_callback(event_t *event); static void timed_callback(void *arg); +static void forbidden_callback(void *arg); static event_t event = { .handler = callback }; @@ -51,6 +52,7 @@ typedef struct { static custom_event_t custom_event = { .super.handler = custom_callback, .text = "CUSTOM CALLBACK" }; static event_callback_t event_callback = EVENT_CALLBACK_INIT(timed_callback, 0x12345678); +static event_callback_t noevent_callback = EVENT_CALLBACK_INIT(forbidden_callback, 0); static void custom_callback(event_t *event) { @@ -72,6 +74,17 @@ static void timed_callback(void *arg) printf("[SUCCESS]\n"); } +static void forbidden_callback(void *arg) +{ + (void)arg; + /* this callback should never be triggered! */ + puts("call to forbidden callback"); + puts("[FAILED]"); + while (1) { + assert(false); + } +} + int main(void) { puts("[START] event test application.\n"); @@ -95,6 +108,14 @@ int main(void) before = xtimer_now_usec(); event_timeout_set(&event_timeout, 100000LU); + event_timeout_t event_timeout_canceled; + + puts("posting timed callback with timeout 0.5sec and canceling it again"); + event_timeout_init(&event_timeout_canceled, &queue, + (event_t *)&noevent_callback); + event_timeout_set(&event_timeout_canceled, 500 * US_PER_MS); + event_timeout_clear(&event_timeout_canceled); + printf("launching event queue\n"); event_loop(&queue); From 36743c17a10f6d86a3352113f33ffb5747fbb7bb Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Tue, 9 Jan 2018 15:24:36 +0100 Subject: [PATCH 4/5] tests/events: s/printf/puts/ where applicable --- tests/events/main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/events/main.c b/tests/events/main.c index 9f0fca411d..3fcad0ef5e 100644 --- a/tests/events/main.c +++ b/tests/events/main.c @@ -71,7 +71,7 @@ static void timed_callback(void *arg) uint32_t now = xtimer_now_usec(); assert((now - before >= 100000LU)); printf("triggered timed callback with arg 0x%08x after %" PRIu32 "us\n", (unsigned)arg, now - before); - printf("[SUCCESS]\n"); + puts("[SUCCESS]"); } static void forbidden_callback(void *arg) @@ -98,12 +98,12 @@ int main(void) printf("canceling 0x%08x\n", (unsigned)&event2); event_cancel(&queue, &event2); - printf("posting custom event\n"); + puts("posting custom event"); event_post(&queue, (event_t *)&custom_event); event_timeout_t event_timeout; - printf("posting timed callback with timeout 1sec\n"); + puts("posting timed callback with timeout 1sec"); event_timeout_init(&event_timeout, &queue, (event_t *)&event_callback); before = xtimer_now_usec(); event_timeout_set(&event_timeout, 100000LU); @@ -116,7 +116,7 @@ int main(void) event_timeout_set(&event_timeout_canceled, 500 * US_PER_MS); event_timeout_clear(&event_timeout_canceled); - printf("launching event queue\n"); + puts("launching event queue"); event_loop(&queue); return 0; From 860470df5345307dcd2b0260e6a0145a58877a3a Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Tue, 9 Jan 2018 15:24:54 +0100 Subject: [PATCH 5/5] tests/events: adapt timeout value to comment above --- tests/events/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/events/main.c b/tests/events/main.c index 3fcad0ef5e..6c6e94b2a0 100644 --- a/tests/events/main.c +++ b/tests/events/main.c @@ -106,7 +106,7 @@ int main(void) puts("posting timed callback with timeout 1sec"); event_timeout_init(&event_timeout, &queue, (event_t *)&event_callback); before = xtimer_now_usec(); - event_timeout_set(&event_timeout, 100000LU); + event_timeout_set(&event_timeout, (1 * US_PER_SEC)); event_timeout_t event_timeout_canceled;