6 changed files with 193 additions and 184 deletions
-
4src/core/CMakeLists.txt
-
143src/core/hle/service/am/library_applet_proxy.cpp
-
36src/core/hle/service/am/library_applet_proxy.h
-
6src/core/hle/service/am/service/all_system_applet_proxies_service.cpp
-
133src/core/hle/service/am/service/library_applet_proxy.cpp
-
55src/core/hle/service/am/service/library_applet_proxy.h
@ -1,143 +0,0 @@ |
|||||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||
|
|
||||
#include "core/hle/service/am/applet_common_functions.h"
|
|
||||
#include "core/hle/service/am/audio_controller.h"
|
|
||||
#include "core/hle/service/am/common_state_getter.h"
|
|
||||
#include "core/hle/service/am/debug_functions.h"
|
|
||||
#include "core/hle/service/am/display_controller.h"
|
|
||||
#include "core/hle/service/am/global_state_controller.h"
|
|
||||
#include "core/hle/service/am/home_menu_functions.h"
|
|
||||
#include "core/hle/service/am/library_applet_creator.h"
|
|
||||
#include "core/hle/service/am/library_applet_proxy.h"
|
|
||||
#include "core/hle/service/am/library_applet_self_accessor.h"
|
|
||||
#include "core/hle/service/am/process_winding_controller.h"
|
|
||||
#include "core/hle/service/am/self_controller.h"
|
|
||||
#include "core/hle/service/am/window_controller.h"
|
|
||||
#include "core/hle/service/ipc_helpers.h"
|
|
||||
|
|
||||
namespace Service::AM { |
|
||||
|
|
||||
ILibraryAppletProxy::ILibraryAppletProxy(Nvnflinger::Nvnflinger& nvnflinger_, |
|
||||
std::shared_ptr<Applet> applet_, Core::System& system_) |
|
||||
: ServiceFramework{system_, "ILibraryAppletProxy"}, nvnflinger{nvnflinger_}, applet{std::move( |
|
||||
applet_)} { |
|
||||
// clang-format off
|
|
||||
static const FunctionInfo functions[] = { |
|
||||
{0, &ILibraryAppletProxy::GetCommonStateGetter, "GetCommonStateGetter"}, |
|
||||
{1, &ILibraryAppletProxy::GetSelfController, "GetSelfController"}, |
|
||||
{2, &ILibraryAppletProxy::GetWindowController, "GetWindowController"}, |
|
||||
{3, &ILibraryAppletProxy::GetAudioController, "GetAudioController"}, |
|
||||
{4, &ILibraryAppletProxy::GetDisplayController, "GetDisplayController"}, |
|
||||
{10, &ILibraryAppletProxy::GetProcessWindingController, "GetProcessWindingController"}, |
|
||||
{11, &ILibraryAppletProxy::GetLibraryAppletCreator, "GetLibraryAppletCreator"}, |
|
||||
{20, &ILibraryAppletProxy::OpenLibraryAppletSelfAccessor, "OpenLibraryAppletSelfAccessor"}, |
|
||||
{21, &ILibraryAppletProxy::GetAppletCommonFunctions, "GetAppletCommonFunctions"}, |
|
||||
{22, &ILibraryAppletProxy::GetHomeMenuFunctions, "GetHomeMenuFunctions"}, |
|
||||
{23, &ILibraryAppletProxy::GetGlobalStateController, "GetGlobalStateController"}, |
|
||||
{1000, &ILibraryAppletProxy::GetDebugFunctions, "GetDebugFunctions"}, |
|
||||
}; |
|
||||
// clang-format on
|
|
||||
|
|
||||
RegisterHandlers(functions); |
|
||||
} |
|
||||
|
|
||||
ILibraryAppletProxy::~ILibraryAppletProxy() = default; |
|
||||
|
|
||||
void ILibraryAppletProxy::GetCommonStateGetter(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<ICommonStateGetter>(system, applet); |
|
||||
} |
|
||||
|
|
||||
void ILibraryAppletProxy::GetSelfController(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<ISelfController>(system, applet, nvnflinger); |
|
||||
} |
|
||||
|
|
||||
void ILibraryAppletProxy::GetWindowController(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<IWindowController>(system, applet); |
|
||||
} |
|
||||
|
|
||||
void ILibraryAppletProxy::GetAudioController(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<IAudioController>(system); |
|
||||
} |
|
||||
|
|
||||
void ILibraryAppletProxy::GetDisplayController(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<IDisplayController>(system, applet); |
|
||||
} |
|
||||
|
|
||||
void ILibraryAppletProxy::GetProcessWindingController(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<IProcessWindingController>(system, applet); |
|
||||
} |
|
||||
|
|
||||
void ILibraryAppletProxy::GetLibraryAppletCreator(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<ILibraryAppletCreator>(system, applet); |
|
||||
} |
|
||||
|
|
||||
void ILibraryAppletProxy::OpenLibraryAppletSelfAccessor(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<ILibraryAppletSelfAccessor>(system, applet); |
|
||||
} |
|
||||
|
|
||||
void ILibraryAppletProxy::GetAppletCommonFunctions(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<IAppletCommonFunctions>(system, applet); |
|
||||
} |
|
||||
|
|
||||
void ILibraryAppletProxy::GetHomeMenuFunctions(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<IHomeMenuFunctions>(system); |
|
||||
} |
|
||||
|
|
||||
void ILibraryAppletProxy::GetGlobalStateController(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<IGlobalStateController>(system); |
|
||||
} |
|
||||
|
|
||||
void ILibraryAppletProxy::GetDebugFunctions(HLERequestContext& ctx) { |
|
||||
LOG_DEBUG(Service_AM, "called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushIpcInterface<IDebugFunctions>(system); |
|
||||
} |
|
||||
|
|
||||
} // namespace Service::AM
|
|
||||
@ -1,36 +0,0 @@ |
|||||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project |
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
|
|
||||
#pragma once |
|
||||
|
|
||||
#include "core/hle/service/service.h" |
|
||||
|
|
||||
namespace Service::AM { |
|
||||
|
|
||||
struct Applet; |
|
||||
|
|
||||
class ILibraryAppletProxy final : public ServiceFramework<ILibraryAppletProxy> { |
|
||||
public: |
|
||||
explicit ILibraryAppletProxy(Nvnflinger::Nvnflinger& nvnflinger_, |
|
||||
std::shared_ptr<Applet> applet_, Core::System& system_); |
|
||||
~ILibraryAppletProxy(); |
|
||||
|
|
||||
private: |
|
||||
void GetCommonStateGetter(HLERequestContext& ctx); |
|
||||
void GetSelfController(HLERequestContext& ctx); |
|
||||
void GetWindowController(HLERequestContext& ctx); |
|
||||
void GetAudioController(HLERequestContext& ctx); |
|
||||
void GetDisplayController(HLERequestContext& ctx); |
|
||||
void GetProcessWindingController(HLERequestContext& ctx); |
|
||||
void GetLibraryAppletCreator(HLERequestContext& ctx); |
|
||||
void OpenLibraryAppletSelfAccessor(HLERequestContext& ctx); |
|
||||
void GetAppletCommonFunctions(HLERequestContext& ctx); |
|
||||
void GetHomeMenuFunctions(HLERequestContext& ctx); |
|
||||
void GetGlobalStateController(HLERequestContext& ctx); |
|
||||
void GetDebugFunctions(HLERequestContext& ctx); |
|
||||
|
|
||||
Nvnflinger::Nvnflinger& nvnflinger; |
|
||||
std::shared_ptr<Applet> applet; |
|
||||
}; |
|
||||
|
|
||||
} // namespace Service::AM |
|
||||
@ -0,0 +1,133 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
|
||||
|
#include "core/hle/service/am/applet_common_functions.h"
|
||||
|
#include "core/hle/service/am/audio_controller.h"
|
||||
|
#include "core/hle/service/am/common_state_getter.h"
|
||||
|
#include "core/hle/service/am/debug_functions.h"
|
||||
|
#include "core/hle/service/am/display_controller.h"
|
||||
|
#include "core/hle/service/am/global_state_controller.h"
|
||||
|
#include "core/hle/service/am/home_menu_functions.h"
|
||||
|
#include "core/hle/service/am/library_applet_creator.h"
|
||||
|
#include "core/hle/service/am/library_applet_self_accessor.h"
|
||||
|
#include "core/hle/service/am/process_winding_controller.h"
|
||||
|
#include "core/hle/service/am/self_controller.h"
|
||||
|
#include "core/hle/service/am/service/library_applet_proxy.h"
|
||||
|
#include "core/hle/service/am/window_controller.h"
|
||||
|
#include "core/hle/service/cmif_serialization.h"
|
||||
|
|
||||
|
namespace Service::AM { |
||||
|
|
||||
|
ILibraryAppletProxy::ILibraryAppletProxy(Core::System& system_, std::shared_ptr<Applet> applet, |
||||
|
Kernel::KProcess* process, |
||||
|
Nvnflinger::Nvnflinger& nvnflinger) |
||||
|
: ServiceFramework{system_, "ILibraryAppletProxy"}, |
||||
|
m_nvnflinger{nvnflinger}, m_process{process}, m_applet{std::move(applet)} { |
||||
|
// clang-format off
|
||||
|
static const FunctionInfo functions[] = { |
||||
|
{0, D<&ILibraryAppletProxy::GetCommonStateGetter>, "GetCommonStateGetter"}, |
||||
|
{1, D<&ILibraryAppletProxy::GetSelfController>, "GetSelfController"}, |
||||
|
{2, D<&ILibraryAppletProxy::GetWindowController>, "GetWindowController"}, |
||||
|
{3, D<&ILibraryAppletProxy::GetAudioController>, "GetAudioController"}, |
||||
|
{4, D<&ILibraryAppletProxy::GetDisplayController>, "GetDisplayController"}, |
||||
|
{10, D<&ILibraryAppletProxy::GetProcessWindingController>, "GetProcessWindingController"}, |
||||
|
{11, D<&ILibraryAppletProxy::GetLibraryAppletCreator>, "GetLibraryAppletCreator"}, |
||||
|
{20, D<&ILibraryAppletProxy::OpenLibraryAppletSelfAccessor>, "OpenLibraryAppletSelfAccessor"}, |
||||
|
{21, D<&ILibraryAppletProxy::GetAppletCommonFunctions>, "GetAppletCommonFunctions"}, |
||||
|
{22, D<&ILibraryAppletProxy::GetHomeMenuFunctions>, "GetHomeMenuFunctions"}, |
||||
|
{23, D<&ILibraryAppletProxy::GetGlobalStateController>, "GetGlobalStateController"}, |
||||
|
{1000, D<&ILibraryAppletProxy::GetDebugFunctions>, "GetDebugFunctions"}, |
||||
|
}; |
||||
|
// clang-format on
|
||||
|
|
||||
|
RegisterHandlers(functions); |
||||
|
} |
||||
|
|
||||
|
ILibraryAppletProxy::~ILibraryAppletProxy() = default; |
||||
|
|
||||
|
Result ILibraryAppletProxy::GetAudioController( |
||||
|
Out<SharedPointer<IAudioController>> out_audio_controller) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_audio_controller = std::make_shared<IAudioController>(system); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result ILibraryAppletProxy::GetDisplayController( |
||||
|
Out<SharedPointer<IDisplayController>> out_display_controller) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_display_controller = std::make_shared<IDisplayController>(system, m_applet); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result ILibraryAppletProxy::GetProcessWindingController( |
||||
|
Out<SharedPointer<IProcessWindingController>> out_process_winding_controller) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_process_winding_controller = std::make_shared<IProcessWindingController>(system, m_applet); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result ILibraryAppletProxy::GetDebugFunctions( |
||||
|
Out<SharedPointer<IDebugFunctions>> out_debug_functions) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_debug_functions = std::make_shared<IDebugFunctions>(system); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result ILibraryAppletProxy::GetWindowController( |
||||
|
Out<SharedPointer<IWindowController>> out_window_controller) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_window_controller = std::make_shared<IWindowController>(system, m_applet); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result ILibraryAppletProxy::GetSelfController( |
||||
|
Out<SharedPointer<ISelfController>> out_self_controller) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_self_controller = std::make_shared<ISelfController>(system, m_applet, m_nvnflinger); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result ILibraryAppletProxy::GetCommonStateGetter( |
||||
|
Out<SharedPointer<ICommonStateGetter>> out_common_state_getter) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_common_state_getter = std::make_shared<ICommonStateGetter>(system, m_applet); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result ILibraryAppletProxy::GetLibraryAppletCreator( |
||||
|
Out<SharedPointer<ILibraryAppletCreator>> out_library_applet_creator) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_library_applet_creator = std::make_shared<ILibraryAppletCreator>(system, m_applet); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result ILibraryAppletProxy::OpenLibraryAppletSelfAccessor( |
||||
|
Out<SharedPointer<ILibraryAppletSelfAccessor>> out_library_applet_self_accessor) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_library_applet_self_accessor = |
||||
|
std::make_shared<ILibraryAppletSelfAccessor>(system, m_applet); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result ILibraryAppletProxy::GetAppletCommonFunctions( |
||||
|
Out<SharedPointer<IAppletCommonFunctions>> out_applet_common_functions) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_applet_common_functions = std::make_shared<IAppletCommonFunctions>(system, m_applet); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result ILibraryAppletProxy::GetHomeMenuFunctions( |
||||
|
Out<SharedPointer<IHomeMenuFunctions>> out_home_menu_functions) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_home_menu_functions = std::make_shared<IHomeMenuFunctions>(system); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result ILibraryAppletProxy::GetGlobalStateController( |
||||
|
Out<SharedPointer<IGlobalStateController>> out_global_state_controller) { |
||||
|
LOG_DEBUG(Service_AM, "called"); |
||||
|
*out_global_state_controller = std::make_shared<IGlobalStateController>(system); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
} // namespace Service::AM
|
||||
@ -0,0 +1,55 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project |
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include "core/hle/service/cmif_types.h" |
||||
|
#include "core/hle/service/service.h" |
||||
|
|
||||
|
namespace Service::AM { |
||||
|
|
||||
|
struct Applet; |
||||
|
class IAppletCommonFunctions; |
||||
|
class IAudioController; |
||||
|
class ICommonStateGetter; |
||||
|
class IDebugFunctions; |
||||
|
class IDisplayController; |
||||
|
class IHomeMenuFunctions; |
||||
|
class IGlobalStateController; |
||||
|
class ILibraryAppletCreator; |
||||
|
class ILibraryAppletSelfAccessor; |
||||
|
class IProcessWindingController; |
||||
|
class ISelfController; |
||||
|
class IWindowController; |
||||
|
|
||||
|
class ILibraryAppletProxy final : public ServiceFramework<ILibraryAppletProxy> { |
||||
|
public: |
||||
|
explicit ILibraryAppletProxy(Core::System& system_, std::shared_ptr<Applet> applet, |
||||
|
Kernel::KProcess* process, Nvnflinger::Nvnflinger& nvnflinger); |
||||
|
~ILibraryAppletProxy(); |
||||
|
|
||||
|
private: |
||||
|
Result GetAudioController(Out<SharedPointer<IAudioController>> out_audio_controller); |
||||
|
Result GetDisplayController(Out<SharedPointer<IDisplayController>> out_display_controller); |
||||
|
Result GetProcessWindingController( |
||||
|
Out<SharedPointer<IProcessWindingController>> out_process_winding_controller); |
||||
|
Result GetDebugFunctions(Out<SharedPointer<IDebugFunctions>> out_debug_functions); |
||||
|
Result GetWindowController(Out<SharedPointer<IWindowController>> out_window_controller); |
||||
|
Result GetSelfController(Out<SharedPointer<ISelfController>> out_self_controller); |
||||
|
Result GetCommonStateGetter(Out<SharedPointer<ICommonStateGetter>> out_common_state_getter); |
||||
|
Result GetLibraryAppletCreator( |
||||
|
Out<SharedPointer<ILibraryAppletCreator>> out_library_applet_creator); |
||||
|
Result OpenLibraryAppletSelfAccessor( |
||||
|
Out<SharedPointer<ILibraryAppletSelfAccessor>> out_library_applet_self_accessor); |
||||
|
Result GetAppletCommonFunctions( |
||||
|
Out<SharedPointer<IAppletCommonFunctions>> out_applet_common_functions); |
||||
|
Result GetHomeMenuFunctions(Out<SharedPointer<IHomeMenuFunctions>> out_home_menu_functions); |
||||
|
Result GetGlobalStateController( |
||||
|
Out<SharedPointer<IGlobalStateController>> out_global_state_controller); |
||||
|
|
||||
|
Nvnflinger::Nvnflinger& m_nvnflinger; |
||||
|
Kernel::KProcess* const m_process; |
||||
|
const std::shared_ptr<Applet> m_applet; |
||||
|
}; |
||||
|
|
||||
|
} // namespace Service::AM |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue