(drivers_joypad) Cleanup axis functions

This commit is contained in:
twinaphex 2020-07-19 18:51:05 +02:00
parent ff01ed8cc3
commit 897a9de5be
15 changed files with 125 additions and 165 deletions

View File

@ -75,22 +75,20 @@ static int16_t android_joypad_axis_state(
struct android_app *android_app, struct android_app *android_app,
unsigned port, uint32_t joyaxis) unsigned port, uint32_t joyaxis)
{ {
int val = 0;
if (AXIS_NEG_GET(joyaxis) < MAX_AXIS) if (AXIS_NEG_GET(joyaxis) < MAX_AXIS)
{ {
val = android_app->analog_state[port][AXIS_NEG_GET(joyaxis)]; int val = android_app->analog_state[port][AXIS_NEG_GET(joyaxis)];
if (val > 0) if (val < 0)
val = 0; return val;
} }
else if (AXIS_POS_GET(joyaxis) < MAX_AXIS) else if (AXIS_POS_GET(joyaxis) < MAX_AXIS)
{ {
val = android_app->analog_state[port][AXIS_POS_GET(joyaxis)]; int val = android_app->analog_state[port][AXIS_POS_GET(joyaxis)];
if (val < 0) if (val > 0)
val = 0; return val;
} }
return val; return 0;
} }
static int16_t android_joypad_axis(unsigned port, uint32_t joyaxis) static int16_t android_joypad_axis(unsigned port, uint32_t joyaxis)

View File

@ -72,51 +72,52 @@ static void ctr_joypad_get_buttons(unsigned port_num, input_bits_t *state)
BIT256_CLEAR_ALL_PTR(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 val = 0;
int axis = -1; int axis = -1;
bool is_neg = false; bool is_neg = false;
bool is_pos = false; bool is_pos = false;
if (port_num >= DEFAULT_MAX_PADS)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4) if (AXIS_NEG_GET(joyaxis) < 4)
{ {
axis = AXIS_NEG_GET(joyaxis); axis = AXIS_NEG_GET(joyaxis);
is_neg = true; is_neg = true;
} }
else if (AXIS_POS_GET(joyaxis) < 4) else if (AXIS_POS_GET(joyaxis) < 4)
{ {
axis = AXIS_POS_GET(joyaxis); axis = AXIS_POS_GET(joyaxis);
is_pos = true; is_pos = true;
} }
else
return 0;
switch (axis) switch (axis)
{ {
case 0: case 0:
val = analog_state[port_num][0][0];
break;
case 1: case 1:
val = analog_state[port_num][0][1]; val = analog_state[port_num][0][axis];
break; break;
case 2: case 2:
val = analog_state[port_num][1][0];
break;
case 3: case 3:
val = analog_state[port_num][1][1]; val = analog_state[port_num][1][axis - 2];
break; break;
} }
if (is_neg && val > 0) if (is_neg && val > 0)
val = 0; return 0;
else if (is_pos && val < 0) else if (is_pos && val < 0)
val = 0; return 0;
return val; 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( static int16_t ctr_joypad_state(
rarch_joypad_info_t *joypad_info, rarch_joypad_info_t *joypad_info,
const struct retro_keybind *binds, const struct retro_keybind *binds,
@ -140,7 +141,7 @@ static int16_t ctr_joypad_state(
(pad_state & (1 << (uint16_t)joykey))) (pad_state & (1 << (uint16_t)joykey)))
ret |= ( 1 << i); ret |= ( 1 << i);
else if (joyaxis != AXIS_NONE && 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) / 0x8000) > joypad_info->axis_threshold)
ret |= (1 << i); ret |= (1 << i);
} }

View File

