extra battery states

This commit is contained in:
lizzie 2026-05-21 21:30:41 +00:00 committed by crueter
parent 37df681a2c
commit a280373f8e
3 changed files with 30 additions and 7 deletions

View file

@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later // SPDX-License-Identifier: GPL-3.0-or-later

View file

@ -136,10 +136,10 @@ PSM::PSM(Core::System& system_) : ServiceFramework{system_, "psm"} {
{9, nullptr, "DisableEnoughPowerChargeEmulation"}, {9, nullptr, "DisableEnoughPowerChargeEmulation"},
{10, nullptr, "EnableFastBatteryCharging"}, {10, nullptr, "EnableFastBatteryCharging"},
{11, nullptr, "DisableFastBatteryCharging"}, {11, nullptr, "DisableFastBatteryCharging"},
{12, nullptr, "GetBatteryVoltageState"}, {12, &PSM::GetBatteryVoltageState, "GetBatteryVoltageState"},
{13, nullptr, "GetRawBatteryChargePercentage"}, {13, nullptr, "GetRawBatteryChargePercentage"},
{14, nullptr, "IsEnoughPowerSupplied"}, {14, nullptr, "IsEnoughPowerSupplied"},
{15, nullptr, "GetBatteryAgePercentage"}, {15, &PSM::GetBatteryAgePercentage, "GetBatteryAgePercentage"},
{16, nullptr, "GetBatteryChargeInfoEvent"}, {16, nullptr, "GetBatteryChargeInfoEvent"},
{17, &PSM::GetBatteryChargeInfoFields, "GetBatteryChargeInfoFields"}, {17, &PSM::GetBatteryChargeInfoFields, "GetBatteryChargeInfoFields"},
{18, nullptr, "GetBatteryChargeCalibratedEvent"}, {18, nullptr, "GetBatteryChargeCalibratedEvent"},
@ -189,6 +189,20 @@ void PSM::OpenSession(HLERequestContext& ctx) {
rb.PushIpcInterface<IPsmSession>(system); rb.PushIpcInterface<IPsmSession>(system);
} }
void PSM::GetBatteryVoltageState(HLERequestContext& ctx) {
LOG_DEBUG(Service_PTM, "(stubbed)");
IPC::ResponseBuilder rb{ctx, 3};
rb.Push(ResultSuccess);
rb.PushRaw<u32>(0); //
}
void PSM::GetBatteryAgePercentage(HLERequestContext& ctx) {
LOG_DEBUG(Service_PTM, "(stubbed)");
IPC::ResponseBuilder rb{ctx, 3};
rb.Push(ResultSuccess);
rb.PushRaw<f64>(1.f);
}
struct BatteryChargeInfoFields { struct BatteryChargeInfoFields {
u32 input_current_limit; //mA u32 input_current_limit; //mA
u32 boost_mode_current_limit; u32 boost_mode_current_limit;
@ -200,9 +214,9 @@ struct BatteryChargeInfoFields {
INSERT_PADDING_BYTES_NOINIT(2); INSERT_PADDING_BYTES_NOINIT(2);
u32 vdd50_state; u32 vdd50_state;
u32 temperature_celcius; u32 temperature_celcius;
u32 battery_charge_percentage; f32 battery_charge_percentage;
u32 battery_charge_milli_voltage; u32 battery_charge_milli_voltage;
u32 battery_age_percentage; f32 battery_age_percentage;
u32 usb_power_role; u32 usb_power_role;
u32 usb_charger_type; u32 usb_charger_type;
u32 charger_input_voltage_limit; u32 charger_input_voltage_limit;
@ -214,17 +228,21 @@ struct BatteryChargeInfoFields {
INSERT_PADDING_BYTES_NOINIT(0x14); //[+17.0.0] INSERT_PADDING_BYTES_NOINIT(0x14); //[+17.0.0]
}; };
static_assert(sizeof(struct BatteryChargeInfoFields) == 0x54); static_assert(sizeof(struct BatteryChargeInfoFields) == 0x54);
void PSM::GetBatteryChargeInfoFields(HLERequestContext& ctx) { void PSM::GetBatteryChargeInfoFields(HLERequestContext& ctx) {
LOG_DEBUG(Service_PTM, "called"); LOG_DEBUG(Service_PTM, "called");
Common::PowerStatus power_status = Common::GetPowerStatus(); Common::PowerStatus power_status = Common::GetPowerStatus();
BatteryChargeInfoFields r{}; BatteryChargeInfoFields r{};
r.battery_charge_percentage = power_status.percentage; //100% r.battery_charge_percentage = f32(power_status.percentage); //100%
r.battery_age_percentage = power_status.percentage; //100% r.battery_age_percentage = f32(power_status.percentage); //100%
r.battery_charging = power_status.charging ? 1 : 0; r.battery_charging = power_status.charging ? 1 : 0;
r.charger_type = u32(power_status.has_battery && power_status.charging r.charger_type = u32(power_status.has_battery && power_status.charging
? ChargerType::RegularCharger : ChargerType::Unplugged); ? ChargerType::RegularCharger : ChargerType::Unplugged);
r.charger_input_voltage_limit = 100;
r.charger_input_voltage_limit = 100;
r.input_current_limit = 100;
r.boost_mode_current_limit = 100;
r.fast_charge_current_limit = 100;
IPC::ResponseBuilder rb{ctx, 3}; IPC::ResponseBuilder rb{ctx, 3};
rb.Push(ResultSuccess); rb.Push(ResultSuccess);

View file

@ -25,6 +25,8 @@ private:
void GetBatteryChargePercentage(HLERequestContext& ctx); void GetBatteryChargePercentage(HLERequestContext& ctx);
void GetChargerType(HLERequestContext& ctx); void GetChargerType(HLERequestContext& ctx);
void OpenSession(HLERequestContext& ctx); void OpenSession(HLERequestContext& ctx);
void GetBatteryVoltageState(HLERequestContext& ctx);
void GetBatteryAgePercentage(HLERequestContext& ctx);
void GetBatteryChargeInfoFields(HLERequestContext& ctx); void GetBatteryChargeInfoFields(HLERequestContext& ctx);
}; };