summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/common/input.h2
-rw-r--r--src/core/hid/input_converter.cpp2
-rw-r--r--src/core/hle/service/nfp/nfp_device.cpp11
-rw-r--r--src/core/hle/service/nfp/nfp_device.h4
-rw-r--r--src/core/hle/service/nfp/nfp_types.h25
-rw-r--r--src/input_common/drivers/virtual_amiibo.cpp4
-rw-r--r--src/input_common/drivers/virtual_amiibo.h2
-rw-r--r--src/input_common/input_engine.h3
-rw-r--r--src/input_common/input_poller.cpp2
9 files changed, 29 insertions, 26 deletions
diff --git a/src/common/input.h b/src/common/input.h
index 8365cc36e..bfa0639f5 100644
--- a/src/common/input.h
+++ b/src/common/input.h
@@ -332,7 +332,7 @@ public:
332 return CameraError::NotSupported; 332 return CameraError::NotSupported;
333 } 333 }
334 334
335 virtual NfcState SupportsNfc() { 335 virtual NfcState SupportsNfc() const {
336 return NfcState::NotSupported; 336 return NfcState::NotSupported;
337 } 337 }
338 338
diff --git a/src/core/hid/input_converter.cpp b/src/core/hid/input_converter.cpp
index e7b871acc..fe9915abe 100644
--- a/src/core/hid/input_converter.cpp
+++ b/src/core/hid/input_converter.cpp
@@ -291,7 +291,7 @@ Common::Input::NfcStatus TransformToNfc(const Common::Input::CallbackStatus& cal
291 Common::Input::NfcStatus nfc{}; 291 Common::Input::NfcStatus nfc{};
292 switch (callback.type) { 292 switch (callback.type) {
293 case Common::Input::InputType::Nfc: 293 case Common::Input::InputType::Nfc:
294 nfc = callback.nfc_status; 294 return callback.nfc_status;
295 break; 295 break;
296 default: 296 default:
297 LOG_ERROR(Input, "Conversion from type {} to NFC not implemented", callback.type); 297 LOG_ERROR(Input, "Conversion from type {} to NFC not implemented", callback.type);
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_,
42} 42}
43 43
44NfpDevice::~NfpDevice() { 44NfpDevice::~NfpDevice() {
45 if (is_controller_set) { 45 if (!is_controller_set) {
46 npad_device->DeleteCallback(callback_key); 46 return;
47 is_controller_set = false;
48 } 47 }
48 npad_device->DeleteCallback(callback_key);
49 is_controller_set = false;
49}; 50};
50 51
51void NfpDevice::NpadUpdate(Core::HID::ControllerTriggerType type) { 52void NfpDevice::NpadUpdate(Core::HID::ControllerTriggerType type) {
@@ -453,7 +454,7 @@ Result NfpDevice::SetApplicationArea(const std::vector<u8>& data) {
453 return ResultSuccess; 454 return ResultSuccess;
454} 455}
455 456
456Result NfpDevice::CreateApplicationArea(u32 access_id, const std::vector<u8>& data) { 457Result NfpDevice::CreateApplicationArea(u32 access_id, std::span<const u8> data) {
457 if (device_state != DeviceState::TagMounted) { 458 if (device_state != DeviceState::TagMounted) {
458 LOG_ERROR(Service_NFP, "Wrong device state {}", device_state); 459 LOG_ERROR(Service_NFP, "Wrong device state {}", device_state);
459 if (device_state == DeviceState::TagRemoved) { 460 if (device_state == DeviceState::TagRemoved) {
@@ -470,7 +471,7 @@ Result NfpDevice::CreateApplicationArea(u32 access_id, const std::vector<u8>& da
470 return RecreateApplicationArea(access_id, data); 471 return RecreateApplicationArea(access_id, data);
471} 472}
472 473
473Result NfpDevice::RecreateApplicationArea(u32 access_id, const std::vector<u8>& data) { 474Result NfpDevice::RecreateApplicationArea(u32 access_id, std::span<const u8> data) {
474 if (device_state != DeviceState::TagMounted) { 475 if (device_state != DeviceState::TagMounted) {
475 LOG_ERROR(Service_NFP, "Wrong device state {}", device_state); 476 LOG_ERROR(Service_NFP, "Wrong device state {}", device_state);
476 if (device_state == DeviceState::TagRemoved) { 477 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:
56 Result OpenApplicationArea(u32 access_id); 56 Result OpenApplicationArea(u32 access_id);
57 Result GetApplicationArea(std::vector<u8>& data) const; 57 Result GetApplicationArea(std::vector<u8>& data) const;
58 Result SetApplicationArea(const std::vector<u8>& data); 58 Result SetApplicationArea(const std::vector<u8>& data);
59 Result CreateApplicationArea(u32 access_id, const std::vector<u8>& data); 59 Result CreateApplicationArea(u32 access_id, std::span<const u8> data);
60 Result RecreateApplicationArea(u32 access_id, const std::vector<u8>& data); 60 Result RecreateApplicationArea(u32 access_id, std::span<const u8> data);
61 Result DeleteApplicationArea(); 61 Result DeleteApplicationArea();
62 62
63 u64 GetHandle() const; 63 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 @@
5 5
6#include <array> 6#include <array>
7 7
8#include "common/swap.h"
8#include "core/hle/service/mii/types.h" 9#include "core/hle/service/mii/types.h"
9 10
10namespace Service::NFP { 11namespace Service::NFP {
@@ -80,33 +81,33 @@ using ApplicationArea = std::array<u8, 0xD8>;
80using AmiiboName = std::array<char, (amiibo_name_length * 4) + 1>; 81using AmiiboName = std::array<char, (amiibo_name_length * 4) + 1>;
81 82
82struct AmiiboDate { 83struct AmiiboDate {
83 u16_be raw_date{}; 84 u16 raw_date{};
84 85
85 u16 DateRaw() const { 86 u16 GetValue() const {
86 return static_cast<u16>(raw_date); 87 return Common::swap16(raw_date);
87 } 88 }
88 89
89 u16 GetYear() const { 90 u16 GetYear() const {
90 return static_cast<u16>(((DateRaw() & 0xFE00) >> 9) + 2000); 91 return static_cast<u16>(((GetValue() & 0xFE00) >> 9) + 2000);
91 } 92 }
92 u8 GetMonth() const { 93 u8 GetMonth() const {
93 return static_cast<u8>(((DateRaw() & 0x01E0) >> 5) - 1); 94 return static_cast<u8>(((GetValue() & 0x01E0) >> 5) - 1);
94 } 95 }
95 u8 GetDay() const { 96 u8 GetDay() const {
96 return static_cast<u8>(DateRaw() & 0x001F); 97 return static_cast<u8>(GetValue() & 0x001F);
97 } 98 }
98 99
99 void SetYear(u16 year) { 100 void SetYear(u16 year) {
100 raw_date = DateRaw() & ~0xFE00; 101 const u16 year_converted = static_cast<u16>((year - 2000) << 9);
101 raw_date |= static_cast<u16_be>((year - 2000) << 9); 102 raw_date = Common::swap16((GetValue() & ~0xFE00) | year_converted);
102 } 103 }
103 void SetMonth(u8 month) { 104 void SetMonth(u8 month) {
104 raw_date = DateRaw() & ~0x01E0; 105 const u16 month_converted = static_cast<u16>((month + 1) << 5);
105 raw_date |= static_cast<u16_be>((month + 1) << 5); 106 raw_date = Common::swap16((GetValue() & ~0x01E0) | month_converted);
106 } 107 }
107 void SetDay(u8 day) { 108 void SetDay(u8 day) {
108 raw_date = DateRaw() & ~0x001F; 109 const u16 day_converted = static_cast<u16>(day);
109 raw_date |= static_cast<u16_be>(day); 110 raw_date = Common::swap16((GetValue() & ~0x001F) | day_converted);
110 } 111 }
111}; 112};
112static_assert(sizeof(AmiiboDate) == 2, "AmiiboDate is an invalid size"); 113static_assert(sizeof(AmiiboDate) == 2, "AmiiboDate is an invalid size");
diff --git a/src/input_common/drivers/virtual_amiibo.cpp b/src/input_common/drivers/virtual_amiibo.cpp
index 8fadb1322..0cd5129da 100644
--- a/src/input_common/drivers/virtual_amiibo.cpp
+++ b/src/input_common/drivers/virtual_amiibo.cpp
@@ -20,7 +20,7 @@ constexpr PadIdentifier identifier = {
20 20
21VirtualAmiibo::VirtualAmiibo(std::string input_engine_) : InputEngine(std::move(input_engine_)) {} 21VirtualAmiibo::VirtualAmiibo(std::string input_engine_) : InputEngine(std::move(input_engine_)) {}
22 22
23VirtualAmiibo::~VirtualAmiibo() {} 23VirtualAmiibo::~VirtualAmiibo() = default;
24 24
25Common::Input::PollingError VirtualAmiibo::SetPollingMode( 25Common::Input::PollingError VirtualAmiibo::SetPollingMode(
26 [[maybe_unused]] const PadIdentifier& identifier_, 26 [[maybe_unused]] const PadIdentifier& identifier_,
@@ -41,7 +41,7 @@ Common::Input::PollingError VirtualAmiibo::SetPollingMode(
41} 41}
42 42
43Common::Input::NfcState VirtualAmiibo::SupportsNfc( 43Common::Input::NfcState VirtualAmiibo::SupportsNfc(
44 [[maybe_unused]] const PadIdentifier& identifier_) { 44 [[maybe_unused]] const PadIdentifier& identifier_) const {
45 return Common::Input::NfcState::Success; 45 return Common::Input::NfcState::Success;
46} 46}
47 47
diff --git a/src/input_common/drivers/virtual_amiibo.h b/src/input_common/drivers/virtual_amiibo.h
index 5790e4a1f..9eac07544 100644
--- a/src/input_common/drivers/virtual_amiibo.h
+++ b/src/input_common/drivers/virtual_amiibo.h
@@ -39,7 +39,7 @@ public:
39 Common::Input::PollingError SetPollingMode( 39 Common::Input::PollingError SetPollingMode(
40 const PadIdentifier& identifier_, const Common::Input::PollingMode polling_mode_) override; 40 const PadIdentifier& identifier_, const Common::Input::PollingMode polling_mode_) override;
41 41
42 Common::Input::NfcState SupportsNfc(const PadIdentifier& identifier_) override; 42 Common::Input::NfcState SupportsNfc(const PadIdentifier& identifier_) const override;
43 43
44 Common::Input::NfcState WriteNfcData(const PadIdentifier& identifier_, 44 Common::Input::NfcState WriteNfcData(const PadIdentifier& identifier_,
45 const std::vector<u8>& data) override; 45 const std::vector<u8>& data) override;
diff --git a/src/input_common/input_engine.h b/src/input_common/input_engine.h
index 9b8470c6f..cfbdb26bd 100644
--- a/src/input_common/input_engine.h
+++ b/src/input_common/input_engine.h
@@ -129,7 +129,8 @@ public:
129 } 129 }
130 130
131 // Request nfc data from a controller 131 // Request nfc data from a controller
132 virtual Common::Input::NfcState SupportsNfc([[maybe_unused]] const PadIdentifier& identifier) { 132 virtual Common::Input::NfcState SupportsNfc(
133 [[maybe_unused]] const PadIdentifier& identifier) const {
133 return Common::Input::NfcState::NotSupported; 134 return Common::Input::NfcState::NotSupported;
134 } 135 }
135 136
diff --git a/src/input_common/input_poller.cpp b/src/input_common/input_poller.cpp
index a8eb1442b..75705b67e 100644
--- a/src/input_common/input_poller.cpp
+++ b/src/input_common/input_poller.cpp
@@ -768,7 +768,7 @@ public:
768 return input_engine->SetCameraFormat(identifier, camera_format); 768 return input_engine->SetCameraFormat(identifier, camera_format);
769 } 769 }
770 770
771 Common::Input::NfcState SupportsNfc() override { 771 Common::Input::NfcState SupportsNfc() const override {
772 return input_engine->SupportsNfc(identifier); 772 return input_engine->SupportsNfc(identifier);
773 } 773 }
774 774