mirror of
https://github.com/libretro/RetroArch
synced 2025-04-01 22:20:31 +00:00
commit
d80915fab8
@ -177,6 +177,16 @@ static const char *dinput_joypad_name(unsigned pad)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t dinput_joypad_vid(unsigned pad)
|
||||||
|
{
|
||||||
|
return g_pads[pad].vid;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t dinput_joypad_pid(unsigned pad)
|
||||||
|
{
|
||||||
|
return g_pads[pad].pid;
|
||||||
|
}
|
||||||
|
|
||||||
static const char *dinput_joypad_friendly_name(unsigned pad)
|
static const char *dinput_joypad_friendly_name(unsigned pad)
|
||||||
{
|
{
|
||||||
if (pad < MAX_USERS)
|
if (pad < MAX_USERS)
|
||||||
@ -220,10 +230,10 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
g_pads[g_joypad_cnt].vid = inst->guidProduct.Data1 / 0x10000;
|
g_pads[g_joypad_cnt].vid = inst->guidProduct.Data1 % 0x10000;
|
||||||
g_pads[g_joypad_cnt].pid = inst->guidProduct.Data1 % 0x10000;
|
g_pads[g_joypad_cnt].pid = inst->guidProduct.Data1 / 0x10000;
|
||||||
|
|
||||||
RARCH_LOG("PID: {%04lX} VID:{%04lX}\n", g_pads[g_joypad_cnt].pid, g_pads[g_joypad_cnt].vid);
|
RARCH_LOG("Device #%u PID: {%04lX} VID:{%04lX}\n", g_joypad_cnt, g_pads[g_joypad_cnt].pid, g_pads[g_joypad_cnt].vid);
|
||||||
|
|
||||||
#ifdef HAVE_XINPUT
|
#ifdef HAVE_XINPUT
|
||||||
#if 0
|
#if 0
|
||||||
@ -263,8 +273,9 @@ static BOOL CALLBACK enum_joypad_cb(const DIDEVICEINSTANCE *inst, void *p)
|
|||||||
strlcpy(params.name, dinput_joypad_name(g_joypad_cnt), sizeof(params.name));
|
strlcpy(params.name, 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.display_name, dinput_joypad_friendly_name(g_joypad_cnt), sizeof(params.driver));
|
||||||
strlcpy(params.driver, dinput_joypad.ident, sizeof(params.driver));
|
strlcpy(params.driver, dinput_joypad.ident, sizeof(params.driver));
|
||||||
|
params.vid = dinput_joypad_vid(g_joypad_cnt);
|
||||||
|
params.pid = dinput_joypad_pid(g_joypad_cnt);
|
||||||
input_config_autoconfigure_joypad(¶ms);
|
input_config_autoconfigure_joypad(¶ms);
|
||||||
RARCH_LOG("DINPUT %s %s %s\n",params.name, params.driver, params.display_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum_iteration_done:
|
enum_iteration_done:
|
||||||
|
@ -20,10 +20,11 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <file/file_path.h>
|
||||||
|
|
||||||
#include "../general.h"
|
#include "../general.h"
|
||||||
|
|
||||||
enum
|
/*enum
|
||||||
{
|
{
|
||||||
AUTODETECT_MATCH_NONE = 0,
|
AUTODETECT_MATCH_NONE = 0,
|
||||||
AUTODETECT_MATCH_VID,
|
AUTODETECT_MATCH_VID,
|
||||||
@ -31,7 +32,7 @@ enum
|
|||||||
AUTODETECT_MATCH_IDENT,
|
AUTODETECT_MATCH_IDENT,
|
||||||
AUTODETECT_MATCH_DRIVER,
|
AUTODETECT_MATCH_DRIVER,
|
||||||
AUTODETECT_MATCH_NAME
|
AUTODETECT_MATCH_NAME
|
||||||
};
|
};*/
|
||||||
|
|
||||||
static void input_autoconfigure_joypad_conf(config_file_t *conf,
|
static void input_autoconfigure_joypad_conf(config_file_t *conf,
|
||||||
struct retro_keybind *binds)
|
struct retro_keybind *binds)
|
||||||
@ -48,14 +49,14 @@ static void input_autoconfigure_joypad_conf(config_file_t *conf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int input_try_autoconfigure_joypad_from_conf(config_file_t *conf,
|
static int input_try_autoconfigure_joypad_from_conf(config_file_t *conf,
|
||||||
autoconfig_params_t *params, unsigned *match)
|
autoconfig_params_t *params)
|
||||||
{
|
{
|
||||||
char ident[PATH_MAX_LENGTH] = {0};
|
char ident[PATH_MAX_LENGTH] = {0};
|
||||||
char ident_idx[PATH_MAX_LENGTH] = {0};
|
//char ident_idx[PATH_MAX_LENGTH] = {0};
|
||||||
char input_driver[PATH_MAX_LENGTH] = {0};
|
char input_driver[PATH_MAX_LENGTH] = {0};
|
||||||
int input_vid = 0;
|
int input_vid = 0;
|
||||||
int input_pid = 0;
|
int input_pid = 0;
|
||||||
int ret = 0;
|
int score = 0;
|
||||||
|
|
||||||
if (!conf)
|
if (!conf)
|
||||||
return false;
|
return false;
|
||||||
@ -67,11 +68,7 @@ static int input_try_autoconfigure_joypad_from_conf(config_file_t *conf,
|
|||||||
config_get_int (conf, "input_vendor_id", &input_vid);
|
config_get_int (conf, "input_vendor_id", &input_vid);
|
||||||
config_get_int (conf, "input_product_id", &input_pid);
|
config_get_int (conf, "input_product_id", &input_pid);
|
||||||
|
|
||||||
snprintf(ident_idx,
|
/* Check for VID/PID */
|
||||||
sizeof(ident_idx), "%s_p%u", ident, params->idx);
|
|
||||||
|
|
||||||
/* If Vendor ID and Product ID matches, we've found our
|
|
||||||
* entry. */
|
|
||||||
if ( (params->vid == input_vid)
|
if ( (params->vid == input_vid)
|
||||||
&& (params->pid == input_pid)
|
&& (params->pid == input_pid)
|
||||||
&& params->vid != 0
|
&& params->vid != 0
|
||||||
@ -79,37 +76,26 @@ static int input_try_autoconfigure_joypad_from_conf(config_file_t *conf,
|
|||||||
&& input_vid != 0
|
&& input_vid != 0
|
||||||
&& input_pid != 0)
|
&& input_pid != 0)
|
||||||
{
|
{
|
||||||
BIT32_SET(*match, AUTODETECT_MATCH_VID);
|
score += 3;
|
||||||
BIT32_SET(*match, AUTODETECT_MATCH_PID);
|
//RARCH_LOG("Autoconf: VID/PID match score=%d\n", score);
|
||||||
ret = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check for name match. */
|
|
||||||
if (!strcmp(ident_idx, params->name))
|
|
||||||
{
|
|
||||||
BIT32_SET(*match, AUTODETECT_MATCH_NAME);
|
|
||||||
ret = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check for name match - name starts with ident */
|
|
||||||
if (ident[0] != '\0' && !strncmp(params->name, ident, strlen(ident)))
|
|
||||||
{
|
|
||||||
BIT32_SET(*match, AUTODETECT_MATCH_IDENT);
|
|
||||||
ret = 2;
|
|
||||||
if (!strcmp(params->driver, input_driver))
|
|
||||||
BIT32_SET(*match, AUTODETECT_MATCH_DRIVER);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check for name match */
|
/* Check for name match */
|
||||||
if (!strcmp(ident, params->name))
|
if (!strcmp(ident, params->name))
|
||||||
{
|
{
|
||||||
BIT32_SET(*match, AUTODETECT_MATCH_IDENT);
|
score += 2;
|
||||||
ret = 1;
|
//RARCH_LOG("Autoconf: exact name match score=%d\n", score);
|
||||||
if (!strcmp(params->driver, input_driver))
|
|
||||||
BIT32_SET(*match, AUTODETECT_MATCH_DRIVER);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
return ret;
|
{
|
||||||
|
if (ident[0] != '\0' && !strncmp(params->name, ident, strlen(ident)))
|
||||||
|
{
|
||||||
|
score += 1;
|
||||||
|
//RARCH_LOG("Autoconf: partial name match score=%d\n", score);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RARCH_LOG("Autoconf: configuration score=%d\n", score);
|
||||||
|
return score;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void input_autoconfigure_joypad_add(
|
static void input_autoconfigure_joypad_add(
|
||||||
@ -143,13 +129,12 @@ static int input_autoconfigure_joypad_from_conf(
|
|||||||
config_file_t *conf, autoconfig_params_t *params)
|
config_file_t *conf, autoconfig_params_t *params)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
uint32_t match = 0;
|
|
||||||
|
|
||||||
if (!conf)
|
if (!conf)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ret = input_try_autoconfigure_joypad_from_conf(conf,
|
ret = input_try_autoconfigure_joypad_from_conf(conf,
|
||||||
params, &match);
|
params);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
input_autoconfigure_joypad_add(conf, params);
|
input_autoconfigure_joypad_add(conf, params);
|
||||||
@ -164,23 +149,53 @@ static bool input_autoconfigure_joypad_from_conf_dir(
|
|||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
int index = 0;
|
||||||
|
int current_best = 0;
|
||||||
|
|
||||||
settings_t *settings = config_get_ptr();
|
settings_t *settings = config_get_ptr();
|
||||||
|
|
||||||
|
char path[PATH_MAX_LENGTH] = {0};
|
||||||
|
fill_pathname_join(path,settings->input.autoconfig_dir,settings->input.driver,sizeof(path));
|
||||||
|
|
||||||
struct string_list *list = settings ? dir_list_new(
|
struct string_list *list = settings ? dir_list_new(
|
||||||
settings->input.autoconfig_dir, "cfg", false) : NULL;
|
settings->input.autoconfig_dir, "cfg", false) : NULL;
|
||||||
|
|
||||||
if (!list)
|
if (!list || !list->size)
|
||||||
|
{
|
||||||
|
fill_pathname_join(path,settings->input.autoconfig_dir,settings->input.driver,sizeof(path));
|
||||||
|
|
||||||
|
list = settings ? dir_list_new(
|
||||||
|
path, "cfg", false) : NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!list)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
RARCH_LOG("Autoconfig: %d profiles found\n", list->size);
|
||||||
|
config_file_t *conf;
|
||||||
|
|
||||||
for (i = 0; i < list->size; i++)
|
for (i = 0; i < list->size; i++)
|
||||||
{
|
{
|
||||||
config_file_t *conf = config_file_new(list->elems[i].data);
|
conf = config_file_new(list->elems[i].data);
|
||||||
ret = input_autoconfigure_joypad_from_conf(conf, params);
|
ret = input_try_autoconfigure_joypad_from_conf(conf, params);
|
||||||
|
if(ret > current_best)
|
||||||
if (ret == 1)
|
{
|
||||||
break;
|
index = i;
|
||||||
|
current_best = ret;
|
||||||
|
}
|
||||||
|
config_file_free(conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(index)
|
||||||
|
{
|
||||||
|
RARCH_LOG("Autoconf: best configuration score=%d\n", current_best);
|
||||||
|
conf = config_file_new(list->elems[index].data);
|
||||||
|
input_autoconfigure_joypad_add(conf, params);
|
||||||
|
config_file_free(conf);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
string_list_free(list);
|
string_list_free(list);
|
||||||
|
|
||||||
return ret !=0 ? true : false;
|
return ret !=0 ? true : false;
|
||||||
|
@ -1358,19 +1358,8 @@ static int action_ok_download_generic(const char *path,
|
|||||||
else if (!strcmp(type_msg, "cb_update_assets"))
|
else if (!strcmp(type_msg, "cb_update_assets"))
|
||||||
path = "assets.zip";
|
path = "assets.zip";
|
||||||
else if (!strcmp(type_msg, "cb_update_autoconfig_profiles"))
|
else if (!strcmp(type_msg, "cb_update_autoconfig_profiles"))
|
||||||
{
|
|
||||||
#ifdef ANDROID
|
|
||||||
path = "autoconf_android.zip";
|
|
||||||
#elif defined(__QNX__)
|
|
||||||
path = "autoconf_qnx.zip";
|
|
||||||
#elif defined(HAVE_UDEV)
|
|
||||||
path = "autoconf_udev.zip";
|
|
||||||
#elif defined(HAVE_XINPUT2)
|
|
||||||
path = "autoconf_xinput.zip";
|
|
||||||
#else
|
|
||||||
path = "autoconf.zip";
|
path = "autoconf.zip";
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#ifdef HAVE_HID
|
#ifdef HAVE_HID
|
||||||
else if (!strcmp(type_msg, "cb_update_autoconfig_profiles_hid"))
|
else if (!strcmp(type_msg, "cb_update_autoconfig_profiles_hid"))
|
||||||
path = "autoconf_hid.zip";
|
path = "autoconf_hid.zip";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user