diff --git a/input/drivers_joypad/android_joypad.c b/input/drivers_joypad/android_joypad.c index c04eb81e72..857c9b0a80 100644 --- a/input/drivers_joypad/android_joypad.c +++ b/input/drivers_joypad/android_joypad.c @@ -75,22 +75,20 @@ static int16_t android_joypad_axis_state( struct android_app *android_app, unsigned port, uint32_t joyaxis) { - int val = 0; - if (AXIS_NEG_GET(joyaxis) < MAX_AXIS) { - val = android_app->analog_state[port][AXIS_NEG_GET(joyaxis)]; - if (val > 0) - val = 0; + int val = android_app->analog_state[port][AXIS_NEG_GET(joyaxis)]; + if (val < 0) + return val; } else if (AXIS_POS_GET(joyaxis) < MAX_AXIS) { - val = android_app->analog_state[port][AXIS_POS_GET(joyaxis)]; - if (val < 0) - val = 0; + int val = android_app->analog_state[port][AXIS_POS_GET(joyaxis)]; + if (val > 0) + return val; } - return val; + return 0; } static int16_t android_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/ctr_joypad.c b/input/drivers_joypad/ctr_joypad.c index 894d674833..10783947a0 100644 --- a/input/drivers_joypad/ctr_joypad.c +++ b/input/drivers_joypad/ctr_joypad.c @@ -72,51 +72,52 @@ static void ctr_joypad_get_buttons(unsigned port_num, input_bits_t *state) BIT256_CLEAR_ALL_PTR(state); } -static int16_t ctr_joypad_axis(unsigned port_num, uint32_t joyaxis) +static int16_t ctr_joypad_axis_state(unsigned port_num, uint32_t joyaxis) { int val = 0; int axis = -1; bool is_neg = false; bool is_pos = false; - if (port_num >= DEFAULT_MAX_PADS) - return 0; - if (AXIS_NEG_GET(joyaxis) < 4) { - axis = AXIS_NEG_GET(joyaxis); + axis = AXIS_NEG_GET(joyaxis); is_neg = true; } else if (AXIS_POS_GET(joyaxis) < 4) { - axis = AXIS_POS_GET(joyaxis); + axis = AXIS_POS_GET(joyaxis); is_pos = true; } + else + return 0; switch (axis) { case 0: - val = analog_state[port_num][0][0]; - break; case 1: - val = analog_state[port_num][0][1]; + val = analog_state[port_num][0][axis]; break; case 2: - val = analog_state[port_num][1][0]; - break; case 3: - val = analog_state[port_num][1][1]; + val = analog_state[port_num][1][axis - 2]; break; } if (is_neg && val > 0) - val = 0; + return 0; else if (is_pos && val < 0) - val = 0; - + return 0; return val; } +static int16_t ctr_joypad_axis(unsigned port_num, uint32_t joyaxis) +{ + if (port_num >= DEFAULT_MAX_PADS) + return 0; + return ctr_joypad_axis_state(port_num, joyaxis); +} + static int16_t ctr_joypad_state( rarch_joypad_info_t *joypad_info, const struct retro_keybind *binds, @@ -140,7 +141,7 @@ static int16_t ctr_joypad_state( (pad_state & (1 << (uint16_t)joykey))) ret |= ( 1 << i); else if (joyaxis != AXIS_NONE && - ((float)abs(ctr_joypad_axis(port, joyaxis)) + ((float)abs(ctr_joypad_axis_state(port, joyaxis)) / 0x8000) > joypad_info->axis_threshold) ret |= (1 << i); } diff --git a/input/drivers_joypad/dinput_joypad.c b/input/drivers_joypad/dinput_joypad.c index 245b841c87..745d2e3b68 100644 --- a/input/drivers_joypad/dinput_joypad.c +++ b/input/drivers_joypad/dinput_joypad.c @@ -522,14 +522,16 @@ static int16_t dinput_joypad_axis_state( if (AXIS_NEG_GET(joyaxis) <= 7) { - axis = AXIS_NEG_GET(joyaxis); + axis = AXIS_NEG_GET(joyaxis); is_neg = true; } else if (AXIS_POS_GET(joyaxis) <= 7) { - axis = AXIS_POS_GET(joyaxis); + axis = AXIS_POS_GET(joyaxis); is_pos = true; } + else + return 0; switch (axis) { @@ -552,10 +554,8 @@ static int16_t dinput_joypad_axis_state( val = pad->joy_state.lRz; break; case 6: - val = pad->joy_state.rglSlider[0]; - break; case 7: - val = pad->joy_state.rglSlider[1]; + val = pad->joy_state.rglSlider[axis - 6]; break; } @@ -563,7 +563,6 @@ static int16_t dinput_joypad_axis_state( return 0; else if (is_pos && val < 0) return 0; - return val; } diff --git a/input/drivers_joypad/linuxraw_joypad.c b/input/drivers_joypad/linuxraw_joypad.c index 2ccaae6ca5..a32d7831ef 100644 --- a/input/drivers_joypad/linuxraw_joypad.c +++ b/input/drivers_joypad/linuxraw_joypad.c @@ -329,22 +329,20 @@ static int16_t linuxraw_joypad_axis_state( const struct linuxraw_joypad *pad, unsigned port, uint32_t joyaxis) { - int16_t val = 0; if (AXIS_NEG_GET(joyaxis) < NUM_AXES) { - val = pad->axes[AXIS_NEG_GET(joyaxis)]; - if (val > 0) - val = 0; /* Kernel returns values in range [-0x7fff, 0x7fff]. */ + int16_t val = pad->axes[AXIS_NEG_GET(joyaxis)]; + if (val < 0) + return val; } else if (AXIS_POS_GET(joyaxis) < NUM_AXES) { - val = pad->axes[AXIS_POS_GET(joyaxis)]; - if (val < 0) - val = 0; + int16_t val = pad->axes[AXIS_POS_GET(joyaxis)]; + if (val > 0) + return val; } - - return val; + return 0; } static int16_t linuxraw_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/mfi_joypad.m b/input/drivers_joypad/mfi_joypad.m index c1f933f6dc..4d9d794176 100644 --- a/input/drivers_joypad/mfi_joypad.m +++ b/input/drivers_joypad/mfi_joypad.m @@ -370,28 +370,15 @@ static int16_t apple_gamecontroller_joypad_axis( axis = AXIS_POS_GET(joyaxis); is_pos = true; } + else + return 0; - switch (axis) - { - case 0: - val = mfi_axes[port][0]; - break; - case 1: - val = mfi_axes[port][1]; - break; - case 2: - val = mfi_axes[port][2]; - break; - case 3: - val = mfi_axes[port][3]; - break; - } - + if (axis >= 0 && axis < 4) + val = mfi_axes[port][axis]; if (is_neg && val > 0) - val = 0; + return 0; else if (is_pos && val < 0) - val = 0; - + return 0; return val; } diff --git a/input/drivers_joypad/ps2_joypad.c b/input/drivers_joypad/ps2_joypad.c index 8a35b20a8b..e70fa48eee 100644 --- a/input/drivers_joypad/ps2_joypad.c +++ b/input/drivers_joypad/ps2_joypad.c @@ -100,36 +100,33 @@ static int16_t ps2_joypad_axis_state(unsigned port_num, uint32_t joyaxis) if (AXIS_NEG_GET(joyaxis) < 4) { - axis = AXIS_NEG_GET(joyaxis); + axis = AXIS_NEG_GET(joyaxis); is_neg = true; } else if (AXIS_POS_GET(joyaxis) < 4) { - axis = AXIS_POS_GET(joyaxis); + axis = AXIS_POS_GET(joyaxis); is_pos = true; } + else + return 0; switch (axis) { case 0: - val = analog_state[port_num][0][0]; - break; case 1: - val = analog_state[port_num][0][1]; + val = analog_state[port_num][0][axis]; break; case 2: - val = analog_state[port_num][1][0]; - break; case 3: - val = analog_state[port_num][1][1]; + val = analog_state[port_num][1][axis-2]; break; } if (is_neg && val > 0) - val = 0; + return 0; else if (is_pos && val < 0) - val = 0; - + return 0; return val; } diff --git a/input/drivers_joypad/ps3_joypad.c b/input/drivers_joypad/ps3_joypad.c index 87424a0144..84b5db7f69 100644 --- a/input/drivers_joypad/ps3_joypad.c +++ b/input/drivers_joypad/ps3_joypad.c @@ -87,36 +87,33 @@ static int16_t ps3_joypad_axis_state(unsigned port, uint32_t joyaxis) if (AXIS_NEG_GET(joyaxis) < 4) { - axis = AXIS_NEG_GET(joyaxis); + axis = AXIS_NEG_GET(joyaxis); is_neg = true; } else if (AXIS_POS_GET(joyaxis) < 4) { - axis = AXIS_POS_GET(joyaxis); + axis = AXIS_POS_GET(joyaxis); is_pos = true; } + else + return 0; switch (axis) { case 0: - val = analog_state[port][0][0]; - break; case 1: - val = analog_state[port][0][1]; + val = analog_state[port][0][axis]; break; case 2: - val = analog_state[port][1][0]; - break; case 3: - val = analog_state[port][1][1]; + val = analog_state[port][1][axis-2]; break; } if (is_neg && val > 0) - val = 0; + return 0; else if (is_pos && val < 0) - val = 0; - + return 0; return val; } diff --git a/input/drivers_joypad/psp_joypad.c b/input/drivers_joypad/psp_joypad.c index ea18ac971c..b957295fe4 100644 --- a/input/drivers_joypad/psp_joypad.c +++ b/input/drivers_joypad/psp_joypad.c @@ -140,36 +140,33 @@ static int16_t psp_joypad_axis_state(unsigned port, uint32_t joyaxis) if (AXIS_NEG_GET(joyaxis) < 4) { - axis = AXIS_NEG_GET(joyaxis); + axis = AXIS_NEG_GET(joyaxis); is_neg = true; } else if (AXIS_POS_GET(joyaxis) < 4) { - axis = AXIS_POS_GET(joyaxis); + axis = AXIS_POS_GET(joyaxis); is_pos = true; } + else + return 0; switch (axis) { case 0: - val = analog_state[port][0][0]; - break; case 1: - val = analog_state[port][0][1]; + val = analog_state[port][0][axis]; break; case 2: - val = analog_state[port][1][0]; - break; case 3: - val = analog_state[port][1][1]; + val = analog_state[port][1][axis - 2]; break; } if (is_neg && val > 0) - val = 0; + return 0; else if (is_pos && val < 0) - val = 0; - + return 0; return val; } diff --git a/input/drivers_joypad/qnx_joypad.c b/input/drivers_joypad/qnx_joypad.c index bccd4842ef..e39e8b933a 100644 --- a/input/drivers_joypad/qnx_joypad.c +++ b/input/drivers_joypad/qnx_joypad.c @@ -66,38 +66,34 @@ static int16_t qnx_joypad_axis_state( int axis = -1; bool is_neg = false; bool is_pos = false; + if (AXIS_NEG_GET(joyaxis) < 4) { - axis = AXIS_NEG_GET(joyaxis); + axis = AXIS_NEG_GET(joyaxis); is_neg = true; } else if (AXIS_POS_GET(joyaxis) < 4) { - axis = AXIS_POS_GET(joyaxis); + axis = AXIS_POS_GET(joyaxis); is_pos = true; } switch (axis) { case 0: - val = controller->analog0[0]; - break; case 1: - val = controller->analog0[1]; + val = controller->analog0[axis]; break; case 2: - val = controller->analog1[0]; - break; case 3: - val = controller->analog1[1]; + val = controller->analog1[axis-2]; break; } if (is_neg && val > 0) - val = 0; + return 0; else if (is_pos && val < 0) - val = 0; - + return 0; return val; } diff --git a/input/drivers_joypad/rwebpad_joypad.c b/input/drivers_joypad/rwebpad_joypad.c index 4b067a6c0e..538534dbbc 100644 --- a/input/drivers_joypad/rwebpad_joypad.c +++ b/input/drivers_joypad/rwebpad_joypad.c @@ -138,21 +138,21 @@ static int16_t rwebpad_joypad_axis_state( EmscriptenGamepadEvent *gamepad_state, unsigned port, uint32_t joyaxis) { - int16_t val = 0; if (AXIS_NEG_GET(joyaxis) < gamepad_state->numAxes) { - val = CLAMPDOUBLE(gamepad_state->axis[AXIS_NEG_GET(joyaxis)]) * 0x7FFF; - if (val > 0) - val = 0; + int16_t val = CLAMPDOUBLE( + gamepad_state->axis[AXIS_NEG_GET(joyaxis)]) * 0x7FFF; + if (val < 0) + return val; } else if (AXIS_POS_GET(joyaxis) < gamepad_state->numAxes) { - val = CLAMPDOUBLE(gamepad_state->axis[AXIS_POS_GET(joyaxis)]) * 0x7FFF; - if (val < 0) - val = 0; + int16_t val = CLAMPDOUBLE( + gamepad_state->axis[AXIS_POS_GET(joyaxis)]) * 0x7FFF; + if (val > 0) + return val; } - - return val; + return 0; } static int16_t rwebpad_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/sdl_joypad.c b/input/drivers_joypad/sdl_joypad.c index 739fa325e6..cb0750f1f9 100644 --- a/input/drivers_joypad/sdl_joypad.c +++ b/input/drivers_joypad/sdl_joypad.c @@ -299,12 +299,12 @@ static int16_t sdl_joypad_button_state( sdl_joypad_t *pad, unsigned port, uint16_t joykey) { - unsigned hat_dir = GET_HAT_DIR(joykey); + unsigned hat_dir = GET_HAT_DIR(joykey); /* Check hat. */ if (hat_dir) { uint8_t dir; - uint16_t hat = GET_HAT(joykey); + uint16_t hat = GET_HAT(joykey); if (hat >= pad->num_hats) return 0; @@ -345,26 +345,23 @@ static int16_t sdl_joypad_axis_state( sdl_joypad_t *pad, unsigned port, uint32_t joyaxis) { - int16_t val = 0; if (AXIS_NEG_GET(joyaxis) < pad->num_axes) { - val = sdl_pad_get_axis(pad, AXIS_NEG_GET(joyaxis)); - - if (val > 0) - val = 0; + int16_t val = sdl_pad_get_axis(pad, AXIS_NEG_GET(joyaxis)); /* -0x8000 can cause trouble if we later abs() it. */ - else if (val < -0x7fff) - val = -0x7fff; + if (val < -0x7fff) + return -0x7fff; + else if (val < 0) + return val; } else if (AXIS_POS_GET(joyaxis) < pad->num_axes) { - val = sdl_pad_get_axis(pad, AXIS_POS_GET(joyaxis)); - - if (val < 0) - val = 0; + int16_t val = sdl_pad_get_axis(pad, AXIS_POS_GET(joyaxis)); + if (val > 0) + return val; } - return val; + return 0; } static int16_t sdl_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/switch_joypad.c b/input/drivers_joypad/switch_joypad.c index 5511b19877..4b8d83068c 100644 --- a/input/drivers_joypad/switch_joypad.c +++ b/input/drivers_joypad/switch_joypad.c @@ -113,36 +113,31 @@ static int16_t switch_joypad_axis_state(unsigned port, uint32_t joyaxis) if (AXIS_NEG_GET(joyaxis) < 4) { - axis = AXIS_NEG_GET(joyaxis); + axis = AXIS_NEG_GET(joyaxis); is_neg = true; } else if (AXIS_POS_GET(joyaxis) < 4) { - axis = AXIS_POS_GET(joyaxis); + axis = AXIS_POS_GET(joyaxis); is_pos = true; } switch(axis) { case 0: - val = analog_state[port][0][0]; - break; case 1: - val = analog_state[port][0][1]; + val = analog_state[port][0][axis]; break; case 2: - val = analog_state[port][1][0]; - break; case 3: - val = analog_state[port][1][1]; + val = analog_state[port][1][axis - 2]; break; } if (is_neg && val > 0) - val = 0; + return 0; else if (is_pos && val < 0) - val = 0; - + return 0; return val; } diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c index d2873b30ee..092530ad28 100644 --- a/input/drivers_joypad/udev_joypad.c +++ b/input/drivers_joypad/udev_joypad.c @@ -648,33 +648,31 @@ static int16_t udev_joypad_axis_state( const struct udev_joypad *pad, unsigned port, uint32_t joyaxis) { - int16_t val = 0; if (AXIS_NEG_GET(joyaxis) < NUM_AXES) { - val = pad->axes[AXIS_NEG_GET(joyaxis)]; + int16_t val = pad->axes[AXIS_NEG_GET(joyaxis)]; /* Deal with analog triggers that report -32767 to 32767 */ if (( (AXIS_NEG_GET(joyaxis) == ABS_Z) || (AXIS_NEG_GET(joyaxis) == ABS_RZ)) && (pad->neg_trigger[AXIS_NEG_GET(joyaxis)])) val = (val + 0x7fff) / 2; - if (val > 0) - val = 0; + if (val < 0) + return val; } else if (AXIS_POS_GET(joyaxis) < NUM_AXES) { - val = pad->axes[AXIS_POS_GET(joyaxis)]; + int16_t val = pad->axes[AXIS_POS_GET(joyaxis)]; /* Deal with analog triggers that report -32767 to 32767 */ if (( (AXIS_POS_GET(joyaxis) == ABS_Z) || (AXIS_POS_GET(joyaxis) == ABS_RZ)) && (pad->neg_trigger[AXIS_POS_GET(joyaxis)])) val = (val + 0x7fff) / 2; - if (val < 0) - val = 0; + if (val > 0) + return val; } - - return val; + return 0; } static int16_t udev_joypad_axis(unsigned port, uint32_t joyaxis) diff --git a/input/drivers_joypad/xdk_joypad.c b/input/drivers_joypad/xdk_joypad.c index ee3b468174..90778eddd3 100644 --- a/input/drivers_joypad/xdk_joypad.c +++ b/input/drivers_joypad/xdk_joypad.c @@ -168,17 +168,19 @@ static int16_t xdk_joypad_axis_state(XINPUT_GAMEPAD *pad, int axis = -1; bool is_neg = false; bool is_pos = false; + if (AXIS_NEG_GET(joyaxis) <= 3) { - axis = AXIS_NEG_GET(joyaxis); + axis = AXIS_NEG_GET(joyaxis); is_neg = true; } else if (AXIS_POS_GET(joyaxis) <= 5) { - axis = AXIS_POS_GET(joyaxis); + axis = AXIS_POS_GET(joyaxis); is_pos = true; } - + else + return 0; switch (axis) { @@ -207,14 +209,12 @@ static int16_t xdk_joypad_axis_state(XINPUT_GAMEPAD *pad, } if (is_neg && val > 0) - val = 0; + return 0; else if (is_pos && val < 0) - val = 0; - + return 0; /* Clamp to avoid warnings */ - if (val == -32768) - val = -32767; - + else if (val == -32768) + return -32767; return val; } diff --git a/input/drivers_joypad/xinput_joypad.c b/input/drivers_joypad/xinput_joypad.c index 9cf7ca1f3e..f078921277 100644 --- a/input/drivers_joypad/xinput_joypad.c +++ b/input/drivers_joypad/xinput_joypad.c @@ -473,14 +473,16 @@ static int16_t xinput_joypad_axis_state( /* triggers (axes 4,5) cannot be negative */ if (AXIS_NEG_GET(joyaxis) <= 3) { - axis = AXIS_NEG_GET(joyaxis); - is_neg = true; + axis = AXIS_NEG_GET(joyaxis); + is_neg = true; } else if (AXIS_POS_GET(joyaxis) <= 5) { - axis = AXIS_POS_GET(joyaxis); - is_pos = true; + axis = AXIS_POS_GET(joyaxis); + is_pos = true; } + else + return 0; switch (axis) { @@ -505,14 +507,12 @@ static int16_t xinput_joypad_axis_state( } if (is_neg && val > 0) - val = 0; + return 0; else if (is_pos && val < 0) - val = 0; - + return 0; /* Clamp to avoid overflow error. */ - if (val == -32768) - val = -32767; - + else if (val == -32768) + return -32767; return val; }