@ -522,14 +522,16 @@ static int16_t dinput_joypad_axis_state(
if (AXIS_NEG_GET(joyaxis) <= 7) if (AXIS_NEG_GET(joyaxis) <= 7)
{ {
axis = AXIS_NEG_GET(joyaxis); axis = AXIS_NEG_GET(joyaxis);
is_neg = true; is_neg = true;
} }
else if (AXIS_POS_GET(joyaxis) <= 7) else if (AXIS_POS_GET(joyaxis) <= 7)
{ {
axis = AXIS_POS_GET(joyaxis); axis = AXIS_POS_GET(joyaxis);
is_pos = true; is_pos = true;
} }
else
return 0;
switch (axis) switch (axis)
{ {
@ -552,10 +554,8 @@ static int16_t dinput_joypad_axis_state(
val = pad->joy_state.lRz; val = pad->joy_state.lRz;
break; break;
case 6: case 6:
val = pad->joy_state.rglSlider[0];
break;
case 7: case 7:
val = pad->joy_state.rglSlider[1]; val = pad->joy_state.rglSlider[axis - 6];
break; break;
} }
@ -563,7 +563,6 @@ static int16_t dinput_joypad_axis_state(
return 0; return 0;
else if (is_pos && val < 0) else if (is_pos && val < 0)
return 0; return 0;
return val; return val;
} }

View File

@ -329,22 +329,20 @@ static int16_t linuxraw_joypad_axis_state(
const struct linuxraw_joypad *pad, const struct linuxraw_joypad *pad,
unsigned port, uint32_t joyaxis) unsigned port, uint32_t joyaxis)
{ {
int16_t val = 0;
if (AXIS_NEG_GET(joyaxis) < NUM_AXES) 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]. */ /* 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) else if (AXIS_POS_GET(joyaxis) < NUM_AXES)
{ {
val = pad->axes[AXIS_POS_GET(joyaxis)]; int16_t val = pad->axes[AXIS_POS_GET(joyaxis)];
if (val < 0) if (val > 0)
val = 0; return val;
} }
return 0;
return val;
} }
static int16_t linuxraw_joypad_axis(unsigned port, uint32_t joyaxis) static int16_t linuxraw_joypad_axis(unsigned port, uint32_t joyaxis)

View File

@ -370,28 +370,15 @@ static int16_t apple_gamecontroller_joypad_axis(
axis = AXIS_POS_GET(joyaxis); axis = AXIS_POS_GET(joyaxis);
is_pos = true; is_pos = true;
} }
else
return 0;
switch (axis) if (axis >= 0 && axis < 4)
{ val = mfi_axes[port][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 (is_neg && val > 0) if (is_neg && val > 0)
val = 0; return 0;
else if (is_pos && val < 0) else if (is_pos && val < 0)
val = 0; return 0;
return val; return val;
} }

View File

@ -100,36 +100,33 @@ static int16_t ps2_joypad_axis_state(unsigned port_num, uint32_t joyaxis)
if (AXIS_NEG_GET(joyaxis) < 4) if (AXIS_NEG_GET(joyaxis) < 4)
{ {
axis = AXIS_NEG_GET(joyaxis); axis = AXIS_NEG_GET(joyaxis);
is_neg = true; is_neg = true;
} }
else if (AXIS_POS_GET(joyaxis) < 4) else if (AXIS_POS_GET(joyaxis) < 4)
{ {
axis = AXIS_POS_GET(joyaxis); axis = AXIS_POS_GET(joyaxis);
is_pos = true; is_pos = true;
} }
else
return 0;
switch (axis) switch (axis)
{ {
case 0: case 0:
val = analog_state[port_num][0][0];
break;
case 1: case 1:
val = analog_state[port_num][0][1]; val = analog_state[port_num][0][axis];
break; break;
case 2: case 2:
val = analog_state[port_num][1][0];
break;
case 3: case 3:
val = analog_state[port_num][1][1]; val = analog_state[port_num][1][axis-2];
break; break;
} }
if (is_neg && val > 0) if (is_neg && val > 0)
val = 0; return 0;
else if (is_pos && val < 0) else if (is_pos && val < 0)
val = 0; return 0;
return val; return val;
} }

View File

@ -87,36 +87,33 @@ static int16_t ps3_joypad_axis_state(unsigned port, uint32_t joyaxis)
if (AXIS_NEG_GET(joyaxis) < 4) if (AXIS_NEG_GET(joyaxis) < 4)
{ {
axis = AXIS_NEG_GET(joyaxis); axis = AXIS_NEG_GET(joyaxis);
is_neg = true; is_neg = true;
} }
else if (AXIS_POS_GET(joyaxis) < 4) else if (AXIS_POS_GET(joyaxis) < 4)
{ {
axis = AXIS_POS_GET(joyaxis); axis = AXIS_POS_GET(joyaxis);
is_pos = true; is_pos = true;
} }
else
return 0;
switch (axis) switch (axis)
{ {
case 0: case 0:
val = analog_state[port][0][0];
break;
case 1: case 1:
val = analog_state[port][0][1]; val = analog_state[port][0][axis];
break; break;
case 2: case 2:
val = analog_state[port][1][0];
break;
case 3: case 3:
val = analog_state[port][1][1]; val = analog_state[port][1][axis-2];
break; break;
} }
if (is_neg && val > 0) if (is_neg && val > 0)
val = 0; return 0;
else if (is_pos && val < 0) else if (is_pos && val < 0)
val = 0; return 0;
return val; return val;
} }

View File

@ -140,36 +140,33 @@ static int16_t psp_joypad_axis_state(unsigned port, uint32_t joyaxis)
if (AXIS_NEG_GET(joyaxis) < 4) if (AXIS_NEG_GET(joyaxis) < 4)
{ {
axis = AXIS_NEG_GET(joyaxis); axis = AXIS_NEG_GET(joyaxis);
is_neg = true; is_neg = true;
} }
else if (AXIS_POS_GET(joyaxis) < 4) else if (AXIS_POS_GET(joyaxis) < 4)
{ {
axis = AXIS_POS_GET(joyaxis); axis = AXIS_POS_GET(joyaxis);
is_pos = true; is_pos = true;
} }
else
return 0;
switch (axis) switch (axis)
{ {
case 0: case 0:
val = analog_state[port][0][0];
break;
case 1: case 1:
val = analog_state[port][0][1]; val = analog_state[port][0][axis];
break; break;
case 2: case 2:
val = analog_state[port][1][0];
break;
case 3: case 3:
val = analog_state[port][1][1]; val = analog_state[port][1][axis - 2];
break; break;
} }
if (is_neg && val > 0) if (is_neg && val > 0)
val = 0; return 0;
else if (is_pos && val < 0) else if (is_pos && val < 0)
val = 0; return 0;
return val; return val;
} }

View File

@ -66,38 +66,34 @@ static int16_t qnx_joypad_axis_state(
int axis = -1; int axis = -1;
bool is_neg = false; bool is_neg = false;
bool is_pos = false; bool is_pos = false;
if (AXIS_NEG_GET(joyaxis) < 4) if (AXIS_NEG_GET(joyaxis) < 4)
{ {
axis = AXIS_NEG_GET(joyaxis); axis = AXIS_NEG_GET(joyaxis);
is_neg = true; is_neg = true;
} }
else if (AXIS_POS_GET(joyaxis) < 4) else if (AXIS_POS_GET(joyaxis) < 4)
{ {
axis = AXIS_POS_GET(joyaxis); axis = AXIS_POS_GET(joyaxis);
is_pos = true; is_pos = true;
} }
switch (axis) switch (axis)
{ {
case 0: case 0:
val = controller->analog0[0];
break;
case 1: case 1:
val = controller->analog0[1]; val = controller->analog0[axis];
break; break;
case 2: case 2:
val = controller->analog1[0];
break;
case 3: case 3:
val = controller->analog1[1]; val = controller->analog1[axis-2];
break; break;
} }
if (is_neg && val > 0) if (is_neg && val > 0)
val = 0; return 0;
else if (is_pos && val < 0) else if (is_pos && val < 0)
val = 0; return 0;
return val; return val;
} }

View File

@ -138,21 +138,21 @@ static int16_t rwebpad_joypad_axis_state(
EmscriptenGamepadEvent *gamepad_state, EmscriptenGamepadEvent *gamepad_state,
unsigned port, uint32_t joyaxis) unsigned port, uint32_t joyaxis)
{ {
int16_t val = 0;
if (AXIS_NEG_GET(joyaxis) < gamepad_state->numAxes) if (AXIS_NEG_GET(joyaxis) < gamepad_state->numAxes)
{ {
val = CLAMPDOUBLE(gamepad_state->axis[AXIS_NEG_GET(joyaxis)]) * 0x7FFF; int16_t val = CLAMPDOUBLE(
if (val > 0) gamepad_state->axis[AXIS_NEG_GET(joyaxis)]) * 0x7FFF;
val = 0; if (val < 0)
return val;
} }
else if (AXIS_POS_GET(joyaxis) < gamepad_state->numAxes) else if (AXIS_POS_GET(joyaxis) < gamepad_state->numAxes)
{ {
val = CLAMPDOUBLE(gamepad_state->axis[AXIS_POS_GET(joyaxis)]) * 0x7FFF; int16_t val = CLAMPDOUBLE(
if (val < 0) gamepad_state->axis[AXIS_POS_GET(joyaxis)]) * 0x7FFF;
val = 0; if (val > 0)
return val;
} }
return 0;
return val;
} }
static int16_t rwebpad_joypad_axis(unsigned port, uint32_t joyaxis) static int16_t rwebpad_joypad_axis(unsigned port, uint32_t joyaxis)

View File

@ -299,12 +299,12 @@ static int16_t sdl_joypad_button_state(
sdl_joypad_t *pad, sdl_joypad_t *pad,
unsigned port, uint16_t joykey) unsigned port, uint16_t joykey)
{ {
unsigned hat_dir = GET_HAT_DIR(joykey); unsigned hat_dir = GET_HAT_DIR(joykey);
/* Check hat. */ /* Check hat. */
if (hat_dir) if (hat_dir)
{ {
uint8_t dir; uint8_t dir;
uint16_t hat = GET_HAT(joykey); uint16_t hat = GET_HAT(joykey);
if (hat >= pad->num_hats) if (hat >= pad->num_hats)
return 0; return 0;
@ -345,26 +345,23 @@ static int16_t sdl_joypad_axis_state(
sdl_joypad_t *pad, sdl_joypad_t *pad,
unsigned port, uint32_t joyaxis) unsigned port, uint32_t joyaxis)
{ {
int16_t val = 0;
if (AXIS_NEG_GET(joyaxis) < pad->num_axes) if (AXIS_NEG_GET(joyaxis) < pad->num_axes)
{ {
val = sdl_pad_get_axis(pad, AXIS_NEG_GET(joyaxis)); int16_t val = sdl_pad_get_axis(pad, AXIS_NEG_GET(joyaxis));
if (val > 0)
val = 0;
/* -0x8000 can cause trouble if we later abs() it. */ /* -0x8000 can cause trouble if we later abs() it. */
else if (val < -0x7fff) if (val < -0x7fff)
val = -0x7fff; return -0x7fff;
else if (val < 0)
return val;
} }
else if (AXIS_POS_GET(joyaxis) < pad->num_axes) else if (AXIS_POS_GET(joyaxis) < pad->num_axes)
{ {
val = sdl_pad_get_axis(pad, AXIS_POS_GET(joyaxis)); int16_t val = sdl_pad_get_axis(pad, AXIS_POS_GET(joyaxis));
if (val > 0)
if (val < 0) return val;
val = 0;
} }
return val; return 0;
} }
static int16_t sdl_joypad_axis(unsigned port, uint32_t joyaxis) static int16_t sdl_joypad_axis(unsigned port, uint32_t joyaxis)

View File

@ -113,36 +113,31 @@ static int16_t switch_joypad_axis_state(unsigned port, uint32_t joyaxis)
if (AXIS_NEG_GET(joyaxis) < 4) if (AXIS_NEG_GET(joyaxis) < 4)
{ {
axis = AXIS_NEG_GET(joyaxis); axis = AXIS_NEG_GET(joyaxis);
is_neg = true; is_neg = true;
} }
else if (AXIS_POS_GET(joyaxis) < 4) else if (AXIS_POS_GET(joyaxis) < 4)
{ {
axis = AXIS_POS_GET(joyaxis); axis = AXIS_POS_GET(joyaxis);
is_pos = true; is_pos = true;
} }
switch(axis) switch(axis)
{ {
case 0: case 0:
val = analog_state[port][0][0];
break;
case 1: case 1:
val = analog_state[port][0][1]; val = analog_state[port][0][axis];
break; break;
case 2: case 2:
val = analog_state[port][1][0];
break;
case 3: case 3:
val = analog_state[port][1][1]; val = analog_state[port][1][axis - 2];
break; break;
} }
if (is_neg && val > 0) if (is_neg && val > 0)
val = 0; return 0;
else if (is_pos && val < 0) else if (is_pos && val < 0)
val = 0; return 0;
return val; return val;
} }

