summaryrefslogtreecommitdiff
path: root/src/input_common
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common')
-rw-r--r--src/input_common/CMakeLists.txt10
-rw-r--r--src/input_common/drivers/virtual_amiibo.cpp38
-rw-r--r--src/input_common/drivers/virtual_amiibo.h7
3 files changed, 31 insertions, 24 deletions
diff --git a/src/input_common/CMakeLists.txt b/src/input_common/CMakeLists.txt
index e41da2726..7932aaab0 100644
--- a/src/input_common/CMakeLists.txt
+++ b/src/input_common/CMakeLists.txt
@@ -56,18 +56,12 @@ if (ENABLE_SDL2)
56 drivers/sdl_driver.cpp 56 drivers/sdl_driver.cpp
57 drivers/sdl_driver.h 57 drivers/sdl_driver.h
58 ) 58 )
59 if (YUZU_USE_EXTERNAL_SDL2) 59 target_link_libraries(input_common PRIVATE SDL2::SDL2)
60 target_link_libraries(input_common PRIVATE SDL2-static)
61 else()
62 target_link_libraries(input_common PRIVATE SDL2)
63 endif()
64 target_compile_definitions(input_common PRIVATE HAVE_SDL2) 60 target_compile_definitions(input_common PRIVATE HAVE_SDL2)
65endif() 61endif()
66 62
67target_link_libraries(input_common PRIVATE usb)
68
69create_target_directory_groups(input_common) 63create_target_directory_groups(input_common)
70target_link_libraries(input_common PUBLIC core PRIVATE common Boost::boost) 64target_link_libraries(input_common PUBLIC core PRIVATE common Boost::boost libusb::usb)
71 65
72if (YUZU_USE_PRECOMPILED_HEADERS) 66if (YUZU_USE_PRECOMPILED_HEADERS)
73 target_precompile_headers(input_common PRIVATE precompiled_headers.h) 67 target_precompile_headers(input_common PRIVATE precompiled_headers.h)
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
diff --git a/src/input_common/drivers/virtual_amiibo.h b/src/input_common/drivers/virtual_amiibo.h
index 9baeb3997..0f9dad333 100644
--- a/src/input_common/drivers/virtual_amiibo.h
+++ b/src/input_common/drivers/virtual_amiibo.h
@@ -53,12 +53,13 @@ public:
53 std::string GetLastFilePath() const; 53 std::string GetLastFilePath() const;
54 54
55private: 55private:
56 static constexpr std::size_t amiibo_size = 0x21C; 56 static constexpr std::size_t AmiiboSize = 0x21C;
57 static constexpr std::size_t amiibo_size_without_password = amiibo_size - 0x8; 57 static constexpr std::size_t AmiiboSizeWithoutPassword = AmiiboSize - 0x8;
58 static constexpr std::size_t MifareSize = 0x400;
58 59
59 std::string file_path{}; 60 std::string file_path{};
60 State state{State::Initialized}; 61 State state{State::Initialized};
61 std::vector<u8> amiibo_data; 62 std::vector<u8> nfc_data;
62 Common::Input::PollingMode polling_mode{Common::Input::PollingMode::Pasive}; 63 Common::Input::PollingMode polling_mode{Common::Input::PollingMode::Pasive};
63}; 64};
64} // namespace InputCommon 65} // namespace InputCommon