From: Gerd Hoffmann Date: Mon, 18 Sep 2017 08:47:20 +0000 (+0200) Subject: kbd: make enqueue_key public, add ascii_to_keycode X-Git-Tag: rel-1.11.0~14 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=90fa511527146dc098c39612478e61cdd3e1dc82;p=seabios.git kbd: make enqueue_key public, add ascii_to_keycode serial console wants queue key events and needs to map ascii chars to the keycode, so make enqueue_key public and also exports a helper function so sercon can use the scan_to_keycode mapping table. Signed-off-by: Gerd Hoffmann --- diff --git a/src/kbd.c b/src/kbd.c index 916358e..15e5ae7 100644 --- a/src/kbd.c +++ b/src/kbd.c @@ -29,7 +29,7 @@ kbd_init(void) , x + FIELD_SIZEOF(struct bios_data_area_s, kbd_buf)); } -static u8 +u8 enqueue_key(u16 keycode) { u16 buffer_start = GET_BDA(kbd_buf_start_offset); @@ -375,6 +375,22 @@ struct scaninfo key_ext_slash VAR16 = { 0xe02f, 0xe02f, 0x9500, 0xa400 }; +u16 ascii_to_keycode(u8 ascii) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(scan_to_keycode); i++) { + if ((GET_GLOBAL(scan_to_keycode[i].normal) & 0xff) == ascii) + return GET_GLOBAL(scan_to_keycode[i].normal); + if ((GET_GLOBAL(scan_to_keycode[i].shift) & 0xff) == ascii) + return GET_GLOBAL(scan_to_keycode[i].shift); + if ((GET_GLOBAL(scan_to_keycode[i].control) & 0xff) == ascii) + return GET_GLOBAL(scan_to_keycode[i].control); + } + return 0; +} + +// Handle a ps2 style scancode read from the keyboard. static void kbd_set_flag(int key_release, u16 set_bit0, u8 set_bit1, u16 toggle_bit) { diff --git a/src/util.h b/src/util.h index 8269057..da9059a 100644 --- a/src/util.h +++ b/src/util.h @@ -186,6 +186,8 @@ int jpeg_show(struct jpeg_decdata *jpeg, unsigned char *pic, int width void kbd_init(void); void handle_15c2(struct bregs *regs); void process_key(u8 key); +u8 enqueue_key(u16 keycode); +u16 ascii_to_keycode(u8 ascii); // misc.c extern int HaveRunPost;