SDL: added keycodes for gamepad analog sticks to SDL_ANDROID_SetIndividualGamepadKeymap(), while API is still fresh

This commit is contained in:
Sergii Pylypenko
2017-11-16 21:36:15 +02:00
parent e618b3a2d0
commit df9ffa1c2b
10 changed files with 340 additions and 102 deletions

View File

@@ -358,7 +358,7 @@ echo "# 9 = Nintendo64 from RetroArch" >> AndroidAppSettings.cfg
echo TouchscreenKeysTheme=$TouchscreenKeysTheme >> AndroidAppSettings.cfg
echo >> AndroidAppSettings.cfg
echo "# Redefine gamepad keys to SDL keysyms, button order is:" >> AndroidAppSettings.cfg
echo "# A B X Y L1 R1 L2 R2 LThumb RThumb Start Select Up Down Left Right" >> AndroidAppSettings.cfg
echo "# A B X Y L1 R1 L2 R2 LThumb RThumb Start Select Up Down Left Right LThumbUp LThumbDown LThumbLeft LThumbRight RThumbUp RThumbDown RThumbLeft RThumbRight" >> AndroidAppSettings.cfg
echo RedefinedKeysGamepad=\"$RedefinedKeysGamepad\" >> AndroidAppSettings.cfg
echo >> AndroidAppSettings.cfg
echo "# Redefine keys for the second gamepad, same as the first gamepad if not set:" >> AndroidAppSettings.cfg

View File

@@ -225,11 +225,11 @@ RedefinedKeysScreenKbNames="0 1 2 3 4 5 6 7 8 9"
TouchscreenKeysTheme=3
# Redefine gamepad keys to SDL keysyms, button order is:
# 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"
# A B X Y L1 R1 L2 R2 LThumb RThumb Start Select Up Down Left Right LThumbUp LThumbDown LThumbLeft LThumbRight RThumbUp RThumbDown RThumbLeft RThumbRight
RedefinedKeysGamepad="0 1 2 3 4 5 6 7 8 9 j k UP DOWN LEFT RIGHT PAGEUP PAGEDOWN HOME END PLUS MINUS LEFTBRACKET RIGHTBRACKET"
# 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"
RedefinedKeysSecondGamepad="q w e r t y u i o p a s d f g h z x c v b n m COMMA"
# 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"

View File

@@ -169,16 +169,24 @@ extern DECLSPEC int SDLCALL SDL_IsScreenKeyboardShown(void *unused);
enum
{
SDL_ANDROID_MAX_GAMEPADS = 4, // Maximum amount of gamepads supported
SDL_ANDROID_MAX_GAMEPADS = 4, /* Maximum amount of gamepads supported */
SDL_ANDROID_FIRST_GAMEPAD_ID = 2, /* Joystick ID for SDL_JoystickOpen() and for SDL_Event event.jaxis.which */
SDL_ANDROID_SECOND_GAMEPAD_ID = 3, /* Joystick ID for SDL_JoystickOpen() and for SDL_Event event.jaxis.which */
SDL_ANDROID_THIRD_GAMEPAD_ID = 4, /* Joystick ID for SDL_JoystickOpen() and for SDL_Event event.jaxis.which */
SDL_ANDROID_FOURTH_GAMEPAD_ID = 5, /* Joystick ID for SDL_JoystickOpen() and for SDL_Event event.jaxis.which */
};
/* Remap SDL keycodes returned by gamepad buttons.
Pass the SDLK_ constants, or 0 to leave old value.
On OUYA: O = A, U = X, Y = Y, A = B.
GamepadId is from 0 to 3, up to SDL_ANDROID_MAX_GAMEPADS */
GamepadId is from 0 to 3, up to SDL_ANDROID_MAX_GAMEPADS
Analog thumb joysticks will send keycodes instead of joystick events
only if SDL_JoystickOpen() was NOT called for joystick IDs from 2 to 5. */
extern DECLSPEC void SDLCALL SDL_ANDROID_SetIndividualGamepadKeymap(int GamepadId,
int A, int B, int X, int Y, int L1, int R1, int L2, int R2, int LThumb, int RThumb,
int Start, int Select, int Up, int Down, int Left, int Right);
int Start, int Select, int Up, int Down, int Left, int Right,
int LThumbUp, int LThumbDown, int LThumbLeft, int LThumbRight,
int RThumbUp, int RThumbDown, int RThumbLeft, int RThumbRight);
/* Deprecated API, will change keymap for all gamepads */
extern DECLSPEC void SDLCALL SDL_ANDROID_SetGamepadKeymap(int A, int B, int X, int Y, int L1, int R1, int L2, int R2, int LThumb, int RThumb);

