mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-12-20 23:40:56 +01:00
am: add IApplicationAccessor
This commit is contained in:
parent
927fa532e5
commit
bbb1ff6574
3 changed files with 180 additions and 0 deletions
|
@ -441,6 +441,8 @@ add_library(core STATIC
|
||||||
hle/service/am/service/all_system_applet_proxies_service.h
|
hle/service/am/service/all_system_applet_proxies_service.h
|
||||||
hle/service/am/service/applet_common_functions.cpp
|
hle/service/am/service/applet_common_functions.cpp
|
||||||
hle/service/am/service/applet_common_functions.h
|
hle/service/am/service/applet_common_functions.h
|
||||||
|
hle/service/am/service/application_accessor.cpp
|
||||||
|
hle/service/am/service/application_accessor.h
|
||||||
hle/service/am/service/application_functions.cpp
|
hle/service/am/service/application_functions.cpp
|
||||||
hle/service/am/service/application_functions.h
|
hle/service/am/service/application_functions.h
|
||||||
hle/service/am/service/application_proxy_service.cpp
|
hle/service/am/service/application_proxy_service.cpp
|
||||||
|
|
138
src/core/hle/service/am/service/application_accessor.cpp
Normal file
138
src/core/hle/service/am/service/application_accessor.cpp
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
// 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/am_types.h"
|
||||||
|
#include "core/hle/service/am/applet.h"
|
||||||
|
#include "core/hle/service/am/applet_data_broker.h"
|
||||||
|
#include "core/hle/service/am/applet_manager.h"
|
||||||
|
#include "core/hle/service/am/service/application_accessor.h"
|
||||||
|
#include "core/hle/service/am/service/library_applet_accessor.h"
|
||||||
|
#include "core/hle/service/am/service/storage.h"
|
||||||
|
#include "core/hle/service/cmif_serialization.h"
|
||||||
|
|
||||||
|
namespace Service::AM {
|
||||||
|
|
||||||
|
IApplicationAccessor::IApplicationAccessor(Core::System& system_, std::shared_ptr<Applet> applet)
|
||||||
|
: ServiceFramework{system_, "IApplicationAccessor"}, m_applet(std::move(applet)) {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, D<&IApplicationAccessor::GetAppletStateChangedEvent>, "GetAppletStateChangedEvent"},
|
||||||
|
{1, nullptr, "IsCompleted"},
|
||||||
|
{10, D<&IApplicationAccessor::Start>, "Start"},
|
||||||
|
{20, D<&IApplicationAccessor::RequestExit>, "RequestExit"},
|
||||||
|
{25, D<&IApplicationAccessor::Terminate>, "Terminate"},
|
||||||
|
{30, D<&IApplicationAccessor::GetResult>, "GetResult"},
|
||||||
|
{101, D<&IApplicationAccessor::RequestForApplicationToGetForeground>, "RequestForApplicationToGetForeground"},
|
||||||
|
{110, nullptr, "TerminateAllLibraryApplets"},
|
||||||
|
{111, nullptr, "AreAnyLibraryAppletsLeft"},
|
||||||
|
{112, D<&IApplicationAccessor::GetCurrentLibraryApplet>, "GetCurrentLibraryApplet"},
|
||||||
|
{120, nullptr, "GetApplicationId"},
|
||||||
|
{121, D<&IApplicationAccessor::PushLaunchParameter>, "PushLaunchParameter"},
|
||||||
|
{122, D<&IApplicationAccessor::GetApplicationControlProperty>, "GetApplicationControlProperty"},
|
||||||
|
{123, nullptr, "GetApplicationLaunchProperty"},
|
||||||
|
{124, nullptr, "GetApplicationLaunchRequestInfo"},
|
||||||
|
{130, D<&IApplicationAccessor::SetUsers>, "SetUsers"},
|
||||||
|
{131, D<&IApplicationAccessor::CheckRightsEnvironmentAvailable>, "CheckRightsEnvironmentAvailable"},
|
||||||
|
{132, D<&IApplicationAccessor::GetNsRightsEnvironmentHandle>, "GetNsRightsEnvironmentHandle"},
|
||||||
|
{140, nullptr, "GetDesirableUids"},
|
||||||
|
{150, D<&IApplicationAccessor::ReportApplicationExitTimeout>, "ReportApplicationExitTimeout"},
|
||||||
|
{160, nullptr, "SetApplicationAttribute"},
|
||||||
|
{170, nullptr, "HasSaveDataAccessPermission"},
|
||||||
|
{180, nullptr, "PushToFriendInvitationStorageChannel"},
|
||||||
|
{190, nullptr, "PushToNotificationStorageChannel"},
|
||||||
|
{200, nullptr, "RequestApplicationSoftReset"},
|
||||||
|
{201, nullptr, "RestartApplicationTimer"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
IApplicationAccessor::~IApplicationAccessor() = default;
|
||||||
|
|
||||||
|
Result IApplicationAccessor::Start() {
|
||||||
|
LOG_INFO(Service_AM, "called");
|
||||||
|
m_applet->process->Run();
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::RequestExit() {
|
||||||
|
LOG_INFO(Service_AM, "called");
|
||||||
|
m_applet->message_queue.RequestExit();
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::Terminate() {
|
||||||
|
LOG_INFO(Service_AM, "called");
|
||||||
|
m_applet->process->Terminate();
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::GetResult() {
|
||||||
|
LOG_INFO(Service_AM, "called");
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::GetAppletStateChangedEvent(
|
||||||
|
OutCopyHandle<Kernel::KReadableEvent> out_event) {
|
||||||
|
LOG_INFO(Service_AM, "called");
|
||||||
|
*out_event = m_applet->caller_applet_broker->GetStateChangedEvent().GetHandle();
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::PushLaunchParameter(LaunchParameterKind kind,
|
||||||
|
SharedPointer<IStorage> storage) {
|
||||||
|
LOG_INFO(Service_AM, "called, kind={}", kind);
|
||||||
|
|
||||||
|
switch (kind) {
|
||||||
|
case LaunchParameterKind::AccountPreselectedUser:
|
||||||
|
m_applet->preselected_user_launch_parameter.push_back(storage->GetData());
|
||||||
|
R_SUCCEED();
|
||||||
|
default:
|
||||||
|
R_THROW(ResultUnknown);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::GetApplicationControlProperty(
|
||||||
|
OutBuffer<BufferAttr_HipcMapAlias> out_control_property) {
|
||||||
|
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||||
|
R_THROW(ResultUnknown);
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::SetUsers(bool enable,
|
||||||
|
InArray<Common::UUID, BufferAttr_HipcMapAlias> user_ids) {
|
||||||
|
LOG_INFO(Service_AM, "called, enable={} user_id_count={}", enable, user_ids.size());
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::GetCurrentLibraryApplet(
|
||||||
|
Out<SharedPointer<ILibraryAppletAccessor>> out_accessor) {
|
||||||
|
LOG_INFO(Service_AM, "(STUBBED) called");
|
||||||
|
*out_accessor = nullptr;
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::RequestForApplicationToGetForeground() {
|
||||||
|
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||||
|
R_THROW(ResultUnknown);
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::CheckRightsEnvironmentAvailable(Out<bool> out_is_available) {
|
||||||
|
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||||
|
*out_is_available = true;
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::GetNsRightsEnvironmentHandle(Out<u64> out_handle) {
|
||||||
|
LOG_WARNING(Service_AM, "(STUBBED) called");
|
||||||
|
*out_handle = 0xdeadbeef;
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
Result IApplicationAccessor::ReportApplicationExitTimeout() {
|
||||||
|
LOG_ERROR(Service_AM, "called");
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Service::AM
|
40
src/core/hle/service/am/service/application_accessor.h
Normal file
40
src/core/hle/service/am/service/application_accessor.h
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "common/uuid.h"
|
||||||
|
#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 IStorage;
|
||||||
|
|
||||||
|
class IApplicationAccessor final : public ServiceFramework<IApplicationAccessor> {
|
||||||
|
public:
|
||||||
|
explicit IApplicationAccessor(Core::System& system_, std::shared_ptr<Applet> applet);
|
||||||
|
~IApplicationAccessor() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Result Start();
|
||||||
|
Result RequestExit();
|
||||||
|
Result Terminate();
|
||||||
|
Result GetResult();
|
||||||
|
Result GetAppletStateChangedEvent(OutCopyHandle<Kernel::KReadableEvent> out_event);
|
||||||
|
Result PushLaunchParameter(LaunchParameterKind kind, SharedPointer<IStorage> storage);
|
||||||
|
Result GetApplicationControlProperty(OutBuffer<BufferAttr_HipcMapAlias> out_control_property);
|
||||||
|
Result SetUsers(bool enable, InArray<Common::UUID, BufferAttr_HipcMapAlias> user_ids);
|
||||||
|
Result GetCurrentLibraryApplet(Out<SharedPointer<ILibraryAppletAccessor>> out_accessor);
|
||||||
|
Result RequestForApplicationToGetForeground();
|
||||||
|
Result CheckRightsEnvironmentAvailable(Out<bool> out_is_available);
|
||||||
|
Result GetNsRightsEnvironmentHandle(Out<u64> out_handle);
|
||||||
|
Result ReportApplicationExitTimeout();
|
||||||
|
|
||||||
|
const std::shared_ptr<Applet> m_applet;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Service::AM
|
Loading…
Reference in a new issue