From 103042de969401fa00a819ec9c8e84e975674fcd Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 31 Dec 2016 07:43:34 +0100 Subject: [PATCH] Rewrite task_autodetect.c --- input/drivers/android_input.c | 17 +++---- input/drivers/qnx_input.c | 20 ++++----- input/drivers_hid/iohidmanager_hid.c | 19 ++++---- input/drivers_hid/libusb_hid.c | 19 ++++---- input/drivers_hid/wiiusb_hid.c | 22 +++------- input/drivers_joypad/ctr_joypad.c | 20 ++++----- input/drivers_joypad/dinput_joypad.c | 18 ++------ input/drivers_joypad/gx_joypad.c | 20 ++++----- input/drivers_joypad/linuxraw_joypad.c | 61 +++++++++++++------------- input/drivers_joypad/parport_joypad.c | 17 ++++--- input/drivers_joypad/ps3_joypad.c | 20 ++++----- input/drivers_joypad/psp_joypad.c | 20 ++++----- input/drivers_joypad/qnx_joypad.c | 22 ++++------ input/drivers_joypad/sdl_joypad.c | 16 +++---- input/drivers_joypad/udev_joypad.c | 18 +++----- input/drivers_joypad/wiiu_joypad.c | 20 ++++----- input/drivers_joypad/xdk_joypad.c | 19 +++----- input/drivers_joypad/xinput_joypad.c | 20 +++------ tasks/task_autodetect.c | 46 ++++++++++++++----- tasks/tasks_internal.h | 18 +++----- 20 files changed, 198 insertions(+), 254 deletions(-) diff --git a/input/drivers/android_input.c b/input/drivers/android_input.c index bbf2da352d..483c58b887 100644 --- a/input/drivers/android_input.c +++ b/input/drivers/android_input.c @@ -642,7 +642,6 @@ static void handle_hotplug(android_input_data_t *android_data, char device_name[256]; char device_model[256]; char name_buf[256]; - autoconfig_params_t params; int vendorId = 0; int productId = 0; settings_t *settings = config_get_ptr(); @@ -890,15 +889,13 @@ static void handle_hotplug(android_input_data_t *android_data, if (*port < 0) *port = android_data->pads_connected; - strlcpy(params.name, name_buf, sizeof(params.name)); - - params.idx = *port; - params.vid = vendorId; - params.pid = productId; - params.display_name[0] = '\0'; - - strlcpy(params.driver, android_joypad.ident, sizeof(params.driver)); - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + name_buf, + NULL, + android_joypad.ident, + *port, + vendorId, + productId); if (!string_is_empty(name_buf)) { diff --git a/input/drivers/qnx_input.c b/input/drivers/qnx_input.c index 5eb23db6e3..76f9d08e58 100644 --- a/input/drivers/qnx_input.c +++ b/input/drivers/qnx_input.c @@ -207,19 +207,15 @@ static void qnx_input_autodetect_gamepad(qnx_input_t *qnx, if (!string_is_empty(name_buf)) { - autoconfig_params_t params = {{0}}; + input_autoconfigure_connect( + name_buf, + NULL, + qnx->joypad->ident, + port, + *controller->vid, + *controller->pid); - strlcpy(params.name, name_buf, sizeof(params.name)); - - params.idx = port; - params.vid = *controller->vid; - params.pid = *controller->pid; - - strlcpy(params.driver, qnx->joypad->ident, sizeof(params.driver)); - - input_autoconfigure_connect(¶ms); - - controller->port = port; + controller->port = port; qnx->port_device[port] = controller; qnx->pads_connected++; } diff --git a/input/drivers_hid/iohidmanager_hid.c b/input/drivers_hid/iohidmanager_hid.c index 08cb99bf5e..e5dd64162d 100644 --- a/input/drivers_hid/iohidmanager_hid.c +++ b/input/drivers_hid/iohidmanager_hid.c @@ -298,17 +298,14 @@ static void iohidmanager_hid_device_add_autodetect(unsigned idx, const char *device_name, const char *driver_name, uint16_t dev_vid, uint16_t dev_pid) { - autoconfig_params_t params; - - params.idx = idx; - params.vid = dev_vid; - params.pid = dev_pid; - params.display_name[0] = '\0'; - - strlcpy(params.name, device_name, sizeof(params.name)); - strlcpy(params.driver, driver_name, sizeof(params.driver)); - - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + device_name, + NULL, + driver_name, + idx, + dev_vid, + dev_pid + ); RARCH_LOG("Port %d: %s.\n", idx, device_name); } diff --git a/input/drivers_hid/libusb_hid.c b/input/drivers_hid/libusb_hid.c index 57420707e8..bacac30f63 100644 --- a/input/drivers_hid/libusb_hid.c +++ b/input/drivers_hid/libusb_hid.c @@ -141,17 +141,14 @@ static void libusb_hid_device_add_autodetect(unsigned idx, const char *device_name, const char *driver_name, uint16_t dev_vid, uint16_t dev_pid) { - autoconfig_params_t params; - - params.idx = idx; - params.vid = dev_vid; - params.pid = dev_pid; - params.display_name[0] = '\0'; - - strlcpy(params.name, device_name, sizeof(params.name)); - strlcpy(params.driver, driver_name, sizeof(params.driver)); - - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + device_name, + NULL, + driver_name, + idx, + dev_vid, + dev_pid + ); } static void libusb_get_description(struct libusb_device *device, diff --git a/input/drivers_hid/wiiusb_hid.c b/input/drivers_hid/wiiusb_hid.c index 5bc87687d9..e16e9c971b 100644 --- a/input/drivers_hid/wiiusb_hid.c +++ b/input/drivers_hid/wiiusb_hid.c @@ -140,21 +140,13 @@ static void wiiusb_hid_device_add_autodetect(unsigned idx, const char *device_name, const char *driver_name, uint16_t dev_vid, uint16_t dev_pid) { - autoconfig_params_t params; - - params.idx = idx; - params.vid = dev_vid; - params.pid = dev_pid; - params.display_name[0] = '\0'; - params.name[0] = '\0'; - params.driver[0] = '\0'; - - if (!string_is_empty(device_name)) - strlcpy(params.name, device_name, sizeof(params.name)); - if (!string_is_empty(driver_name)) - strlcpy(params.driver, driver_name, sizeof(params.driver)); - - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + device_name, + NULL, + driver_name, + idx, + dev_vid, + dev_pid); } static void wiiusb_get_description(usb_device_entry *device, diff --git a/input/drivers_joypad/ctr_joypad.c b/input/drivers_joypad/ctr_joypad.c index b759370dbb..1a1819bdb6 100644 --- a/input/drivers_joypad/ctr_joypad.c +++ b/input/drivers_joypad/ctr_joypad.c @@ -45,18 +45,14 @@ static const char *ctr_joypad_name(unsigned pad) static void ctr_joypad_autodetect_add(unsigned autoconf_pad) { - autoconfig_params_t params; - - /* TODO - implement VID/PID? */ - params.idx = autoconf_pad; - params.vid = 0; - params.pid = 0; - params.display_name[0] = '\0'; - - strlcpy(params.name, ctr_joypad_name(autoconf_pad), sizeof(params.name)); - strlcpy(params.driver, ctr_joypad.ident, sizeof(params.driver)); - - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + ctr_joypad_name(autoconf_pad), + NULL, + ctr_joypad.ident, + autoconf_pad, + 0, + 0 + ); } static bool ctr_joypad_init(void *data) diff --git a/input/drivers_joypad/dinput_joypad.c b/input/drivers_joypad/dinput_joypad.c index 20eefb84d4..b41748acb5 100644 --- a/input/drivers_joypad/dinput_joypad.c +++ b/input/drivers_joypad/dinput_joypad.c @@ -264,23 +264,13 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p) if (!is_xinput_pad) #endif { - autoconfig_params_t params; - - strlcpy(params.name, + input_autoconfigure_connect( dinput_joypad_name(g_joypad_cnt), - sizeof(params.name)); - strlcpy(params.display_name, dinput_joypad_friendly_name(g_joypad_cnt), - sizeof(params.driver)); - strlcpy(params.driver, dinput_joypad.ident, - sizeof(params.driver)); - - params.idx = g_joypad_cnt; - params.vid = dinput_joypad_vid(g_joypad_cnt); - params.pid = dinput_joypad_pid(g_joypad_cnt); - - input_autoconfigure_connect(¶ms); + g_joypad_cnt, + dinput_joypad_vid(g_joypad_cnt), + dinput_joypad_pid(g_joypad_cnt)); } #ifdef HAVE_XINPUT diff --git a/input/drivers_joypad/gx_joypad.c b/input/drivers_joypad/gx_joypad.c index d7ebcb667c..6a93b7c526 100644 --- a/input/drivers_joypad/gx_joypad.c +++ b/input/drivers_joypad/gx_joypad.c @@ -143,18 +143,14 @@ static void handle_hotplug(unsigned port, uint32_t ptype) pad_type[port] = ptype; if (ptype != WPAD_EXP_NOCONTROLLER) - { - autoconfig_params_t params; - - /* TODO - implement VID/PID? */ - params.idx = port; - params.vid = 0; - params.pid = 0; - params.display_name[0] = '\0'; - strlcpy(params.name, gx_joypad_name(port), sizeof(params.name)); - strlcpy(params.driver, gx_joypad.ident, sizeof(params.driver)); - input_autoconfigure_connect(¶ms); - } + input_autoconfigure_connect( + gx_joypad_name(port), + NULL, + gx_joypad.ident, + port, + 0, + 0 + ); } static bool gx_joypad_button(unsigned port, uint16_t key) diff --git a/input/drivers_joypad/linuxraw_joypad.c b/input/drivers_joypad/linuxraw_joypad.c index af81b02e04..fe4a6074fd 100644 --- a/input/drivers_joypad/linuxraw_joypad.c +++ b/input/drivers_joypad/linuxraw_joypad.c @@ -118,6 +118,14 @@ error: return false; } +static const char *linuxraw_joypad_name(unsigned pad) +{ + if (pad >= MAX_USERS || string_is_empty(linuxraw_pads[pad].ident)) + return NULL; + + return linuxraw_pads[pad].ident; +} + static void handle_plugged_pad(void) { int i, rc; @@ -136,7 +144,6 @@ static void handle_plugged_pad(void) for (i = 0; i < rc; i += event->len + sizeof(struct inotify_event)) { unsigned idx; - autoconfig_params_t params; event = (struct inotify_event*)&event_buf[i]; @@ -147,12 +154,6 @@ static void handle_plugged_pad(void) if (idx >= MAX_USERS) continue; - /* TODO - implement VID/PID? */ - params.display_name[0] = '\0'; - params.vid = 0; - params.pid = 0; - params.idx = idx; - if (event->mask & IN_DELETE) { if (linuxraw_pads[idx].fd >= 0) @@ -166,8 +167,13 @@ static void handle_plugged_pad(void) linuxraw_pads[idx].fd = -1; *linuxraw_pads[idx].ident = '\0'; - - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + NULL, + NULL, + linuxraw_joypad_name(idx), + idx, + 0, + 0); } } /* Sometimes, device will be created before access to it is established. */ @@ -182,10 +188,13 @@ static void handle_plugged_pad(void) if ( !string_is_empty(linuxraw_pads[idx].ident) && linuxraw_joypad_init_pad(path, &linuxraw_pads[idx])) { - strlcpy(params.name, linuxraw_pads[idx].ident, sizeof(params.name)); - strlcpy(params.driver, linuxraw_joypad.ident, sizeof(params.driver)); - - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + linuxraw_pads[idx].ident, + NULL, + linuxraw_joypad.ident, + idx, + 0, + 0); } } } @@ -226,29 +235,26 @@ static bool linuxraw_joypad_init(void *data) for (i = 0; i < MAX_USERS; i++) { char path[PATH_MAX_LENGTH]; - autoconfig_params_t params = {{0}}; struct linuxraw_joypad *pad = (struct linuxraw_joypad*)&linuxraw_pads[i]; settings_t *settings = config_get_ptr(); path[0] = '\0'; - params.idx = i; pad->fd = -1; pad->ident = settings->input.device_names[i]; snprintf(path, sizeof(path), "/dev/input/js%u", i); - if (linuxraw_joypad_init_pad(path, pad)) - { - strlcpy(params.name, pad->ident, sizeof(params.name)); - strlcpy(params.driver, "linuxraw", sizeof(params.driver)); + input_autoconfigure_connect( + pad->ident, + NULL, + "linuxraw", + i, + 0, + 0); - /* TODO - implement VID/PID? */ - input_autoconfigure_connect(¶ms); + if (linuxraw_joypad_init_pad(path, pad)) linuxraw_poll_pad(pad); - } - else - input_autoconfigure_connect(¶ms); } linuxraw_inotify = inotify_init(); @@ -337,13 +343,6 @@ static bool linuxraw_joypad_query_pad(unsigned pad) return pad < MAX_USERS && linuxraw_pads[pad].fd >= 0; } -static const char *linuxraw_joypad_name(unsigned pad) -{ - if (pad >= MAX_USERS || string_is_empty(linuxraw_pads[pad].ident)) - return NULL; - - return linuxraw_pads[pad].ident; -} input_device_driver_t linuxraw_joypad = { linuxraw_joypad_init, diff --git a/input/drivers_joypad/parport_joypad.c b/input/drivers_joypad/parport_joypad.c index 207c52efac..b87fa49c6d 100644 --- a/input/drivers_joypad/parport_joypad.c +++ b/input/drivers_joypad/parport_joypad.c @@ -232,7 +232,6 @@ static void parport_free_pad(struct parport_joypad *pad) static bool parport_joypad_init(void *data) { unsigned i, j; - autoconfig_params_t params; bool found_enabled_button = false; bool found_disabled_button = false; char buf[PARPORT_NUM_BUTTONS * 3 + 1] = {0}; @@ -253,11 +252,6 @@ static bool parport_joypad_init(void *data) snprintf(path, sizeof(path), "/dev/parport%u", i); - params.idx = i; - params.display_name[0] = '\0'; - params.vid = 0; - params.pid = 0; - if (parport_joypad_init_pad(path, pad)) { /* If a pin is low on initialization it can either mean @@ -300,8 +294,6 @@ static bool parport_joypad_init(void *data) RARCH_WARN("[Joypad]: Pin(s) %son %s were low on init, assuming not connected\n", \ buf, path); } - strlcpy(params.name, "Generic Parallel Port device", sizeof(params.name)); - strlcpy(params.driver, "parport", sizeof(params.driver)); } else { @@ -310,7 +302,14 @@ static bool parport_joypad_init(void *data) } } - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + "Generic Parallel Port device", + NULL, + "parport", + i, + 0, + 0 + ); } return true; diff --git a/input/drivers_joypad/ps3_joypad.c b/input/drivers_joypad/ps3_joypad.c index 142c985f02..3b5734bb17 100644 --- a/input/drivers_joypad/ps3_joypad.c +++ b/input/drivers_joypad/ps3_joypad.c @@ -42,18 +42,14 @@ static const char *ps3_joypad_name(unsigned pad) static void ps3_joypad_autodetect_add(unsigned autoconf_pad) { - autoconfig_params_t params; - - /* TODO - implement VID/PID? */ - params.idx = autoconf_pad; - params.display_name[0] = '\0'; - params.vid = 0; - params.pid = 0; - - strlcpy(params.name, ps3_joypad_name(autoconf_pad), sizeof(params.name)); - strlcpy(params.driver, ps3_joypad.ident, sizeof(params.driver)); - - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + ps3_joypad_name(autoconf_pad), + NULL, + ps3_joypad.ident, + autoconf_pad, + 0, + 0 + ); } static bool ps3_joypad_init(void *data) diff --git a/input/drivers_joypad/psp_joypad.c b/input/drivers_joypad/psp_joypad.c index 396ea9ad48..d797926ca2 100644 --- a/input/drivers_joypad/psp_joypad.c +++ b/input/drivers_joypad/psp_joypad.c @@ -72,18 +72,14 @@ static const char *psp_joypad_name(unsigned pad) static void psp_joypad_autodetect_add(unsigned autoconf_pad) { - autoconfig_params_t params; - - /* TODO - implement VID/PID? */ - params.idx = autoconf_pad; - params.display_name[0] = '\0'; - params.vid = 0; - params.pid = 0; - - strlcpy(params.name, psp_joypad_name(autoconf_pad), sizeof(params.name)); - strlcpy(params.driver, psp_joypad.ident, sizeof(params.driver)); - - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + psp_joypad_name(autoconf_pad), + NULL< + psp_joypad.ident, + autoconf_pad, + 0, + 0 + ); } static bool psp_joypad_init(void *data) diff --git a/input/drivers_joypad/qnx_joypad.c b/input/drivers_joypad/qnx_joypad.c index fa8f456a01..a7e1bb0d5a 100644 --- a/input/drivers_joypad/qnx_joypad.c +++ b/input/drivers_joypad/qnx_joypad.c @@ -32,20 +32,14 @@ static bool qnx_joypad_init(void *data) (void)data; for (autoconf_pad = 0; autoconf_pad < MAX_USERS; autoconf_pad++) - { - autoconfig_params_t params; - - /* TODO - implement VID/PID? */ - params.idx = autoconf_pad; - params.vid = 0; - params.pid = 0; - params.display_name[0] = '\0'; - - strlcpy(params.name, qnx_joypad_name(autoconf_pad), sizeof(params.name)); - strlcpy(params.driver, qnx_joypad.ident, sizeof(params.driver)); - - input_autoconfigure_connect(¶ms); - } + input_autoconfigure_connect( + qnx_joypad_name(autoconf_pad), + NULL, + qnx_joypad.ident, + autoconf_pad, + 0, + 0 + ); return true; } diff --git a/input/drivers_joypad/sdl_joypad.c b/input/drivers_joypad/sdl_joypad.c index c278f931ee..e409faf7ea 100644 --- a/input/drivers_joypad/sdl_joypad.c +++ b/input/drivers_joypad/sdl_joypad.c @@ -94,7 +94,6 @@ static int16_t sdl_pad_get_axis(sdl_joypad_t *pad, unsigned axis) static void sdl_pad_connect(unsigned id) { - autoconfig_params_t params; sdl_joypad_t *pad = (sdl_joypad_t*)&sdl_pads[id]; bool success = false; int32_t product = 0; @@ -141,15 +140,14 @@ static void sdl_pad_connect(unsigned id) product = guid_ptr[1]; #endif #endif - strlcpy(params.name, sdl_pad_name(id), sizeof(params.name)); - strlcpy(params.driver, sdl_joypad.ident, sizeof(params.driver)); - params.idx = id; - params.vid = vendor; - params.pid = product; - params.display_name[0] = '\0'; - - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + sdl_pad_name(id), + NULL, + sdl_joypad.ident, + id, + vendor, + product); RARCH_LOG("[SDL]: Device #%u (%04x:%04x) connected: %s.\n", id, vendor, product, sdl_pad_name(id)); diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c index d17073f47a..cd8aac5a3b 100644 --- a/input/drivers_joypad/udev_joypad.c +++ b/input/drivers_joypad/udev_joypad.c @@ -202,7 +202,6 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char { int i; struct stat st; - autoconfig_params_t params; int ret = 0; const char *buf = NULL; unsigned buttons = 0; @@ -281,16 +280,13 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char if (!string_is_empty(pad->ident)) { - strlcpy(params.name, pad->ident, sizeof(params.name)); - - params.display_name[0] = '\0'; - params.idx = p; - params.vid = pad->vid; - params.pid = pad->pid; - - strlcpy(params.driver, udev_joypad.ident, - sizeof(params.driver)); - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + pad->ident, + NULL, + udev_joypad.ident, + p, + pad->vid, + pad->pid); ret = 1; } diff --git a/input/drivers_joypad/wiiu_joypad.c b/input/drivers_joypad/wiiu_joypad.c index b6dc0e8144..d6ae61dba9 100644 --- a/input/drivers_joypad/wiiu_joypad.c +++ b/input/drivers_joypad/wiiu_joypad.c @@ -47,18 +47,14 @@ static const char *wiiu_joypad_name(unsigned pad) static void wiiu_joypad_autodetect_add(unsigned autoconf_pad) { - autoconfig_params_t params; - - /* TODO - implement VID/PID? */ - params.idx = autoconf_pad; - params.display_name[0] = '\0'; - params.vid = 0; - params.pid = 0; - - strlcpy(params.name, wiiu_joypad_name(autoconf_pad), sizeof(params.name)); - strlcpy(params.driver, wiiu_joypad.ident, sizeof(params.driver)); - - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + wiiu_joypad_name(autoconf_pad), + NULL, + wiiu_joypad.ident, + autoconf_pad, + 0, + 0 + ); } static bool wiiu_joypad_button(unsigned port_num, uint16_t key) diff --git a/input/drivers_joypad/xdk_joypad.c b/input/drivers_joypad/xdk_joypad.c index 600c465bb9..a5986dfea3 100644 --- a/input/drivers_joypad/xdk_joypad.c +++ b/input/drivers_joypad/xdk_joypad.c @@ -44,18 +44,13 @@ static const char *xdk_joypad_name(unsigned pad) static void xdk_joypad_autodetect_add(unsigned autoconf_pad) { - autoconfig_params_t params; - settings_t *settings = config_get_ptr(); - - /* TODO - implement VID/PID? */ - params.idx = autoconf_pad; - params.vid = 0; - params.pid = 0; - params.display_name[0] = '\0'; - - strlcpy(params.name, xdk_joypad_name(autoconf_pad), sizeof(params.name)); - strlcpy(params.driver, xdk_joypad.ident, sizeof(params.driver)); - input_autoconfigure_connect(¶ms); + input_autoconfigure_connect( + xdk_joypad_name(autoconf_pad), + NULL, + xdk_joypad.ident, + autoconf_pad, + 0, + 0); } static bool xdk_joypad_init(void *data) diff --git a/input/drivers_joypad/xinput_joypad.c b/input/drivers_joypad/xinput_joypad.c index eb4034f6cf..2dcc75598b 100644 --- a/input/drivers_joypad/xinput_joypad.c +++ b/input/drivers_joypad/xinput_joypad.c @@ -267,19 +267,13 @@ static bool xinput_joypad_init(void *data) for (autoconf_pad = 0; autoconf_pad < MAX_USERS; autoconf_pad++) { if (pad_index_to_xuser_index(autoconf_pad) > -1) - { - autoconfig_params_t params; - - /* TODO - implement VID/PID? */ - params.idx = autoconf_pad; - params.display_name[0] = '\0'; - params.vid = 0; - params.pid = 0; - - strlcpy(params.name, xinput_joypad_name(autoconf_pad), sizeof(params.name)); - strlcpy(params.driver, xinput_joypad.ident, sizeof(params.driver)); - input_autoconfigure_connect(¶ms); - } + input_autoconfigure_connect( + xinput_joypad_name(autoconf_pad), + NULL, + xinput_joypad.ident, + autoconf_pad, + 0, + 0); } return true; diff --git a/tasks/task_autodetect.c b/tasks/task_autodetect.c index 6995673414..89ebbfa39a 100644 --- a/tasks/task_autodetect.c +++ b/tasks/task_autodetect.c @@ -38,6 +38,16 @@ typedef struct autoconfig_disconnect char msg[255]; } autoconfig_disconnect_t; +typedef struct autoconfig_params +{ + char name[255]; + char driver[255]; + char display_name[255]; + unsigned idx; + int32_t vid; + int32_t pid; +} autoconfig_params_t; + /* Adds an index for devices with the same name, * so they can be identified in the GUI. */ static void input_autoconfigure_joypad_reindex_devices(void) @@ -373,7 +383,13 @@ error: return false; } -bool input_autoconfigure_connect(autoconfig_params_t *params) +bool input_autoconfigure_connect( + const char *name, + const char *display_name, + const char *driver, + unsigned idx, + unsigned vid, + unsigned pid) { unsigned i; retro_task_t *task = (retro_task_t*)calloc(1, sizeof(*task)); @@ -383,20 +399,28 @@ bool input_autoconfigure_connect(autoconfig_params_t *params) if (!task || !state || !settings->input.autodetect_enable) goto error; - strlcpy(state->name, params->name, sizeof(state->name)); + if (!string_is_empty(display_name)) + strlcpy(state->display_name, display_name, + sizeof(state->display_name)); + + if (!string_is_empty(name)) + strlcpy(state->name, name, sizeof(state->name)); + + if (!string_is_empty(driver)) + strlcpy(state->driver, driver, sizeof(state->driver)); + + state->idx = idx; + state->vid = vid; + state->pid = pid; for (i = 0; i < RARCH_BIND_LIST_END; i++) { - settings->input.autoconf_binds[params->idx][i].joykey = NO_BTN; - settings->input.autoconf_binds[params->idx][i].joyaxis = AXIS_NONE; - settings->input.autoconf_binds[params->idx][i].joykey_label[0] = '\0'; - settings->input.autoconf_binds[params->idx][i].joyaxis_label[0] = '\0'; + settings->input.autoconf_binds[state->idx][i].joykey = NO_BTN; + settings->input.autoconf_binds[state->idx][i].joyaxis = AXIS_NONE; + settings->input.autoconf_binds[state->idx][i].joykey_label[0] = '\0'; + settings->input.autoconf_binds[state->idx][i].joyaxis_label[0] = '\0'; } - settings->input.autoconfigured[params->idx] = false; - - state->idx = params->idx; - state->vid = params->vid; - state->pid = params->pid; + settings->input.autoconfigured[state->idx] = false; task->state = state; task->handler = input_autoconfigure_connect_handler; diff --git a/tasks/tasks_internal.h b/tasks/tasks_internal.h index 3830a0e3eb..0d50899867 100644 --- a/tasks/tasks_internal.h +++ b/tasks/tasks_internal.h @@ -82,16 +82,6 @@ typedef struct nbio_handle char path[4096]; } nbio_handle_t; -typedef struct autoconfig_params -{ - char name[255]; - char driver[255]; - char display_name[255]; - unsigned idx; - int32_t vid; - int32_t pid; -} autoconfig_params_t; - #ifdef HAVE_NETWORKING typedef struct { @@ -171,7 +161,13 @@ void *savefile_ptr_get(void); void path_init_savefile_new(void); -bool input_autoconfigure_connect(autoconfig_params_t *params); +bool input_autoconfigure_connect( + const char *name, + const char *display_name, + const char *driver, + unsigned idx, + unsigned vid, + unsigned pid); bool input_autoconfigure_disconnect(unsigned i, const char *ident);