Skip to content

Commit

Permalink
input: fix default config restore, option for paddle/spinner button a…
Browse files Browse the repository at this point in the history
…llocation from core.
  • Loading branch information
sorgelig committed Mar 8, 2020
1 parent 1dfd580 commit 1ba9732
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 34 deletions.
3 changes: 2 additions & 1 deletion file_io.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
15 changes: 7 additions & 8 deletions input.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -1193,17 +1192,17 @@ 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)
{
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;
Expand Down Expand Up @@ -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)))
{
Expand Down
50 changes: 25 additions & 25 deletions joymapping.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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], '(');
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -161,60 +152,56 @@ 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]");
}

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]");
}

// 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];
strcat(mapinfo, "\n[R]");
}

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]");
Expand Down Expand Up @@ -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]";
Expand Down
1 change: 1 addition & 0 deletions joymapping.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 1ba9732

Please sign in to comment.