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

View File

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

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

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

View File

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

View File

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

View File

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

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 val;
return 0;
}
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,
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)

View File

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

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 val;
return 0;
}
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;
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;
}

View File

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