diff --git a/Ryujinx.Common/Logging/LogClass.cs b/Ryujinx.Common/Logging/LogClass.cs index ab83bdc2e1..dcf380a171 100644 --- a/Ryujinx.Common/Logging/LogClass.cs +++ b/Ryujinx.Common/Logging/LogClass.cs @@ -40,6 +40,7 @@ namespace Ryujinx.Common.Logging ServicePl, ServicePrepo, ServicePsm, + ServicePtm, ServiceSet, ServiceSfdnsres, ServiceSm, diff --git a/Ryujinx.HLE/HOS/Services/Ns/IApplicationManagerInterface.cs b/Ryujinx.HLE/HOS/Services/Ns/IApplicationManagerInterface.cs index e185233be5..3920030e33 100644 --- a/Ryujinx.HLE/HOS/Services/Ns/IApplicationManagerInterface.cs +++ b/Ryujinx.HLE/HOS/Services/Ns/IApplicationManagerInterface.cs @@ -10,7 +10,7 @@ public ResultCode GetApplicationControlData(ServiceCtx context) { byte source = (byte)context.RequestData.ReadInt64(); - ulong titleId = (byte)context.RequestData.ReadUInt64(); + ulong titleId = context.RequestData.ReadUInt64(); long position = context.Request.ReceiveBuff[0].Position; diff --git a/Ryujinx.HLE/HOS/Services/Ns/IReadOnlyApplicationControlDataInterface.cs b/Ryujinx.HLE/HOS/Services/Ns/IReadOnlyApplicationControlDataInterface.cs new file mode 100644 index 0000000000..a7f20bc75c --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Ns/IReadOnlyApplicationControlDataInterface.cs @@ -0,0 +1,23 @@ +namespace Ryujinx.HLE.HOS.Services.Ns +{ + class IReadOnlyApplicationControlDataInterface : IpcService + { + public IReadOnlyApplicationControlDataInterface(ServiceCtx context) { } + + [Command(0)] + // GetApplicationControlData(u8, u64) -> (unknown<4>, buffer) + public ResultCode GetApplicationControlData(ServiceCtx context) + { + byte source = (byte)context.RequestData.ReadInt64(); + ulong titleId = context.RequestData.ReadUInt64(); + + long position = context.Request.ReceiveBuff[0].Position; + + byte[] nacpData = context.Device.System.ControlData.ByteSpan.ToArray(); + + context.Memory.WriteBytes(position, nacpData); + + return ResultCode.Success; + } + } +} diff --git a/Ryujinx.HLE/HOS/Services/Ns/IServiceGetterInterface.cs b/Ryujinx.HLE/HOS/Services/Ns/IServiceGetterInterface.cs index 7133166723..a16f76f446 100644 --- a/Ryujinx.HLE/HOS/Services/Ns/IServiceGetterInterface.cs +++ b/Ryujinx.HLE/HOS/Services/Ns/IServiceGetterInterface.cs @@ -17,5 +17,14 @@ namespace Ryujinx.HLE.HOS.Services.Ns return ResultCode.Success; } + + [Command(7989)] + // GetReadOnlyApplicationControlDataInterface() -> object + public ResultCode GetReadOnlyApplicationControlDataInterface(ServiceCtx context) + { + MakeObject(context, new IReadOnlyApplicationControlDataInterface(context)); + + return ResultCode.Success; + } } } \ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Ptm/Ts/IMeasurementServer.cs b/Ryujinx.HLE/HOS/Services/Ptm/Ts/IMeasurementServer.cs index f3b37d67df..942fab87ac 100644 --- a/Ryujinx.HLE/HOS/Services/Ptm/Ts/IMeasurementServer.cs +++ b/Ryujinx.HLE/HOS/Services/Ptm/Ts/IMeasurementServer.cs @@ -1,8 +1,26 @@ -namespace Ryujinx.HLE.HOS.Services.Ptm.Ts +using Ryujinx.Common.Logging; +using Ryujinx.HLE.HOS.Services.Ptm.Ts.Types; + +namespace Ryujinx.HLE.HOS.Services.Ptm.Ts { [Service("ts")] class IMeasurementServer : IpcService { + private const uint DefaultTemperature = 42000u; + public IMeasurementServer(ServiceCtx context) { } + + [Command(3)] + // GetTemperatureMilliC(Location location) -> u32 + public ResultCode GetTemperatureMilliC(ServiceCtx context) + { + Location location = (Location)context.RequestData.ReadByte(); + + Logger.PrintStub(LogClass.ServicePtm, new { location }); + + context.ResponseData.Write(DefaultTemperature); + + return ResultCode.Success; + } } } \ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Ptm/Ts/Types/Location.cs b/Ryujinx.HLE/HOS/Services/Ptm/Ts/Types/Location.cs new file mode 100644 index 0000000000..e72491d513 --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Ptm/Ts/Types/Location.cs @@ -0,0 +1,8 @@ +namespace Ryujinx.HLE.HOS.Services.Ptm.Ts.Types +{ + enum Location : byte + { + Internal, + External + } +}