UsbIpcServer.cs
1 using Ryujinx.Horizon.Sdk.Sf.Hipc; 2 using Ryujinx.Horizon.Sdk.Sm; 3 using Ryujinx.Horizon.Usb.Ipc; 4 5 namespace Ryujinx.Horizon.Usb 6 { 7 class UsbIpcServer 8 { 9 private const int UsbDsMaxSessionsCount = 4; 10 private const int UsbHsMaxSessionsCount = 20; 11 private const int UsbHsAMaxSessionsCount = 3; 12 private const int UsbObsvMaxSessionsCount = 2; 13 private const int UsbPdMaxSessionsCount = 6; 14 private const int UsbPdCMaxSessionsCount = 4; 15 private const int UsbPdMMaxSessionsCount = 1; 16 private const int UsbPmMaxSessionsCount = 5; 17 private const int UsbQdbMaxSessionsCount = 4; 18 private const int TotalMaxSessionsCount = 19 UsbDsMaxSessionsCount + 20 UsbHsMaxSessionsCount + 21 UsbHsAMaxSessionsCount + 22 UsbObsvMaxSessionsCount + 23 UsbPdMaxSessionsCount + 24 UsbPdCMaxSessionsCount + 25 UsbPdMMaxSessionsCount + 26 UsbPmMaxSessionsCount + 27 UsbQdbMaxSessionsCount; 28 29 private const int PointerBufferSize = 0; 30 private const int MaxDomains = 0; 31 private const int MaxDomainObjects = 0; 32 private const int MaxPortsCount = 9; 33 34 private static readonly ManagerOptions _options = new(PointerBufferSize, MaxDomains, MaxDomainObjects, false); 35 36 private SmApi _sm; 37 private ServerManager _serverManager; 38 39 public void Initialize() 40 { 41 HeapAllocator allocator = new(); 42 43 _sm = new SmApi(); 44 _sm.Initialize().AbortOnFailure(); 45 46 _serverManager = new ServerManager(allocator, _sm, MaxPortsCount, _options, TotalMaxSessionsCount); 47 48 #pragma warning disable IDE0055 // Disable formatting 49 _serverManager.RegisterObjectForServer(new DsRootSession(), ServiceName.Encode("usb:ds"), UsbDsMaxSessionsCount); 50 _serverManager.RegisterObjectForServer(new ClientRootSession(), ServiceName.Encode("usb:hs"), UsbHsMaxSessionsCount); 51 _serverManager.RegisterObjectForServer(new ClientRootSession(), ServiceName.Encode("usb:hs:a"), UsbHsAMaxSessionsCount); // 7.0.0+ 52 _serverManager.RegisterObjectForServer(new PmObserverService(), ServiceName.Encode("usb:obsv"), UsbObsvMaxSessionsCount); // 8.0.0+ 53 _serverManager.RegisterObjectForServer(new PdManager(), ServiceName.Encode("usb:pd"), UsbPdMaxSessionsCount); 54 _serverManager.RegisterObjectForServer(new PdCradleManager(), ServiceName.Encode("usb:pd:c"), UsbPdCMaxSessionsCount); 55 _serverManager.RegisterObjectForServer(new PdManufactureManager(), ServiceName.Encode("usb:pd:m"), UsbPdMMaxSessionsCount); // 1.0.0 56 _serverManager.RegisterObjectForServer(new PmService(), ServiceName.Encode("usb:pm"), UsbPmMaxSessionsCount); 57 _serverManager.RegisterObjectForServer(new QdbManager(), ServiceName.Encode("usb:qdb"), UsbQdbMaxSessionsCount); // 7.0.0+ 58 #pragma warning restore IDE0055 59 } 60 61 public void ServiceRequests() 62 { 63 _serverManager.ServiceRequests(); 64 } 65 66 public void Shutdown() 67 { 68 _serverManager.Dispose(); 69 _sm.Dispose(); 70 } 71 } 72 }