diff --git a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs index 6a8c1204..f04fdeb3 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Gamepad.cs @@ -57,13 +57,13 @@ namespace Ryujinx.Input.SDL2 private readonly object _userMappingLock = new(); - private List _buttonsUserMapping; + private readonly List _buttonsUserMapping; - private StickInputId[] _stickUserMapping = new StickInputId[(int)StickInputId.Count] + private readonly StickInputId[] _stickUserMapping = new StickInputId[(int)StickInputId.Count] { StickInputId.Unbound, StickInputId.Left, - StickInputId.Right + StickInputId.Right, }; public GamepadFeaturesFlag Features { get; } @@ -85,8 +85,15 @@ namespace Ryujinx.Input.SDL2 // Enable motion tracking if (Features.HasFlag(GamepadFeaturesFlag.Motion)) { - SDL_GameControllerSetSensorEnabled(_gamepadHandle, SDL_SensorType.SDL_SENSOR_ACCEL, SDL_bool.SDL_TRUE); - SDL_GameControllerSetSensorEnabled(_gamepadHandle, SDL_SensorType.SDL_SENSOR_GYRO, SDL_bool.SDL_TRUE); + if (SDL_GameControllerSetSensorEnabled(_gamepadHandle, SDL_SensorType.SDL_SENSOR_ACCEL, SDL_bool.SDL_TRUE) != 0) + { + Logger.Error?.Print(LogClass.Hid, $"Could not enable data reporting for SensorType {SDL_SensorType.SDL_SENSOR_ACCEL}."); + } + + if (SDL_GameControllerSetSensorEnabled(_gamepadHandle, SDL_SensorType.SDL_SENSOR_GYRO, SDL_bool.SDL_TRUE) != 0) + { + Logger.Error?.Print(LogClass.Hid, $"Could not enable data reporting for SensorType {SDL_SensorType.SDL_SENSOR_GYRO}."); + } } } @@ -144,7 +151,10 @@ namespace Ryujinx.Input.SDL2 if (durationMs == uint.MaxValue) { - SDL_GameControllerRumble(_gamepadHandle, lowFrequencyRaw, highFrequencyRaw, SDL_HAPTIC_INFINITY); + if (SDL_GameControllerRumble(_gamepadHandle, lowFrequencyRaw, highFrequencyRaw, SDL_HAPTIC_INFINITY) != 0) + { + Logger.Error?.Print(LogClass.Hid, "Rumble is not supported on this game controller."); + } } else if (durationMs > SDL_HAPTIC_INFINITY) { @@ -152,7 +162,10 @@ namespace Ryujinx.Input.SDL2 } else { - SDL_GameControllerRumble(_gamepadHandle, lowFrequencyRaw, highFrequencyRaw, durationMs); + if (SDL_GameControllerRumble(_gamepadHandle, lowFrequencyRaw, highFrequencyRaw, durationMs) != 0) + { + Logger.Error?.Print(LogClass.Hid, "Rumble is not supported on this game controller."); + } } } } @@ -182,13 +195,14 @@ namespace Ryujinx.Input.SDL2 if (result == 0) { - Vector3 value = new Vector3(values[0], values[1], values[2]); + Vector3 value = new(values[0], values[1], values[2]); if (inputId == MotionInputId.Gyroscope) { return RadToDegree(value); } - else if (inputId == MotionInputId.Accelerometer) + + if (inputId == MotionInputId.Accelerometer) { return GsToMs2(value); } @@ -359,18 +373,18 @@ namespace Ryujinx.Input.SDL2 { return ConvertRawStickValue(SDL_GameControllerGetAxis(_gamepadHandle, SDL_GameControllerAxis.SDL_CONTROLLER_AXIS_TRIGGERLEFT)) > _triggerThreshold; } - else if (inputId == GamepadButtonInputId.RightTrigger) + + if (inputId == GamepadButtonInputId.RightTrigger) { return ConvertRawStickValue(SDL_GameControllerGetAxis(_gamepadHandle, SDL_GameControllerAxis.SDL_CONTROLLER_AXIS_TRIGGERRIGHT)) > _triggerThreshold; } - else if (_buttonsDriverMapping[(int)inputId] == SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_INVALID) + + if (_buttonsDriverMapping[(int)inputId] == SDL_GameControllerButton.SDL_CONTROLLER_BUTTON_INVALID) { return false; } - else - { - return SDL_GameControllerGetButton(_gamepadHandle, _buttonsDriverMapping[(int)inputId]) == 1; - } + + return SDL_GameControllerGetButton(_gamepadHandle, _buttonsDriverMapping[(int)inputId]) == 1; } } } diff --git a/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs b/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs index d4086a10..d0e793de 100644 --- a/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs +++ b/src/Ryujinx.Input.SDL2/SDL2GamepadDriver.cs @@ -7,8 +7,8 @@ namespace Ryujinx.Input.SDL2 { public class SDL2GamepadDriver : IGamepadDriver { - private Dictionary _gamepadsInstanceIdsMapping; - private List _gamepadsIds; + private readonly Dictionary _gamepadsInstanceIdsMapping; + private readonly List _gamepadsIds; public ReadOnlySpan GamepadsIds => _gamepadsIds.ToArray(); @@ -35,7 +35,7 @@ namespace Ryujinx.Input.SDL2 } } - private string GenerateGamepadId(int joystickIndex) + private static string GenerateGamepadId(int joystickIndex) { Guid guid = SDL_JoystickGetDeviceGUID(joystickIndex); @@ -44,10 +44,10 @@ namespace Ryujinx.Input.SDL2 return null; } - return joystickIndex + "-" + guid.ToString(); + return joystickIndex + "-" + guid; } - private int GetJoystickIndexByGamepadId(string id) + private static int GetJoystickIndexByGamepadId(string id) { string[] data = id.Split("-"); @@ -118,6 +118,7 @@ namespace Ryujinx.Input.SDL2 public void Dispose() { + GC.SuppressFinalize(this); Dispose(true); } diff --git a/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs b/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs index 2fe0614d..f46930a8 100644 --- a/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs +++ b/src/Ryujinx.Input.SDL2/SDL2Keyboard.cs @@ -26,9 +26,11 @@ namespace Ryujinx.Input.SDL2 private readonly object _userMappingLock = new(); +#pragma warning disable IDE0052 // Remove unread private member private readonly SDL2KeyboardDriver _driver; +#pragma warning restore IDE0052 private StandardKeyboardInputConfig _configuration; - private List _buttonsUserMapping; + private readonly List _buttonsUserMapping; private static readonly SDL_Keycode[] _keysDriverMapping = new SDL_Keycode[(int)Key.Count] { @@ -208,29 +210,19 @@ namespace Ryujinx.Input.SDL2 private static SDL_Keymod GetKeyboardModifierMask(Key key) { - switch (key) + return key switch { - case Key.ShiftLeft: - return SDL_Keymod.KMOD_LSHIFT; - case Key.ShiftRight: - return SDL_Keymod.KMOD_RSHIFT; - case Key.ControlLeft: - return SDL_Keymod.KMOD_LCTRL; - case Key.ControlRight: - return SDL_Keymod.KMOD_RCTRL; - case Key.AltLeft: - return SDL_Keymod.KMOD_LALT; - case Key.AltRight: - return SDL_Keymod.KMOD_RALT; - case Key.WinLeft: - return SDL_Keymod.KMOD_LGUI; - case Key.WinRight: - return SDL_Keymod.KMOD_RGUI; + Key.ShiftLeft => SDL_Keymod.KMOD_LSHIFT, + Key.ShiftRight => SDL_Keymod.KMOD_RSHIFT, + Key.ControlLeft => SDL_Keymod.KMOD_LCTRL, + Key.ControlRight => SDL_Keymod.KMOD_RCTRL, + Key.AltLeft => SDL_Keymod.KMOD_LALT, + Key.AltRight => SDL_Keymod.KMOD_RALT, + Key.WinLeft => SDL_Keymod.KMOD_LGUI, + Key.WinRight => SDL_Keymod.KMOD_RGUI, // NOTE: Menu key isn't supported by SDL2. - case Key.Menu: - default: - return SDL_Keymod.KMOD_NONE; - } + _ => SDL_Keymod.KMOD_NONE, + }; } public KeyboardStateSnapshot GetKeyboardStateSnapshot() @@ -416,4 +408,4 @@ namespace Ryujinx.Input.SDL2 return Vector3.Zero; } } -} \ No newline at end of file +} diff --git a/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs b/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs index e9361c24..d0268adb 100644 --- a/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs +++ b/src/Ryujinx.Input.SDL2/SDLKeyboardDriver.cs @@ -38,6 +38,7 @@ namespace Ryujinx.Input.SDL2 public void Dispose() { + GC.SuppressFinalize(this); Dispose(true); } @@ -51,4 +52,4 @@ namespace Ryujinx.Input.SDL2 return new SDL2Keyboard(this, _keyboardIdentifers[0], "All keyboards"); } } -} \ No newline at end of file +}