diff --git a/Ryujinx.Core/OsHle/Process.cs b/Ryujinx.Core/OsHle/Process.cs index cda921bec..0d1342e7c 100644 --- a/Ryujinx.Core/OsHle/Process.cs +++ b/Ryujinx.Core/OsHle/Process.cs @@ -354,11 +354,11 @@ namespace Ryujinx.Core.OsHle } } - ServiceNvDrv.Fds.DeleteProcess(this); + INvDrvServices.Fds.DeleteProcess(this); - ServiceNvDrv.NvMaps .DeleteProcess(this); - ServiceNvDrv.NvMapsById.DeleteProcess(this); - ServiceNvDrv.NvMapsFb .DeleteProcess(this); + INvDrvServices.NvMaps .DeleteProcess(this); + INvDrvServices.NvMapsById.DeleteProcess(this); + INvDrvServices.NvMapsFb .DeleteProcess(this); Scheduler.Dispose(); diff --git a/Ryujinx.Core/OsHle/Services/Acc/ServiceAcc.cs b/Ryujinx.Core/OsHle/Services/Acc/IAccountServiceForApplication.cs similarity index 92% rename from Ryujinx.Core/OsHle/Services/Acc/ServiceAcc.cs rename to Ryujinx.Core/OsHle/Services/Acc/IAccountServiceForApplication.cs index 59f4e47f0..b6b219ee8 100644 --- a/Ryujinx.Core/OsHle/Services/Acc/ServiceAcc.cs +++ b/Ryujinx.Core/OsHle/Services/Acc/IAccountServiceForApplication.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Acc { - class ServiceAcc : IpcService + class IAccountServiceForApplication : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceAcc() + public IAccountServiceForApplication() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Am/ServiceAppletOE.cs b/Ryujinx.Core/OsHle/Services/Am/IApplicationProxyService.cs similarity index 87% rename from Ryujinx.Core/OsHle/Services/Am/ServiceAppletOE.cs rename to Ryujinx.Core/OsHle/Services/Am/IApplicationProxyService.cs index 65cdad421..6e33a1de8 100644 --- a/Ryujinx.Core/OsHle/Services/Am/ServiceAppletOE.cs +++ b/Ryujinx.Core/OsHle/Services/Am/IApplicationProxyService.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Am { - class ServiceAppletOE : IpcService + class IApplicationProxyService : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceAppletOE() + public IApplicationProxyService() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Apm/ServiceApm.cs b/Ryujinx.Core/OsHle/Services/Apm/IManager.cs similarity index 90% rename from Ryujinx.Core/OsHle/Services/Apm/ServiceApm.cs rename to Ryujinx.Core/OsHle/Services/Apm/IManager.cs index fcd64a2fa..7320328e5 100644 --- a/Ryujinx.Core/OsHle/Services/Apm/ServiceApm.cs +++ b/Ryujinx.Core/OsHle/Services/Apm/IManager.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Apm { - class ServiceApm : IpcService + class IManager : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceApm() + public IManager() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Aud/IAudioDevice.cs b/Ryujinx.Core/OsHle/Services/Aud/IAudioDeviceService.cs similarity index 95% rename from Ryujinx.Core/OsHle/Services/Aud/IAudioDevice.cs rename to Ryujinx.Core/OsHle/Services/Aud/IAudioDeviceService.cs index 546c9ebab..655881929 100644 --- a/Ryujinx.Core/OsHle/Services/Aud/IAudioDevice.cs +++ b/Ryujinx.Core/OsHle/Services/Aud/IAudioDeviceService.cs @@ -5,13 +5,13 @@ using System.Text; namespace Ryujinx.Core.OsHle.Services.Aud { - class IAudioDevice : IpcService + class IAudioDeviceService : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public IAudioDevice() + public IAudioDeviceService() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Aud/IAudioRendererManager.cs b/Ryujinx.Core/OsHle/Services/Aud/IAudioRendererManager.cs index fcf084a96..07082da7c 100644 --- a/Ryujinx.Core/OsHle/Services/Aud/IAudioRendererManager.cs +++ b/Ryujinx.Core/OsHle/Services/Aud/IAudioRendererManager.cs @@ -51,7 +51,7 @@ namespace Ryujinx.Core.OsHle.Services.Aud { long UserId = Context.RequestData.ReadInt64(); - MakeObject(Context, new IAudioDevice()); + MakeObject(Context, new IAudioDeviceService()); return 0; } diff --git a/Ryujinx.Core/OsHle/Services/Bsd/BsdError.cs b/Ryujinx.Core/OsHle/Services/Bsd/BsdError.cs new file mode 100644 index 000000000..a1ac0433b --- /dev/null +++ b/Ryujinx.Core/OsHle/Services/Bsd/BsdError.cs @@ -0,0 +1,8 @@ +namespace Ryujinx.Core.OsHle.Services.Bsd +{ + //bsd_errno == (SocketException.ErrorCode - 10000) + public enum BsdError + { + Timeout = 60 + } +} \ No newline at end of file diff --git a/Ryujinx.Core/OsHle/Services/Bsd/BsdSocket.cs b/Ryujinx.Core/OsHle/Services/Bsd/BsdSocket.cs new file mode 100644 index 000000000..592b07d95 --- /dev/null +++ b/Ryujinx.Core/OsHle/Services/Bsd/BsdSocket.cs @@ -0,0 +1,18 @@ +using System.Net; +using System.Net.Sockets; + +namespace Ryujinx.Core.OsHle.Services.Bsd +{ + class BsdSocket + { + public int Family; + public int Type; + public int Protocol; + + public IPAddress IpAddress; + + public IPEndPoint RemoteEP; + + public Socket Handle; + } +} \ No newline at end of file diff --git a/Ryujinx.Core/OsHle/Services/Bsd/ServiceBsd.cs b/Ryujinx.Core/OsHle/Services/Bsd/IClient.cs similarity index 68% rename from Ryujinx.Core/OsHle/Services/Bsd/ServiceBsd.cs rename to Ryujinx.Core/OsHle/Services/Bsd/IClient.cs index 94d3370d1..cc4970269 100644 --- a/Ryujinx.Core/OsHle/Services/Bsd/ServiceBsd.cs +++ b/Ryujinx.Core/OsHle/Services/Bsd/IClient.cs @@ -1,7 +1,6 @@ using ChocolArm64.Memory; using Ryujinx.Core.OsHle.Ipc; using Ryujinx.Core.OsHle.Utilities; -using System; using System.Collections.Generic; using System.IO; using System.Net; @@ -10,56 +9,15 @@ using System.Threading.Tasks; namespace Ryujinx.Core.OsHle.Services.Bsd { - - //bsd_errno == (SocketException.ErrorCode - 10000) - //https://github.com/freebsd/freebsd/blob/master/sys/sys/errno.h - public enum BsdError - { - ENOTSOCK = 38, /* Socket operation on non-socket */ - EDESTADDRREQ = 39, /* Destination address required */ - EMSGSIZE = 40, /* Message too long */ - EPROTOTYPE = 41, /* Protocol wrong type for socket */ - ENOPROTOOPT = 42, /* Protocol not available */ - EPROTONOSUPPORT = 43, /* Protocol not supported */ - ESOCKTNOSUPPORT = 44, /* Socket type not supported */ - EOPNOTSUPP = 45, /* Operation not supported */ - EPFNOSUPPORT = 46, /* Protocol family not supported */ - EAFNOSUPPORT = 47, /* Address family not supported by protocol family */ - EADDRINUSE = 48, /* Address already in use */ - EADDRNOTAVAIL = 49, /* Can't assign requested address */ - ENETDOWN = 50, /* Network is down */ - ENETUNREACH = 51, /* Network is unreachable */ - ENETRESET = 52, /* Network dropped connection on reset */ - ECONNABORTED = 53, /* Software caused connection abort */ - ECONNRESET = 54, /* Connection reset by peer */ - ENOBUFS = 55, /* No buffer space available */ - EISCONN = 56, /* Socket is already connected */ - ENOTCONN = 57, /* Socket is not connected */ - ESHUTDOWN = 58, /* Can't send after socket shutdown */ - ETOOMANYREFS = 59, /* Too many references: can't splice */ - ETIMEDOUT = 60, /* Operation timed out */ - ECONNREFUSED = 61 /* Connection refused */ - } - - class SocketBsd - { - public int Family; - public int Type; - public int Protocol; - public IPAddress IpAddress; - public IPEndPoint RemoteEP; - public Socket Handle; - } - - class ServiceBsd : IpcService + class IClient : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - private List Sockets = new List(); + private List Sockets = new List(); - public ServiceBsd() + public IClient() { m_Commands = new Dictionary() { @@ -95,11 +53,6 @@ namespace Ryujinx.Core.OsHle.Services.Bsd } BsdBufferConfig; */ - long Pid = Context.RequestData.ReadInt64(); - long TransferMemorySize = Context.RequestData.ReadInt64(); - - // Two other args are unknown! - Context.ResponseData.Write(0); //Todo: Stub @@ -118,18 +71,18 @@ namespace Ryujinx.Core.OsHle.Services.Bsd //(u32 domain, u32 type, u32 protocol) -> (i32 ret, u32 bsd_errno) public long Socket(ServiceCtx Context) { - SocketBsd NewBSDSocket = new SocketBsd + BsdSocket NewBsdSocket = new BsdSocket { Family = Context.RequestData.ReadInt32(), Type = Context.RequestData.ReadInt32(), Protocol = Context.RequestData.ReadInt32() }; - Sockets.Add(NewBSDSocket); + Sockets.Add(NewBsdSocket); - Sockets[Sockets.Count - 1].Handle = new Socket((AddressFamily)Sockets[Sockets.Count - 1].Family, - (SocketType)Sockets[Sockets.Count - 1].Type, - (ProtocolType)Sockets[Sockets.Count - 1].Protocol); + NewBsdSocket.Handle = new Socket((AddressFamily)NewBsdSocket.Family, + (SocketType)NewBsdSocket.Type, + (ProtocolType)NewBsdSocket.Protocol); Context.ResponseData.Write(Sockets.Count - 1); Context.ResponseData.Write(0); @@ -149,12 +102,13 @@ namespace Ryujinx.Core.OsHle.Services.Bsd //https://github.com/TuxSH/ftpd/blob/switch_pr/source/ftp.c#L1634 //https://linux.die.net/man/2/poll - byte[] SentBuffer = AMemoryHelper.ReadBytes(Context.Memory, - Context.Request.SendBuff[0].Position, - Context.Request.SendBuff[0].Size); - int SocketId = Get32(SentBuffer, 0); - short RequestedEvents = (short)Get16(SentBuffer, 4); - short ReturnedEvents = (short)Get16(SentBuffer, 6); + byte[] SentBuffer = AMemoryHelper.ReadBytes(Context.Memory, + Context.Request.SendBuff[0].Position, + Context.Request.SendBuff[0].Size); + + int SocketId = Get32(SentBuffer, 0); + int RequestedEvents = Get16(SentBuffer, 4); + int ReturnedEvents = Get16(SentBuffer, 6); //Todo: Stub - Need to implemented the Type-22 buffer. @@ -167,18 +121,20 @@ namespace Ryujinx.Core.OsHle.Services.Bsd //(u32 socket, u32 flags) -> (i32 ret, u32 bsd_errno, buffer message) public long Recv(ServiceCtx Context) { + int SocketId = Context.RequestData.ReadInt32(); + int SocketFlags = Context.RequestData.ReadInt32(); + + byte[] ReceivedBuffer = new byte[Context.Request.ReceiveBuff[0].Size]; + try { - int SocketId = Context.RequestData.ReadInt32(); - int SocketFlags = Context.RequestData.ReadInt32(); - byte[] ReceivedBuffer = new byte[Context.Request.ReceiveBuff[0].Size]; - int ReadedBytes = Sockets[SocketId].Handle.Receive(ReceivedBuffer); + int BytesRead = Sockets[SocketId].Handle.Receive(ReceivedBuffer); //Logging.Debug("Received Buffer:" + Environment.NewLine + Logging.HexDump(ReceivedBuffer)); AMemoryHelper.WriteBytes(Context.Memory, Context.Request.ReceiveBuff[0].Position, ReceivedBuffer); - Context.ResponseData.Write(ReadedBytes); + Context.ResponseData.Write(BytesRead); Context.ResponseData.Write(0); } catch (SocketException Ex) @@ -193,15 +149,16 @@ namespace Ryujinx.Core.OsHle.Services.Bsd //(u32 socket, u32 flags, buffer) -> (i32 ret, u32 bsd_errno) public long Send(ServiceCtx Context) { - int SocketId = Context.RequestData.ReadInt32(); - int SocketFlags = Context.RequestData.ReadInt32(); - byte[] SentBuffer = AMemoryHelper.ReadBytes(Context.Memory, - Context.Request.SendBuff[0].Position, + int SocketId = Context.RequestData.ReadInt32(); + int SocketFlags = Context.RequestData.ReadInt32(); + + byte[] SentBuffer = AMemoryHelper.ReadBytes(Context.Memory, + Context.Request.SendBuff[0].Position, Context.Request.SendBuff[0].Size); try { - //Logging.Debug("Sended Buffer:" + Environment.NewLine + Logging.HexDump(SendedBuffer)); + //Logging.Debug("Sent Buffer:" + Environment.NewLine + Logging.HexDump(SentBuffer)); int BytesSent = Sockets[SocketId].Handle.Send(SentBuffer); @@ -220,13 +177,15 @@ namespace Ryujinx.Core.OsHle.Services.Bsd //(u32 socket, u32 flags, buffer, buffer) -> (i32 ret, u32 bsd_errno) public long SendTo(ServiceCtx Context) { - int SocketId = Context.RequestData.ReadInt32(); - int SocketFlags = Context.RequestData.ReadInt32(); - byte[] SentBuffer = AMemoryHelper.ReadBytes(Context.Memory, - Context.Request.SendBuff[0].Position, - Context.Request.SendBuff[0].Size); - byte[] AddressBuffer = AMemoryHelper.ReadBytes(Context.Memory, - Context.Request.SendBuff[1].Position, + int SocketId = Context.RequestData.ReadInt32(); + int SocketFlags = Context.RequestData.ReadInt32(); + + byte[] SentBuffer = AMemoryHelper.ReadBytes(Context.Memory, + Context.Request.SendBuff[0].Position, + Context.Request.SendBuff[0].Size); + + byte[] AddressBuffer = AMemoryHelper.ReadBytes(Context.Memory, + Context.Request.SendBuff[1].Position, Context.Request.SendBuff[1].Size); if (!Sockets[SocketId].Handle.Connected) @@ -246,7 +205,7 @@ namespace Ryujinx.Core.OsHle.Services.Bsd try { - //Logging.Debug("Sended Buffer:" + Environment.NewLine + Logging.HexDump(SendedBuffer)); + //Logging.Debug("Sent Buffer:" + Environment.NewLine + Logging.HexDump(SentBuffer)); int BytesSent = Sockets[SocketId].Handle.Send(SentBuffer); @@ -265,12 +224,13 @@ namespace Ryujinx.Core.OsHle.Services.Bsd //(u32 socket) -> (i32 ret, u32 bsd_errno, u32 addrlen, buffer addr) public long Accept(ServiceCtx Context) { - int SocketId = Context.RequestData.ReadInt32(); + int SocketId = Context.RequestData.ReadInt32(); + long AddrBufferPtr = Context.Request.ReceiveBuff[0].Position; Socket HandleAccept = null; - var TimeOut = Task.Factory.StartNew(() => + Task TimeOut = Task.Factory.StartNew(() => { try { @@ -287,40 +247,38 @@ namespace Ryujinx.Core.OsHle.Services.Bsd if (HandleAccept != null) { - SocketBsd NewBSDSocket = new SocketBsd + BsdSocket NewBsdSocket = new BsdSocket { IpAddress = ((IPEndPoint)Sockets[SocketId].Handle.LocalEndPoint).Address, RemoteEP = ((IPEndPoint)Sockets[SocketId].Handle.LocalEndPoint), Handle = HandleAccept }; - Sockets.Add(NewBSDSocket); + Sockets.Add(NewBsdSocket); using (MemoryStream MS = new MemoryStream()) { BinaryWriter Writer = new BinaryWriter(MS); Writer.Write((byte)0); - Writer.Write((byte)Sockets[Sockets.Count - 1].Handle.AddressFamily); - Writer.Write((Int16)((IPEndPoint)Sockets[Sockets.Count - 1].Handle.LocalEndPoint).Port); - string[] IpAdress = Sockets[Sockets.Count - 1].IpAddress.ToString().Split('.'); - Writer.Write(byte.Parse(IpAdress[0])); - Writer.Write(byte.Parse(IpAdress[1])); - Writer.Write(byte.Parse(IpAdress[2])); - Writer.Write(byte.Parse(IpAdress[3])); + Writer.Write((byte)NewBsdSocket.Handle.AddressFamily); - AMemoryHelper.WriteBytes(Context.Memory, AddrBufferPtr, MS.ToArray()); + Writer.Write((short)((IPEndPoint)NewBsdSocket.Handle.LocalEndPoint).Port); + + byte[] IpAdress = NewBsdSocket.IpAddress.GetAddressBytes(); + + AMemoryHelper.WriteBytes(Context.Memory, AddrBufferPtr, IpAdress); Context.ResponseData.Write(Sockets.Count - 1); Context.ResponseData.Write(0); - Context.ResponseData.Write(MS.Length); + Context.ResponseData.Write(IpAdress.Length); } } else { Context.ResponseData.Write(-1); - Context.ResponseData.Write((int)BsdError.ETIMEDOUT); + Context.ResponseData.Write((int)BsdError.Timeout); } return 0; @@ -331,8 +289,8 @@ namespace Ryujinx.Core.OsHle.Services.Bsd { int SocketId = Context.RequestData.ReadInt32(); - byte[] AddressBuffer = AMemoryHelper.ReadBytes(Context.Memory, - Context.Request.SendBuff[0].Position, + byte[] AddressBuffer = AMemoryHelper.ReadBytes(Context.Memory, + Context.Request.SendBuff[0].Position, Context.Request.SendBuff[0].Size); try @@ -356,8 +314,8 @@ namespace Ryujinx.Core.OsHle.Services.Bsd { int SocketId = Context.RequestData.ReadInt32(); - byte[] AddressBuffer = AMemoryHelper.ReadBytes(Context.Memory, - Context.Request.SendBuff[0].Position, + byte[] AddressBuffer = AMemoryHelper.ReadBytes(Context.Memory, + Context.Request.SendBuff[0].Position, Context.Request.SendBuff[0].Size); try @@ -404,19 +362,20 @@ namespace Ryujinx.Core.OsHle.Services.Bsd //(u32 socket, u32 level, u32 option_name, buffer) -> (i32 ret, u32 bsd_errno) public long SetSockOpt(ServiceCtx Context) { - int SocketId = Context.RequestData.ReadInt32(); - int SocketLevel = Context.RequestData.ReadInt32(); - int SocketOptionName = Context.RequestData.ReadInt32(); + int SocketId = Context.RequestData.ReadInt32(); - byte[] SocketOptionValue = AMemoryHelper.ReadBytes(Context.Memory, - Context.Request.PtrBuff[0].Position, + SocketOptionLevel SocketLevel = (SocketOptionLevel)Context.RequestData.ReadInt32(); + SocketOptionName SocketOptionName = (SocketOptionName)Context.RequestData.ReadInt32(); + + byte[] SocketOptionValue = AMemoryHelper.ReadBytes(Context.Memory, + Context.Request.PtrBuff[0].Position, Context.Request.PtrBuff[0].Size); + int OptionValue = Get32(SocketOptionValue, 0); + try { - Sockets[SocketId].Handle.SetSocketOption((SocketOptionLevel)SocketLevel, - (SocketOptionName)SocketOptionName, - Get32(SocketOptionValue, 0)); + Sockets[SocketId].Handle.SetSocketOption(SocketLevel, SocketOptionName, OptionValue); Context.ResponseData.Write(0); Context.ResponseData.Write(0); @@ -461,10 +420,11 @@ namespace Ryujinx.Core.OsHle.Services.Bsd int Size = Reader.ReadByte(); int Family = Reader.ReadByte(); int Port = EndianSwap.Swap16(Reader.ReadInt16()); - string IpAddress = Reader.ReadByte().ToString() + - "." + Reader.ReadByte().ToString() + - "." + Reader.ReadByte().ToString() + - "." + Reader.ReadByte().ToString(); + + string IpAddress = Reader.ReadByte().ToString() + "." + + Reader.ReadByte().ToString() + "." + + Reader.ReadByte().ToString() + "." + + Reader.ReadByte().ToString(); Logging.Debug($"Try to connect to {IpAddress}:{Port}"); diff --git a/Ryujinx.Core/OsHle/Services/Friend/ServiceFriend.cs b/Ryujinx.Core/OsHle/Services/Friend/IServiceCreator.cs similarity index 89% rename from Ryujinx.Core/OsHle/Services/Friend/ServiceFriend.cs rename to Ryujinx.Core/OsHle/Services/Friend/IServiceCreator.cs index 1b87d22b6..2c66d9658 100644 --- a/Ryujinx.Core/OsHle/Services/Friend/ServiceFriend.cs +++ b/Ryujinx.Core/OsHle/Services/Friend/IServiceCreator.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Friend { - class ServiceFriend : IpcService + class IServiceCreator : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceFriend() + public IServiceCreator() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/FspSrv/ServiceFspSrv.cs b/Ryujinx.Core/OsHle/Services/FspSrv/IFileSystemProxy.cs similarity index 95% rename from Ryujinx.Core/OsHle/Services/FspSrv/ServiceFspSrv.cs rename to Ryujinx.Core/OsHle/Services/FspSrv/IFileSystemProxy.cs index 5f0686687..3afee1a16 100644 --- a/Ryujinx.Core/OsHle/Services/FspSrv/ServiceFspSrv.cs +++ b/Ryujinx.Core/OsHle/Services/FspSrv/IFileSystemProxy.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.FspSrv { - class ServiceFspSrv : IpcService + class IFileSystemProxy : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceFspSrv() + public IFileSystemProxy() { m_Commands = new Dictionary() { @@ -60,6 +60,6 @@ namespace Ryujinx.Core.OsHle.Services.FspSrv Context.ResponseData.Write(0); return 0; - } + } } } \ No newline at end of file diff --git a/Ryujinx.Core/OsHle/Services/Hid/ServiceHid.cs b/Ryujinx.Core/OsHle/Services/Hid/IHidServer.cs similarity index 98% rename from Ryujinx.Core/OsHle/Services/Hid/ServiceHid.cs rename to Ryujinx.Core/OsHle/Services/Hid/IHidServer.cs index 9226cfdd1..f03b25dd7 100644 --- a/Ryujinx.Core/OsHle/Services/Hid/ServiceHid.cs +++ b/Ryujinx.Core/OsHle/Services/Hid/IHidServer.cs @@ -4,13 +4,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Hid { - class ServiceHid : IpcService + class IHidServer : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceHid() + public IHidServer() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Lm/ServiceLm.cs b/Ryujinx.Core/OsHle/Services/Lm/ILogService.cs similarity index 89% rename from Ryujinx.Core/OsHle/Services/Lm/ServiceLm.cs rename to Ryujinx.Core/OsHle/Services/Lm/ILogService.cs index f1c2204e3..3315cf4cd 100644 --- a/Ryujinx.Core/OsHle/Services/Lm/ServiceLm.cs +++ b/Ryujinx.Core/OsHle/Services/Lm/ILogService.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Lm { - class ServiceLm : IpcService + class ILogService : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceLm() + public ILogService() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Nifm/ServiceNifm.cs b/Ryujinx.Core/OsHle/Services/Nifm/IStaticService.cs similarity index 89% rename from Ryujinx.Core/OsHle/Services/Nifm/ServiceNifm.cs rename to Ryujinx.Core/OsHle/Services/Nifm/IStaticService.cs index 7e5ecacd5..2129ce43a 100644 --- a/Ryujinx.Core/OsHle/Services/Nifm/ServiceNifm.cs +++ b/Ryujinx.Core/OsHle/Services/Nifm/IStaticService.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Nifm { - class ServiceNifm : IpcService + class IStaticService : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceNifm() + public IStaticService() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Ns/ServiceNs.cs b/Ryujinx.Core/OsHle/Services/Ns/IAddOnContentManager.cs similarity index 91% rename from Ryujinx.Core/OsHle/Services/Ns/ServiceNs.cs rename to Ryujinx.Core/OsHle/Services/Ns/IAddOnContentManager.cs index 5e00a0f6c..57fea0772 100644 --- a/Ryujinx.Core/OsHle/Services/Ns/ServiceNs.cs +++ b/Ryujinx.Core/OsHle/Services/Ns/IAddOnContentManager.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Ns { - class ServiceNs : IpcService + class IAddOnContentManager : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceNs() + public IAddOnContentManager() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Nv/ServiceNvDrv.cs b/Ryujinx.Core/OsHle/Services/Nv/INvDrvServices.cs similarity index 99% rename from Ryujinx.Core/OsHle/Services/Nv/ServiceNvDrv.cs rename to Ryujinx.Core/OsHle/Services/Nv/INvDrvServices.cs index e314169b2..8568e8f29 100644 --- a/Ryujinx.Core/OsHle/Services/Nv/ServiceNvDrv.cs +++ b/Ryujinx.Core/OsHle/Services/Nv/INvDrvServices.cs @@ -9,7 +9,7 @@ using System.IO; namespace Ryujinx.Core.OsHle.Services.Nv { - class ServiceNvDrv : IpcService, IDisposable + class INvDrvServices : IpcService, IDisposable { private delegate long ServiceProcessIoctl(ServiceCtx Context); @@ -27,7 +27,7 @@ namespace Ryujinx.Core.OsHle.Services.Nv private KEvent Event; - public ServiceNvDrv() + public INvDrvServices() { m_Commands = new Dictionary() { @@ -74,7 +74,7 @@ namespace Ryujinx.Core.OsHle.Services.Nv Event = new KEvent(); } - static ServiceNvDrv() + static INvDrvServices() { Fds = new GlobalStateTable(); diff --git a/Ryujinx.Core/OsHle/Services/Pctl/ServicePctl.cs b/Ryujinx.Core/OsHle/Services/Pctl/IParentalControlServiceFactory.cs similarity index 85% rename from Ryujinx.Core/OsHle/Services/Pctl/ServicePctl.cs rename to Ryujinx.Core/OsHle/Services/Pctl/IParentalControlServiceFactory.cs index 0eb4cb87d..5421f1655 100644 --- a/Ryujinx.Core/OsHle/Services/Pctl/ServicePctl.cs +++ b/Ryujinx.Core/OsHle/Services/Pctl/IParentalControlServiceFactory.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Pctl { - class ServicePctl : IpcService + class IParentalControlServiceFactory : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServicePctl() + public IParentalControlServiceFactory() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Pl/ServicePl.cs b/Ryujinx.Core/OsHle/Services/Pl/ISharedFontManager.cs similarity index 95% rename from Ryujinx.Core/OsHle/Services/Pl/ServicePl.cs rename to Ryujinx.Core/OsHle/Services/Pl/ISharedFontManager.cs index 8deaa5f4a..2872577f0 100644 --- a/Ryujinx.Core/OsHle/Services/Pl/ServicePl.cs +++ b/Ryujinx.Core/OsHle/Services/Pl/ISharedFontManager.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Pl { - class ServicePl : IpcService + class ISharedFontManager : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServicePl() + public ISharedFontManager() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/ServiceFactory.cs b/Ryujinx.Core/OsHle/Services/ServiceFactory.cs index 427b239b1..76adcfa54 100644 --- a/Ryujinx.Core/OsHle/Services/ServiceFactory.cs +++ b/Ryujinx.Core/OsHle/Services/ServiceFactory.cs @@ -7,7 +7,6 @@ using Ryujinx.Core.OsHle.Services.Friend; using Ryujinx.Core.OsHle.Services.FspSrv; using Ryujinx.Core.OsHle.Services.Hid; using Ryujinx.Core.OsHle.Services.Lm; -using Ryujinx.Core.OsHle.Services.Nifm; using Ryujinx.Core.OsHle.Services.Ns; using Ryujinx.Core.OsHle.Services.Nv; using Ryujinx.Core.OsHle.Services.Pctl; @@ -16,7 +15,6 @@ using Ryujinx.Core.OsHle.Services.Set; using Ryujinx.Core.OsHle.Services.Sfdnsres; using Ryujinx.Core.OsHle.Services.Sm; using Ryujinx.Core.OsHle.Services.Ssl; -using Ryujinx.Core.OsHle.Services.Time; using Ryujinx.Core.OsHle.Services.Vi; using System; @@ -29,19 +27,19 @@ namespace Ryujinx.Core.OsHle.Services switch (Name) { case "acc:u0": - return new ServiceAcc(); + return new IAccountServiceForApplication(); case "aoc:u": - return new ServiceNs(); + return new IAddOnContentManager(); case "apm": - return new ServiceApm(); + return new IManager(); case "apm:p": - return new ServiceApm(); + return new IManager(); case "appletOE": - return new ServiceAppletOE(); + return new IApplicationProxyService(); case "audout:u": return new IAudioOutManager(); @@ -50,67 +48,67 @@ namespace Ryujinx.Core.OsHle.Services return new IAudioRendererManager(); case "bsd:s": - return new ServiceBsd(); + return new IClient(); case "bsd:u": - return new ServiceBsd(); + return new IClient(); case "friend:a": - return new ServiceFriend(); + return new IServiceCreator(); case "fsp-srv": - return new ServiceFspSrv(); + return new IFileSystemProxy(); case "hid": - return new ServiceHid(); + return new IHidServer(); case "lm": - return new ServiceLm(); + return new ILogService(); case "nifm:u": - return new ServiceNifm(); + return new Nifm.IStaticService(); case "nvdrv": - return new ServiceNvDrv(); + return new INvDrvServices(); case "nvdrv:a": - return new ServiceNvDrv(); + return new INvDrvServices(); case "pctl:a": - return new ServicePctl(); + return new IParentalControlServiceFactory(); case "pl:u": - return new ServicePl(); + return new ISharedFontManager(); case "set": - return new ServiceSet(); + return new ISettingsServer(); case "set:sys": - return new ServiceSetSys(); + return new ISystemSettingsServer(); case "sfdnsres": - return new ServiceSfdnsres(); + return new IResolver(); case "sm:": - return new ServiceSm(); + return new IUserInterface(); case "ssl": - return new ServiceSsl(); + return new ISslService(); case "time:s": - return new ServiceTime(); + return new Time.IStaticService(); case "time:u": - return new ServiceTime(); + return new Time.IStaticService(); case "vi:m": - return new ServiceVi(); + return new IManagerRootService(); case "vi:s": - return new ServiceVi(); + return new ISystemRootService(); case "vi:u": - return new ServiceVi(); + return new IApplicationRootService(); } throw new NotImplementedException(Name); diff --git a/Ryujinx.Core/OsHle/Services/Set/ServiceSet.cs b/Ryujinx.Core/OsHle/Services/Set/ISettingsServer.cs similarity index 96% rename from Ryujinx.Core/OsHle/Services/Set/ServiceSet.cs rename to Ryujinx.Core/OsHle/Services/Set/ISettingsServer.cs index a2aaeeafb..9d5b48880 100644 --- a/Ryujinx.Core/OsHle/Services/Set/ServiceSet.cs +++ b/Ryujinx.Core/OsHle/Services/Set/ISettingsServer.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Set { - class ServiceSet : IpcService + class ISettingsServer : IpcService { private static string[] LanguageCodes = new string[] { @@ -30,7 +30,7 @@ namespace Ryujinx.Core.OsHle.Services.Set public override IReadOnlyDictionary Commands => m_Commands; - public ServiceSet() + public ISettingsServer() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Set/ServiceSetSys.cs b/Ryujinx.Core/OsHle/Services/Set/ISystemSettingsServer.cs similarity index 88% rename from Ryujinx.Core/OsHle/Services/Set/ServiceSetSys.cs rename to Ryujinx.Core/OsHle/Services/Set/ISystemSettingsServer.cs index e4fcafcc8..0be465058 100644 --- a/Ryujinx.Core/OsHle/Services/Set/ServiceSetSys.cs +++ b/Ryujinx.Core/OsHle/Services/Set/ISystemSettingsServer.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Set { - class ServiceSetSys : IpcService + class ISystemSettingsServer : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceSetSys() + public ISystemSettingsServer() { m_Commands = new Dictionary() { @@ -26,7 +26,7 @@ namespace Ryujinx.Core.OsHle.Services.Set } public static long SetColorSetId(ServiceCtx Context) - { + { return 0; } } diff --git a/Ryujinx.Core/OsHle/Services/Sfdnsres/ServiceSfdnsres.cs b/Ryujinx.Core/OsHle/Services/Sfdnsres/IResolver.cs similarity index 79% rename from Ryujinx.Core/OsHle/Services/Sfdnsres/ServiceSfdnsres.cs rename to Ryujinx.Core/OsHle/Services/Sfdnsres/IResolver.cs index 1ef80829e..e8d48ceeb 100644 --- a/Ryujinx.Core/OsHle/Services/Sfdnsres/ServiceSfdnsres.cs +++ b/Ryujinx.Core/OsHle/Services/Sfdnsres/IResolver.cs @@ -3,17 +3,17 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Sfdnsres { - class ServiceSfdnsres : IpcService + class IResolver : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceSfdnsres() + public IResolver() { m_Commands = new Dictionary() { - //{ 0, Function } + //... }; } } diff --git a/Ryujinx.Core/OsHle/Services/Sm/ServiceSm.cs b/Ryujinx.Core/OsHle/Services/Sm/IUserInterface.cs similarity index 96% rename from Ryujinx.Core/OsHle/Services/Sm/ServiceSm.cs rename to Ryujinx.Core/OsHle/Services/Sm/IUserInterface.cs index e7fd4a105..6b695ddab 100644 --- a/Ryujinx.Core/OsHle/Services/Sm/ServiceSm.cs +++ b/Ryujinx.Core/OsHle/Services/Sm/IUserInterface.cs @@ -4,7 +4,7 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Sm { - class ServiceSm : IpcService + class IUserInterface : IpcService { private Dictionary m_Commands; @@ -12,7 +12,7 @@ namespace Ryujinx.Core.OsHle.Services.Sm private bool IsInitialized; - public ServiceSm() + public IUserInterface() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Ssl/ServiceSsl.cs b/Ryujinx.Core/OsHle/Services/Ssl/ISslService.cs similarity index 80% rename from Ryujinx.Core/OsHle/Services/Ssl/ServiceSsl.cs rename to Ryujinx.Core/OsHle/Services/Ssl/ISslService.cs index e23811e03..825e33639 100644 --- a/Ryujinx.Core/OsHle/Services/Ssl/ServiceSsl.cs +++ b/Ryujinx.Core/OsHle/Services/Ssl/ISslService.cs @@ -3,17 +3,17 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Ssl { - class ServiceSsl : IpcService + class ISslService : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceSsl() + public ISslService() { m_Commands = new Dictionary() { - //{ 0, Function } + //... }; } } diff --git a/Ryujinx.Core/OsHle/Services/Time/ServiceTime.cs b/Ryujinx.Core/OsHle/Services/Time/IStaticService.cs similarity index 95% rename from Ryujinx.Core/OsHle/Services/Time/ServiceTime.cs rename to Ryujinx.Core/OsHle/Services/Time/IStaticService.cs index 00defb987..94d9ae741 100644 --- a/Ryujinx.Core/OsHle/Services/Time/ServiceTime.cs +++ b/Ryujinx.Core/OsHle/Services/Time/IStaticService.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Time { - class ServiceTime : IpcService + class IStaticService : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceTime() + public IStaticService() { m_Commands = new Dictionary() { diff --git a/Ryujinx.Core/OsHle/Services/Vi/IApplicationRootService.cs b/Ryujinx.Core/OsHle/Services/Vi/IApplicationRootService.cs new file mode 100644 index 000000000..d92b2d9d3 --- /dev/null +++ b/Ryujinx.Core/OsHle/Services/Vi/IApplicationRootService.cs @@ -0,0 +1,29 @@ +using Ryujinx.Core.OsHle.Ipc; +using System.Collections.Generic; + +namespace Ryujinx.Core.OsHle.Services.Vi +{ + class IApplicationRootService : IpcService + { + private Dictionary m_Commands; + + public override IReadOnlyDictionary Commands => m_Commands; + + public IApplicationRootService() + { + m_Commands = new Dictionary() + { + { 0, GetDisplayService } + }; + } + + public long GetDisplayService(ServiceCtx Context) + { + int ServiceType = Context.RequestData.ReadInt32(); + + MakeObject(Context, new IApplicationDisplayService()); + + return 0; + } + } +} \ No newline at end of file diff --git a/Ryujinx.Core/OsHle/Services/Vi/ServiceVi.cs b/Ryujinx.Core/OsHle/Services/Vi/IManagerRootService.cs similarity index 82% rename from Ryujinx.Core/OsHle/Services/Vi/ServiceVi.cs rename to Ryujinx.Core/OsHle/Services/Vi/IManagerRootService.cs index cf8141161..177e5e666 100644 --- a/Ryujinx.Core/OsHle/Services/Vi/ServiceVi.cs +++ b/Ryujinx.Core/OsHle/Services/Vi/IManagerRootService.cs @@ -3,18 +3,16 @@ using System.Collections.Generic; namespace Ryujinx.Core.OsHle.Services.Vi { - class ServiceVi : IpcService + class IManagerRootService : IpcService { private Dictionary m_Commands; public override IReadOnlyDictionary Commands => m_Commands; - public ServiceVi() + public IManagerRootService() { m_Commands = new Dictionary() { - { 0, GetDisplayService }, - { 1, GetDisplayService }, { 2, GetDisplayService } }; } diff --git a/Ryujinx.Core/OsHle/Services/Vi/ISystemRootService.cs b/Ryujinx.Core/OsHle/Services/Vi/ISystemRootService.cs new file mode 100644 index 000000000..47123a556 --- /dev/null +++ b/Ryujinx.Core/OsHle/Services/Vi/ISystemRootService.cs @@ -0,0 +1,29 @@ +using Ryujinx.Core.OsHle.Ipc; +using System.Collections.Generic; + +namespace Ryujinx.Core.OsHle.Services.Vi +{ + class ISystemRootService : IpcService + { + private Dictionary m_Commands; + + public override IReadOnlyDictionary Commands => m_Commands; + + public ISystemRootService() + { + m_Commands = new Dictionary() + { + { 1, GetDisplayService } + }; + } + + public long GetDisplayService(ServiceCtx Context) + { + int ServiceType = Context.RequestData.ReadInt32(); + + MakeObject(Context, new IApplicationDisplayService()); + + return 0; + } + } +} \ No newline at end of file diff --git a/Ryujinx.Core/OsHle/Services/Vi/NvFlinger.cs b/Ryujinx.Core/OsHle/Services/Vi/NvFlinger.cs index 36030d20f..4301c0e6d 100644 --- a/Ryujinx.Core/OsHle/Services/Vi/NvFlinger.cs +++ b/Ryujinx.Core/OsHle/Services/Vi/NvFlinger.cs @@ -62,7 +62,7 @@ namespace Ryujinx.Core.OsHle.Services.Android private BufferEntry[] BufferQueue; private ManualResetEvent WaitBufferFree; - + private object RenderQueueLock; private int RenderQueueCount; @@ -85,7 +85,7 @@ namespace Ryujinx.Core.OsHle.Services.Android { ("android.gui.IGraphicBufferProducer", 0xb), GbpDisconnect }, { ("android.gui.IGraphicBufferProducer", 0xe), GbpPreallocBuffer } }; - + this.Renderer = Renderer; this.ReleaseEvent = ReleaseEvent; @@ -139,7 +139,7 @@ namespace Ryujinx.Core.OsHle.Services.Android using (MemoryStream MS = new MemoryStream()) { BinaryWriter Writer = new BinaryWriter(MS); - + BufferEntry Entry = BufferQueue[Slot]; int BufferCount = 1; //? @@ -243,7 +243,7 @@ namespace Ryujinx.Core.OsHle.Services.Android private long GbpPreallocBuffer(ServiceCtx Context, BinaryReader ParcelReader) { int Slot = ParcelReader.ReadInt32(); - + int BufferCount = ParcelReader.ReadInt32(); long BufferSize = ParcelReader.ReadInt64(); @@ -290,10 +290,10 @@ namespace Ryujinx.Core.OsHle.Services.Android NvMap Map = GetNvMap(Context, Slot); - NvMapFb MapFb = (NvMapFb)ServiceNvDrv.NvMapsFb.GetData(Context.Process, 0); + NvMapFb MapFb = (NvMapFb)INvDrvServices.NvMapsFb.GetData(Context.Process, 0); long Address = Map.CpuAddress; - + if (MapFb.HasBufferOffset(Slot)) { Address += MapFb.GetBufferOffset(Slot); @@ -413,7 +413,7 @@ namespace Ryujinx.Core.OsHle.Services.Android NvMapHandle = BitConverter.ToInt32(RawValue, 0); } - return ServiceNvDrv.NvMaps.GetData(Context.Process, NvMapHandle); + return INvDrvServices.NvMaps.GetData(Context.Process, NvMapHandle); } private int GetFreeSlotBlocking(int Width, int Height)