diff options
author | Narr the Reg <juangerman-13@hotmail.com> | 2022-08-31 02:28:37 +0200 |
---|---|---|
committer | german77 <juangerman-13@hotmail.com> | 2022-09-07 08:04:00 +0200 |
commit | caa138b33f6bbc18cde4d403017dad6bd4387e13 (patch) | |
tree | 7de25f6a4f3f17e2beff0711e01119bedde15c2e /src/core/hle/service/nfp/nfp.cpp | |
parent | core: nfp: Implement Convert and RecreateApplicationArea, accuracy fixes (diff) | |
download | yuzu-caa138b33f6bbc18cde4d403017dad6bd4387e13.tar yuzu-caa138b33f6bbc18cde4d403017dad6bd4387e13.tar.gz yuzu-caa138b33f6bbc18cde4d403017dad6bd4387e13.tar.bz2 yuzu-caa138b33f6bbc18cde4d403017dad6bd4387e13.tar.lz yuzu-caa138b33f6bbc18cde4d403017dad6bd4387e13.tar.xz yuzu-caa138b33f6bbc18cde4d403017dad6bd4387e13.tar.zst yuzu-caa138b33f6bbc18cde4d403017dad6bd4387e13.zip |
Diffstat (limited to 'src/core/hle/service/nfp/nfp.cpp')
-rw-r--r-- | src/core/hle/service/nfp/nfp.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/core/hle/service/nfp/nfp.cpp b/src/core/hle/service/nfp/nfp.cpp index 20fea87e6..fb89f6911 100644 --- a/src/core/hle/service/nfp/nfp.cpp +++ b/src/core/hle/service/nfp/nfp.cpp @@ -7,6 +7,7 @@ #include "common/fs/file.h" #include "common/fs/path_util.h" #include "common/logging/log.h" +#include "common/string_util.h" #include "core/core.h" #include "core/hid/emulated_controller.h" #include "core/hid/hid_core.h" @@ -917,20 +918,14 @@ Result Module::Interface::GetRegisterInfo(RegisterInfo& register_info) const { if (is_data_decoded && tag_data.settings.settings.amiibo_initialized != 0) { const auto& settings = tag_data.settings; - // Amiibo name is u16 while the register info is u8. Figure out how to handle this properly - std::array<u8, 11> amiibo_name{}; - for (std::size_t i = 0; i < sizeof(amiibo_name) - 1; ++i) { - amiibo_name[i] = static_cast<u8>(settings.amiibo_name[i]); - } - // TODO: Validate this data register_info = { .mii_char_info = manager.ConvertV3ToCharInfo(tag_data.owner_mii), .first_write_year = settings.init_date.GetYear(), .first_write_month = settings.init_date.GetMonth(), .first_write_day = settings.init_date.GetDay(), - .amiibo_name = amiibo_name, - .unknown = {}, + .amiibo_name = GetAmiiboName(settings), + .font_region = {}, }; return ResultSuccess; @@ -943,7 +938,7 @@ Result Module::Interface::GetRegisterInfo(RegisterInfo& register_info) const { .first_write_month = 2, .first_write_day = 7, .amiibo_name = {'Y', 'u', 'z', 'u', 'A', 'm', 'i', 'i', 'b', 'o', 0}, - .unknown = {}, + .font_region = {}, }; return ResultSuccess; } @@ -1077,6 +1072,22 @@ Core::HID::NpadIdType Module::Interface::GetNpadId() const { return npad_id; } +AmiiboName Module::Interface::GetAmiiboName(const AmiiboSettings& settings) const { + std::array<char16_t, amiibo_name_length> settings_amiibo_name{}; + AmiiboName amiibo_name{}; + + // Convert from big endian to little endian + for (std::size_t i = 0; i < amiibo_name_length; i++) { + settings_amiibo_name[i] = static_cast<u16>(settings.amiibo_name[i]); + } + + // Convert from utf16 to utf8 + const auto amiibo_name_utf8 = Common::UTF16ToUTF8(settings_amiibo_name.data()); + memcpy(amiibo_name.data(), amiibo_name_utf8.data(), amiibo_name_utf8.size()); + + return amiibo_name; +} + void InstallInterfaces(SM::ServiceManager& service_manager, Core::System& system) { auto module = std::make_shared<Module>(); std::make_shared<NFP_User>(module, system)->InstallAsService(service_manager); |