mirror of
https://git.naxdy.org/Mirror/Ryujinx.git
synced 2024-12-27 19:13:04 +00:00
More progress
This commit is contained in:
parent
b7239a6e3e
commit
baf85f3b93
70 changed files with 403 additions and 117 deletions
|
@ -1,14 +0,0 @@
|
||||||
namespace Ryujinx.HLE.HOS.Services.Hid
|
|
||||||
{
|
|
||||||
public abstract class BaseDevice
|
|
||||||
{
|
|
||||||
protected readonly Switch _device;
|
|
||||||
public bool Active;
|
|
||||||
|
|
||||||
public BaseDevice(Switch device, bool active)
|
|
||||||
{
|
|
||||||
_device = device;
|
|
||||||
Active = active;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -5,6 +5,7 @@ using Ryujinx.HLE.HOS.Kernel.Threading;
|
||||||
using Ryujinx.HLE.HOS.Services.Hid.HidServer;
|
using Ryujinx.HLE.HOS.Services.Hid.HidServer;
|
||||||
using Ryujinx.Horizon.Common;
|
using Ryujinx.Horizon.Common;
|
||||||
using Ryujinx.Horizon.Sdk.Hid;
|
using Ryujinx.Horizon.Sdk.Hid;
|
||||||
|
using Ryujinx.Horizon.Sdk.Hid.HidDevices;
|
||||||
using Ryujinx.Horizon.Sdk.Hid.Npad;
|
using Ryujinx.Horizon.Sdk.Hid.Npad;
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SixAxis;
|
using Ryujinx.Horizon.Sdk.Hid.SixAxis;
|
||||||
using Ryujinx.Horizon.Sdk.Hid.Vibration;
|
using Ryujinx.Horizon.Sdk.Hid.Vibration;
|
||||||
|
@ -83,7 +84,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
|
|
||||||
// Initialize entries to avoid issues with some games.
|
// Initialize entries to avoid issues with some games.
|
||||||
|
|
||||||
for (int entry = 0; entry < Hid.SharedMemEntryCount; entry++)
|
for (int entry = 0; entry < Ryujinx.Horizon.Sdk.Hid.Hid.SharedMemEntryCount; entry++)
|
||||||
{
|
{
|
||||||
context.Device.Hid.DebugPad.Update();
|
context.Device.Hid.DebugPad.Update();
|
||||||
}
|
}
|
||||||
|
@ -103,7 +104,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
|
|
||||||
// Initialize entries to avoid issues with some games.
|
// Initialize entries to avoid issues with some games.
|
||||||
|
|
||||||
for (int entry = 0; entry < Hid.SharedMemEntryCount; entry++)
|
for (int entry = 0; entry < Ryujinx.Horizon.Sdk.Hid.Hid.SharedMemEntryCount; entry++)
|
||||||
{
|
{
|
||||||
context.Device.Hid.Touchscreen.Update();
|
context.Device.Hid.Touchscreen.Update();
|
||||||
}
|
}
|
||||||
|
@ -123,7 +124,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
|
|
||||||
// Initialize entries to avoid issues with some games.
|
// Initialize entries to avoid issues with some games.
|
||||||
|
|
||||||
for (int entry = 0; entry < Hid.SharedMemEntryCount; entry++)
|
for (int entry = 0; entry < Ryujinx.Horizon.Sdk.Hid.Hid.SharedMemEntryCount; entry++)
|
||||||
{
|
{
|
||||||
context.Device.Hid.Mouse.Update(0, 0);
|
context.Device.Hid.Mouse.Update(0, 0);
|
||||||
}
|
}
|
||||||
|
@ -148,7 +149,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
Keys = new ulong[4],
|
Keys = new ulong[4],
|
||||||
};
|
};
|
||||||
|
|
||||||
for (int entry = 0; entry < Hid.SharedMemEntryCount; entry++)
|
for (int entry = 0; entry < Ryujinx.Horizon.Sdk.Hid.Hid.SharedMemEntryCount; entry++)
|
||||||
{
|
{
|
||||||
context.Device.Hid.Keyboard.Update(emptyInput);
|
context.Device.Hid.Keyboard.Update(emptyInput);
|
||||||
}
|
}
|
||||||
|
@ -859,7 +860,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
emptySixAxisInputs.Add(sixaxisInput);
|
emptySixAxisInputs.Add(sixaxisInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int entry = 0; entry < Hid.SharedMemEntryCount; entry++)
|
for (int entry = 0; entry < Ryujinx.Horizon.Sdk.Hid.Hid.SharedMemEntryCount; entry++)
|
||||||
{
|
{
|
||||||
context.Device.Hid.Npads.Update(emptyGamepadInputs);
|
context.Device.Hid.Npads.Update(emptyGamepadInputs);
|
||||||
context.Device.Hid.Npads.UpdateSixAxis(emptySixAxisInputs);
|
context.Device.Hid.Npads.UpdateSixAxis(emptySixAxisInputs);
|
||||||
|
|
|
@ -8,6 +8,7 @@ using Ryujinx.HLE.HOS.Services.Apm;
|
||||||
using Ryujinx.HLE.HOS.Services.Hid;
|
using Ryujinx.HLE.HOS.Services.Hid;
|
||||||
using Ryujinx.HLE.Loaders.Processes;
|
using Ryujinx.HLE.Loaders.Processes;
|
||||||
using Ryujinx.HLE.UI;
|
using Ryujinx.HLE.UI;
|
||||||
|
using Ryujinx.Horizon.Sdk.Hid;
|
||||||
using Ryujinx.Memory;
|
using Ryujinx.Memory;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
|
|
7
src/Ryujinx.Horizon/Hid/HidServer.cs
Normal file
7
src/Ryujinx.Horizon/Hid/HidServer.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Ryujinx.Horizon.Hid
|
||||||
|
{
|
||||||
|
class HidServer : IHidServer
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,21 +1,18 @@
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Configuration.Hid;
|
using Ryujinx.Common.Configuration.Hid;
|
||||||
using Ryujinx.Common.Memory;
|
using Ryujinx.Common.Memory;
|
||||||
using Ryujinx.HLE.Exceptions;
|
using Ryujinx.Horizon.Sdk.Hid.HidDevices;
|
||||||
using Ryujinx.HLE.HOS.Kernel.Memory;
|
|
||||||
using Ryujinx.Horizon.Sdk.Hid;
|
|
||||||
using Ryujinx.Horizon.Sdk.Hid.Npad;
|
using Ryujinx.Horizon.Sdk.Hid.Npad;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using ControllerType = Ryujinx.Horizon.Sdk.Hid.Npad.ControllerType;
|
using ControllerType = Ryujinx.Horizon.Sdk.Hid.Npad.ControllerType;
|
||||||
using PlayerIndex = Ryujinx.Horizon.Sdk.Hid.Npad.PlayerIndex;
|
using PlayerIndex = Ryujinx.Horizon.Sdk.Hid.Npad.PlayerIndex;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Hid
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
public class Hid
|
public class Hid
|
||||||
{
|
{
|
||||||
private readonly Switch _device;
|
internal const int HidSize = 0x40000;
|
||||||
|
|
||||||
private readonly SharedMemoryStorage _storage;
|
private readonly SharedMemoryStorage _storage;
|
||||||
|
|
||||||
internal ref SharedMemory SharedMemory => ref _storage.GetRef<SharedMemory>(0);
|
internal ref SharedMemory SharedMemory => ref _storage.GetRef<SharedMemory>(0);
|
||||||
|
@ -43,12 +40,11 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
CheckTypeSizeOrThrow<RingLifo<MouseState>>(0x350);
|
CheckTypeSizeOrThrow<RingLifo<MouseState>>(0x350);
|
||||||
CheckTypeSizeOrThrow<RingLifo<KeyboardState>>(0x3D8);
|
CheckTypeSizeOrThrow<RingLifo<KeyboardState>>(0x3D8);
|
||||||
CheckTypeSizeOrThrow<Array10<NpadState>>(0x32000);
|
CheckTypeSizeOrThrow<Array10<NpadState>>(0x32000);
|
||||||
CheckTypeSizeOrThrow<SharedMemory>(Horizon.HidSize);
|
CheckTypeSizeOrThrow<SharedMemory>(HidSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Hid(in Switch device, SharedMemoryStorage storage)
|
internal Hid(SharedMemoryStorage storage)
|
||||||
{
|
{
|
||||||
_device = device;
|
|
||||||
_storage = storage;
|
_storage = storage;
|
||||||
|
|
||||||
SharedMemory = SharedMemory.Create();
|
SharedMemory = SharedMemory.Create();
|
||||||
|
@ -58,11 +54,11 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
|
|
||||||
private void InitDevices()
|
private void InitDevices()
|
||||||
{
|
{
|
||||||
DebugPad = new DebugPadDevice(_device, true);
|
DebugPad = new DebugPadDevice(true);
|
||||||
Touchscreen = new TouchDevice(_device, true);
|
Touchscreen = new TouchDevice(true);
|
||||||
Mouse = new MouseDevice(_device, false);
|
Mouse = new MouseDevice(false);
|
||||||
Keyboard = new KeyboardDevice(_device, false);
|
Keyboard = new KeyboardDevice(false);
|
||||||
Npads = new NpadDevices(_device, true);
|
Npads = new NpadDevices(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RefreshInputConfig(List<InputConfig> inputConfig)
|
public void RefreshInputConfig(List<InputConfig> inputConfig)
|
||||||
|
@ -75,7 +71,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
npadConfig[i].Type = (ControllerType)inputConfig[i].ControllerType;
|
npadConfig[i].Type = (ControllerType)inputConfig[i].ControllerType;
|
||||||
}
|
}
|
||||||
|
|
||||||
_device.Hid.Npads.Configure(npadConfig);
|
Npads.Configure(npadConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ControllerKeys UpdateStickButtons(JoystickPosition leftStick, JoystickPosition rightStick)
|
public ControllerKeys UpdateStickButtons(JoystickPosition leftStick, JoystickPosition rightStick)
|
12
src/Ryujinx.Horizon/Sdk/Hid/HidDevices/BaseDevice.cs
Normal file
12
src/Ryujinx.Horizon/Sdk/Hid/HidDevices/BaseDevice.cs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid.HidDevices
|
||||||
|
{
|
||||||
|
public abstract class BaseDevice
|
||||||
|
{
|
||||||
|
public bool Active;
|
||||||
|
|
||||||
|
public BaseDevice(bool active)
|
||||||
|
{
|
||||||
|
Active = active;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
namespace Ryujinx.HLE.HOS.Services.Hid
|
namespace Ryujinx.Horizon.Sdk.Hid.HidDevices
|
||||||
{
|
{
|
||||||
public class DebugPadDevice : BaseDevice
|
public class DebugPadDevice : BaseDevice
|
||||||
{
|
{
|
||||||
public DebugPadDevice(Switch device, bool active) : base(device, active) { }
|
public DebugPadDevice(bool active) : base(active) { }
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
|
@ -1,11 +1,10 @@
|
||||||
using Ryujinx.Horizon.Sdk.Hid;
|
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Hid
|
namespace Ryujinx.Horizon.Sdk.Hid.HidDevices
|
||||||
{
|
{
|
||||||
public class KeyboardDevice : BaseDevice
|
public class KeyboardDevice : BaseDevice
|
||||||
{
|
{
|
||||||
public KeyboardDevice(Switch device, bool active) : base(device, active) { }
|
public KeyboardDevice(bool active) : base(active) { }
|
||||||
|
|
||||||
public void Update(KeyboardInput keyState)
|
public void Update(KeyboardInput keyState)
|
||||||
{
|
{
|
|
@ -1,8 +1,8 @@
|
||||||
namespace Ryujinx.HLE.HOS.Services.Hid
|
namespace Ryujinx.Horizon.Sdk.Hid.HidDevices
|
||||||
{
|
{
|
||||||
public class MouseDevice : BaseDevice
|
public class MouseDevice : BaseDevice
|
||||||
{
|
{
|
||||||
public MouseDevice(Switch device, bool active) : base(device, active) { }
|
public MouseDevice(bool active) : base(active) { }
|
||||||
|
|
||||||
public void Update(int mouseX, int mouseY, uint buttons = 0, int scrollX = 0, int scrollY = 0, bool connected = false)
|
public void Update(int mouseX, int mouseY, uint buttons = 0, int scrollX = 0, int scrollY = 0, bool connected = false)
|
||||||
{
|
{
|
|
@ -1,15 +1,15 @@
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.HLE.HOS.Kernel.Threading;
|
|
||||||
using Ryujinx.Horizon.Sdk.Hid;
|
|
||||||
using Ryujinx.Horizon.Sdk.Hid.Npad;
|
using Ryujinx.Horizon.Sdk.Hid.Npad;
|
||||||
|
using Ryujinx.Horizon.Sdk.Hid.SixAxis;
|
||||||
using Ryujinx.Horizon.Sdk.Hid.Vibration;
|
using Ryujinx.Horizon.Sdk.Hid.Vibration;
|
||||||
|
using Ryujinx.Horizon.Sdk.OsTypes;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Hid
|
namespace Ryujinx.Horizon.Sdk.Hid.HidDevices
|
||||||
{
|
{
|
||||||
public class NpadDevices : BaseDevice
|
public class NpadDevices : BaseDevice
|
||||||
{
|
{
|
||||||
|
@ -19,7 +19,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
|
|
||||||
public const int MaxControllers = 9; // Players 1-8 and Handheld
|
public const int MaxControllers = 9; // Players 1-8 and Handheld
|
||||||
private ControllerType[] _configuredTypes;
|
private ControllerType[] _configuredTypes;
|
||||||
private readonly KEvent[] _styleSetUpdateEvents;
|
private readonly Event[] _styleSetUpdateEvents;
|
||||||
private readonly bool[] _supportedPlayers;
|
private readonly bool[] _supportedPlayers;
|
||||||
private VibrationValue _neutralVibrationValue = new()
|
private VibrationValue _neutralVibrationValue = new()
|
||||||
{
|
{
|
||||||
|
@ -36,7 +36,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
public Dictionary<PlayerIndex, ConcurrentQueue<(VibrationValue, VibrationValue)>> RumbleQueues = new();
|
public Dictionary<PlayerIndex, ConcurrentQueue<(VibrationValue, VibrationValue)>> RumbleQueues = new();
|
||||||
public Dictionary<PlayerIndex, (VibrationValue, VibrationValue)> LastVibrationValues = new();
|
public Dictionary<PlayerIndex, (VibrationValue, VibrationValue)> LastVibrationValues = new();
|
||||||
|
|
||||||
public NpadDevices(Switch device, bool active = true) : base(device, active)
|
public NpadDevices(bool active = true) : base(active)
|
||||||
{
|
{
|
||||||
_configuredTypes = new ControllerType[MaxControllers];
|
_configuredTypes = new ControllerType[MaxControllers];
|
||||||
|
|
||||||
|
@ -47,10 +47,10 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
_supportedPlayers = new bool[MaxControllers];
|
_supportedPlayers = new bool[MaxControllers];
|
||||||
_supportedPlayers.AsSpan().Fill(true);
|
_supportedPlayers.AsSpan().Fill(true);
|
||||||
|
|
||||||
_styleSetUpdateEvents = new KEvent[MaxControllers];
|
_styleSetUpdateEvents = new Event[MaxControllers];
|
||||||
for (int i = 0; i < _styleSetUpdateEvents.Length; ++i)
|
for (int i = 0; i < _styleSetUpdateEvents.Length; ++i)
|
||||||
{
|
{
|
||||||
_styleSetUpdateEvents[i] = new KEvent(_device.System.KernelContext);
|
_styleSetUpdateEvents[i] = new Event(_device.System.KernelContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
_activeCount = 0;
|
_activeCount = 0;
|
||||||
|
@ -58,7 +58,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
|
||||||
JoyHold = NpadJoyHoldType.Vertical;
|
JoyHold = NpadJoyHoldType.Vertical;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal ref KEvent GetStyleSetUpdateEvent(PlayerIndex player)
|
internal ref Event GetStyleSetUpdateEvent(PlayerIndex player)
|
||||||
{
|
{
|
||||||
return ref _styleSetUpdateEvents[(int)player];
|
return ref _styleSetUpdateEvents[(int)player];
|
||||||
}
|
}
|
|
@ -1,11 +1,10 @@
|
||||||
using Ryujinx.Horizon.Sdk.Hid;
|
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.HLE.HOS.Services.Hid
|
namespace Ryujinx.Horizon.Sdk.Hid.HidDevices
|
||||||
{
|
{
|
||||||
public class TouchDevice : BaseDevice
|
public class TouchDevice : BaseDevice
|
||||||
{
|
{
|
||||||
public TouchDevice(Switch device, bool active) : base(device, active) { }
|
public TouchDevice(bool active) : base(active) { }
|
||||||
|
|
||||||
public void Update(params TouchPoint[] points)
|
public void Update(params TouchPoint[] points)
|
||||||
{
|
{
|
150
src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs
Normal file
150
src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
using Ryujinx.Horizon.Common;
|
||||||
|
using Ryujinx.Horizon.Sdk.Applet;
|
||||||
|
using Ryujinx.Horizon.Sdk.Hid.SixAxis;
|
||||||
|
using Ryujinx.Horizon.Sdk.Hid.Vibration;
|
||||||
|
using Ryujinx.Horizon.Sdk.Sf;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
|
{
|
||||||
|
interface IHidServer : IServiceObject
|
||||||
|
{
|
||||||
|
Result CreateAppletResource(out IAppletResource arg0, AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result ActivateDebugPad(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result ActivateTouchScreen(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result ActivateMouse(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result ActivateKeyboard(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result SendKeyboardLockKeyEvent(AppletResourceUserId appletResourceUserId, KeyboardLockKeyEvent keyboardLockKeyEvent, ulong pid);
|
||||||
|
Result AcquireXpadIdEventHandle(out int arg0, ulong arg1);
|
||||||
|
Result ReleaseXpadIdEventHandle(ulong arg0);
|
||||||
|
Result ActivateXpad(AppletResourceUserId appletResourceUserId, BasicXpadId arg1, ulong pid);
|
||||||
|
Result GetXpadIds(out long arg0, Span<BasicXpadId> arg1);
|
||||||
|
Result ActivateJoyXpad(JoyXpadId arg0);
|
||||||
|
Result GetJoyXpadLifoHandle(out int arg0, JoyXpadId arg1);
|
||||||
|
Result GetJoyXpadIds(out long arg0, Span<JoyXpadId> arg1);
|
||||||
|
Result ActivateSixAxisSensor(BasicXpadId arg0);
|
||||||
|
Result DeactivateSixAxisSensor(BasicXpadId arg0);
|
||||||
|
Result GetSixAxisSensorLifoHandle(out int arg0, BasicXpadId arg1);
|
||||||
|
Result ActivateJoySixAxisSensor(JoyXpadId arg0);
|
||||||
|
Result DeactivateJoySixAxisSensor(JoyXpadId arg0);
|
||||||
|
Result GetJoySixAxisSensorLifoHandle(out int arg0, JoyXpadId arg1);
|
||||||
|
Result StartSixAxisSensor(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result StopSixAxisSensor(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result IsSixAxisSensorFusionEnabled(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result EnableSixAxisSensorFusion(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, bool arg2, ulong pid);
|
||||||
|
Result SetSixAxisSensorFusionParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, float arg2, float arg3, ulong pid);
|
||||||
|
Result GetSixAxisSensorFusionParameters(out float arg0, out float arg1, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result ResetSixAxisSensorFusionParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result SetAccelerometerParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, float arg2, float arg3, ulong pid);
|
||||||
|
Result GetAccelerometerParameters(out float arg0, out float arg1, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result ResetAccelerometerParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result SetAccelerometerPlayMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, uint arg2, ulong pid);
|
||||||
|
Result GetAccelerometerPlayMode(out uint arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result ResetAccelerometerPlayMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result SetGyroscopeZeroDriftMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, uint arg2, ulong pid);
|
||||||
|
Result GetGyroscopeZeroDriftMode(out uint arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result ResetGyroscopeZeroDriftMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result IsSixAxisSensorAtRest(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result IsFirmwareUpdateAvailableForSixAxisSensor(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result EnableSixAxisSensorUnalteredPassthrough(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, bool arg2, ulong pid);
|
||||||
|
Result IsSixAxisSensorUnalteredPassthroughEnabled(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result StoreSixAxisSensorCalibrationParameter(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, in SixAxisSensorCalibrationParameter sixAxisSensorCalibrationParameter, ulong pid);
|
||||||
|
Result LoadSixAxisSensorCalibrationParameter(AppletResourceUserId appletResourceUserId, out SixAxisSensorCalibrationParameter sixAxisSensorCalibrationParameter, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result GetSixAxisSensorIcInformation(AppletResourceUserId appletResourceUserId, out SixAxisSensorIcInformation sixAxisSensorIcInformation, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result ResetIsSixAxisSensorDeviceNewlyAssigned(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid);
|
||||||
|
Result ActivateGesture(AppletResourceUserId appletResourceUserId, int arg1, ulong pid);
|
||||||
|
Result SetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, NpadStyleTag arg1, ulong pid);
|
||||||
|
Result GetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, out NpadStyleTag arg1, ulong pid);
|
||||||
|
Result SetSupportedNpadIdType(AppletResourceUserId appletResourceUserId, ReadOnlySpan<uint> arg1, ulong pid);
|
||||||
|
Result ActivateNpad(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result DeactivateNpad(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result AcquireNpadStyleSetUpdateEventHandle(AppletResourceUserId appletResourceUserId, out int arg1, uint arg2, ulong arg3, ulong pid);
|
||||||
|
Result DisconnectNpad(AppletResourceUserId appletResourceUserId, uint arg1, ulong pid);
|
||||||
|
Result GetPlayerLedPattern(out ulong arg0, uint arg1);
|
||||||
|
Result ActivateNpadWithRevision(AppletResourceUserId appletResourceUserId, int arg1, ulong pid);
|
||||||
|
Result SetNpadJoyHoldType(AppletResourceUserId appletResourceUserId, long arg1, ulong pid);
|
||||||
|
Result GetNpadJoyHoldType(AppletResourceUserId appletResourceUserId, out long arg1, ulong pid);
|
||||||
|
Result SetNpadJoyAssignmentModeSingleByDefault(AppletResourceUserId appletResourceUserId, uint arg1, ulong pid);
|
||||||
|
Result SetNpadJoyAssignmentModeSingle(AppletResourceUserId appletResourceUserId, uint arg1, long arg2, ulong pid);
|
||||||
|
Result SetNpadJoyAssignmentModeDual(AppletResourceUserId appletResourceUserId, uint arg1, ulong pid);
|
||||||
|
Result MergeSingleJoyAsDualJoy(AppletResourceUserId appletResourceUserId, uint arg1, uint arg2, ulong pid);
|
||||||
|
Result StartLrAssignmentMode(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result StopLrAssignmentMode(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result SetNpadHandheldActivationMode(AppletResourceUserId appletResourceUserId, long arg1, ulong pid);
|
||||||
|
Result GetNpadHandheldActivationMode(AppletResourceUserId appletResourceUserId, out long arg1, ulong pid);
|
||||||
|
Result SwapNpadAssignment(AppletResourceUserId appletResourceUserId, uint arg1, uint arg2, ulong pid);
|
||||||
|
Result IsUnintendedHomeButtonInputProtectionEnabled(out bool arg0, AppletResourceUserId appletResourceUserId, uint arg2, ulong pid);
|
||||||
|
Result EnableUnintendedHomeButtonInputProtection(AppletResourceUserId appletResourceUserId, uint arg1, bool arg2, ulong pid);
|
||||||
|
Result SetNpadJoyAssignmentModeSingleWithDestination(out bool arg0, out uint arg1, AppletResourceUserId appletResourceUserId, uint arg3, long arg4, ulong pid);
|
||||||
|
Result SetNpadAnalogStickUseCenterClamp(AppletResourceUserId appletResourceUserId, bool arg1, ulong pid);
|
||||||
|
Result SetNpadCaptureButtonAssignment(AppletResourceUserId appletResourceUserId, NpadStyleTag arg1, NpadButton arg2, ulong pid);
|
||||||
|
Result ClearNpadCaptureButtonAssignment(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result GetVibrationDeviceInfo(out VibrationDeviceInfoForIpc vibrationDeviceInfoForIpc, VibrationDeviceHandle vibrationDeviceHandle);
|
||||||
|
Result SendVibrationValue(AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, VibrationValue arg2, ulong pid);
|
||||||
|
Result GetActualVibrationValue(out VibrationValue arg0, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, ulong pid);
|
||||||
|
Result CreateActiveVibrationDeviceList(out IActiveVibrationDeviceList arg0);
|
||||||
|
Result PermitVibration(bool arg0);
|
||||||
|
Result IsVibrationPermitted(out bool arg0);
|
||||||
|
Result SendVibrationValues(AppletResourceUserId appletResourceUserId, ReadOnlySpan<VibrationDeviceHandle> vibrationDeviceHandles, ReadOnlySpan<VibrationValue> vibrationValues);
|
||||||
|
Result SendVibrationGcErmCommand(AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, VibrationGcErmCommand vibrationGcErmCommand, ulong pid);
|
||||||
|
Result GetActualVibrationGcErmCommand(out VibrationGcErmCommand vibrationGcErmCommand, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, ulong pid);
|
||||||
|
Result BeginPermitVibrationSession(AppletResourceUserId appletResourceUserId);
|
||||||
|
Result EndPermitVibrationSession();
|
||||||
|
Result IsVibrationDeviceMounted(out bool arg0, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, ulong pid);
|
||||||
|
Result SendVibrationValueInBool(AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, bool arg2, ulong pid);
|
||||||
|
Result ActivateConsoleSixAxisSensor(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result StartConsoleSixAxisSensor(AppletResourceUserId appletResourceUserId, ConsoleSixAxisSensorHandle consoleSixAxisSensorHandle, ulong pid);
|
||||||
|
Result StopConsoleSixAxisSensor(AppletResourceUserId appletResourceUserId, ConsoleSixAxisSensorHandle consoleSixAxisSensorHandle, ulong pid);
|
||||||
|
Result ActivateSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result StartSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result StopSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result InitializeSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, int arg1, ulong arg2, int arg3, ulong arg4, ulong pid);
|
||||||
|
Result FinalizeSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result SetSevenSixAxisSensorFusionStrength(AppletResourceUserId appletResourceUserId, float arg1, ulong pid);
|
||||||
|
Result GetSevenSixAxisSensorFusionStrength(out float arg0, AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result ResetSevenSixAxisSensorTimestamp(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result IsUsbFullKeyControllerEnabled(out bool arg0);
|
||||||
|
Result EnableUsbFullKeyController(bool arg0);
|
||||||
|
Result IsUsbFullKeyControllerConnected(out bool arg0, uint arg1);
|
||||||
|
Result HasBattery(out bool arg0, uint arg1);
|
||||||
|
Result HasLeftRightBattery(out bool arg0, out bool arg1, uint arg2);
|
||||||
|
Result GetNpadInterfaceType(out byte arg0, uint arg1);
|
||||||
|
Result GetNpadLeftRightInterfaceType(out byte arg0, out byte arg1, uint arg2);
|
||||||
|
Result GetNpadOfHighestBatteryLevel(out uint arg0, ReadOnlySpan<uint> arg1, AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result GetPalmaConnectionHandle(out PalmaConnectionHandle palmaConnectionHandle, uint arg1, AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result InitializePalma(PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result AcquirePalmaOperationCompleteEvent(out int arg0, PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result GetPalmaOperationInfo(out ulong arg0, Span<byte> arg1, PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result PlayPalmaActivity(PalmaConnectionHandle palmaConnectionHandle, ulong arg1);
|
||||||
|
Result SetPalmaFrModeType(PalmaConnectionHandle palmaConnectionHandle, ulong arg1);
|
||||||
|
Result ReadPalmaStep(PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result EnablePalmaStep(PalmaConnectionHandle palmaConnectionHandle, bool arg1);
|
||||||
|
Result ResetPalmaStep(PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result ReadPalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2);
|
||||||
|
Result WritePalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2, in PalmaApplicationSectionAccessBuffer palmaApplicationSectionAccessBuffer);
|
||||||
|
Result ReadPalmaUniqueCode(PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result SetPalmaUniqueCodeInvalid(PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result WritePalmaActivityEntry(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2, ulong arg3, ulong arg4);
|
||||||
|
Result WritePalmaRgbLedPatternEntry(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ReadOnlySpan<byte> arg2);
|
||||||
|
Result WritePalmaWaveEntry(PalmaConnectionHandle palmaConnectionHandle, PalmaWaveSet palmaWaveSet, ulong arg2, int arg3, ulong arg4, ulong arg5);
|
||||||
|
Result SetPalmaDataBaseIdentificationVersion(PalmaConnectionHandle palmaConnectionHandle, int arg1);
|
||||||
|
Result GetPalmaDataBaseIdentificationVersion(PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result SuspendPalmaFeature(PalmaConnectionHandle palmaConnectionHandle, PalmaFeature palmaFeature);
|
||||||
|
Result GetPalmaOperationResult(PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result ReadPalmaPlayLog(PalmaConnectionHandle palmaConnectionHandle, ushort arg1);
|
||||||
|
Result ResetPalmaPlayLog(PalmaConnectionHandle palmaConnectionHandle, ushort arg1);
|
||||||
|
Result SetIsPalmaAllConnectable(AppletResourceUserId appletResourceUserId, bool arg1, ulong pid);
|
||||||
|
Result SetIsPalmaPairedConnectable(AppletResourceUserId appletResourceUserId, bool arg1, ulong pid);
|
||||||
|
Result PairPalma(PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result SetPalmaBoostMode(bool arg0);
|
||||||
|
Result CancelWritePalmaWaveEntry(PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result EnablePalmaBoostMode(AppletResourceUserId appletResourceUserId, bool arg1, ulong pid);
|
||||||
|
Result GetPalmaBluetoothAddress(out Address arg0, PalmaConnectionHandle palmaConnectionHandle);
|
||||||
|
Result SetDisallowedPalmaConnection(AppletResourceUserId appletResourceUserId, ReadOnlySpan<Address> arg1, ulong pid);
|
||||||
|
Result SetNpadCommunicationMode(AppletResourceUserId appletResourceUserId, long arg1, ulong pid);
|
||||||
|
Result GetNpadCommunicationMode(out long arg0);
|
||||||
|
Result SetTouchScreenConfiguration(AppletResourceUserId appletResourceUserId, TouchScreenConfigurationForNx arg1, ulong pid);
|
||||||
|
Result IsFirmwareUpdateNeededForNotification(out bool arg0, int arg1, AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
Result ActivateDigitizer(AppletResourceUserId appletResourceUserId, ulong pid);
|
||||||
|
}
|
||||||
|
}
|
18
src/Ryujinx.Horizon/Sdk/Hid/KeyboardLockKeyEvent.cs
Normal file
18
src/Ryujinx.Horizon/Sdk/Hid/KeyboardLockKeyEvent.cs
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
|
{
|
||||||
|
[Flags]
|
||||||
|
enum KeyboardLockKeyEvent
|
||||||
|
{
|
||||||
|
NumLockOn = 1 << 0,
|
||||||
|
NumLockOff = 1 << 1,
|
||||||
|
NumLockToggle = 1 << 2,
|
||||||
|
CapsLockOn = 1 << 3,
|
||||||
|
CapsLockOff = 1 << 4,
|
||||||
|
CapsLockToggle = 1 << 5,
|
||||||
|
ScrollLockOn = 1 << 6,
|
||||||
|
ScrollLockOff = 1 << 7,
|
||||||
|
ScrollLockToggle = 1 << 8
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid
|
namespace Ryujinx.Horizon.Sdk.Hid.Npad
|
||||||
{
|
{
|
||||||
enum NpadJoyHoldType
|
enum NpadJoyHoldType
|
||||||
{
|
{
|
|
@ -0,0 +1,10 @@
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential, Size = 0x100)]
|
||||||
|
struct PalmaApplicationSectionAccessBuffer
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
10
src/Ryujinx.Horizon/Sdk/Hid/PalmaConnectionHandle.cs
Normal file
10
src/Ryujinx.Horizon/Sdk/Hid/PalmaConnectionHandle.cs
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential, Size = 0x8)]
|
||||||
|
struct PalmaConnectionHandle
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
13
src/Ryujinx.Horizon/Sdk/Hid/PalmaFeature.cs
Normal file
13
src/Ryujinx.Horizon/Sdk/Hid/PalmaFeature.cs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
|
{
|
||||||
|
[Flags]
|
||||||
|
enum PalmaFeature
|
||||||
|
{
|
||||||
|
FrMode = 1 << 0,
|
||||||
|
RumbleFeedback = 1 << 1,
|
||||||
|
Step = 1 << 2,
|
||||||
|
MuteSwitch = 1 << 3
|
||||||
|
}
|
||||||
|
}
|
9
src/Ryujinx.Horizon/Sdk/Hid/PalmaWaveSet.cs
Normal file
9
src/Ryujinx.Horizon/Sdk/Hid/PalmaWaveSet.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
|
{
|
||||||
|
enum PalmaWaveSet : ulong
|
||||||
|
{
|
||||||
|
Small = 0,
|
||||||
|
Medium = 1,
|
||||||
|
Large = 2
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
struct AnalogStickState
|
struct AnalogStickState
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
struct AtomicStorage<T> where T : unmanaged, ISampledDataStruct
|
struct AtomicStorage<T> where T : unmanaged, ISampledDataStruct
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,7 @@ using System;
|
||||||
using System.Buffers.Binary;
|
using System.Buffers.Binary;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This is a "marker interface" to add some compile-time safety to a convention-based optimization.
|
/// This is a "marker interface" to add some compile-time safety to a convention-based optimization.
|
||||||
|
@ -57,7 +57,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common
|
||||||
{
|
{
|
||||||
return sampledDataStruct switch
|
return sampledDataStruct switch
|
||||||
{
|
{
|
||||||
Npad.SixAxisSensorState _ => sizeof(ulong),
|
SixAxisSensorState _ => sizeof(ulong),
|
||||||
_ => 0,
|
_ => 0,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ using System;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
struct RingLifo<T> where T : unmanaged, ISampledDataStruct
|
struct RingLifo<T> where T : unmanaged, ISampledDataStruct
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.DebugPad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum DebugPadAttribute : uint
|
enum DebugPadAttribute : uint
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.DebugPad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum DebugPadButton : uint
|
enum DebugPadButton : uint
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.DebugPad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
struct DebugPadState : ISampledDataStruct
|
struct DebugPadState : ISampledDataStruct
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using Ryujinx.Common.Memory;
|
using Ryujinx.Common.Memory;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
struct KeyboardKey
|
struct KeyboardKey
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
enum KeyboardKeyShift
|
enum KeyboardKeyShift
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum KeyboardModifier : ulong
|
enum KeyboardModifier : ulong
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
struct KeyboardState : ISampledDataStruct
|
struct KeyboardState : ISampledDataStruct
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Mouse
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum MouseAttribute : uint
|
enum MouseAttribute : uint
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Mouse
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum MouseButton : uint
|
enum MouseButton : uint
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Mouse
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
struct MouseState : ISampledDataStruct
|
struct MouseState : ISampledDataStruct
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum DeviceType
|
enum DeviceType
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum NpadAttribute : uint
|
enum NpadAttribute : uint
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
enum NpadBatteryLevel
|
enum NpadBatteryLevel
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum NpadButton : ulong
|
enum NpadButton : ulong
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
enum NpadColorAttribute : uint
|
enum NpadColorAttribute : uint
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
struct NpadCommonState : ISampledDataStruct
|
struct NpadCommonState : ISampledDataStruct
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
struct NpadFullKeyColorState
|
struct NpadFullKeyColorState
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
struct NpadGcTriggerState : ISampledDataStruct
|
struct NpadGcTriggerState : ISampledDataStruct
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
struct NpadInternalState
|
struct NpadInternalState
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
enum NpadJoyAssignmentMode : uint
|
enum NpadJoyAssignmentMode : uint
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
struct NpadJoyColorState
|
struct NpadJoyColorState
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
enum NpadLarkType : uint
|
enum NpadLarkType : uint
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
enum NpadLuciaType
|
enum NpadLuciaType
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[StructLayout(LayoutKind.Sequential, Size = 0x5000)]
|
[StructLayout(LayoutKind.Sequential, Size = 0x5000)]
|
||||||
struct NpadState
|
struct NpadState
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Nintendo pad style
|
/// Nintendo pad style
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum NpadSystemButtonProperties : uint
|
enum NpadSystemButtonProperties : uint
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum NpadSystemProperties : ulong
|
enum NpadSystemProperties : ulong
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
enum SixAxisSensorAttribute : uint
|
enum SixAxisSensorAttribute : uint
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
using Ryujinx.Common.Memory;
|
using Ryujinx.Common.Memory;
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
struct SixAxisSensorState : ISampledDataStruct
|
struct SixAxisSensorState : ISampledDataStruct
|
||||||
|
|
|
@ -1,13 +1,7 @@
|
||||||
using Ryujinx.Common.Memory;
|
using Ryujinx.Common.Memory;
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common;
|
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.DebugPad;
|
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard;
|
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Mouse;
|
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad;
|
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Represent the shared memory shared between applications for input.
|
/// Represent the shared memory shared between applications for input.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum TouchAttribute : uint
|
public enum TouchAttribute : uint
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
using Ryujinx.Common.Memory;
|
using Ryujinx.Common.Memory;
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common;
|
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
||||||
struct TouchScreenState : ISampledDataStruct
|
struct TouchScreenState : ISampledDataStruct
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
struct TouchState
|
struct TouchState
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid.SixAxis
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential, Size = 0x4)]
|
||||||
|
struct ConsoleSixAxisSensorHandle
|
||||||
|
{
|
||||||
|
public int TypeValue;
|
||||||
|
public byte Unknown1;
|
||||||
|
public byte Unknown2;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
using Ryujinx.Horizon.Sdk.Hid.Npad;
|
using Ryujinx.Horizon.Sdk.Hid.Npad;
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid
|
namespace Ryujinx.Horizon.Sdk.Hid.SixAxis
|
||||||
{
|
{
|
||||||
public struct SixAxisInput
|
public struct SixAxisInput
|
||||||
{
|
{
|
|
@ -0,0 +1,10 @@
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid.SixAxis
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential, Size = 0x744)]
|
||||||
|
struct SixAxisSensorCalibrationParameter
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
13
src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorHandle.cs
Normal file
13
src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorHandle.cs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid.SixAxis
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential, Size = 0x4)]
|
||||||
|
struct SixAxisSensorHandle
|
||||||
|
{
|
||||||
|
public int TypeValue;
|
||||||
|
public byte NpadStyleIndex;
|
||||||
|
public byte PlayerNumber;
|
||||||
|
public byte DeviceIdx;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid.SixAxis
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential, Size = 0xC8)]
|
||||||
|
public struct SixAxisSensorIcInformation
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,3 @@
|
||||||
using Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen;
|
|
||||||
|
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
{
|
{
|
||||||
public struct TouchPoint
|
public struct TouchPoint
|
||||||
|
|
10
src/Ryujinx.Horizon/Sdk/Hid/TouchScreenConfigurationForNx.cs
Normal file
10
src/Ryujinx.Horizon/Sdk/Hid/TouchScreenConfigurationForNx.cs
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential, Size = 0x10)]
|
||||||
|
struct TouchScreenConfigurationForNx
|
||||||
|
{
|
||||||
|
public TouchScreenModeForNx Mode;
|
||||||
|
}
|
||||||
|
}
|
9
src/Ryujinx.Horizon/Sdk/Hid/TouchScreenModeForNx.cs
Normal file
9
src/Ryujinx.Horizon/Sdk/Hid/TouchScreenModeForNx.cs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid
|
||||||
|
{
|
||||||
|
enum TouchScreenModeForNx : byte
|
||||||
|
{
|
||||||
|
UseSystemSetting = 0,
|
||||||
|
Finger = 1,
|
||||||
|
Heat2 = 2
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid.Vibration
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Sequential, Size = 0x8)]
|
||||||
|
struct VibrationDeviceInfoForIpc
|
||||||
|
{
|
||||||
|
public VibrationDeviceType DeviceType;
|
||||||
|
public VibrationDevicePosition Position;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.Vibration
|
namespace Ryujinx.Horizon.Sdk.Hid.Vibration
|
||||||
{
|
{
|
||||||
public enum VibrationDevicePosition
|
enum VibrationDevicePosition
|
||||||
{
|
{
|
||||||
None,
|
None = 0,
|
||||||
Left,
|
Left = 1,
|
||||||
Right,
|
Right = 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.Vibration
|
namespace Ryujinx.Horizon.Sdk.Hid.Vibration
|
||||||
{
|
{
|
||||||
public enum VibrationDeviceType
|
enum VibrationDeviceType
|
||||||
{
|
{
|
||||||
None,
|
Unknown = 0,
|
||||||
LinearResonantActuator,
|
LinearResonantActuator = 1,
|
||||||
GcErm,
|
GcErm = 2,
|
||||||
|
Erm = 3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
namespace Ryujinx.Horizon.Sdk.Hid.Vibration
|
namespace Ryujinx.Horizon.Sdk.Hid.Vibration
|
||||||
{
|
{
|
||||||
public struct VibrationDeviceValue
|
struct VibrationDeviceValue
|
||||||
{
|
{
|
||||||
public VibrationDeviceType DeviceType;
|
public VibrationDeviceType DeviceType;
|
||||||
public VibrationDevicePosition Position;
|
public VibrationDevicePosition Position;
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
namespace Ryujinx.Horizon.Sdk.Hid.Vibration
|
||||||
|
{
|
||||||
|
enum VibrationGcErmCommand
|
||||||
|
{
|
||||||
|
// Stops the vibration with a decay phase.
|
||||||
|
Stop = 0,
|
||||||
|
// Starts the vibration.
|
||||||
|
Start = 1,
|
||||||
|
// Stops the vibration immediately, with no decay phase.
|
||||||
|
StopHard = 2
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.HLE.HOS.Services.Hid;
|
using Ryujinx.HLE.HOS.Services.Hid;
|
||||||
using Ryujinx.Horizon.Sdk.Hid;
|
using Ryujinx.Horizon.Sdk.Hid;
|
||||||
using Ryujinx.Horizon.Sdk.Hid.Npad;
|
using Ryujinx.Horizon.Sdk.Hid.Npad;
|
||||||
|
using Ryujinx.Horizon.Sdk.Hid.SixAxis;
|
||||||
using Ryujinx.Horizon.Sdk.Hid.Vibration;
|
using Ryujinx.Horizon.Sdk.Hid.Vibration;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
|
|
|
@ -3,6 +3,8 @@ using Ryujinx.Common.Configuration.Hid.Controller;
|
||||||
using Ryujinx.Common.Configuration.Hid.Keyboard;
|
using Ryujinx.Common.Configuration.Hid.Keyboard;
|
||||||
using Ryujinx.HLE.HOS.Services.Hid;
|
using Ryujinx.HLE.HOS.Services.Hid;
|
||||||
using Ryujinx.Horizon.Sdk.Hid;
|
using Ryujinx.Horizon.Sdk.Hid;
|
||||||
|
using Ryujinx.Horizon.Sdk.Hid.HidDevices;
|
||||||
|
using Ryujinx.Horizon.Sdk.Hid.SixAxis;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
|
Loading…
Reference in a new issue