View File

@ -648,33 +648,31 @@ static int16_t udev_joypad_axis_state(
const struct udev_joypad *pad, const struct udev_joypad *pad,
unsigned port, uint32_t joyaxis) unsigned port, uint32_t joyaxis)
{ {
int16_t val = 0;
if (AXIS_NEG_GET(joyaxis) < NUM_AXES) 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 */ /* Deal with analog triggers that report -32767 to 32767 */
if (( if ((
(AXIS_NEG_GET(joyaxis) == ABS_Z) || (AXIS_NEG_GET(joyaxis) == ABS_Z) ||
(AXIS_NEG_GET(joyaxis) == ABS_RZ)) (AXIS_NEG_GET(joyaxis) == ABS_RZ))
&& (pad->neg_trigger[AXIS_NEG_GET(joyaxis)])) && (pad->neg_trigger[AXIS_NEG_GET(joyaxis)]))
val = (val + 0x7fff) / 2; val = (val + 0x7fff) / 2;
if (val > 0) if (val < 0)
val = 0; return val;
} }
else if (AXIS_POS_GET(joyaxis) < NUM_AXES) 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 */ /* Deal with analog triggers that report -32767 to 32767 */
if (( if ((
(AXIS_POS_GET(joyaxis) == ABS_Z) || (AXIS_POS_GET(joyaxis) == ABS_Z) ||
(AXIS_POS_GET(joyaxis) == ABS_RZ)) (AXIS_POS_GET(joyaxis) == ABS_RZ))
&& (pad->neg_trigger[AXIS_POS_GET(joyaxis)])) && (pad->neg_trigger[AXIS_POS_GET(joyaxis)]))
val = (val + 0x7fff) / 2; val = (val + 0x7fff) / 2;
if (val < 0) if (val > 0)
val = 0; return val;
} }
return 0;
return val;
} }
static int16_t udev_joypad_axis(unsigned port, uint32_t joyaxis) static int16_t udev_joypad_axis(unsigned port, uint32_t joyaxis)

