support for Fn keys
This commit is contained in:
parent
2cccf4b0c4
commit
7a6459e12d
11 changed files with 123 additions and 185 deletions
|
@ -100,6 +100,17 @@ grub_console_putchar (struct grub_term_output *term __attribute__ ((unused)),
|
|||
efi_call_2 (o->output_string, o, str);
|
||||
}
|
||||
|
||||
const unsigned efi_codes[] =
|
||||
{
|
||||
0, GRUB_TERM_UP, GRUB_TERM_DOWN, GRUB_TERM_RIGHT,
|
||||
GRUB_TERM_LEFT, GRUB_TERM_HOME, GRUB_TERM_END, GRUB_TERM_KEY_INSERT,
|
||||
GRUB_TERM_DC, GRUB_TERM_KEY_PPAGE, GRUB_TERM_KEY_NPAGE, GRUB_TERM_KEY_F1,
|
||||
GRUB_TERM_KEY_F2, GRUB_TERM_KEY_F3, GRUB_TERM_KEY_F4, GRUB_TERM_KEY_F5,
|
||||
GRUB_TERM_KEY_F6, GRUB_TERM_KEY_F7, GRUB_TERM_KEY_F8, GRUB_TERM_KEY_F9,
|
||||
GRUB_TERM_KEY_F10, 0, 0, '\e'
|
||||
};
|
||||
|
||||
|
||||
static int
|
||||
grub_console_checkkey (struct grub_term_input *term __attribute__ ((unused)))
|
||||
{
|
||||
|
@ -112,85 +123,14 @@ grub_console_checkkey (struct grub_term_input *term __attribute__ ((unused)))
|
|||
|
||||
i = grub_efi_system_table->con_in;
|
||||
status = efi_call_2 (i->read_key_stroke, i, &key);
|
||||
#if 0
|
||||
switch (status)
|
||||
{
|
||||
case GRUB_EFI_SUCCESS:
|
||||
{
|
||||
grub_uint16_t xy;
|
||||
|
||||
xy = grub_getxy ();
|
||||
grub_gotoxy (0, 0);
|
||||
grub_printf ("scan_code=%x,unicode_char=%x ",
|
||||
(unsigned) key.scan_code,
|
||||
(unsigned) key.unicode_char);
|
||||
grub_gotoxy (xy >> 8, xy & 0xff);
|
||||
}
|
||||
break;
|
||||
if (status != GRUB_EFI_SUCCESS)
|
||||
return -1;
|
||||
|
||||
case GRUB_EFI_NOT_READY:
|
||||
//grub_printf ("not ready ");
|
||||
break;
|
||||
|
||||
default:
|
||||
//grub_printf ("device error ");
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (status == GRUB_EFI_SUCCESS)
|
||||
{
|
||||
switch (key.scan_code)
|
||||
{
|
||||
case 0x00:
|
||||
read_key = key.unicode_char;
|
||||
break;
|
||||
case 0x01:
|
||||
read_key = GRUB_TERM_UP;
|
||||
break;
|
||||
case 0x02:
|
||||
read_key = GRUB_TERM_DOWN;
|
||||
break;
|
||||
case 0x03:
|
||||
read_key = GRUB_TERM_RIGHT;
|
||||
break;
|
||||
case 0x04:
|
||||
read_key = GRUB_TERM_LEFT;
|
||||
break;
|
||||
case 0x05:
|
||||
read_key = GRUB_TERM_HOME;
|
||||
break;
|
||||
case 0x06:
|
||||
read_key = GRUB_TERM_END;
|
||||
break;
|
||||
case 0x07:
|
||||
break;
|
||||
case 0x08:
|
||||
read_key = GRUB_TERM_DC;
|
||||
break;
|
||||
case 0x09:
|
||||
break;
|
||||
case 0x0a:
|
||||
break;
|
||||
case 0x0b:
|
||||
read_key = 24;
|
||||
break;
|
||||
case 0x0c:
|
||||
read_key = 1;
|
||||
break;
|
||||
case 0x0d:
|
||||
read_key = 5;
|
||||
break;
|
||||
case 0x0e:
|
||||
read_key = 3;
|
||||
break;
|
||||
case 0x17:
|
||||
read_key = '\e';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (key.scan_code == 0)
|
||||
read_key = key.unicode_char;
|
||||
else if (key.scan_code < ARRAY_SIZE (efi_codes))
|
||||
read_key = efi_codes[key.scan_code];
|
||||
|
||||
return read_key;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue