diff options
| author | Alex Barney <thealexbarney@gmail.com> | 2020-03-03 07:07:06 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-03 15:07:06 +0100 |
| commit | cecbd256a5b95cce815fcbbffc40b3898c319d9f (patch) | |
| tree | da5b37ed1d93fa4054c7d5ff846256f0241c6e6c /Ryujinx.HLE/HOS | |
| parent | dc97457bf0121b9383054ca14d3c525b56b92634 (diff) | |
Add support for cache storage (#936)
* Update LibHac
* Run EnsureApplicationCacheStorage when launching a game
* Add new FS commands
Diffstat (limited to 'Ryujinx.HLE/HOS')
| -rw-r--r-- | Ryujinx.HLE/HOS/Horizon.cs | 13 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Fs/IDeviceOperator.cs | 11 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs | 31 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Mii/MiiDatabaseManager.cs | 6 |
4 files changed, 56 insertions, 5 deletions
diff --git a/Ryujinx.HLE/HOS/Horizon.cs b/Ryujinx.HLE/HOS/Horizon.cs index b3e3ea01..e70a9e59 100644 --- a/Ryujinx.HLE/HOS/Horizon.cs +++ b/Ryujinx.HLE/HOS/Horizon.cs @@ -519,7 +519,7 @@ namespace Ryujinx.HLE.HOS { Result result = codeFs.OpenFile(out IFile npdmFile, "/main.npdm", OpenMode.Read); - if (result == ResultFs.PathNotFound) + if (ResultFs.PathNotFound.Includes(result)) { Logger.PrintWarning(LogClass.Loader, "NPDM file not found, using default values!"); @@ -691,7 +691,16 @@ namespace Ryujinx.HLE.HOS "No control file was found for this game. Using a dummy one instead. This may cause inaccuracies in some games."); } - Result rc = EnsureApplicationSaveData(Device.FileSystem.FsClient, out _, titleId, ref control, ref user); + FileSystemClient fs = Device.FileSystem.FsClient; + + Result rc = fs.EnsureApplicationCacheStorage(out _, titleId, ref ControlData.Value); + + if (rc.IsFailure()) + { + Logger.PrintError(LogClass.Application, $"Error calling EnsureApplicationCacheStorage. Result code {rc.ToStringWithName()}"); + } + + rc = EnsureApplicationSaveData(fs, out _, titleId, ref ControlData.Value, ref user); if (rc.IsFailure()) { diff --git a/Ryujinx.HLE/HOS/Services/Fs/IDeviceOperator.cs b/Ryujinx.HLE/HOS/Services/Fs/IDeviceOperator.cs index 426b50ed..c9f2f74c 100644 --- a/Ryujinx.HLE/HOS/Services/Fs/IDeviceOperator.cs +++ b/Ryujinx.HLE/HOS/Services/Fs/IDeviceOperator.cs @@ -12,6 +12,17 @@ namespace Ryujinx.HLE.HOS.Services.Fs _baseOperator = baseOperator; } + [Command(0)] + // IsSdCardInserted() -> b8 is_inserted + public ResultCode IsSdCardInserted(ServiceCtx context) + { + Result result = _baseOperator.IsSdCardInserted(out bool isInserted); + + context.ResponseData.Write(isInserted); + + return (ResultCode)result.Value; + } + [Command(200)] // IsGameCardInserted() -> b8 is_inserted public ResultCode IsGameCardInserted(ServiceCtx context) diff --git a/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs b/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs index 7c31814f..43ae80aa 100644 --- a/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs +++ b/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs @@ -448,6 +448,37 @@ namespace Ryujinx.HLE.HOS.Services.Fs return (ResultCode)result.Value; } + [Command(630)] + // SetSdCardAccessibility(u8) + public ResultCode SetSdCardAccessibility(ServiceCtx context) + { + bool isAccessible = context.RequestData.ReadBoolean(); + + return (ResultCode)_baseFileSystemProxy.SetSdCardAccessibility(isAccessible).Value; + } + + [Command(631)] + // IsSdCardAccessible() -> u8 + public ResultCode IsSdCardAccessible(ServiceCtx context) + { + Result result = _baseFileSystemProxy.IsSdCardAccessible(out bool isAccessible); + + context.ResponseData.Write(isAccessible); + + return (ResultCode)result.Value; + } + + [Command(1004)] + // SetGlobalAccessLogMode(u32 mode) + public ResultCode SetGlobalAccessLogMode(ServiceCtx context) + { + int mode = context.RequestData.ReadInt32(); + + context.Device.System.GlobalAccessLogMode = mode; + + return ResultCode.Success; + } + [Command(1005)] // GetGlobalAccessLogMode() -> u32 logMode public ResultCode GetGlobalAccessLogMode(ServiceCtx context) diff --git a/Ryujinx.HLE/HOS/Services/Mii/MiiDatabaseManager.cs b/Ryujinx.HLE/HOS/Services/Mii/MiiDatabaseManager.cs index 30bcab95..6ba1b2bf 100644 --- a/Ryujinx.HLE/HOS/Services/Mii/MiiDatabaseManager.cs +++ b/Ryujinx.HLE/HOS/Services/Mii/MiiDatabaseManager.cs @@ -132,7 +132,7 @@ namespace Ryujinx.HLE.HOS.Services.Mii if (result.IsFailure()) { - if (ResultFs.TargetNotFound == result) + if (ResultFs.TargetNotFound.Includes(result)) { // TODO: We're currently always specifying the owner ID because FS doesn't have a way of // knowing which process called it @@ -212,7 +212,7 @@ namespace Ryujinx.HLE.HOS.Services.Mii return (ResultCode)result.Value; } - else if (result == ResultFs.PathNotFound) + else if (ResultFs.PathNotFound.Includes(result)) { return (ResultCode)ForceSaveDatabase().Value; } @@ -224,7 +224,7 @@ namespace Ryujinx.HLE.HOS.Services.Mii { Result result = _filesystemClient.CreateFile(DatabasePath, Unsafe.SizeOf<NintendoFigurineDatabase>()); - if (result.IsSuccess() || result == ResultFs.PathAlreadyExists) + if (result.IsSuccess() || ResultFs.PathAlreadyExists.Includes(result)) { result = _filesystemClient.OpenFile(out FileHandle handle, DatabasePath, OpenMode.Write); |
