virtual_amiibo.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-3.0-or-later
  3. #pragma once
  4. #include <array>
  5. #include <string>
  6. #include <vector>
  7. #include "common/common_types.h"
  8. #include "input_common/input_engine.h"
  9. namespace Common::FS {
  10. class IOFile;
  11. }
  12. namespace InputCommon {
  13. class VirtualAmiibo final : public InputEngine {
  14. public:
  15. enum class State {
  16. Initialized,
  17. WaitingForAmiibo,
  18. AmiiboIsOpen,
  19. };
  20. enum class Info {
  21. Success,
  22. UnableToLoad,
  23. NotAnAmiibo,
  24. WrongDeviceState,
  25. Unknown,
  26. };
  27. explicit VirtualAmiibo(std::string input_engine_);
  28. ~VirtualAmiibo() override;
  29. // Sets polling mode to a controller
  30. Common::Input::PollingError SetPollingMode(
  31. const PadIdentifier& identifier_, const Common::Input::PollingMode polling_mode_) override;
  32. Common::Input::NfcState SupportsNfc(const PadIdentifier& identifier_) const override;
  33. Common::Input::NfcState WriteNfcData(const PadIdentifier& identifier_,
  34. const std::vector<u8>& data) override;
  35. State GetCurrentState() const;
  36. Info LoadAmiibo(const std::string& amiibo_file);
  37. Info ReloadAmiibo();
  38. Info CloseAmiibo();
  39. std::string GetLastFilePath() const;
  40. private:
  41. static constexpr std::size_t AmiiboSize = 0x21C;
  42. static constexpr std::size_t AmiiboSizeWithoutPassword = AmiiboSize - 0x8;
  43. static constexpr std::size_t MifareSize = 0x400;
  44. std::string file_path{};
  45. State state{State::Initialized};
  46. std::vector<u8> nfc_data;
  47. Common::Input::PollingMode polling_mode{Common::Input::PollingMode::Pasive};
  48. };
  49. } // namespace InputCommon