From df5284ceb614e66d19258a12ea229903459cda17 Mon Sep 17 00:00:00 2001 From: greggameplayer <33609333+greggameplayer@users.noreply.github.com> Date: Sun, 10 Jun 2018 03:24:01 +0200 Subject: [PATCH] Implement IApplicationCreator & IApplicationAccessor & IAppletAccessor --- .../OsHle/Services/Am/IAppletAccessor.cs | 68 +++++++++++++++++++ .../OsHle/Services/Am/IApplicationAccessor.cs | 36 ++++++++++ .../OsHle/Services/Am/IApplicationCreator.cs | 35 +++++++++- .../Services/Am/IApplicationFunctions.cs | 3 + 4 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 Ryujinx.Core/OsHle/Services/Am/IAppletAccessor.cs create mode 100644 Ryujinx.Core/OsHle/Services/Am/IApplicationAccessor.cs diff --git a/Ryujinx.Core/OsHle/Services/Am/IAppletAccessor.cs b/Ryujinx.Core/OsHle/Services/Am/IAppletAccessor.cs new file mode 100644 index 000000000..fdfa1bc98 --- /dev/null +++ b/Ryujinx.Core/OsHle/Services/Am/IAppletAccessor.cs @@ -0,0 +1,68 @@ +using Ryujinx.Core.Logging; +using Ryujinx.Core.OsHle.Ipc; +using System.Collections.Generic; + +namespace Ryujinx.Core.OsHle.Services.Am +{ + class IAppletAccessor : IpcService + { + private Dictionary m_Commands; + + public override IReadOnlyDictionary Commands => m_Commands; + + public IAppletAccessor() + { + m_Commands = new Dictionary() + { + { 0, GetAppletStateChangedEvent }, + { 1, IsCompleted }, + { 10, Start }, + { 20, RequestExit }, + { 25, Terminate }, + { 30, GetResult } + }; + } + + public long GetAppletStateChangedEvent(ServiceCtx Context) + { + Context.Ns.Log.PrintStub(LogClass.ServiceAm, "Stubbed."); + + return 0; + } + + public long IsCompleted(ServiceCtx Context) + { + Context.Ns.Log.PrintStub(LogClass.ServiceAm, "Stubbed."); + + return 0; + } + + public long Start(ServiceCtx Context) + { + Context.Ns.Log.PrintStub(LogClass.ServiceAm, "Stubbed."); + + return 0; + } + + public long RequestExit(ServiceCtx Context) + { + Context.Ns.Log.PrintStub(LogClass.ServiceAm, "Stubbed."); + + return 0; + } + + public long Terminate(ServiceCtx Context) + { + Context.Ns.Log.PrintStub(LogClass.ServiceAm, "Stubbed."); + + return 0; + } + + public long GetResult(ServiceCtx Context) + { + Context.Ns.Log.PrintStub(LogClass.ServiceAm, "Stubbed."); + + return 0; + } + } +} diff --git a/Ryujinx.Core/OsHle/Services/Am/IApplicationAccessor.cs b/Ryujinx.Core/OsHle/Services/Am/IApplicationAccessor.cs new file mode 100644 index 000000000..85c081d10 --- /dev/null +++ b/Ryujinx.Core/OsHle/Services/Am/IApplicationAccessor.cs @@ -0,0 +1,36 @@ +using Ryujinx.Core.Logging; +using Ryujinx.Core.OsHle.Ipc; +using System.Collections.Generic; + +namespace Ryujinx.Core.OsHle.Services.Am +{ + class IApplicationAccessor : IpcService + { + private Dictionary m_Commands; + + public override IReadOnlyDictionary Commands => m_Commands; + + public IApplicationAccessor() + { + m_Commands = new Dictionary() + { + { 112, GetCurrentLibraryApplet }, + { 121, PushLaunchParameter } + }; + } + + public long GetCurrentLibraryApplet(ServiceCtx Context) + { + MakeObject(Context, new IAppletAccessor()); + + return 0; + } + + public long PushLaunchParameter(ServiceCtx Context) + { + Context.Ns.Log.PrintStub(LogClass.ServiceAm, "Stubbed."); + + return 0; + } + } +} diff --git a/Ryujinx.Core/OsHle/Services/Am/IApplicationCreator.cs b/Ryujinx.Core/OsHle/Services/Am/IApplicationCreator.cs index 1114897b3..4993786ae 100644 --- a/Ryujinx.Core/OsHle/Services/Am/IApplicationCreator.cs +++ b/Ryujinx.Core/OsHle/Services/Am/IApplicationCreator.cs @@ -13,8 +13,39 @@ namespace Ryujinx.Core.OsHle.Services.Am { m_Commands = new Dictionary() { - //... + { 0, CreateApplication }, + { 1, PopLaunchRequestedApplication }, + { 10, CreateSystemApplication }, + { 100, PopFloatingApplicationForDevelopment } }; } + + public long CreateApplication(ServiceCtx Context) + { + MakeObject(Context, new IApplicationAccessor()); + + return 0; + } + + public long PopLaunchRequestedApplication(ServiceCtx Context) + { + MakeObject(Context, new IApplicationAccessor()); + + return 0; + } + + public long CreateSystemApplication(ServiceCtx Context) + { + MakeObject(Context, new IApplicationAccessor()); + + return 0; + } + + public long PopFloatingApplicationForDevelopment(ServiceCtx Context) + { + MakeObject(Context, new IApplicationAccessor()); + + return 0; + } } -} \ No newline at end of file +} diff --git a/Ryujinx.Core/OsHle/Services/Am/IApplicationFunctions.cs b/Ryujinx.Core/OsHle/Services/Am/IApplicationFunctions.cs index 308a43220..a345e1e78 100644 --- a/Ryujinx.Core/OsHle/Services/Am/IApplicationFunctions.cs +++ b/Ryujinx.Core/OsHle/Services/Am/IApplicationFunctions.cs @@ -100,6 +100,9 @@ namespace Ryujinx.Core.OsHle.Services.Am public long InitializeGamePlayRecording(ServiceCtx Context) { + //TODO: add a TransferMemory Handle + long Size = Context.RequestData.ReadInt64(); + Context.Ns.Log.PrintStub(LogClass.ServiceAm, "Stubbed."); return 0;