(Android) Refactor axis functions

This commit is contained in:
twinaphex 2020-07-18 22:38:23 +02:00
parent f8d6cea02a
commit cb5b22b6ac
24 changed files with 88 additions and 115 deletions

View File

@ -1315,8 +1315,6 @@ static void android_input_poll_memcpy(android_input_t *android)
static bool android_input_key_pressed(android_input_t *android, int key)
{
uint64_t joykey;
uint32_t joyaxis;
rarch_joypad_info_t joypad_info;
joypad_info.joy_idx = 0;
joypad_info.auto_binds = input_autoconf_binds[0];
@ -1327,21 +1325,12 @@ static bool android_input_key_pressed(android_input_t *android, int key)
&& android_keyboard_port_input_pressed(input_config_binds[0],
key))
return true;
joykey =
(input_config_binds[0][key].joykey != NO_BTN)
? input_config_binds[0][key].joykey
: joypad_info.auto_binds[key].joykey;
joyaxis =
(input_config_binds[0][key].joyaxis != AXIS_NONE)
? input_config_binds[0][key].joyaxis
: joypad_info.auto_binds[key].joyaxis;
if ((uint16_t)joykey != NO_BTN && android->joypad->button(joypad_info.joy_idx, (uint16_t)joykey))
return true;
if (((float)abs(android->joypad->axis(joypad_info.joy_idx, joyaxis)) / 0x8000) > joypad_info.axis_threshold)
return true;
return false;
return button_is_pressed(
android->joypad,
&joypad_info,
&input_config_binds[0],
joypad_info.joy_idx,
key);
}
/* Handle all events. If our activity is in pause state,

View File

@ -1399,9 +1399,6 @@ static int16_t btstack_hid_joypad_axis(void *data, unsigned port, uint32_t joyax
btstack_hid_t *hid = (btstack_hid_t*)data;
int16_t val = 0;
if (joyaxis == AXIS_NONE)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4)
{
val += pad_connection_get_axis(&hid->slots[port], port, AXIS_NEG_GET(joyaxis));

View File

@ -218,9 +218,6 @@ static int16_t iohidmanager_hid_joypad_axis(void *data,
iohidmanager_hid_t *hid = (iohidmanager_hid_t*)data;
int16_t val = 0;
if (joyaxis == AXIS_NONE)
return 0;
if (AXIS_NEG_GET(joyaxis) < 11)
{
val += hid->axes[port][AXIS_NEG_GET(joyaxis)];

View File

@ -493,9 +493,6 @@ static int16_t libusb_hid_joypad_axis(void *data,
libusb_hid_t *hid = (libusb_hid_t*)data;
int16_t val = 0;
if (joyaxis == AXIS_NONE)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4)
{
val = pad_connection_get_axis(&hid->slots[port],

View File

@ -581,9 +581,6 @@ static int16_t wiiusb_hid_joypad_axis(void *data,
int16_t val = 0;
wiiusb_hid_t *hid = (wiiusb_hid_t*)data;
if (joyaxis == AXIS_NONE)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4)
{
val = pad_connection_get_axis(&hid->connections[port],

View File

@ -75,7 +75,7 @@ static int16_t android_joypad_button(unsigned port, uint16_t joykey)
}
else if (i < LAST_KEYCODE)
if (BIT_GET(buf, i))
ret |= (1 << i):
ret |= (1 << i);
}
return ret;
@ -86,9 +86,6 @@ static int16_t android_joypad_axis(unsigned port, uint32_t joyaxis)
int val = 0;
struct android_app *android_app = (struct android_app*)g_android;
if (joyaxis == AXIS_NONE)
return 0;
if (AXIS_NEG_GET(joyaxis) < MAX_AXIS)
{
val = android_app->analog_state[port][AXIS_NEG_GET(joyaxis)];

View File

@ -88,7 +88,7 @@ static int16_t ctr_joypad_axis(unsigned port_num, uint32_t joyaxis)
bool is_neg = false;
bool is_pos = false;
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
if (port_num >= DEFAULT_MAX_PADS)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4)

View File

@ -531,16 +531,12 @@ static int16_t dinput_joypad_button(unsigned port_num, uint16_t joykey)
static int16_t dinput_joypad_axis(unsigned port_num, uint32_t joyaxis)
{
const struct dinput_joypad_data *pad = NULL;
int val = 0;
int axis = -1;
bool is_neg = false;
bool is_pos = false;
const struct dinput_joypad_data *pad = &g_pads[port_num];
if (joyaxis == AXIS_NONE)
return 0;
pad = &g_pads[port_num];
if (!pad->joypad)
return 0;

View File

@ -188,7 +188,7 @@ static int16_t dos_joypad_button(unsigned port_num, uint16_t joykey)
break;
case RETRO_DEVICE_ID_JOYPAD_X:
if (buf[DOSKEY_s])
ret |= (1 << i):
ret |= (1 << i);
break;
case RETRO_DEVICE_ID_JOYPAD_Y:
if (buf[DOSKEY_a])
@ -204,7 +204,7 @@ static int16_t dos_joypad_button(unsigned port_num, uint16_t joykey)
break;
case RETRO_DEVICE_ID_JOYPAD_UP:
if (buf[DOSKEY_UP])
ret |= (1 << i):
ret |= (1 << i);
break;
case RETRO_DEVICE_ID_JOYPAD_DOWN:
if (buf[DOSKEY_DOWN])

View File

@ -275,7 +275,7 @@ static int16_t gx_joypad_axis(unsigned port, uint32_t joyaxis)
bool is_neg = false;
bool is_pos = false;
if (joyaxis == AXIS_NONE || port >= DEFAULT_MAX_PADS)
if (port >= DEFAULT_MAX_PADS)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4)

View File

@ -335,12 +335,8 @@ static void linuxraw_joypad_get_buttons(unsigned port, input_bits_t *state)
static int16_t linuxraw_joypad_axis(unsigned port, uint32_t joyaxis)
{
int16_t val = 0;
const struct linuxraw_joypad *pad = NULL;
if (joyaxis == AXIS_NONE)
return 0;
pad = (const struct linuxraw_joypad*)&linuxraw_pads[port];
const struct linuxraw_joypad *pad = (const struct linuxraw_joypad*)
&linuxraw_pads[port];
if (AXIS_NEG_GET(joyaxis) < NUM_AXES)
{

View File

@ -361,47 +361,45 @@ static void apple_gamecontroller_joypad_get_buttons(unsigned port,
BITS_COPY16_PTR(state, mfi_buttons[port]);
}
static int16_t apple_gamecontroller_joypad_axis(unsigned port, uint32_t joyaxis)
static int16_t apple_gamecontroller_joypad_axis(
unsigned port, uint32_t joyaxis)
{
int16_t val = 0;
int16_t val = 0;
int16_t axis = -1;
bool is_neg = false;
bool is_pos = false;
if (joyaxis == AXIS_NONE)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4)
{
axis = AXIS_NEG_GET(joyaxis);
is_neg = true;
axis = AXIS_NEG_GET(joyaxis);
is_neg = true;
}
else if(AXIS_POS_GET(joyaxis) < 4)
{
axis = AXIS_POS_GET(joyaxis);
is_pos = true;
axis = AXIS_POS_GET(joyaxis);
is_pos = true;
}
switch (axis)
{
case 0:
val = mfi_axes[port][0];
val = mfi_axes[port][0];
break;
case 1:
val = mfi_axes[port][1];
val = mfi_axes[port][1];
break;
case 2:
val = mfi_axes[port][2];
val = mfi_axes[port][2];
break;
case 3:
val = mfi_axes[port][3];
val = mfi_axes[port][3];
break;
}
if (is_neg && val > 0)
val = 0;
val = 0;
else if (is_pos && val < 0)
val = 0;
val = 0;
return val;
}

View File

@ -111,7 +111,7 @@ static int16_t ps2_joypad_axis(unsigned port_num, uint32_t joyaxis)
bool is_neg = false;
bool is_pos = false;
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
if (port_num >= DEFAULT_MAX_PADS)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4)

View File

@ -93,7 +93,7 @@ static int16_t ps3_joypad_axis(unsigned port_num, uint32_t joyaxis)
bool is_neg = false;
bool is_pos = false;
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
if (port_num >= DEFAULT_MAX_PADS)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4)

View File

@ -151,7 +151,7 @@ static int16_t psp_joypad_axis(unsigned port_num, uint32_t joyaxis)
bool is_neg = false;
bool is_pos = false;
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
if (port_num >= DEFAULT_MAX_PADS)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4)

View File

@ -74,7 +74,7 @@ static int16_t qnx_joypad_axis(unsigned port_num, uint32_t joyaxis)
bool is_pos = false;
qnx_input_t *qnx = (qnx_input_t*)input_driver_get_data();
if (!qnx || joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
if (!qnx || port_num >= DEFAULT_MAX_PADS)
return 0;
if (AXIS_NEG_GET(joyaxis) < 4)

View File

@ -144,13 +144,8 @@ static void rwebpad_joypad_get_buttons(unsigned port_num, input_bits_t *state)
static int16_t rwebpad_joypad_axis(unsigned port_num, uint32_t joyaxis)
{
EmscriptenGamepadEvent gamepad_state;
EMSCRIPTEN_RESULT r;
int16_t val = 0;
if (joyaxis == 0xFFFFFFFF)
return 0;
r = emscripten_get_gamepad_status(port_num, &gamepad_state);
int16_t val = 0;
EMSCRIPTEN_RESULT r = emscripten_get_gamepad_status(port_num, &gamepad_state);
if (r == EMSCRIPTEN_RESULT_SUCCESS)
{

View File

@ -353,13 +353,8 @@ static int16_t sdl_joypad_button(unsigned port, uint16_t joykey)
static int16_t sdl_joypad_axis(unsigned port, uint32_t joyaxis)
{
sdl_joypad_t *pad;
int16_t val = 0;
if (joyaxis == AXIS_NONE)
return 0;
pad = (sdl_joypad_t*)&sdl_pads[port];
sdl_joypad_t *pad = (sdl_joypad_t*)&sdl_pads[port];
if (!pad->joypad)
return false;

View File

@ -119,7 +119,7 @@ static int16_t switch_joypad_axis(unsigned port_num, uint32_t joyaxis)
#if 0
/* TODO/FIXME - implement */
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS) { }
if (port_num >= DEFAULT_MAX_PADS) { }
#endif
if (AXIS_NEG_GET(joyaxis) < 4)

