From 82ded962d09c3654585bddaf88d4e793349fcfd3 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Aug 2023 17:06:32 +0300 Subject: [PATCH] Add PTM::GetBatteryChargeState --- include/services/ptm.hpp | 1 + src/core/services/ptm.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/include/services/ptm.hpp b/include/services/ptm.hpp index 62fa6f65..1f887aea 100644 --- a/include/services/ptm.hpp +++ b/include/services/ptm.hpp @@ -16,6 +16,7 @@ class PTMService { // Service commands void configureNew3DSCPU(u32 messagePointer); void getAdapterState(u32 messagePointer); + void getBatteryChargeState(u32 messagePointer); void getBatteryLevel(u32 messagePointer); void getStepHistory(u32 messagePointer); void getTotalStepCount(u32 messagePointer); diff --git a/src/core/services/ptm.cpp b/src/core/services/ptm.cpp index 57fbf638..1c822fcf 100644 --- a/src/core/services/ptm.cpp +++ b/src/core/services/ptm.cpp @@ -5,6 +5,7 @@ namespace PTMCommands { enum : u32 { GetAdapterState = 0x00050000, GetBatteryLevel = 0x00070000, + GetBatteryChargeState = 0x00080000, GetStepHistory = 0x000B00C2, GetTotalStepCount = 0x000C0000, ConfigureNew3DSCPU = 0x08180040, @@ -18,6 +19,7 @@ void PTMService::handleSyncRequest(u32 messagePointer) { switch (command) { case PTMCommands::ConfigureNew3DSCPU: configureNew3DSCPU(messagePointer); break; case PTMCommands::GetAdapterState: getAdapterState(messagePointer); break; + case PTMCommands::GetBatteryChargeState: getBatteryChargeState(messagePointer); break; case PTMCommands::GetBatteryLevel: getBatteryLevel(messagePointer); break; case PTMCommands::GetStepHistory: getStepHistory(messagePointer); break; case PTMCommands::GetTotalStepCount: getTotalStepCount(messagePointer); break; @@ -33,6 +35,16 @@ void PTMService::getAdapterState(u32 messagePointer) { mem.write8(messagePointer + 8, config.chargerPlugged ? 1 : 0); } +void PTMService::getBatteryChargeState(u32 messagePointer) { + log("PTM::GetBatteryChargeState"); + // We're only charging if the battery is not already full + const bool charging = config.chargerPlugged && (config.batteryPercentage < 100); + + mem.write32(messagePointer, IPC::responseHeader(0x7, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + mem.write8(messagePointer + 8, charging ? 1 : 0); +} + void PTMService::getBatteryLevel(u32 messagePointer) { log("PTM::GetBatteryLevel");