summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/am/applets/applet_cabinet.cpp20
-rw-r--r--src/core/hle/service/am/applets/applet_cabinet.h12
2 files changed, 22 insertions, 10 deletions
diff --git a/src/core/hle/service/am/applets/applet_cabinet.cpp b/src/core/hle/service/am/applets/applet_cabinet.cpp
index 1eb5a9f22..01f577ab9 100644
--- a/src/core/hle/service/am/applets/applet_cabinet.cpp
+++ b/src/core/hle/service/am/applets/applet_cabinet.cpp
@@ -32,7 +32,7 @@ void Cabinet::Initialize() {
32 32
33 LOG_INFO(Service_HID, "Initializing Cabinet Applet."); 33 LOG_INFO(Service_HID, "Initializing Cabinet Applet.");
34 34
35 LOG_ERROR(Service_HID, 35 LOG_DEBUG(Service_HID,
36 "Initializing Applet with common_args: arg_version={}, lib_version={}, " 36 "Initializing Applet with common_args: arg_version={}, lib_version={}, "
37 "play_startup_sound={}, size={}, system_tick={}, theme_color={}", 37 "play_startup_sound={}, size={}, system_tick={}, theme_color={}",
38 common_args.arguments_version, common_args.library_version, 38 common_args.arguments_version, common_args.library_version,
@@ -111,14 +111,14 @@ void Cabinet::DisplayCompleted(bool apply_changes, const std::string& amiibo_nam
111 Cancel(); 111 Cancel();
112 } 112 }
113 113
114 if (nfp_device->GetCurrentState() != Service::NFP::DeviceState::TagFound) { 114 if (nfp_device->GetCurrentState() == Service::NFP::DeviceState::TagFound) {
115 nfp_device->Mount(Service::NFP::MountTarget::All); 115 nfp_device->Mount(Service::NFP::MountTarget::All);
116 } 116 }
117 117
118 switch (applet_input_common.applet_mode) { 118 switch (applet_input_common.applet_mode) {
119 case Service::NFP::CabinetMode::StartNicknameAndOwnerSettings: { 119 case Service::NFP::CabinetMode::StartNicknameAndOwnerSettings: {
120 Service::NFP::AmiiboName name{}; 120 Service::NFP::AmiiboName name{};
121 memccpy(name.data(), amiibo_name.data(), 0, name.size()); 121 memcpy(name.data(), amiibo_name.data(), std::min(amiibo_name.size(), name.size() - 1));
122 nfp_device->SetNicknameAndOwner(name); 122 nfp_device->SetNicknameAndOwner(name);
123 break; 123 break;
124 } 124 }
@@ -137,11 +137,19 @@ void Cabinet::DisplayCompleted(bool apply_changes, const std::string& amiibo_nam
137 } 137 }
138 138
139 applet_output.device_handle = applet_input_common.device_handle; 139 applet_output.device_handle = applet_input_common.device_handle;
140 applet_output.result = CabinetResult::Success; 140 applet_output.result = CabinetResult::Cancel;
141 nfp_device->GetRegisterInfo(applet_output.register_info); 141 const auto reg_result = nfp_device->GetRegisterInfo(applet_output.register_info);
142 nfp_device->GetTagInfo(applet_output.tag_info); 142 const auto tag_result = nfp_device->GetTagInfo(applet_output.tag_info);
143 nfp_device->Finalize(); 143 nfp_device->Finalize();
144 144
145 if (reg_result.IsSuccess() && tag_result.IsSuccess()) {
146 applet_output.result = CabinetResult::All;
147 } else if (reg_result.IsSuccess()) {
148 applet_output.result = CabinetResult::RegisterInfo;
149 } else if (tag_result.IsSuccess()) {
150 applet_output.result = CabinetResult::TagInfo;
151 }
152
145 std::vector<u8> out_data(sizeof(ReturnValueForAmiiboSettings)); 153 std::vector<u8> out_data(sizeof(ReturnValueForAmiiboSettings));
146 std::memcpy(out_data.data(), &applet_output, sizeof(ReturnValueForAmiiboSettings)); 154 std::memcpy(out_data.data(), &applet_output, sizeof(ReturnValueForAmiiboSettings));
147 155
diff --git a/src/core/hle/service/am/applets/applet_cabinet.h b/src/core/hle/service/am/applets/applet_cabinet.h
index 2d3f22434..8466d5997 100644
--- a/src/core/hle/service/am/applets/applet_cabinet.h
+++ b/src/core/hle/service/am/applets/applet_cabinet.h
@@ -31,18 +31,21 @@ enum class CabinetAppletVersion : s32 {
31 31
32enum class CabinetResult : u8 { 32enum class CabinetResult : u8 {
33 Cancel, 33 Cancel,
34 Success, 34 TagInfo = 1 << 1,
35 RegisterInfo = 1 << 2,
36 All = TagInfo | RegisterInfo,
35}; 37};
36 38
37// This is nn::nfp::AmiiboSettingsStartParam 39// This is nn::nfp::AmiiboSettingsStartParam
38struct AmiiboSettingsStartParam { 40struct AmiiboSettingsStartParam {
39 u64 device_handle; 41 u64 device_handle;
40 std::array<u8, 0x20> param_1; 42 std::array<u8, 0x20> param_1;
41 std::array<u8, 0x1> param_2; 43 u8 param_2;
42}; 44};
43static_assert(sizeof(AmiiboSettingsStartParam) == 0x30, 45static_assert(sizeof(AmiiboSettingsStartParam) == 0x30,
44 "AmiiboSettingsStartParam is an invalid size"); 46 "AmiiboSettingsStartParam is an invalid size");
45 47
48#pragma pack(1)
46// This is nn::nfp::StartParamForAmiiboSettings 49// This is nn::nfp::StartParamForAmiiboSettings
47struct StartParamForAmiiboSettings { 50struct StartParamForAmiiboSettings {
48 u8 param_1; 51 u8 param_1;
@@ -53,7 +56,7 @@ struct StartParamForAmiiboSettings {
53 Service::NFP::TagInfo tag_info; 56 Service::NFP::TagInfo tag_info;
54 Service::NFP::RegisterInfo register_info; 57 Service::NFP::RegisterInfo register_info;
55 std::array<u8, 0x20> amiibo_settings_3; 58 std::array<u8, 0x20> amiibo_settings_3;
56 INSERT_PADDING_BYTES(0x20); 59 INSERT_PADDING_BYTES(0x24);
57}; 60};
58static_assert(sizeof(StartParamForAmiiboSettings) == 0x1A8, 61static_assert(sizeof(StartParamForAmiiboSettings) == 0x1A8,
59 "StartParamForAmiiboSettings is an invalid size"); 62 "StartParamForAmiiboSettings is an invalid size");
@@ -67,8 +70,9 @@ struct ReturnValueForAmiiboSettings {
67 Service::NFP::RegisterInfo register_info; 70 Service::NFP::RegisterInfo register_info;
68 INSERT_PADDING_BYTES(0x24); 71 INSERT_PADDING_BYTES(0x24);
69}; 72};
70static_assert(sizeof(ReturnValueForAmiiboSettings) == 0x190, 73static_assert(sizeof(ReturnValueForAmiiboSettings) == 0x188,
71 "ReturnValueForAmiiboSettings is an invalid size"); 74 "ReturnValueForAmiiboSettings is an invalid size");
75#pragma pack()
72 76
73class Cabinet final : public Applet { 77class Cabinet final : public Applet {
74public: 78public: