save and load keymaps from file

This commit is contained in:
radius 2017-09-09 17:19:04 -05:00
parent 654db9caac
commit efce234dc4
2 changed files with 52 additions and 48 deletions

View File

@ -66,37 +66,6 @@ input_mapper_t *input_mapper_new(uint16_t port)
if (!handle) if (!handle)
return NULL; return NULL;
/* testing values for mgs */
settings->uints.input_keymapper_ids[0] = RETROK_n;
settings->uints.input_keymapper_ids[1] = RETROK_SPACE;
settings->uints.input_keymapper_ids[2] = RETROK_F1;
settings->uints.input_keymapper_ids[3] = RETROK_RETURN;
settings->uints.input_keymapper_ids[4] = RETROK_UP;
settings->uints.input_keymapper_ids[5] = RETROK_DOWN;
settings->uints.input_keymapper_ids[6] = RETROK_LEFT;
settings->uints.input_keymapper_ids[7] = RETROK_RIGHT;
settings->uints.input_keymapper_ids[8] = RETROK_F1;
settings->uints.input_keymapper_ids[9] = RETROK_F2;
settings->uints.input_keymapper_ids[10] = RETROK_F3;
settings->uints.input_keymapper_ids[11] = RETROK_F4;
settings->uints.input_keymapper_ids[12] = RETROK_F5;
settings->uints.input_keymapper_ids[13] = RETROK_F6;
settings->uints.input_keymapper_ids[14] = RETROK_F7;
settings->uints.input_keymapper_ids[15] = RETROK_F8;
/* testing values for keen5 */
/*settings->uints.input_keymapper_ids[0] = RETROK_LCTRL;
settings->uints.input_keymapper_ids[1] = RETROK_SPACE;
settings->uints.input_keymapper_ids[2] = RETROK_ESCAPE;
settings->uints.input_keymapper_ids[3] = RETROK_RETURN;
settings->uints.input_keymapper_ids[4] = RETROK_UP;
settings->uints.input_keymapper_ids[5] = RETROK_DOWN;
settings->uints.input_keymapper_ids[6] = RETROK_LEFT;
settings->uints.input_keymapper_ids[7] = RETROK_RIGHT;
settings->uints.input_keymapper_ids[8] = RETROK_F1;
*/
handle->port = port; handle->port = port;
mapper_ptr = handle; mapper_ptr = handle;
return handle; return handle;

View File

