From a55bbfc04a1d8ba4691230ef9cb8fc11f1b7d6b4 Mon Sep 17 00:00:00 2001 From: aliaspider Date: Thu, 1 Oct 2015 23:56:22 +0100 Subject: [PATCH] (CTR/3DS) input: fix analog joypad polling. --- input/drivers_joypad/ctr_joypad.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/input/drivers_joypad/ctr_joypad.c b/input/drivers_joypad/ctr_joypad.c index f2cdf58cd5..9d29e9209e 100644 --- a/input/drivers_joypad/ctr_joypad.c +++ b/input/drivers_joypad/ctr_joypad.c @@ -119,9 +119,14 @@ static int16_t ctr_joypad_axis(unsigned port_num, uint32_t joyaxis) return val; } +static int16_t ctr_joypad_fix_range(int16_t val) +{ + val = (val > 127)? 127: (val < -127)? -127: val; + return val * 256; +} + static void ctr_joypad_poll(void) { - unsigned i, j; uint32_t state_tmp; circlePosition state_tmp_left_analog, state_tmp_right_analog; touchPosition state_tmp_touch; @@ -133,8 +138,6 @@ static void ctr_joypad_poll(void) irrstCstickRead(&state_tmp_right_analog); hidTouchRead(&state_tmp_touch); - analog_state[0][0][0] = analog_state[0][0][1] = - analog_state[0][1][0] = analog_state[0][1][1] = 0; pad_state = 0; pad_state |= (state_tmp & KEY_DLEFT) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_LEFT) : 0; pad_state |= (state_tmp & KEY_DDOWN) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN) : 0; @@ -151,15 +154,10 @@ static void ctr_joypad_poll(void) pad_state |= (state_tmp & KEY_ZR) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R2) : 0; pad_state |= (state_tmp & KEY_ZL) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L2) : 0; - analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = (state_tmp_left_analog.dx * 200); - analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = -(state_tmp_left_analog.dy * 200); - analog_state[0][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_X] = (state_tmp_right_analog.dx * 200); - analog_state[0][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_Y] = -(state_tmp_right_analog.dy * 200); - - for (i = 0; i < 2; i++) - for (j = 0; j < 2; j++) - if (analog_state[0][i][j] == -0x8000) - analog_state[0][i][j] = -0x7fff; + analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = ctr_joypad_fix_range(state_tmp_left_analog.dx); + analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = -ctr_joypad_fix_range(state_tmp_left_analog.dy); + analog_state[0][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_X] = ctr_joypad_fix_range(state_tmp_right_analog.dx); + analog_state[0][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_Y] = -ctr_joypad_fix_range(state_tmp_right_analog.dy); BIT64_CLEAR(lifecycle_state, RARCH_MENU_TOGGLE);