Add timeout to joyconfig.

This commit is contained in:
Themaister 2013-04-29 15:28:41 +02:00
parent ded204ce19
commit b714a6d7d1
2 changed files with 26 additions and 3 deletions

View File

@ -42,6 +42,10 @@ Also writes an autoconfigure file for the joypad which was configured. It can be
\fB--misc, -m\fR \fB--misc, -m\fR
Also configure some binds that aren't directly related to RetroPad, such as save states, fullscreen toggling, etc. Also configure some binds that aren't directly related to RetroPad, such as save states, fullscreen toggling, etc.
.TP
\fB-t SECONDS, --timeout SECONDS\fR
Adds a timeout of N seconds to each bind. If timed out, the bind will not be used.
.TP .TP
\fB--help, -h\fR \fB--help, -h\fR
Prints help message. Prints help message.

View File

@ -35,6 +35,7 @@ driver_t driver;
static int g_player = 1; static int g_player = 1;
static int g_joypad = 0; static int g_joypad = 0;
static int g_timeout = 0;
static char *g_in_path = NULL; static char *g_in_path = NULL;
static char *g_out_path = NULL; static char *g_out_path = NULL;
static char *g_auto_path = NULL; static char *g_auto_path = NULL;
@ -54,6 +55,7 @@ static void print_help(void)
puts("-o/--output: Output file to write to. If not selected, config file will be dumped to stdout."); puts("-o/--output: Output file to write to. If not selected, config file will be dumped to stdout.");
puts("-a/--autoconfig: Outputs an autoconfig file for joypad which was configured."); puts("-a/--autoconfig: Outputs an autoconfig file for joypad which was configured.");
puts("-m/--misc: Also configure various keybinds that are not directly libretro related. These configurations are for player 1 only."); puts("-m/--misc: Also configure various keybinds that are not directly libretro related. These configurations are for player 1 only.");
puts("-t/--timeout: Adds a timeout of N seconds to each bind. If timed out, the bind will not be used.");
puts("-h/--help: This help."); puts("-h/--help: This help.");
} }
@ -123,6 +125,8 @@ static void get_binds(config_file_t *conf, config_file_t *auto_conf, int player,
int last_axis = -1; int last_axis = -1;
bool block_axis = false; bool block_axis = false;
unsigned timeout_ticks = g_timeout * 100;
poll_joypad(driver, joypad, &old_poll); poll_joypad(driver, joypad, &old_poll);
fprintf(stderr, "\nJoypads tend to have stale state after opened.\nPress some buttons and move some axes around to make sure joypad state is completely neutral before proceeding.\nWhen done, press Enter ... "); fprintf(stderr, "\nJoypads tend to have stale state after opened.\nPress some buttons and move some axes around to make sure joypad state is completely neutral before proceeding.\nWhen done, press Enter ... ");
getchar(); getchar();
@ -153,8 +157,8 @@ static void get_binds(config_file_t *conf, config_file_t *auto_conf, int player,
fprintf(stderr, "Configuring binds for player #%d on joypad #%d.\n\n", fprintf(stderr, "Configuring binds for player #%d on joypad #%d.\n\n",
player + 1, joypad); player + 1, joypad);
for (unsigned i = 0; input_config_bind_map[i].valid && for (unsigned i = 0, timeout_cnt = 0; input_config_bind_map[i].valid &&
(g_use_misc || !input_config_bind_map[i].meta); i++) (g_use_misc || !input_config_bind_map[i].meta); i++, timeout_cnt = 0)
{ {
if (i == RARCH_TURBO_ENABLE) if (i == RARCH_TURBO_ENABLE)
continue; continue;
@ -172,6 +176,16 @@ static void get_binds(config_file_t *conf, config_file_t *auto_conf, int player,
// but it adds far more complexity, so, meh. // but it adds far more complexity, so, meh.
rarch_sleep(10); rarch_sleep(10);
if (timeout_ticks)
{
timeout_cnt++;
if (timeout_cnt >= timeout_ticks)
{
fprintf(stderr, "\tTimed out ...\n");
break;
}
}
poll_joypad(driver, joypad, &new_poll); poll_joypad(driver, joypad, &new_poll);
for (int j = 0; j < MAX_BUTTONS; j++) for (int j = 0; j < MAX_BUTTONS; j++)
{ {
@ -294,7 +308,7 @@ out:
static void parse_input(int argc, char *argv[]) static void parse_input(int argc, char *argv[])
{ {
char optstring[] = "i:o:a:p:j:hm"; char optstring[] = "i:o:a:p:j:t:hm";
struct option opts[] = { struct option opts[] = {
{ "input", 1, NULL, 'i' }, { "input", 1, NULL, 'i' },
{ "output", 1, NULL, 'o' }, { "output", 1, NULL, 'o' },
@ -303,6 +317,7 @@ static void parse_input(int argc, char *argv[])
{ "joypad", 1, NULL, 'j' }, { "joypad", 1, NULL, 'j' },
{ "help", 0, NULL, 'h' }, { "help", 0, NULL, 'h' },
{ "misc", 0, NULL, 'm' }, { "misc", 0, NULL, 'm' },
{ "timeout", 1, NULL, 't' },
{ NULL, 0, NULL, 0 } { NULL, 0, NULL, 0 }
}; };
@ -323,6 +338,10 @@ static void parse_input(int argc, char *argv[])
g_in_path = strdup(optarg); g_in_path = strdup(optarg);
break; break;
case 't':
g_timeout = strtol(optarg, NULL, 0);
break;
case 'o': case 'o':
g_out_path = strdup(optarg); g_out_path = strdup(optarg);
break; break;