forked from Mirror/Ryujinx
Horizon: Migrate usb and psc services (#5800)
* Horizon: Migrate Usb and Psc services * Fix formatting * Adresses feedback
This commit is contained in:
parent
e768a54f17
commit
1e06b28b22
65 changed files with 715 additions and 125 deletions
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Ins
|
||||
{
|
||||
[Service("ins:r")]
|
||||
class IReceiverManager : IpcService
|
||||
{
|
||||
public IReceiverManager(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Ins
|
||||
{
|
||||
[Service("ins:s")]
|
||||
class ISenderManager : IpcService
|
||||
{
|
||||
public ISenderManager(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Ovln
|
||||
{
|
||||
[Service("ovln:rcv")]
|
||||
class IReceiverService : IpcService
|
||||
{
|
||||
public IReceiverService(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Ovln
|
||||
{
|
||||
[Service("ovln:snd")]
|
||||
class ISenderService : IpcService
|
||||
{
|
||||
public ISenderService(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Psc
|
||||
{
|
||||
[Service("psc:c")]
|
||||
class IPmControl : IpcService
|
||||
{
|
||||
public IPmControl(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Psc
|
||||
{
|
||||
[Service("psc:m")]
|
||||
class IPmService : IpcService
|
||||
{
|
||||
public IPmService(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Psc
|
||||
{
|
||||
[Service("psc:l")] // 9.0.0+
|
||||
class IPmUnknown : IpcService
|
||||
{
|
||||
public IPmUnknown(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Srepo
|
||||
{
|
||||
[Service("srepo:a")] // 5.0.0+
|
||||
[Service("srepo:u")] // 5.0.0+
|
||||
class ISrepoService : IpcService
|
||||
{
|
||||
public ISrepoService(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Usb
|
||||
{
|
||||
[Service("usb:hs")]
|
||||
[Service("usb:hs:a")] // 7.0.0+
|
||||
class IClientRootSession : IpcService
|
||||
{
|
||||
public IClientRootSession(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Usb
|
||||
{
|
||||
[Service("usb:ds")]
|
||||
class IDsService : IpcService
|
||||
{
|
||||
public IDsService(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Usb
|
||||
{
|
||||
[Service("usb:pd:c")]
|
||||
class IPdCradleManager : IpcService
|
||||
{
|
||||
public IPdCradleManager(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Usb
|
||||
{
|
||||
[Service("usb:pd")]
|
||||
class IPdManager : IpcService
|
||||
{
|
||||
public IPdManager(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Usb
|
||||
{
|
||||
[Service("usb:pm")]
|
||||
class IPmService : IpcService
|
||||
{
|
||||
public IPmService(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Usb
|
||||
{
|
||||
[Service("usb:qdb")] // 7.0.0+
|
||||
class IUnknown1 : IpcService
|
||||
{
|
||||
public IUnknown1(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
namespace Ryujinx.HLE.HOS.Services.Usb
|
||||
{
|
||||
[Service("usb:obsv")] // 8.0.0+
|
||||
class IUnknown2 : IpcService
|
||||
{
|
||||
public IUnknown2(ServiceCtx context) { }
|
||||
}
|
||||
}
|
|
@ -93,7 +93,7 @@ namespace Ryujinx.Horizon.Generators.Hipc
|
|||
generator.LeaveScope();
|
||||
generator.LeaveScope();
|
||||
|
||||
context.AddSource($"{className}.g.cs", generator.ToString());
|
||||
context.AddSource($"{GetNamespaceName(commandInterface.ClassDeclarationSyntax)}.{className}.g.cs", generator.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
47
src/Ryujinx.Horizon/Hshl/HshlIpcServer.cs
Normal file
47
src/Ryujinx.Horizon/Hshl/HshlIpcServer.cs
Normal file
|
@ -0,0 +1,47 @@
|
|||
using Ryujinx.Horizon.Hshl.Ipc;
|
||||
using Ryujinx.Horizon.Sdk.Sf.Hipc;
|
||||
using Ryujinx.Horizon.Sdk.Sm;
|
||||
|
||||
namespace Ryujinx.Horizon.Hshl
|
||||
{
|
||||
class HshlIpcServer
|
||||
{
|
||||
private const int HshlMaxSessionsCount = 10;
|
||||
private const int TotalMaxSessionsCount = HshlMaxSessionsCount * 2;
|
||||
|
||||
private const int PointerBufferSize = 0;
|
||||
private const int MaxDomains = 0;
|
||||
private const int MaxDomainObjects = 0;
|
||||
private const int MaxPortsCount = 2;
|
||||
|
||||
private static readonly ManagerOptions _options = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false);
|
||||
|
||||
private SmApi _sm;
|
||||
private ServerManager _serverManager;
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
HeapAllocator allocator = new();
|
||||
|
||||
_sm = new SmApi();
|
||||
_sm.Initialize().AbortOnFailure();
|
||||
|
||||
_serverManager = new ServerManager(allocator, _sm, MaxPortsCount, _options, TotalMaxSessionsCount);
|
||||
|
||||
#pragma warning disable IDE0055 // Disable formatting
|
||||
_serverManager.RegisterObjectForServer(new SetterManager(), ServiceName.Encode("hshl:set"), HshlMaxSessionsCount); // 11.0.0+
|
||||
_serverManager.RegisterObjectForServer(new Manager(), ServiceName.Encode("hshl:sys"), HshlMaxSessionsCount); // 11.0.0+
|
||||
#pragma warning restore IDE0055
|
||||
}
|
||||
|
||||
public void ServiceRequests()
|
||||
{
|
||||
_serverManager.ServiceRequests();
|
||||
}
|
||||
|
||||
public void Shutdown()
|
||||
{
|
||||
_serverManager.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
17
src/Ryujinx.Horizon/Hshl/HshlMain.cs
Normal file
17
src/Ryujinx.Horizon/Hshl/HshlMain.cs
Normal file
|
@ -0,0 +1,17 @@
|
|||
namespace Ryujinx.Horizon.Hshl
|
||||
{
|
||||
class HshlMain : IService
|
||||
{
|
||||
public static void Main(ServiceTable serviceTable)
|
||||
{
|
||||
HshlIpcServer ipcServer = new();
|
||||
|
||||
ipcServer.Initialize();
|
||||
|
||||
serviceTable.SignalServiceReady();
|
||||
|
||||
ipcServer.ServiceRequests();
|
||||
ipcServer.Shutdown();
|
||||
}
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Hshl/Ipc/Manager.cs
Normal file
8
src/Ryujinx.Horizon/Hshl/Ipc/Manager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Hshl;
|
||||
|
||||
namespace Ryujinx.Horizon.Hshl.Ipc
|
||||
{
|
||||
partial class Manager : IManager
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Hshl/Ipc/SetterManager.cs
Normal file
8
src/Ryujinx.Horizon/Hshl/Ipc/SetterManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Hshl;
|
||||
|
||||
namespace Ryujinx.Horizon.Hshl.Ipc
|
||||
{
|
||||
partial class SetterManager : ISetterManager
|
||||
{
|
||||
}
|
||||
}
|
47
src/Ryujinx.Horizon/Ins/InsIpcServer.cs
Normal file
47
src/Ryujinx.Horizon/Ins/InsIpcServer.cs
Normal file
|
@ -0,0 +1,47 @@
|
|||
using Ryujinx.Horizon.Ins.Ipc;
|
||||
using Ryujinx.Horizon.Sdk.Sf.Hipc;
|
||||
using Ryujinx.Horizon.Sdk.Sm;
|
||||
|
||||
namespace Ryujinx.Horizon.Ins
|
||||
{
|
||||
class InsIpcServer
|
||||
{
|
||||
private const int InsMaxSessionsCount = 8;
|
||||
private const int TotalMaxSessionsCount = InsMaxSessionsCount * 2;
|
||||
|
||||
private const int PointerBufferSize = 0x200;
|
||||
private const int MaxDomains = 0;
|
||||
private const int MaxDomainObjects = 0;
|
||||
private const int MaxPortsCount = 2;
|
||||
|
||||
private static readonly ManagerOptions _options = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false);
|
||||
|
||||
private SmApi _sm;
|
||||
private ServerManager _serverManager;
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
HeapAllocator allocator = new();
|
||||
|
||||
_sm = new SmApi();
|
||||
_sm.Initialize().AbortOnFailure();
|
||||
|
||||
_serverManager = new ServerManager(allocator, _sm, MaxPortsCount, _options, TotalMaxSessionsCount);
|
||||
|
||||
#pragma warning disable IDE0055 // Disable formatting
|
||||
_serverManager.RegisterObjectForServer(new ReceiverManager(), ServiceName.Encode("ins:r"), InsMaxSessionsCount); // 9.0.0+
|
||||
_serverManager.RegisterObjectForServer(new SenderManager(), ServiceName.Encode("ins:s"), InsMaxSessionsCount); // 9.0.0+
|
||||
#pragma warning restore IDE0055
|
||||
}
|
||||
|
||||
public void ServiceRequests()
|
||||
{
|
||||
_serverManager.ServiceRequests();
|
||||
}
|
||||
|
||||
public void Shutdown()
|
||||
{
|
||||
_serverManager.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
17
src/Ryujinx.Horizon/Ins/InsMain.cs
Normal file
17
src/Ryujinx.Horizon/Ins/InsMain.cs
Normal file
|
@ -0,0 +1,17 @@
|
|||
namespace Ryujinx.Horizon.Ins
|
||||
{
|
||||
class InsMain : IService
|
||||
{
|
||||
public static void Main(ServiceTable serviceTable)
|
||||
{
|
||||
InsIpcServer ipcServer = new();
|
||||
|
||||
ipcServer.Initialize();
|
||||
|
||||
serviceTable.SignalServiceReady();
|
||||
|
||||
ipcServer.ServiceRequests();
|
||||
ipcServer.Shutdown();
|
||||
}
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Ins/Ipc/ReceiverManager.cs
Normal file
8
src/Ryujinx.Horizon/Ins/Ipc/ReceiverManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Ins;
|
||||
|
||||
namespace Ryujinx.Horizon.Ins.Ipc
|
||||
{
|
||||
partial class ReceiverManager : IReceiverManager
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Ins/Ipc/SenderManager.cs
Normal file
8
src/Ryujinx.Horizon/Ins/Ipc/SenderManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Ins;
|
||||
|
||||
namespace Ryujinx.Horizon.Ins.Ipc
|
||||
{
|
||||
partial class SenderManager : ISenderManager
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Ovln/Ipc/ReceiverService.cs
Normal file
8
src/Ryujinx.Horizon/Ovln/Ipc/ReceiverService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Ovln;
|
||||
|
||||
namespace Ryujinx.Horizon.Ovln.Ipc
|
||||
{
|
||||
partial class ReceiverService : IReceiverService
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Ovln/Ipc/SenderService.cs
Normal file
8
src/Ryujinx.Horizon/Ovln/Ipc/SenderService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Ovln;
|
||||
|
||||
namespace Ryujinx.Horizon.Ovln.Ipc
|
||||
{
|
||||
partial class SenderService : ISenderService
|
||||
{
|
||||
}
|
||||
}
|
48
src/Ryujinx.Horizon/Ovln/OvlnIpcServer.cs
Normal file
48
src/Ryujinx.Horizon/Ovln/OvlnIpcServer.cs
Normal file
|
@ -0,0 +1,48 @@
|
|||
using Ryujinx.Horizon.Ovln.Ipc;
|
||||
using Ryujinx.Horizon.Sdk.Sf.Hipc;
|
||||
using Ryujinx.Horizon.Sdk.Sm;
|
||||
|
||||
namespace Ryujinx.Horizon.Ovln
|
||||
{
|
||||
class OvlnIpcServer
|
||||
{
|
||||
private const int OvlnRcvMaxSessionsCount = 2;
|
||||
private const int OvlnSndMaxSessionsCount = 20;
|
||||
private const int TotalMaxSessionsCount = OvlnRcvMaxSessionsCount + OvlnSndMaxSessionsCount;
|
||||
|
||||
private const int PointerBufferSize = 0;
|
||||
private const int MaxDomains = 21;
|
||||
private const int MaxDomainObjects = 60;
|
||||
private const int MaxPortsCount = 2;
|
||||
|
||||
private static readonly ManagerOptions _options = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false);
|
||||
|
||||
private SmApi _sm;
|
||||
private ServerManager _serverManager;
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
HeapAllocator allocator = new();
|
||||
|
||||
_sm = new SmApi();
|
||||
_sm.Initialize().AbortOnFailure();
|
||||
|
||||
_serverManager = new ServerManager(allocator, _sm, MaxPortsCount, _options, TotalMaxSessionsCount);
|
||||
|
||||
#pragma warning disable IDE0055 // Disable formatting
|
||||
_serverManager.RegisterObjectForServer(new ReceiverService(), ServiceName.Encode("ovln:rcv"), OvlnRcvMaxSessionsCount); // 8.0.0+
|
||||
_serverManager.RegisterObjectForServer(new SenderService(), ServiceName.Encode("ovln:snd"), OvlnSndMaxSessionsCount); // 8.0.0+
|
||||
#pragma warning restore IDE0055
|
||||
}
|
||||
|
||||
public void ServiceRequests()
|
||||
{
|
||||
_serverManager.ServiceRequests();
|
||||
}
|
||||
|
||||
public void Shutdown()
|
||||
{
|
||||
_serverManager.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
17
src/Ryujinx.Horizon/Ovln/OvlnMain.cs
Normal file
17
src/Ryujinx.Horizon/Ovln/OvlnMain.cs
Normal file
|
@ -0,0 +1,17 @@
|
|||
namespace Ryujinx.Horizon.Ovln
|
||||
{
|
||||
class OvlnMain : IService
|
||||
{
|
||||
public static void Main(ServiceTable serviceTable)
|
||||
{
|
||||
OvlnIpcServer ipcServer = new();
|
||||
|
||||
ipcServer.Initialize();
|
||||
|
||||
serviceTable.SignalServiceReady();
|
||||
|
||||
ipcServer.ServiceRequests();
|
||||
ipcServer.Shutdown();
|
||||
}
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Psc/Ipc/PmControl.cs
Normal file
8
src/Ryujinx.Horizon/Psc/Ipc/PmControl.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Psc;
|
||||
|
||||
namespace Ryujinx.Horizon.Psc.Ipc
|
||||
{
|
||||
partial class PmControl : IPmControl
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Psc/Ipc/PmService.cs
Normal file
8
src/Ryujinx.Horizon/Psc/Ipc/PmService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Psc;
|
||||
|
||||
namespace Ryujinx.Horizon.Psc.Ipc
|
||||
{
|
||||
partial class PmService : IPmService
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Psc/Ipc/PmStateLock.cs
Normal file
8
src/Ryujinx.Horizon/Psc/Ipc/PmStateLock.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Psc;
|
||||
|
||||
namespace Ryujinx.Horizon.Psc.Ipc
|
||||
{
|
||||
partial class PmStateLock : IPmStateLock
|
||||
{
|
||||
}
|
||||
}
|
50
src/Ryujinx.Horizon/Psc/PscIpcServer.cs
Normal file
50
src/Ryujinx.Horizon/Psc/PscIpcServer.cs
Normal file
|
@ -0,0 +1,50 @@
|
|||
using Ryujinx.Horizon.Psc.Ipc;
|
||||
using Ryujinx.Horizon.Sdk.Sf.Hipc;
|
||||
using Ryujinx.Horizon.Sdk.Sm;
|
||||
|
||||
namespace Ryujinx.Horizon.Psc
|
||||
{
|
||||
class PscIpcServer
|
||||
{
|
||||
private const int PscCMaxSessionsCount = 1;
|
||||
private const int PscMMaxSessionsCount = 50;
|
||||
private const int PscLMaxSessionsCount = 5;
|
||||
private const int TotalMaxSessionsCount = PscCMaxSessionsCount + PscMMaxSessionsCount + PscLMaxSessionsCount;
|
||||
|
||||
private const int PointerBufferSize = 0;
|
||||
private const int MaxDomains = 0;
|
||||
private const int MaxDomainObjects = 0;
|
||||
private const int MaxPortsCount = 3;
|
||||
|
||||
private static readonly ManagerOptions _options = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false);
|
||||
|
||||
private SmApi _sm;
|
||||
private ServerManager _serverManager;
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
HeapAllocator allocator = new();
|
||||
|
||||
_sm = new SmApi();
|
||||
_sm.Initialize().AbortOnFailure();
|
||||
|
||||
_serverManager = new ServerManager(allocator, _sm, MaxPortsCount, _options, TotalMaxSessionsCount);
|
||||
|
||||
#pragma warning disable IDE0055 // Disable formatting
|
||||
_serverManager.RegisterObjectForServer(new PmControl(), ServiceName.Encode("psc:c"), PscCMaxSessionsCount);
|
||||
_serverManager.RegisterObjectForServer(new PmService(), ServiceName.Encode("psc:m"), PscMMaxSessionsCount);
|
||||
_serverManager.RegisterObjectForServer(new PmStateLock(), ServiceName.Encode("psc:l"), PscLMaxSessionsCount); // 9.0.0+
|
||||
#pragma warning restore IDE0055
|
||||
}
|
||||
|
||||
public void ServiceRequests()
|
||||
{
|
||||
_serverManager.ServiceRequests();
|
||||
}
|
||||
|
||||
public void Shutdown()
|
||||
{
|
||||
_serverManager.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
17
src/Ryujinx.Horizon/Psc/PscMain.cs
Normal file
17
src/Ryujinx.Horizon/Psc/PscMain.cs
Normal file
|
@ -0,0 +1,17 @@
|
|||
namespace Ryujinx.Horizon.Psc
|
||||
{
|
||||
class PscMain : IService
|
||||
{
|
||||
public static void Main(ServiceTable serviceTable)
|
||||
{
|
||||
PscIpcServer ipcServer = new();
|
||||
|
||||
ipcServer.Initialize();
|
||||
|
||||
serviceTable.SignalServiceReady();
|
||||
|
||||
ipcServer.ServiceRequests();
|
||||
ipcServer.Shutdown();
|
||||
}
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Hshl/IManager.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Hshl/IManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Hshl
|
||||
{
|
||||
interface IManager : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Hshl/ISetterManager.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Hshl/ISetterManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Hshl
|
||||
{
|
||||
interface ISetterManager : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Ins/IReceiverManager.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Ins/IReceiverManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Ins
|
||||
{
|
||||
interface IReceiverManager : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Ins/ISenderManager.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Ins/ISenderManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Ins
|
||||
{
|
||||
interface ISenderManager : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Ovln/IReceiverService.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Ovln/IReceiverService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Ovln
|
||||
{
|
||||
interface IReceiverService : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Ovln/ISenderService.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Ovln/ISenderService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Ovln
|
||||
{
|
||||
interface ISenderService : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Psc/IPmControl.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Psc/IPmControl.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Psc
|
||||
{
|
||||
interface IPmControl : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Psc/IPmService.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Psc/IPmService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Psc
|
||||
{
|
||||
interface IPmService : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Psc/IPmStateLock.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Psc/IPmStateLock.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Psc
|
||||
{
|
||||
interface IPmStateLock : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Srepo/ISrepoService.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Srepo/ISrepoService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Srepo
|
||||
{
|
||||
interface ISrepoService : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Usb/IClientRootSession.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Usb/IClientRootSession.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Usb
|
||||
{
|
||||
interface IClientRootSession : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Usb/IDsRootSession.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Usb/IDsRootSession.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Usb
|
||||
{
|
||||
interface IDsRootSession : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Usb/IPdCradleManager.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Usb/IPdCradleManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Usb
|
||||
{
|
||||
interface IPdCradleManager : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Usb/IPdManager.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Usb/IPdManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Usb
|
||||
{
|
||||
interface IPdManager : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Usb/IPdManufactureManager.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Usb/IPdManufactureManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Usb
|
||||
{
|
||||
interface IPdManufactureManager : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Usb/IPmObserverService.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Usb/IPmObserverService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Usb
|
||||
{
|
||||
interface IPmObserverService : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Usb/IPmService.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Usb/IPmService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Usb
|
||||
{
|
||||
interface IPmService : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Sdk/Usb/IQdbManager.cs
Normal file
8
src/Ryujinx.Horizon/Sdk/Usb/IQdbManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf;
|
||||
|
||||
namespace Ryujinx.Horizon.Sdk.Usb
|
||||
{
|
||||
interface IQdbManager : IServiceObject
|
||||
{
|
||||
}
|
||||
}
|
|
@ -1,9 +1,15 @@
|
|||
using Ryujinx.Horizon.Bcat;
|
||||
using Ryujinx.Horizon.Hshl;
|
||||
using Ryujinx.Horizon.Ins;
|
||||
using Ryujinx.Horizon.Lbl;
|
||||
using Ryujinx.Horizon.LogManager;
|
||||
using Ryujinx.Horizon.MmNv;
|
||||
using Ryujinx.Horizon.Ngc;
|
||||
using Ryujinx.Horizon.Ovln;
|
||||
using Ryujinx.Horizon.Prepo;
|
||||
using Ryujinx.Horizon.Psc;
|
||||
using Ryujinx.Horizon.Srepo;
|
||||
using Ryujinx.Horizon.Usb;
|
||||
using Ryujinx.Horizon.Wlan;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
@ -27,12 +33,18 @@ namespace Ryujinx.Horizon
|
|||
}
|
||||
|
||||
RegisterService<BcatMain>();
|
||||
RegisterService<HshlMain>();
|
||||
RegisterService<InsMain>();
|
||||
RegisterService<LblMain>();
|
||||
RegisterService<LmMain>();
|
||||
RegisterService<MmNvMain>();
|
||||
RegisterService<PrepoMain>();
|
||||
RegisterService<WlanMain>();
|
||||
RegisterService<NgcMain>();
|
||||
RegisterService<OvlnMain>();
|
||||
RegisterService<PrepoMain>();
|
||||
RegisterService<PscMain>();
|
||||
RegisterService<SrepoMain>();
|
||||
RegisterService<UsbMain>();
|
||||
RegisterService<WlanMain>();
|
||||
|
||||
_totalServices = entries.Count;
|
||||
|
||||
|
|
8
src/Ryujinx.Horizon/Srepo/Ipc/SrepoService.cs
Normal file
8
src/Ryujinx.Horizon/Srepo/Ipc/SrepoService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Srepo;
|
||||
|
||||
namespace Ryujinx.Horizon.Srepo.Ipc
|
||||
{
|
||||
partial class SrepoService : ISrepoService
|
||||
{
|
||||
}
|
||||
}
|
46
src/Ryujinx.Horizon/Srepo/SrepoIpcServer.cs
Normal file
46
src/Ryujinx.Horizon/Srepo/SrepoIpcServer.cs
Normal file
|
@ -0,0 +1,46 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf.Hipc;
|
||||
using Ryujinx.Horizon.Sdk.Sm;
|
||||
using Ryujinx.Horizon.Srepo.Ipc;
|
||||
|
||||
namespace Ryujinx.Horizon.Srepo
|
||||
{
|
||||
class SrepoIpcServer
|
||||
{
|
||||
private const int SrepoAMaxSessionsCount = 2;
|
||||
private const int SrepoUMaxSessionsCount = 30;
|
||||
private const int TotalMaxSessionsCount = SrepoAMaxSessionsCount + SrepoUMaxSessionsCount;
|
||||
|
||||
private const int PointerBufferSize = 0x80;
|
||||
private const int MaxDomains = 32;
|
||||
private const int MaxDomainObjects = 192;
|
||||
private const int MaxPortsCount = 2;
|
||||
|
||||
private static readonly ManagerOptions _options = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false);
|
||||
|
||||
private SmApi _sm;
|
||||
private ServerManager _serverManager;
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
HeapAllocator allocator = new();
|
||||
|
||||
_sm = new SmApi();
|
||||
_sm.Initialize().AbortOnFailure();
|
||||
|
||||
_serverManager = new ServerManager(allocator, _sm, MaxPortsCount, _options, TotalMaxSessionsCount);
|
||||
|
||||
_serverManager.RegisterObjectForServer(new SrepoService(), ServiceName.Encode("srepo:a"), SrepoAMaxSessionsCount); // 5.0.0+
|
||||
_serverManager.RegisterObjectForServer(new SrepoService(), ServiceName.Encode("srepo:u"), SrepoUMaxSessionsCount); // 5.0.0+
|
||||
}
|
||||
|
||||
public void ServiceRequests()
|
||||
{
|
||||
_serverManager.ServiceRequests();
|
||||
}
|
||||
|
||||
public void Shutdown()
|
||||
{
|
||||
_serverManager.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
17
src/Ryujinx.Horizon/Srepo/SrepoMain.cs
Normal file
17
src/Ryujinx.Horizon/Srepo/SrepoMain.cs
Normal file
|
@ -0,0 +1,17 @@
|
|||
namespace Ryujinx.Horizon.Srepo
|
||||
{
|
||||
class SrepoMain : IService
|
||||
{
|
||||
public static void Main(ServiceTable serviceTable)
|
||||
{
|
||||
SrepoIpcServer ipcServer = new();
|
||||
|
||||
ipcServer.Initialize();
|
||||
|
||||
serviceTable.SignalServiceReady();
|
||||
|
||||
ipcServer.ServiceRequests();
|
||||
ipcServer.Shutdown();
|
||||
}
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Usb/Ipc/ClientRootSession.cs
Normal file
8
src/Ryujinx.Horizon/Usb/Ipc/ClientRootSession.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Usb;
|
||||
|
||||
namespace Ryujinx.Horizon.Usb.Ipc
|
||||
{
|
||||
partial class ClientRootSession : IClientRootSession
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Usb/Ipc/DsRootSession.cs
Normal file
8
src/Ryujinx.Horizon/Usb/Ipc/DsRootSession.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Usb;
|
||||
|
||||
namespace Ryujinx.Horizon.Usb.Ipc
|
||||
{
|
||||
partial class DsRootSession : IDsRootSession
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Usb/Ipc/PdCradleManager.cs
Normal file
8
src/Ryujinx.Horizon/Usb/Ipc/PdCradleManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Usb;
|
||||
|
||||
namespace Ryujinx.Horizon.Usb.Ipc
|
||||
{
|
||||
partial class PdCradleManager : IPdCradleManager
|
||||
{
|
||||
}
|
||||
}
|
9
src/Ryujinx.Horizon/Usb/Ipc/PdManager.cs
Normal file
9
src/Ryujinx.Horizon/Usb/Ipc/PdManager.cs
Normal file
|
@ -0,0 +1,9 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf.Hipc;
|
||||
using Ryujinx.Horizon.Sdk.Usb;
|
||||
|
||||
namespace Ryujinx.Horizon.Usb.Ipc
|
||||
{
|
||||
partial class PdManager : IPdManager
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Usb/Ipc/PdManufactureManager.cs
Normal file
8
src/Ryujinx.Horizon/Usb/Ipc/PdManufactureManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Usb;
|
||||
|
||||
namespace Ryujinx.Horizon.Usb.Ipc
|
||||
{
|
||||
partial class PdManufactureManager : IPdManufactureManager
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Usb/Ipc/PmObserverService.cs
Normal file
8
src/Ryujinx.Horizon/Usb/Ipc/PmObserverService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Usb;
|
||||
|
||||
namespace Ryujinx.Horizon.Usb.Ipc
|
||||
{
|
||||
partial class PmObserverService : IPmObserverService
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Usb/Ipc/PmService.cs
Normal file
8
src/Ryujinx.Horizon/Usb/Ipc/PmService.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Usb;
|
||||
|
||||
namespace Ryujinx.Horizon.Usb.Ipc
|
||||
{
|
||||
partial class PmService : IPmService
|
||||
{
|
||||
}
|
||||
}
|
8
src/Ryujinx.Horizon/Usb/Ipc/QdbManager.cs
Normal file
8
src/Ryujinx.Horizon/Usb/Ipc/QdbManager.cs
Normal file
|
@ -0,0 +1,8 @@
|
|||
using Ryujinx.Horizon.Sdk.Usb;
|
||||
|
||||
namespace Ryujinx.Horizon.Usb.Ipc
|
||||
{
|
||||
partial class QdbManager : IQdbManager
|
||||
{
|
||||
}
|
||||
}
|
71
src/Ryujinx.Horizon/Usb/UsbIpcServer.cs
Normal file
71
src/Ryujinx.Horizon/Usb/UsbIpcServer.cs
Normal file
|
@ -0,0 +1,71 @@
|
|||
using Ryujinx.Horizon.Sdk.Sf.Hipc;
|
||||
using Ryujinx.Horizon.Sdk.Sm;
|
||||
using Ryujinx.Horizon.Usb.Ipc;
|
||||
|
||||
namespace Ryujinx.Horizon.Usb
|
||||
{
|
||||
class UsbIpcServer
|
||||
{
|
||||
private const int UsbDsMaxSessionsCount = 4;
|
||||
private const int UsbHsMaxSessionsCount = 20;
|
||||
private const int UsbHsAMaxSessionsCount = 3;
|
||||
private const int UsbObsvMaxSessionsCount = 2;
|
||||
private const int UsbPdMaxSessionsCount = 6;
|
||||
private const int UsbPdCMaxSessionsCount = 4;
|
||||
private const int UsbPdMMaxSessionsCount = 1;
|
||||
private const int UsbPmMaxSessionsCount = 5;
|
||||
private const int UsbQdbMaxSessionsCount = 4;
|
||||
private const int TotalMaxSessionsCount =
|
||||
UsbDsMaxSessionsCount +
|
||||
UsbHsMaxSessionsCount +
|
||||
UsbHsAMaxSessionsCount +
|
||||
UsbObsvMaxSessionsCount +
|
||||
UsbPdMaxSessionsCount +
|
||||
UsbPdCMaxSessionsCount +
|
||||
UsbPdMMaxSessionsCount +
|
||||
UsbPmMaxSessionsCount +
|
||||
UsbQdbMaxSessionsCount;
|
||||
|
||||
private const int PointerBufferSize = 0;
|
||||
private const int MaxDomains = 0;
|
||||
private const int MaxDomainObjects = 0;
|
||||
private const int MaxPortsCount = 9;
|
||||
|
||||
private static readonly ManagerOptions _options = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false);
|
||||
|
||||
private SmApi _sm;
|
||||
private ServerManager _serverManager;
|
||||
|
||||
public void Initialize()
|
||||
{
|
||||
HeapAllocator allocator = new();
|
||||
|
||||
_sm = new SmApi();
|
||||
_sm.Initialize().AbortOnFailure();
|
||||
|
||||
_serverManager = new ServerManager(allocator, _sm, MaxPortsCount, _options, TotalMaxSessionsCount);
|
||||
|
||||
#pragma warning disable IDE0055 // Disable formatting
|
||||
_serverManager.RegisterObjectForServer(new DsRootSession(), ServiceName.Encode("usb:ds"), UsbDsMaxSessionsCount);
|
||||
_serverManager.RegisterObjectForServer(new ClientRootSession(), ServiceName.Encode("usb:hs"), UsbHsMaxSessionsCount);
|
||||
_serverManager.RegisterObjectForServer(new ClientRootSession(), ServiceName.Encode("usb:hs:a"), UsbHsAMaxSessionsCount); // 7.0.0+
|
||||
_serverManager.RegisterObjectForServer(new PmObserverService(), ServiceName.Encode("usb:obsv"), UsbObsvMaxSessionsCount); // 8.0.0+
|
||||
_serverManager.RegisterObjectForServer(new PdManager(), ServiceName.Encode("usb:pd"), UsbPdMaxSessionsCount);
|
||||
_serverManager.RegisterObjectForServer(new PdCradleManager(), ServiceName.Encode("usb:pd:c"), UsbPdCMaxSessionsCount);
|
||||
_serverManager.RegisterObjectForServer(new PdManufactureManager(), ServiceName.Encode("usb:pd:m"), UsbPdMMaxSessionsCount); // 1.0.0
|
||||
_serverManager.RegisterObjectForServer(new PmService(), ServiceName.Encode("usb:pm"), UsbPmMaxSessionsCount);
|
||||
_serverManager.RegisterObjectForServer(new QdbManager(), ServiceName.Encode("usb:qdb"), UsbQdbMaxSessionsCount); // 7.0.0+
|
||||
#pragma warning restore IDE0055
|
||||
}
|
||||
|
||||
public void ServiceRequests()
|
||||
{
|
||||
_serverManager.ServiceRequests();
|
||||
}
|
||||
|
||||
public void Shutdown()
|
||||
{
|
||||
_serverManager.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
17
src/Ryujinx.Horizon/Usb/UsbMain.cs
Normal file
17
src/Ryujinx.Horizon/Usb/UsbMain.cs
Normal file
|
@ -0,0 +1,17 @@
|
|||
namespace Ryujinx.Horizon.Usb
|
||||
{
|
||||
class UsbMain : IService
|
||||
{
|
||||
public static void Main(ServiceTable serviceTable)
|
||||
{
|
||||
UsbIpcServer ipcServer = new();
|
||||
|
||||
ipcServer.Initialize();
|
||||
|
||||
serviceTable.SignalServiceReady();
|
||||
|
||||
ipcServer.ServiceRequests();
|
||||
ipcServer.Shutdown();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue