mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 04:14:00 +00:00
(Input autodetect) Start setting up input autodetect so that it
can look at matching VID/PIDs
This commit is contained in:
parent
c9bee62761
commit
aea679456d
@ -477,7 +477,8 @@ static void handle_hotplug(android_input_t *android,
|
||||
{
|
||||
strlcpy(g_settings.input.device_names[*port],
|
||||
name_buf, sizeof(g_settings.input.device_names[*port]));
|
||||
input_config_autoconfigure_joypad(*port, name_buf, android_joypad.ident);
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(*port, name_buf, 0, 0, android_joypad.ident);
|
||||
RARCH_LOG("Port %d: %s.\n", *port, name_buf);
|
||||
}
|
||||
|
||||
|
@ -30,8 +30,9 @@ static bool android_joypad_init(void)
|
||||
strlcpy(g_settings.input.device_names[autoconf_pad],
|
||||
android_joypad_name(autoconf_pad),
|
||||
sizeof(g_settings.input.device_names[autoconf_pad]));
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(autoconf_pad,
|
||||
android_joypad_name(autoconf_pad),
|
||||
android_joypad_name(autoconf_pad), 0, 0,
|
||||
android_joypad.ident);
|
||||
}
|
||||
|
||||
|
@ -778,8 +778,9 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p)
|
||||
strlcpy(g_settings.input.device_names[g_joypad_cnt],
|
||||
dinput_joypad_name(g_joypad_cnt),
|
||||
sizeof(g_settings.input.device_names[g_joypad_cnt]));
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(g_joypad_cnt,
|
||||
dinput_joypad_name(g_joypad_cnt),
|
||||
dinput_joypad_name(g_joypad_cnt), 0, 0,
|
||||
dinput_joypad.ident);
|
||||
}
|
||||
|
||||
|
@ -258,8 +258,10 @@ static void *gx_input_init(void)
|
||||
strlcpy(g_settings.input.device_names[autoconf_pad],
|
||||
gx_joypad_name_static(gx, autoconf_pad),
|
||||
sizeof(g_settings.input.device_names[autoconf_pad]));
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(autoconf_pad,
|
||||
gx_joypad_name_static(gx, autoconf_pad),
|
||||
0, 0,
|
||||
gx->joypad->ident);
|
||||
}
|
||||
|
||||
@ -279,8 +281,11 @@ static void handle_hotplug(void *data, unsigned port, uint32_t ptype)
|
||||
strlcpy(g_settings.input.device_names[port],
|
||||
gx_joypad_name(port),
|
||||
sizeof(g_settings.input.device_names[port]));
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(port,
|
||||
gx_joypad_name(port), gx_joypad.ident);
|
||||
gx_joypad_name(port),
|
||||
0, 0,
|
||||
gx_joypad.ident);
|
||||
}
|
||||
|
||||
static void gx_input_poll(void *data)
|
||||
|
@ -37,19 +37,23 @@ static void input_autoconfigure_joypad_conf(config_file_t *conf,
|
||||
|
||||
static bool input_try_autoconfigure_joypad_from_conf(config_file_t *conf,
|
||||
unsigned index, const char *name, const char *driver,
|
||||
bool block_osd_spam)
|
||||
const char *vid, const char *pid, bool block_osd_spam)
|
||||
{
|
||||
if (!conf)
|
||||
return false;
|
||||
|
||||
char ident[1024], ident_idx[1024];
|
||||
char input_driver[1024];
|
||||
bool cond_found_idx, cond_found_general;
|
||||
char ident[PATH_MAX], ident_idx[PATH_MAX];
|
||||
char input_driver[PATH_MAX], input_vid[PATH_MAX],
|
||||
input_pid[PATH_MAX];
|
||||
bool cond_found_idx, cond_found_general,
|
||||
cond_found_vid = false, cond_found_pid = false;
|
||||
|
||||
*ident = *input_driver = '\0';
|
||||
|
||||
config_get_array(conf, "input_device", ident, sizeof(ident));
|
||||
config_get_array(conf, "input_driver", input_driver, sizeof(input_driver));
|
||||
config_get_array(conf, "input_vendor_id", input_vid, sizeof(input_vid));
|
||||
config_get_array(conf, "input_product_id", input_pid, sizeof(input_pid));
|
||||
|
||||
snprintf(ident_idx, sizeof(ident_idx), "%s_p%u", ident, index);
|
||||
|
||||
@ -57,7 +61,17 @@ static bool input_try_autoconfigure_joypad_from_conf(config_file_t *conf,
|
||||
|
||||
cond_found_idx = !strcmp(ident_idx, name);
|
||||
cond_found_general = !strcmp(ident, name) && !strcmp(driver, input_driver);
|
||||
if (vid != 0)
|
||||
cond_found_vid = !strcmp(vid, input_vid);
|
||||
if (pid != 0)
|
||||
cond_found_pid = !strcmp(vid, input_pid);
|
||||
|
||||
/* If Vendor ID and Product ID matches, we've found our
|
||||
* entry. */
|
||||
if (cond_found_vid && cond_found_pid)
|
||||
goto found;
|
||||
|
||||
/* Check for name match. */
|
||||
if (cond_found_idx)
|
||||
goto found;
|
||||
else if (cond_found_general)
|
||||
@ -81,7 +95,8 @@ found:
|
||||
}
|
||||
|
||||
void input_config_autoconfigure_joypad(unsigned index,
|
||||
const char *name, const char *driver)
|
||||
const char *name, const char *vid, const char *pid,
|
||||
const char *driver)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
@ -113,7 +128,7 @@ void input_config_autoconfigure_joypad(unsigned index,
|
||||
config_file_t *conf = (config_file_t*)
|
||||
config_file_new_from_string(input_builtin_autoconfs[i]);
|
||||
bool success = input_try_autoconfigure_joypad_from_conf(conf,
|
||||
index, name, driver, block_osd_spam);
|
||||
index, name, driver, vid, pid, block_osd_spam);
|
||||
config_file_free(conf);
|
||||
if (success)
|
||||
break;
|
||||
@ -134,7 +149,7 @@ void input_config_autoconfigure_joypad(unsigned index,
|
||||
if (!conf)
|
||||
continue;
|
||||
bool success = input_try_autoconfigure_joypad_from_conf(conf,
|
||||
index, name, driver, block_osd_spam);
|
||||
index, name, driver, vid, pid, block_osd_spam);
|
||||
config_file_free(conf);
|
||||
if (success)
|
||||
break;
|
||||
|
@ -21,7 +21,8 @@ const struct retro_keybind *input_get_auto_bind(unsigned port,
|
||||
unsigned id);
|
||||
|
||||
void input_config_autoconfigure_joypad(unsigned index,
|
||||
const char *name, const char *driver);
|
||||
const char *name, const char *vid, const char *pid,
|
||||
const char *driver);
|
||||
|
||||
extern const char* const input_builtin_autoconfs[];
|
||||
|
||||
|
@ -151,7 +151,8 @@ static void handle_plugged_pad(void)
|
||||
g_pads[index].fd = -1;
|
||||
*g_pads[index].ident = '\0';
|
||||
|
||||
input_config_autoconfigure_joypad(index, NULL, NULL);
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(index, NULL, 0, 0, NULL);
|
||||
}
|
||||
}
|
||||
// Sometimes, device will be created before acess to it is established.
|
||||
@ -162,7 +163,8 @@ static void handle_plugged_pad(void)
|
||||
bool ret = linuxraw_joypad_init_pad(path, &g_pads[index]);
|
||||
|
||||
if (*g_pads[index].ident && ret)
|
||||
input_config_autoconfigure_joypad(index, g_pads[index].ident, "linuxraw");
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(index, g_pads[index].ident, 0, 0, "linuxraw");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -211,13 +213,14 @@ static bool linuxraw_joypad_init(void)
|
||||
char path[PATH_MAX];
|
||||
snprintf(path, sizeof(path), "/dev/input/js%u", i);
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
if (linuxraw_joypad_init_pad(path, pad))
|
||||
{
|
||||
input_config_autoconfigure_joypad(i, pad->ident, "linuxraw");
|
||||
input_config_autoconfigure_joypad(i, pad->ident, 0, 0, "linuxraw");
|
||||
poll_pad(pad);
|
||||
}
|
||||
else
|
||||
input_config_autoconfigure_joypad(i, NULL, NULL);
|
||||
input_config_autoconfigure_joypad(i, NULL, 0, 0, NULL);
|
||||
}
|
||||
|
||||
g_notify = inotify_init();
|
||||
|
@ -28,8 +28,10 @@ static bool ps3_joypad_init(void)
|
||||
strlcpy(g_settings.input.device_names[autoconf_pad],
|
||||
"SixAxis Controller",
|
||||
sizeof(g_settings.input.device_names[autoconf_pad]));
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(autoconf_pad,
|
||||
ps3_joypad_name(autoconf_pad),
|
||||
0, 0,
|
||||
ps3_joypad.ident);
|
||||
}
|
||||
|
||||
|
@ -28,8 +28,10 @@ static bool psp_joypad_init(void)
|
||||
strlcpy(g_settings.input.device_names[autoconf_pad],
|
||||
psp_joypad_name(autoconf_pad),
|
||||
sizeof(g_settings.input.device_names[autoconf_pad]));
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(autoconf_pad,
|
||||
psp_joypad_name(autoconf_pad),
|
||||
0, 0,
|
||||
psp_joypad.ident);
|
||||
}
|
||||
|
||||
|
@ -304,7 +304,9 @@ static void qnx_input_autodetect_gamepad(void *data,
|
||||
{
|
||||
strlcpy(g_settings.input.device_names[port],
|
||||
name_buf, sizeof(g_settings.input.device_names[port]));
|
||||
input_config_autoconfigure_joypad(port, name_buf, qnx->joypad);
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(port, name_buf, 0, 0,
|
||||
qnx->joypad);
|
||||
|
||||
controller->port = port;
|
||||
qnx->port_device[port] = controller;
|
||||
|
@ -28,8 +28,11 @@ static bool qnx_joypad_init(void)
|
||||
{
|
||||
strlcpy(g_settings.input.device_names[autoconf_pad], "None",
|
||||
sizeof(g_settings.input.device_names[autoconf_pad]));
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(autoconf_pad,
|
||||
qnx_joypad_name(autoconf_pad), qnx_joypad.ident);
|
||||
qnx_joypad_name(autoconf_pad),
|
||||
0, 0,
|
||||
qnx_joypad.ident);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -117,7 +117,9 @@ static void pad_connect(unsigned id)
|
||||
}
|
||||
|
||||
strlcpy(g_settings.input.device_names[id], pad_name(id), sizeof(g_settings.input.device_names[id]));
|
||||
input_config_autoconfigure_joypad(id, pad_name(id), sdl_joypad.ident);
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(id, pad_name(id),
|
||||
0, 0, sdl_joypad.ident);
|
||||
|
||||
RARCH_LOG("[SDL]: Joypad #%u connected: %s.\n", id, pad_name(id));
|
||||
|
||||
|
@ -301,8 +301,11 @@ static void free_pad(unsigned pad, bool hotplug)
|
||||
g_pads[pad].ident = g_settings.input.device_names[pad];
|
||||
|
||||
// Avoid autoconfig spam if we're reiniting driver.
|
||||
/* TODO - implement VID/PID? */
|
||||
if (hotplug)
|
||||
input_config_autoconfigure_joypad(pad, NULL, NULL);
|
||||
input_config_autoconfigure_joypad(pad, NULL,
|
||||
0, 0,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static bool add_pad(unsigned p, int fd, const char *path)
|
||||
@ -363,8 +366,11 @@ static bool add_pad(unsigned p, int fd, const char *path)
|
||||
pad->device = st.st_rdev;
|
||||
pad->fd = fd;
|
||||
pad->path = strdup(path);
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
if (*pad->ident)
|
||||
input_config_autoconfigure_joypad(p, pad->ident, "udev");
|
||||
input_config_autoconfigure_joypad(p, pad->ident,
|
||||
0, 0, "udev");
|
||||
|
||||
// Check for rumble features.
|
||||
unsigned long ffbit[NBITS(FF_MAX)] = {0};
|
||||
|
@ -231,8 +231,15 @@ static bool winxinput_joypad_init(void)
|
||||
{
|
||||
if (pad_index_to_xplayer_index(autoconf_pad) > -1)
|
||||
{
|
||||
strlcpy(g_settings.input.device_names[autoconf_pad], winxinput_joypad_name(autoconf_pad), sizeof(g_settings.input.device_names[autoconf_pad]));
|
||||
input_config_autoconfigure_joypad(autoconf_pad, winxinput_joypad_name(autoconf_pad), winxinput_joypad.ident);
|
||||
strlcpy(g_settings.input.device_names[autoconf_pad],
|
||||
winxinput_joypad_name(autoconf_pad),
|
||||
sizeof(g_settings.input.device_names[autoconf_pad]));
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(autoconf_pad,
|
||||
winxinput_joypad_name(autoconf_pad),
|
||||
0, 0,
|
||||
winxinput_joypad.ident);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,8 +36,12 @@ static bool xdk_joypad_init(void)
|
||||
strlcpy(g_settings.input.device_names[autoconf_pad],
|
||||
"XInput Controller",
|
||||
sizeof(g_settings.input.device_names[autoconf_pad]));
|
||||
|
||||
/* TODO - implement VID/PID? */
|
||||
input_config_autoconfigure_joypad(autoconf_pad,
|
||||
xdk_joypad_name(autoconf_pad), xdk_joypad.ident);
|
||||
xdk_joypad_name(autoconf_pad),
|
||||
0, 0,
|
||||
xdk_joypad.ident);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -431,7 +431,8 @@ static void parse_input(int argc, char *argv[])
|
||||
}
|
||||
|
||||
void input_config_autoconfigure_joypad(unsigned index,
|
||||
const char *name, const char *driver)
|
||||
const char *name, const char *vid, const char *pid,
|
||||
const char *driver)
|
||||
{
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user