hid: Cleanup and implement some calls (#2380)
This commit is contained in:
parent
9efe124fc5
commit
eb23933331
7 changed files with 205 additions and 63 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue