Added general remapping of controller manufacturer

This commit is contained in:
Sam Lantinga 2019-12-13 16:07:25 -08:00
parent b51d7f35aa
commit 0352814a8a
3 changed files with 25 additions and 8 deletions

View File

@ -1164,6 +1164,19 @@ void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *prod
} }
} }
const char *
SDL_GetCustomJoystickManufacturer(const char *manufacturer)
{
if (manufacturer) {
if (SDL_strcmp(manufacturer, "Performance Designed Products") == 0) {
return "PDP";
} else if (SDL_strcmp(manufacturer, "HORI CO.,LTD") == 0) {
return "HORI";
}
}
return manufacturer;
}
const char * const char *
SDL_GetCustomJoystickName(Uint16 vendor, Uint16 product) SDL_GetCustomJoystickName(Uint16 vendor, Uint16 product)
{ {

View File

@ -52,6 +52,9 @@ extern int SDL_JoystickGetDeviceIndexFromInstanceID(SDL_JoystickID instance_id);
/* Function to extract information from an SDL joystick GUID */ /* Function to extract information from an SDL joystick GUID */
extern void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version); extern void SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version);
/* Function to get a custom name for a controller manufacturer, if it's available */
extern const char *SDL_GetCustomJoystickManufacturer(const char *manufacturer);
/* Function to get a custom name for a controller, if it's available */ /* Function to get a custom name for a controller, if it's available */
extern const char *SDL_GetCustomJoystickName(Uint16 vendor, Uint16 product); extern const char *SDL_GetCustomJoystickName(Uint16 vendor, Uint16 product);

View File

@ -610,6 +610,7 @@ HIDAPI_AddDevice(struct hid_device_info *info)
} }
} }
if (!device->name && info->manufacturer_string && info->product_string) { if (!device->name && info->manufacturer_string && info->product_string) {
const char *manufacturer_remapped;
char *manufacturer_string = SDL_iconv_string("UTF-8", "WCHAR_T", (char*)info->manufacturer_string, (SDL_wcslen(info->manufacturer_string)+1)*sizeof(wchar_t)); char *manufacturer_string = SDL_iconv_string("UTF-8", "WCHAR_T", (char*)info->manufacturer_string, (SDL_wcslen(info->manufacturer_string)+1)*sizeof(wchar_t));
char *product_string = SDL_iconv_string("UTF-8", "WCHAR_T", (char*)info->product_string, (SDL_wcslen(info->product_string)+1)*sizeof(wchar_t)); char *product_string = SDL_iconv_string("UTF-8", "WCHAR_T", (char*)info->product_string, (SDL_wcslen(info->product_string)+1)*sizeof(wchar_t));
if (!manufacturer_string && !product_string) { if (!manufacturer_string && !product_string) {
@ -621,15 +622,15 @@ HIDAPI_AddDevice(struct hid_device_info *info)
product_string = SDL_iconv_string("UTF-8", "UCS-4-INTERNAL", (char*)info->product_string, (SDL_wcslen(info->product_string)+1)*sizeof(wchar_t)); product_string = SDL_iconv_string("UTF-8", "UCS-4-INTERNAL", (char*)info->product_string, (SDL_wcslen(info->product_string)+1)*sizeof(wchar_t));
} }
} }
if (manufacturer_string && product_string) {
size_t name_size;
if (SDL_strcmp(manufacturer_string, "Performance Designed Products") == 0) { manufacturer_remapped = SDL_GetCustomJoystickManufacturer(manufacturer_string);
/* Shorten this so controller names are more manageable */ if (manufacturer_remapped != manufacturer_string) {
SDL_memcpy(manufacturer_string, "PDP", 4); SDL_free(manufacturer_string);
manufacturer_string = SDL_strdup(manufacturer_remapped);
} }
name_size = (SDL_strlen(manufacturer_string) + 1 + SDL_strlen(product_string) + 1); if (manufacturer_string && product_string) {
size_t name_size = (SDL_strlen(manufacturer_string) + 1 + SDL_strlen(product_string) + 1);
device->name = (char *)SDL_malloc(name_size); device->name = (char *)SDL_malloc(name_size);
if (device->name) { if (device->name) {
if (SDL_strncasecmp(manufacturer_string, product_string, SDL_strlen(manufacturer_string)) == 0) { if (SDL_strncasecmp(manufacturer_string, product_string, SDL_strlen(manufacturer_string)) == 0) {