aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS/Services/Nim/IShopServiceAccessServerInterface.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Services/Nim/IShopServiceAccessServerInterface.cs')
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Nim/IShopServiceAccessServerInterface.cs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/Ryujinx.HLE/HOS/Services/Nim/IShopServiceAccessServerInterface.cs b/src/Ryujinx.HLE/HOS/Services/Nim/IShopServiceAccessServerInterface.cs
new file mode 100644
index 00000000..950004fa
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Services/Nim/IShopServiceAccessServerInterface.cs
@@ -0,0 +1,44 @@
+using LibHac.Ncm;
+using Ryujinx.Common.Logging;
+using Ryujinx.HLE.HOS.Services.Arp;
+using Ryujinx.HLE.HOS.Services.Nim.ShopServiceAccessServerInterface;
+
+namespace Ryujinx.HLE.HOS.Services.Nim
+{
+ [Service("nim:eca")] // 5.0.0+
+ class IShopServiceAccessServerInterface : IpcService
+ {
+ public IShopServiceAccessServerInterface(ServiceCtx context) { }
+
+ [CommandCmif(0)]
+ // CreateServerInterface(pid, handle<unknown>, u64) -> object<nn::ec::IShopServiceAccessServer>
+ public ResultCode CreateServerInterface(ServiceCtx context)
+ {
+ // Close transfer memory immediately as we don't use it.
+ context.Device.System.KernelContext.Syscall.CloseHandle(context.Request.HandleDesc.ToCopy[0]);
+
+ MakeObject(context, new IShopServiceAccessServer());
+
+ Logger.Stub?.PrintStub(LogClass.ServiceNim);
+
+ return ResultCode.Success;
+ }
+
+ [CommandCmif(4)] // 10.0.0+
+ // IsLargeResourceAvailable(pid) -> b8
+ public ResultCode IsLargeResourceAvailable(ServiceCtx context)
+ {
+ // TODO: Service calls arp:r GetApplicationInstanceId (10.0.0+) then if it fails it calls arp:r GetMicroApplicationInstanceId (10.0.0+)
+ // then if it fails it returns the arp:r result code.
+
+ // NOTE: Firmare 10.0.0+ don't use the Pid here anymore, but the returned InstanceId. We don't support that for now so we can just use the Pid instead.
+ StorageId baseStorageId = (StorageId)ApplicationLaunchProperty.GetByPid(context).BaseGameStorageId;
+
+ // NOTE: Service returns ResultCode.InvalidArgument if baseStorageId is null, doesn't occur in our case.
+
+ context.ResponseData.Write(baseStorageId == StorageId.Host);
+
+ return ResultCode.Success;
+ }
+ }
+} \ No newline at end of file