aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.HLE/HOS/Services/Caps/IAlbumApplicationService.cs52
-rw-r--r--Ryujinx.HLE/HOS/Services/Caps/ResultCode.cs1
-rw-r--r--Ryujinx.HLE/HOS/Services/Caps/Types/ContentType.cs3
3 files changed, 55 insertions, 1 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Caps/IAlbumApplicationService.cs b/Ryujinx.HLE/HOS/Services/Caps/IAlbumApplicationService.cs
index 8abda41c..cc370126 100644
--- a/Ryujinx.HLE/HOS/Services/Caps/IAlbumApplicationService.cs
+++ b/Ryujinx.HLE/HOS/Services/Caps/IAlbumApplicationService.cs
@@ -1,4 +1,6 @@
using Ryujinx.Common.Logging;
+using Ryujinx.Cpu;
+using Ryujinx.HLE.HOS.Services.Caps.Types;
namespace Ryujinx.HLE.HOS.Services.Caps
{
@@ -13,5 +15,55 @@ namespace Ryujinx.HLE.HOS.Services.Caps
{
return context.Device.System.CaptureManager.SetShimLibraryVersion(context);
}
+
+ [CommandHipc(102)]
+ // GetAlbumFileList0AafeAruidDeprecated(pid, u16 content_type, u64 start_time, u64 end_time, nn::applet::AppletResourceUserId) -> (u64 count, buffer<ApplicationAlbumFileEntry, 0x6>)
+ public ResultCode GetAlbumFileList0AafeAruidDeprecated(ServiceCtx context)
+ {
+ // NOTE: ApplicationAlbumFileEntry size is 0x30.
+ return GetAlbumFileList(context);
+ }
+
+ [CommandHipc(142)]
+ // GetAlbumFileList3AaeAruid(pid, u16 content_type, u64 start_time, u64 end_time, nn::applet::AppletResourceUserId) -> (u64 count, buffer<ApplicationAlbumFileEntry, 0x6>)
+ public ResultCode GetAlbumFileList3AaeAruid(ServiceCtx context)
+ {
+ // NOTE: ApplicationAlbumFileEntry size is 0x20.
+ return GetAlbumFileList(context);
+ }
+
+ private ResultCode GetAlbumFileList(ServiceCtx context)
+ {
+ ResultCode resultCode = ResultCode.Success;
+ ulong count = 0;
+
+ ContentType contentType = (ContentType)context.RequestData.ReadUInt16();
+ ulong startTime = context.RequestData.ReadUInt64();
+ ulong endTime = context.RequestData.ReadUInt64();
+
+ context.RequestData.ReadUInt16(); // Alignment.
+
+ ulong appletResourceUserId = context.RequestData.ReadUInt64();
+
+ ulong applicationAlbumFileEntryPosition = context.Request.ReceiveBuff[0].Position;
+ ulong applicationAlbumFileEntrySize = context.Request.ReceiveBuff[0].Size;
+
+ MemoryHelper.FillWithZeros(context.Memory, applicationAlbumFileEntryPosition, (int)applicationAlbumFileEntrySize);
+
+ if (contentType > ContentType.Unknown || contentType == ContentType.ExtraMovie)
+ {
+ resultCode = ResultCode.InvalidContentType;
+ }
+
+ // TODO: Service checks if the pid is present in an internal list and returns ResultCode.BlacklistedPid if it is.
+ // The list contents needs to be determined.
+ // Service populate the buffer with a ApplicationAlbumFileEntry related to the pid.
+
+ Logger.Stub?.PrintStub(LogClass.ServiceCaps, new { contentType, startTime, endTime, appletResourceUserId });
+
+ context.ResponseData.Write(count);
+
+ return resultCode;
+ }
}
} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Services/Caps/ResultCode.cs b/Ryujinx.HLE/HOS/Services/Caps/ResultCode.cs
index c3e4c2cd..2615eeda 100644
--- a/Ryujinx.HLE/HOS/Services/Caps/ResultCode.cs
+++ b/Ryujinx.HLE/HOS/Services/Caps/ResultCode.cs
@@ -10,6 +10,7 @@
InvalidArgument = (2 << ErrorCodeShift) | ModuleId,
ShimLibraryVersionAlreadySet = (7 << ErrorCodeShift) | ModuleId,
OutOfRange = (8 << ErrorCodeShift) | ModuleId,
+ InvalidContentType = (14 << ErrorCodeShift) | ModuleId,
NullOutputBuffer = (141 << ErrorCodeShift) | ModuleId,
NullInputBuffer = (142 << ErrorCodeShift) | ModuleId,
BlacklistedPid = (822 << ErrorCodeShift) | ModuleId
diff --git a/Ryujinx.HLE/HOS/Services/Caps/Types/ContentType.cs b/Ryujinx.HLE/HOS/Services/Caps/Types/ContentType.cs
index c1e7f0fc..5f8bb537 100644
--- a/Ryujinx.HLE/HOS/Services/Caps/Types/ContentType.cs
+++ b/Ryujinx.HLE/HOS/Services/Caps/Types/ContentType.cs
@@ -4,6 +4,7 @@
{
Screenshot,
Movie,
- ExtraMovie
+ ExtraMovie,
+ Unknown
}
} \ No newline at end of file