diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-07-02 15:30:31 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-07-02 15:30:31 +0200 |
commit | 1193ca1ac272904d18d04ebb5bb27522484e0b0e (patch) | |
tree | b349c2dc98350427f38a9376b6278247852a08ff /src/drivers | |
parent | 4089e006820e1029a2dd7093bae596b1b31d1686 (diff) | |
download | abaos-1193ca1ac272904d18d04ebb5bb27522484e0b0e.tar.gz abaos-1193ca1ac272904d18d04ebb5bb27522484e0b0e.tar.bz2 |
added ESC key in PS/2 keyboard driver
allow pressing ESC in graphics mode to return to text mode
Diffstat (limited to 'src/drivers')
-rw-r--r-- | src/drivers/hdi/ps2/keyboard.c | 12 |
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 ); |