Fix bug in at_keyboard which blocked the menu countdown.
This commit is contained in:
parent
02772f981b
commit
8f44a91ea9
1 changed files with 18 additions and 2 deletions
|
@ -24,6 +24,7 @@
|
||||||
#include <grub/term.h>
|
#include <grub/term.h>
|
||||||
|
|
||||||
static short at_keyboard_status = 0;
|
static short at_keyboard_status = 0;
|
||||||
|
static int pending_key = -1;
|
||||||
|
|
||||||
#define KEYBOARD_STATUS_SHIFT_L (1 << 0)
|
#define KEYBOARD_STATUS_SHIFT_L (1 << 0)
|
||||||
#define KEYBOARD_STATUS_SHIFT_R (1 << 1)
|
#define KEYBOARD_STATUS_SHIFT_R (1 << 1)
|
||||||
|
@ -192,14 +193,27 @@ grub_at_keyboard_getkey_noblock (void)
|
||||||
static int
|
static int
|
||||||
grub_at_keyboard_checkkey (void)
|
grub_at_keyboard_checkkey (void)
|
||||||
{
|
{
|
||||||
/* FIXME: this will be triggered by BREAK events. */
|
if (pending_key != -1)
|
||||||
return KEYBOARD_ISREADY (grub_inb (KEYBOARD_REG_STATUS)) ? 1 : -1;
|
return 1;
|
||||||
|
|
||||||
|
pending_key = grub_at_keyboard_getkey_noblock ();
|
||||||
|
|
||||||
|
if (pending_key != -1)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
grub_at_keyboard_getkey (void)
|
grub_at_keyboard_getkey (void)
|
||||||
{
|
{
|
||||||
int key;
|
int key;
|
||||||
|
if (pending_key != -1)
|
||||||
|
{
|
||||||
|
key = pending_key;
|
||||||
|
pending_key = -1;
|
||||||
|
return key;
|
||||||
|
}
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
key = grub_at_keyboard_getkey_noblock ();
|
key = grub_at_keyboard_getkey_noblock ();
|
||||||
|
@ -210,6 +224,8 @@ grub_at_keyboard_getkey (void)
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_keyboard_controller_init (void)
|
grub_keyboard_controller_init (void)
|
||||||
{
|
{
|
||||||
|
pending_key = -1;
|
||||||
|
at_keyboard_status = 0;
|
||||||
grub_keyboard_controller_orig = grub_keyboard_controller_read ();
|
grub_keyboard_controller_orig = grub_keyboard_controller_read ();
|
||||||
grub_keyboard_controller_write (grub_keyboard_controller_orig | KEYBOARD_SCANCODE_SET1);
|
grub_keyboard_controller_write (grub_keyboard_controller_orig | KEYBOARD_SCANCODE_SET1);
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|
Loading…
Reference in a new issue