add a function to save controller profiles

This commit is contained in:
radius 2015-07-10 20:14:36 -05:00
parent 6f99b4d381
commit 0ea522585d
3 changed files with 75 additions and 11 deletions

View File

@ -2178,7 +2178,7 @@ static void save_keybind_hat(config_file_t *conf, const char *key,
} }
static void save_keybind_joykey(config_file_t *conf, const char *prefix, static void save_keybind_joykey(config_file_t *conf, const char *prefix,
const char *base, const struct retro_keybind *bind) const char *base, const struct retro_keybind *bind, bool save_empty)
{ {
char key[64] = {0}; char key[64] = {0};
@ -2186,7 +2186,10 @@ static void save_keybind_joykey(config_file_t *conf, const char *prefix,
strlcat(key, "_btn", sizeof(key)); strlcat(key, "_btn", sizeof(key));
if (bind->joykey == NO_BTN) if (bind->joykey == NO_BTN)
config_set_string(conf, key, "nul"); {
if (save_empty)
config_set_string(conf, key, "nul");
}
else if (GET_HAT_DIR(bind->joykey)) else if (GET_HAT_DIR(bind->joykey))
save_keybind_hat(conf, key, bind); save_keybind_hat(conf, key, bind);
else else
@ -2194,7 +2197,7 @@ static void save_keybind_joykey(config_file_t *conf, const char *prefix,
} }
static void save_keybind_axis(config_file_t *conf, const char *prefix, static void save_keybind_axis(config_file_t *conf, const char *prefix,
const char *base, const struct retro_keybind *bind) const char *base, const struct retro_keybind *bind, bool save_empty)
{ {
char key[64] = {0}; char key[64] = {0};
char config[16] = {0}; char config[16] = {0};
@ -2205,7 +2208,10 @@ static void save_keybind_axis(config_file_t *conf, const char *prefix,
strlcat(key, "_axis", sizeof(key)); strlcat(key, "_axis", sizeof(key));
if (bind->joyaxis == AXIS_NONE) if (bind->joyaxis == AXIS_NONE)
config_set_string(conf, key, "nul"); {
if (save_empty)
config_set_string(conf, key, "nul");
}
else if (AXIS_NEG_GET(bind->joyaxis) != AXIS_DIR_NONE) else if (AXIS_NEG_GET(bind->joyaxis) != AXIS_DIR_NONE)
{ {
dir = '-'; dir = '-';
@ -2230,18 +2236,19 @@ static void save_keybind_axis(config_file_t *conf, const char *prefix,
* @prefix : prefix name of keybind * @prefix : prefix name of keybind
* @base : base name of keybind * @base : base name of keybind
* @bind : pointer to key binding object * @bind : pointer to key binding object
* @kb : save keyboard binds
* *
* Save a key binding to the config file. * Save a key binding to the config file.
*/ */
static void save_keybind(config_file_t *conf, const char *prefix, static void save_keybind(config_file_t *conf, const char *prefix,
const char *base, const struct retro_keybind *bind) const char *base, const struct retro_keybind *bind, bool save_kb, bool save_empty)
{ {
if (!bind->valid) if (!bind->valid)
return; return;
if(save_kb)
save_keybind_key(conf, prefix, base, bind); save_keybind_key(conf, prefix, base, bind);
save_keybind_joykey(conf, prefix, base, bind); save_keybind_joykey(conf, prefix, base, bind, save_empty);
save_keybind_axis(conf, prefix, base, bind); save_keybind_axis(conf, prefix, base, bind, save_empty);
} }
/** /**
@ -2263,7 +2270,7 @@ static void save_keybinds_user(config_file_t *conf, unsigned user)
if (prefix) if (prefix)
save_keybind(conf, prefix, input_config_bind_map[i].base, save_keybind(conf, prefix, input_config_bind_map[i].base,
&settings->input.binds[user][i]); &settings->input.binds[user][i], true, true);
} }
} }
@ -2326,6 +2333,54 @@ bool config_save_keybinds_file(const char *path)
return ret; return ret;
} }
/**
* config_save_autoconf_profile:
* @path : Path that shall be written to.
* @user : Controller number to save
* Writes a controller autoconf file to disk.
**/
void config_save_autoconf_profile(const char *path, unsigned user)
{
settings_t *settings = config_get_ptr();
char buf[PATH_MAX_LENGTH] = {0};
char autoconf_file[PATH_MAX_LENGTH] = {0};
config_file_t *conf = NULL;
fill_pathname_join(buf, settings->input.autoconfig_dir,
path, sizeof(buf));
fill_pathname_noext(autoconf_file, buf, ".cfg", sizeof(autoconf_file));
//remove this
RARCH_LOG("Saving autoconf profile: %s %s %s\n");
conf = config_file_new(autoconf_file);
if (!conf)
{
conf = config_file_new(NULL);
if (!conf)
return;
}
config_set_string(conf, "input_driver", settings->input.joypad_driver);
config_set_string(conf, "input_device", settings->input.device_names[user]);
if(settings->input.vid[user] && settings->input.pid[user])
{
config_set_int(conf, "input_vendor_id", settings->input.vid[user]);
config_set_int(conf, "input_product_id_id", settings->input.pid[user]);
}
for (int i = 0; i < RARCH_FIRST_META_KEY; i++)
{
save_keybind(conf, "input", input_config_bind_map[i].base,
&settings->input.binds[user][i], false, false);
}
config_file_write(conf, autoconf_file);
config_file_free(conf);
}
/** /**
* config_save_file: * config_save_file:
* @path : Path that shall be written to. * @path : Path that shall be written to.

View File

@ -214,6 +214,8 @@ typedef struct settings
/* Set by autoconfiguration in joypad_autoconfig_dir. /* Set by autoconfiguration in joypad_autoconfig_dir.
* Does not override main binds. */ * Does not override main binds. */
bool autoconfigured[MAX_USERS]; bool autoconfigured[MAX_USERS];
int vid[MAX_USERS];
int pid[MAX_USERS];
unsigned libretro_device[MAX_USERS]; unsigned libretro_device[MAX_USERS];
unsigned analog_dpad_mode[MAX_USERS]; unsigned analog_dpad_mode[MAX_USERS];
@ -494,6 +496,14 @@ bool config_load_remap(void);
**/ **/
bool config_save_keybinds_file(const char *path); bool config_save_keybinds_file(const char *path);
/**
* config_save_autoconf_profile:
* @path : Path that shall be written to.
* @user : Controller number to save
* Writes a controller autoconf file to disk.
**/
void config_save_autoconf_profile(const char *path, unsigned user);
/** /**
* config_save_file: * config_save_file:
* @path : Path that shall be written to. * @path : Path that shall be written to.

View File

@ -229,7 +229,6 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p)
inst->guidProduct.Data4[4], inst->guidProduct.Data4[5], inst->guidProduct.Data4[6], inst->guidProduct.Data4[7]); inst->guidProduct.Data4[4], inst->guidProduct.Data4[5], inst->guidProduct.Data4[6], inst->guidProduct.Data4[7]);
#endif #endif
g_pads[g_joypad_cnt].vid = inst->guidProduct.Data1 % 0x10000; g_pads[g_joypad_cnt].vid = inst->guidProduct.Data1 % 0x10000;
g_pads[g_joypad_cnt].pid = inst->guidProduct.Data1 / 0x10000; g_pads[g_joypad_cnt].pid = inst->guidProduct.Data1 / 0x10000;