aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2018-02-25 01:34:16 -0300
committergdkchan <gab.dark.100@gmail.com>2018-02-25 01:34:27 -0300
commitfba0bf873257c4ac17f4584036661be08a1694d3 (patch)
treed1677d09fd008b2dcfa7560e979460b277f76411
parenta4ff0d34848416a68dff9f165bb90afae7a4fd20 (diff)
Refactor IPC services to have commands into separate classes, fix readme url
-rw-r--r--README.md2
-rw-r--r--Ryujinx.Core/OsHle/Handles/HSession.cs10
-rw-r--r--Ryujinx.Core/OsHle/Ipc/IpcHandler.cs78
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Acc/IManagerForApplication.cs (renamed from Ryujinx.Core/OsHle/Objects/Acc/IManagerForApplication.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Acc/IProfile.cs (renamed from Ryujinx.Core/OsHle/Objects/Acc/IProfile.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Acc/ServiceAcc.cs49
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/IApplicationFunctions.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/IApplicationFunctions.cs)6
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/IApplicationProxy.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/IApplicationProxy.cs)6
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/IAudioController.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/IAudioController.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/ICommonStateGetter.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/ICommonStateGetter.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/IDebugFunctions.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/IDebugFunctions.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/IDisplayController.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/IDisplayController.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/ILibraryAppletCreator.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/ILibraryAppletCreator.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/ISelfController.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/ISelfController.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/IStorage.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/IStorage.cs)6
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/IStorageAccessor.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/IStorageAccessor.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/IWindowController.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/IWindowController.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Am/ServiceAppletOE.cs29
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Android/GbpBuffer.cs (renamed from Ryujinx.Core/OsHle/Objects/Android/GbpBuffer.cs)2
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Android/NvFlinger.cs (renamed from Ryujinx.Core/OsHle/Objects/Android/NvFlinger.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Android/Parcel.cs (renamed from Ryujinx.Core/OsHle/Objects/Android/Parcel.cs)2
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Apm/ISession.cs (renamed from Ryujinx.Core/OsHle/Objects/Apm/ISession.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Apm/ServiceApm.cs29
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Aud/IAudioOut.cs (renamed from Ryujinx.Core/OsHle/Objects/Aud/IAudioOut.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Aud/IAudioRenderer.cs (renamed from Ryujinx.Core/OsHle/Objects/Aud/IAudioRenderer.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Aud/ServiceAudOut.cs57
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Aud/ServiceAudRen.cs51
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/ErrorCode.cs (renamed from Ryujinx.Core/OsHle/Objects/ErrorCode.cs)2
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/ErrorModule.cs (renamed from Ryujinx.Core/OsHle/Objects/ErrorModule.cs)2
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Friend/IFriendService.cs (renamed from Ryujinx.Core/OsHle/Objects/Friend/IFriendService.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Friend/ServiceFriend.cs29
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/FspSrv/FsErr.cs (renamed from Ryujinx.Core/OsHle/Objects/FspSrv/FsErr.cs)2
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/FspSrv/IDirectory.cs (renamed from Ryujinx.Core/OsHle/Objects/FspSrv/IDirectory.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/FspSrv/IFile.cs (renamed from Ryujinx.Core/OsHle/Objects/FspSrv/IFile.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/FspSrv/IFileSystem.cs (renamed from Ryujinx.Core/OsHle/Objects/FspSrv/IFileSystem.cs)8
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/FspSrv/IStorage.cs (renamed from Ryujinx.Core/OsHle/Objects/FspSrv/IStorage.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/FspSrv/ServiceFspSrv.cs67
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Hid/IActiveVibrationDeviceList.cs (renamed from Ryujinx.Core/OsHle/Objects/Hid/IActiveVibrationDeviceList.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Hid/IAppletResource.cs (renamed from Ryujinx.Core/OsHle/Objects/Hid/IAppletResource.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Hid/ServiceHid.cs98
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/IIpcService.cs (renamed from Ryujinx.Core/OsHle/Objects/IIpcInterface.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Lm/ServiceLm.cs27
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/NvServices/ServiceNvDrv.cs (renamed from Ryujinx.Core/OsHle/Services/ServiceNvDrv.cs)41
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/ObjHelper.cs (renamed from Ryujinx.Core/OsHle/Objects/ObjHelper.cs)2
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Pctl/IParentalControlService.cs (renamed from Ryujinx.Core/OsHle/Objects/Am/IParentalControlService.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Pctl/ServicePctl.cs29
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Pl/ServicePl.cs51
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/ServiceFactory.cs50
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Set/ServiceSet.cs (renamed from Ryujinx.Core/OsHle/Services/ServiceSet.cs)20
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Sm/ServiceSm.cs (renamed from Ryujinx.Core/OsHle/Services/ServiceSm.cs)29
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Time/ISteadyClock.cs (renamed from Ryujinx.Core/OsHle/Objects/Time/ISteadyClock.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Time/ISystemClock.cs (renamed from Ryujinx.Core/OsHle/Objects/Time/ISystemClock.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Time/ITimeZoneService.cs (renamed from Ryujinx.Core/OsHle/Objects/Time/ITimeZoneService.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Time/ServiceTime.cs62
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Time/SystemClockType.cs (renamed from Ryujinx.Core/OsHle/Objects/Time/SystemClockType.cs)2
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Vi/IApplicationDisplayService.cs (renamed from Ryujinx.Core/OsHle/Objects/Vi/IApplicationDisplayService.cs)8
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Vi/IHOSBinderDriver.cs (renamed from Ryujinx.Core/OsHle/Objects/Vi/IHOSBinderDriver.cs)6
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Vi/IManagerDisplayService.cs (renamed from Ryujinx.Core/OsHle/Objects/Vi/IManagerDisplayService.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Vi/ISystemDisplayService.cs (renamed from Ryujinx.Core/OsHle/Objects/Vi/ISystemDisplayService.cs)4
-rw-r--r--Ryujinx.Core/OsHle/IpcServices/Vi/ServiceVi.cs31
-rw-r--r--Ryujinx.Core/OsHle/Services/ServiceAcc.cs33
-rw-r--r--Ryujinx.Core/OsHle/Services/ServiceApm.cs16
-rw-r--r--Ryujinx.Core/OsHle/Services/ServiceAppletOE.cs16
-rw-r--r--Ryujinx.Core/OsHle/Services/ServiceAud.cs71
-rw-r--r--Ryujinx.Core/OsHle/Services/ServiceFriend.cs16
-rw-r--r--Ryujinx.Core/OsHle/Services/ServiceFspSrv.cs49
-rw-r--r--Ryujinx.Core/OsHle/Services/ServiceHid.cs77
-rw-r--r--Ryujinx.Core/OsHle/Services/ServiceLm.cs12
-rw-r--r--Ryujinx.Core/OsHle/Services/ServicePctl.cs16
-rw-r--r--Ryujinx.Core/OsHle/Services/ServicePl.cs35
-rw-r--r--Ryujinx.Core/OsHle/Services/ServiceTime.cs45
-rw-r--r--Ryujinx.Core/OsHle/Services/ServiceVi.cs18
-rw-r--r--Ryujinx.Core/OsHle/Svc/SvcSystem.cs3
73 files changed, 825 insertions, 583 deletions
diff --git a/README.md b/README.md
index 6a241127..841a8258 100644
--- a/README.md
+++ b/README.md
@@ -67,4 +67,4 @@ Run `dotnet run -c Release -- path\to\game_exefs_and_romfs_folder` to run offici
**Latest build**
These builds are compiled automatically for each commit on the master branch. They may be unstable or not work at all.
-To download the latest automatic build for Windows (64-bits), [Click Here](https://ci.appveyor.com/api/projects/gdkchan/ryujinx/artifacts/ryujinx_latest_unstable.zip).
+To download the latest automatic build for Windows (64-bits), [Click Here](https://ci.appveyor.com/api/projects/gdkchan/ryujinx/artifacts/ryujinx_latest_unstable.zip?pr=false).
diff --git a/Ryujinx.Core/OsHle/Handles/HSession.cs b/Ryujinx.Core/OsHle/Handles/HSession.cs
index 8aa1c06b..f30e91f9 100644
--- a/Ryujinx.Core/OsHle/Handles/HSession.cs
+++ b/Ryujinx.Core/OsHle/Handles/HSession.cs
@@ -1,21 +1,23 @@
+using Ryujinx.Core.OsHle.IpcServices;
+
namespace Ryujinx.Core.OsHle.Handles
{
class HSession
{
- public string ServiceName { get; private set; }
+ public IIpcService Service { get; private set; }
public bool IsInitialized { get; private set; }
public int State { get; set; }
- public HSession(string ServiceName)
+ public HSession(IIpcService Service)
{
- this.ServiceName = ServiceName;
+ this.Service = Service;
}
public HSession(HSession Session)
{
- ServiceName = Session.ServiceName;
+ Service = Session.Service;
IsInitialized = Session.IsInitialized;
}
diff --git a/Ryujinx.Core/OsHle/Ipc/IpcHandler.cs b/Ryujinx.Core/OsHle/Ipc/IpcHandler.cs
index 5785dbf3..2495d701 100644
--- a/Ryujinx.Core/OsHle/Ipc/IpcHandler.cs
+++ b/Ryujinx.Core/OsHle/Ipc/IpcHandler.cs
@@ -1,79 +1,13 @@
using ChocolArm64.Memory;
using Ryujinx.Core.OsHle.Handles;
-using Ryujinx.Core.OsHle.Objects;
-using Ryujinx.Core.OsHle.Services;
+using Ryujinx.Core.OsHle.IpcServices;
using System;
-using System.Collections.Generic;
using System.IO;
namespace Ryujinx.Core.OsHle.Ipc
{
static class IpcHandler
{
- private static Dictionary<(string, int), ServiceProcessRequest> ServiceCmds =
- new Dictionary<(string, int), ServiceProcessRequest>()
- {
- { ( "acc:u0", 3), Service.AccU0ListOpenUsers },
- { ( "acc:u0", 5), Service.AccU0GetProfile },
- { ( "acc:u0", 100), Service.AccU0InitializeApplicationInfo },
- { ( "acc:u0", 101), Service.AccU0GetBaasAccountManagerForApplication },
- { ( "apm", 0), Service.ApmOpenSession },
- { ( "apm:p", 0), Service.ApmOpenSession },
- { ( "appletOE", 0), Service.AppletOpenApplicationProxy },
- { ( "audout:u", 0), Service.AudOutListAudioOuts },
- { ( "audout:u", 1), Service.AudOutOpenAudioOut },
- { ( "audren:u", 0), Service.AudRenOpenAudioRenderer },
- { ( "audren:u", 1), Service.AudRenGetAudioRendererWorkBufferSize },
- { ( "friend:a", 0), Service.FriendCreateFriendService },
- { ( "fsp-srv", 1), Service.FspSrvInitialize },
- { ( "fsp-srv", 18), Service.FspSrvMountSdCard },
- { ( "fsp-srv", 51), Service.FspSrvMountSaveData },
- { ( "fsp-srv", 200), Service.FspSrvOpenDataStorageByCurrentProcess },
- { ( "fsp-srv", 203), Service.FspSrvOpenRomStorage },
- { ( "fsp-srv", 1005), Service.FspSrvGetGlobalAccessLogMode },
- { ( "hid", 0), Service.HidCreateAppletResource },
- { ( "hid", 11), Service.HidActivateTouchScreen },
- { ( "hid", 100), Service.HidSetSupportedNpadStyleSet },
- { ( "hid", 101), Service.HidGetSupportedNpadStyleSet },
- { ( "hid", 102), Service.HidSetSupportedNpadIdType },
- { ( "hid", 103), Service.HidActivateNpad },
- { ( "hid", 120), Service.HidSetNpadJoyHoldType },
- { ( "hid", 121), Service.HidGetNpadJoyHoldType },
- { ( "hid", 203), Service.HidCreateActiveVibrationDeviceList },
- { ( "lm", 0), Service.LmInitialize },
- { ( "nvdrv", 0), Service.NvDrvOpen },
- { ( "nvdrv", 1), Service.NvDrvIoctl },
- { ( "nvdrv", 2), Service.NvDrvClose },
- { ( "nvdrv", 3), Service.NvDrvInitialize },
- { ( "nvdrv", 4), Service.NvDrvQueryEvent },
- { ( "nvdrv", 8), Service.NvDrvSetClientPid },
- { ( "nvdrv:a", 0), Service.NvDrvOpen },
- { ( "nvdrv:a", 1), Service.NvDrvIoctl },
- { ( "nvdrv:a", 2), Service.NvDrvClose },
- { ( "nvdrv:a", 3), Service.NvDrvInitialize },
- { ( "nvdrv:a", 4), Service.NvDrvQueryEvent },
- { ( "nvdrv:a", 8), Service.NvDrvSetClientPid },
- { ( "pctl:a", 0), Service.PctlCreateService },
- { ( "pl:u", 1), Service.PlGetLoadState },
- { ( "pl:u", 2), Service.PlGetFontSize },
- { ( "pl:u", 3), Service.PlGetSharedMemoryAddressOffset },
- { ( "pl:u", 4), Service.PlGetSharedMemoryNativeHandle },
- { ( "set", 1), Service.SetGetAvailableLanguageCodes },
- { ( "sm:", 0), Service.SmInitialize },
- { ( "sm:", 1), Service.SmGetService },
- { ( "time:u", 0), Service.TimeGetStandardUserSystemClock },
- { ( "time:u", 1), Service.TimeGetStandardNetworkSystemClock },
- { ( "time:u", 2), Service.TimeGetStandardSteadyClock },
- { ( "time:u", 3), Service.TimeGetTimeZoneService },
- { ( "time:u", 4), Service.TimeGetStandardLocalSystemClock },
- { ( "time:s", 0), Service.TimeGetStandardUserSystemClock },
- { ( "time:s", 1), Service.TimeGetStandardNetworkSystemClock },
- { ( "time:s", 2), Service.TimeGetStandardSteadyClock },
- { ( "time:s", 3), Service.TimeGetTimeZoneService },
- { ( "time:s", 4), Service.TimeGetStandardLocalSystemClock },
- { ( "vi:m", 2), Service.ViGetDisplayService },
- };
-
private const long SfciMagic = 'S' << 0 | 'F' << 8 | 'C' << 16 | 'I' << 24;
private const long SfcoMagic = 'S' << 0 | 'F' << 8 | 'C' << 16 | 'O' << 24;
@@ -94,7 +28,7 @@ namespace Ryujinx.Core.OsHle.Ipc
if (Request.Type == IpcMessageType.Request)
{
- string ServiceName = Session.ServiceName;
+ string ServiceName = Session.Service.GetType().Name;
ServiceProcessRequest ProcReq = null;
@@ -113,13 +47,13 @@ namespace Ryujinx.Core.OsHle.Ipc
if (Obj is HDomain)
{
- ServiceCmds.TryGetValue((ServiceName, CmdId), out ProcReq);
+ Session.Service.Commands.TryGetValue(CmdId, out ProcReq);
DbgServiceName = $"{ProcReq?.Method.Name ?? CmdId.ToString()}";
}
else if (Obj != null)
{
- ((IIpcInterface)Obj).Commands.TryGetValue(CmdId, out ProcReq);
+ ((IIpcService)Obj).Commands.TryGetValue(CmdId, out ProcReq);
DbgServiceName = $"{Obj.GetType().Name} {ProcReq?.Method.Name ?? CmdId.ToString()}";
}
@@ -142,13 +76,13 @@ namespace Ryujinx.Core.OsHle.Ipc
{
object Obj = ((HSessionObj)Session).Obj;
- ((IIpcInterface)Obj).Commands.TryGetValue(CmdId, out ProcReq);
+ ((IIpcService)Obj).Commands.TryGetValue(CmdId, out ProcReq);
DbgServiceName = $"{Obj.GetType().Name} {ProcReq?.Method.Name ?? CmdId.ToString()}";
}
else
{
- ServiceCmds.TryGetValue((ServiceName, CmdId), out ProcReq);
+ Session.Service.Commands.TryGetValue(CmdId, out ProcReq);
DbgServiceName = $"{ProcReq?.Method.Name ?? CmdId.ToString()}";
}
diff --git a/Ryujinx.Core/OsHle/Objects/Acc/IManagerForApplication.cs b/Ryujinx.Core/OsHle/IpcServices/Acc/IManagerForApplication.cs
index afbfab24..ab491eac 100644
--- a/Ryujinx.Core/OsHle/Objects/Acc/IManagerForApplication.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Acc/IManagerForApplication.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Acc
+namespace Ryujinx.Core.OsHle.IpcServices.Acc
{
- class IManagerForApplication : IIpcInterface
+ class IManagerForApplication : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Acc/IProfile.cs b/Ryujinx.Core/OsHle/IpcServices/Acc/IProfile.cs
index 94d17183..77fe2b48 100644
--- a/Ryujinx.Core/OsHle/Objects/Acc/IProfile.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Acc/IProfile.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Acc
+namespace Ryujinx.Core.OsHle.IpcServices.Acc
{
- class IProfile : IIpcInterface
+ class IProfile : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/IpcServices/Acc/ServiceAcc.cs b/Ryujinx.Core/OsHle/IpcServices/Acc/ServiceAcc.cs
new file mode 100644
index 00000000..8844bb5d
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Acc/ServiceAcc.cs
@@ -0,0 +1,49 @@
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Acc
+{
+ class ServiceAcc : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceAcc()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 3, ListOpenUsers },
+ { 5, GetProfile },
+ { 100, InitializeApplicationInfo },
+ { 101, GetBaasAccountManagerForApplication }
+ };
+ }
+
+ public long ListOpenUsers(ServiceCtx Context)
+ {
+ return 0;
+ }
+
+ public long GetProfile(ServiceCtx Context)
+ {
+ MakeObject(Context, new IProfile());
+
+ return 0;
+ }
+
+ public long InitializeApplicationInfo(ServiceCtx Context)
+ {
+ return 0;
+ }
+
+ public long GetBaasAccountManagerForApplication(ServiceCtx Context)
+ {
+ MakeObject(Context, new IManagerForApplication());
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Objects/Am/IApplicationFunctions.cs b/Ryujinx.Core/OsHle/IpcServices/Am/IApplicationFunctions.cs
index 939ad248..30020c1d 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/IApplicationFunctions.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/IApplicationFunctions.cs
@@ -2,11 +2,11 @@ using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
using System.IO;
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Am
{
- class IApplicationFunctions : IIpcInterface
+ class IApplicationFunctions : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Am/IApplicationProxy.cs b/Ryujinx.Core/OsHle/IpcServices/Am/IApplicationProxy.cs
index 4a164daf..5417d7f0 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/IApplicationProxy.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/IApplicationProxy.cs
@@ -1,11 +1,11 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Am
{
- class IApplicationProxy : IIpcInterface
+ class IApplicationProxy : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Am/IAudioController.cs b/Ryujinx.Core/OsHle/IpcServices/Am/IAudioController.cs
index c37042fd..1212f1e2 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/IAudioController.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/IAudioController.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Am
{
- class IAudioController : IIpcInterface
+ class IAudioController : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Am/ICommonStateGetter.cs b/Ryujinx.Core/OsHle/IpcServices/Am/ICommonStateGetter.cs
index 83d61fa6..2999bbba 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/ICommonStateGetter.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/ICommonStateGetter.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Am
{
- class ICommonStateGetter : IIpcInterface
+ class ICommonStateGetter : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Am/IDebugFunctions.cs b/Ryujinx.Core/OsHle/IpcServices/Am/IDebugFunctions.cs
index d04d8363..944e58d8 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/IDebugFunctions.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/IDebugFunctions.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Am
{
- class IDebugFunctions : IIpcInterface
+ class IDebugFunctions : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Am/IDisplayController.cs b/Ryujinx.Core/OsHle/IpcServices/Am/IDisplayController.cs
index 9eafa70d..979e842a 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/IDisplayController.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/IDisplayController.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Am
{
- class IDisplayController : IIpcInterface
+ class IDisplayController : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Am/ILibraryAppletCreator.cs b/Ryujinx.Core/OsHle/IpcServices/Am/ILibraryAppletCreator.cs
index 10e0f4f4..9f5b5e69 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/ILibraryAppletCreator.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/ILibraryAppletCreator.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Am
{
- class ILibraryAppletCreator : IIpcInterface
+ class ILibraryAppletCreator : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Am/ISelfController.cs b/Ryujinx.Core/OsHle/IpcServices/Am/ISelfController.cs
index 712874e8..90ddd54b 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/ISelfController.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/ISelfController.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Am
{
- class ISelfController : IIpcInterface
+ class ISelfController : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Am/IStorage.cs b/Ryujinx.Core/OsHle/IpcServices/Am/IStorage.cs
index b30059ba..375b960b 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/IStorage.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/IStorage.cs
@@ -1,11 +1,11 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Am
{
- class IStorage : IIpcInterface
+ class IStorage : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Am/IStorageAccessor.cs b/Ryujinx.Core/OsHle/IpcServices/Am/IStorageAccessor.cs
index df260cc3..6d83e6f9 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/IStorageAccessor.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/IStorageAccessor.cs
@@ -3,9 +3,9 @@ using Ryujinx.Core.OsHle.Ipc;
using System;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Am
{
- class IStorageAccessor : IIpcInterface
+ class IStorageAccessor : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Am/IWindowController.cs b/Ryujinx.Core/OsHle/IpcServices/Am/IWindowController.cs
index aa6e961e..ddc73bce 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/IWindowController.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/IWindowController.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Am
{
- class IWindowController : IIpcInterface
+ class IWindowController : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/IpcServices/Am/ServiceAppletOE.cs b/Ryujinx.Core/OsHle/IpcServices/Am/ServiceAppletOE.cs
new file mode 100644
index 00000000..b60c93dd
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Am/ServiceAppletOE.cs
@@ -0,0 +1,29 @@
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Am
+{
+ class ServiceAppletOE : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceAppletOE()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 0, OpenApplicationProxy }
+ };
+ }
+
+ public long OpenApplicationProxy(ServiceCtx Context)
+ {
+ MakeObject(Context, new IApplicationProxy());
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Objects/Android/GbpBuffer.cs b/Ryujinx.Core/OsHle/IpcServices/Android/GbpBuffer.cs
index edd11523..5fe585d0 100644
--- a/Ryujinx.Core/OsHle/Objects/Android/GbpBuffer.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Android/GbpBuffer.cs
@@ -1,6 +1,6 @@
using System.IO;
-namespace Ryujinx.Core.OsHle.Objects.Android
+namespace Ryujinx.Core.OsHle.IpcServices.Android
{
struct GbpBuffer
{
diff --git a/Ryujinx.Core/OsHle/Objects/Android/NvFlinger.cs b/Ryujinx.Core/OsHle/IpcServices/Android/NvFlinger.cs
index 11069cb2..85a06cea 100644
--- a/Ryujinx.Core/OsHle/Objects/Android/NvFlinger.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Android/NvFlinger.cs
@@ -6,9 +6,9 @@ using System.Collections.Generic;
using System.Text;
using System.Threading;
-using static Ryujinx.Core.OsHle.Objects.Android.Parcel;
+using static Ryujinx.Core.OsHle.IpcServices.Android.Parcel;
-namespace Ryujinx.Core.OsHle.Objects.Android
+namespace Ryujinx.Core.OsHle.IpcServices.Android
{
class NvFlinger : IDisposable
{
diff --git a/Ryujinx.Core/OsHle/Objects/Android/Parcel.cs b/Ryujinx.Core/OsHle/IpcServices/Android/Parcel.cs
index cd7179e1..3404c227 100644
--- a/Ryujinx.Core/OsHle/Objects/Android/Parcel.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Android/Parcel.cs
@@ -1,7 +1,7 @@
using System;
using System.IO;
-namespace Ryujinx.Core.OsHle.Objects.Android
+namespace Ryujinx.Core.OsHle.IpcServices.Android
{
static class Parcel
{
diff --git a/Ryujinx.Core/OsHle/Objects/Apm/ISession.cs b/Ryujinx.Core/OsHle/IpcServices/Apm/ISession.cs
index 3ab33005..500f7596 100644
--- a/Ryujinx.Core/OsHle/Objects/Apm/ISession.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Apm/ISession.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Apm
+namespace Ryujinx.Core.OsHle.IpcServices.Apm
{
- class ISession : IIpcInterface
+ class ISession : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/IpcServices/Apm/ServiceApm.cs b/Ryujinx.Core/OsHle/IpcServices/Apm/ServiceApm.cs
new file mode 100644
index 00000000..d6c0400a
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Apm/ServiceApm.cs
@@ -0,0 +1,29 @@
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Apm
+{
+ class ServiceApm : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceApm()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 0, OpenSession }
+ };
+ }
+
+ public long OpenSession(ServiceCtx Context)
+ {
+ MakeObject(Context, new ISession());
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Objects/Aud/IAudioOut.cs b/Ryujinx.Core/OsHle/IpcServices/Aud/IAudioOut.cs
index 061c6376..a45b23cc 100644
--- a/Ryujinx.Core/OsHle/Objects/Aud/IAudioOut.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Aud/IAudioOut.cs
@@ -7,9 +7,9 @@ using System;
using System.Collections.Generic;
using System.IO;
-namespace Ryujinx.Core.OsHle.Objects.Aud
+namespace Ryujinx.Core.OsHle.IpcServices.Aud
{
- class IAudioOut : IIpcInterface
+ class IAudioOut : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Aud/IAudioRenderer.cs b/Ryujinx.Core/OsHle/IpcServices/Aud/IAudioRenderer.cs
index 05356477..bfde0b65 100644
--- a/Ryujinx.Core/OsHle/Objects/Aud/IAudioRenderer.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Aud/IAudioRenderer.cs
@@ -2,9 +2,9 @@ using Ryujinx.Core.OsHle.Handles;
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Aud
+namespace Ryujinx.Core.OsHle.IpcServices.Aud
{
- class IAudioRenderer : IIpcInterface
+ class IAudioRenderer : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/IpcServices/Aud/ServiceAudOut.cs b/Ryujinx.Core/OsHle/IpcServices/Aud/ServiceAudOut.cs
new file mode 100644
index 00000000..eb923562
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Aud/ServiceAudOut.cs
@@ -0,0 +1,57 @@
+using ChocolArm64.Memory;
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+using System.Text;
+
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Aud
+{
+ class ServiceAudOut : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceAudOut()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 0, ListAudioOuts },
+ { 1, OpenAudioOut },
+ };
+ }
+
+ public long ListAudioOuts(ServiceCtx Context)
+ {
+ long Position = Context.Request.ReceiveBuff[0].Position;
+
+ AMemoryHelper.WriteBytes(Context.Memory, Position, Encoding.ASCII.GetBytes("iface"));
+
+ Context.ResponseData.Write(1);
+
+ return 0;
+ }
+
+ public long OpenAudioOut(ServiceCtx Context)
+ {
+ MakeObject(Context, new IAudioOut());
+
+ Context.ResponseData.Write(48000); //Sample Rate
+ Context.ResponseData.Write(2); //Channel Count
+ Context.ResponseData.Write(2); //PCM Format
+ /*
+ 0 - Invalid
+ 1 - INT8
+ 2 - INT16
+ 3 - INT24
+ 4 - INT32
+ 5 - PCM Float
+ 6 - ADPCM
+ */
+ Context.ResponseData.Write(0); //Unknown
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/IpcServices/Aud/ServiceAudRen.cs b/Ryujinx.Core/OsHle/IpcServices/Aud/ServiceAudRen.cs
new file mode 100644
index 00000000..eccc699c
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Aud/ServiceAudRen.cs
@@ -0,0 +1,51 @@
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Aud
+{
+ class ServiceAudRen : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceAudRen()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 0, OpenAudioRenderer },
+ { 1, GetAudioRendererWorkBufferSize },
+ };
+ }
+
+ public long OpenAudioRenderer(ServiceCtx Context)
+ {
+ MakeObject(Context, new IAudioRenderer());
+
+ return 0;
+ }
+
+ public long GetAudioRendererWorkBufferSize(ServiceCtx Context)
+ {
+ int SampleRate = Context.RequestData.ReadInt32();
+ int Unknown4 = Context.RequestData.ReadInt32();
+ int Unknown8 = Context.RequestData.ReadInt32();
+ int UnknownC = Context.RequestData.ReadInt32();
+ int Unknown10 = Context.RequestData.ReadInt32();
+ int Unknown14 = Context.RequestData.ReadInt32();
+ int Unknown18 = Context.RequestData.ReadInt32();
+ int Unknown1c = Context.RequestData.ReadInt32();
+ int Unknown20 = Context.RequestData.ReadInt32();
+ int Unknown24 = Context.RequestData.ReadInt32();
+ int Unknown28 = Context.RequestData.ReadInt32();
+ int Unknown2c = Context.RequestData.ReadInt32();
+ int Rev1Magic = Context.RequestData.ReadInt32();
+
+ Context.ResponseData.Write(0x400L);
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Objects/ErrorCode.cs b/Ryujinx.Core/OsHle/IpcServices/ErrorCode.cs
index 659ed8b9..a4e197b2 100644
--- a/Ryujinx.Core/OsHle/Objects/ErrorCode.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/ErrorCode.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Core.OsHle.Objects
+namespace Ryujinx.Core.OsHle.IpcServices
{
static class ErrorCode
{
diff --git a/Ryujinx.Core/OsHle/Objects/ErrorModule.cs b/Ryujinx.Core/OsHle/IpcServices/ErrorModule.cs
index 0221031b..0d15db60 100644
--- a/Ryujinx.Core/OsHle/Objects/ErrorModule.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/ErrorModule.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Core.OsHle.Objects
+namespace Ryujinx.Core.OsHle.IpcServices
{
enum ErrorModule
{
diff --git a/Ryujinx.Core/OsHle/Objects/Friend/IFriendService.cs b/Ryujinx.Core/OsHle/IpcServices/Friend/IFriendService.cs
index e98e27ca..e3e03da8 100644
--- a/Ryujinx.Core/OsHle/Objects/Friend/IFriendService.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Friend/IFriendService.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Friend
+namespace Ryujinx.Core.OsHle.IpcServices.Friend
{
- class IFriendService : IIpcInterface
+ class IFriendService : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/IpcServices/Friend/ServiceFriend.cs b/Ryujinx.Core/OsHle/IpcServices/Friend/ServiceFriend.cs
new file mode 100644
index 00000000..674877f6
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Friend/ServiceFriend.cs
@@ -0,0 +1,29 @@
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Friend
+{
+ class ServiceFriend : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceFriend()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 0, CreateFriendService }
+ };
+ }
+
+ public static long CreateFriendService(ServiceCtx Context)
+ {
+ MakeObject(Context, new IFriendService());
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Objects/FspSrv/FsErr.cs b/Ryujinx.Core/OsHle/IpcServices/FspSrv/FsErr.cs
index d9aa60ae..656d529f 100644
--- a/Ryujinx.Core/OsHle/Objects/FspSrv/FsErr.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/FspSrv/FsErr.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Core.OsHle.Objects.FspSrv
+namespace Ryujinx.Core.OsHle.IpcServices.FspSrv
{
static class FsErr
{
diff --git a/Ryujinx.Core/OsHle/Objects/FspSrv/IDirectory.cs b/Ryujinx.Core/OsHle/IpcServices/FspSrv/IDirectory.cs
index 785b1ba3..54dbec74 100644
--- a/Ryujinx.Core/OsHle/Objects/FspSrv/IDirectory.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/FspSrv/IDirectory.cs
@@ -5,9 +5,9 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
-namespace Ryujinx.Core.OsHle.Objects.FspSrv
+namespace Ryujinx.Core.OsHle.IpcServices.FspSrv
{
- class IDirectory : IIpcInterface, IDisposable
+ class IDirectory : IIpcService, IDisposable
{
private const int DirectoryEntrySize = 0x310;
diff --git a/Ryujinx.Core/OsHle/Objects/FspSrv/IFile.cs b/Ryujinx.Core/OsHle/IpcServices/FspSrv/IFile.cs
index 82706f60..ac2100f2 100644
--- a/Ryujinx.Core/OsHle/Objects/FspSrv/IFile.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/FspSrv/IFile.cs
@@ -4,9 +4,9 @@ using System;
using System.Collections.Generic;
using System.IO;
-namespace Ryujinx.Core.OsHle.Objects.FspSrv
+namespace Ryujinx.Core.OsHle.IpcServices.FspSrv
{
- class IFile : IIpcInterface, IDisposable
+ class IFile : IIpcService, IDisposable
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/FspSrv/IFileSystem.cs b/Ryujinx.Core/OsHle/IpcServices/FspSrv/IFileSystem.cs
index 6b86a473..ee9de8bc 100644
--- a/Ryujinx.Core/OsHle/Objects/FspSrv/IFileSystem.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/FspSrv/IFileSystem.cs
@@ -4,12 +4,12 @@ using System;
using System.Collections.Generic;
using System.IO;
-using static Ryujinx.Core.OsHle.Objects.ErrorCode;
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.IpcServices.ErrorCode;
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
-namespace Ryujinx.Core.OsHle.Objects.FspSrv
+namespace Ryujinx.Core.OsHle.IpcServices.FspSrv
{
- class IFileSystem : IIpcInterface
+ class IFileSystem : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/FspSrv/IStorage.cs b/Ryujinx.Core/OsHle/IpcServices/FspSrv/IStorage.cs
index 4eca37e8..297461a0 100644
--- a/Ryujinx.Core/OsHle/Objects/FspSrv/IStorage.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/FspSrv/IStorage.cs
@@ -3,9 +3,9 @@ using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
using System.IO;
-namespace Ryujinx.Core.OsHle.Objects.FspSrv
+namespace Ryujinx.Core.OsHle.IpcServices.FspSrv
{
- class IStorage : IIpcInterface
+ class IStorage : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/IpcServices/FspSrv/ServiceFspSrv.cs b/Ryujinx.Core/OsHle/IpcServices/FspSrv/ServiceFspSrv.cs
new file mode 100644
index 00000000..991f4027
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/FspSrv/ServiceFspSrv.cs
@@ -0,0 +1,67 @@
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
+
+namespace Ryujinx.Core.OsHle.IpcServices.FspSrv
+{
+ class ServiceFspSrv : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceFspSrv()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 1, Initialize },
+ { 18, MountSdCard },
+ { 51, MountSaveData },
+ { 200, OpenDataStorageByCurrentProcess },
+ { 203, OpenRomStorage },
+ { 1005, GetGlobalAccessLogMode }
+ };
+ }
+
+ public long Initialize(ServiceCtx Context)
+ {
+ return 0;
+ }
+
+ public long MountSdCard(ServiceCtx Context)
+ {
+ MakeObject(Context, new IFileSystem(Context.Ns.VFs.GetSdCardPath()));
+
+ return 0;
+ }
+
+ public long MountSaveData(ServiceCtx Context)
+ {
+ MakeObject(Context, new IFileSystem(Context.Ns.VFs.GetGameSavesPath()));
+
+ return 0;
+ }
+
+ public long OpenDataStorageByCurrentProcess(ServiceCtx Context)
+ {
+ MakeObject(Context, new IStorage(Context.Ns.VFs.RomFs));
+
+ return 0;
+ }
+
+ public long OpenRomStorage(ServiceCtx Context)
+ {
+ MakeObject(Context, new IStorage(Context.Ns.VFs.RomFs));
+
+ return 0;
+ }
+
+ public long GetGlobalAccessLogMode(ServiceCtx Context)
+ {
+ Context.ResponseData.Write(0);
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Objects/Hid/IActiveVibrationDeviceList.cs b/Ryujinx.Core/OsHle/IpcServices/Hid/IActiveVibrationDeviceList.cs
index aae3c38d..020e8e7e 100644
--- a/Ryujinx.Core/OsHle/Objects/Hid/IActiveVibrationDeviceList.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Hid/IActiveVibrationDeviceList.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Hid
+namespace Ryujinx.Core.OsHle.IpcServices.Hid
{
- class IActiveApplicationDeviceList : IIpcInterface
+ class IActiveApplicationDeviceList : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Hid/IAppletResource.cs b/Ryujinx.Core/OsHle/IpcServices/Hid/IAppletResource.cs
index 7d56d04b..d22e0ff2 100644
--- a/Ryujinx.Core/OsHle/Objects/Hid/IAppletResource.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Hid/IAppletResource.cs
@@ -2,9 +2,9 @@ using Ryujinx.Core.OsHle.Handles;
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Hid
+namespace Ryujinx.Core.OsHle.IpcServices.Hid
{
- class IAppletResource : IIpcInterface
+ class IAppletResource : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/IpcServices/Hid/ServiceHid.cs b/Ryujinx.Core/OsHle/IpcServices/Hid/ServiceHid.cs
new file mode 100644
index 00000000..5cca9319
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Hid/ServiceHid.cs
@@ -0,0 +1,98 @@
+using Ryujinx.Core.OsHle.Handles;
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Hid
+{
+ class ServiceHid : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceHid()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 0, CreateAppletResource },
+ { 11, ActivateTouchScreen },
+ { 100, SetSupportedNpadStyleSet },
+ { 101, GetSupportedNpadStyleSet },
+ { 102, SetSupportedNpadIdType },
+ { 103, ActivateNpad },
+ { 120, SetNpadJoyHoldType },
+ { 121, GetNpadJoyHoldType },
+ { 203, CreateActiveVibrationDeviceList },
+ };
+ }
+
+ public long CreateAppletResource(ServiceCtx Context)
+ {
+ HSharedMem HidHndData = Context.Ns.Os.Handles.GetData<HSharedMem>(Context.Ns.Os.HidHandle);
+
+ MakeObject(Context, new IAppletResource(HidHndData));
+
+ return 0;
+ }
+
+ public long ActivateTouchScreen(ServiceCtx Context)
+ {
+ long Unknown = Context.RequestData.ReadInt64();
+
+ return 0;
+ }
+
+ public long GetSupportedNpadStyleSet(ServiceCtx Context)
+ {
+ Context.ResponseData.Write(0);
+
+ return 0;
+ }
+
+ public long SetSupportedNpadStyleSet(ServiceCtx Context)
+ {
+ long Unknown0 = Context.RequestData.ReadInt64();
+ long Unknown8 = Context.RequestData.ReadInt64();
+
+ return 0;
+ }
+
+ public long SetSupportedNpadIdType(ServiceCtx Context)
+ {
+ long Unknown = Context.RequestData.ReadInt64();
+
+ return 0;
+ }
+
+ public long ActivateNpad(ServiceCtx Context)
+ {
+ long Unknown = Context.RequestData.ReadInt64();
+
+ return 0;
+ }
+
+ public long SetNpadJoyHoldType(ServiceCtx Context)
+ {
+ long Unknown0 = Context.RequestData.ReadInt64();
+ long Unknown8 = Context.RequestData.ReadInt64();
+
+ return 0;
+ }
+
+ public long GetNpadJoyHoldType(ServiceCtx Context)
+ {
+ Context.ResponseData.Write(0L);
+
+ return 0;
+ }
+
+ public long CreateActiveVibrationDeviceList(ServiceCtx Context)
+ {
+ MakeObject(Context, new IActiveApplicationDeviceList());
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Objects/IIpcInterface.cs b/Ryujinx.Core/OsHle/IpcServices/IIpcService.cs
index c57a0974..eebcdfbe 100644
--- a/Ryujinx.Core/OsHle/Objects/IIpcInterface.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/IIpcService.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects
+namespace Ryujinx.Core.OsHle.IpcServices
{
- interface IIpcInterface
+ interface IIpcService
{
IReadOnlyDictionary<int, ServiceProcessRequest> Commands { get; }
}
diff --git a/Ryujinx.Core/OsHle/IpcServices/Lm/ServiceLm.cs b/Ryujinx.Core/OsHle/IpcServices/Lm/ServiceLm.cs
new file mode 100644
index 00000000..e665253c
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Lm/ServiceLm.cs
@@ -0,0 +1,27 @@
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Lm
+{
+ class ServiceLm : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceLm()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 0, Initialize }
+ };
+ }
+
+ public long Initialize(ServiceCtx Context)
+ {
+ Context.Session.Initialize();
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceNvDrv.cs b/Ryujinx.Core/OsHle/IpcServices/NvServices/ServiceNvDrv.cs
index 6c5fdaed..1de0ab70 100644
--- a/Ryujinx.Core/OsHle/Services/ServiceNvDrv.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/NvServices/ServiceNvDrv.cs
@@ -6,14 +6,14 @@ using Ryujinx.Graphics.Gpu;
using System;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Services
+namespace Ryujinx.Core.OsHle.IpcServices.NvServices
{
- static partial class Service
+ class ServiceNvDrv : IIpcService
{
- private delegate long ServiceProcessRequest(ServiceCtx Context);
+ private delegate long ServiceProcessIoctl(ServiceCtx Context);
- private static Dictionary<(string, int), ServiceProcessRequest> IoctlCmds =
- new Dictionary<(string, int), ServiceProcessRequest>()
+ private static Dictionary<(string, int), ServiceProcessIoctl> IoctlCmds =
+ new Dictionary<(string, int), ServiceProcessIoctl>()
{
{ ("/dev/nvhost-as-gpu", 0x4101), NvGpuAsIoctlBindChannel },
{ ("/dev/nvhost-as-gpu", 0x4102), NvGpuAsIoctlAllocSpace },
@@ -42,7 +42,24 @@ namespace Ryujinx.Core.OsHle.Services
{ ("/dev/nvmap", 0x010e), NvMapIocGetId },
};
- public static long NvDrvOpen(ServiceCtx Context)
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceNvDrv()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 0, Open },
+ { 1, Ioctl },
+ { 2, Close },
+ { 3, Initialize },
+ { 4, QueryEvent },
+ { 8, SetClientPid },
+ };
+ }
+
+ public static long Open(ServiceCtx Context)
{
long NamePtr = Context.Request.SendBuff[0].Position;
@@ -56,7 +73,7 @@ namespace Ryujinx.Core.OsHle.Services
return 0;
}
- public static long NvDrvIoctl(ServiceCtx Context)
+ public static long Ioctl(ServiceCtx Context)
{
int Fd = Context.RequestData.ReadInt32();
int Cmd = Context.RequestData.ReadInt32() & 0xffff;
@@ -67,7 +84,7 @@ namespace Ryujinx.Core.OsHle.Services
Context.ResponseData.Write(0);
- if (IoctlCmds.TryGetValue((FdData.Name, Cmd), out ServiceProcessRequest ProcReq))
+ if (IoctlCmds.TryGetValue((FdData.Name, Cmd), out ServiceProcessIoctl ProcReq))
{
return ProcReq(Context);
}
@@ -77,7 +94,7 @@ namespace Ryujinx.Core.OsHle.Services
}
}
- public static long NvDrvClose(ServiceCtx Context)
+ public static long Close(ServiceCtx Context)
{
int Fd = Context.RequestData.ReadInt32();
@@ -88,7 +105,7 @@ namespace Ryujinx.Core.OsHle.Services
return 0;
}
- public static long NvDrvInitialize(ServiceCtx Context)
+ public static long Initialize(ServiceCtx Context)
{
long TransferMemSize = Context.RequestData.ReadInt64();
int TransferMemHandle = Context.Request.HandleDesc.ToCopy[0];
@@ -98,7 +115,7 @@ namespace Ryujinx.Core.OsHle.Services
return 0;
}
- public static long NvDrvQueryEvent(ServiceCtx Context)
+ public static long QueryEvent(ServiceCtx Context)
{
int Fd = Context.RequestData.ReadInt32();
int EventId = Context.RequestData.ReadInt32();
@@ -110,7 +127,7 @@ namespace Ryujinx.Core.OsHle.Services
return 0;
}
- public static long NvDrvSetClientPid(ServiceCtx Context)
+ public static long SetClientPid(ServiceCtx Context)
{
long Pid = Context.RequestData.ReadInt64();
diff --git a/Ryujinx.Core/OsHle/Objects/ObjHelper.cs b/Ryujinx.Core/OsHle/IpcServices/ObjHelper.cs
index a151a287..ff71838a 100644
--- a/Ryujinx.Core/OsHle/Objects/ObjHelper.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/ObjHelper.cs
@@ -1,7 +1,7 @@
using Ryujinx.Core.OsHle.Handles;
using Ryujinx.Core.OsHle.Ipc;
-namespace Ryujinx.Core.OsHle.Objects
+namespace Ryujinx.Core.OsHle.IpcServices
{
static class ObjHelper
{
diff --git a/Ryujinx.Core/OsHle/Objects/Am/IParentalControlService.cs b/Ryujinx.Core/OsHle/IpcServices/Pctl/IParentalControlService.cs
index 1feacfa6..4eb92d31 100644
--- a/Ryujinx.Core/OsHle/Objects/Am/IParentalControlService.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Pctl/IParentalControlService.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Am
+namespace Ryujinx.Core.OsHle.IpcServices.Pctl
{
- class IParentalControlService : IIpcInterface
+ class IParentalControlService : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/IpcServices/Pctl/ServicePctl.cs b/Ryujinx.Core/OsHle/IpcServices/Pctl/ServicePctl.cs
new file mode 100644
index 00000000..2d5e22a4
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Pctl/ServicePctl.cs
@@ -0,0 +1,29 @@
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Pctl
+{
+ class ServicePctl : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServicePctl()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 0, CreateService }
+ };
+ }
+
+ public static long CreateService(ServiceCtx Context)
+ {
+ MakeObject(Context, new IParentalControlService());
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/IpcServices/Pl/ServicePl.cs b/Ryujinx.Core/OsHle/IpcServices/Pl/ServicePl.cs
new file mode 100644
index 00000000..abc34ed2
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Pl/ServicePl.cs
@@ -0,0 +1,51 @@
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Pl
+{
+ class ServicePl : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServicePl()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 1, GetLoadState },
+ { 2, GetFontSize },
+ { 3, GetSharedMemoryAddressOffset },
+ { 4, GetSharedMemoryNativeHandle }
+ };
+ }
+
+ public static long GetLoadState(ServiceCtx Context)
+ {
+ Context.ResponseData.Write(1); //Loaded
+
+ return 0;
+ }
+
+ public static long GetFontSize(ServiceCtx Context)
+ {
+ Context.ResponseData.Write(Horizon.FontSize);
+
+ return 0;
+ }
+
+ public static long GetSharedMemoryAddressOffset(ServiceCtx Context)
+ {
+ Context.ResponseData.Write(0);
+
+ return 0;
+ }
+
+ public static long GetSharedMemoryNativeHandle(ServiceCtx Context)
+ {
+ Context.Response.HandleDesc = IpcHandleDesc.MakeCopy(Context.Ns.Os.FontHandle);
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/IpcServices/ServiceFactory.cs b/Ryujinx.Core/OsHle/IpcServices/ServiceFactory.cs
new file mode 100644
index 00000000..e9613050
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/ServiceFactory.cs
@@ -0,0 +1,50 @@
+using Ryujinx.Core.OsHle.IpcServices.Acc;
+using Ryujinx.Core.OsHle.IpcServices.Am;
+using Ryujinx.Core.OsHle.IpcServices.Apm;
+using Ryujinx.Core.OsHle.IpcServices.Aud;
+using Ryujinx.Core.OsHle.IpcServices.Friend;
+using Ryujinx.Core.OsHle.IpcServices.FspSrv;
+using Ryujinx.Core.OsHle.IpcServices.Hid;
+using Ryujinx.Core.OsHle.IpcServices.Lm;
+using Ryujinx.Core.OsHle.IpcServices.NvServices;
+using Ryujinx.Core.OsHle.IpcServices.Pctl;
+using Ryujinx.Core.OsHle.IpcServices.Pl;
+using Ryujinx.Core.OsHle.IpcServices.Set;
+using Ryujinx.Core.OsHle.IpcServices.Sm;
+using Ryujinx.Core.OsHle.IpcServices.Time;
+using Ryujinx.Core.OsHle.IpcServices.Vi;
+using System;
+
+namespace Ryujinx.Core.OsHle.IpcServices
+{
+ static class ServiceFactory
+ {
+ public static IIpcService MakeService(string Name)
+ {
+ switch (Name)
+ {
+ case "acc:u0": return new ServiceAcc();
+ case "apm": return new ServiceApm();
+ case "apm:p": return new ServiceApm();
+ case "appletOE": return new ServiceAppletOE();
+ case "audout:u": return new ServiceAudOut();
+ case "audren:u": return new ServiceAudRen();
+ case "friend:a": return new ServiceFriend();
+ case "fsp-srv": return new ServiceFspSrv();
+ case "hid": return new ServiceHid();
+ case "lm": return new ServiceLm();
+ case "nvdrv": return new ServiceNvDrv();
+ case "nvdrv:a": return new ServiceNvDrv();
+ case "pctl:a": return new ServicePctl();
+ case "pl:u": return new ServicePl();
+ case "set": return new ServiceSet();
+ case "sm:": return new ServiceSm();
+ case "time:s": return new ServiceTime();
+ case "time:u": return new ServiceTime();
+ case "vi:m": return new ServiceVi();
+ }
+
+ throw new NotImplementedException(Name);
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceSet.cs b/Ryujinx.Core/OsHle/IpcServices/Set/ServiceSet.cs
index 83ea5b2c..05e409b0 100644
--- a/Ryujinx.Core/OsHle/Services/ServiceSet.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Set/ServiceSet.cs
@@ -1,12 +1,26 @@
using ChocolArm64.Memory;
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Services
+namespace Ryujinx.Core.OsHle.IpcServices.Set
{
- static partial class Service
+ class ServiceSet : IIpcService
{
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceSet()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 1, GetAvailableLanguageCodes }
+ };
+ }
+
private const int LangCodesCount = 13;
- public static long SetGetAvailableLanguageCodes(ServiceCtx Context)
+ public static long GetAvailableLanguageCodes(ServiceCtx Context)
{
int PtrBuffSize = Context.RequestData.ReadInt32();
diff --git a/Ryujinx.Core/OsHle/Services/ServiceSm.cs b/Ryujinx.Core/OsHle/IpcServices/Sm/ServiceSm.cs
index 58abed24..a5f1b329 100644
--- a/Ryujinx.Core/OsHle/Services/ServiceSm.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Sm/ServiceSm.cs
@@ -1,20 +1,34 @@
using Ryujinx.Core.OsHle.Handles;
using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Services
+namespace Ryujinx.Core.OsHle.IpcServices.Sm
{
- static partial class Service
+ class ServiceSm : IIpcService
{
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceSm()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 0, Initialize },
+ { 1, GetService }
+ };
+ }
+
private const int SmNotInitialized = 0x415;
- public static long SmInitialize(ServiceCtx Context)
+ public long Initialize(ServiceCtx Context)
{
Context.Session.Initialize();
return 0;
}
- public static long SmGetService(ServiceCtx Context)
+ public long GetService(ServiceCtx Context)
{
//Only for kernel version > 3.0.0.
if (!Context.Session.IsInitialized)
@@ -36,7 +50,12 @@ namespace Ryujinx.Core.OsHle.Services
}
}
- HSession Session = new HSession(Name);
+ if (Name == string.Empty)
+ {
+ return 0;
+ }
+
+ HSession Session = new HSession(ServiceFactory.MakeService(Name));
int Handle = Context.Ns.Os.Handles.GenerateId(Session);
diff --git a/Ryujinx.Core/OsHle/Objects/Time/ISteadyClock.cs b/Ryujinx.Core/OsHle/IpcServices/Time/ISteadyClock.cs
index 1116b849..d20e4378 100644
--- a/Ryujinx.Core/OsHle/Objects/Time/ISteadyClock.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Time/ISteadyClock.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Time
+namespace Ryujinx.Core.OsHle.IpcServices.Time
{
- class ISteadyClock : IIpcInterface
+ class ISteadyClock : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Time/ISystemClock.cs b/Ryujinx.Core/OsHle/IpcServices/Time/ISystemClock.cs
index 3aa70691..4d4493da 100644
--- a/Ryujinx.Core/OsHle/Objects/Time/ISystemClock.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Time/ISystemClock.cs
@@ -2,9 +2,9 @@ using Ryujinx.Core.OsHle.Ipc;
using System;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Time
+namespace Ryujinx.Core.OsHle.IpcServices.Time
{
- class ISystemClock : IIpcInterface
+ class ISystemClock : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Time/ITimeZoneService.cs b/Ryujinx.Core/OsHle/IpcServices/Time/ITimeZoneService.cs
index c083628b..9875fa2f 100644
--- a/Ryujinx.Core/OsHle/Objects/Time/ITimeZoneService.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Time/ITimeZoneService.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Time
+namespace Ryujinx.Core.OsHle.IpcServices.Time
{
- class ITimeZoneService : IIpcInterface
+ class ITimeZoneService : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/IpcServices/Time/ServiceTime.cs b/Ryujinx.Core/OsHle/IpcServices/Time/ServiceTime.cs
new file mode 100644
index 00000000..43f28bb8
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Time/ServiceTime.cs
@@ -0,0 +1,62 @@
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Time
+{
+ class ServiceTime : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceTime()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 0, GetStandardUserSystemClock },
+ { 1, GetStandardNetworkSystemClock },
+ { 2, GetStandardSteadyClock },
+ { 3, GetTimeZoneService },
+ { 4, GetStandardLocalSystemClock }
+ };
+ }
+
+ public long GetStandardUserSystemClock(ServiceCtx Context)
+ {
+ MakeObject(Context, new ISystemClock(SystemClockType.User));
+
+ return 0;
+ }
+
+ public long GetStandardNetworkSystemClock(ServiceCtx Context)
+ {
+ MakeObject(Context, new ISystemClock(SystemClockType.Network));
+
+ return 0;
+ }
+
+ public long GetStandardSteadyClock(ServiceCtx Context)
+ {
+ MakeObject(Context, new ISteadyClock());
+
+ return 0;
+ }
+
+ public long GetTimeZoneService(ServiceCtx Context)
+ {
+ MakeObject(Context, new ITimeZoneService());
+
+ return 0;
+ }
+
+ public long GetStandardLocalSystemClock(ServiceCtx Context)
+ {
+ MakeObject(Context, new ISystemClock(SystemClockType.Local));
+
+ return 0;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Objects/Time/SystemClockType.cs b/Ryujinx.Core/OsHle/IpcServices/Time/SystemClockType.cs
index f447ca1c..2314942a 100644
--- a/Ryujinx.Core/OsHle/Objects/Time/SystemClockType.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Time/SystemClockType.cs
@@ -1,4 +1,4 @@
-namespace Ryujinx.Core.OsHle.Objects.Time
+namespace Ryujinx.Core.OsHle.IpcServices.Time
{
enum SystemClockType
{
diff --git a/Ryujinx.Core/OsHle/Objects/Vi/IApplicationDisplayService.cs b/Ryujinx.Core/OsHle/IpcServices/Vi/IApplicationDisplayService.cs
index b3ec0e90..a899cdd5 100644
--- a/Ryujinx.Core/OsHle/Objects/Vi/IApplicationDisplayService.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Vi/IApplicationDisplayService.cs
@@ -4,12 +4,12 @@ using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
using System.IO;
-using static Ryujinx.Core.OsHle.Objects.Android.Parcel;
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
+using static Ryujinx.Core.OsHle.IpcServices.Android.Parcel;
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
-namespace Ryujinx.Core.OsHle.Objects.Vi
+namespace Ryujinx.Core.OsHle.IpcServices.Vi
{
- class IApplicationDisplayService : IIpcInterface
+ class IApplicationDisplayService : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Vi/IHOSBinderDriver.cs b/Ryujinx.Core/OsHle/IpcServices/Vi/IHOSBinderDriver.cs
index bbea3368..a89c1df8 100644
--- a/Ryujinx.Core/OsHle/Objects/Vi/IHOSBinderDriver.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Vi/IHOSBinderDriver.cs
@@ -1,12 +1,12 @@
using ChocolArm64.Memory;
using Ryujinx.Core.OsHle.Ipc;
-using Ryujinx.Core.OsHle.Objects.Android;
+using Ryujinx.Core.OsHle.IpcServices.Android;
using System;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Vi
+namespace Ryujinx.Core.OsHle.IpcServices.Vi
{
- class IHOSBinderDriver : IIpcInterface, IDisposable
+ class IHOSBinderDriver : IIpcService, IDisposable
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Vi/IManagerDisplayService.cs b/Ryujinx.Core/OsHle/IpcServices/Vi/IManagerDisplayService.cs
index f1b3cdd0..5adee78d 100644
--- a/Ryujinx.Core/OsHle/Objects/Vi/IManagerDisplayService.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Vi/IManagerDisplayService.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Vi
+namespace Ryujinx.Core.OsHle.IpcServices.Vi
{
- class IManagerDisplayService : IIpcInterface
+ class IManagerDisplayService : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/Objects/Vi/ISystemDisplayService.cs b/Ryujinx.Core/OsHle/IpcServices/Vi/ISystemDisplayService.cs
index 4c83c25f..d87fcbf6 100644
--- a/Ryujinx.Core/OsHle/Objects/Vi/ISystemDisplayService.cs
+++ b/Ryujinx.Core/OsHle/IpcServices/Vi/ISystemDisplayService.cs
@@ -1,9 +1,9 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
-namespace Ryujinx.Core.OsHle.Objects.Vi
+namespace Ryujinx.Core.OsHle.IpcServices.Vi
{
- class ISystemDisplayService : IIpcInterface
+ class ISystemDisplayService : IIpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
diff --git a/Ryujinx.Core/OsHle/IpcServices/Vi/ServiceVi.cs b/Ryujinx.Core/OsHle/IpcServices/Vi/ServiceVi.cs
new file mode 100644
index 00000000..2c3dd2a3
--- /dev/null
+++ b/Ryujinx.Core/OsHle/IpcServices/Vi/ServiceVi.cs
@@ -0,0 +1,31 @@
+using Ryujinx.Core.OsHle.Ipc;
+using System.Collections.Generic;
+
+using static Ryujinx.Core.OsHle.IpcServices.ObjHelper;
+
+namespace Ryujinx.Core.OsHle.IpcServices.Vi
+{
+ class ServiceVi : IIpcService
+ {
+ private Dictionary<int, ServiceProcessRequest> m_Commands;
+
+ public IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
+
+ public ServiceVi()
+ {
+ m_Commands = new Dictionary<int, ServiceProcessRequest>()
+ {
+ { 2, GetDisplayService }
+ };
+ }
+
+ public long GetDisplayService(ServiceCtx Context)
+ {
+ int Unknown = Context.RequestData.ReadInt32();
+
+ MakeObject(Context, new IApplicationDisplayService());
+
+ return 0;
+ }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceAcc.cs b/Ryujinx.Core/OsHle/Services/ServiceAcc.cs
deleted file mode 100644
index f25113e5..00000000
--- a/Ryujinx.Core/OsHle/Services/ServiceAcc.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using Ryujinx.Core.OsHle.Objects.Acc;
-
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
-
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long AccU0ListOpenUsers(ServiceCtx Context)
- {
- return 0;
- }
-
- public static long AccU0GetProfile(ServiceCtx Context)
- {
- MakeObject(Context, new IProfile());
-
- return 0;
- }
-
- public static long AccU0InitializeApplicationInfo(ServiceCtx Context)
- {
- return 0;
- }
-
- public static long AccU0GetBaasAccountManagerForApplication(ServiceCtx Context)
- {
- MakeObject(Context, new IManagerForApplication());
-
- return 0;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceApm.cs b/Ryujinx.Core/OsHle/Services/ServiceApm.cs
deleted file mode 100644
index e1bc0d34..00000000
--- a/Ryujinx.Core/OsHle/Services/ServiceApm.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Ryujinx.Core.OsHle.Objects.Apm;
-
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
-
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long ApmOpenSession(ServiceCtx Context)
- {
- MakeObject(Context, new ISession());
-
- return 0;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceAppletOE.cs b/Ryujinx.Core/OsHle/Services/ServiceAppletOE.cs
deleted file mode 100644
index bbb2484b..00000000
--- a/Ryujinx.Core/OsHle/Services/ServiceAppletOE.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Ryujinx.Core.OsHle.Objects.Am;
-
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
-
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long AppletOpenApplicationProxy(ServiceCtx Context)
- {
- MakeObject(Context, new IApplicationProxy());
-
- return 0;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceAud.cs b/Ryujinx.Core/OsHle/Services/ServiceAud.cs
deleted file mode 100644
index a8ba7dc0..00000000
--- a/Ryujinx.Core/OsHle/Services/ServiceAud.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using ChocolArm64.Memory;
-using Ryujinx.Core.OsHle.Objects.Aud;
-using System.Text;
-
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
-
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long AudOutListAudioOuts(ServiceCtx Context)
- {
- long Position = Context.Request.ReceiveBuff[0].Position;
-
- AMemoryHelper.WriteBytes(Context.Memory, Position, Encoding.ASCII.GetBytes("iface"));
-
- Context.ResponseData.Write(1);
-
- return 0;
- }
-
- public static long AudOutOpenAudioOut(ServiceCtx Context)
- {
- MakeObject(Context, new IAudioOut());
-
- Context.ResponseData.Write(48000); //Sample Rate
- Context.ResponseData.Write(2); //Channel Count
- Context.ResponseData.Write(2); //PCM Format
- /*
- 0 - Invalid
- 1 - INT8
- 2 - INT16
- 3 - INT24
- 4 - INT32
- 5 - PCM Float
- 6 - ADPCM
- */
- Context.ResponseData.Write(0); //Unknown
-
- return 0;
- }
-
- public static long AudRenOpenAudioRenderer(ServiceCtx Context)
- {
- MakeObject(Context, new IAudioRenderer());
-
- return 0;
- }
-
- public static long AudRenGetAudioRendererWorkBufferSize(ServiceCtx Context)
- {
- int SampleRate = Context.RequestData.ReadInt32();
- int Unknown4 = Context.RequestData.ReadInt32();
- int Unknown8 = Context.RequestData.ReadInt32();
- int UnknownC = Context.RequestData.ReadInt32();
- int Unknown10 = Context.RequestData.ReadInt32();
- int Unknown14 = Context.RequestData.ReadInt32();
- int Unknown18 = Context.RequestData.ReadInt32();
- int Unknown1c = Context.RequestData.ReadInt32();
- int Unknown20 = Context.RequestData.ReadInt32();
- int Unknown24 = Context.RequestData.ReadInt32();
- int Unknown28 = Context.RequestData.ReadInt32();
- int Unknown2c = Context.RequestData.ReadInt32();
- int Rev1Magic = Context.RequestData.ReadInt32();
-
- Context.ResponseData.Write(0x400L);
-
- return 0;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceFriend.cs b/Ryujinx.Core/OsHle/Services/ServiceFriend.cs
deleted file mode 100644
index d1229bd4..00000000
--- a/Ryujinx.Core/OsHle/Services/ServiceFriend.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Ryujinx.Core.OsHle.Objects.Friend;
-
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
-
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long FriendCreateFriendService(ServiceCtx Context)
- {
- MakeObject(Context, new IFriendService());
-
- return 0;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceFspSrv.cs b/Ryujinx.Core/OsHle/Services/ServiceFspSrv.cs
deleted file mode 100644
index 3fe41cf0..00000000
--- a/Ryujinx.Core/OsHle/Services/ServiceFspSrv.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using Ryujinx.Core.OsHle.Objects.FspSrv;
-
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
-
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long FspSrvInitialize(ServiceCtx Context)
- {
- return 0;
- }
-
- public static long FspSrvMountSdCard(ServiceCtx Context)
- {
- MakeObject(Context, new IFileSystem(Context.Ns.VFs.GetSdCardPath()));
-
- return 0;
- }
-
- public static long FspSrvMountSaveData(ServiceCtx Context)
- {
- MakeObject(Context, new IFileSystem(Context.Ns.VFs.GetGameSavesPath()));
-
- return 0;
- }
-
- public static long FspSrvOpenDataStorageByCurrentProcess(ServiceCtx Context)
- {
- MakeObject(Context, new IStorage(Context.Ns.VFs.RomFs));
-
- return 0;
- }
-
- public static long FspSrvOpenRomStorage(ServiceCtx Context)
- {
- MakeObject(Context, new IStorage(Context.Ns.VFs.RomFs));
-
- return 0;
- }
-
- public static long FspSrvGetGlobalAccessLogMode(ServiceCtx Context)
- {
- Context.ResponseData.Write(0);
-
- return 0;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceHid.cs b/Ryujinx.Core/OsHle/Services/ServiceHid.cs
deleted file mode 100644
index aed3e959..00000000
--- a/Ryujinx.Core/OsHle/Services/ServiceHid.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-using Ryujinx.Core.OsHle.Handles;
-using Ryujinx.Core.OsHle.Objects.Hid;
-
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
-
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long HidCreateAppletResource(ServiceCtx Context)
- {
- HSharedMem HidHndData = Context.Ns.Os.Handles.GetData<HSharedMem>(Context.Ns.Os.HidHandle);
-
- MakeObject(Context, new IAppletResource(HidHndData));
-
- return 0;
- }
-
- public static long HidActivateTouchScreen(ServiceCtx Context)
- {
- long Unknown = Context.RequestData.ReadInt64();
-
- return 0;
- }
-
- public static long HidGetSupportedNpadStyleSet(ServiceCtx Context)
- {
- Context.ResponseData.Write(0);
-
- return 0;
- }
-
- public static long HidSetSupportedNpadStyleSet(ServiceCtx Context)
- {
- long Unknown0 = Context.RequestData.ReadInt64();
- long Unknown8 = Context.RequestData.ReadInt64();
-
- return 0;
- }
-
- public static long HidSetSupportedNpadIdType(ServiceCtx Context)
- {
- long Unknown = Context.RequestData.ReadInt64();
-
- return 0;
- }
-
- public static long HidActivateNpad(ServiceCtx Context)
- {
- long Unknown = Context.RequestData.ReadInt64();
-
- return 0;
- }
-
- public static long HidSetNpadJoyHoldType(ServiceCtx Context)
- {
- long Unknown0 = Context.RequestData.ReadInt64();
- long Unknown8 = Context.RequestData.ReadInt64();
-
- return 0;
- }
-
- public static long HidGetNpadJoyHoldType(ServiceCtx Context)
- {
- Context.ResponseData.Write(0L);
-
- return 0;
- }
-
- public static long HidCreateActiveVibrationDeviceList(ServiceCtx Context)
- {
- MakeObject(Context, new IActiveApplicationDeviceList());
-
- return 0;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceLm.cs b/Ryujinx.Core/OsHle/Services/ServiceLm.cs
deleted file mode 100644
index 1fdde552..00000000
--- a/Ryujinx.Core/OsHle/Services/ServiceLm.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long LmInitialize(ServiceCtx Context)
- {
- Context.Session.Initialize();
-
- return 0;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServicePctl.cs b/Ryujinx.Core/OsHle/Services/ServicePctl.cs
deleted file mode 100644
index 9c4406bb..00000000
--- a/Ryujinx.Core/OsHle/Services/ServicePctl.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using Ryujinx.Core.OsHle.Objects.Am;
-
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
-
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long PctlCreateService(ServiceCtx Context)
- {
- MakeObject(Context, new IParentalControlService());
-
- return 0;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServicePl.cs b/Ryujinx.Core/OsHle/Services/ServicePl.cs
deleted file mode 100644
index 21e6741c..00000000
--- a/Ryujinx.Core/OsHle/Services/ServicePl.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using Ryujinx.Core.OsHle.Ipc;
-
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long PlGetLoadState(ServiceCtx Context)
- {
- Context.ResponseData.Write(1); //Loaded
-
- return 0;
- }
-
- public static long PlGetFontSize(ServiceCtx Context)
- {
- Context.ResponseData.Write(Horizon.FontSize);
-
- return 0;
- }
-
- public static long PlGetSharedMemoryAddressOffset(ServiceCtx Context)
- {
- Context.ResponseData.Write(0);
-
- return 0;
- }
-
- public static long PlGetSharedMemoryNativeHandle(ServiceCtx Context)
- {
- Context.Response.HandleDesc = IpcHandleDesc.MakeCopy(Context.Ns.Os.FontHandle);
-
- return 0;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceTime.cs b/Ryujinx.Core/OsHle/Services/ServiceTime.cs
deleted file mode 100644
index a5fddcba..00000000
--- a/Ryujinx.Core/OsHle/Services/ServiceTime.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using Ryujinx.Core.OsHle.Objects.Time;
-
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
-
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long TimeGetStandardUserSystemClock(ServiceCtx Context)
- {
- MakeObject(Context, new ISystemClock(SystemClockType.User));
-
- return 0;
- }
-
- public static long TimeGetStandardNetworkSystemClock(ServiceCtx Context)
- {
- MakeObject(Context, new ISystemClock(SystemClockType.Network));
-
- return 0;
- }
-
- public static long TimeGetStandardSteadyClock(ServiceCtx Context)
- {
- MakeObject(Context, new ISteadyClock());
-
- return 0;
- }
-
- public static long TimeGetTimeZoneService(ServiceCtx Context)
- {
- MakeObject(Context, new ITimeZoneService());
-
- return 0;
- }
-
- public static long TimeGetStandardLocalSystemClock(ServiceCtx Context)
- {
- MakeObject(Context, new ISystemClock(SystemClockType.Local));
-
- return 0;
- }
-
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Services/ServiceVi.cs b/Ryujinx.Core/OsHle/Services/ServiceVi.cs
deleted file mode 100644
index 75cdc31b..00000000
--- a/Ryujinx.Core/OsHle/Services/ServiceVi.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using Ryujinx.Core.OsHle.Objects.Vi;
-
-using static Ryujinx.Core.OsHle.Objects.ObjHelper;
-
-namespace Ryujinx.Core.OsHle.Services
-{
- static partial class Service
- {
- public static long ViGetDisplayService(ServiceCtx Context)
- {
- int Unknown = Context.RequestData.ReadInt32();
-
- MakeObject(Context, new IApplicationDisplayService());
-
- return 0;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Core/OsHle/Svc/SvcSystem.cs b/Ryujinx.Core/OsHle/Svc/SvcSystem.cs
index a69d3b40..3b9142c7 100644
--- a/Ryujinx.Core/OsHle/Svc/SvcSystem.cs
+++ b/Ryujinx.Core/OsHle/Svc/SvcSystem.cs
@@ -3,6 +3,7 @@ using ChocolArm64.State;
using Ryujinx.Core.OsHle.Exceptions;
using Ryujinx.Core.OsHle.Handles;
using Ryujinx.Core.OsHle.Ipc;
+using Ryujinx.Core.OsHle.IpcServices;
using System;
using System.Threading;
@@ -61,7 +62,7 @@ namespace Ryujinx.Core.OsHle.Svc
//TODO: Validate that app has perms to access the service, and that the service
//actually exists, return error codes otherwise.
- HSession Session = new HSession(Name);
+ HSession Session = new HSession(ServiceFactory.MakeService(Name));
ThreadState.X1 = (ulong)Ns.Os.Handles.GenerateId(Session);
ThreadState.X0 = (int)SvcResult.Success;