diff options
Diffstat (limited to 'src/input_common')
| -rw-r--r-- | src/input_common/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | src/input_common/drivers/virtual_amiibo.cpp | 38 | ||||
| -rw-r--r-- | src/input_common/drivers/virtual_amiibo.h | 7 |
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) |
| 65 | endif() | 61 | endif() |
| 66 | 62 | ||
| 67 | target_link_libraries(input_common PRIVATE usb) | ||
| 68 | |||
| 69 | create_target_directory_groups(input_common) | 63 | create_target_directory_groups(input_common) |
| 70 | target_link_libraries(input_common PUBLIC core PRIVATE common Boost::boost) | 64 | target_link_libraries(input_common PUBLIC core PRIVATE common Boost::boost libusb::usb) |
| 71 | 65 | ||
| 72 | if (YUZU_USE_PRECOMPILED_HEADERS) | 66 | if (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 | ||
| 48 | Common::Input::NfcState VirtualAmiibo::WriteNfcData( | 48 | Common::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 | ||
| 72 | VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { | 72 | VirtualAmiibo::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 | ||
| 96 | VirtualAmiibo::Info VirtualAmiibo::ReloadAmiibo() { | 108 | VirtualAmiibo::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 | ||
| 55 | private: | 55 | private: |
| 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 |