diff --git a/src/joystick/SDL_gamepad.c b/src/joystick/SDL_gamepad.c index 4650a8478..94145ecec 100644 --- a/src/joystick/SDL_gamepad.c +++ b/src/joystick/SDL_gamepad.c @@ -2274,11 +2274,13 @@ Sint16 SDL_GetGamepadAxis(SDL_Gamepad *gamepad, SDL_GamepadAxis axis) SDL_ExtendedGamepadBind *binding = &gamepad->bindings[i]; if (binding->outputType == SDL_GAMEPAD_BINDTYPE_AXIS && binding->output.axis.axis == axis) { int value = 0; + Sint16 val16 = 0; SDL_bool valid_input_range; SDL_bool valid_output_range; if (binding->inputType == SDL_GAMEPAD_BINDTYPE_AXIS) { - SDL_GetJoystickAxis(gamepad->joystick, binding->input.axis.axis, &value); + SDL_GetJoystickAxis(gamepad->joystick, binding->input.axis.axis, &val16); + value = val16; if (binding->input.axis.axis_min < binding->input.axis.axis_max) { valid_input_range = (value >= binding->input.axis.axis_min && value <= binding->input.axis.axis_max); } else { @@ -2358,8 +2360,10 @@ Uint8 SDL_GetGamepadButton(SDL_Gamepad *gamepad, SDL_GamepadButton button) if (binding->outputType == SDL_GAMEPAD_BINDTYPE_BUTTON && binding->output.button == button) { if (binding->inputType == SDL_GAMEPAD_BINDTYPE_AXIS) { SDL_bool valid_input_range; - int value = 0; - SDL_GetJoystickAxis(gamepad->joystick, binding->input.axis.axis, &value); + int value; + Sint16 val16 = 0; + SDL_GetJoystickAxis(gamepad->joystick, binding->input.axis.axis, &val16); + value = val16; int threshold = binding->input.axis.axis_min + (binding->input.axis.axis_max - binding->input.axis.axis_min) / 2; if (binding->input.axis.axis_min < binding->input.axis.axis_max) { valid_input_range = (value >= binding->input.axis.axis_min && value <= binding->input.axis.axis_max); diff --git a/test/testjoystick.c b/test/testjoystick.c index 9fa59fba9..6ecdada2c 100644 --- a/test/testjoystick.c +++ b/test/testjoystick.c @@ -227,7 +227,9 @@ void loop(void *arg) SDL_SetRenderDrawColor(screen, 0xFF, 0x00, 0x00, SDL_ALPHA_OPAQUE); for (i = 0; i < SDL_GetNumJoystickAxes(joystick); ++i) { /* Draw the X/Y axis */ - SDL_GetJoystickAxis(joystick, i, &x); + Sint16 val16 = 0; + SDL_GetJoystickAxis(joystick, i, &val16); + x = val16; x += 32768; x *= SCREEN_WIDTH; x /= 65535; @@ -238,7 +240,9 @@ void loop(void *arg) } ++i; if (i < SDL_GetNumJoystickAxes(joystick)) { - SDL_GetJoystickAxis(joystick, i, &y); + val16 = 0; + SDL_GetJoystickAxis(joystick, i, &val16); + y = val16; y += 32768; } else { y = 32768;