Make joypad driver configurable.

This commit is contained in:
Themaister 2013-05-04 10:22:31 +02:00
parent aea523c418
commit b323640d7c
10 changed files with 25 additions and 9 deletions

View File

@ -216,6 +216,7 @@ struct settings
struct
{
char driver[32];
char joypad_driver[32];
struct retro_keybind binds[MAX_PLAYERS][RARCH_BIND_LIST_END];
// Set by autoconfiguration in joypad_autoconfig_dir. Does not override main binds.

View File

@ -126,7 +126,7 @@ static void *dinput_init(void)
IDirectInputDevice8_Acquire(di->mouse);
input_init_keyboard_lut(rarch_key_map_dinput);
di->joypad = input_joypad_init_first();
di->joypad = input_joypad_init_driver(g_settings.input.joypad_driver);
return di;

View File

@ -54,11 +54,14 @@ static const rarch_joypad_driver_t *joypad_drivers[] = {
NULL,
};
const rarch_joypad_driver_t *input_joypad_find_driver(const char *ident)
const rarch_joypad_driver_t *input_joypad_init_driver(const char *ident)
{
if (!ident || !*ident)
return input_joypad_init_first();
for (unsigned i = 0; joypad_drivers[i]; i++)
{
if (strcmp(ident, joypad_drivers[i]->ident) == 0)
if (strcmp(ident, joypad_drivers[i]->ident) == 0 && joypad_drivers[i]->init())
{
RARCH_LOG("Found joypad driver: \"%s\".\n", joypad_drivers[i]->ident);
return joypad_drivers[i];

View File

@ -71,7 +71,8 @@ typedef struct rarch_joypad_driver
const char *ident;
} rarch_joypad_driver_t;
const rarch_joypad_driver_t *input_joypad_find_driver(const char *ident);
// If ident points to NULL or a zero-length string, equivalent to calling input_joypad_init_first().
const rarch_joypad_driver_t *input_joypad_init_driver(const char *ident);
const rarch_joypad_driver_t *input_joypad_init_first(void);
bool input_joypad_pressed(const rarch_joypad_driver_t *driver,

View File

@ -226,7 +226,7 @@ static void *linuxraw_input_init(void)
atexit(linuxraw_resetKbmd);
linuxraw->joypad = input_joypad_init_first();
linuxraw->joypad = input_joypad_init_driver(g_settings.input.joypad_driver);
init_lut();
driver.stdin_claimed = true; // We need to disable use of stdin command interface if stdin is supposed to be used for input.

View File

@ -40,7 +40,7 @@ static void *sdl_input_init(void)
if (!sdl)
return NULL;
sdl->joypad = input_joypad_init_first();
sdl->joypad = input_joypad_init_driver(g_settings.input.joypad_driver);
return sdl;
}

View File

@ -57,7 +57,7 @@ static void *x_input_init(void)
x11->display = (Display*)driver.video_display;
x11->win = (Window)driver.video_window;
x11->joypad = input_joypad_init_first();
x11->joypad = input_joypad_init_driver(g_settings.input.joypad_driver);
input_init_keyboard_lut(rarch_key_map_x11);
return x11;

View File

@ -184,6 +184,9 @@
# Input driver. Depending on video driver, it might force a different input driver.
# input_driver = sdl
# Joypad driver. (Valid: linuxraw, sdl, dinput)
# input_joypad_driver =
# Defines axis threshold. Possible values are [0.0, 1.0]
# input_axis_threshold = 0.5

View File

@ -619,6 +619,7 @@ bool config_load_file(const char *path)
CONFIG_GET_STRING(audio.driver, "audio_driver");
CONFIG_GET_PATH(audio.dsp_plugin, "audio_dsp_plugin");
CONFIG_GET_STRING(input.driver, "input_driver");
CONFIG_GET_STRING(input.joypad_driver, "input_joypad_driver");
if (!*g_settings.libretro)
CONFIG_GET_PATH(libretro, "libretro_path");

View File

@ -39,6 +39,7 @@ static int g_timeout = 0;
static char *g_in_path = NULL;
static char *g_out_path = NULL;
static char *g_auto_path = NULL;
static char *g_driver = NULL;
static unsigned g_meta_level = 0;
static void print_help(void)
@ -58,6 +59,7 @@ static void print_help(void)
puts("\tThese configurations are for player 1 only.");
puts("-m/--misc: Same as --allmisc, but exposes a smaller subset of misc binds which are deemed most useful for regular use.");
puts("-t/--timeout: Adds a timeout of N seconds to each bind. If timed out, the bind will not be used.");
puts("-d/--driver: Uses a specific joypad driver.");
puts("-h/--help: This help.");
}
@ -97,7 +99,7 @@ static void poll_joypad(const rarch_joypad_driver_t *driver,
static void get_binds(config_file_t *conf, config_file_t *auto_conf, int player, int joypad)
{
const rarch_joypad_driver_t *driver = input_joypad_init_first();
const rarch_joypad_driver_t *driver = input_joypad_init_driver(g_driver);
if (!driver)
{
fprintf(stderr, "Cannot find any valid input driver.\n");
@ -313,7 +315,7 @@ out:
static void parse_input(int argc, char *argv[])
{
char optstring[] = "i:o:a:p:j:t:hmM";
char optstring[] = "i:o:a:p:j:t:hmMd:";
struct option opts[] = {
{ "input", 1, NULL, 'i' },
{ "output", 1, NULL, 'o' },
@ -324,6 +326,7 @@ static void parse_input(int argc, char *argv[])
{ "misc", 0, NULL, 'm' },
{ "allmisc", 0, NULL, 'M' },
{ "timeout", 1, NULL, 't' },
{ "driver", 1, NULL, 'd' },
{ NULL, 0, NULL, 0 }
};
@ -348,6 +351,10 @@ static void parse_input(int argc, char *argv[])
g_timeout = strtol(optarg, NULL, 0);
break;
case 'd':
g_driver = strdup(optarg);
break;
case 'o':
g_out_path = strdup(optarg);
break;