diff options
author | german77 <juangerman-13@hotmail.com> | 2022-02-13 18:59:47 +0100 |
---|---|---|
committer | german77 <juangerman-13@hotmail.com> | 2022-02-13 20:52:34 +0100 |
commit | b57d61010f347e74875f0c8a1003b4f84fa7b062 (patch) | |
tree | dd80e607949efe0f545803a9db95444c5a1f6c6b /src/core/hle/service/nfp/nfp.cpp | |
parent | nfp: Separate nfc tag from amiibo data (diff) | |
download | yuzu-b57d61010f347e74875f0c8a1003b4f84fa7b062.tar yuzu-b57d61010f347e74875f0c8a1003b4f84fa7b062.tar.gz yuzu-b57d61010f347e74875f0c8a1003b4f84fa7b062.tar.bz2 yuzu-b57d61010f347e74875f0c8a1003b4f84fa7b062.tar.lz yuzu-b57d61010f347e74875f0c8a1003b4f84fa7b062.tar.xz yuzu-b57d61010f347e74875f0c8a1003b4f84fa7b062.tar.zst yuzu-b57d61010f347e74875f0c8a1003b4f84fa7b062.zip |
Diffstat (limited to 'src/core/hle/service/nfp/nfp.cpp')
-rw-r--r-- | src/core/hle/service/nfp/nfp.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/core/hle/service/nfp/nfp.cpp b/src/core/hle/service/nfp/nfp.cpp index 63e257975..513107715 100644 --- a/src/core/hle/service/nfp/nfp.cpp +++ b/src/core/hle/service/nfp/nfp.cpp @@ -479,25 +479,35 @@ void Module::Interface::CreateUserInterface(Kernel::HLERequestContext& ctx) { } bool Module::Interface::LoadAmiibo(const std::vector<u8>& buffer) { - if (buffer.size() < sizeof(NTAG215File)) { - LOG_ERROR(Service_NFP, "Wrong file size"); + if (device_state != DeviceState::SearchingForTag) { + LOG_ERROR(Service_NFP, "Game is not looking for amiibos, current state {}", device_state); return false; } - if (device_state != DeviceState::SearchingForTag) { - LOG_ERROR(Service_NFP, "Game is not looking for amiibos, current state {}", device_state); + constexpr auto tag_size = sizeof(NTAG215File); + constexpr auto tag_size_without_password = sizeof(NTAG215File) - sizeof(NTAG215Password); + + std::vector<u8> amiibo_buffer = buffer; + + if (amiibo_buffer.size() < tag_size_without_password) { + LOG_ERROR(Service_NFP, "Wrong file size {}", buffer.size()); return false; } + // Ensure it has the correct size + if (amiibo_buffer.size() != tag_size) { + amiibo_buffer.resize(tag_size, 0); + } + LOG_INFO(Service_NFP, "Amiibo detected"); - std::memcpy(&tag_data, buffer.data(), sizeof(tag_data)); + std::memcpy(&tag_data, buffer.data(), tag_size); if (!IsAmiiboValid()) { return false; } // This value can't be dumped from a tag. Generate it - tag_data.PWD = GetTagPassword(tag_data.uuid); + tag_data.password.PWD = GetTagPassword(tag_data.uuid); device_state = DeviceState::TagFound; activate_event->GetWritableEvent().Signal(); |