Răsfoiți Sursa

input_common: Allow mifare files

Narr the Reg 3 ani în urmă
părinte
comite
752236caad

+ 25 - 13
src/input_common/drivers/virtual_amiibo.cpp

@@ -47,20 +47,20 @@ Common::Input::NfcState VirtualAmiibo::SupportsNfc(
 
 Common::Input::NfcState VirtualAmiibo::WriteNfcData(
     [[maybe_unused]] const PadIdentifier& identifier_, const std::vector<u8>& data) {
-    const Common::FS::IOFile amiibo_file{file_path, Common::FS::FileAccessMode::ReadWrite,
-                                         Common::FS::FileType::BinaryFile};
+    const Common::FS::IOFile nfc_file{file_path, Common::FS::FileAccessMode::ReadWrite,
+                                      Common::FS::FileType::BinaryFile};
 
-    if (!amiibo_file.IsOpen()) {
+    if (!nfc_file.IsOpen()) {
         LOG_ERROR(Core, "Amiibo is already on use");
         return Common::Input::NfcState::WriteFailed;
     }
 
-    if (!amiibo_file.Write(data)) {
+    if (!nfc_file.Write(data)) {
         LOG_ERROR(Service_NFP, "Error writting to file");
         return Common::Input::NfcState::WriteFailed;
     }
 
-    amiibo_data = data;
+    nfc_data = data;
 
     return Common::Input::NfcState::Success;
 }
@@ -70,32 +70,44 @@ VirtualAmiibo::State VirtualAmiibo::GetCurrentState() const {
 }
 
 VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) {
-    const Common::FS::IOFile amiibo_file{filename, Common::FS::FileAccessMode::Read,
-                                         Common::FS::FileType::BinaryFile};
+    const Common::FS::IOFile nfc_file{filename, Common::FS::FileAccessMode::Read,
+                                      Common::FS::FileType::BinaryFile};
 
     if (state != State::WaitingForAmiibo) {
         return Info::WrongDeviceState;
     }
 
-    if (!amiibo_file.IsOpen()) {
+    if (!nfc_file.IsOpen()) {
         return Info::UnableToLoad;
     }
 
-    amiibo_data.resize(amiibo_size);
-
-    if (amiibo_file.Read(amiibo_data) < amiibo_size_without_password) {
+    switch (nfc_file.GetSize()) {
+    case AmiiboSize:
+    case AmiiboSizeWithoutPassword:
+        nfc_data.resize(AmiiboSize);
+        if (nfc_file.Read(nfc_data) < AmiiboSizeWithoutPassword) {
+            return Info::NotAnAmiibo;
+        }
+        break;
+    case MifareSize:
+        nfc_data.resize(MifareSize);
+        if (nfc_file.Read(nfc_data) < MifareSize) {
+            return Info::NotAnAmiibo;
+        }
+        break;
+    default:
         return Info::NotAnAmiibo;
     }
 
     file_path = filename;
     state = State::AmiiboIsOpen;
-    SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, amiibo_data});
+    SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, nfc_data});
     return Info::Success;
 }
 
 VirtualAmiibo::Info VirtualAmiibo::ReloadAmiibo() {
     if (state == State::AmiiboIsOpen) {
-        SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, amiibo_data});
+        SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, nfc_data});
         return Info::Success;
     }
 

+ 4 - 3
src/input_common/drivers/virtual_amiibo.h

@@ -53,12 +53,13 @@ public:
     std::string GetLastFilePath() const;
 
 private:
-    static constexpr std::size_t amiibo_size = 0x21C;
-    static constexpr std::size_t amiibo_size_without_password = amiibo_size - 0x8;
+    static constexpr std::size_t AmiiboSize = 0x21C;
+    static constexpr std::size_t AmiiboSizeWithoutPassword = AmiiboSize - 0x8;
+    static constexpr std::size_t MifareSize = 0x400;
 
     std::string file_path{};
     State state{State::Initialized};
-    std::vector<u8> amiibo_data;
+    std::vector<u8> nfc_data;
     Common::Input::PollingMode polling_mode{Common::Input::PollingMode::Pasive};
 };
 } // namespace InputCommon