View File

@ -655,11 +655,8 @@ static void udev_joypad_get_buttons(unsigned port, input_bits_t *state)
static int16_t udev_joypad_axis(unsigned port, uint32_t joyaxis)
{
int16_t val = 0;
const struct udev_joypad *pad;
if (joyaxis == AXIS_NONE)
return 0;
pad = (const struct udev_joypad*)&udev_pads[port];
const struct udev_joypad *pad = (const struct udev_joypad*)
&udev_pads[port];
if (AXIS_NEG_GET(joyaxis) < NUM_AXES)
{

View File

@ -325,7 +325,7 @@ static int16_t wpad_axis(unsigned pad, uint32_t axis)
axis_data data;
VPADChan channel;
if (!wpad_query_pad(pad) || axis == AXIS_NONE)
if (!wpad_query_pad(pad))
return 0;
channel = to_gamepad_channel(pad);

View File

@ -203,7 +203,7 @@ static int16_t xdk_joypad_axis(unsigned port_num, uint32_t joyaxis)
bool is_pos = false;
XINPUT_GAMEPAD *pad = NULL;
if (joyaxis == AXIS_NONE || port_num >= DEFAULT_MAX_PADS)
if (port_num >= DEFAULT_MAX_PADS)
return 0;
if (AXIS_NEG_GET(joyaxis) <= 3)

View File

@ -479,17 +479,12 @@ static int16_t xinput_joypad_button(unsigned port_num, uint16_t joykey)
static int16_t xinput_joypad_axis (unsigned port_num, uint32_t joyaxis)
{
int xuser;
int16_t val = 0;
int axis = -1;
bool is_neg = false;
bool is_pos = false;
XINPUT_GAMEPAD* pad = NULL;
if (joyaxis == AXIS_NONE)
return 0;
xuser = pad_index_to_xuser_index(port_num);
int xuser = pad_index_to_xuser_index(port_num);
#ifdef HAVE_DINPUT
if (xuser == -1)

View File

@ -3539,17 +3539,26 @@ static void menu_input_key_bind_poll_bind_get_rested_axes(
/* poll only the relevant port */
for (a = 0; a < MENU_MAX_AXES; a++)
state->axis_state[port].rested_axes[a] =
joypad->axis(port, AXIS_POS(a)) +
joypad->axis(port, AXIS_NEG(a));
{
if (AXIS_POS(a) != AXIS_NONE)
state->axis_state[port].rested_axes[a] =
joypad->axis(port, AXIS_POS(a));
if (AXIS_NEG(a) != AXIS_NONE)
state->axis_state[port].rested_axes[a] +=
joypad->axis(port, AXIS_NEG(a));
}
if (sec_joypad)
{
/* poll only the relevant port */
for (a = 0; a < MENU_MAX_AXES; a++)
state->axis_state[port].rested_axes[a] =
sec_joypad->axis(port, AXIS_POS(a)) +
sec_joypad->axis(port, AXIS_NEG(a));
{
if (AXIS_POS(a) != AXIS_NONE)
state->axis_state[port].rested_axes[a] = sec_joypad->axis(port, AXIS_POS(a));
if (AXIS_NEG(a) != AXIS_NONE)
state->axis_state[port].rested_axes[a] += sec_joypad->axis(port, AXIS_NEG(a));
}
}
}
@ -3571,9 +3580,13 @@ static void menu_input_key_bind_poll_bind_state_internal(
state->state[port].buttons[b] = joypad->button(port, b);
for (a = 0; a < MENU_MAX_AXES; a++)
state->state[port].axes[a] =
joypad->axis(port, AXIS_POS(a)) +
joypad->axis(port, AXIS_NEG(a));
{
if (AXIS_POS(a) != AXIS_NONE)
state->state[port].axes[a] = joypad->axis(port, AXIS_POS(a));
if (AXIS_NEG(a) != AXIS_NONE)
state->state[port].axes[a] += joypad->axis(port, AXIS_NEG(a));
}
for (h = 0; h < MENU_MAX_HATS; h++)
{
@ -24111,7 +24124,7 @@ static int16_t input_joypad_axis(
settings_t *settings = p_rarch->configuration_settings;
float input_analog_deadzone = settings->floats.input_analog_deadzone;
float input_analog_sensitivity = settings->floats.input_analog_sensitivity;
int16_t val = drv->axis(port, joyaxis);
int16_t val = (joyaxis != AXIS_NONE) ? drv->axis(port, joyaxis) : 0;
if (input_analog_deadzone)
{
@ -26117,8 +26130,9 @@ int16_t button_is_pressed(
if ((uint16_t)joykey != NO_BTN && joypad->button(
joypad_info->joy_idx, (uint16_t)joykey))
return 1;
if (((float)abs(joypad->axis(joypad_info->joy_idx, joyaxis))
/ 0x8000) > joypad_info->axis_threshold)
if (joyaxis != AXIS_NONE &&
((float)abs(joypad->axis(joypad_info->joy_idx, joyaxis))
/ 0x8000) > joypad_info->axis_threshold)
return 1;
return 0;
}
@ -26165,8 +26179,13 @@ static int16_t input_joypad_analog_button(
/* Analog button. */
if (input_analog_deadzone)
normal_mag = fabs((1.0f / 0x7fff) * drv->axis(
joypad_info->joy_idx, axis));
{
int16_t mult = 0;
if (axis != AXIS_NONE)
mult = drv->axis(
joypad_info->joy_idx, axis);
normal_mag = fabs((1.0f / 0x7fff) * mult);
}
res = abs(input_joypad_axis(p_rarch, drv,
joypad_info->joy_idx, axis, normal_mag));
@ -26251,6 +26270,8 @@ static int16_t input_joypad_analog_axis(
* radial deadzone */
if (input_analog_deadzone)
{
float x = 0.0f;
float y = 0.0f;
uint32_t x_axis_minus = (bind_x_minus->joyaxis == AXIS_NONE)
? joypad_info->auto_binds[ident_x_minus].joyaxis
: bind_x_minus->joyaxis;
@ -26264,13 +26285,19 @@ static int16_t input_joypad_analog_axis(
? joypad_info->auto_binds[ident_y_plus].joyaxis
: bind_y_plus->joyaxis;
/* normalized magnitude for radial scaled analog deadzone */
float x = drv->axis(
joypad_info->joy_idx, x_axis_plus)
+ drv->axis(joypad_info->joy_idx, x_axis_minus);
float y = drv->axis(
joypad_info->joy_idx, y_axis_plus)
+ drv->axis(joypad_info->joy_idx, y_axis_minus);
normal_mag = (1.0f / 0x7fff) * sqrt(x * x + y * y);
if (x_axis_plus != AXIS_NONE)
x = drv->axis(
joypad_info->joy_idx, x_axis_plus);
if (x_axis_minus != AXIS_NONE)
x += drv->axis(joypad_info->joy_idx,
x_axis_minus);
if (y_axis_plus != AXIS_NONE)
y = drv->axis(
joypad_info->joy_idx, y_axis_plus);
if (y_axis_minus != AXIS_NONE)
y += drv->axis(
joypad_info->joy_idx, y_axis_minus);
normal_mag = (1.0f / 0x7fff) * sqrt(x * x + y * y);
}
pressed_minus = abs(