From c2356a7653d46ad2e3320dfd0f7816d63f8ff1a7 Mon Sep 17 00:00:00 2001 From: Ac_K Date: Thu, 19 Nov 2020 23:56:23 +0100 Subject: [PATCH] olsc: Add service olsc:u and stub some calls (#1734) --- Ryujinx.Common/Logging/LogClass.cs | 1 + .../Olsc/IOlscServiceForApplication.cs | 53 +++++++++++++++++++ Ryujinx.HLE/HOS/Services/Olsc/ResultCode.cs | 13 +++++ 3 files changed, 67 insertions(+) create mode 100644 Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs create mode 100644 Ryujinx.HLE/HOS/Services/Olsc/ResultCode.cs diff --git a/Ryujinx.Common/Logging/LogClass.cs b/Ryujinx.Common/Logging/LogClass.cs index 5d7077e1d..dc5bf7fef 100644 --- a/Ryujinx.Common/Logging/LogClass.cs +++ b/Ryujinx.Common/Logging/LogClass.cs @@ -42,6 +42,7 @@ namespace Ryujinx.Common.Logging ServiceNs, ServiceNsd, ServiceNv, + ServiceOlsc, ServicePctl, ServicePl, ServicePrepo, diff --git a/Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs b/Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs new file mode 100644 index 000000000..757ed7e21 --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs @@ -0,0 +1,53 @@ +using Ryujinx.Common; +using Ryujinx.Common.Logging; +using Ryujinx.HLE.HOS.Services.Account.Acc; + +namespace Ryujinx.HLE.HOS.Services.Olsc +{ + [Service("olsc:u")] // 10.0.0+ + class IOlscServiceForApplication : IpcService + { + private bool _initialized; + + public IOlscServiceForApplication(ServiceCtx context) { } + + [Command(0)] + // Initialize(pid) + public ResultCode Initialize(ServiceCtx context) + { + // NOTE: Service call arp:r GetApplicationInstanceUnregistrationNotifier with the pid and initialize some internal struct. + // Since we will not support online savedata backup. It's fine to stub it for now. + + _initialized = true; + + Logger.Stub?.PrintStub(LogClass.ServiceOlsc); + + return ResultCode.Success; + } + + [Command(14)] + // SetSaveDataBackupSettingEnabled(nn::account::Uid, bool) + public ResultCode SetSaveDataBackupSettingEnabled(ServiceCtx context) + { + UserId userId = context.RequestData.ReadStruct(); + ulong saveDataBackupSettingEnabled = context.RequestData.ReadUInt64(); + + if (!_initialized) + { + return ResultCode.NotInitialized; + } + + if (userId.IsNull) + { + return ResultCode.NullArgument; + } + + // NOTE: Service store the UserId and the boolean in an internal SaveDataBackupSettingDatabase object. + // Since we will not support online savedata backup. It's fine to stub it for now. + + Logger.Stub?.PrintStub(LogClass.ServiceOlsc, new { userId, saveDataBackupSettingEnabled }); + + return ResultCode.Success; + } + } +} \ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Olsc/ResultCode.cs b/Ryujinx.HLE/HOS/Services/Olsc/ResultCode.cs new file mode 100644 index 000000000..141d1ae94 --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Olsc/ResultCode.cs @@ -0,0 +1,13 @@ +namespace Ryujinx.HLE.HOS.Services.Olsc +{ + enum ResultCode + { + ModuleId = 179, + ErrorCodeShift = 9, + + Success = 0, + + NullArgument = (100 << ErrorCodeShift) | ModuleId, + NotInitialized = (101 << ErrorCodeShift) | ModuleId + } +}