Bug 2358 - [Android] Joystick Button Mappings are strange (fix by David Brady)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
diff --git a/src/joystick/android/SDL_sysjoystick.c b/src/joystick/android/SDL_sysjoystick.c
index 229a48d..2065145 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: