From 1ba97325e47e780e1393f965eafaa86333daed60 Mon Sep 17 00:00:00 2001 From: sorgelig Date: Sun, 8 Mar 2020 23:52:42 +0800 Subject: [PATCH] input: fix default config restore, option for paddle/spinner button allocation from core. --- file_io.cpp | 3 ++- input.cpp | 15 +++++++-------- joymapping.cpp | 50 +++++++++++++++++++++++++------------------------- joymapping.h | 1 + 4 files changed, 35 insertions(+), 34 deletions(-) diff --git a/file_io.cpp b/file_io.cpp index 851a54f..03299d3 100644 --- a/file_io.cpp +++ b/file_io.cpp @@ -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) diff --git a/input.cpp b/input.cpp index b262034..c2f6665 100644 --- a/input.cpp +++ b/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))) { diff --git a/joymapping.cpp b/joymapping.cpp index dd8bc21..f3cc982 100644 --- a/joymapping.cpp +++ b/joymapping.cpp @@ -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]"; diff --git a/joymapping.h b/joymapping.h index 782284a..4928d93 100644 --- a/joymapping.h +++ b/joymapping.h @@ -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