Create input_driver_get_uint

This commit is contained in:
twinaphex 2017-05-11 07:36:21 +02:00
parent 1223309052
commit 2906bec7a8
11 changed files with 88 additions and 56 deletions

View File

@ -1300,7 +1300,7 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
SETTING_UINT("input_bind_timeout", &settings->uints.input_bind_timeout, true, input_bind_timeout, false);
SETTING_UINT("input_turbo_period", &settings->uints.input_turbo_period, true, turbo_period, false);
SETTING_UINT("input_duty_cycle", &settings->uints.input_turbo_duty_cycle, true, turbo_duty_cycle, false);
SETTING_UINT("input_max_users", &settings->uints.input_max_users, true, input_max_users, false);
SETTING_UINT("input_max_users", input_driver_get_uint(INPUT_ACTION_MAX_USERS), true, input_max_users, false);
SETTING_UINT("input_menu_toggle_gamepad_combo", &settings->uints.input_menu_toggle_gamepad_combo, true, menu_toggle_gamepad_combo, false);
SETTING_UINT("audio_latency", &settings->uints.audio_latency, false, 0 /* TODO */, false);
SETTING_UINT("audio_block_frames", &settings->uints.audio_block_frames, true, 0, false);

View File

@ -255,8 +255,6 @@ typedef struct settings
unsigned audio_latency;
unsigned input_remap_ids[MAX_USERS][RARCH_BIND_LIST_END];
unsigned input_max_users;
/* Set by autoconfiguration in joypad_autoconfig_dir.
* Does not override main binds. */
unsigned input_libretro_device[MAX_USERS];

View File

@ -1190,17 +1190,22 @@ bool rarch_environment_cb(unsigned cmd, void *data)
}
RARCH_LOG("Environ SET_INPUT_DESCRIPTORS:\n");
for (p = 0; p < settings->uints.input_max_users; p++)
{
for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND; retro_id++)
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
for (p = 0; p < max_users; p++)
{
const char *description = system->input_desc_btn[p][retro_id];
for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND; retro_id++)
{
const char *description = system->input_desc_btn[p][retro_id];
if (!description)
continue;
if (!description)
continue;
RARCH_LOG("\tRetroPad, User %u, Button \"%s\" => \"%s\"\n",
p + 1, libretro_btn_desc[retro_id], description);
RARCH_LOG("\tRetroPad, User %u, Button \"%s\" => \"%s\"\n",
p + 1, libretro_btn_desc[retro_id], description);
}
}
}

View File

