diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/am/applets/applet_cabinet.cpp | 20 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/applet_cabinet.h | 12 |
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 | ||
| 32 | enum class CabinetResult : u8 { | 32 | enum 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 |
| 38 | struct AmiiboSettingsStartParam { | 40 | struct 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 | }; |
| 43 | static_assert(sizeof(AmiiboSettingsStartParam) == 0x30, | 45 | static_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 |
| 47 | struct StartParamForAmiiboSettings { | 50 | struct 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 | }; |
| 58 | static_assert(sizeof(StartParamForAmiiboSettings) == 0x1A8, | 61 | static_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 | }; |
| 70 | static_assert(sizeof(ReturnValueForAmiiboSettings) == 0x190, | 73 | static_assert(sizeof(ReturnValueForAmiiboSettings) == 0x188, |
| 71 | "ReturnValueForAmiiboSettings is an invalid size"); | 74 | "ReturnValueForAmiiboSettings is an invalid size"); |
| 75 | #pragma pack() | ||
| 72 | 76 | ||
| 73 | class Cabinet final : public Applet { | 77 | class Cabinet final : public Applet { |
| 74 | public: | 78 | public: |