summaryrefslogtreecommitdiff
path: root/src/drivers/hdi/ps2/keyboard.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/hdi/ps2/keyboard.c')
-rw-r--r--src/drivers/hdi/ps2/keyboard.c12
1 files changed, 11 insertions, 1 deletions
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 );