Turn retro_input_t into struct

This commit is contained in:
twinaphex 2016-06-25 09:04:00 +02:00
parent 5b1347a788
commit 3dff698644
4 changed files with 55 additions and 52 deletions

View File

@ -253,7 +253,7 @@ float input_sensor_get_input(unsigned port, unsigned id)
static retro_input_t input_driver_keys_pressed(void) static retro_input_t input_driver_keys_pressed(void)
{ {
unsigned key; unsigned key;
retro_input_t ret = 0; retro_input_t ret = {0};
for (key = 0; key < RARCH_BIND_LIST_END; key++) for (key = 0; key < RARCH_BIND_LIST_END; key++)
{ {
@ -287,7 +287,7 @@ static retro_input_t input_driver_keys_pressed(void)
#endif #endif
if (state) if (state)
ret |= (UINT64_C(1) << key); ret.state |= (UINT64_C(1) << key);
} }
return ret; return ret;
} }
@ -580,14 +580,14 @@ retro_input_t input_keys_pressed(void)
{ {
unsigned i, key; unsigned i, key;
const struct retro_keybind *binds[MAX_USERS]; const struct retro_keybind *binds[MAX_USERS];
retro_input_t ret = 0; retro_input_t ret = {0};
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
for (i = 0; i < MAX_USERS; i++) for (i = 0; i < MAX_USERS; i++)
binds[i] = settings->input.binds[i]; binds[i] = settings->input.binds[i];
if (!current_input || !current_input_data) if (!current_input || !current_input_data)
return 0; return ret;
input_driver_turbo_btns.count++; input_driver_turbo_btns.count++;

View File

@ -36,7 +36,10 @@
RETRO_BEGIN_DECLS RETRO_BEGIN_DECLS
typedef uint64_t retro_input_t; typedef struct retro_input
{
uint64_t state;
} retro_input_t;
enum input_device_type enum input_device_type
{ {

View File

@ -1199,31 +1199,31 @@ static unsigned menu_input_frame_build(retro_input_t trigger_input)
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
unsigned ret = MENU_ACTION_NOOP; unsigned ret = MENU_ACTION_NOOP;
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP)) if (trigger_input.state & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP))
ret = MENU_ACTION_UP; ret = MENU_ACTION_UP;
else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN)) else if (trigger_input.state & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN))
ret = MENU_ACTION_DOWN; ret = MENU_ACTION_DOWN;
else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_LEFT)) else if (trigger_input.state & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_LEFT))
ret = MENU_ACTION_LEFT; ret = MENU_ACTION_LEFT;
else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_RIGHT)) else if (trigger_input.state & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_RIGHT))
ret = MENU_ACTION_RIGHT; ret = MENU_ACTION_RIGHT;
else if (trigger_input & (UINT64_C(1) << settings->menu_scroll_up_btn)) else if (trigger_input.state & (UINT64_C(1) << settings->menu_scroll_up_btn))
ret = MENU_ACTION_SCROLL_UP; ret = MENU_ACTION_SCROLL_UP;
else if (trigger_input & (UINT64_C(1) << settings->menu_scroll_down_btn)) else if (trigger_input.state & (UINT64_C(1) << settings->menu_scroll_down_btn))
ret = MENU_ACTION_SCROLL_DOWN; ret = MENU_ACTION_SCROLL_DOWN;
else if (trigger_input & (UINT64_C(1) << settings->menu_cancel_btn)) else if (trigger_input.state & (UINT64_C(1) << settings->menu_cancel_btn))
ret = MENU_ACTION_CANCEL; ret = MENU_ACTION_CANCEL;
else if (trigger_input & (UINT64_C(1) << settings->menu_ok_btn)) else if (trigger_input.state & (UINT64_C(1) << settings->menu_ok_btn))
ret = MENU_ACTION_OK; ret = MENU_ACTION_OK;
else if (trigger_input & (UINT64_C(1) << settings->menu_search_btn)) else if (trigger_input.state & (UINT64_C(1) << settings->menu_search_btn))
ret = MENU_ACTION_SEARCH; ret = MENU_ACTION_SEARCH;
else if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y)) else if (trigger_input.state & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y))
ret = MENU_ACTION_SCAN; ret = MENU_ACTION_SCAN;
else if (trigger_input & (UINT64_C(1) << settings->menu_default_btn)) else if (trigger_input.state & (UINT64_C(1) << settings->menu_default_btn))
ret = MENU_ACTION_START; ret = MENU_ACTION_START;
else if (trigger_input & (UINT64_C(1) << settings->menu_info_btn)) else if (trigger_input.state & (UINT64_C(1) << settings->menu_info_btn))
ret = MENU_ACTION_INFO; ret = MENU_ACTION_INFO;
else if (trigger_input & (UINT64_C(1) << RARCH_MENU_TOGGLE)) else if (trigger_input.state & (UINT64_C(1) << RARCH_MENU_TOGGLE))
ret = MENU_ACTION_TOGGLE; ret = MENU_ACTION_TOGGLE;
return menu_input_frame_pointer(&ret); return menu_input_frame_pointer(&ret);
@ -1252,7 +1252,7 @@ unsigned menu_input_frame_retropad(retro_input_t input,
/* don't run anything first frame, only capture held inputs /* don't run anything first frame, only capture held inputs
* for old_input_state. */ * for old_input_state. */
if (input) if (input.state)
{ {
if (!first_held) if (!first_held)
{ {
@ -1263,19 +1263,19 @@ unsigned menu_input_frame_retropad(retro_input_t input,
if (menu_input->delay.count >= menu_input->delay.timer) if (menu_input->delay.count >= menu_input->delay.timer)
{ {
retro_input_t input_repeat = 0; retro_input_t input_repeat = {0};
BIT32_SET(input_repeat, RETRO_DEVICE_ID_JOYPAD_UP); BIT32_SET(input_repeat.state, RETRO_DEVICE_ID_JOYPAD_UP);
BIT32_SET(input_repeat, RETRO_DEVICE_ID_JOYPAD_DOWN); BIT32_SET(input_repeat.state, RETRO_DEVICE_ID_JOYPAD_DOWN);
BIT32_SET(input_repeat, RETRO_DEVICE_ID_JOYPAD_LEFT); BIT32_SET(input_repeat.state, RETRO_DEVICE_ID_JOYPAD_LEFT);
BIT32_SET(input_repeat, RETRO_DEVICE_ID_JOYPAD_RIGHT); BIT32_SET(input_repeat.state, RETRO_DEVICE_ID_JOYPAD_RIGHT);
BIT32_SET(input_repeat, RETRO_DEVICE_ID_JOYPAD_B); BIT32_SET(input_repeat.state, RETRO_DEVICE_ID_JOYPAD_B);
BIT32_SET(input_repeat, RETRO_DEVICE_ID_JOYPAD_A); BIT32_SET(input_repeat.state, RETRO_DEVICE_ID_JOYPAD_A);
BIT32_SET(input_repeat, RETRO_DEVICE_ID_JOYPAD_L); BIT32_SET(input_repeat.state, RETRO_DEVICE_ID_JOYPAD_L);
BIT32_SET(input_repeat, RETRO_DEVICE_ID_JOYPAD_R); BIT32_SET(input_repeat.state, RETRO_DEVICE_ID_JOYPAD_R);
set_scroll = true; set_scroll = true;
first_held = false; first_held = false;
trigger_input |= input & input_repeat; trigger_input.state |= input.state & input_repeat.state;
menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL, menu_navigation_ctl(MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL,
&new_scroll_accel); &new_scroll_accel);
@ -1308,7 +1308,7 @@ unsigned menu_input_frame_retropad(retro_input_t input,
static unsigned ti_char = 64; static unsigned ti_char = 64;
static bool ti_next = false; static bool ti_next = false;
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN)) if (trigger_input.state & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN))
{ {
if (ti_char > 32) if (ti_char > 32)
ti_char--; ti_char--;
@ -1318,7 +1318,7 @@ unsigned menu_input_frame_retropad(retro_input_t input,
ti_next = false; ti_next = false;
} }
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP)) if (trigger_input.state & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_UP))
{ {
if (ti_char < 125) if (ti_char < 125)
ti_char++; ti_char++;
@ -1328,13 +1328,13 @@ unsigned menu_input_frame_retropad(retro_input_t input,
ti_next = false; ti_next = false;
} }
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A)) if (trigger_input.state & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A))
{ {
ti_char = 64; ti_char = 64;
ti_next = true; ti_next = true;
} }
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_B)) if (trigger_input.state & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_B))
{ {
input_keyboard_event(true, '\x7f', '\x7f', 0, RETRO_DEVICE_KEYBOARD); input_keyboard_event(true, '\x7f', '\x7f', 0, RETRO_DEVICE_KEYBOARD);
ti_char = 64; ti_char = 64;
@ -1342,10 +1342,10 @@ unsigned menu_input_frame_retropad(retro_input_t input,
} }
/* send return key to close keyboard input window */ /* send return key to close keyboard input window */
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_START)) if (trigger_input.state & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_START))
input_keyboard_event(true, '\n', '\n', 0, RETRO_DEVICE_KEYBOARD); input_keyboard_event(true, '\n', '\n', 0, RETRO_DEVICE_KEYBOARD);
trigger_input = 0; trigger_input.state = 0;
} }
return menu_input_frame_build(trigger_input); return menu_input_frame_build(trigger_input);

