using Ryujinx.Common.Memory; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugPad; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad; using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen; using System.Runtime.InteropServices; namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory { /// /// Represent the shared memory shared between applications for input. /// [StructLayout(LayoutKind.Explicit, Size = 0x40000)] struct SharedMemory { /// /// Debug controller. /// [FieldOffset(0)] public RingLifo DebugPad; /// /// Touchscreen. /// [FieldOffset(0x400)] public RingLifo TouchScreen; /// /// Mouse. /// [FieldOffset(0x3400)] public RingLifo Mouse; /// /// Keyboard. /// [FieldOffset(0x3800)] public RingLifo Keyboard; /// /// Nintendo Pads. /// [FieldOffset(0x9A00)] public Array10 Npads; public static SharedMemory Create() { SharedMemory result = new SharedMemory { DebugPad = RingLifo.Create(), TouchScreen = RingLifo.Create(), Mouse = RingLifo.Create(), Keyboard = RingLifo.Create(), }; for (int i = 0; i < result.Npads.Length; i++) { result.Npads[i] = NpadState.Create(); } return result; } } }