mirror of https://github.com/encounter/SDL.git
Added a second hint SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED to control the Home button LED on Nintendo Joy-Con controllers separately from Nintendo Switch Pro controllers
This commit is contained in:
parent
8aa6922fec
commit
824f2d4650
|
@ -810,16 +810,27 @@ extern "C" {
|
||||||
#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH"
|
#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch controller is opened
|
* \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Pro controller is opened
|
||||||
*
|
*
|
||||||
* This variable can be set to the following values:
|
* This variable can be set to the following values:
|
||||||
* "0" - home button LED is turned off
|
* "0" - home button LED is turned off
|
||||||
* "1" - home button LED is turned on
|
* "1" - home button LED is turned on
|
||||||
*
|
*
|
||||||
* By default the Home button LED state is not changed.
|
* By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED.
|
||||||
*/
|
*/
|
||||||
#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED"
|
#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief A variable controlling whether the Home button LED should be turned on when a Nintendo Switch Joy-Con controller is opened
|
||||||
|
*
|
||||||
|
* This variable can be set to the following values:
|
||||||
|
* "0" - home button LED is turned off
|
||||||
|
* "1" - home button LED is turned on
|
||||||
|
*
|
||||||
|
* By default the Home button LED state is not changed. This hint can also be set to a floating point value between 0.0 and 1.0 which controls the brightness of the Home button LED.
|
||||||
|
*/
|
||||||
|
#define SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED "SDL_JOYSTICK_HIDAPI_JOYCON_HOME_LED"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Nintendo Switch controller.
|
* \brief A variable controlling whether the player LEDs should be lit to indicate which player is associated with a Nintendo Switch controller.
|
||||||
*
|
*
|
||||||
|
|
|
@ -249,7 +249,6 @@ typedef struct
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SDL_HIDAPI_Device *device;
|
SDL_HIDAPI_Device *device;
|
||||||
SDL_bool m_bInputOnly;
|
SDL_bool m_bInputOnly;
|
||||||
SDL_bool m_bHasHomeLED;
|
|
||||||
SDL_bool m_bUsingBluetooth;
|
SDL_bool m_bUsingBluetooth;
|
||||||
SDL_bool m_bIsGameCube;
|
SDL_bool m_bIsGameCube;
|
||||||
SDL_bool m_bUseButtonLabels;
|
SDL_bool m_bUseButtonLabels;
|
||||||
|
@ -304,8 +303,11 @@ typedef struct {
|
||||||
|
|
||||||
|
|
||||||
static SDL_bool
|
static SDL_bool
|
||||||
HasHomeLED(int vendor_id, int product_id)
|
HasHomeLED(SDL_DriverSwitch_Context *ctx)
|
||||||
{
|
{
|
||||||
|
Uint16 vendor_id = ctx->device->vendor_id;
|
||||||
|
Uint16 product_id = ctx->device->product_id;
|
||||||
|
|
||||||
/* The Power A Nintendo Switch Pro controllers don't have a Home LED */
|
/* The Power A Nintendo Switch Pro controllers don't have a Home LED */
|
||||||
if (vendor_id == 0 && product_id == 0) {
|
if (vendor_id == 0 && product_id == 0) {
|
||||||
return SDL_FALSE;
|
return SDL_FALSE;
|
||||||
|
@ -318,9 +320,7 @@ HasHomeLED(int vendor_id, int product_id)
|
||||||
|
|
||||||
/* The Nintendo Online classic controllers don't have a Home LED */
|
/* The Nintendo Online classic controllers don't have a Home LED */
|
||||||
if (vendor_id == USB_VENDOR_NINTENDO &&
|
if (vendor_id == USB_VENDOR_NINTENDO &&
|
||||||
(product_id == USB_PRODUCT_NINTENDO_N64_CONTROLLER ||
|
ctx->m_eControllerType > k_eSwitchDeviceInfoControllerType_ProController) {
|
||||||
product_id == USB_PRODUCT_NINTENDO_SEGA_GENESIS_CONTROLLER ||
|
|
||||||
product_id == USB_PRODUCT_NINTENDO_SNES_CONTROLLER)) {
|
|
||||||
return SDL_FALSE;
|
return SDL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1234,8 +1234,6 @@ HIDAPI_DriverSwitch_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joysti
|
||||||
/* Find out whether or not we can send output reports */
|
/* Find out whether or not we can send output reports */
|
||||||
ctx->m_bInputOnly = SDL_IsJoystickNintendoSwitchProInputOnly(device->vendor_id, device->product_id);
|
ctx->m_bInputOnly = SDL_IsJoystickNintendoSwitchProInputOnly(device->vendor_id, device->product_id);
|
||||||
if (!ctx->m_bInputOnly) {
|
if (!ctx->m_bInputOnly) {
|
||||||
ctx->m_bHasHomeLED = HasHomeLED(device->vendor_id, device->product_id);
|
|
||||||
|
|
||||||
/* Initialize rumble data */
|
/* Initialize rumble data */
|
||||||
SetNeutralRumble(&ctx->m_RumblePacket.rumbleData[0]);
|
SetNeutralRumble(&ctx->m_RumblePacket.rumbleData[0]);
|
||||||
SetNeutralRumble(&ctx->m_RumblePacket.rumbleData[1]);
|
SetNeutralRumble(&ctx->m_RumblePacket.rumbleData[1]);
|
||||||
|
@ -1314,10 +1312,16 @@ HIDAPI_DriverSwitch_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joysti
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the LED state */
|
/* Set the LED state */
|
||||||
if (ctx->m_bHasHomeLED) {
|
if (HasHomeLED(ctx)) {
|
||||||
|
if (ctx->m_eControllerType == k_eSwitchDeviceInfoControllerType_JoyConLeft ||
|
||||||
|
ctx->m_eControllerType == k_eSwitchDeviceInfoControllerType_JoyConRight) {
|
||||||
|
SDL_AddHintCallback(SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED,
|
||||||
|
SDL_HomeLEDHintChanged, ctx);
|
||||||
|
} else {
|
||||||
SDL_AddHintCallback(SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED,
|
SDL_AddHintCallback(SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED,
|
||||||
SDL_HomeLEDHintChanged, ctx);
|
SDL_HomeLEDHintChanged, ctx);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Set the serial number */
|
/* Set the serial number */
|
||||||
{
|
{
|
||||||
|
@ -2090,8 +2094,14 @@ HIDAPI_DriverSwitch_CloseJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joyst
|
||||||
SDL_DelHintCallback(SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS,
|
SDL_DelHintCallback(SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS,
|
||||||
SDL_GameControllerButtonReportingHintChanged, ctx);
|
SDL_GameControllerButtonReportingHintChanged, ctx);
|
||||||
|
|
||||||
|
if (ctx->m_eControllerType == k_eSwitchDeviceInfoControllerType_JoyConLeft ||
|
||||||
|
ctx->m_eControllerType == k_eSwitchDeviceInfoControllerType_JoyConRight) {
|
||||||
|
SDL_DelHintCallback(SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED,
|
||||||
|
SDL_HomeLEDHintChanged, ctx);
|
||||||
|
} else {
|
||||||
SDL_DelHintCallback(SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED,
|
SDL_DelHintCallback(SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED,
|
||||||
SDL_HomeLEDHintChanged, ctx);
|
SDL_HomeLEDHintChanged, ctx);
|
||||||
|
}
|
||||||
|
|
||||||
SDL_DelHintCallback(SDL_HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED,
|
SDL_DelHintCallback(SDL_HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED,
|
||||||
SDL_PlayerLEDHintChanged, ctx);
|
SDL_PlayerLEDHintChanged, ctx);
|
||||||
|
|
Loading…
Reference in New Issue