diff --git a/firmware/kernel/include/queue.h b/firmware/kernel/include/queue.h index a9c3b5a93a..da03f5312e 100644 --- a/firmware/kernel/include/queue.h +++ b/firmware/kernel/include/queue.h @@ -141,6 +141,7 @@ extern void queue_reply(struct event_queue *q, intptr_t retval); extern bool queue_in_queue_send(struct event_queue *q); #endif /* HAVE_EXTENDED_MESSAGING_AND_NAME */ extern bool queue_empty(const struct event_queue* q); +extern bool queue_full(const struct event_queue* q); extern bool queue_peek(struct event_queue *q, struct queue_event *ev); #define QPEEK_FILTER_COUNT_MASK (0xffu) /* 0x00=1 filter, 0xff=256 filters */ diff --git a/firmware/kernel/queue.c b/firmware/kernel/queue.c index 5566604c5d..29611e34c7 100644 --- a/firmware/kernel/queue.c +++ b/firmware/kernel/queue.c @@ -701,6 +701,12 @@ bool queue_empty(const struct event_queue* q) return ( q->read == q->write ); } +/* Poll queue to see if it is full */ +bool queue_full(const struct event_queue* q) +{ + return ((q->write - q->read) >= QUEUE_LENGTH); +} + void queue_clear(struct event_queue* q) { int oldlevel;