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.cpp38
1 files changed, 25 insertions, 13 deletions
diff --git a/src/input_common/drivers/virtual_amiibo.cpp b/src/input_common/drivers/virtual_amiibo.cpp
index 564a188e5..63ffaca67 100644
--- a/src/input_common/drivers/virtual_amiibo.cpp
+++ b/src/input_common/drivers/virtual_amiibo.cpp
@@ -47,20 +47,20 @@ Common::Input::NfcState VirtualAmiibo::SupportsNfc(
47 47
48Common::Input::NfcState VirtualAmiibo::WriteNfcData( 48Common::Input::NfcState VirtualAmiibo::WriteNfcData(
49 [[maybe_unused]] const PadIdentifier& identifier_, const std::vector<u8>& data) { 49 [[maybe_unused]] const PadIdentifier& identifier_, const std::vector<u8>& data) {
50 const Common::FS::IOFile amiibo_file{file_path, Common::FS::FileAccessMode::ReadWrite, 50 const Common::FS::IOFile nfc_file{file_path, Common::FS::FileAccessMode::ReadWrite,
51 Common::FS::FileType::BinaryFile}; 51 Common::FS::FileType::BinaryFile};
52 52
53 if (!amiibo_file.IsOpen()) { 53 if (!nfc_file.IsOpen()) {
54 LOG_ERROR(Core, "Amiibo is already on use"); 54 LOG_ERROR(Core, "Amiibo is already on use");
55 return Common::Input::NfcState::WriteFailed; 55 return Common::Input::NfcState::WriteFailed;
56 } 56 }
57 57
58 if (!amiibo_file.Write(data)) { 58 if (!nfc_file.Write(data)) {
59 LOG_ERROR(Service_NFP, "Error writting to file"); 59 LOG_ERROR(Service_NFP, "Error writting to file");
60 return Common::Input::NfcState::WriteFailed; 60 return Common::Input::NfcState::WriteFailed;
61 } 61 }
62 62
63 amiibo_data = data; 63 nfc_data = data;
64 64
65 return Common::Input::NfcState::Success; 65 return Common::Input::NfcState::Success;
66} 66}
@@ -70,32 +70,44 @@ VirtualAmiibo::State VirtualAmiibo::GetCurrentState() const {
70} 70}
71 71
72VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { 72VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) {
73 const Common::FS::IOFile amiibo_file{filename, Common::FS::FileAccessMode::Read, 73 const Common::FS::IOFile nfc_file{filename, Common::FS::FileAccessMode::Read,
74 Common::FS::FileType::BinaryFile}; 74 Common::FS::FileType::BinaryFile};
75 75
76 if (state != State::WaitingForAmiibo) { 76 if (state != State::WaitingForAmiibo) {
77 return Info::WrongDeviceState; 77 return Info::WrongDeviceState;
78 } 78 }
79 79
80 if (!amiibo_file.IsOpen()) { 80 if (!nfc_file.IsOpen()) {
81 return Info::UnableToLoad; 81 return Info::UnableToLoad;
82 } 82 }
83 83
84 amiibo_data.resize(amiibo_size); 84 switch (nfc_file.GetSize()) {
85 85 case AmiiboSize:
86 if (amiibo_file.Read(amiibo_data) < amiibo_size_without_password) { 86 case AmiiboSizeWithoutPassword:
87 nfc_data.resize(AmiiboSize);
88 if (nfc_file.Read(nfc_data) < AmiiboSizeWithoutPassword) {
89 return Info::NotAnAmiibo;
90 }
91 break;
92 case MifareSize:
93 nfc_data.resize(MifareSize);
94 if (nfc_file.Read(nfc_data) < MifareSize) {
95 return Info::NotAnAmiibo;
96 }
97 break;
98 default:
87 return Info::NotAnAmiibo; 99 return Info::NotAnAmiibo;
88 } 100 }
89 101
90 file_path = filename; 102 file_path = filename;
91 state = State::AmiiboIsOpen; 103 state = State::AmiiboIsOpen;
92 SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, amiibo_data}); 104 SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, nfc_data});
93 return Info::Success; 105 return Info::Success;
94} 106}
95 107
96VirtualAmiibo::Info VirtualAmiibo::ReloadAmiibo() { 108VirtualAmiibo::Info VirtualAmiibo::ReloadAmiibo() {
97 if (state == State::AmiiboIsOpen) { 109 if (state == State::AmiiboIsOpen) {
98 SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, amiibo_data}); 110 SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, nfc_data});
99 return Info::Success; 111 return Info::Success;
100 } 112 }
101 113