nfp_device.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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 GetAdminInfo(AdminInfo& admin_info) const;
  41. Result DeleteRegisterInfo();
  42. Result SetRegisterInfoPrivate(const AmiiboName& amiibo_name);
  43. Result RestoreAmiibo();
  44. Result Format();
  45. Result OpenApplicationArea(u32 access_id);
  46. Result GetApplicationAreaId(u32& application_area_id) const;
  47. Result GetApplicationArea(std::vector<u8>& data) const;
  48. Result SetApplicationArea(std::span<const u8> data);
  49. Result CreateApplicationArea(u32 access_id, std::span<const u8> data);
  50. Result RecreateApplicationArea(u32 access_id, std::span<const u8> data);
  51. Result DeleteApplicationArea();
  52. u64 GetHandle() const;
  53. u32 GetApplicationAreaSize() const;
  54. DeviceState GetCurrentState() const;
  55. Core::HID::NpadIdType GetNpadId() const;
  56. Kernel::KReadableEvent& GetActivateEvent() const;
  57. Kernel::KReadableEvent& GetDeactivateEvent() const;
  58. private:
  59. void NpadUpdate(Core::HID::ControllerTriggerType type);
  60. bool LoadAmiibo(std::span<const u8> data);
  61. void CloseAmiibo();
  62. AmiiboName GetAmiiboName(const AmiiboSettings& settings) const;
  63. void SetAmiiboName(AmiiboSettings& settings, const AmiiboName& amiibo_name);
  64. AmiiboDate GetAmiiboDate(s64 posix_time) const;
  65. u64 RemoveVersionByte(u64 application_id) const;
  66. void UpdateSettingsCrc();
  67. void UpdateRegisterInfoCrc();
  68. bool is_controller_set{};
  69. int callback_key;
  70. const Core::HID::NpadIdType npad_id;
  71. Core::System& system;
  72. Core::HID::EmulatedController* npad_device = nullptr;
  73. KernelHelpers::ServiceContext& service_context;
  74. Kernel::KEvent* activate_event = nullptr;
  75. Kernel::KEvent* deactivate_event = nullptr;
  76. Kernel::KEvent* availability_change_event = nullptr;
  77. bool is_initalized{};
  78. bool is_data_moddified{};
  79. bool is_app_area_open{};
  80. bool is_plain_amiibo{};
  81. TagProtocol allowed_protocols{};
  82. s64 current_posix_time{};
  83. MountTarget mount_target{MountTarget::None};
  84. DeviceState device_state{DeviceState::Unavailable};
  85. NTAG215File tag_data{};
  86. EncryptedNTAG215File encrypted_tag_data{};
  87. };
  88. } // namespace Service::NFP