void input_config_autoconfigure_joypad(unsigned index, const char *name, const char *driver) { size_t i; if (!g_settings.input.autodetect_enable) return; // This will be the case if input driver is reinit. No reason to spam autoconfigure messages // every time (fine in log). bool block_osd_spam = g_settings.input.autoconfigured[index] && name; for (i = 0; i < RARCH_BIND_LIST_END; i++) { g_settings.input.autoconf_binds[index][i].joykey = NO_BTN; g_settings.input.autoconf_binds[index][i].joyaxis = AXIS_NONE; } g_settings.input.autoconfigured[index] = false; if (!name) return; // false = load from both cfg files and internal bool internal_only = !*g_settings.input.autoconfig_dir; #ifdef HAVE_BUILTIN_AUTOCONFIG // First internal for (i = 0; input_builtin_autoconfs[i]; i++) { config_file_t *conf = config_file_new_from_string(input_builtin_autoconfs[i]); bool success = input_try_autoconfigure_joypad_from_conf(conf, index, name, driver, block_osd_spam); config_file_free(conf); if (success) break; } #endif // Now try files if (!internal_only) { struct string_list *list = dir_list_new(g_settings.input.autoconfig_dir, "cfg", false); if (!list) return; for (i = 0; i < list->size; i++) { config_file_t *conf = config_file_new(list->elems[i].data); if (!conf) continue; bool success = input_try_autoconfigure_joypad_from_conf(conf, index, name, driver, block_osd_spam); config_file_free(conf); if (success) break; } string_list_free(list); } }
static bool input_autoconfigure_joypad_from_conf_dir( autoconfig_params_t *params) { size_t i; int ret = 0; int index = -1; int current_best = 0; config_file_t *conf = NULL; struct string_list *list = NULL; char path[PATH_MAX_LENGTH] = {0}; settings_t *settings = config_get_ptr(); fill_pathname_join(path,settings->input.autoconfig_dir, settings->input.joypad_driver, sizeof(path)); if (settings) list = dir_list_new(path, "cfg", false); if (!list || !list->size) list = dir_list_new(settings->input.autoconfig_dir, "cfg", false); if(!list) return false; RARCH_LOG("Autoconfig: %d profiles found\n", list->size); for (i = 0; i < list->size; i++) { conf = config_file_new(list->elems[i].data); ret = input_try_autoconfigure_joypad_from_conf(conf, params); if(ret >= current_best) { index = i; current_best = ret; } config_file_free(conf); } if(index >= 0 && current_best > 0) { RARCH_LOG("Autoconf: best configuration score=%d\n", current_best); conf = config_file_new(list->elems[index].data); input_autoconfigure_joypad_add(conf, params); config_file_free(conf); } else ret = 0; string_list_free(list); if (ret == 0) return false; return true; }
static int input_autoconfigure_joypad_from_conf( config_file_t *conf, autoconfig_params_t *params) { int ret = 0; if (!conf) return false; ret = input_try_autoconfigure_joypad_from_conf(conf, params); if (ret) input_autoconfigure_joypad_add(conf, params); config_file_free(conf); return ret; }
static bool input_autoconfigure_joypad_from_conf_dir( autoconfig_params_t *params) { size_t i; char path[PATH_MAX_LENGTH]; int ret = 0; int index = -1; int current_best = 0; config_file_t *conf = NULL; struct string_list *list = NULL; settings_t *settings = config_get_ptr(); if (!settings) return false; fill_pathname_join(path, settings->input.autoconfig_dir, settings->input.joypad_driver, sizeof(path)); list = dir_list_new(path, "cfg", false, false); if (!list || !list->size) list = dir_list_new(settings->input.autoconfig_dir, "cfg", false, false); if(!list) return false; RARCH_LOG("Autodetect: %d profiles found\n", list->size); for (i = 0; i < list->size; i++) { conf = config_file_new(list->elems[i].data); ret = input_try_autoconfigure_joypad_from_conf(conf, params); if(ret >= current_best) { index = i; current_best = ret; } config_file_free(conf); } if(index >= 0 && current_best > 0) { conf = config_file_new(list->elems[index].data); RARCH_LOG("Autodetect: selected configuration: %s\n", conf->path); input_autoconfigure_joypad_add(conf, params); config_file_free(conf); ret = 1; } else { char msg[PATH_MAX_LENGTH]; RARCH_LOG("Autodetect: no profiles found for %s (%d/%d)", params->name, params->vid, params->pid); snprintf(msg, sizeof(msg), "%s (%ld/%ld) not configured", params->name, (long)params->vid, (long)params->pid); rarch_main_msg_queue_push(msg, 0, 60, false); ret = 0; } string_list_free(list); if (ret == 0) return false; return true; }
void input_config_autoconfigure_joypad(unsigned idx, const char *name, int32_t vid, int32_t pid, const char *drv) { size_t i; bool internal_only, block_osd_spam; struct string_list *list = NULL; if (!g_settings.input.autodetect_enable) return; /* This will be the case if input driver is reinit. * No reason to spam autoconfigure messages * every time (fine in log). */ block_osd_spam = g_settings.input.autoconfigured[idx] && name; for (i = 0; i < RARCH_BIND_LIST_END; i++) { g_settings.input.autoconf_binds[idx][i].joykey = NO_BTN; g_settings.input.autoconf_binds[idx][i].joyaxis = AXIS_NONE; g_settings.input.autoconf_binds[idx][i].joykey_label[0] = '\0'; g_settings.input.autoconf_binds[idx][i].joyaxis_label[0] = '\0'; } g_settings.input.autoconfigured[idx] = false; if (!name) return; /* if false, load from both cfg files and internal */ internal_only = !*g_settings.input.autoconfig_dir; #if defined(HAVE_BUILTIN_AUTOCONFIG) /* First internal */ for (i = 0; input_builtin_autoconfs[i]; i++) { config_file_t *conf = (config_file_t*) config_file_new_from_string(input_builtin_autoconfs[i]); bool success = input_try_autoconfigure_joypad_from_conf(conf, idx, name, drv, vid, pid, block_osd_spam); config_file_free(conf); if (success) break; } #endif if (internal_only) return; /* Now try files */ list = dir_list_new(g_settings.input.autoconfig_dir, "cfg", false); if (!list) return; for (i = 0; i < list->size; i++) { bool success; config_file_t *conf = config_file_new(list->elems[i].data); if (!conf) continue; success = input_try_autoconfigure_joypad_from_conf(conf, idx, name, drv, vid, pid, block_osd_spam); config_file_free(conf); if (success) break; } string_list_free(list); }
static bool input_autoconfigure_joypad_from_conf_dir( autoconfig_params_t *params) { size_t i; char path[PATH_MAX_LENGTH] = {0}; int ret = 0; int index = -1; int current_best = 0; config_file_t *conf = NULL; struct string_list *list = NULL; settings_t *settings = config_get_ptr(); if (!settings) return false; fill_pathname_join(path, settings->directory.autoconfig, settings->input.joypad_driver, sizeof(path)); list = dir_list_new_special(path, DIR_LIST_AUTOCONFIG, "cfg"); if (!list || !list->size) { if (list) string_list_free(list); list = dir_list_new_special(settings->directory.autoconfig, DIR_LIST_AUTOCONFIG, "cfg"); } if(!list) return false; RARCH_LOG("Autodetect: %d profiles found\n", list->size); for (i = 0; i < list->size; i++) { conf = config_file_new(list->elems[i].data); ret = input_try_autoconfigure_joypad_from_conf(conf, params); if(ret >= current_best) { index = i; current_best = ret; } config_file_free(conf); } if(index >= 0 && current_best > 0) { conf = config_file_new(list->elems[index].data); if (conf) { char conf_path[PATH_MAX_LENGTH]; config_get_config_path(conf, conf_path, sizeof(conf_path)); RARCH_LOG("Autodetect: selected configuration: %s\n", conf_path); input_autoconfigure_joypad_add(conf, params); config_file_free(conf); ret = 1; } } else ret = 0; string_list_free(list); if (ret == 0) return false; return true; }