Long press of USER button in Menu core launches the joystick button definition. Short press of USER button skips the button in definition.

This commit is contained in:
sorgelig
2020-03-07 05:35:19 +08:00
parent 0eb7ea1924
commit 7fcc325d8c
6 changed files with 148 additions and 46 deletions

View File

@@ -1177,6 +1177,35 @@ int toggle_kbdled(int mask)
return state;
}
#define JOYMAP_DIR CONFIG_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);
if (!ret) return FileLoadConfig(name, pBuffer, size);
return ret;
}
static void delete_map(const char *name)
{
char path[256] = { JOYMAP_DIR };
FileCreatePath(path);
strcat(path, name);
FileDelete(name);
FileDelete(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);
}
static int mapping = 0;
static int mapping_button;
static int mapping_dev = -1;
@@ -1255,6 +1284,7 @@ void finish_map_setting(int dismiss)
if (mapping_type == 2)
{
if (dismiss) input[mapping_dev].has_kbdmap = 0;
else if (dismiss == 2) FileDeleteConfig(get_kbdmap_name(mapping_dev));
else FileSaveConfig(get_kbdmap_name(mapping_dev), &input[mapping_dev].kbdmap, sizeof(input[mapping_dev].kbdmap));
}
else if (mapping_type == 3)
@@ -1265,7 +1295,8 @@ void finish_map_setting(int dismiss)
{
for (int i = 0; i < NUMDEV; i++) input[i].has_map = 0;
if (!dismiss) FileSaveJoymap(get_map_name(mapping_dev, 0), &input[mapping_dev].map, sizeof(input[mapping_dev].map));
if (!dismiss) save_map(get_map_name(mapping_dev, 0), &input[mapping_dev].map, sizeof(input[mapping_dev].map));
if (dismiss == 2) delete_map(get_map_name(mapping_dev, 0));
if (is_menu_core()) input[mapping_dev].has_mmap = 0;
}
}
@@ -1774,7 +1805,7 @@ static void input_cb(struct input_event *ev, struct input_absinfo *absinfo, int
{
if (input[dev].quirk != QUIRK_PDSP)
{
if (!FileLoadJoymap(get_map_name(dev, 1), &input[dev].mmap, sizeof(input[dev].mmap)))
if (!load_map(get_map_name(dev, 1), &input[dev].mmap, sizeof(input[dev].mmap)))
{
memset(input[dev].mmap, 0, sizeof(input[dev].mmap));
input[dev].has_mmap++;
@@ -1791,7 +1822,7 @@ static void input_cb(struct input_event *ev, struct input_absinfo *absinfo, int
memset(input[dev].map, 0, sizeof(input[dev].map));
input[dev].map[SYS_BTN_A] = 0x120;
}
else if (!FileLoadJoymap(get_map_name(dev, 0), &input[dev].map, sizeof(input[dev].map)))
else if (!load_map(get_map_name(dev, 0), &input[dev].map, sizeof(input[dev].map)))
{
memset(input[dev].map, 0, sizeof(input[dev].map));
if (!is_menu_core())
@@ -2605,6 +2636,20 @@ static void input_cb(struct input_event *ev, struct input_absinfo *absinfo, int
}
}
void send_map_cmd(int key)
{
if (mapping && mapping_dev >= 0)
{
input_event ev;
ev.type = EV_KEY;
ev.code = key;
ev.value = 1;
input_cb(&ev, 0, mapping_dev);
ev.value = 0;
input_cb(&ev, 0, mapping_dev);
}
}
#define CMD_FIFO "/dev/MiSTer_cmd"
#define LED_MONITOR "/sys/class/leds/hps_led0/brightness_hw_changed"