From 4544fce0153487f8407fdbea218c56a9241d980d Mon Sep 17 00:00:00 2001 From: Nomi Date: Tue, 26 Sep 2023 02:31:50 +0200 Subject: [PATCH] Stub GetSystemTime --- include/services/ptm.hpp | 2 ++ src/core/services/ptm.cpp | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/services/ptm.hpp b/include/services/ptm.hpp index ae845725..1ee84264 100644 --- a/include/services/ptm.hpp +++ b/include/services/ptm.hpp @@ -19,10 +19,12 @@ class PTMService { void getBatteryLevel(u32 messagePointer); void getStepHistory(u32 messagePointer); void getStepHistoryAll(u32 messagePointer); + void getSystemTime(u32 messagePointer); void getTotalStepCount(u32 messagePointer); public: enum class Type { + GETS, // ptm:gets U, // ptm:u SYSM, // ptm:sysm PLAY, // ptm:play diff --git a/src/core/services/ptm.cpp b/src/core/services/ptm.cpp index 071fa012..6f47996c 100644 --- a/src/core/services/ptm.cpp +++ b/src/core/services/ptm.cpp @@ -11,6 +11,9 @@ namespace PTMCommands { GetStepHistoryAll = 0x000F0084, ConfigureNew3DSCPU = 0x08180040, + // ptm:gets functions + GetSystemTime = 0x04010000, + // ptm:play functions GetPlayHistory = 0x08070082, GetPlayHistoryStart = 0x08080000, @@ -48,6 +51,12 @@ void PTMService::handleSyncRequest(u32 messagePointer, PTMService::Type type) { default: Helpers::panic("PTM PLAY service requested. Command: %08X\n", command); break; } + } else if (type == Type::GETS) { + switch (command) { + case PTMCommands::GetSystemTime: getSystemTime(messagePointer); break; + + default: Helpers::panic("PTM GETS service requested. Command: %08X\n", command); break; + } } else { Helpers::panic("PTM service requested. Command: %08X\n", command); } @@ -103,4 +112,11 @@ void PTMService::configureNew3DSCPU(u32 messagePointer) { log("PTM::ConfigureNew3DSCPU [stubbed]\n"); mem.write32(messagePointer, IPC::responseHeader(0x818, 1, 0)); mem.write32(messagePointer + 4, Result::Success); +} + +void PTMService::getSystemTime(u32 messagePointer) { + log("PTM::GetSystemTime [stubbed]\n"); + mem.write32(messagePointer, IPC::responseHeader(0x401, 3, 0)); + mem.write32(messagePointer + 4, Result::Success); + mem.write64(messagePointer + 8, 0); // Milliseconds since 2000? } \ No newline at end of file