diff options
| author | 2023-03-22 11:09:12 -0600 | |
|---|---|---|
| committer | 2023-06-03 00:05:48 -0700 | |
| commit | ca4be4283d8eec9624019f4bca88f7d1aa467f01 (patch) | |
| tree | 6fc3424bb97d17315b1e63335020efc57a65b912 /src/input_common | |
| parent | android: vulkan_device: Disable VK_EXT_custom_border_color on Adreno. (diff) | |
| download | yuzu-ca4be4283d8eec9624019f4bca88f7d1aa467f01.tar.gz yuzu-ca4be4283d8eec9624019f4bca88f7d1aa467f01.tar.xz yuzu-ca4be4283d8eec9624019f4bca88f7d1aa467f01.zip | |
android: Implement amiibo reading from nfc tag
Diffstat (limited to 'src/input_common')
| -rw-r--r-- | src/input_common/drivers/virtual_amiibo.cpp | 26 | ||||
| -rw-r--r-- | src/input_common/drivers/virtual_amiibo.h | 2 |
2 files changed, 24 insertions, 4 deletions
diff --git a/src/input_common/drivers/virtual_amiibo.cpp b/src/input_common/drivers/virtual_amiibo.cpp index 304f4c70b..9505179c6 100644 --- a/src/input_common/drivers/virtual_amiibo.cpp +++ b/src/input_common/drivers/virtual_amiibo.cpp | |||
| @@ -73,10 +73,7 @@ VirtualAmiibo::State VirtualAmiibo::GetCurrentState() const { | |||
| 73 | VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { | 73 | VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { |
| 74 | const Common::FS::IOFile nfc_file{filename, Common::FS::FileAccessMode::Read, | 74 | const Common::FS::IOFile nfc_file{filename, Common::FS::FileAccessMode::Read, |
| 75 | Common::FS::FileType::BinaryFile}; | 75 | Common::FS::FileType::BinaryFile}; |
| 76 | 76 | std::vector<u8> data{}; | |
| 77 | if (state != State::WaitingForAmiibo) { | ||
| 78 | return Info::WrongDeviceState; | ||
| 79 | } | ||
| 80 | 77 | ||
| 81 | if (!nfc_file.IsOpen()) { | 78 | if (!nfc_file.IsOpen()) { |
| 82 | return Info::UnableToLoad; | 79 | return Info::UnableToLoad; |
| @@ -101,7 +98,28 @@ VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { | |||
| 101 | } | 98 | } |
| 102 | 99 | ||
| 103 | file_path = filename; | 100 | file_path = filename; |
| 101 | return LoadAmiibo(data); | ||
| 102 | } | ||
| 103 | |||
| 104 | VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(std::span<u8> data) { | ||
| 105 | if (state != State::WaitingForAmiibo) { | ||
| 106 | return Info::WrongDeviceState; | ||
| 107 | } | ||
| 108 | |||
| 109 | switch (data.size_bytes()) { | ||
| 110 | case AmiiboSize: | ||
| 111 | case AmiiboSizeWithoutPassword: | ||
| 112 | nfc_data.resize(AmiiboSize); | ||
| 113 | break; | ||
| 114 | case MifareSize: | ||
| 115 | nfc_data.resize(MifareSize); | ||
| 116 | break; | ||
| 117 | default: | ||
| 118 | return Info::NotAnAmiibo; | ||
| 119 | } | ||
| 120 | |||
| 104 | state = State::AmiiboIsOpen; | 121 | state = State::AmiiboIsOpen; |
| 122 | memcpy(nfc_data.data(),data.data(),data.size_bytes()); | ||
| 105 | SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, nfc_data}); | 123 | SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, nfc_data}); |
| 106 | return Info::Success; | 124 | return Info::Success; |
| 107 | } | 125 | } |
diff --git a/src/input_common/drivers/virtual_amiibo.h b/src/input_common/drivers/virtual_amiibo.h index 488d00b31..34e97cd91 100644 --- a/src/input_common/drivers/virtual_amiibo.h +++ b/src/input_common/drivers/virtual_amiibo.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #pragma once | 4 | #pragma once |
| 5 | 5 | ||
| 6 | #include <array> | 6 | #include <array> |
| 7 | #include <span> | ||
| 7 | #include <string> | 8 | #include <string> |
| 8 | #include <vector> | 9 | #include <vector> |
| 9 | 10 | ||
| @@ -47,6 +48,7 @@ public: | |||
| 47 | State GetCurrentState() const; | 48 | State GetCurrentState() const; |
| 48 | 49 | ||
| 49 | Info LoadAmiibo(const std::string& amiibo_file); | 50 | Info LoadAmiibo(const std::string& amiibo_file); |
| 51 | Info LoadAmiibo(std::span<u8> data); | ||
| 50 | Info ReloadAmiibo(); | 52 | Info ReloadAmiibo(); |
| 51 | Info CloseAmiibo(); | 53 | Info CloseAmiibo(); |
| 52 | 54 | ||