Pass joypad_driver name to input_driver_init function and make

sure we don't need to access the settings struct from the
input driver
This commit is contained in:
twinaphex 2017-01-10 17:59:48 +01:00
parent db6fba51c3
commit 8bd12368ef
22 changed files with 82 additions and 92 deletions

View file

@ -594,7 +594,7 @@ static void *xv_init(const video_info_t *video,
if (input && input_data) if (input && input_data)
{ {
xinput = input_x.init(); xinput = input_x.init(settings->input.joypad_driver);
if (xinput) if (xinput)
{ {
*input = &input_x; *input = &input_x;

View file

@ -798,7 +798,8 @@ error:
static void gfx_ctx_x_input_driver(void *data, static void gfx_ctx_x_input_driver(void *data,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
void *xinput = input_x.init(); settings_t *settings = config_get_ptr();
void *xinput = input_x.init(settings->input.joypad_driver);
(void)data; (void)data;

View file

@ -441,7 +441,8 @@ error:
static void gfx_ctx_xegl_input_driver(void *data, static void gfx_ctx_xegl_input_driver(void *data,
const input_driver_t **input, void **input_data) const input_driver_t **input, void **input_data)
{ {
void *xinput = input_x.init(); settings_t *settings = config_get_ptr();
void *xinput = input_x.init(settings->input.joypad_driver);
(void)data; (void)data;

View file

@ -33,8 +33,10 @@
#include "../../menu/menu_display.h" #include "../../menu/menu_display.h"
#endif #endif
#include "../../frontend/drivers/platform_linux.h"
#include "../input_config.h" #include "../input_config.h"
#include "../input_driver.h"
#include "../../frontend/drivers/platform_linux.h"
#include "../../gfx/video_driver.h" #include "../../gfx/video_driver.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
#include "../drivers_keyboard/keyboard_event_android.h" #include "../drivers_keyboard/keyboard_event_android.h"
@ -456,10 +458,9 @@ static bool android_input_init_handle(void)
return true; return true;
} }
static void *android_input_init(void) static void *android_input_init(const char *joypad_driver)
{ {
int32_t sdk; int32_t sdk;
settings_t *settings = config_get_ptr();
struct android_app *android_app = (struct android_app*)g_android; struct android_app *android_app = (struct android_app*)g_android;
android_input_t *android = (android_input_t*) android_input_t *android = (android_input_t*)
calloc(1, sizeof(*android)); calloc(1, sizeof(*android));
@ -469,8 +470,7 @@ static void *android_input_init(void)
android->thread.pads_connected = 0; android->thread.pads_connected = 0;
android->copy.pads_connected = 0; android->copy.pads_connected = 0;
android->joypad = input_joypad_init_driver( android->joypad = input_joypad_init_driver(joypad_driver, android);
settings->input.joypad_driver, android);
input_keymaps_init_keyboard_lut(rarch_key_map_android); input_keymaps_init_keyboard_lut(rarch_key_map_android);
@ -644,7 +644,6 @@ static void handle_hotplug(android_input_data_t *android_data,
char name_buf[256]; char name_buf[256];
int vendorId = 0; int vendorId = 0;
int productId = 0; int productId = 0;
settings_t *settings = config_get_ptr();
device_name[0] = device_model[0] = name_buf[0] = '\0'; device_name[0] = device_model[0] = name_buf[0] = '\0';
@ -899,6 +898,7 @@ static void handle_hotplug(android_input_data_t *android_data,
if (!string_is_empty(name_buf)) if (!string_is_empty(name_buf))
{ {
settings_t *settings = config_get_ptr();
strlcpy(settings->input.device_names[*port], strlcpy(settings->input.device_names[*port],
name_buf, sizeof(settings->input.device_names[*port])); name_buf, sizeof(settings->input.device_names[*port]));
} }

View file

@ -22,11 +22,12 @@
#endif #endif
#include "../input_config.h" #include "../input_config.h"
#include "../input_driver.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
#include "../input_keymaps.h" #include "../input_keymaps.h"
#include "cocoa_input.h" #include "cocoa_input.h"
#include "../../gfx/video_driver.h" #include "../../gfx/video_driver.h"
#include "../../configuration.h"
#include "../../driver.h" #include "../../driver.h"
#include "../drivers_keyboard/keyboard_event_apple.h" #include "../drivers_keyboard/keyboard_event_apple.h"
@ -126,16 +127,15 @@ int32_t cocoa_input_find_any_axis(uint32_t port)
} }
static void *cocoa_input_init(void) static void *cocoa_input_init(const char *joypad_driver)
{ {
settings_t *settings = config_get_ptr();
cocoa_input_data_t *apple = (cocoa_input_data_t*)calloc(1, sizeof(*apple)); cocoa_input_data_t *apple = (cocoa_input_data_t*)calloc(1, sizeof(*apple));
if (!apple) if (!apple)
return NULL; return NULL;
input_keymaps_init_keyboard_lut(rarch_key_map_apple_hid); input_keymaps_init_keyboard_lut(rarch_key_map_apple_hid);
apple->joypad = input_joypad_init_driver(settings->input.joypad_driver, apple); apple->joypad = input_joypad_init_driver(joypad_driver, apple);
#ifdef HAVE_MFI #ifdef HAVE_MFI
apple->sec_joypad = input_joypad_init_driver("mfi", apple); apple->sec_joypad = input_joypad_init_driver("mfi", apple);

View file

@ -23,8 +23,8 @@
#include "../../config.h" #include "../../config.h"
#endif #endif
#include "../../configuration.h"
#include "../input_config.h" #include "../input_config.h"
#include "../input_driver.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
#define MAX_PADS 1 #define MAX_PADS 1
@ -80,14 +80,13 @@ static void ctr_input_free_input(void *data)
free(data); free(data);
} }
static void* ctr_input_initialize(void) static void* ctr_input_init(const char *joypad_driver)
{ {
settings_t *settings = config_get_ptr();
ctr_input_t *ctr = (ctr_input_t*)calloc(1, sizeof(*ctr)); ctr_input_t *ctr = (ctr_input_t*)calloc(1, sizeof(*ctr));
if (!ctr) if (!ctr)
return NULL; return NULL;
ctr->joypad = input_joypad_init_driver(settings->input.joypad_driver, ctr); ctr->joypad = input_joypad_init_driver(joypad_driver, ctr);
return ctr; return ctr;
} }
@ -149,7 +148,7 @@ static void ctr_input_keyboard_mapping_set_block(void *data, bool value)
} }
input_driver_t input_ctr = { input_driver_t input_ctr = {
ctr_input_initialize, ctr_input_init,
ctr_input_poll, ctr_input_poll,
ctr_input_state, ctr_input_state,
ctr_input_meta_key_pressed, ctr_input_meta_key_pressed,

View file

@ -47,6 +47,7 @@
#include "../../tasks/tasks_internal.h" #include "../../tasks/tasks_internal.h"
#include "../../gfx/video_driver.h" #include "../../gfx/video_driver.h"
#include "../input_config.h" #include "../input_config.h"
#include "../input_driver.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
#include "../input_keymaps.h" #include "../input_keymaps.h"
@ -125,10 +126,9 @@ error:
return false; return false;
} }
static void *dinput_init(void) static void *dinput_init(const char *joypad_driver)
{ {
struct dinput_input *di = NULL; struct dinput_input *di = NULL;
settings_t *settings = config_get_ptr();
if (!dinput_init_context()) if (!dinput_init_context())
{ {
@ -185,7 +185,7 @@ static void *dinput_init(void)
} }
input_keymaps_init_keyboard_lut(rarch_key_map_dinput); input_keymaps_init_keyboard_lut(rarch_key_map_dinput);
di->joypad = input_joypad_init_driver(settings->input.joypad_driver, di); di->joypad = input_joypad_init_driver(joypad_driver, di);
return di; return di;
} }

View file

@ -25,7 +25,7 @@
#include <libretro.h> #include <libretro.h>
#include "../../configuration.h" #include "../input_driver.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
#ifndef MAX_PADS #ifndef MAX_PADS
@ -77,14 +77,13 @@ static void gx_input_free_input(void *data)
free(gx); free(gx);
} }
static void *gx_input_init(void) static void *gx_input_init(const char *joypad_driver)
{ {
settings_t *settings = config_get_ptr();
gx_input_t *gx = (gx_input_t*)calloc(1, sizeof(*gx)); gx_input_t *gx = (gx_input_t*)calloc(1, sizeof(*gx));
if (!gx) if (!gx)
return NULL; return NULL;
gx->joypad = input_joypad_init_driver(settings->input.joypad_driver, gx); gx->joypad = input_joypad_init_driver(joypad_driver, gx);
return gx; return gx;
} }

View file

@ -24,11 +24,12 @@
#include <boolean.h> #include <boolean.h>
#include "../../configuration.h"
#include "../../verbosity.h" #include "../../verbosity.h"
#include "../common/linux_common.h" #include "../common/linux_common.h"
#include "../input_keymaps.h" #include "../input_keymaps.h"
#include "../input_driver.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
typedef struct linuxraw_input typedef struct linuxraw_input
@ -38,10 +39,9 @@ typedef struct linuxraw_input
bool state[0x80]; bool state[0x80];
} linuxraw_input_t; } linuxraw_input_t;
static void *linuxraw_input_init(void) static void *linuxraw_input_init(const char *joypad_driver)
{ {
linuxraw_input_t *linuxraw = NULL; linuxraw_input_t *linuxraw = NULL;
settings_t *settings = config_get_ptr();
/* Only work on terminals. */ /* Only work on terminals. */
if (!isatty(0)) if (!isatty(0))
@ -64,8 +64,7 @@ static void *linuxraw_input_init(void)
return NULL; return NULL;
} }
linuxraw->joypad = input_joypad_init_driver( linuxraw->joypad = input_joypad_init_driver(joypad_driver, linuxraw);
settings->input.joypad_driver, linuxraw);
input_keymaps_init_keyboard_lut(rarch_key_map_linux); input_keymaps_init_keyboard_lut(rarch_key_map_linux);
linux_terminal_claim_stdin(); linux_terminal_claim_stdin();

View file

@ -17,7 +17,7 @@
#include "../input_driver.h" #include "../input_driver.h"
#include "../../verbosity.h" #include "../../verbosity.h"
static void *nullinput_input_init(void) static void *nullinput_input_init(const char *joypad_driver)
{ {
RARCH_ERR("Using the null input driver. RetroArch will ignore you."); RARCH_ERR("Using the null input driver. RetroArch will ignore you.");
return (void*)-1; return (void*)-1;

View file

@ -28,7 +28,7 @@
#include "../../defines/ps3_defines.h" #include "../../defines/ps3_defines.h"
#include "../../configuration.h" #include "../input_driver.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
#ifdef HAVE_MOUSE #ifdef HAVE_MOUSE
@ -163,14 +163,13 @@ static void ps3_input_free_input(void *data)
} }
static void* ps3_input_init(void) static void* ps3_input_init(const char *joypad_driver)
{ {
settings_t *settings = config_get_ptr();
ps3_input_t *ps3 = (ps3_input_t*)calloc(1, sizeof(*ps3)); ps3_input_t *ps3 = (ps3_input_t*)calloc(1, sizeof(*ps3));
if (!ps3) if (!ps3)
return NULL; return NULL;
ps3->joypad = input_joypad_init_driver(settings->input.joypad_driver, ps3); ps3->joypad = input_joypad_init_driver(joypad_driver, ps3);
if (ps3->joypad) if (ps3->joypad)
ps3->joypad->init(ps3); ps3->joypad->init(ps3);

View file

@ -40,9 +40,9 @@
#include "../../defines/psp_defines.h" #include "../../defines/psp_defines.h"
#include "../../configuration.h"
#include "../input_joypad_driver.h"
#include "../input_config.h" #include "../input_config.h"
#include "../input_driver.h"
#include "../input_joypad_driver.h"
typedef struct psp_input typedef struct psp_input
{ {
@ -97,15 +97,13 @@ static void psp_input_free_input(void *data)
free(data); free(data);
} }
static void* psp_input_initialize(void) static void* psp_input_initialize(const char *joypad_driver)
{ {
settings_t *settings = config_get_ptr();
psp_input_t *psp = (psp_input_t*)calloc(1, sizeof(*psp)); psp_input_t *psp = (psp_input_t*)calloc(1, sizeof(*psp));
if (!psp) if (!psp)
return NULL; return NULL;
psp->joypad = input_joypad_init_driver( psp->joypad = input_joypad_init_driver(joypad_driver, psp);
settings->input.joypad_driver, psp);
return psp; return psp;
} }

View file

@ -27,9 +27,10 @@
#include "../../config.h" #include "../../config.h"
#endif #endif
#include "../../gfx/video_driver.h" #include "../input_driver.h"
#include "../../configuration.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
#include "../../gfx/video_driver.h"
#include "../../tasks/tasks_internal.h" #include "../../tasks/tasks_internal.h"
#include "../../command.h" #include "../../command.h"
@ -648,10 +649,9 @@ static void qnx_handle_navigator_event(
return; return;
} }
static void *qnx_input_init(void) static void *qnx_input_init(const char *joypad_driver)
{ {
int i; int i;
settings_t *settings = config_get_ptr();
qnx_input_t *qnx = (qnx_input_t*)calloc(1, sizeof(*qnx)); qnx_input_t *qnx = (qnx_input_t*)calloc(1, sizeof(*qnx));
if (!qnx) if (!qnx)
@ -665,8 +665,7 @@ static void *qnx_input_init(void)
qnx->touch_map[i] = -1; qnx->touch_map[i] = -1;
} }
qnx->joypad = input_joypad_init_driver( qnx->joypad = input_joypad_init_driver(joypad_driver, qnx);
settings->input.joypad_driver, qnx);
for (i = 0; i < MAX_PADS; ++i) for (i = 0; i < MAX_PADS; ++i)
{ {

View file

@ -19,10 +19,11 @@
#include <boolean.h> #include <boolean.h>
#include "../input_joypad_driver.h"
#include "../input_keyboard.h"
#include "../input_config.h" #include "../input_config.h"
#include "../input_keyboard.h"
#include "../input_keymaps.h" #include "../input_keymaps.h"
#include "../input_driver.h"
#include "../input_joypad_driver.h"
#include "../../tasks/tasks_internal.h" #include "../../tasks/tasks_internal.h"
#include "../../configuration.h" #include "../../configuration.h"
@ -47,7 +48,7 @@ typedef struct rwebinput_input
int context; int context;
} rwebinput_input_t; } rwebinput_input_t;
static void *rwebinput_input_init(void) static void *rwebinput_input_init(const char *joypad_driver)
{ {
rwebinput_input_t *rwebinput = (rwebinput_input_t*)calloc(1, sizeof(*rwebinput)); rwebinput_input_t *rwebinput = (rwebinput_input_t*)calloc(1, sizeof(*rwebinput));
if (!rwebinput) if (!rwebinput)

View file

@ -21,18 +21,18 @@
#include <string/stdstring.h> #include <string/stdstring.h>
#include <libretro.h> #include <libretro.h>
#include "../../configuration.h"
#include "SDL.h" #include "SDL.h"
#include "../../gfx/video_context_driver.h"
#include "../../configuration.h"
#include "../../verbosity.h"
#include "../../tasks/tasks_internal.h"
#include "../input_config.h" #include "../input_config.h"
#include "../input_driver.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
#include "../input_keymaps.h" #include "../input_keymaps.h"
#include "../input_keyboard.h" #include "../input_keyboard.h"
#include "../../gfx/video_context_driver.h"
#include "../../verbosity.h"
#include "../../tasks/tasks_internal.h"
typedef struct sdl_input typedef struct sdl_input
{ {
bool blocked; bool blocked;
@ -43,16 +43,15 @@ typedef struct sdl_input
int mouse_l, mouse_r, mouse_m, mouse_wu, mouse_wd, mouse_wl, mouse_wr; int mouse_l, mouse_r, mouse_m, mouse_wu, mouse_wd, mouse_wl, mouse_wr;
} sdl_input_t; } sdl_input_t;
static void *sdl_input_init(void) static void *sdl_input_init(const char *joypad_driver)
{ {
settings_t *settings = config_get_ptr();
sdl_input_t *sdl = (sdl_input_t*)calloc(1, sizeof(*sdl)); sdl_input_t *sdl = (sdl_input_t*)calloc(1, sizeof(*sdl));
if (!sdl) if (!sdl)
return NULL; return NULL;
input_keymaps_init_keyboard_lut(rarch_key_map_sdl); input_keymaps_init_keyboard_lut(rarch_key_map_sdl);
sdl->joypad = input_joypad_init_driver(settings->input.joypad_driver, sdl); sdl->joypad = input_joypad_init_driver(joypad_driver, sdl);
RARCH_LOG("[SDL]: Input driver initialized.\n"); RARCH_LOG("[SDL]: Input driver initialized.\n");
return sdl; return sdl;
@ -134,17 +133,13 @@ static int16_t sdl_joypad_device_state(sdl_input_t *sdl,
return 0; return 0;
} }
static int16_t sdl_analog_device_state(sdl_input_t *sdl, const struct retro_keybind **binds, static int16_t sdl_analog_device_state(sdl_input_t *sdl,
rarch_joypad_info_t joypad_info,
const struct retro_keybind **binds,
unsigned port_num, unsigned idx, unsigned id) unsigned port_num, unsigned idx, unsigned id)
{ {
rarch_joypad_info_t joypad_info;
settings_t *settings = config_get_ptr();
int16_t ret = binds[port_num] ? sdl_analog_pressed(sdl, binds[port_num], idx, id) : 0; int16_t ret = binds[port_num] ? sdl_analog_pressed(sdl, binds[port_num], idx, id) : 0;
joypad_info.joy_idx = port_num;
joypad_info.auto_binds = settings->input.autoconf_binds[port_num];
joypad_info.axis_threshold = settings->input.axis_threshold;
if (!ret && binds[port_num]) if (!ret && binds[port_num])
ret = input_joypad_analog(sdl->joypad, joypad_info, port_num, idx, id, binds[port_num]); ret = input_joypad_analog(sdl->joypad, joypad_info, port_num, idx, id, binds[port_num]);
return ret; return ret;
@ -249,7 +244,7 @@ static int16_t sdl_input_state(void *data_,
case RETRO_DEVICE_JOYPAD: case RETRO_DEVICE_JOYPAD:
return sdl_joypad_device_state(data, joypad_info, binds, port, id, &type); return sdl_joypad_device_state(data, joypad_info, binds, port, id, &type);
case RETRO_DEVICE_ANALOG: case RETRO_DEVICE_ANALOG:
return sdl_analog_device_state(data, binds, port, idx, id); return sdl_analog_device_state(data, joypad_info, binds, port, idx, id);
case RETRO_DEVICE_MOUSE: case RETRO_DEVICE_MOUSE:
return sdl_mouse_device_state(data, id); return sdl_mouse_device_state(data, id);
case RETRO_DEVICE_POINTER: case RETRO_DEVICE_POINTER:

View file

@ -39,17 +39,17 @@
#include <compat/strl.h> #include <compat/strl.h>
#include <string/stdstring.h> #include <string/stdstring.h>
#include "../input_config.h"
#include "../input_driver.h"
#include "../input_joypad_driver.h"
#include "../input_keymaps.h"
#include "../drivers_keyboard/keyboard_event_udev.h" #include "../drivers_keyboard/keyboard_event_udev.h"
#include "../../gfx/video_driver.h" #include "../../gfx/video_driver.h"
#include "../common/linux_common.h" #include "../common/linux_common.h"
#include "../common/udev_common.h" #include "../common/udev_common.h"
#include "../common/epoll_common.h" #include "../common/epoll_common.h"
#include "../input_config.h"
#include "../input_joypad_driver.h"
#include "../input_keymaps.h"
#include "../../configuration.h"
#include "../../verbosity.h" #include "../../verbosity.h"
typedef struct udev_input udev_input_t; typedef struct udev_input udev_input_t;
@ -606,9 +606,8 @@ static bool open_devices(udev_input_t *udev, const char *type, device_handle_cb
return true; return true;
} }
static void *udev_input_init(void) static void *udev_input_init(const char *joypad_driver)
{ {
settings_t *settings = config_get_ptr();
udev_input_t *udev = (udev_input_t*)calloc(1, sizeof(*udev)); udev_input_t *udev = (udev_input_t*)calloc(1, sizeof(*udev));
if (!udev) if (!udev)
@ -662,7 +661,7 @@ static void *udev_input_init(void)
if (!udev->num_devices) if (!udev->num_devices)
RARCH_WARN("[udev]: Couldn't open any keyboard, mouse or touchpad. Are permissions set correctly for /dev/input/event*?\n"); RARCH_WARN("[udev]: Couldn't open any keyboard, mouse or touchpad. Are permissions set correctly for /dev/input/event*?\n");
udev->joypad = input_joypad_init_driver(settings->input.joypad_driver, udev); udev->joypad = input_joypad_init_driver(joypad_driver, udev);
input_keymaps_init_keyboard_lut(rarch_key_map_linux); input_keymaps_init_keyboard_lut(rarch_key_map_linux);
linux_terminal_disable_input(); linux_terminal_disable_input();

View file

@ -23,8 +23,8 @@
#include "../../config.h" #include "../../config.h"
#endif #endif
#include "../../configuration.h"
#include "../input_config.h" #include "../input_config.h"
#include "../input_driver.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
#include "wiiu_dbg.h" #include "wiiu_dbg.h"
@ -82,15 +82,14 @@ static void wiiu_input_free_input(void *data)
free(data); free(data);
} }
static void* wiiu_input_initialize(void) static void* wiiu_input_init(const char *joypad_driver)
{ {
settings_t *settings = config_get_ptr();
wiiu_input_t *wiiu = (wiiu_input_t*)calloc(1, sizeof(*wiiu)); wiiu_input_t *wiiu = (wiiu_input_t*)calloc(1, sizeof(*wiiu));
if (!wiiu) if (!wiiu)
return NULL; return NULL;
DEBUG_STR(settings->input.joypad_driver); DEBUG_STR(joypad_driver);
wiiu->joypad = input_joypad_init_driver(settings->input.joypad_driver, wiiu); wiiu->joypad = input_joypad_init_driver(joypad_driver, wiiu);
return wiiu; return wiiu;
} }
@ -152,7 +151,7 @@ static void wiiu_input_keyboard_mapping_set_block(void *data, bool value)
} }
input_driver_t input_wiiu = { input_driver_t input_wiiu = {
wiiu_input_initialize, wiiu_input_init,
wiiu_input_poll, wiiu_input_poll,
wiiu_input_state, wiiu_input_state,
wiiu_input_meta_key_pressed, wiiu_input_meta_key_pressed,

View file

@ -29,7 +29,6 @@
#include "../../gfx/video_driver.h" #include "../../gfx/video_driver.h"
#include "../common/input_x11_common.h" #include "../common/input_x11_common.h"
#include "../../configuration.h"
#include "../../verbosity.h" #include "../../verbosity.h"
typedef struct x11_input typedef struct x11_input
@ -49,10 +48,9 @@ typedef struct x11_input
} x11_input_t; } x11_input_t;
static void *x_input_init(void) static void *x_input_init(const char *joypad_driver)
{ {
x11_input_t *x11; x11_input_t *x11;
settings_t *settings = config_get_ptr();
if (video_driver_display_type_get() != RARCH_DISPLAY_X11) if (video_driver_display_type_get() != RARCH_DISPLAY_X11)
{ {
@ -68,7 +66,7 @@ static void *x_input_init(void)
x11->display = (Display*)video_driver_display_get(); x11->display = (Display*)video_driver_display_get();
x11->win = (Window)video_driver_window_get(); x11->win = (Window)video_driver_window_get();
x11->joypad = input_joypad_init_driver(settings->input.joypad_driver, x11); x11->joypad = input_joypad_init_driver(joypad_driver, x11);
input_keymaps_init_keyboard_lut(rarch_key_map_x11); input_keymaps_init_keyboard_lut(rarch_key_map_x11);
return x11; return x11;

View file

@ -28,8 +28,8 @@
#include <boolean.h> #include <boolean.h>
#include <libretro.h> #include <libretro.h>
#include "../input_driver.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
#include "../../configuration.h"
#define MAX_PADS 4 #define MAX_PADS 4
@ -84,14 +84,13 @@ static void xdk_input_free_input(void *data)
free(xdk); free(xdk);
} }
static void *xdk_input_init(void) static void *xdk_input_init(const char *joypad_driver)
{ {
settings_t *settings = config_get_ptr();
xdk_input_t *xdk = (xdk_input_t*)calloc(1, sizeof(*xdk)); xdk_input_t *xdk = (xdk_input_t*)calloc(1, sizeof(*xdk));
if (!xdk) if (!xdk)
return NULL; return NULL;
xdk->joypad = input_joypad_init_driver(settings->input.joypad_driver, xdk); xdk->joypad = input_joypad_init_driver(joypad_driver, xdk);
return xdk; return xdk;
} }

View file

@ -23,6 +23,7 @@
#include <libretro.h> #include <libretro.h>
#include "../input_driver.h"
#include "../input_joypad_driver.h" #include "../input_joypad_driver.h"
#define MAX_PADS 4 #define MAX_PADS 4
@ -85,7 +86,7 @@ static void xenon360_input_free_input(void *data)
(void)data; (void)data;
} }
static void* xenon360_input_init(void) static void* xenon360_input_init(const char *joypad_driver)
{ {
return (void*)-1; return (void*)-1;
} }

View file

@ -892,7 +892,10 @@ void input_driver_poll(void)
bool input_driver_init(void) bool input_driver_init(void)
{ {
if (current_input) if (current_input)
current_input_data = current_input->init(); {
settings_t *settings = config_get_ptr();
current_input_data = current_input->init(settings->input.joypad_driver);
}
if (!current_input_data) if (!current_input_data)
return false; return false;

View file

@ -71,7 +71,7 @@ struct retro_keybind
typedef struct input_driver typedef struct input_driver
{ {
void *(*init)(void); void *(*init)(const char *joypad_driver);
void (*poll)(void *data); void (*poll)(void *data);
int16_t (*input_state)(void *data, int16_t (*input_state)(void *data,
rarch_joypad_info_t joypad_info, rarch_joypad_info_t joypad_info,