aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Hid/IHidSystemServer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Hid/IHidSystemServer.cs')
-rw-r--r--Ryujinx.HLE/HOS/Services/Hid/IHidSystemServer.cs70
1 files changed, 69 insertions, 1 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Hid/IHidSystemServer.cs b/Ryujinx.HLE/HOS/Services/Hid/IHidSystemServer.cs
index 019e9954..ec8295e2 100644
--- a/Ryujinx.HLE/HOS/Services/Hid/IHidSystemServer.cs
+++ b/Ryujinx.HLE/HOS/Services/Hid/IHidSystemServer.cs
@@ -1,8 +1,76 @@
-namespace Ryujinx.HLE.HOS.Services.Hid
+using Ryujinx.Common.Logging;
+using Ryujinx.HLE.HOS.Services.Hid.HidServer;
+using Ryujinx.HLE.HOS.Services.Hid.Types;
+
+namespace Ryujinx.HLE.HOS.Services.Hid
{
[Service("hid:sys")]
class IHidSystemServer : IpcService
{
public IHidSystemServer(ServiceCtx context) { }
+
+ [CommandHipc(303)]
+ // ApplyNpadSystemCommonPolicy(u64)
+ public ResultCode ApplyNpadSystemCommonPolicy(ServiceCtx context)
+ {
+ ulong commonPolicy = context.RequestData.ReadUInt64();
+
+ Logger.Stub?.PrintStub(LogClass.ServiceHid, new { commonPolicy });
+
+ return ResultCode.Success;
+ }
+
+ [CommandHipc(306)]
+ // GetLastActiveNpad(u32) -> u8, u8
+ public ResultCode GetLastActiveNpad(ServiceCtx context)
+ {
+ // TODO: RequestData seems to have garbage data, reading an extra uint seems to fix the issue.
+ context.RequestData.ReadUInt32();
+
+ ResultCode resultCode = GetAppletFooterUiTypeImpl(context, out AppletFooterUiType appletFooterUiType);
+
+ context.ResponseData.Write((byte)appletFooterUiType);
+ context.ResponseData.Write((byte)0);
+
+ return resultCode;
+ }
+
+ [CommandHipc(307)]
+ // GetNpadSystemExtStyle() -> u64
+ public ResultCode GetNpadSystemExtStyle(ServiceCtx context)
+ {
+ foreach (PlayerIndex playerIndex in context.Device.Hid.Npads.GetSupportedPlayers())
+ {
+ if (HidUtils.GetNpadIdTypeFromIndex(playerIndex) > NpadIdType.Handheld)
+ {
+ return ResultCode.InvalidNpadIdType;
+ }
+ }
+
+ context.ResponseData.Write((ulong)context.Device.Hid.Npads.SupportedStyleSets);
+
+ return ResultCode.Success;
+ }
+
+ [CommandHipc(314)] // 9.0.0+
+ // GetAppletFooterUiType(u32) -> u8
+ public ResultCode GetAppletFooterUiType(ServiceCtx context)
+ {
+ ResultCode resultCode = GetAppletFooterUiTypeImpl(context, out AppletFooterUiType appletFooterUiType);
+
+ context.ResponseData.Write((byte)appletFooterUiType);
+
+ return resultCode;
+ }
+
+ private ResultCode GetAppletFooterUiTypeImpl(ServiceCtx context, out AppletFooterUiType appletFooterUiType)
+ {
+ NpadIdType npadIdType = (NpadIdType)context.RequestData.ReadUInt32();
+ PlayerIndex playerIndex = HidUtils.GetIndexFromNpadIdType(npadIdType);
+
+ appletFooterUiType = context.Device.Hid.SharedMemory.Npads[(int)playerIndex].InternalState.AppletFooterUiType;
+
+ return ResultCode.Success;
+ }
}
} \ No newline at end of file