diff options
Diffstat (limited to 'uisimulator')
-rw-r--r-- | uisimulator/sdl/kernel.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/uisimulator/sdl/kernel.c b/uisimulator/sdl/kernel.c index 96654d50ac..220d069721 100644 --- a/uisimulator/sdl/kernel.c +++ b/uisimulator/sdl/kernel.c | |||
@@ -405,6 +405,26 @@ bool queue_empty(const struct event_queue* q) | |||
405 | return ( q->read == q->write ); | 405 | return ( q->read == q->write ); |
406 | } | 406 | } |
407 | 407 | ||
408 | bool queue_peek(struct event_queue *q, struct queue_event *ev) | ||
409 | { | ||
410 | if (q->read == q->write) | ||
411 | return false; | ||
412 | |||
413 | bool have_msg = false; | ||
414 | |||
415 | int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); | ||
416 | |||
417 | if (q->read != q->write) | ||
418 | { | ||
419 | *ev = q->events[q->read & QUEUE_LENGTH_MASK]; | ||
420 | have_msg = true; | ||
421 | } | ||
422 | |||
423 | set_irq_level(oldlevel); | ||
424 | |||
425 | return have_msg; | ||
426 | } | ||
427 | |||
408 | void queue_clear(struct event_queue* q) | 428 | void queue_clear(struct event_queue* q) |
409 | { | 429 | { |
410 | int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); | 430 | int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); |