@ -23,6 +23,7 @@
#include "input_remapping.h" #include "input_remapping.h"
#include "../configuration.h" #include "../configuration.h"
#include "../retroarch.h" #include "../retroarch.h"
#include "../verbosity.h"
static unsigned old_analog_dpad_mode[MAX_USERS]; static unsigned old_analog_dpad_mode[MAX_USERS];
static unsigned old_libretro_device[MAX_USERS]; static unsigned old_libretro_device[MAX_USERS];
@ -50,8 +51,9 @@ bool input_remapping_load_file(void *data, const char *path)
for (i = 0; i < MAX_USERS; i++) for (i = 0; i < MAX_USERS; i++)
{ {
char buf_tmp[64]; char s1[64], s2[64];
char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}}; char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
char keymapper_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
char key_strings[RARCH_FIRST_CUSTOM_BIND + 4][128] = char key_strings[RARCH_FIRST_CUSTOM_BIND + 4][128] =
{ "b", "y", "select", "start", { "b", "y", "select", "start",
"up", "down", "left", "right", "up", "down", "left", "right",
@ -61,17 +63,41 @@ bool input_remapping_load_file(void *data, const char *path)
old_analog_dpad_mode[i] = settings->uints.input_analog_dpad_mode[i]; old_analog_dpad_mode[i] = settings->uints.input_analog_dpad_mode[i];
old_libretro_device[i] = settings->uints.input_libretro_device[i]; old_libretro_device[i] = settings->uints.input_libretro_device[i];
snprintf(buf_tmp, sizeof(buf_tmp), "input_player%u", i + 1); s1[0] = '\0';
s2[0] = '\0';
snprintf(s1, sizeof(s1), "input_player%u", i + 1);
snprintf(s2, sizeof(s2), "input_player%u_key", i + 1);
for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++) for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++)
{ {
int key_remap = -1; int key_remap = -1;
fill_pathname_join_delim(key_ident[j], buf_tmp, fill_pathname_join_delim(key_ident[j], s1,
key_strings[j], '_', sizeof(key_ident[j])); key_strings[j], '_', sizeof(key_ident[j]));
fill_pathname_join_delim(keymapper_ident[j], s2,
key_strings[j], '_', sizeof(key_ident[j]));
if (config_get_int(conf, key_ident[j], &key_remap) if (config_get_int(conf, key_ident[j], &key_remap)
&& key_remap < RARCH_FIRST_CUSTOM_BIND) && key_remap < RARCH_FIRST_CUSTOM_BIND)
settings->uints.input_remap_ids[i][j] = key_remap; settings->uints.input_remap_ids[i][j] = key_remap;
key_remap = -1;
if (settings->uints.keyboard_mapper_port == i)
{
if (config_get_int(conf, keymapper_ident[j], &key_remap))
{
settings->uints.input_keymapper_ids[j] = key_remap;
#if 0
RARCH_LOG ("%s: %u\n", keymapper_ident[j], settings->uints.input_keymapper_ids[j]);
#endif
}
else
settings->uints.input_keymapper_ids[j] = RETROK_UNKNOWN;
}
} }
for (j = 0; j < 4; j++) for (j = 0; j < 4; j++)
@ -81,7 +107,7 @@ bool input_remapping_load_file(void *data, const char *path)
snprintf(key_ident[RARCH_FIRST_CUSTOM_BIND + j], snprintf(key_ident[RARCH_FIRST_CUSTOM_BIND + j],
sizeof(key_ident[RARCH_FIRST_CUSTOM_BIND + j]), sizeof(key_ident[RARCH_FIRST_CUSTOM_BIND + j]),
"%s_%s", "%s_%s",
buf_tmp, s1,
key_strings[RARCH_FIRST_CUSTOM_BIND + j]); key_strings[RARCH_FIRST_CUSTOM_BIND + j]);
if (config_get_int(conf, key_ident[RARCH_FIRST_CUSTOM_BIND + j], if (config_get_int(conf, key_ident[RARCH_FIRST_CUSTOM_BIND + j],
@ -90,11 +116,11 @@ bool input_remapping_load_file(void *data, const char *path)
key_remap; key_remap;
} }
snprintf(buf_tmp, sizeof(buf_tmp), "input_player%u_analog_dpad_mode", i + 1); snprintf(s1, sizeof(s1), "input_player%u_analog_dpad_mode", i + 1);
CONFIG_GET_INT_BASE(conf, settings, uints.input_analog_dpad_mode[i], buf_tmp); CONFIG_GET_INT_BASE(conf, settings, uints.input_analog_dpad_mode[i], s1);
snprintf(buf_tmp, sizeof(buf_tmp), "input_libretro_device_p%u", i + 1); snprintf(s1, sizeof(s1), "input_libretro_device_p%u", i + 1);
CONFIG_GET_INT_BASE(conf, settings, uints.input_libretro_device[i], buf_tmp); CONFIG_GET_INT_BASE(conf, settings, uints.input_libretro_device[i], s1);
} }
config_file_free(conf); config_file_free(conf);
@ -144,21 +170,26 @@ bool input_remapping_save_file(const char *path)
for (i = 0; i < max_users; i++) for (i = 0; i < max_users; i++)
{ {
char buf_tmp[64]; char s1[64], s2[64];
char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}}; char key_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
char keymapper_ident[RARCH_FIRST_CUSTOM_BIND + 4][128] = {{0}};
char key_strings[RARCH_FIRST_CUSTOM_BIND + 4][128] = { char key_strings[RARCH_FIRST_CUSTOM_BIND + 4][128] = {
"b", "y", "select", "start", "b", "y", "select", "start",
"up", "down", "left", "right", "up", "down", "left", "right",
"a", "x", "l", "r", "l2", "r2", "a", "x", "l", "r", "l2", "r2",
"l3", "r3", "l_x", "l_y", "r_x", "r_y" }; "l3", "r3", "l_x", "l_y", "r_x", "r_y" };
buf_tmp[0] = '\0'; s1[0] = '\0';
s2[0] = '\0';
snprintf(buf_tmp, sizeof(buf_tmp), "input_player%u", i + 1); snprintf(s1, sizeof(s1), "input_player%u", i + 1);
snprintf(s2, sizeof(s2), "input_player%u_key", i + 1);
for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++) for (j = 0; j < RARCH_FIRST_CUSTOM_BIND + 4; j++)
{ {
fill_pathname_join_delim(key_ident[j], buf_tmp, fill_pathname_join_delim(key_ident[j], s1,
key_strings[j], '_', sizeof(key_ident[j]));
fill_pathname_join_delim(keymapper_ident[j], s2,
key_strings[j], '_', sizeof(key_ident[j])); key_strings[j], '_', sizeof(key_ident[j]));
/* only save values that have been modified */ /* only save values that have been modified */
@ -168,6 +199,10 @@ bool input_remapping_save_file(const char *path)
config_set_int(conf, key_ident[j], settings->uints.input_remap_ids[i][j]); config_set_int(conf, key_ident[j], settings->uints.input_remap_ids[i][j]);
else else
config_unset(conf,key_ident[j]); config_unset(conf,key_ident[j]);
if (settings->uints.keyboard_mapper_port == i &&
settings->uints.input_keymapper_ids[j] != RETROK_UNKNOWN)
config_set_int(conf, keymapper_ident[j], settings->uints.input_keymapper_ids[j]);
} }
else else
{ {
@ -177,10 +212,10 @@ bool input_remapping_save_file(const char *path)
config_unset(conf,key_ident[j]); config_unset(conf,key_ident[j]);
} }
} }
snprintf(buf_tmp, sizeof(buf_tmp), "input_libretro_device_p%u", i + 1); snprintf(s1, sizeof(s1), "input_libretro_device_p%u", i + 1);
config_set_int(conf, buf_tmp, input_config_get_device(i)); config_set_int(conf, s1, input_config_get_device(i));
snprintf(buf_tmp, sizeof(buf_tmp), "input_player%u_analog_dpad_mode", i + 1); snprintf(s1, sizeof(s1), "input_player%u_analog_dpad_mode", i + 1);
config_set_int(conf, buf_tmp, settings->uints.input_analog_dpad_mode[i]); config_set_int(conf, s1, settings->uints.input_analog_dpad_mode[i]);
} }
ret = config_file_write(conf, remap_file); ret = config_file_write(conf, remap_file);