From dbcda0b212e3ace555c7170acb80e4c70e308e69 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 17 Apr 2020 21:30:56 -0700 Subject: [PATCH] Added support for the Razer Wolverine Ultimate --- src/joystick/controller_type.h | 2 +- src/joystick/hidapi/SDL_hidapi_xboxone.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/joystick/controller_type.h b/src/joystick/controller_type.h index 7f15fdcff..e2b5fb8ea 100644 --- a/src/joystick/controller_type.h +++ b/src/joystick/controller_type.h @@ -380,6 +380,7 @@ static const ControllerDescription_t arrControllers[] = { { MAKE_CONTROLLER_ID( 0x0f0d, 0x00c5 ), k_eControllerType_XBoxOneController, NULL }, // HORI Fighting Commander { MAKE_CONTROLLER_ID( 0x1532, 0x0a00 ), k_eControllerType_XBoxOneController, NULL }, // Razer Atrox Arcade Stick { MAKE_CONTROLLER_ID( 0x1532, 0x0a03 ), k_eControllerType_XBoxOneController, NULL }, // Razer Wildcat + { MAKE_CONTROLLER_ID( 0x1532, 0x0a14 ), k_eControllerType_XBoxOneController, NULL }, // Razer Wolverine Ultimate { MAKE_CONTROLLER_ID( 0x24c6, 0x541a ), k_eControllerType_XBoxOneController, NULL }, // PowerA Xbox One Mini Wired Controller { MAKE_CONTROLLER_ID( 0x24c6, 0x542a ), k_eControllerType_XBoxOneController, NULL }, // Xbox ONE spectra { MAKE_CONTROLLER_ID( 0x24c6, 0x543a ), k_eControllerType_XBoxOneController, "PowerA XBox One Controller" }, // PowerA Xbox ONE liquid metal controller @@ -453,7 +454,6 @@ static const ControllerDescription_t arrControllers[] = { { MAKE_CONTROLLER_ID( 0x146b, 0x605 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller { MAKE_CONTROLLER_ID( 0x146b, 0x606 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller { MAKE_CONTROLLER_ID( 0x146b, 0x609 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller - { MAKE_CONTROLLER_ID( 0x1532, 0xa14 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller { MAKE_CONTROLLER_ID( 0x1bad, 0x28e ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller { MAKE_CONTROLLER_ID( 0x1bad, 0x2a0 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller { MAKE_CONTROLLER_ID( 0x1bad, 0x5500 ), k_eControllerType_XBoxOneController, NULL }, // Unknown Controller diff --git a/src/joystick/hidapi/SDL_hidapi_xboxone.c b/src/joystick/hidapi/SDL_hidapi_xboxone.c index 507804bcb..faf79a687 100644 --- a/src/joystick/hidapi/SDL_hidapi_xboxone.c +++ b/src/joystick/hidapi/SDL_hidapi_xboxone.c @@ -128,17 +128,20 @@ static void DumpPacket(const char *prefix, Uint8 *data, int size) { int i; - char buffer[5*USB_PACKET_LENGTH]; + char *buffer; + size_t length = SDL_strlen(prefix) + 11*(USB_PACKET_LENGTH/8) + (5*USB_PACKET_LENGTH) + 1 + 1; - SDL_snprintf(buffer, sizeof(buffer), prefix, size); + buffer = (char *)SDL_malloc(length); + SDL_snprintf(buffer, length, prefix, size); for (i = 0; i < size; ++i) { if ((i % 8) == 0) { - SDL_snprintf(&buffer[SDL_strlen(buffer)], sizeof(buffer) - SDL_strlen(buffer), "\n%.2d: ", i); + SDL_snprintf(&buffer[SDL_strlen(buffer)], length - SDL_strlen(buffer), "\n%.2d: ", i); } - SDL_snprintf(&buffer[SDL_strlen(buffer)], sizeof(buffer) - SDL_strlen(buffer), " 0x%.2x", data[i]); + SDL_snprintf(&buffer[SDL_strlen(buffer)], length - SDL_strlen(buffer), " 0x%.2x", data[i]); } - SDL_strlcat(buffer, "\n", sizeof(buffer)); + SDL_strlcat(buffer, "\n", length); SDL_Log("%s", buffer); + SDL_free(buffer); } #endif /* DEBUG_XBOX_PROTOCOL */ @@ -226,7 +229,7 @@ SendControllerInit(SDL_HIDAPI_Device *device, SDL_DriverXboxOne_Context *ctx) } if (packet->response[0]) { - const Uint32 RESPONSE_TIMEOUT_MS = 50; + const Uint32 RESPONSE_TIMEOUT_MS = 100; Uint32 start = SDL_GetTicks(); SDL_bool got_response = SDL_FALSE; @@ -244,7 +247,7 @@ SendControllerInit(SDL_HIDAPI_Device *device, SDL_DriverXboxOne_Context *ctx) } } #ifdef DEBUG_XBOX_PROTOCOL - SDL_Log("Init sequence %d got response: %s\n", i, got_response ? "TRUE" : "FALSE"); + SDL_Log("Init sequence %d got response after %u ms: %s\n", i, (SDL_GetTicks() - start), got_response ? "TRUE" : "FALSE"); #endif } }