Add IPC checks and comments for future reversing
Co-authored-by: Ac_K <Acoustik666@gmail.com>
This commit is contained in:
parent
c57e1eef42
commit
b8d81e16dd
3 changed files with 80 additions and 11 deletions
|
@ -128,7 +128,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
||||||
|
|
||||||
if (cpuBoostMode > 1)
|
if (cpuBoostMode > 1)
|
||||||
{
|
{
|
||||||
return ResultCode.CpuBoostModeInvalid;
|
return ResultCode.InvalidParameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
_cpuBoostMode = (CpuBoostMode)cpuBoostMode;
|
_cpuBoostMode = (CpuBoostMode)cpuBoostMode;
|
||||||
|
|
|
@ -8,6 +8,7 @@ using Ryujinx.Common;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using Ryujinx.HLE.HOS.Ipc;
|
using Ryujinx.HLE.HOS.Ipc;
|
||||||
using Ryujinx.HLE.HOS.Kernel.Common;
|
using Ryujinx.HLE.HOS.Kernel.Common;
|
||||||
|
using Ryujinx.HLE.HOS.Kernel.Memory;
|
||||||
using Ryujinx.HLE.HOS.Kernel.Threading;
|
using Ryujinx.HLE.HOS.Kernel.Threading;
|
||||||
using Ryujinx.HLE.HOS.Services.Am.AppletAE.Storage;
|
using Ryujinx.HLE.HOS.Services.Am.AppletAE.Storage;
|
||||||
using Ryujinx.HLE.HOS.Services.Sdb.Pdm.QueryService;
|
using Ryujinx.HLE.HOS.Services.Sdb.Pdm.QueryService;
|
||||||
|
@ -175,10 +176,45 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
||||||
int width = context.RequestData.ReadInt32();
|
int width = context.RequestData.ReadInt32();
|
||||||
int height = context.RequestData.ReadInt32();
|
int height = context.RequestData.ReadInt32();
|
||||||
ulong transferMemorySize = context.RequestData.ReadUInt64();
|
ulong transferMemorySize = context.RequestData.ReadUInt64();
|
||||||
|
int transferMemoryHandle = context.Request.HandleDesc.ToCopy[0];
|
||||||
|
ulong transferMemoryAddress = context.Process.HandleTable.GetObject<KTransferMemory>(transferMemoryHandle).Address;
|
||||||
|
|
||||||
Logger.PrintStub(LogClass.ServiceAm, new { width, height, transferMemorySize });
|
ResultCode resultCode = ResultCode.InvalidParameters;
|
||||||
|
|
||||||
return ResultCode.Success;
|
if (((transferMemorySize & 0x3FFFF) == 0) && width <= 1280 && height <= 720)
|
||||||
|
{
|
||||||
|
resultCode = InitializeApplicationCopyrightFrameBufferImpl(transferMemoryAddress, transferMemorySize, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (transferMemoryHandle)
|
||||||
|
{
|
||||||
|
svcCloseHandle(transferMemoryHandle);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
return resultCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ResultCode InitializeApplicationCopyrightFrameBufferImpl(ulong transferMemoryAddress, ulong transferMemorySize, int width, int height)
|
||||||
|
{
|
||||||
|
ResultCode resultCode = ResultCode.ObjectInvalid;
|
||||||
|
|
||||||
|
if ((transferMemorySize & 0x3FFFF) != 0)
|
||||||
|
{
|
||||||
|
return ResultCode.InvalidParameters;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (_copyrightBuffer == null)
|
||||||
|
{
|
||||||
|
// TODO: Initialize buffer and object.
|
||||||
|
|
||||||
|
Logger.PrintStub(LogClass.ServiceAm, new { transferMemoryAddress, transferMemorySize, width, height });
|
||||||
|
|
||||||
|
resultCode = ResultCode.Success;
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
[Command(101)] // 5.0.0+
|
[Command(101)] // 5.0.0+
|
||||||
|
@ -193,8 +229,38 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
||||||
int height = context.RequestData.ReadInt32();
|
int height = context.RequestData.ReadInt32();
|
||||||
uint windowOriginMode = context.RequestData.ReadUInt32();
|
uint windowOriginMode = context.RequestData.ReadUInt32();
|
||||||
|
|
||||||
|
ResultCode resultCode = ResultCode.InvalidParameters;
|
||||||
|
|
||||||
|
if (((y | x) >= 0) && width >= 1 && height >= 1)
|
||||||
|
{
|
||||||
|
ResultCode result = SetApplicationCopyrightImageImpl(x, y, width, height, frameBufferPos, frameBufferSize, windowOriginMode);
|
||||||
|
|
||||||
|
if (resultCode != ResultCode.Success)
|
||||||
|
{
|
||||||
|
resultCode = result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
resultCode = ResultCode.Success;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Logger.PrintStub(LogClass.ServiceAm, new { frameBufferPos, frameBufferSize, x, y, width, height, windowOriginMode });
|
Logger.PrintStub(LogClass.ServiceAm, new { frameBufferPos, frameBufferSize, x, y, width, height, windowOriginMode });
|
||||||
|
|
||||||
|
return resultCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ResultCode SetApplicationCopyrightImageImpl(int x, int y, int width, int height, long frameBufferPos, long frameBufferSize, uint windowOriginMode)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
if (_copyrightBuffer == null)
|
||||||
|
{
|
||||||
|
return ResultCode.NullCopyrightObject;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
Logger.PrintStub(LogClass.ServiceAm, new { x, y, width, height, frameBufferPos, frameBufferSize, windowOriginMode });
|
||||||
|
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,6 +272,8 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati
|
||||||
|
|
||||||
Logger.PrintStub(LogClass.ServiceAm, new { visible });
|
Logger.PrintStub(LogClass.ServiceAm, new { visible });
|
||||||
|
|
||||||
|
// NOTE: It sets an internal field and return ResultCode.Success in all case.
|
||||||
|
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ namespace Ryujinx.HLE.HOS.Services.Am
|
||||||
NoMessages = (3 << ErrorCodeShift) | ModuleId,
|
NoMessages = (3 << ErrorCodeShift) | ModuleId,
|
||||||
ObjectInvalid = (500 << ErrorCodeShift) | ModuleId,
|
ObjectInvalid = (500 << ErrorCodeShift) | ModuleId,
|
||||||
OutOfBounds = (503 << ErrorCodeShift) | ModuleId,
|
OutOfBounds = (503 << ErrorCodeShift) | ModuleId,
|
||||||
CpuBoostModeInvalid = (506 << ErrorCodeShift) | ModuleId
|
InvalidParameters = (506 << ErrorCodeShift) | ModuleId,
|
||||||
|
NullObject = (518 << ErrorCodeShift) | ModuleId
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue