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;
}
}
}