Added SDL_GameControllerType enumerations for the Amazon Luna and Google Stadia controllers

Fixes bug https://github.com/libsdl-org/SDL/issues/4019
This commit is contained in:
Sam Lantinga 2021-07-24 09:10:18 -07:00
parent 6956f4aa19
commit 94b7a87645
5 changed files with 27 additions and 16 deletions

View File

@ -67,7 +67,9 @@ typedef enum
SDL_CONTROLLER_TYPE_PS4, SDL_CONTROLLER_TYPE_PS4,
SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO, SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO,
SDL_CONTROLLER_TYPE_VIRTUAL, SDL_CONTROLLER_TYPE_VIRTUAL,
SDL_CONTROLLER_TYPE_PS5 SDL_CONTROLLER_TYPE_PS5,
SDL_CONTROLLER_TYPE_AMAZON_LUNA,
SDL_CONTROLLER_TYPE_GOOGLE_STADIA
} SDL_GameControllerType; } SDL_GameControllerType;
typedef enum typedef enum

View File

@ -1898,6 +1898,13 @@ SDL_GetJoystickGameControllerType(const char *name, Uint16 vendor, Uint16 produc
} else if (vendor == 0x0001 && product == 0x0001) { } else if (vendor == 0x0001 && product == 0x0001) {
type = SDL_CONTROLLER_TYPE_UNKNOWN; type = SDL_CONTROLLER_TYPE_UNKNOWN;
} else if ((vendor == USB_VENDOR_AMAZON && product == USB_PRODUCT_AMAZON_LUNA_CONTROLLER) ||
(vendor == BLUETOOTH_VENDOR_AMAZON && product == BLUETOOTH_PRODUCT_LUNA_CONTROLLER)) {
type = SDL_CONTROLLER_TYPE_AMAZON_LUNA;
} else if (vendor == USB_VENDOR_GOOGLE && product == USB_PRODUCT_GOOGLE_STADIA_CONTROLLER) {
type = SDL_CONTROLLER_TYPE_GOOGLE_STADIA;
} else { } else {
switch (GuessControllerType(vendor, product)) { switch (GuessControllerType(vendor, product)) {
case k_eControllerType_XBox360Controller: case k_eControllerType_XBox360Controller:

View File

@ -50,11 +50,7 @@ typedef struct {
static SDL_bool static SDL_bool
HIDAPI_DriverLuna_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol) HIDAPI_DriverLuna_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
{ {
if ((vendor_id == USB_VENDOR_AMAZON && product_id == USB_PRODUCT_AMAZON_LUNA_CONTROLLER) || return (type == SDL_CONTROLLER_TYPE_AMAZON_LUNA) ? SDL_TRUE : SDL_FALSE;
(vendor_id == BLUETOOTH_VENDOR_AMAZON && product_id == BLUETOOTH_PRODUCT_LUNA_CONTROLLER)) {
return SDL_TRUE;
}
return SDL_FALSE;
} }
static const char * static const char *

View File

@ -51,10 +51,7 @@ typedef struct {
static SDL_bool static SDL_bool
HIDAPI_DriverStadia_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol) HIDAPI_DriverStadia_IsSupportedDevice(const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
{ {
if (vendor_id == USB_VENDOR_GOOGLE && product_id == USB_PRODUCT_GOOGLE_STADIA_CONTROLLER) { return (type == SDL_CONTROLLER_TYPE_GOOGLE_STADIA) ? SDL_TRUE : SDL_FALSE;
return SDL_TRUE;
}
return SDL_FALSE;
} }
static const char * static const char *

View File

@ -554,11 +554,14 @@ main(int argc, char *argv[])
controller_count++; controller_count++;
name = SDL_GameControllerNameForIndex(i); name = SDL_GameControllerNameForIndex(i);
switch (SDL_GameControllerTypeForIndex(i)) { switch (SDL_GameControllerTypeForIndex(i)) {
case SDL_CONTROLLER_TYPE_XBOX360: case SDL_CONTROLLER_TYPE_AMAZON_LUNA:
description = "XBox 360 Controller"; description = "Amazon Luna Controller";
break; break;
case SDL_CONTROLLER_TYPE_XBOXONE: case SDL_CONTROLLER_TYPE_GOOGLE_STADIA:
description = "XBox One Controller"; description = "Google Stadia Controller";
break;
case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO:
description = "Nintendo Switch Pro Controller";
break; break;
case SDL_CONTROLLER_TYPE_PS3: case SDL_CONTROLLER_TYPE_PS3:
description = "PS3 Controller"; description = "PS3 Controller";
@ -566,8 +569,14 @@ main(int argc, char *argv[])
case SDL_CONTROLLER_TYPE_PS4: case SDL_CONTROLLER_TYPE_PS4:
description = "PS4 Controller"; description = "PS4 Controller";
break; break;
case SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO: case SDL_CONTROLLER_TYPE_PS5:
description = "Nintendo Switch Pro Controller"; description = "PS5 Controller";
break;
case SDL_CONTROLLER_TYPE_XBOX360:
description = "XBox 360 Controller";
break;
case SDL_CONTROLLER_TYPE_XBOXONE:
description = "XBox One Controller";
break; break;
case SDL_CONTROLLER_TYPE_VIRTUAL: case SDL_CONTROLLER_TYPE_VIRTUAL:
description = "Virtual Game Controller"; description = "Virtual Game Controller";