SDL: support for 4 gamepads, I have tested with only three gamepads so 4-th gamepad could fail

This commit is contained in:
Sergii Pylypenko
2017-11-08 22:09:32 +02:00
parent b742ebaf72
commit b12fc6e402
6 changed files with 223 additions and 26 deletions

View File

@@ -228,6 +228,15 @@ TouchscreenKeysTheme=4
# A B X Y L1 R1 L2 R2 LThumb RThumb Start Select Up Down Left Right
RedefinedKeysGamepad="0 1 2 3 4 5 6 7 8 9"
# Redefine keys for the second gamepad, same as the first gamepad if not set:
RedefinedKeysSecondGamepad="q w e r t y u i o p a s d f g h"
# Redefine keys for the third gamepad, same as the first gamepad if not set:
RedefinedKeysThirdGamepad="F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14 F15 PRINT"
# Redefine keys for the fourth gamepad, same as the first gamepad if not set:
RedefinedKeysFourthGamepad="KP0 KP1 KP2 KP3 KP4 KP5 KP6 KP7 KP8 KP9 KP_PERIOD KP_DIVIDE KP_MULTIPLY KP_MINUS KP_PLUS KP_ENTER"
# How long to show startup menu button, in msec, 0 to disable startup menu
StartupMenuButtonTimeout=3000

View File

@@ -405,6 +405,7 @@ JNIEXPORT jint JNICALL JAVA_EXPORT_NAME(AudioThread_nativeAudioInitJavaCallbacks
JavaDeinitAudio = (*jniEnv)->GetMethodID(jniEnv, JavaAudioThreadClass, "deinitAudio", "()I");
JavaPauseAudioPlayback = (*jniEnv)->GetMethodID(jniEnv, JavaAudioThreadClass, "pauseAudioPlayback", "()I");
JavaResumeAudioPlayback = (*jniEnv)->GetMethodID(jniEnv, JavaAudioThreadClass, "resumeAudioPlayback", "()I");
return 0;
}
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)

View File

