input: fix default config restore, option for paddle/spinner button allocation from core.

This commit is contained in:
sorgelig
2020-03-08 23:52:42 +08:00
parent 1dfd580722
commit 1ba97325e4
4 changed files with 35 additions and 34 deletions

View File

@@ -638,7 +638,8 @@ int FileDelete(const char *name)
if (name[0] != '/') sprintf(full_path, "%s/%s", getRootDir(), name);
else strcpy(full_path, name);
return !unlink(name);
printf("delete %s\n", full_path);
return !unlink(full_path);
}
int FileLoad(const char *name, void *pBuffer, int size)

View File

@@ -1177,13 +1177,12 @@ int toggle_kbdled(int mask)
return state;
}
#define JOYMAP_DIR CONFIG_DIR"/inputs/"
#define JOYMAP_DIR "inputs/"
static int load_map(const char *name, void *pBuffer, int size)
{
char path[256] = { JOYMAP_DIR };
strcat(path, name);
int ret = FileLoad(path, pBuffer, size);
int ret = FileLoadConfig(path, pBuffer, size);
if (!ret) return FileLoadConfig(name, pBuffer, size);
return ret;
}
@@ -1193,8 +1192,8 @@ static void delete_map(const char *name)
char path[256] = { JOYMAP_DIR };
FileCreatePath(path);
strcat(path, name);
FileDelete(name);
FileDelete(path);
FileDeleteConfig(name);
FileDeleteConfig(path);
}
static int save_map(const char *name, void *pBuffer, int size)
@@ -1202,8 +1201,8 @@ static int save_map(const char *name, void *pBuffer, int size)
char path[256] = { JOYMAP_DIR };
FileCreatePath(path);
strcat(path, name);
FileDelete(name);
return FileSave(path, pBuffer, size);
FileDeleteConfig(name);
return FileSaveConfig(path, pBuffer, size);
}
static int mapping = 0;
@@ -1820,7 +1819,7 @@ static void input_cb(struct input_event *ev, struct input_absinfo *absinfo, int
if (input[dev].quirk == QUIRK_PDSP)
{
memset(input[dev].map, 0, sizeof(input[dev].map));
input[dev].map[SYS_BTN_A] = 0x120;
input[dev].map[map_paddle_btn()] = 0x120;
}
else if (!load_map(get_map_name(dev, 0), &input[dev].map, sizeof(input[dev].map)))
{

View File

@@ -56,7 +56,7 @@ static void read_buttons()
substrcpy(joy_names[n], p, n);
if (!joy_names[n][0]) break;
printf("joy_bname[%d] = %s\n", n, joy_names[n]);
printf("joy_name[%d] = %s\n", n, joy_names[n]);
memcpy(joy_nnames[n], joy_names[n], sizeof(joy_nnames[0]));
char *sstr = strchr(joy_nnames[n], '(');
@@ -101,15 +101,6 @@ static void read_buttons()
}
}
static int has_X_button()
{
for (int i = 0; i < joy_count; i++)
{
if (!strcasecmp(joy_nnames[i], "X")) return 1;
}
return 0;
}
static int is_fire(char* name)
{
if (!strncasecmp(name, "fire", 4) || !strncasecmp(name, "button", 6))
@@ -161,31 +152,32 @@ void map_joystick(uint32_t *map, uint32_t *mmap)
if (!strcmp(joy_names[i], "-")) continue;
int idx = i+DPAD_COUNT;
char *btn_name = defaults ? joy_pnames[n] : joy_nnames[n];
char btn_name[32];
strcpy(btn_name, defaults ? joy_pnames[n] : joy_nnames[n]);
char *p = strchr(btn_name, '|');
if (p) *p = 0;
int mapped = 1;
if(!strcasecmp(btn_name, "A")
|| !strcasecmp(btn_name, "Jump")
|| is_fire(btn_name) == 1
|| !strcasecmp(btn_name, "Button I"))
|| is_fire(btn_name) == 1)
{
map[idx] = mmap[SYS_BTN_A];
strcat(mapinfo, "\n[A]");
}
else if(!strcasecmp(btn_name, "B")
|| is_fire(btn_name) == 2
|| !strcasecmp(btn_name, "Button II"))
|| is_fire(btn_name) == 2)
{
map[idx] = mmap[SYS_BTN_B];
strcat(mapinfo, "\n[B]");
}
else if(!strcasecmp(btn_name, "X")
|| (!strcasecmp(btn_name, "C") && !has_X_button())
|| is_fire(btn_name) == 3
|| !strcasecmp(btn_name, "Button III"))
|| !strcasecmp(btn_name, "C")
|| is_fire(btn_name) == 3)
{
map[idx] = mmap[SYS_BTN_X];
strcat(mapinfo, "\n[X]");
@@ -193,8 +185,7 @@ void map_joystick(uint32_t *map, uint32_t *mmap)
else if(!strcasecmp(btn_name, "Y")
|| !strcasecmp(btn_name, "D")
|| is_fire(btn_name) == 4
|| !strcasecmp(btn_name, "Button IV"))
|| is_fire(btn_name) == 4)
{
map[idx] = mmap[SYS_BTN_Y];
strcat(mapinfo, "\n[Y]");
@@ -202,9 +193,7 @@ void map_joystick(uint32_t *map, uint32_t *mmap)
// Genesis C and Z and TG16 V and VI
else if(!strcasecmp(btn_name, "R")
|| !strcasecmp(btn_name, "C")
|| !strcasecmp(btn_name, "RT")
|| !strcasecmp(btn_name, "Button V")
|| !strcasecmp(btn_name, "Coin"))
{
map[idx] = mmap[SYS_BTN_R];
@@ -212,9 +201,7 @@ void map_joystick(uint32_t *map, uint32_t *mmap)
}
else if(!strcasecmp(btn_name, "L")
|| !strcasecmp(btn_name, "Z")
|| !strcasecmp(btn_name, "LT")
|| !strcasecmp(btn_name, "Button VI"))
|| !strcasecmp(btn_name, "LT"))
{
map[idx] = mmap[SYS_BTN_L];
strcat(mapinfo, "\n[L]");
@@ -255,6 +242,19 @@ void map_joystick(uint32_t *map, uint32_t *mmap)
}
}
int map_paddle_btn()
{
read_buttons();
for (int i = 0, n = 0; i < joy_count; i++)
{
if (!strcmp(joy_names[i], "-")) continue;
char *p = strchr(defaults ? joy_pnames[n] : joy_nnames[n], '|');
if (p && !strcasecmp(p, "|P")) return i + DPAD_COUNT;
n++;
}
return DPAD_COUNT;
}
static const char* get_std_name(uint16_t code, uint32_t *mmap)
{
if (code == mmap[SYS_BTN_A ]) return "[A]";

View File

@@ -9,5 +9,6 @@
void map_joystick(uint32_t *map, uint32_t *mmap);
void map_joystick_show(uint32_t *map, uint32_t *mmap);
int map_paddle_btn();
#endif // JOYMAPPING_H