View File

@ -168,17 +168,19 @@ static int16_t xdk_joypad_axis_state(XINPUT_GAMEPAD *pad,
int axis = -1; int axis = -1;
bool is_neg = false; bool is_neg = false;
bool is_pos = false; bool is_pos = false;
if (AXIS_NEG_GET(joyaxis) <= 3) if (AXIS_NEG_GET(joyaxis) <= 3)
{ {
axis = AXIS_NEG_GET(joyaxis); axis = AXIS_NEG_GET(joyaxis);
is_neg = true; is_neg = true;
} }
else if (AXIS_POS_GET(joyaxis) <= 5) else if (AXIS_POS_GET(joyaxis) <= 5)
{ {
axis = AXIS_POS_GET(joyaxis); axis = AXIS_POS_GET(joyaxis);
is_pos = true; is_pos = true;
} }
else
return 0;
switch (axis) switch (axis)
{ {
@ -207,14 +209,12 @@ static int16_t xdk_joypad_axis_state(XINPUT_GAMEPAD *pad,
} }
if (is_neg && val > 0) if (is_neg && val > 0)
val = 0; return 0;
else if (is_pos && val < 0) else if (is_pos && val < 0)
val = 0; return 0;
/* Clamp to avoid warnings */ /* Clamp to avoid warnings */
if (val == -32768) else if (val == -32768)
val = -32767; return -32767;
return val; return val;
} }

