diff options
author | Liam <byteslice@airmail.cc> | 2024-02-12 02:16:38 +0100 |
---|---|---|
committer | Liam <byteslice@airmail.cc> | 2024-02-12 15:16:03 +0100 |
commit | 79f225bd5979f058b682845bcafa9a34af8fdc4e (patch) | |
tree | af98ed7a3ab6d0ac308fb476bfa7f35ced058e58 /src/core/hle/service/am | |
parent | am: rewrite ILibraryAppletSelfAccessor (diff) | |
download | yuzu-79f225bd5979f058b682845bcafa9a34af8fdc4e.tar yuzu-79f225bd5979f058b682845bcafa9a34af8fdc4e.tar.gz yuzu-79f225bd5979f058b682845bcafa9a34af8fdc4e.tar.bz2 yuzu-79f225bd5979f058b682845bcafa9a34af8fdc4e.tar.lz yuzu-79f225bd5979f058b682845bcafa9a34af8fdc4e.tar.xz yuzu-79f225bd5979f058b682845bcafa9a34af8fdc4e.tar.zst yuzu-79f225bd5979f058b682845bcafa9a34af8fdc4e.zip |
Diffstat (limited to 'src/core/hle/service/am')
-rw-r--r-- | src/core/hle/service/am/process_winding_controller.cpp | 56 | ||||
-rw-r--r-- | src/core/hle/service/am/service/application_proxy.cpp | 2 | ||||
-rw-r--r-- | src/core/hle/service/am/service/library_applet_proxy.cpp | 2 | ||||
-rw-r--r-- | src/core/hle/service/am/service/process_winding_controller.cpp | 54 | ||||
-rw-r--r-- | src/core/hle/service/am/service/process_winding_controller.h (renamed from src/core/hle/service/am/process_winding_controller.h) | 10 | ||||
-rw-r--r-- | src/core/hle/service/am/service/system_applet_proxy.cpp | 2 |
6 files changed, 64 insertions, 62 deletions
diff --git a/src/core/hle/service/am/process_winding_controller.cpp b/src/core/hle/service/am/process_winding_controller.cpp deleted file mode 100644 index bc5a50a3d..000000000 --- a/src/core/hle/service/am/process_winding_controller.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "core/hle/service/am/frontend/applets.h" -#include "core/hle/service/am/process_winding_controller.h" -#include "core/hle/service/am/service/library_applet_accessor.h" -#include "core/hle/service/ipc_helpers.h" - -namespace Service::AM { - -IProcessWindingController::IProcessWindingController(Core::System& system_, - std::shared_ptr<Applet> applet_) - : ServiceFramework{system_, "IProcessWindingController"}, applet{std::move(applet_)} { - // clang-format off - static const FunctionInfo functions[] = { - {0, &IProcessWindingController::GetLaunchReason, "GetLaunchReason"}, - {11, &IProcessWindingController::OpenCallingLibraryApplet, "OpenCallingLibraryApplet"}, - {21, nullptr, "PushContext"}, - {22, nullptr, "PopContext"}, - {23, nullptr, "CancelWindingReservation"}, - {30, nullptr, "WindAndDoReserved"}, - {40, nullptr, "ReserveToStartAndWaitAndUnwindThis"}, - {41, nullptr, "ReserveToStartAndWait"}, - }; - // clang-format on - - RegisterHandlers(functions); -} - -IProcessWindingController::~IProcessWindingController() = default; - -void IProcessWindingController::GetLaunchReason(HLERequestContext& ctx) { - LOG_WARNING(Service_AM, "(STUBBED) called"); - - IPC::ResponseBuilder rb{ctx, 3}; - rb.Push(ResultSuccess); - rb.PushRaw(applet->launch_reason); -} - -void IProcessWindingController::OpenCallingLibraryApplet(HLERequestContext& ctx) { - const auto caller_applet = applet->caller_applet.lock(); - if (caller_applet == nullptr) { - LOG_ERROR(Service_AM, "No calling applet available"); - - IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(ResultUnknown); - return; - } - - IPC::ResponseBuilder rb{ctx, 2, 0, 1}; - rb.Push(ResultSuccess); - rb.PushIpcInterface<ILibraryAppletAccessor>(system, applet->caller_applet_broker, - caller_applet); -} - -} // namespace Service::AM diff --git a/src/core/hle/service/am/service/application_proxy.cpp b/src/core/hle/service/am/service/application_proxy.cpp index c9b872887..5f5a8f06c 100644 --- a/src/core/hle/service/am/service/application_proxy.cpp +++ b/src/core/hle/service/am/service/application_proxy.cpp @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include "core/hle/service/am/process_winding_controller.h" #include "core/hle/service/am/self_controller.h" #include "core/hle/service/am/service/applet_common_functions.h" #include "core/hle/service/am/service/application_functions.h" @@ -11,6 +10,7 @@ #include "core/hle/service/am/service/debug_functions.h" #include "core/hle/service/am/service/display_controller.h" #include "core/hle/service/am/service/library_applet_creator.h" +#include "core/hle/service/am/service/process_winding_controller.h" #include "core/hle/service/am/window_controller.h" #include "core/hle/service/cmif_serialization.h" diff --git a/src/core/hle/service/am/service/library_applet_proxy.cpp b/src/core/hle/service/am/service/library_applet_proxy.cpp index 9506739e9..91aa9f4db 100644 --- a/src/core/hle/service/am/service/library_applet_proxy.cpp +++ b/src/core/hle/service/am/service/library_applet_proxy.cpp @@ -1,7 +1,6 @@ // SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later -#include "core/hle/service/am/process_winding_controller.h" #include "core/hle/service/am/self_controller.h" #include "core/hle/service/am/service/applet_common_functions.h" #include "core/hle/service/am/service/audio_controller.h" @@ -13,6 +12,7 @@ #include "core/hle/service/am/service/library_applet_creator.h" #include "core/hle/service/am/service/library_applet_proxy.h" #include "core/hle/service/am/service/library_applet_self_accessor.h" +#include "core/hle/service/am/service/process_winding_controller.h" #include "core/hle/service/am/window_controller.h" #include "core/hle/service/cmif_serialization.h" diff --git a/src/core/hle/service/am/service/process_winding_controller.cpp b/src/core/hle/service/am/service/process_winding_controller.cpp new file mode 100644 index 000000000..10df830d7 --- /dev/null +++ b/src/core/hle/service/am/service/process_winding_controller.cpp @@ -0,0 +1,54 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/am/frontend/applets.h" +#include "core/hle/service/am/service/library_applet_accessor.h" +#include "core/hle/service/am/service/process_winding_controller.h" +#include "core/hle/service/cmif_serialization.h" + +namespace Service::AM { + +IProcessWindingController::IProcessWindingController(Core::System& system_, + std::shared_ptr<Applet> applet) + : ServiceFramework{system_, "IProcessWindingController"}, m_applet{std::move(applet)} { + // clang-format off + static const FunctionInfo functions[] = { + {0, D<&IProcessWindingController::GetLaunchReason>, "GetLaunchReason"}, + {11, D<&IProcessWindingController::OpenCallingLibraryApplet>, "OpenCallingLibraryApplet"}, + {21, nullptr, "PushContext"}, + {22, nullptr, "PopContext"}, + {23, nullptr, "CancelWindingReservation"}, + {30, nullptr, "WindAndDoReserved"}, + {40, nullptr, "ReserveToStartAndWaitAndUnwindThis"}, + {41, nullptr, "ReserveToStartAndWait"}, + }; + // clang-format on + + RegisterHandlers(functions); +} + +IProcessWindingController::~IProcessWindingController() = default; + +Result IProcessWindingController::GetLaunchReason( + Out<AppletProcessLaunchReason> out_launch_reason) { + LOG_INFO(Service_AM, "called"); + *out_launch_reason = m_applet->launch_reason; + R_SUCCEED(); +} + +Result IProcessWindingController::OpenCallingLibraryApplet( + Out<SharedPointer<ILibraryAppletAccessor>> out_calling_library_applet) { + LOG_INFO(Service_AM, "called"); + + const auto caller_applet = m_applet->caller_applet.lock(); + if (caller_applet == nullptr) { + LOG_ERROR(Service_AM, "No caller applet available"); + R_THROW(ResultUnknown); + } + + *out_calling_library_applet = std::make_shared<ILibraryAppletAccessor>( + system, m_applet->caller_applet_broker, caller_applet); + R_SUCCEED(); +} + +} // namespace Service::AM diff --git a/src/core/hle/service/am/process_winding_controller.h b/src/core/hle/service/am/service/process_winding_controller.h index 71ae4c4f5..4408af1f1 100644 --- a/src/core/hle/service/am/process_winding_controller.h +++ b/src/core/hle/service/am/service/process_winding_controller.h @@ -3,11 +3,14 @@ #pragma once +#include "core/hle/service/am/am_types.h" +#include "core/hle/service/cmif_types.h" #include "core/hle/service/service.h" namespace Service::AM { struct Applet; +class ILibraryAppletAccessor; class IProcessWindingController final : public ServiceFramework<IProcessWindingController> { public: @@ -15,10 +18,11 @@ public: ~IProcessWindingController() override; private: - void GetLaunchReason(HLERequestContext& ctx); - void OpenCallingLibraryApplet(HLERequestContext& ctx); + Result GetLaunchReason(Out<AppletProcessLaunchReason> out_launch_reason); + Result OpenCallingLibraryApplet( + Out<SharedPointer<ILibraryAppletAccessor>> out_calling_library_applet); - const std::shared_ptr<Applet> applet; + const std::shared_ptr<Applet> m_applet; }; } // namespace Service::AM diff --git a/src/core/hle/service/am/service/system_applet_proxy.cpp b/src/core/hle/service/am/service/system_applet_proxy.cpp index 1e931dec7..0f6175d32 100644 --- a/src/core/hle/service/am/service/system_applet_proxy.cpp +++ b/src/core/hle/service/am/service/system_applet_proxy.cpp @@ -2,7 +2,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "core/hle/service/am/application_creator.h" -#include "core/hle/service/am/process_winding_controller.h" #include "core/hle/service/am/self_controller.h" #include "core/hle/service/am/service/applet_common_functions.h" #include "core/hle/service/am/service/audio_controller.h" @@ -12,6 +11,7 @@ #include "core/hle/service/am/service/global_state_controller.h" #include "core/hle/service/am/service/home_menu_functions.h" #include "core/hle/service/am/service/library_applet_creator.h" +#include "core/hle/service/am/service/process_winding_controller.h" #include "core/hle/service/am/service/system_applet_proxy.h" #include "core/hle/service/am/window_controller.h" #include "core/hle/service/cmif_serialization.h" |