diff options
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Hid/Hid.cs')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Hid/Hid.cs | 55 |
1 files changed, 24 insertions, 31 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Hid/Hid.cs b/Ryujinx.HLE/HOS/Services/Hid/Hid.cs index 18a7ba11..61a12d9e 100644 --- a/Ryujinx.HLE/HOS/Services/Hid/Hid.cs +++ b/Ryujinx.HLE/HOS/Services/Hid/Hid.cs @@ -3,6 +3,14 @@ using Ryujinx.HLE.Exceptions; using Ryujinx.Common.Configuration.Hid; using System.Collections.Generic; using System.Runtime.CompilerServices; +using Ryujinx.Common.Memory; +using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory; +using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; +using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse; +using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard; +using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugPad; +using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen; +using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad; namespace Ryujinx.HLE.HOS.Services.Hid { @@ -12,7 +20,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid private readonly ulong _hidMemoryAddress; - internal ref HidSharedMemory SharedMemory => ref _device.Memory.GetRef<HidSharedMemory>(_hidMemoryAddress); + internal ref SharedMemory SharedMemory => ref _device.Memory.GetRef<SharedMemory>(_hidMemoryAddress); internal const int SharedMemEntryCount = 17; @@ -22,40 +30,30 @@ namespace Ryujinx.HLE.HOS.Services.Hid public KeyboardDevice Keyboard; public NpadDevices Npads; - static Hid() + private static void CheckTypeSizeOrThrow<T>(int expectedSize) { - if (Unsafe.SizeOf<ShMemDebugPad>() != 0x400) - { - throw new InvalidStructLayoutException<ShMemDebugPad>(0x400); - } - if (Unsafe.SizeOf<ShMemTouchScreen>() != 0x3000) - { - throw new InvalidStructLayoutException<ShMemTouchScreen>(0x3000); - } - if (Unsafe.SizeOf<ShMemKeyboard>() != 0x400) - { - throw new InvalidStructLayoutException<ShMemKeyboard>(0x400); - } - if (Unsafe.SizeOf<ShMemMouse>() != 0x400) - { - throw new InvalidStructLayoutException<ShMemMouse>(0x400); - } - if (Unsafe.SizeOf<ShMemNpad>() != 0x5000) + if (Unsafe.SizeOf<T>() != expectedSize) { - throw new InvalidStructLayoutException<ShMemNpad>(0x5000); - } - if (Unsafe.SizeOf<HidSharedMemory>() != Horizon.HidSize) - { - throw new InvalidStructLayoutException<HidSharedMemory>(Horizon.HidSize); + throw new InvalidStructLayoutException<T>(expectedSize); } } + static Hid() + { + CheckTypeSizeOrThrow<RingLifo<DebugPadState>>(0x2c8); + CheckTypeSizeOrThrow<RingLifo<TouchScreenState>>(0x2C38); + CheckTypeSizeOrThrow<RingLifo<MouseState>>(0x350); + CheckTypeSizeOrThrow<RingLifo<KeyboardState>>(0x3D8); + CheckTypeSizeOrThrow<Array10<NpadState>>(0x32000); + CheckTypeSizeOrThrow<SharedMemory>(Horizon.HidSize); + } + public Hid(in Switch device, ulong sharedHidMemoryAddress) { _device = device; _hidMemoryAddress = sharedHidMemoryAddress; - device.Memory.ZeroFill(sharedHidMemoryAddress, Horizon.HidSize); + SharedMemory = SharedMemory.Create(); } public void InitDevices() @@ -67,7 +65,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid Npads = new NpadDevices(_device, true); } - internal void RefreshInputConfig(List<InputConfig> inputConfig) + public void RefreshInputConfig(List<InputConfig> inputConfig) { ControllerConfig[] npadConfig = new ControllerConfig[inputConfig.Count]; @@ -80,11 +78,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid _device.Hid.Npads.Configure(npadConfig); } - internal void RefreshInputConfigEvent(object _, ReactiveEventArgs<List<InputConfig>> args) - { - RefreshInputConfig(args.NewValue); - } - public ControllerKeys UpdateStickButtons(JoystickPosition leftStick, JoystickPosition rightStick) { const int stickButtonThreshold = short.MaxValue / 2; |