View File

@ -473,14 +473,16 @@ static int16_t xinput_joypad_axis_state(
/* triggers (axes 4,5) cannot be negative */ /* triggers (axes 4,5) cannot be negative */
if (AXIS_NEG_GET(joyaxis) <= 3) if (AXIS_NEG_GET(joyaxis) <= 3)
{ {
axis = AXIS_NEG_GET(joyaxis); axis = AXIS_NEG_GET(joyaxis);
is_neg = true; is_neg = true;
} }
else if (AXIS_POS_GET(joyaxis) <= 5) else if (AXIS_POS_GET(joyaxis) <= 5)
{ {
axis = AXIS_POS_GET(joyaxis); axis = AXIS_POS_GET(joyaxis);
is_pos = true; is_pos = true;
} }
else
return 0;
switch (axis) switch (axis)
{ {
@ -505,14 +507,12 @@ static int16_t xinput_joypad_axis_state(
} }
if (is_neg && val > 0) if (is_neg && val > 0)
val = 0; return 0;
else if (is_pos && val < 0) else if (is_pos && val < 0)
val = 0; return 0;
/* Clamp to avoid overflow error. */ /* Clamp to avoid overflow error. */
if (val == -32768) else if (val == -32768)
val = -32767; return -32767;
return val; return val;
} }