Loading...
Searching...
No Matches
deferred_callback.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2025 ML!PA Consulting GmbH
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser
5 * General Public License v2.1. See the file LICENSE in the top level
6 * directory for more details.
7 */
8
9#pragma once
10
26
27#include <assert.h>
28#include "event/callback.h"
29#include "ztimer.h"
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
43
48static inline void _event_deferred_post(void *arg)
49{
50 event_deferred_callback_t *event_timeout = arg;
51
52 event_post(event_timeout->queue, arg);
53}
54
68 event_queue_t *queue,
69 ztimer_clock_t *clock, uint32_t timeout,
70 void (*callback)(void *), void *arg)
71{
72 /* cancel the event if it has already been queued */
73 ztimer_remove(clock, &event->timer);
74 event_cancel(queue, &event->event.super);
75
76 event->event = (event_callback_t) {
77 .super.handler = _event_callback_handler,
78 .callback = callback,
79 .arg = arg,
80 };
81 event->timer = (ztimer_t) {
82 .callback = _event_deferred_post,
83 .arg = event,
84 };
85 event->queue = queue;
86
87 ztimer_set(clock, &event->timer, timeout);
88}
89
97 ztimer_clock_t *clock)
98{
99 ztimer_remove(clock, &event->timer);
100 event_cancel(event->queue, (event_t *)event);
101}
102
103#ifdef __cplusplus
104}
105#endif
POSIX.1-2008 compliant version of the assert macro.
Provides a callback-with-argument event type.
void _event_callback_handler(event_t *event)
event callback handler function (used internally)
static void _event_deferred_post(void *arg)
Internal helper function for ztimer callback.
static void event_deferred_callback_cancel(event_deferred_callback_t *event, ztimer_clock_t *clock)
Cancel a callback function if it has not been executed yet.
static void event_deferred_callback_post(event_deferred_callback_t *event, event_queue_t *queue, ztimer_clock_t *clock, uint32_t timeout, void(*callback)(void *), void *arg)
Execute a callback function in the event thread after a timeout.
void event_post(event_queue_t *queue, event_t *event)
Queue an event.
void event_cancel(event_queue_t *queue, event_t *event)
Cancel a queued event.
struct PTRTAG event_queue_t
event queue structure
struct event event_t
event structure forward declaration
Definition event.h:135
struct ztimer_clock ztimer_clock_t
ztimer_clock_t forward declaration
Definition ztimer.h:290
uint32_t ztimer_set(ztimer_clock_t *clock, ztimer_t *timer, uint32_t val)
Set a timer on a clock.
bool ztimer_remove(ztimer_clock_t *clock, ztimer_t *timer)
Remove a timer from a clock.
Callback Event structure definition.
Definition callback.h:48
Deferred Callback Event structure.
ztimer_t timer
ztimer object used for timeout
event_callback_t event
callback event portion
event_queue_t * queue
event queue to post event to
event structure
Definition event.h:145
ztimer structure
Definition ztimer.h:319
ztimer API