From 415a5bb8dee35d050c645367d3a154eb72fd5346 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Aug 2023 03:27:10 +0300 Subject: [PATCH] Add AM::RegisterDisconnectEvent --- include/services/ac.hpp | 1 + src/core/services/ac.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/services/ac.hpp b/include/services/ac.hpp index 058df381..3d3c3216 100644 --- a/include/services/ac.hpp +++ b/include/services/ac.hpp @@ -15,6 +15,7 @@ class ACService { void closeAsync(u32 messagePointer); void createDefaultConfig(u32 messagePointer); void getLastErrorCode(u32 messagePointer); + void registerDisconnectEvent(u32 messagePointer); void setClientVersion(u32 messagePointer); public: diff --git a/src/core/services/ac.cpp b/src/core/services/ac.cpp index 480cef93..56326609 100644 --- a/src/core/services/ac.cpp +++ b/src/core/services/ac.cpp @@ -7,6 +7,7 @@ namespace ACCommands { CancelConnectAsync = 0x00070002, CloseAsync = 0x00080004, GetLastErrorCode = 0x000A0000, + RegisterDisconnectEvent = 0x00300004, SetClientVersion = 0x00400042, }; } @@ -20,6 +21,7 @@ void ACService::handleSyncRequest(u32 messagePointer) { case ACCommands::CloseAsync: closeAsync(messagePointer); break; case ACCommands::CreateDefaultConfig: createDefaultConfig(messagePointer); break; case ACCommands::GetLastErrorCode: getLastErrorCode(messagePointer); break; + case ACCommands::RegisterDisconnectEvent: registerDisconnectEvent(messagePointer); break; case ACCommands::SetClientVersion: setClientVersion(messagePointer); break; default: Helpers::panic("AC service requested. Command: %08X\n", command); } @@ -63,4 +65,15 @@ void ACService::setClientVersion(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x40, 1, 0)); mem.write32(messagePointer + 4, Result::Success); +} + +void ACService::registerDisconnectEvent(u32 messagePointer) { + log("AC::RegisterDisconnectEvent (stubbed)\n"); + const u32 pidHeader = mem.read32(messagePointer + 4); + const u32 copyHandleHeader = mem.read32(messagePointer + 12); + // Event signaled when disconnecting from AC + const Handle eventHandle = mem.read32(messagePointer + 16); + + mem.write32(messagePointer, IPC::responseHeader(0x30, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file