@@ -66,6 +66,15 @@ static inline SDL_scancode TranslateKey(int scancode)
return SDL_android_keymap[scancode];
}
static inline SDL_scancode TranslateKeyGamepad(int scancode, int gamepadId)
{
if ( scancode >= KEYCODE_LAST + 1 )
scancode = KEYCODE_UNKNOWN;
if (gamepadId < 0 || gamepadId > SDL_ANDROID_MAX_GAMEPADS)
gamepadId = 0;
return gamepadId ? SDL_android_gamepad_keymap[gamepadId - 1][scancode] : SDL_android_keymap[scancode];
}
int SDL_ANDROID_isMouseUsed = 0;
#define NORMALIZE_FLOAT_32767(X) (fminf(32767.0f, fmaxf(-32767.0f, (X) * 32767.0f)))
@@ -986,7 +995,7 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeKey) ( JNIEnv* env, jobject thiz, jint
return 1;
}
keycode = TranslateKey(key);
keycode = TranslateKeyGamepad(key, gamepadId);
//__android_log_print(ANDROID_LOG_INFO, "libSDL","nativeKey %d action %d translated %d unicode %d", key, action, keycode, unicode);
if( (int)keycode == SDLK_NO_REMAP || (keycode == SDLK_UNKNOWN && unicode == 0) )
@@ -1424,14 +1433,19 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeGamepadAnalogJoystickInput) (JNIEnv* en
{
//__android_log_print(ANDROID_LOG_INFO, "libSDL","%s: gamepadId %d", __FUNCTION__, gamepadId);
if( SDL_ANDROID_CurrentJoysticks[JOY_GAMEPAD1] )
if (gamepadId > SDL_ANDROID_MAX_GAMEPADS || gamepadId <= 0)
gamepadId = 1;
gamepadId --;
if( SDL_ANDROID_CurrentJoysticks[JOY_GAMEPAD1 + gamepadId] )
{
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1, 0, NORMALIZE_FLOAT_32767(stick1x));
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1, 1, NORMALIZE_FLOAT_32767(stick1y));
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1, 2, NORMALIZE_FLOAT_32767(stick2x));
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1, 3, NORMALIZE_FLOAT_32767(stick2y));
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1, 4, NORMALIZE_FLOAT_32767(ltrigger));
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1, 5, NORMALIZE_FLOAT_32767(rtrigger));
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1 + gamepadId, 0, NORMALIZE_FLOAT_32767(stick1x));
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1 + gamepadId, 1, NORMALIZE_FLOAT_32767(stick1y));
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1 + gamepadId, 2, NORMALIZE_FLOAT_32767(stick2x));
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1 + gamepadId, 3, NORMALIZE_FLOAT_32767(stick2y));
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1 + gamepadId, 4, NORMALIZE_FLOAT_32767(ltrigger));
SDL_ANDROID_MainThreadPushJoystickAxis(JOY_GAMEPAD1 + gamepadId, 5, NORMALIZE_FLOAT_32767(rtrigger));
}
else
{
@@ -1455,43 +1469,43 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeGamepadAnalogJoystickInput) (JNIEnv* en
// Translate to up/down/left/right
if( dpadx < -0.5f )
{
if( !SDL_GetKeyboardState(NULL)[SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_14))] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_14)), 0 );
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_LEFT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_LEFT], 0 );
}
else
{
if( SDL_GetKeyboardState(NULL)[SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_14))] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_14)), 0 );
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_LEFT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_LEFT], 0 );
}
if( dpadx > 0.5f )
{
if( !SDL_GetKeyboardState(NULL)[SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_15))] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_15)), 0 );
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_RIGHT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_RIGHT], 0 );
}
else
{
if( SDL_GetKeyboardState(NULL)[SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_15))] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_15)), 0 );
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_RIGHT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_RIGHT], 0 );
}
if( dpady < -0.5f )
{
if( !SDL_GetKeyboardState(NULL)[SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_12))] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_12)), 0 );
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_UP]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_UP], 0 );
}
else
{
if( SDL_GetKeyboardState(NULL)[SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_12))] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_12)), 0 );
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_UP]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_UP], 0 );
}
if( dpady > 0.5f )
{
if( !SDL_GetKeyboardState(NULL)[SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_13))] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_13)), 0 );
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_DOWN]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_DOWN], 0 );
}
else
{
if( SDL_GetKeyboardState(NULL)[SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_13))] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_13)), 0 );
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_DOWN]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_DOWN], 0 );
}
}

View File

