fix: implement real applets with stability improvements
This commit is contained in:
parent
d7cdb5584c
commit
da678d3438
@ -507,10 +507,12 @@ namespace Ryujinx.HLE.HOS.Applets
|
|||||||
if (child == _foregroundRequestedApplet)
|
if (child == _foregroundRequestedApplet)
|
||||||
{
|
{
|
||||||
UpdateAppletStateLocked(child, true);
|
UpdateAppletStateLocked(child, true);
|
||||||
|
_foregroundRequestedApplet.SetInteractibleLocked(true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UpdateAppletStateLocked(child, isForeground);
|
UpdateAppletStateLocked(child, isForeground);
|
||||||
|
_foregroundRequestedApplet.SetInteractibleLocked(isForeground);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -135,9 +135,9 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
// RequestExit()
|
// RequestExit()
|
||||||
public ResultCode RequestExit(ServiceCtx context)
|
public ResultCode RequestExit(ServiceCtx context)
|
||||||
{
|
{
|
||||||
_applet.ProcessHandle.SetActivity(false);
|
_applet?.ProcessHandle?.SetActivity(false);
|
||||||
_applet.AppletState.OnExitRequested();
|
_applet?.AppletState?.OnExitRequested();
|
||||||
_applet?.ProcessHandle.Terminate();
|
_applet?.ProcessHandle?.Terminate();
|
||||||
Logger.Stub?.PrintStub(LogClass.ServiceAm);
|
Logger.Stub?.PrintStub(LogClass.ServiceAm);
|
||||||
|
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
@ -147,9 +147,9 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Lib
|
|||||||
// Terminate()
|
// Terminate()
|
||||||
public ResultCode Terminate(ServiceCtx context)
|
public ResultCode Terminate(ServiceCtx context)
|
||||||
{
|
{
|
||||||
_applet.ProcessHandle.SetActivity(false);
|
_applet?.ProcessHandle?.SetActivity(false);
|
||||||
_applet.AppletState.OnExitRequested();
|
_applet?.AppletState?.OnExitRequested();
|
||||||
_applet?.ProcessHandle.Terminate();
|
_applet?.ProcessHandle?.Terminate();
|
||||||
Logger.Stub?.PrintStub(LogClass.ServiceAm);
|
Logger.Stub?.PrintStub(LogClass.ServiceAm);
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
@ -91,9 +91,9 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
// RequestExit()
|
// RequestExit()
|
||||||
public ResultCode RequestExit(ServiceCtx context)
|
public ResultCode RequestExit(ServiceCtx context)
|
||||||
{
|
{
|
||||||
applet.ProcessHandle.SetActivity(false);
|
applet?.ProcessHandle?.SetActivity(false);
|
||||||
applet.AppletState.OnExitRequested();
|
applet?.AppletState?.OnExitRequested();
|
||||||
applet?.ProcessHandle.Terminate();
|
applet?.ProcessHandle?.Terminate();
|
||||||
Logger.Stub?.PrintStub(LogClass.ServiceAm);
|
Logger.Stub?.PrintStub(LogClass.ServiceAm);
|
||||||
|
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
|
@ -81,6 +81,8 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
}
|
}
|
||||||
|
|
||||||
[CommandCmif(18)]
|
[CommandCmif(18)]
|
||||||
|
[CommandCmif(23)]
|
||||||
|
[CommandCmif(25)]
|
||||||
// AcquireCallerAppletCaptureBufferEx() -> (b8, handle<copy>)
|
// AcquireCallerAppletCaptureBufferEx() -> (b8, handle<copy>)
|
||||||
public ResultCode AcquireCallerAppletCaptureBufferEx(ServiceCtx context)
|
public ResultCode AcquireCallerAppletCaptureBufferEx(ServiceCtx context)
|
||||||
{
|
{
|
||||||
@ -110,6 +112,7 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|||||||
byte unknown1 = context.RequestData.ReadByte();
|
byte unknown1 = context.RequestData.ReadByte();
|
||||||
int captureSharedBuffer = context.RequestData.ReadInt32();
|
int captureSharedBuffer = context.RequestData.ReadInt32();
|
||||||
uint color = context.RequestData.ReadUInt32();
|
uint color = context.RequestData.ReadUInt32();
|
||||||
|
context.Device.System.ViServerS.CancelFrameBuffer(context.Device.System.ViServerS.GetSharedLayerId(),captureSharedBuffer);
|
||||||
Logger.Stub?.PrintStub(LogClass.ServiceAm, new { unknown1, captureSharedBuffer });
|
Logger.Stub?.PrintStub(LogClass.ServiceAm, new { unknown1, captureSharedBuffer });
|
||||||
return ResultCode.Success;
|
return ResultCode.Success;
|
||||||
}
|
}
|
||||||
|
@ -199,7 +199,7 @@ namespace Ryujinx.HLE.HOS.Services
|
|||||||
|
|
||||||
if (SmObjectFactory != null)
|
if (SmObjectFactory != null)
|
||||||
{
|
{
|
||||||
_context.Syscall.ManageNamedPort(out int serverPortHandle, "sm:", 50);
|
_context.Syscall.ManageNamedPort(out int serverPortHandle, "sm:", 50).AbortOnFailure();
|
||||||
|
|
||||||
AddPort(serverPortHandle, SmObjectFactory);
|
AddPort(serverPortHandle, SmObjectFactory);
|
||||||
}
|
}
|
||||||
@ -304,10 +304,14 @@ namespace Ryujinx.HLE.HOS.Services
|
|||||||
_wakeEvent.WritableEvent.Clear();
|
_wakeEvent.WritableEvent.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (rc == KernelResult.PortRemoteClosed && signaledIndex >= 0 && SmObjectFactory != null)
|
else if (rc == KernelResult.PortRemoteClosed && signaledIndex >= 0/* && SmObjectFactory != null*/)
|
||||||
{
|
{
|
||||||
DestroySession(handles[signaledIndex]);
|
DestroySession(handles[signaledIndex]);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.Warning?.Print(LogClass.Service, $"ReplyAndReceive failed with unknown result: {rc}");
|
||||||
|
}
|
||||||
|
|
||||||
_selfProcess.CpuMemory.Write(messagePtr + 0x0, 0);
|
_selfProcess.CpuMemory.Write(messagePtr + 0x0, 0);
|
||||||
_selfProcess.CpuMemory.Write(messagePtr + 0x4, 2 << 10);
|
_selfProcess.CpuMemory.Write(messagePtr + 0x4, 2 << 10);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user