diff options
24 files changed, 182 insertions, 54 deletions
@@ -1,7 +1,7 @@ | |||
1 | yuzu emulator early access | 1 | yuzu emulator early access |
2 | ============= | 2 | ============= |
3 | 3 | ||
4 | This is the source code for early-access 3414. | 4 | This is the source code for early-access 3416. |
5 | 5 | ||
6 | ## Legal Notice | 6 | ## Legal Notice |
7 | 7 | ||
diff --git a/src/common/settings.h b/src/common/settings.h index eecd0c5ab..2ccfd936f 100755 --- a/src/common/settings.h +++ b/src/common/settings.h | |||
@@ -482,7 +482,7 @@ struct Values { | |||
482 | SwitchableSetting<s32, true> sound_index{1, 0, 2, "sound_index"}; | 482 | SwitchableSetting<s32, true> sound_index{1, 0, 2, "sound_index"}; |
483 | 483 | ||
484 | // Controls | 484 | // Controls |
485 | InputSetting<std::array<PlayerInput, 10>> players; | 485 | InputSetting<std::array<PlayerInput, 8>> players; |
486 | 486 | ||
487 | SwitchableSetting<bool> use_docked_mode{true, "use_docked_mode"}; | 487 | SwitchableSetting<bool> use_docked_mode{true, "use_docked_mode"}; |
488 | 488 | ||
diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp index 1e3d93b47..ee6b8d287 100755 --- a/src/core/hid/emulated_controller.cpp +++ b/src/core/hid/emulated_controller.cpp | |||
@@ -82,7 +82,12 @@ Settings::ControllerType EmulatedController::MapNPadToSettingsType(NpadStyleInde | |||
82 | } | 82 | } |
83 | 83 | ||
84 | void EmulatedController::ReloadFromSettings() { | 84 | void EmulatedController::ReloadFromSettings() { |
85 | const auto player_index = NpadIdTypeToIndex(npad_id_type); | 85 | if (npad_id_type == NpadIdType::Other) { |
86 | ReloadDebugPadFromSettings(); | ||
87 | return; | ||
88 | } | ||
89 | |||
90 | const auto player_index = NpadIdTypeToConfigIndex(npad_id_type); | ||
86 | const auto& player = Settings::values.players.GetValue()[player_index]; | 91 | const auto& player = Settings::values.players.GetValue()[player_index]; |
87 | 92 | ||
88 | for (std::size_t index = 0; index < player.buttons.size(); ++index) { | 93 | for (std::size_t index = 0; index < player.buttons.size(); ++index) { |
@@ -111,13 +116,21 @@ void EmulatedController::ReloadFromSettings() { | |||
111 | 116 | ||
112 | ring_params[0] = Common::ParamPackage(Settings::values.ringcon_analogs); | 117 | ring_params[0] = Common::ParamPackage(Settings::values.ringcon_analogs); |
113 | 118 | ||
114 | // Other or debug controller should always be a pro controller | 119 | SetNpadStyleIndex(MapSettingsTypeToNPad(player.controller_type)); |
115 | if (npad_id_type != NpadIdType::Other) { | 120 | original_npad_type = npad_type; |
116 | SetNpadStyleIndex(MapSettingsTypeToNPad(player.controller_type)); | 121 | |
117 | original_npad_type = npad_type; | 122 | // Player 1 shares config with handheld. Disable controller when handheld is selected |
118 | } else { | 123 | if (npad_id_type == NpadIdType::Player1 && npad_type == NpadStyleIndex::Handheld) { |
119 | SetNpadStyleIndex(NpadStyleIndex::ProController); | 124 | Disconnect(); |
120 | original_npad_type = npad_type; | 125 | ReloadInput(); |
126 | return; | ||
127 | } | ||
128 | |||
129 | // Handheld shares config with player 1. Disable controller when handheld isn't selected | ||
130 | if (npad_id_type == NpadIdType::Handheld && npad_type != NpadStyleIndex::Handheld) { | ||
131 | Disconnect(); | ||
132 | ReloadInput(); | ||
133 | return; | ||
121 | } | 134 | } |
122 | 135 | ||
123 | Disconnect(); | 136 | Disconnect(); |
@@ -128,6 +141,33 @@ void EmulatedController::ReloadFromSettings() { | |||
128 | ReloadInput(); | 141 | ReloadInput(); |
129 | } | 142 | } |
130 | 143 | ||
144 | void EmulatedController::ReloadDebugPadFromSettings() { | ||
145 | for (std::size_t index = 0; index < Settings::values.debug_pad_buttons.size(); ++index) { | ||
146 | button_params[index] = Common::ParamPackage(Settings::values.debug_pad_buttons[index]); | ||
147 | } | ||
148 | for (std::size_t index = 0; index < Settings::values.debug_pad_analogs.size(); ++index) { | ||
149 | stick_params[index] = Common::ParamPackage(Settings::values.debug_pad_analogs[index]); | ||
150 | } | ||
151 | for (std::size_t index = 0; index < motion_params.size(); ++index) { | ||
152 | motion_params[index] = {}; | ||
153 | } | ||
154 | |||
155 | controller.color_values = {}; | ||
156 | controller.colors_state.fullkey = {}; | ||
157 | controller.colors_state.left = {}; | ||
158 | controller.colors_state.right = {}; | ||
159 | ring_params[0] = {}; | ||
160 | SetNpadStyleIndex(NpadStyleIndex::ProController); | ||
161 | original_npad_type = npad_type; | ||
162 | |||
163 | Disconnect(); | ||
164 | if (Settings::values.debug_pad_enabled) { | ||
165 | Connect(); | ||
166 | } | ||
167 | |||
168 | ReloadInput(); | ||
169 | } | ||
170 | |||
131 | void EmulatedController::LoadDevices() { | 171 | void EmulatedController::LoadDevices() { |
132 | // TODO(german77): Use more buttons to detect the correct device | 172 | // TODO(german77): Use more buttons to detect the correct device |
133 | const auto left_joycon = button_params[Settings::NativeButton::DRight]; | 173 | const auto left_joycon = button_params[Settings::NativeButton::DRight]; |
@@ -560,9 +600,23 @@ bool EmulatedController::IsConfiguring() const { | |||
560 | } | 600 | } |
561 | 601 | ||
562 | void EmulatedController::SaveCurrentConfig() { | 602 | void EmulatedController::SaveCurrentConfig() { |
563 | const auto player_index = NpadIdTypeToIndex(npad_id_type); | 603 | // Other can't alter the config from here |
604 | if (npad_id_type == NpadIdType::Other) { | ||
605 | return; | ||
606 | } | ||
607 | |||
608 | const auto player_index = NpadIdTypeToConfigIndex(npad_id_type); | ||
564 | auto& player = Settings::values.players.GetValue()[player_index]; | 609 | auto& player = Settings::values.players.GetValue()[player_index]; |
565 | player.connected = is_connected; | 610 | |
611 | // Only save the connected status when handheld is connected | ||
612 | if (npad_id_type == NpadIdType::Handheld && npad_type == NpadStyleIndex::Handheld) { | ||
613 | player.connected = is_connected; | ||
614 | } | ||
615 | |||
616 | if (npad_id_type != NpadIdType::Handheld && npad_type != NpadStyleIndex::Handheld) { | ||
617 | player.connected = is_connected; | ||
618 | } | ||
619 | |||
566 | player.controller_type = MapNPadToSettingsType(npad_type); | 620 | player.controller_type = MapNPadToSettingsType(npad_type); |
567 | for (std::size_t index = 0; index < player.buttons.size(); ++index) { | 621 | for (std::size_t index = 0; index < player.buttons.size(); ++index) { |
568 | player.buttons[index] = button_params[index].Serialize(); | 622 | player.buttons[index] = button_params[index].Serialize(); |
@@ -1152,7 +1206,7 @@ bool EmulatedController::SetVibration(std::size_t device_index, VibrationValue v | |||
1152 | if (!output_devices[device_index]) { | 1206 | if (!output_devices[device_index]) { |
1153 | return false; | 1207 | return false; |
1154 | } | 1208 | } |
1155 | const auto player_index = NpadIdTypeToIndex(npad_id_type); | 1209 | const auto player_index = NpadIdTypeToConfigIndex(npad_id_type); |
1156 | const auto& player = Settings::values.players.GetValue()[player_index]; | 1210 | const auto& player = Settings::values.players.GetValue()[player_index]; |
1157 | const f32 strength = static_cast<f32>(player.vibration_strength) / 100.0f; | 1211 | const f32 strength = static_cast<f32>(player.vibration_strength) / 100.0f; |
1158 | 1212 | ||
@@ -1178,7 +1232,7 @@ bool EmulatedController::SetVibration(std::size_t device_index, VibrationValue v | |||
1178 | } | 1232 | } |
1179 | 1233 | ||
1180 | bool EmulatedController::IsVibrationEnabled(std::size_t device_index) { | 1234 | bool EmulatedController::IsVibrationEnabled(std::size_t device_index) { |
1181 | const auto player_index = NpadIdTypeToIndex(npad_id_type); | 1235 | const auto player_index = NpadIdTypeToConfigIndex(npad_id_type); |
1182 | const auto& player = Settings::values.players.GetValue()[player_index]; | 1236 | const auto& player = Settings::values.players.GetValue()[player_index]; |
1183 | 1237 | ||
1184 | if (!player.vibration_enabled) { | 1238 | if (!player.vibration_enabled) { |
diff --git a/src/core/hid/emulated_controller.h b/src/core/hid/emulated_controller.h index 4da1e9d60..2000e33c7 100755 --- a/src/core/hid/emulated_controller.h +++ b/src/core/hid/emulated_controller.h | |||
@@ -250,9 +250,14 @@ public: | |||
250 | /// Reload all input devices | 250 | /// Reload all input devices |
251 | void ReloadInput(); | 251 | void ReloadInput(); |
252 | 252 | ||
253 | /// Overrides current mapped devices with the stored configuration and reloads all input devices | 253 | /// Overrides current mapped devices with the stored configuration and reloads all input |
254 | /// callbacks | ||
254 | void ReloadFromSettings(); | 255 | void ReloadFromSettings(); |
255 | 256 | ||
257 | /// Overrides current mapped debug pad with the stored configuration and reloads all input | ||
258 | /// callbacks | ||
259 | void ReloadDebugPadFromSettings(); | ||
260 | |||
256 | /// Saves the current mapped configuration | 261 | /// Saves the current mapped configuration |
257 | void SaveCurrentConfig(); | 262 | void SaveCurrentConfig(); |
258 | 263 | ||
diff --git a/src/core/hid/hid_types.h b/src/core/hid/hid_types.h index 156480228..5e97e3459 100755 --- a/src/core/hid/hid_types.h +++ b/src/core/hid/hid_types.h | |||
@@ -690,6 +690,32 @@ constexpr size_t NpadIdTypeToIndex(NpadIdType npad_id_type) { | |||
690 | } | 690 | } |
691 | } | 691 | } |
692 | 692 | ||
693 | /// Converts a NpadIdType to a config array index. | ||
694 | constexpr size_t NpadIdTypeToConfigIndex(NpadIdType npad_id_type) { | ||
695 | switch (npad_id_type) { | ||
696 | case NpadIdType::Player1: | ||
697 | return 0; | ||
698 | case NpadIdType::Player2: | ||
699 | return 1; | ||
700 | case NpadIdType::Player3: | ||
701 | return 2; | ||
702 | case NpadIdType::Player4: | ||
703 | return 3; | ||
704 | case NpadIdType::Player5: | ||
705 | return 4; | ||
706 | case NpadIdType::Player6: | ||
707 | return 5; | ||
708 | case NpadIdType::Player7: | ||
709 | return 6; | ||
710 | case NpadIdType::Player8: | ||
711 | return 7; | ||
712 | case NpadIdType::Other: | ||
713 | case NpadIdType::Handheld: | ||
714 | default: | ||
715 | return 0; | ||
716 | } | ||
717 | } | ||
718 | |||
693 | /// Converts an array index to a NpadIdType | 719 | /// Converts an array index to a NpadIdType |
694 | constexpr NpadIdType IndexToNpadIdType(size_t index) { | 720 | constexpr NpadIdType IndexToNpadIdType(size_t index) { |
695 | switch (index) { | 721 | switch (index) { |
diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp index b37a79627..3811b57c0 100755 --- a/src/core/hle/service/acc/acc.cpp +++ b/src/core/hle/service/acc/acc.cpp | |||
@@ -77,6 +77,8 @@ public: | |||
77 | {141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+ | 77 | {141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+ |
78 | {142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+ | 78 | {142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+ |
79 | {150, nullptr, "CreateAuthorizationRequest"}, | 79 | {150, nullptr, "CreateAuthorizationRequest"}, |
80 | {160, nullptr, "RequiresUpdateNetworkServiceAccountIdTokenCache"}, | ||
81 | {161, nullptr, "RequireReauthenticationOfNetworkServiceAccount"}, | ||
80 | }; | 82 | }; |
81 | // clang-format on | 83 | // clang-format on |
82 | 84 | ||
@@ -137,7 +139,10 @@ public: | |||
137 | {140, nullptr, "GetNetworkServiceLicenseCache"}, // 5.0.0+ | 139 | {140, nullptr, "GetNetworkServiceLicenseCache"}, // 5.0.0+ |
138 | {141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+ | 140 | {141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+ |
139 | {142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+ | 141 | {142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+ |
142 | {143, nullptr, "GetNetworkServiceLicenseCacheEx"}, | ||
140 | {150, nullptr, "CreateAuthorizationRequest"}, | 143 | {150, nullptr, "CreateAuthorizationRequest"}, |
144 | {160, nullptr, "RequiresUpdateNetworkServiceAccountIdTokenCache"}, | ||
145 | {161, nullptr, "RequireReauthenticationOfNetworkServiceAccount"}, | ||
141 | {200, nullptr, "IsRegistered"}, | 146 | {200, nullptr, "IsRegistered"}, |
142 | {201, nullptr, "RegisterAsync"}, | 147 | {201, nullptr, "RegisterAsync"}, |
143 | {202, nullptr, "UnregisterAsync"}, | 148 | {202, nullptr, "UnregisterAsync"}, |
@@ -243,6 +248,7 @@ public: | |||
243 | {100, nullptr, "GetRequestWithTheme"}, | 248 | {100, nullptr, "GetRequestWithTheme"}, |
244 | {101, nullptr, "IsNetworkServiceAccountReplaced"}, | 249 | {101, nullptr, "IsNetworkServiceAccountReplaced"}, |
245 | {199, nullptr, "GetUrlForIntroductionOfExtraMembership"}, // 2.0.0 - 5.1.0 | 250 | {199, nullptr, "GetUrlForIntroductionOfExtraMembership"}, // 2.0.0 - 5.1.0 |
251 | {200, nullptr, "ApplyAsyncWithAuthorizedToken"}, | ||
246 | }; | 252 | }; |
247 | // clang-format on | 253 | // clang-format on |
248 | 254 | ||
@@ -648,9 +654,11 @@ public: | |||
648 | {0, nullptr, "EnsureAuthenticationTokenCacheAsync"}, | 654 | {0, nullptr, "EnsureAuthenticationTokenCacheAsync"}, |
649 | {1, nullptr, "LoadAuthenticationTokenCache"}, | 655 | {1, nullptr, "LoadAuthenticationTokenCache"}, |
650 | {2, nullptr, "InvalidateAuthenticationTokenCache"}, | 656 | {2, nullptr, "InvalidateAuthenticationTokenCache"}, |
657 | {3, nullptr, "IsDeviceAuthenticationTokenCacheAvailable"}, | ||
651 | {10, nullptr, "EnsureEdgeTokenCacheAsync"}, | 658 | {10, nullptr, "EnsureEdgeTokenCacheAsync"}, |
652 | {11, nullptr, "LoadEdgeTokenCache"}, | 659 | {11, nullptr, "LoadEdgeTokenCache"}, |
653 | {12, nullptr, "InvalidateEdgeTokenCache"}, | 660 | {12, nullptr, "InvalidateEdgeTokenCache"}, |
661 | {13, nullptr, "IsEdgeTokenCacheAvailable"}, | ||
654 | {20, nullptr, "EnsureApplicationAuthenticationCacheAsync"}, | 662 | {20, nullptr, "EnsureApplicationAuthenticationCacheAsync"}, |
655 | {21, nullptr, "LoadApplicationAuthenticationTokenCache"}, | 663 | {21, nullptr, "LoadApplicationAuthenticationTokenCache"}, |
656 | {22, nullptr, "LoadApplicationNetworkServiceClientConfigCache"}, | 664 | {22, nullptr, "LoadApplicationNetworkServiceClientConfigCache"}, |
diff --git a/src/core/hle/service/acc/acc_su.cpp b/src/core/hle/service/acc/acc_su.cpp index 78459e219..67612b5e8 100755 --- a/src/core/hle/service/acc/acc_su.cpp +++ b/src/core/hle/service/acc/acc_su.cpp | |||
@@ -55,6 +55,10 @@ ACC_SU::ACC_SU(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager> | |||
55 | {290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"}, | 55 | {290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"}, |
56 | {291, nullptr, "ProxyProcedureForFloatingRegistrationWithNintendoAccount"}, | 56 | {291, nullptr, "ProxyProcedureForFloatingRegistrationWithNintendoAccount"}, |
57 | {299, nullptr, "SuspendBackgroundDaemon"}, | 57 | {299, nullptr, "SuspendBackgroundDaemon"}, |
58 | {900, nullptr, "SetUserUnqualifiedForDebug"}, | ||
59 | {901, nullptr, "UnsetUserUnqualifiedForDebug"}, | ||
60 | {902, nullptr, "ListUsersUnqualifiedForDebug"}, | ||
61 | {910, nullptr, "RefreshFirmwareSettingsForDebug"}, | ||
58 | {997, nullptr, "DebugInvalidateTokenCacheForUser"}, | 62 | {997, nullptr, "DebugInvalidateTokenCacheForUser"}, |
59 | {998, nullptr, "DebugSetUserStateClose"}, | 63 | {998, nullptr, "DebugSetUserStateClose"}, |
60 | {999, nullptr, "DebugSetUserStateOpen"}, | 64 | {999, nullptr, "DebugSetUserStateOpen"}, |
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index de6730c33..2d1bd422f 100755 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp | |||
@@ -227,6 +227,8 @@ IDebugFunctions::IDebugFunctions(Core::System& system_) | |||
227 | {30, nullptr, "RequestLaunchApplicationWithUserAndArgumentForDebug"}, | 227 | {30, nullptr, "RequestLaunchApplicationWithUserAndArgumentForDebug"}, |
228 | {31, nullptr, "RequestLaunchApplicationByApplicationLaunchInfoForDebug"}, | 228 | {31, nullptr, "RequestLaunchApplicationByApplicationLaunchInfoForDebug"}, |
229 | {40, nullptr, "GetAppletResourceUsageInfo"}, | 229 | {40, nullptr, "GetAppletResourceUsageInfo"}, |
230 | {50, nullptr, "AddSystemProgramIdAndAppletIdForDebug"}, | ||
231 | {51, nullptr, "AddOperationConfirmedLibraryAppletIdForDebug"}, | ||
230 | {100, nullptr, "SetCpuBoostModeForApplet"}, | 232 | {100, nullptr, "SetCpuBoostModeForApplet"}, |
231 | {101, nullptr, "CancelCpuBoostModeForApplet"}, | 233 | {101, nullptr, "CancelCpuBoostModeForApplet"}, |
232 | {110, nullptr, "PushToAppletBoundChannelForDebug"}, | 234 | {110, nullptr, "PushToAppletBoundChannelForDebug"}, |
@@ -238,6 +240,8 @@ IDebugFunctions::IDebugFunctions(Core::System& system_) | |||
238 | {131, nullptr, "FriendInvitationClearApplicationParameter"}, | 240 | {131, nullptr, "FriendInvitationClearApplicationParameter"}, |
239 | {132, nullptr, "FriendInvitationPushApplicationParameter"}, | 241 | {132, nullptr, "FriendInvitationPushApplicationParameter"}, |
240 | {140, nullptr, "RestrictPowerOperationForSecureLaunchModeForDebug"}, | 242 | {140, nullptr, "RestrictPowerOperationForSecureLaunchModeForDebug"}, |
243 | {200, nullptr, "CreateFloatingLibraryAppletAccepterForDebug"}, | ||
244 | {300, nullptr, "TerminateAllRunningApplicationsForDebug"}, | ||
241 | {900, nullptr, "GetGrcProcessLaunchedSystemEvent"}, | 245 | {900, nullptr, "GetGrcProcessLaunchedSystemEvent"}, |
242 | }; | 246 | }; |
243 | // clang-format on | 247 | // clang-format on |
@@ -1860,6 +1864,8 @@ IHomeMenuFunctions::IHomeMenuFunctions(Core::System& system_) | |||
1860 | {31, nullptr, "GetWriterLockAccessorEx"}, | 1864 | {31, nullptr, "GetWriterLockAccessorEx"}, |
1861 | {40, nullptr, "IsSleepEnabled"}, | 1865 | {40, nullptr, "IsSleepEnabled"}, |
1862 | {41, nullptr, "IsRebootEnabled"}, | 1866 | {41, nullptr, "IsRebootEnabled"}, |
1867 | {50, nullptr, "LaunchSystemApplet"}, | ||
1868 | {51, nullptr, "LaunchStarter"}, | ||
1863 | {100, nullptr, "PopRequestLaunchApplicationForDebug"}, | 1869 | {100, nullptr, "PopRequestLaunchApplicationForDebug"}, |
1864 | {110, nullptr, "IsForceTerminateApplicationDisabledForDebug"}, | 1870 | {110, nullptr, "IsForceTerminateApplicationDisabledForDebug"}, |
1865 | {200, nullptr, "LaunchDevMenu"}, | 1871 | {200, nullptr, "LaunchDevMenu"}, |
diff --git a/src/core/hle/service/aoc/aoc_u.cpp b/src/core/hle/service/aoc/aoc_u.cpp index 12643fded..bc2ac1741 100755 --- a/src/core/hle/service/aoc/aoc_u.cpp +++ b/src/core/hle/service/aoc/aoc_u.cpp | |||
@@ -130,6 +130,9 @@ AOC_U::AOC_U(Core::System& system_) | |||
130 | {101, &AOC_U::CreatePermanentEcPurchasedEventManager, "CreatePermanentEcPurchasedEventManager"}, | 130 | {101, &AOC_U::CreatePermanentEcPurchasedEventManager, "CreatePermanentEcPurchasedEventManager"}, |
131 | {110, nullptr, "CreateContentsServiceManager"}, | 131 | {110, nullptr, "CreateContentsServiceManager"}, |
132 | {200, nullptr, "SetRequiredAddOnContentsOnContentsAvailabilityTransition"}, | 132 | {200, nullptr, "SetRequiredAddOnContentsOnContentsAvailabilityTransition"}, |
133 | {300, nullptr, "SetupHostAddOnContent"}, | ||
134 | {301, nullptr, "GetRegisteredAddOnContentPath"}, | ||
135 | {302, nullptr, "UpdateCachedList"}, | ||
133 | }; | 136 | }; |
134 | // clang-format on | 137 | // clang-format on |
135 | 138 | ||
diff --git a/src/core/hle/service/audio/hwopus.cpp b/src/core/hle/service/audio/hwopus.cpp index 5953f1c4a..deac92449 100755 --- a/src/core/hle/service/audio/hwopus.cpp +++ b/src/core/hle/service/audio/hwopus.cpp | |||
@@ -362,6 +362,8 @@ HwOpus::HwOpus(Core::System& system_) : ServiceFramework{system_, "hwopus"} { | |||
362 | {5, &HwOpus::GetWorkBufferSizeEx, "GetWorkBufferSizeEx"}, | 362 | {5, &HwOpus::GetWorkBufferSizeEx, "GetWorkBufferSizeEx"}, |
363 | {6, nullptr, "OpenHardwareOpusDecoderForMultiStreamEx"}, | 363 | {6, nullptr, "OpenHardwareOpusDecoderForMultiStreamEx"}, |
364 | {7, &HwOpus::GetWorkBufferSizeForMultiStreamEx, "GetWorkBufferSizeForMultiStreamEx"}, | 364 | {7, &HwOpus::GetWorkBufferSizeForMultiStreamEx, "GetWorkBufferSizeForMultiStreamEx"}, |
365 | {8, nullptr, "GetWorkBufferSizeExEx"}, | ||
366 | {9, nullptr, "GetWorkBufferSizeForMultiStreamExEx"}, | ||
365 | }; | 367 | }; |
366 | RegisterHandlers(functions); | 368 | RegisterHandlers(functions); |
367 | } | 369 | } |
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index f78070f1b..2173893dc 100755 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
@@ -64,6 +64,7 @@ IAppletResource::IAppletResource(Core::System& system_, | |||
64 | MakeControllerWithServiceContext<Controller_NPad>(HidController::NPad, shared_memory); | 64 | MakeControllerWithServiceContext<Controller_NPad>(HidController::NPad, shared_memory); |
65 | MakeController<Controller_Gesture>(HidController::Gesture, shared_memory); | 65 | MakeController<Controller_Gesture>(HidController::Gesture, shared_memory); |
66 | MakeController<Controller_ConsoleSixAxis>(HidController::ConsoleSixAxisSensor, shared_memory); | 66 | MakeController<Controller_ConsoleSixAxis>(HidController::ConsoleSixAxisSensor, shared_memory); |
67 | MakeController<Controller_Stubbed>(HidController::DebugMouse, shared_memory); | ||
67 | MakeControllerWithServiceContext<Controller_Palma>(HidController::Palma, shared_memory); | 68 | MakeControllerWithServiceContext<Controller_Palma>(HidController::Palma, shared_memory); |
68 | 69 | ||
69 | // Homebrew doesn't try to activate some controllers, so we activate them by default | 70 | // Homebrew doesn't try to activate some controllers, so we activate them by default |
@@ -75,6 +76,7 @@ IAppletResource::IAppletResource(Core::System& system_, | |||
75 | GetController<Controller_Stubbed>(HidController::CaptureButton).SetCommonHeaderOffset(0x5000); | 76 | GetController<Controller_Stubbed>(HidController::CaptureButton).SetCommonHeaderOffset(0x5000); |
76 | GetController<Controller_Stubbed>(HidController::InputDetector).SetCommonHeaderOffset(0x5200); | 77 | GetController<Controller_Stubbed>(HidController::InputDetector).SetCommonHeaderOffset(0x5200); |
77 | GetController<Controller_Stubbed>(HidController::UniquePad).SetCommonHeaderOffset(0x5A00); | 78 | GetController<Controller_Stubbed>(HidController::UniquePad).SetCommonHeaderOffset(0x5A00); |
79 | GetController<Controller_Stubbed>(HidController::DebugMouse).SetCommonHeaderOffset(0x3DC00); | ||
78 | 80 | ||
79 | // Register update callbacks | 81 | // Register update callbacks |
80 | npad_update_event = Core::Timing::CreateEvent( | 82 | npad_update_event = Core::Timing::CreateEvent( |
@@ -237,6 +239,7 @@ Hid::Hid(Core::System& system_) | |||
237 | {1, &Hid::ActivateDebugPad, "ActivateDebugPad"}, | 239 | {1, &Hid::ActivateDebugPad, "ActivateDebugPad"}, |
238 | {11, &Hid::ActivateTouchScreen, "ActivateTouchScreen"}, | 240 | {11, &Hid::ActivateTouchScreen, "ActivateTouchScreen"}, |
239 | {21, &Hid::ActivateMouse, "ActivateMouse"}, | 241 | {21, &Hid::ActivateMouse, "ActivateMouse"}, |
242 | {26, nullptr, "ActivateDebugMouse"}, | ||
240 | {31, &Hid::ActivateKeyboard, "ActivateKeyboard"}, | 243 | {31, &Hid::ActivateKeyboard, "ActivateKeyboard"}, |
241 | {32, &Hid::SendKeyboardLockKeyEvent, "SendKeyboardLockKeyEvent"}, | 244 | {32, &Hid::SendKeyboardLockKeyEvent, "SendKeyboardLockKeyEvent"}, |
242 | {40, nullptr, "AcquireXpadIdEventHandle"}, | 245 | {40, nullptr, "AcquireXpadIdEventHandle"}, |
@@ -2381,6 +2384,8 @@ public: | |||
2381 | {20, nullptr, "DeactivateMouse"}, | 2384 | {20, nullptr, "DeactivateMouse"}, |
2382 | {21, nullptr, "SetMouseAutoPilotState"}, | 2385 | {21, nullptr, "SetMouseAutoPilotState"}, |
2383 | {22, nullptr, "UnsetMouseAutoPilotState"}, | 2386 | {22, nullptr, "UnsetMouseAutoPilotState"}, |
2387 | {25, nullptr, "SetDebugMouseAutoPilotState"}, | ||
2388 | {26, nullptr, "UnsetDebugMouseAutoPilotState"}, | ||
2384 | {30, nullptr, "DeactivateKeyboard"}, | 2389 | {30, nullptr, "DeactivateKeyboard"}, |
2385 | {31, nullptr, "SetKeyboardAutoPilotState"}, | 2390 | {31, nullptr, "SetKeyboardAutoPilotState"}, |
2386 | {32, nullptr, "UnsetKeyboardAutoPilotState"}, | 2391 | {32, nullptr, "UnsetKeyboardAutoPilotState"}, |
@@ -2496,6 +2501,7 @@ public: | |||
2496 | {2000, nullptr, "DeactivateDigitizer"}, | 2501 | {2000, nullptr, "DeactivateDigitizer"}, |
2497 | {2001, nullptr, "SetDigitizerAutoPilotState"}, | 2502 | {2001, nullptr, "SetDigitizerAutoPilotState"}, |
2498 | {2002, nullptr, "UnsetDigitizerAutoPilotState"}, | 2503 | {2002, nullptr, "UnsetDigitizerAutoPilotState"}, |
2504 | {2002, nullptr, "ReloadFirmwareDebugSettings"}, | ||
2499 | }; | 2505 | }; |
2500 | // clang-format on | 2506 | // clang-format on |
2501 | 2507 | ||
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h index 300438eb6..8bbecb1a4 100755 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h | |||
@@ -33,6 +33,7 @@ enum class HidController : std::size_t { | |||
33 | NPad, | 33 | NPad, |
34 | Gesture, | 34 | Gesture, |
35 | ConsoleSixAxisSensor, | 35 | ConsoleSixAxisSensor, |
36 | DebugMouse, | ||
36 | Palma, | 37 | Palma, |
37 | 38 | ||
38 | MaxControllers, | 39 | MaxControllers, |
diff --git a/src/core/hle/service/hid/hidbus.cpp b/src/core/hle/service/hid/hidbus.cpp index 0e75ab974..5bdab0a52 100755 --- a/src/core/hle/service/hid/hidbus.cpp +++ b/src/core/hle/service/hid/hidbus.cpp | |||
@@ -91,7 +91,7 @@ std::optional<std::size_t> HidBus::GetDeviceIndexFromHandle(BusHandle handle) co | |||
91 | if (handle.abstracted_pad_id == device_handle.abstracted_pad_id && | 91 | if (handle.abstracted_pad_id == device_handle.abstracted_pad_id && |
92 | handle.internal_index == device_handle.internal_index && | 92 | handle.internal_index == device_handle.internal_index && |
93 | handle.player_number == device_handle.player_number && | 93 | handle.player_number == device_handle.player_number && |
94 | handle.bus_type == device_handle.bus_type && | 94 | handle.bus_type_id == device_handle.bus_type_id && |
95 | handle.is_valid == device_handle.is_valid) { | 95 | handle.is_valid == device_handle.is_valid) { |
96 | return i; | 96 | return i; |
97 | } | 97 | } |
@@ -123,7 +123,7 @@ void HidBus::GetBusHandle(Kernel::HLERequestContext& ctx) { | |||
123 | continue; | 123 | continue; |
124 | } | 124 | } |
125 | if (static_cast<Core::HID::NpadIdType>(handle.player_number) == parameters.npad_id && | 125 | if (static_cast<Core::HID::NpadIdType>(handle.player_number) == parameters.npad_id && |
126 | handle.bus_type == parameters.bus_type) { | 126 | handle.bus_type_id == static_cast<u8>(parameters.bus_type)) { |
127 | is_handle_found = true; | 127 | is_handle_found = true; |
128 | handle_index = i; | 128 | handle_index = i; |
129 | break; | 129 | break; |
@@ -140,7 +140,7 @@ void HidBus::GetBusHandle(Kernel::HLERequestContext& ctx) { | |||
140 | .abstracted_pad_id = static_cast<u8>(i), | 140 | .abstracted_pad_id = static_cast<u8>(i), |
141 | .internal_index = static_cast<u8>(i), | 141 | .internal_index = static_cast<u8>(i), |
142 | .player_number = static_cast<u8>(parameters.npad_id), | 142 | .player_number = static_cast<u8>(parameters.npad_id), |
143 | .bus_type = parameters.bus_type, | 143 | .bus_type_id = static_cast<u8>(parameters.bus_type), |
144 | .is_valid = true, | 144 | .is_valid = true, |
145 | }; | 145 | }; |
146 | handle_index = i; | 146 | handle_index = i; |
@@ -172,7 +172,7 @@ void HidBus::IsExternalDeviceConnected(Kernel::HLERequestContext& ctx) { | |||
172 | LOG_INFO(Service_HID, | 172 | LOG_INFO(Service_HID, |
173 | "Called, abstracted_pad_id={}, bus_type={}, internal_index={}, " | 173 | "Called, abstracted_pad_id={}, bus_type={}, internal_index={}, " |
174 | "player_number={}, is_valid={}", | 174 | "player_number={}, is_valid={}", |
175 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index, | 175 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index, |
176 | bus_handle_.player_number, bus_handle_.is_valid); | 176 | bus_handle_.player_number, bus_handle_.is_valid); |
177 | 177 | ||
178 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); | 178 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); |
@@ -201,7 +201,7 @@ void HidBus::Initialize(Kernel::HLERequestContext& ctx) { | |||
201 | LOG_INFO(Service_HID, | 201 | LOG_INFO(Service_HID, |
202 | "called, abstracted_pad_id={} bus_type={} internal_index={} " | 202 | "called, abstracted_pad_id={} bus_type={} internal_index={} " |
203 | "player_number={} is_valid={}, applet_resource_user_id={}", | 203 | "player_number={} is_valid={}, applet_resource_user_id={}", |
204 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index, | 204 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index, |
205 | bus_handle_.player_number, bus_handle_.is_valid, applet_resource_user_id); | 205 | bus_handle_.player_number, bus_handle_.is_valid, applet_resource_user_id); |
206 | 206 | ||
207 | is_hidbus_enabled = true; | 207 | is_hidbus_enabled = true; |
@@ -253,7 +253,7 @@ void HidBus::Finalize(Kernel::HLERequestContext& ctx) { | |||
253 | LOG_INFO(Service_HID, | 253 | LOG_INFO(Service_HID, |
254 | "called, abstracted_pad_id={}, bus_type={}, internal_index={}, " | 254 | "called, abstracted_pad_id={}, bus_type={}, internal_index={}, " |
255 | "player_number={}, is_valid={}, applet_resource_user_id={}", | 255 | "player_number={}, is_valid={}, applet_resource_user_id={}", |
256 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index, | 256 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index, |
257 | bus_handle_.player_number, bus_handle_.is_valid, applet_resource_user_id); | 257 | bus_handle_.player_number, bus_handle_.is_valid, applet_resource_user_id); |
258 | 258 | ||
259 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); | 259 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); |
@@ -301,7 +301,7 @@ void HidBus::EnableExternalDevice(Kernel::HLERequestContext& ctx) { | |||
301 | "called, enable={}, abstracted_pad_id={}, bus_type={}, internal_index={}, " | 301 | "called, enable={}, abstracted_pad_id={}, bus_type={}, internal_index={}, " |
302 | "player_number={}, is_valid={}, inval={}, applet_resource_user_id{}", | 302 | "player_number={}, is_valid={}, inval={}, applet_resource_user_id{}", |
303 | parameters.enable, parameters.bus_handle.abstracted_pad_id, | 303 | parameters.enable, parameters.bus_handle.abstracted_pad_id, |
304 | parameters.bus_handle.bus_type, parameters.bus_handle.internal_index, | 304 | parameters.bus_handle.bus_type_id, parameters.bus_handle.internal_index, |
305 | parameters.bus_handle.player_number, parameters.bus_handle.is_valid, parameters.inval, | 305 | parameters.bus_handle.player_number, parameters.bus_handle.is_valid, parameters.inval, |
306 | parameters.applet_resource_user_id); | 306 | parameters.applet_resource_user_id); |
307 | 307 | ||
@@ -329,7 +329,7 @@ void HidBus::GetExternalDeviceId(Kernel::HLERequestContext& ctx) { | |||
329 | LOG_DEBUG(Service_HID, | 329 | LOG_DEBUG(Service_HID, |
330 | "called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, " | 330 | "called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, " |
331 | "is_valid={}", | 331 | "is_valid={}", |
332 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index, | 332 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index, |
333 | bus_handle_.player_number, bus_handle_.is_valid); | 333 | bus_handle_.player_number, bus_handle_.is_valid); |
334 | 334 | ||
335 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); | 335 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); |
@@ -357,7 +357,7 @@ void HidBus::SendCommandAsync(Kernel::HLERequestContext& ctx) { | |||
357 | LOG_DEBUG(Service_HID, | 357 | LOG_DEBUG(Service_HID, |
358 | "called, data_size={}, abstracted_pad_id={}, bus_type={}, internal_index={}, " | 358 | "called, data_size={}, abstracted_pad_id={}, bus_type={}, internal_index={}, " |
359 | "player_number={}, is_valid={}", | 359 | "player_number={}, is_valid={}", |
360 | data.size(), bus_handle_.abstracted_pad_id, bus_handle_.bus_type, | 360 | data.size(), bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, |
361 | bus_handle_.internal_index, bus_handle_.player_number, bus_handle_.is_valid); | 361 | bus_handle_.internal_index, bus_handle_.player_number, bus_handle_.is_valid); |
362 | 362 | ||
363 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); | 363 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); |
@@ -384,7 +384,7 @@ void HidBus::GetSendCommandAsynceResult(Kernel::HLERequestContext& ctx) { | |||
384 | LOG_DEBUG(Service_HID, | 384 | LOG_DEBUG(Service_HID, |
385 | "called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, " | 385 | "called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, " |
386 | "is_valid={}", | 386 | "is_valid={}", |
387 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index, | 387 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index, |
388 | bus_handle_.player_number, bus_handle_.is_valid); | 388 | bus_handle_.player_number, bus_handle_.is_valid); |
389 | 389 | ||
390 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); | 390 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); |
@@ -413,7 +413,7 @@ void HidBus::SetEventForSendCommandAsycResult(Kernel::HLERequestContext& ctx) { | |||
413 | LOG_INFO(Service_HID, | 413 | LOG_INFO(Service_HID, |
414 | "called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, " | 414 | "called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, " |
415 | "is_valid={}", | 415 | "is_valid={}", |
416 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index, | 416 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index, |
417 | bus_handle_.player_number, bus_handle_.is_valid); | 417 | bus_handle_.player_number, bus_handle_.is_valid); |
418 | 418 | ||
419 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); | 419 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); |
@@ -464,7 +464,7 @@ void HidBus::EnableJoyPollingReceiveMode(Kernel::HLERequestContext& ctx) { | |||
464 | LOG_INFO(Service_HID, | 464 | LOG_INFO(Service_HID, |
465 | "called, t_mem_handle=0x{:08X}, polling_mode={}, abstracted_pad_id={}, bus_type={}, " | 465 | "called, t_mem_handle=0x{:08X}, polling_mode={}, abstracted_pad_id={}, bus_type={}, " |
466 | "internal_index={}, player_number={}, is_valid={}", | 466 | "internal_index={}, player_number={}, is_valid={}", |
467 | t_mem_handle, polling_mode_, bus_handle_.abstracted_pad_id, bus_handle_.bus_type, | 467 | t_mem_handle, polling_mode_, bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, |
468 | bus_handle_.internal_index, bus_handle_.player_number, bus_handle_.is_valid); | 468 | bus_handle_.internal_index, bus_handle_.player_number, bus_handle_.is_valid); |
469 | 469 | ||
470 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); | 470 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); |
@@ -492,7 +492,7 @@ void HidBus::DisableJoyPollingReceiveMode(Kernel::HLERequestContext& ctx) { | |||
492 | LOG_INFO(Service_HID, | 492 | LOG_INFO(Service_HID, |
493 | "called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, " | 493 | "called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, " |
494 | "is_valid={}", | 494 | "is_valid={}", |
495 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index, | 495 | bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index, |
496 | bus_handle_.player_number, bus_handle_.is_valid); | 496 | bus_handle_.player_number, bus_handle_.is_valid); |
497 | 497 | ||
498 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); | 498 | const auto device_index = GetDeviceIndexFromHandle(bus_handle_); |
diff --git a/src/core/hle/service/hid/hidbus.h b/src/core/hle/service/hid/hidbus.h index 142b17d34..3fa288677 100755 --- a/src/core/hle/service/hid/hidbus.h +++ b/src/core/hle/service/hid/hidbus.h | |||
@@ -41,7 +41,7 @@ private: | |||
41 | }; | 41 | }; |
42 | 42 | ||
43 | // This is nn::hidbus::BusType | 43 | // This is nn::hidbus::BusType |
44 | enum class BusType : u8 { | 44 | enum class BusType : u32 { |
45 | LeftJoyRail, | 45 | LeftJoyRail, |
46 | RightJoyRail, | 46 | RightJoyRail, |
47 | InternalBus, // Lark microphone | 47 | InternalBus, // Lark microphone |
@@ -54,7 +54,7 @@ private: | |||
54 | u32 abstracted_pad_id; | 54 | u32 abstracted_pad_id; |
55 | u8 internal_index; | 55 | u8 internal_index; |
56 | u8 player_number; | 56 | u8 player_number; |
57 | BusType bus_type; | 57 | u8 bus_type_id; |
58 | bool is_valid; | 58 | bool is_valid; |
59 | }; | 59 | }; |
60 | static_assert(sizeof(BusHandle) == 0x8, "BusHandle is an invalid size"); | 60 | static_assert(sizeof(BusHandle) == 0x8, "BusHandle is an invalid size"); |
diff --git a/src/core/hle/service/ncm/ncm.cpp b/src/core/hle/service/ncm/ncm.cpp index d9761b423..bf36e1fff 100755 --- a/src/core/hle/service/ncm/ncm.cpp +++ b/src/core/hle/service/ncm/ncm.cpp | |||
@@ -124,6 +124,7 @@ public: | |||
124 | {12, nullptr, "InactivateContentMetaDatabase"}, | 124 | {12, nullptr, "InactivateContentMetaDatabase"}, |
125 | {13, nullptr, "InvalidateRightsIdCache"}, | 125 | {13, nullptr, "InvalidateRightsIdCache"}, |
126 | {14, nullptr, "GetMemoryReport"}, | 126 | {14, nullptr, "GetMemoryReport"}, |
127 | {15, nullptr, "ActivateFsContentStorage"}, | ||
127 | }; | 128 | }; |
128 | // clang-format on | 129 | // clang-format on |
129 | 130 | ||
diff --git a/src/core/hle/service/ns/ns.cpp b/src/core/hle/service/ns/ns.cpp index f03856bb7..2ab12c64e 100755 --- a/src/core/hle/service/ns/ns.cpp +++ b/src/core/hle/service/ns/ns.cpp | |||
@@ -160,6 +160,8 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_ | |||
160 | {606, nullptr, "GetContentMetaStorage"}, | 160 | {606, nullptr, "GetContentMetaStorage"}, |
161 | {607, nullptr, "ListAvailableAddOnContent"}, | 161 | {607, nullptr, "ListAvailableAddOnContent"}, |
162 | {609, nullptr, "ListAvailabilityAssuredAddOnContent"}, | 162 | {609, nullptr, "ListAvailabilityAssuredAddOnContent"}, |
163 | {610, nullptr, "GetInstalledContentMetaStorage"}, | ||
164 | {611, nullptr, "PrepareAddOnContent"}, | ||
163 | {700, nullptr, "PushDownloadTaskList"}, | 165 | {700, nullptr, "PushDownloadTaskList"}, |
164 | {701, nullptr, "ClearTaskStatusList"}, | 166 | {701, nullptr, "ClearTaskStatusList"}, |
165 | {702, nullptr, "RequestDownloadTaskList"}, | 167 | {702, nullptr, "RequestDownloadTaskList"}, |
@@ -229,6 +231,7 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_ | |||
229 | {1900, nullptr, "IsActiveAccount"}, | 231 | {1900, nullptr, "IsActiveAccount"}, |
230 | {1901, nullptr, "RequestDownloadApplicationPrepurchasedRights"}, | 232 | {1901, nullptr, "RequestDownloadApplicationPrepurchasedRights"}, |
231 | {1902, nullptr, "GetApplicationTicketInfo"}, | 233 | {1902, nullptr, "GetApplicationTicketInfo"}, |
234 | {1903, nullptr, "RequestDownloadApplicationPrepurchasedRightsForAccount"}, | ||
232 | {2000, nullptr, "GetSystemDeliveryInfo"}, | 235 | {2000, nullptr, "GetSystemDeliveryInfo"}, |
233 | {2001, nullptr, "SelectLatestSystemDeliveryInfo"}, | 236 | {2001, nullptr, "SelectLatestSystemDeliveryInfo"}, |
234 | {2002, nullptr, "VerifyDeliveryProtocolVersion"}, | 237 | {2002, nullptr, "VerifyDeliveryProtocolVersion"}, |
@@ -277,8 +280,11 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_ | |||
277 | {2352, nullptr, "RequestResolveNoDownloadRightsError"}, | 280 | {2352, nullptr, "RequestResolveNoDownloadRightsError"}, |
278 | {2353, nullptr, "GetApplicationDownloadTaskInfo"}, | 281 | {2353, nullptr, "GetApplicationDownloadTaskInfo"}, |
279 | {2354, nullptr, "PrioritizeApplicationBackgroundTask"}, | 282 | {2354, nullptr, "PrioritizeApplicationBackgroundTask"}, |
280 | {2355, nullptr, "Unknown2355"}, | 283 | {2355, nullptr, "PreferStorageEfficientUpdate"}, |
281 | {2356, nullptr, "Unknown2356"}, | 284 | {2356, nullptr, "RequestStorageEfficientUpdatePreferable"}, |
285 | {2357, nullptr, "EnableMultiCoreDownload"}, | ||
286 | {2358, nullptr, "DisableMultiCoreDownload"}, | ||
287 | {2359, nullptr, "IsMultiCoreDownloadEnabled"}, | ||
282 | {2400, nullptr, "GetPromotionInfo"}, | 288 | {2400, nullptr, "GetPromotionInfo"}, |
283 | {2401, nullptr, "CountPromotionInfo"}, | 289 | {2401, nullptr, "CountPromotionInfo"}, |
284 | {2402, nullptr, "ListPromotionInfo"}, | 290 | {2402, nullptr, "ListPromotionInfo"}, |
@@ -296,6 +302,7 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_ | |||
296 | {2519, nullptr, "IsQualificationTransitionSupported"}, | 302 | {2519, nullptr, "IsQualificationTransitionSupported"}, |
297 | {2520, nullptr, "IsQualificationTransitionSupportedByProcessId"}, | 303 | {2520, nullptr, "IsQualificationTransitionSupportedByProcessId"}, |
298 | {2521, nullptr, "GetRightsUserChangedEvent"}, | 304 | {2521, nullptr, "GetRightsUserChangedEvent"}, |
305 | {2522, nullptr, "IsRomRedirectionAvailable"}, | ||
299 | {2800, nullptr, "GetApplicationIdOfPreomia"}, | 306 | {2800, nullptr, "GetApplicationIdOfPreomia"}, |
300 | {3000, nullptr, "RegisterDeviceLockKey"}, | 307 | {3000, nullptr, "RegisterDeviceLockKey"}, |
301 | {3001, nullptr, "UnregisterDeviceLockKey"}, | 308 | {3001, nullptr, "UnregisterDeviceLockKey"}, |
@@ -312,6 +319,7 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_ | |||
312 | {3012, nullptr, "IsApplicationTitleHidden"}, | 319 | {3012, nullptr, "IsApplicationTitleHidden"}, |
313 | {3013, nullptr, "IsGameCardEnabled"}, | 320 | {3013, nullptr, "IsGameCardEnabled"}, |
314 | {3014, nullptr, "IsLocalContentShareEnabled"}, | 321 | {3014, nullptr, "IsLocalContentShareEnabled"}, |
322 | {3050, nullptr, "ListAssignELicenseTaskResult"}, | ||
315 | {9999, nullptr, "GetApplicationCertificate"}, | 323 | {9999, nullptr, "GetApplicationCertificate"}, |
316 | }; | 324 | }; |
317 | // clang-format on | 325 | // clang-format on |
diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index 8d49fc107..c5d786589 100755 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp | |||
@@ -953,6 +953,9 @@ BSDCFG::BSDCFG(Core::System& system_) : ServiceFramework{system_, "bsdcfg"} { | |||
953 | {10, nullptr, "ClearArpEntries"}, | 953 | {10, nullptr, "ClearArpEntries"}, |
954 | {11, nullptr, "ClearArpEntries2"}, | 954 | {11, nullptr, "ClearArpEntries2"}, |
955 | {12, nullptr, "PrintArpEntries"}, | 955 | {12, nullptr, "PrintArpEntries"}, |
956 | {13, nullptr, "Unknown13"}, | ||
957 | {14, nullptr, "Unknown14"}, | ||
958 | {15, nullptr, "Unknown15"}, | ||
956 | }; | 959 | }; |
957 | // clang-format on | 960 | // clang-format on |
958 | 961 | ||
diff --git a/src/core/hle/service/ssl/ssl.cpp b/src/core/hle/service/ssl/ssl.cpp index e62862a0d..5369d9971 100755 --- a/src/core/hle/service/ssl/ssl.cpp +++ b/src/core/hle/service/ssl/ssl.cpp | |||
@@ -46,6 +46,14 @@ public: | |||
46 | {25, nullptr, "GetCipherInfo"}, | 46 | {25, nullptr, "GetCipherInfo"}, |
47 | {26, nullptr, "SetNextAlpnProto"}, | 47 | {26, nullptr, "SetNextAlpnProto"}, |
48 | {27, nullptr, "GetNextAlpnProto"}, | 48 | {27, nullptr, "GetNextAlpnProto"}, |
49 | {28, nullptr, "SetDtlsSocketDescriptor"}, | ||
50 | {29, nullptr, "GetDtlsHandshakeTimeout"}, | ||
51 | {30, nullptr, "SetPrivateOption"}, | ||
52 | {31, nullptr, "SetSrtpCiphers"}, | ||
53 | {32, nullptr, "GetSrtpCipher"}, | ||
54 | {33, nullptr, "ExportKeyingMaterial"}, | ||
55 | {34, nullptr, "SetIoTimeout"}, | ||
56 | {35, nullptr, "GetIoTimeout"}, | ||
49 | }; | 57 | }; |
50 | // clang-format on | 58 | // clang-format on |
51 | 59 | ||
@@ -69,6 +77,8 @@ public: | |||
69 | {9, nullptr, "AddPolicyOid"}, | 77 | {9, nullptr, "AddPolicyOid"}, |
70 | {10, nullptr, "ImportCrl"}, | 78 | {10, nullptr, "ImportCrl"}, |
71 | {11, nullptr, "RemoveCrl"}, | 79 | {11, nullptr, "RemoveCrl"}, |
80 | {12, nullptr, "ImportClientCertKeyPki"}, | ||
81 | {13, nullptr, "GeneratePrivateKeyAndCert"}, | ||
72 | }; | 82 | }; |
73 | RegisterHandlers(functions); | 83 | RegisterHandlers(functions); |
74 | } | 84 | } |
diff --git a/src/core/hle/service/vi/vi.cpp b/src/core/hle/service/vi/vi.cpp index fc388af09..145913806 100755 --- a/src/core/hle/service/vi/vi.cpp +++ b/src/core/hle/service/vi/vi.cpp | |||
@@ -249,6 +249,9 @@ public: | |||
249 | {2053, nullptr, "DestroyIndirectProducerEndPoint"}, | 249 | {2053, nullptr, "DestroyIndirectProducerEndPoint"}, |
250 | {2054, nullptr, "CreateIndirectConsumerEndPoint"}, | 250 | {2054, nullptr, "CreateIndirectConsumerEndPoint"}, |
251 | {2055, nullptr, "DestroyIndirectConsumerEndPoint"}, | 251 | {2055, nullptr, "DestroyIndirectConsumerEndPoint"}, |
252 | {2060, nullptr, "CreateWatermarkCompositor"}, | ||
253 | {2062, nullptr, "SetWatermarkText"}, | ||
254 | {2063, nullptr, "SetWatermarkLayerStacks"}, | ||
252 | {2300, nullptr, "AcquireLayerTexturePresentingEvent"}, | 255 | {2300, nullptr, "AcquireLayerTexturePresentingEvent"}, |
253 | {2301, nullptr, "ReleaseLayerTexturePresentingEvent"}, | 256 | {2301, nullptr, "ReleaseLayerTexturePresentingEvent"}, |
254 | {2302, nullptr, "GetDisplayHotplugEvent"}, | 257 | {2302, nullptr, "GetDisplayHotplugEvent"}, |
@@ -279,6 +282,8 @@ public: | |||
279 | {6011, nullptr, "EnableLayerAutoClearTransitionBuffer"}, | 282 | {6011, nullptr, "EnableLayerAutoClearTransitionBuffer"}, |
280 | {6012, nullptr, "DisableLayerAutoClearTransitionBuffer"}, | 283 | {6012, nullptr, "DisableLayerAutoClearTransitionBuffer"}, |
281 | {6013, nullptr, "SetLayerOpacity"}, | 284 | {6013, nullptr, "SetLayerOpacity"}, |
285 | {6014, nullptr, "AttachLayerWatermarkCompositor"}, | ||
286 | {6015, nullptr, "DetachLayerWatermarkCompositor"}, | ||
282 | {7000, nullptr, "SetContentVisibility"}, | 287 | {7000, nullptr, "SetContentVisibility"}, |
283 | {8000, nullptr, "SetConductorLayer"}, | 288 | {8000, nullptr, "SetConductorLayer"}, |
284 | {8001, nullptr, "SetTimestampTracking"}, | 289 | {8001, nullptr, "SetTimestampTracking"}, |
diff --git a/src/core/hle/service/vi/vi_m.cpp b/src/core/hle/service/vi/vi_m.cpp index 34326bcbd..6479e8620 100755 --- a/src/core/hle/service/vi/vi_m.cpp +++ b/src/core/hle/service/vi/vi_m.cpp | |||
@@ -14,6 +14,10 @@ VI_M::VI_M(Core::System& system_, NVFlinger::NVFlinger& nv_flinger_, | |||
14 | static const FunctionInfo functions[] = { | 14 | static const FunctionInfo functions[] = { |
15 | {2, &VI_M::GetDisplayService, "GetDisplayService"}, | 15 | {2, &VI_M::GetDisplayService, "GetDisplayService"}, |
16 | {3, nullptr, "GetDisplayServiceWithProxyNameExchange"}, | 16 | {3, nullptr, "GetDisplayServiceWithProxyNameExchange"}, |
17 | {100, nullptr, "PrepareFatal"}, | ||
18 | {101, nullptr, "ShowFatal"}, | ||
19 | {102, nullptr, "DrawFatalRectangle"}, | ||
20 | {103, nullptr, "DrawFatalText32"}, | ||
17 | }; | 21 | }; |
18 | RegisterHandlers(functions); | 22 | RegisterHandlers(functions); |
19 | } | 23 | } |
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index b8782bcaf..4e0aed618 100755 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp | |||
@@ -212,16 +212,11 @@ void Config::ReadPlayerValue(std::size_t player_index) { | |||
212 | } | 212 | } |
213 | 213 | ||
214 | if (player_prefix.isEmpty() && Settings::IsConfiguringGlobal()) { | 214 | if (player_prefix.isEmpty() && Settings::IsConfiguringGlobal()) { |
215 | const auto controller = static_cast<Settings::ControllerType>( | 215 | player.controller_type = static_cast<Settings::ControllerType>( |
216 | qt_config | 216 | qt_config |
217 | ->value(QStringLiteral("%1type").arg(player_prefix), | 217 | ->value(QStringLiteral("%1type").arg(player_prefix), |
218 | static_cast<u8>(Settings::ControllerType::ProController)) | 218 | static_cast<u8>(Settings::ControllerType::ProController)) |
219 | .toUInt()); | 219 | .toUInt()); |
220 | |||
221 | if (controller == Settings::ControllerType::LeftJoycon || | ||
222 | controller == Settings::ControllerType::RightJoycon) { | ||
223 | player.controller_type = controller; | ||
224 | } | ||
225 | } else { | 220 | } else { |
226 | player.connected = | 221 | player.connected = |
227 | ReadSetting(QStringLiteral("%1connected").arg(player_prefix), player_index == 0) | 222 | ReadSetting(QStringLiteral("%1connected").arg(player_prefix), player_index == 0) |
@@ -1313,9 +1308,7 @@ void Config::SaveRendererValues() { | |||
1313 | static_cast<u32>(Settings::values.renderer_backend.GetValue(global)), | 1308 | static_cast<u32>(Settings::values.renderer_backend.GetValue(global)), |
1314 | static_cast<u32>(Settings::values.renderer_backend.GetDefault()), | 1309 | static_cast<u32>(Settings::values.renderer_backend.GetDefault()), |
1315 | Settings::values.renderer_backend.UsingGlobal()); | 1310 | Settings::values.renderer_backend.UsingGlobal()); |
1316 | WriteSetting(QString::fromStdString(Settings::values.renderer_force_max_clock.GetLabel()), | 1311 | WriteGlobalSetting(Settings::values.renderer_force_max_clock); |
1317 | static_cast<u32>(Settings::values.renderer_force_max_clock.GetValue(global)), | ||
1318 | static_cast<u32>(Settings::values.renderer_force_max_clock.GetDefault())); | ||
1319 | WriteGlobalSetting(Settings::values.vulkan_device); | 1312 | WriteGlobalSetting(Settings::values.vulkan_device); |
1320 | WriteSetting(QString::fromStdString(Settings::values.fullscreen_mode.GetLabel()), | 1313 | WriteSetting(QString::fromStdString(Settings::values.fullscreen_mode.GetLabel()), |
1321 | static_cast<u32>(Settings::values.fullscreen_mode.GetValue(global)), | 1314 | static_cast<u32>(Settings::values.fullscreen_mode.GetValue(global)), |
diff --git a/src/yuzu/configuration/configure_graphics_advanced.cpp b/src/yuzu/configuration/configure_graphics_advanced.cpp index 789316793..76db11020 100755 --- a/src/yuzu/configuration/configure_graphics_advanced.cpp +++ b/src/yuzu/configuration/configure_graphics_advanced.cpp | |||
@@ -47,8 +47,6 @@ void ConfigureGraphicsAdvanced::SetConfiguration() { | |||
47 | &Settings::values.max_anisotropy); | 47 | &Settings::values.max_anisotropy); |
48 | ConfigurationShared::SetHighlight(ui->label_gpu_accuracy, | 48 | ConfigurationShared::SetHighlight(ui->label_gpu_accuracy, |
49 | !Settings::values.gpu_accuracy.UsingGlobal()); | 49 | !Settings::values.gpu_accuracy.UsingGlobal()); |
50 | ConfigurationShared::SetHighlight(ui->renderer_force_max_clock, | ||
51 | !Settings::values.renderer_force_max_clock.UsingGlobal()); | ||
52 | ConfigurationShared::SetHighlight(ui->af_label, | 50 | ConfigurationShared::SetHighlight(ui->af_label, |
53 | !Settings::values.max_anisotropy.UsingGlobal()); | 51 | !Settings::values.max_anisotropy.UsingGlobal()); |
54 | } | 52 | } |
diff --git a/src/yuzu/configuration/configure_input_per_game.cpp b/src/yuzu/configuration/configure_input_per_game.cpp index 78e65d468..4e77fe00b 100755 --- a/src/yuzu/configuration/configure_input_per_game.cpp +++ b/src/yuzu/configuration/configure_input_per_game.cpp | |||
@@ -57,7 +57,7 @@ void ConfigureInputPerGame::ApplyConfiguration() { | |||
57 | } | 57 | } |
58 | 58 | ||
59 | void ConfigureInputPerGame::LoadConfiguration() { | 59 | void ConfigureInputPerGame::LoadConfiguration() { |
60 | static constexpr size_t HANDHELD_INDEX = 8; | 60 | static constexpr size_t HANDHELD_INDEX = 0; |
61 | 61 | ||
62 | auto& hid_core = system.HIDCore(); | 62 | auto& hid_core = system.HIDCore(); |
63 | for (size_t player_index = 0; player_index < profile_comboboxes.size(); ++player_index) { | 63 | for (size_t player_index = 0; player_index < profile_comboboxes.size(); ++player_index) { |
@@ -69,9 +69,6 @@ void ConfigureInputPerGame::LoadConfiguration() { | |||
69 | const auto selection_index = player_combobox->currentIndex(); | 69 | const auto selection_index = player_combobox->currentIndex(); |
70 | if (selection_index == 0) { | 70 | if (selection_index == 0) { |
71 | Settings::values.players.GetValue()[player_index].profile_name = ""; | 71 | Settings::values.players.GetValue()[player_index].profile_name = ""; |
72 | if (player_index == 0) { | ||
73 | Settings::values.players.GetValue()[HANDHELD_INDEX] = {}; | ||
74 | } | ||
75 | Settings::values.players.SetGlobal(true); | 72 | Settings::values.players.SetGlobal(true); |
76 | emulated_controller->ReloadFromSettings(); | 73 | emulated_controller->ReloadFromSettings(); |
77 | continue; | 74 | continue; |
diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp index 2fff66ef2..a7d188279 100755 --- a/src/yuzu/configuration/configure_input_player.cpp +++ b/src/yuzu/configuration/configure_input_player.cpp | |||
@@ -1589,7 +1589,6 @@ void ConfigureInputPlayer::LoadProfile() { | |||
1589 | } | 1589 | } |
1590 | 1590 | ||
1591 | void ConfigureInputPlayer::SaveProfile() { | 1591 | void ConfigureInputPlayer::SaveProfile() { |
1592 | static constexpr size_t HANDHELD_INDEX = 8; | ||
1593 | const QString profile_name = ui->comboProfiles->itemText(ui->comboProfiles->currentIndex()); | 1592 | const QString profile_name = ui->comboProfiles->itemText(ui->comboProfiles->currentIndex()); |
1594 | 1593 | ||
1595 | if (profile_name.isEmpty()) { | 1594 | if (profile_name.isEmpty()) { |
@@ -1598,12 +1597,7 @@ void ConfigureInputPlayer::SaveProfile() { | |||
1598 | 1597 | ||
1599 | ApplyConfiguration(); | 1598 | ApplyConfiguration(); |
1600 | 1599 | ||
1601 | // When we're in handheld mode, only the handheld emulated controller bindings are updated | 1600 | if (!profiles->SaveProfile(profile_name.toStdString(), player_index)) { |
1602 | const bool is_handheld = player_index == 0 && emulated_controller->GetNpadIdType() == | ||
1603 | Core::HID::NpadIdType::Handheld; | ||
1604 | const auto profile_player_index = is_handheld ? HANDHELD_INDEX : player_index; | ||
1605 | |||
1606 | if (!profiles->SaveProfile(profile_name.toStdString(), profile_player_index)) { | ||
1607 | QMessageBox::critical(this, tr("Save Input Profile"), | 1601 | QMessageBox::critical(this, tr("Save Input Profile"), |
1608 | tr("Failed to save the input profile \"%1\"").arg(profile_name)); | 1602 | tr("Failed to save the input profile \"%1\"").arg(profile_name)); |
1609 | UpdateInputProfiles(); | 1603 | UpdateInputProfiles(); |