View File

@@ -83,7 +83,15 @@ enum { RIGHT_CLICK_NONE = 0, RIGHT_CLICK_WITH_MULTITOUCH = 1, RIGHT_CLICK_WITH_P
RIGHT_CLICK_WITH_KEY = 3, RIGHT_CLICK_WITH_TIMEOUT = 4 };
enum { LEFT_CLICK_NORMAL = 0, LEFT_CLICK_NEAR_CURSOR = 1, LEFT_CLICK_WITH_MULTITOUCH = 2, LEFT_CLICK_WITH_PRESSURE = 3,
LEFT_CLICK_WITH_KEY = 4, LEFT_CLICK_WITH_TIMEOUT = 5, LEFT_CLICK_WITH_TAP = 6, LEFT_CLICK_WITH_TAP_OR_TIMEOUT = 7 };
enum { JOY_TOUCHSCREEN = 0, JOY_ACCELGYRO = 1, JOY_GAMEPAD1 = 2, JOY_GAMEPAD2 = 3, JOY_GAMEPAD3 = 4, JOY_GAMEPAD4 = 5 };
enum
{
JOY_TOUCHSCREEN = 0,
JOY_ACCELGYRO = 1,
JOY_GAMEPAD1 = SDL_ANDROID_FIRST_GAMEPAD_ID,
JOY_GAMEPAD2 = SDL_ANDROID_SECOND_GAMEPAD_ID,
JOY_GAMEPAD3 = SDL_ANDROID_THIRD_GAMEPAD_ID,
JOY_GAMEPAD4 = SDL_ANDROID_FOURTH_GAMEPAD_ID
};
static int leftClickMethod = LEFT_CLICK_NORMAL;
static int rightClickMethod = RIGHT_CLICK_NONE;
static int leftClickKey = KEYCODE_DPAD_CENTER;
@@ -171,7 +179,7 @@ static inline int InsideRect( const SDL_Rect * r, int x, int y )
return ( x >= r->x && x <= r->x + r->w ) && ( y >= r->y && y <= r->y + r->h );
}
void UpdateScreenUnderFingerRect( int x, int y )
void SDL_ANDROID_UpdateScreenUnderFingerRect( int x, int y )
{
#if SDL_VERSION_ATLEAST(1,3,0)
return;
@@ -596,7 +604,7 @@ static int ProcessMouseDown( int x, int y )
else
{
SDL_ANDROID_MainThreadPushMouseMotion(x, y);
action == MOUSE_MOVE;
action = MOUSE_MOVE;
mouseInitialX = x;
mouseInitialY = y;
mouseInitialTime = SDL_GetTicks();
@@ -605,7 +613,7 @@ static int ProcessMouseDown( int x, int y )
sem_post(&mouseClickTimeoutSemaphore);
}
if( SDL_ANDROID_ShowScreenUnderFinger == ZOOM_MAGNIFIER )
UpdateScreenUnderFingerRect(x, y);
SDL_ANDROID_UpdateScreenUnderFingerRect(x, y);
return action;
}
@@ -645,7 +653,7 @@ static void ProcessMouseMove_Timeouts( int x, int y )
}
}
if( SDL_ANDROID_ShowScreenUnderFinger == ZOOM_MAGNIFIER )
UpdateScreenUnderFingerRect(x, y);
SDL_ANDROID_UpdateScreenUnderFingerRect(x, y);
}
static void ProcessMouseMove( int x, int y, int force, int radius )
@@ -784,7 +792,7 @@ static void ProcessMouseHover( jint *xx, jint *yy, int action, int distance )
}
if( action == MOUSE_HOVER && distance < HOVER_DISTANCE_MAX * 3 / 4 )
UpdateScreenUnderFingerRect(*xx, *yy);
SDL_ANDROID_UpdateScreenUnderFingerRect(*xx, *yy);
else
SDL_ANDROID_ShowScreenUnderFingerRect.w = SDL_ANDROID_ShowScreenUnderFingerRect.h = 0; // This is reset later by ProcessMouseMove()
@@ -1449,63 +1457,101 @@ JAVA_EXPORT_NAME(DemoGLSurfaceView_nativeGamepadAnalogJoystickInput) (JNIEnv* en
}
else
{
if( fabsf(dpadx) < 0.01f && fabsf(dpady) < 0.01f )
if( SDL_ANDROID_moveMouseWithArrowKeys )
{
dpadx = stick1x;
dpady = stick1y;
if( fabsf(stick2x) > 0.2f || fabsf(stick2y) > 0.2f )
{
// Move mouse with right stick
SDL_ANDROID_moveMouseWithKbAccelUpdateNeeded |= 4;
SDL_ANDROID_moveMouseWithKbSpeedX = stick2x * 3 * SDL_ANDROID_moveMouseWithKbSpeed;
SDL_ANDROID_moveMouseWithKbSpeedY = stick2y * 3 * SDL_ANDROID_moveMouseWithKbSpeed;
}
else
{
SDL_ANDROID_moveMouseWithKbAccelUpdateNeeded &= ~4;
}
}
if( fabsf(stick2x) > 0.2f || fabsf(stick2y) > 0.2f )
// Translate analog sticks to keypresses
if( stick1y < -0.5f )
{
// Move mouse with right stick
SDL_ANDROID_moveMouseWithKbAccelUpdateNeeded |= 4;
SDL_ANDROID_moveMouseWithKbSpeedX = stick2x * 3 * SDL_ANDROID_moveMouseWithKbSpeed;
SDL_ANDROID_moveMouseWithKbSpeedY = stick2y * 3 * SDL_ANDROID_moveMouseWithKbSpeed;
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_UP]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_UP], 0 );
}
else
{
SDL_ANDROID_moveMouseWithKbAccelUpdateNeeded &= ~4;
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_UP]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_UP], 0 );
}
if( stick1y > 0.5f )
{
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_DOWN]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_DOWN], 0 );
}
else
{
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_DOWN]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_DOWN], 0 );
}
if( stick1x < -0.5f )
{
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_LEFT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_LEFT], 0 );
}
else
{
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_LEFT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_LEFT], 0 );
}
if( stick1x > 0.5f )
{
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_RIGHT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_RIGHT], 0 );
}
else
{
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_RIGHT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_LTHUMB_RIGHT], 0 );
}
if( stick2y < -0.5f )
{
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_UP]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_UP], 0 );
}
else
{
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_UP]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_UP], 0 );
}
if( stick2y > 0.5f )
{
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_DOWN]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_DOWN], 0 );
}
else
{
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_DOWN]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_DOWN], 0 );
}
if( stick2x < -0.5f )
{
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_LEFT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_LEFT], 0 );
}
else
{
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_LEFT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_LEFT], 0 );
}
if( stick2x > 0.5f )
{
if( !SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_RIGHT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_PRESSED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_RIGHT], 0 );
}
else
{
if( SDL_GetKeyboardState(NULL)[SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_RIGHT]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_RTHUMB_RIGHT], 0 );
}
}
// Translate to up/down/left/right
if( dpadx < -0.5f )
{
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_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_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_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_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_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_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_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_DOWN]] )
SDL_ANDROID_MainThreadPushKeyboardKey( SDL_RELEASED, SDL_android_gamepad_keymap[gamepadId][KEYCODE_DPAD_DOWN], 0 );
}
}
@@ -1702,7 +1748,9 @@ JAVA_EXPORT_NAME(Settings_nativeInitKeymap) ( JNIEnv* env, jobject thiz )
void SDL_ANDROID_SetIndividualGamepadKeymap(int GamepadId,
int A, int B, int X, int Y, int L1, int R1, int L2, int R2, int LThumb, int RThumb,
int Start, int Select, int Up, int Down, int Left, int Right)
int Start, int Select, int Up, int Down, int Left, int Right,
int LThumbUp, int LThumbDown, int LThumbLeft, int LThumbRight,
int RThumbUp, int RThumbDown, int RThumbLeft, int RThumbRight)
{
/*
Arguments are SDL keycodes. Use the SDLK_ constants.
@@ -1719,34 +1767,42 @@ void SDL_ANDROID_SetIndividualGamepadKeymap(int GamepadId,
if( GamepadId < 0 || GamepadId >= SDL_ANDROID_MAX_GAMEPADS )
return;
if (A) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_A] = A;
if (A) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_3] = A;
if (B) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_B] = B;
if (B) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_2] = B;
if (X) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_X] = X;
if (X) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_4] = X;
if (Y) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_Y] = Y;
if (Y) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_1] = Y;
if (L1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_L1] = L1;
if (L1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_5] = L1;
if (R1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_R1] = R1;
if (R1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_6] = R1;
if (L2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_L2] = L2;
if (L2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_7] = L2;
if (R2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_R2] = R2;
if (R2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_8] = R2;
if (LThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_THUMBL] = LThumb;
if (LThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_11] = LThumb;
if (RThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_THUMBR] = RThumb;
if (RThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_12] = RThumb;
if (Start) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_START] = Start;
if (Start) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_9] = Start;
if (Select) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_SELECT] = Select;
if (Select) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_10] = Select;
if (Up) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_UP] = Up;
if (Down) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_DOWN] = Down;
if (Left) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_LEFT] = Left;
if (Right) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_RIGHT] = Right;
if (A) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_A] = A;
if (A) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_3] = A;
if (B) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_B] = B;
if (B) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_2] = B;
if (X) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_X] = X;
if (X) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_4] = X;
if (Y) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_Y] = Y;
if (Y) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_1] = Y;
if (L1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_L1] = L1;
if (L1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_5] = L1;
if (R1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_R1] = R1;
if (R1) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_6] = R1;
if (L2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_L2] = L2;
if (L2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_7] = L2;
if (R2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_R2] = R2;
if (R2) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_8] = R2;
if (LThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_THUMBL] = LThumb;
if (LThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_11] = LThumb;
if (RThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_THUMBR] = RThumb;
if (RThumb) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_12] = RThumb;
if (Start) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_START] = Start;
if (Start) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_9] = Start;
if (Select) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_SELECT] = Select;
if (Select) SDL_android_gamepad_keymap[GamepadId][KEYCODE_BUTTON_10] = Select;
if (Up) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_UP] = Up;
if (Down) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_DOWN] = Down;
if (Left) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_LEFT] = Left;
if (Right) SDL_android_gamepad_keymap[GamepadId][KEYCODE_DPAD_RIGHT] = Right;
if (LThumbUp) SDL_android_gamepad_keymap[GamepadId][KEYCODE_LTHUMB_UP] = LThumbUp;
if (LThumbDown) SDL_android_gamepad_keymap[GamepadId][KEYCODE_LTHUMB_DOWN] = LThumbDown;
if (LThumbLeft) SDL_android_gamepad_keymap[GamepadId][KEYCODE_LTHUMB_LEFT] = LThumbLeft;
if (LThumbRight) SDL_android_gamepad_keymap[GamepadId][KEYCODE_LTHUMB_RIGHT] = LThumbRight;
if (RThumbUp) SDL_android_gamepad_keymap[GamepadId][KEYCODE_RTHUMB_UP] = RThumbUp;
if (RThumbDown) SDL_android_gamepad_keymap[GamepadId][KEYCODE_RTHUMB_DOWN] = RThumbDown;
if (RThumbLeft) SDL_android_gamepad_keymap[GamepadId][KEYCODE_RTHUMB_LEFT] = RThumbLeft;
if (RThumbRight) SDL_android_gamepad_keymap[GamepadId][KEYCODE_RTHUMB_RIGHT] = RThumbRight;
if( GamepadId == 0 )
{
@@ -1767,7 +1823,7 @@ void SDL_ANDROID_SetGamepadKeymap(int A, int B, int X, int Y, int L1, int R1, in
int i;
for( i = 0; i < SDL_ANDROID_MAX_GAMEPADS; i++ )
{
SDL_ANDROID_SetIndividualGamepadKeymap(i, A, B, X, Y, L1, R1, L2, R2, LThumb, RThumb, 0, 0, 0, 0, 0, 0);
SDL_ANDROID_SetIndividualGamepadKeymap(i, A, B, X, Y, L1, R1, L2, R2, LThumb, RThumb, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
}

View File

@@ -260,6 +260,30 @@ extern int SDL_ANDROID_isTouchscreenKeyboardUsed;
#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_15
#define SDL_ANDROID_GAMEPAD_0_KEYCODE_15 RIGHT
#endif
#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_16
#define SDL_ANDROID_GAMEPAD_0_KEYCODE_16 UP
#endif
#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_17
#define SDL_ANDROID_GAMEPAD_0_KEYCODE_17 DOWN
#endif
#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_18
#define SDL_ANDROID_GAMEPAD_0_KEYCODE_18 LEFT
#endif
#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_19
#define SDL_ANDROID_GAMEPAD_0_KEYCODE_19 RIGHT
#endif
#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_20
#define SDL_ANDROID_GAMEPAD_0_KEYCODE_20 UNKNOWN
#endif
#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_21
#define SDL_ANDROID_GAMEPAD_0_KEYCODE_21 UNKNOWN
#endif
#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_22
#define SDL_ANDROID_GAMEPAD_0_KEYCODE_22 UNKNOWN
#endif
#ifndef SDL_ANDROID_GAMEPAD_0_KEYCODE_23
#define SDL_ANDROID_GAMEPAD_0_KEYCODE_23 UNKNOWN
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_0
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_0 SDL_ANDROID_GAMEPAD_0_KEYCODE_0
@@ -309,6 +333,30 @@ extern int SDL_ANDROID_isTouchscreenKeyboardUsed;
#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_1_KEYCODE_16
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_16 SDL_ANDROID_GAMEPAD_0_KEYCODE_16
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_17
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_17 SDL_ANDROID_GAMEPAD_0_KEYCODE_17
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_18
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_18 SDL_ANDROID_GAMEPAD_0_KEYCODE_18
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_19
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_19 SDL_ANDROID_GAMEPAD_0_KEYCODE_19
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_20
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_20 SDL_ANDROID_GAMEPAD_0_KEYCODE_20
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_21
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_21 SDL_ANDROID_GAMEPAD_0_KEYCODE_21
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_22
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_22 SDL_ANDROID_GAMEPAD_0_KEYCODE_22
#endif
#ifndef SDL_ANDROID_GAMEPAD_1_KEYCODE_23
#define SDL_ANDROID_GAMEPAD_1_KEYCODE_23 SDL_ANDROID_GAMEPAD_0_KEYCODE_23
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_0
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_0 SDL_ANDROID_GAMEPAD_0_KEYCODE_0
@@ -358,6 +406,30 @@ extern int SDL_ANDROID_isTouchscreenKeyboardUsed;
#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_2_KEYCODE_16
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_16 SDL_ANDROID_GAMEPAD_0_KEYCODE_16
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_17
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_17 SDL_ANDROID_GAMEPAD_0_KEYCODE_17
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_18
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_18 SDL_ANDROID_GAMEPAD_0_KEYCODE_18
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_19
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_19 SDL_ANDROID_GAMEPAD_0_KEYCODE_19
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_20
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_20 SDL_ANDROID_GAMEPAD_0_KEYCODE_20
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_21
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_21 SDL_ANDROID_GAMEPAD_0_KEYCODE_21
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_22
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_22 SDL_ANDROID_GAMEPAD_0_KEYCODE_22
#endif
#ifndef SDL_ANDROID_GAMEPAD_2_KEYCODE_23
#define SDL_ANDROID_GAMEPAD_2_KEYCODE_23 SDL_ANDROID_GAMEPAD_0_KEYCODE_23
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_0
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_0 SDL_ANDROID_GAMEPAD_0_KEYCODE_0
@@ -407,6 +479,30 @@ extern int SDL_ANDROID_isTouchscreenKeyboardUsed;
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_15
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_15 SDL_ANDROID_GAMEPAD_0_KEYCODE_15
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_16
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_16 SDL_ANDROID_GAMEPAD_0_KEYCODE_16
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_17
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_17 SDL_ANDROID_GAMEPAD_0_KEYCODE_17
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_18
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_18 SDL_ANDROID_GAMEPAD_0_KEYCODE_18
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_19
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_19 SDL_ANDROID_GAMEPAD_0_KEYCODE_19
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_20
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_20 SDL_ANDROID_GAMEPAD_0_KEYCODE_20
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_21
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_21 SDL_ANDROID_GAMEPAD_0_KEYCODE_21
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_22
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_22 SDL_ANDROID_GAMEPAD_0_KEYCODE_22
#endif
#ifndef SDL_ANDROID_GAMEPAD_3_KEYCODE_23
#define SDL_ANDROID_GAMEPAD_3_KEYCODE_23 SDL_ANDROID_GAMEPAD_0_KEYCODE_23
#endif
// Queue events to main thread
@@ -422,6 +518,10 @@ extern void SDL_ANDROID_MainThreadPushText( int ascii, int unicode );
extern void SDL_android_init_keymap(SDLKey *SDL_android_keymap);
extern void SDL_ANDROID_MainThreadPushMouseWheel( int x, int y ); // SDL 1.3 only
extern void SDL_ANDROID_MainThreadPushAppActive(int active);
extern void SDL_ANDROID_UpdateScreenUnderFingerRect(int x, int y);
extern void SDL_ANDROID_DeferredTextInput(void);
// Internal input queue stuff
extern SDLKey SDL_android_keymap[KEYCODE_LAST+1];

View File

@@ -31,6 +31,7 @@ If you compile this code with SDL 1.3 or newer, or use in some other way, the li
#include "SDL_mouse.h"
#include "SDL_mutex.h"
#include "SDL_thread.h"
#include "SDL_timer.h"
#include "../SDL_sysvideo.h"
#include "../SDL_pixels_c.h"
#include "../../events/SDL_events_c.h"
@@ -519,7 +520,7 @@ SDL_Surface *ANDROID_SetVideoMode(_THIS, SDL_Surface *current,
/* Set up the new mode framebuffer */
SDL_CurrentVideoSurface = current;
UpdateScreenUnderFingerRect(0,0);
SDL_ANDROID_UpdateScreenUnderFingerRect(0,0);
SDL_ANDROID_ShowScreenUnderFingerRect.w = SDL_ANDROID_ShowScreenUnderFingerRect.h = 0;
SDL_ANDROID_SetHoverDeadzone();
SDL_ANDROID_currentMouseX = SDL_ANDROID_sFakeWindowWidth / 2;

View File

@@ -271,6 +271,46 @@ KEYCODE_TV_MEDIA_CONTEXT_MENU = 257,
KEYCODE_TV_TIMER_PROGRAMMING = 258,
KEYCODE_HELP = 259,
// Oreo added even more
KEYCODE_NAVIGATE_PREVIOUS = 260,
KEYCODE_NAVIGATE_NEXT = 261,
KEYCODE_NAVIGATE_IN = 262,
KEYCODE_NAVIGATE_OUT = 263,
KEYCODE_STEM_PRIMARY = 264,
KEYCODE_STEM_1 = 265,
KEYCODE_STEM_2 = 266,
KEYCODE_STEM_3 = 267,
KEYCODE_DPAD_UP_LEFT = 268,
KEYCODE_DPAD_DOWN_LEFT = 269,
KEYCODE_DPAD_UP_RIGHT = 270,
KEYCODE_DPAD_DOWN_RIGHT = 271,
KEYCODE_MEDIA_SKIP_FORWARD = 272,
KEYCODE_MEDIA_SKIP_BACKWARD = 273,
KEYCODE_MEDIA_STEP_FORWARD = 274,
KEYCODE_MEDIA_STEP_BACKWARD = 275,
KEYCODE_SOFT_SLEEP = 276,
KEYCODE_CUT = 277,
KEYCODE_COPY = 278,
KEYCODE_PASTE = 279,
KEYCODE_SYSTEM_NAVIGATION_UP = 280,
KEYCODE_SYSTEM_NAVIGATION_DOWN = 281,
KEYCODE_SYSTEM_NAVIGATION_LEFT = 282,
KEYCODE_SYSTEM_NAVIGATION_RIGHT = 283,
// No more Android keycodes please! Or I'll have to change SDL-specific keycodes
// SDL-specific keycodes
// Gamepad analog joysticks can also send keycodes
KEYCODE_LTHUMB_UP = 285,
KEYCODE_LTHUMB_DOWN = 286,
KEYCODE_LTHUMB_LEFT = 287,
KEYCODE_LTHUMB_RIGHT = 288,
KEYCODE_RTHUMB_UP = 289,
KEYCODE_RTHUMB_DOWN = 290,
KEYCODE_RTHUMB_LEFT = 291,
KEYCODE_RTHUMB_RIGHT = 292,
// Press mouse buttons with keyboard events
KEYCODE_MOUSE_LEFT = 293,
KEYCODE_MOUSE_MIDDLE = 294,

View File

@@ -285,7 +285,15 @@ void SDL_android_init_keymap(SDLKey *SDL_android_keymap)
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_12)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_13)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_14)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_15))
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_15)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_16)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_17)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_18)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_19)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_20)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_21)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_22)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_0_KEYCODE_23))
);
SDL_ANDROID_SetIndividualGamepadKeymap( 1,
@@ -304,7 +312,15 @@ void SDL_android_init_keymap(SDLKey *SDL_android_keymap)
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_12)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_13)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_14)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_15))
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_15)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_16)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_17)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_18)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_19)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_20)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_21)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_22)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_1_KEYCODE_23))
);
SDL_ANDROID_SetIndividualGamepadKeymap( 2,
@@ -323,7 +339,15 @@ void SDL_android_init_keymap(SDLKey *SDL_android_keymap)
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_12)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_13)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_14)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_15))
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_15)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_16)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_17)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_18)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_19)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_20)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_21)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_22)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_2_KEYCODE_23))
);
SDL_ANDROID_SetIndividualGamepadKeymap( 3,
@@ -342,7 +366,15 @@ void SDL_android_init_keymap(SDLKey *SDL_android_keymap)
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_12)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_13)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_14)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_15))
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_15)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_16)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_17)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_18)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_19)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_20)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_21)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_22)),
SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_GAMEPAD_3_KEYCODE_23))
);
}

