diff --git a/Ryujinx.HLE/HOS/Services/Hid/HidUtils.cs b/Ryujinx.HLE/HOS/Services/Hid/HidUtils.cs index 300c8d30d3..64252ce80e 100644 --- a/Ryujinx.HLE/HOS/Services/Hid/HidUtils.cs +++ b/Ryujinx.HLE/HOS/Services/Hid/HidUtils.cs @@ -1,24 +1,26 @@ -using System; +using Ryujinx.HLE.Input; +using System; namespace Ryujinx.HLE.HOS.Services.Hid { static class HidUtils { - public static int GetNpadTypeId(uint npadId) + public static HidControllerId GetIndexFromNpadIdType(NpadIdType npadIdType) { - switch (npadId) + switch (npadIdType) { - case 0: return 0; - case 1: return 1; - case 2: return 2; - case 3: return 3; - case 4: return 4; - case 5: return 5; - case 6: return 6; - case 7: return 7; - case 32: return 8; - case 16: return 9; - default: throw new ArgumentOutOfRangeException(nameof(npadId)); + case NpadIdType.Player1: return HidControllerId.ControllerPlayer1; + case NpadIdType.Player2: return HidControllerId.ControllerPlayer2; + case NpadIdType.Player3: return HidControllerId.ControllerPlayer3; + case NpadIdType.Player4: return HidControllerId.ControllerPlayer4; + case NpadIdType.Player5: return HidControllerId.ControllerPlayer5; + case NpadIdType.Player6: return HidControllerId.ControllerPlayer6; + case NpadIdType.Player7: return HidControllerId.ControllerPlayer7; + case NpadIdType.Player8: return HidControllerId.ControllerPlayer8; + case NpadIdType.Handheld: return HidControllerId.ControllerHandheld; + case NpadIdType.Unknown: return HidControllerId.ControllerUnknown; + + default: throw new ArgumentOutOfRangeException(nameof(npadIdType)); } } } diff --git a/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs b/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs index fda56863f5..a8ceed4c74 100644 --- a/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs +++ b/Ryujinx.HLE/HOS/Services/Hid/Irs/IIrSensorServer.cs @@ -1,6 +1,7 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Ipc; using Ryujinx.HLE.HOS.Kernel.Common; +using Ryujinx.HLE.Input; using System; using System.Collections.Generic; @@ -78,21 +79,19 @@ namespace Ryujinx.HLE.HOS.Services.Hid.Irs // GetNpadIrCameraHandle(u32) -> nn::irsensor::IrCameraHandle public long GetNpadIrCameraHandle(ServiceCtx context) { - uint npadId = context.RequestData.ReadUInt32(); + NpadIdType npadIdType = (NpadIdType)context.RequestData.ReadUInt32(); - if (npadId >= 8 && npadId != 16 && npadId != 32) + if (npadIdType >= NpadIdType.Player8 && npadIdType != NpadIdType.Unknown && npadIdType != NpadIdType.Handheld) { - return ErrorCode.MakeError(ErrorModule.Hid, IrsError.NpadIdOutOfRange); + return ErrorCode.MakeError(ErrorModule.Irsensor, IrsError.NpadIdOutOfRange); } - if (((1 << (int)npadId) & 0x1000100FF) == 0) - { - return ErrorCode.MakeError(ErrorModule.Hid, IrsError.NpadIdOutOfRange); - } + HidControllerId irCameraHandle = HidUtils.GetIndexFromNpadIdType(npadIdType); - int npadTypeId = HidUtils.GetNpadTypeId(npadId); + context.ResponseData.Write((int)irCameraHandle); - context.ResponseData.Write(npadTypeId); + // NOTE: If the irCameraHandle pointer is null this error is returned, Doesn't occur in our case. + // return ErrorCode.MakeError(ErrorModule.Irsensor, IrsError.HandlePointerIsNull); return 0; } diff --git a/Ryujinx.HLE/HOS/Services/Hid/Irs/IrsError.cs b/Ryujinx.HLE/HOS/Services/Hid/Irs/IrsError.cs index 2d8dae69f7..fca3850738 100644 --- a/Ryujinx.HLE/HOS/Services/Hid/Irs/IrsError.cs +++ b/Ryujinx.HLE/HOS/Services/Hid/Irs/IrsError.cs @@ -2,6 +2,7 @@ { static class IrsError { - public const int NpadIdOutOfRange = 709; + public const int HandlePointerIsNull = 212; + public const int NpadIdOutOfRange = 709; } } \ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Hid/NpadIdType.cs b/Ryujinx.HLE/HOS/Services/Hid/NpadIdType.cs new file mode 100644 index 0000000000..5f6a68cb05 --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Hid/NpadIdType.cs @@ -0,0 +1,16 @@ +namespace Ryujinx.HLE.HOS.Services.Hid +{ + public enum NpadIdType + { + Player1 = 0, + Player2 = 1, + Player3 = 2, + Player4 = 3, + Player5 = 4, + Player6 = 5, + Player7 = 6, + Player8 = 7, + Unknown = 16, + Handheld = 32 + } +} \ No newline at end of file