From b260fb56d8eb049e5dce95a92b5c1189ea29f8b4 Mon Sep 17 00:00:00 2001 From: notaz Date: Thu, 15 Mar 2012 23:07:02 +0200 Subject: [PATCH] add scancode support probably not everything matches default SDL, but should be good enough --- src/video/omapdss/osdl.h | 2 +- src/video/omapdss/osdl_input.c | 12 ++++++++---- src/video/omapdss/sdlif.c | 3 ++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/video/omapdss/osdl.h b/src/video/omapdss/osdl.h index ea5bce2..2fc418c 100644 --- a/src/video/omapdss/osdl.h +++ b/src/video/omapdss/osdl.h @@ -56,7 +56,7 @@ void osdl_video_finish(struct SDL_PrivateVideoData *pdata); void omapsdl_input_init(void); void omapsdl_input_bind(const char *kname, const char *sdlname); int omapsdl_input_get_events(int timeout_ms, - int (*key_cb)(void *cb_arg, int sdl_kc, int is_pressed), + int (*key_cb)(void *cb_arg, int sdl_kc, int sdl_sc, int is_pressed), int (*ts_cb)(void *cb_arg, int x, int y, unsigned int pressure), void *cb_arg); void omapsdl_input_finish(void); diff --git a/src/video/omapdss/osdl_input.c b/src/video/omapdss/osdl_input.c index b020875..94994d1 100644 --- a/src/video/omapdss/osdl_input.c +++ b/src/video/omapdss/osdl_input.c @@ -1,5 +1,5 @@ /* - * (C) Gražvydas "notaz" Ignotas, 2010 + * (C) Gražvydas "notaz" Ignotas, 2010-2012 * * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. * See the COPYING file in the top-level directory. @@ -559,7 +559,7 @@ void omapsdl_input_finish(void) } int omapsdl_input_get_events(int timeout_ms, - int (*key_cb)(void *cb_arg, int sdl_kc, int is_pressed), + int (*key_cb)(void *cb_arg, int sdl_kc, int sdl_sc, int is_pressed), int (*ts_cb)(void *cb_arg, int x, int y, unsigned int pressure), void *cb_arg) { @@ -634,7 +634,8 @@ int omapsdl_input_get_events(int timeout_ms, sdl_kc = osdl_evdev_map[ev.code]; if (sdl_kc == 0) continue; /* not mapped */ - ret = key_cb(cb_arg, sdl_kc, ev.value); + /* scancode note: stock SDL doesn't do +8 in fbcon driver */ + ret = key_cb(cb_arg, sdl_kc, ev.code + 8, ev.value); if (ret != 0) return ret; } @@ -649,13 +650,15 @@ static unsigned char g_keystate[SDLK_LAST]; struct key_event { int sdl_kc; + int sdl_sc; int is_pressed; }; -static int do_key_cb(void *cb_arg, int sdl_kc, int is_pressed) +static int do_key_cb(void *cb_arg, int sdl_kc, int sdl_sc, int is_pressed) { struct key_event *ev = cb_arg; ev->sdl_kc = sdl_kc; + ev->sdl_sc = sdl_sc; ev->is_pressed = is_pressed; return 1; /* done */ @@ -680,6 +683,7 @@ static int do_event(SDL_Event *event, int timeout) // event->key.which = event->key.state = ev.is_pressed ? SDL_PRESSED : SDL_RELEASED; event->key.keysym.sym = ev.sdl_kc; + event->key.keysym.scancode = ev.sdl_sc; // event->key.keysym.mod return 1; diff --git a/src/video/omapdss/sdlif.c b/src/video/omapdss/sdlif.c index 7511ee4..5818462 100644 --- a/src/video/omapdss/sdlif.c +++ b/src/video/omapdss/sdlif.c @@ -233,11 +233,12 @@ static void omap_InitOSKeymap(SDL_VideoDevice *this) trace(); } -static int key_event_cb(void *cb_arg, int sdl_kc, int is_pressed) +static int key_event_cb(void *cb_arg, int sdl_kc, int sdl_sc, int is_pressed) { SDL_keysym keysym = { 0, }; keysym.sym = sdl_kc; + keysym.scancode = sdl_sc; SDL_PrivateKeyboard(is_pressed, &keysym); } -- 2.39.2