summaryrefslogtreecommitdiff
path: root/src/input_common/drivers/virtual_amiibo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common/drivers/virtual_amiibo.cpp')
-rw-r--r--src/input_common/drivers/virtual_amiibo.cpp26
1 files changed, 22 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}