nfp_device.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <span>
  5. #include <vector>
  6. #include "common/common_types.h"
  7. #include "core/hle/service/kernel_helpers.h"
  8. #include "core/hle/service/nfp/nfp_types.h"
  9. #include "core/hle/service/service.h"
  10. namespace Kernel {
  11. class KEvent;
  12. class KReadableEvent;
  13. } // namespace Kernel
  14. namespace Core {
  15. class System;
  16. } // namespace Core
  17. namespace Core::HID {
  18. class EmulatedController;
  19. enum class ControllerTriggerType;
  20. enum class NpadIdType : u32;
  21. } // namespace Core::HID
  22. namespace Service::NFP {
  23. class NfpDevice {
  24. public:
  25. NfpDevice(Core::HID::NpadIdType npad_id_, Core::System& system_,
  26. KernelHelpers::ServiceContext& service_context_,
  27. Kernel::KEvent* availability_change_event_);
  28. ~NfpDevice();
  29. void Initialize();
  30. void Finalize();
  31. Result StartDetection(TagProtocol allowed_protocol);
  32. Result StopDetection();
  33. Result Mount(MountTarget mount_target);
  34. Result Unmount();
  35. Result Flush();
  36. Result GetTagInfo(TagInfo& tag_info) const;
  37. Result GetCommonInfo(CommonInfo& common_info) const;
  38. Result GetModelInfo(ModelInfo& model_info) const;
  39. Result GetRegisterInfo(RegisterInfo& register_info) const;
  40. Result SetNicknameAndOwner(const AmiiboName& amiibo_name);
  41. Result RestoreAmiibo();
  42. Result DeleteAllData();
  43. Result OpenApplicationArea(u32 access_id);
  44. Result GetApplicationAreaId(u32& application_area_id) const;
  45. Result GetApplicationArea(std::vector<u8>& data) const;
  46. Result SetApplicationArea(std::span<const u8> data);
  47. Result CreateApplicationArea(u32 access_id, std::span<const u8> data);
  48. Result RecreateApplicationArea(u32 access_id, std::span<const u8> data);
  49. Result DeleteApplicationArea();
  50. u64 GetHandle() const;
  51. u32 GetApplicationAreaSize() const;
  52. DeviceState GetCurrentState() const;
  53. Core::HID::NpadIdType GetNpadId() const;
  54. Kernel::KReadableEvent& GetActivateEvent() const;
  55. Kernel::KReadableEvent& GetDeactivateEvent() const;
  56. private:
  57. void NpadUpdate(Core::HID::ControllerTriggerType type);
  58. bool LoadAmiibo(std::span<const u8> data);
  59. void CloseAmiibo();
  60. AmiiboName GetAmiiboName(const AmiiboSettings& settings) const;
  61. void SetAmiiboName(AmiiboSettings& settings, const AmiiboName& amiibo_name);
  62. AmiiboDate GetAmiiboDate(s64 posix_time) const;
  63. bool is_controller_set{};
  64. int callback_key;
  65. const Core::HID::NpadIdType npad_id;
  66. Core::System& system;
  67. Core::HID::EmulatedController* npad_device = nullptr;
  68. KernelHelpers::ServiceContext& service_context;
  69. Kernel::KEvent* activate_event = nullptr;
  70. Kernel::KEvent* deactivate_event = nullptr;
  71. Kernel::KEvent* availability_change_event = nullptr;
  72. bool is_data_moddified{};
  73. bool is_app_area_open{};
  74. TagProtocol allowed_protocols{};
  75. s64 current_posix_time{};
  76. MountTarget mount_target{MountTarget::None};
  77. DeviceState device_state{DeviceState::Unavailable};
  78. NTAG215File tag_data{};
  79. EncryptedNTAG215File encrypted_tag_data{};
  80. };
  81. } // namespace Service::NFP