X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Fkbd.c;h=b75db360354c82214de1c2c1550bb02ff0bbb45c;hb=15810459b8f5fb09b12cef6f8e4d4e64d167087b;hp=402e07d73832a67c54a36c4b1d9015ac16bb545c;hpb=8e99eb9dbe4188be7df680d45e1efe29a566d11f;p=bertos.git diff --git a/bertos/drv/kbd.c b/bertos/drv/kbd.c index 402e07d7..b75db360 100644 --- a/bertos/drv/kbd.c +++ b/bertos/drv/kbd.c @@ -176,6 +176,12 @@ static void kbd_softint(UNUSED_ARG(iptr_t, arg)) * */ keymask_t kbd_peek(void) +{ + return kbd_peekMask((keymask_t)0xFFFFFFFFFFFFFFFFULL); +} + + +keymask_t kbd_peekMask(keymask_t mask) { keymask_t key = 0; @@ -187,10 +193,12 @@ keymask_t kbd_peek(void) /* Extract an event from the keyboard buffer */ IRQ_DISABLE; - if (kbd_cnt) + if (kbd_cnt && (kbd_buf & mask)) { - --kbd_cnt; - key = kbd_buf; + key = kbd_buf & mask; + kbd_buf &= ~mask; + if (!kbd_buf) + --kbd_cnt; } IRQ_ENABLE; @@ -203,14 +211,23 @@ keymask_t kbd_peek(void) * \note This function is \b not interrupt safe! */ keymask_t kbd_get(void) +{ + return kbd_getMask((keymask_t)0xFFFFFFFFFFFFFFFFULL); +} + +keymask_t kbd_getMask(keymask_t mask) { keymask_t key; #if CONFIG_KBD_POLL == KBD_POLL_SOFTINT - event_wait(&key_pressed); - key = kbd_peek(); + do + { + event_wait(&key_pressed); + key = kbd_peekMask(mask); + } + while (!key); #else - while (!(key = kbd_peek())) + while (!(key = kbd_peekMask(mask))) cpu_relax(); #endif