aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/drivers/usb/usbkbd.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/drivers/usb/usbkbd.c b/src/drivers/usb/usbkbd.c
index 397ed77ec..ba4b2d4d7 100644
--- a/src/drivers/usb/usbkbd.c
+++ b/src/drivers/usb/usbkbd.c
@@ -25,6 +25,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <stdlib.h>
#include <string.h>
+#include <ctype.h>
#include <errno.h>
#include <assert.h>
#include <ipxe/console.h>
@@ -70,12 +71,6 @@ static unsigned int usbkbd_map ( unsigned int keycode, unsigned int modifiers,
} else if ( keycode <= USBKBD_KEY_Z ) {
/* Alphabetic keys */
key = ( keycode - USBKBD_KEY_A + 'a' );
- if ( modifiers & USBKBD_CTRL ) {
- key -= ( 'a' - CTRL_A );
- } else if ( ( modifiers & USBKBD_SHIFT ) ||
- ( leds & USBKBD_LED_CAPS_LOCK ) ) {
- key -= ( 'a' - 'A' );
- }
} else if ( keycode <= USBKBD_KEY_0 ) {
/* Numeric key row */
if ( modifiers & USBKBD_SHIFT ) {
@@ -127,6 +122,16 @@ static unsigned int usbkbd_map ( unsigned int keycode, unsigned int modifiers,
if ( keycode < USBKBD_KEY_CAPS_LOCK )
key = key_remap ( key );
+ /* Handle upper/lower case and Ctrl-<key> */
+ if ( islower ( key ) ) {
+ if ( modifiers & USBKBD_CTRL ) {
+ key -= ( 'a' - CTRL_A );
+ } else if ( ( modifiers & USBKBD_SHIFT ) ||
+ ( leds & USBKBD_LED_CAPS_LOCK ) ) {
+ key -= ( 'a' - 'A' );
+ }
+ }
+
return key;
}