2008-05-29 Robert Millan <rmh@aybabtu.com>
* term/i386/pc/at_keyboard.c: Include `grub/machine/machine.h'. (OLPC_UP, OLPC_DOWN, OLPC_LEFT, OLPC_RIGHT): New macros. [GRUB_MACHINE_IEEE1275] (keyboard_map): Add OLPC scan codes (grub_console_checkkey): Add grub_dprintf() call to report unknown scan codes.
This commit is contained in:
parent
ee63252905
commit
47248e0825
2 changed files with 37 additions and 9 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2008-05-29 Robert Millan <rmh@aybabtu.com>
|
||||||
|
|
||||||
|
* term/i386/pc/at_keyboard.c: Include `grub/machine/machine.h'.
|
||||||
|
(OLPC_UP, OLPC_DOWN, OLPC_LEFT, OLPC_RIGHT): New macros.
|
||||||
|
[GRUB_MACHINE_IEEE1275] (keyboard_map): Add OLPC scan codes
|
||||||
|
(grub_console_checkkey): Add grub_dprintf() call to report unknown
|
||||||
|
scan codes.
|
||||||
|
|
||||||
2008-05-29 Robert Millan <rmh@aybabtu.com>
|
2008-05-29 Robert Millan <rmh@aybabtu.com>
|
||||||
|
|
||||||
* term/i386/pc/at_keyboard.c (grub_console_checkkey): Add support for
|
* term/i386/pc/at_keyboard.c (grub_console_checkkey): Add support for
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <grub/machine/console.h>
|
#include <grub/machine/console.h>
|
||||||
|
#include <grub/machine/machine.h>
|
||||||
#include <grub/cpu/io.h>
|
#include <grub/cpu/io.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/term.h>
|
#include <grub/term.h>
|
||||||
|
@ -51,6 +52,18 @@
|
||||||
|
|
||||||
static short at_keyboard_status = 0;
|
static short at_keyboard_status = 0;
|
||||||
|
|
||||||
|
#ifdef GRUB_MACHINE_IEEE1275
|
||||||
|
#define OLPC_UP GRUB_TERM_UP
|
||||||
|
#define OLPC_DOWN GRUB_TERM_DOWN
|
||||||
|
#define OLPC_LEFT GRUB_TERM_LEFT
|
||||||
|
#define OLPC_RIGHT GRUB_TERM_RIGHT
|
||||||
|
#else
|
||||||
|
#define OLPC_UP '\0'
|
||||||
|
#define OLPC_DOWN '\0'
|
||||||
|
#define OLPC_LEFT '\0'
|
||||||
|
#define OLPC_RIGHT '\0'
|
||||||
|
#endif
|
||||||
|
|
||||||
static char keyboard_map[128] =
|
static char keyboard_map[128] =
|
||||||
{
|
{
|
||||||
'\0', GRUB_TERM_ESC, '1', '2', '3', '4', '5', '6',
|
'\0', GRUB_TERM_ESC, '1', '2', '3', '4', '5', '6',
|
||||||
|
@ -63,7 +76,10 @@ static char keyboard_map[128] =
|
||||||
'\0', ' ', '\0', '\0', '\0', '\0', '\0', '\0',
|
'\0', ' ', '\0', '\0', '\0', '\0', '\0', '\0',
|
||||||
'\0', '\0', '\0', '\0', '\0', '\0', '\0', GRUB_TERM_HOME,
|
'\0', '\0', '\0', '\0', '\0', '\0', '\0', GRUB_TERM_HOME,
|
||||||
GRUB_TERM_UP, GRUB_TERM_NPAGE, '-', GRUB_TERM_LEFT, '\0', GRUB_TERM_RIGHT, '+', GRUB_TERM_END,
|
GRUB_TERM_UP, GRUB_TERM_NPAGE, '-', GRUB_TERM_LEFT, '\0', GRUB_TERM_RIGHT, '+', GRUB_TERM_END,
|
||||||
GRUB_TERM_DOWN, GRUB_TERM_PPAGE, '\0', GRUB_TERM_DC
|
GRUB_TERM_DOWN, GRUB_TERM_PPAGE, '\0', GRUB_TERM_DC, '\0', '\0', '\0', '\0',
|
||||||
|
'\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
|
||||||
|
'\0', '\0', '\0', '\0', '\0', OLPC_UP, OLPC_DOWN, OLPC_LEFT,
|
||||||
|
OLPC_RIGHT
|
||||||
};
|
};
|
||||||
|
|
||||||
static char keyboard_map_shift[128] =
|
static char keyboard_map_shift[128] =
|
||||||
|
@ -167,14 +183,14 @@ grub_keyboard_getkey (void)
|
||||||
int
|
int
|
||||||
grub_console_checkkey (void)
|
grub_console_checkkey (void)
|
||||||
{
|
{
|
||||||
int key;
|
int code, key;
|
||||||
key = grub_keyboard_getkey ();
|
code = grub_keyboard_getkey ();
|
||||||
if (key == -1)
|
if (code == -1)
|
||||||
return -1;
|
return -1;
|
||||||
#ifdef DEBUG_AT_KEYBOARD
|
#ifdef DEBUG_AT_KEYBOARD
|
||||||
grub_dprintf ("atkeyb", "Detected key 0x%x\n", key);
|
grub_dprintf ("atkeyb", "Detected key 0x%x\n", key);
|
||||||
#endif
|
#endif
|
||||||
switch (key)
|
switch (code)
|
||||||
{
|
{
|
||||||
case CAPS_LOCK:
|
case CAPS_LOCK:
|
||||||
at_keyboard_status ^= KEYBOARD_STATUS_CAPS_LOCK;
|
at_keyboard_status ^= KEYBOARD_STATUS_CAPS_LOCK;
|
||||||
|
@ -187,12 +203,16 @@ grub_console_checkkey (void)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (at_keyboard_status & (KEYBOARD_STATUS_CTRL_L | KEYBOARD_STATUS_CTRL_R))
|
if (at_keyboard_status & (KEYBOARD_STATUS_CTRL_L | KEYBOARD_STATUS_CTRL_R))
|
||||||
key = keyboard_map[key] - 'a' + 1;
|
key = keyboard_map[code] - 'a' + 1;
|
||||||
else if ((at_keyboard_status & (KEYBOARD_STATUS_SHIFT_L | KEYBOARD_STATUS_SHIFT_R))
|
else if ((at_keyboard_status & (KEYBOARD_STATUS_SHIFT_L | KEYBOARD_STATUS_SHIFT_R))
|
||||||
&& keyboard_map_shift[key])
|
&& keyboard_map_shift[code])
|
||||||
key = keyboard_map_shift[key];
|
key = keyboard_map_shift[code];
|
||||||
else
|
else
|
||||||
key = keyboard_map[key];
|
key = keyboard_map[code];
|
||||||
|
|
||||||
|
if (key == 0)
|
||||||
|
grub_dprintf ("atkeyb", "Unknown key 0x%x detected\n", code);
|
||||||
|
|
||||||
if (at_keyboard_status & KEYBOARD_STATUS_CAPS_LOCK)
|
if (at_keyboard_status & KEYBOARD_STATUS_CAPS_LOCK)
|
||||||
{
|
{
|
||||||
if ((key >= 'a') && (key <= 'z'))
|
if ((key >= 'a') && (key <= 'z'))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue