KeyboardDevice.cs 1014 B

1234567891011121314151617181920212223242526272829303132333435
  1. using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common;
  2. using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard;
  3. using System;
  4. namespace Ryujinx.HLE.HOS.Services.Hid
  5. {
  6. public class KeyboardDevice : BaseDevice
  7. {
  8. public KeyboardDevice(Switch device, bool active) : base(device, active) { }
  9. public unsafe void Update(KeyboardInput keyState)
  10. {
  11. ref RingLifo<KeyboardState> lifo = ref _device.Hid.SharedMemory.Keyboard;
  12. if (!Active)
  13. {
  14. lifo.Clear();
  15. return;
  16. }
  17. ref KeyboardState previousEntry = ref lifo.GetCurrentEntryRef();
  18. KeyboardState newState = new KeyboardState
  19. {
  20. SamplingNumber = previousEntry.SamplingNumber + 1,
  21. };
  22. keyState.Keys.AsSpan().CopyTo(newState.Keys.RawData.ToSpan());
  23. newState.Modifiers = (KeyboardModifier)keyState.Modifier;
  24. lifo.Write(ref newState);
  25. }
  26. }
  27. }