7 changed files with 114 additions and 88 deletions
-
4src/core/CMakeLists.txt
-
57src/core/hle/service/am/home_menu_functions.cpp
-
25src/core/hle/service/am/home_menu_functions.h
-
74src/core/hle/service/am/service/home_menu_functions.cpp
-
34src/core/hle/service/am/service/home_menu_functions.h
-
4src/core/hle/service/am/service/library_applet_proxy.cpp
-
4src/core/hle/service/am/service/system_applet_proxy.cpp
@ -1,57 +0,0 @@ |
|||||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||
|
|
||||
#include "core/hle/service/am/home_menu_functions.h"
|
|
||||
#include "core/hle/service/ipc_helpers.h"
|
|
||||
|
|
||||
namespace Service::AM { |
|
||||
|
|
||||
IHomeMenuFunctions::IHomeMenuFunctions(Core::System& system_) |
|
||||
: ServiceFramework{system_, "IHomeMenuFunctions"}, service_context{system, |
|
||||
"IHomeMenuFunctions"} { |
|
||||
// clang-format off
|
|
||||
static const FunctionInfo functions[] = { |
|
||||
{10, &IHomeMenuFunctions::RequestToGetForeground, "RequestToGetForeground"}, |
|
||||
{11, nullptr, "LockForeground"}, |
|
||||
{12, nullptr, "UnlockForeground"}, |
|
||||
{20, nullptr, "PopFromGeneralChannel"}, |
|
||||
{21, &IHomeMenuFunctions::GetPopFromGeneralChannelEvent, "GetPopFromGeneralChannelEvent"}, |
|
||||
{30, nullptr, "GetHomeButtonWriterLockAccessor"}, |
|
||||
{31, nullptr, "GetWriterLockAccessorEx"}, |
|
||||
{40, nullptr, "IsSleepEnabled"}, |
|
||||
{41, nullptr, "IsRebootEnabled"}, |
|
||||
{50, nullptr, "LaunchSystemApplet"}, |
|
||||
{51, nullptr, "LaunchStarter"}, |
|
||||
{100, nullptr, "PopRequestLaunchApplicationForDebug"}, |
|
||||
{110, nullptr, "IsForceTerminateApplicationDisabledForDebug"}, |
|
||||
{200, nullptr, "LaunchDevMenu"}, |
|
||||
{1000, nullptr, "SetLastApplicationExitReason"}, |
|
||||
}; |
|
||||
// clang-format on
|
|
||||
|
|
||||
RegisterHandlers(functions); |
|
||||
|
|
||||
pop_from_general_channel_event = |
|
||||
service_context.CreateEvent("IHomeMenuFunctions:PopFromGeneralChannelEvent"); |
|
||||
} |
|
||||
|
|
||||
IHomeMenuFunctions::~IHomeMenuFunctions() { |
|
||||
service_context.CloseEvent(pop_from_general_channel_event); |
|
||||
} |
|
||||
|
|
||||
void IHomeMenuFunctions::RequestToGetForeground(HLERequestContext& ctx) { |
|
||||
LOG_WARNING(Service_AM, "(STUBBED) called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
} |
|
||||
|
|
||||
void IHomeMenuFunctions::GetPopFromGeneralChannelEvent(HLERequestContext& ctx) { |
|
||||
LOG_WARNING(Service_AM, "(STUBBED) called"); |
|
||||
|
|
||||
IPC::ResponseBuilder rb{ctx, 2, 1}; |
|
||||
rb.Push(ResultSuccess); |
|
||||
rb.PushCopyObjects(pop_from_general_channel_event->GetReadableEvent()); |
|
||||
} |
|
||||
|
|
||||
} // namespace Service::AM
|
|
||||
@ -1,25 +0,0 @@ |
|||||
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project |
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
|
|
||||
#pragma once |
|
||||
|
|
||||
#include "core/hle/service/kernel_helpers.h" |
|
||||
#include "core/hle/service/service.h" |
|
||||
|
|
||||
namespace Service::AM { |
|
||||
|
|
||||
class IHomeMenuFunctions final : public ServiceFramework<IHomeMenuFunctions> { |
|
||||
public: |
|
||||
explicit IHomeMenuFunctions(Core::System& system_); |
|
||||
~IHomeMenuFunctions() override; |
|
||||
|
|
||||
private: |
|
||||
void RequestToGetForeground(HLERequestContext& ctx); |
|
||||
void GetPopFromGeneralChannelEvent(HLERequestContext& ctx); |
|
||||
|
|
||||
KernelHelpers::ServiceContext service_context; |
|
||||
|
|
||||
Kernel::KEvent* pop_from_general_channel_event; |
|
||||
}; |
|
||||
|
|
||||
} // namespace Service::AM |
|
||||
@ -0,0 +1,74 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
|
||||
|
#include "core/hle/result.h"
|
||||
|
#include "core/hle/service/am/applet_manager.h"
|
||||
|
#include "core/hle/service/am/service/home_menu_functions.h"
|
||||
|
#include "core/hle/service/cmif_serialization.h"
|
||||
|
|
||||
|
namespace Service::AM { |
||||
|
|
||||
|
IHomeMenuFunctions::IHomeMenuFunctions(Core::System& system_, std::shared_ptr<Applet> applet) |
||||
|
: ServiceFramework{system_, "IHomeMenuFunctions"}, m_applet{std::move(applet)}, |
||||
|
m_context{system, "IHomeMenuFunctions"}, m_pop_from_general_channel_event{m_context} { |
||||
|
// clang-format off
|
||||
|
static const FunctionInfo functions[] = { |
||||
|
{10, D<&IHomeMenuFunctions::RequestToGetForeground>, "RequestToGetForeground"}, |
||||
|
{11, D<&IHomeMenuFunctions::LockForeground>, "LockForeground"}, |
||||
|
{12, D<&IHomeMenuFunctions::UnlockForeground>, "UnlockForeground"}, |
||||
|
{20, nullptr, "PopFromGeneralChannel"}, |
||||
|
{21, D<&IHomeMenuFunctions::GetPopFromGeneralChannelEvent>, "GetPopFromGeneralChannelEvent"}, |
||||
|
{30, nullptr, "GetHomeButtonWriterLockAccessor"}, |
||||
|
{31, nullptr, "GetWriterLockAccessorEx"}, |
||||
|
{40, nullptr, "IsSleepEnabled"}, |
||||
|
{41, D<&IHomeMenuFunctions::IsRebootEnabled>, "IsRebootEnabled"}, |
||||
|
{50, nullptr, "LaunchSystemApplet"}, |
||||
|
{51, nullptr, "LaunchStarter"}, |
||||
|
{100, nullptr, "PopRequestLaunchApplicationForDebug"}, |
||||
|
{110, D<&IHomeMenuFunctions::IsForceTerminateApplicationDisabledForDebug>, "IsForceTerminateApplicationDisabledForDebug"}, |
||||
|
{200, nullptr, "LaunchDevMenu"}, |
||||
|
{1000, nullptr, "SetLastApplicationExitReason"}, |
||||
|
}; |
||||
|
// clang-format on
|
||||
|
|
||||
|
RegisterHandlers(functions); |
||||
|
} |
||||
|
|
||||
|
IHomeMenuFunctions::~IHomeMenuFunctions() = default; |
||||
|
|
||||
|
Result IHomeMenuFunctions::RequestToGetForeground() { |
||||
|
LOG_WARNING(Service_AM, "(STUBBED) called"); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IHomeMenuFunctions::LockForeground() { |
||||
|
LOG_WARNING(Service_AM, "(STUBBED) called"); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IHomeMenuFunctions::UnlockForeground() { |
||||
|
LOG_WARNING(Service_AM, "(STUBBED) called"); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IHomeMenuFunctions::GetPopFromGeneralChannelEvent( |
||||
|
OutCopyHandle<Kernel::KReadableEvent> out_event) { |
||||
|
LOG_INFO(Service_AM, "called"); |
||||
|
*out_event = m_pop_from_general_channel_event.GetHandle(); |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IHomeMenuFunctions::IsRebootEnabled(Out<bool> out_is_reboot_enbaled) { |
||||
|
LOG_INFO(Service_AM, "called"); |
||||
|
*out_is_reboot_enbaled = true; |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
Result IHomeMenuFunctions::IsForceTerminateApplicationDisabledForDebug( |
||||
|
Out<bool> out_is_force_terminate_application_disabled_for_debug) { |
||||
|
LOG_INFO(Service_AM, "called"); |
||||
|
*out_is_force_terminate_application_disabled_for_debug = false; |
||||
|
R_SUCCEED(); |
||||
|
} |
||||
|
|
||||
|
} // namespace Service::AM
|
||||
@ -0,0 +1,34 @@ |
|||||
|
// 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/kernel_helpers.h" |
||||
|
#include "core/hle/service/os/event.h" |
||||
|
#include "core/hle/service/service.h" |
||||
|
|
||||
|
namespace Service::AM { |
||||
|
|
||||
|
struct Applet; |
||||
|
|
||||
|
class IHomeMenuFunctions final : public ServiceFramework<IHomeMenuFunctions> { |
||||
|
public: |
||||
|
explicit IHomeMenuFunctions(Core::System& system_, std::shared_ptr<Applet> applet); |
||||
|
~IHomeMenuFunctions() override; |
||||
|
|
||||
|
private: |
||||
|
Result RequestToGetForeground(); |
||||
|
Result LockForeground(); |
||||
|
Result UnlockForeground(); |
||||
|
Result GetPopFromGeneralChannelEvent(OutCopyHandle<Kernel::KReadableEvent> out_event); |
||||
|
Result IsRebootEnabled(Out<bool> out_is_reboot_enbaled); |
||||
|
Result IsForceTerminateApplicationDisabledForDebug( |
||||
|
Out<bool> out_is_force_terminate_application_disabled_for_debug); |
||||
|
|
||||
|
const std::shared_ptr<Applet> m_applet; |
||||
|
KernelHelpers::ServiceContext m_context; |
||||
|
Event m_pop_from_general_channel_event; |
||||
|
}; |
||||
|
|
||||
|
} // namespace Service::AM |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue