diff --git a/include/kernel.h b/include/kernel.h index 2f4de2f47f0..b7dad97ab34 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -3337,6 +3337,18 @@ extern void k_poll_event_init(struct k_poll_event *event, uint32_t type, extern int k_poll(struct k_poll_event *events, int num_events, int32_t timeout); +/** + * @brief Initialize a poll signal object. + * + * Ready a poll signal object to be signaled via k_poll_signal(). + * + * @param signal A poll signal. + * + * @return N/A + */ + +extern void k_poll_signal_init(struct k_poll_signal *signal); + /** * @brief Signal a poll signal object. * diff --git a/kernel/poll.c b/kernel/poll.c index b788cd0c112..6f60085d99d 100644 --- a/kernel/poll.c +++ b/kernel/poll.c @@ -317,6 +317,13 @@ int _handle_obj_poll_event(struct k_poll_event **obj_poll_event, uint32_t state) return must_reschedule; } +void k_poll_signal_init(struct k_poll_signal *signal) +{ + signal->poll_event = NULL; + signal->signaled = 0; + /* signal->result is left unitialized */ +} + int k_poll_signal(struct k_poll_signal *signal, int result) { unsigned int key = irq_lock();