diff --git a/src/Ryujinx.Horizon/Am/Ipc/Controllers/AppletAccessor.cs b/src/Ryujinx.Horizon/Am/Ipc/Controllers/AppletAccessor.cs new file mode 100644 index 0000000000..9e6b53b930 --- /dev/null +++ b/src/Ryujinx.Horizon/Am/Ipc/Controllers/AppletAccessor.cs @@ -0,0 +1,60 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Am.Controllers; +using Ryujinx.Horizon.Sdk.Sf; + +namespace Ryujinx.Horizon.Am.Ipc.Controllers +{ + partial class AppletAccessor : IAppletAccessor + { + [CmifCommand(0)] + public Result GetAppletStateChangedEvent(out int arg0) + { + arg0 = 0; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(1)] + public Result IsCompleted(out bool arg0) + { + arg0 = false; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(10)] + public Result Start() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(20)] + public Result RequestExit() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(25)] + public Result Terminate() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(30)] + public Result GetResult() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + } +} diff --git a/src/Ryujinx.Horizon/Am/Ipc/Controllers/ApplicationAccessor.cs b/src/Ryujinx.Horizon/Am/Ipc/Controllers/ApplicationAccessor.cs new file mode 100644 index 0000000000..6b5f6a7233 --- /dev/null +++ b/src/Ryujinx.Horizon/Am/Ipc/Controllers/ApplicationAccessor.cs @@ -0,0 +1,241 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Account; +using Ryujinx.Horizon.Sdk.Am; +using Ryujinx.Horizon.Sdk.Am.Controllers; +using Ryujinx.Horizon.Sdk.Am.Storage; +using Ryujinx.Horizon.Sdk.Sf; +using Ryujinx.Horizon.Sdk.Sf.Hipc; +using System; +using ApplicationId = Ryujinx.Horizon.Sdk.Ncm.ApplicationId; + + +namespace Ryujinx.Horizon.Am.Ipc.Controllers +{ + partial class ApplicationAccessor : IApplicationAccessor + { + private readonly ApplicationId _applicationId; + + public ApplicationAccessor(ApplicationId applicationId) + { + _applicationId = applicationId; + } + + [CmifCommand(0)] + public Result GetAppletStateChangedEvent([CopyHandle] out int arg0) + { + arg0 = 0; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(1)] + public Result IsCompleted(out bool arg0) + { + arg0 = false; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(10)] + public Result Start() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(20)] + public Result RequestExit() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(25)] + public Result Terminate() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(30)] + public Result GetResult() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(101)] + public Result RequestForApplicationToGetForeground() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(110)] + public Result TerminateAllLibraryApplets() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(111)] + public Result AreAnyLibraryAppletsLeft(out bool arg0) + { + arg0 = false; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(112)] + public Result GetCurrentLibraryApplet(out IAppletAccessor arg0) + { + arg0 = new AppletAccessor(); + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(120)] + public Result GetApplicationId(out ApplicationId arg0) + { + arg0 = _applicationId; + + return Result.Success; + } + + [CmifCommand(121)] + public Result PushLaunchParameter(uint arg0, IStorage arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(122)] + public Result GetApplicationControlProperty([Buffer(HipcBufferFlags.Out | HipcBufferFlags.AutoSelect)] Span arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(123)] + public Result GetApplicationLaunchProperty([Buffer(HipcBufferFlags.Out | HipcBufferFlags.AutoSelect)] Span arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(124)] + public Result GetApplicationLaunchRequestInfo(out ApplicationLaunchRequestInfo arg0) + { + arg0 = new ApplicationLaunchRequestInfo(); + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(130)] + public Result SetUsers(bool arg0, ReadOnlySpan arg1) + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(131)] + public Result CheckRightsEnvironmentAvailable(out bool arg0) + { + arg0 = false; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(132)] + public Result GetNsRightsEnvironmentHandle(out ulong arg0) + { + arg0 = 0; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(140)] + public Result GetDesirableUids(out int arg0, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.AutoSelect)] Span arg1) + { + arg0 = 0; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(150)] + public Result ReportApplicationExitTimeout() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(160)] + public Result SetApplicationAttribute(in ApplicationAttribute arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(170)] + public Result HasSaveDataAccessPermission(out bool arg0, ApplicationId arg1) + { + arg0 = false; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(180)] + public Result PushToFriendInvitationStorageChannel(IStorage arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(190)] + public Result PushToNotificationStorageChannel(IStorage arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(200)] + public Result RequestApplicationSoftReset() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(201)] + public Result RestartApplicationTimer() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + } +} diff --git a/src/Ryujinx.Horizon/Am/Ipc/Controllers/ApplicationCreator.cs b/src/Ryujinx.Horizon/Am/Ipc/Controllers/ApplicationCreator.cs new file mode 100644 index 0000000000..363dd0373f --- /dev/null +++ b/src/Ryujinx.Horizon/Am/Ipc/Controllers/ApplicationCreator.cs @@ -0,0 +1,42 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Am.Controllers; +using Ryujinx.Horizon.Sdk.Sf; +using System; +using ApplicationId = Ryujinx.Horizon.Sdk.Ncm.ApplicationId; + +namespace Ryujinx.Horizon.Am.Ipc.Controllers +{ + partial class ApplicationCreator : IApplicationCreator + { + [CmifCommand(0)] + public Result CreateApplication(out IApplicationAccessor accessor, ApplicationId applicationId) + { + accessor = new ApplicationAccessor(applicationId); + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(1)] + public Result PopLaunchRequestedApplication(out IApplicationAccessor accessor) + { + throw new NotImplementedException(); + } + + [CmifCommand(10)] + public Result CreateSystemApplication(out IApplicationAccessor accessor, ApplicationId applicationId) + { + accessor = new ApplicationAccessor(applicationId); + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(100)] + public Result PopFloatingApplicationForDevelopment(out IApplicationAccessor accessor) + { + throw new NotImplementedException(); + } + } +} diff --git a/src/Ryujinx.Horizon/Am/Ipc/Controllers/HomeMenuFunctions.cs b/src/Ryujinx.Horizon/Am/Ipc/Controllers/HomeMenuFunctions.cs new file mode 100644 index 0000000000..13dd8b8812 --- /dev/null +++ b/src/Ryujinx.Horizon/Am/Ipc/Controllers/HomeMenuFunctions.cs @@ -0,0 +1,143 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Horizon.Am.Ipc.Storage; +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Account; +using Ryujinx.Horizon.Sdk.Am.Controllers; +using Ryujinx.Horizon.Sdk.Am.Storage; +using Ryujinx.Horizon.Sdk.Sf; +using Ryujinx.Horizon.Sdk.Sf.Hipc; +using System; +using ApplicationId = Ryujinx.Horizon.Sdk.Ncm.ApplicationId; + +namespace Ryujinx.Horizon.Am.Ipc.Controllers +{ + partial class HomeMenuFunctions : IHomeMenuFunctions + { + [CmifCommand(10)] + public Result RequestToGetForeground() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(11)] + public Result LockForeground() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(12)] + public Result UnlockForeground() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(20)] + public Result PopFromGeneralChannel(out IStorage arg0) + { + arg0 = new Storage.Storage([]); + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(21)] + public Result GetPopFromGeneralChannelEvent([CopyHandle] out int arg0) + { + arg0 = 0; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(30)] + public Result GetHomeButtonWriterLockAccessor(out ILockAccessor arg0) + { + arg0 = new LockAccessor(); + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(31)] + public Result GetWriterLockAccessorEx(out ILockAccessor arg0, int arg1) + { + arg0 = new LockAccessor(); + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(40)] + public Result IsSleepEnabled(out bool arg0) + { + arg0 = false; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(41)] + public Result IsRebootEnabled(out bool arg0) + { + arg0 = false; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(50)] + public Result LaunchSystemApplet() + { + // Wraps ns LaunchSystemApplet + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(51)] + public Result LaunchStarter() + { + // Wraps ns LaunchLibraryApplet with a ProgramId from global state. + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(100)] + public Result PopRequestLaunchApplicationForDebug(out ApplicationId arg0, out int arg1, [Buffer(HipcBufferFlags.Out | HipcBufferFlags.MapAlias)] Span arg2) + { + throw new NotImplementedException(); + } + + [CmifCommand(110)] + public Result IsForceTerminateApplicationDisabledForDebug(out bool arg0) + { + arg0 = false; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(200)] + public Result LaunchDevMenu() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(1000)] + public Result SetLastApplicationExitReason(int arg0) + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + } +} diff --git a/src/Ryujinx.Horizon/Am/Ipc/Proxies/LibraryAppletProxy.cs b/src/Ryujinx.Horizon/Am/Ipc/Proxies/LibraryAppletProxy.cs index 36bfcf563a..c529d2ad84 100644 --- a/src/Ryujinx.Horizon/Am/Ipc/Proxies/LibraryAppletProxy.cs +++ b/src/Ryujinx.Horizon/Am/Ipc/Proxies/LibraryAppletProxy.cs @@ -81,9 +81,11 @@ namespace Ryujinx.Horizon.Am.Ipc.Proxies } [CmifCommand(22)] - public Result GetHomeMenuFunctions() + public Result GetHomeMenuFunctions(out IHomeMenuFunctions homeMenuFunctions) { - throw new System.NotImplementedException(); + homeMenuFunctions = new HomeMenuFunctions(); + + return Result.Success; } [CmifCommand(23)] diff --git a/src/Ryujinx.Horizon/Am/Ipc/Proxies/OverlayAppletProxy.cs b/src/Ryujinx.Horizon/Am/Ipc/Proxies/OverlayAppletProxy.cs index 2ee496d2d0..f5ab28e3bf 100644 --- a/src/Ryujinx.Horizon/Am/Ipc/Proxies/OverlayAppletProxy.cs +++ b/src/Ryujinx.Horizon/Am/Ipc/Proxies/OverlayAppletProxy.cs @@ -81,9 +81,11 @@ namespace Ryujinx.Horizon.Am.Ipc.Proxies } [CmifCommand(23)] - public Result GetGlobalStateController() + public Result GetGlobalStateController(out IGlobalStateController globalStateController) { - throw new System.NotImplementedException(); + globalStateController = new GlobalStateController(); + + return Result.Success; } [CmifCommand(1000)] diff --git a/src/Ryujinx.Horizon/Am/Ipc/Proxies/SystemAppletProxy.cs b/src/Ryujinx.Horizon/Am/Ipc/Proxies/SystemAppletProxy.cs index 7b5ff92330..0da036ca0b 100644 --- a/src/Ryujinx.Horizon/Am/Ipc/Proxies/SystemAppletProxy.cs +++ b/src/Ryujinx.Horizon/Am/Ipc/Proxies/SystemAppletProxy.cs @@ -65,21 +65,27 @@ namespace Ryujinx.Horizon.Am.Ipc.Proxies } [CmifCommand(20)] - public Result GetHomeMenuFunctions() + public Result GetHomeMenuFunctions(out IHomeMenuFunctions homeMenuFunctions) { - throw new System.NotImplementedException(); + homeMenuFunctions = new HomeMenuFunctions(); + + return Result.Success; } [CmifCommand(21)] - public Result GetGlobalStateController() + public Result GetGlobalStateController(out IGlobalStateController globalStateController) { - throw new System.NotImplementedException(); + globalStateController = new GlobalStateController(); + + return Result.Success; } [CmifCommand(22)] - public Result GetApplicationCreator() + public Result GetApplicationCreator(out IApplicationCreator applicationCreator) { - throw new System.NotImplementedException(); + applicationCreator = new ApplicationCreator(); + + return Result.Success; } [CmifCommand(23)] diff --git a/src/Ryujinx.Horizon/Am/Ipc/Storage/LockAccessor.cs b/src/Ryujinx.Horizon/Am/Ipc/Storage/LockAccessor.cs new file mode 100644 index 0000000000..16f6b823c9 --- /dev/null +++ b/src/Ryujinx.Horizon/Am/Ipc/Storage/LockAccessor.cs @@ -0,0 +1,46 @@ +using Ryujinx.Common.Logging; +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Am.Storage; +using Ryujinx.Horizon.Sdk.Sf; + +namespace Ryujinx.Horizon.Am.Ipc.Storage +{ + partial class LockAccessor : ILockAccessor + { + [CmifCommand(1)] + public Result TryLock(out bool arg0, out int handle, bool arg2) + { + arg0 = false; + handle = 0; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(2)] + public Result Unlock() + { + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(3)] + public Result GetEvent(out int handle) + { + handle = 0; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + + [CmifCommand(4)] + public Result IsLocked(out bool arg0) + { + arg0 = false; + Logger.Stub?.PrintStub(LogClass.ServiceAm); + + return Result.Success; + } + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Am/ApplicationAttribute.cs b/src/Ryujinx.Horizon/Sdk/Am/ApplicationAttribute.cs new file mode 100644 index 0000000000..258701d3ef --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Am/ApplicationAttribute.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Am +{ + [StructLayout(LayoutKind.Sequential, Size = 0x20)] + struct ApplicationAttribute + { + + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Am/ApplicationLaunchRequestInfo.cs b/src/Ryujinx.Horizon/Sdk/Am/ApplicationLaunchRequestInfo.cs new file mode 100644 index 0000000000..e7b1651d13 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Am/ApplicationLaunchRequestInfo.cs @@ -0,0 +1,10 @@ +using System.Runtime.InteropServices; + +namespace Ryujinx.Horizon.Sdk.Am +{ + [StructLayout(LayoutKind.Sequential, Size = 0x10)] + struct ApplicationLaunchRequestInfo + { + + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Am/Controllers/IAppletAccessor.cs b/src/Ryujinx.Horizon/Sdk/Am/Controllers/IAppletAccessor.cs new file mode 100644 index 0000000000..3bc879661f --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Am/Controllers/IAppletAccessor.cs @@ -0,0 +1,15 @@ +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Sf; + +namespace Ryujinx.Horizon.Sdk.Am.Controllers +{ + interface IAppletAccessor : IServiceObject + { + Result GetAppletStateChangedEvent(out int arg0); + Result IsCompleted(out bool arg0); + Result Start(); + Result RequestExit(); + Result Terminate(); + Result GetResult(); + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Am/Controllers/IApplicationAccessor.cs b/src/Ryujinx.Horizon/Sdk/Am/Controllers/IApplicationAccessor.cs new file mode 100644 index 0000000000..9db50f61aa --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Am/Controllers/IApplicationAccessor.cs @@ -0,0 +1,32 @@ +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Account; +using Ryujinx.Horizon.Sdk.Am.Storage; +using ApplicationId = Ryujinx.Horizon.Sdk.Ncm.ApplicationId; +using System; + +namespace Ryujinx.Horizon.Sdk.Am.Controllers +{ + interface IApplicationAccessor : IAppletAccessor + { + Result RequestForApplicationToGetForeground(); + Result TerminateAllLibraryApplets(); + Result AreAnyLibraryAppletsLeft(out bool arg0); + Result GetCurrentLibraryApplet(out IAppletAccessor arg0); + Result GetApplicationId(out ApplicationId arg0); + Result PushLaunchParameter(uint arg0, IStorage arg1); + Result GetApplicationControlProperty(Span arg0); + Result GetApplicationLaunchProperty(Span arg0); + Result GetApplicationLaunchRequestInfo(out ApplicationLaunchRequestInfo arg0); + Result SetUsers(bool arg0, ReadOnlySpan arg1); + Result CheckRightsEnvironmentAvailable(out bool arg0); + Result GetNsRightsEnvironmentHandle(out ulong arg0); + Result GetDesirableUids(out int arg0, Span arg1); + Result ReportApplicationExitTimeout(); + Result SetApplicationAttribute(in ApplicationAttribute arg0); + Result HasSaveDataAccessPermission(out bool arg0, ApplicationId arg1); + Result PushToFriendInvitationStorageChannel(IStorage arg0); + Result PushToNotificationStorageChannel(IStorage arg0); + Result RequestApplicationSoftReset(); + Result RestartApplicationTimer(); + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Am/Controllers/IApplicationCreator.cs b/src/Ryujinx.Horizon/Sdk/Am/Controllers/IApplicationCreator.cs new file mode 100644 index 0000000000..c6940f35ea --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Am/Controllers/IApplicationCreator.cs @@ -0,0 +1,14 @@ +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Ncm; +using Ryujinx.Horizon.Sdk.Sf; + +namespace Ryujinx.Horizon.Sdk.Am.Controllers +{ + interface IApplicationCreator : IServiceObject + { + Result CreateApplication(out IApplicationAccessor accessor, ApplicationId applicationId); + Result PopLaunchRequestedApplication(out IApplicationAccessor accessor); + Result CreateSystemApplication(out IApplicationAccessor accessor, ApplicationId applicationId); + Result PopFloatingApplicationForDevelopment(out IApplicationAccessor accessor); + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Am/Controllers/IHomeMenuFunctions.cs b/src/Ryujinx.Horizon/Sdk/Am/Controllers/IHomeMenuFunctions.cs new file mode 100644 index 0000000000..ffdbc92d17 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Am/Controllers/IHomeMenuFunctions.cs @@ -0,0 +1,28 @@ +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Account; +using Ryujinx.Horizon.Sdk.Am.Storage; +using Ryujinx.Horizon.Sdk.Sf; +using System; +using ApplicationId = Ryujinx.Horizon.Sdk.Ncm.ApplicationId; + +namespace Ryujinx.Horizon.Sdk.Am.Controllers +{ + interface IHomeMenuFunctions : IServiceObject + { + Result RequestToGetForeground(); + Result LockForeground(); + Result UnlockForeground(); + Result PopFromGeneralChannel(out IStorage arg0); + Result GetPopFromGeneralChannelEvent(out int arg0); + Result GetHomeButtonWriterLockAccessor(out ILockAccessor arg0); + Result GetWriterLockAccessorEx(out ILockAccessor arg0, int arg1); + Result IsSleepEnabled(out bool arg0); + Result IsRebootEnabled(out bool arg0); + Result LaunchSystemApplet(); + Result LaunchStarter(); + Result PopRequestLaunchApplicationForDebug(out ApplicationId arg0, out int arg1, Span arg2); + Result IsForceTerminateApplicationDisabledForDebug(out bool arg0); + Result LaunchDevMenu(); + Result SetLastApplicationExitReason(int arg0); + } +} diff --git a/src/Ryujinx.Horizon/Sdk/Am/Proxies/ILibraryAppletProxy.cs b/src/Ryujinx.Horizon/Sdk/Am/Proxies/ILibraryAppletProxy.cs index 3220bf3dec..0696965a9d 100644 --- a/src/Ryujinx.Horizon/Sdk/Am/Proxies/ILibraryAppletProxy.cs +++ b/src/Ryujinx.Horizon/Sdk/Am/Proxies/ILibraryAppletProxy.cs @@ -15,7 +15,7 @@ namespace Ryujinx.Horizon.Sdk.Am.Proxies Result GetLibraryAppletCreator(out ILibraryAppletCreator libraryAppletCreator); Result OpenLibraryAppletSelfAccessor(out ILibraryAppletSelfAccessor libraryAppletSelfAccessor); Result GetAppletCommonFunctions(out IAppletCommonFunctions appletCommonFunctions); - Result GetHomeMenuFunctions(); + Result GetHomeMenuFunctions(out IHomeMenuFunctions homeMenuFunctions); Result GetGlobalStateController(out IGlobalStateController globalStateController); Result GetDebugFunctions(out IDebugFunctions debugFunctions); } diff --git a/src/Ryujinx.Horizon/Sdk/Am/Proxies/IOverlayAppletProxy.cs b/src/Ryujinx.Horizon/Sdk/Am/Proxies/IOverlayAppletProxy.cs index f8162052a9..f44d8486fd 100644 --- a/src/Ryujinx.Horizon/Sdk/Am/Proxies/IOverlayAppletProxy.cs +++ b/src/Ryujinx.Horizon/Sdk/Am/Proxies/IOverlayAppletProxy.cs @@ -15,7 +15,7 @@ namespace Ryujinx.Horizon.Sdk.Am.Proxies Result GetLibraryAppletCreator(out ILibraryAppletCreator libraryAppletCreator); Result GetOverlayFunctions(out IOverlayFunctions overlayFunctions); Result GetAppletCommonFunctions(out IAppletCommonFunctions appletCommonFunctions); - Result GetGlobalStateController(); + Result GetGlobalStateController(out IGlobalStateController globalStateController); Result GetDebugFunctions(out IDebugFunctions debugFunctions); } } diff --git a/src/Ryujinx.Horizon/Sdk/Am/Proxies/ISystemAppletProxy.cs b/src/Ryujinx.Horizon/Sdk/Am/Proxies/ISystemAppletProxy.cs index 4c98b9d10d..0c77d15cfa 100644 --- a/src/Ryujinx.Horizon/Sdk/Am/Proxies/ISystemAppletProxy.cs +++ b/src/Ryujinx.Horizon/Sdk/Am/Proxies/ISystemAppletProxy.cs @@ -13,9 +13,9 @@ namespace Ryujinx.Horizon.Sdk.Am.Proxies Result GetDisplayController(out IDisplayController displayController); Result GetProcessWindingController(out IProcessWindingController processWindingController); Result GetLibraryAppletCreator(out ILibraryAppletCreator libraryAppletCreator); - Result GetHomeMenuFunctions(); - Result GetGlobalStateController(); - Result GetApplicationCreator(); + Result GetHomeMenuFunctions(out IHomeMenuFunctions homeMenuFunctions); + Result GetGlobalStateController(out IGlobalStateController globalStateController); + Result GetApplicationCreator(out IApplicationCreator applicationCreator); Result GetAppletCommonFunctions(out IAppletCommonFunctions commonFunctions); Result GetDebugFunctions(out IDebugFunctions debugFunctions); } diff --git a/src/Ryujinx.Horizon/Sdk/Am/Storage/ILockAccessor.cs b/src/Ryujinx.Horizon/Sdk/Am/Storage/ILockAccessor.cs new file mode 100644 index 0000000000..3207a0a1d1 --- /dev/null +++ b/src/Ryujinx.Horizon/Sdk/Am/Storage/ILockAccessor.cs @@ -0,0 +1,13 @@ +using Ryujinx.Horizon.Common; +using Ryujinx.Horizon.Sdk.Sf; + +namespace Ryujinx.Horizon.Sdk.Am.Storage +{ + interface ILockAccessor : IServiceObject + { + Result TryLock(out bool arg0, out int handle, bool arg2); + Result Unlock(); + Result GetEvent(out int handle); + Result IsLocked(out bool arg0); + } +}