summaryrefslogtreecommitdiff
path: root/src/input_common
diff options
context:
space:
mode:
authorGravatar Narr the Reg2023-03-22 11:09:12 -0600
committerGravatar bunnei2023-06-03 00:05:48 -0700
commitca4be4283d8eec9624019f4bca88f7d1aa467f01 (patch)
tree6fc3424bb97d17315b1e63335020efc57a65b912 /src/input_common
parentandroid: vulkan_device: Disable VK_EXT_custom_border_color on Adreno. (diff)
downloadyuzu-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.cpp26
-rw-r--r--src/input_common/drivers/virtual_amiibo.h2
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 {
73VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { 73VirtualAmiibo::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
104VirtualAmiibo::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