diff --git a/Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs b/Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs index 39e82b8c..c70134c5 100644 --- a/Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs +++ b/Ryujinx.HLE/HOS/Services/Olsc/IOlscServiceForApplication.cs @@ -1,13 +1,15 @@ using Ryujinx.Common; using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Services.Account.Acc; +using System.Collections.Generic; namespace Ryujinx.HLE.HOS.Services.Olsc { [Service("olsc:u")] // 10.0.0+ class IOlscServiceForApplication : IpcService { - private bool _initialized; + private bool _initialized; + private Dictionary _saveDataBackupSettingDatabase; public IOlscServiceForApplication(ServiceCtx context) { } @@ -16,7 +18,9 @@ namespace Ryujinx.HLE.HOS.Services.Olsc 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. + // Since we will not support online savedata backup, it's fine to stub it for now. + + _saveDataBackupSettingDatabase = new Dictionary(); _initialized = true; @@ -25,12 +29,11 @@ namespace Ryujinx.HLE.HOS.Services.Olsc return ResultCode.Success; } - [CommandHipc(14)] - // SetSaveDataBackupSettingEnabled(nn::account::Uid, bool) - public ResultCode SetSaveDataBackupSettingEnabled(ServiceCtx context) + [CommandHipc(13)] + // GetSaveDataBackupSetting(nn::account::Uid) -> u8 + public ResultCode GetSaveDataBackupSetting(ServiceCtx context) { - UserId userId = context.RequestData.ReadStruct(); - ulong saveDataBackupSettingEnabled = context.RequestData.ReadUInt64(); + UserId userId = context.RequestData.ReadStruct(); if (!_initialized) { @@ -42,8 +45,42 @@ namespace Ryujinx.HLE.HOS.Services.Olsc 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. + if (_saveDataBackupSettingDatabase[userId]) + { + context.ResponseData.Write((byte)1); // TODO: Determine value. + } + else + { + context.ResponseData.Write((byte)2); // TODO: Determine value. + } + + // NOTE: Since we will not support online savedata backup, it's fine to stub it for now. + + Logger.Stub?.PrintStub(LogClass.ServiceOlsc, new { userId }); + + return ResultCode.Success; + } + + [CommandHipc(14)] + // SetSaveDataBackupSettingEnabled(nn::account::Uid, bool) + public ResultCode SetSaveDataBackupSettingEnabled(ServiceCtx context) + { + bool saveDataBackupSettingEnabled = context.RequestData.ReadUInt64() != 0; + UserId userId = context.RequestData.ReadStruct(); + + if (!_initialized) + { + return ResultCode.NotInitialized; + } + + if (userId.IsNull) + { + return ResultCode.NullArgument; + } + + _saveDataBackupSettingDatabase[userId] = saveDataBackupSettingEnabled; + + // NOTE: Since we will not support online savedata backup, it's fine to stub it for now. Logger.Stub?.PrintStub(LogClass.ServiceOlsc, new { userId, saveDataBackupSettingEnabled });