diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/am/applets/controller.cpp | 24 | ||||
| -rw-r--r-- | src/core/hle/service/am/applets/controller.h | 1 |
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}; |