From 2f18fa1d6af6d77ff7d9f73d134530af39666914 Mon Sep 17 00:00:00 2001 From: Thog Date: Fri, 26 Apr 2019 19:56:44 +0200 Subject: [PATCH] Make hid keyboard feature toggleable --- Ryujinx.HLE/Input/Hid.cs | 4 ++-- Ryujinx/Config.jsonc | 5 ++++- Ryujinx/Configuration.cs | 5 +++++ Ryujinx/Ui/GLScreen.cs | 16 ++++++++++++---- Ryujinx/Ui/NpadKeyboard.cs | 2 ++ Ryujinx/_schema.json | 12 ++++++++++++ 6 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Ryujinx.HLE/Input/Hid.cs b/Ryujinx.HLE/Input/Hid.cs index 9e4ea0b858..83c4ddea01 100644 --- a/Ryujinx.HLE/Input/Hid.cs +++ b/Ryujinx.HLE/Input/Hid.cs @@ -150,8 +150,8 @@ namespace Ryujinx.HLE.Input _device.Memory.WriteInt64(keyboardOffset + 0x18, HidEntryCount - 1); long keyboardEntryOffset = keyboardOffset + HidKeyboardHeaderSize; - long lastEntryOffset = keyboardEntryOffset + lastEntry * HidKeyboardEntrySize; - long sampleCounter = _device.Memory.ReadInt64(lastEntryOffset); + long lastEntryOffset = keyboardEntryOffset + lastEntry * HidKeyboardEntrySize; + long sampleCounter = _device.Memory.ReadInt64(lastEntryOffset); keyboardEntryOffset += currEntry * HidKeyboardEntrySize; _device.Memory.WriteInt64(keyboardEntryOffset + 0x00, sampleCounter + 1); diff --git a/Ryujinx/Config.jsonc b/Ryujinx/Config.jsonc index 376cf502af..85190b7d6e 100644 --- a/Ryujinx/Config.jsonc +++ b/Ryujinx/Config.jsonc @@ -45,12 +45,15 @@ "enable_aggressive_cpu_opts": true, // Enable or disable ignoring missing services, this may cause instability - "ignore_missing_services": false, + "ignore_missing_services": false, // The primary controller's type // Supported Values: Handheld, ProController, NpadPair, NpadLeft, NpadRight "controller_type": "Handheld", + // Enable or disable keyboard support (Independent from controllers binding) + "enable_keyboard": true, + // Keyboard Controls // https://github.com/opentk/opentk/blob/master/src/OpenTK/Input/Key.cs "keyboard_controls": { diff --git a/Ryujinx/Configuration.cs b/Ryujinx/Configuration.cs index c62734c3d6..1c49de0803 100644 --- a/Ryujinx/Configuration.cs +++ b/Ryujinx/Configuration.cs @@ -102,6 +102,11 @@ namespace Ryujinx /// public HidControllerType ControllerType { get; private set; } + /// + /// Enable or disable keyboard support (Independent from controllers binding) + /// + public bool EnableKeyboard { get; private set; } + /// /// Keyboard control bindings /// diff --git a/Ryujinx/Ui/GLScreen.cs b/Ryujinx/Ui/GLScreen.cs index 5d53f9dbf6..65d9e7ea5c 100644 --- a/Ryujinx/Ui/GLScreen.cs +++ b/Ryujinx/Ui/GLScreen.cs @@ -145,7 +145,7 @@ namespace Ryujinx HidControllerButtons currentButton = 0; HidJoystickPosition leftJoystick; HidJoystickPosition rightJoystick; - HidKeyboard hidKeyboard; + HidKeyboard? hidKeyboard = null; int leftJoystickDx = 0; int leftJoystickDy = 0; @@ -165,12 +165,17 @@ namespace Ryujinx // Normal Input currentHotkeyButtons = Configuration.Instance.KeyboardControls.GetHotkeyButtons(keyboard); currentButton = Configuration.Instance.KeyboardControls.GetButtons(keyboard); - hidKeyboard = Configuration.Instance.KeyboardControls.GetKeysDown(keyboard); + + if (Configuration.Instance.EnableKeyboard) + { + hidKeyboard = Configuration.Instance.KeyboardControls.GetKeysDown(keyboard); + } (leftJoystickDx, leftJoystickDy) = Configuration.Instance.KeyboardControls.GetLeftStick(keyboard); (rightJoystickDx, rightJoystickDy) = Configuration.Instance.KeyboardControls.GetRightStick(keyboard); } - else + + if (!hidKeyboard.HasValue) { hidKeyboard = new HidKeyboard { @@ -265,7 +270,10 @@ namespace Ryujinx _device.Hid.SetTouchPoints(); } - _device.Hid.WriteKeyboard(hidKeyboard); + if (Configuration.Instance.EnableKeyboard && hidKeyboard.HasValue) + { + _device.Hid.WriteKeyboard(hidKeyboard.Value); + } HidControllerBase controller = _device.Hid.PrimaryController; diff --git a/Ryujinx/Ui/NpadKeyboard.cs b/Ryujinx/Ui/NpadKeyboard.cs index b12cb5c28d..b44fdc668a 100644 --- a/Ryujinx/Ui/NpadKeyboard.cs +++ b/Ryujinx/Ui/NpadKeyboard.cs @@ -279,12 +279,14 @@ namespace Ryujinx.UI.Input foreach (KeyMapping keyMapping in KEY_MAPPING) { int value = keyboard[keyMapping.TargetKey] ? 1 : 0; + hidKeyboard.Keys[keyMapping.Target / 0x20] |= (value << (keyMapping.Target % 0x20)); } foreach (KeyMapping keyMapping in KEY_MODIFIER_MAPPING) { int value = keyboard[keyMapping.TargetKey] ? 1 : 0; + hidKeyboard.Modifier |= value << keyMapping.Target; } diff --git a/Ryujinx/_schema.json b/Ryujinx/_schema.json index d06c8e91b1..c32fcfafe1 100644 --- a/Ryujinx/_schema.json +++ b/Ryujinx/_schema.json @@ -19,6 +19,7 @@ "enable_fs_integrity_checks", "enable_aggressive_cpu_opts", "controller_type", + "enable_keyboard", "keyboard_controls", "gamepad_controls" ], @@ -442,6 +443,17 @@ "NpadRight" ] }, + "enable_keyboard": { + "$id": "#/properties/enable_keyboard", + "type": "boolean", + "title": "Keyboard Enable", + "description": "Enables or disables keyboard support", + "default": true, + "examples": [ + true, + false + ] + }, "keyboard_controls": { "$id": "#/properties/keyboard_controls", "type": "object",