From ca4be4283d8eec9624019f4bca88f7d1aa467f01 Mon Sep 17 00:00:00 2001 From: Narr the Reg Date: Wed, 22 Mar 2023 11:09:12 -0600 Subject: android: Implement amiibo reading from nfc tag --- src/input_common/drivers/virtual_amiibo.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'src/input_common/drivers/virtual_amiibo.cpp') 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 { VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { const Common::FS::IOFile nfc_file{filename, Common::FS::FileAccessMode::Read, Common::FS::FileType::BinaryFile}; - - if (state != State::WaitingForAmiibo) { - return Info::WrongDeviceState; - } + std::vector data{}; if (!nfc_file.IsOpen()) { return Info::UnableToLoad; @@ -101,7 +98,28 @@ VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { } file_path = filename; + return LoadAmiibo(data); +} + +VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(std::span data) { + if (state != State::WaitingForAmiibo) { + return Info::WrongDeviceState; + } + + switch (data.size_bytes()) { + case AmiiboSize: + case AmiiboSizeWithoutPassword: + nfc_data.resize(AmiiboSize); + break; + case MifareSize: + nfc_data.resize(MifareSize); + break; + default: + return Info::NotAnAmiibo; + } + state = State::AmiiboIsOpen; + memcpy(nfc_data.data(),data.data(),data.size_bytes()); SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, nfc_data}); return Info::Success; } -- cgit v1.2.3 From ee8caac82f8276dd6585042850c76373dd36ed69 Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 30 May 2023 20:50:09 -0700 Subject: android: Various fixes for CI. --- src/input_common/drivers/virtual_amiibo.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/input_common/drivers/virtual_amiibo.cpp') diff --git a/src/input_common/drivers/virtual_amiibo.cpp b/src/input_common/drivers/virtual_amiibo.cpp index 9505179c6..c08f21e2c 100644 --- a/src/input_common/drivers/virtual_amiibo.cpp +++ b/src/input_common/drivers/virtual_amiibo.cpp @@ -107,19 +107,19 @@ VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(std::span data) { } switch (data.size_bytes()) { - case AmiiboSize: - case AmiiboSizeWithoutPassword: - nfc_data.resize(AmiiboSize); - break; - case MifareSize: - nfc_data.resize(MifareSize); - break; - default: - return Info::NotAnAmiibo; + case AmiiboSize: + case AmiiboSizeWithoutPassword: + nfc_data.resize(AmiiboSize); + break; + case MifareSize: + nfc_data.resize(MifareSize); + break; + default: + return Info::NotAnAmiibo; } state = State::AmiiboIsOpen; - memcpy(nfc_data.data(),data.data(),data.size_bytes()); + memcpy(nfc_data.data(), data.data(), data.size_bytes()); SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, nfc_data}); return Info::Success; } -- cgit v1.2.3 From eb4ab9bc58954c6a2bdd6ed3e8d1ecfb41d11e4a Mon Sep 17 00:00:00 2001 From: bunnei Date: Wed, 31 May 2023 22:51:27 -0700 Subject: input_common: Fix virtual amiibos --- src/input_common/drivers/virtual_amiibo.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/input_common/drivers/virtual_amiibo.cpp') diff --git a/src/input_common/drivers/virtual_amiibo.cpp b/src/input_common/drivers/virtual_amiibo.cpp index c08f21e2c..f8bafe553 100644 --- a/src/input_common/drivers/virtual_amiibo.cpp +++ b/src/input_common/drivers/virtual_amiibo.cpp @@ -82,14 +82,14 @@ VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { switch (nfc_file.GetSize()) { case AmiiboSize: case AmiiboSizeWithoutPassword: - nfc_data.resize(AmiiboSize); - if (nfc_file.Read(nfc_data) < AmiiboSizeWithoutPassword) { + data.resize(AmiiboSize); + if (nfc_file.Read(data) < AmiiboSizeWithoutPassword) { return Info::NotAnAmiibo; } break; case MifareSize: - nfc_data.resize(MifareSize); - if (nfc_file.Read(nfc_data) < MifareSize) { + data.resize(MifareSize); + if (nfc_file.Read(data) < MifareSize) { return Info::NotAnAmiibo; } break; -- cgit v1.2.3