summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Morph2020-11-05 22:43:39 -0500
committerGravatar Morph2020-11-08 09:35:25 -0500
commit9efbf5309f687b64ff246f1b19ff224ce52814a0 (patch)
tree10b1d955178163661ec98dfe44440e18b3f25649 /src
parentapplets/controller: Introduce additional checks for mode and caller (diff)
downloadyuzu-9efbf5309f687b64ff246f1b19ff224ce52814a0.tar.gz
yuzu-9efbf5309f687b64ff246f1b19ff224ce52814a0.tar.xz
yuzu-9efbf5309f687b64ff246f1b19ff224ce52814a0.zip
applets/controller: Pop normal data for StrapGuide and FirmwareUpdate
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/am/applets/controller.cpp24
-rw-r--r--src/core/hle/service/am/applets/controller.h1
2 files changed, 19 insertions, 6 deletions
diff --git a/src/core/hle/service/am/applets/controller.cpp b/src/core/hle/service/am/applets/controller.cpp
index 6b8eeabf4..4da10dd38 100644
--- a/src/core/hle/service/am/applets/controller.cpp
+++ b/src/core/hle/service/am/applets/controller.cpp
@@ -70,7 +70,7 @@ void Controller::Initialize() {
70 const auto& private_arg = private_arg_storage->GetData(); 70 const auto& private_arg = private_arg_storage->GetData();
71 ASSERT(private_arg.size() == sizeof(ControllerSupportArgPrivate)); 71 ASSERT(private_arg.size() == sizeof(ControllerSupportArgPrivate));
72 72
73 std::memcpy(&controller_private_arg, private_arg.data(), sizeof(ControllerSupportArgPrivate)); 73 std::memcpy(&controller_private_arg, private_arg.data(), private_arg.size());
74 ASSERT_MSG(controller_private_arg.arg_private_size == sizeof(ControllerSupportArgPrivate), 74 ASSERT_MSG(controller_private_arg.arg_private_size == sizeof(ControllerSupportArgPrivate),
75 "Unknown ControllerSupportArgPrivate revision={} with size={}", 75 "Unknown ControllerSupportArgPrivate revision={} with size={}",
76 library_applet_version, controller_private_arg.arg_private_size); 76 library_applet_version, controller_private_arg.arg_private_size);
@@ -106,7 +106,8 @@ void Controller::Initialize() {
106 } 106 }
107 107
108 switch (controller_private_arg.mode) { 108 switch (controller_private_arg.mode) {
109 case ControllerSupportMode::ShowControllerSupport: { 109 case ControllerSupportMode::ShowControllerSupport:
110 case ControllerSupportMode::ShowControllerStrapGuide: {
110 const auto user_arg_storage = broker.PopNormalDataToApplet(); 111 const auto user_arg_storage = broker.PopNormalDataToApplet();
111 ASSERT(user_arg_storage != nullptr); 112 ASSERT(user_arg_storage != nullptr);
112 113
@@ -116,11 +117,11 @@ void Controller::Initialize() {
116 case LibraryAppletVersion::Version4: 117 case LibraryAppletVersion::Version4:
117 case LibraryAppletVersion::Version5: 118 case LibraryAppletVersion::Version5:
118 ASSERT(user_arg.size() == sizeof(ControllerSupportArgOld)); 119 ASSERT(user_arg.size() == sizeof(ControllerSupportArgOld));
119 std::memcpy(&controller_user_arg_old, user_arg.data(), sizeof(ControllerSupportArgOld)); 120 std::memcpy(&controller_user_arg_old, user_arg.data(), user_arg.size());
120 break; 121 break;
121 case LibraryAppletVersion::Version7: 122 case LibraryAppletVersion::Version7:
122 ASSERT(user_arg.size() == sizeof(ControllerSupportArgNew)); 123 ASSERT(user_arg.size() == sizeof(ControllerSupportArgNew));
123 std::memcpy(&controller_user_arg_new, user_arg.data(), sizeof(ControllerSupportArgNew)); 124 std::memcpy(&controller_user_arg_new, user_arg.data(), user_arg.size());
124 break; 125 break;
125 default: 126 default:
126 UNIMPLEMENTED_MSG("Unknown ControllerSupportArg revision={} with size={}", 127 UNIMPLEMENTED_MSG("Unknown ControllerSupportArg revision={} with size={}",
@@ -131,8 +132,16 @@ void Controller::Initialize() {
131 } 132 }
132 break; 133 break;
133 } 134 }
134 case ControllerSupportMode::ShowControllerStrapGuide: 135 case ControllerSupportMode::ShowControllerFirmwareUpdate: {
135 case ControllerSupportMode::ShowControllerFirmwareUpdate: 136 const auto update_arg_storage = broker.PopNormalDataToApplet();
137 ASSERT(update_arg_storage != nullptr);
138
139 const auto& update_arg = update_arg_storage->GetData();
140 ASSERT(update_arg.size() == sizeof(ControllerUpdateFirmwareArg));
141
142 std::memcpy(&controller_update_arg, update_arg.data(), update_arg.size());
143 break;
144 }
136 default: { 145 default: {
137 UNIMPLEMENTED_MSG("Unimplemented ControllerSupportMode={}", controller_private_arg.mode); 146 UNIMPLEMENTED_MSG("Unimplemented ControllerSupportMode={}", controller_private_arg.mode);
138 break; 147 break;
@@ -200,6 +209,9 @@ void Controller::Execute() {
200 } 209 }
201 case ControllerSupportMode::ShowControllerStrapGuide: 210 case ControllerSupportMode::ShowControllerStrapGuide:
202 case ControllerSupportMode::ShowControllerFirmwareUpdate: 211 case ControllerSupportMode::ShowControllerFirmwareUpdate:
212 UNIMPLEMENTED_MSG("ControllerSupportMode={} is not implemented",
213 controller_private_arg.mode);
214 [[fallthrough]];
203 default: { 215 default: {
204 ConfigurationComplete(); 216 ConfigurationComplete();
205 break; 217 break;
diff --git a/src/core/hle/service/am/applets/controller.h b/src/core/hle/service/am/applets/controller.h
index 05788966e..dfc52da58 100644
--- a/src/core/hle/service/am/applets/controller.h
+++ b/src/core/hle/service/am/applets/controller.h
@@ -125,6 +125,7 @@ private:
125 ControllerSupportArgPrivate controller_private_arg; 125 ControllerSupportArgPrivate controller_private_arg;
126 ControllerSupportArgOld controller_user_arg_old; 126 ControllerSupportArgOld controller_user_arg_old;
127 ControllerSupportArgNew controller_user_arg_new; 127 ControllerSupportArgNew controller_user_arg_new;
128 ControllerUpdateFirmwareArg controller_update_arg;
128 bool complete{false}; 129 bool complete{false};
129 ResultCode status{RESULT_SUCCESS}; 130 ResultCode status{RESULT_SUCCESS};
130 bool is_single_mode{false}; 131 bool is_single_mode{false};