diff options
author | german77 <juangerman-13@hotmail.com> | 2022-11-13 18:07:48 +0100 |
---|---|---|
committer | german77 <juangerman-13@hotmail.com> | 2022-11-13 18:07:48 +0100 |
commit | fb57cd26a1219a5c91d2cb4dec402528f8ba308e (patch) | |
tree | b9120fd3ea1a5572687025aa70e6e6ff4bccdacb /src/core/hle/service/am/applets/applet_cabinet.h | |
parent | input_common: Add amiibo applet functions (diff) | |
download | yuzu-fb57cd26a1219a5c91d2cb4dec402528f8ba308e.tar yuzu-fb57cd26a1219a5c91d2cb4dec402528f8ba308e.tar.gz yuzu-fb57cd26a1219a5c91d2cb4dec402528f8ba308e.tar.bz2 yuzu-fb57cd26a1219a5c91d2cb4dec402528f8ba308e.tar.lz yuzu-fb57cd26a1219a5c91d2cb4dec402528f8ba308e.tar.xz yuzu-fb57cd26a1219a5c91d2cb4dec402528f8ba308e.tar.zst yuzu-fb57cd26a1219a5c91d2cb4dec402528f8ba308e.zip |
Diffstat (limited to 'src/core/hle/service/am/applets/applet_cabinet.h')
-rw-r--r-- | src/core/hle/service/am/applets/applet_cabinet.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/core/hle/service/am/applets/applet_cabinet.h b/src/core/hle/service/am/applets/applet_cabinet.h new file mode 100644 index 000000000..2d3f22434 --- /dev/null +++ b/src/core/hle/service/am/applets/applet_cabinet.h @@ -0,0 +1,99 @@ +// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <array> + +#include "core/hle/result.h" +#include "core/hle/service/am/applets/applets.h" +#include "core/hle/service/kernel_helpers.h" +#include "core/hle/service/nfp/nfp_types.h" + +namespace Kernel { +class KEvent; +class KReadableEvent; +} // namespace Kernel + +namespace Core { +class System; +} // namespace Core + +namespace Service::NFP { +class NfpDevice; +} + +namespace Service::AM::Applets { + +enum class CabinetAppletVersion : s32 { + Version1 = 0x1, +}; + +enum class CabinetResult : u8 { + Cancel, + Success, +}; + +// This is nn::nfp::AmiiboSettingsStartParam +struct AmiiboSettingsStartParam { + u64 device_handle; + std::array<u8, 0x20> param_1; + std::array<u8, 0x1> param_2; +}; +static_assert(sizeof(AmiiboSettingsStartParam) == 0x30, + "AmiiboSettingsStartParam is an invalid size"); + +// This is nn::nfp::StartParamForAmiiboSettings +struct StartParamForAmiiboSettings { + u8 param_1; + Service::NFP::CabinetMode applet_mode; + u8 flags; + u8 amiibo_settings_1; + u64 device_handle; + Service::NFP::TagInfo tag_info; + Service::NFP::RegisterInfo register_info; + std::array<u8, 0x20> amiibo_settings_3; + INSERT_PADDING_BYTES(0x20); +}; +static_assert(sizeof(StartParamForAmiiboSettings) == 0x1A8, + "StartParamForAmiiboSettings is an invalid size"); + +// This is nn::nfp::ReturnValueForAmiiboSettings +struct ReturnValueForAmiiboSettings { + CabinetResult result; + INSERT_PADDING_BYTES(0x3); + u64 device_handle; + Service::NFP::TagInfo tag_info; + Service::NFP::RegisterInfo register_info; + INSERT_PADDING_BYTES(0x24); +}; +static_assert(sizeof(ReturnValueForAmiiboSettings) == 0x190, + "ReturnValueForAmiiboSettings is an invalid size"); + +class Cabinet final : public Applet { +public: + explicit Cabinet(Core::System& system_, LibraryAppletMode applet_mode_, + const Core::Frontend::CabinetApplet& frontend_); + ~Cabinet() override; + + void Initialize() override; + + bool TransactionComplete() const override; + Result GetStatus() const override; + void ExecuteInteractive() override; + void Execute() override; + void DisplayCompleted(bool apply_changes, const std::string& amiibo_name); + void Cancel(); + +private: + const Core::Frontend::CabinetApplet& frontend; + Core::System& system; + + bool is_complete{false}; + std::shared_ptr<Service::NFP::NfpDevice> nfp_device; + Kernel::KEvent* availability_change_event; + KernelHelpers::ServiceContext service_context; + StartParamForAmiiboSettings applet_input_common{}; +}; + +} // namespace Service::AM::Applets |