diff options
| author | lizzie <lizzie@eden-emu.dev> | 2026-09-08 20:39:55 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-09-08 20:39:55 +0200 |
| commit | 87e5d0b6e490d56fbbe4e770a80e2fbd31aff2ae (patch) | |
| tree | 3274ca98337fbad75c0386dbcd2cae70431e1dad /src/core/hle/service/am | |
| parent | fdd8d4252c60b055cac2d792b414ba15046d484d (diff) | |
[hle] VirtualBoy classics fixes, QLaunch IPC fixes, implement extra ams SVCInfo (#4343)
Signed-off-by: lizzie <lizzie@eden-emu.dev>
- [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions).
- [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md)
- [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability.
-------------------
`OpenSystemApplicationProxy`
`OpenSystemApplicationProxy`
ALSO yes those cmds DO NOT take an attribute
Implemented SVC infos to match Atmosphere's values
Implement more stub I2C session cmds
stub CMD2103 for rhythm groove
better error handling on svc get info to match ams (see ams svc info)
Virtual Boy classic fix adept from https://git.ryujinx.app/projects/Kenji-NX/commit/2288084b531b185f5840a696b23265014f07e2f2 by @Mythrax
acc:u1 was missing the *Deprecated cmd
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4343
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Diffstat (limited to 'src/core/hle/service/am')
6 files changed, 85 insertions, 20 deletions
diff --git a/src/core/hle/service/am/am_types.h b/src/core/hle/service/am/am_types.h index f88f91ae47..6b7cbbc12a 100644 --- a/src/core/hle/service/am/am_types.h +++ b/src/core/hle/service/am/am_types.h @@ -154,6 +154,7 @@ enum class AppletMessage : u32 { DetectLongPressingCaptureButton = 91, AlbumScreenShotTaken = 92, AlbumRecordingSaved = 93, + StartupLogoDisappeared = 95, }; enum class LibraryAppletMode : u32 { diff --git a/src/core/hle/service/am/applet.h b/src/core/hle/service/am/applet.h index 73303b2e66..571fa65219 100644 --- a/src/core/hle/service/am/applet.h +++ b/src/core/hle/service/am/applet.h @@ -91,6 +91,7 @@ struct Applet { // Common state bool sleep_lock_enabled{}; bool vr_mode_enabled{}; + bool vr_mode_enabled_3d{}; bool lcd_backlight_off_enabled{}; APM::CpuBoostMode boost_mode{}; bool request_exit_to_library_applet_at_execute_next_program_enabled{}; diff --git a/src/core/hle/service/am/service/all_system_applet_proxies_service.cpp b/src/core/hle/service/am/service/all_system_applet_proxies_service.cpp index 562d95f001..437032c2f4 100644 --- a/src/core/hle/service/am/service/all_system_applet_proxies_service.cpp +++ b/src/core/hle/service/am/service/all_system_applet_proxies_service.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project @@ -73,8 +73,7 @@ Result IAllSystemAppletProxiesService::OpenLibraryAppletProxy( Result IAllSystemAppletProxiesService::OpenOverlayAppletProxy( Out<SharedPointer<IOverlayAppletProxy>> out_overlay_applet_proxy, ClientProcessId pid, - InCopyHandle<Kernel::KProcess> process_handle, - InLargeData<AppletAttribute, BufferAttr_HipcMapAlias> attribute) { + InCopyHandle<Kernel::KProcess> process_handle) { LOG_WARNING(Service_AM, "called"); if (const auto applet = this->GetAppletFromProcessId(pid); applet) { @@ -89,8 +88,7 @@ Result IAllSystemAppletProxiesService::OpenOverlayAppletProxy( Result IAllSystemAppletProxiesService::OpenSystemApplicationProxy( Out<SharedPointer<IApplicationProxy>> out_system_application_proxy, ClientProcessId pid, - InCopyHandle<Kernel::KProcess> process_handle, - InLargeData<AppletAttribute, BufferAttr_HipcMapAlias> attribute) { + InCopyHandle<Kernel::KProcess> process_handle) { LOG_DEBUG(Service_AM, "called"); if (const auto applet = this->GetAppletFromProcessId(pid); applet) { diff --git a/src/core/hle/service/am/service/all_system_applet_proxies_service.h b/src/core/hle/service/am/service/all_system_applet_proxies_service.h index eccd92a376..73cb8a09ac 100644 --- a/src/core/hle/service/am/service/all_system_applet_proxies_service.h +++ b/src/core/hle/service/am/service/all_system_applet_proxies_service.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project @@ -36,15 +36,13 @@ private: InCopyHandle<Kernel::KProcess> process_handle, InLargeData<AppletAttribute, BufferAttr_HipcMapAlias> attribute); Result OpenOverlayAppletProxy(Out<SharedPointer<IOverlayAppletProxy>> out_overlay_applet_proxy, - ClientProcessId pid, InCopyHandle<Kernel::KProcess> process_handle, - InLargeData<AppletAttribute, BufferAttr_HipcMapAlias> attribute); + ClientProcessId pid, InCopyHandle<Kernel::KProcess> process_handle); Result OpenLibraryAppletProxyOld( Out<SharedPointer<ILibraryAppletProxy>> out_library_applet_proxy, ClientProcessId pid, InCopyHandle<Kernel::KProcess> process_handle); Result OpenSystemApplicationProxy( Out<SharedPointer<IApplicationProxy>> out_system_application_proxy, ClientProcessId pid, - InCopyHandle<Kernel::KProcess> process_handle, - InLargeData<AppletAttribute, BufferAttr_HipcMapAlias> attribute); + InCopyHandle<Kernel::KProcess> process_handle); Result GetSystemProcessCommonFunctions(); Result GetAppletAlternativeFunctions(); diff --git a/src/core/hle/service/am/service/common_state_getter.cpp b/src/core/hle/service/am/service/common_state_getter.cpp index 23f67dcf17..044929e434 100644 --- a/src/core/hle/service/am/service/common_state_getter.cpp +++ b/src/core/hle/service/am/service/common_state_getter.cpp @@ -39,7 +39,7 @@ ICommonStateGetter::ICommonStateGetter(Core::System& system_, std::shared_ptr<Ap {14, nullptr, "GetWakeupCount"}, //11.0.0+ {15, nullptr, "Unknown15"}, //19.0.0+ {20, D<&ICommonStateGetter::PushToGeneralChannel>, "PushToGeneralChannel"}, - {30, nullptr, "GetHomeButtonReaderLockAccessor"}, + {30, D<&ICommonStateGetter::GetHomeButtonReaderLockAccessor>, "GetHomeButtonReaderLockAccessor"}, {31, D<&ICommonStateGetter::GetReaderLockAccessorEx>, "GetReaderLockAccessorEx"}, //2.0.0+ {32, D<&ICommonStateGetter::GetWriterLockAccessorEx>, "GetWriterLockAccessorEx"}, //7.0.0+ {40, nullptr, "GetCradleFwVersion"}, //2.0.0+ @@ -65,7 +65,7 @@ ICommonStateGetter::ICommonStateGetter(Core::System& system_, std::shared_ptr<Ap {100, D<&ICommonStateGetter::SetHandlingHomeButtonShortPressedEnabled>, "SetHandlingHomeButtonShortPressedEnabled"}, {110, nullptr, "OpenMyGpuErrorHandler"}, {120, D<&ICommonStateGetter::GetAppletLaunchedHistory>, "GetAppletLaunchedHistory"}, //13.0.0+ - {130, nullptr, "Unknown130"}, //21.0.0+ + {130, D<&ICommonStateGetter::EnableStartupLogoDisappearedMessage>, "EnableStartupLogoDisappearedMessage"}, //21.0.0+ {200, D<&ICommonStateGetter::GetOperationModeSystemInfo>, "GetOperationModeSystemInfo"}, {300, D<&ICommonStateGetter::GetSettingsPlatformRegion>, "GetSettingsPlatformRegion"}, {400, nullptr, "ActivateMigrationService"}, @@ -74,14 +74,17 @@ ICommonStateGetter::ICommonStateGetter(Core::System& system_, std::shared_ptr<Ap {501, nullptr, "SuppressDisablingSleepTemporarily"}, {502, nullptr, "IsSleepEnabled"}, {503, nullptr, "IsDisablingSleepSuppressed"}, - {600, nullptr, "Unknown600"}, //20.0.0+ + {600, nullptr, "SetHidInputMagnificationForApplication"}, //20.0.0+ {610, D<&ICommonStateGetter::Unknown610>, "Unknown610"}, //21.0.0+ {611, D<&ICommonStateGetter::Unknown611>, "Unknown611"}, //22.0.0+ {900, D<&ICommonStateGetter::SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled>, "SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled"}, //11.0.0+ {910, nullptr, "GetLaunchRequiredTick"}, //17.0.0+ - {1000, nullptr, "BeginVrMode3d"}, //19.0.0+ - {1001, nullptr, "EndVrMode3d"}, //19.0.0+ - {1002, nullptr, "IsVrModeEnabled3d"}, //19.0.0+ + {1000, D<&ICommonStateGetter::BeginVrMode3d>, "BeginVrMode3d"}, //19.0.0+ + {1001, D<&ICommonStateGetter::EndVrMode3d>, "EndVrMode3d"}, //19.0.0+ + {1002, D<&ICommonStateGetter::IsVrModeEnabled3d>, "IsVrModeEnabled3d"}, //19.0.0+ + {1003, D<&ICommonStateGetter::GetVrLaboGoggleViewport>, "GetVrLaboGoggleViewport"}, //21.0.0+ + {1004, D<&ICommonStateGetter::GetPanelPhysicalSizeForSpecificTitle>, "GetPanelPhysicalSizeForSpecificTitle"}, //21.0.0+ + {1005, D<&ICommonStateGetter::GetPanelResolutionForSpecificTitle>, "GetPanelResolutionForSpecificTitle"}, //21.0.0+ }; // clang-format on @@ -311,6 +314,12 @@ Result ICommonStateGetter::PerformSystemButtonPressingIfInFocus(SystemButtonType R_SUCCEED(); } +Result ICommonStateGetter::EnableStartupLogoDisappearedMessage() { + LOG_WARNING(Service_AM, "(STUBBED) called"); + m_applet->lifecycle_manager.PushUnorderedMessage(system.Kernel(), AppletMessage::StartupLogoDisappeared); + R_SUCCEED(); +} + Result ICommonStateGetter::GetOperationModeSystemInfo(Out<u32> out_operation_mode_system_info) { LOG_WARNING(Service_AM, "(STUBBED) called"); *out_operation_mode_system_info = 0; @@ -355,6 +364,12 @@ Result ICommonStateGetter::PushToGeneralChannel(SharedPointer<IStorage> storage) R_SUCCEED(); } +Result ICommonStateGetter::GetHomeButtonReaderLockAccessor(Out<SharedPointer<ILockAccessor>> out_lock_accessor) { + LOG_DEBUG(Service_AM, "called"); + *out_lock_accessor = std::make_shared<ILockAccessor>(system); + R_SUCCEED(); +} + Result ICommonStateGetter::SetHandlingHomeButtonShortPressedEnabled(bool enabled) { LOG_DEBUG(Service_AM, "called, enabled={} applet_id={}", enabled, m_applet->applet_id); @@ -363,13 +378,57 @@ Result ICommonStateGetter::SetHandlingHomeButtonShortPressedEnabled(bool enabled R_SUCCEED(); } -Result ICommonStateGetter::Unknown610() { +Result ICommonStateGetter::Unknown610(u64 unk) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + R_SUCCEED(); +} + +Result ICommonStateGetter::Unknown611(u8 unk) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + R_SUCCEED(); +} + +Result ICommonStateGetter::BeginVrMode3d() { + std::scoped_lock lk{m_applet->lock}; + m_applet->vr_mode_enabled_3d = true; + LOG_WARNING(Service_AM, "VR Mode is {}", m_applet->vr_mode_enabled_3d ? "on" : "off"); + R_SUCCEED(); +} + +Result ICommonStateGetter::EndVrMode3d() { + std::scoped_lock lk{m_applet->lock}; + m_applet->vr_mode_enabled_3d = false; + LOG_WARNING(Service_AM, "VR Mode is {}", m_applet->vr_mode_enabled_3d ? "on" : "off"); + R_SUCCEED(); +} + +Result ICommonStateGetter::IsVrModeEnabled3d(Out<bool> out_is_vr_mode_enabled_3d) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + std::scoped_lock lk{m_applet->lock}; + *out_is_vr_mode_enabled_3d = m_applet->vr_mode_enabled_3d; + R_SUCCEED(); +} + +Result ICommonStateGetter::GetVrLaboGoggleViewport(Out<s32> out_x, Out<s32> out_y, Out<s32> out_width, Out<s32> out_height) { + LOG_WARNING(Service_AM, "(STUBBED) called"); + *out_x = 0; + *out_y = 0; + *out_width = 1280; + *out_height = 720; + R_SUCCEED(); +} + +Result ICommonStateGetter::GetPanelPhysicalSizeForSpecificTitle(Out<f32> out_width, Out<f32> out_height) { LOG_WARNING(Service_AM, "(STUBBED) called"); + *out_width = 137250.0f / 1000.0f; + *out_height = 77200.0f / 1000.0f; R_SUCCEED(); } -Result ICommonStateGetter::Unknown611() { +Result ICommonStateGetter::GetPanelResolutionForSpecificTitle(Out<s32> out_width, Out<s32> out_height) { LOG_WARNING(Service_AM, "(STUBBED) called"); + *out_width = 1280; + *out_height = 720; R_SUCCEED(); } diff --git a/src/core/hle/service/am/service/common_state_getter.h b/src/core/hle/service/am/service/common_state_getter.h index c1bec4f2a2..da86b5d079 100644 --- a/src/core/hle/service/am/service/common_state_getter.h +++ b/src/core/hle/service/am/service/common_state_getter.h @@ -56,15 +56,23 @@ private: Result GetDefaultDisplayResolution(Out<s32> out_width, Out<s32> out_height); Result GetBuiltInDisplayType(Out<s32> out_display_type); Result PerformSystemButtonPressingIfInFocus(SystemButtonType type); + Result EnableStartupLogoDisappearedMessage(); Result GetOperationModeSystemInfo(Out<u32> out_operation_mode_system_info); Result GetAppletLaunchedHistory(Out<s32> out_count, OutArray<AppletId, BufferAttr_HipcMapAlias> out_applet_ids); Result GetSettingsPlatformRegion(Out<Set::PlatformRegion> out_settings_platform_region); Result SetRequestExitToLibraryAppletAtExecuteNextProgramEnabled(); Result PushToGeneralChannel(SharedPointer<IStorage> storage); // cmd 20 + Result GetHomeButtonReaderLockAccessor(Out<SharedPointer<ILockAccessor>> out_lock_accessor); Result SetHandlingHomeButtonShortPressedEnabled(bool enabled); - Result Unknown610(); - Result Unknown611(); + Result Unknown610(u64 unk); + Result Unknown611(u8 unk); + Result BeginVrMode3d(); + Result EndVrMode3d(); + Result IsVrModeEnabled3d(Out<bool> out_is_vr_mode_enabled_3d); + Result GetVrLaboGoggleViewport(Out<s32> out_x, Out<s32> out_y, Out<s32> out_width, Out<s32> out_height); + Result GetPanelPhysicalSizeForSpecificTitle(Out<f32> out_width, Out<f32> out_height); + Result GetPanelResolutionForSpecificTitle(Out<s32> out_width, Out<s32> out_height); void SetCpuBoostMode(HLERequestContext& ctx); |
