From 1193ca1ac272904d18d04ebb5bb27522484e0b0e Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sun, 2 Jul 2017 15:30:31 +0200 Subject: added ESC key in PS/2 keyboard driver allow pressing ESC in graphics mode to return to text mode --- src/drivers/hdi/ps2/keyboard.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/drivers') diff --git a/src/drivers/hdi/ps2/keyboard.c b/src/drivers/hdi/ps2/keyboard.c index 740c9ec..ccae3e7 100644 --- a/src/drivers/hdi/ps2/keyboard.c +++ b/src/drivers/hdi/ps2/keyboard.c @@ -141,7 +141,8 @@ void keyboard_deinit( void *obj ) typedef enum { KEYCODE_UNKNOWN, - KEYCODE_ASCII_CHAR + KEYCODE_ASCII_CHAR, + KEYCODE_ESC } keycode_type_t; typedef struct { @@ -233,6 +234,8 @@ static char scancode_map[4][128] = { } }; +#define SCAN_CODE_ESC 0x01 + static keycode_t scancode_to_keycode( scancode_set_t set, uint8_t scan_code ) { keycode_t key_code; @@ -242,6 +245,11 @@ static keycode_t scancode_to_keycode( scancode_set_t set, uint8_t scan_code ) if( key_code.c > 0 ) { key_code.type = KEYCODE_ASCII_CHAR; } + + if( scan_code == SCAN_CODE_ESC ) { + key_code.type = KEYCODE_ESC; + } + return key_code; } @@ -303,6 +311,8 @@ uint32_t keyboard_handle_interrupt( interrupt_handler_t *handler, uint32_t esp ) if( key_code.type == KEYCODE_ASCII_CHAR ) { event.key = KEYBOARD_KEY_ASCII; event.ascii_key = key_code.c; + } else if( key_code.type == KEYCODE_ESC ) { + event.key = KEYBOARD_KEY_ESC; } keyboard->handler( &event, keyboard->context ); -- cgit v1.2.3-54-g00ecf