mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-15 22:35:59 +00:00
Added Steam Input API support for game controllers
Added support for getting the real controller info, as well as the function SDL_GetGamepadSteamHandle() to get the Steam Input API handle, from the virtual gamepads provided by Steam. Also added an event SDL_EVENT_GAMEPAD_STEAM_HANDLE_UPDATED which is triggered when a controller's API handle changes, e.g. the controllers were reassigned slots in the Steam UI.
This commit is contained in:
@@ -405,6 +405,19 @@ static void AddHIDElement(const void *value, void *parameter)
|
||||
}
|
||||
}
|
||||
|
||||
static int GetSteamVirtualGamepadSlot(Uint16 vendor_id, Uint16 product_id, const char *product_string)
|
||||
{
|
||||
int slot = -1;
|
||||
|
||||
if (vendor_id == USB_VENDOR_MICROSOFT && product_id == USB_PRODUCT_XBOX360_WIRED_CONTROLLER) {
|
||||
/* Gamepad name is "GamePad-N", where N is slot + 1 */
|
||||
if (SDL_sscanf(product_string, "GamePad-%d", &slot) == 1) {
|
||||
slot -= 1;
|
||||
}
|
||||
}
|
||||
return slot;
|
||||
}
|
||||
|
||||
static SDL_bool GetDeviceInfo(IOHIDDeviceRef hidDevice, recDevice *pDevice)
|
||||
{
|
||||
Sint32 vendor = 0;
|
||||
@@ -485,6 +498,7 @@ static SDL_bool GetDeviceInfo(IOHIDDeviceRef hidDevice, recDevice *pDevice)
|
||||
#endif
|
||||
|
||||
pDevice->guid = SDL_CreateJoystickGUID(SDL_HARDWARE_BUS_USB, (Uint16)vendor, (Uint16)product, (Uint16)version, pDevice->product, 0, 0);
|
||||
pDevice->steam_virtual_gamepad_slot = GetSteamVirtualGamepadSlot((Uint16)vendor, (Uint16)product, product_string);
|
||||
|
||||
array = IOHIDDeviceCopyMatchingElements(hidDevice, NULL, kIOHIDOptionsTypeNone);
|
||||
if (array) {
|
||||
@@ -711,6 +725,12 @@ const char *DARWIN_JoystickGetDevicePath(int device_index)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int DARWIN_JoystickGetDeviceSteamVirtualGamepadSlot(int device_index)
|
||||
{
|
||||
recDevice *device = GetDeviceForIndex(device_index);
|
||||
return device ? device->steam_virtual_gamepad_slot : -1;
|
||||
}
|
||||
|
||||
static int DARWIN_JoystickGetDevicePlayerIndex(int device_index)
|
||||
{
|
||||
return -1;
|
||||
@@ -1056,6 +1076,7 @@ SDL_JoystickDriver SDL_DARWIN_JoystickDriver = {
|
||||
DARWIN_JoystickDetect,
|
||||
DARWIN_JoystickGetDeviceName,
|
||||
DARWIN_JoystickGetDevicePath,
|
||||
DARWIN_JoystickGetDeviceSteamVirtualGamepadSlot,
|
||||
DARWIN_JoystickGetDevicePlayerIndex,
|
||||
DARWIN_JoystickSetDevicePlayerIndex,
|
||||
DARWIN_JoystickGetDeviceGUID,
|
||||
|
Reference in New Issue
Block a user