Просмотр исходного кода

applets/controller: Pop normal data for StrapGuide and FirmwareUpdate

Morph 5 лет назад
Родитель
Сommit
9efbf5309f
2 измененных файлов с 19 добавлено и 6 удалено
  1. 18 6
      src/core/hle/service/am/applets/controller.cpp
  2. 1 0
      src/core/hle/service/am/applets/controller.h

+ 18 - 6
src/core/hle/service/am/applets/controller.cpp

@@ -70,7 +70,7 @@ void Controller::Initialize() {
     const auto& private_arg = private_arg_storage->GetData();
     const auto& private_arg = private_arg_storage->GetData();
     ASSERT(private_arg.size() == sizeof(ControllerSupportArgPrivate));
     ASSERT(private_arg.size() == sizeof(ControllerSupportArgPrivate));
 
 
-    std::memcpy(&controller_private_arg, private_arg.data(), sizeof(ControllerSupportArgPrivate));
+    std::memcpy(&controller_private_arg, private_arg.data(), private_arg.size());
     ASSERT_MSG(controller_private_arg.arg_private_size == sizeof(ControllerSupportArgPrivate),
     ASSERT_MSG(controller_private_arg.arg_private_size == sizeof(ControllerSupportArgPrivate),
                "Unknown ControllerSupportArgPrivate revision={} with size={}",
                "Unknown ControllerSupportArgPrivate revision={} with size={}",
                library_applet_version, controller_private_arg.arg_private_size);
                library_applet_version, controller_private_arg.arg_private_size);
@@ -106,7 +106,8 @@ void Controller::Initialize() {
     }
     }
 
 
     switch (controller_private_arg.mode) {
     switch (controller_private_arg.mode) {
-    case ControllerSupportMode::ShowControllerSupport: {
+    case ControllerSupportMode::ShowControllerSupport:
+    case ControllerSupportMode::ShowControllerStrapGuide: {
         const auto user_arg_storage = broker.PopNormalDataToApplet();
         const auto user_arg_storage = broker.PopNormalDataToApplet();
         ASSERT(user_arg_storage != nullptr);
         ASSERT(user_arg_storage != nullptr);
 
 
@@ -116,11 +117,11 @@ void Controller::Initialize() {
         case LibraryAppletVersion::Version4:
         case LibraryAppletVersion::Version4:
         case LibraryAppletVersion::Version5:
         case LibraryAppletVersion::Version5:
             ASSERT(user_arg.size() == sizeof(ControllerSupportArgOld));
             ASSERT(user_arg.size() == sizeof(ControllerSupportArgOld));
-            std::memcpy(&controller_user_arg_old, user_arg.data(), sizeof(ControllerSupportArgOld));
+            std::memcpy(&controller_user_arg_old, user_arg.data(), user_arg.size());
             break;
             break;
         case LibraryAppletVersion::Version7:
         case LibraryAppletVersion::Version7:
             ASSERT(user_arg.size() == sizeof(ControllerSupportArgNew));
             ASSERT(user_arg.size() == sizeof(ControllerSupportArgNew));
-            std::memcpy(&controller_user_arg_new, user_arg.data(), sizeof(ControllerSupportArgNew));
+            std::memcpy(&controller_user_arg_new, user_arg.data(), user_arg.size());
             break;
             break;
         default:
         default:
             UNIMPLEMENTED_MSG("Unknown ControllerSupportArg revision={} with size={}",
             UNIMPLEMENTED_MSG("Unknown ControllerSupportArg revision={} with size={}",
@@ -131,8 +132,16 @@ void Controller::Initialize() {
         }
         }
         break;
         break;
     }
     }
-    case ControllerSupportMode::ShowControllerStrapGuide:
-    case ControllerSupportMode::ShowControllerFirmwareUpdate:
+    case ControllerSupportMode::ShowControllerFirmwareUpdate: {
+        const auto update_arg_storage = broker.PopNormalDataToApplet();
+        ASSERT(update_arg_storage != nullptr);
+
+        const auto& update_arg = update_arg_storage->GetData();
+        ASSERT(update_arg.size() == sizeof(ControllerUpdateFirmwareArg));
+
+        std::memcpy(&controller_update_arg, update_arg.data(), update_arg.size());
+        break;
+    }
     default: {
     default: {
         UNIMPLEMENTED_MSG("Unimplemented ControllerSupportMode={}", controller_private_arg.mode);
         UNIMPLEMENTED_MSG("Unimplemented ControllerSupportMode={}", controller_private_arg.mode);
         break;
         break;
@@ -200,6 +209,9 @@ void Controller::Execute() {
     }
     }
     case ControllerSupportMode::ShowControllerStrapGuide:
     case ControllerSupportMode::ShowControllerStrapGuide:
     case ControllerSupportMode::ShowControllerFirmwareUpdate:
     case ControllerSupportMode::ShowControllerFirmwareUpdate:
+        UNIMPLEMENTED_MSG("ControllerSupportMode={} is not implemented",
+                          controller_private_arg.mode);
+        [[fallthrough]];
     default: {
     default: {
         ConfigurationComplete();
         ConfigurationComplete();
         break;
         break;

+ 1 - 0
src/core/hle/service/am/applets/controller.h

@@ -125,6 +125,7 @@ private:
     ControllerSupportArgPrivate controller_private_arg;
     ControllerSupportArgPrivate controller_private_arg;
     ControllerSupportArgOld controller_user_arg_old;
     ControllerSupportArgOld controller_user_arg_old;
     ControllerSupportArgNew controller_user_arg_new;
     ControllerSupportArgNew controller_user_arg_new;
+    ControllerUpdateFirmwareArg controller_update_arg;
     bool complete{false};
     bool complete{false};
     ResultCode status{RESULT_SUCCESS};
     ResultCode status{RESULT_SUCCESS};
     bool is_single_mode{false};
     bool is_single_mode{false};