@@ -261,6 +261,154 @@ extern int SDL_ANDROID_isTouchscreenKeyboardUsed;
#define SDL_ANDROID_GAMEPAD_0_KEYCODE_15 RIGHT
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_0
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_0 SDL_ANDROID_GAMEPAD_0_KEYCODE_0
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_1
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_1 SDL_ANDROID_GAMEPAD_0_KEYCODE_1
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_2
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_2 SDL_ANDROID_GAMEPAD_0_KEYCODE_2
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_3
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_3 SDL_ANDROID_GAMEPAD_0_KEYCODE_3
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_4
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_4 SDL_ANDROID_GAMEPAD_0_KEYCODE_4
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_5
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_5 SDL_ANDROID_GAMEPAD_0_KEYCODE_5
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_6
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_6 SDL_ANDROID_GAMEPAD_0_KEYCODE_6
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_7
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_7 SDL_ANDROID_GAMEPAD_0_KEYCODE_7
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_8
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_8 SDL_ANDROID_GAMEPAD_0_KEYCODE_8
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_9
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_9 SDL_ANDROID_GAMEPAD_0_KEYCODE_9
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_10
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_10 SDL_ANDROID_GAMEPAD_0_KEYCODE_10
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_11
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_11 SDL_ANDROID_GAMEPAD_0_KEYCODE_11
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_12
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_12 SDL_ANDROID_GAMEPAD_0_KEYCODE_12
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_13
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_13 SDL_ANDROID_GAMEPAD_0_KEYCODE_13
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_14
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_14 SDL_ANDROID_GAMEPAD_0_KEYCODE_14
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_15
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_15 SDL_ANDROID_GAMEPAD_0_KEYCODE_15
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_0
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_0 SDL_ANDROID_GAMEPAD_0_KEYCODE_0
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_1
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_1 SDL_ANDROID_GAMEPAD_0_KEYCODE_1
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_2
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_2 SDL_ANDROID_GAMEPAD_0_KEYCODE_2
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_3
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_3 SDL_ANDROID_GAMEPAD_0_KEYCODE_3
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_4
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_4 SDL_ANDROID_GAMEPAD_0_KEYCODE_4
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_5
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_5 SDL_ANDROID_GAMEPAD_0_KEYCODE_5
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_6
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_6 SDL_ANDROID_GAMEPAD_0_KEYCODE_6
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_7
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_7 SDL_ANDROID_GAMEPAD_0_KEYCODE_7
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_8
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_8 SDL_ANDROID_GAMEPAD_0_KEYCODE_8
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_9
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_9 SDL_ANDROID_GAMEPAD_0_KEYCODE_9
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_10
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_10 SDL_ANDROID_GAMEPAD_0_KEYCODE_10
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_11
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_11 SDL_ANDROID_GAMEPAD_0_KEYCODE_11
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_12
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_12 SDL_ANDROID_GAMEPAD_0_KEYCODE_12
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_13
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_13 SDL_ANDROID_GAMEPAD_0_KEYCODE_13
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_14
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_14 SDL_ANDROID_GAMEPAD_0_KEYCODE_14
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_15
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_15 SDL_ANDROID_GAMEPAD_0_KEYCODE_15
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_0
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_0 SDL_ANDROID_GAMEPAD_0_KEYCODE_0
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_1
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_1 SDL_ANDROID_GAMEPAD_0_KEYCODE_1
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_2
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_2 SDL_ANDROID_GAMEPAD_0_KEYCODE_2
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_3
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_3 SDL_ANDROID_GAMEPAD_0_KEYCODE_3
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_4
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_4 SDL_ANDROID_GAMEPAD_0_KEYCODE_4
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_5
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_5 SDL_ANDROID_GAMEPAD_0_KEYCODE_5
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_6
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_6 SDL_ANDROID_GAMEPAD_0_KEYCODE_6
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_7
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_7 SDL_ANDROID_GAMEPAD_0_KEYCODE_7
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_8
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_8 SDL_ANDROID_GAMEPAD_0_KEYCODE_8
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_9
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_9 SDL_ANDROID_GAMEPAD_0_KEYCODE_9
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_10
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_10 SDL_ANDROID_GAMEPAD_0_KEYCODE_10
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_11
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_11 SDL_ANDROID_GAMEPAD_0_KEYCODE_11
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_12
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_12 SDL_ANDROID_GAMEPAD_0_KEYCODE_12
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_13
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_13 SDL_ANDROID_GAMEPAD_0_KEYCODE_13
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_14
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_14 SDL_ANDROID_GAMEPAD_0_KEYCODE_14
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_15
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_15 SDL_ANDROID_GAMEPAD_0_KEYCODE_15
#endif
// Queue events to main thread
extern void SDL_ANDROID_MainThreadPushMouseMotion(int x, int y);
extern void SDL_ANDROID_MainThreadPushMouseButton(int pressed, int button);

View File

@@ -286,7 +286,6 @@ void SDL_android_init_keymap(SDLKey *SDL_android_keymap)
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_15))
);
/*
SDL_ANDROID_SetIndividualGamepadKeymap( 1,
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_0)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_1)),
@@ -343,7 +342,6 @@ void SDL_android_init_keymap(SDLKey *SDL_android_keymap)
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_14)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_15))
);
*/
}
unsigned char SDL_android_keysym_to_scancode[SDLK_LAST] = {