diff options
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs')
| -rw-r--r-- | src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs new file mode 100644 index 00000000..8908b74d --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs @@ -0,0 +1,35 @@ +using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; +using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard; +using System; + +namespace Ryujinx.HLE.HOS.Services.Hid +{ + public class KeyboardDevice : BaseDevice + { + public KeyboardDevice(Switch device, bool active) : base(device, active) { } + + public void Update(KeyboardInput keyState) + { + ref RingLifo<KeyboardState> lifo = ref _device.Hid.SharedMemory.Keyboard; + + if (!Active) + { + lifo.Clear(); + + return; + } + + ref KeyboardState previousEntry = ref lifo.GetCurrentEntryRef(); + + KeyboardState newState = new KeyboardState + { + SamplingNumber = previousEntry.SamplingNumber + 1, + }; + + keyState.Keys.AsSpan().CopyTo(newState.Keys.RawData.AsSpan()); + newState.Modifiers = (KeyboardModifier)keyState.Modifier; + + lifo.Write(ref newState); + } + } +}
\ No newline at end of file |
