(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,
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)

View File

@ -72,16 +72,13 @@ 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);
@ -92,31 +89,35 @@ static int16_t ctr_joypad_axis(unsigned port_num, uint32_t 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);
}

View File

@ -530,6 +530,8 @@ static int16_t dinput_joypad_axis_state(
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;
}

View File

@ -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 0;
}
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);
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;
}

View File

@ -108,28 +108,25 @@ static int16_t ps2_joypad_axis_state(unsigned port_num, uint32_t 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;
}

View File

@ -95,28 +95,25 @@ static int16_t ps3_joypad_axis_state(unsigned port, uint32_t 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;
}

View File

@ -148,28 +148,25 @@ static int16_t psp_joypad_axis_state(unsigned port, uint32_t 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;
}

View File

@ -66,6 +66,7 @@ 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);
@ -80,24 +81,19 @@ static int16_t qnx_joypad_axis_state(
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;
}

View File

@ -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 0;
}
static int16_t rwebpad_joypad_axis(unsigned port, uint32_t joyaxis)

View File

@ -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)

View File

@ -125,24 +125,19 @@ static int16_t switch_joypad_axis_state(unsigned port, uint32_t joyaxis)
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;
}

View File

@ -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 0;
}
static int16_t udev_joypad_axis(unsigned port, uint32_t joyaxis)

View File

@ -168,6 +168,7 @@ 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);
@ -178,7 +179,8 @@ static int16_t xdk_joypad_axis_state(XINPUT_GAMEPAD *pad,
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;
}

View File

@ -481,6 +481,8 @@ static int16_t xinput_joypad_axis_state(
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;
}