input: fix default config restore, option for paddle/spinner button allocation from core.
This commit is contained in:
@@ -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)
|
||||
|
||||
15
input.cpp
15
input.cpp
@@ -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)))
|
||||
{
|
||||
|
||||
@@ -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]";
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user