|
|
@@ -33,29 +33,154 @@
|
|
|
|
|
|
static int event_fd[] = { -1, -1 }; /* assume two USB HID input devices */
|
|
|
struct input_event event[64];
|
|
|
-#define NUM_INPUT_DEVICE sizeof(event_fd) / sizeof(int)
|
|
|
-
|
|
|
-static SDL_Keycode keymap[] = {
|
|
|
- 0/*KEY_RESERVED*/,
|
|
|
- SDLK_ESCAPE,'1','2','3','4','5','6','7','8','9','0','-','=',SDLK_BACKSPACE,
|
|
|
- SDLK_TAB,'q','w','e','r','t','y','u','i','o','p','[',']',SDLK_RETURN,
|
|
|
- SDLK_LCTRL,'a','s','d','f','g','h','j','k','l',';','\'','`',
|
|
|
- SDLK_LSHIFT,'\\','z','x','c','v','b','n','m',',','.','/',SDLK_RSHIFT,
|
|
|
- SDLK_KP_MULTIPLY,SDLK_LALT,SDLK_SPACE,SDLK_CAPSLOCK,
|
|
|
- SDLK_F1,SDLK_F2,SDLK_F3,SDLK_F4,SDLK_F5,SDLK_F6,SDLK_F7,SDLK_F8,SDLK_F9,SDLK_F10,
|
|
|
- SDLK_NUMLOCKCLEAR,SDLK_SCROLLLOCK,
|
|
|
- SDLK_KP_7,SDLK_KP_8,SDLK_KP_9,SDLK_KP_MINUS,SDLK_KP_4,SDLK_KP_5,SDLK_KP_6,
|
|
|
- SDLK_KP_PLUS,SDLK_KP_1,SDLK_KP_2,SDLK_KP_3,SDLK_KP_0,SDLK_KP_PERIOD,
|
|
|
- 0/*UNKNOWN*/,0/*KEY_ZENKAKUHANKAKU*/,0/*KEY_102ND*/,SDLK_F11,SDLK_F12,0/*KEY_RO*/,
|
|
|
- 0/*KEY_KATAKANA*/,0/*KEY_HIRAGANA*/,0/*KEY_HENKAN*/,0/*KEY_KATAKANAHIRAGANA*/,0/*KEY_MUHENKAN*/,
|
|
|
- 0/*KEY_KPJPCOMMA*/,SDLK_KP_ENTER,SDLK_RCTRL,SDLK_KP_DIVIDE,SDLK_PRINTSCREEN,SDLK_RALT,0/*KEY_LINEFEED*/,
|
|
|
- SDLK_HOME,SDLK_UP,SDLK_PAGEUP,SDLK_LEFT,SDLK_RIGHT,SDLK_END,SDLK_DOWN,SDLK_PAGEDOWN,SDLK_INSERT,SDLK_DELETE,
|
|
|
- 0/*KEY_MACRO*/,SDLK_MUTE,SDLK_VOLUMEDOWN,SDLK_VOLUMEUP,SDLK_POWER,SDLK_KP_EQUALS,SDLK_KP_PLUSMINUS,SDL_SCANCODE_PAUSE,
|
|
|
- 0/*KEY_SCALE*/,SDLK_KP_COMMA,0/*KEY_HANGEUL*/,0/*KEY_HANJA*/,0/*KEY_YEN*/,SDLK_LGUI,SDLK_RGUI,0/*KEY_COMPOSE*/,
|
|
|
+#define NUM_INPUT_DEVICE SDL_arraysize(event_fd)
|
|
|
+
|
|
|
+/* Raspberry Pi native scancode to SDL scancode mapping */
|
|
|
+static SDL_Scancode RASPI_scancodes[] = {
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_RESERVED*/,
|
|
|
+
|
|
|
+ SDL_SCANCODE_ESCAPE,
|
|
|
+ SDL_SCANCODE_1,
|
|
|
+ SDL_SCANCODE_2,
|
|
|
+ SDL_SCANCODE_3,
|
|
|
+ SDL_SCANCODE_4,
|
|
|
+ SDL_SCANCODE_5,
|
|
|
+ SDL_SCANCODE_6,
|
|
|
+ SDL_SCANCODE_7,
|
|
|
+ SDL_SCANCODE_8,
|
|
|
+ SDL_SCANCODE_9,
|
|
|
+ SDL_SCANCODE_0,
|
|
|
+ SDL_SCANCODE_MINUS,
|
|
|
+ SDL_SCANCODE_EQUALS,
|
|
|
+ SDL_SCANCODE_BACKSPACE,
|
|
|
+
|
|
|
+ SDL_SCANCODE_TAB,
|
|
|
+ SDL_SCANCODE_Q,
|
|
|
+ SDL_SCANCODE_W,
|
|
|
+ SDL_SCANCODE_E,
|
|
|
+ SDL_SCANCODE_R,
|
|
|
+ SDL_SCANCODE_T,
|
|
|
+ SDL_SCANCODE_Y,
|
|
|
+ SDL_SCANCODE_U,
|
|
|
+ SDL_SCANCODE_I,
|
|
|
+ SDL_SCANCODE_O,
|
|
|
+ SDL_SCANCODE_P,
|
|
|
+ SDL_SCANCODE_LEFTBRACKET,
|
|
|
+ SDL_SCANCODE_RIGHTBRACKET,
|
|
|
+ SDL_SCANCODE_RETURN,
|
|
|
+
|
|
|
+ SDL_SCANCODE_LCTRL,
|
|
|
+ SDL_SCANCODE_A,
|
|
|
+ SDL_SCANCODE_S,
|
|
|
+ SDL_SCANCODE_D,
|
|
|
+ SDL_SCANCODE_F,
|
|
|
+ SDL_SCANCODE_G,
|
|
|
+ SDL_SCANCODE_H,
|
|
|
+ SDL_SCANCODE_J,
|
|
|
+ SDL_SCANCODE_K,
|
|
|
+ SDL_SCANCODE_L,
|
|
|
+ SDL_SCANCODE_SEMICOLON,
|
|
|
+ SDL_SCANCODE_APOSTROPHE,
|
|
|
+ SDL_SCANCODE_GRAVE,
|
|
|
+
|
|
|
+ SDL_SCANCODE_LSHIFT,
|
|
|
+ SDL_SCANCODE_BACKSLASH,
|
|
|
+ SDL_SCANCODE_Z,
|
|
|
+ SDL_SCANCODE_X,
|
|
|
+ SDL_SCANCODE_C,
|
|
|
+ SDL_SCANCODE_V,
|
|
|
+ SDL_SCANCODE_B,
|
|
|
+ SDL_SCANCODE_N,
|
|
|
+ SDL_SCANCODE_M,
|
|
|
+ SDL_SCANCODE_COMMA,
|
|
|
+ SDL_SCANCODE_PERIOD,
|
|
|
+ SDL_SCANCODE_SLASH,
|
|
|
+ SDL_SCANCODE_RSHIFT,
|
|
|
+
|
|
|
+ SDL_SCANCODE_KP_MULTIPLY,
|
|
|
+ SDL_SCANCODE_LALT,
|
|
|
+ SDL_SCANCODE_SPACE,
|
|
|
+ SDL_SCANCODE_CAPSLOCK,
|
|
|
+ SDL_SCANCODE_F1,
|
|
|
+ SDL_SCANCODE_F2,
|
|
|
+ SDL_SCANCODE_F3,
|
|
|
+ SDL_SCANCODE_F4,
|
|
|
+ SDL_SCANCODE_F5,
|
|
|
+ SDL_SCANCODE_F6,
|
|
|
+ SDL_SCANCODE_F7,
|
|
|
+ SDL_SCANCODE_F8,
|
|
|
+ SDL_SCANCODE_F9,
|
|
|
+ SDL_SCANCODE_F10,
|
|
|
+
|
|
|
+ SDL_SCANCODE_NUMLOCKCLEAR,
|
|
|
+ SDL_SCANCODE_SCROLLLOCK,
|
|
|
+ SDL_SCANCODE_KP_7,
|
|
|
+ SDL_SCANCODE_KP_8,
|
|
|
+ SDL_SCANCODE_KP_9,
|
|
|
+ SDL_SCANCODE_KP_MINUS,
|
|
|
+ SDL_SCANCODE_KP_4,
|
|
|
+ SDL_SCANCODE_KP_5,
|
|
|
+ SDL_SCANCODE_KP_6,
|
|
|
+ SDL_SCANCODE_KP_PLUS,
|
|
|
+ SDL_SCANCODE_KP_1,
|
|
|
+ SDL_SCANCODE_KP_2,
|
|
|
+ SDL_SCANCODE_KP_3,
|
|
|
+ SDL_SCANCODE_KP_0,
|
|
|
+ SDL_SCANCODE_KP_PERIOD,
|
|
|
+
|
|
|
+ SDL_SCANCODE_UNKNOWN/*UNKNOWN*/,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_ZENKAKUHANKAKU*/,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_102ND*/,
|
|
|
+ SDL_SCANCODE_F11,
|
|
|
+ SDL_SCANCODE_F12,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_RO*/,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_KATAKANA*/,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_HIRAGANA*/,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_HENKAN*/,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_KATAKANAHIRAGANA*/,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_MUHENKAN*/,
|
|
|
+
|
|
|
+ SDL_SCANCODE_KP_COMMA,
|
|
|
+ SDL_SCANCODE_KP_ENTER,
|
|
|
+ SDL_SCANCODE_RCTRL,
|
|
|
+ SDL_SCANCODE_KP_DIVIDE,
|
|
|
+ SDL_SCANCODE_PRINTSCREEN,
|
|
|
+ SDL_SCANCODE_RALT,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_LINEFEED*/,
|
|
|
+
|
|
|
+ SDL_SCANCODE_HOME,
|
|
|
+ SDL_SCANCODE_UP,
|
|
|
+ SDL_SCANCODE_PAGEUP,
|
|
|
+ SDL_SCANCODE_LEFT,
|
|
|
+ SDL_SCANCODE_RIGHT,
|
|
|
+ SDL_SCANCODE_END,
|
|
|
+ SDL_SCANCODE_DOWN,
|
|
|
+ SDL_SCANCODE_PAGEDOWN,
|
|
|
+ SDL_SCANCODE_INSERT,
|
|
|
+ SDL_SCANCODE_DELETE,
|
|
|
+
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_MACRO*/,
|
|
|
+ SDL_SCANCODE_MUTE,
|
|
|
+ SDL_SCANCODE_VOLUMEDOWN,
|
|
|
+ SDL_SCANCODE_VOLUMEUP,
|
|
|
+ SDL_SCANCODE_POWER,
|
|
|
+ SDL_SCANCODE_KP_EQUALS,
|
|
|
+ SDL_SCANCODE_KP_PLUSMINUS,
|
|
|
+ SDL_SCANCODE_PAUSE,
|
|
|
+
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_SCALE*/,
|
|
|
+ SDL_SCANCODE_KP_COMMA,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_HANGEUL*/,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_HANJA*/,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_YEN*/,
|
|
|
+ SDL_SCANCODE_LGUI,
|
|
|
+ SDL_SCANCODE_RGUI,
|
|
|
+ SDL_SCANCODE_UNKNOWN/*KEY_COMPOSE*/,
|
|
|
};
|
|
|
|
|
|
static int
|
|
|
-TranslateMouseButton(__u16 code) {
|
|
|
+TranslateMouseButton(__u16 code)
|
|
|
+{
|
|
|
switch (code) {
|
|
|
case 272:
|
|
|
return SDL_BUTTON_LEFT;
|
|
|
@@ -89,8 +214,8 @@ PropagateEvents(_THIS, int index)
|
|
|
for (i = 0; i < count; ++i) {
|
|
|
switch (event[i].type) {
|
|
|
case EV_KEY:
|
|
|
- if (event[i].code < sizeof(keymap) / sizeof(SDL_Keycode)) {
|
|
|
- SDL_SendKeyboardKey(event[i].value, event[i].code);
|
|
|
+ if (event[i].code < SDL_arraysize(RASPI_scancodes)) {
|
|
|
+ SDL_SendKeyboardKey(event[i].value, RASPI_scancodes[event[i].code]);
|
|
|
}
|
|
|
else if ((button = TranslateMouseButton(event[i].code)) != -1) {
|
|
|
SDL_SendMouseButton(data->window, index, event[i].value, button);
|
|
|
@@ -164,8 +289,10 @@ RASPI_InitInput(_THIS)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* Set Linux scancode to SDL key mapping */
|
|
|
- SDL_SetKeymap(0, keymap, sizeof(keymap));
|
|
|
+ /* Use default SDL scancode to SDL keycode mapping */
|
|
|
+ SDL_Keycode keymap[SDL_NUM_SCANCODES];
|
|
|
+ SDL_GetDefaultKeymap(keymap);
|
|
|
+ SDL_SetKeymap(0, keymap, SDL_NUM_SCANCODES);
|
|
|
|
|
|
return 0;
|
|
|
}
|