So much bullshit

This commit is contained in:
Isaac Marovitz 2024-02-15 16:56:23 -05:00
parent d3e93e587e
commit 0873c86c58
No known key found for this signature in database
GPG key ID: 97250B2B09A132E1
18 changed files with 679 additions and 15 deletions

View file

@ -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;
}
}
}

View file

@ -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<byte> arg0)
{
Logger.Stub?.PrintStub(LogClass.ServiceAm);
return Result.Success;
}
[CmifCommand(123)]
public Result GetApplicationLaunchProperty([Buffer(HipcBufferFlags.Out | HipcBufferFlags.AutoSelect)] Span<byte> 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<Uid> 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<Uid> 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;
}
}
}

View file

@ -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();
}
}
}

View file

@ -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<Uid> 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;
}
}
}

View file

@ -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)]

View file

@ -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)]

View file

@ -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)]

View file

@ -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;
}
}
}

View file

@ -0,0 +1,10 @@
using System.Runtime.InteropServices;
namespace Ryujinx.Horizon.Sdk.Am
{
[StructLayout(LayoutKind.Sequential, Size = 0x20)]
struct ApplicationAttribute
{
}
}

View file

@ -0,0 +1,10 @@
using System.Runtime.InteropServices;
namespace Ryujinx.Horizon.Sdk.Am
{
[StructLayout(LayoutKind.Sequential, Size = 0x10)]
struct ApplicationLaunchRequestInfo
{
}
}

View file

@ -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();
}
}

View file

@ -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<byte> arg0);
Result GetApplicationLaunchProperty(Span<byte> arg0);
Result GetApplicationLaunchRequestInfo(out ApplicationLaunchRequestInfo arg0);
Result SetUsers(bool arg0, ReadOnlySpan<Uid> arg1);
Result CheckRightsEnvironmentAvailable(out bool arg0);
Result GetNsRightsEnvironmentHandle(out ulong arg0);
Result GetDesirableUids(out int arg0, Span<Uid> 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();
}
}

View file

@ -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);
}
}

View file

@ -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<Uid> arg2);
Result IsForceTerminateApplicationDisabledForDebug(out bool arg0);
Result LaunchDevMenu();
Result SetLastApplicationExitReason(int arg0);
}
}

View file

@ -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);
}

View file

@ -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);
}
}

View file

@ -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);
}

View file

@ -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);
}
}