@ -124,6 +124,7 @@ static bool input_driver_nonblock_state = false;
static bool input_driver_flushing_input = false;
static bool input_driver_data_own = false;
static float input_driver_axis_threshold = 0.0f;
static unsigned input_driver_max_users = 0;
/**
* input_driver_find_handle:
@ -271,7 +272,7 @@ void input_poll(void)
{
size_t i;
settings_t *settings = config_get_ptr();
unsigned max_users = settings->uints.input_max_users;
unsigned max_users = input_driver_max_users;
current_input->poll(current_input_data);
@ -478,7 +479,7 @@ void state_tracker_update_input(uint16_t *input1, uint16_t *input2)
unsigned i;
const struct retro_keybind *binds[MAX_USERS];
settings_t *settings = config_get_ptr();
unsigned max_users = settings->uints.input_max_users;
unsigned max_users = input_driver_max_users;
for (i = 0; i < max_users; i++)
{
@ -679,7 +680,7 @@ uint64_t input_menu_keys_pressed(
settings_t *settings = (settings_t*)data;
const struct retro_keybind *binds_norm = NULL;
const struct retro_keybind *binds_auto = NULL;
unsigned max_users = settings->uints.input_max_users;
unsigned max_users = input_driver_max_users;
if (settings->bools.menu_unified_controls && !menu_input_dialog_get_display_kb())
return input_keys_pressed(settings, old_input, last_input,
@ -1209,7 +1210,7 @@ void input_driver_deinit_remote(void)
settings_t *settings = config_get_ptr();
input_remote_free(input_driver_remote,
settings->uints.input_max_users);
input_driver_max_users);
}
input_driver_remote = NULL;
#endif
@ -1225,7 +1226,7 @@ bool input_driver_init_remote(void)
input_driver_remote = input_remote_new(
settings->uints.network_remote_base_port,
settings->uints.input_max_users);
input_driver_max_users);
if (input_driver_remote)
return true;
@ -1258,6 +1259,20 @@ float *input_driver_get_float(enum input_action action)
return NULL;
}
unsigned *input_driver_get_uint(enum input_action action)
{
switch (action)
{
case INPUT_ACTION_MAX_USERS:
return &input_driver_max_users;
default:
case INPUT_ACTION_NONE:
break;
}
return NULL;
}
bool input_driver_ungrab_mouse(void)
{
if (!current_input || !current_input->grab_mouse)

View File

@ -51,7 +51,8 @@ enum input_toggle_type
enum input_action
{
INPUT_ACTION_NONE = 0,
INPUT_ACTION_AXIS_THRESHOLD
INPUT_ACTION_AXIS_THRESHOLD,
INPUT_ACTION_MAX_USERS
};
struct retro_keybind
@ -344,6 +345,8 @@ bool input_driver_ungrab_mouse(void);
float *input_driver_get_float(enum input_action action);
unsigned *input_driver_get_uint(enum input_action action);
bool input_driver_is_data_ptr_same(void *data);
extern input_driver_t input_android;

View File

@ -105,6 +105,7 @@ bool input_remapping_save_file(const char *path)
char buf[PATH_MAX_LENGTH];
char remap_file[PATH_MAX_LENGTH];
config_file_t *conf = NULL;
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
settings_t *settings = config_get_ptr();
buf[0] = remap_file[0] = '\0';
@ -123,7 +124,7 @@ bool input_remapping_save_file(const char *path)
return false;
}
for (i = 0; i < settings->uints.input_max_users; i++)
for (i = 0; i < max_users; i++)
{
char buf[64];
char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};

View File

@ -3211,12 +3211,12 @@ static int menu_displaylist_parse_options_remappings(
unsigned p, retro_id;
rarch_system_info_t *system = NULL;
menu_handle_t *menu = NULL;
settings_t *settings = config_get_ptr();
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
return -1;
for (p = 0; p < settings->uints.input_max_users; p++)
for (p = 0; p < max_users; p++)
{
char key_type[PATH_MAX_LENGTH];
char key_analog[PATH_MAX_LENGTH];
@ -3255,7 +3255,7 @@ static int menu_displaylist_parse_options_remappings(
if (system)
{
for (p = 0; p < settings->uints.input_max_users; p++)
for (p = 0; p < max_users; p++)
{
for (retro_id = 0; retro_id < RARCH_FIRST_CUSTOM_BIND + 4; retro_id++)
{
@ -4925,12 +4925,15 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
PARSE_ONLY_UINT, false) != -1)
count++;
for(user = 0; user < settings->uints.input_max_users; user++)
{
if (menu_displaylist_parse_settings_enum(menu, info,
(enum msg_hash_enums)(MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE + user),
PARSE_ONLY_BOOL, false) != -1)
count++;
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
for(user = 0; user < max_users; user++)
{
if (menu_displaylist_parse_settings_enum(menu, info,
(enum msg_hash_enums)(MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE + user),
PARSE_ONLY_BOOL, false) != -1)
count++;
}
}
if (menu_displaylist_parse_settings_enum(menu, info,
@ -5381,7 +5384,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
{
unsigned user;
for (user = 0; user < settings->uints.input_max_users; user++)
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
for (user = 0; user < max_users; user++)
{
menu_displaylist_parse_settings_enum(menu, info,
(enum msg_hash_enums)(MENU_ENUM_LABEL_INPUT_USER_1_BINDS + user),

View File

@ -1246,6 +1246,7 @@ static int setting_action_left_bind_device(void *data, bool wraparound)
{
unsigned index_offset;
unsigned *p = NULL;
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr();
@ -1256,8 +1257,8 @@ static int setting_action_left_bind_device(void *data, bool wraparound)
p = &settings->uints.input_joypad_map[index_offset];
if ((*p) >= settings->uints.input_max_users)
*p = settings->uints.input_max_users - 1;
if ((*p) >= max_users)
*p = max_users - 1;
else if ((*p) > 0)
(*p)--;
@ -1268,6 +1269,7 @@ static int setting_action_right_bind_device(void *data, bool wraparound)
{
unsigned index_offset;
unsigned *p = NULL;
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr();
@ -1278,7 +1280,7 @@ static int setting_action_right_bind_device(void *data, bool wraparound)
p = &settings->uints.input_joypad_map[index_offset];
if (*p < settings->uints.input_max_users)
if (*p < max_users)
(*p)++;
return 0;
@ -1405,6 +1407,7 @@ static void get_string_representation_bind_device(void * data, char *s,
size_t len)
{
unsigned index_offset, map = 0;
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
rarch_setting_t *setting = (rarch_setting_t*)data;
settings_t *settings = config_get_ptr();
@ -1414,7 +1417,7 @@ static void get_string_representation_bind_device(void * data, char *s,
index_offset = setting->index_offset;
map = settings->uints.input_joypad_map[index_offset];
if (map < settings->uints.input_max_users)
if (map < max_users)
{
const char *device_name = input_config_get_device_name(map);
@ -4037,7 +4040,7 @@ static bool setting_append_list(
CONFIG_UINT(
list, list_info,
&settings->uints.input_max_users,
input_driver_get_uint(INPUT_ACTION_MAX_USERS),
MENU_ENUM_LABEL_INPUT_MAX_USERS,
MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS,
input_max_users,
@ -6055,31 +6058,34 @@ static bool setting_append_list(
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
/* TODO/FIXME - add enum_idx */
for(user = 0; user < settings->uints.input_max_users; user++)
{
char s1[64], s2[64];
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
for(user = 0; user < max_users; user++)
{
char s1[64], s2[64];
snprintf(s1, sizeof(s1), "%s_user_p%d", msg_hash_to_str(MENU_ENUM_LABEL_NETWORK_REMOTE_ENABLE), user + 1);
snprintf(s2, sizeof(s2), msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETWORK_USER_REMOTE_ENABLE), user + 1);
snprintf(s1, sizeof(s1), "%s_user_p%d", msg_hash_to_str(MENU_ENUM_LABEL_NETWORK_REMOTE_ENABLE), user + 1);
snprintf(s2, sizeof(s2), msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NETWORK_USER_REMOTE_ENABLE), user + 1);
CONFIG_BOOL_ALT(
list, list_info,
&settings->bools.network_remote_enable_user[user],
/* todo: figure out this value, it's working fine but I don't think this is correct */
strdup(s1),
strdup(s2),
false,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_ADVANCED);
settings_data_list_current_add_free_flags(list, list_info, SD_FREE_FLAG_NAME | SD_FREE_FLAG_SHORT);
menu_settings_list_current_add_enum_idx(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE + user));
CONFIG_BOOL_ALT(
list, list_info,
&settings->bools.network_remote_enable_user[user],
/* todo: figure out this value, it's working fine but I don't think this is correct */
strdup(s1),
strdup(s2),
false,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_ADVANCED);
settings_data_list_current_add_free_flags(list, list_info, SD_FREE_FLAG_NAME | SD_FREE_FLAG_SHORT);
menu_settings_list_current_add_enum_idx(list, list_info, (enum msg_hash_enums)(MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE + user));
}
}
CONFIG_BOOL(

View File

@ -347,12 +347,12 @@ static bool menu_input_key_bind_poll_find_trigger(
struct menu_bind_state *new_state)
{
unsigned i;
settings_t *settings = config_get_ptr();
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
if (!state || !new_state)
return false;
for (i = 0; i < settings->uints.input_max_users; i++)
for (i = 0; i < max_users; i++)
{
if (!menu_input_key_bind_poll_find_trigger_pad(
state, new_state, i))

View File

@ -1085,7 +1085,7 @@ int runloop_iterate(unsigned *sleep_ms)
#else
bool menu_is_alive = false;
#endif
unsigned max_users = settings->uints.input_max_users;
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
uint64_t current_input =
#ifdef HAVE_MENU

View File

@ -453,7 +453,7 @@ bool input_autoconfigure_connect(
state->idx = idx;
state->vid = vid;
state->pid = pid;
state->max_users = settings->uints.input_max_users;
state->max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
input_config_set_device_name(state->idx, state->name);
input_config_set_pid(state->idx, state->pid);