* [Qemu-devel] [PATCH] Keyboard portability
@ 2004-01-25 11:12 Chris Emerson
0 siblings, 0 replies; only message in thread
From: Chris Emerson @ 2004-01-25 11:12 UTC (permalink / raw)
To: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 345 bytes --]
Here's a patch which makes the keyboard usable for me on Debian/PPC.
The translation to PC keycodes is done from the SDL keysym rather than
the original scancode. It's likely that there could be problems with
different keyboard layouts, but I think it should work on the whole.
Not tested on anything but my PowerMac with USB keyboard.
Chris
[-- Attachment #2: sdl-kbd.diff --]
[-- Type: text/plain, Size: 3610 bytes --]
Index: sdl.c
===================================================================
RCS file: /cvsroot/qemu/qemu/sdl.c,v
retrieving revision 1.3
diff -u -r1.3 sdl.c
--- sdl.c 4 Jan 2004 18:15:01 -0000 1.3
+++ sdl.c 25 Jan 2004 11:03:55 -0000
@@ -137,21 +137,122 @@
0x53, /* 157 KP_Del */
};
+static const uint32_t sdl_sym_to_pc_keycode[SDLK_LAST] = {
+ [SDLK_ESCAPE] = 0x01,
+ [SDLK_F1] = 0x3b,
+ [SDLK_F2] = 0x3c,
+ [SDLK_F3] = 0x3d,
+ [SDLK_F4] = 0x3e,
+ [SDLK_F5] = 0x3f,
+ [SDLK_F6] = 0x40,
+ [SDLK_F7] = 0x41,
+ [SDLK_F8] = 0x42,
+ [SDLK_F9] = 0x43,
+ [SDLK_F10] = 0x44,
+ [SDLK_F11] = 0x57,
+ [SDLK_F12] = 0x58,
+ [SDLK_PRINT] = 0x37e0,
+ [SDLK_SCROLLOCK] = 0x46,
+ [SDLK_PAUSE] = 0x451de1,
+ [SDLK_BACKQUOTE] = 0x29,
+ [SDLK_1] = 0x02,
+ [SDLK_2] = 0x03,
+ [SDLK_3] = 0x04,
+ [SDLK_4] = 0x05,
+ [SDLK_5] = 0x06,
+ [SDLK_6] = 0x07,
+ [SDLK_7] = 0x08,
+ [SDLK_8] = 0x09,
+ [SDLK_9] = 0x0a,
+ [SDLK_0] = 0x0b,
+ [SDLK_MINUS] = 0x0c,
+ [SDLK_EQUALS] = 0x0d,
+ [SDLK_BACKSPACE] = 0x0e,
+ [SDLK_TAB] = 0x0f,
+ [SDLK_q] = 0x10,
+ [SDLK_w] = 0x11,
+ [SDLK_e] = 0x12,
+ [SDLK_r] = 0x13,
+ [SDLK_t] = 0x14,
+ [SDLK_y] = 0x15,
+ [SDLK_u] = 0x16,
+ [SDLK_i] = 0x17,
+ [SDLK_o] = 0x18,
+ [SDLK_p] = 0x19,
+ [SDLK_LEFTBRACKET] =0x1a,
+ [SDLK_RIGHTBRACKET]=0x1b,
+ [SDLK_RETURN] = 0x1c,
+ [SDLK_CAPSLOCK] = 0x3a,
+ [SDLK_a] = 0x1e,
+ [SDLK_s] = 0x1f,
+ [SDLK_d] = 0x20,
+ [SDLK_f] = 0x21,
+ [SDLK_g] = 0x22,
+ [SDLK_h] = 0x23,
+ [SDLK_j] = 0x24,
+ [SDLK_k] = 0x25,
+ [SDLK_l] = 0x26,
+ [SDLK_SEMICOLON] = 0x27,
+ [SDLK_QUOTE] = 0x28,
+ [SDLK_HASH] = 0x2b,
+ [SDLK_LSHIFT] = 0x2a,
+ [SDLK_BACKSLASH] = 0x56,
+ [SDLK_z] = 0x2c,
+ [SDLK_x] = 0x2d,
+ [SDLK_c] = 0x2e,
+ [SDLK_v] = 0x2f,
+ [SDLK_b] = 0x30,
+ [SDLK_n] = 0x31,
+ [SDLK_m] = 0x32,
+ [SDLK_COMMA] = 0x33,
+ [SDLK_PERIOD] = 0x34,
+ [SDLK_SLASH] = 0x35,
+ [SDLK_RSHIFT] = 0x36,
+ [SDLK_LCTRL] = 0x1d,
+ [SDLK_LALT] = 0x38,
+ [SDLK_SPACE] = 0x39,
+ [SDLK_RALT] = 0x38e0,
+ [SDLK_RCTRL] = 0x1de0,
+ [SDLK_INSERT] = 0x52e0,
+ [SDLK_HOME] = 0x47e0,
+ [SDLK_PAGEUP] = 0x49e0,
+ [SDLK_DELETE] = 0x53e0,
+ [SDLK_END] = 0x4fe0,
+ [SDLK_HOME] = 0x51e0,
+ [SDLK_UP] = 0x48e0,
+ [SDLK_LEFT] = 0x4be0,
+ [SDLK_DOWN] = 0x50e0,
+ [SDLK_RIGHT] = 0x4de0,
+ [SDLK_NUMLOCK] = 0x45,
+ [SDLK_KP_DIVIDE] = 0x35e0,
+ [SDLK_KP_MULTIPLY] =0x37,
+ [SDLK_KP_MINUS] = 0x4a,
+ [SDLK_KP7] = 0x47,
+ [SDLK_KP8] = 0x48,
+ [SDLK_KP9] = 0x49,
+ [SDLK_KP_PLUS] = 0x4e,
+ [SDLK_KP4] = 0x4b,
+ [SDLK_KP5] = 0x4c,
+ [SDLK_KP6] = 0x4d,
+ [SDLK_KP1] = 0x4f,
+ [SDLK_KP2] = 0x50,
+ [SDLK_KP3] = 0x51,
+ [SDLK_KP_ENTER] = 0x1ce0,
+ [SDLK_KP0] = 0x52,
+ [SDLK_KP_PERIOD] = 0x52,
+};
+
static void sdl_process_key(SDL_KeyboardEvent *ev)
{
int keycode, v;
+ SDLKey sym;
- /* XXX: not portable, but avoids complicated mappings */
- keycode = ev->keysym.scancode;
- if (keycode < 9) {
- keycode = 0;
- } else if (keycode < 97) {
- keycode -= 8; /* just an offset */
- } else if (keycode < 158) {
- /* use conversion table */
- keycode = x_keycode_to_pc_keycode[keycode - 97];
+ sym = ev->keysym.sym;
+
+ if ((sym > SDLK_LAST) || (sym < 0)) {
+ keycode = 0;
} else {
- keycode = 0;
+ keycode = sdl_sym_to_pc_keycode[sym];
}
/* now send the key code */
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-01-25 11:12 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-01-25 11:12 [Qemu-devel] [PATCH] Keyboard portability Chris Emerson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).