From 25a7f0c3cbcc7e7c683d0e8f48031e64075b3a18 Mon Sep 17 00:00:00 2001 From: Toad King Date: Wed, 8 Jan 2014 18:02:14 -0500 Subject: [PATCH] [Android] work around input bind modifications, fixes custom binds This is really ugly and should be fixed --- android/native/jni/input_android.c | 31 ++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/android/native/jni/input_android.c b/android/native/jni/input_android.c index 3855adb748..70542f552c 100644 --- a/android/native/jni/input_android.c +++ b/android/native/jni/input_android.c @@ -175,6 +175,9 @@ static void engine_handle_dpad_getaxisvalue(void *data, AInputEvent *event, state_id, x, y, z, rz, source); } +static bool android_input_use_keycode_lut; +static uint64_t android_input_keycode_lut[LAST_KEYCODE]; + static void *android_input_init(void) { JNIEnv *env; @@ -187,25 +190,33 @@ static void *android_input_init(void) android->pads_connected = 0; - for (j = 0; j < LAST_KEYCODE; j++) - android->keycode_lut[j] = 0; - - if (!g_settings.input.autodetect_enable) + // TODO: rewrite code to not change input binds + if (!android_input_use_keycode_lut) { - for (j = 0; j < MAX_PADS; j++) + for (j = 0; j < LAST_KEYCODE; j++) + android_input_keycode_lut[j] = 0; + + if (!g_settings.input.autodetect_enable) { - uint8_t shift = 8 + (j * 8); - for (k = 0; k < RARCH_FIRST_CUSTOM_BIND; k++) + for (j = 0; j < MAX_PADS; j++) { - if (g_settings.input.binds[j][k].valid && g_settings.input.binds[j][k].joykey && g_settings.input.binds[j][k].joykey < LAST_KEYCODE) + uint8_t shift = 8 + (j * 8); + for (k = 0; k < RARCH_FIRST_CUSTOM_BIND; k++) { - RARCH_LOG("binding %llu to %d (p%d)\n", g_settings.input.binds[j][k].joykey, k, j); - android->keycode_lut[g_settings.input.binds[j][k].joykey] |= ((k + 1) << shift); + if (g_settings.input.binds[j][k].valid && g_settings.input.binds[j][k].joykey && g_settings.input.binds[j][k].joykey < LAST_KEYCODE) + { + RARCH_LOG("binding %llu to %d (p%d)\n", g_settings.input.binds[j][k].joykey, k, j); + android_input_keycode_lut[g_settings.input.binds[j][k].joykey] |= ((k + 1) << shift); + } } } } + + android_input_use_keycode_lut = true; } + memcpy(android->keycode_lut, android_input_keycode_lut, sizeof(android_input_keycode_lut)); + for (i = 0; i < MAX_PADS; i++) { for (j = 0; j < RARCH_FIRST_META_KEY; j++)