diff --git a/sys/include/ztimer.h b/sys/include/ztimer.h index d3976de505..f1f93e3e90 100644 --- a/sys/include/ztimer.h +++ b/sys/include/ztimer.h @@ -349,6 +349,17 @@ void ztimer_handler(ztimer_clock_t *clock); */ void ztimer_set(ztimer_clock_t *clock, ztimer_t *timer, uint32_t val); +/** + * @brief Check if a timer is currently active + * + * @param[in] clock ztimer clock to operate on + * @param[in] timer timer to check + * + * @return > 0 if timer is active + * @return 0 if timer is not active + */ +unsigned ztimer_is_set(const ztimer_clock_t *clock, const ztimer_t *timer); + /** * @brief Remove a timer from a clock * diff --git a/sys/ztimer/core.c b/sys/ztimer/core.c index 7c7fbc3e46..9a8af567d7 100644 --- a/sys/ztimer/core.c +++ b/sys/ztimer/core.c @@ -58,6 +58,15 @@ static unsigned _is_set(const ztimer_clock_t *clock, const ztimer_t *t) } } +unsigned ztimer_is_set(const ztimer_clock_t *clock, const ztimer_t *timer) +{ + unsigned state = irq_disable(); + unsigned res = _is_set(clock, timer); + + irq_restore(state); + return res; +} + void ztimer_remove(ztimer_clock_t *clock, ztimer_t *timer) { unsigned state = irq_disable(); diff --git a/tests/ztimer_periodic/main.c b/tests/ztimer_periodic/main.c index ce2fb557c9..71673a52d7 100644 --- a/tests/ztimer_periodic/main.c +++ b/tests/ztimer_periodic/main.c @@ -70,6 +70,11 @@ int main(void) ztimer_periodic_start(&t); + if (!ztimer_is_set(ZTIMER_MSEC, &t.timer)) { + print_str("Test failed\n"); + return 1; + } + /* wait for periodic to trigger N times */ mutex_lock(&_mutex);