mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-09-01 02:51:41 +00:00
[hle] Fixes for nxident, nxmp and nxplay, remove hbl.nsp workarounds (#3996)
adds `gpio` and `i2c` services implements `IApplicationFunctions::SetMediaPlaybackStateForApplicatio` stubs `IBtmSystemCore::GetDiscoveredAudioDevice` implements `nvhost_ctrl_gpu::PmuGetGpuLoad` IOCTL (0x20) implements `PSM::GetBatteryAgePercentage`, `PSM::GetBatteryVoltageState` and `PSM::GetBatteryChargeInfoFields` implements `ISystemSettingsServer::GetConsoleInformationUploadFlag`, `ISystemSettingsServer::SetConsoleInformationUploadFlag`, `ISystemSettingsServer::GetAutomaticApplicationDownloadFlag`, `ISystemSettingsServer::SetAutomaticApplicationDownloadFlag`, `&ISystemSettingsServer::GetUsb30EnableFlag`, `ISystemSettingsServer::SetUsb30EnableFlag` removes `hbl.nsp` specific workarounds Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3996 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: crueter <crueter@eden-emu.dev>
This commit is contained in:
@@ -6,10 +6,12 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "common/common_funcs.h"
|
||||
#include "common/device_power_state.h"
|
||||
#include "common/logging.h"
|
||||
#include "core/core.h"
|
||||
#include "core/hle/kernel/k_event.h"
|
||||
#include "core/hle/result.h"
|
||||
#include "core/hle/service/ipc_helpers.h"
|
||||
#include "core/hle/service/kernel_helpers.h"
|
||||
#include "core/hle/service/ptm/psm.h"
|
||||
@@ -134,12 +136,12 @@ PSM::PSM(Core::System& system_) : ServiceFramework{system_, "psm"} {
|
||||
{9, nullptr, "DisableEnoughPowerChargeEmulation"},
|
||||
{10, nullptr, "EnableFastBatteryCharging"},
|
||||
{11, nullptr, "DisableFastBatteryCharging"},
|
||||
{12, nullptr, "GetBatteryVoltageState"},
|
||||
{12, &PSM::GetBatteryVoltageState, "GetBatteryVoltageState"},
|
||||
{13, nullptr, "GetRawBatteryChargePercentage"},
|
||||
{14, nullptr, "IsEnoughPowerSupplied"},
|
||||
{15, nullptr, "GetBatteryAgePercentage"},
|
||||
{15, &PSM::GetBatteryAgePercentage, "GetBatteryAgePercentage"},
|
||||
{16, nullptr, "GetBatteryChargeInfoEvent"},
|
||||
{17, nullptr, "GetBatteryChargeInfoFields"},
|
||||
{17, &PSM::GetBatteryChargeInfoFields, "GetBatteryChargeInfoFields"},
|
||||
{18, nullptr, "GetBatteryChargeCalibratedEvent"},
|
||||
};
|
||||
// clang-format on
|
||||
@@ -187,4 +189,64 @@ void PSM::OpenSession(HLERequestContext& ctx) {
|
||||
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 {
|
||||
u32 input_current_limit; //mA
|
||||
u32 boost_mode_current_limit;
|
||||
u32 fast_charge_current_limit;
|
||||
u32 charge_voltage_limit;
|
||||
u32 charger_type;
|
||||
u8 hi2_mode;
|
||||
u8 battery_charging;
|
||||
INSERT_PADDING_BYTES_NOINIT(2);
|
||||
u32 vdd50_state;
|
||||
u32 temperature_celcius;
|
||||
f32 battery_charge_percentage;
|
||||
u32 battery_charge_milli_voltage;
|
||||
f32 battery_age_percentage;
|
||||
u32 usb_power_role;
|
||||
u32 usb_charger_type;
|
||||
u32 charger_input_voltage_limit;
|
||||
u32 charger_input_current_limit;
|
||||
u8 fast_battery_charging;
|
||||
u8 controller_power_supply;
|
||||
u8 otg_request;
|
||||
INSERT_PADDING_BYTES_NOINIT(1);
|
||||
INSERT_PADDING_BYTES_NOINIT(0x14); //[+17.0.0]
|
||||
};
|
||||
static_assert(sizeof(struct BatteryChargeInfoFields) == 0x54);
|
||||
void PSM::GetBatteryChargeInfoFields(HLERequestContext& ctx) {
|
||||
LOG_DEBUG(Service_PTM, "called");
|
||||
Common::PowerStatus power_status = Common::GetPowerStatus();
|
||||
|
||||
BatteryChargeInfoFields r{};
|
||||
r.battery_charge_percentage = f32(power_status.percentage); //100%
|
||||
r.battery_age_percentage = f32(power_status.percentage); //100%
|
||||
r.battery_charging = power_status.charging ? 1 : 0;
|
||||
r.charger_type = u32(power_status.has_battery && power_status.charging
|
||||
? 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};
|
||||
rb.Push(ResultSuccess);
|
||||
rb.PushRaw<BatteryChargeInfoFields>(r);
|
||||
}
|
||||
|
||||
} // namespace Service::PTM
|
||||
|
||||
Reference in New Issue
Block a user