From 8a5d15289fb6af588bac5df7752a49e651496487 Mon Sep 17 00:00:00 2001 From: Nomi Date: Mon, 25 Sep 2023 13:04:32 +0200 Subject: [PATCH] Stub ReceiveDeliverArg and LoadSysMenuArg --- include/services/apt.hpp | 2 ++ src/core/services/apt.cpp | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/include/services/apt.hpp b/include/services/apt.hpp index a7df056f..398b34a6 100644 --- a/include/services/apt.hpp +++ b/include/services/apt.hpp @@ -43,9 +43,11 @@ class APTService { void initialize(u32 messagePointer); void inquireNotification(u32 messagePointer); void isRegistered(u32 messagePointer); + void loadSysMenuArg(u32 messagePointer); void notifyToWait(u32 messagePointer); void preloadLibraryApplet(u32 messagePointer); void prepareToStartLibraryApplet(u32 messagePointer); + void receiveDeliverArg(u32 messagePointer); void receiveParameter(u32 messagePointer); void replySleepQuery(u32 messagePointer); void setApplicationCpuTimeLimit(u32 messagePointer); diff --git a/src/core/services/apt.cpp b/src/core/services/apt.cpp index d969f2a4..f2037cd5 100644 --- a/src/core/services/apt.cpp +++ b/src/core/services/apt.cpp @@ -18,6 +18,8 @@ namespace APTCommands { PreloadLibraryApplet = 0x00160040, PrepareToStartLibraryApplet = 0x00180040, StartLibraryApplet = 0x001E0084, + ReceiveDeliverArg = 0x00350080, + LoadSysMenuArg = 0x00360040, ReplySleepQuery = 0x003E0080, NotifyToWait = 0x00430040, GetSharedFont = 0x00440000, @@ -85,9 +87,11 @@ void APTService::handleSyncRequest(u32 messagePointer) { case APTCommands::GetLockHandle: getLockHandle(messagePointer); break; case APTCommands::GetWirelessRebootInfo: getWirelessRebootInfo(messagePointer); break; case APTCommands::GlanceParameter: glanceParameter(messagePointer); break; + case APTCommands::LoadSysMenuArg: loadSysMenuArg(messagePointer); break; case APTCommands::NotifyToWait: notifyToWait(messagePointer); break; case APTCommands::PreloadLibraryApplet: preloadLibraryApplet(messagePointer); break; case APTCommands::PrepareToStartLibraryApplet: prepareToStartLibraryApplet(messagePointer); break; + case APTCommands::ReceiveDeliverArg: receiveDeliverArg(messagePointer); break; case APTCommands::ReceiveParameter: [[likely]] receiveParameter(messagePointer); break; case APTCommands::ReplySleepQuery: replySleepQuery(messagePointer); break; case APTCommands::SetApplicationCpuTimeLimit: setApplicationCpuTimeLimit(messagePointer); break; @@ -373,3 +377,33 @@ void APTService::getWirelessRebootInfo(u32 messagePointer) { mem.write8(messagePointer + 0x104 + i, 0); // Temporarily stub this until we add SetWirelessRebootInfo } } + +void APTService::receiveDeliverArg(u32 messagePointer) { + const u32 parameterSize = mem.read32(messagePointer + 4); + const u32 hmacSize = mem.read32(messagePointer + 8); + log("APT::ReceiveDeliverArg (parameter size = %X, HMAC size = %X) (stubbed)\n", parameterSize, hmacSize); + + const u32 parameterPointer = mem.read32(messagePointer + 0x104); + const u32 hmacPointer = mem.read32(messagePointer + 0x10C); + + log("Parameter* = %X, HMAC* = %X\n", parameterPointer, hmacPointer); + + mem.write32(messagePointer, IPC::responseHeader(0x35, 4, 4)); + mem.write32(messagePointer + 4, Result::Success); + mem.write32(messagePointer + 8, 0); // Program ID + mem.write8(messagePointer + 16, 1); // Is valid response + mem.write32(messagePointer + 20, IPC::pointerHeader(0, sizeof(u32) * parameterSize)); + mem.write32(messagePointer + 24, 0xDEADBEEF); // TODO: look into how this works if program reads from this address + mem.write32(messagePointer + 28, IPC::pointerHeader(1, sizeof(u32) * hmacSize)); + mem.write32(messagePointer + 32, 0xDEADBEEF); +} + +void APTService::loadSysMenuArg(u32 messagePointer) { + const u32 outputSize = mem.read32(messagePointer + 4); + log("APT::LoadSysMenuArg (output size = %X) (stubbed)\n", outputSize); + + mem.write32(messagePointer, IPC::responseHeader(0x35, 4, 4)); + mem.write32(messagePointer + 4, Result::Success); + mem.write32(messagePointer + 8, IPC::pointerHeader(0, sizeof(u32) * outputSize)); + mem.write32(messagePointer + 12, 0xDEADBEEF); +} \ No newline at end of file