From dfb9fa0144ca79e596f6f2b1bc960b1a44745aa6 Mon Sep 17 00:00:00 2001 From: Liam Date: Sun, 31 Dec 2023 09:40:32 -0500 Subject: am: re-namespace frontend applets to frontend directory --- .../service/am/frontend/applet_profile_select.cpp | 124 +++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 src/core/hle/service/am/frontend/applet_profile_select.cpp (limited to 'src/core/hle/service/am/frontend/applet_profile_select.cpp') diff --git a/src/core/hle/service/am/frontend/applet_profile_select.cpp b/src/core/hle/service/am/frontend/applet_profile_select.cpp new file mode 100644 index 000000000..5d71f985e --- /dev/null +++ b/src/core/hle/service/am/frontend/applet_profile_select.cpp @@ -0,0 +1,124 @@ +// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include + +#include "common/assert.h" +#include "common/string_util.h" +#include "core/core.h" +#include "core/frontend/applets/profile_select.h" +#include "core/hle/service/acc/errors.h" +#include "core/hle/service/am/am.h" +#include "core/hle/service/am/frontend/applet_profile_select.h" +#include "core/hle/service/am/storage.h" + +namespace Service::AM::Frontend { + +ProfileSelect::ProfileSelect(Core::System& system_, LibraryAppletMode applet_mode_, + const Core::Frontend::ProfileSelectApplet& frontend_) + : FrontendApplet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} + +ProfileSelect::~ProfileSelect() = default; + +void ProfileSelect::Initialize() { + complete = false; + status = ResultSuccess; + final_data.clear(); + + FrontendApplet::Initialize(); + profile_select_version = ProfileSelectAppletVersion{common_args.library_version}; + + const auto user_config_storage = broker.PopNormalDataToApplet(); + ASSERT(user_config_storage != nullptr); + const auto& user_config = user_config_storage->GetData(); + + LOG_INFO(Service_AM, "Initializing Profile Select Applet with version={}", + profile_select_version); + + switch (profile_select_version) { + case ProfileSelectAppletVersion::Version1: + ASSERT(user_config.size() == sizeof(UiSettingsV1)); + std::memcpy(&config_old, user_config.data(), sizeof(UiSettingsV1)); + break; + case ProfileSelectAppletVersion::Version2: + case ProfileSelectAppletVersion::Version3: + ASSERT(user_config.size() == sizeof(UiSettings)); + std::memcpy(&config, user_config.data(), sizeof(UiSettings)); + break; + default: + UNIMPLEMENTED_MSG("Unknown profile_select_version = {}", profile_select_version); + break; + } +} + +bool ProfileSelect::TransactionComplete() const { + return complete; +} + +Result ProfileSelect::GetStatus() const { + return status; +} + +void ProfileSelect::ExecuteInteractive() { + ASSERT_MSG(false, "Attempted to call interactive execution on non-interactive applet."); +} + +void ProfileSelect::Execute() { + if (complete) { + broker.PushNormalDataFromApplet(std::make_shared(system, std::move(final_data))); + return; + } + + Core::Frontend::ProfileSelectParameters parameters{}; + + switch (profile_select_version) { + case ProfileSelectAppletVersion::Version1: + parameters = { + .mode = config_old.mode, + .invalid_uid_list = config_old.invalid_uid_list, + .display_options = config_old.display_options, + .purpose = UserSelectionPurpose::General, + }; + break; + case ProfileSelectAppletVersion::Version2: + case ProfileSelectAppletVersion::Version3: + parameters = { + .mode = config.mode, + .invalid_uid_list = config.invalid_uid_list, + .display_options = config.display_options, + .purpose = config.purpose, + }; + break; + default: + UNIMPLEMENTED_MSG("Unknown profile_select_version = {}", profile_select_version); + break; + } + + frontend.SelectProfile([this](std::optional uuid) { SelectionComplete(uuid); }, + parameters); +} + +void ProfileSelect::SelectionComplete(std::optional uuid) { + UiReturnArg output{}; + + if (uuid.has_value() && uuid->IsValid()) { + output.result = 0; + output.uuid_selected = *uuid; + } else { + status = Account::ResultCancelledByUser; + output.result = Account::ResultCancelledByUser.raw; + output.uuid_selected = Common::InvalidUUID; + } + + final_data = std::vector(sizeof(UiReturnArg)); + std::memcpy(final_data.data(), &output, final_data.size()); + broker.PushNormalDataFromApplet(std::make_shared(system, std::move(final_data))); + broker.SignalStateChanged(); +} + +Result ProfileSelect::RequestExit() { + frontend.Close(); + R_SUCCEED(); +} + +} // namespace Service::AM::Frontend -- cgit v1.2.3 From 8a146469c0639ff402e77da8843072ce1f2bce0c Mon Sep 17 00:00:00 2001 From: Liam Date: Wed, 3 Jan 2024 01:16:27 -0500 Subject: am: return AppletDataBroker and use for frontend applets --- .../hle/service/am/frontend/applet_profile_select.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'src/core/hle/service/am/frontend/applet_profile_select.cpp') diff --git a/src/core/hle/service/am/frontend/applet_profile_select.cpp b/src/core/hle/service/am/frontend/applet_profile_select.cpp index 5d71f985e..efb4053b8 100644 --- a/src/core/hle/service/am/frontend/applet_profile_select.cpp +++ b/src/core/hle/service/am/frontend/applet_profile_select.cpp @@ -14,9 +14,10 @@ namespace Service::AM::Frontend { -ProfileSelect::ProfileSelect(Core::System& system_, LibraryAppletMode applet_mode_, +ProfileSelect::ProfileSelect(Core::System& system_, std::shared_ptr applet_, + LibraryAppletMode applet_mode_, const Core::Frontend::ProfileSelectApplet& frontend_) - : FrontendApplet{system_, applet_mode_}, frontend{frontend_}, system{system_} {} + : FrontendApplet{system_, applet_, applet_mode_}, frontend{frontend_} {} ProfileSelect::~ProfileSelect() = default; @@ -28,7 +29,7 @@ void ProfileSelect::Initialize() { FrontendApplet::Initialize(); profile_select_version = ProfileSelectAppletVersion{common_args.library_version}; - const auto user_config_storage = broker.PopNormalDataToApplet(); + const std::shared_ptr user_config_storage = PopInData(); ASSERT(user_config_storage != nullptr); const auto& user_config = user_config_storage->GetData(); @@ -51,10 +52,6 @@ void ProfileSelect::Initialize() { } } -bool ProfileSelect::TransactionComplete() const { - return complete; -} - Result ProfileSelect::GetStatus() const { return status; } @@ -65,7 +62,8 @@ void ProfileSelect::ExecuteInteractive() { void ProfileSelect::Execute() { if (complete) { - broker.PushNormalDataFromApplet(std::make_shared(system, std::move(final_data))); + PushOutData(std::make_shared(system, std::move(final_data))); + Exit(); return; } @@ -112,8 +110,9 @@ void ProfileSelect::SelectionComplete(std::optional uuid) { final_data = std::vector(sizeof(UiReturnArg)); std::memcpy(final_data.data(), &output, final_data.size()); - broker.PushNormalDataFromApplet(std::make_shared(system, std::move(final_data))); - broker.SignalStateChanged(); + + PushOutData(std::make_shared(system, std::move(final_data))); + Exit(); } Result ProfileSelect::RequestExit() { -- cgit v1.2.3