From 50befa6201e73cfe066b6663e512bfdd9fda76ff Mon Sep 17 00:00:00 2001 From: Gabriel Jacobo Date: Thu, 23 Jan 2014 08:44:25 -0300 Subject: [PATCH] Bug 2358 - [Android] Joystick Button Mappings are strange (fix by David Brady) --- src/joystick/android/SDL_sysjoystick.c | 71 +++++++++++++++++++------- 1 file changed, 53 insertions(+), 18 deletions(-) diff --git a/src/joystick/android/SDL_sysjoystick.c b/src/joystick/android/SDL_sysjoystick.c index 229a48dca0b0d..2065145cd8777 100644 --- a/src/joystick/android/SDL_sysjoystick.c +++ b/src/joystick/android/SDL_sysjoystick.c @@ -85,35 +85,70 @@ keycode_to_SDL(int keycode) int button = 0; switch(keycode) { - /* D-Pad key codes (API 1), these get mapped to 0...4 */ - case AKEYCODE_DPAD_UP: - case AKEYCODE_DPAD_DOWN: - case AKEYCODE_DPAD_LEFT: - case AKEYCODE_DPAD_RIGHT: - case AKEYCODE_DPAD_CENTER: - button = keycode - AKEYCODE_DPAD_UP; - break; - - /* Some gamepad buttons (API 9), these get mapped to 5...19*/ + /* Some gamepad buttons (API 9) */ case AKEYCODE_BUTTON_A: + button = SDL_CONTROLLER_BUTTON_A; + break; case AKEYCODE_BUTTON_B: - case AKEYCODE_BUTTON_C: + button = SDL_CONTROLLER_BUTTON_B; + break; case AKEYCODE_BUTTON_X: + button = SDL_CONTROLLER_BUTTON_X; + break; case AKEYCODE_BUTTON_Y: - case AKEYCODE_BUTTON_Z: + button = SDL_CONTROLLER_BUTTON_Y; + break; case AKEYCODE_BUTTON_L1: - case AKEYCODE_BUTTON_L2: + button = SDL_CONTROLLER_BUTTON_LEFTSHOULDER; + break; case AKEYCODE_BUTTON_R1: - case AKEYCODE_BUTTON_R2: + button = SDL_CONTROLLER_BUTTON_RIGHTSHOULDER; + break; case AKEYCODE_BUTTON_THUMBL: + button = SDL_CONTROLLER_BUTTON_LEFTSTICK; + break; case AKEYCODE_BUTTON_THUMBR: + button = SDL_CONTROLLER_BUTTON_RIGHTSTICK; + break; case AKEYCODE_BUTTON_START: + button = SDL_CONTROLLER_BUTTON_START; + break; case AKEYCODE_BUTTON_SELECT: + button = SDL_CONTROLLER_BUTTON_BACK; + break; case AKEYCODE_BUTTON_MODE: - button = keycode - AKEYCODE_BUTTON_A + 5; + button = SDL_CONTROLLER_BUTTON_GUIDE; break; - - + case AKEYCODE_BUTTON_L2: + button = SDL_CONTROLLER_BUTTON_MAX; /* Not supported by GameController */ + break; + case AKEYCODE_BUTTON_R2: + button = SDL_CONTROLLER_BUTTON_MAX+1; /* Not supported by GameController */ + break; + case AKEYCODE_BUTTON_C: + button = SDL_CONTROLLER_BUTTON_MAX+2; /* Not supported by GameController */ + break; + case AKEYCODE_BUTTON_Z: + button = SDL_CONTROLLER_BUTTON_MAX+3; /* Not supported by GameController */ + break; + + /* D-Pad key codes (API 1) */ + case AKEYCODE_DPAD_UP: + button = SDL_CONTROLLER_BUTTON_DPAD_UP; + break; + case AKEYCODE_DPAD_DOWN: + button = SDL_CONTROLLER_BUTTON_DPAD_DOWN; + break; + case AKEYCODE_DPAD_LEFT: + button = SDL_CONTROLLER_BUTTON_DPAD_LEFT; + break; + case AKEYCODE_DPAD_RIGHT: + button = SDL_CONTROLLER_BUTTON_DPAD_RIGHT; + break; + case AKEYCODE_DPAD_CENTER: + button = SDL_CONTROLLER_BUTTON_MAX+4; /* Not supported by GameController */ + break; + /* More gamepad buttons (API 12), these get mapped to 20...35*/ case AKEYCODE_BUTTON_1: case AKEYCODE_BUTTON_2: @@ -131,7 +166,7 @@ keycode_to_SDL(int keycode) case AKEYCODE_BUTTON_14: case AKEYCODE_BUTTON_15: case AKEYCODE_BUTTON_16: - button = keycode - AKEYCODE_BUTTON_1 + 20; + button = keycode - AKEYCODE_BUTTON_1 + SDL_CONTROLLER_BUTTON_MAX + 5; break; default: