From 47248e08256f17ff29cdd029cf653511095886d7 Mon Sep 17 00:00:00 2001 From: robertmh Date: Thu, 29 May 2008 18:15:27 +0000 Subject: [PATCH] 2008-05-29 Robert Millan * 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. --- ChangeLog | 8 ++++++++ term/i386/pc/at_keyboard.c | 38 +++++++++++++++++++++++++++++--------- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index f70fdfddb..f69678bab 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-05-29 Robert Millan + + * 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 * term/i386/pc/at_keyboard.c (grub_console_checkkey): Add support for diff --git a/term/i386/pc/at_keyboard.c b/term/i386/pc/at_keyboard.c index 2417bf5f4..b62cd6678 100644 --- a/term/i386/pc/at_keyboard.c +++ b/term/i386/pc/at_keyboard.c @@ -17,6 +17,7 @@ */ #include +#include #include #include #include @@ -51,6 +52,18 @@ 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] = { '\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', GRUB_TERM_HOME, 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] = @@ -167,14 +183,14 @@ grub_keyboard_getkey (void) int grub_console_checkkey (void) { - int key; - key = grub_keyboard_getkey (); - if (key == -1) + int code, key; + code = grub_keyboard_getkey (); + if (code == -1) return -1; #ifdef DEBUG_AT_KEYBOARD grub_dprintf ("atkeyb", "Detected key 0x%x\n", key); #endif - switch (key) + switch (code) { case CAPS_LOCK: at_keyboard_status ^= KEYBOARD_STATUS_CAPS_LOCK; @@ -187,12 +203,16 @@ grub_console_checkkey (void) break; default: 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)) - && keyboard_map_shift[key]) - key = keyboard_map_shift[key]; + && keyboard_map_shift[code]) + key = keyboard_map_shift[code]; 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 ((key >= 'a') && (key <= 'z'))