Rename services with the official interface names

This commit is contained in:
gdkchan 2018-04-06 01:01:52 -03:00
parent f15b1c76a1
commit 69e32e5bbc
29 changed files with 236 additions and 196 deletions

View File

@ -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();

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Acc
{
class ServiceAcc : IpcService
class IAccountServiceForApplication : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceAcc()
public IAccountServiceForApplication()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Am
{
class ServiceAppletOE : IpcService
class IApplicationProxyService : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceAppletOE()
public IApplicationProxyService()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Apm
{
class ServiceApm : IpcService
class IManager : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceApm()
public IManager()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -5,13 +5,13 @@ using System.Text;
namespace Ryujinx.Core.OsHle.Services.Aud
{
class IAudioDevice : IpcService
class IAudioDeviceService : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public IAudioDevice()
public IAudioDeviceService()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -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;
}

View File

@ -0,0 +1,8 @@
namespace Ryujinx.Core.OsHle.Services.Bsd
{
//bsd_errno == (SocketException.ErrorCode - 10000)
public enum BsdError
{
Timeout = 60
}
}

View File

@ -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;
}
}

View File

@ -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<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
private List<SocketBsd> Sockets = new List<SocketBsd>();
private List<BsdSocket> Sockets = new List<BsdSocket>();
public ServiceBsd()
public IClient()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{
@ -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<i8, 0x22, 0> 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<i8, 0x21, 0>) -> (i32 ret, u32 bsd_errno)
public long Send(ServiceCtx Context)
{
int SocketId = Context.RequestData.ReadInt32();
int SocketFlags = Context.RequestData.ReadInt32();
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,11 +177,13 @@ namespace Ryujinx.Core.OsHle.Services.Bsd
//(u32 socket, u32 flags, buffer<i8, 0x21, 0>, buffer<sockaddr, 0x21, 0>) -> (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);
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);
@ -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<sockaddr, 0x22, 0> 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;
@ -404,19 +362,20 @@ namespace Ryujinx.Core.OsHle.Services.Bsd
//(u32 socket, u32 level, u32 option_name, buffer<unknown, 0x21, 0>) -> (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();
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}");

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Friend
{
class ServiceFriend : IpcService
class IServiceCreator : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceFriend()
public IServiceCreator()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.FspSrv
{
class ServiceFspSrv : IpcService
class IFileSystemProxy : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceFspSrv()
public IFileSystemProxy()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -4,13 +4,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Hid
{
class ServiceHid : IpcService
class IHidServer : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceHid()
public IHidServer()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Lm
{
class ServiceLm : IpcService
class ILogService : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceLm()
public ILogService()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Nifm
{
class ServiceNifm : IpcService
class IStaticService : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceNifm()
public IStaticService()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Ns
{
class ServiceNs : IpcService
class IAddOnContentManager : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceNs()
public IAddOnContentManager()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -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<int, ServiceProcessRequest>()
{
@ -74,7 +74,7 @@ namespace Ryujinx.Core.OsHle.Services.Nv
Event = new KEvent();
}
static ServiceNvDrv()
static INvDrvServices()
{
Fds = new GlobalStateTable();

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Pctl
{
class ServicePctl : IpcService
class IParentalControlServiceFactory : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServicePctl()
public IParentalControlServiceFactory()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Pl
{
class ServicePl : IpcService
class ISharedFontManager : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServicePl()
public ISharedFontManager()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -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);

View File

@ -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<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceSet()
public ISettingsServer()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Set
{
class ServiceSetSys : IpcService
class ISystemSettingsServer : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceSetSys()
public ISystemSettingsServer()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -3,17 +3,17 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Sfdnsres
{
class ServiceSfdnsres : IpcService
class IResolver : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceSfdnsres()
public IResolver()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{
//{ 0, Function }
//...
};
}
}

View File

@ -4,7 +4,7 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Sm
{
class ServiceSm : IpcService
class IUserInterface : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
@ -12,7 +12,7 @@ namespace Ryujinx.Core.OsHle.Services.Sm
private bool IsInitialized;
public ServiceSm()
public IUserInterface()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -3,17 +3,17 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Ssl
{
class ServiceSsl : IpcService
class ISslService : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceSsl()
public ISslService()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{
//{ 0, Function }
//...
};
}
}

View File

@ -3,13 +3,13 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Time
{
class ServiceTime : IpcService
class IStaticService : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceTime()
public IStaticService()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{

View File

@ -0,0 +1,29 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Vi
{
class IApplicationRootService : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public IApplicationRootService()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{
{ 0, GetDisplayService }
};
}
public long GetDisplayService(ServiceCtx Context)
{
int ServiceType = Context.RequestData.ReadInt32();
MakeObject(Context, new IApplicationDisplayService());
return 0;
}
}
}

View File

@ -3,18 +3,16 @@ using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Vi
{
class ServiceVi : IpcService
class IManagerRootService : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ServiceVi()
public IManagerRootService()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{
{ 0, GetDisplayService },
{ 1, GetDisplayService },
{ 2, GetDisplayService }
};
}

View File

@ -0,0 +1,29 @@
using Ryujinx.Core.OsHle.Ipc;
using System.Collections.Generic;
namespace Ryujinx.Core.OsHle.Services.Vi
{
class ISystemRootService : IpcService
{
private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public ISystemRootService()
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{
{ 1, GetDisplayService }
};
}
public long GetDisplayService(ServiceCtx Context)
{
int ServiceType = Context.RequestData.ReadInt32();
MakeObject(Context, new IApplicationDisplayService());
return 0;
}
}
}

View File

@ -290,7 +290,7 @@ 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;
@ -413,7 +413,7 @@ namespace Ryujinx.Core.OsHle.Services.Android
NvMapHandle = BitConverter.ToInt32(RawValue, 0);
}
return ServiceNvDrv.NvMaps.GetData<NvMap>(Context.Process, NvMapHandle);
return INvDrvServices.NvMaps.GetData<NvMap>(Context.Process, NvMapHandle);
}
private int GetFreeSlotBlocking(int Width, int Height)