View File

@@ -46,7 +46,7 @@ static inline SDL_keysym asciiToKeysym(int ascii, int unicode)
if ( ascii < SDLK_LAST )
keysym.scancode = SDL_android_keysym_to_scancode[ascii];
keysym.sym = ascii;
if (keysym.sym < 0 || keysym.sym >= SDLK_LAST)
if (keysym.sym >= SDLK_LAST)
keysym.sym = SDLK_UNKNOWN;
keysym.mod = KMOD_NONE;
keysym.unicode = 0;

View File

@@ -280,9 +280,10 @@ with value 32767 equal to 0.25 rad/s. Multiple events will be sent at once, if t
You will need to set AppUsesGyroscope=y in AndroidAppSettings.cfg to use it, and call SDL_JoystickOpen(1).
Gyroscope hardware is much more precise and less noisy than accelerometer, it is present on newer devices
starting from Galaxy S II, but older devices do no have it - it is emulated with accelerometer + compass.
SDL also supports gamepad - you can plug PS3/Xbox gamepad to almost any tablet, some devices have built-in gamepad.
Gamepad stick events are sent as SDL_JOYAXISMOTION, with event.jaxis.which == 2 and event.jaxis.axis from 0 to 3.
Gamepad analog L1/R1 buttons are sent as SDL_JOYAXISMOTION, with event.jaxis.which == 2 and event.jaxis.axis from 4 to 5.
SDL also supports gamepads - you can plug PS3/Xbox gamepad to almost any tablet, some devices have built-in gamepad.
Gamepad stick events are sent as SDL_JOYAXISMOTION, with event.jaxis.which from 2 to 5 and event.jaxis.axis from 0 to 3.
Gamepad analog L1/R1 buttons are sent as SDL_JOYAXISMOTION, with event.jaxis.which from 2 to 5 and event.jaxis.axis from 4 to 5.
The gamepad where any button was pressed becomes the first gamepad. Maximum 4 gamepads are supported.
Other gamepad buttons generate key events, which are taken from RedefinedKeysGamepad in AndroidAppSettings.cfg.