From 660641f328d4e4e2208f35b16d71b0dfcedff9a6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 3 Jun 2015 18:22:54 +0200 Subject: [PATCH] Pass handle to input driver to joypad driver's init function --- input/drivers/android_input.c | 2 +- input/drivers/cocoa_input.c | 2 +- input/drivers/ctr_input.c | 2 +- input/drivers/dinput.c | 4 ++-- input/drivers/gx_input.c | 2 +- input/drivers/linuxraw_input.c | 3 ++- input/drivers/ps3_input.c | 2 +- input/drivers/psp_input.c | 3 ++- input/drivers/qnx_input.c | 2 +- input/drivers/sdl_input.c | 2 +- input/drivers/udev_input.c | 2 +- input/drivers/x11_input.c | 2 +- input/drivers/xdk_xinput_input.c | 2 +- input/drivers_joypad/android_joypad.c | 4 +++- input/drivers_joypad/ctr_joypad.c | 4 +++- input/drivers_joypad/dinput_joypad.c | 4 +++- input/drivers_joypad/gx_joypad.c | 4 +++- input/drivers_joypad/hid_joypad.c | 4 +++- input/drivers_joypad/linuxraw_joypad.c | 4 +++- input/drivers_joypad/null_joypad.c | 3 ++- input/drivers_joypad/parport_joypad.c | 4 +++- input/drivers_joypad/ps3_joypad.c | 4 +++- input/drivers_joypad/psp_joypad.c | 4 +++- input/drivers_joypad/qnx_joypad.c | 4 +++- input/drivers_joypad/sdl_joypad.c | 4 +++- input/drivers_joypad/udev_joypad.c | 4 +++- input/drivers_joypad/xdk_joypad.c | 3 ++- input/drivers_joypad/xinput_joypad.c | 4 +++- input/input_joypad_driver.c | 12 ++++++------ input/input_joypad_driver.h | 6 +++--- tools/retroarch-joyconfig.c | 2 +- 31 files changed, 69 insertions(+), 39 deletions(-) diff --git a/input/drivers/android_input.c b/input/drivers/android_input.c index 7d6e2f0e4a..e0ff133ee2 100644 --- a/input/drivers/android_input.c +++ b/input/drivers/android_input.c @@ -438,7 +438,7 @@ static void *android_input_init(void) return NULL; android->pads_connected = 0; - android->joypad = input_joypad_init_driver(settings->input.joypad_driver); + android->joypad = input_joypad_init_driver(settings->input.joypad_driver, android); frontend_android_get_version_sdk(&sdk); diff --git a/input/drivers/cocoa_input.c b/input/drivers/cocoa_input.c index f148543b19..3cff350b9c 100644 --- a/input/drivers/cocoa_input.c +++ b/input/drivers/cocoa_input.c @@ -238,7 +238,7 @@ static void *cocoa_input_init(void) input_keymaps_init_keyboard_lut(rarch_key_map_apple_hid); - apple->joypad = input_joypad_init_driver(settings->input.joypad_driver); + apple->joypad = input_joypad_init_driver(settings->input.joypad_driver, apple); return apple; } diff --git a/input/drivers/ctr_input.c b/input/drivers/ctr_input.c index 9b5f580674..204fc2a5e6 100644 --- a/input/drivers/ctr_input.c +++ b/input/drivers/ctr_input.c @@ -74,7 +74,7 @@ static void* ctr_input_initialize(void) if (!ctr) return NULL; - ctr->joypad = input_joypad_init_driver(settings->input.joypad_driver); + ctr->joypad = input_joypad_init_driver(settings->input.joypad_driver, ctr); return ctr; } diff --git a/input/drivers/dinput.c b/input/drivers/dinput.c index 1c7f227a1b..d3ad106f27 100644 --- a/input/drivers/dinput.c +++ b/input/drivers/dinput.c @@ -165,7 +165,7 @@ static void *dinput_init(void) } input_keymaps_init_keyboard_lut(rarch_key_map_dinput); - di->joypad = input_joypad_init_driver(settings->input.joypad_driver); + di->joypad = input_joypad_init_driver(settings->input.joypad_driver, di); return di; } @@ -576,7 +576,7 @@ bool dinput_handle_message(void *dinput, UINT message, WPARAM wParam, LPARAM lPa { if (di->joypad) di->joypad->destroy(); - di->joypad = input_joypad_init_driver(settings->input.joypad_driver); + di->joypad = input_joypad_init_driver(settings->input.joypad_driver, di); break; } case WM_MOUSEWHEEL: diff --git a/input/drivers/gx_input.c b/input/drivers/gx_input.c index 89372a095a..803a842670 100644 --- a/input/drivers/gx_input.c +++ b/input/drivers/gx_input.c @@ -75,7 +75,7 @@ static void *gx_input_init(void) if (!gx) return NULL; - gx->joypad = input_joypad_init_driver(settings->input.joypad_driver); + gx->joypad = input_joypad_init_driver(settings->input.joypad_driver, gx); return gx; } diff --git a/input/drivers/linuxraw_input.c b/input/drivers/linuxraw_input.c index fa37559c8a..16d09232fb 100644 --- a/input/drivers/linuxraw_input.c +++ b/input/drivers/linuxraw_input.c @@ -116,7 +116,8 @@ static void *linuxraw_input_init(void) atexit(linuxraw_reset_kbmd); - linuxraw->joypad = input_joypad_init_driver(settings->input.joypad_driver); + linuxraw->joypad = input_joypad_init_driver( + settings->input.joypad_driver, linuxraw); input_keymaps_init_keyboard_lut(rarch_key_map_linux); /* We need to disable use of stdin command interface if diff --git a/input/drivers/ps3_input.c b/input/drivers/ps3_input.c index f85e585d3c..0bfb0adccf 100644 --- a/input/drivers/ps3_input.c +++ b/input/drivers/ps3_input.c @@ -161,7 +161,7 @@ static void* ps3_input_init(void) if (!ps3) return NULL; - ps3->joypad = input_joypad_init_driver(settings->input.joypad_driver); + ps3->joypad = input_joypad_init_driver(settings->input.joypad_driver, ps3); if (ps3->joypad) ps3->joypad->init(); diff --git a/input/drivers/psp_input.c b/input/drivers/psp_input.c index e7bf88d87f..dc34e15eef 100644 --- a/input/drivers/psp_input.c +++ b/input/drivers/psp_input.c @@ -87,7 +87,8 @@ static void* psp_input_initialize(void) if (!psp) return NULL; - psp->joypad = input_joypad_init_driver(settings->input.joypad_driver); + psp->joypad = input_joypad_init_driver( + settings->input.joypad_driver, psp); return psp; } diff --git a/input/drivers/qnx_input.c b/input/drivers/qnx_input.c index bd574de33b..402b038a70 100644 --- a/input/drivers/qnx_input.c +++ b/input/drivers/qnx_input.c @@ -646,7 +646,7 @@ static void *qnx_input_init(void) } qnx->joypad = input_joypad_init_driver( - settings->input.joypad_driver); + settings->input.joypad_driver, qnx); for (i = 0; i < MAX_PADS; ++i) { diff --git a/input/drivers/sdl_input.c b/input/drivers/sdl_input.c index a25962efad..dac672c519 100644 --- a/input/drivers/sdl_input.c +++ b/input/drivers/sdl_input.c @@ -46,7 +46,7 @@ static void *sdl_input_init(void) if (!sdl) return NULL; - sdl->joypad = input_joypad_init_driver(settings->input.joypad_driver); + sdl->joypad = input_joypad_init_driver(settings->input.joypad_driver, sdl); RARCH_LOG("[SDL]: Input driver initialized.\n"); return sdl; diff --git a/input/drivers/udev_input.c b/input/drivers/udev_input.c index cb3d87d6a8..f178490c72 100644 --- a/input/drivers/udev_input.c +++ b/input/drivers/udev_input.c @@ -816,7 +816,7 @@ static void *udev_input_init(void) if (!udev->num_devices) 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->joypad = input_joypad_init_driver(settings->input.joypad_driver, udev); input_keymaps_init_keyboard_lut(rarch_key_map_linux); disable_terminal_input(); diff --git a/input/drivers/x11_input.c b/input/drivers/x11_input.c index d4640c1591..40e8102c4d 100644 --- a/input/drivers/x11_input.c +++ b/input/drivers/x11_input.c @@ -64,7 +64,7 @@ static void *x_input_init(void) x11->display = (Display*)driver->video_display; x11->win = (Window)driver->video_window; - x11->joypad = input_joypad_init_driver(settings->input.joypad_driver); + x11->joypad = input_joypad_init_driver(settings->input.joypad_driver, x11); input_keymaps_init_keyboard_lut(rarch_key_map_x11); return x11; diff --git a/input/drivers/xdk_xinput_input.c b/input/drivers/xdk_xinput_input.c index 6830bd6117..0d9f6f6855 100644 --- a/input/drivers/xdk_xinput_input.c +++ b/input/drivers/xdk_xinput_input.c @@ -80,7 +80,7 @@ static void *xdk_input_init(void) if (!xdk) return NULL; - xdk->joypad = input_joypad_init_driver(settings->input.joypad_driver); + xdk->joypad = input_joypad_init_driver(settings->input.joypad_driver, xdk); return xdk; } diff --git a/input/drivers_joypad/android_joypad.c b/input/drivers_joypad/android_joypad.c index bc28266b2f..ec6aaa890d 100644 --- a/input/drivers_joypad/android_joypad.c +++ b/input/drivers_joypad/android_joypad.c @@ -22,12 +22,14 @@ static const char *android_joypad_name(unsigned pad) return settings ? settings->input.device_names[pad] : NULL; } -static bool android_joypad_init(void) +static bool android_joypad_init(void *data) { unsigned autoconf_pad; settings_t *settings = config_get_ptr(); autoconfig_params_t params = {{0}}; + (void)data; + for (autoconf_pad = 0; autoconf_pad < MAX_USERS; autoconf_pad++) { strlcpy(settings->input.device_names[autoconf_pad], diff --git a/input/drivers_joypad/ctr_joypad.c b/input/drivers_joypad/ctr_joypad.c index b94be8c613..55036e371f 100644 --- a/input/drivers_joypad/ctr_joypad.c +++ b/input/drivers_joypad/ctr_joypad.c @@ -51,10 +51,12 @@ static void ctr_joypad_autodetect_add(unsigned autoconf_pad) input_config_autoconfigure_joypad(¶ms); } -static bool ctr_joypad_init(void) +static bool ctr_joypad_init(void *data) { ctr_joypad_autodetect_add(0); + (void)data; + return true; } diff --git a/input/drivers_joypad/dinput_joypad.c b/input/drivers_joypad/dinput_joypad.c index d7c880e603..286fef4b11 100644 --- a/input/drivers_joypad/dinput_joypad.c +++ b/input/drivers_joypad/dinput_joypad.c @@ -240,10 +240,12 @@ enum_iteration_done: return DIENUM_CONTINUE; } -static bool dinput_joypad_init(void) +static bool dinput_joypad_init(void *data) { unsigned i; + (void)data; + if (!dinput_init_context()) return false; diff --git a/input/drivers_joypad/gx_joypad.c b/input/drivers_joypad/gx_joypad.c index b1a86cd443..3041405192 100644 --- a/input/drivers_joypad/gx_joypad.c +++ b/input/drivers_joypad/gx_joypad.c @@ -558,13 +558,15 @@ static void gx_joypad_poll(void) *lifecycle_state |= (1ULL << RARCH_MENU_TOGGLE); } -static bool gx_joypad_init(void) +static bool gx_joypad_init(void *data) { SYS_SetResetCallback(reset_cb); #ifdef HW_RVL SYS_SetPowerCallback(power_callback); #endif + (void)data; + PAD_Init(); #ifdef HW_RVL WPADInit(); diff --git a/input/drivers_joypad/hid_joypad.c b/input/drivers_joypad/hid_joypad.c index 770ea941c3..6037851a48 100644 --- a/input/drivers_joypad/hid_joypad.c +++ b/input/drivers_joypad/hid_joypad.c @@ -21,12 +21,14 @@ static const hid_driver_t *generic_hid; -static bool hid_joypad_init(void) +static bool hid_joypad_init(void *data) { generic_hid = input_hid_init_first(); if (!generic_hid) return false; + (void)data; + return true; } diff --git a/input/drivers_joypad/linuxraw_joypad.c b/input/drivers_joypad/linuxraw_joypad.c index 4269ba58f3..0ae41b7bd0 100644 --- a/input/drivers_joypad/linuxraw_joypad.c +++ b/input/drivers_joypad/linuxraw_joypad.c @@ -217,7 +217,7 @@ static void linuxraw_joypad_setup_notify(void) inotify_add_watch(g_notify, "/dev/input", IN_DELETE | IN_CREATE | IN_ATTRIB); } -static bool linuxraw_joypad_init(void) +static bool linuxraw_joypad_init(void *data) { unsigned i; settings_t *settings = config_get_ptr(); @@ -226,6 +226,8 @@ static bool linuxraw_joypad_init(void) if (g_epoll < 0) return false; + (void)data; + for (i = 0; i < MAX_USERS; i++) { char path[PATH_MAX_LENGTH]; diff --git a/input/drivers_joypad/null_joypad.c b/input/drivers_joypad/null_joypad.c index 3c4d1e877d..90438b2695 100644 --- a/input/drivers_joypad/null_joypad.c +++ b/input/drivers_joypad/null_joypad.c @@ -25,8 +25,9 @@ static const char *null_joypad_name(unsigned pad) return "null"; } -static bool null_joypad_init(void) +static bool null_joypad_init(void *data) { + (void)data; return true; } diff --git a/input/drivers_joypad/parport_joypad.c b/input/drivers_joypad/parport_joypad.c index 2cac1f76f0..3a8f4018b5 100644 --- a/input/drivers_joypad/parport_joypad.c +++ b/input/drivers_joypad/parport_joypad.c @@ -223,7 +223,7 @@ static void parport_free_pad(struct parport_joypad *pad) pad->fd = -1; } -static bool parport_joypad_init(void) +static bool parport_joypad_init(void *data) { unsigned i, j; bool found_enabled_button; @@ -233,6 +233,8 @@ static bool parport_joypad_init(void) settings_t *settings = config_get_ptr(); autoconfig_params_t params = {{0}}; + (void)data; + memset(buf, 0, PARPORT_NUM_BUTTONS * 3 + 1); for (i = 0; i < MAX_USERS; i++) diff --git a/input/drivers_joypad/ps3_joypad.c b/input/drivers_joypad/ps3_joypad.c index 85adac0f0e..509df63a8d 100644 --- a/input/drivers_joypad/ps3_joypad.c +++ b/input/drivers_joypad/ps3_joypad.c @@ -53,8 +53,10 @@ static void ps3_joypad_autodetect_add(unsigned autoconf_pad) input_config_autoconfigure_joypad(¶ms); } -static bool ps3_joypad_init(void) +static bool ps3_joypad_init(void *data) { + (void)data; + cellPadInit(MAX_PADS); return true; diff --git a/input/drivers_joypad/psp_joypad.c b/input/drivers_joypad/psp_joypad.c index 73f4380c7c..b78f18224c 100644 --- a/input/drivers_joypad/psp_joypad.c +++ b/input/drivers_joypad/psp_joypad.c @@ -40,8 +40,10 @@ static void psp_joypad_autodetect_add(unsigned autoconf_pad) input_config_autoconfigure_joypad(¶ms); } -static bool psp_joypad_init(void) +static bool psp_joypad_init(void *data) { + (void)data; + psp_joypad_autodetect_add(0); return true; diff --git a/input/drivers_joypad/qnx_joypad.c b/input/drivers_joypad/qnx_joypad.c index f6effcc933..2775e8eabe 100644 --- a/input/drivers_joypad/qnx_joypad.c +++ b/input/drivers_joypad/qnx_joypad.c @@ -23,11 +23,13 @@ static const char *qnx_joypad_name(unsigned pad) return settings ? settings->input.device_names[pad] : NULL; } -static bool qnx_joypad_init(void) +static bool qnx_joypad_init(void *data) { unsigned autoconf_pad; settings_t *settings = config_get_ptr(); + (void)data; + for (autoconf_pad = 0; autoconf_pad < MAX_USERS; autoconf_pad++) { autoconfig_params_t params = {{0}}; diff --git a/input/drivers_joypad/sdl_joypad.c b/input/drivers_joypad/sdl_joypad.c index 12402bc128..5c6074f3cd 100644 --- a/input/drivers_joypad/sdl_joypad.c +++ b/input/drivers_joypad/sdl_joypad.c @@ -227,10 +227,12 @@ static void sdl_joypad_destroy(void) memset(sdl_pads, 0, sizeof(sdl_pads)); } -static bool sdl_joypad_init(void) +static bool sdl_joypad_init(void *data) { unsigned i, num_sticks; + (void)data; + if (SDL_WasInit(0) == 0) { if (SDL_Init(g_subsystem) < 0) diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c index 8ab8f36e40..3c4e70b0e1 100644 --- a/input/drivers_joypad/udev_joypad.c +++ b/input/drivers_joypad/udev_joypad.c @@ -503,7 +503,7 @@ static void udev_joypad_destroy(void) g_udev = NULL; } -static bool udev_joypad_init(void) +static bool udev_joypad_init(void *data) { unsigned i; struct udev_list_entry *devs = NULL; @@ -511,6 +511,8 @@ static bool udev_joypad_init(void) struct udev_enumerate *enumerate = NULL; settings_t *settings = config_get_ptr(); + (void)data; + for (i = 0; i < MAX_USERS; i++) { udev_pads[i].fd = -1; diff --git a/input/drivers_joypad/xdk_joypad.c b/input/drivers_joypad/xdk_joypad.c index ee485844b0..a0b55fd16e 100644 --- a/input/drivers_joypad/xdk_joypad.c +++ b/input/drivers_joypad/xdk_joypad.c @@ -55,7 +55,7 @@ static void xdk_joypad_autodetect_add(unsigned autoconf_pad) input_config_autoconfigure_joypad(¶ms); } -static bool xdk_joypad_init(void) +static bool xdk_joypad_init(void *data) { #ifdef _XBOX1 XInitDevices(0, NULL); @@ -65,6 +65,7 @@ static bool xdk_joypad_init(void) xdk_joypad_autodetect_add(autoconf_pad); #endif + (void)data; return true; } diff --git a/input/drivers_joypad/xinput_joypad.c b/input/drivers_joypad/xinput_joypad.c index cf0697eb6f..ef8628d06f 100644 --- a/input/drivers_joypad/xinput_joypad.c +++ b/input/drivers_joypad/xinput_joypad.c @@ -150,13 +150,15 @@ const char *xinput_joypad_name(unsigned pad) return XBOX_CONTROLLER_NAMES[xuser]; } -static bool xinput_joypad_init(void) +static bool xinput_joypad_init(void *data) { unsigned i, autoconf_pad; XINPUT_STATE dummy_state; const char *version = "1.4"; settings_t *settings = config_get_ptr(); + (void)data; + g_xinput_dll = NULL; /* Find the correct path to load the DLL from. diff --git a/input/input_joypad_driver.c b/input/input_joypad_driver.c index a2e3381dbf..0636852500 100644 --- a/input/input_joypad_driver.c +++ b/input/input_joypad_driver.c @@ -152,16 +152,16 @@ const char* config_get_joypad_driver_options(void) * * Returns: joypad driver if found, otherwise NULL. **/ -const input_device_driver_t *input_joypad_init_driver(const char *ident) +const input_device_driver_t *input_joypad_init_driver(const char *ident, void *data) { unsigned i; if (!ident || !*ident) - return input_joypad_init_first(); + return input_joypad_init_first(data); for (i = 0; joypad_drivers[i]; i++) { if (strcmp(ident, joypad_drivers[i]->ident) == 0 - && joypad_drivers[i]->init()) + && joypad_drivers[i]->init(data)) { RARCH_LOG("Found joypad driver: \"%s\".\n", joypad_drivers[i]->ident); @@ -169,7 +169,7 @@ const input_device_driver_t *input_joypad_init_driver(const char *ident) } } - return input_joypad_init_first(); + return input_joypad_init_first(data); } /** @@ -179,13 +179,13 @@ const input_device_driver_t *input_joypad_init_driver(const char *ident) * * Returns: joypad driver if found, otherwise NULL. **/ -const input_device_driver_t *input_joypad_init_first(void) +const input_device_driver_t *input_joypad_init_first(void *data) { unsigned i; for (i = 0; joypad_drivers[i]; i++) { - if (joypad_drivers[i]->init()) + if (joypad_drivers[i]->init(data)) { RARCH_LOG("Found joypad driver: \"%s\".\n", joypad_drivers[i]->ident); diff --git a/input/input_joypad_driver.h b/input/input_joypad_driver.h index 3927ac4ab3..94f1c7f398 100644 --- a/input/input_joypad_driver.h +++ b/input/input_joypad_driver.h @@ -31,7 +31,7 @@ enum retro_rumble_effect; struct rarch_joypad_driver { - bool (*init)(void); + bool (*init)(void *data); bool (*query_pad)(unsigned); void (*destroy)(void); bool (*button)(unsigned, uint16_t); @@ -98,7 +98,7 @@ const char* config_get_joypad_driver_options(void); * * Returns: joypad driver if found, otherwise NULL. **/ -const input_device_driver_t *input_joypad_init_driver(const char *ident); +const input_device_driver_t *input_joypad_init_driver(const char *ident, void *data); /** * input_joypad_init_first: @@ -107,7 +107,7 @@ const input_device_driver_t *input_joypad_init_driver(const char *ident); * * Returns: joypad driver if found, otherwise NULL. **/ -const input_device_driver_t *input_joypad_init_first(void); +const input_device_driver_t *input_joypad_init_first(void *data); #ifdef __cplusplus } diff --git a/tools/retroarch-joyconfig.c b/tools/retroarch-joyconfig.c index c939f204fb..b009884a51 100644 --- a/tools/retroarch-joyconfig.c +++ b/tools/retroarch-joyconfig.c @@ -124,7 +124,7 @@ static void get_binds(config_file_t *conf, config_file_t *auto_conf, int player, int joypad) { int i, timeout_cnt; - const input_device_driver_t *driver = input_joypad_init_driver(g_driver); + const input_device_driver_t *driver = input_joypad_init_driver(g_driver, NULL); if (!driver) { fprintf(stderr, "Cannot find any valid input driver.\n");