early-access version 3416
This commit is contained in:
parent
008b77bc59
commit
cb3c84e5fa
24 changed files with 182 additions and 54 deletions
|
@ -1,7 +1,7 @@
|
||||||
yuzu emulator early access
|
yuzu emulator early access
|
||||||
=============
|
=============
|
||||||
|
|
||||||
This is the source code for early-access 3414.
|
This is the source code for early-access 3416.
|
||||||
|
|
||||||
## Legal Notice
|
## Legal Notice
|
||||||
|
|
||||||
|
|
|
@ -482,7 +482,7 @@ struct Values {
|
||||||
SwitchableSetting<s32, true> sound_index{1, 0, 2, "sound_index"};
|
SwitchableSetting<s32, true> sound_index{1, 0, 2, "sound_index"};
|
||||||
|
|
||||||
// Controls
|
// Controls
|
||||||
InputSetting<std::array<PlayerInput, 10>> players;
|
InputSetting<std::array<PlayerInput, 8>> players;
|
||||||
|
|
||||||
SwitchableSetting<bool> use_docked_mode{true, "use_docked_mode"};
|
SwitchableSetting<bool> use_docked_mode{true, "use_docked_mode"};
|
||||||
|
|
||||||
|
|
|
@ -82,7 +82,12 @@ Settings::ControllerType EmulatedController::MapNPadToSettingsType(NpadStyleInde
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmulatedController::ReloadFromSettings() {
|
void EmulatedController::ReloadFromSettings() {
|
||||||
const auto player_index = NpadIdTypeToIndex(npad_id_type);
|
if (npad_id_type == NpadIdType::Other) {
|
||||||
|
ReloadDebugPadFromSettings();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto player_index = NpadIdTypeToConfigIndex(npad_id_type);
|
||||||
const auto& player = Settings::values.players.GetValue()[player_index];
|
const auto& player = Settings::values.players.GetValue()[player_index];
|
||||||
|
|
||||||
for (std::size_t index = 0; index < player.buttons.size(); ++index) {
|
for (std::size_t index = 0; index < player.buttons.size(); ++index) {
|
||||||
|
@ -111,13 +116,21 @@ void EmulatedController::ReloadFromSettings() {
|
||||||
|
|
||||||
ring_params[0] = Common::ParamPackage(Settings::values.ringcon_analogs);
|
ring_params[0] = Common::ParamPackage(Settings::values.ringcon_analogs);
|
||||||
|
|
||||||
// Other or debug controller should always be a pro controller
|
|
||||||
if (npad_id_type != NpadIdType::Other) {
|
|
||||||
SetNpadStyleIndex(MapSettingsTypeToNPad(player.controller_type));
|
SetNpadStyleIndex(MapSettingsTypeToNPad(player.controller_type));
|
||||||
original_npad_type = npad_type;
|
original_npad_type = npad_type;
|
||||||
} else {
|
|
||||||
SetNpadStyleIndex(NpadStyleIndex::ProController);
|
// Player 1 shares config with handheld. Disable controller when handheld is selected
|
||||||
original_npad_type = npad_type;
|
if (npad_id_type == NpadIdType::Player1 && npad_type == NpadStyleIndex::Handheld) {
|
||||||
|
Disconnect();
|
||||||
|
ReloadInput();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handheld shares config with player 1. Disable controller when handheld isn't selected
|
||||||
|
if (npad_id_type == NpadIdType::Handheld && npad_type != NpadStyleIndex::Handheld) {
|
||||||
|
Disconnect();
|
||||||
|
ReloadInput();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Disconnect();
|
Disconnect();
|
||||||
|
@ -128,6 +141,33 @@ void EmulatedController::ReloadFromSettings() {
|
||||||
ReloadInput();
|
ReloadInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EmulatedController::ReloadDebugPadFromSettings() {
|
||||||
|
for (std::size_t index = 0; index < Settings::values.debug_pad_buttons.size(); ++index) {
|
||||||
|
button_params[index] = Common::ParamPackage(Settings::values.debug_pad_buttons[index]);
|
||||||
|
}
|
||||||
|
for (std::size_t index = 0; index < Settings::values.debug_pad_analogs.size(); ++index) {
|
||||||
|
stick_params[index] = Common::ParamPackage(Settings::values.debug_pad_analogs[index]);
|
||||||
|
}
|
||||||
|
for (std::size_t index = 0; index < motion_params.size(); ++index) {
|
||||||
|
motion_params[index] = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
controller.color_values = {};
|
||||||
|
controller.colors_state.fullkey = {};
|
||||||
|
controller.colors_state.left = {};
|
||||||
|
controller.colors_state.right = {};
|
||||||
|
ring_params[0] = {};
|
||||||
|
SetNpadStyleIndex(NpadStyleIndex::ProController);
|
||||||
|
original_npad_type = npad_type;
|
||||||
|
|
||||||
|
Disconnect();
|
||||||
|
if (Settings::values.debug_pad_enabled) {
|
||||||
|
Connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
ReloadInput();
|
||||||
|
}
|
||||||
|
|
||||||
void EmulatedController::LoadDevices() {
|
void EmulatedController::LoadDevices() {
|
||||||
// TODO(german77): Use more buttons to detect the correct device
|
// TODO(german77): Use more buttons to detect the correct device
|
||||||
const auto left_joycon = button_params[Settings::NativeButton::DRight];
|
const auto left_joycon = button_params[Settings::NativeButton::DRight];
|
||||||
|
@ -560,9 +600,23 @@ bool EmulatedController::IsConfiguring() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EmulatedController::SaveCurrentConfig() {
|
void EmulatedController::SaveCurrentConfig() {
|
||||||
const auto player_index = NpadIdTypeToIndex(npad_id_type);
|
// Other can't alter the config from here
|
||||||
|
if (npad_id_type == NpadIdType::Other) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto player_index = NpadIdTypeToConfigIndex(npad_id_type);
|
||||||
auto& player = Settings::values.players.GetValue()[player_index];
|
auto& player = Settings::values.players.GetValue()[player_index];
|
||||||
|
|
||||||
|
// Only save the connected status when handheld is connected
|
||||||
|
if (npad_id_type == NpadIdType::Handheld && npad_type == NpadStyleIndex::Handheld) {
|
||||||
player.connected = is_connected;
|
player.connected = is_connected;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (npad_id_type != NpadIdType::Handheld && npad_type != NpadStyleIndex::Handheld) {
|
||||||
|
player.connected = is_connected;
|
||||||
|
}
|
||||||
|
|
||||||
player.controller_type = MapNPadToSettingsType(npad_type);
|
player.controller_type = MapNPadToSettingsType(npad_type);
|
||||||
for (std::size_t index = 0; index < player.buttons.size(); ++index) {
|
for (std::size_t index = 0; index < player.buttons.size(); ++index) {
|
||||||
player.buttons[index] = button_params[index].Serialize();
|
player.buttons[index] = button_params[index].Serialize();
|
||||||
|
@ -1152,7 +1206,7 @@ bool EmulatedController::SetVibration(std::size_t device_index, VibrationValue v
|
||||||
if (!output_devices[device_index]) {
|
if (!output_devices[device_index]) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const auto player_index = NpadIdTypeToIndex(npad_id_type);
|
const auto player_index = NpadIdTypeToConfigIndex(npad_id_type);
|
||||||
const auto& player = Settings::values.players.GetValue()[player_index];
|
const auto& player = Settings::values.players.GetValue()[player_index];
|
||||||
const f32 strength = static_cast<f32>(player.vibration_strength) / 100.0f;
|
const f32 strength = static_cast<f32>(player.vibration_strength) / 100.0f;
|
||||||
|
|
||||||
|
@ -1178,7 +1232,7 @@ bool EmulatedController::SetVibration(std::size_t device_index, VibrationValue v
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EmulatedController::IsVibrationEnabled(std::size_t device_index) {
|
bool EmulatedController::IsVibrationEnabled(std::size_t device_index) {
|
||||||
const auto player_index = NpadIdTypeToIndex(npad_id_type);
|
const auto player_index = NpadIdTypeToConfigIndex(npad_id_type);
|
||||||
const auto& player = Settings::values.players.GetValue()[player_index];
|
const auto& player = Settings::values.players.GetValue()[player_index];
|
||||||
|
|
||||||
if (!player.vibration_enabled) {
|
if (!player.vibration_enabled) {
|
||||||
|
|
|
@ -250,9 +250,14 @@ public:
|
||||||
/// Reload all input devices
|
/// Reload all input devices
|
||||||
void ReloadInput();
|
void ReloadInput();
|
||||||
|
|
||||||
/// Overrides current mapped devices with the stored configuration and reloads all input devices
|
/// Overrides current mapped devices with the stored configuration and reloads all input
|
||||||
|
/// callbacks
|
||||||
void ReloadFromSettings();
|
void ReloadFromSettings();
|
||||||
|
|
||||||
|
/// Overrides current mapped debug pad with the stored configuration and reloads all input
|
||||||
|
/// callbacks
|
||||||
|
void ReloadDebugPadFromSettings();
|
||||||
|
|
||||||
/// Saves the current mapped configuration
|
/// Saves the current mapped configuration
|
||||||
void SaveCurrentConfig();
|
void SaveCurrentConfig();
|
||||||
|
|
||||||
|
|
|
@ -690,6 +690,32 @@ constexpr size_t NpadIdTypeToIndex(NpadIdType npad_id_type) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Converts a NpadIdType to a config array index.
|
||||||
|
constexpr size_t NpadIdTypeToConfigIndex(NpadIdType npad_id_type) {
|
||||||
|
switch (npad_id_type) {
|
||||||
|
case NpadIdType::Player1:
|
||||||
|
return 0;
|
||||||
|
case NpadIdType::Player2:
|
||||||
|
return 1;
|
||||||
|
case NpadIdType::Player3:
|
||||||
|
return 2;
|
||||||
|
case NpadIdType::Player4:
|
||||||
|
return 3;
|
||||||
|
case NpadIdType::Player5:
|
||||||
|
return 4;
|
||||||
|
case NpadIdType::Player6:
|
||||||
|
return 5;
|
||||||
|
case NpadIdType::Player7:
|
||||||
|
return 6;
|
||||||
|
case NpadIdType::Player8:
|
||||||
|
return 7;
|
||||||
|
case NpadIdType::Other:
|
||||||
|
case NpadIdType::Handheld:
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Converts an array index to a NpadIdType
|
/// Converts an array index to a NpadIdType
|
||||||
constexpr NpadIdType IndexToNpadIdType(size_t index) {
|
constexpr NpadIdType IndexToNpadIdType(size_t index) {
|
||||||
switch (index) {
|
switch (index) {
|
||||||
|
|
|
@ -77,6 +77,8 @@ public:
|
||||||
{141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+
|
{141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+
|
||||||
{142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+
|
{142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+
|
||||||
{150, nullptr, "CreateAuthorizationRequest"},
|
{150, nullptr, "CreateAuthorizationRequest"},
|
||||||
|
{160, nullptr, "RequiresUpdateNetworkServiceAccountIdTokenCache"},
|
||||||
|
{161, nullptr, "RequireReauthenticationOfNetworkServiceAccount"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -137,7 +139,10 @@ public:
|
||||||
{140, nullptr, "GetNetworkServiceLicenseCache"}, // 5.0.0+
|
{140, nullptr, "GetNetworkServiceLicenseCache"}, // 5.0.0+
|
||||||
{141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+
|
{141, nullptr, "RefreshNetworkServiceLicenseCacheAsync"}, // 5.0.0+
|
||||||
{142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+
|
{142, nullptr, "RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed"}, // 5.0.0+
|
||||||
|
{143, nullptr, "GetNetworkServiceLicenseCacheEx"},
|
||||||
{150, nullptr, "CreateAuthorizationRequest"},
|
{150, nullptr, "CreateAuthorizationRequest"},
|
||||||
|
{160, nullptr, "RequiresUpdateNetworkServiceAccountIdTokenCache"},
|
||||||
|
{161, nullptr, "RequireReauthenticationOfNetworkServiceAccount"},
|
||||||
{200, nullptr, "IsRegistered"},
|
{200, nullptr, "IsRegistered"},
|
||||||
{201, nullptr, "RegisterAsync"},
|
{201, nullptr, "RegisterAsync"},
|
||||||
{202, nullptr, "UnregisterAsync"},
|
{202, nullptr, "UnregisterAsync"},
|
||||||
|
@ -243,6 +248,7 @@ public:
|
||||||
{100, nullptr, "GetRequestWithTheme"},
|
{100, nullptr, "GetRequestWithTheme"},
|
||||||
{101, nullptr, "IsNetworkServiceAccountReplaced"},
|
{101, nullptr, "IsNetworkServiceAccountReplaced"},
|
||||||
{199, nullptr, "GetUrlForIntroductionOfExtraMembership"}, // 2.0.0 - 5.1.0
|
{199, nullptr, "GetUrlForIntroductionOfExtraMembership"}, // 2.0.0 - 5.1.0
|
||||||
|
{200, nullptr, "ApplyAsyncWithAuthorizedToken"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -648,9 +654,11 @@ public:
|
||||||
{0, nullptr, "EnsureAuthenticationTokenCacheAsync"},
|
{0, nullptr, "EnsureAuthenticationTokenCacheAsync"},
|
||||||
{1, nullptr, "LoadAuthenticationTokenCache"},
|
{1, nullptr, "LoadAuthenticationTokenCache"},
|
||||||
{2, nullptr, "InvalidateAuthenticationTokenCache"},
|
{2, nullptr, "InvalidateAuthenticationTokenCache"},
|
||||||
|
{3, nullptr, "IsDeviceAuthenticationTokenCacheAvailable"},
|
||||||
{10, nullptr, "EnsureEdgeTokenCacheAsync"},
|
{10, nullptr, "EnsureEdgeTokenCacheAsync"},
|
||||||
{11, nullptr, "LoadEdgeTokenCache"},
|
{11, nullptr, "LoadEdgeTokenCache"},
|
||||||
{12, nullptr, "InvalidateEdgeTokenCache"},
|
{12, nullptr, "InvalidateEdgeTokenCache"},
|
||||||
|
{13, nullptr, "IsEdgeTokenCacheAvailable"},
|
||||||
{20, nullptr, "EnsureApplicationAuthenticationCacheAsync"},
|
{20, nullptr, "EnsureApplicationAuthenticationCacheAsync"},
|
||||||
{21, nullptr, "LoadApplicationAuthenticationTokenCache"},
|
{21, nullptr, "LoadApplicationAuthenticationTokenCache"},
|
||||||
{22, nullptr, "LoadApplicationNetworkServiceClientConfigCache"},
|
{22, nullptr, "LoadApplicationNetworkServiceClientConfigCache"},
|
||||||
|
|
|
@ -55,6 +55,10 @@ ACC_SU::ACC_SU(std::shared_ptr<Module> module_, std::shared_ptr<ProfileManager>
|
||||||
{290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"},
|
{290, nullptr, "ProxyProcedureForGuestLoginWithNintendoAccount"},
|
||||||
{291, nullptr, "ProxyProcedureForFloatingRegistrationWithNintendoAccount"},
|
{291, nullptr, "ProxyProcedureForFloatingRegistrationWithNintendoAccount"},
|
||||||
{299, nullptr, "SuspendBackgroundDaemon"},
|
{299, nullptr, "SuspendBackgroundDaemon"},
|
||||||
|
{900, nullptr, "SetUserUnqualifiedForDebug"},
|
||||||
|
{901, nullptr, "UnsetUserUnqualifiedForDebug"},
|
||||||
|
{902, nullptr, "ListUsersUnqualifiedForDebug"},
|
||||||
|
{910, nullptr, "RefreshFirmwareSettingsForDebug"},
|
||||||
{997, nullptr, "DebugInvalidateTokenCacheForUser"},
|
{997, nullptr, "DebugInvalidateTokenCacheForUser"},
|
||||||
{998, nullptr, "DebugSetUserStateClose"},
|
{998, nullptr, "DebugSetUserStateClose"},
|
||||||
{999, nullptr, "DebugSetUserStateOpen"},
|
{999, nullptr, "DebugSetUserStateOpen"},
|
||||||
|
|
|
@ -227,6 +227,8 @@ IDebugFunctions::IDebugFunctions(Core::System& system_)
|
||||||
{30, nullptr, "RequestLaunchApplicationWithUserAndArgumentForDebug"},
|
{30, nullptr, "RequestLaunchApplicationWithUserAndArgumentForDebug"},
|
||||||
{31, nullptr, "RequestLaunchApplicationByApplicationLaunchInfoForDebug"},
|
{31, nullptr, "RequestLaunchApplicationByApplicationLaunchInfoForDebug"},
|
||||||
{40, nullptr, "GetAppletResourceUsageInfo"},
|
{40, nullptr, "GetAppletResourceUsageInfo"},
|
||||||
|
{50, nullptr, "AddSystemProgramIdAndAppletIdForDebug"},
|
||||||
|
{51, nullptr, "AddOperationConfirmedLibraryAppletIdForDebug"},
|
||||||
{100, nullptr, "SetCpuBoostModeForApplet"},
|
{100, nullptr, "SetCpuBoostModeForApplet"},
|
||||||
{101, nullptr, "CancelCpuBoostModeForApplet"},
|
{101, nullptr, "CancelCpuBoostModeForApplet"},
|
||||||
{110, nullptr, "PushToAppletBoundChannelForDebug"},
|
{110, nullptr, "PushToAppletBoundChannelForDebug"},
|
||||||
|
@ -238,6 +240,8 @@ IDebugFunctions::IDebugFunctions(Core::System& system_)
|
||||||
{131, nullptr, "FriendInvitationClearApplicationParameter"},
|
{131, nullptr, "FriendInvitationClearApplicationParameter"},
|
||||||
{132, nullptr, "FriendInvitationPushApplicationParameter"},
|
{132, nullptr, "FriendInvitationPushApplicationParameter"},
|
||||||
{140, nullptr, "RestrictPowerOperationForSecureLaunchModeForDebug"},
|
{140, nullptr, "RestrictPowerOperationForSecureLaunchModeForDebug"},
|
||||||
|
{200, nullptr, "CreateFloatingLibraryAppletAccepterForDebug"},
|
||||||
|
{300, nullptr, "TerminateAllRunningApplicationsForDebug"},
|
||||||
{900, nullptr, "GetGrcProcessLaunchedSystemEvent"},
|
{900, nullptr, "GetGrcProcessLaunchedSystemEvent"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
@ -1860,6 +1864,8 @@ IHomeMenuFunctions::IHomeMenuFunctions(Core::System& system_)
|
||||||
{31, nullptr, "GetWriterLockAccessorEx"},
|
{31, nullptr, "GetWriterLockAccessorEx"},
|
||||||
{40, nullptr, "IsSleepEnabled"},
|
{40, nullptr, "IsSleepEnabled"},
|
||||||
{41, nullptr, "IsRebootEnabled"},
|
{41, nullptr, "IsRebootEnabled"},
|
||||||
|
{50, nullptr, "LaunchSystemApplet"},
|
||||||
|
{51, nullptr, "LaunchStarter"},
|
||||||
{100, nullptr, "PopRequestLaunchApplicationForDebug"},
|
{100, nullptr, "PopRequestLaunchApplicationForDebug"},
|
||||||
{110, nullptr, "IsForceTerminateApplicationDisabledForDebug"},
|
{110, nullptr, "IsForceTerminateApplicationDisabledForDebug"},
|
||||||
{200, nullptr, "LaunchDevMenu"},
|
{200, nullptr, "LaunchDevMenu"},
|
||||||
|
|
|
@ -130,6 +130,9 @@ AOC_U::AOC_U(Core::System& system_)
|
||||||
{101, &AOC_U::CreatePermanentEcPurchasedEventManager, "CreatePermanentEcPurchasedEventManager"},
|
{101, &AOC_U::CreatePermanentEcPurchasedEventManager, "CreatePermanentEcPurchasedEventManager"},
|
||||||
{110, nullptr, "CreateContentsServiceManager"},
|
{110, nullptr, "CreateContentsServiceManager"},
|
||||||
{200, nullptr, "SetRequiredAddOnContentsOnContentsAvailabilityTransition"},
|
{200, nullptr, "SetRequiredAddOnContentsOnContentsAvailabilityTransition"},
|
||||||
|
{300, nullptr, "SetupHostAddOnContent"},
|
||||||
|
{301, nullptr, "GetRegisteredAddOnContentPath"},
|
||||||
|
{302, nullptr, "UpdateCachedList"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
|
|
@ -362,6 +362,8 @@ HwOpus::HwOpus(Core::System& system_) : ServiceFramework{system_, "hwopus"} {
|
||||||
{5, &HwOpus::GetWorkBufferSizeEx, "GetWorkBufferSizeEx"},
|
{5, &HwOpus::GetWorkBufferSizeEx, "GetWorkBufferSizeEx"},
|
||||||
{6, nullptr, "OpenHardwareOpusDecoderForMultiStreamEx"},
|
{6, nullptr, "OpenHardwareOpusDecoderForMultiStreamEx"},
|
||||||
{7, &HwOpus::GetWorkBufferSizeForMultiStreamEx, "GetWorkBufferSizeForMultiStreamEx"},
|
{7, &HwOpus::GetWorkBufferSizeForMultiStreamEx, "GetWorkBufferSizeForMultiStreamEx"},
|
||||||
|
{8, nullptr, "GetWorkBufferSizeExEx"},
|
||||||
|
{9, nullptr, "GetWorkBufferSizeForMultiStreamExEx"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@ IAppletResource::IAppletResource(Core::System& system_,
|
||||||
MakeControllerWithServiceContext<Controller_NPad>(HidController::NPad, shared_memory);
|
MakeControllerWithServiceContext<Controller_NPad>(HidController::NPad, shared_memory);
|
||||||
MakeController<Controller_Gesture>(HidController::Gesture, shared_memory);
|
MakeController<Controller_Gesture>(HidController::Gesture, shared_memory);
|
||||||
MakeController<Controller_ConsoleSixAxis>(HidController::ConsoleSixAxisSensor, shared_memory);
|
MakeController<Controller_ConsoleSixAxis>(HidController::ConsoleSixAxisSensor, shared_memory);
|
||||||
|
MakeController<Controller_Stubbed>(HidController::DebugMouse, shared_memory);
|
||||||
MakeControllerWithServiceContext<Controller_Palma>(HidController::Palma, shared_memory);
|
MakeControllerWithServiceContext<Controller_Palma>(HidController::Palma, shared_memory);
|
||||||
|
|
||||||
// Homebrew doesn't try to activate some controllers, so we activate them by default
|
// Homebrew doesn't try to activate some controllers, so we activate them by default
|
||||||
|
@ -75,6 +76,7 @@ IAppletResource::IAppletResource(Core::System& system_,
|
||||||
GetController<Controller_Stubbed>(HidController::CaptureButton).SetCommonHeaderOffset(0x5000);
|
GetController<Controller_Stubbed>(HidController::CaptureButton).SetCommonHeaderOffset(0x5000);
|
||||||
GetController<Controller_Stubbed>(HidController::InputDetector).SetCommonHeaderOffset(0x5200);
|
GetController<Controller_Stubbed>(HidController::InputDetector).SetCommonHeaderOffset(0x5200);
|
||||||
GetController<Controller_Stubbed>(HidController::UniquePad).SetCommonHeaderOffset(0x5A00);
|
GetController<Controller_Stubbed>(HidController::UniquePad).SetCommonHeaderOffset(0x5A00);
|
||||||
|
GetController<Controller_Stubbed>(HidController::DebugMouse).SetCommonHeaderOffset(0x3DC00);
|
||||||
|
|
||||||
// Register update callbacks
|
// Register update callbacks
|
||||||
npad_update_event = Core::Timing::CreateEvent(
|
npad_update_event = Core::Timing::CreateEvent(
|
||||||
|
@ -237,6 +239,7 @@ Hid::Hid(Core::System& system_)
|
||||||
{1, &Hid::ActivateDebugPad, "ActivateDebugPad"},
|
{1, &Hid::ActivateDebugPad, "ActivateDebugPad"},
|
||||||
{11, &Hid::ActivateTouchScreen, "ActivateTouchScreen"},
|
{11, &Hid::ActivateTouchScreen, "ActivateTouchScreen"},
|
||||||
{21, &Hid::ActivateMouse, "ActivateMouse"},
|
{21, &Hid::ActivateMouse, "ActivateMouse"},
|
||||||
|
{26, nullptr, "ActivateDebugMouse"},
|
||||||
{31, &Hid::ActivateKeyboard, "ActivateKeyboard"},
|
{31, &Hid::ActivateKeyboard, "ActivateKeyboard"},
|
||||||
{32, &Hid::SendKeyboardLockKeyEvent, "SendKeyboardLockKeyEvent"},
|
{32, &Hid::SendKeyboardLockKeyEvent, "SendKeyboardLockKeyEvent"},
|
||||||
{40, nullptr, "AcquireXpadIdEventHandle"},
|
{40, nullptr, "AcquireXpadIdEventHandle"},
|
||||||
|
@ -2381,6 +2384,8 @@ public:
|
||||||
{20, nullptr, "DeactivateMouse"},
|
{20, nullptr, "DeactivateMouse"},
|
||||||
{21, nullptr, "SetMouseAutoPilotState"},
|
{21, nullptr, "SetMouseAutoPilotState"},
|
||||||
{22, nullptr, "UnsetMouseAutoPilotState"},
|
{22, nullptr, "UnsetMouseAutoPilotState"},
|
||||||
|
{25, nullptr, "SetDebugMouseAutoPilotState"},
|
||||||
|
{26, nullptr, "UnsetDebugMouseAutoPilotState"},
|
||||||
{30, nullptr, "DeactivateKeyboard"},
|
{30, nullptr, "DeactivateKeyboard"},
|
||||||
{31, nullptr, "SetKeyboardAutoPilotState"},
|
{31, nullptr, "SetKeyboardAutoPilotState"},
|
||||||
{32, nullptr, "UnsetKeyboardAutoPilotState"},
|
{32, nullptr, "UnsetKeyboardAutoPilotState"},
|
||||||
|
@ -2496,6 +2501,7 @@ public:
|
||||||
{2000, nullptr, "DeactivateDigitizer"},
|
{2000, nullptr, "DeactivateDigitizer"},
|
||||||
{2001, nullptr, "SetDigitizerAutoPilotState"},
|
{2001, nullptr, "SetDigitizerAutoPilotState"},
|
||||||
{2002, nullptr, "UnsetDigitizerAutoPilotState"},
|
{2002, nullptr, "UnsetDigitizerAutoPilotState"},
|
||||||
|
{2002, nullptr, "ReloadFirmwareDebugSettings"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ enum class HidController : std::size_t {
|
||||||
NPad,
|
NPad,
|
||||||
Gesture,
|
Gesture,
|
||||||
ConsoleSixAxisSensor,
|
ConsoleSixAxisSensor,
|
||||||
|
DebugMouse,
|
||||||
Palma,
|
Palma,
|
||||||
|
|
||||||
MaxControllers,
|
MaxControllers,
|
||||||
|
|
|
@ -91,7 +91,7 @@ std::optional<std::size_t> HidBus::GetDeviceIndexFromHandle(BusHandle handle) co
|
||||||
if (handle.abstracted_pad_id == device_handle.abstracted_pad_id &&
|
if (handle.abstracted_pad_id == device_handle.abstracted_pad_id &&
|
||||||
handle.internal_index == device_handle.internal_index &&
|
handle.internal_index == device_handle.internal_index &&
|
||||||
handle.player_number == device_handle.player_number &&
|
handle.player_number == device_handle.player_number &&
|
||||||
handle.bus_type == device_handle.bus_type &&
|
handle.bus_type_id == device_handle.bus_type_id &&
|
||||||
handle.is_valid == device_handle.is_valid) {
|
handle.is_valid == device_handle.is_valid) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ void HidBus::GetBusHandle(Kernel::HLERequestContext& ctx) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (static_cast<Core::HID::NpadIdType>(handle.player_number) == parameters.npad_id &&
|
if (static_cast<Core::HID::NpadIdType>(handle.player_number) == parameters.npad_id &&
|
||||||
handle.bus_type == parameters.bus_type) {
|
handle.bus_type_id == static_cast<u8>(parameters.bus_type)) {
|
||||||
is_handle_found = true;
|
is_handle_found = true;
|
||||||
handle_index = i;
|
handle_index = i;
|
||||||
break;
|
break;
|
||||||
|
@ -140,7 +140,7 @@ void HidBus::GetBusHandle(Kernel::HLERequestContext& ctx) {
|
||||||
.abstracted_pad_id = static_cast<u8>(i),
|
.abstracted_pad_id = static_cast<u8>(i),
|
||||||
.internal_index = static_cast<u8>(i),
|
.internal_index = static_cast<u8>(i),
|
||||||
.player_number = static_cast<u8>(parameters.npad_id),
|
.player_number = static_cast<u8>(parameters.npad_id),
|
||||||
.bus_type = parameters.bus_type,
|
.bus_type_id = static_cast<u8>(parameters.bus_type),
|
||||||
.is_valid = true,
|
.is_valid = true,
|
||||||
};
|
};
|
||||||
handle_index = i;
|
handle_index = i;
|
||||||
|
@ -172,7 +172,7 @@ void HidBus::IsExternalDeviceConnected(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_INFO(Service_HID,
|
LOG_INFO(Service_HID,
|
||||||
"Called, abstracted_pad_id={}, bus_type={}, internal_index={}, "
|
"Called, abstracted_pad_id={}, bus_type={}, internal_index={}, "
|
||||||
"player_number={}, is_valid={}",
|
"player_number={}, is_valid={}",
|
||||||
bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index,
|
bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index,
|
||||||
bus_handle_.player_number, bus_handle_.is_valid);
|
bus_handle_.player_number, bus_handle_.is_valid);
|
||||||
|
|
||||||
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
||||||
|
@ -201,7 +201,7 @@ void HidBus::Initialize(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_INFO(Service_HID,
|
LOG_INFO(Service_HID,
|
||||||
"called, abstracted_pad_id={} bus_type={} internal_index={} "
|
"called, abstracted_pad_id={} bus_type={} internal_index={} "
|
||||||
"player_number={} is_valid={}, applet_resource_user_id={}",
|
"player_number={} is_valid={}, applet_resource_user_id={}",
|
||||||
bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index,
|
bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index,
|
||||||
bus_handle_.player_number, bus_handle_.is_valid, applet_resource_user_id);
|
bus_handle_.player_number, bus_handle_.is_valid, applet_resource_user_id);
|
||||||
|
|
||||||
is_hidbus_enabled = true;
|
is_hidbus_enabled = true;
|
||||||
|
@ -253,7 +253,7 @@ void HidBus::Finalize(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_INFO(Service_HID,
|
LOG_INFO(Service_HID,
|
||||||
"called, abstracted_pad_id={}, bus_type={}, internal_index={}, "
|
"called, abstracted_pad_id={}, bus_type={}, internal_index={}, "
|
||||||
"player_number={}, is_valid={}, applet_resource_user_id={}",
|
"player_number={}, is_valid={}, applet_resource_user_id={}",
|
||||||
bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index,
|
bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index,
|
||||||
bus_handle_.player_number, bus_handle_.is_valid, applet_resource_user_id);
|
bus_handle_.player_number, bus_handle_.is_valid, applet_resource_user_id);
|
||||||
|
|
||||||
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
||||||
|
@ -301,7 +301,7 @@ void HidBus::EnableExternalDevice(Kernel::HLERequestContext& ctx) {
|
||||||
"called, enable={}, abstracted_pad_id={}, bus_type={}, internal_index={}, "
|
"called, enable={}, abstracted_pad_id={}, bus_type={}, internal_index={}, "
|
||||||
"player_number={}, is_valid={}, inval={}, applet_resource_user_id{}",
|
"player_number={}, is_valid={}, inval={}, applet_resource_user_id{}",
|
||||||
parameters.enable, parameters.bus_handle.abstracted_pad_id,
|
parameters.enable, parameters.bus_handle.abstracted_pad_id,
|
||||||
parameters.bus_handle.bus_type, parameters.bus_handle.internal_index,
|
parameters.bus_handle.bus_type_id, parameters.bus_handle.internal_index,
|
||||||
parameters.bus_handle.player_number, parameters.bus_handle.is_valid, parameters.inval,
|
parameters.bus_handle.player_number, parameters.bus_handle.is_valid, parameters.inval,
|
||||||
parameters.applet_resource_user_id);
|
parameters.applet_resource_user_id);
|
||||||
|
|
||||||
|
@ -329,7 +329,7 @@ void HidBus::GetExternalDeviceId(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_HID,
|
LOG_DEBUG(Service_HID,
|
||||||
"called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, "
|
"called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, "
|
||||||
"is_valid={}",
|
"is_valid={}",
|
||||||
bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index,
|
bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index,
|
||||||
bus_handle_.player_number, bus_handle_.is_valid);
|
bus_handle_.player_number, bus_handle_.is_valid);
|
||||||
|
|
||||||
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
||||||
|
@ -357,7 +357,7 @@ void HidBus::SendCommandAsync(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_HID,
|
LOG_DEBUG(Service_HID,
|
||||||
"called, data_size={}, abstracted_pad_id={}, bus_type={}, internal_index={}, "
|
"called, data_size={}, abstracted_pad_id={}, bus_type={}, internal_index={}, "
|
||||||
"player_number={}, is_valid={}",
|
"player_number={}, is_valid={}",
|
||||||
data.size(), bus_handle_.abstracted_pad_id, bus_handle_.bus_type,
|
data.size(), bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id,
|
||||||
bus_handle_.internal_index, bus_handle_.player_number, bus_handle_.is_valid);
|
bus_handle_.internal_index, bus_handle_.player_number, bus_handle_.is_valid);
|
||||||
|
|
||||||
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
||||||
|
@ -384,7 +384,7 @@ void HidBus::GetSendCommandAsynceResult(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_DEBUG(Service_HID,
|
LOG_DEBUG(Service_HID,
|
||||||
"called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, "
|
"called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, "
|
||||||
"is_valid={}",
|
"is_valid={}",
|
||||||
bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index,
|
bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index,
|
||||||
bus_handle_.player_number, bus_handle_.is_valid);
|
bus_handle_.player_number, bus_handle_.is_valid);
|
||||||
|
|
||||||
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
||||||
|
@ -413,7 +413,7 @@ void HidBus::SetEventForSendCommandAsycResult(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_INFO(Service_HID,
|
LOG_INFO(Service_HID,
|
||||||
"called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, "
|
"called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, "
|
||||||
"is_valid={}",
|
"is_valid={}",
|
||||||
bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index,
|
bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index,
|
||||||
bus_handle_.player_number, bus_handle_.is_valid);
|
bus_handle_.player_number, bus_handle_.is_valid);
|
||||||
|
|
||||||
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
||||||
|
@ -464,7 +464,7 @@ void HidBus::EnableJoyPollingReceiveMode(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_INFO(Service_HID,
|
LOG_INFO(Service_HID,
|
||||||
"called, t_mem_handle=0x{:08X}, polling_mode={}, abstracted_pad_id={}, bus_type={}, "
|
"called, t_mem_handle=0x{:08X}, polling_mode={}, abstracted_pad_id={}, bus_type={}, "
|
||||||
"internal_index={}, player_number={}, is_valid={}",
|
"internal_index={}, player_number={}, is_valid={}",
|
||||||
t_mem_handle, polling_mode_, bus_handle_.abstracted_pad_id, bus_handle_.bus_type,
|
t_mem_handle, polling_mode_, bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id,
|
||||||
bus_handle_.internal_index, bus_handle_.player_number, bus_handle_.is_valid);
|
bus_handle_.internal_index, bus_handle_.player_number, bus_handle_.is_valid);
|
||||||
|
|
||||||
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
||||||
|
@ -492,7 +492,7 @@ void HidBus::DisableJoyPollingReceiveMode(Kernel::HLERequestContext& ctx) {
|
||||||
LOG_INFO(Service_HID,
|
LOG_INFO(Service_HID,
|
||||||
"called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, "
|
"called, abstracted_pad_id={}, bus_type={}, internal_index={}, player_number={}, "
|
||||||
"is_valid={}",
|
"is_valid={}",
|
||||||
bus_handle_.abstracted_pad_id, bus_handle_.bus_type, bus_handle_.internal_index,
|
bus_handle_.abstracted_pad_id, bus_handle_.bus_type_id, bus_handle_.internal_index,
|
||||||
bus_handle_.player_number, bus_handle_.is_valid);
|
bus_handle_.player_number, bus_handle_.is_valid);
|
||||||
|
|
||||||
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
const auto device_index = GetDeviceIndexFromHandle(bus_handle_);
|
||||||
|
|
|
@ -41,7 +41,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
// This is nn::hidbus::BusType
|
// This is nn::hidbus::BusType
|
||||||
enum class BusType : u8 {
|
enum class BusType : u32 {
|
||||||
LeftJoyRail,
|
LeftJoyRail,
|
||||||
RightJoyRail,
|
RightJoyRail,
|
||||||
InternalBus, // Lark microphone
|
InternalBus, // Lark microphone
|
||||||
|
@ -54,7 +54,7 @@ private:
|
||||||
u32 abstracted_pad_id;
|
u32 abstracted_pad_id;
|
||||||
u8 internal_index;
|
u8 internal_index;
|
||||||
u8 player_number;
|
u8 player_number;
|
||||||
BusType bus_type;
|
u8 bus_type_id;
|
||||||
bool is_valid;
|
bool is_valid;
|
||||||
};
|
};
|
||||||
static_assert(sizeof(BusHandle) == 0x8, "BusHandle is an invalid size");
|
static_assert(sizeof(BusHandle) == 0x8, "BusHandle is an invalid size");
|
||||||
|
|
|
@ -124,6 +124,7 @@ public:
|
||||||
{12, nullptr, "InactivateContentMetaDatabase"},
|
{12, nullptr, "InactivateContentMetaDatabase"},
|
||||||
{13, nullptr, "InvalidateRightsIdCache"},
|
{13, nullptr, "InvalidateRightsIdCache"},
|
||||||
{14, nullptr, "GetMemoryReport"},
|
{14, nullptr, "GetMemoryReport"},
|
||||||
|
{15, nullptr, "ActivateFsContentStorage"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,8 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_
|
||||||
{606, nullptr, "GetContentMetaStorage"},
|
{606, nullptr, "GetContentMetaStorage"},
|
||||||
{607, nullptr, "ListAvailableAddOnContent"},
|
{607, nullptr, "ListAvailableAddOnContent"},
|
||||||
{609, nullptr, "ListAvailabilityAssuredAddOnContent"},
|
{609, nullptr, "ListAvailabilityAssuredAddOnContent"},
|
||||||
|
{610, nullptr, "GetInstalledContentMetaStorage"},
|
||||||
|
{611, nullptr, "PrepareAddOnContent"},
|
||||||
{700, nullptr, "PushDownloadTaskList"},
|
{700, nullptr, "PushDownloadTaskList"},
|
||||||
{701, nullptr, "ClearTaskStatusList"},
|
{701, nullptr, "ClearTaskStatusList"},
|
||||||
{702, nullptr, "RequestDownloadTaskList"},
|
{702, nullptr, "RequestDownloadTaskList"},
|
||||||
|
@ -229,6 +231,7 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_
|
||||||
{1900, nullptr, "IsActiveAccount"},
|
{1900, nullptr, "IsActiveAccount"},
|
||||||
{1901, nullptr, "RequestDownloadApplicationPrepurchasedRights"},
|
{1901, nullptr, "RequestDownloadApplicationPrepurchasedRights"},
|
||||||
{1902, nullptr, "GetApplicationTicketInfo"},
|
{1902, nullptr, "GetApplicationTicketInfo"},
|
||||||
|
{1903, nullptr, "RequestDownloadApplicationPrepurchasedRightsForAccount"},
|
||||||
{2000, nullptr, "GetSystemDeliveryInfo"},
|
{2000, nullptr, "GetSystemDeliveryInfo"},
|
||||||
{2001, nullptr, "SelectLatestSystemDeliveryInfo"},
|
{2001, nullptr, "SelectLatestSystemDeliveryInfo"},
|
||||||
{2002, nullptr, "VerifyDeliveryProtocolVersion"},
|
{2002, nullptr, "VerifyDeliveryProtocolVersion"},
|
||||||
|
@ -277,8 +280,11 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_
|
||||||
{2352, nullptr, "RequestResolveNoDownloadRightsError"},
|
{2352, nullptr, "RequestResolveNoDownloadRightsError"},
|
||||||
{2353, nullptr, "GetApplicationDownloadTaskInfo"},
|
{2353, nullptr, "GetApplicationDownloadTaskInfo"},
|
||||||
{2354, nullptr, "PrioritizeApplicationBackgroundTask"},
|
{2354, nullptr, "PrioritizeApplicationBackgroundTask"},
|
||||||
{2355, nullptr, "Unknown2355"},
|
{2355, nullptr, "PreferStorageEfficientUpdate"},
|
||||||
{2356, nullptr, "Unknown2356"},
|
{2356, nullptr, "RequestStorageEfficientUpdatePreferable"},
|
||||||
|
{2357, nullptr, "EnableMultiCoreDownload"},
|
||||||
|
{2358, nullptr, "DisableMultiCoreDownload"},
|
||||||
|
{2359, nullptr, "IsMultiCoreDownloadEnabled"},
|
||||||
{2400, nullptr, "GetPromotionInfo"},
|
{2400, nullptr, "GetPromotionInfo"},
|
||||||
{2401, nullptr, "CountPromotionInfo"},
|
{2401, nullptr, "CountPromotionInfo"},
|
||||||
{2402, nullptr, "ListPromotionInfo"},
|
{2402, nullptr, "ListPromotionInfo"},
|
||||||
|
@ -296,6 +302,7 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_
|
||||||
{2519, nullptr, "IsQualificationTransitionSupported"},
|
{2519, nullptr, "IsQualificationTransitionSupported"},
|
||||||
{2520, nullptr, "IsQualificationTransitionSupportedByProcessId"},
|
{2520, nullptr, "IsQualificationTransitionSupportedByProcessId"},
|
||||||
{2521, nullptr, "GetRightsUserChangedEvent"},
|
{2521, nullptr, "GetRightsUserChangedEvent"},
|
||||||
|
{2522, nullptr, "IsRomRedirectionAvailable"},
|
||||||
{2800, nullptr, "GetApplicationIdOfPreomia"},
|
{2800, nullptr, "GetApplicationIdOfPreomia"},
|
||||||
{3000, nullptr, "RegisterDeviceLockKey"},
|
{3000, nullptr, "RegisterDeviceLockKey"},
|
||||||
{3001, nullptr, "UnregisterDeviceLockKey"},
|
{3001, nullptr, "UnregisterDeviceLockKey"},
|
||||||
|
@ -312,6 +319,7 @@ IApplicationManagerInterface::IApplicationManagerInterface(Core::System& system_
|
||||||
{3012, nullptr, "IsApplicationTitleHidden"},
|
{3012, nullptr, "IsApplicationTitleHidden"},
|
||||||
{3013, nullptr, "IsGameCardEnabled"},
|
{3013, nullptr, "IsGameCardEnabled"},
|
||||||
{3014, nullptr, "IsLocalContentShareEnabled"},
|
{3014, nullptr, "IsLocalContentShareEnabled"},
|
||||||
|
{3050, nullptr, "ListAssignELicenseTaskResult"},
|
||||||
{9999, nullptr, "GetApplicationCertificate"},
|
{9999, nullptr, "GetApplicationCertificate"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
|
@ -953,6 +953,9 @@ BSDCFG::BSDCFG(Core::System& system_) : ServiceFramework{system_, "bsdcfg"} {
|
||||||
{10, nullptr, "ClearArpEntries"},
|
{10, nullptr, "ClearArpEntries"},
|
||||||
{11, nullptr, "ClearArpEntries2"},
|
{11, nullptr, "ClearArpEntries2"},
|
||||||
{12, nullptr, "PrintArpEntries"},
|
{12, nullptr, "PrintArpEntries"},
|
||||||
|
{13, nullptr, "Unknown13"},
|
||||||
|
{14, nullptr, "Unknown14"},
|
||||||
|
{15, nullptr, "Unknown15"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,14 @@ public:
|
||||||
{25, nullptr, "GetCipherInfo"},
|
{25, nullptr, "GetCipherInfo"},
|
||||||
{26, nullptr, "SetNextAlpnProto"},
|
{26, nullptr, "SetNextAlpnProto"},
|
||||||
{27, nullptr, "GetNextAlpnProto"},
|
{27, nullptr, "GetNextAlpnProto"},
|
||||||
|
{28, nullptr, "SetDtlsSocketDescriptor"},
|
||||||
|
{29, nullptr, "GetDtlsHandshakeTimeout"},
|
||||||
|
{30, nullptr, "SetPrivateOption"},
|
||||||
|
{31, nullptr, "SetSrtpCiphers"},
|
||||||
|
{32, nullptr, "GetSrtpCipher"},
|
||||||
|
{33, nullptr, "ExportKeyingMaterial"},
|
||||||
|
{34, nullptr, "SetIoTimeout"},
|
||||||
|
{35, nullptr, "GetIoTimeout"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
|
@ -69,6 +77,8 @@ public:
|
||||||
{9, nullptr, "AddPolicyOid"},
|
{9, nullptr, "AddPolicyOid"},
|
||||||
{10, nullptr, "ImportCrl"},
|
{10, nullptr, "ImportCrl"},
|
||||||
{11, nullptr, "RemoveCrl"},
|
{11, nullptr, "RemoveCrl"},
|
||||||
|
{12, nullptr, "ImportClientCertKeyPki"},
|
||||||
|
{13, nullptr, "GeneratePrivateKeyAndCert"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -249,6 +249,9 @@ public:
|
||||||
{2053, nullptr, "DestroyIndirectProducerEndPoint"},
|
{2053, nullptr, "DestroyIndirectProducerEndPoint"},
|
||||||
{2054, nullptr, "CreateIndirectConsumerEndPoint"},
|
{2054, nullptr, "CreateIndirectConsumerEndPoint"},
|
||||||
{2055, nullptr, "DestroyIndirectConsumerEndPoint"},
|
{2055, nullptr, "DestroyIndirectConsumerEndPoint"},
|
||||||
|
{2060, nullptr, "CreateWatermarkCompositor"},
|
||||||
|
{2062, nullptr, "SetWatermarkText"},
|
||||||
|
{2063, nullptr, "SetWatermarkLayerStacks"},
|
||||||
{2300, nullptr, "AcquireLayerTexturePresentingEvent"},
|
{2300, nullptr, "AcquireLayerTexturePresentingEvent"},
|
||||||
{2301, nullptr, "ReleaseLayerTexturePresentingEvent"},
|
{2301, nullptr, "ReleaseLayerTexturePresentingEvent"},
|
||||||
{2302, nullptr, "GetDisplayHotplugEvent"},
|
{2302, nullptr, "GetDisplayHotplugEvent"},
|
||||||
|
@ -279,6 +282,8 @@ public:
|
||||||
{6011, nullptr, "EnableLayerAutoClearTransitionBuffer"},
|
{6011, nullptr, "EnableLayerAutoClearTransitionBuffer"},
|
||||||
{6012, nullptr, "DisableLayerAutoClearTransitionBuffer"},
|
{6012, nullptr, "DisableLayerAutoClearTransitionBuffer"},
|
||||||
{6013, nullptr, "SetLayerOpacity"},
|
{6013, nullptr, "SetLayerOpacity"},
|
||||||
|
{6014, nullptr, "AttachLayerWatermarkCompositor"},
|
||||||
|
{6015, nullptr, "DetachLayerWatermarkCompositor"},
|
||||||
{7000, nullptr, "SetContentVisibility"},
|
{7000, nullptr, "SetContentVisibility"},
|
||||||
{8000, nullptr, "SetConductorLayer"},
|
{8000, nullptr, "SetConductorLayer"},
|
||||||
{8001, nullptr, "SetTimestampTracking"},
|
{8001, nullptr, "SetTimestampTracking"},
|
||||||
|
|
|
@ -14,6 +14,10 @@ VI_M::VI_M(Core::System& system_, NVFlinger::NVFlinger& nv_flinger_,
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{2, &VI_M::GetDisplayService, "GetDisplayService"},
|
{2, &VI_M::GetDisplayService, "GetDisplayService"},
|
||||||
{3, nullptr, "GetDisplayServiceWithProxyNameExchange"},
|
{3, nullptr, "GetDisplayServiceWithProxyNameExchange"},
|
||||||
|
{100, nullptr, "PrepareFatal"},
|
||||||
|
{101, nullptr, "ShowFatal"},
|
||||||
|
{102, nullptr, "DrawFatalRectangle"},
|
||||||
|
{103, nullptr, "DrawFatalText32"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
|
@ -212,16 +212,11 @@ void Config::ReadPlayerValue(std::size_t player_index) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player_prefix.isEmpty() && Settings::IsConfiguringGlobal()) {
|
if (player_prefix.isEmpty() && Settings::IsConfiguringGlobal()) {
|
||||||
const auto controller = static_cast<Settings::ControllerType>(
|
player.controller_type = static_cast<Settings::ControllerType>(
|
||||||
qt_config
|
qt_config
|
||||||
->value(QStringLiteral("%1type").arg(player_prefix),
|
->value(QStringLiteral("%1type").arg(player_prefix),
|
||||||
static_cast<u8>(Settings::ControllerType::ProController))
|
static_cast<u8>(Settings::ControllerType::ProController))
|
||||||
.toUInt());
|
.toUInt());
|
||||||
|
|
||||||
if (controller == Settings::ControllerType::LeftJoycon ||
|
|
||||||
controller == Settings::ControllerType::RightJoycon) {
|
|
||||||
player.controller_type = controller;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
player.connected =
|
player.connected =
|
||||||
ReadSetting(QStringLiteral("%1connected").arg(player_prefix), player_index == 0)
|
ReadSetting(QStringLiteral("%1connected").arg(player_prefix), player_index == 0)
|
||||||
|
@ -1313,9 +1308,7 @@ void Config::SaveRendererValues() {
|
||||||
static_cast<u32>(Settings::values.renderer_backend.GetValue(global)),
|
static_cast<u32>(Settings::values.renderer_backend.GetValue(global)),
|
||||||
static_cast<u32>(Settings::values.renderer_backend.GetDefault()),
|
static_cast<u32>(Settings::values.renderer_backend.GetDefault()),
|
||||||
Settings::values.renderer_backend.UsingGlobal());
|
Settings::values.renderer_backend.UsingGlobal());
|
||||||
WriteSetting(QString::fromStdString(Settings::values.renderer_force_max_clock.GetLabel()),
|
WriteGlobalSetting(Settings::values.renderer_force_max_clock);
|
||||||
static_cast<u32>(Settings::values.renderer_force_max_clock.GetValue(global)),
|
|
||||||
static_cast<u32>(Settings::values.renderer_force_max_clock.GetDefault()));
|
|
||||||
WriteGlobalSetting(Settings::values.vulkan_device);
|
WriteGlobalSetting(Settings::values.vulkan_device);
|
||||||
WriteSetting(QString::fromStdString(Settings::values.fullscreen_mode.GetLabel()),
|
WriteSetting(QString::fromStdString(Settings::values.fullscreen_mode.GetLabel()),
|
||||||
static_cast<u32>(Settings::values.fullscreen_mode.GetValue(global)),
|
static_cast<u32>(Settings::values.fullscreen_mode.GetValue(global)),
|
||||||
|
|
|
@ -47,8 +47,6 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
|
||||||
&Settings::values.max_anisotropy);
|
&Settings::values.max_anisotropy);
|
||||||
ConfigurationShared::SetHighlight(ui->label_gpu_accuracy,
|
ConfigurationShared::SetHighlight(ui->label_gpu_accuracy,
|
||||||
!Settings::values.gpu_accuracy.UsingGlobal());
|
!Settings::values.gpu_accuracy.UsingGlobal());
|
||||||
ConfigurationShared::SetHighlight(ui->renderer_force_max_clock,
|
|
||||||
!Settings::values.renderer_force_max_clock.UsingGlobal());
|
|
||||||
ConfigurationShared::SetHighlight(ui->af_label,
|
ConfigurationShared::SetHighlight(ui->af_label,
|
||||||
!Settings::values.max_anisotropy.UsingGlobal());
|
!Settings::values.max_anisotropy.UsingGlobal());
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ void ConfigureInputPerGame::ApplyConfiguration() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigureInputPerGame::LoadConfiguration() {
|
void ConfigureInputPerGame::LoadConfiguration() {
|
||||||
static constexpr size_t HANDHELD_INDEX = 8;
|
static constexpr size_t HANDHELD_INDEX = 0;
|
||||||
|
|
||||||
auto& hid_core = system.HIDCore();
|
auto& hid_core = system.HIDCore();
|
||||||
for (size_t player_index = 0; player_index < profile_comboboxes.size(); ++player_index) {
|
for (size_t player_index = 0; player_index < profile_comboboxes.size(); ++player_index) {
|
||||||
|
@ -69,9 +69,6 @@ void ConfigureInputPerGame::LoadConfiguration() {
|
||||||
const auto selection_index = player_combobox->currentIndex();
|
const auto selection_index = player_combobox->currentIndex();
|
||||||
if (selection_index == 0) {
|
if (selection_index == 0) {
|
||||||
Settings::values.players.GetValue()[player_index].profile_name = "";
|
Settings::values.players.GetValue()[player_index].profile_name = "";
|
||||||
if (player_index == 0) {
|
|
||||||
Settings::values.players.GetValue()[HANDHELD_INDEX] = {};
|
|
||||||
}
|
|
||||||
Settings::values.players.SetGlobal(true);
|
Settings::values.players.SetGlobal(true);
|
||||||
emulated_controller->ReloadFromSettings();
|
emulated_controller->ReloadFromSettings();
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -1589,7 +1589,6 @@ void ConfigureInputPlayer::LoadProfile() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigureInputPlayer::SaveProfile() {
|
void ConfigureInputPlayer::SaveProfile() {
|
||||||
static constexpr size_t HANDHELD_INDEX = 8;
|
|
||||||
const QString profile_name = ui->comboProfiles->itemText(ui->comboProfiles->currentIndex());
|
const QString profile_name = ui->comboProfiles->itemText(ui->comboProfiles->currentIndex());
|
||||||
|
|
||||||
if (profile_name.isEmpty()) {
|
if (profile_name.isEmpty()) {
|
||||||
|
@ -1598,12 +1597,7 @@ void ConfigureInputPlayer::SaveProfile() {
|
||||||
|
|
||||||
ApplyConfiguration();
|
ApplyConfiguration();
|
||||||
|
|
||||||
// When we're in handheld mode, only the handheld emulated controller bindings are updated
|
if (!profiles->SaveProfile(profile_name.toStdString(), player_index)) {
|
||||||
const bool is_handheld = player_index == 0 && emulated_controller->GetNpadIdType() ==
|
|
||||||
Core::HID::NpadIdType::Handheld;
|
|
||||||
const auto profile_player_index = is_handheld ? HANDHELD_INDEX : player_index;
|
|
||||||
|
|
||||||
if (!profiles->SaveProfile(profile_name.toStdString(), profile_player_index)) {
|
|
||||||
QMessageBox::critical(this, tr("Save Input Profile"),
|
QMessageBox::critical(this, tr("Save Input Profile"),
|
||||||
tr("Failed to save the input profile \"%1\"").arg(profile_name));
|
tr("Failed to save the input profile \"%1\"").arg(profile_name));
|
||||||
UpdateInputProfiles();
|
UpdateInputProfiles();
|
||||||
|
|
Loading…
Reference in a new issue