Refactoring commands handling (#728)

* Refactoring commands handling

- Use Reflection to handle commands ID.
- Add all symbols (from SwIPC so not all time accurate).
- Re-sort some services commands methods.
- Some cleanup.
- Keep some empty constructor for consistency.

* Fix order in IProfile
This commit is contained in:
Ac_K 2019-07-12 03:13:43 +02:00 committed by gdkchan
parent f723f6f39a
commit 560ccbeb2d
99 changed files with 1035 additions and 1983 deletions

View file

@ -4,15 +4,12 @@ using Ryujinx.HLE.HOS.Kernel.Common;
using Ryujinx.HLE.HOS.Kernel.Threading;
using Ryujinx.HLE.Input;
using System;
using System.Collections.Generic;
namespace Ryujinx.HLE.HOS.Services.Hid
{
[Service("hid")]
class IHidServer : IpcService
{
private Dictionary<int, ServiceProcessRequest> _commands;
private KEvent _npadStyleSetUpdateEvent;
private KEvent _xpadIdEvent;
private KEvent _palmaOperationCompleteEvent;
@ -39,117 +36,8 @@ namespace Ryujinx.HLE.HOS.Services.Hid
private HidAccelerometerParameters _accelerometerParams;
private HidVibrationValue _vibrationValue;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands;
public IHidServer(ServiceCtx context)
{
_commands = new Dictionary<int, ServiceProcessRequest>
{
{ 0, CreateAppletResource },
{ 1, ActivateDebugPad },
{ 11, ActivateTouchScreen },
{ 21, ActivateMouse },
{ 31, ActivateKeyboard },
{ 40, AcquireXpadIdEventHandle },
{ 41, ReleaseXpadIdEventHandle },
{ 51, ActivateXpad },
{ 55, GetXpadIds },
{ 56, ActivateJoyXpad },
{ 58, GetJoyXpadLifoHandle },
{ 59, GetJoyXpadIds },
{ 60, ActivateSixAxisSensor },
{ 61, DeactivateSixAxisSensor },
{ 62, GetSixAxisSensorLifoHandle },
{ 63, ActivateJoySixAxisSensor },
{ 64, DeactivateJoySixAxisSensor },
{ 65, GetJoySixAxisSensorLifoHandle },
{ 66, StartSixAxisSensor },
{ 67, StopSixAxisSensor },
{ 68, IsSixAxisSensorFusionEnabled },
{ 69, EnableSixAxisSensorFusion },
{ 70, SetSixAxisSensorFusionParameters },
{ 71, GetSixAxisSensorFusionParameters },
{ 72, ResetSixAxisSensorFusionParameters },
{ 73, SetAccelerometerParameters },
{ 74, GetAccelerometerParameters },
{ 75, ResetAccelerometerParameters },
{ 76, SetAccelerometerPlayMode },
{ 77, GetAccelerometerPlayMode },
{ 78, ResetAccelerometerPlayMode },
{ 79, SetGyroscopeZeroDriftMode },
{ 80, GetGyroscopeZeroDriftMode },
{ 81, ResetGyroscopeZeroDriftMode },
{ 82, IsSixAxisSensorAtRest },
{ 91, ActivateGesture },
{ 100, SetSupportedNpadStyleSet },
{ 101, GetSupportedNpadStyleSet },
{ 102, SetSupportedNpadIdType },
{ 103, ActivateNpad },
{ 104, DeactivateNpad },
{ 106, AcquireNpadStyleSetUpdateEventHandle },
{ 107, DisconnectNpad },
{ 108, GetPlayerLedPattern },
{ 109, ActivateNpadWithRevision },
{ 120, SetNpadJoyHoldType },
{ 121, GetNpadJoyHoldType },
{ 122, SetNpadJoyAssignmentModeSingleByDefault },
{ 123, SetNpadJoyAssignmentModeSingle },
{ 124, SetNpadJoyAssignmentModeDual },
{ 125, MergeSingleJoyAsDualJoy },
{ 126, StartLrAssignmentMode },
{ 127, StopLrAssignmentMode },
{ 128, SetNpadHandheldActivationMode },
{ 129, GetNpadHandheldActivationMode },
{ 130, SwapNpadAssignment },
{ 131, IsUnintendedHomeButtonInputProtectionEnabled },
{ 132, EnableUnintendedHomeButtonInputProtection },
{ 133, SetNpadJoyAssignmentModeSingleWithDestination },
{ 200, GetVibrationDeviceInfo },
{ 201, SendVibrationValue },
{ 202, GetActualVibrationValue },
{ 203, CreateActiveVibrationDeviceList },
{ 204, PermitVibration },
{ 205, IsVibrationPermitted },
{ 206, SendVibrationValues },
{ 207, SendVibrationGcErmCommand },
{ 208, GetActualVibrationGcErmCommand },
{ 209, BeginPermitVibrationSession },
{ 210, EndPermitVibrationSession },
{ 300, ActivateConsoleSixAxisSensor },
{ 301, StartConsoleSixAxisSensor },
{ 302, StopConsoleSixAxisSensor },
{ 303, ActivateSevenSixAxisSensor },
{ 304, StartSevenSixAxisSensor },
{ 305, StopSevenSixAxisSensor },
{ 306, InitializeSevenSixAxisSensor },
{ 307, FinalizeSevenSixAxisSensor },
{ 308, SetSevenSixAxisSensorFusionStrength },
{ 309, GetSevenSixAxisSensorFusionStrength },
{ 400, IsUsbFullKeyControllerEnabled },
{ 401, EnableUsbFullKeyController },
{ 402, IsUsbFullKeyControllerConnected },
{ 403, HasBattery },
{ 404, HasLeftRightBattery },
{ 405, GetNpadInterfaceType },
{ 406, GetNpadLeftRightInterfaceType },
{ 500, GetPalmaConnectionHandle },
{ 501, InitializePalma },
{ 502, AcquirePalmaOperationCompleteEvent },
{ 503, GetPalmaOperationInfo },
{ 504, PlayPalmaActivity },
{ 505, SetPalmaFrModeType },
{ 506, ReadPalmaStep },
{ 507, EnablePalmaStep },
{ 508, SuspendPalmaStep },
{ 509, ResetPalmaStep },
{ 510, ReadPalmaApplicationSection },
{ 511, WritePalmaApplicationSection },
{ 512, ReadPalmaUniqueCode },
{ 513, SetPalmaUniqueCodeInvalid },
{ 1000, SetNpadCommunicationMode },
{ 1001, GetNpadCommunicationMode }
};
_npadStyleSetUpdateEvent = new KEvent(context.Device.System);
_xpadIdEvent = new KEvent(context.Device.System);
_palmaOperationCompleteEvent = new KEvent(context.Device.System);
@ -168,6 +56,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
_xpadIdEvent.ReadableEvent.Signal();
}
[Command(0)]
// CreateAppletResource(nn::applet::AppletResourceUserId) -> object<nn::hid::IAppletResource>
public long CreateAppletResource(ServiceCtx context)
{
@ -178,6 +67,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(1)]
// ActivateDebugPad(nn::applet::AppletResourceUserId)
public long ActivateDebugPad(ServiceCtx context)
{
@ -188,6 +78,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(11)]
// ActivateTouchScreen(nn::applet::AppletResourceUserId)
public long ActivateTouchScreen(ServiceCtx context)
{
@ -198,6 +89,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(21)]
// ActivateMouse(nn::applet::AppletResourceUserId)
public long ActivateMouse(ServiceCtx context)
{
@ -208,6 +100,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(31)]
// ActivateKeyboard(nn::applet::AppletResourceUserId)
public long ActivateKeyboard(ServiceCtx context)
{
@ -218,6 +111,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(40)]
// AcquireXpadIdEventHandle(ulong XpadId) -> nn::sf::NativeHandle
public long AcquireXpadIdEventHandle(ServiceCtx context)
{
@ -235,6 +129,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(41)]
// ReleaseXpadIdEventHandle(ulong XpadId)
public long ReleaseXpadIdEventHandle(ServiceCtx context)
{
@ -247,6 +142,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(51)]
// ActivateXpad(nn::hid::BasicXpadId, nn::applet::AppletResourceUserId)
public long ActivateXpad(ServiceCtx context)
{
@ -258,6 +154,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(55)]
// GetXpadIds() -> long IdsCount, buffer<array<nn::hid::BasicXpadId>, type: 0xa>
public long GetXpadIds(ServiceCtx context)
{
@ -269,6 +166,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(56)]
// ActivateJoyXpad(nn::hid::JoyXpadId)
public long ActivateJoyXpad(ServiceCtx context)
{
@ -279,6 +177,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(58)]
// GetJoyXpadLifoHandle(nn::hid::JoyXpadId) -> nn::sf::NativeHandle
public long GetJoyXpadLifoHandle(ServiceCtx context)
{
@ -293,6 +192,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(59)]
// GetJoyXpadIds() -> long IdsCount, buffer<array<nn::hid::JoyXpadId>, type: 0xa>
public long GetJoyXpadIds(ServiceCtx context)
{
@ -304,6 +204,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(60)]
// ActivateSixAxisSensor(nn::hid::BasicXpadId)
public long ActivateSixAxisSensor(ServiceCtx context)
{
@ -314,6 +215,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(61)]
// DeactivateSixAxisSensor(nn::hid::BasicXpadId)
public long DeactivateSixAxisSensor(ServiceCtx context)
{
@ -324,6 +226,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(62)]
// GetSixAxisSensorLifoHandle(nn::hid::BasicXpadId) -> nn::sf::NativeHandle
public long GetSixAxisSensorLifoHandle(ServiceCtx context)
{
@ -338,6 +241,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(63)]
// ActivateJoySixAxisSensor(nn::hid::JoyXpadId)
public long ActivateJoySixAxisSensor(ServiceCtx context)
{
@ -348,6 +252,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(64)]
// DeactivateJoySixAxisSensor(nn::hid::JoyXpadId)
public long DeactivateJoySixAxisSensor(ServiceCtx context)
{
@ -358,6 +263,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(65)]
// GetJoySixAxisSensorLifoHandle(nn::hid::JoyXpadId) -> nn::sf::NativeHandle
public long GetJoySixAxisSensorLifoHandle(ServiceCtx context)
{
@ -372,6 +278,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(66)]
// StartSixAxisSensor(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId)
public long StartSixAxisSensor(ServiceCtx context)
{
@ -383,6 +290,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(67)]
// StopSixAxisSensor(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId)
public long StopSixAxisSensor(ServiceCtx context)
{
@ -394,6 +302,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(68)]
// IsSixAxisSensorFusionEnabled(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) -> bool IsEnabled
public long IsSixAxisSensorFusionEnabled(ServiceCtx context)
{
@ -407,6 +316,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(69)]
// EnableSixAxisSensorFusion(bool Enabled, nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId)
public long EnableSixAxisSensorFusion(ServiceCtx context)
{
@ -419,6 +329,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(70)]
// SetSixAxisSensorFusionParameters(nn::hid::SixAxisSensorHandle, float RevisePower, float ReviseRange, nn::applet::AppletResourceUserId)
public long SetSixAxisSensorFusionParameters(ServiceCtx context)
{
@ -437,6 +348,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(71)]
// GetSixAxisSensorFusionParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) -> float RevisePower, float ReviseRange)
public long GetSixAxisSensorFusionParameters(ServiceCtx context)
{
@ -451,6 +363,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(72)]
// ResetSixAxisSensorFusionParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId)
public long ResetSixAxisSensorFusionParameters(ServiceCtx context)
{
@ -465,6 +378,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(73)]
// SetAccelerometerParameters(nn::hid::SixAxisSensorHandle, float X, float Y, nn::applet::AppletResourceUserId)
public long SetAccelerometerParameters(ServiceCtx context)
{
@ -483,6 +397,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(74)]
// GetAccelerometerParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) -> float X, float Y
public long GetAccelerometerParameters(ServiceCtx context)
{
@ -497,6 +412,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(75)]
// ResetAccelerometerParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId)
public long ResetAccelerometerParameters(ServiceCtx context)
{
@ -511,6 +427,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(76)]
// SetAccelerometerPlayMode(nn::hid::SixAxisSensorHandle, uint PlayMode, nn::applet::AppletResourceUserId)
public long SetAccelerometerPlayMode(ServiceCtx context)
{
@ -523,6 +440,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(77)]
// GetAccelerometerPlayMode(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) -> uint PlayMode
public long GetAccelerometerPlayMode(ServiceCtx context)
{
@ -536,6 +454,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(78)]
// ResetAccelerometerPlayMode(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId)
public long ResetAccelerometerPlayMode(ServiceCtx context)
{
@ -549,6 +468,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(79)]
// SetGyroscopeZeroDriftMode(nn::hid::SixAxisSensorHandle, uint GyroscopeZeroDriftMode, nn::applet::AppletResourceUserId)
public long SetGyroscopeZeroDriftMode(ServiceCtx context)
{
@ -561,6 +481,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(80)]
// GetGyroscopeZeroDriftMode(nn::applet::AppletResourceUserId, nn::hid::SixAxisSensorHandle) -> int GyroscopeZeroDriftMode
public long GetGyroscopeZeroDriftMode(ServiceCtx context)
{
@ -574,6 +495,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(81)]
// ResetGyroscopeZeroDriftMode(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId)
public long ResetGyroscopeZeroDriftMode(ServiceCtx context)
{
@ -587,6 +509,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(82)]
// IsSixAxisSensorAtRest(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) -> bool IsAsRest
public long IsSixAxisSensorAtRest(ServiceCtx context)
{
@ -602,6 +525,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(91)]
// ActivateGesture(nn::applet::AppletResourceUserId, int Unknown0)
public long ActivateGesture(ServiceCtx context)
{
@ -613,7 +537,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(100)]
// SetSupportedNpadStyleSet(nn::applet::AppletResourceUserId, nn::hid::NpadStyleTag)
public long SetSupportedNpadStyleSet(ServiceCtx context)
{
@ -628,6 +552,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(101)]
// GetSupportedNpadStyleSet(nn::applet::AppletResourceUserId) -> uint nn::hid::NpadStyleTag
public long GetSupportedNpadStyleSet(ServiceCtx context)
{
@ -640,6 +565,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(102)]
// SetSupportedNpadIdType(nn::applet::AppletResourceUserId, array<NpadIdType, 9>)
public long SetSupportedNpadIdType(ServiceCtx context)
{
@ -651,6 +577,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(103)]
// ActivateNpad(nn::applet::AppletResourceUserId)
public long ActivateNpad(ServiceCtx context)
{
@ -661,6 +588,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(104)]
// DeactivateNpad(nn::applet::AppletResourceUserId)
public long DeactivateNpad(ServiceCtx context)
{
@ -671,6 +599,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(106)]
// AcquireNpadStyleSetUpdateEventHandle(nn::applet::AppletResourceUserId, uint, ulong) -> nn::sf::NativeHandle
public long AcquireNpadStyleSetUpdateEventHandle(ServiceCtx context)
{
@ -690,6 +619,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(107)]
// DisconnectNpad(nn::applet::AppletResourceUserId, uint NpadIdType)
public long DisconnectNpad(ServiceCtx context)
{
@ -701,6 +631,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(108)]
// GetPlayerLedPattern(uint NpadId) -> ulong LedPattern
public long GetPlayerLedPattern(ServiceCtx context)
{
@ -715,6 +646,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(109)] // 5.0.0+
// ActivateNpadWithRevision(nn::applet::AppletResourceUserId, int Unknown)
public long ActivateNpadWithRevision(ServiceCtx context)
{
@ -726,6 +658,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(120)]
// SetNpadJoyHoldType(nn::applet::AppletResourceUserId, long NpadJoyHoldType)
public long SetNpadJoyHoldType(ServiceCtx context)
{
@ -737,6 +670,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(121)]
// GetNpadJoyHoldType(nn::applet::AppletResourceUserId) -> long NpadJoyHoldType
public long GetNpadJoyHoldType(ServiceCtx context)
{
@ -749,6 +683,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(122)]
// SetNpadJoyAssignmentModeSingleByDefault(uint HidControllerId, nn::applet::AppletResourceUserId)
public long SetNpadJoyAssignmentModeSingleByDefault(ServiceCtx context)
{
@ -762,6 +697,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(123)]
// SetNpadJoyAssignmentModeSingle(uint HidControllerId, nn::applet::AppletResourceUserId, long HidNpadJoyDeviceType)
public long SetNpadJoyAssignmentModeSingle(ServiceCtx context)
{
@ -776,6 +712,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(124)]
// SetNpadJoyAssignmentModeDual(uint HidControllerId, nn::applet::AppletResourceUserId)
public long SetNpadJoyAssignmentModeDual(ServiceCtx context)
{
@ -789,6 +726,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(125)]
// MergeSingleJoyAsDualJoy(uint SingleJoyId0, uint SingleJoyId1, nn::applet::AppletResourceUserId)
public long MergeSingleJoyAsDualJoy(ServiceCtx context)
{
@ -801,6 +739,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(126)]
// StartLrAssignmentMode(nn::applet::AppletResourceUserId)
public long StartLrAssignmentMode(ServiceCtx context)
{
@ -811,6 +750,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(127)]
// StopLrAssignmentMode(nn::applet::AppletResourceUserId)
public long StopLrAssignmentMode(ServiceCtx context)
{
@ -821,6 +761,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(128)]
// SetNpadHandheldActivationMode(nn::applet::AppletResourceUserId, long HidNpadHandheldActivationMode)
public long SetNpadHandheldActivationMode(ServiceCtx context)
{
@ -832,6 +773,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(129)]
// GetNpadHandheldActivationMode(nn::applet::AppletResourceUserId) -> long HidNpadHandheldActivationMode
public long GetNpadHandheldActivationMode(ServiceCtx context)
{
@ -844,6 +786,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(130)]
// SwapNpadAssignment(uint OldNpadAssignment, uint NewNpadAssignment, nn::applet::AppletResourceUserId)
public long SwapNpadAssignment(ServiceCtx context)
{
@ -856,6 +799,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(131)]
// IsUnintendedHomeButtonInputProtectionEnabled(uint Unknown0, nn::applet::AppletResourceUserId) -> bool IsEnabled
public long IsUnintendedHomeButtonInputProtectionEnabled(ServiceCtx context)
{
@ -869,6 +813,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(132)]
// EnableUnintendedHomeButtonInputProtection(bool Enable, uint Unknown0, nn::applet::AppletResourceUserId)
public long EnableUnintendedHomeButtonInputProtection(ServiceCtx context)
{
@ -881,6 +826,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(133)] // 5.0.0+
// SetNpadJoyAssignmentModeSingleWithDestination(uint HidControllerId, long HidNpadJoyDeviceType, nn::applet::AppletResourceUserId) -> bool Unknown0, uint Unknown1
public long SetNpadJoyAssignmentModeSingleWithDestination(ServiceCtx context)
{
@ -905,6 +851,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(200)]
// GetVibrationDeviceInfo(nn::hid::VibrationDeviceHandle) -> nn::hid::VibrationDeviceInfo
public long GetVibrationDeviceInfo(ServiceCtx context)
{
@ -924,6 +871,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(201)]
// SendVibrationValue(nn::hid::VibrationDeviceHandle, nn::hid::VibrationValue, nn::applet::AppletResourceUserId)
public long SendVibrationValue(ServiceCtx context)
{
@ -951,6 +899,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(202)]
// GetActualVibrationValue(nn::hid::VibrationDeviceHandle, nn::applet::AppletResourceUserId) -> nn::hid::VibrationValue
public long GetActualVibrationValue(ServiceCtx context)
{
@ -974,6 +923,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(203)]
// CreateActiveVibrationDeviceList() -> object<nn::hid::IActiveVibrationDeviceList>
public long CreateActiveVibrationDeviceList(ServiceCtx context)
{
@ -982,6 +932,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(204)]
// PermitVibration(bool Enable)
public long PermitVibration(ServiceCtx context)
{
@ -992,6 +943,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(205)]
// IsVibrationPermitted() -> bool IsEnabled
public long IsVibrationPermitted(ServiceCtx context)
{
@ -1002,6 +954,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(206)]
// SendVibrationValues(nn::applet::AppletResourceUserId, buffer<array<nn::hid::VibrationDeviceHandle>, type: 9>, buffer<array<nn::hid::VibrationValue>, type: 9>)
public long SendVibrationValues(ServiceCtx context)
{
@ -1026,6 +979,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(207)] // 4.0.0+
// SendVibrationGcErmCommand(nn::hid::VibrationDeviceHandle, nn::hid::VibrationGcErmCommand, nn::applet::AppletResourceUserId)
public long SendVibrationGcErmCommand(ServiceCtx context)
{
@ -1038,6 +992,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(208)] // 4.0.0+
// GetActualVibrationGcErmCommand(nn::hid::VibrationDeviceHandle, nn::applet::AppletResourceUserId) -> nn::hid::VibrationGcErmCommand
public long GetActualVibrationGcErmCommand(ServiceCtx context)
{
@ -1051,6 +1006,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(209)] // 4.0.0+
// BeginPermitVibrationSession(nn::applet::AppletResourceUserId)
public long BeginPermitVibrationSession(ServiceCtx context)
{
@ -1061,6 +1017,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(210)] // 4.0.0+
// EndPermitVibrationSession()
public long EndPermitVibrationSession(ServiceCtx context)
{
@ -1069,6 +1026,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(300)]
// ActivateConsoleSixAxisSensor(nn::applet::AppletResourceUserId)
public long ActivateConsoleSixAxisSensor(ServiceCtx context)
{
@ -1079,6 +1037,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(301)]
// StartConsoleSixAxisSensor(nn::hid::ConsoleSixAxisSensorHandle, nn::applet::AppletResourceUserId)
public long StartConsoleSixAxisSensor(ServiceCtx context)
{
@ -1090,6 +1049,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(302)]
// StopConsoleSixAxisSensor(nn::hid::ConsoleSixAxisSensorHandle, nn::applet::AppletResourceUserId)
public long StopConsoleSixAxisSensor(ServiceCtx context)
{
@ -1101,6 +1061,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(303)] // 5.0.0+
// ActivateSevenSixAxisSensor(nn::applet::AppletResourceUserId)
public long ActivateSevenSixAxisSensor(ServiceCtx context)
{
@ -1111,6 +1072,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(304)] // 5.0.0+
// StartSevenSixAxisSensor(nn::applet::AppletResourceUserId)
public long StartSevenSixAxisSensor(ServiceCtx context)
{
@ -1121,6 +1083,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(305)] // 5.0.0+
// StopSevenSixAxisSensor(nn::applet::AppletResourceUserId)
public long StopSevenSixAxisSensor(ServiceCtx context)
{
@ -1131,6 +1094,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(306)] // 5.0.0+
// InitializeSevenSixAxisSensor(array<nn::sf::NativeHandle>, ulong Counter0, array<nn::sf::NativeHandle>, ulong Counter1, nn::applet::AppletResourceUserId)
public long InitializeSevenSixAxisSensor(ServiceCtx context)
{
@ -1145,6 +1109,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(307)] // 5.0.0+
// FinalizeSevenSixAxisSensor(nn::applet::AppletResourceUserId)
public long FinalizeSevenSixAxisSensor(ServiceCtx context)
{
@ -1155,6 +1120,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(308)] // 5.0.0+
// SetSevenSixAxisSensorFusionStrength(float Strength, nn::applet::AppletResourceUserId)
public long SetSevenSixAxisSensorFusionStrength(ServiceCtx context)
{
@ -1166,6 +1132,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(309)] // 5.0.0+
// GetSevenSixAxisSensorFusionStrength(nn::applet::AppletResourceUserId) -> float Strength
public long GetSevenSixAxisSensorFusionStrength(ServiceCtx context)
{
@ -1178,6 +1145,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(400)]
// IsUsbFullKeyControllerEnabled() -> bool IsEnabled
public long IsUsbFullKeyControllerEnabled(ServiceCtx context)
{
@ -1188,6 +1156,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(401)]
// EnableUsbFullKeyController(bool Enable)
public long EnableUsbFullKeyController(ServiceCtx context)
{
@ -1198,6 +1167,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(402)]
// IsUsbFullKeyControllerConnected(uint Unknown0) -> bool Connected
public long IsUsbFullKeyControllerConnected(ServiceCtx context)
{
@ -1210,6 +1180,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(403)] // 4.0.0+
// HasBattery(uint NpadId) -> bool HasBattery
public long HasBattery(ServiceCtx context)
{
@ -1222,6 +1193,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(404)] // 4.0.0+
// HasLeftRightBattery(uint NpadId) -> bool HasLeftBattery, bool HasRightBattery
public long HasLeftRightBattery(ServiceCtx context)
{
@ -1235,6 +1207,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(405)] // 4.0.0+
// GetNpadInterfaceType(uint NpadId) -> uchar InterfaceType
public long GetNpadInterfaceType(ServiceCtx context)
{
@ -1247,6 +1220,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(406)] // 4.0.0+
// GetNpadLeftRightInterfaceType(uint NpadId) -> uchar LeftInterfaceType, uchar RightInterfaceType
public long GetNpadLeftRightInterfaceType(ServiceCtx context)
{
@ -1260,6 +1234,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(500)] // 5.0.0+
// GetPalmaConnectionHandle(uint Unknown0, nn::applet::AppletResourceUserId) -> nn::hid::PalmaConnectionHandle
public long GetPalmaConnectionHandle(ServiceCtx context)
{
@ -1275,6 +1250,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(501)] // 5.0.0+
// InitializePalma(nn::hid::PalmaConnectionHandle)
public long InitializePalma(ServiceCtx context)
{
@ -1287,6 +1263,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(502)] // 5.0.0+
// AcquirePalmaOperationCompleteEvent(nn::hid::PalmaConnectionHandle) -> nn::sf::NativeHandle
public long AcquirePalmaOperationCompleteEvent(ServiceCtx context)
{
@ -1304,6 +1281,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(503)] // 5.0.0+
// GetPalmaOperationInfo(nn::hid::PalmaConnectionHandle) -> long Unknown0, buffer<Unknown>
public long GetPalmaOperationInfo(ServiceCtx context)
{
@ -1318,6 +1296,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(504)] // 5.0.0+
// PlayPalmaActivity(nn::hid::PalmaConnectionHandle, ulong Unknown0)
public long PlayPalmaActivity(ServiceCtx context)
{
@ -1331,6 +1310,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(505)] // 5.0.0+
// SetPalmaFrModeType(nn::hid::PalmaConnectionHandle, ulong FrModeType)
public long SetPalmaFrModeType(ServiceCtx context)
{
@ -1344,6 +1324,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(506)] // 5.0.0+
// ReadPalmaStep(nn::hid::PalmaConnectionHandle)
public long ReadPalmaStep(ServiceCtx context)
{
@ -1354,6 +1335,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(507)] // 5.0.0+
// EnablePalmaStep(nn::hid::PalmaConnectionHandle, bool Enable)
public long EnablePalmaStep(ServiceCtx context)
{
@ -1367,18 +1349,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
// SuspendPalmaStep(nn::hid::PalmaConnectionHandle)
public long SuspendPalmaStep(ServiceCtx context)
{
int palmaConnectionHandle = context.RequestData.ReadInt32();
Logger.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle });
_palmaOperationCompleteEvent.ReadableEvent.Signal();
return 0;
}
[Command(508)] // 5.0.0+
// ResetPalmaStep(nn::hid::PalmaConnectionHandle)
public long ResetPalmaStep(ServiceCtx context)
{
@ -1391,6 +1362,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(509)] // 5.0.0+
// ReadPalmaApplicationSection(nn::hid::PalmaConnectionHandle, ulong Unknown0, ulong Unknown1)
public long ReadPalmaApplicationSection(ServiceCtx context)
{
@ -1403,6 +1375,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(510)] // 5.0.0+
// WritePalmaApplicationSection(nn::hid::PalmaConnectionHandle, ulong Unknown0, ulong Unknown1, nn::hid::PalmaApplicationSectionAccessBuffer)
public long WritePalmaApplicationSection(ServiceCtx context)
{
@ -1418,6 +1391,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(511)] // 5.0.0+
// ReadPalmaUniqueCode(nn::hid::PalmaConnectionHandle)
public long ReadPalmaUniqueCode(ServiceCtx context)
{
@ -1428,6 +1402,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(512)] // 5.0.0+
// SetPalmaUniqueCodeInvalid(nn::hid::PalmaConnectionHandle)
public long SetPalmaUniqueCodeInvalid(ServiceCtx context)
{
@ -1438,6 +1413,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(1000)]
// SetNpadCommunicationMode(long CommunicationMode, nn::applet::AppletResourceUserId)
public long SetNpadCommunicationMode(ServiceCtx context)
{
@ -1449,6 +1425,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid
return 0;
}
[Command(1001)]
// GetNpadCommunicationMode() -> long CommunicationMode
public long GetNpadCommunicationMode(ServiceCtx context)
{