From 76e1a162dd32792e54a9b5acb241c6aeedbdaf7d Mon Sep 17 00:00:00 2001 From: Ac_K Date: Tue, 12 May 2020 16:52:27 +0200 Subject: [PATCH] am: Implement GetFriendInvitationStorageChannelEvent (#1220) * am: Implement GetFriendInvitationStorageChannelEvent This implement GetFriendInvitationStorageChannelEvent according to RE, needed by Streets of Rage 4 * Fix handle name * add GetNotificationStorageChannelEvent --- .../ApplicationProxy/IApplicationFunctions.cs | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/Ryujinx.HLE/HOS/Services/Am/AppletOE/ApplicationProxyService/ApplicationProxy/IApplicationFunctions.cs b/Ryujinx.HLE/HOS/Services/Am/AppletOE/ApplicationProxyService/ApplicationProxy/IApplicationFunctions.cs index 6ba506a17..b83c6b69f 100644 --- a/Ryujinx.HLE/HOS/Services/Am/AppletOE/ApplicationProxyService/ApplicationProxy/IApplicationFunctions.cs +++ b/Ryujinx.HLE/HOS/Services/Am/AppletOE/ApplicationProxyService/ApplicationProxy/IApplicationFunctions.cs @@ -22,10 +22,14 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati class IApplicationFunctions : IpcService { private KEvent _gpuErrorDetectedSystemEvent; + private KEvent _friendInvitationStorageChannelEvent; + private KEvent _notificationStorageChannelEvent; public IApplicationFunctions(Horizon system) { - _gpuErrorDetectedSystemEvent = new KEvent(system.KernelContext); + _gpuErrorDetectedSystemEvent = new KEvent(system.KernelContext); + _friendInvitationStorageChannelEvent = new KEvent(system.KernelContext); + _notificationStorageChannelEvent = new KEvent(system.KernelContext); } [Command(1)] @@ -301,5 +305,33 @@ namespace Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.Applicati return ResultCode.Success; } + + [Command(140)] // 9.0.0+ + // GetFriendInvitationStorageChannelEvent() -> handle + public ResultCode GetFriendInvitationStorageChannelEvent(ServiceCtx context) + { + if (context.Process.HandleTable.GenerateHandle(_friendInvitationStorageChannelEvent.ReadableEvent, out int friendInvitationStorageChannelEventHandle) != KernelResult.Success) + { + throw new InvalidOperationException("Out of handles!"); + } + + context.Response.HandleDesc = IpcHandleDesc.MakeCopy(friendInvitationStorageChannelEventHandle); + + return ResultCode.Success; + } + + [Command(150)] // 9.0.0+ + // GetNotificationStorageChannelEvent() -> handle + public ResultCode GetNotificationStorageChannelEvent(ServiceCtx context) + { + if (context.Process.HandleTable.GenerateHandle(_notificationStorageChannelEvent.ReadableEvent, out int notificationStorageChannelEventHandle) != KernelResult.Success) + { + throw new InvalidOperationException("Out of handles!"); + } + + context.Response.HandleDesc = IpcHandleDesc.MakeCopy(notificationStorageChannelEventHandle); + + return ResultCode.Success; + } } } \ No newline at end of file