|
|
@@ -9,8 +9,10 @@ using System;
|
|
|
|
|
|
namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy
|
|
|
{
|
|
|
- class ICommonStateGetter : IpcService
|
|
|
+ class ICommonStateGetter : DisposableIpcService
|
|
|
{
|
|
|
+ private readonly ServiceCtx _context;
|
|
|
+
|
|
|
private Apm.ManagerServer _apmManagerServer;
|
|
|
private Apm.SystemManagerServer _apmSystemManagerServer;
|
|
|
private Lbl.LblControllerServer _lblControllerServer;
|
|
|
@@ -23,11 +25,18 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|
|
private int _messageEventHandle;
|
|
|
private int _displayResolutionChangedEventHandle;
|
|
|
|
|
|
+ private KEvent _acquiredSleepLockEvent;
|
|
|
+ private int _acquiredSleepLockEventHandle;
|
|
|
+
|
|
|
public ICommonStateGetter(ServiceCtx context)
|
|
|
{
|
|
|
+ _context = context;
|
|
|
+
|
|
|
_apmManagerServer = new Apm.ManagerServer(context);
|
|
|
_apmSystemManagerServer = new Apm.SystemManagerServer(context);
|
|
|
_lblControllerServer = new Lbl.LblControllerServer(context);
|
|
|
+
|
|
|
+ _acquiredSleepLockEvent = new KEvent(context.Device.System.KernelContext);
|
|
|
}
|
|
|
|
|
|
[CommandCmif(0)]
|
|
|
@@ -117,6 +126,34 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|
|
return ResultCode.Success;
|
|
|
}
|
|
|
|
|
|
+ [CommandCmif(10)]
|
|
|
+ // RequestToAcquireSleepLock()
|
|
|
+ public ResultCode RequestToAcquireSleepLock(ServiceCtx context)
|
|
|
+ {
|
|
|
+ Logger.Stub?.PrintStub(LogClass.ServiceAm);
|
|
|
+
|
|
|
+ return ResultCode.Success;
|
|
|
+ }
|
|
|
+
|
|
|
+ [CommandCmif(13)]
|
|
|
+ // GetAcquiredSleepLockEvent() -> handle<copy>
|
|
|
+ public ResultCode GetAcquiredSleepLockEvent(ServiceCtx context)
|
|
|
+ {
|
|
|
+ if (_acquiredSleepLockEventHandle == 0)
|
|
|
+ {
|
|
|
+ if (context.Process.HandleTable.GenerateHandle(_acquiredSleepLockEvent.ReadableEvent, out _acquiredSleepLockEventHandle) != Result.Success)
|
|
|
+ {
|
|
|
+ throw new InvalidOperationException("Out of handles!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ context.Response.HandleDesc = IpcHandleDesc.MakeCopy(_acquiredSleepLockEventHandle);
|
|
|
+
|
|
|
+ Logger.Stub?.PrintStub(LogClass.ServiceAm);
|
|
|
+
|
|
|
+ return ResultCode.Success;
|
|
|
+ }
|
|
|
+
|
|
|
[CommandCmif(50)] // 3.0.0+
|
|
|
// IsVrModeEnabled() -> b8
|
|
|
public ResultCode IsVrModeEnabled(ServiceCtx context)
|
|
|
@@ -281,5 +318,17 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.Sys
|
|
|
|
|
|
return ResultCode.Success;
|
|
|
}
|
|
|
+
|
|
|
+ protected override void Dispose(bool isDisposing)
|
|
|
+ {
|
|
|
+ if (isDisposing)
|
|
|
+ {
|
|
|
+ if (_acquiredSleepLockEventHandle != 0)
|
|
|
+ {
|
|
|
+ _context.Process.HandleTable.CloseHandle(_acquiredSleepLockEventHandle);
|
|
|
+ _acquiredSleepLockEventHandle = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|