From f05f05b466b93d8a4a54d273a168582631d2d15e Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sun, 10 Mar 2024 14:38:29 +0000 Subject: [PATCH 01/11] Move types --- .../Applets/Controller/ControllerApplet.cs | 2 +- .../Controller/ControllerAppletUIArgs.cs | 1 + .../SoftwareKeyboardApplet.cs | 1 - src/Ryujinx.HLE/HOS/Services/Hid/Hid.cs | 11 +- .../Services/Hid/HidDevices/DebugPadDevice.cs | 3 - .../Services/Hid/HidDevices/KeyboardDevice.cs | 3 +- .../Services/Hid/HidDevices/MouseDevice.cs | 3 - .../Services/Hid/HidDevices/NpadDevices.cs | 6 +- .../Services/Hid/HidDevices/TouchDevice.cs | 3 +- .../HOS/Services/Hid/HidServer/HidUtils.cs | 1 + .../HOS/Services/Hid/IHidServer.cs | 6 +- .../HOS/Services/Hid/IHidSystemServer.cs | 2 +- .../HOS/Services/Hid/IHidbusServer.cs | 1 + .../HOS/Services/Hid/Irs/IIrSensorServer.cs | 2 +- .../HOS/Services/Nfc/Nfp/NfpManager/INfp.cs | 1 + .../Nfc/Nfp/NfpManager/Types/NfpDevice.cs | 1 + .../HOS/Tamper/AtmosphereProgram.cs | 1 + src/Ryujinx.HLE/HOS/Tamper/ITamperProgram.cs | 1 + src/Ryujinx.HLE/HOS/TamperMachine.cs | 2 + src/Ryujinx.HLE/UI/Input/NpadButtonHandler.cs | 2 - src/Ryujinx.HLE/UI/Input/NpadReader.cs | 3 - .../Sdk/Hid}/AppletFooterUiType.cs | 2 +- .../Sdk/Hid}/ControllerConfig.cs | 4 +- .../Sdk/Hid}/GamepadInput.cs | 4 +- .../Sdk/Hid}/HidVector.cs | 2 +- .../Sdk/Hid/IHidDebugServer.cs | 128 ++++++++++++++++++ src/Ryujinx.Horizon/Sdk/Hid/IHidbusServer.cs | 25 ++++ .../Sdk/Hid/IHidbusSystemServer.cs | 13 ++ .../Sdk/Hid}/JoystickPosition.cs | 2 +- .../Sdk/Hid}/KeyboardInput.cs | 2 +- .../Sdk/Hid}/Npad/BusHandle.cs | 2 +- .../Sdk/Hid}/Npad/BusType.cs | 2 +- .../Sdk/Hid}/Npad/ControllerKeys.cs | 2 +- .../Sdk/Hid}/Npad/ControllerType.cs | 2 +- .../Sdk/Hid}/Npad/NpadColor.cs | 2 +- .../Hid}/Npad/NpadHandheldActivationMode.cs | 2 +- .../Sdk/Hid}/Npad/NpadIdType.cs | 2 +- .../Sdk/Hid}/Npad/NpadJoyDeviceType.cs | 2 +- .../Sdk/Hid}/Npad/NpadStyleIndex.cs | 2 +- .../Sdk/Hid}/Npad/PlayerIndex.cs | 2 +- .../Sdk/Hid}/NpadJoyHoldType.cs | 2 +- .../SharedMemory/Common/AnalogStickState.cs | 2 +- .../Hid}/SharedMemory/Common/AtomicStorage.cs | 2 +- .../SharedMemory/Common/ISampledDataStruct.cs | 2 +- .../Sdk/Hid}/SharedMemory/Common/RingLifo.cs | 2 +- .../DebugPad/DebugPadAttribute.cs | 2 +- .../SharedMemory/DebugPad/DebugPadButton.cs | 2 +- .../SharedMemory/DebugPad/DebugPadState.cs | 4 +- .../Hid}/SharedMemory/Keyboard/KeyboardKey.cs | 2 +- .../SharedMemory/Keyboard/KeyboardKeyShift.cs | 2 +- .../SharedMemory/Keyboard/KeyboardModifier.cs | 2 +- .../SharedMemory/Keyboard/KeyboardState.cs | 4 +- .../Hid}/SharedMemory/Mouse/MouseAttribute.cs | 2 +- .../Hid}/SharedMemory/Mouse/MouseButton.cs | 2 +- .../Sdk/Hid}/SharedMemory/Mouse/MouseState.cs | 4 +- .../Sdk/Hid}/SharedMemory/Npad/DeviceType.cs | 2 +- .../Hid}/SharedMemory/Npad/NpadAttribute.cs | 2 +- .../SharedMemory/Npad/NpadBatteryLevel.cs | 2 +- .../Sdk/Hid}/SharedMemory/Npad/NpadButton.cs | 2 +- .../SharedMemory/Npad/NpadColorAttribute.cs | 2 +- .../Hid}/SharedMemory/Npad/NpadCommonState.cs | 4 +- .../Npad/NpadFullKeyColorState.cs | 2 +- .../SharedMemory/Npad/NpadGcTriggerState.cs | 4 +- .../SharedMemory/Npad/NpadInternalState.cs | 4 +- .../Npad/NpadJoyAssignmentMode.cs | 2 +- .../SharedMemory/Npad/NpadJoyColorState.cs | 2 +- .../Hid}/SharedMemory/Npad/NpadLarkType.cs | 2 +- .../Hid}/SharedMemory/Npad/NpadLuciaType.cs | 2 +- .../Sdk/Hid}/SharedMemory/Npad/NpadState.cs | 2 +- .../Hid}/SharedMemory/Npad/NpadStyleTag.cs | 2 +- .../Npad/NpadSystemButtonProperties.cs | 2 +- .../SharedMemory/Npad/NpadSystemProperties.cs | 2 +- .../Npad/SixAxisSensorAttribute.cs | 2 +- .../SharedMemory/Npad/SixAxisSensorState.cs | 4 +- .../Sdk/Hid}/SharedMemory/SharedMemory.cs | 14 +- .../TouchScreen/TouchAttribute.cs | 2 +- .../TouchScreen/TouchScreenState.cs | 4 +- .../SharedMemory/TouchScreen/TouchState.cs | 2 +- .../Hid}/SixAxis/AccelerometerParameters.cs | 2 +- .../Hid}/SixAxis/GyroscopeZeroDriftMode.cs | 2 +- .../Hid}/SixAxis/SensorFusionParameters.cs | 2 +- .../Sdk/Hid}/SixAxisInput.cs | 3 +- .../Sdk/Hid}/TouchPoint.cs | 4 +- .../Hid}/Vibration/VibrationDeviceHandle.cs | 2 +- .../Hid}/Vibration/VibrationDevicePosition.cs | 2 +- .../Sdk/Hid}/Vibration/VibrationDeviceType.cs | 2 +- .../Hid}/Vibration/VibrationDeviceValue.cs | 2 +- .../Sdk/Hid}/Vibration/VibrationValue.cs | 2 +- .../Sdk/Irsensor/IIrSensorServer.cs | 29 ++++ .../Irsensor}/ImageTransferProcessorState.cs | 2 +- .../Sdk/Irsensor}/IrCameraHandle.cs | 2 +- .../PackedClusteringProcessorConfig.cs | 4 +- .../Sdk/Irsensor/PackedFunctionLevel.cs | 10 ++ .../PackedImageTransferProcessorConfig.cs | 4 +- .../PackedImageTransferProcessorExConfig.cs | 20 +++ .../Irsensor/PackedIrLedProcessorConfig.cs | 11 ++ .../Sdk/Irsensor/PackedMcuVersion.cs | 11 ++ .../Irsensor}/PackedMomentProcessorConfig.cs | 4 +- .../Irsensor/PackedPointingProcessorConfig.cs | 14 ++ .../PackedTeraPluginProcessorConfig.cs | 4 +- src/Ryujinx.Input/HLE/NpadController.cs | 3 + src/Ryujinx.Input/HLE/NpadManager.cs | 3 +- src/Ryujinx.Input/HLE/TouchScreenManager.cs | 3 +- .../UI/Applet/ControllerAppletDialog.axaml.cs | 2 + 104 files changed, 389 insertions(+), 122 deletions(-) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/AppletFooterUiType.cs (92%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types => Ryujinx.Horizon/Sdk/Hid}/ControllerConfig.cs (63%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types => Ryujinx.Horizon/Sdk/Hid}/GamepadInput.cs (74%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/HidVector.cs (70%) create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/IHidDebugServer.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/IHidbusServer.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/IHidbusSystemServer.cs rename src/{Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types => Ryujinx.Horizon/Sdk/Hid}/JoystickPosition.cs (71%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types => Ryujinx.Horizon/Sdk/Hid}/KeyboardInput.cs (73%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/Npad/BusHandle.cs (87%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/Npad/BusType.cs (75%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/Npad/ControllerKeys.cs (96%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/Npad/ControllerType.cs (89%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/Npad/NpadColor.cs (97%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidServer/Types => Ryujinx.Horizon/Sdk/Hid}/Npad/NpadHandheldActivationMode.cs (72%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/Npad/NpadIdType.cs (86%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidServer/Types => Ryujinx.Horizon/Sdk/Hid}/Npad/NpadJoyDeviceType.cs (66%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/Npad/NpadStyleIndex.cs (84%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/Npad/PlayerIndex.cs (88%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/NpadJoyHoldType.cs (63%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Common/AnalogStickState.cs (57%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Common/AtomicStorage.cs (89%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Common/ISampledDataStruct.cs (97%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Common/RingLifo.cs (98%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/DebugPad/DebugPadAttribute.cs (64%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/DebugPad/DebugPadButton.cs (85%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/DebugPad/DebugPadState.cs (73%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Keyboard/KeyboardKey.cs (90%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Keyboard/KeyboardKeyShift.cs (97%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Keyboard/KeyboardModifier.cs (84%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Keyboard/KeyboardState.cs (67%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Mouse/MouseAttribute.cs (70%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Mouse/MouseButton.cs (76%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Mouse/MouseState.cs (77%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/DeviceType.cs (90%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadAttribute.cs (81%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadBatteryLevel.cs (68%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadButton.cs (93%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadColorAttribute.cs (62%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadCommonState.cs (76%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadFullKeyColorState.cs (72%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadGcTriggerState.cs (73%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadInternalState.cs (96%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadJoyAssignmentMode.cs (57%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadJoyColorState.cs (77%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadLarkType.cs (63%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadLuciaType.cs (58%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadState.cs (85%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadStyleTag.cs (96%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadSystemButtonProperties.cs (72%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/NpadSystemProperties.cs (90%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/SixAxisSensorAttribute.cs (72%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/Npad/SixAxisSensorState.cs (80%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/SharedMemory.cs (78%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/TouchScreen/TouchAttribute.cs (67%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/TouchScreen/TouchScreenState.cs (71%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Types => Ryujinx.Horizon/Sdk/Hid}/SharedMemory/TouchScreen/TouchState.cs (88%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidServer/Types => Ryujinx.Horizon/Sdk/Hid}/SixAxis/AccelerometerParameters.cs (71%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidServer/Types => Ryujinx.Horizon/Sdk/Hid}/SixAxis/GyroscopeZeroDriftMode.cs (71%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidServer/Types => Ryujinx.Horizon/Sdk/Hid}/SixAxis/SensorFusionParameters.cs (74%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types => Ryujinx.Horizon/Sdk/Hid}/SixAxisInput.cs (78%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types => Ryujinx.Horizon/Sdk/Hid}/TouchPoint.cs (67%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidServer/Types => Ryujinx.Horizon/Sdk/Hid}/Vibration/VibrationDeviceHandle.cs (80%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidServer/Types => Ryujinx.Horizon/Sdk/Hid}/Vibration/VibrationDevicePosition.cs (69%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidServer/Types => Ryujinx.Horizon/Sdk/Hid}/Vibration/VibrationDeviceType.cs (71%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidServer/Types => Ryujinx.Horizon/Sdk/Hid}/Vibration/VibrationDeviceValue.cs (77%) rename src/{Ryujinx.HLE/HOS/Services/Hid/HidServer/Types => Ryujinx.Horizon/Sdk/Hid}/Vibration/VibrationValue.cs (95%) create mode 100644 src/Ryujinx.Horizon/Sdk/Irsensor/IIrSensorServer.cs rename src/{Ryujinx.HLE/HOS/Services/Hid/Irs/Types => Ryujinx.Horizon/Sdk/Irsensor}/ImageTransferProcessorState.cs (83%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Irs/Types => Ryujinx.Horizon/Sdk/Irsensor}/IrCameraHandle.cs (82%) rename src/{Ryujinx.HLE/HOS/Services/Hid/Irs/Types => Ryujinx.Horizon/Sdk/Irsensor}/PackedClusteringProcessorConfig.cs (88%) create mode 100644 src/Ryujinx.Horizon/Sdk/Irsensor/PackedFunctionLevel.cs rename src/{Ryujinx.HLE/HOS/Services/Hid/Irs/Types => Ryujinx.Horizon/Sdk/Irsensor}/PackedImageTransferProcessorConfig.cs (82%) create mode 100644 src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorExConfig.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Irsensor/PackedIrLedProcessorConfig.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Irsensor/PackedMcuVersion.cs rename src/{Ryujinx.HLE/HOS/Services/Hid/Irs/Types => Ryujinx.Horizon/Sdk/Irsensor}/PackedMomentProcessorConfig.cs (87%) create mode 100644 src/Ryujinx.Horizon/Sdk/Irsensor/PackedPointingProcessorConfig.cs rename src/{Ryujinx.HLE/HOS/Services/Hid/Irs/Types => Ryujinx.Horizon/Sdk/Irsensor}/PackedTeraPluginProcessorConfig.cs (74%) diff --git a/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs b/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs index 5ec9d4b08b..bc3090aacc 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerApplet.cs @@ -2,7 +2,7 @@ using Ryujinx.Common.Logging; using Ryujinx.Common.Memory; using Ryujinx.HLE.HOS.Services.Am.AppletAE; using Ryujinx.HLE.HOS.Services.Hid; -using Ryujinx.HLE.HOS.Services.Hid.Types; +using Ryujinx.Horizon.Sdk.Hid.Npad; using System; using System.IO; using System.Runtime.CompilerServices; diff --git a/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerAppletUIArgs.cs b/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerAppletUIArgs.cs index 10cba58ba2..3038457baf 100644 --- a/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerAppletUIArgs.cs +++ b/src/Ryujinx.HLE/HOS/Applets/Controller/ControllerAppletUIArgs.cs @@ -1,4 +1,5 @@ using Ryujinx.HLE.HOS.Services.Hid; +using Ryujinx.Horizon.Sdk.Hid.Npad; using System.Collections.Generic; namespace Ryujinx.HLE.HOS.Applets diff --git a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs index 0462a5b003..0402d6c5fd 100644 --- a/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs +++ b/src/Ryujinx.HLE/HOS/Applets/SoftwareKeyboard/SoftwareKeyboardApplet.cs @@ -3,7 +3,6 @@ using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Applets.SoftwareKeyboard; using Ryujinx.HLE.HOS.Services.Am.AppletAE; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad; using Ryujinx.HLE.UI; using Ryujinx.HLE.UI.Input; using Ryujinx.Memory; diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Hid.cs b/src/Ryujinx.HLE/HOS/Services/Hid/Hid.cs index dbcbe18708..ff408f2054 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Hid.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/Hid.cs @@ -3,15 +3,12 @@ using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Memory; using Ryujinx.HLE.Exceptions; using Ryujinx.HLE.HOS.Kernel.Memory; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugPad; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen; +using Ryujinx.Horizon.Sdk.Hid; +using Ryujinx.Horizon.Sdk.Hid.Npad; using System.Collections.Generic; using System.Runtime.CompilerServices; +using ControllerType = Ryujinx.Horizon.Sdk.Hid.Npad.ControllerType; +using PlayerIndex = Ryujinx.Horizon.Sdk.Hid.Npad.PlayerIndex; namespace Ryujinx.HLE.HOS.Services.Hid { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/DebugPadDevice.cs b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/DebugPadDevice.cs index 6b1d7af5dd..a01763183f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/DebugPadDevice.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/DebugPadDevice.cs @@ -1,6 +1,3 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugPad; - namespace Ryujinx.HLE.HOS.Services.Hid { public class DebugPadDevice : BaseDevice diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs index 0e3630f264..800729a3f8 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs @@ -1,5 +1,4 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard; +using Ryujinx.Horizon.Sdk.Hid; using System; namespace Ryujinx.HLE.HOS.Services.Hid diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/MouseDevice.cs b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/MouseDevice.cs index 2e62d206b5..7c7ae1d290 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/MouseDevice.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/MouseDevice.cs @@ -1,6 +1,3 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse; - namespace Ryujinx.HLE.HOS.Services.Hid { public class MouseDevice : BaseDevice diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/NpadDevices.cs b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/NpadDevices.cs index 86c6a825f5..f711fbde2d 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/NpadDevices.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/NpadDevices.cs @@ -1,9 +1,9 @@ using Ryujinx.Common; using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Kernel.Threading; -using Ryujinx.HLE.HOS.Services.Hid.Types; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad; +using Ryujinx.Horizon.Sdk.Hid; +using Ryujinx.Horizon.Sdk.Hid.Npad; +using Ryujinx.Horizon.Sdk.Hid.Vibration; using System; using System.Collections.Concurrent; using System.Collections.Generic; diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs index 35ac1a16f4..ae3a3cf5cd 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs @@ -1,5 +1,4 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen; +using Ryujinx.Horizon.Sdk.Hid; using System; namespace Ryujinx.HLE.HOS.Services.Hid diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/HidUtils.cs b/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/HidUtils.cs index 8e2e854fb9..209b58ee39 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/HidUtils.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/HidUtils.cs @@ -1,3 +1,4 @@ +using Ryujinx.Horizon.Sdk.Hid.Npad; using System; namespace Ryujinx.HLE.HOS.Services.Hid.HidServer diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs index e3f505f371..2313af5709 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs @@ -3,9 +3,11 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Ipc; using Ryujinx.HLE.HOS.Kernel.Threading; using Ryujinx.HLE.HOS.Services.Hid.HidServer; -using Ryujinx.HLE.HOS.Services.Hid.Types; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad; using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Hid; +using Ryujinx.Horizon.Sdk.Hid.Npad; +using Ryujinx.Horizon.Sdk.Hid.SixAxis; +using Ryujinx.Horizon.Sdk.Hid.Vibration; using System; using System.Collections.Generic; using System.Runtime.InteropServices; diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/IHidSystemServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/IHidSystemServer.cs index 0b4eba9486..98a9d022cd 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/IHidSystemServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/IHidSystemServer.cs @@ -1,6 +1,6 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Services.Hid.HidServer; -using Ryujinx.HLE.HOS.Services.Hid.Types; +using Ryujinx.Horizon.Sdk.Hid.Npad; namespace Ryujinx.HLE.HOS.Services.Hid { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/IHidbusServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/IHidbusServer.cs index d6531cc185..936e3c40ae 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/IHidbusServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/IHidbusServer.cs @@ -1,5 +1,6 @@ using Ryujinx.Common; using Ryujinx.Common.Logging; +using Ryujinx.Horizon.Sdk.Hid.Npad; namespace Ryujinx.HLE.HOS.Services.Hid { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs index a13e77e723..ff0bb44018 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs @@ -2,8 +2,8 @@ using Ryujinx.Common; using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Ipc; using Ryujinx.HLE.HOS.Services.Hid.HidServer; -using Ryujinx.HLE.HOS.Services.Hid.Irs.Types; using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Hid.Npad; using System; namespace Ryujinx.HLE.HOS.Services.Hid.Irs diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs index 20f67a4ef3..4cec5c56f1 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs @@ -7,6 +7,7 @@ using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.HLE.HOS.Services.Hid.HidServer; using Ryujinx.HLE.HOS.Services.Nfc.Nfp.NfpManager; using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Hid.Npad; using System; using System.Buffers.Binary; using System.Globalization; diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/Types/NfpDevice.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/Types/NfpDevice.cs index 3320238a85..f501d414d3 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/Types/NfpDevice.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/Types/NfpDevice.cs @@ -1,5 +1,6 @@ using Ryujinx.HLE.HOS.Kernel.Threading; using Ryujinx.HLE.HOS.Services.Hid; +using Ryujinx.Horizon.Sdk.Hid.Npad; namespace Ryujinx.HLE.HOS.Services.Nfc.Nfp.NfpManager { diff --git a/src/Ryujinx.HLE/HOS/Tamper/AtmosphereProgram.cs b/src/Ryujinx.HLE/HOS/Tamper/AtmosphereProgram.cs index 8171d21771..74428a111c 100644 --- a/src/Ryujinx.HLE/HOS/Tamper/AtmosphereProgram.cs +++ b/src/Ryujinx.HLE/HOS/Tamper/AtmosphereProgram.cs @@ -1,5 +1,6 @@ using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.HLE.HOS.Tamper.Operations; +using Ryujinx.Horizon.Sdk.Hid.Npad; namespace Ryujinx.HLE.HOS.Tamper { diff --git a/src/Ryujinx.HLE/HOS/Tamper/ITamperProgram.cs b/src/Ryujinx.HLE/HOS/Tamper/ITamperProgram.cs index 8458d95d66..65c3d77970 100644 --- a/src/Ryujinx.HLE/HOS/Tamper/ITamperProgram.cs +++ b/src/Ryujinx.HLE/HOS/Tamper/ITamperProgram.cs @@ -1,4 +1,5 @@ using Ryujinx.HLE.HOS.Services.Hid; +using Ryujinx.Horizon.Sdk.Hid.Npad; namespace Ryujinx.HLE.HOS.Tamper { diff --git a/src/Ryujinx.HLE/HOS/TamperMachine.cs b/src/Ryujinx.HLE/HOS/TamperMachine.cs index 609221535d..cf128c6e01 100644 --- a/src/Ryujinx.HLE/HOS/TamperMachine.cs +++ b/src/Ryujinx.HLE/HOS/TamperMachine.cs @@ -3,6 +3,8 @@ using Ryujinx.HLE.HOS.Kernel; using Ryujinx.HLE.HOS.Kernel.Process; using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.HLE.HOS.Tamper; +using Ryujinx.Horizon.Sdk.Hid; +using Ryujinx.Horizon.Sdk.Hid.Npad; using System; using System.Collections.Concurrent; using System.Collections.Generic; diff --git a/src/Ryujinx.HLE/UI/Input/NpadButtonHandler.cs b/src/Ryujinx.HLE/UI/Input/NpadButtonHandler.cs index 73c306614b..62a1997a76 100644 --- a/src/Ryujinx.HLE/UI/Input/NpadButtonHandler.cs +++ b/src/Ryujinx.HLE/UI/Input/NpadButtonHandler.cs @@ -1,5 +1,3 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad; - namespace Ryujinx.HLE.UI.Input { delegate void NpadButtonHandler(int npadIndex, NpadButton button); diff --git a/src/Ryujinx.HLE/UI/Input/NpadReader.cs b/src/Ryujinx.HLE/UI/Input/NpadReader.cs index 8276d6160f..5b501ed31c 100644 --- a/src/Ryujinx.HLE/UI/Input/NpadReader.cs +++ b/src/Ryujinx.HLE/UI/Input/NpadReader.cs @@ -1,6 +1,3 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad; - namespace Ryujinx.HLE.UI.Input { /// diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/AppletFooterUiType.cs b/src/Ryujinx.Horizon/Sdk/Hid/AppletFooterUiType.cs similarity index 92% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/AppletFooterUiType.cs rename to src/Ryujinx.Horizon/Sdk/Hid/AppletFooterUiType.cs index b9b0c5f99f..4a5ec53238 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/AppletFooterUiType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/AppletFooterUiType.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum AppletFooterUiType : byte diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/ControllerConfig.cs b/src/Ryujinx.Horizon/Sdk/Hid/ControllerConfig.cs similarity index 63% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/ControllerConfig.cs rename to src/Ryujinx.Horizon/Sdk/Hid/ControllerConfig.cs index cba5c7b1dd..7afb7f3d41 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/ControllerConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/ControllerConfig.cs @@ -1,4 +1,6 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +using Ryujinx.Horizon.Sdk.Hid.Npad; + +namespace Ryujinx.Horizon.Sdk.Hid { public struct ControllerConfig { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/GamepadInput.cs b/src/Ryujinx.Horizon/Sdk/Hid/GamepadInput.cs similarity index 74% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/GamepadInput.cs rename to src/Ryujinx.Horizon/Sdk/Hid/GamepadInput.cs index 452901a087..f7ed1c5295 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/GamepadInput.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/GamepadInput.cs @@ -1,4 +1,6 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +using Ryujinx.Horizon.Sdk.Hid.Npad; + +namespace Ryujinx.Horizon.Sdk.Hid { public struct GamepadInput { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/HidVector.cs b/src/Ryujinx.Horizon/Sdk/Hid/HidVector.cs similarity index 70% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/HidVector.cs rename to src/Ryujinx.Horizon/Sdk/Hid/HidVector.cs index 8d667796ad..6d65c05111 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/HidVector.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/HidVector.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types +namespace Ryujinx.Horizon.Sdk.Hid { struct HidVector { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/IHidDebugServer.cs b/src/Ryujinx.Horizon/Sdk/Hid/IHidDebugServer.cs new file mode 100644 index 0000000000..311832ab9d --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/IHidDebugServer.cs @@ -0,0 +1,128 @@ +using Ryujinx.Horizon.Sdk.Sf; + +namespace Ryujinx.Horizon.Sdk.Hid +{ + interface IHidDebugServer : IServiceObject + { + // Result DeactivateDebugPad(); + // Result SetDebugPadAutoPilotState(DebugPadAutoPilotState arg0); + // Result UnsetDebugPadAutoPilotState(); + // Result DeactivateTouchScreen(); + // Result SetTouchScreenAutoPilotState(ReadOnlySpan arg0); + // Result UnsetTouchScreenAutoPilotState(); + // Result GetTouchScreenConfiguration(out TouchScreenConfigurationForNx arg0, AppletResourceUserId arg1, ulong pid); + // Result ProcessTouchScreenAutoTune(); + // Result ForceStopTouchScreenManagement(); + // Result ForceRestartTouchScreenManagement(AppletResourceUserId arg0, int arg1, ulong pid); + // Result IsTouchScreenManaged(out bool arg0); + // Result DeactivateMouse(); + // Result SetMouseAutoPilotState(MouseAutoPilotState arg0); + // Result UnsetMouseAutoPilotState(); + // Result DeactivateKeyboard(); + // Result SetKeyboardAutoPilotState(KeyboardAutoPilotState arg0); + // Result UnsetKeyboardAutoPilotState(); + // Result DeactivateXpad(BasicXpadId arg0); + // Result ClearNpadSystemCommonPolicy(AppletResourceUserId arg0, ulong pid); + // Result DeactivateNpad(AppletResourceUserId arg0, ulong pid); + // Result ForceDisconnectNpad(uint arg0); + // Result DeactivateGesture(); + // Result DeactivateHomeButton(); + // Result SetHomeButtonAutoPilotState(HomeButtonAutoPilotState arg0); + // Result UnsetHomeButtonAutoPilotState(); + // Result DeactivateSleepButton(); + // Result SetSleepButtonAutoPilotState(SleepButtonAutoPilotState arg0); + // Result UnsetSleepButtonAutoPilotState(); + // Result DeactivateCaptureButton(); + // Result SetCaptureButtonAutoPilotState(CaptureButtonAutoPilotState arg0); + // Result UnsetCaptureButtonAutoPilotState(); + // Result SetShiftAccelerometerCalibrationValue(SixAxisSensorHandle arg0, AppletResourceUserId arg1, float arg2, float arg3, ulong pid); + // Result GetShiftAccelerometerCalibrationValue(out float arg0, out float arg1, SixAxisSensorHandle arg2, AppletResourceUserId arg3, ulong pid); + // Result SetShiftGyroscopeCalibrationValue(SixAxisSensorHandle arg0, AppletResourceUserId arg1, float arg2, float arg3, ulong pid); + // Result GetShiftGyroscopeCalibrationValue(out float arg0, out float arg1, SixAxisSensorHandle arg2, AppletResourceUserId arg3, ulong pid); + // Result DeactivateConsoleSixAxisSensor(); + // Result GetConsoleSixAxisSensorSamplingFrequency(out long arg0, AppletResourceUserId arg1, ulong pid); + // Result DeactivateSevenSixAxisSensor(); + // Result GetConsoleSixAxisSensorCountStates(out int arg0, Span arg1, AppletResourceUserId arg2, ulong pid); + // Result GetAccelerometerFsr(out AccelerometerFsr arg0, AppletResourceUserId arg1, ulong pid); + // Result SetAccelerometerFsr(AccelerometerFsr arg0, AppletResourceUserId arg1, ulong pid); + // Result GetAccelerometerOdr(out AccelerometerOdr arg0, AppletResourceUserId arg1, ulong pid); + // Result SetAccelerometerOdr(AccelerometerOdr arg0, AppletResourceUserId arg1, ulong pid); + // Result GetGyroscopeFsr(out GyroscopeFsr arg0, AppletResourceUserId arg1, ulong pid); + // Result SetGyroscopeFsr(GyroscopeFsr arg0, AppletResourceUserId arg1, ulong pid); + // Result GetGyroscopeOdr(out GyroscopeOdr arg0, AppletResourceUserId arg1, ulong pid); + // Result SetGyroscopeOdr(GyroscopeOdr arg0, AppletResourceUserId arg1, ulong pid); + // Result GetWhoAmI(out WhoAmIValue arg0, AppletResourceUserId arg1, ulong pid); + // Result ActivateFirmwareUpdate(); + // Result DeactivateFirmwareUpdate(); + // Result StartFirmwareUpdate(UniquePadId arg0); + // Result GetFirmwareUpdateStage(out long arg0, out long arg1); + // Result GetFirmwareVersion(out FirmwareVersion arg0, uint arg1, DeviceType arg2); + // Result GetDestinationFirmwareVersion(out FirmwareVersion arg0, uint arg1, DeviceType arg2); + // Result DiscardFirmwareInfoCacheForRevert(); + // Result StartFirmwareUpdateForRevert(UniquePadId arg0); + // Result GetAvailableFirmwareVersionForRevert(out FirmwareVersion arg0, UniquePadId arg1); + // Result IsFirmwareUpdatingDevice(out bool arg0, UniquePadId arg1); + // Result StartFirmwareUpdateIndividual(out FirmwareUpdateDeviceHandle arg0, UniquePadId arg1, long arg2, int arg3, ulong arg4); + // Result SetUsbFirmwareForceUpdateEnabled(bool arg0); + // Result SetAllKuinaDevicesToFirmwareUpdateMode(); + // Result UpdateControllerColor(Unorm8x4 arg0, Unorm8x4 arg1, UniquePadId arg2); + // Result ConnectUsbPadsAsync(); + // Result DisconnectUsbPadsAsync(); + // Result UpdateDesignInfo(Unorm8x4 arg0, Unorm8x4 arg1, Unorm8x4 arg2, Unorm8x4 arg3, uint arg4, UniquePadId arg5); + // Result GetUniquePadDriverState(out PadRawState arg0, UniquePadId arg1); + // Result GetSixAxisSensorDriverStates(out long arg0, Span arg1, UniquePadId arg2); + // Result GetRxPacketHistory(out JoyConFormatPacketRxHistory arg0, UniquePadId arg1); + // Result AcquireOperationEventHandle(out int arg0, UniquePadId arg1); + // Result ReadSerialFlash(uint arg0, int arg1, ulong arg2, UniquePadId arg3); + // Result WriteSerialFlash(uint arg0, int arg1, ulong arg2, ulong arg3, UniquePadId arg4); + // Result GetOperationResult(UniquePadId arg0); + // Result EnableShipmentMode(UniquePadId arg0); + // Result ClearPairingInfo(UniquePadId arg0); + // Result GetUniquePadDeviceTypeSetInternal(out DeviceType arg0, UniquePadId arg1); + // Result EnableAnalogStickPower(bool arg0, UniquePadId arg1); + // Result RequestKuinaUartClockCal(UniquePadId arg0); + // Result GetKuinaUartClockCal(out byte arg0, UniquePadId arg1); + // Result SetKuinaUartClockTrim(UniquePadId arg0, byte arg1); + // Result KuinaLoopbackTest(UniquePadId arg0); + // Result RequestBatteryVoltage(UniquePadId arg0); + // Result GetBatteryVoltage(out ushort arg0, UniquePadId arg1); + // Result GetUniquePadPowerInfo(out PowerInfo arg0, UniquePadId arg1); + // Result RebootUniquePad(UniquePadId arg0); + // Result RequestKuinaFirmwareVersion(UniquePadId arg0); + // Result GetKuinaFirmwareVersion(out UsbFirmwareVersion arg0, UniquePadId arg1); + // Result GetVidPid(out ushort arg0, out ushort arg1, UniquePadId arg2); + // Result GetAnalogStickCalibrationValue(out AnalogStickCalibrationValue arg0, UniquePadId arg1, AnalogStickDeviceType arg2); + // Result GetUniquePadIdsFull(out int arg0, Span arg1); + // Result ConnectUniquePad(UniquePadId arg0); + // Result IsVirtual(out bool arg0, out bool arg1, UniquePadId arg2); + // Result GetAnalogStickModuleParam(out AnalogStickModuleParam arg0, UniquePadId arg1, AnalogStickDeviceType arg2); + // Result UnsetAllAutoPilotVirtualPadState(); + // Result AttachHdlsWorkBuffer(out HdlsSessionId arg0, int arg1, ulong arg2); + // Result ReleaseHdlsWorkBuffer(HdlsSessionId arg0); + // Result DumpHdlsNpadAssignmentState(HdlsSessionId arg0); + // Result DumpHdlsStates(HdlsSessionId arg0); + // Result ApplyHdlsNpadAssignmentState(HdlsSessionId arg0, bool arg1); + // Result ApplyHdlsStateList(HdlsSessionId arg0); + // Result AttachHdlsVirtualDevice(out HdlsHandle arg0, HdlsDeviceInfo arg1); + // Result DetachHdlsVirtualDevice(HdlsHandle arg0); + // Result SetHdlsState(HdlsHandle arg0, HdlsState arg1); + // Result AddRegisteredDevice(RegisteredDevice arg0); + // Result DisableExternalMcuOnNxDevice(bool arg0); + // Result DisableRailDeviceFiltering(bool arg0); + // Result EnableWiredPairing(bool arg0); + // Result EnableShipmentModeAutoClear(bool arg0); + // Result SetRailEnabled(bool arg0); + // Result SetFactoryInt(bool arg0, UniquePadId arg1); + // Result IsFactoryBootEnabled(out bool arg0, UniquePadId arg1); + // Result SetAnalogStickModelDataTemporarily(AnalogStickModelData arg0, UniquePadId arg1, int arg2); + // Result GetAnalogStickModelData(out AnalogStickModelData arg0, out bool arg1, UniquePadId arg2, int arg3); + // Result ResetAnalogStickModelData(UniquePadId arg0, int arg1); + // Result ConvertPadState(out PadState arg0, PadState arg1, UniquePadId arg2); + // Result AddButtonPlayData(ButtonPlayData arg0, UniquePadId arg1); + // Result StartButtonPlayData(UniquePadId arg0); + // Result StopButtonPlayData(UniquePadId arg0); + // Result DeactivateDigitizer(); + // Result SetDigitizerAutoPilotState(DigitizerAutoPilotState arg0); + // Result UnsetDigitizerAutoPilotState(); + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/IHidbusServer.cs b/src/Ryujinx.Horizon/Sdk/Hid/IHidbusServer.cs new file mode 100644 index 0000000000..02d07fc898 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/IHidbusServer.cs @@ -0,0 +1,25 @@ +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Applet; +using Ryujinx.Horizon.Sdk.Hid.Npad; +using Ryujinx.Horizon.Sdk.Sf; +using System; + +namespace Ryujinx.Horizon.Sdk.Hid +{ + interface IHidbusServer : IServiceObject + { + Result GetBusHandle(out BusHandle handle, out bool hasHandle, uint npadIdType, ulong busType, AppletResourceUserId resourceUserId); + Result IsExternalDeviceConnected(out bool isAttached, BusHandle handle); + Result Initialize(BusHandle handle, AppletResourceUserId resourceUserId); + Result Finalize(BusHandle handle, AppletResourceUserId resourceUserId); + Result EnableExternalDevice(BusHandle handle, bool isEnabled, ulong version, AppletResourceUserId resourceUserId); + Result GetExternalDeviceId(out uint deviceId, BusHandle handle); + Result SendCommandAsync(ReadOnlySpan buffer, BusHandle handle); + Result GetSendCommandAsyncResult(out uint outSize, Span buffer, BusHandle handle); + Result SetEventForSendCommandAsyncResult(out int eventHandle, BusHandle handle); + Result GetSharedMemoryHandle(out int sharedMemoryHandle); + Result EnableJoyPollingReceiveMode(ReadOnlySpan buffer, int transferMemoryHandle, uint size, uint joyPollingMode, BusHandle handle); + Result DisableJoyPollingReceiveMode(BusHandle handle); + Result SetStatusManagerType(uint statusManagerType); + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/IHidbusSystemServer.cs b/src/Ryujinx.Horizon/Sdk/Hid/IHidbusSystemServer.cs new file mode 100644 index 0000000000..c4b7a06513 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/IHidbusSystemServer.cs @@ -0,0 +1,13 @@ +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Applet; +using Ryujinx.Horizon.Sdk.Sf; + +namespace Ryujinx.Horizon.Sdk.Hid +{ + interface IHidbusSystemServer : IServiceObject + { + Result SetAppletResourceUserId(AppletResourceUserId resourceUserId); + Result RegisterAppletResourceUserId(AppletResourceUserId resourceUserId, int arg1); + Result UnregisterAppletResourceUserId(AppletResourceUserId resourceUserId); + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/JoystickPosition.cs b/src/Ryujinx.Horizon/Sdk/Hid/JoystickPosition.cs similarity index 71% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/JoystickPosition.cs rename to src/Ryujinx.Horizon/Sdk/Hid/JoystickPosition.cs index 47be8d4137..4b06eb7fdf 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/JoystickPosition.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/JoystickPosition.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid { public struct JoystickPosition { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/KeyboardInput.cs b/src/Ryujinx.Horizon/Sdk/Hid/KeyboardInput.cs similarity index 73% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/KeyboardInput.cs rename to src/Ryujinx.Horizon/Sdk/Hid/KeyboardInput.cs index 26fe980f50..356c66e1d1 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/KeyboardInput.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/KeyboardInput.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid { public struct KeyboardInput { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/BusHandle.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/BusHandle.cs similarity index 87% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/BusHandle.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Npad/BusHandle.cs index 8e061351e3..c1c8491175 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/BusHandle.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/BusHandle.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Npad { [StructLayout(LayoutKind.Sequential)] struct BusHandle diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/BusType.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/BusType.cs similarity index 75% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/BusType.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Npad/BusType.cs index 6c70ac25c9..9bb3b2a321 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/BusType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/BusType.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Npad { public enum BusType : long { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/ControllerKeys.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/ControllerKeys.cs similarity index 96% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/ControllerKeys.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Npad/ControllerKeys.cs index b43381e6dc..cc9d5bfd87 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/ControllerKeys.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/ControllerKeys.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Npad { [Flags] public enum ControllerKeys : long diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/ControllerType.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/ControllerType.cs similarity index 89% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/ControllerType.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Npad/ControllerType.cs index 1f5da31734..4d7200e4f9 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/ControllerType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/ControllerType.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Npad { [Flags] public enum ControllerType diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/NpadColor.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadColor.cs similarity index 97% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/NpadColor.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadColor.cs index 010cffbd2d..d02cafb03d 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/NpadColor.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadColor.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Npad { public enum NpadColor : uint { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Npad/NpadHandheldActivationMode.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadHandheldActivationMode.cs similarity index 72% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Npad/NpadHandheldActivationMode.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadHandheldActivationMode.cs index ba56e93cb4..c8e00597ae 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Npad/NpadHandheldActivationMode.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadHandheldActivationMode.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Npad { public enum NpadHandheldActivationMode { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/NpadIdType.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadIdType.cs similarity index 86% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/NpadIdType.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadIdType.cs index 8f08481cd2..f4bc91c12b 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/NpadIdType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadIdType.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Npad { public enum NpadIdType { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Npad/NpadJoyDeviceType.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadJoyDeviceType.cs similarity index 66% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Npad/NpadJoyDeviceType.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadJoyDeviceType.cs index ac0bb35756..4176d0962e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Npad/NpadJoyDeviceType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadJoyDeviceType.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Npad { public enum NpadJoyDeviceType { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/NpadStyleIndex.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadStyleIndex.cs similarity index 84% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/NpadStyleIndex.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadStyleIndex.cs index c42a5bc56f..037949835f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/NpadStyleIndex.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadStyleIndex.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Npad { public enum NpadStyleIndex : byte { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/PlayerIndex.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/PlayerIndex.cs similarity index 88% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/PlayerIndex.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Npad/PlayerIndex.cs index d68b6d938e..38db243e6f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/Npad/PlayerIndex.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/PlayerIndex.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Npad { public enum PlayerIndex { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/NpadJoyHoldType.cs b/src/Ryujinx.Horizon/Sdk/Hid/NpadJoyHoldType.cs similarity index 63% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/NpadJoyHoldType.cs rename to src/Ryujinx.Horizon/Sdk/Hid/NpadJoyHoldType.cs index cd61dc92cb..e8d7dffc39 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/NpadJoyHoldType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/NpadJoyHoldType.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types +namespace Ryujinx.Horizon.Sdk.Hid { enum NpadJoyHoldType { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/AnalogStickState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AnalogStickState.cs similarity index 57% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/AnalogStickState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AnalogStickState.cs index b9af211c10..c5a9dd7e29 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/AnalogStickState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AnalogStickState.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common { struct AnalogStickState { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/AtomicStorage.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AtomicStorage.cs similarity index 89% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/AtomicStorage.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AtomicStorage.cs index c9f59ce0fd..c9da845f70 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/AtomicStorage.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AtomicStorage.cs @@ -1,6 +1,6 @@ using System.Threading; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common { struct AtomicStorage where T : unmanaged, ISampledDataStruct { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/ISampledDataStruct.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/ISampledDataStruct.cs similarity index 97% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/ISampledDataStruct.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/ISampledDataStruct.cs index 312075bc46..1bde91c5f3 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/ISampledDataStruct.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/ISampledDataStruct.cs @@ -2,7 +2,7 @@ using System; using System.Buffers.Binary; using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common { /// /// This is a "marker interface" to add some compile-time safety to a convention-based optimization. diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/RingLifo.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/RingLifo.cs similarity index 98% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/RingLifo.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/RingLifo.cs index 99f2f59e46..35069a862e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Common/RingLifo.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/RingLifo.cs @@ -3,7 +3,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common { struct RingLifo where T : unmanaged, ISampledDataStruct { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/DebugPad/DebugPadAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadAttribute.cs similarity index 64% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/DebugPad/DebugPadAttribute.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadAttribute.cs index dadaf6b295..2e5e3fc95e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/DebugPad/DebugPadAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugPad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.DebugPad { [Flags] enum DebugPadAttribute : uint diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/DebugPad/DebugPadButton.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadButton.cs similarity index 85% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/DebugPad/DebugPadButton.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadButton.cs index b0bb9b959b..719090165c 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/DebugPad/DebugPadButton.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadButton.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugPad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.DebugPad { [Flags] enum DebugPadButton : uint diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/DebugPad/DebugPadState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadState.cs similarity index 73% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/DebugPad/DebugPadState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadState.cs index f26440c4b1..d5ce06771d 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/DebugPad/DebugPadState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadState.cs @@ -1,7 +1,7 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; +using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugPad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.DebugPad { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct DebugPadState : ISampledDataStruct diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardKey.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKey.cs similarity index 90% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardKey.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKey.cs index 7f75bc3f9a..06dce1ec7b 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardKey.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKey.cs @@ -1,6 +1,6 @@ using Ryujinx.Common.Memory; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard { struct KeyboardKey { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardKeyShift.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKeyShift.cs similarity index 97% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardKeyShift.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKeyShift.cs index c19b5e614c..36be391909 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardKeyShift.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKeyShift.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard { enum KeyboardKeyShift { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardModifier.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardModifier.cs similarity index 84% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardModifier.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardModifier.cs index 890daa0d00..3cf3383882 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardModifier.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardModifier.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard { [Flags] enum KeyboardModifier : ulong diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardState.cs similarity index 67% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardState.cs index 3f7d9409d2..2623b99639 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Keyboard/KeyboardState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardState.cs @@ -1,7 +1,7 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; +using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct KeyboardState : ISampledDataStruct diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Mouse/MouseAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseAttribute.cs similarity index 70% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Mouse/MouseAttribute.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseAttribute.cs index 048dd357cd..e3ae92bff8 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Mouse/MouseAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Mouse { [Flags] enum MouseAttribute : uint diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Mouse/MouseButton.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseButton.cs similarity index 76% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Mouse/MouseButton.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseButton.cs index 4a6f73b8b8..08d9d557b6 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Mouse/MouseButton.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseButton.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Mouse { [Flags] enum MouseButton : uint diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Mouse/MouseState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseState.cs similarity index 77% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Mouse/MouseState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseState.cs index 41fe68b8b0..985aa7a583 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Mouse/MouseState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseState.cs @@ -1,7 +1,7 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; +using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Mouse { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct MouseState : ISampledDataStruct diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/DeviceType.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/DeviceType.cs similarity index 90% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/DeviceType.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/DeviceType.cs index d56f849a69..0788cfc479 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/DeviceType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/DeviceType.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { [Flags] enum DeviceType diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadAttribute.cs similarity index 81% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadAttribute.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadAttribute.cs index 6d7719e829..27a5058027 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { [Flags] enum NpadAttribute : uint diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadBatteryLevel.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadBatteryLevel.cs similarity index 68% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadBatteryLevel.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadBatteryLevel.cs index 7f5b17ff5a..de922ec457 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadBatteryLevel.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadBatteryLevel.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { enum NpadBatteryLevel { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadButton.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadButton.cs similarity index 93% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadButton.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadButton.cs index c20db8e0b7..b84edaaeda 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadButton.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadButton.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { [Flags] enum NpadButton : ulong diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadColorAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadColorAttribute.cs similarity index 62% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadColorAttribute.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadColorAttribute.cs index e8140459ca..e720dcacab 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadColorAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadColorAttribute.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { enum NpadColorAttribute : uint { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadCommonState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadCommonState.cs similarity index 76% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadCommonState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadCommonState.cs index d3caf7170a..efe4bfbd8c 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadCommonState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadCommonState.cs @@ -1,7 +1,7 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; +using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct NpadCommonState : ISampledDataStruct diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadFullKeyColorState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadFullKeyColorState.cs similarity index 72% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadFullKeyColorState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadFullKeyColorState.cs index 77127c2c27..232219fd11 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadFullKeyColorState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadFullKeyColorState.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { struct NpadFullKeyColorState { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadGcTriggerState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadGcTriggerState.cs similarity index 73% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadGcTriggerState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadGcTriggerState.cs index 41e8413428..da5dc8ad0c 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadGcTriggerState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadGcTriggerState.cs @@ -1,7 +1,7 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; +using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct NpadGcTriggerState : ISampledDataStruct diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadInternalState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadInternalState.cs similarity index 96% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadInternalState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadInternalState.cs index f79a2657e0..9c60e031bb 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadInternalState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadInternalState.cs @@ -1,7 +1,7 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; +using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { struct NpadInternalState { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadJoyAssignmentMode.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyAssignmentMode.cs similarity index 57% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadJoyAssignmentMode.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyAssignmentMode.cs index b8a4623f40..6d0127f21f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadJoyAssignmentMode.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyAssignmentMode.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { enum NpadJoyAssignmentMode : uint { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadJoyColorState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyColorState.cs similarity index 77% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadJoyColorState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyColorState.cs index 4e00b5aea6..3512fb523f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadJoyColorState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyColorState.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { struct NpadJoyColorState { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadLarkType.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLarkType.cs similarity index 63% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadLarkType.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLarkType.cs index 013c5fee53..a9a0567c6a 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadLarkType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLarkType.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { enum NpadLarkType : uint { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadLuciaType.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLuciaType.cs similarity index 58% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadLuciaType.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLuciaType.cs index 18756bc345..0a7eb0e879 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadLuciaType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLuciaType.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { enum NpadLuciaType { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadState.cs similarity index 85% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadState.cs index fb32e716de..05f5bcca9f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadState.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { [StructLayout(LayoutKind.Sequential, Size = 0x5000)] struct NpadState diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadStyleTag.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs similarity index 96% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadStyleTag.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs index bf4d918794..c806c6f325 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadStyleTag.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { /// /// Nintendo pad style diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadSystemButtonProperties.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemButtonProperties.cs similarity index 72% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadSystemButtonProperties.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemButtonProperties.cs index 6f820ef69a..8ff1c12daf 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadSystemButtonProperties.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemButtonProperties.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { [Flags] enum NpadSystemButtonProperties : uint diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadSystemProperties.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemProperties.cs similarity index 90% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadSystemProperties.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemProperties.cs index 79110fe447..fa75f6f9cb 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/NpadSystemProperties.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemProperties.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { [Flags] enum NpadSystemProperties : ulong diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/SixAxisSensorAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorAttribute.cs similarity index 72% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/SixAxisSensorAttribute.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorAttribute.cs index b6e57496c9..921f3fc022 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/SixAxisSensorAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { [Flags] enum SixAxisSensorAttribute : uint diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/SixAxisSensorState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorState.cs similarity index 80% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/SixAxisSensorState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorState.cs index f3c2b208f0..9ba1408f1c 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/Npad/SixAxisSensorState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorState.cs @@ -1,8 +1,8 @@ using Ryujinx.Common.Memory; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; +using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct SixAxisSensorState : ISampledDataStruct diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/SharedMemory.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/SharedMemory.cs similarity index 78% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/SharedMemory.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/SharedMemory.cs index d6283eb578..0fb931021c 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/SharedMemory.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/SharedMemory.cs @@ -1,13 +1,13 @@ using Ryujinx.Common.Memory; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.DebugPad; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Keyboard; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Mouse; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Npad; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen; +using 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; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory { /// /// Represent the shared memory shared between applications for input. diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/TouchScreen/TouchAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchAttribute.cs similarity index 67% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/TouchScreen/TouchAttribute.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchAttribute.cs index 44d7c22aa9..5cb2a6cfab 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/TouchScreen/TouchAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen { [Flags] public enum TouchAttribute : uint diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/TouchScreen/TouchScreenState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchScreenState.cs similarity index 71% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/TouchScreen/TouchScreenState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchScreenState.cs index d256da0de1..cd6017d9bd 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/TouchScreen/TouchScreenState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchScreenState.cs @@ -1,8 +1,8 @@ using Ryujinx.Common.Memory; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.Common; +using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct TouchScreenState : ISampledDataStruct diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/TouchScreen/TouchState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchState.cs similarity index 88% rename from src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/TouchScreen/TouchState.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchState.cs index 06be9b24c2..f632bc22b4 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Types/SharedMemory/TouchScreen/TouchState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchState.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen +namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen { struct TouchState { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/SixAxis/AccelerometerParameters.cs b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/AccelerometerParameters.cs similarity index 71% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/SixAxis/AccelerometerParameters.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SixAxis/AccelerometerParameters.cs index baabffa051..f1c6038c2f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/SixAxis/AccelerometerParameters.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/AccelerometerParameters.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.SixAxis { public struct AccelerometerParameters { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/SixAxis/GyroscopeZeroDriftMode.cs b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/GyroscopeZeroDriftMode.cs similarity index 71% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/SixAxis/GyroscopeZeroDriftMode.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SixAxis/GyroscopeZeroDriftMode.cs index d73c602516..1dfd8f3595 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/SixAxis/GyroscopeZeroDriftMode.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/GyroscopeZeroDriftMode.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.SixAxis { public enum GyroscopeZeroDriftMode { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/SixAxis/SensorFusionParameters.cs b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SensorFusionParameters.cs similarity index 74% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/SixAxis/SensorFusionParameters.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SensorFusionParameters.cs index c74214565c..5f30f8fef4 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/SixAxis/SensorFusionParameters.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SensorFusionParameters.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.SixAxis { public struct SensorFusionParameters { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/SixAxisInput.cs b/src/Ryujinx.Horizon/Sdk/Hid/SixAxisInput.cs similarity index 78% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/SixAxisInput.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SixAxisInput.cs index 5c5c5d8c12..dd03414873 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/SixAxisInput.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SixAxisInput.cs @@ -1,6 +1,7 @@ +using Ryujinx.Horizon.Sdk.Hid.Npad; using System.Numerics; -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid { public struct SixAxisInput { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/TouchPoint.cs b/src/Ryujinx.Horizon/Sdk/Hid/TouchPoint.cs similarity index 67% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/TouchPoint.cs rename to src/Ryujinx.Horizon/Sdk/Hid/TouchPoint.cs index ab0c852624..1b6a973406 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/Types/TouchPoint.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/TouchPoint.cs @@ -1,6 +1,6 @@ -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen; +using Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen; -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid { public struct TouchPoint { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDeviceHandle.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceHandle.cs similarity index 80% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDeviceHandle.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceHandle.cs index 02f4b68409..dfbeaf2594 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDeviceHandle.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceHandle.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Vibration { public struct VibrationDeviceHandle { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDevicePosition.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDevicePosition.cs similarity index 69% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDevicePosition.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDevicePosition.cs index 90f4abcc36..7cb61a8f71 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDevicePosition.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDevicePosition.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Vibration { public enum VibrationDevicePosition { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDeviceType.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceType.cs similarity index 71% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDeviceType.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceType.cs index db586bb348..308e635c4f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDeviceType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceType.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Vibration { public enum VibrationDeviceType { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDeviceValue.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceValue.cs similarity index 77% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDeviceValue.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceValue.cs index feed8764dd..3f4be6debf 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationDeviceValue.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceValue.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Vibration { public struct VibrationDeviceValue { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationValue.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationValue.cs similarity index 95% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationValue.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationValue.cs index 490d1e6ab2..5592d64999 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/Types/Vibration/VibrationValue.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationValue.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Vibration { public struct VibrationValue { diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/IIrSensorServer.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/IIrSensorServer.cs new file mode 100644 index 0000000000..e27bedb719 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/IIrSensorServer.cs @@ -0,0 +1,29 @@ +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Applet; +using Ryujinx.Horizon.Sdk.Sf; +using System; + +namespace Ryujinx.Horizon.Sdk.Irsensor +{ + interface IIrSensorServer : IServiceObject + { + Result ActivateIrsensor(AppletResourceUserId arg0, ulong pid); + Result DeactivateIrsensor(AppletResourceUserId arg0, ulong pid); + Result GetIrsensorSharedMemoryHandle(out int arg0, AppletResourceUserId arg1, ulong pid); + Result StopImageProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, ulong pid); + Result RunMomentProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedMomentProcessorConfig arg2, ulong pid); + Result RunClusteringProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedClusteringProcessorConfig arg2, ulong pid); + Result RunImageTransferProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedImageTransferProcessorConfig arg2, int arg3, ulong arg4, ulong pid); + Result GetImageTransferProcessorState(AppletResourceUserId arg0, out ImageTransferProcessorState arg1, Span arg2, IrCameraHandle arg3, ulong pid); + Result RunTeraPluginProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedTeraPluginProcessorConfig arg2, ulong pid); + Result GetNpadIrCameraHandle(out IrCameraHandle arg0, uint arg1); + Result RunPointingProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedPointingProcessorConfig arg2, ulong pid); + Result SuspendImageProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, ulong pid); + Result CheckFirmwareVersion(AppletResourceUserId arg0, IrCameraHandle arg1, PackedMcuVersion arg2, ulong pid); + Result SetFunctionLevel(AppletResourceUserId arg0, IrCameraHandle arg1, PackedFunctionLevel arg2, ulong pid); + Result RunImageTransferExProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedImageTransferProcessorExConfig arg2, int arg3, ulong arg4, ulong pid); + Result RunIrLedProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedIrLedProcessorConfig arg2, ulong pid); + Result StopImageProcessorAsync(AppletResourceUserId arg0, IrCameraHandle arg1, ulong pid); + Result ActivateIrsensorWithFunctionLevel(AppletResourceUserId arg0, PackedFunctionLevel arg1, ulong pid); + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/ImageTransferProcessorState.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/ImageTransferProcessorState.cs similarity index 83% rename from src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/ImageTransferProcessorState.cs rename to src/Ryujinx.Horizon/Sdk/Irsensor/ImageTransferProcessorState.cs index 76a07f797d..1084d9a3c3 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/ImageTransferProcessorState.cs +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/ImageTransferProcessorState.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Irs.Types +namespace Ryujinx.Horizon.Sdk.Irsensor { [StructLayout(LayoutKind.Sequential, Size = 0x10)] struct ImageTransferProcessorState diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/IrCameraHandle.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/IrCameraHandle.cs similarity index 82% rename from src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/IrCameraHandle.cs rename to src/Ryujinx.Horizon/Sdk/Irsensor/IrCameraHandle.cs index a15e445c7d..d04105d57b 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/IrCameraHandle.cs +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/IrCameraHandle.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Irs.Types +namespace Ryujinx.Horizon.Sdk.Irsensor { [StructLayout(LayoutKind.Sequential, Size = 0x4)] struct IrCameraHandle diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedClusteringProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedClusteringProcessorConfig.cs similarity index 88% rename from src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedClusteringProcessorConfig.cs rename to src/Ryujinx.Horizon/Sdk/Irsensor/PackedClusteringProcessorConfig.cs index d12513fab0..aa469bf4ce 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedClusteringProcessorConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedClusteringProcessorConfig.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Irs.Types +namespace Ryujinx.Horizon.Sdk.Irsensor { [StructLayout(LayoutKind.Sequential, Size = 0x28)] struct PackedClusteringProcessorConfig @@ -15,7 +15,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs.Types public ushort WindowOfInterestY; public ushort WindowOfInterestWidth; public ushort WindowOfInterestHeight; - public uint RequiredMcuVersion; + public PackedMcuVersion RequiredMcuVersion; public uint ObjectPixelCountMin; public uint ObjectPixelCountMax; public byte ObjectIntensityMin; diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedFunctionLevel.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedFunctionLevel.cs new file mode 100644 index 0000000000..b1c01483c2 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedFunctionLevel.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Irsensor +{ + [StructLayout(LayoutKind.Sequential, Size = 0x4)] + struct PackedFunctionLevel + { + public byte IrSensorFunctionLevel; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedImageTransferProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorConfig.cs similarity index 82% rename from src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedImageTransferProcessorConfig.cs rename to src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorConfig.cs index 0bc709f207..796a4bcba1 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedImageTransferProcessorConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorConfig.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Irs.Types +namespace Ryujinx.Horizon.Sdk.Irsensor { [StructLayout(LayoutKind.Sequential, Size = 0x18)] struct PackedImageTransferProcessorConfig @@ -11,7 +11,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs.Types public byte IsNegativeImageUsed; public byte Reserved1; public uint Reserved2; - public uint RequiredMcuVersion; + public PackedMcuVersion RequiredMcuVersion; public byte Format; public byte Reserved3; public ushort Reserved4; diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorExConfig.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorExConfig.cs new file mode 100644 index 0000000000..c3d420e733 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorExConfig.cs @@ -0,0 +1,20 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Irsensor +{ + [StructLayout(LayoutKind.Sequential, Size = 0x20)] + struct PackedImageTransferProcessorExConfig + { + public long ExposureTime; + public byte LightTarget; + public byte Gain; + public byte IsNegativeImageUsed; + public byte Reserved1; + public PackedMcuVersion RequiredMcuVersion; + public byte OrigFormat; + public byte TrimmingFormat; + public ushort TrimmingStartX; + public ushort TrimmingStartY; + public byte IsExternalLightFilterEnabled; + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedIrLedProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedIrLedProcessorConfig.cs new file mode 100644 index 0000000000..2f081f3294 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedIrLedProcessorConfig.cs @@ -0,0 +1,11 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Irsensor +{ + [StructLayout(LayoutKind.Sequential, Size = 0x8)] + struct PackedIrLedProcessorConfig + { + public PackedMcuVersion RequiredMcuVersion; + public byte LightTarget; + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedMcuVersion.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedMcuVersion.cs new file mode 100644 index 0000000000..1bd1985283 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedMcuVersion.cs @@ -0,0 +1,11 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Irsensor +{ + [StructLayout(LayoutKind.Sequential, Size = 0x4)] + public struct PackedMcuVersion + { + public short MajorVersion; + public short MinorVersion; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedMomentProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedMomentProcessorConfig.cs similarity index 87% rename from src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedMomentProcessorConfig.cs rename to src/Ryujinx.Horizon/Sdk/Irsensor/PackedMomentProcessorConfig.cs index f1905ee3a5..408a4adbdb 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedMomentProcessorConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedMomentProcessorConfig.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Irs.Types +namespace Ryujinx.Horizon.Sdk.Irsensor { [StructLayout(LayoutKind.Sequential, Size = 0x20)] struct PackedMomentProcessorConfig @@ -15,7 +15,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs.Types public ushort WindowOfInterestY; public ushort WindowOfInterestWidth; public ushort WindowOfInterestHeight; - public uint RequiredMcuVersion; + public PackedMcuVersion RequiredMcuVersion; public byte Preprocess; public byte PreprocessIntensityThreshold; public ushort Reserved3; diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedPointingProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedPointingProcessorConfig.cs new file mode 100644 index 0000000000..71a09fb557 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedPointingProcessorConfig.cs @@ -0,0 +1,14 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Irsensor +{ + [StructLayout(LayoutKind.Sequential, Size = 0x20)] + struct PackedPointingProcessorConfig + { + public ushort WindowOfInterestX; + public ushort WindowOfInterestY; + public ushort WindowOfInterestWidth; + public ushort WindowOfInterestHeight; + public PackedMcuVersion RequiredMcuVersion; + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedTeraPluginProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedTeraPluginProcessorConfig.cs similarity index 74% rename from src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedTeraPluginProcessorConfig.cs rename to src/Ryujinx.Horizon/Sdk/Irsensor/PackedTeraPluginProcessorConfig.cs index 1cc2533a28..20170cd31e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/Types/PackedTeraPluginProcessorConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Irsensor/PackedTeraPluginProcessorConfig.cs @@ -1,11 +1,11 @@ using System.Runtime.InteropServices; -namespace Ryujinx.HLE.HOS.Services.Hid.Irs.Types +namespace Ryujinx.Horizon.Sdk.Irsensor { [StructLayout(LayoutKind.Sequential, Size = 0x8)] struct PackedTeraPluginProcessorConfig { - public uint RequiredMcuVersion; + public PackedMcuVersion RequiredMcuVersion; public byte Mode; public byte Unknown1; public byte Unknown2; diff --git a/src/Ryujinx.Input/HLE/NpadController.cs b/src/Ryujinx.Input/HLE/NpadController.cs index 3807452838..0eabeb6951 100644 --- a/src/Ryujinx.Input/HLE/NpadController.cs +++ b/src/Ryujinx.Input/HLE/NpadController.cs @@ -4,6 +4,9 @@ using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Common.Configuration.Hid.Controller.Motion; using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Services.Hid; +using Ryujinx.Horizon.Sdk.Hid; +using Ryujinx.Horizon.Sdk.Hid.Npad; +using Ryujinx.Horizon.Sdk.Hid.Vibration; using System; using System.Collections.Concurrent; using System.Numerics; diff --git a/src/Ryujinx.Input/HLE/NpadManager.cs b/src/Ryujinx.Input/HLE/NpadManager.cs index 1dc87358d5..077c8fb6d6 100644 --- a/src/Ryujinx.Input/HLE/NpadManager.cs +++ b/src/Ryujinx.Input/HLE/NpadManager.cs @@ -2,6 +2,7 @@ using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.HLE.HOS.Services.Hid; +using Ryujinx.Horizon.Sdk.Hid; using System; using System.Collections.Generic; using System.Diagnostics; @@ -9,7 +10,7 @@ using System.Linq; using System.Runtime.CompilerServices; using CemuHookClient = Ryujinx.Input.Motion.CemuHook.Client; using ControllerType = Ryujinx.Common.Configuration.Hid.ControllerType; -using PlayerIndex = Ryujinx.HLE.HOS.Services.Hid.PlayerIndex; +using PlayerIndex = Ryujinx.Horizon.Sdk.Hid.Npad.PlayerIndex; using Switch = Ryujinx.HLE.Switch; namespace Ryujinx.Input.HLE diff --git a/src/Ryujinx.Input/HLE/TouchScreenManager.cs b/src/Ryujinx.Input/HLE/TouchScreenManager.cs index c613f9281b..8eca633387 100644 --- a/src/Ryujinx.Input/HLE/TouchScreenManager.cs +++ b/src/Ryujinx.Input/HLE/TouchScreenManager.cs @@ -1,6 +1,7 @@ using Ryujinx.HLE; using Ryujinx.HLE.HOS.Services.Hid; -using Ryujinx.HLE.HOS.Services.Hid.Types.SharedMemory.TouchScreen; +using Ryujinx.Horizon.Sdk.Hid; +using Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen; using System; namespace Ryujinx.Input.HLE diff --git a/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs b/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs index 6b999b1f44..d69e5e48d0 100644 --- a/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs +++ b/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs @@ -9,6 +9,8 @@ using Ryujinx.Ava.UI.Windows; using Ryujinx.Common; using Ryujinx.HLE.HOS.Applets; using Ryujinx.HLE.HOS.Services.Hid; +using Ryujinx.Horizon.Sdk.Hid.Npad; +using System; using System.Linq; using System.Threading.Tasks; From ba9aa61cc323f7482b172c7ce4d362e005aa6462 Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sun, 10 Mar 2024 15:18:54 +0000 Subject: [PATCH 02/11] Implement most of Irs --- .../HOS/Services/Hid/Irs/IIrSensorServer.cs | 101 --------- .../Services/Hid/Irs/IIrSensorSystemServer.cs | 8 - src/Ryujinx.Horizon/Hid/HidIpcServer.cs | 47 ++++ src/Ryujinx.Horizon/Hid/HidMain.cs | 17 ++ src/Ryujinx.Horizon/Irs/IrSensorServer.cs | 203 ++++++++++++++++++ .../Irs/IrSensorSystemServer.cs | 43 ++++ src/Ryujinx.Horizon/Irs/IrsIpcServer.cs | 45 ++++ src/Ryujinx.Horizon/Irs/IrsMain.cs | 17 ++ .../Sdk/Irs/IIrSensorServer.cs | 30 +++ .../Sdk/Irs/IIrSensorSystemServer.cs | 14 ++ .../ImageTransferProcessorState.cs | 2 +- .../Sdk/{Irsensor => Irs}/IrCameraHandle.cs | 2 +- .../PackedClusteringProcessorConfig.cs | 2 +- .../{Irsensor => Irs}/PackedFunctionLevel.cs | 2 +- .../PackedImageTransferProcessorConfig.cs | 2 +- .../PackedImageTransferProcessorExConfig.cs | 2 +- .../PackedIrLedProcessorConfig.cs | 2 +- .../Sdk/{Irsensor => Irs}/PackedMcuVersion.cs | 2 +- .../PackedMomentProcessorConfig.cs | 2 +- .../PackedPointingProcessorConfig.cs | 2 +- .../PackedTeraPluginProcessorConfig.cs | 2 +- .../Sdk/Irsensor/IIrSensorServer.cs | 29 --- src/Ryujinx.Horizon/ServiceTable.cs | 4 + 23 files changed, 431 insertions(+), 149 deletions(-) delete mode 100644 src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorSystemServer.cs create mode 100644 src/Ryujinx.Horizon/Hid/HidIpcServer.cs create mode 100644 src/Ryujinx.Horizon/Hid/HidMain.cs create mode 100644 src/Ryujinx.Horizon/Irs/IrSensorServer.cs create mode 100644 src/Ryujinx.Horizon/Irs/IrSensorSystemServer.cs create mode 100644 src/Ryujinx.Horizon/Irs/IrsIpcServer.cs create mode 100644 src/Ryujinx.Horizon/Irs/IrsMain.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Irs/IIrSensorServer.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Irs/IIrSensorSystemServer.cs rename src/Ryujinx.Horizon/Sdk/{Irsensor => Irs}/ImageTransferProcessorState.cs (86%) rename src/Ryujinx.Horizon/Sdk/{Irsensor => Irs}/IrCameraHandle.cs (85%) rename src/Ryujinx.Horizon/Sdk/{Irsensor => Irs}/PackedClusteringProcessorConfig.cs (95%) rename src/Ryujinx.Horizon/Sdk/{Irsensor => Irs}/PackedFunctionLevel.cs (82%) rename src/Ryujinx.Horizon/Sdk/{Irsensor => Irs}/PackedImageTransferProcessorConfig.cs (92%) rename src/Ryujinx.Horizon/Sdk/{Irsensor => Irs}/PackedImageTransferProcessorExConfig.cs (93%) rename src/Ryujinx.Horizon/Sdk/{Irsensor => Irs}/PackedIrLedProcessorConfig.cs (85%) rename src/Ryujinx.Horizon/Sdk/{Irsensor => Irs}/PackedMcuVersion.cs (84%) rename src/Ryujinx.Horizon/Sdk/{Irsensor => Irs}/PackedMomentProcessorConfig.cs (94%) rename src/Ryujinx.Horizon/Sdk/{Irsensor => Irs}/PackedPointingProcessorConfig.cs (90%) rename src/Ryujinx.Horizon/Sdk/{Irsensor => Irs}/PackedTeraPluginProcessorConfig.cs (89%) delete mode 100644 src/Ryujinx.Horizon/Sdk/Irsensor/IIrSensorServer.cs diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs index ff0bb44018..fb0f4fb36b 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs @@ -15,32 +15,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs public IIrSensorServer(ServiceCtx context) { } - [CommandCmif(302)] - // ActivateIrsensor(nn::applet::AppletResourceUserId, pid) - public ResultCode ActivateIrsensor(ServiceCtx context) - { - ulong appletResourceUserId = context.RequestData.ReadUInt64(); - - // NOTE: This seems to initialize the shared memory for irs service. - - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(303)] - // DeactivateIrsensor(nn::applet::AppletResourceUserId, pid) - public ResultCode DeactivateIrsensor(ServiceCtx context) - { - ulong appletResourceUserId = context.RequestData.ReadUInt64(); - - // NOTE: This seems to deinitialize the shared memory for irs service. - - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId }); - - return ResultCode.Success; - } - [CommandCmif(304)] // GetIrsensorSharedMemoryHandle(nn::applet::AppletResourceUserId, pid) -> handle public ResultCode GetIrsensorSharedMemoryHandle(ServiceCtx context) @@ -61,67 +35,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs return ResultCode.Success; } - [CommandCmif(305)] - // StopImageProcessor(pid, nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId) - public ResultCode StopImageProcessor(ServiceCtx context) - { - IrCameraHandle irCameraHandle = context.RequestData.ReadStruct(); - ulong appletResourceUserId = context.RequestData.ReadUInt64(); - - CheckCameraHandle(irCameraHandle); - - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType }); - - return ResultCode.Success; - } - - [CommandCmif(306)] - // RunMomentProcessor(pid, nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, PackedMomentProcessorConfig) - public ResultCode RunMomentProcessor(ServiceCtx context) - { - IrCameraHandle irCameraHandle = context.RequestData.ReadStruct(); - ulong appletResourceUserId = context.RequestData.ReadUInt64(); - var packedMomentProcessorConfig = context.RequestData.ReadStruct(); - - CheckCameraHandle(irCameraHandle); - - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, packedMomentProcessorConfig.ExposureTime }); - - return ResultCode.Success; - } - - [CommandCmif(307)] - // RunClusteringProcessor(pid, nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, PackedClusteringProcessorConfig) - public ResultCode RunClusteringProcessor(ServiceCtx context) - { - IrCameraHandle irCameraHandle = context.RequestData.ReadStruct(); - ulong appletResourceUserId = context.RequestData.ReadUInt64(); - var packedClusteringProcessorConfig = context.RequestData.ReadStruct(); - - CheckCameraHandle(irCameraHandle); - - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, packedClusteringProcessorConfig.ExposureTime }); - - return ResultCode.Success; - } - - [CommandCmif(308)] - // RunImageTransferProcessor(pid, nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, PackedImageTransferProcessorConfig, u64 TransferMemorySize, TransferMemoryHandle) - public ResultCode RunImageTransferProcessor(ServiceCtx context) - { - IrCameraHandle irCameraHandle = context.RequestData.ReadStruct(); - ulong appletResourceUserId = context.RequestData.ReadUInt64(); - var packedImageTransferProcessorConfig = context.RequestData.ReadStruct(); - - CheckCameraHandle(irCameraHandle); - - // TODO: Handle the Transfer Memory. - - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, packedImageTransferProcessorConfig.ExposureTime }); - - return ResultCode.Success; - } - [CommandCmif(309)] // GetImageTransferProcessorState(pid, nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId) public ResultCode GetImageTransferProcessorState(ServiceCtx context) @@ -189,20 +102,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs return ResultCode.Success; } - [CommandCmif(314)] // 3.0.0+ - // CheckFirmwareVersion(nn::irsensor::IrCameraHandle, nn::irsensor::PackedMcuVersion, nn::applet::AppletResourceUserId, pid) - public ResultCode CheckFirmwareVersion(ServiceCtx context) - { - int irCameraHandle = context.RequestData.ReadInt32(); - short packedMcuVersionMajor = context.RequestData.ReadInt16(); - short packedMcuVersionMinor = context.RequestData.ReadInt16(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId, irCameraHandle, packedMcuVersionMajor, packedMcuVersionMinor }); - - return ResultCode.Success; - } - [CommandCmif(318)] // 4.0.0+ // StopImageProcessorAsync(nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, pid) public ResultCode StopImageProcessorAsync(ServiceCtx context) diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorSystemServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorSystemServer.cs deleted file mode 100644 index 5046268cbb..0000000000 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorSystemServer.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Irs -{ - [Service("irs:sys")] - class IIrSensorSystemServer : IpcService - { - public IIrSensorSystemServer(ServiceCtx context) { } - } -} diff --git a/src/Ryujinx.Horizon/Hid/HidIpcServer.cs b/src/Ryujinx.Horizon/Hid/HidIpcServer.cs new file mode 100644 index 0000000000..84c85b3d70 --- /dev/null +++ b/src/Ryujinx.Horizon/Hid/HidIpcServer.cs @@ -0,0 +1,47 @@ +using Ryujinx.Horizon.Sdk.Sf.Hipc; +using Ryujinx.Horizon.Sdk.Sm; + +namespace Ryujinx.Horizon.Hid +{ + class HidIpcServer + { + // TODO: RE These values + private const int MaxSessionsCount = 30; + + private const int PointerBufferSize = 0xB40; + private const int MaxDomains = 0; + private const int MaxDomainObjects = 0; + private const int MaxPortsCount = 1; + + private static readonly ManagerOptions _options = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false); + + private SmApi _sm; + private ServerManager _serverManager; + + public void Initialize() + { + HeapAllocator allocator = new(); + + _sm = new SmApi(); + _sm.Initialize().AbortOnFailure(); + + _serverManager = new ServerManager(allocator, _sm, MaxPortsCount, _options, MaxSessionsCount); + + // _serverManager.RegisterObjectForServer(, ServiceName.Encode("hid"), MaxSessionsCount); + // _serverManager.RegisterObjectForServer(, ServiceName.Encode("hidbus"), MaxSessionsCount); + // _serverManager.RegisterObjectForServer(, ServiceName.Encode("hid:sys"), MaxSessionsCount); + // _serverManager.RegisterObjectForServer(, ServiceName.Encode("hid:dbg"), MaxSessionsCount); + } + + public void ServiceRequests() + { + _serverManager.ServiceRequests(); + } + + public void Shutdown() + { + _serverManager.Dispose(); + _sm.Dispose(); + } + } +} diff --git a/src/Ryujinx.Horizon/Hid/HidMain.cs b/src/Ryujinx.Horizon/Hid/HidMain.cs new file mode 100644 index 0000000000..42fe0523b8 --- /dev/null +++ b/src/Ryujinx.Horizon/Hid/HidMain.cs @@ -0,0 +1,17 @@ +namespace Ryujinx.Horizon.Hid +{ + class HidMain : IService + { + public static void Main(ServiceTable serviceTable) + { + HidIpcServer ipcServer = new(); + + ipcServer.Initialize(); + + serviceTable.SignalServiceReady(); + + ipcServer.ServiceRequests(); + ipcServer.Shutdown(); + } + } +} diff --git a/src/Ryujinx.Horizon/Irs/IrSensorServer.cs b/src/Ryujinx.Horizon/Irs/IrSensorServer.cs new file mode 100644 index 0000000000..a7baf1c54a --- /dev/null +++ b/src/Ryujinx.Horizon/Irs/IrSensorServer.cs @@ -0,0 +1,203 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Applet; +using Ryujinx.Horizon.Sdk.Hid.Npad; +using Ryujinx.Horizon.Sdk.Irs; +using Ryujinx.Horizon.Sdk.Sf; +using Ryujinx.Horizon.Sdk.Sf.Hipc; +using System; + +namespace Ryujinx.Horizon.Irs +{ + class IrSensorServer : IIrSensorServer + { + [CmifCommand(302)] + public Result ActivateIrsensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + // NOTE: This seems to initialize the shared memory for irs service. + + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id }); + + return Result.Success; + } + + [CmifCommand(303)] + public Result DeactivateIrsensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + // NOTE: This seems to deinitialize the shared memory for irs service. + + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id }); + + return Result.Success; + } + + [CmifCommand(304)] + public Result GetIrsensorSharedMemoryHandle([CopyHandle] out int arg0, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + // NOTE: Shared memory should use the appletResourceUserId. + + Logger.Stub?.PrintStub(LogClass.ServiceIrs); + + return Result.Success; + } + + [CmifCommand(305)] + public Result StopImageProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType }); + + return Result.Success; + } + + [CmifCommand(306)] + public Result RunMomentProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedMomentProcessorConfig config, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, config.ExposureTime }); + + return Result.Success; + } + + [CmifCommand(307)] + public Result RunClusteringProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedClusteringProcessorConfig config, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, config.ExposureTime }); + + return Result.Success; + } + + [CmifCommand(308)] + public Result RunImageTransferProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedImageTransferProcessorConfig config, [CopyHandle] int arg3, ulong arg4, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + // TODO: Handle the Transfer Memory. + + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, config.ExposureTime }); + + return Result.Success; + } + + [CmifCommand(309)] + public Result GetImageTransferProcessorState(AppletResourceUserId appletResourceUserId, out ImageTransferProcessorState arg1, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span arg2, IrCameraHandle irCameraHandle, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs); + + return Result.Success; + } + + [CmifCommand(310)] + public Result RunTeraPluginProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedTeraPluginProcessorConfig config, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs); + + return Result.Success; + } + + [CmifCommand(311)] + public Result GetNpadIrCameraHandle(out IrCameraHandle irCameraHandle, NpadIdType npadIdType) + { + Logger.Stub?.PrintStub(LogClass.ServiceIrs); + + return Result.Success; + } + + [CmifCommand(312)] + public Result RunPointingProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedPointingProcessorConfig config, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs); + + return Result.Success; + } + + [CmifCommand(313)] + public Result SuspendImageProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs); + + return Result.Success; + } + + [CmifCommand(314)] + public Result CheckFirmwareVersion(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedMcuVersion mcuVersion, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, mcuVersion.MajorVersion, mcuVersion.MinorVersion }); + + return Result.Success; + } + + [CmifCommand(315)] + public Result SetFunctionLevel(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedFunctionLevel functionLevel, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs); + + return Result.Success; + } + + [CmifCommand(316)] + public Result RunImageTransferExProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedImageTransferProcessorExConfig config, int arg3, ulong arg4, ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs); + + return Result.Success; + } + + [CmifCommand(317)] + public Result RunIrLedProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedIrLedProcessorConfig config, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs); + + return Result.Success; + } + + [CmifCommand(318)] + public Result StopImageProcessorAsync(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, [ClientProcessId] ulong pid) + { + CheckCameraHandle(irCameraHandle); + + Logger.Stub?.PrintStub(LogClass.ServiceIrs); + + return Result.Success; + } + + [CmifCommand(319)] + public Result ActivateIrsensorWithFunctionLevel(AppletResourceUserId appletResourceUserId, PackedFunctionLevel arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceIrs); + + return Result.Success; + } + + private Result CheckCameraHandle(IrCameraHandle irCameraHandle) + { + if (irCameraHandle.DeviceType == 1 || (PlayerIndex)irCameraHandle.PlayerNumber >= PlayerIndex.Unknown) + { + // InvalidCameraHandle + return new Result(204); + } + + return Result.Success; + } + } +} diff --git a/src/Ryujinx.Horizon/Irs/IrSensorSystemServer.cs b/src/Ryujinx.Horizon/Irs/IrSensorSystemServer.cs new file mode 100644 index 0000000000..f774ff5f93 --- /dev/null +++ b/src/Ryujinx.Horizon/Irs/IrSensorSystemServer.cs @@ -0,0 +1,43 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Applet; +using Ryujinx.Horizon.Sdk.Irs; +using Ryujinx.Horizon.Sdk.Sf; + +namespace Ryujinx.Horizon.Irs +{ + class IrSensorSystemServer : IIrSensorSystemServer + { + [CmifCommand(500)] + public Result SetAppletResourceUserId(AppletResourceUserId appletResourceUserId) + { + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id }); + + return Result.Success; + } + + [CmifCommand(501)] + public Result RegisterAppletResourceUserId(AppletResourceUserId appletResourceUserId, bool arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, arg1 }); + + return Result.Success; + } + + [CmifCommand(502)] + public Result UnregisterAppletResourceUserId(AppletResourceUserId appletResourceUserId) + { + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id }); + + return Result.Success; + } + + [CmifCommand(503)] + public Result EnableAppletToGetInput(AppletResourceUserId appletResourceUserId, bool arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, arg1 }); + + return Result.Success; + } + } +} diff --git a/src/Ryujinx.Horizon/Irs/IrsIpcServer.cs b/src/Ryujinx.Horizon/Irs/IrsIpcServer.cs new file mode 100644 index 0000000000..ae66264237 --- /dev/null +++ b/src/Ryujinx.Horizon/Irs/IrsIpcServer.cs @@ -0,0 +1,45 @@ +using Ryujinx.Horizon.Sdk.Sf.Hipc; +using Ryujinx.Horizon.Sdk.Sm; + +namespace Ryujinx.Horizon.Irs +{ + class IrsIpcServer + { + // TODO: RE These values + private const int MaxSessionsCount = 30; + + private const int PointerBufferSize = 0xB40; + private const int MaxDomains = 0; + private const int MaxDomainObjects = 0; + private const int MaxPortsCount = 1; + + private static readonly ManagerOptions _options = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false); + + private SmApi _sm; + private ServerManager _serverManager; + + public void Initialize() + { + HeapAllocator allocator = new(); + + _sm = new SmApi(); + _sm.Initialize().AbortOnFailure(); + + _serverManager = new ServerManager(allocator, _sm, MaxPortsCount, _options, MaxSessionsCount); + + _serverManager.RegisterObjectForServer(new IrSensorServer(), ServiceName.Encode("irs"), MaxSessionsCount); + _serverManager.RegisterObjectForServer(new IrSensorSystemServer(), ServiceName.Encode("irs:sys"), MaxSessionsCount); + } + + public void ServiceRequests() + { + _serverManager.ServiceRequests(); + } + + public void Shutdown() + { + _serverManager.Dispose(); + _sm.Dispose(); + } + } +} diff --git a/src/Ryujinx.Horizon/Irs/IrsMain.cs b/src/Ryujinx.Horizon/Irs/IrsMain.cs new file mode 100644 index 0000000000..6f8652e9ac --- /dev/null +++ b/src/Ryujinx.Horizon/Irs/IrsMain.cs @@ -0,0 +1,17 @@ +namespace Ryujinx.Horizon.Irs +{ + class IrsMain : IService + { + public static void Main(ServiceTable serviceTable) + { + IrsIpcServer ipcServer = new(); + + ipcServer.Initialize(); + + serviceTable.SignalServiceReady(); + + ipcServer.ServiceRequests(); + ipcServer.Shutdown(); + } + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Irs/IIrSensorServer.cs b/src/Ryujinx.Horizon/Sdk/Irs/IIrSensorServer.cs new file mode 100644 index 0000000000..0929f1a3c3 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Irs/IIrSensorServer.cs @@ -0,0 +1,30 @@ +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Applet; +using Ryujinx.Horizon.Sdk.Hid.Npad; +using Ryujinx.Horizon.Sdk.Sf; +using System; + +namespace Ryujinx.Horizon.Sdk.Irs +{ + interface IIrSensorServer : IServiceObject + { + Result ActivateIrsensor(AppletResourceUserId appletResourceUserId, ulong pid); + Result DeactivateIrsensor(AppletResourceUserId appletResourceUserId, ulong pid); + Result GetIrsensorSharedMemoryHandle(out int arg0, AppletResourceUserId appletResourceUserId, ulong pid); + Result StopImageProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, ulong pid); + Result RunMomentProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedMomentProcessorConfig config, ulong pid); + Result RunClusteringProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedClusteringProcessorConfig config, ulong pid); + Result RunImageTransferProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedImageTransferProcessorConfig config, int arg3, ulong arg4, ulong pid); + Result GetImageTransferProcessorState(AppletResourceUserId appletResourceUserId, out ImageTransferProcessorState arg1, Span arg2, IrCameraHandle irCameraHandle, ulong pid); + Result RunTeraPluginProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedTeraPluginProcessorConfig config, ulong pid); + Result GetNpadIrCameraHandle(out IrCameraHandle irCameraHandle, NpadIdType npadIdType); + Result RunPointingProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedPointingProcessorConfig config, ulong pid); + Result SuspendImageProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, ulong pid); + Result CheckFirmwareVersion(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedMcuVersion mcuVersion, ulong pid); + Result SetFunctionLevel(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedFunctionLevel functionLevel, ulong pid); + Result RunImageTransferExProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedImageTransferProcessorExConfig config, int arg3, ulong arg4, ulong pid); + Result RunIrLedProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedIrLedProcessorConfig config, ulong pid); + Result StopImageProcessorAsync(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, ulong pid); + Result ActivateIrsensorWithFunctionLevel(AppletResourceUserId appletResourceUserId, PackedFunctionLevel arg1, ulong pid); + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Irs/IIrSensorSystemServer.cs b/src/Ryujinx.Horizon/Sdk/Irs/IIrSensorSystemServer.cs new file mode 100644 index 0000000000..5736d975a4 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Irs/IIrSensorSystemServer.cs @@ -0,0 +1,14 @@ +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Applet; +using Ryujinx.Horizon.Sdk.Sf; + +namespace Ryujinx.Horizon.Sdk.Irs +{ + interface IIrSensorSystemServer : IServiceObject + { + Result SetAppletResourceUserId(AppletResourceUserId appletResourceUserId); + Result RegisterAppletResourceUserId(AppletResourceUserId appletResourceUserId, bool arg1); + Result UnregisterAppletResourceUserId(AppletResourceUserId appletResourceUserId); + Result EnableAppletToGetInput(AppletResourceUserId appletResourceUserId, bool arg1); + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/ImageTransferProcessorState.cs b/src/Ryujinx.Horizon/Sdk/Irs/ImageTransferProcessorState.cs similarity index 86% rename from src/Ryujinx.Horizon/Sdk/Irsensor/ImageTransferProcessorState.cs rename to src/Ryujinx.Horizon/Sdk/Irs/ImageTransferProcessorState.cs index 1084d9a3c3..6a3a0d587b 100644 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/ImageTransferProcessorState.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/ImageTransferProcessorState.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Irsensor +namespace Ryujinx.Horizon.Sdk.Irs { [StructLayout(LayoutKind.Sequential, Size = 0x10)] struct ImageTransferProcessorState diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/IrCameraHandle.cs b/src/Ryujinx.Horizon/Sdk/Irs/IrCameraHandle.cs similarity index 85% rename from src/Ryujinx.Horizon/Sdk/Irsensor/IrCameraHandle.cs rename to src/Ryujinx.Horizon/Sdk/Irs/IrCameraHandle.cs index d04105d57b..e58a592004 100644 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/IrCameraHandle.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/IrCameraHandle.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Irsensor +namespace Ryujinx.Horizon.Sdk.Irs { [StructLayout(LayoutKind.Sequential, Size = 0x4)] struct IrCameraHandle diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedClusteringProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irs/PackedClusteringProcessorConfig.cs similarity index 95% rename from src/Ryujinx.Horizon/Sdk/Irsensor/PackedClusteringProcessorConfig.cs rename to src/Ryujinx.Horizon/Sdk/Irs/PackedClusteringProcessorConfig.cs index aa469bf4ce..5279a6c26e 100644 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedClusteringProcessorConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/PackedClusteringProcessorConfig.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Irsensor +namespace Ryujinx.Horizon.Sdk.Irs { [StructLayout(LayoutKind.Sequential, Size = 0x28)] struct PackedClusteringProcessorConfig diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedFunctionLevel.cs b/src/Ryujinx.Horizon/Sdk/Irs/PackedFunctionLevel.cs similarity index 82% rename from src/Ryujinx.Horizon/Sdk/Irsensor/PackedFunctionLevel.cs rename to src/Ryujinx.Horizon/Sdk/Irs/PackedFunctionLevel.cs index b1c01483c2..25dfee9ae0 100644 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedFunctionLevel.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/PackedFunctionLevel.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Irsensor +namespace Ryujinx.Horizon.Sdk.Irs { [StructLayout(LayoutKind.Sequential, Size = 0x4)] struct PackedFunctionLevel diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irs/PackedImageTransferProcessorConfig.cs similarity index 92% rename from src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorConfig.cs rename to src/Ryujinx.Horizon/Sdk/Irs/PackedImageTransferProcessorConfig.cs index 796a4bcba1..3a02354ae3 100644 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/PackedImageTransferProcessorConfig.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Irsensor +namespace Ryujinx.Horizon.Sdk.Irs { [StructLayout(LayoutKind.Sequential, Size = 0x18)] struct PackedImageTransferProcessorConfig diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorExConfig.cs b/src/Ryujinx.Horizon/Sdk/Irs/PackedImageTransferProcessorExConfig.cs similarity index 93% rename from src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorExConfig.cs rename to src/Ryujinx.Horizon/Sdk/Irs/PackedImageTransferProcessorExConfig.cs index c3d420e733..5d29fe8c37 100644 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedImageTransferProcessorExConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/PackedImageTransferProcessorExConfig.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Irsensor +namespace Ryujinx.Horizon.Sdk.Irs { [StructLayout(LayoutKind.Sequential, Size = 0x20)] struct PackedImageTransferProcessorExConfig diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedIrLedProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irs/PackedIrLedProcessorConfig.cs similarity index 85% rename from src/Ryujinx.Horizon/Sdk/Irsensor/PackedIrLedProcessorConfig.cs rename to src/Ryujinx.Horizon/Sdk/Irs/PackedIrLedProcessorConfig.cs index 2f081f3294..2f05f46db3 100644 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedIrLedProcessorConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/PackedIrLedProcessorConfig.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Irsensor +namespace Ryujinx.Horizon.Sdk.Irs { [StructLayout(LayoutKind.Sequential, Size = 0x8)] struct PackedIrLedProcessorConfig diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedMcuVersion.cs b/src/Ryujinx.Horizon/Sdk/Irs/PackedMcuVersion.cs similarity index 84% rename from src/Ryujinx.Horizon/Sdk/Irsensor/PackedMcuVersion.cs rename to src/Ryujinx.Horizon/Sdk/Irs/PackedMcuVersion.cs index 1bd1985283..fb4480cd36 100644 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedMcuVersion.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/PackedMcuVersion.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Irsensor +namespace Ryujinx.Horizon.Sdk.Irs { [StructLayout(LayoutKind.Sequential, Size = 0x4)] public struct PackedMcuVersion diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedMomentProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irs/PackedMomentProcessorConfig.cs similarity index 94% rename from src/Ryujinx.Horizon/Sdk/Irsensor/PackedMomentProcessorConfig.cs rename to src/Ryujinx.Horizon/Sdk/Irs/PackedMomentProcessorConfig.cs index 408a4adbdb..62b195e12e 100644 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedMomentProcessorConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/PackedMomentProcessorConfig.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Irsensor +namespace Ryujinx.Horizon.Sdk.Irs { [StructLayout(LayoutKind.Sequential, Size = 0x20)] struct PackedMomentProcessorConfig diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedPointingProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irs/PackedPointingProcessorConfig.cs similarity index 90% rename from src/Ryujinx.Horizon/Sdk/Irsensor/PackedPointingProcessorConfig.cs rename to src/Ryujinx.Horizon/Sdk/Irs/PackedPointingProcessorConfig.cs index 71a09fb557..a7efd5cd25 100644 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedPointingProcessorConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/PackedPointingProcessorConfig.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Irsensor +namespace Ryujinx.Horizon.Sdk.Irs { [StructLayout(LayoutKind.Sequential, Size = 0x20)] struct PackedPointingProcessorConfig diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedTeraPluginProcessorConfig.cs b/src/Ryujinx.Horizon/Sdk/Irs/PackedTeraPluginProcessorConfig.cs similarity index 89% rename from src/Ryujinx.Horizon/Sdk/Irsensor/PackedTeraPluginProcessorConfig.cs rename to src/Ryujinx.Horizon/Sdk/Irs/PackedTeraPluginProcessorConfig.cs index 20170cd31e..34b575d987 100644 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/PackedTeraPluginProcessorConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/PackedTeraPluginProcessorConfig.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Irsensor +namespace Ryujinx.Horizon.Sdk.Irs { [StructLayout(LayoutKind.Sequential, Size = 0x8)] struct PackedTeraPluginProcessorConfig diff --git a/src/Ryujinx.Horizon/Sdk/Irsensor/IIrSensorServer.cs b/src/Ryujinx.Horizon/Sdk/Irsensor/IIrSensorServer.cs deleted file mode 100644 index e27bedb719..0000000000 --- a/src/Ryujinx.Horizon/Sdk/Irsensor/IIrSensorServer.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Ryujinx.Horizon.Common; -using Ryujinx.Horizon.Sdk.Applet; -using Ryujinx.Horizon.Sdk.Sf; -using System; - -namespace Ryujinx.Horizon.Sdk.Irsensor -{ - interface IIrSensorServer : IServiceObject - { - Result ActivateIrsensor(AppletResourceUserId arg0, ulong pid); - Result DeactivateIrsensor(AppletResourceUserId arg0, ulong pid); - Result GetIrsensorSharedMemoryHandle(out int arg0, AppletResourceUserId arg1, ulong pid); - Result StopImageProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, ulong pid); - Result RunMomentProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedMomentProcessorConfig arg2, ulong pid); - Result RunClusteringProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedClusteringProcessorConfig arg2, ulong pid); - Result RunImageTransferProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedImageTransferProcessorConfig arg2, int arg3, ulong arg4, ulong pid); - Result GetImageTransferProcessorState(AppletResourceUserId arg0, out ImageTransferProcessorState arg1, Span arg2, IrCameraHandle arg3, ulong pid); - Result RunTeraPluginProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedTeraPluginProcessorConfig arg2, ulong pid); - Result GetNpadIrCameraHandle(out IrCameraHandle arg0, uint arg1); - Result RunPointingProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedPointingProcessorConfig arg2, ulong pid); - Result SuspendImageProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, ulong pid); - Result CheckFirmwareVersion(AppletResourceUserId arg0, IrCameraHandle arg1, PackedMcuVersion arg2, ulong pid); - Result SetFunctionLevel(AppletResourceUserId arg0, IrCameraHandle arg1, PackedFunctionLevel arg2, ulong pid); - Result RunImageTransferExProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedImageTransferProcessorExConfig arg2, int arg3, ulong arg4, ulong pid); - Result RunIrLedProcessor(AppletResourceUserId arg0, IrCameraHandle arg1, PackedIrLedProcessorConfig arg2, ulong pid); - Result StopImageProcessorAsync(AppletResourceUserId arg0, IrCameraHandle arg1, ulong pid); - Result ActivateIrsensorWithFunctionLevel(AppletResourceUserId arg0, PackedFunctionLevel arg1, ulong pid); - } -} diff --git a/src/Ryujinx.Horizon/ServiceTable.cs b/src/Ryujinx.Horizon/ServiceTable.cs index 28c43a716f..2e6ebb3fcc 100644 --- a/src/Ryujinx.Horizon/ServiceTable.cs +++ b/src/Ryujinx.Horizon/ServiceTable.cs @@ -2,8 +2,10 @@ using Ryujinx.Horizon.Arp; using Ryujinx.Horizon.Audio; using Ryujinx.Horizon.Bcat; using Ryujinx.Horizon.Friends; +using Ryujinx.Horizon.Hid; using Ryujinx.Horizon.Hshl; using Ryujinx.Horizon.Ins; +using Ryujinx.Horizon.Irs; using Ryujinx.Horizon.Lbl; using Ryujinx.Horizon.LogManager; using Ryujinx.Horizon.MmNv; @@ -58,6 +60,8 @@ namespace Ryujinx.Horizon RegisterService(); RegisterService(); RegisterService(); + RegisterService(); + RegisterService(); _totalServices = entries.Count; From b7239a6e3e2541d21b05a757804f897e65605364 Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sun, 10 Mar 2024 23:14:56 +0000 Subject: [PATCH 03/11] Finish Irs --- .../HOS/Services/Hid/Irs/IIrSensorServer.cs | 139 ------------------ .../HOS/Services/Hid/Irs/ResultCode.cs | 15 -- src/Ryujinx.Horizon/Irs/IrSensorServer.cs | 58 ++++++-- .../Sdk/Irs/IIrSensorServer.cs | 4 +- 4 files changed, 46 insertions(+), 170 deletions(-) delete mode 100644 src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs delete mode 100644 src/Ryujinx.HLE/HOS/Services/Hid/Irs/ResultCode.cs diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs deleted file mode 100644 index fb0f4fb36b..0000000000 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs +++ /dev/null @@ -1,139 +0,0 @@ -using Ryujinx.Common; -using Ryujinx.Common.Logging; -using Ryujinx.HLE.HOS.Ipc; -using Ryujinx.HLE.HOS.Services.Hid.HidServer; -using Ryujinx.Horizon.Common; -using Ryujinx.Horizon.Sdk.Hid.Npad; -using System; - -namespace Ryujinx.HLE.HOS.Services.Hid.Irs -{ - [Service("irs")] - class IIrSensorServer : IpcService - { - private int _irsensorSharedMemoryHandle = 0; - - public IIrSensorServer(ServiceCtx context) { } - - [CommandCmif(304)] - // GetIrsensorSharedMemoryHandle(nn::applet::AppletResourceUserId, pid) -> handle - public ResultCode GetIrsensorSharedMemoryHandle(ServiceCtx context) - { - // NOTE: Shared memory should use the appletResourceUserId. - // ulong appletResourceUserId = context.RequestData.ReadUInt64(); - - if (_irsensorSharedMemoryHandle == 0) - { - if (context.Process.HandleTable.GenerateHandle(context.Device.System.IirsSharedMem, out _irsensorSharedMemoryHandle) != Result.Success) - { - throw new InvalidOperationException("Out of handles!"); - } - } - - context.Response.HandleDesc = IpcHandleDesc.MakeCopy(_irsensorSharedMemoryHandle); - - return ResultCode.Success; - } - - [CommandCmif(309)] - // GetImageTransferProcessorState(pid, nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId) - public ResultCode GetImageTransferProcessorState(ServiceCtx context) - { - IrCameraHandle irCameraHandle = context.RequestData.ReadStruct(); - ulong appletResourceUserId = context.RequestData.ReadUInt64(); - - // ulong imageTransferBufferAddress = context.Request.ReceiveBuff[0].Position; - ulong imageTransferBufferSize = context.Request.ReceiveBuff[0].Size; - - if (imageTransferBufferSize == 0) - { - return ResultCode.InvalidBufferSize; - } - - CheckCameraHandle(irCameraHandle); - - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType }); - - // TODO: Uses the buffer to copy the JoyCon IR data (by using a JoyCon driver) and update the following struct. - context.ResponseData.WriteStruct(new ImageTransferProcessorState() - { - SamplingNumber = 0, - AmbientNoiseLevel = 0, - }); - - return ResultCode.Success; - } - - [CommandCmif(310)] - // RunTeraPluginProcessor(pid, nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, PackedTeraPluginProcessorConfig) - public ResultCode RunTeraPluginProcessor(ServiceCtx context) - { - IrCameraHandle irCameraHandle = context.RequestData.ReadStruct(); - ulong appletResourceUserId = context.RequestData.ReadUInt64(); - var packedTeraPluginProcessorConfig = context.RequestData.ReadStruct(); - - CheckCameraHandle(irCameraHandle); - - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, packedTeraPluginProcessorConfig.RequiredMcuVersion }); - - return ResultCode.Success; - } - - [CommandCmif(311)] - // GetNpadIrCameraHandle(u32) -> nn::irsensor::IrCameraHandle - public ResultCode GetNpadIrCameraHandle(ServiceCtx context) - { - NpadIdType npadIdType = (NpadIdType)context.RequestData.ReadUInt32(); - - if (npadIdType > NpadIdType.Player8 && - npadIdType != NpadIdType.Unknown && - npadIdType != NpadIdType.Handheld) - { - return ResultCode.NpadIdOutOfRange; - } - - PlayerIndex irCameraHandle = HidUtils.GetIndexFromNpadIdType(npadIdType); - - context.ResponseData.Write((int)irCameraHandle); - - // NOTE: If the irCameraHandle pointer is null this error is returned, Doesn't occur in our case. - // return ResultCode.HandlePointerIsNull; - - return ResultCode.Success; - } - - [CommandCmif(318)] // 4.0.0+ - // StopImageProcessorAsync(nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, pid) - public ResultCode StopImageProcessorAsync(ServiceCtx context) - { - int irCameraHandle = context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId, irCameraHandle }); - - return ResultCode.Success; - } - - [CommandCmif(319)] // 4.0.0+ - // ActivateIrsensorWithFunctionLevel(nn::applet::AppletResourceUserId, nn::irsensor::PackedFunctionLevel, pid) - public ResultCode ActivateIrsensorWithFunctionLevel(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - long packedFunctionLevel = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId, packedFunctionLevel }); - - return ResultCode.Success; - } - - private ResultCode CheckCameraHandle(IrCameraHandle irCameraHandle) - { - if (irCameraHandle.DeviceType == 1 || (PlayerIndex)irCameraHandle.PlayerNumber >= PlayerIndex.Unknown) - { - return ResultCode.InvalidCameraHandle; - } - - return ResultCode.Success; - } - } -} diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/ResultCode.cs b/src/Ryujinx.HLE/HOS/Services/Hid/Irs/ResultCode.cs deleted file mode 100644 index 8cee32cdf6..0000000000 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Irs/ResultCode.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Ryujinx.HLE.HOS.Services.Hid.Irs -{ - public enum ResultCode - { - ModuleId = 205, - ErrorCodeShift = 9, - - Success = 0, - - InvalidCameraHandle = (204 << ErrorCodeShift) | ModuleId, - InvalidBufferSize = (207 << ErrorCodeShift) | ModuleId, - HandlePointerIsNull = (212 << ErrorCodeShift) | ModuleId, - NpadIdOutOfRange = (709 << ErrorCodeShift) | ModuleId, - } -} diff --git a/src/Ryujinx.Horizon/Irs/IrSensorServer.cs b/src/Ryujinx.Horizon/Irs/IrSensorServer.cs index a7baf1c54a..59737d1484 100644 --- a/src/Ryujinx.Horizon/Irs/IrSensorServer.cs +++ b/src/Ryujinx.Horizon/Irs/IrSensorServer.cs @@ -35,8 +35,11 @@ namespace Ryujinx.Horizon.Irs public Result GetIrsensorSharedMemoryHandle([CopyHandle] out int arg0, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { // NOTE: Shared memory should use the appletResourceUserId. + // TODO: Update when HorizonStatic has support for CreateSharedMemory - Logger.Stub?.PrintStub(LogClass.ServiceIrs); + arg0 = 0; + + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id }); return Result.Success; } @@ -84,11 +87,24 @@ namespace Ryujinx.Horizon.Irs } [CmifCommand(309)] - public Result GetImageTransferProcessorState(AppletResourceUserId appletResourceUserId, out ImageTransferProcessorState arg1, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span arg2, IrCameraHandle irCameraHandle, [ClientProcessId] ulong pid) + public Result GetImageTransferProcessorState(AppletResourceUserId appletResourceUserId, out ImageTransferProcessorState imageTransferProcessorState, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span imageTransferBuffer, IrCameraHandle irCameraHandle, [ClientProcessId] ulong pid) { CheckCameraHandle(irCameraHandle); - Logger.Stub?.PrintStub(LogClass.ServiceIrs); + // TODO: Uses the buffer to copy the JoyCon IR data (by using a JoyCon driver) and update the following struct. + imageTransferProcessorState = new ImageTransferProcessorState + { + SamplingNumber = 0, + AmbientNoiseLevel = 0 + }; + + if (imageTransferBuffer.Length == 0) + { + // InvalidBufferSize + return new Result(207); + } + + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType }); return Result.Success; } @@ -98,7 +114,7 @@ namespace Ryujinx.Horizon.Irs { CheckCameraHandle(irCameraHandle); - Logger.Stub?.PrintStub(LogClass.ServiceIrs); + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, config.RequiredMcuVersion }); return Result.Success; } @@ -106,7 +122,21 @@ namespace Ryujinx.Horizon.Irs [CmifCommand(311)] public Result GetNpadIrCameraHandle(out IrCameraHandle irCameraHandle, NpadIdType npadIdType) { - Logger.Stub?.PrintStub(LogClass.ServiceIrs); + if (npadIdType > NpadIdType.Player8 && + npadIdType != NpadIdType.Unknown && + npadIdType != NpadIdType.Handheld) + { + // NpadIdOutOfRange + irCameraHandle = new IrCameraHandle(); + return new Result(709); + } + + irCameraHandle = new IrCameraHandle + { + PlayerNumber = (byte)npadIdType + }; + + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { npadIdType }); return Result.Success; } @@ -116,7 +146,7 @@ namespace Ryujinx.Horizon.Irs { CheckCameraHandle(irCameraHandle); - Logger.Stub?.PrintStub(LogClass.ServiceIrs); + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, config.RequiredMcuVersion }); return Result.Success; } @@ -126,7 +156,7 @@ namespace Ryujinx.Horizon.Irs { CheckCameraHandle(irCameraHandle); - Logger.Stub?.PrintStub(LogClass.ServiceIrs); + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType }); return Result.Success; } @@ -136,7 +166,7 @@ namespace Ryujinx.Horizon.Irs { CheckCameraHandle(irCameraHandle); - Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, mcuVersion.MajorVersion, mcuVersion.MinorVersion }); + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, mcuVersion }); return Result.Success; } @@ -146,7 +176,7 @@ namespace Ryujinx.Horizon.Irs { CheckCameraHandle(irCameraHandle); - Logger.Stub?.PrintStub(LogClass.ServiceIrs); + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, functionLevel.IrSensorFunctionLevel }); return Result.Success; } @@ -156,7 +186,7 @@ namespace Ryujinx.Horizon.Irs { CheckCameraHandle(irCameraHandle); - Logger.Stub?.PrintStub(LogClass.ServiceIrs); + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, config.ExposureTime, arg3, arg4 }); return Result.Success; } @@ -166,7 +196,7 @@ namespace Ryujinx.Horizon.Irs { CheckCameraHandle(irCameraHandle); - Logger.Stub?.PrintStub(LogClass.ServiceIrs); + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType, config.RequiredMcuVersion }); return Result.Success; } @@ -176,15 +206,15 @@ namespace Ryujinx.Horizon.Irs { CheckCameraHandle(irCameraHandle); - Logger.Stub?.PrintStub(LogClass.ServiceIrs); + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, irCameraHandle.PlayerNumber, irCameraHandle.DeviceType }); return Result.Success; } [CmifCommand(319)] - public Result ActivateIrsensorWithFunctionLevel(AppletResourceUserId appletResourceUserId, PackedFunctionLevel arg1, [ClientProcessId] ulong pid) + public Result ActivateIrsensorWithFunctionLevel(AppletResourceUserId appletResourceUserId, PackedFunctionLevel functionLevel, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceIrs); + Logger.Stub?.PrintStub(LogClass.ServiceIrs, new { appletResourceUserId.Id, functionLevel.IrSensorFunctionLevel }); return Result.Success; } diff --git a/src/Ryujinx.Horizon/Sdk/Irs/IIrSensorServer.cs b/src/Ryujinx.Horizon/Sdk/Irs/IIrSensorServer.cs index 0929f1a3c3..2ac07193c4 100644 --- a/src/Ryujinx.Horizon/Sdk/Irs/IIrSensorServer.cs +++ b/src/Ryujinx.Horizon/Sdk/Irs/IIrSensorServer.cs @@ -15,7 +15,7 @@ namespace Ryujinx.Horizon.Sdk.Irs Result RunMomentProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedMomentProcessorConfig config, ulong pid); Result RunClusteringProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedClusteringProcessorConfig config, ulong pid); Result RunImageTransferProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedImageTransferProcessorConfig config, int arg3, ulong arg4, ulong pid); - Result GetImageTransferProcessorState(AppletResourceUserId appletResourceUserId, out ImageTransferProcessorState arg1, Span arg2, IrCameraHandle irCameraHandle, ulong pid); + Result GetImageTransferProcessorState(AppletResourceUserId appletResourceUserId, out ImageTransferProcessorState imageTransferProcessorState, Span imageTransferBuffer, IrCameraHandle irCameraHandle, ulong pid); Result RunTeraPluginProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedTeraPluginProcessorConfig config, ulong pid); Result GetNpadIrCameraHandle(out IrCameraHandle irCameraHandle, NpadIdType npadIdType); Result RunPointingProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedPointingProcessorConfig config, ulong pid); @@ -25,6 +25,6 @@ namespace Ryujinx.Horizon.Sdk.Irs Result RunImageTransferExProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedImageTransferProcessorExConfig config, int arg3, ulong arg4, ulong pid); Result RunIrLedProcessor(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, PackedIrLedProcessorConfig config, ulong pid); Result StopImageProcessorAsync(AppletResourceUserId appletResourceUserId, IrCameraHandle irCameraHandle, ulong pid); - Result ActivateIrsensorWithFunctionLevel(AppletResourceUserId appletResourceUserId, PackedFunctionLevel arg1, ulong pid); + Result ActivateIrsensorWithFunctionLevel(AppletResourceUserId appletResourceUserId, PackedFunctionLevel functionLevel, ulong pid); } } From baf85f3b938d1d8d40f5bd1684aa60c093c07dab Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Wed, 13 Mar 2024 15:32:02 +0000 Subject: [PATCH 04/11] More progress --- .../HOS/Services/Hid/HidDevices/BaseDevice.cs | 14 -- .../HOS/Services/Hid/IHidServer.cs | 11 +- src/Ryujinx.HLE/Switch.cs | 1 + src/Ryujinx.Horizon/Hid/HidServer.cs | 7 + .../Sdk}/Hid/Hid.cs | 26 ++- .../Sdk/Hid/HidDevices/BaseDevice.cs | 12 ++ .../Sdk}/Hid/HidDevices/DebugPadDevice.cs | 4 +- .../Sdk}/Hid/HidDevices/KeyboardDevice.cs | 5 +- .../Sdk}/Hid/HidDevices/MouseDevice.cs | 4 +- .../Sdk}/Hid/HidDevices/NpadDevices.cs | 16 +- .../Sdk}/Hid/HidDevices/TouchDevice.cs | 5 +- src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs | 150 ++++++++++++++++++ .../Sdk/Hid/KeyboardLockKeyEvent.cs | 18 +++ .../Sdk/Hid/{ => Npad}/NpadJoyHoldType.cs | 2 +- .../PalmaApplicationSectionAccessBuffer.cs | 10 ++ .../Sdk/Hid/PalmaConnectionHandle.cs | 10 ++ src/Ryujinx.Horizon/Sdk/Hid/PalmaFeature.cs | 13 ++ src/Ryujinx.Horizon/Sdk/Hid/PalmaWaveSet.cs | 9 ++ .../SharedMemory/Common/AnalogStickState.cs | 2 +- .../Hid/SharedMemory/Common/AtomicStorage.cs | 2 +- .../SharedMemory/Common/ISampledDataStruct.cs | 4 +- .../Sdk/Hid/SharedMemory/Common/RingLifo.cs | 2 +- .../DebugPad/DebugPadAttribute.cs | 2 +- .../SharedMemory/DebugPad/DebugPadButton.cs | 2 +- .../SharedMemory/DebugPad/DebugPadState.cs | 3 +- .../Hid/SharedMemory/Keyboard/KeyboardKey.cs | 2 +- .../SharedMemory/Keyboard/KeyboardKeyShift.cs | 2 +- .../SharedMemory/Keyboard/KeyboardModifier.cs | 2 +- .../SharedMemory/Keyboard/KeyboardState.cs | 3 +- .../Hid/SharedMemory/Mouse/MouseAttribute.cs | 2 +- .../Sdk/Hid/SharedMemory/Mouse/MouseButton.cs | 2 +- .../Sdk/Hid/SharedMemory/Mouse/MouseState.cs | 3 +- .../Sdk/Hid/SharedMemory/Npad/DeviceType.cs | 2 +- .../Hid/SharedMemory/Npad/NpadAttribute.cs | 2 +- .../Hid/SharedMemory/Npad/NpadBatteryLevel.cs | 2 +- .../Sdk/Hid/SharedMemory/Npad/NpadButton.cs | 2 +- .../SharedMemory/Npad/NpadColorAttribute.cs | 2 +- .../Hid/SharedMemory/Npad/NpadCommonState.cs | 3 +- .../Npad/NpadFullKeyColorState.cs | 2 +- .../SharedMemory/Npad/NpadGcTriggerState.cs | 3 +- .../SharedMemory/Npad/NpadInternalState.cs | 3 +- .../Npad/NpadJoyAssignmentMode.cs | 2 +- .../SharedMemory/Npad/NpadJoyColorState.cs | 2 +- .../Sdk/Hid/SharedMemory/Npad/NpadLarkType.cs | 2 +- .../Hid/SharedMemory/Npad/NpadLuciaType.cs | 2 +- .../Sdk/Hid/SharedMemory/Npad/NpadState.cs | 2 +- .../Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs | 2 +- .../Npad/NpadSystemButtonProperties.cs | 2 +- .../SharedMemory/Npad/NpadSystemProperties.cs | 2 +- .../Npad/SixAxisSensorAttribute.cs | 2 +- .../SharedMemory/Npad/SixAxisSensorState.cs | 3 +- .../Sdk/Hid/SharedMemory/SharedMemory.cs | 8 +- .../TouchScreen/TouchAttribute.cs | 2 +- .../TouchScreen/TouchScreenState.cs | 3 +- .../SharedMemory/TouchScreen/TouchState.cs | 2 +- .../Hid/SixAxis/ConsoleSixAxisSensorHandle.cs | 12 ++ .../Sdk/Hid/{ => SixAxis}/SixAxisInput.cs | 2 +- .../SixAxisSensorCalibrationParameter.cs | 10 ++ .../Sdk/Hid/SixAxis/SixAxisSensorHandle.cs | 13 ++ .../Hid/SixAxis/SixAxisSensorIcInformation.cs | 10 ++ src/Ryujinx.Horizon/Sdk/Hid/TouchPoint.cs | 2 - .../Sdk/Hid/TouchScreenConfigurationForNx.cs | 10 ++ .../Sdk/Hid/TouchScreenModeForNx.cs | 9 ++ .../Vibration/VibrationDeviceInfoForIpc.cs | 11 ++ .../Hid/Vibration/VibrationDevicePosition.cs | 8 +- .../Sdk/Hid/Vibration/VibrationDeviceType.cs | 9 +- .../Sdk/Hid/Vibration/VibrationDeviceValue.cs | 2 +- .../Hid/Vibration/VibrationGcErmCommand.cs | 12 ++ src/Ryujinx.Input/HLE/NpadController.cs | 1 + src/Ryujinx.Input/HLE/NpadManager.cs | 2 + 70 files changed, 403 insertions(+), 117 deletions(-) delete mode 100644 src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/BaseDevice.cs create mode 100644 src/Ryujinx.Horizon/Hid/HidServer.cs rename src/{Ryujinx.HLE/HOS/Services => Ryujinx.Horizon/Sdk}/Hid/Hid.cs (82%) create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/HidDevices/BaseDevice.cs rename src/{Ryujinx.HLE/HOS/Services => Ryujinx.Horizon/Sdk}/Hid/HidDevices/DebugPadDevice.cs (82%) rename src/{Ryujinx.HLE/HOS/Services => Ryujinx.Horizon/Sdk}/Hid/HidDevices/KeyboardDevice.cs (82%) rename src/{Ryujinx.HLE/HOS/Services => Ryujinx.Horizon/Sdk}/Hid/HidDevices/MouseDevice.cs (89%) rename src/{Ryujinx.HLE/HOS/Services => Ryujinx.Horizon/Sdk}/Hid/HidDevices/NpadDevices.cs (98%) rename src/{Ryujinx.HLE/HOS/Services => Ryujinx.Horizon/Sdk}/Hid/HidDevices/TouchDevice.cs (89%) create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/KeyboardLockKeyEvent.cs rename src/Ryujinx.Horizon/Sdk/Hid/{ => Npad}/NpadJoyHoldType.cs (66%) create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/PalmaApplicationSectionAccessBuffer.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/PalmaConnectionHandle.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/PalmaFeature.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/PalmaWaveSet.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/SixAxis/ConsoleSixAxisSensorHandle.cs rename src/Ryujinx.Horizon/Sdk/Hid/{ => SixAxis}/SixAxisInput.cs (87%) create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorCalibrationParameter.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorHandle.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorIcInformation.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/TouchScreenConfigurationForNx.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/TouchScreenModeForNx.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceInfoForIpc.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationGcErmCommand.cs diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/BaseDevice.cs b/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/BaseDevice.cs deleted file mode 100644 index a6c21fdaf3..0000000000 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/BaseDevice.cs +++ /dev/null @@ -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; - } - } -} diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs index 2313af5709..5834e0feec 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs @@ -5,6 +5,7 @@ using Ryujinx.HLE.HOS.Kernel.Threading; using Ryujinx.HLE.HOS.Services.Hid.HidServer; using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Sdk.Hid; +using Ryujinx.Horizon.Sdk.Hid.HidDevices; using Ryujinx.Horizon.Sdk.Hid.Npad; using Ryujinx.Horizon.Sdk.Hid.SixAxis; using Ryujinx.Horizon.Sdk.Hid.Vibration; @@ -83,7 +84,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid // 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(); } @@ -103,7 +104,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid // 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(); } @@ -123,7 +124,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid // 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); } @@ -148,7 +149,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid 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); } @@ -859,7 +860,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid 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.UpdateSixAxis(emptySixAxisInputs); diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index 9dfc698923..7cbfed039f 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -8,6 +8,7 @@ using Ryujinx.HLE.HOS.Services.Apm; using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.HLE.Loaders.Processes; using Ryujinx.HLE.UI; +using Ryujinx.Horizon.Sdk.Hid; using Ryujinx.Memory; using System; diff --git a/src/Ryujinx.Horizon/Hid/HidServer.cs b/src/Ryujinx.Horizon/Hid/HidServer.cs new file mode 100644 index 0000000000..45ed4b2652 --- /dev/null +++ b/src/Ryujinx.Horizon/Hid/HidServer.cs @@ -0,0 +1,7 @@ +namespace Ryujinx.Horizon.Hid +{ + class HidServer : IHidServer + { + + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/Hid.cs b/src/Ryujinx.Horizon/Sdk/Hid/Hid.cs similarity index 82% rename from src/Ryujinx.HLE/HOS/Services/Hid/Hid.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Hid.cs index ff408f2054..59d122a90f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/Hid.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Hid.cs @@ -1,21 +1,18 @@ using Ryujinx.Common; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Memory; -using Ryujinx.HLE.Exceptions; -using Ryujinx.HLE.HOS.Kernel.Memory; -using Ryujinx.Horizon.Sdk.Hid; +using Ryujinx.Horizon.Sdk.Hid.HidDevices; using Ryujinx.Horizon.Sdk.Hid.Npad; using System.Collections.Generic; using System.Runtime.CompilerServices; using ControllerType = Ryujinx.Horizon.Sdk.Hid.Npad.ControllerType; using PlayerIndex = Ryujinx.Horizon.Sdk.Hid.Npad.PlayerIndex; -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid { public class Hid { - private readonly Switch _device; - + internal const int HidSize = 0x40000; private readonly SharedMemoryStorage _storage; internal ref SharedMemory SharedMemory => ref _storage.GetRef(0); @@ -43,12 +40,11 @@ namespace Ryujinx.HLE.HOS.Services.Hid CheckTypeSizeOrThrow>(0x350); CheckTypeSizeOrThrow>(0x3D8); CheckTypeSizeOrThrow>(0x32000); - CheckTypeSizeOrThrow(Horizon.HidSize); + CheckTypeSizeOrThrow(HidSize); } - internal Hid(in Switch device, SharedMemoryStorage storage) + internal Hid(SharedMemoryStorage storage) { - _device = device; _storage = storage; SharedMemory = SharedMemory.Create(); @@ -58,11 +54,11 @@ namespace Ryujinx.HLE.HOS.Services.Hid private void InitDevices() { - DebugPad = new DebugPadDevice(_device, true); - Touchscreen = new TouchDevice(_device, true); - Mouse = new MouseDevice(_device, false); - Keyboard = new KeyboardDevice(_device, false); - Npads = new NpadDevices(_device, true); + DebugPad = new DebugPadDevice(true); + Touchscreen = new TouchDevice(true); + Mouse = new MouseDevice(false); + Keyboard = new KeyboardDevice(false); + Npads = new NpadDevices(true); } public void RefreshInputConfig(List inputConfig) @@ -75,7 +71,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid npadConfig[i].Type = (ControllerType)inputConfig[i].ControllerType; } - _device.Hid.Npads.Configure(npadConfig); + Npads.Configure(npadConfig); } public ControllerKeys UpdateStickButtons(JoystickPosition leftStick, JoystickPosition rightStick) diff --git a/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/BaseDevice.cs b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/BaseDevice.cs new file mode 100644 index 0000000000..11ff18a04a --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/BaseDevice.cs @@ -0,0 +1,12 @@ +namespace Ryujinx.Horizon.Sdk.Hid.HidDevices +{ + public abstract class BaseDevice + { + public bool Active; + + public BaseDevice(bool active) + { + Active = active; + } + } +} diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/DebugPadDevice.cs b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/DebugPadDevice.cs similarity index 82% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/DebugPadDevice.cs rename to src/Ryujinx.Horizon/Sdk/Hid/HidDevices/DebugPadDevice.cs index a01763183f..04ea1b37b0 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/DebugPadDevice.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/DebugPadDevice.cs @@ -1,8 +1,8 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.HidDevices { public class DebugPadDevice : BaseDevice { - public DebugPadDevice(Switch device, bool active) : base(device, active) { } + public DebugPadDevice(bool active) : base(active) { } public void Update() { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/KeyboardDevice.cs similarity index 82% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs rename to src/Ryujinx.Horizon/Sdk/Hid/HidDevices/KeyboardDevice.cs index 800729a3f8..60c8125ef3 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/KeyboardDevice.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/KeyboardDevice.cs @@ -1,11 +1,10 @@ -using Ryujinx.Horizon.Sdk.Hid; using System; -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.HidDevices { public class KeyboardDevice : BaseDevice { - public KeyboardDevice(Switch device, bool active) : base(device, active) { } + public KeyboardDevice(bool active) : base(active) { } public void Update(KeyboardInput keyState) { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/MouseDevice.cs b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/MouseDevice.cs similarity index 89% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/MouseDevice.cs rename to src/Ryujinx.Horizon/Sdk/Hid/HidDevices/MouseDevice.cs index 7c7ae1d290..71b798cfa7 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/MouseDevice.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/MouseDevice.cs @@ -1,8 +1,8 @@ -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.HidDevices { 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) { diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/NpadDevices.cs b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/NpadDevices.cs similarity index 98% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/NpadDevices.cs rename to src/Ryujinx.Horizon/Sdk/Hid/HidDevices/NpadDevices.cs index f711fbde2d..c1c9692646 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/NpadDevices.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/NpadDevices.cs @@ -1,15 +1,15 @@ using Ryujinx.Common; 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.SixAxis; using Ryujinx.Horizon.Sdk.Hid.Vibration; +using Ryujinx.Horizon.Sdk.OsTypes; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Runtime.CompilerServices; -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.HidDevices { public class NpadDevices : BaseDevice { @@ -19,7 +19,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid public const int MaxControllers = 9; // Players 1-8 and Handheld private ControllerType[] _configuredTypes; - private readonly KEvent[] _styleSetUpdateEvents; + private readonly Event[] _styleSetUpdateEvents; private readonly bool[] _supportedPlayers; private VibrationValue _neutralVibrationValue = new() { @@ -36,7 +36,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid public Dictionary> RumbleQueues = new(); public Dictionary LastVibrationValues = new(); - public NpadDevices(Switch device, bool active = true) : base(device, active) + public NpadDevices(bool active = true) : base(active) { _configuredTypes = new ControllerType[MaxControllers]; @@ -47,10 +47,10 @@ namespace Ryujinx.HLE.HOS.Services.Hid _supportedPlayers = new bool[MaxControllers]; _supportedPlayers.AsSpan().Fill(true); - _styleSetUpdateEvents = new KEvent[MaxControllers]; + _styleSetUpdateEvents = new Event[MaxControllers]; for (int i = 0; i < _styleSetUpdateEvents.Length; ++i) { - _styleSetUpdateEvents[i] = new KEvent(_device.System.KernelContext); + _styleSetUpdateEvents[i] = new Event(_device.System.KernelContext); } _activeCount = 0; @@ -58,7 +58,7 @@ namespace Ryujinx.HLE.HOS.Services.Hid JoyHold = NpadJoyHoldType.Vertical; } - internal ref KEvent GetStyleSetUpdateEvent(PlayerIndex player) + internal ref Event GetStyleSetUpdateEvent(PlayerIndex player) { return ref _styleSetUpdateEvents[(int)player]; } diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/TouchDevice.cs similarity index 89% rename from src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs rename to src/Ryujinx.Horizon/Sdk/Hid/HidDevices/TouchDevice.cs index ae3a3cf5cd..237d5c69da 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidDevices/TouchDevice.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/TouchDevice.cs @@ -1,11 +1,10 @@ -using Ryujinx.Horizon.Sdk.Hid; using System; -namespace Ryujinx.HLE.HOS.Services.Hid +namespace Ryujinx.Horizon.Sdk.Hid.HidDevices { 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) { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs new file mode 100644 index 0000000000..a0fd3f1214 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs @@ -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 arg1); + Result ActivateJoyXpad(JoyXpadId arg0); + Result GetJoyXpadLifoHandle(out int arg0, JoyXpadId arg1); + Result GetJoyXpadIds(out long arg0, Span 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 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 vibrationDeviceHandles, ReadOnlySpan 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 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 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 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
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); + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/KeyboardLockKeyEvent.cs b/src/Ryujinx.Horizon/Sdk/Hid/KeyboardLockKeyEvent.cs new file mode 100644 index 0000000000..5abd5812ce --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/KeyboardLockKeyEvent.cs @@ -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 + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/NpadJoyHoldType.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadJoyHoldType.cs similarity index 66% rename from src/Ryujinx.Horizon/Sdk/Hid/NpadJoyHoldType.cs rename to src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadJoyHoldType.cs index e8d7dffc39..114277ea14 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/NpadJoyHoldType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadJoyHoldType.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Horizon.Sdk.Hid +namespace Ryujinx.Horizon.Sdk.Hid.Npad { enum NpadJoyHoldType { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/PalmaApplicationSectionAccessBuffer.cs b/src/Ryujinx.Horizon/Sdk/Hid/PalmaApplicationSectionAccessBuffer.cs new file mode 100644 index 0000000000..866bd959d2 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/PalmaApplicationSectionAccessBuffer.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Hid +{ + [StructLayout(LayoutKind.Sequential, Size = 0x100)] + struct PalmaApplicationSectionAccessBuffer + { + + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/PalmaConnectionHandle.cs b/src/Ryujinx.Horizon/Sdk/Hid/PalmaConnectionHandle.cs new file mode 100644 index 0000000000..cadfd457f8 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/PalmaConnectionHandle.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Hid +{ + [StructLayout(LayoutKind.Sequential, Size = 0x8)] + struct PalmaConnectionHandle + { + + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/PalmaFeature.cs b/src/Ryujinx.Horizon/Sdk/Hid/PalmaFeature.cs new file mode 100644 index 0000000000..5309e414cd --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/PalmaFeature.cs @@ -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 + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/PalmaWaveSet.cs b/src/Ryujinx.Horizon/Sdk/Hid/PalmaWaveSet.cs new file mode 100644 index 0000000000..279aca0497 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/PalmaWaveSet.cs @@ -0,0 +1,9 @@ +namespace Ryujinx.Horizon.Sdk.Hid +{ + enum PalmaWaveSet : ulong + { + Small = 0, + Medium = 1, + Large = 2 + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AnalogStickState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AnalogStickState.cs index c5a9dd7e29..b2313cf4bb 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AnalogStickState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AnalogStickState.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common +namespace Ryujinx.Horizon.Sdk.Hid { struct AnalogStickState { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AtomicStorage.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AtomicStorage.cs index c9da845f70..2de8bed24e 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AtomicStorage.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/AtomicStorage.cs @@ -1,6 +1,6 @@ using System.Threading; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common +namespace Ryujinx.Horizon.Sdk.Hid { struct AtomicStorage where T : unmanaged, ISampledDataStruct { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/ISampledDataStruct.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/ISampledDataStruct.cs index 1bde91c5f3..12c42c582a 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/ISampledDataStruct.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/ISampledDataStruct.cs @@ -2,7 +2,7 @@ using System; using System.Buffers.Binary; using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common +namespace Ryujinx.Horizon.Sdk.Hid { /// /// 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 { - Npad.SixAxisSensorState _ => sizeof(ulong), + SixAxisSensorState _ => sizeof(ulong), _ => 0, }; } diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/RingLifo.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/RingLifo.cs index 35069a862e..79292cfbf9 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/RingLifo.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/RingLifo.cs @@ -3,7 +3,7 @@ using System; using System.Runtime.CompilerServices; using System.Threading; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common +namespace Ryujinx.Horizon.Sdk.Hid { struct RingLifo where T : unmanaged, ISampledDataStruct { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadAttribute.cs index 2e5e3fc95e..66b90befeb 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.DebugPad +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum DebugPadAttribute : uint diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadButton.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadButton.cs index 719090165c..d4bfb743d6 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadButton.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadButton.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.DebugPad +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum DebugPadButton : uint diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadState.cs index d5ce06771d..68e8cf5e74 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/DebugPad/DebugPadState.cs @@ -1,7 +1,6 @@ -using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.DebugPad +namespace Ryujinx.Horizon.Sdk.Hid { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct DebugPadState : ISampledDataStruct diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKey.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKey.cs index 06dce1ec7b..c27492dccb 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKey.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKey.cs @@ -1,6 +1,6 @@ using Ryujinx.Common.Memory; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard +namespace Ryujinx.Horizon.Sdk.Hid { struct KeyboardKey { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKeyShift.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKeyShift.cs index 36be391909..5422511220 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKeyShift.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardKeyShift.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard +namespace Ryujinx.Horizon.Sdk.Hid { enum KeyboardKeyShift { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardModifier.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardModifier.cs index 3cf3383882..c4458aebf3 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardModifier.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardModifier.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum KeyboardModifier : ulong diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardState.cs index 2623b99639..d58ee2ce2a 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Keyboard/KeyboardState.cs @@ -1,7 +1,6 @@ -using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Keyboard +namespace Ryujinx.Horizon.Sdk.Hid { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct KeyboardState : ISampledDataStruct diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseAttribute.cs index e3ae92bff8..5eaa4c10f9 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Mouse +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum MouseAttribute : uint diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseButton.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseButton.cs index 08d9d557b6..ef02f10dbc 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseButton.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseButton.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Mouse +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum MouseButton : uint diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseState.cs index 985aa7a583..56f339274c 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Mouse/MouseState.cs @@ -1,7 +1,6 @@ -using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Mouse +namespace Ryujinx.Horizon.Sdk.Hid { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct MouseState : ISampledDataStruct diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/DeviceType.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/DeviceType.cs index 0788cfc479..3497b0a367 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/DeviceType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/DeviceType.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum DeviceType diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadAttribute.cs index 27a5058027..928e68ead7 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum NpadAttribute : uint diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadBatteryLevel.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadBatteryLevel.cs index de922ec457..48d13afe95 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadBatteryLevel.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadBatteryLevel.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { enum NpadBatteryLevel { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadButton.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadButton.cs index b84edaaeda..17ef6506de 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadButton.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadButton.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum NpadButton : ulong diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadColorAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadColorAttribute.cs index e720dcacab..bae1f950a9 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadColorAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadColorAttribute.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { enum NpadColorAttribute : uint { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadCommonState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadCommonState.cs index efe4bfbd8c..b17b3908ea 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadCommonState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadCommonState.cs @@ -1,7 +1,6 @@ -using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct NpadCommonState : ISampledDataStruct diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadFullKeyColorState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadFullKeyColorState.cs index 232219fd11..467e2b9bd4 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadFullKeyColorState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadFullKeyColorState.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { struct NpadFullKeyColorState { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadGcTriggerState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadGcTriggerState.cs index da5dc8ad0c..a360a6dfa6 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadGcTriggerState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadGcTriggerState.cs @@ -1,7 +1,6 @@ -using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct NpadGcTriggerState : ISampledDataStruct diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadInternalState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadInternalState.cs index 9c60e031bb..82fa810fd4 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadInternalState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadInternalState.cs @@ -1,7 +1,6 @@ -using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { struct NpadInternalState { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyAssignmentMode.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyAssignmentMode.cs index 6d0127f21f..adfbf33216 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyAssignmentMode.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyAssignmentMode.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { enum NpadJoyAssignmentMode : uint { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyColorState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyColorState.cs index 3512fb523f..662174ae7b 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyColorState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadJoyColorState.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { struct NpadJoyColorState { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLarkType.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLarkType.cs index a9a0567c6a..c738904f3e 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLarkType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLarkType.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { enum NpadLarkType : uint { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLuciaType.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLuciaType.cs index 0a7eb0e879..7ef356bc80 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLuciaType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadLuciaType.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { enum NpadLuciaType { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadState.cs index 05f5bcca9f..b07ac8770a 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadState.cs @@ -1,6 +1,6 @@ using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { [StructLayout(LayoutKind.Sequential, Size = 0x5000)] struct NpadState diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs index c806c6f325..0eb45a315b 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { /// /// Nintendo pad style diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemButtonProperties.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemButtonProperties.cs index 8ff1c12daf..b7bf81daa8 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemButtonProperties.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemButtonProperties.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum NpadSystemButtonProperties : uint diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemProperties.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemProperties.cs index fa75f6f9cb..f20d67ce2a 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemProperties.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadSystemProperties.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum NpadSystemProperties : ulong diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorAttribute.cs index 921f3fc022..13edbb4854 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] enum SixAxisSensorAttribute : uint diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorState.cs index 9ba1408f1c..7e6ee6bb41 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/SixAxisSensorState.cs @@ -1,8 +1,7 @@ using Ryujinx.Common.Memory; -using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.Npad +namespace Ryujinx.Horizon.Sdk.Hid { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct SixAxisSensorState : ISampledDataStruct diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/SharedMemory.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/SharedMemory.cs index 0fb931021c..44a96a684c 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/SharedMemory.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/SharedMemory.cs @@ -1,13 +1,7 @@ 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; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory +namespace Ryujinx.Horizon.Sdk.Hid { /// /// Represent the shared memory shared between applications for input. diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchAttribute.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchAttribute.cs index 5cb2a6cfab..c5c8821d9f 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchAttribute.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchAttribute.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen +namespace Ryujinx.Horizon.Sdk.Hid { [Flags] public enum TouchAttribute : uint diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchScreenState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchScreenState.cs index cd6017d9bd..7e09e0d0ee 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchScreenState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchScreenState.cs @@ -1,8 +1,7 @@ using Ryujinx.Common.Memory; -using Ryujinx.Horizon.Sdk.Hid.SharedMemory.Common; using System.Runtime.InteropServices; -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen +namespace Ryujinx.Horizon.Sdk.Hid { [StructLayout(LayoutKind.Sequential, Pack = 1)] struct TouchScreenState : ISampledDataStruct diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchState.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchState.cs index f632bc22b4..2c5e58fdeb 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchState.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/TouchScreen/TouchState.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen +namespace Ryujinx.Horizon.Sdk.Hid { struct TouchState { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/ConsoleSixAxisSensorHandle.cs b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/ConsoleSixAxisSensorHandle.cs new file mode 100644 index 0000000000..f9d8ba0d41 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/ConsoleSixAxisSensorHandle.cs @@ -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; + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SixAxisInput.cs b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisInput.cs similarity index 87% rename from src/Ryujinx.Horizon/Sdk/Hid/SixAxisInput.cs rename to src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisInput.cs index dd03414873..23d7b5bacc 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SixAxisInput.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisInput.cs @@ -1,7 +1,7 @@ using Ryujinx.Horizon.Sdk.Hid.Npad; using System.Numerics; -namespace Ryujinx.Horizon.Sdk.Hid +namespace Ryujinx.Horizon.Sdk.Hid.SixAxis { public struct SixAxisInput { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorCalibrationParameter.cs b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorCalibrationParameter.cs new file mode 100644 index 0000000000..bab63644e4 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorCalibrationParameter.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Hid.SixAxis +{ + [StructLayout(LayoutKind.Sequential, Size = 0x744)] + struct SixAxisSensorCalibrationParameter + { + + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorHandle.cs b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorHandle.cs new file mode 100644 index 0000000000..e3c893cf6c --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorHandle.cs @@ -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; + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorIcInformation.cs b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorIcInformation.cs new file mode 100644 index 0000000000..3ec3df114f --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/SixAxis/SixAxisSensorIcInformation.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Hid.SixAxis +{ + [StructLayout(LayoutKind.Sequential, Size = 0xC8)] + public struct SixAxisSensorIcInformation + { + + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/TouchPoint.cs b/src/Ryujinx.Horizon/Sdk/Hid/TouchPoint.cs index 1b6a973406..b8052391cd 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/TouchPoint.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/TouchPoint.cs @@ -1,5 +1,3 @@ -using Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen; - namespace Ryujinx.Horizon.Sdk.Hid { public struct TouchPoint diff --git a/src/Ryujinx.Horizon/Sdk/Hid/TouchScreenConfigurationForNx.cs b/src/Ryujinx.Horizon/Sdk/Hid/TouchScreenConfigurationForNx.cs new file mode 100644 index 0000000000..dc269f8420 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/TouchScreenConfigurationForNx.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Hid +{ + [StructLayout(LayoutKind.Sequential, Size = 0x10)] + struct TouchScreenConfigurationForNx + { + public TouchScreenModeForNx Mode; + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/TouchScreenModeForNx.cs b/src/Ryujinx.Horizon/Sdk/Hid/TouchScreenModeForNx.cs new file mode 100644 index 0000000000..9737fc1e55 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/TouchScreenModeForNx.cs @@ -0,0 +1,9 @@ +namespace Ryujinx.Horizon.Sdk.Hid +{ + enum TouchScreenModeForNx : byte + { + UseSystemSetting = 0, + Finger = 1, + Heat2 = 2 + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceInfoForIpc.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceInfoForIpc.cs new file mode 100644 index 0000000000..6c28c1ad9a --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceInfoForIpc.cs @@ -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; + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDevicePosition.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDevicePosition.cs index 7cb61a8f71..e6634455fd 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDevicePosition.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDevicePosition.cs @@ -1,9 +1,9 @@ namespace Ryujinx.Horizon.Sdk.Hid.Vibration { - public enum VibrationDevicePosition + enum VibrationDevicePosition { - None, - Left, - Right, + None = 0, + Left = 1, + Right = 2 } } diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceType.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceType.cs index 308e635c4f..9b960dcbb4 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceType.cs @@ -1,9 +1,10 @@ namespace Ryujinx.Horizon.Sdk.Hid.Vibration { - public enum VibrationDeviceType + enum VibrationDeviceType { - None, - LinearResonantActuator, - GcErm, + Unknown = 0, + LinearResonantActuator = 1, + GcErm = 2, + Erm = 3 } } diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceValue.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceValue.cs index 3f4be6debf..85113b6c4d 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceValue.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceValue.cs @@ -1,6 +1,6 @@ namespace Ryujinx.Horizon.Sdk.Hid.Vibration { - public struct VibrationDeviceValue + struct VibrationDeviceValue { public VibrationDeviceType DeviceType; public VibrationDevicePosition Position; diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationGcErmCommand.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationGcErmCommand.cs new file mode 100644 index 0000000000..8f51998fad --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationGcErmCommand.cs @@ -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 + } +} diff --git a/src/Ryujinx.Input/HLE/NpadController.cs b/src/Ryujinx.Input/HLE/NpadController.cs index 0eabeb6951..6c25a2923b 100644 --- a/src/Ryujinx.Input/HLE/NpadController.cs +++ b/src/Ryujinx.Input/HLE/NpadController.cs @@ -6,6 +6,7 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.Horizon.Sdk.Hid; using Ryujinx.Horizon.Sdk.Hid.Npad; +using Ryujinx.Horizon.Sdk.Hid.SixAxis; using Ryujinx.Horizon.Sdk.Hid.Vibration; using System; using System.Collections.Concurrent; diff --git a/src/Ryujinx.Input/HLE/NpadManager.cs b/src/Ryujinx.Input/HLE/NpadManager.cs index 077c8fb6d6..2c61c24352 100644 --- a/src/Ryujinx.Input/HLE/NpadManager.cs +++ b/src/Ryujinx.Input/HLE/NpadManager.cs @@ -3,6 +3,8 @@ using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.Horizon.Sdk.Hid; +using Ryujinx.Horizon.Sdk.Hid.HidDevices; +using Ryujinx.Horizon.Sdk.Hid.SixAxis; using System; using System.Collections.Generic; using System.Diagnostics; From 0c79bfc0644e48bedc8187c88bc098fb5e5f5cae Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sat, 20 Jul 2024 14:46:03 +0100 Subject: [PATCH 05/11] HidServer stuff --- src/Ryujinx.Horizon/Hid/HidServer.cs | 1106 ++++++++++++++++- src/Ryujinx.Horizon/Sdk/Hid/Address.cs | 10 + src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs | 22 +- .../SharedMemory/Common/IAppletResource.cs | 8 + .../Vibration/IActiveVibrationDeviceList.cs | 10 + 5 files changed, 1144 insertions(+), 12 deletions(-) create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/Address.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/IAppletResource.cs create mode 100644 src/Ryujinx.Horizon/Sdk/Hid/Vibration/IActiveVibrationDeviceList.cs diff --git a/src/Ryujinx.Horizon/Hid/HidServer.cs b/src/Ryujinx.Horizon/Hid/HidServer.cs index 45ed4b2652..3ed3f3efae 100644 --- a/src/Ryujinx.Horizon/Hid/HidServer.cs +++ b/src/Ryujinx.Horizon/Hid/HidServer.cs @@ -1,7 +1,1111 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Applet; +using Ryujinx.Horizon.Sdk.Hid; +using Ryujinx.Horizon.Sdk.Hid.SixAxis; +using Ryujinx.Horizon.Sdk.Hid.Vibration; +using Ryujinx.Horizon.Sdk.Sf; +using System; + namespace Ryujinx.Horizon.Hid { - class HidServer : IHidServer + partial class HidServer : IHidServer { + [CmifCommand(0)] + public Result CreateAppletResource(out IAppletResource arg0, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + return Result.Success; + } + + [CmifCommand(1)] + public Result ActivateDebugPad(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(11)] + public Result ActivateTouchScreen(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(21)] + public Result ActivateMouse(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(31)] + public Result ActivateKeyboard(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(32)] + public Result SendKeyboardLockKeyEvent(AppletResourceUserId appletResourceUserId, KeyboardLockKeyEvent keyboardLockKeyEvent, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(40)] + public Result AcquireXpadIdEventHandle(out int arg0, ulong arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(41)] + public Result ReleaseXpadIdEventHandle(ulong arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(51)] + public Result ActivateXpad(AppletResourceUserId appletResourceUserId, uint basixXpadId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(55)] + public Result GetXpadIds(out long arg0, Span basicXpadIds) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(56)] + public Result ActivateJoyXpad(uint joyXpadId) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(58)] + public Result GetJoyXpadLifoHandle(out int arg0, uint joyXpadId) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(59)] + public Result GetJoyXpadIds(out long arg0, Span joyXpadIds) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(60)] + public Result ActivateSixAxisSensor(uint basixXpadId) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(61)] + public Result DeactivateSixAxisSensor(uint basixXpadId) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(62)] + public Result GetSixAxisSensorLifoHandle(out int arg0, uint basixXpadId) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(63)] + public Result ActivateJoySixAxisSensor(uint joyXpadId) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(64)] + public Result DeactivateJoySixAxisSensor(uint joyXpadId) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(65)] + public Result GetJoySixAxisSensorLifoHandle(out int arg0, uint joyXpadId) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(66)] + public Result StartSixAxisSensor(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(67)] + public Result StopSixAxisSensor(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(68)] + public Result IsSixAxisSensorFusionEnabled(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(69)] + public Result EnableSixAxisSensorFusion(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, bool arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(70)] + public Result SetSixAxisSensorFusionParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, float arg2, float arg3, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(71)] + public Result GetSixAxisSensorFusionParameters(out float arg0, out float arg1, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(72)] + public Result ResetSixAxisSensorFusionParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(73)] + public Result SetAccelerometerParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, float arg2, float arg3, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(74)] + public Result GetAccelerometerParameters(out float arg0, out float arg1, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(75)] + public Result ResetAccelerometerParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(76)] + public Result SetAccelerometerPlayMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, uint arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(77)] + public Result GetAccelerometerPlayMode(out uint arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(78)] + public Result ResetAccelerometerPlayMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(79)] + public Result SetGyroscopeZeroDriftMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, uint arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(80)] + public Result GetGyroscopeZeroDriftMode(out uint arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(81)] + public Result ResetGyroscopeZeroDriftMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(82)] + public Result IsSixAxisSensorAtRest(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(83)] + public Result IsFirmwareUpdateAvailableForSixAxisSensor(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(84)] + public Result EnableSixAxisSensorUnalteredPassthrough(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, bool arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(85)] + public Result IsSixAxisSensorUnalteredPassthroughEnabled(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(86)] + public Result StoreSixAxisSensorCalibrationParameter(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, in SixAxisSensorCalibrationParameter sixAxisSensorCalibrationParameter, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(87)] + public Result LoadSixAxisSensorCalibrationParameter(AppletResourceUserId appletResourceUserId, out SixAxisSensorCalibrationParameter sixAxisSensorCalibrationParameter, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(88)] + public Result GetSixAxisSensorIcInformation(AppletResourceUserId appletResourceUserId, out SixAxisSensorIcInformation sixAxisSensorIcInformation, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(89)] + public Result ResetIsSixAxisSensorDeviceNewlyAssigned(AppletResourceUserId appletResourceUserId, + SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(91)] + public Result ActivateGesture(AppletResourceUserId appletResourceUserId, int arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(100)] + public Result SetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, NpadStyleTag arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(101)] + public Result GetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, out NpadStyleTag arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(102)] + public Result SetSupportedNpadIdType(AppletResourceUserId appletResourceUserId, ReadOnlySpan arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(103)] + public Result ActivateNpad(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(104)] + public Result DeactivateNpad(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(106)] + public Result AcquireNpadStyleSetUpdateEventHandle(AppletResourceUserId appletResourceUserId, out int arg1, uint arg2, ulong arg3, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(107)] + public Result DisconnectNpad(AppletResourceUserId appletResourceUserId, uint arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(108)] + public Result GetPlayerLedPattern(out ulong arg0, uint arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(109)] + public Result ActivateNpadWithRevision(AppletResourceUserId appletResourceUserId, int arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(120)] + public Result SetNpadJoyHoldType(AppletResourceUserId appletResourceUserId, long arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(121)] + public Result GetNpadJoyHoldType(AppletResourceUserId appletResourceUserId, out long arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(122)] + public Result SetNpadJoyAssignmentModeSingleByDefault(AppletResourceUserId appletResourceUserId, uint arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(123)] + public Result SetNpadJoyAssignmentModeSingle(AppletResourceUserId appletResourceUserId, uint arg1, long arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(124)] + public Result SetNpadJoyAssignmentModeDual(AppletResourceUserId appletResourceUserId, uint arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(125)] + public Result MergeSingleJoyAsDualJoy(AppletResourceUserId appletResourceUserId, uint arg1, uint arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(126)] + public Result StartLrAssignmentMode(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(127)] + public Result StopLrAssignmentMode(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(128)] + public Result SetNpadHandheldActivationMode(AppletResourceUserId appletResourceUserId, long arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(129)] + public Result GetNpadHandheldActivationMode(AppletResourceUserId appletResourceUserId, out long arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(130)] + public Result SwapNpadAssignment(AppletResourceUserId appletResourceUserId, uint arg1, uint arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(131)] + public Result IsUnintendedHomeButtonInputProtectionEnabled(out bool arg0, AppletResourceUserId appletResourceUserId, uint arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(132)] + public Result EnableUnintendedHomeButtonInputProtection(AppletResourceUserId appletResourceUserId, uint arg1, bool arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(133)] + public Result SetNpadJoyAssignmentModeSingleWithDestination(out bool arg0, out uint arg1, AppletResourceUserId appletResourceUserId, uint arg3, long arg4, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(134)] + public Result SetNpadAnalogStickUseCenterClamp(AppletResourceUserId appletResourceUserId, bool arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(135)] + public Result SetNpadCaptureButtonAssignment(AppletResourceUserId appletResourceUserId, NpadStyleTag arg1, NpadButton arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(136)] + public Result ClearNpadCaptureButtonAssignment(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(200)] + public Result GetVibrationDeviceInfo(out VibrationDeviceInfoForIpc vibrationDeviceInfoForIpc, VibrationDeviceHandle vibrationDeviceHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(201)] + public Result SendVibrationValue(AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, VibrationValue arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(202)] + public Result GetActualVibrationValue(out VibrationValue arg0, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(203)] + public Result CreateActiveVibrationDeviceList(out IActiveVibrationDeviceList arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(204)] + public Result PermitVibration(bool arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(205)] + public Result IsVibrationPermitted(out bool arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(206)] + public Result SendVibrationValues(AppletResourceUserId appletResourceUserId, ReadOnlySpan vibrationDeviceHandles, ReadOnlySpan vibrationValues) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(207)] + public Result SendVibrationGcErmCommand(AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, VibrationGcErmCommand vibrationGcErmCommand, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(208)] + public Result GetActualVibrationGcErmCommand(out VibrationGcErmCommand vibrationGcErmCommand, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(209)] + public Result BeginPermitVibrationSession(AppletResourceUserId appletResourceUserId) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(210)] + public Result EndPermitVibrationSession() + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(211)] + public Result IsVibrationDeviceMounted(out bool arg0, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(212)] + public Result SendVibrationValueInBool(AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, bool arg2, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(300)] + public Result ActivateConsoleSixAxisSensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(301)] + public Result StartConsoleSixAxisSensor(AppletResourceUserId appletResourceUserId, ConsoleSixAxisSensorHandle consoleSixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(302)] + public Result StopConsoleSixAxisSensor(AppletResourceUserId appletResourceUserId, ConsoleSixAxisSensorHandle consoleSixAxisSensorHandle, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(303)] + public Result ActivateSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(304)] + public Result StartSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(305)] + public Result StopSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(306)] + public Result InitializeSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, int arg1, ulong arg2, int arg3, ulong arg4, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(307)] + public Result FinalizeSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(308)] + public Result SetSevenSixAxisSensorFusionStrength(AppletResourceUserId appletResourceUserId, float arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(309)] + public Result GetSevenSixAxisSensorFusionStrength(out float arg0, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(310)] + public Result ResetSevenSixAxisSensorTimestamp(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(400)] + public Result IsUsbFullKeyControllerEnabled(out bool arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(401)] + public Result EnableUsbFullKeyController(bool arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(402)] + public Result IsUsbFullKeyControllerConnected(out bool arg0, uint arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(403)] + public Result HasBattery(out bool arg0, uint arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(404)] + public Result HasLeftRightBattery(out bool arg0, out bool arg1, uint arg2) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(405)] + public Result GetNpadInterfaceType(out byte arg0, uint arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(406)] + public Result GetNpadLeftRightInterfaceType(out byte arg0, out byte arg1, uint arg2) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(407)] + public Result GetNpadOfHighestBatteryLevel(out uint arg0, ReadOnlySpan arg1, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(500)] + public Result GetPalmaConnectionHandle(out PalmaConnectionHandle palmaConnectionHandle, uint arg1, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(501)] + public Result InitializePalma(PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(502)] + public Result AcquirePalmaOperationCompleteEvent(out int arg0, PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(503)] + public Result GetPalmaOperationInfo(out ulong arg0, Span arg1, PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(504)] + public Result PlayPalmaActivity(PalmaConnectionHandle palmaConnectionHandle, ulong arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(505)] + public Result SetPalmaFrModeType(PalmaConnectionHandle palmaConnectionHandle, ulong arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(506)] + public Result ReadPalmaStep(PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(507)] + public Result EnablePalmaStep(PalmaConnectionHandle palmaConnectionHandle, bool arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(508)] + public Result ResetPalmaStep(PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(509)] + public Result ReadPalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(510)] + public Result WritePalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2, in PalmaApplicationSectionAccessBuffer palmaApplicationSectionAccessBuffer) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(511)] + public Result ReadPalmaUniqueCode(PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(512)] + public Result SetPalmaUniqueCodeInvalid(PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(513)] + public Result WritePalmaActivityEntry(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2, ulong arg3, ulong arg4) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(514)] + public Result WritePalmaRgbLedPatternEntry(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ReadOnlySpan arg2) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(515)] + public Result WritePalmaWaveEntry(PalmaConnectionHandle palmaConnectionHandle, PalmaWaveSet palmaWaveSet, ulong arg2, int arg3, ulong arg4, ulong arg5) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(516)] + public Result SetPalmaDataBaseIdentificationVersion(PalmaConnectionHandle palmaConnectionHandle, int arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(517)] + public Result GetPalmaDataBaseIdentificationVersion(PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(518)] + public Result SuspendPalmaFeature(PalmaConnectionHandle palmaConnectionHandle, PalmaFeature palmaFeature) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(519)] + public Result GetPalmaOperationResult(PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(520)] + public Result ReadPalmaPlayLog(PalmaConnectionHandle palmaConnectionHandle, ushort arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(521)] + public Result ResetPalmaPlayLog(PalmaConnectionHandle palmaConnectionHandle, ushort arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(522)] + public Result SetIsPalmaAllConnectable(AppletResourceUserId appletResourceUserId, bool arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(523)] + public Result SetIsPalmaPairedConnectable(AppletResourceUserId appletResourceUserId, bool arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(524)] + public Result PairPalma(PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(525)] + public Result SetPalmaBoostMode(bool arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(526)] + public Result CancelWritePalmaWaveEntry(PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(527)] + public Result EnablePalmaBoostMode(AppletResourceUserId appletResourceUserId, bool arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(528)] + public Result GetPalmaBluetoothAddress(out Address arg0, PalmaConnectionHandle palmaConnectionHandle) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(529)] + public Result SetDisallowedPalmaConnection(AppletResourceUserId appletResourceUserId, ReadOnlySpan
arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(1000)] + public Result SetNpadCommunicationMode(AppletResourceUserId appletResourceUserId, long arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(1001)] + public Result GetNpadCommunicationMode(out long arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(1002)] + public Result SetTouchScreenConfiguration(AppletResourceUserId appletResourceUserId, TouchScreenConfigurationForNx arg1, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(1003)] + public Result IsFirmwareUpdateNeededForNotification(out bool arg0, int arg1, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } + + [CmifCommand(2000)] + public Result ActivateDigitizer(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid); + + return Result.Success; + } } } diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Address.cs b/src/Ryujinx.Horizon/Sdk/Hid/Address.cs new file mode 100644 index 0000000000..b317032616 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/Address.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Hid +{ + [StructLayout(LayoutKind.Sequential, Size = 0x6)] + struct Address + { + + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs index a0fd3f1214..cbea40e257 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs @@ -17,17 +17,17 @@ namespace Ryujinx.Horizon.Sdk.Hid 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 arg1); - Result ActivateJoyXpad(JoyXpadId arg0); - Result GetJoyXpadLifoHandle(out int arg0, JoyXpadId arg1); - Result GetJoyXpadIds(out long arg0, Span 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 ActivateXpad(AppletResourceUserId appletResourceUserId, uint basixXpadId, ulong pid); + Result GetXpadIds(out long arg0, Span basicXpadIds); + Result ActivateJoyXpad(uint joyXpadId); + Result GetJoyXpadLifoHandle(out int arg0, uint joyXpadId); + Result GetJoyXpadIds(out long arg0, Span joyXpadIds); + Result ActivateSixAxisSensor(uint basixXpadId); + Result DeactivateSixAxisSensor(uint basixXpadId); + Result GetSixAxisSensorLifoHandle(out int arg0, uint basixXpadId); + Result ActivateJoySixAxisSensor(uint joyXpadId); + Result DeactivateJoySixAxisSensor(uint joyXpadId); + Result GetJoySixAxisSensorLifoHandle(out int arg0, uint joyXpadId); 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); diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/IAppletResource.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/IAppletResource.cs new file mode 100644 index 0000000000..caf5414467 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Common/IAppletResource.cs @@ -0,0 +1,8 @@ +using Ryujinx.Horizon.Sdk.Sf; + +namespace Ryujinx.Horizon.Sdk.Hid +{ + interface IAppletResource : IServiceObject + { + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/IActiveVibrationDeviceList.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/IActiveVibrationDeviceList.cs new file mode 100644 index 0000000000..7d44126828 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/IActiveVibrationDeviceList.cs @@ -0,0 +1,10 @@ +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Sf; + +namespace Ryujinx.Horizon.Sdk.Hid.Vibration +{ + interface IActiveVibrationDeviceList : IServiceObject + { + Result ActivateVibrationDevice(VibrationDeviceHandle vibrationDeviceHandle); + } +} From cbcdf4711818d0b57e62d33838d5e1eafcc692b6 Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sat, 20 Jul 2024 16:16:51 +0100 Subject: [PATCH 06/11] More HidServer improvements --- .../HOS/Services/Hid/IHidServer.cs | 616 ------------------ src/Ryujinx.Horizon/Hid/HidServer.cs | 291 ++++++--- .../Sdk/Hid/ControllerConfig.cs | 2 +- src/Ryujinx.Horizon/Sdk/Hid/Hid.cs | 3 +- .../Sdk/Hid/HidDevices/NpadDevices.cs | 62 +- src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs | 50 +- .../Sdk/Hid/Npad/ControllerType.cs | 19 - .../Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs | 2 +- 8 files changed, 277 insertions(+), 768 deletions(-) delete mode 100644 src/Ryujinx.Horizon/Sdk/Hid/Npad/ControllerType.cs diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs index 5834e0feec..415b629b77 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs @@ -76,89 +76,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(1)] - // ActivateDebugPad(nn::applet::AppletResourceUserId) - public ResultCode ActivateDebugPad(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - // Initialize entries to avoid issues with some games. - - for (int entry = 0; entry < Ryujinx.Horizon.Sdk.Hid.Hid.SharedMemEntryCount; entry++) - { - context.Device.Hid.DebugPad.Update(); - } - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(11)] - // ActivateTouchScreen(nn::applet::AppletResourceUserId) - public ResultCode ActivateTouchScreen(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.Device.Hid.Touchscreen.Active = true; - - // Initialize entries to avoid issues with some games. - - for (int entry = 0; entry < Ryujinx.Horizon.Sdk.Hid.Hid.SharedMemEntryCount; entry++) - { - context.Device.Hid.Touchscreen.Update(); - } - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(21)] - // ActivateMouse(nn::applet::AppletResourceUserId) - public ResultCode ActivateMouse(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.Device.Hid.Mouse.Active = true; - - // Initialize entries to avoid issues with some games. - - for (int entry = 0; entry < Ryujinx.Horizon.Sdk.Hid.Hid.SharedMemEntryCount; entry++) - { - context.Device.Hid.Mouse.Update(0, 0); - } - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(31)] - // ActivateKeyboard(nn::applet::AppletResourceUserId) - public ResultCode ActivateKeyboard(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.Device.Hid.Keyboard.Active = true; - - // Initialize entries to avoid issues with some games. - - KeyboardInput emptyInput = new() - { - Keys = new ulong[4], - }; - - for (int entry = 0; entry < Ryujinx.Horizon.Sdk.Hid.Hid.SharedMemEntryCount; entry++) - { - context.Device.Hid.Keyboard.Update(emptyInput); - } - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - [CommandCmif(32)] // SendKeyboardLockKeyEvent(uint flags, pid) public ResultCode SendKeyboardLockKeyEvent(ServiceCtx context) @@ -445,145 +362,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(73)] - // SetAccelerometerParameters(nn::hid::SixAxisSensorHandle, float X, float Y, nn::applet::AppletResourceUserId) - public ResultCode SetAccelerometerParameters(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - - _accelerometerParams = new AccelerometerParameters - { - X = context.RequestData.ReadInt32(), - Y = context.RequestData.ReadInt32(), - }; - - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerParams.X, _accelerometerParams.Y }); - - return ResultCode.Success; - } - - [CommandCmif(74)] - // GetAccelerometerParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) -> float X, float Y - public ResultCode GetAccelerometerParameters(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.ResponseData.Write(_accelerometerParams.X); - context.ResponseData.Write(_accelerometerParams.Y); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerParams.X, _accelerometerParams.Y }); - - return ResultCode.Success; - } - - [CommandCmif(75)] - // ResetAccelerometerParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) - public ResultCode ResetAccelerometerParameters(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - _accelerometerParams.X = 0; - _accelerometerParams.Y = 0; - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerParams.X, _accelerometerParams.Y }); - - return ResultCode.Success; - } - - [CommandCmif(76)] - // SetAccelerometerPlayMode(nn::hid::SixAxisSensorHandle, uint PlayMode, nn::applet::AppletResourceUserId) - public ResultCode SetAccelerometerPlayMode(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - _accelerometerPlayMode = context.RequestData.ReadUInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerPlayMode }); - - return ResultCode.Success; - } - - [CommandCmif(77)] - // GetAccelerometerPlayMode(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) -> uint PlayMode - public ResultCode GetAccelerometerPlayMode(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.ResponseData.Write(_accelerometerPlayMode); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerPlayMode }); - - return ResultCode.Success; - } - - [CommandCmif(78)] - // ResetAccelerometerPlayMode(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) - public ResultCode ResetAccelerometerPlayMode(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - _accelerometerPlayMode = 0; - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerPlayMode }); - - return ResultCode.Success; - } - - [CommandCmif(79)] - // SetGyroscopeZeroDriftMode(nn::hid::SixAxisSensorHandle, uint GyroscopeZeroDriftMode, nn::applet::AppletResourceUserId) - public ResultCode SetGyroscopeZeroDriftMode(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - _gyroscopeZeroDriftMode = (GyroscopeZeroDriftMode)context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _gyroscopeZeroDriftMode }); - - return ResultCode.Success; - } - - [CommandCmif(80)] - // GetGyroscopeZeroDriftMode(nn::applet::AppletResourceUserId, nn::hid::SixAxisSensorHandle) -> int GyroscopeZeroDriftMode - public ResultCode GetGyroscopeZeroDriftMode(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.ResponseData.Write((int)_gyroscopeZeroDriftMode); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _gyroscopeZeroDriftMode }); - - return ResultCode.Success; - } - - [CommandCmif(81)] - // ResetGyroscopeZeroDriftMode(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) - public ResultCode ResetGyroscopeZeroDriftMode(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - _gyroscopeZeroDriftMode = GyroscopeZeroDriftMode.Standard; - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _gyroscopeZeroDriftMode }); - - return ResultCode.Success; - } - [CommandCmif(82)] // IsSixAxisSensorAtRest(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) -> bool IsAsRest public ResultCode IsSixAxisSensorAtRest(ServiceCtx context) @@ -644,80 +422,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(87)] // 13.0.0+ - // LoadSixAxisSensorCalibrationParameter(nn::applet::AppletResourceUserId, nn::hid::SixAxisSensorHandle, u64 unknown) - public ResultCode LoadSixAxisSensorCalibrationParameter(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - // TODO: CalibrationParameter have to be determined. - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle }); - - return ResultCode.Success; - } - - [CommandCmif(88)] // 13.0.0+ - // GetSixAxisSensorIcInformation(nn::applet::AppletResourceUserId, nn::hid::SixAxisSensorHandle) -> u64 unknown - public ResultCode GetSixAxisSensorIcInformation(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - // TODO: IcInformation have to be determined. - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle }); - - return ResultCode.Success; - } - - [CommandCmif(91)] - // ActivateGesture(nn::applet::AppletResourceUserId, int Unknown0) - public ResultCode ActivateGesture(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - int unknown0 = context.RequestData.ReadInt32(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, unknown0 }); - - return ResultCode.Success; - } - - [CommandCmif(100)] - // SetSupportedNpadStyleSet(pid, nn::applet::AppletResourceUserId, nn::hid::NpadStyleTag) - public ResultCode SetSupportedNpadStyleSet(ServiceCtx context) - { - ulong pid = context.Request.HandleDesc.PId; - ControllerType type = (ControllerType)context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { pid, appletResourceUserId, type }); - - context.Device.Hid.Npads.SupportedStyleSets = type; - - return ResultCode.Success; - } - - [CommandCmif(101)] - // GetSupportedNpadStyleSet(pid, nn::applet::AppletResourceUserId) -> uint nn::hid::NpadStyleTag - public ResultCode GetSupportedNpadStyleSet(ServiceCtx context) - { -#pragma warning disable IDE0059 // Remove unnecessary value assignment - ulong pid = context.Request.HandleDesc.PId; -#pragma warning restore IDE0059 - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.ResponseData.Write((int)context.Device.Hid.Npads.SupportedStyleSets); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, context.Device.Hid.Npads.SupportedStyleSets }); - - return ResultCode.Success; - } - [CommandCmif(102)] // SetSupportedNpadIdType(nn::applet::AppletResourceUserId, array) public ResultCode SetSupportedNpadIdType(ServiceCtx context) @@ -1348,248 +1052,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(209)] // 4.0.0+ - // BeginPermitVibrationSession(nn::applet::AppletResourceUserId) - public ResultCode BeginPermitVibrationSession(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(210)] // 4.0.0+ - // EndPermitVibrationSession() - public ResultCode EndPermitVibrationSession(ServiceCtx context) - { - Logger.Stub?.PrintStub(LogClass.ServiceHid); - - return ResultCode.Success; - } - - [CommandCmif(211)] // 7.0.0+ - // IsVibrationDeviceMounted(nn::hid::VibrationDeviceHandle, nn::applet::AppletResourceUserId) - public ResultCode IsVibrationDeviceMounted(ServiceCtx context) - { -#pragma warning disable IDE0059 // Remove unnecessary value assignment - int vibrationDeviceHandle = context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); -#pragma warning restore IDE0059 - - // NOTE: Service use vibrationDeviceHandle to get the PlayerIndex. - // And return false if (npadIdType >= (NpadIdType)8 && npadIdType != NpadIdType.Handheld && npadIdType != NpadIdType.Unknown) - - context.ResponseData.Write(true); - - return ResultCode.Success; - } - - [CommandCmif(300)] - // ActivateConsoleSixAxisSensor(nn::applet::AppletResourceUserId) - public ResultCode ActivateConsoleSixAxisSensor(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(301)] - // StartConsoleSixAxisSensor(nn::hid::ConsoleSixAxisSensorHandle, nn::applet::AppletResourceUserId) - public ResultCode StartConsoleSixAxisSensor(ServiceCtx context) - { - int consoleSixAxisSensorHandle = context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, consoleSixAxisSensorHandle }); - - return ResultCode.Success; - } - - [CommandCmif(302)] - // StopConsoleSixAxisSensor(nn::hid::ConsoleSixAxisSensorHandle, nn::applet::AppletResourceUserId) - public ResultCode StopConsoleSixAxisSensor(ServiceCtx context) - { - int consoleSixAxisSensorHandle = context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, consoleSixAxisSensorHandle }); - - return ResultCode.Success; - } - - [CommandCmif(303)] // 5.0.0+ - // ActivateSevenSixAxisSensor(nn::applet::AppletResourceUserId) - public ResultCode ActivateSevenSixAxisSensor(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(304)] // 5.0.0+ - // StartSevenSixAxisSensor(nn::applet::AppletResourceUserId) - public ResultCode StartSevenSixAxisSensor(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(305)] // 5.0.0+ - // StopSevenSixAxisSensor(nn::applet::AppletResourceUserId) - public ResultCode StopSevenSixAxisSensor(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(306)] // 5.0.0+ - // InitializeSevenSixAxisSensor(array, ulong Counter0, array, ulong Counter1, nn::applet::AppletResourceUserId) - public ResultCode InitializeSevenSixAxisSensor(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - long counter0 = context.RequestData.ReadInt64(); - long counter1 = context.RequestData.ReadInt64(); - - // TODO: Determine if array is a buffer or not... - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, counter0, counter1 }); - - return ResultCode.Success; - } - - [CommandCmif(307)] // 5.0.0+ - // FinalizeSevenSixAxisSensor(nn::applet::AppletResourceUserId) - public ResultCode FinalizeSevenSixAxisSensor(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(308)] // 5.0.0+ - // SetSevenSixAxisSensorFusionStrength(float Strength, nn::applet::AppletResourceUserId) - public ResultCode SetSevenSixAxisSensorFusionStrength(ServiceCtx context) - { - _sevenSixAxisSensorFusionStrength = context.RequestData.ReadSingle(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, _sevenSixAxisSensorFusionStrength }); - - return ResultCode.Success; - } - - [CommandCmif(309)] // 5.0.0+ - // GetSevenSixAxisSensorFusionStrength(nn::applet::AppletResourceUserId) -> float Strength - public ResultCode GetSevenSixAxisSensorFusionStrength(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.ResponseData.Write(_sevenSixAxisSensorFusionStrength); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, _sevenSixAxisSensorFusionStrength }); - - return ResultCode.Success; - } - - [CommandCmif(310)] // 6.0.0+ - // ResetSevenSixAxisSensorTimestamp(pid, nn::applet::AppletResourceUserId) - public ResultCode ResetSevenSixAxisSensorTimestamp(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(400)] - // IsUsbFullKeyControllerEnabled() -> bool IsEnabled - public ResultCode IsUsbFullKeyControllerEnabled(ServiceCtx context) - { - context.ResponseData.Write(_usbFullKeyControllerEnabled); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { _usbFullKeyControllerEnabled }); - - return ResultCode.Success; - } - - [CommandCmif(401)] - // EnableUsbFullKeyController(bool Enable) - public ResultCode EnableUsbFullKeyController(ServiceCtx context) - { - _usbFullKeyControllerEnabled = context.RequestData.ReadBoolean(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { _usbFullKeyControllerEnabled }); - - return ResultCode.Success; - } - - [CommandCmif(402)] - // IsUsbFullKeyControllerConnected(uint Unknown0) -> bool Connected - public ResultCode IsUsbFullKeyControllerConnected(ServiceCtx context) - { - int unknown0 = context.RequestData.ReadInt32(); - - context.ResponseData.Write(true); //FullKeyController is always connected ? - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { unknown0, Connected = true }); - - return ResultCode.Success; - } - - [CommandCmif(403)] // 4.0.0+ - // HasBattery(uint NpadId) -> bool HasBattery - public ResultCode HasBattery(ServiceCtx context) - { - int npadId = context.RequestData.ReadInt32(); - - context.ResponseData.Write(true); //Npad always got a battery ? - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { npadId, HasBattery = true }); - - return ResultCode.Success; - } - - [CommandCmif(404)] // 4.0.0+ - // HasLeftRightBattery(uint NpadId) -> bool HasLeftBattery, bool HasRightBattery - public ResultCode HasLeftRightBattery(ServiceCtx context) - { - int npadId = context.RequestData.ReadInt32(); - - context.ResponseData.Write(true); //Npad always got a left battery ? - context.ResponseData.Write(true); //Npad always got a right battery ? - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { npadId, HasLeftBattery = true, HasRightBattery = true }); - - return ResultCode.Success; - } - - [CommandCmif(405)] // 4.0.0+ - // GetNpadInterfaceType(uint NpadId) -> uchar InterfaceType - public ResultCode GetNpadInterfaceType(ServiceCtx context) - { - int npadId = context.RequestData.ReadInt32(); - - context.ResponseData.Write((byte)0); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { npadId, NpadInterfaceType = 0 }); - - return ResultCode.Success; - } - [CommandCmif(406)] // 4.0.0+ // GetNpadLeftRightInterfaceType(uint NpadId) -> uchar LeftInterfaceType, uchar RightInterfaceType public ResultCode GetNpadLeftRightInterfaceType(ServiceCtx context) @@ -1761,84 +1223,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(511)] // 5.0.0+ - // ReadPalmaUniqueCode(nn::hid::PalmaConnectionHandle) - public ResultCode ReadPalmaUniqueCode(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); - - return ResultCode.Success; - } - - [CommandCmif(512)] // 5.0.0+ - // SetPalmaUniqueCodeInvalid(nn::hid::PalmaConnectionHandle) - public ResultCode SetPalmaUniqueCodeInvalid(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); - - return ResultCode.Success; - } - - [CommandCmif(522)] // 5.1.0+ - // SetIsPalmaAllConnectable(nn::applet::AppletResourceUserId, bool, pid) - public ResultCode SetIsPalmaAllConnectable(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - long unknownBool = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, unknownBool }); - - return ResultCode.Success; - } - - [CommandCmif(525)] // 5.1.0+ - // SetPalmaBoostMode(bool) - public ResultCode SetPalmaBoostMode(ServiceCtx context) - { - // NOTE: Stubbed in system module. - - return ResultCode.Success; - } - - [CommandCmif(1000)] - // SetNpadCommunicationMode(long CommunicationMode, nn::applet::AppletResourceUserId) - public ResultCode SetNpadCommunicationMode(ServiceCtx context) - { - _npadCommunicationMode = context.RequestData.ReadInt64(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, _npadCommunicationMode }); - - return ResultCode.Success; - } - - [CommandCmif(1001)] - // GetNpadCommunicationMode() -> long CommunicationMode - public ResultCode GetNpadCommunicationMode(ServiceCtx context) - { - context.ResponseData.Write(_npadCommunicationMode); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { _npadCommunicationMode }); - - return ResultCode.Success; - } - - [CommandCmif(1002)] // 9.0.0+ - // SetTouchScreenConfiguration(nn::hid::TouchScreenConfigurationForNx, nn::applet::AppletResourceUserId) - public ResultCode SetTouchScreenConfiguration(ServiceCtx context) - { - long touchScreenConfigurationForNx = context.RequestData.ReadInt64(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, touchScreenConfigurationForNx }); - - return ResultCode.Success; - } - [CommandCmif(1004)] // 17.0.0+ // SetTouchScreenResolution(int width, int height, nn::applet::AppletResourceUserId) public ResultCode SetTouchScreenResolution(ServiceCtx context) diff --git a/src/Ryujinx.Horizon/Hid/HidServer.cs b/src/Ryujinx.Horizon/Hid/HidServer.cs index 3ed3f3efae..115f9fdf5b 100644 --- a/src/Ryujinx.Horizon/Hid/HidServer.cs +++ b/src/Ryujinx.Horizon/Hid/HidServer.cs @@ -2,6 +2,8 @@ using Ryujinx.Common.Logging; using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Sdk.Applet; using Ryujinx.Horizon.Sdk.Hid; +using Ryujinx.Horizon.Sdk.Hid.HidDevices; +using Ryujinx.Horizon.Sdk.Hid.Npad; using Ryujinx.Horizon.Sdk.Hid.SixAxis; using Ryujinx.Horizon.Sdk.Hid.Vibration; using Ryujinx.Horizon.Sdk.Sf; @@ -11,6 +13,51 @@ namespace Ryujinx.Horizon.Hid { partial class HidServer : IHidServer { + internal const int SharedMemEntryCount = 17; + + public DebugPadDevice DebugPad; + public TouchDevice Touchscreen; + public MouseDevice Mouse; + public KeyboardDevice Keyboard; + public NpadDevices Npads; + + private bool _sixAxisSensorFusionEnabled; + private bool _unintendedHomeButtonInputProtectionEnabled; + private bool _npadAnalogStickCenterClampEnabled; + private bool _vibrationPermitted; + private bool _usbFullKeyControllerEnabled; + private readonly bool _isFirmwareUpdateAvailableForSixAxisSensor; + private bool _isSixAxisSensorUnalteredPassthroughEnabled; + + private NpadHandheldActivationMode _npadHandheldActivationMode; + private GyroscopeZeroDriftMode _gyroscopeZeroDriftMode; + + private long _npadCommunicationMode; + private uint _accelerometerPlayMode; + private float _sevenSixAxisSensorFusionStrength; + + private SensorFusionParameters _sensorFusionParams; + private AccelerometerParameters _accelerometerParams; + + public HidServer() + { + DebugPad = new DebugPadDevice(true); + Touchscreen = new TouchDevice(true); + Mouse = new MouseDevice(false); + Keyboard = new KeyboardDevice(false); + Npads = new NpadDevices(true); + + _npadHandheldActivationMode = NpadHandheldActivationMode.Dual; + _gyroscopeZeroDriftMode = GyroscopeZeroDriftMode.Standard; + + _isFirmwareUpdateAvailableForSixAxisSensor = false; + + _sensorFusionParams = new SensorFusionParameters(); + _accelerometerParams = new AccelerometerParameters(); + + _vibrationPermitted = true; + } + [CmifCommand(0)] public Result CreateAppletResource(out IAppletResource arg0, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { @@ -22,7 +69,14 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(1)] public Result ActivateDebugPad(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + // Initialize entries to avoid issues with some games. + + for (int i = 0; i < SharedMemEntryCount; i++) + { + DebugPad.Update(); + } + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } @@ -30,7 +84,16 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(11)] public Result ActivateTouchScreen(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Touchscreen.Active = true; + + // Initialize entries to avoid issues with some games. + + for (int i = 0; i < SharedMemEntryCount; i++) + { + Touchscreen.Update(); + } + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } @@ -38,7 +101,16 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(21)] public Result ActivateMouse(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Mouse.Active = true; + + // Initialize entries to avoid issues with some games. + + for (int i = 0; i < SharedMemEntryCount; i++) + { + Mouse.Update(0, 0); + } + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } @@ -46,7 +118,21 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(31)] public Result ActivateKeyboard(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Keyboard.Active = true; + + // Initialize entries to avoid issues with some games. + + KeyboardInput emptyInput = new() + { + Keys = new ulong[4], + }; + + for (int i = 0; i < SharedMemEntryCount; i++) + { + Keyboard.Update(emptyInput); + } + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } @@ -54,13 +140,15 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(32)] public Result SendKeyboardLockKeyEvent(AppletResourceUserId appletResourceUserId, KeyboardLockKeyEvent keyboardLockKeyEvent, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + // NOTE: This signals the keyboard driver about lock events. + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { keyboardLockKeyEvent }); return Result.Success; } [CmifCommand(40)] - public Result AcquireXpadIdEventHandle(out int arg0, ulong arg1) + public Result AcquireXpadIdEventHandle(out int arg0, ulong xpadId) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -68,7 +156,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(41)] - public Result ReleaseXpadIdEventHandle(ulong arg0) + public Result ReleaseXpadIdEventHandle(ulong xpadId) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -220,17 +308,26 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(73)] - public Result SetAccelerometerParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, float arg2, float arg3, [ClientProcessId] ulong pid) + public Result SetAccelerometerParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, float x, float y, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _accelerometerParams = new AccelerometerParameters + { + X = x, + Y = y, + }; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerParams.X, _accelerometerParams.Y }); return Result.Success; } [CmifCommand(74)] - public Result GetAccelerometerParameters(out float arg0, out float arg1, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + public Result GetAccelerometerParameters(out float x, out float y, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + x = _accelerometerParams.X; + y = _accelerometerParams.Y; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerParams.X, _accelerometerParams.Y }); return Result.Success; } @@ -238,23 +335,30 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(75)] public Result ResetAccelerometerParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _accelerometerParams.X = 0; + _accelerometerParams.Y = 0; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerParams.X, _accelerometerParams.Y }); return Result.Success; } [CmifCommand(76)] - public Result SetAccelerometerPlayMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, uint arg2, [ClientProcessId] ulong pid) + public Result SetAccelerometerPlayMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, uint accelerometerPlayMode, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _accelerometerPlayMode = accelerometerPlayMode; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerPlayMode }); return Result.Success; } [CmifCommand(77)] - public Result GetAccelerometerPlayMode(out uint arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + public Result GetAccelerometerPlayMode(out uint accelerometerPlayMode, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + accelerometerPlayMode = _accelerometerPlayMode; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerPlayMode }); return Result.Success; } @@ -262,23 +366,29 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(78)] public Result ResetAccelerometerPlayMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _accelerometerPlayMode = 0; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _accelerometerPlayMode }); return Result.Success; } [CmifCommand(79)] - public Result SetGyroscopeZeroDriftMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, uint arg2, [ClientProcessId] ulong pid) + public Result SetGyroscopeZeroDriftMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, GyroscopeZeroDriftMode gyroscopeZeroDriftMode, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _gyroscopeZeroDriftMode = gyroscopeZeroDriftMode; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _gyroscopeZeroDriftMode }); return Result.Success; } [CmifCommand(80)] - public Result GetGyroscopeZeroDriftMode(out uint arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + public Result GetGyroscopeZeroDriftMode(out GyroscopeZeroDriftMode gyroscopeZeroDriftMode, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + gyroscopeZeroDriftMode = _gyroscopeZeroDriftMode; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _gyroscopeZeroDriftMode }); return Result.Success; } @@ -286,7 +396,9 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(81)] public Result ResetGyroscopeZeroDriftMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _gyroscopeZeroDriftMode = GyroscopeZeroDriftMode.Standard; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _gyroscopeZeroDriftMode }); return Result.Success; } @@ -326,7 +438,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(86)] public Result StoreSixAxisSensorCalibrationParameter(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, in SixAxisSensorCalibrationParameter sixAxisSensorCalibrationParameter, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { sixAxisSensorHandle, sixAxisSensorCalibrationParameter }); return Result.Success; } @@ -334,7 +446,9 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(87)] public Result LoadSixAxisSensorCalibrationParameter(AppletResourceUserId appletResourceUserId, out SixAxisSensorCalibrationParameter sixAxisSensorCalibrationParameter, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + // TODO: CalibrationParameter have to be determined. + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle }); return Result.Success; } @@ -342,14 +456,15 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(88)] public Result GetSixAxisSensorIcInformation(AppletResourceUserId appletResourceUserId, out SixAxisSensorIcInformation sixAxisSensorIcInformation, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + // TODO: IcInformation have to be determined. + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle }); return Result.Success; } [CmifCommand(89)] - public Result ResetIsSixAxisSensorDeviceNewlyAssigned(AppletResourceUserId appletResourceUserId, - SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + public Result ResetIsSixAxisSensorDeviceNewlyAssigned(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -357,25 +472,29 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(91)] - public Result ActivateGesture(AppletResourceUserId appletResourceUserId, int arg1, [ClientProcessId] ulong pid) + public Result ActivateGesture(AppletResourceUserId appletResourceUserId, int unknown, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, unknown }); return Result.Success; } [CmifCommand(100)] - public Result SetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, NpadStyleTag arg1, [ClientProcessId] ulong pid) + public Result SetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, NpadStyleTag supportedStyleSets, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { pid, appletResourceUserId, supportedStyleSets }); + + Npads.SupportedStyleSets = supportedStyleSets; return Result.Success; } [CmifCommand(101)] - public Result GetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, out NpadStyleTag arg1, [ClientProcessId] ulong pid) + public Result GetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, out NpadStyleTag supportedStyleSets, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + supportedStyleSets = Npads.SupportedStyleSets; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, Npads.SupportedStyleSets }); return Result.Success; } @@ -647,7 +766,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(209)] public Result BeginPermitVibrationSession(AppletResourceUserId appletResourceUserId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } @@ -661,9 +780,12 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(211)] - public Result IsVibrationDeviceMounted(out bool arg0, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, [ClientProcessId] ulong pid) + public Result IsVibrationDeviceMounted(out bool isVibrationDeviceMounted, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + // NOTE: Service use vibrationDeviceHandle to get the PlayerIndex. + // And return false if (npadIdType >= (NpadIdType)8 && npadIdType != NpadIdType.Handheld && npadIdType != NpadIdType.Unknown) + + isVibrationDeviceMounted = true; return Result.Success; } @@ -679,7 +801,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(300)] public Result ActivateConsoleSixAxisSensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } @@ -687,7 +809,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(301)] public Result StartConsoleSixAxisSensor(AppletResourceUserId appletResourceUserId, ConsoleSixAxisSensorHandle consoleSixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, consoleSixAxisSensorHandle }); return Result.Success; } @@ -695,7 +817,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(302)] public Result StopConsoleSixAxisSensor(AppletResourceUserId appletResourceUserId, ConsoleSixAxisSensorHandle consoleSixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, consoleSixAxisSensorHandle }); return Result.Success; } @@ -703,7 +825,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(303)] public Result ActivateSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } @@ -711,7 +833,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(304)] public Result StartSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } @@ -719,15 +841,17 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(305)] public Result StopSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } [CmifCommand(306)] - public Result InitializeSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, int arg1, ulong arg2, int arg3, ulong arg4, [ClientProcessId] ulong pid) + public Result InitializeSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, int nativeHandle0, ulong counter0, int nativeHandle1, ulong counter1, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + // TODO: Determine if array is a buffer or not... + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, counter0, counter1 }); return Result.Success; } @@ -735,23 +859,27 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(307)] public Result FinalizeSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } [CmifCommand(308)] - public Result SetSevenSixAxisSensorFusionStrength(AppletResourceUserId appletResourceUserId, float arg1, [ClientProcessId] ulong pid) + public Result SetSevenSixAxisSensorFusionStrength(AppletResourceUserId appletResourceUserId, float sevenSixAxisSensorFusionStrength, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _sevenSixAxisSensorFusionStrength = sevenSixAxisSensorFusionStrength; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, _sevenSixAxisSensorFusionStrength }); return Result.Success; } [CmifCommand(309)] - public Result GetSevenSixAxisSensorFusionStrength(out float arg0, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + public Result GetSevenSixAxisSensorFusionStrength(out float sevenSixSensorFusionStrength, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + sevenSixSensorFusionStrength = _sevenSixAxisSensorFusionStrength; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, _sevenSixAxisSensorFusionStrength }); return Result.Success; } @@ -759,55 +887,68 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(310)] public Result ResetSevenSixAxisSensorTimestamp(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } [CmifCommand(400)] - public Result IsUsbFullKeyControllerEnabled(out bool arg0) + public Result IsUsbFullKeyControllerEnabled(out bool isUsbFullKeyControllerEnabled) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + isUsbFullKeyControllerEnabled = _usbFullKeyControllerEnabled; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { _usbFullKeyControllerEnabled }); return Result.Success; } [CmifCommand(401)] - public Result EnableUsbFullKeyController(bool arg0) + public Result EnableUsbFullKeyController(bool usbFullKeyControllerEnabled) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _usbFullKeyControllerEnabled = usbFullKeyControllerEnabled; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { _usbFullKeyControllerEnabled }); return Result.Success; } [CmifCommand(402)] - public Result IsUsbFullKeyControllerConnected(out bool arg0, uint arg1) + public Result IsUsbFullKeyControllerConnected(out bool isConnected, uint unknown) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + isConnected = true; // FullKeyController is always connected? + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { unknown, Connected = true }); return Result.Success; } [CmifCommand(403)] - public Result HasBattery(out bool arg0, uint arg1) + public Result HasBattery(out bool hasBattery, uint npadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + hasBattery = true; // Npad always has a battery? + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { npadId, HasBattery = true }); return Result.Success; } [CmifCommand(404)] - public Result HasLeftRightBattery(out bool arg0, out bool arg1, uint arg2) + public Result HasLeftRightBattery(out bool hasLeftBattery, out bool hasRightBattery, uint npadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + hasLeftBattery = true; // Npad always has a left battery? + hasRightBattery = true; // Npad always has a right battery? + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { npadId, HasLeftBattery = true, HasRightBattery = true }); return Result.Success; } [CmifCommand(405)] - public Result GetNpadInterfaceType(out byte arg0, uint arg1) + public Result GetNpadInterfaceType(out byte npadInterfaceType, uint npadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + npadInterfaceType = 0; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { npadId, NpadInterfaceType = 0 }); return Result.Success; } @@ -919,7 +1060,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(511)] public Result ReadPalmaUniqueCode(PalmaConnectionHandle palmaConnectionHandle) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); return Result.Success; } @@ -927,7 +1068,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(512)] public Result SetPalmaUniqueCodeInvalid(PalmaConnectionHandle palmaConnectionHandle) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); return Result.Success; } @@ -1005,9 +1146,9 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(522)] - public Result SetIsPalmaAllConnectable(AppletResourceUserId appletResourceUserId, bool arg1, [ClientProcessId] ulong pid) + public Result SetIsPalmaAllConnectable(AppletResourceUserId appletResourceUserId, bool unknownBool, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, unknownBool }); return Result.Success; } @@ -1031,7 +1172,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(525)] public Result SetPalmaBoostMode(bool arg0) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + // NOTE: Stubbed in system module. return Result.Success; } @@ -1069,25 +1210,29 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(1000)] - public Result SetNpadCommunicationMode(AppletResourceUserId appletResourceUserId, long arg1, [ClientProcessId] ulong pid) + public Result SetNpadCommunicationMode(AppletResourceUserId appletResourceUserId, long npadCommunicationMode, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _npadCommunicationMode = npadCommunicationMode; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, _npadCommunicationMode }); return Result.Success; } [CmifCommand(1001)] - public Result GetNpadCommunicationMode(out long arg0) + public Result GetNpadCommunicationMode(out long npadCommunicationMode) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + npadCommunicationMode = _npadCommunicationMode; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { _npadCommunicationMode }); return Result.Success; } [CmifCommand(1002)] - public Result SetTouchScreenConfiguration(AppletResourceUserId appletResourceUserId, TouchScreenConfigurationForNx arg1, [ClientProcessId] ulong pid) + public Result SetTouchScreenConfiguration(AppletResourceUserId appletResourceUserId, TouchScreenConfigurationForNx touchScreenConfigurationForNx, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, touchScreenConfigurationForNx }); return Result.Success; } diff --git a/src/Ryujinx.Horizon/Sdk/Hid/ControllerConfig.cs b/src/Ryujinx.Horizon/Sdk/Hid/ControllerConfig.cs index 7afb7f3d41..902ac0d00e 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/ControllerConfig.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/ControllerConfig.cs @@ -5,6 +5,6 @@ namespace Ryujinx.Horizon.Sdk.Hid public struct ControllerConfig { public PlayerIndex Player; - public ControllerType Type; + public NpadStyleTag Type; } } diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Hid.cs b/src/Ryujinx.Horizon/Sdk/Hid/Hid.cs index 59d122a90f..0032c7918a 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/Hid.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Hid.cs @@ -5,7 +5,6 @@ using Ryujinx.Horizon.Sdk.Hid.HidDevices; using Ryujinx.Horizon.Sdk.Hid.Npad; using System.Collections.Generic; using System.Runtime.CompilerServices; -using ControllerType = Ryujinx.Horizon.Sdk.Hid.Npad.ControllerType; using PlayerIndex = Ryujinx.Horizon.Sdk.Hid.Npad.PlayerIndex; namespace Ryujinx.Horizon.Sdk.Hid @@ -68,7 +67,7 @@ namespace Ryujinx.Horizon.Sdk.Hid for (int i = 0; i < npadConfig.Length; ++i) { npadConfig[i].Player = (PlayerIndex)inputConfig[i].PlayerIndex; - npadConfig[i].Type = (ControllerType)inputConfig[i].ControllerType; + npadConfig[i].Type = inputConfig[i].ControllerType; } Npads.Configure(npadConfig); diff --git a/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/NpadDevices.cs b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/NpadDevices.cs index c1c9692646..f95f07c74f 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/NpadDevices.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/NpadDevices.cs @@ -18,7 +18,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices private long _lastNotifyTimestamp; public const int MaxControllers = 9; // Players 1-8 and Handheld - private ControllerType[] _configuredTypes; + private NpadStyleTag[] _configuredTypes; private readonly Event[] _styleSetUpdateEvents; private readonly bool[] _supportedPlayers; private VibrationValue _neutralVibrationValue = new() @@ -31,18 +31,18 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices internal NpadJoyHoldType JoyHold { get; set; } internal bool SixAxisActive = false; // TODO: link to hidserver when implemented - internal ControllerType SupportedStyleSets { get; set; } + internal NpadStyleTag SupportedStyleSets { get; set; } public Dictionary> RumbleQueues = new(); public Dictionary LastVibrationValues = new(); public NpadDevices(bool active = true) : base(active) { - _configuredTypes = new ControllerType[MaxControllers]; + _configuredTypes = new NpadStyleTag[MaxControllers]; - SupportedStyleSets = ControllerType.Handheld | ControllerType.JoyconPair | - ControllerType.JoyconLeft | ControllerType.JoyconRight | - ControllerType.ProController; + SupportedStyleSets = NpadStyleTag.Handheld | NpadStyleTag.JoyDual | + NpadStyleTag.JoyLeft | NpadStyleTag.JoyRight | + NpadStyleTag.FullKey; _supportedPlayers = new bool[MaxControllers]; _supportedPlayers.AsSpan().Fill(true); @@ -89,23 +89,23 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices } } - public bool Validate(int playerMin, int playerMax, ControllerType acceptedTypes, out int configuredCount, out PlayerIndex primaryIndex) + public bool Validate(int playerMin, int playerMax, NpadStyleTag acceptedTypes, out int configuredCount, out PlayerIndex primaryIndex) { primaryIndex = PlayerIndex.Unknown; configuredCount = 0; for (int i = 0; i < MaxControllers; ++i) { - ControllerType npad = _configuredTypes[i]; + NpadStyleTag npad = _configuredTypes[i]; - if (npad == ControllerType.Handheld && _device.System.State.DockedMode) + if (npad == NpadStyleTag.Handheld && _device.System.State.DockedMode) { continue; } - ControllerType currentType = (ControllerType)_device.Hid.SharedMemory.Npads[i].InternalState.StyleSet; + NpadStyleTag currentType = (NpadStyleTag)_device.Hid.SharedMemory.Npads[i].InternalState.StyleSet; - if (currentType != ControllerType.None && (npad & acceptedTypes) != 0 && _supportedPlayers[i]) + if (currentType != NpadStyleTag.None && (npad & acceptedTypes) != 0 && _supportedPlayers[i]) { configuredCount++; if (primaryIndex == PlayerIndex.Unknown) @@ -125,19 +125,19 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices public void Configure(params ControllerConfig[] configs) { - _configuredTypes = new ControllerType[MaxControllers]; + _configuredTypes = new NpadStyleTag[MaxControllers]; for (int i = 0; i < configs.Length; ++i) { PlayerIndex player = configs[i].Player; - ControllerType controllerType = configs[i].Type; + NpadStyleTag controllerType = configs[i].Type; if (player > PlayerIndex.Handheld) { throw new InvalidOperationException("Player must be Player1-8 or Handheld"); } - if (controllerType == ControllerType.Handheld) + if (controllerType == NpadStyleTag.Handheld) { player = PlayerIndex.Handheld; } @@ -178,28 +178,28 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices // Remap/Init if necessary for (int i = 0; i < MaxControllers; ++i) { - ControllerType config = _configuredTypes[i]; + NpadStyleTag config = _configuredTypes[i]; // Remove Handheld config when Docked - if (config == ControllerType.Handheld && _device.System.State.DockedMode) + if (config == NpadStyleTag.Handheld && _device.System.State.DockedMode) { - config = ControllerType.None; + config = NpadStyleTag.None; } // Auto-remap ProController and JoyconPair - if (config == ControllerType.JoyconPair && (SupportedStyleSets & ControllerType.JoyconPair) == 0 && (SupportedStyleSets & ControllerType.ProController) != 0) + if (config == NpadStyleTag.JoyDual && (SupportedStyleSets & NpadStyleTag.JoyDual) == 0 && (SupportedStyleSets & NpadStyleTag.FullKey) != 0) { - config = ControllerType.ProController; + config = NpadStyleTag.FullKey; } - else if (config == ControllerType.ProController && (SupportedStyleSets & ControllerType.ProController) == 0 && (SupportedStyleSets & ControllerType.JoyconPair) != 0) + else if (config == NpadStyleTag.FullKey && (SupportedStyleSets & NpadStyleTag.FullKey) == 0 && (SupportedStyleSets & NpadStyleTag.JoyDual) != 0) { - config = ControllerType.JoyconPair; + config = NpadStyleTag.JoyDual; } // Check StyleSet and PlayerSet if ((config & SupportedStyleSets) == 0 || !_supportedPlayers[i]) { - config = ControllerType.None; + config = NpadStyleTag.None; } SetupNpad((PlayerIndex)i, config); @@ -212,11 +212,11 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices } } - private void SetupNpad(PlayerIndex player, ControllerType type) + private void SetupNpad(PlayerIndex player, NpadStyleTag type) { ref NpadInternalState controller = ref _device.Hid.SharedMemory.Npads[(int)player].InternalState; - ControllerType oldType = (ControllerType)controller.StyleSet; + NpadStyleTag oldType = controller.StyleSet; if (oldType == type) { @@ -225,7 +225,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices controller = NpadInternalState.Create(); // Reset it - if (type == ControllerType.None) + if (type == NpadStyleTag.None) { _styleSetUpdateEvents[(int)player].ReadableEvent.Signal(); // Signal disconnect _activeCount--; @@ -255,7 +255,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices switch (type) { #pragma warning disable IDE0055 // Disable formatting - case ControllerType.ProController: + case NpadStyleTag.FullKey: controller.StyleSet = NpadStyleTag.FullKey; controller.DeviceType = DeviceType.FullKey; controller.SystemProperties |= NpadSystemProperties.IsAbxyButtonOriented | @@ -263,7 +263,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices NpadSystemProperties.IsMinusAvailable; controller.AppletFooterUiType = AppletFooterUiType.SwitchProController; break; - case ControllerType.Handheld: + case NpadStyleTag.Handheld: controller.StyleSet = NpadStyleTag.Handheld; controller.DeviceType = DeviceType.HandheldLeft | DeviceType.HandheldRight; @@ -272,7 +272,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices NpadSystemProperties.IsMinusAvailable; controller.AppletFooterUiType = AppletFooterUiType.HandheldJoyConLeftJoyConRight; break; - case ControllerType.JoyconPair: + case NpadStyleTag.JoyDual: controller.StyleSet = NpadStyleTag.JoyDual; controller.DeviceType = DeviceType.JoyLeft | DeviceType.JoyRight; @@ -281,7 +281,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices NpadSystemProperties.IsMinusAvailable; controller.AppletFooterUiType = _device.System.State.DockedMode ? AppletFooterUiType.JoyDual : AppletFooterUiType.HandheldJoyConLeftJoyConRight; break; - case ControllerType.JoyconLeft: + case NpadStyleTag.JoyLeft: controller.StyleSet = NpadStyleTag.JoyLeft; controller.JoyAssignmentMode = NpadJoyAssignmentMode.Single; controller.DeviceType = DeviceType.JoyLeft; @@ -289,7 +289,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices NpadSystemProperties.IsMinusAvailable; controller.AppletFooterUiType = _device.System.State.DockedMode ? AppletFooterUiType.JoyDualLeftOnly : AppletFooterUiType.HandheldJoyConLeftOnly; break; - case ControllerType.JoyconRight: + case NpadStyleTag.JoyRight: controller.StyleSet = NpadStyleTag.JoyRight; controller.JoyAssignmentMode = NpadJoyAssignmentMode.Single; controller.DeviceType = DeviceType.JoyRight; @@ -297,7 +297,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices NpadSystemProperties.IsPlusAvailable; controller.AppletFooterUiType = _device.System.State.DockedMode ? AppletFooterUiType.JoyDualRightOnly : AppletFooterUiType.HandheldJoyConRightOnly; break; - case ControllerType.Pokeball: + case NpadStyleTag.Palma: controller.StyleSet = NpadStyleTag.Palma; controller.DeviceType = DeviceType.Palma; controller.AppletFooterUiType = AppletFooterUiType.None; diff --git a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs index cbea40e257..ef8b8744f3 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs @@ -15,8 +15,8 @@ namespace Ryujinx.Horizon.Sdk.Hid 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 AcquireXpadIdEventHandle(out int arg0, ulong xpadId); + Result ReleaseXpadIdEventHandle(ulong xpadId); Result ActivateXpad(AppletResourceUserId appletResourceUserId, uint basixXpadId, ulong pid); Result GetXpadIds(out long arg0, Span basicXpadIds); Result ActivateJoyXpad(uint joyXpadId); @@ -35,14 +35,14 @@ namespace Ryujinx.Horizon.Sdk.Hid 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 SetAccelerometerParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, float x, float y, ulong pid); + Result GetAccelerometerParameters(out float x, out float y, 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 SetAccelerometerPlayMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, uint accelerometerPlayMode, ulong pid); + Result GetAccelerometerPlayMode(out uint accelerometerPlayMode, 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 SetGyroscopeZeroDriftMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, GyroscopeZeroDriftMode gyroscopeZeroDriftMode, ulong pid); + Result GetGyroscopeZeroDriftMode(out GyroscopeZeroDriftMode gyroscopeZeroDriftMode, 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); @@ -52,9 +52,9 @@ namespace Ryujinx.Horizon.Sdk.Hid 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 ActivateGesture(AppletResourceUserId appletResourceUserId, int unknown, ulong pid); + Result SetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, NpadStyleTag supportedStyleSets, ulong pid); + Result GetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, out NpadStyleTag supportedStyleSets, ulong pid); Result SetSupportedNpadIdType(AppletResourceUserId appletResourceUserId, ReadOnlySpan arg1, ulong pid); Result ActivateNpad(AppletResourceUserId appletResourceUserId, ulong pid); Result DeactivateNpad(AppletResourceUserId appletResourceUserId, ulong pid); @@ -90,7 +90,7 @@ namespace Ryujinx.Horizon.Sdk.Hid 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 IsVibrationDeviceMounted(out bool isVibrationDeviceMounted, 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); @@ -98,17 +98,17 @@ namespace Ryujinx.Horizon.Sdk.Hid 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 InitializeSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, int nativeHandle0, ulong counter0, int nativeHandle1, ulong counter1, 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 SetSevenSixAxisSensorFusionStrength(AppletResourceUserId appletResourceUserId, float sevenSixAxisSensorFusionStrength, ulong pid); + Result GetSevenSixAxisSensorFusionStrength(out float sevenSixSensorFusionStrength, 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 IsUsbFullKeyControllerEnabled(out bool isUsbFullKeyControllerEnabled); + Result EnableUsbFullKeyController(bool usbFullKeyControllerEnabled); + Result IsUsbFullKeyControllerConnected(out bool isConnected, uint unknown); + Result HasBattery(out bool hasBattery, uint npadId); + Result HasLeftRightBattery(out bool hasLeftBattery, out bool hasRightBattery, uint npadId); + Result GetNpadInterfaceType(out byte npadInterfaceType, uint npadId); Result GetNpadLeftRightInterfaceType(out byte arg0, out byte arg1, uint arg2); Result GetNpadOfHighestBatteryLevel(out uint arg0, ReadOnlySpan arg1, AppletResourceUserId appletResourceUserId, ulong pid); Result GetPalmaConnectionHandle(out PalmaConnectionHandle palmaConnectionHandle, uint arg1, AppletResourceUserId appletResourceUserId, ulong pid); @@ -133,7 +133,7 @@ namespace Ryujinx.Horizon.Sdk.Hid 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 SetIsPalmaAllConnectable(AppletResourceUserId appletResourceUserId, bool unknownBool, ulong pid); Result SetIsPalmaPairedConnectable(AppletResourceUserId appletResourceUserId, bool arg1, ulong pid); Result PairPalma(PalmaConnectionHandle palmaConnectionHandle); Result SetPalmaBoostMode(bool arg0); @@ -141,9 +141,9 @@ namespace Ryujinx.Horizon.Sdk.Hid Result EnablePalmaBoostMode(AppletResourceUserId appletResourceUserId, bool arg1, ulong pid); Result GetPalmaBluetoothAddress(out Address arg0, PalmaConnectionHandle palmaConnectionHandle); Result SetDisallowedPalmaConnection(AppletResourceUserId appletResourceUserId, ReadOnlySpan
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 SetNpadCommunicationMode(AppletResourceUserId appletResourceUserId, long npadCommunicationMode, ulong pid); + Result GetNpadCommunicationMode(out long npadCommunicationMode); + Result SetTouchScreenConfiguration(AppletResourceUserId appletResourceUserId, TouchScreenConfigurationForNx touchScreenConfigurationForNx, ulong pid); Result IsFirmwareUpdateNeededForNotification(out bool arg0, int arg1, AppletResourceUserId appletResourceUserId, ulong pid); Result ActivateDigitizer(AppletResourceUserId appletResourceUserId, ulong pid); } diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Npad/ControllerType.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/ControllerType.cs deleted file mode 100644 index 4d7200e4f9..0000000000 --- a/src/Ryujinx.Horizon/Sdk/Hid/Npad/ControllerType.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; - -namespace Ryujinx.Horizon.Sdk.Hid.Npad -{ - [Flags] - public enum ControllerType - { - None, - ProController = 1 << 0, - Handheld = 1 << 1, - JoyconPair = 1 << 2, - JoyconLeft = 1 << 3, - JoyconRight = 1 << 4, - Invalid = 1 << 5, - Pokeball = 1 << 6, - SystemExternal = 1 << 29, - System = 1 << 30, - } -} diff --git a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs index 0eb45a315b..3f6f73cd47 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/SharedMemory/Npad/NpadStyleTag.cs @@ -6,7 +6,7 @@ namespace Ryujinx.Horizon.Sdk.Hid /// Nintendo pad style ///
[Flags] - enum NpadStyleTag : uint + public enum NpadStyleTag : uint { /// /// No type. From ca6a667853faeb531e977170092c2efcb623c30f Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sat, 20 Jul 2024 16:24:55 +0100 Subject: [PATCH 07/11] Decorators --- .../HOS/Services/Hid/IHidServer.cs | 12 ----- src/Ryujinx.Horizon/Hid/HidServer.cs | 48 ++++++++++--------- src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs | 4 +- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs index 415b629b77..cd5d45bde1 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs @@ -120,18 +120,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(51)] - // ActivateXpad(nn::hid::BasicXpadId, nn::applet::AppletResourceUserId) - public ResultCode ActivateXpad(ServiceCtx context) - { - int basicXpadId = context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, basicXpadId }); - - return ResultCode.Success; - } - [CommandCmif(55)] // GetXpadIds() -> long IdsCount, buffer, type: 0xa> public ResultCode GetXpadIds(ServiceCtx context) diff --git a/src/Ryujinx.Horizon/Hid/HidServer.cs b/src/Ryujinx.Horizon/Hid/HidServer.cs index 115f9fdf5b..ec605ceb1e 100644 --- a/src/Ryujinx.Horizon/Hid/HidServer.cs +++ b/src/Ryujinx.Horizon/Hid/HidServer.cs @@ -7,6 +7,7 @@ using Ryujinx.Horizon.Sdk.Hid.Npad; using Ryujinx.Horizon.Sdk.Hid.SixAxis; using Ryujinx.Horizon.Sdk.Hid.Vibration; using Ryujinx.Horizon.Sdk.Sf; +using Ryujinx.Horizon.Sdk.Sf.Hipc; using System; namespace Ryujinx.Horizon.Hid @@ -148,7 +149,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(40)] - public Result AcquireXpadIdEventHandle(out int arg0, ulong xpadId) + public Result AcquireXpadIdEventHandle([CopyHandle] out int arg0, ulong xpadId) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -164,16 +165,19 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(51)] - public Result ActivateXpad(AppletResourceUserId appletResourceUserId, uint basixXpadId, [ClientProcessId] ulong pid) + public Result ActivateXpad(AppletResourceUserId appletResourceUserId, uint basicXpadId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, basicXpadId }); return Result.Success; } [CmifCommand(55)] - public Result GetXpadIds(out long arg0, Span basicXpadIds) + public Result GetXpadIds(out long idCount, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.Pointer)] Span basicXpadIds) { + // There aren't any Xpads, so we return 0 and write nothing inside the buffer. + idCount = 0; + Logger.Stub?.PrintStub(LogClass.ServiceHid); return Result.Success; @@ -188,7 +192,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(58)] - public Result GetJoyXpadLifoHandle(out int arg0, uint joyXpadId) + public Result GetJoyXpadLifoHandle([CopyHandle] out int arg0, uint joyXpadId) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -196,7 +200,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(59)] - public Result GetJoyXpadIds(out long arg0, Span joyXpadIds) + public Result GetJoyXpadIds(out long arg0, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.Pointer)] Span joyXpadIds) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -220,7 +224,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(62)] - public Result GetSixAxisSensorLifoHandle(out int arg0, uint basixXpadId) + public Result GetSixAxisSensorLifoHandle([CopyHandle] out int arg0, uint basixXpadId) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -244,7 +248,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(65)] - public Result GetJoySixAxisSensorLifoHandle(out int arg0, uint joyXpadId) + public Result GetJoySixAxisSensorLifoHandle([CopyHandle] out int arg0, uint joyXpadId) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -436,7 +440,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(86)] - public Result StoreSixAxisSensorCalibrationParameter(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, in SixAxisSensorCalibrationParameter sixAxisSensorCalibrationParameter, [ClientProcessId] ulong pid) + public Result StoreSixAxisSensorCalibrationParameter(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [Buffer(HipcBufferFlags.In | HipcBufferFlags.MapAlias, 0x744)] in SixAxisSensorCalibrationParameter sixAxisSensorCalibrationParameter, [ClientProcessId] ulong pid) { Logger.Stub?.PrintStub(LogClass.ServiceHid, new { sixAxisSensorHandle, sixAxisSensorCalibrationParameter }); @@ -444,7 +448,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(87)] - public Result LoadSixAxisSensorCalibrationParameter(AppletResourceUserId appletResourceUserId, out SixAxisSensorCalibrationParameter sixAxisSensorCalibrationParameter, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + public Result LoadSixAxisSensorCalibrationParameter(AppletResourceUserId appletResourceUserId, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias, 0x744)] out SixAxisSensorCalibrationParameter sixAxisSensorCalibrationParameter, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { // TODO: CalibrationParameter have to be determined. @@ -454,7 +458,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(88)] - public Result GetSixAxisSensorIcInformation(AppletResourceUserId appletResourceUserId, out SixAxisSensorIcInformation sixAxisSensorIcInformation, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + public Result GetSixAxisSensorIcInformation(AppletResourceUserId appletResourceUserId, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.Pointer, 0xC8)] out SixAxisSensorIcInformation sixAxisSensorIcInformation, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { // TODO: IcInformation have to be determined. @@ -500,7 +504,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(102)] - public Result SetSupportedNpadIdType(AppletResourceUserId appletResourceUserId, ReadOnlySpan arg1, [ClientProcessId] ulong pid) + public Result SetSupportedNpadIdType(AppletResourceUserId appletResourceUserId, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan arg1, [ClientProcessId] ulong pid) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -524,7 +528,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(106)] - public Result AcquireNpadStyleSetUpdateEventHandle(AppletResourceUserId appletResourceUserId, out int arg1, uint arg2, ulong arg3, [ClientProcessId] ulong pid) + public Result AcquireNpadStyleSetUpdateEventHandle(AppletResourceUserId appletResourceUserId, [CopyHandle] out int arg1, uint arg2, ulong arg3, [ClientProcessId] ulong pid) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -740,7 +744,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(206)] - public Result SendVibrationValues(AppletResourceUserId appletResourceUserId, ReadOnlySpan vibrationDeviceHandles, ReadOnlySpan vibrationValues) + public Result SendVibrationValues(AppletResourceUserId appletResourceUserId, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan vibrationDeviceHandles, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan vibrationValues) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -847,7 +851,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(306)] - public Result InitializeSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, int nativeHandle0, ulong counter0, int nativeHandle1, ulong counter1, [ClientProcessId] ulong pid) + public Result InitializeSevenSixAxisSensor(AppletResourceUserId appletResourceUserId, [CopyHandle] int nativeHandle0, ulong counter0, [CopyHandle] int nativeHandle1, ulong counter1, [ClientProcessId] ulong pid) { // TODO: Determine if array is a buffer or not... @@ -962,7 +966,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(407)] - public Result GetNpadOfHighestBatteryLevel(out uint arg0, ReadOnlySpan arg1, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + public Result GetNpadOfHighestBatteryLevel(out uint arg0, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan arg1, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -986,7 +990,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(502)] - public Result AcquirePalmaOperationCompleteEvent(out int arg0, PalmaConnectionHandle palmaConnectionHandle) + public Result AcquirePalmaOperationCompleteEvent([CopyHandle] out int arg0, PalmaConnectionHandle palmaConnectionHandle) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -994,7 +998,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(503)] - public Result GetPalmaOperationInfo(out ulong arg0, Span arg1, PalmaConnectionHandle palmaConnectionHandle) + public Result GetPalmaOperationInfo(out ulong arg0, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span arg1, PalmaConnectionHandle palmaConnectionHandle) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -1050,7 +1054,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(510)] - public Result WritePalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2, in PalmaApplicationSectionAccessBuffer palmaApplicationSectionAccessBuffer) + public Result WritePalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer, 0x100)] in PalmaApplicationSectionAccessBuffer palmaApplicationSectionAccessBuffer) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -1082,7 +1086,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(514)] - public Result WritePalmaRgbLedPatternEntry(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ReadOnlySpan arg2) + public Result WritePalmaRgbLedPatternEntry(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, [Buffer(HipcBufferFlags.In | HipcBufferFlags.MapAlias)] ReadOnlySpan arg2) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -1090,7 +1094,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(515)] - public Result WritePalmaWaveEntry(PalmaConnectionHandle palmaConnectionHandle, PalmaWaveSet palmaWaveSet, ulong arg2, int arg3, ulong arg4, ulong arg5) + public Result WritePalmaWaveEntry(PalmaConnectionHandle palmaConnectionHandle, PalmaWaveSet palmaWaveSet, ulong arg2, [CopyHandle] int arg3, ulong arg4, ulong arg5) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -1202,7 +1206,7 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(529)] - public Result SetDisallowedPalmaConnection(AppletResourceUserId appletResourceUserId, ReadOnlySpan
arg1, [ClientProcessId] ulong pid) + public Result SetDisallowedPalmaConnection(AppletResourceUserId appletResourceUserId, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan
arg1, [ClientProcessId] ulong pid) { Logger.Stub?.PrintStub(LogClass.ServiceHid); diff --git a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs index ef8b8744f3..ac49c95ccf 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs @@ -17,8 +17,8 @@ namespace Ryujinx.Horizon.Sdk.Hid Result SendKeyboardLockKeyEvent(AppletResourceUserId appletResourceUserId, KeyboardLockKeyEvent keyboardLockKeyEvent, ulong pid); Result AcquireXpadIdEventHandle(out int arg0, ulong xpadId); Result ReleaseXpadIdEventHandle(ulong xpadId); - Result ActivateXpad(AppletResourceUserId appletResourceUserId, uint basixXpadId, ulong pid); - Result GetXpadIds(out long arg0, Span basicXpadIds); + Result ActivateXpad(AppletResourceUserId appletResourceUserId, uint basicXpadId, ulong pid); + Result GetXpadIds(out long idCount, Span basicXpadIds); Result ActivateJoyXpad(uint joyXpadId); Result GetJoyXpadLifoHandle(out int arg0, uint joyXpadId); Result GetJoyXpadIds(out long arg0, Span joyXpadIds); From 818467012cc03512352bc2fcc7946b777d0af884 Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sat, 20 Jul 2024 16:53:29 +0100 Subject: [PATCH 08/11] More HidServer progress --- .../HOS/Services/Hid/HidServer/HidUtils.cs | 7 - .../HOS/Services/Hid/IHidServer.cs | 414 ------------------ src/Ryujinx.Horizon/Hid/HidResult.cs | 14 + src/Ryujinx.Horizon/Hid/HidServer.cs | 190 ++++++-- .../Sdk/Hid/HidDevices/NpadDevices.cs | 10 +- src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs | 34 +- .../Hid/Vibration/VibrationDeviceHandle.cs | 6 +- .../Sdk/Hid/Vibration/VibrationDeviceValue.cs | 8 - 8 files changed, 184 insertions(+), 499 deletions(-) create mode 100644 src/Ryujinx.Horizon/Hid/HidResult.cs delete mode 100644 src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceValue.cs diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/HidUtils.cs b/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/HidUtils.cs index 209b58ee39..5c467e03ee 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/HidUtils.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/HidServer/HidUtils.cs @@ -40,12 +40,5 @@ namespace Ryujinx.HLE.HOS.Services.Hid.HidServer _ => throw new ArgumentOutOfRangeException(nameof(index)), #pragma warning restore IDE0055 }; - - public static bool IsValidNpadIdType(NpadIdType npadIdType) - { - return (npadIdType >= NpadIdType.Player1 && npadIdType <= NpadIdType.Player8) || - npadIdType == NpadIdType.Handheld || - npadIdType == NpadIdType.Unknown; - } } } diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs index cd5d45bde1..b7f86aa350 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs @@ -76,19 +76,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(32)] - // SendKeyboardLockKeyEvent(uint flags, pid) - public ResultCode SendKeyboardLockKeyEvent(ServiceCtx context) - { - uint flags = context.RequestData.ReadUInt32(); - - // NOTE: This signal the keyboard driver about lock events. - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { flags }); - - return ResultCode.Success; - } - [CommandCmif(40)] // AcquireXpadIdEventHandle(ulong XpadId) -> nn::sf::NativeHandle public ResultCode AcquireXpadIdEventHandle(ServiceCtx context) @@ -120,29 +107,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(55)] - // GetXpadIds() -> long IdsCount, buffer, type: 0xa> - public ResultCode GetXpadIds(ServiceCtx context) - { - // There is any Xpad, so we return 0 and write nothing inside the type-0xa buffer. - context.ResponseData.Write(0L); - - Logger.Stub?.PrintStub(LogClass.ServiceHid); - - return ResultCode.Success; - } - - [CommandCmif(56)] - // ActivateJoyXpad(nn::hid::JoyXpadId) - public ResultCode ActivateJoyXpad(ServiceCtx context) - { - int joyXpadId = context.RequestData.ReadInt32(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { joyXpadId }); - - return ResultCode.Success; - } - [CommandCmif(58)] // GetJoyXpadLifoHandle(nn::hid::JoyXpadId) -> nn::sf::NativeHandle public ResultCode GetJoyXpadLifoHandle(ServiceCtx context) @@ -158,40 +122,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(59)] - // GetJoyXpadIds() -> long IdsCount, buffer, type: 0xa> - public ResultCode GetJoyXpadIds(ServiceCtx context) - { - // There is any JoyXpad, so we return 0 and write nothing inside the type-0xa buffer. - context.ResponseData.Write(0L); - - Logger.Stub?.PrintStub(LogClass.ServiceHid); - - return ResultCode.Success; - } - - [CommandCmif(60)] - // ActivateSixAxisSensor(nn::hid::BasicXpadId) - public ResultCode ActivateSixAxisSensor(ServiceCtx context) - { - int basicXpadId = context.RequestData.ReadInt32(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { basicXpadId }); - - return ResultCode.Success; - } - - [CommandCmif(61)] - // DeactivateSixAxisSensor(nn::hid::BasicXpadId) - public ResultCode DeactivateSixAxisSensor(ServiceCtx context) - { - int basicXpadId = context.RequestData.ReadInt32(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { basicXpadId }); - - return ResultCode.Success; - } - [CommandCmif(62)] // GetSixAxisSensorLifoHandle(nn::hid::BasicXpadId) -> nn::sf::NativeHandle public ResultCode GetSixAxisSensorLifoHandle(ServiceCtx context) @@ -207,28 +137,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(63)] - // ActivateJoySixAxisSensor(nn::hid::JoyXpadId) - public ResultCode ActivateJoySixAxisSensor(ServiceCtx context) - { - int joyXpadId = context.RequestData.ReadInt32(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { joyXpadId }); - - return ResultCode.Success; - } - - [CommandCmif(64)] - // DeactivateJoySixAxisSensor(nn::hid::JoyXpadId) - public ResultCode DeactivateJoySixAxisSensor(ServiceCtx context) - { - int joyXpadId = context.RequestData.ReadInt32(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { joyXpadId }); - - return ResultCode.Success; - } - [CommandCmif(65)] // GetJoySixAxisSensorLifoHandle(nn::hid::JoyXpadId) -> nn::sf::NativeHandle public ResultCode GetJoySixAxisSensorLifoHandle(ServiceCtx context) @@ -244,144 +152,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(66)] - // StartSixAxisSensor(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) - public ResultCode StartSixAxisSensor(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle }); - - return ResultCode.Success; - } - - [CommandCmif(67)] - // StopSixAxisSensor(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) - public ResultCode StopSixAxisSensor(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle }); - - return ResultCode.Success; - } - - [CommandCmif(68)] - // IsSixAxisSensorFusionEnabled(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) -> bool IsEnabled - public ResultCode IsSixAxisSensorFusionEnabled(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.ResponseData.Write(_sixAxisSensorFusionEnabled); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _sixAxisSensorFusionEnabled }); - - return ResultCode.Success; - } - - [CommandCmif(69)] - // EnableSixAxisSensorFusion(bool Enabled, nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) - public ResultCode EnableSixAxisSensorFusion(ServiceCtx context) - { - _sixAxisSensorFusionEnabled = context.RequestData.ReadUInt32() != 0; - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _sixAxisSensorFusionEnabled }); - - return ResultCode.Success; - } - - [CommandCmif(70)] - // SetSixAxisSensorFusionParameters(nn::hid::SixAxisSensorHandle, float RevisePower, float ReviseRange, nn::applet::AppletResourceUserId) - public ResultCode SetSixAxisSensorFusionParameters(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - - _sensorFusionParams = new SensorFusionParameters - { - RevisePower = context.RequestData.ReadInt32(), - ReviseRange = context.RequestData.ReadInt32(), - }; - - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _sensorFusionParams.RevisePower, _sensorFusionParams.ReviseRange }); - - return ResultCode.Success; - } - - [CommandCmif(71)] - // GetSixAxisSensorFusionParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) -> float RevisePower, float ReviseRange) - public ResultCode GetSixAxisSensorFusionParameters(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.ResponseData.Write(_sensorFusionParams.RevisePower); - context.ResponseData.Write(_sensorFusionParams.ReviseRange); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _sensorFusionParams.RevisePower, _sensorFusionParams.ReviseRange }); - - return ResultCode.Success; - } - - [CommandCmif(72)] - // ResetSixAxisSensorFusionParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) - public ResultCode ResetSixAxisSensorFusionParameters(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - _sensorFusionParams.RevisePower = 0; - _sensorFusionParams.ReviseRange = 0; - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _sensorFusionParams.RevisePower, _sensorFusionParams.ReviseRange }); - - return ResultCode.Success; - } - - [CommandCmif(82)] - // IsSixAxisSensorAtRest(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId) -> bool IsAsRest - public ResultCode IsSixAxisSensorAtRest(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - bool isAtRest = true; - - context.ResponseData.Write(isAtRest); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, isAtRest }); - - return ResultCode.Success; - } - - [CommandCmif(83)] // 6.0.0+ - // IsFirmwareUpdateAvailableForSixAxisSensor(nn::hid::AppletResourceUserId, nn::hid::SixAxisSensorHandle, pid) -> bool UpdateAvailable - public ResultCode IsFirmwareUpdateAvailableForSixAxisSensor(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.ResponseData.Write(_isFirmwareUpdateAvailableForSixAxisSensor); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _isFirmwareUpdateAvailableForSixAxisSensor }); - - return ResultCode.Success; - } - [CommandCmif(84)] // 13.0.0+ // EnableSixAxisSensorUnalteredPassthrough(nn::applet::AppletResourceUserId, nn::hid::SixAxisSensorHandle, u8 enabled) public ResultCode EnableSixAxisSensorUnalteredPassthrough(ServiceCtx context) @@ -816,129 +586,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(200)] - // GetVibrationDeviceInfo(nn::hid::VibrationDeviceHandle) -> nn::hid::VibrationDeviceInfo - public ResultCode GetVibrationDeviceInfo(ServiceCtx context) - { - VibrationDeviceHandle deviceHandle = context.RequestData.ReadStruct(); - NpadStyleIndex deviceType = (NpadStyleIndex)deviceHandle.DeviceType; - NpadIdType npadIdType = (NpadIdType)deviceHandle.PlayerId; - - if (deviceType < NpadStyleIndex.System || deviceType >= NpadStyleIndex.FullKey) - { - if (!HidUtils.IsValidNpadIdType(npadIdType)) - { - return ResultCode.InvalidNpadIdType; - } - - if (deviceHandle.Position > 1) - { - return ResultCode.InvalidDeviceIndex; - } - - VibrationDeviceType vibrationDeviceType = VibrationDeviceType.None; - - if (Enum.IsDefined(deviceType)) - { - vibrationDeviceType = VibrationDeviceType.LinearResonantActuator; - } - else if ((uint)deviceType == 8) - { - vibrationDeviceType = VibrationDeviceType.GcErm; - } - - VibrationDevicePosition vibrationDevicePosition = VibrationDevicePosition.None; - - if (vibrationDeviceType == VibrationDeviceType.LinearResonantActuator) - { - if (deviceHandle.Position == 0) - { - vibrationDevicePosition = VibrationDevicePosition.Left; - } - else if (deviceHandle.Position == 1) - { - vibrationDevicePosition = VibrationDevicePosition.Right; - } - else - { - throw new InvalidOperationException($"{nameof(deviceHandle.Position)} contains an invalid value: {deviceHandle.Position}"); - } - } - - VibrationDeviceValue deviceInfo = new() - { - DeviceType = vibrationDeviceType, - Position = vibrationDevicePosition, - }; - - context.ResponseData.WriteStruct(deviceInfo); - - return ResultCode.Success; - } - - return ResultCode.InvalidNpadDeviceType; - } - - [CommandCmif(201)] - // SendVibrationValue(nn::hid::VibrationDeviceHandle, nn::hid::VibrationValue, nn::applet::AppletResourceUserId) - public ResultCode SendVibrationValue(ServiceCtx context) - { - VibrationDeviceHandle deviceHandle = new() - { - DeviceType = context.RequestData.ReadByte(), - PlayerId = context.RequestData.ReadByte(), - Position = context.RequestData.ReadByte(), - Reserved = context.RequestData.ReadByte(), - }; - - VibrationValue vibrationValue = new() - { - AmplitudeLow = context.RequestData.ReadSingle(), - FrequencyLow = context.RequestData.ReadSingle(), - AmplitudeHigh = context.RequestData.ReadSingle(), - FrequencyHigh = context.RequestData.ReadSingle(), - }; - -#pragma warning disable IDE0059 // Remove unnecessary value assignment - long appletResourceUserId = context.RequestData.ReadInt64(); -#pragma warning restore IDE0059 - - Dictionary dualVibrationValues = new() - { - [deviceHandle.Position] = vibrationValue, - }; - - context.Device.Hid.Npads.UpdateRumbleQueue((PlayerIndex)deviceHandle.PlayerId, dualVibrationValues); - - return ResultCode.Success; - } - - [CommandCmif(202)] - // GetActualVibrationValue(nn::hid::VibrationDeviceHandle, nn::applet::AppletResourceUserId) -> nn::hid::VibrationValue - public ResultCode GetActualVibrationValue(ServiceCtx context) - { - VibrationDeviceHandle deviceHandle = new() - { - DeviceType = context.RequestData.ReadByte(), - PlayerId = context.RequestData.ReadByte(), - Position = context.RequestData.ReadByte(), - Reserved = context.RequestData.ReadByte(), - }; - -#pragma warning disable IDE0059 // Remove unnecessary value assignment - long appletResourceUserId = context.RequestData.ReadInt64(); -#pragma warning restore IDE0059 - - VibrationValue vibrationValue = context.Device.Hid.Npads.GetLastVibrationValue((PlayerIndex)deviceHandle.PlayerId, deviceHandle.Position); - - context.ResponseData.Write(vibrationValue.AmplitudeLow); - context.ResponseData.Write(vibrationValue.FrequencyLow); - context.ResponseData.Write(vibrationValue.AmplitudeHigh); - context.ResponseData.Write(vibrationValue.FrequencyHigh); - - return ResultCode.Success; - } - [CommandCmif(203)] // CreateActiveVibrationDeviceList() -> object public ResultCode CreateActiveVibrationDeviceList(ServiceCtx context) @@ -948,26 +595,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(204)] - // PermitVibration(bool Enable) - public ResultCode PermitVibration(ServiceCtx context) - { - _vibrationPermitted = context.RequestData.ReadBoolean(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { _vibrationPermitted }); - - return ResultCode.Success; - } - - [CommandCmif(205)] - // IsVibrationPermitted() -> bool IsEnabled - public ResultCode IsVibrationPermitted(ServiceCtx context) - { - context.ResponseData.Write(_vibrationPermitted); - - return ResultCode.Success; - } - [CommandCmif(206)] // SendVibrationValues(nn::applet::AppletResourceUserId, buffer, type: 9>, buffer, type: 9>) public ResultCode SendVibrationValues(ServiceCtx context) @@ -1013,47 +640,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(207)] // 4.0.0+ - // SendVibrationGcErmCommand(nn::hid::VibrationDeviceHandle, nn::hid::VibrationGcErmCommand, nn::applet::AppletResourceUserId) - public ResultCode SendVibrationGcErmCommand(ServiceCtx context) - { - int vibrationDeviceHandle = context.RequestData.ReadInt32(); - long vibrationGcErmCommand = context.RequestData.ReadInt64(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, vibrationDeviceHandle, vibrationGcErmCommand }); - - return ResultCode.Success; - } - - [CommandCmif(208)] // 4.0.0+ - // GetActualVibrationGcErmCommand(nn::hid::VibrationDeviceHandle, nn::applet::AppletResourceUserId) -> nn::hid::VibrationGcErmCommand - public ResultCode GetActualVibrationGcErmCommand(ServiceCtx context) - { - int vibrationDeviceHandle = context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.ResponseData.Write(_vibrationGcErmCommand); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, vibrationDeviceHandle, _vibrationGcErmCommand }); - - return ResultCode.Success; - } - - [CommandCmif(406)] // 4.0.0+ - // GetNpadLeftRightInterfaceType(uint NpadId) -> uchar LeftInterfaceType, uchar RightInterfaceType - public ResultCode GetNpadLeftRightInterfaceType(ServiceCtx context) - { - int npadId = context.RequestData.ReadInt32(); - - context.ResponseData.Write((byte)0); - context.ResponseData.Write((byte)0); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { npadId, LeftInterfaceType = 0, RightInterfaceType = 0 }); - - return ResultCode.Success; - } - [CommandCmif(500)] // 5.0.0+ // GetPalmaConnectionHandle(uint Unknown0, nn::applet::AppletResourceUserId) -> nn::hid::PalmaConnectionHandle public ResultCode GetPalmaConnectionHandle(ServiceCtx context) diff --git a/src/Ryujinx.Horizon/Hid/HidResult.cs b/src/Ryujinx.Horizon/Hid/HidResult.cs new file mode 100644 index 0000000000..57a2ee6b5d --- /dev/null +++ b/src/Ryujinx.Horizon/Hid/HidResult.cs @@ -0,0 +1,14 @@ +using Ryujinx.Horizon.Common; + +namespace Ryujinx.Horizon.Hid +{ + class HidResult + { + private const int ModuleId = 202; + + public static Result InvalidNpadDeviceType => new Result(ModuleId, 122); + public static Result InvalidNpadIdType => new Result(ModuleId, 123); + public static Result InvalidDeviceIndex => new Result(ModuleId, 124); + public static Result InvalidBufferSize => new Result(ModuleId, 131); + } +} diff --git a/src/Ryujinx.Horizon/Hid/HidServer.cs b/src/Ryujinx.Horizon/Hid/HidServer.cs index ec605ceb1e..f3f6f0029f 100644 --- a/src/Ryujinx.Horizon/Hid/HidServer.cs +++ b/src/Ryujinx.Horizon/Hid/HidServer.cs @@ -9,6 +9,7 @@ using Ryujinx.Horizon.Sdk.Hid.Vibration; using Ryujinx.Horizon.Sdk.Sf; using Ryujinx.Horizon.Sdk.Sf.Hipc; using System; +using System.Collections.Generic; namespace Ryujinx.Horizon.Hid { @@ -35,6 +36,7 @@ namespace Ryujinx.Horizon.Hid private long _npadCommunicationMode; private uint _accelerometerPlayMode; + private readonly VibrationGcErmCommand _vibrationGcErmCommand; private float _sevenSixAxisSensorFusionStrength; private SensorFusionParameters _sensorFusionParams; @@ -151,7 +153,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(40)] public Result AcquireXpadIdEventHandle([CopyHandle] out int arg0, ulong xpadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { xpadId }); return Result.Success; } @@ -159,7 +161,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(41)] public Result ReleaseXpadIdEventHandle(ulong xpadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { xpadId }); return Result.Success; } @@ -186,7 +188,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(56)] public Result ActivateJoyXpad(uint joyXpadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { joyXpadId }); return Result.Success; } @@ -194,39 +196,42 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(58)] public Result GetJoyXpadLifoHandle([CopyHandle] out int arg0, uint joyXpadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { joyXpadId }); return Result.Success; } [CmifCommand(59)] - public Result GetJoyXpadIds(out long arg0, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.Pointer)] Span joyXpadIds) + public Result GetJoyXpadIds(out long idCount, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.Pointer)] Span joyXpadIds) { + // There aren't any JoyXpad, so we return 0 and write nothing inside the buffer. + idCount = 0; + Logger.Stub?.PrintStub(LogClass.ServiceHid); return Result.Success; } [CmifCommand(60)] - public Result ActivateSixAxisSensor(uint basixXpadId) + public Result ActivateSixAxisSensor(uint basicXpadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { basicXpadId }); return Result.Success; } [CmifCommand(61)] - public Result DeactivateSixAxisSensor(uint basixXpadId) + public Result DeactivateSixAxisSensor(uint basicXpadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { basicXpadId }); return Result.Success; } [CmifCommand(62)] - public Result GetSixAxisSensorLifoHandle([CopyHandle] out int arg0, uint basixXpadId) + public Result GetSixAxisSensorLifoHandle([CopyHandle] out int arg0, uint basicXpadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { basicXpadId }); return Result.Success; } @@ -234,7 +239,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(63)] public Result ActivateJoySixAxisSensor(uint joyXpadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { joyXpadId }); return Result.Success; } @@ -242,7 +247,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(64)] public Result DeactivateJoySixAxisSensor(uint joyXpadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { joyXpadId }); return Result.Success; } @@ -250,7 +255,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(65)] public Result GetJoySixAxisSensorLifoHandle([CopyHandle] out int arg0, uint joyXpadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { joyXpadId }); return Result.Success; } @@ -258,7 +263,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(66)] public Result StartSixAxisSensor(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle }); return Result.Success; } @@ -266,39 +271,52 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(67)] public Result StopSixAxisSensor(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle }); return Result.Success; } [CmifCommand(68)] - public Result IsSixAxisSensorFusionEnabled(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + public Result IsSixAxisSensorFusionEnabled(out bool sixAxisSensorFusionEnabled, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + sixAxisSensorFusionEnabled = _sixAxisSensorFusionEnabled; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _sixAxisSensorFusionEnabled }); return Result.Success; } [CmifCommand(69)] - public Result EnableSixAxisSensorFusion(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, bool arg2, [ClientProcessId] ulong pid) + public Result EnableSixAxisSensorFusion(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, bool sixAxisSensorFusionEnabled, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _sixAxisSensorFusionEnabled = sixAxisSensorFusionEnabled; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _sixAxisSensorFusionEnabled }); return Result.Success; } [CmifCommand(70)] - public Result SetSixAxisSensorFusionParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, float arg2, float arg3, [ClientProcessId] ulong pid) + public Result SetSixAxisSensorFusionParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, float revisePower, float reviseRange, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _sensorFusionParams = new SensorFusionParameters + { + RevisePower = revisePower, + ReviseRange = reviseRange + }; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _sensorFusionParams.RevisePower, _sensorFusionParams.ReviseRange }); return Result.Success; } [CmifCommand(71)] - public Result GetSixAxisSensorFusionParameters(out float arg0, out float arg1, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + public Result GetSixAxisSensorFusionParameters(out float revisePower, out float reviseRange, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + revisePower = _sensorFusionParams.RevisePower; + reviseRange = _sensorFusionParams.ReviseRange; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _sensorFusionParams.RevisePower, _sensorFusionParams.ReviseRange }); return Result.Success; } @@ -306,7 +324,10 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(72)] public Result ResetSixAxisSensorFusionParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _sensorFusionParams.RevisePower = 0; + _sensorFusionParams.ReviseRange = 0; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _sensorFusionParams.RevisePower, _sensorFusionParams.ReviseRange }); return Result.Success; } @@ -408,17 +429,21 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(82)] - public Result IsSixAxisSensorAtRest(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + public Result IsSixAxisSensorAtRest(out bool isAtRest, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + isAtRest = true; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, isAtRest }); return Result.Success; } [CmifCommand(83)] - public Result IsFirmwareUpdateAvailableForSixAxisSensor(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + public Result IsFirmwareUpdateAvailableForSixAxisSensor(out bool isFirmwareUpdateAvailableForSixAxisSensor, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + isFirmwareUpdateAvailableForSixAxisSensor = _isFirmwareUpdateAvailableForSixAxisSensor; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _isFirmwareUpdateAvailableForSixAxisSensor }); return Result.Success; } @@ -698,23 +723,80 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(200)] public Result GetVibrationDeviceInfo(out VibrationDeviceInfoForIpc vibrationDeviceInfoForIpc, VibrationDeviceHandle vibrationDeviceHandle) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + NpadStyleIndex deviceType = vibrationDeviceHandle.DeviceType; + NpadIdType npadIdType = vibrationDeviceHandle.PlayerId; + vibrationDeviceInfoForIpc = new(); - return Result.Success; + if (deviceType < NpadStyleIndex.System || deviceType >= NpadStyleIndex.FullKey) + { + if (!IsValidNpadIdType(npadIdType)) + { + return HidResult.InvalidNpadIdType; + } + + if (vibrationDeviceHandle.Position > 1) + { + return HidResult.InvalidDeviceIndex; + } + + VibrationDeviceType vibrationDeviceType = VibrationDeviceType.None; + + if (Enum.IsDefined(deviceType)) + { + vibrationDeviceType = VibrationDeviceType.LinearResonantActuator; + } + else if ((uint)deviceType == 8) + { + vibrationDeviceType = VibrationDeviceType.GcErm; + } + + VibrationDevicePosition vibrationDevicePosition = VibrationDevicePosition.None; + + if (vibrationDeviceType == VibrationDeviceType.LinearResonantActuator) + { + if (vibrationDeviceHandle.Position == 0) + { + vibrationDevicePosition = VibrationDevicePosition.Left; + } + else if (vibrationDeviceHandle.Position == 1) + { + vibrationDevicePosition = VibrationDevicePosition.Right; + } + else + { + throw new InvalidOperationException($"{nameof(vibrationDeviceHandle.Position)} contains an invalid value: {vibrationDeviceHandle.Position}"); + } + } + + vibrationDeviceInfoForIpc = new() + { + DeviceType = vibrationDeviceType, + Position = vibrationDevicePosition, + }; + + return Result.Success; + } + + return HidResult.InvalidNpadDeviceType; } [CmifCommand(201)] - public Result SendVibrationValue(AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, VibrationValue arg2, [ClientProcessId] ulong pid) + public Result SendVibrationValue(AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, VibrationValue vibrationValue, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Dictionary dualVibrationValues = new() + { + [vibrationDeviceHandle.Position] = vibrationValue, + }; + + Npads.UpdateRumbleQueue(vibrationDeviceHandle.PlayerId, dualVibrationValues); return Result.Success; } [CmifCommand(202)] - public Result GetActualVibrationValue(out VibrationValue arg0, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, [ClientProcessId] ulong pid) + public Result GetActualVibrationValue(out VibrationValue vibrationValue, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + vibrationValue = Npads.GetLastVibrationValue(vibrationDeviceHandle.PlayerId, vibrationDeviceHandle.Position); return Result.Success; } @@ -728,17 +810,19 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(204)] - public Result PermitVibration(bool arg0) + public Result PermitVibration(bool vibrationPermitted) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _vibrationPermitted = vibrationPermitted; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { _vibrationPermitted }); return Result.Success; } [CmifCommand(205)] - public Result IsVibrationPermitted(out bool arg0) + public Result IsVibrationPermitted(out bool vibrationPermitted) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + vibrationPermitted = _vibrationPermitted; return Result.Success; } @@ -754,7 +838,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(207)] public Result SendVibrationGcErmCommand(AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, VibrationGcErmCommand vibrationGcErmCommand, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, vibrationDeviceHandle, vibrationGcErmCommand }); return Result.Success; } @@ -762,7 +846,9 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(208)] public Result GetActualVibrationGcErmCommand(out VibrationGcErmCommand vibrationGcErmCommand, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + vibrationGcErmCommand = _vibrationGcErmCommand; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, vibrationDeviceHandle, _vibrationGcErmCommand }); return Result.Success; } @@ -958,15 +1044,18 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(406)] - public Result GetNpadLeftRightInterfaceType(out byte arg0, out byte arg1, uint arg2) + public Result GetNpadLeftRightInterfaceType(out byte leftInterfaceType, out byte rightInterfaceType, uint npadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + leftInterfaceType = 0; + rightInterfaceType = 0; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { npadId, LeftInterfaceType = 0, RightInterfaceType = 0 }); return Result.Success; } [CmifCommand(407)] - public Result GetNpadOfHighestBatteryLevel(out uint arg0, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan arg1, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + public Result GetNpadOfHighestBatteryLevel(out uint npadId, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan arg1, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { Logger.Stub?.PrintStub(LogClass.ServiceHid); @@ -1242,9 +1331,11 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(1003)] - public Result IsFirmwareUpdateNeededForNotification(out bool arg0, int arg1, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + public Result IsFirmwareUpdateNeededForNotification(out bool isFirmwareUpdateNeededForNotification, int unknown, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + isFirmwareUpdateNeededForNotification = false; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { IsFirmwareUpdateNeededForNotification = false, unknown, appletResourceUserId }); return Result.Success; } @@ -1256,5 +1347,12 @@ namespace Ryujinx.Horizon.Hid return Result.Success; } + + private static bool IsValidNpadIdType(NpadIdType npadIdType) + { + return (npadIdType >= NpadIdType.Player1 && npadIdType <= NpadIdType.Player8) || + npadIdType == NpadIdType.Handheld || + npadIdType == NpadIdType.Unknown; + } } } diff --git a/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/NpadDevices.cs b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/NpadDevices.cs index f95f07c74f..76eae65806 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/NpadDevices.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/HidDevices/NpadDevices.cs @@ -33,8 +33,8 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices internal bool SixAxisActive = false; // TODO: link to hidserver when implemented internal NpadStyleTag SupportedStyleSets { get; set; } - public Dictionary> RumbleQueues = new(); - public Dictionary LastVibrationValues = new(); + public Dictionary> RumbleQueues = new(); + public Dictionary LastVibrationValues = new(); public NpadDevices(bool active = true) : base(active) { @@ -596,7 +596,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices WriteNewSixInputEntry(ref currentNpad.JoyRightSixAxisSensor, ref newState); } - public void UpdateRumbleQueue(PlayerIndex index, Dictionary dualVibrationValues) + public void UpdateRumbleQueue(NpadIdType index, Dictionary dualVibrationValues) { if (RumbleQueues.TryGetValue(index, out ConcurrentQueue<(VibrationValue, VibrationValue)> currentQueue)) { @@ -619,7 +619,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices } } - public VibrationValue GetLastVibrationValue(PlayerIndex index, byte position) + public VibrationValue GetLastVibrationValue(NpadIdType index, byte position) { if (!LastVibrationValues.TryGetValue(index, out (VibrationValue, VibrationValue) dualVibrationValue)) { @@ -629,7 +629,7 @@ namespace Ryujinx.Horizon.Sdk.Hid.HidDevices return (position == 0) ? dualVibrationValue.Item1 : dualVibrationValue.Item2; } - public ConcurrentQueue<(VibrationValue, VibrationValue)> GetRumbleQueue(PlayerIndex index) + public ConcurrentQueue<(VibrationValue, VibrationValue)> GetRumbleQueue(NpadIdType index) { if (!RumbleQueues.TryGetValue(index, out ConcurrentQueue<(VibrationValue, VibrationValue)> rumbleQueue)) { diff --git a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs index ac49c95ccf..1674573b0c 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs @@ -21,19 +21,19 @@ namespace Ryujinx.Horizon.Sdk.Hid Result GetXpadIds(out long idCount, Span basicXpadIds); Result ActivateJoyXpad(uint joyXpadId); Result GetJoyXpadLifoHandle(out int arg0, uint joyXpadId); - Result GetJoyXpadIds(out long arg0, Span joyXpadIds); - Result ActivateSixAxisSensor(uint basixXpadId); - Result DeactivateSixAxisSensor(uint basixXpadId); - Result GetSixAxisSensorLifoHandle(out int arg0, uint basixXpadId); + Result GetJoyXpadIds(out long idCount, Span joyXpadIds); + Result ActivateSixAxisSensor(uint basicXpadId); + Result DeactivateSixAxisSensor(uint basicXpadId); + Result GetSixAxisSensorLifoHandle(out int arg0, uint basicXpadId); Result ActivateJoySixAxisSensor(uint joyXpadId); Result DeactivateJoySixAxisSensor(uint joyXpadId); Result GetJoySixAxisSensorLifoHandle(out int arg0, uint joyXpadId); 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 IsSixAxisSensorFusionEnabled(out bool sixAxisSensorFusionEnabled, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid); + Result EnableSixAxisSensorFusion(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, bool sixAxisSensorFusionEnabled, ulong pid); + Result SetSixAxisSensorFusionParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, float revisePower, float reviseRange, ulong pid); + Result GetSixAxisSensorFusionParameters(out float revisePower, out float reviseRange, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid); Result ResetSixAxisSensorFusionParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid); Result SetAccelerometerParameters(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, float x, float y, ulong pid); Result GetAccelerometerParameters(out float x, out float y, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid); @@ -44,8 +44,8 @@ namespace Ryujinx.Horizon.Sdk.Hid Result SetGyroscopeZeroDriftMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, GyroscopeZeroDriftMode gyroscopeZeroDriftMode, ulong pid); Result GetGyroscopeZeroDriftMode(out GyroscopeZeroDriftMode gyroscopeZeroDriftMode, 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 IsSixAxisSensorAtRest(out bool isAtRest, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid); + Result IsFirmwareUpdateAvailableForSixAxisSensor(out bool isFirmwareUpdateAvailableForSixAxisSensor, 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); @@ -80,11 +80,11 @@ namespace Ryujinx.Horizon.Sdk.Hid 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 SendVibrationValue(AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, VibrationValue vibrationValue, ulong pid); + Result GetActualVibrationValue(out VibrationValue vibrationValue, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, ulong pid); Result CreateActiveVibrationDeviceList(out IActiveVibrationDeviceList arg0); - Result PermitVibration(bool arg0); - Result IsVibrationPermitted(out bool arg0); + Result PermitVibration(bool vibrationPermitted); + Result IsVibrationPermitted(out bool vibrationPermitted); Result SendVibrationValues(AppletResourceUserId appletResourceUserId, ReadOnlySpan vibrationDeviceHandles, ReadOnlySpan vibrationValues); Result SendVibrationGcErmCommand(AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, VibrationGcErmCommand vibrationGcErmCommand, ulong pid); Result GetActualVibrationGcErmCommand(out VibrationGcErmCommand vibrationGcErmCommand, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, ulong pid); @@ -109,8 +109,8 @@ namespace Ryujinx.Horizon.Sdk.Hid Result HasBattery(out bool hasBattery, uint npadId); Result HasLeftRightBattery(out bool hasLeftBattery, out bool hasRightBattery, uint npadId); Result GetNpadInterfaceType(out byte npadInterfaceType, uint npadId); - Result GetNpadLeftRightInterfaceType(out byte arg0, out byte arg1, uint arg2); - Result GetNpadOfHighestBatteryLevel(out uint arg0, ReadOnlySpan arg1, AppletResourceUserId appletResourceUserId, ulong pid); + Result GetNpadLeftRightInterfaceType(out byte leftInterfaceType, out byte rightInterfaceType, uint npadId); + Result GetNpadOfHighestBatteryLevel(out uint npadId, ReadOnlySpan 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); @@ -144,7 +144,7 @@ namespace Ryujinx.Horizon.Sdk.Hid Result SetNpadCommunicationMode(AppletResourceUserId appletResourceUserId, long npadCommunicationMode, ulong pid); Result GetNpadCommunicationMode(out long npadCommunicationMode); Result SetTouchScreenConfiguration(AppletResourceUserId appletResourceUserId, TouchScreenConfigurationForNx touchScreenConfigurationForNx, ulong pid); - Result IsFirmwareUpdateNeededForNotification(out bool arg0, int arg1, AppletResourceUserId appletResourceUserId, ulong pid); + Result IsFirmwareUpdateNeededForNotification(out bool isFirmwareUpdateNeededForNotification, int unknown, AppletResourceUserId appletResourceUserId, ulong pid); Result ActivateDigitizer(AppletResourceUserId appletResourceUserId, ulong pid); } } diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceHandle.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceHandle.cs index dfbeaf2594..434a4cf452 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceHandle.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceHandle.cs @@ -1,9 +1,11 @@ +using Ryujinx.Horizon.Sdk.Hid.Npad; + namespace Ryujinx.Horizon.Sdk.Hid.Vibration { public struct VibrationDeviceHandle { - public byte DeviceType; - public byte PlayerId; + public NpadStyleIndex DeviceType; + public NpadIdType PlayerId; public byte Position; public byte Reserved; } diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceValue.cs b/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceValue.cs deleted file mode 100644 index 85113b6c4d..0000000000 --- a/src/Ryujinx.Horizon/Sdk/Hid/Vibration/VibrationDeviceValue.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Ryujinx.Horizon.Sdk.Hid.Vibration -{ - struct VibrationDeviceValue - { - public VibrationDeviceType DeviceType; - public VibrationDevicePosition Position; - } -} From 9520575f8a7213cbdde23ed2d1c170c99842198b Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sat, 20 Jul 2024 17:10:26 +0100 Subject: [PATCH 09/11] Progress --- .../HOS/Services/Hid/IHidServer.cs | 181 ------------------ src/Ryujinx.Horizon/Hid/HidServer.cs | 120 +++++++++--- src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs | 21 +- .../Hid/Npad/NpadHandheldActivationMode.cs | 2 +- .../Sdk/Hid/Npad/NpadIdType.cs | 2 +- 5 files changed, 110 insertions(+), 216 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs index b7f86aa350..f5c690cd9f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs @@ -152,61 +152,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(84)] // 13.0.0+ - // EnableSixAxisSensorUnalteredPassthrough(nn::applet::AppletResourceUserId, nn::hid::SixAxisSensorHandle, u8 enabled) - public ResultCode EnableSixAxisSensorUnalteredPassthrough(ServiceCtx context) - { - _isSixAxisSensorUnalteredPassthroughEnabled = context.RequestData.ReadUInt32() != 0; - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _isSixAxisSensorUnalteredPassthroughEnabled }); - - return ResultCode.Success; - } - - [CommandCmif(85)] // 13.0.0+ - // IsSixAxisSensorUnalteredPassthroughEnabled(nn::applet::AppletResourceUserId, nn::hid::SixAxisSensorHandle) -> u8 enabled - public ResultCode IsSixAxisSensorUnalteredPassthroughEnabled(ServiceCtx context) - { - int sixAxisSensorHandle = context.RequestData.ReadInt32(); - context.RequestData.BaseStream.Position += 4; // Padding - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.ResponseData.Write(_isSixAxisSensorUnalteredPassthroughEnabled); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle }); - - return ResultCode.Success; - } - - [CommandCmif(102)] - // SetSupportedNpadIdType(nn::applet::AppletResourceUserId, array) - public ResultCode SetSupportedNpadIdType(ServiceCtx context) - { -#pragma warning disable IDE0059 // Remove unnecessary value assignment - long appletResourceUserId = context.RequestData.ReadInt64(); -#pragma warning restore IDE0059 - ulong arrayPosition = context.Request.PtrBuff[0].Position; - ulong arraySize = context.Request.PtrBuff[0].Size; - - ReadOnlySpan supportedPlayerIds = MemoryMarshal.Cast(context.Memory.GetSpan(arrayPosition, (int)arraySize)); - - context.Device.Hid.Npads.ClearSupportedPlayers(); - - for (int i = 0; i < supportedPlayerIds.Length; ++i) - { - if (HidUtils.IsValidNpadIdType(supportedPlayerIds[i])) - { - context.Device.Hid.Npads.SetSupportedPlayer(HidUtils.GetIndexFromNpadIdType(supportedPlayerIds[i])); - } - } - - Logger.Stub?.PrintStub(LogClass.ServiceHid, $"{supportedPlayerIds.Length} Players: " + string.Join(",", supportedPlayerIds.ToArray())); - - return ResultCode.Success; - } - [CommandCmif(103)] // ActivateNpad(nn::applet::AppletResourceUserId) public ResultCode ActivateNpad(ServiceCtx context) @@ -214,18 +159,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ActiveNpadImpl(context); } - [CommandCmif(104)] - // DeactivateNpad(nn::applet::AppletResourceUserId) - public ResultCode DeactivateNpad(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.Device.Hid.Npads.Active = false; - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - [CommandCmif(106)] // AcquireNpadStyleSetUpdateEventHandle(nn::applet::AppletResourceUserId, uint, ulong) -> nn::sf::NativeHandle public ResultCode AcquireNpadStyleSetUpdateEventHandle(ServiceCtx context) @@ -250,44 +183,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(107)] - // DisconnectNpad(nn::applet::AppletResourceUserId, uint NpadIdType) - public ResultCode DisconnectNpad(ServiceCtx context) - { - NpadIdType npadIdType = (NpadIdType)context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, npadIdType }); - - return ResultCode.Success; - } - - [CommandCmif(108)] - // GetPlayerLedPattern(u32 npad_id) -> u64 led_pattern - public ResultCode GetPlayerLedPattern(ServiceCtx context) - { - NpadIdType npadId = (NpadIdType)context.RequestData.ReadUInt32(); - - ulong ledPattern = npadId switch - { - NpadIdType.Player1 => 0b0001, - NpadIdType.Player2 => 0b0011, - NpadIdType.Player3 => 0b0111, - NpadIdType.Player4 => 0b1111, - NpadIdType.Player5 => 0b1001, - NpadIdType.Player6 => 0b0101, - NpadIdType.Player7 => 0b1101, - NpadIdType.Player8 => 0b0110, - NpadIdType.Unknown => 0b0000, - NpadIdType.Handheld => 0b0000, - _ => throw new InvalidOperationException($"{nameof(npadId)} contains an invalid value: {npadId}"), - }; - - context.ResponseData.Write(ledPattern); - - return ResultCode.Success; - } - [CommandCmif(109)] // 5.0.0+ // ActivateNpadWithRevision(nn::applet::AppletResourceUserId, ulong revision) public ResultCode ActivateNpadWithRevision(ServiceCtx context) @@ -435,82 +330,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(125)] - // MergeSingleJoyAsDualJoy(uint npadIdType0, uint npadIdType1, nn::applet::AppletResourceUserId) - public ResultCode MergeSingleJoyAsDualJoy(ServiceCtx context) - { - NpadIdType npadIdType0 = (NpadIdType)context.RequestData.ReadUInt32(); - NpadIdType npadIdType1 = (NpadIdType)context.RequestData.ReadUInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - if (HidUtils.IsValidNpadIdType(npadIdType0) && HidUtils.IsValidNpadIdType(npadIdType1)) - { - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, npadIdType0, npadIdType1 }); - } - - return ResultCode.Success; - } - - [CommandCmif(126)] - // StartLrAssignmentMode(nn::applet::AppletResourceUserId) - public ResultCode StartLrAssignmentMode(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(127)] - // StopLrAssignmentMode(nn::applet::AppletResourceUserId) - public ResultCode StopLrAssignmentMode(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); - - return ResultCode.Success; - } - - [CommandCmif(128)] - // SetNpadHandheldActivationMode(nn::applet::AppletResourceUserId, long HidNpadHandheldActivationMode) - public ResultCode SetNpadHandheldActivationMode(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - _npadHandheldActivationMode = (NpadHandheldActivationMode)context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, _npadHandheldActivationMode }); - - return ResultCode.Success; - } - - [CommandCmif(129)] - // GetNpadHandheldActivationMode(nn::applet::AppletResourceUserId) -> long HidNpadHandheldActivationMode - public ResultCode GetNpadHandheldActivationMode(ServiceCtx context) - { - long appletResourceUserId = context.RequestData.ReadInt64(); - - context.ResponseData.Write((long)_npadHandheldActivationMode); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, _npadHandheldActivationMode }); - - return ResultCode.Success; - } - - [CommandCmif(130)] - // SwapNpadAssignment(uint OldNpadAssignment, uint NewNpadAssignment, nn::applet::AppletResourceUserId) - public ResultCode SwapNpadAssignment(ServiceCtx context) - { - int oldNpadAssignment = context.RequestData.ReadInt32(); - int newNpadAssignment = context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, oldNpadAssignment, newNpadAssignment }); - - return ResultCode.Success; - } - [CommandCmif(131)] // IsUnintendedHomeButtonInputProtectionEnabled(uint Unknown0, nn::applet::AppletResourceUserId) -> bool IsEnabled public ResultCode IsUnintendedHomeButtonInputProtectionEnabled(ServiceCtx context) diff --git a/src/Ryujinx.Horizon/Hid/HidServer.cs b/src/Ryujinx.Horizon/Hid/HidServer.cs index f3f6f0029f..2970bceebc 100644 --- a/src/Ryujinx.Horizon/Hid/HidServer.cs +++ b/src/Ryujinx.Horizon/Hid/HidServer.cs @@ -449,17 +449,21 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(84)] - public Result EnableSixAxisSensorUnalteredPassthrough(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, bool arg2, [ClientProcessId] ulong pid) + public Result EnableSixAxisSensorUnalteredPassthrough(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, bool sixAxisSensorUnalteredPassthrough, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _isSixAxisSensorUnalteredPassthroughEnabled = sixAxisSensorUnalteredPassthrough; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle, _isSixAxisSensorUnalteredPassthroughEnabled }); return Result.Success; } [CmifCommand(85)] - public Result IsSixAxisSensorUnalteredPassthroughEnabled(out bool arg0, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) + public Result IsSixAxisSensorUnalteredPassthroughEnabled(out bool sixAxisSensorUnalteredPassthrough, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + sixAxisSensorUnalteredPassthrough = _isSixAxisSensorUnalteredPassthroughEnabled; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, sixAxisSensorHandle }); return Result.Success; } @@ -529,9 +533,19 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(102)] - public Result SetSupportedNpadIdType(AppletResourceUserId appletResourceUserId, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan arg1, [ClientProcessId] ulong pid) + public Result SetSupportedNpadIdType(AppletResourceUserId appletResourceUserId, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan npadIds, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Npads.ClearSupportedPlayers(); + + for (int i = 0; i < npadIds.Length; i++) + { + if (IsValidNpadIdType(npadIds[i])) + { + Npads.SetSupportedPlayer(GetIndexFromNpadIdType(npadIds[i])); + } + } + + Logger.Stub?.PrintStub(LogClass.ServiceHid, $"{npadIds.Length} Players: " + string.Join(",", npadIds.ToArray())); return Result.Success; } @@ -547,7 +561,8 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(104)] public Result DeactivateNpad(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Npads.Active = false; + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } @@ -561,17 +576,30 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(107)] - public Result DisconnectNpad(AppletResourceUserId appletResourceUserId, uint arg1, [ClientProcessId] ulong pid) + public Result DisconnectNpad(AppletResourceUserId appletResourceUserId, NpadIdType npadIdType, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, npadIdType }); return Result.Success; } [CmifCommand(108)] - public Result GetPlayerLedPattern(out ulong arg0, uint arg1) + public Result GetPlayerLedPattern(out ulong ledPattern, NpadIdType npadId) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + ledPattern = npadId switch + { + NpadIdType.Player1 => 0b0001, + NpadIdType.Player2 => 0b0011, + NpadIdType.Player3 => 0b0111, + NpadIdType.Player4 => 0b1111, + NpadIdType.Player5 => 0b1001, + NpadIdType.Player6 => 0b0101, + NpadIdType.Player7 => 0b1101, + NpadIdType.Player8 => 0b0110, + NpadIdType.Unknown => 0b0000, + NpadIdType.Handheld => 0b0000, + _ => throw new InvalidOperationException($"{nameof(npadId)} contains an invalid value: {npadId}"), + }; return Result.Success; } @@ -617,17 +645,23 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(124)] - public Result SetNpadJoyAssignmentModeDual(AppletResourceUserId appletResourceUserId, uint arg1, [ClientProcessId] ulong pid) + public Result SetNpadJoyAssignmentModeDual(AppletResourceUserId appletResourceUserId, NpadIdType npadIdType, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + if (IsValidNpadIdType(npadIdType)) + { + // context.Device.Hid.SharedMemory.Npads[(int)HidUtils.GetIndexFromNpadIdType(npadIdType)].InternalState.JoyAssignmentMode = NpadJoyAssignmentMode.Dual; + } return Result.Success; } [CmifCommand(125)] - public Result MergeSingleJoyAsDualJoy(AppletResourceUserId appletResourceUserId, uint arg1, uint arg2, [ClientProcessId] ulong pid) + public Result MergeSingleJoyAsDualJoy(AppletResourceUserId appletResourceUserId, NpadIdType npadIdType0, NpadIdType npadIdType1, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + if (IsValidNpadIdType(npadIdType0) && IsValidNpadIdType(npadIdType1)) + { + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, npadIdType0, npadIdType1 }); + } return Result.Success; } @@ -635,7 +669,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(126)] public Result StartLrAssignmentMode(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } @@ -643,31 +677,35 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(127)] public Result StopLrAssignmentMode(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; } [CmifCommand(128)] - public Result SetNpadHandheldActivationMode(AppletResourceUserId appletResourceUserId, long arg1, [ClientProcessId] ulong pid) + public Result SetNpadHandheldActivationMode(AppletResourceUserId appletResourceUserId, NpadHandheldActivationMode npadHandheldActivationMode, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + _npadHandheldActivationMode = npadHandheldActivationMode; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, _npadHandheldActivationMode }); return Result.Success; } [CmifCommand(129)] - public Result GetNpadHandheldActivationMode(AppletResourceUserId appletResourceUserId, out long arg1, [ClientProcessId] ulong pid) + public Result GetNpadHandheldActivationMode(AppletResourceUserId appletResourceUserId, out NpadHandheldActivationMode npadHandheldActivationMode, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + npadHandheldActivationMode = _npadHandheldActivationMode; + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, _npadHandheldActivationMode }); return Result.Success; } [CmifCommand(130)] - public Result SwapNpadAssignment(AppletResourceUserId appletResourceUserId, uint arg1, uint arg2, [ClientProcessId] ulong pid) + public Result SwapNpadAssignment(AppletResourceUserId appletResourceUserId, uint oldNpadAssignment, uint newNpadAssignment, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, oldNpadAssignment, newNpadAssignment }); return Result.Success; } @@ -1348,6 +1386,42 @@ namespace Ryujinx.Horizon.Hid return Result.Success; } + public static PlayerIndex GetIndexFromNpadIdType(NpadIdType npadIdType) + => npadIdType switch + { +#pragma warning disable IDE0055 // Disable formatting + NpadIdType.Player1 => PlayerIndex.Player1, + NpadIdType.Player2 => PlayerIndex.Player2, + NpadIdType.Player3 => PlayerIndex.Player3, + NpadIdType.Player4 => PlayerIndex.Player4, + NpadIdType.Player5 => PlayerIndex.Player5, + NpadIdType.Player6 => PlayerIndex.Player6, + NpadIdType.Player7 => PlayerIndex.Player7, + NpadIdType.Player8 => PlayerIndex.Player8, + NpadIdType.Handheld => PlayerIndex.Handheld, + NpadIdType.Unknown => PlayerIndex.Unknown, + _ => throw new ArgumentOutOfRangeException(nameof(npadIdType)), +#pragma warning restore IDE0055 + }; + + public static NpadIdType GetNpadIdTypeFromIndex(PlayerIndex index) + => index switch + { +#pragma warning disable IDE0055 // Disable formatting + PlayerIndex.Player1 => NpadIdType.Player1, + PlayerIndex.Player2 => NpadIdType.Player2, + PlayerIndex.Player3 => NpadIdType.Player3, + PlayerIndex.Player4 => NpadIdType.Player4, + PlayerIndex.Player5 => NpadIdType.Player5, + PlayerIndex.Player6 => NpadIdType.Player6, + PlayerIndex.Player7 => NpadIdType.Player7, + PlayerIndex.Player8 => NpadIdType.Player8, + PlayerIndex.Handheld => NpadIdType.Handheld, + PlayerIndex.Unknown => NpadIdType.Unknown, + _ => throw new ArgumentOutOfRangeException(nameof(index)), +#pragma warning restore IDE0055 + }; + private static bool IsValidNpadIdType(NpadIdType npadIdType) { return (npadIdType >= NpadIdType.Player1 && npadIdType <= NpadIdType.Player8) || diff --git a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs index 1674573b0c..2cae092cab 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs @@ -1,5 +1,6 @@ using Ryujinx.Horizon.Common; using Ryujinx.Horizon.Sdk.Applet; +using Ryujinx.Horizon.Sdk.Hid.Npad; using Ryujinx.Horizon.Sdk.Hid.SixAxis; using Ryujinx.Horizon.Sdk.Hid.Vibration; using Ryujinx.Horizon.Sdk.Sf; @@ -46,8 +47,8 @@ namespace Ryujinx.Horizon.Sdk.Hid Result ResetGyroscopeZeroDriftMode(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid); Result IsSixAxisSensorAtRest(out bool isAtRest, AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, ulong pid); Result IsFirmwareUpdateAvailableForSixAxisSensor(out bool isFirmwareUpdateAvailableForSixAxisSensor, 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 EnableSixAxisSensorUnalteredPassthrough(AppletResourceUserId appletResourceUserId, SixAxisSensorHandle sixAxisSensorHandle, bool sixAxisSensorUnalteredPassthrough, ulong pid); + Result IsSixAxisSensorUnalteredPassthroughEnabled(out bool sixAxisSensorUnalteredPassthrough, 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); @@ -55,24 +56,24 @@ namespace Ryujinx.Horizon.Sdk.Hid Result ActivateGesture(AppletResourceUserId appletResourceUserId, int unknown, ulong pid); Result SetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, NpadStyleTag supportedStyleSets, ulong pid); Result GetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, out NpadStyleTag supportedStyleSets, ulong pid); - Result SetSupportedNpadIdType(AppletResourceUserId appletResourceUserId, ReadOnlySpan arg1, ulong pid); + Result SetSupportedNpadIdType(AppletResourceUserId appletResourceUserId, ReadOnlySpan npadIds, 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 DisconnectNpad(AppletResourceUserId appletResourceUserId, NpadIdType npadIdType, ulong pid); + Result GetPlayerLedPattern(out ulong ledPattern, NpadIdType npadId); 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 SetNpadJoyAssignmentModeDual(AppletResourceUserId appletResourceUserId, NpadIdType npadIdType, ulong pid); + Result MergeSingleJoyAsDualJoy(AppletResourceUserId appletResourceUserId, NpadIdType npadIdType0, NpadIdType npadIdType1, 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 SetNpadHandheldActivationMode(AppletResourceUserId appletResourceUserId, NpadHandheldActivationMode npadHandheldActivationMode, ulong pid); + Result GetNpadHandheldActivationMode(AppletResourceUserId appletResourceUserId, out NpadHandheldActivationMode npadHandheldActivationMode, ulong pid); + Result SwapNpadAssignment(AppletResourceUserId appletResourceUserId, uint oldNpadAssignment, uint newNpadAssignment, 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); diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadHandheldActivationMode.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadHandheldActivationMode.cs index c8e00597ae..7bc2c5d1ee 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadHandheldActivationMode.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadHandheldActivationMode.cs @@ -1,6 +1,6 @@ namespace Ryujinx.Horizon.Sdk.Hid.Npad { - public enum NpadHandheldActivationMode + public enum NpadHandheldActivationMode : long { Dual, Single, diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadIdType.cs b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadIdType.cs index f4bc91c12b..dfc5f3b298 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadIdType.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Npad/NpadIdType.cs @@ -1,6 +1,6 @@ namespace Ryujinx.Horizon.Sdk.Hid.Npad { - public enum NpadIdType + public enum NpadIdType : uint { Player1 = 0, Player2 = 1, From fa87a224c67ff5d5fbe47fc73bc058e356f7ca6e Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sat, 20 Jul 2024 17:23:43 +0100 Subject: [PATCH 10/11] Bunch of Palma stuff --- .../HOS/Services/Hid/IHidServer.cs | 188 ------------------ src/Ryujinx.Horizon/Hid/HidServer.cs | 78 +++++--- src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs | 19 +- 3 files changed, 59 insertions(+), 226 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs index f5c690cd9f..3b7ca91588 100644 --- a/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs +++ b/src/Ryujinx.HLE/HOS/Services/Hid/IHidServer.cs @@ -76,37 +76,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(40)] - // AcquireXpadIdEventHandle(ulong XpadId) -> nn::sf::NativeHandle - public ResultCode AcquireXpadIdEventHandle(ServiceCtx context) - { - long xpadId = context.RequestData.ReadInt64(); - - if (context.Process.HandleTable.GenerateHandle(_xpadIdEvent.ReadableEvent, out _xpadIdEventHandle) != Result.Success) - { - throw new InvalidOperationException("Out of handles!"); - } - - context.Response.HandleDesc = IpcHandleDesc.MakeCopy(_xpadIdEventHandle); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { xpadId }); - - return ResultCode.Success; - } - - [CommandCmif(41)] - // ReleaseXpadIdEventHandle(ulong XpadId) - public ResultCode ReleaseXpadIdEventHandle(ServiceCtx context) - { - long xpadId = context.RequestData.ReadInt64(); - - context.Process.HandleTable.CloseHandle(_xpadIdEventHandle); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { xpadId }); - - return ResultCode.Success; - } - [CommandCmif(58)] // GetJoyXpadLifoHandle(nn::hid::JoyXpadId) -> nn::sf::NativeHandle public ResultCode GetJoyXpadLifoHandle(ServiceCtx context) @@ -459,163 +428,6 @@ namespace Ryujinx.HLE.HOS.Services.Hid return ResultCode.Success; } - [CommandCmif(500)] // 5.0.0+ - // GetPalmaConnectionHandle(uint Unknown0, nn::applet::AppletResourceUserId) -> nn::hid::PalmaConnectionHandle - public ResultCode GetPalmaConnectionHandle(ServiceCtx context) - { - int unknown0 = context.RequestData.ReadInt32(); - long appletResourceUserId = context.RequestData.ReadInt64(); - - int palmaConnectionHandle = 0; - - context.ResponseData.Write(palmaConnectionHandle); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, unknown0, palmaConnectionHandle }); - - return ResultCode.Success; - } - - [CommandCmif(501)] // 5.0.0+ - // InitializePalma(nn::hid::PalmaConnectionHandle) - public ResultCode InitializePalma(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); - - _palmaOperationCompleteEvent.ReadableEvent.Signal(); - - return ResultCode.Success; - } - - [CommandCmif(502)] // 5.0.0+ - // AcquirePalmaOperationCompleteEvent(nn::hid::PalmaConnectionHandle) -> nn::sf::NativeHandle - public ResultCode AcquirePalmaOperationCompleteEvent(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - - if (context.Process.HandleTable.GenerateHandle(_palmaOperationCompleteEvent.ReadableEvent, out int handle) != Result.Success) - { - throw new InvalidOperationException("Out of handles!"); - } - - context.Response.HandleDesc = IpcHandleDesc.MakeCopy(handle); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); - - return ResultCode.Success; - } - - [CommandCmif(503)] // 5.0.0+ - // GetPalmaOperationInfo(nn::hid::PalmaConnectionHandle) -> long Unknown0, buffer - public ResultCode GetPalmaOperationInfo(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - - long unknown0 = 0; //Counter? - - context.ResponseData.Write(unknown0); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, unknown0 }); - - return ResultCode.Success; - } - - [CommandCmif(504)] // 5.0.0+ - // PlayPalmaActivity(nn::hid::PalmaConnectionHandle, ulong Unknown0) - public ResultCode PlayPalmaActivity(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - long unknown0 = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, unknown0 }); - - _palmaOperationCompleteEvent.ReadableEvent.Signal(); - - return ResultCode.Success; - } - - [CommandCmif(505)] // 5.0.0+ - // SetPalmaFrModeType(nn::hid::PalmaConnectionHandle, ulong FrModeType) - public ResultCode SetPalmaFrModeType(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - long frModeType = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, frModeType }); - - _palmaOperationCompleteEvent.ReadableEvent.Signal(); - - return ResultCode.Success; - } - - [CommandCmif(506)] // 5.0.0+ - // ReadPalmaStep(nn::hid::PalmaConnectionHandle) - public ResultCode ReadPalmaStep(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); - - return ResultCode.Success; - } - - [CommandCmif(507)] // 5.0.0+ - // EnablePalmaStep(nn::hid::PalmaConnectionHandle, bool Enable) - public ResultCode EnablePalmaStep(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - bool enabledPalmaStep = context.RequestData.ReadBoolean(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, enabledPalmaStep }); - - _palmaOperationCompleteEvent.ReadableEvent.Signal(); - - return ResultCode.Success; - } - - [CommandCmif(508)] // 5.0.0+ - // ResetPalmaStep(nn::hid::PalmaConnectionHandle) - public ResultCode ResetPalmaStep(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); - - _palmaOperationCompleteEvent.ReadableEvent.Signal(); - - return ResultCode.Success; - } - - [CommandCmif(509)] // 5.0.0+ - // ReadPalmaApplicationSection(nn::hid::PalmaConnectionHandle, ulong Unknown0, ulong Unknown1) - public ResultCode ReadPalmaApplicationSection(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - long unknown0 = context.RequestData.ReadInt64(); - long unknown1 = context.RequestData.ReadInt64(); - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, unknown0, unknown1 }); - - return ResultCode.Success; - } - - [CommandCmif(510)] // 5.0.0+ - // WritePalmaApplicationSection(nn::hid::PalmaConnectionHandle, ulong Unknown0, ulong Unknown1, nn::hid::PalmaApplicationSectionAccessBuffer) - public ResultCode WritePalmaApplicationSection(ServiceCtx context) - { - int palmaConnectionHandle = context.RequestData.ReadInt32(); - long unknown0 = context.RequestData.ReadInt64(); - long unknown1 = context.RequestData.ReadInt64(); - // nn::hid::PalmaApplicationSectionAccessBuffer cast is unknown - - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, unknown0, unknown1 }); - - _palmaOperationCompleteEvent.ReadableEvent.Signal(); - - return ResultCode.Success; - } - [CommandCmif(1004)] // 17.0.0+ // SetTouchScreenResolution(int width, int height, nn::applet::AppletResourceUserId) public ResultCode SetTouchScreenResolution(ServiceCtx context) diff --git a/src/Ryujinx.Horizon/Hid/HidServer.cs b/src/Ryujinx.Horizon/Hid/HidServer.cs index 2970bceebc..5af6241b02 100644 --- a/src/Ryujinx.Horizon/Hid/HidServer.cs +++ b/src/Ryujinx.Horizon/Hid/HidServer.cs @@ -6,6 +6,7 @@ using Ryujinx.Horizon.Sdk.Hid.HidDevices; using Ryujinx.Horizon.Sdk.Hid.Npad; using Ryujinx.Horizon.Sdk.Hid.SixAxis; using Ryujinx.Horizon.Sdk.Hid.Vibration; +using Ryujinx.Horizon.Sdk.OsTypes; using Ryujinx.Horizon.Sdk.Sf; using Ryujinx.Horizon.Sdk.Sf.Hipc; using System; @@ -23,6 +24,9 @@ namespace Ryujinx.Horizon.Hid public KeyboardDevice Keyboard; public NpadDevices Npads; + private SystemEventType _xpadIdEvent; + private SystemEventType _palmaOperationCompleteEvent; + private bool _sixAxisSensorFusionEnabled; private bool _unintendedHomeButtonInputProtectionEnabled; private bool _npadAnalogStickCenterClampEnabled; @@ -50,6 +54,11 @@ namespace Ryujinx.Horizon.Hid Keyboard = new KeyboardDevice(false); Npads = new NpadDevices(true); + Os.CreateSystemEvent(out _xpadIdEvent, EventClearMode.ManualClear, interProcess: true); + Os.SignalSystemEvent(ref _xpadIdEvent); // TODO: signal event at right place + + Os.CreateSystemEvent(out _palmaOperationCompleteEvent, EventClearMode.ManualClear, interProcess: true); + _npadHandheldActivationMode = NpadHandheldActivationMode.Dual; _gyroscopeZeroDriftMode = GyroscopeZeroDriftMode.Standard; @@ -151,8 +160,10 @@ namespace Ryujinx.Horizon.Hid } [CmifCommand(40)] - public Result AcquireXpadIdEventHandle([CopyHandle] out int arg0, ulong xpadId) + public Result AcquireXpadIdEventHandle([CopyHandle] out int handle, ulong xpadId) { + handle = Os.GetReadableHandleOfSystemEvent(ref _xpadIdEvent); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { xpadId }); return Result.Success; @@ -161,6 +172,8 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(41)] public Result ReleaseXpadIdEventHandle(ulong xpadId) { + Os.DetachReadableHandleOfSystemEvent(ref _xpadIdEvent); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { xpadId }); return Result.Success; @@ -1092,18 +1105,10 @@ namespace Ryujinx.Horizon.Hid return Result.Success; } - [CmifCommand(407)] - public Result GetNpadOfHighestBatteryLevel(out uint npadId, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan arg1, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) - { - Logger.Stub?.PrintStub(LogClass.ServiceHid); - - return Result.Success; - } - [CmifCommand(500)] - public Result GetPalmaConnectionHandle(out PalmaConnectionHandle palmaConnectionHandle, uint arg1, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) + public Result GetPalmaConnectionHandle(out PalmaConnectionHandle palmaConnectionHandle, uint unknown, AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, unknown, palmaConnectionHandle }); return Result.Success; } @@ -1111,39 +1116,49 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(501)] public Result InitializePalma(PalmaConnectionHandle palmaConnectionHandle) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); + + Os.SignalSystemEvent(ref _palmaOperationCompleteEvent); return Result.Success; } [CmifCommand(502)] - public Result AcquirePalmaOperationCompleteEvent([CopyHandle] out int arg0, PalmaConnectionHandle palmaConnectionHandle) + public Result AcquirePalmaOperationCompleteEvent([CopyHandle] out int handle, PalmaConnectionHandle palmaConnectionHandle) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + handle = Os.GetReadableHandleOfSystemEvent(ref _palmaOperationCompleteEvent); + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); return Result.Success; } [CmifCommand(503)] - public Result GetPalmaOperationInfo(out ulong arg0, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span arg1, PalmaConnectionHandle palmaConnectionHandle) + public Result GetPalmaOperationInfo(out ulong unknown, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span arg1, PalmaConnectionHandle palmaConnectionHandle) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + unknown = 0; // Counter? + + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, unknown }); return Result.Success; } [CmifCommand(504)] - public Result PlayPalmaActivity(PalmaConnectionHandle palmaConnectionHandle, ulong arg1) + public Result PlayPalmaActivity(PalmaConnectionHandle palmaConnectionHandle, ulong unknown) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, unknown }); + + Os.SignalSystemEvent(ref _palmaOperationCompleteEvent); return Result.Success; } [CmifCommand(505)] - public Result SetPalmaFrModeType(PalmaConnectionHandle palmaConnectionHandle, ulong arg1) + public Result SetPalmaFrModeType(PalmaConnectionHandle palmaConnectionHandle, ulong frModeType) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, frModeType }); + + Os.SignalSystemEvent(ref _palmaOperationCompleteEvent); return Result.Success; } @@ -1151,15 +1166,17 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(506)] public Result ReadPalmaStep(PalmaConnectionHandle palmaConnectionHandle) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); return Result.Success; } [CmifCommand(507)] - public Result EnablePalmaStep(PalmaConnectionHandle palmaConnectionHandle, bool arg1) + public Result EnablePalmaStep(PalmaConnectionHandle palmaConnectionHandle, bool enabledPalmaStep) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, enabledPalmaStep }); + + Os.SignalSystemEvent(ref _palmaOperationCompleteEvent); return Result.Success; } @@ -1167,23 +1184,28 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(508)] public Result ResetPalmaStep(PalmaConnectionHandle palmaConnectionHandle) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle }); + + Os.SignalSystemEvent(ref _palmaOperationCompleteEvent); return Result.Success; } [CmifCommand(509)] - public Result ReadPalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2) + public Result ReadPalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong unknown0, ulong unknown1) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, unknown0, unknown1 }); return Result.Success; } [CmifCommand(510)] - public Result WritePalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer, 0x100)] in PalmaApplicationSectionAccessBuffer palmaApplicationSectionAccessBuffer) + public Result WritePalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong unknown0, ulong unknown1, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer, 0x100)] in PalmaApplicationSectionAccessBuffer palmaApplicationSectionAccessBuffer) { - Logger.Stub?.PrintStub(LogClass.ServiceHid); + // nn::hid::PalmaApplicationSectionAccessBuffer cast is unknown + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { palmaConnectionHandle, unknown0, unknown1 }); + + Os.SignalSystemEvent(ref _palmaOperationCompleteEvent); return Result.Success; } diff --git a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs index 2cae092cab..8aac66d76b 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/IHidServer.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Horizon.Sdk.Hid 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 xpadId); + Result AcquireXpadIdEventHandle(out int handle, ulong xpadId); Result ReleaseXpadIdEventHandle(ulong xpadId); Result ActivateXpad(AppletResourceUserId appletResourceUserId, uint basicXpadId, ulong pid); Result GetXpadIds(out long idCount, Span basicXpadIds); @@ -111,18 +111,17 @@ namespace Ryujinx.Horizon.Sdk.Hid Result HasLeftRightBattery(out bool hasLeftBattery, out bool hasRightBattery, uint npadId); Result GetNpadInterfaceType(out byte npadInterfaceType, uint npadId); Result GetNpadLeftRightInterfaceType(out byte leftInterfaceType, out byte rightInterfaceType, uint npadId); - Result GetNpadOfHighestBatteryLevel(out uint npadId, ReadOnlySpan arg1, AppletResourceUserId appletResourceUserId, ulong pid); - Result GetPalmaConnectionHandle(out PalmaConnectionHandle palmaConnectionHandle, uint arg1, AppletResourceUserId appletResourceUserId, ulong pid); + Result GetPalmaConnectionHandle(out PalmaConnectionHandle palmaConnectionHandle, uint unknown, AppletResourceUserId appletResourceUserId, ulong pid); Result InitializePalma(PalmaConnectionHandle palmaConnectionHandle); - Result AcquirePalmaOperationCompleteEvent(out int arg0, PalmaConnectionHandle palmaConnectionHandle); - Result GetPalmaOperationInfo(out ulong arg0, Span arg1, PalmaConnectionHandle palmaConnectionHandle); - Result PlayPalmaActivity(PalmaConnectionHandle palmaConnectionHandle, ulong arg1); - Result SetPalmaFrModeType(PalmaConnectionHandle palmaConnectionHandle, ulong arg1); + Result AcquirePalmaOperationCompleteEvent(out int handle, PalmaConnectionHandle palmaConnectionHandle); + Result GetPalmaOperationInfo(out ulong unknown, Span arg1, PalmaConnectionHandle palmaConnectionHandle); + Result PlayPalmaActivity(PalmaConnectionHandle palmaConnectionHandle, ulong unknown); + Result SetPalmaFrModeType(PalmaConnectionHandle palmaConnectionHandle, ulong frModeType); Result ReadPalmaStep(PalmaConnectionHandle palmaConnectionHandle); - Result EnablePalmaStep(PalmaConnectionHandle palmaConnectionHandle, bool arg1); + Result EnablePalmaStep(PalmaConnectionHandle palmaConnectionHandle, bool enabledPalmaStep); Result ResetPalmaStep(PalmaConnectionHandle palmaConnectionHandle); - Result ReadPalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2); - Result WritePalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2, in PalmaApplicationSectionAccessBuffer palmaApplicationSectionAccessBuffer); + Result ReadPalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong unknown0, ulong unknown1); + Result WritePalmaApplicationSection(PalmaConnectionHandle palmaConnectionHandle, ulong unknown0, ulong unknown1, in PalmaApplicationSectionAccessBuffer palmaApplicationSectionAccessBuffer); Result ReadPalmaUniqueCode(PalmaConnectionHandle palmaConnectionHandle); Result SetPalmaUniqueCodeInvalid(PalmaConnectionHandle palmaConnectionHandle); Result WritePalmaActivityEntry(PalmaConnectionHandle palmaConnectionHandle, ulong arg1, ulong arg2, ulong arg3, ulong arg4); From fe941e46fb38d58ae36ecc3db6c4a3dcbbf7428c Mon Sep 17 00:00:00 2001 From: Isaac Marovitz Date: Sat, 20 Jul 2024 18:09:12 +0100 Subject: [PATCH 11/11] Move some stuff over --- src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs | 4 +- src/Ryujinx.HLE/HOS/Horizon.cs | 20 ++----- src/Ryujinx.HLE/Switch.cs | 3 -- src/Ryujinx.Headless.SDL2/WindowBase.cs | 4 +- src/Ryujinx.Horizon/Hid/HidIpcServer.cs | 2 +- src/Ryujinx.Horizon/Hid/HidServer.cs | 52 +++++++------------ src/Ryujinx.Horizon/HorizonStatic.cs | 4 ++ src/Ryujinx.Horizon/Sdk/Hid/Hid.cs | 2 +- src/Ryujinx.Input/HLE/NpadManager.cs | 21 ++++---- src/Ryujinx.Input/HLE/TouchScreenManager.cs | 16 ++---- src/Ryujinx/AppHost.cs | 6 +-- .../UI/Applet/ControllerAppletDialog.axaml.cs | 10 ++-- 12 files changed, 55 insertions(+), 89 deletions(-) diff --git a/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs b/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs index 0e636792db..df345cbabf 100644 --- a/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs +++ b/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs @@ -7,6 +7,7 @@ using Ryujinx.Common.Utilities; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; using Ryujinx.Graphics.Gpu; +using Ryujinx.Horizon; using Ryujinx.Input; using Ryujinx.Input.GTK3; using Ryujinx.Input.HLE; @@ -368,7 +369,6 @@ namespace Ryujinx.UI } NpadManager.Initialize(device, ConfigurationState.Instance.Hid.InputConfig, ConfigurationState.Instance.Hid.EnableKeyboard, ConfigurationState.Instance.Hid.EnableMouse); - TouchScreenManager.Initialize(device); } private unsafe void Renderer_ScreenCaptured(object sender, ScreenCaptureImageInfo e) @@ -733,7 +733,7 @@ namespace Ryujinx.UI TouchScreenManager.Update(false); } - Device.Hid.DebugPad.Update(); + HorizonStatic.Hid.DebugPad.Update(); return true; } diff --git a/src/Ryujinx.HLE/HOS/Horizon.cs b/src/Ryujinx.HLE/HOS/Horizon.cs index 64b08e3093..4d94cd84f2 100644 --- a/src/Ryujinx.HLE/HOS/Horizon.cs +++ b/src/Ryujinx.HLE/HOS/Horizon.cs @@ -41,7 +41,6 @@ namespace Ryujinx.HLE.HOS public class Horizon : IDisposable { - internal const int HidSize = 0x40000; internal const int FontSize = 0x1100000; internal const int IirsSize = 0x8000; internal const int TimeSize = 0x1000; @@ -68,7 +67,6 @@ namespace Ryujinx.HLE.HOS internal ServerBase SmServer { get; private set; } internal ServerBase BsdServer { get; private set; } internal ServerBase FsServer { get; private set; } - internal ServerBase HidServer { get; private set; } internal ServerBase NvDrvServer { get; private set; } internal ServerBase TimeServer { get; private set; } internal ServerBase ViServer { get; private set; } @@ -76,7 +74,6 @@ namespace Ryujinx.HLE.HOS internal ServerBase ViServerS { get; private set; } internal ServerBase LdnServer { get; private set; } - internal KSharedMemory HidSharedMem { get; private set; } internal KSharedMemory FontSharedMem { get; private set; } internal KSharedMemory IirsSharedMem { get; private set; } @@ -101,7 +98,6 @@ namespace Ryujinx.HLE.HOS public int GlobalAccessLogMode { get; set; } - internal SharedMemoryStorage HidStorage { get; private set; } internal NvHostSyncpt HostSyncpoint { get; private set; } @@ -134,33 +130,26 @@ namespace Ryujinx.HLE.HOS // region used that is used is Application, so we can use the other ones for anything. KMemoryRegionManager region = KernelContext.MemoryManager.MemoryRegions[(int)MemoryRegion.NvServices]; - ulong hidPa = region.Address; - ulong fontPa = region.Address + HidSize; - ulong iirsPa = region.Address + HidSize + FontSize; - ulong timePa = region.Address + HidSize + FontSize + IirsSize; - ulong appletCaptureBufferPa = region.Address + HidSize + FontSize + IirsSize + TimeSize; + ulong fontPa = region.Address; + ulong iirsPa = region.Address + FontSize; + ulong timePa = region.Address + FontSize + IirsSize; + ulong appletCaptureBufferPa = region.Address + FontSize + IirsSize + TimeSize; - KPageList hidPageList = new(); KPageList fontPageList = new(); KPageList iirsPageList = new(); KPageList timePageList = new(); KPageList appletCaptureBufferPageList = new(); - hidPageList.AddRange(hidPa, HidSize / KPageTableBase.PageSize); fontPageList.AddRange(fontPa, FontSize / KPageTableBase.PageSize); iirsPageList.AddRange(iirsPa, IirsSize / KPageTableBase.PageSize); timePageList.AddRange(timePa, TimeSize / KPageTableBase.PageSize); appletCaptureBufferPageList.AddRange(appletCaptureBufferPa, AppletCaptureBufferSize / KPageTableBase.PageSize); - var hidStorage = new SharedMemoryStorage(KernelContext, hidPageList); var fontStorage = new SharedMemoryStorage(KernelContext, fontPageList); var iirsStorage = new SharedMemoryStorage(KernelContext, iirsPageList); var timeStorage = new SharedMemoryStorage(KernelContext, timePageList); var appletCaptureBufferStorage = new SharedMemoryStorage(KernelContext, appletCaptureBufferPageList); - HidStorage = hidStorage; - - HidSharedMem = new KSharedMemory(KernelContext, hidStorage, 0, 0, KMemoryPermission.Read); FontSharedMem = new KSharedMemory(KernelContext, fontStorage, 0, 0, KMemoryPermission.Read); IirsSharedMem = new KSharedMemory(KernelContext, iirsStorage, 0, 0, KMemoryPermission.Read); @@ -247,7 +236,6 @@ namespace Ryujinx.HLE.HOS BsdServer = new ServerBase(KernelContext, "BsdServer"); FsServer = new ServerBase(KernelContext, "FsServer"); - HidServer = new ServerBase(KernelContext, "HidServer"); NvDrvServer = new ServerBase(KernelContext, "NvservicesServer"); TimeServer = new ServerBase(KernelContext, "TimeServer"); ViServer = new ServerBase(KernelContext, "ViServerU"); diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index 7cbfed039f..9c1f644f1c 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -5,7 +5,6 @@ using Ryujinx.Graphics.Gpu; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Apm; -using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.HLE.Loaders.Processes; using Ryujinx.HLE.UI; using Ryujinx.Horizon.Sdk.Hid; @@ -24,7 +23,6 @@ namespace Ryujinx.HLE public HOS.Horizon System { get; } public ProcessLoader Processes { get; } public PerformanceStatistics Statistics { get; } - public Hid Hid { get; } public TamperMachine TamperMachine { get; } public IHostUIHandler UIHandler { get; } @@ -52,7 +50,6 @@ namespace Ryujinx.HLE Gpu = new GpuContext(Configuration.GpuRenderer); System = new HOS.Horizon(this); Statistics = new PerformanceStatistics(); - Hid = new Hid(this, System.HidStorage); Processes = new ProcessLoader(this); TamperMachine = new TamperMachine(); diff --git a/src/Ryujinx.Headless.SDL2/WindowBase.cs b/src/Ryujinx.Headless.SDL2/WindowBase.cs index 8768913f5a..1739d01b53 100644 --- a/src/Ryujinx.Headless.SDL2/WindowBase.cs +++ b/src/Ryujinx.Headless.SDL2/WindowBase.cs @@ -8,6 +8,7 @@ using Ryujinx.Graphics.OpenGL; using Ryujinx.HLE.HOS.Applets; using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types; using Ryujinx.HLE.UI; +using Ryujinx.Horizon; using Ryujinx.Input; using Ryujinx.Input.HLE; using Ryujinx.SDL2.Common; @@ -125,7 +126,6 @@ namespace Ryujinx.Headless.SDL2 Renderer = renderer; NpadManager.Initialize(device, inputConfigs, enableKeyboard, enableMouse); - TouchScreenManager.Initialize(device); } private void SetWindowIcon() @@ -423,7 +423,7 @@ namespace Ryujinx.Headless.SDL2 TouchScreenManager.Update(false); } - Device.Hid.DebugPad.Update(); + HorizonStatic.Hid.DebugPad.Update(); // TODO: Replace this with MouseDriver.CheckIdle() when mouse motion events are received on every supported platform. MouseDriver.UpdatePosition(); diff --git a/src/Ryujinx.Horizon/Hid/HidIpcServer.cs b/src/Ryujinx.Horizon/Hid/HidIpcServer.cs index 84c85b3d70..b262002292 100644 --- a/src/Ryujinx.Horizon/Hid/HidIpcServer.cs +++ b/src/Ryujinx.Horizon/Hid/HidIpcServer.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Horizon.Hid _serverManager = new ServerManager(allocator, _sm, MaxPortsCount, _options, MaxSessionsCount); - // _serverManager.RegisterObjectForServer(, ServiceName.Encode("hid"), MaxSessionsCount); + _serverManager.RegisterObjectForServer(new HidServer(), ServiceName.Encode("hid"), MaxSessionsCount); // _serverManager.RegisterObjectForServer(, ServiceName.Encode("hidbus"), MaxSessionsCount); // _serverManager.RegisterObjectForServer(, ServiceName.Encode("hid:sys"), MaxSessionsCount); // _serverManager.RegisterObjectForServer(, ServiceName.Encode("hid:dbg"), MaxSessionsCount); diff --git a/src/Ryujinx.Horizon/Hid/HidServer.cs b/src/Ryujinx.Horizon/Hid/HidServer.cs index 5af6241b02..1c3818a018 100644 --- a/src/Ryujinx.Horizon/Hid/HidServer.cs +++ b/src/Ryujinx.Horizon/Hid/HidServer.cs @@ -16,14 +16,6 @@ namespace Ryujinx.Horizon.Hid { partial class HidServer : IHidServer { - internal const int SharedMemEntryCount = 17; - - public DebugPadDevice DebugPad; - public TouchDevice Touchscreen; - public MouseDevice Mouse; - public KeyboardDevice Keyboard; - public NpadDevices Npads; - private SystemEventType _xpadIdEvent; private SystemEventType _palmaOperationCompleteEvent; @@ -48,12 +40,6 @@ namespace Ryujinx.Horizon.Hid public HidServer() { - DebugPad = new DebugPadDevice(true); - Touchscreen = new TouchDevice(true); - Mouse = new MouseDevice(false); - Keyboard = new KeyboardDevice(false); - Npads = new NpadDevices(true); - Os.CreateSystemEvent(out _xpadIdEvent, EventClearMode.ManualClear, interProcess: true); Os.SignalSystemEvent(ref _xpadIdEvent); // TODO: signal event at right place @@ -83,9 +69,9 @@ namespace Ryujinx.Horizon.Hid { // Initialize entries to avoid issues with some games. - for (int i = 0; i < SharedMemEntryCount; i++) + for (int i = 0; i < HorizonStatic.Hid.SharedMemEntryCount; i++) { - DebugPad.Update(); + HorizonStatic.Hid.DebugPad.Update(); } Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); @@ -96,13 +82,13 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(11)] public Result ActivateTouchScreen(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Touchscreen.Active = true; + HorizonStatic.Hid.Touchscreen.Active = true; // Initialize entries to avoid issues with some games. - for (int i = 0; i < SharedMemEntryCount; i++) + for (int i = 0; i < HorizonStatic.Hid.SharedMemEntryCount; i++) { - Touchscreen.Update(); + HorizonStatic.Hid.Touchscreen.Update(); } Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); @@ -113,13 +99,13 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(21)] public Result ActivateMouse(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Mouse.Active = true; + HorizonStatic.Hid.Mouse.Active = true; // Initialize entries to avoid issues with some games. - for (int i = 0; i < SharedMemEntryCount; i++) + for (int i = 0; i < HorizonStatic.Hid.SharedMemEntryCount; i++) { - Mouse.Update(0, 0); + HorizonStatic.Hid.Mouse.Update(0, 0); } Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); @@ -130,7 +116,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(31)] public Result ActivateKeyboard(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Keyboard.Active = true; + HorizonStatic.Hid.Keyboard.Active = true; // Initialize entries to avoid issues with some games. @@ -139,9 +125,9 @@ namespace Ryujinx.Horizon.Hid Keys = new ulong[4], }; - for (int i = 0; i < SharedMemEntryCount; i++) + for (int i = 0; i < HorizonStatic.Hid.SharedMemEntryCount; i++) { - Keyboard.Update(emptyInput); + HorizonStatic.Hid.Keyboard.Update(emptyInput); } Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); @@ -530,7 +516,7 @@ namespace Ryujinx.Horizon.Hid { Logger.Stub?.PrintStub(LogClass.ServiceHid, new { pid, appletResourceUserId, supportedStyleSets }); - Npads.SupportedStyleSets = supportedStyleSets; + HorizonStatic.Hid.Npads.SupportedStyleSets = supportedStyleSets; return Result.Success; } @@ -538,9 +524,9 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(101)] public Result GetSupportedNpadStyleSet(AppletResourceUserId appletResourceUserId, out NpadStyleTag supportedStyleSets, [ClientProcessId] ulong pid) { - supportedStyleSets = Npads.SupportedStyleSets; + supportedStyleSets = HorizonStatic.Hid.Npads.SupportedStyleSets; - Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, Npads.SupportedStyleSets }); + Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId, HorizonStatic.Hid.Npads.SupportedStyleSets }); return Result.Success; } @@ -548,13 +534,13 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(102)] public Result SetSupportedNpadIdType(AppletResourceUserId appletResourceUserId, [Buffer(HipcBufferFlags.In | HipcBufferFlags.Pointer)] ReadOnlySpan npadIds, [ClientProcessId] ulong pid) { - Npads.ClearSupportedPlayers(); + HorizonStatic.Hid.Npads.ClearSupportedPlayers(); for (int i = 0; i < npadIds.Length; i++) { if (IsValidNpadIdType(npadIds[i])) { - Npads.SetSupportedPlayer(GetIndexFromNpadIdType(npadIds[i])); + HorizonStatic.Hid.Npads.SetSupportedPlayer(GetIndexFromNpadIdType(npadIds[i])); } } @@ -574,7 +560,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(104)] public Result DeactivateNpad(AppletResourceUserId appletResourceUserId, [ClientProcessId] ulong pid) { - Npads.Active = false; + HorizonStatic.Hid.Npads.Active = false; Logger.Stub?.PrintStub(LogClass.ServiceHid, new { appletResourceUserId }); return Result.Success; @@ -839,7 +825,7 @@ namespace Ryujinx.Horizon.Hid [vibrationDeviceHandle.Position] = vibrationValue, }; - Npads.UpdateRumbleQueue(vibrationDeviceHandle.PlayerId, dualVibrationValues); + HorizonStatic.Hid.Npads.UpdateRumbleQueue(vibrationDeviceHandle.PlayerId, dualVibrationValues); return Result.Success; } @@ -847,7 +833,7 @@ namespace Ryujinx.Horizon.Hid [CmifCommand(202)] public Result GetActualVibrationValue(out VibrationValue vibrationValue, AppletResourceUserId appletResourceUserId, VibrationDeviceHandle vibrationDeviceHandle, [ClientProcessId] ulong pid) { - vibrationValue = Npads.GetLastVibrationValue(vibrationDeviceHandle.PlayerId, vibrationDeviceHandle.Position); + vibrationValue = HorizonStatic.Hid.Npads.GetLastVibrationValue(vibrationDeviceHandle.PlayerId, vibrationDeviceHandle.Position); return Result.Success; } diff --git a/src/Ryujinx.Horizon/HorizonStatic.cs b/src/Ryujinx.Horizon/HorizonStatic.cs index 305d54bd1a..a89c78f69e 100644 --- a/src/Ryujinx.Horizon/HorizonStatic.cs +++ b/src/Ryujinx.Horizon/HorizonStatic.cs @@ -6,6 +6,9 @@ namespace Ryujinx.Horizon { public static class HorizonStatic { + [ThreadStatic] + private static Sdk.Hid.Hid _hid; + [ThreadStatic] private static HorizonOptions _options; @@ -21,6 +24,7 @@ namespace Ryujinx.Horizon [ThreadStatic] private static int _threadHandle; + public static Sdk.Hid.Hid Hid => _hid; public static HorizonOptions Options => _options; public static ISyscallApi Syscall => _syscall; public static IVirtualMemoryManager AddressSpace => _addressSpace; diff --git a/src/Ryujinx.Horizon/Sdk/Hid/Hid.cs b/src/Ryujinx.Horizon/Sdk/Hid/Hid.cs index 0032c7918a..4a901fa19b 100644 --- a/src/Ryujinx.Horizon/Sdk/Hid/Hid.cs +++ b/src/Ryujinx.Horizon/Sdk/Hid/Hid.cs @@ -16,7 +16,7 @@ namespace Ryujinx.Horizon.Sdk.Hid internal ref SharedMemory SharedMemory => ref _storage.GetRef(0); - internal const int SharedMemEntryCount = 17; + internal readonly int SharedMemEntryCount = 17; public DebugPadDevice DebugPad; public TouchDevice Touchscreen; diff --git a/src/Ryujinx.Input/HLE/NpadManager.cs b/src/Ryujinx.Input/HLE/NpadManager.cs index 2c61c24352..7838e7fb56 100644 --- a/src/Ryujinx.Input/HLE/NpadManager.cs +++ b/src/Ryujinx.Input/HLE/NpadManager.cs @@ -1,9 +1,10 @@ using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Common.Configuration.Hid.Keyboard; -using Ryujinx.HLE.HOS.Services.Hid; +using Ryujinx.Horizon; using Ryujinx.Horizon.Sdk.Hid; using Ryujinx.Horizon.Sdk.Hid.HidDevices; +using Ryujinx.Horizon.Sdk.Hid.Npad; using Ryujinx.Horizon.Sdk.Hid.SixAxis; using System; using System.Collections.Generic; @@ -66,7 +67,7 @@ namespace Ryujinx.Input.HLE } } - _device.Hid.RefreshInputConfig(validInputs); + HorizonStatic.Hid.RefreshInputConfig(validInputs); } } @@ -169,7 +170,7 @@ namespace Ryujinx.Input.HLE _enableKeyboard = enableKeyboard; _enableMouse = enableMouse; - _device.Hid.RefreshInputConfig(validInputs); + HorizonStatic.Hid.RefreshInputConfig(validInputs); } } @@ -228,11 +229,11 @@ namespace Ryujinx.Input.HLE controller.UpdateUserConfiguration(inputConfig); controller.Update(); - controller.UpdateRumble(_device.Hid.Npads.GetRumbleQueue(playerIndex)); + controller.UpdateRumble(HorizonStatic.Hid.Npads.GetRumbleQueue((NpadIdType)playerIndex)); inputState = controller.GetHLEInputState(); - inputState.Buttons |= _device.Hid.UpdateStickButtons(inputState.LStick, inputState.RStick); + inputState.Buttons |= HorizonStatic.Hid.UpdateStickButtons(inputState.LStick, inputState.RStick); isJoyconPair = inputConfig.ControllerType == ControllerType.JoyconPair; @@ -265,12 +266,12 @@ namespace Ryujinx.Input.HLE hleKeyboardInput = NpadController.GetHLEKeyboardInput(_keyboardDriver); } - _device.Hid.Npads.Update(hleInputStates); - _device.Hid.Npads.UpdateSixAxis(hleMotionStates); + HorizonStatic.Hid.Npads.Update(hleInputStates); + HorizonStatic.Hid.Npads.UpdateSixAxis(hleMotionStates); if (hleKeyboardInput.HasValue) { - _device.Hid.Keyboard.Update(hleKeyboardInput.Value); + HorizonStatic.Hid.Keyboard.Update(hleKeyboardInput.Value); } if (_enableMouse) @@ -308,11 +309,11 @@ namespace Ryujinx.Input.HLE var position = IMouse.GetScreenPosition(mouseInput.Position, mouse.ClientSize, aspectRatio); - _device.Hid.Mouse.Update((int)position.X, (int)position.Y, buttons, (int)mouseInput.Scroll.X, (int)mouseInput.Scroll.Y, true); + HorizonStatic.Hid.Mouse.Update((int)position.X, (int)position.Y, buttons, (int)mouseInput.Scroll.X, (int)mouseInput.Scroll.Y, true); } else { - _device.Hid.Mouse.Update(0, 0); + HorizonStatic.Hid.Mouse.Update(0, 0); } _device.TamperMachine.UpdateInput(hleInputStates); diff --git a/src/Ryujinx.Input/HLE/TouchScreenManager.cs b/src/Ryujinx.Input/HLE/TouchScreenManager.cs index 8eca633387..44bcd546af 100644 --- a/src/Ryujinx.Input/HLE/TouchScreenManager.cs +++ b/src/Ryujinx.Input/HLE/TouchScreenManager.cs @@ -1,7 +1,6 @@ using Ryujinx.HLE; -using Ryujinx.HLE.HOS.Services.Hid; +using Ryujinx.Horizon; using Ryujinx.Horizon.Sdk.Hid; -using Ryujinx.Horizon.Sdk.Hid.SharedMemory.TouchScreen; using System; namespace Ryujinx.Input.HLE @@ -9,7 +8,6 @@ namespace Ryujinx.Input.HLE public class TouchScreenManager : IDisposable { private readonly IMouse _mouse; - private Switch _device; private bool _wasClicking; public TouchScreenManager(IMouse mouse) @@ -17,11 +15,6 @@ namespace Ryujinx.Input.HLE _mouse = mouse; } - public void Initialize(Switch device) - { - _device = device; - } - public bool Update(bool isFocused, bool isClicking = false, float aspectRatio = 0) { if (!isFocused || (!_wasClicking && !isClicking)) @@ -45,13 +38,12 @@ namespace Ryujinx.Input.HLE Angle = 90, }; - _device.Hid.Touchscreen.Update(currentPoint); - + HorizonStatic.Hid.Touchscreen.Update(currentPoint); } _wasClicking = false; - _device.Hid.Touchscreen.Update(); + HorizonStatic.Hid.Touchscreen.Update(); return false; } @@ -85,7 +77,7 @@ namespace Ryujinx.Input.HLE Angle = 90, }; - _device.Hid.Touchscreen.Update(currentPoint); + HorizonStatic.Hid.Touchscreen.Update(currentPoint); _wasClicking = isClicking; diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 8c643f3402..817ab001dd 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -33,6 +33,7 @@ using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; +using Ryujinx.Horizon; using Ryujinx.Input; using Ryujinx.Input.HLE; using Ryujinx.UI.App.Common; @@ -422,7 +423,6 @@ namespace Ryujinx.Ava DisplaySleep.Prevent(); NpadManager.Initialize(Device, ConfigurationState.Instance.Hid.InputConfig, ConfigurationState.Instance.Hid.EnableKeyboard, ConfigurationState.Instance.Hid.EnableMouse); - TouchScreenManager.Initialize(Device); _viewModel.IsGameRunning = true; @@ -1233,10 +1233,10 @@ namespace Ryujinx.Ava if (!hasTouch) { - Device.Hid.Touchscreen.Update(); + HorizonStatic.Hid.Touchscreen.Update(); } - Device.Hid.DebugPad.Update(); + HorizonStatic.Hid.DebugPad.Update(); return true; } diff --git a/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs b/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs index d69e5e48d0..4e89293d0b 100644 --- a/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs +++ b/src/Ryujinx/UI/Applet/ControllerAppletDialog.axaml.cs @@ -8,9 +8,7 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; using Ryujinx.Common; using Ryujinx.HLE.HOS.Applets; -using Ryujinx.HLE.HOS.Services.Hid; using Ryujinx.Horizon.Sdk.Hid.Npad; -using System; using System.Linq; using System.Threading.Tasks; @@ -48,10 +46,10 @@ namespace Ryujinx.Ava.UI.Applet PlayerCount = $"{args.PlayerCountMin} - {args.PlayerCountMax}"; } - SupportsProController = (args.SupportedStyles & ControllerType.ProController) != 0; - SupportsLeftJoycon = (args.SupportedStyles & ControllerType.JoyconLeft) != 0; - SupportsRightJoycon = (args.SupportedStyles & ControllerType.JoyconRight) != 0; - SupportsJoyconPair = (args.SupportedStyles & ControllerType.JoyconPair) != 0; + SupportsProController = (args.SupportedStyles & NpadStyleIndex.FullKey) != 0; + SupportsLeftJoycon = (args.SupportedStyles & NpadStyleIndex.JoyLeft) != 0; + SupportsRightJoycon = (args.SupportedStyles & NpadStyleIndex.JoyRight) != 0; + SupportsJoyconPair = (args.SupportedStyles & NpadStyleIndex.JoyDual) != 0; IsDocked = args.IsDocked;