| | |
| | |
| |
|
| | #pragma once |
| |
|
| | #include <array> |
| | #include <span> |
| | #include <string> |
| | #include <vector> |
| |
|
| | #include "common/common_types.h" |
| | #include "input_common/input_engine.h" |
| |
|
| | namespace Common::FS { |
| | class IOFile; |
| | } |
| |
|
| | namespace InputCommon { |
| |
|
| | class VirtualAmiibo final : public InputEngine { |
| | public: |
| | enum class State { |
| | Disabled, |
| | Initialized, |
| | WaitingForAmiibo, |
| | TagNearby, |
| | }; |
| |
|
| | enum class Info { |
| | Success, |
| | UnableToLoad, |
| | NotAnAmiibo, |
| | WrongDeviceState, |
| | Unknown, |
| | }; |
| |
|
| | explicit VirtualAmiibo(std::string input_engine_); |
| | ~VirtualAmiibo() override; |
| |
|
| | |
| | Common::Input::DriverResult SetPollingMode( |
| | const PadIdentifier& identifier_, const Common::Input::PollingMode polling_mode_) override; |
| |
|
| | Common::Input::NfcState SupportsNfc(const PadIdentifier& identifier_) const override; |
| | Common::Input::NfcState StartNfcPolling(const PadIdentifier& identifier_) override; |
| | Common::Input::NfcState StopNfcPolling(const PadIdentifier& identifier_) override; |
| | Common::Input::NfcState ReadAmiiboData(const PadIdentifier& identifier_, |
| | std::vector<u8>& out_data) override; |
| | Common::Input::NfcState WriteNfcData(const PadIdentifier& identifier_, |
| | const std::vector<u8>& data) override; |
| | Common::Input::NfcState ReadMifareData(const PadIdentifier& identifier_, |
| | const Common::Input::MifareRequest& data, |
| | Common::Input::MifareRequest& out_data) override; |
| | Common::Input::NfcState WriteMifareData(const PadIdentifier& identifier_, |
| | const Common::Input::MifareRequest& data) override; |
| |
|
| | State GetCurrentState() const; |
| |
|
| | Info LoadAmiibo(const std::string& amiibo_file); |
| | Info LoadAmiibo(std::span<u8> data); |
| | Info ReloadAmiibo(); |
| | Info CloseAmiibo(); |
| |
|
| | std::string GetLastFilePath() const; |
| |
|
| | private: |
| | static constexpr std::size_t AmiiboSize = 0x21C; |
| | static constexpr std::size_t AmiiboSizeWithoutPassword = AmiiboSize - 0x8; |
| | static constexpr std::size_t AmiiboSizeWithSignature = AmiiboSize + 0x20; |
| | static constexpr std::size_t MifareSize = 0x400; |
| |
|
| | std::string file_path{}; |
| | State state{State::Disabled}; |
| | std::vector<u8> nfc_data; |
| | Common::Input::NfcStatus status; |
| | Common::Input::PollingMode polling_mode{Common::Input::PollingMode::Passive}; |
| | }; |
| | } |
| |
|