| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using Ryujinx.Common;
- using Ryujinx.Common.Logging;
- using Ryujinx.Cpu;
- using Ryujinx.HLE.HOS.Services.Account.Acc;
- namespace Ryujinx.HLE.HOS.Services.Mnpp
- {
- [Service("mnpp:app")] // 13.0.0+
- class IServiceForApplication : IpcService
- {
- public IServiceForApplication(ServiceCtx context) { }
- [CommandHipc(0)]
- // Initialize(pid)
- public ResultCode Initialize(ServiceCtx context)
- {
- // Pid placeholder
- context.RequestData.ReadInt64();
- ulong pid = context.Request.HandleDesc.PId;
- // TODO: Service calls set:sys GetPlatformRegion.
- // If the result == 1 (China) it calls arp:r GetApplicationInstanceId and GetApplicationLaunchProperty to get the title id and store it internally.
- // If not, it does nothing.
- Logger.Stub?.PrintStub(LogClass.ServiceMnpp, new { pid });
- return ResultCode.Success;
- }
- [CommandHipc(1)]
- // SendRawTelemetryData(nn::account::Uid user_id, buffer<bytes, 5> title_id)
- public ResultCode SendRawTelemetryData(ServiceCtx context)
- {
- ulong titleIdInputPosition = context.Request.SendBuff[0].Position;
- ulong titleIdInputSize = context.Request.SendBuff[0].Size;
- UserId userId = context.RequestData.ReadStruct<UserId>();
- // TODO: Service calls set:sys GetPlatformRegion.
- // If the result != 1 (China) it returns ResultCode.Success.
- if (userId.IsNull)
- {
- return ResultCode.InvalidArgument;
- }
- if (titleIdInputSize <= 64)
- {
- string titleId = MemoryHelper.ReadAsciiString(context.Memory, titleIdInputPosition, (long)titleIdInputSize);
- // TODO: The service stores the titleId internally and seems proceed to some telemetry for China, which is not needed here.
- Logger.Stub?.PrintStub(LogClass.ServiceMnpp, new { userId, titleId });
- return ResultCode.Success;
- }
- Logger.Stub?.PrintStub(LogClass.ServiceMnpp, new { userId });
- return ResultCode.InvalidBufferSize;
- }
- }
- }
|