mirror of
https://github.com/libsdl-org/SDL.git
synced 2024-11-27 13:53:37 +08:00
Added support for the Joy-Con Charging Grip when SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS is enabled
This commit is contained in:
parent
d483970262
commit
9fdb06450d
@ -615,8 +615,7 @@ static ControllerMapping_t *SDL_CreateMappingForHIDAPIController(SDL_JoystickGUI
|
|||||||
/* Joy-Cons have extra buttons in the same place as paddles */
|
/* Joy-Cons have extra buttons in the same place as paddles */
|
||||||
if (SDL_IsJoystickNintendoSwitchJoyConLeft(vendor, product)) {
|
if (SDL_IsJoystickNintendoSwitchJoyConLeft(vendor, product)) {
|
||||||
SDL_strlcat(mapping_string, "paddle2:b17,paddle4:b19,", sizeof(mapping_string));
|
SDL_strlcat(mapping_string, "paddle2:b17,paddle4:b19,", sizeof(mapping_string));
|
||||||
}
|
} else if (SDL_IsJoystickNintendoSwitchJoyConRight(vendor, product)) {
|
||||||
else if (SDL_IsJoystickNintendoSwitchJoyConRight(vendor, product)) {
|
|
||||||
SDL_strlcat(mapping_string, "paddle1:b16,paddle3:b18,", sizeof(mapping_string));
|
SDL_strlcat(mapping_string, "paddle1:b16,paddle3:b18,", sizeof(mapping_string));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1906,6 +1906,9 @@ SDL_GetJoystickGameControllerType(const char *name, Uint16 vendor, Uint16 produc
|
|||||||
} else if (vendor == USB_VENDOR_GOOGLE && product == USB_PRODUCT_GOOGLE_STADIA_CONTROLLER) {
|
} else if (vendor == USB_VENDOR_GOOGLE && product == USB_PRODUCT_GOOGLE_STADIA_CONTROLLER) {
|
||||||
type = SDL_CONTROLLER_TYPE_GOOGLE_STADIA;
|
type = SDL_CONTROLLER_TYPE_GOOGLE_STADIA;
|
||||||
|
|
||||||
|
} else if (vendor == USB_VENDOR_NINTENDO && product == USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_GRIP) {
|
||||||
|
type = SDL_GetHintBoolean(SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS, SDL_FALSE) ? SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO : SDL_CONTROLLER_TYPE_UNKNOWN;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
switch (GuessControllerType(vendor, product)) {
|
switch (GuessControllerType(vendor, product)) {
|
||||||
case k_eControllerType_XBox360Controller:
|
case k_eControllerType_XBox360Controller:
|
||||||
@ -2012,7 +2015,8 @@ SDL_IsJoystickNintendoSwitchPro(Uint16 vendor_id, Uint16 product_id)
|
|||||||
{
|
{
|
||||||
EControllerType eType = GuessControllerType(vendor_id, product_id);
|
EControllerType eType = GuessControllerType(vendor_id, product_id);
|
||||||
return (eType == k_eControllerType_SwitchProController ||
|
return (eType == k_eControllerType_SwitchProController ||
|
||||||
eType == k_eControllerType_SwitchInputOnlyController);
|
eType == k_eControllerType_SwitchInputOnlyController ||
|
||||||
|
(vendor_id == USB_VENDOR_NINTENDO && product_id == USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_GRIP));
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_bool
|
SDL_bool
|
||||||
|
@ -323,6 +323,10 @@ HIDAPI_DriverSwitch_GetDeviceName(Uint16 vendor_id, Uint16 product_id)
|
|||||||
{
|
{
|
||||||
/* Give a user friendly name for this controller */
|
/* Give a user friendly name for this controller */
|
||||||
if (vendor_id == USB_VENDOR_NINTENDO) {
|
if (vendor_id == USB_VENDOR_NINTENDO) {
|
||||||
|
if (product_id == USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_GRIP) {
|
||||||
|
return "Nintendo Switch Joy-Con Grip";
|
||||||
|
}
|
||||||
|
|
||||||
if (product_id == USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_LEFT) {
|
if (product_id == USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_LEFT) {
|
||||||
return "Nintendo Switch Joy-Con Left";
|
return "Nintendo Switch Joy-Con Left";
|
||||||
}
|
}
|
||||||
@ -642,7 +646,8 @@ static SDL_bool BTrySetupUSB(SDL_DriverSwitch_Context *ctx)
|
|||||||
/*return SDL_FALSE;*/
|
/*return SDL_FALSE;*/
|
||||||
}
|
}
|
||||||
if (!WriteProprietary(ctx, k_eSwitchProprietaryCommandIDs_Handshake, NULL, 0, SDL_TRUE)) {
|
if (!WriteProprietary(ctx, k_eSwitchProprietaryCommandIDs_Handshake, NULL, 0, SDL_TRUE)) {
|
||||||
return SDL_FALSE;
|
/* This fails on the right Joy-Con when plugged into the charging grip */
|
||||||
|
/*return SDL_FALSE;*/
|
||||||
}
|
}
|
||||||
if (!WriteProprietary(ctx, k_eSwitchProprietaryCommandIDs_ForceUSB, NULL, 0, SDL_FALSE)) {
|
if (!WriteProprietary(ctx, k_eSwitchProprietaryCommandIDs_ForceUSB, NULL, 0, SDL_FALSE)) {
|
||||||
return SDL_FALSE;
|
return SDL_FALSE;
|
||||||
@ -892,6 +897,7 @@ HIDAPI_DriverSwitch_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joysti
|
|||||||
*/
|
*/
|
||||||
if (device->vendor_id == USB_VENDOR_NINTENDO &&
|
if (device->vendor_id == USB_VENDOR_NINTENDO &&
|
||||||
(device->product_id == USB_PRODUCT_NINTENDO_SWITCH_PRO ||
|
(device->product_id == USB_PRODUCT_NINTENDO_SWITCH_PRO ||
|
||||||
|
device->product_id == USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_GRIP ||
|
||||||
device->product_id == USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_LEFT ||
|
device->product_id == USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_LEFT ||
|
||||||
device->product_id == USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_RIGHT)) {
|
device->product_id == USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_RIGHT)) {
|
||||||
input_mode = k_eSwitchInputReportIDs_FullControllerState;
|
input_mode = k_eSwitchInputReportIDs_FullControllerState;
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#define USB_PRODUCT_NINTENDO_SWITCH_PRO 0x2009
|
#define USB_PRODUCT_NINTENDO_SWITCH_PRO 0x2009
|
||||||
#define USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_LEFT 0x2006
|
#define USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_LEFT 0x2006
|
||||||
#define USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_RIGHT 0x2007
|
#define USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_RIGHT 0x2007
|
||||||
|
#define USB_PRODUCT_NINTENDO_SWITCH_JOY_CON_GRIP 0x200e
|
||||||
#define USB_PRODUCT_RAZER_PANTHERA 0x0401
|
#define USB_PRODUCT_RAZER_PANTHERA 0x0401
|
||||||
#define USB_PRODUCT_RAZER_PANTHERA_EVO 0x1008
|
#define USB_PRODUCT_RAZER_PANTHERA_EVO 0x1008
|
||||||
#define USB_PRODUCT_RAZER_ATROX 0x0a00
|
#define USB_PRODUCT_RAZER_ATROX 0x0a00
|
||||||
|
@ -518,6 +518,7 @@ main(int argc, char *argv[])
|
|||||||
char guid[64];
|
char guid[64];
|
||||||
|
|
||||||
SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0");
|
SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0");
|
||||||
|
SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS, "1");
|
||||||
SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE, "1");
|
SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE, "1");
|
||||||
SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE, "1");
|
SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE, "1");
|
||||||
SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");
|
SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");
|
||||||
|
Loading…
Reference in New Issue
Block a user