View File

@ -77,12 +77,12 @@
#define DEFAULT_EXT "" #define DEFAULT_EXT ""
#endif #endif
#define runloop_cmd_triggered(cmd, id) BIT64_GET(cmd->state[2], id) #define runloop_cmd_triggered(cmd, id) BIT64_GET(cmd->state[2].state, id)
#define runloop_cmd_press(cmd, id) BIT64_GET(cmd->state[0], id) #define runloop_cmd_press(cmd, id) BIT64_GET(cmd->state[0].state, id)
#define runloop_cmd_pressed(cmd, id) BIT64_GET(cmd->state[1], id) #define runloop_cmd_pressed(cmd, id) BIT64_GET(cmd->state[1].state, id)
#ifdef HAVE_MENU #ifdef HAVE_MENU
#define runloop_cmd_menu_press(cmd) (BIT64_GET(cmd->state[2], RARCH_MENU_TOGGLE) || \ #define runloop_cmd_menu_press(cmd) (BIT64_GET(cmd->state[2].state, RARCH_MENU_TOGGLE) || \
runloop_cmd_get_state_menu_toggle_button_combo( \ runloop_cmd_get_state_menu_toggle_button_combo( \
settings, cmd->state[0], \ settings, cmd->state[0], \
cmd->state[1], cmd->state[2])) cmd->state[1], cmd->state[2]))
@ -317,19 +317,19 @@ static bool runloop_cmd_get_state_menu_toggle_button_combo(
case 0: case 0:
return false; return false;
case 1: case 1:
if (!BIT64_GET(input, RETRO_DEVICE_ID_JOYPAD_DOWN)) if (!BIT64_GET(input.state, RETRO_DEVICE_ID_JOYPAD_DOWN))
return false; return false;
if (!BIT64_GET(input, RETRO_DEVICE_ID_JOYPAD_Y)) if (!BIT64_GET(input.state, RETRO_DEVICE_ID_JOYPAD_Y))
return false; return false;
if (!BIT64_GET(input, RETRO_DEVICE_ID_JOYPAD_L)) if (!BIT64_GET(input.state, RETRO_DEVICE_ID_JOYPAD_L))
return false; return false;
if (!BIT64_GET(input, RETRO_DEVICE_ID_JOYPAD_R)) if (!BIT64_GET(input.state, RETRO_DEVICE_ID_JOYPAD_R))
return false; return false;
break; break;
case 2: case 2:
if (!BIT64_GET(input, RETRO_DEVICE_ID_JOYPAD_L3)) if (!BIT64_GET(input.state, RETRO_DEVICE_ID_JOYPAD_L3))
return false; return false;
if (!BIT64_GET(input, RETRO_DEVICE_ID_JOYPAD_R3)) if (!BIT64_GET(input.state, RETRO_DEVICE_ID_JOYPAD_R3))
return false; return false;
break; break;
} }
@ -1300,10 +1300,10 @@ int runloop_iterate(unsigned *sleep_ms)
unsigned i; unsigned i;
event_cmd_state_t cmd; event_cmd_state_t cmd;
retro_time_t current, target, to_sleep_ms; retro_time_t current, target, to_sleep_ms;
static retro_input_t last_input = {0};
event_cmd_state_t *cmd_ptr = &cmd; event_cmd_state_t *cmd_ptr = &cmd;
static retro_time_t frame_limit_minimum_time = 0.0; static retro_time_t frame_limit_minimum_time = 0.0;
static retro_time_t frame_limit_last_time = 0.0; static retro_time_t frame_limit_last_time = 0.0;
static retro_input_t last_input = 0;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
cmd.state[1] = last_input; cmd.state[1] = last_input;
@ -1330,14 +1330,14 @@ int runloop_iterate(unsigned *sleep_ms)
if (input_driver_is_flushing_input()) if (input_driver_is_flushing_input())
{ {
input_driver_unset_flushing_input(); input_driver_unset_flushing_input();
if (cmd.state[0]) if (cmd.state[0].state)
{ {
cmd.state[0] = 0; cmd.state[0].state = 0;
/* If core was paused before entering menu, evoke /* If core was paused before entering menu, evoke
* pause toggle to wake it up. */ * pause toggle to wake it up. */
if (runloop_ctl(RUNLOOP_CTL_IS_PAUSED, NULL)) if (runloop_ctl(RUNLOOP_CTL_IS_PAUSED, NULL))
BIT64_SET(cmd.state[0], RARCH_PAUSE_TOGGLE); BIT64_SET(cmd.state[0].state, RARCH_PAUSE_TOGGLE);
input_driver_set_flushing_input(); input_driver_set_flushing_input();
} }
} }
@ -1368,7 +1368,7 @@ int runloop_iterate(unsigned *sleep_ms)
runloop_frame_time.callback(delta); runloop_frame_time.callback(delta);
} }
cmd.state[2] = cmd.state[0] & ~cmd.state[1]; /* trigger */ cmd.state[2].state = cmd.state[0].state & ~cmd.state[1].state; /* trigger */
if (runloop_cmd_triggered(cmd_ptr, RARCH_OVERLAY_NEXT)) if (runloop_cmd_triggered(cmd_ptr, RARCH_OVERLAY_NEXT))
command_event(CMD_EVENT_OVERLAY_NEXT, NULL); command_event(CMD_EVENT_OVERLAY_NEXT, NULL);