diff options
| author | Ac_K <Acoustik666@gmail.com> | 2019-07-12 03:13:43 +0200 |
|---|---|---|
| committer | gdkchan <gab.dark.100@gmail.com> | 2019-07-11 22:13:43 -0300 |
| commit | 560ccbeb2d55a4426ad2827bf7534d4a695431c2 (patch) | |
| tree | 7e224acbd6c023ea56ff80c6207aa0966aa06ee5 /Ryujinx.HLE/HOS/Services/Hid | |
| parent | f723f6f39aaf7b1cebc0224a055058d62e3b689c (diff) | |
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
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Hid')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Hid/IActiveVibrationDeviceList.cs | 17 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Hid/IAppletResource.cs | 12 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs | 227 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs | 35 |
4 files changed, 113 insertions, 178 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Hid/IActiveVibrationDeviceList.cs b/Ryujinx.HLE/HOS/Services/Hid/IActiveVibrationDeviceList.cs index 586b852d..742681b4 100644 --- a/Ryujinx.HLE/HOS/Services/Hid/IActiveVibrationDeviceList.cs +++ b/Ryujinx.HLE/HOS/Services/Hid/IActiveVibrationDeviceList.cs @@ -1,22 +1,11 @@ -using Ryujinx.HLE.HOS.Ipc; -using System.Collections.Generic; - namespace Ryujinx.HLE.HOS.Services.Hid { class IActiveApplicationDeviceList : IpcService { - private Dictionary<int, ServiceProcessRequest> _commands; - - public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands; - - public IActiveApplicationDeviceList() - { - _commands = new Dictionary<int, ServiceProcessRequest> - { - { 0, ActivateVibrationDevice } - }; - } + public IActiveApplicationDeviceList() { } + [Command(0)] + // ActivateVibrationDevice(nn::hid::VibrationDeviceHandle) public long ActivateVibrationDevice(ServiceCtx context) { int vibrationDeviceHandle = context.RequestData.ReadInt32(); diff --git a/Ryujinx.HLE/HOS/Services/Hid/IAppletResource.cs b/Ryujinx.HLE/HOS/Services/Hid/IAppletResource.cs index c92252d8..cf852593 100644 --- a/Ryujinx.HLE/HOS/Services/Hid/IAppletResource.cs +++ b/Ryujinx.HLE/HOS/Services/Hid/IAppletResource.cs @@ -2,28 +2,20 @@ using Ryujinx.HLE.HOS.Ipc; using Ryujinx.HLE.HOS.Kernel.Common; using Ryujinx.HLE.HOS.Kernel.Memory; using System; -using System.Collections.Generic; namespace Ryujinx.HLE.HOS.Services.Hid { class IAppletResource : IpcService { - private Dictionary<int, ServiceProcessRequest> _commands; - - public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands; - private KSharedMemory _hidSharedMem; public IAppletResource(KSharedMemory hidSharedMem) { - _commands = new Dictionary<int, ServiceProcessRequest> - { - { 0, GetSharedMemoryHandle } - }; - _hidSharedMem = hidSharedMem; } + [Command(0)] + // GetSharedMemoryHandle() -> handle<copy> public long GetSharedMemoryHandle(ServiceCtx context) { if (context.Process.HandleTable.GenerateHandle(_hidSharedMem, out int handle) != KernelResult.Success) diff --git a/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs b/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs index 0ea7f191..543b2582 100644 --- a/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs +++ b/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs @@ -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) { diff --git a/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs b/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs index a720ef4d..b47aea7f 100644 --- a/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs +++ b/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs @@ -3,7 +3,6 @@ using Ryujinx.HLE.HOS.Ipc; using Ryujinx.HLE.HOS.Kernel.Common; using Ryujinx.HLE.Input; using System; -using System.Collections.Generic; namespace Ryujinx.HLE.HOS.Services.Hid.Irs { @@ -12,35 +11,9 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs { private int _irsensorSharedMemoryHandle = 0; - private Dictionary<int, ServiceProcessRequest> _commands; - - public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => _commands; - - public IIrSensorServer(ServiceCtx context) - { - _commands = new Dictionary<int, ServiceProcessRequest> - { - { 302, ActivateIrsensor }, - { 303, DeactivateIrsensor }, - { 304, GetIrsensorSharedMemoryHandle }, - //{ 305, StopImageProcessor }, - //{ 306, RunMomentProcessor }, - //{ 307, RunClusteringProcessor }, - //{ 308, RunImageTransferProcessor }, - //{ 309, GetImageTransferProcessorState }, - //{ 310, RunTeraPluginProcessor }, - { 311, GetNpadIrCameraHandle }, - //{ 312, RunPointingProcessor }, - //{ 313, SuspendImageProcessor }, - //{ 314, CheckFirmwareVersion }, // 3.0.0+ - //{ 315, SetFunctionLevel }, // 4.0.0+ - //{ 316, RunImageTransferExProcessor }, // 4.0.0+ - //{ 317, RunIrLedProcessor }, // 4.0.0+ - //{ 318, StopImageProcessorAsync }, // 4.0.0+ - { 319, ActivateIrsensorWithFunctionLevel }, // 4.0.0+ - }; - } + public IIrSensorServer(ServiceCtx context) { } + [Command(302)] // ActivateIrsensor(nn::applet::AppletResourceUserId, pid) public long ActivateIrsensor(ServiceCtx context) { @@ -51,6 +24,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs return 0; } + [Command(303)] // DeactivateIrsensor(nn::applet::AppletResourceUserId, pid) public long DeactivateIrsensor(ServiceCtx context) { @@ -61,6 +35,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs return 0; } + [Command(304)] // GetIrsensorSharedMemoryHandle(nn::applet::AppletResourceUserId, pid) -> handle<copy> public long GetIrsensorSharedMemoryHandle(ServiceCtx context) { @@ -77,6 +52,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs return 0; } + [Command(311)] // GetNpadIrCameraHandle(u32) -> nn::irsensor::IrCameraHandle public long GetNpadIrCameraHandle(ServiceCtx context) { @@ -99,6 +75,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs return 0; } + [Command(319)] // 4.0.0+ // ActivateIrsensorWithFunctionLevel(nn::applet::AppletResourceUserId, nn::irsensor::PackedFunctionLevel, pid) public long ActivateIrsensorWithFunctionLevel(ServiceCtx context) { |
