diff options
author | german77 <juangerman-13@hotmail.com> | 2022-09-25 05:52:33 +0200 |
---|---|---|
committer | german77 <juangerman-13@hotmail.com> | 2022-10-02 19:32:26 +0200 |
commit | 3ce0ef04ddcb2420b61f8c6d22f8039fb7359856 (patch) | |
tree | f2e843da46429df8ae6c1f8f415bc507d3458f28 /src/core/hle | |
parent | service: nfp: Rewrite and implement applet calls (diff) | |
download | yuzu-3ce0ef04ddcb2420b61f8c6d22f8039fb7359856.tar yuzu-3ce0ef04ddcb2420b61f8c6d22f8039fb7359856.tar.gz yuzu-3ce0ef04ddcb2420b61f8c6d22f8039fb7359856.tar.bz2 yuzu-3ce0ef04ddcb2420b61f8c6d22f8039fb7359856.tar.lz yuzu-3ce0ef04ddcb2420b61f8c6d22f8039fb7359856.tar.xz yuzu-3ce0ef04ddcb2420b61f8c6d22f8039fb7359856.tar.zst yuzu-3ce0ef04ddcb2420b61f8c6d22f8039fb7359856.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/service/nfp/nfp_device.cpp | 11 | ||||
-rw-r--r-- | src/core/hle/service/nfp/nfp_device.h | 4 | ||||
-rw-r--r-- | src/core/hle/service/nfp/nfp_types.h | 25 |
3 files changed, 21 insertions, 19 deletions
diff --git a/src/core/hle/service/nfp/nfp_device.cpp b/src/core/hle/service/nfp/nfp_device.cpp index da7daae88..ce3bcccf4 100644 --- a/src/core/hle/service/nfp/nfp_device.cpp +++ b/src/core/hle/service/nfp/nfp_device.cpp @@ -42,10 +42,11 @@ NfpDevice::NfpDevice(Core::HID::NpadIdType npad_id_, Core::System& system_, } NfpDevice::~NfpDevice() { - if (is_controller_set) { - npad_device->DeleteCallback(callback_key); - is_controller_set = false; + if (!is_controller_set) { + return; } + npad_device->DeleteCallback(callback_key); + is_controller_set = false; }; void NfpDevice::NpadUpdate(Core::HID::ControllerTriggerType type) { @@ -453,7 +454,7 @@ Result NfpDevice::SetApplicationArea(const std::vector<u8>& data) { return ResultSuccess; } -Result NfpDevice::CreateApplicationArea(u32 access_id, const std::vector<u8>& data) { +Result NfpDevice::CreateApplicationArea(u32 access_id, std::span<const u8> data) { if (device_state != DeviceState::TagMounted) { LOG_ERROR(Service_NFP, "Wrong device state {}", device_state); if (device_state == DeviceState::TagRemoved) { @@ -470,7 +471,7 @@ Result NfpDevice::CreateApplicationArea(u32 access_id, const std::vector<u8>& da return RecreateApplicationArea(access_id, data); } -Result NfpDevice::RecreateApplicationArea(u32 access_id, const std::vector<u8>& data) { +Result NfpDevice::RecreateApplicationArea(u32 access_id, std::span<const u8> data) { if (device_state != DeviceState::TagMounted) { LOG_ERROR(Service_NFP, "Wrong device state {}", device_state); if (device_state == DeviceState::TagRemoved) { diff --git a/src/core/hle/service/nfp/nfp_device.h b/src/core/hle/service/nfp/nfp_device.h index 53cc0833f..9ceb7b8fd 100644 --- a/src/core/hle/service/nfp/nfp_device.h +++ b/src/core/hle/service/nfp/nfp_device.h @@ -56,8 +56,8 @@ public: Result OpenApplicationArea(u32 access_id); Result GetApplicationArea(std::vector<u8>& data) const; Result SetApplicationArea(const std::vector<u8>& data); - Result CreateApplicationArea(u32 access_id, const std::vector<u8>& data); - Result RecreateApplicationArea(u32 access_id, const std::vector<u8>& data); + Result CreateApplicationArea(u32 access_id, std::span<const u8> data); + Result RecreateApplicationArea(u32 access_id, std::span<const u8> data); Result DeleteApplicationArea(); u64 GetHandle() const; diff --git a/src/core/hle/service/nfp/nfp_types.h b/src/core/hle/service/nfp/nfp_types.h index d58657a21..2685ae8fe 100644 --- a/src/core/hle/service/nfp/nfp_types.h +++ b/src/core/hle/service/nfp/nfp_types.h @@ -5,6 +5,7 @@ #include <array> +#include "common/swap.h" #include "core/hle/service/mii/types.h" namespace Service::NFP { @@ -80,33 +81,33 @@ using ApplicationArea = std::array<u8, 0xD8>; using AmiiboName = std::array<char, (amiibo_name_length * 4) + 1>; struct AmiiboDate { - u16_be raw_date{}; + u16 raw_date{}; - u16 DateRaw() const { - return static_cast<u16>(raw_date); + u16 GetValue() const { + return Common::swap16(raw_date); } u16 GetYear() const { - return static_cast<u16>(((DateRaw() & 0xFE00) >> 9) + 2000); + return static_cast<u16>(((GetValue() & 0xFE00) >> 9) + 2000); } u8 GetMonth() const { - return static_cast<u8>(((DateRaw() & 0x01E0) >> 5) - 1); + return static_cast<u8>(((GetValue() & 0x01E0) >> 5) - 1); } u8 GetDay() const { - return static_cast<u8>(DateRaw() & 0x001F); + return static_cast<u8>(GetValue() & 0x001F); } void SetYear(u16 year) { - raw_date = DateRaw() & ~0xFE00; - raw_date |= static_cast<u16_be>((year - 2000) << 9); + const u16 year_converted = static_cast<u16>((year - 2000) << 9); + raw_date = Common::swap16((GetValue() & ~0xFE00) | year_converted); } void SetMonth(u8 month) { - raw_date = DateRaw() & ~0x01E0; - raw_date |= static_cast<u16_be>((month + 1) << 5); + const u16 month_converted = static_cast<u16>((month + 1) << 5); + raw_date = Common::swap16((GetValue() & ~0x01E0) | month_converted); } void SetDay(u8 day) { - raw_date = DateRaw() & ~0x001F; - raw_date |= static_cast<u16_be>(day); + const u16 day_converted = static_cast<u16>(day); + raw_date = Common::swap16((GetValue() & ~0x001F) | day_converted); } }; static_assert(sizeof(AmiiboDate) == 2, "AmiiboDate is an invalid size"); |