diff --git a/include/services/act.hpp b/include/services/act.hpp index e39c5491..92c69c60 100644 --- a/include/services/act.hpp +++ b/include/services/act.hpp @@ -13,6 +13,7 @@ class ACTService { // Service commands void initialize(u32 messagePointer); void generateUUID(u32 messagePointer); + void getAccountDataBlock(u32 messagePointer); public: ACTService(Memory& mem) : mem(mem) {} diff --git a/src/core/services/act.cpp b/src/core/services/act.cpp index ee4e91e8..7a89e933 100644 --- a/src/core/services/act.cpp +++ b/src/core/services/act.cpp @@ -4,7 +4,8 @@ namespace ACTCommands { enum : u32 { Initialize = 0x00010084, - GenerateUUID = 0x000D0040 + GetAccountDataBlock = 0x000600C2, + GenerateUUID = 0x000D0040, }; } @@ -14,6 +15,7 @@ void ACTService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { case ACTCommands::GenerateUUID: generateUUID(messagePointer); break; + case ACTCommands::GetAccountDataBlock: getAccountDataBlock(messagePointer); break; case ACTCommands::Initialize: initialize(messagePointer); break; default: Helpers::panic("ACT service requested. Command: %08X\n", command); } @@ -32,4 +34,17 @@ void ACTService::generateUUID(u32 messagePointer) { // TODO: The header is probably wrong mem.write32(messagePointer, IPC::responseHeader(0xD, 1, 0)); mem.write32(messagePointer + 4, Result::Success); +} + +void ACTService::getAccountDataBlock(u32 messagePointer) { + log("ACT::GetAccountDataBlock (stubbed)\n"); + + const u32 size = mem.read32(messagePointer + 8); + const u32 blkID = mem.read32(messagePointer + 12); + const u32 outputPointer = mem.read32(messagePointer + 20); + + // TODO: This header is probably also wrong + // Also we need to populate the data block here. Half of it is undocumented though >_< + mem.write32(messagePointer, IPC::responseHeader(0x6, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file