summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/am
diff options
context:
space:
mode:
authorLiam <byteslice@airmail.cc>2024-02-12 02:16:38 +0100
committerLiam <byteslice@airmail.cc>2024-02-12 15:16:03 +0100
commit79f225bd5979f058b682845bcafa9a34af8fdc4e (patch)
treeaf98ed7a3ab6d0ac308fb476bfa7f35ced058e58 /src/core/hle/service/am
parentam: rewrite ILibraryAppletSelfAccessor (diff)
downloadyuzu-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.cpp56
-rw-r--r--src/core/hle/service/am/service/application_proxy.cpp2
-rw-r--r--src/core/hle/service/am/service/library_applet_proxy.cpp2
-rw-r--r--src/core/hle/service/am/service/process_winding_controller.cpp54
-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.cpp2
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"