From 0352814a8aa9b6fa990398bdc7780d2c375cb08b Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 13 Dec 2019 16:07:25 -0800 Subject: [PATCH] Added general remapping of controller manufacturer --- src/joystick/SDL_joystick.c | 13 +++++++++++++ src/joystick/SDL_joystick_c.h | 3 +++ src/joystick/hidapi/SDL_hidapijoystick.c | 17 +++++++++-------- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c index f2e4a67fc..81f0ebfd0 100644 --- a/src/joystick/SDL_joystick.c +++ b/src/joystick/SDL_joystick.c @@ -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 * SDL_GetCustomJoystickName(Uint16 vendor, Uint16 product) { diff --git a/src/joystick/SDL_joystick_c.h b/src/joystick/SDL_joystick_c.h index 41d797c38..cf3dece24 100644 --- a/src/joystick/SDL_joystick_c.h +++ b/src/joystick/SDL_joystick_c.h @@ -52,6 +52,9 @@ extern int SDL_JoystickGetDeviceIndexFromInstanceID(SDL_JoystickID instance_id); /* Function to extract information from an SDL joystick GUID */ 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 */ extern const char *SDL_GetCustomJoystickName(Uint16 vendor, Uint16 product); diff --git a/src/joystick/hidapi/SDL_hidapijoystick.c b/src/joystick/hidapi/SDL_hidapijoystick.c index 4789696d1..328a84c3b 100644 --- a/src/joystick/hidapi/SDL_hidapijoystick.c +++ b/src/joystick/hidapi/SDL_hidapijoystick.c @@ -610,6 +610,7 @@ HIDAPI_AddDevice(struct hid_device_info *info) } } 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 *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) { @@ -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)); } } + + manufacturer_remapped = SDL_GetCustomJoystickManufacturer(manufacturer_string); + if (manufacturer_remapped != manufacturer_string) { + SDL_free(manufacturer_string); + manufacturer_string = SDL_strdup(manufacturer_remapped); + } + if (manufacturer_string && product_string) { - size_t name_size; - - if (SDL_strcmp(manufacturer_string, "Performance Designed Products") == 0) { - /* Shorten this so controller names are more manageable */ - SDL_memcpy(manufacturer_string, "PDP", 4); - } - - name_size = (SDL_strlen(manufacturer_string) + 1 + SDL_strlen(product_string) + 1); + size_t name_size = (SDL_strlen(manufacturer_string) + 1 + SDL_strlen(product_string) + 1); device->name = (char *)SDL_malloc(name_size); if (device->name) { if (SDL_strncasecmp(manufacturer_string, product_string, SDL_strlen(manufacturer_string)) == 0) {