diff options
| author | 2021-12-04 23:08:43 -0800 | |
|---|---|---|
| committer | 2021-12-04 23:08:43 -0800 | |
| commit | 60e923046e07657f7bbae4b0342efad6c3641252 (patch) | |
| tree | 0527ae35ff85e56adc4201d3e3204ec53bfeddb6 /src/core/hle | |
| parent | Merge pull request #7467 from liushuyu/fix-linux-decoding (diff) | |
| parent | core/hid: Ensure only valid npad are connected (diff) | |
| download | yuzu-60e923046e07657f7bbae4b0342efad6c3641252.tar.gz yuzu-60e923046e07657f7bbae4b0342efad6c3641252.tar.xz yuzu-60e923046e07657f7bbae4b0342efad6c3641252.zip | |
Merge pull request #7503 from german77/is_npad_valid
core/hid: Ensure only valid npad are connected
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index 6916930f7..ae56f10cf 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -126,8 +126,11 @@ void Controller_NPad::ControllerUpdate(Core::HID::ControllerTriggerType type, | |||
| 126 | } | 126 | } |
| 127 | 127 | ||
| 128 | void Controller_NPad::InitNewlyAddedController(Core::HID::NpadIdType npad_id) { | 128 | void Controller_NPad::InitNewlyAddedController(Core::HID::NpadIdType npad_id) { |
| 129 | LOG_DEBUG(Service_HID, "Npad connected {}", npad_id); | ||
| 130 | auto& controller = GetControllerFromNpadIdType(npad_id); | 129 | auto& controller = GetControllerFromNpadIdType(npad_id); |
| 130 | if (!IsControllerSupported(controller.device->GetNpadStyleIndex())) { | ||
| 131 | return; | ||
| 132 | } | ||
| 133 | LOG_DEBUG(Service_HID, "Npad connected {}", npad_id); | ||
| 131 | const auto controller_type = controller.device->GetNpadStyleIndex(); | 134 | const auto controller_type = controller.device->GetNpadStyleIndex(); |
| 132 | auto& shared_memory = controller.shared_memory_entry; | 135 | auto& shared_memory = controller.shared_memory_entry; |
| 133 | if (controller_type == Core::HID::NpadStyleIndex::None) { | 136 | if (controller_type == Core::HID::NpadStyleIndex::None) { |
| @@ -255,19 +258,7 @@ void Controller_NPad::OnInit() { | |||
| 255 | 258 | ||
| 256 | if (hid_core.GetSupportedStyleTag().raw == Core::HID::NpadStyleSet::None) { | 259 | if (hid_core.GetSupportedStyleTag().raw == Core::HID::NpadStyleSet::None) { |
| 257 | // We want to support all controllers | 260 | // We want to support all controllers |
| 258 | Core::HID::NpadStyleTag style{}; | 261 | hid_core.SetSupportedStyleTag({Core::HID::NpadStyleSet::All}); |
| 259 | style.handheld.Assign(1); | ||
| 260 | style.joycon_left.Assign(1); | ||
| 261 | style.joycon_right.Assign(1); | ||
| 262 | style.joycon_dual.Assign(1); | ||
| 263 | style.fullkey.Assign(1); | ||
| 264 | style.gamecube.Assign(1); | ||
| 265 | style.palma.Assign(1); | ||
| 266 | style.lark.Assign(1); | ||
| 267 | style.lucia.Assign(1); | ||
| 268 | style.lagoon.Assign(1); | ||
| 269 | style.lager.Assign(1); | ||
| 270 | hid_core.SetSupportedStyleTag(style); | ||
| 271 | } | 262 | } |
| 272 | 263 | ||
| 273 | supported_npad_id_types.resize(npad_id_list.size()); | 264 | supported_npad_id_types.resize(npad_id_list.size()); |
| @@ -1072,13 +1063,18 @@ bool Controller_NPad::SwapNpadAssignment(Core::HID::NpadIdType npad_id_1, | |||
| 1072 | const auto& controller_2 = GetControllerFromNpadIdType(npad_id_2).device; | 1063 | const auto& controller_2 = GetControllerFromNpadIdType(npad_id_2).device; |
| 1073 | const auto type_index_1 = controller_1->GetNpadStyleIndex(); | 1064 | const auto type_index_1 = controller_1->GetNpadStyleIndex(); |
| 1074 | const auto type_index_2 = controller_2->GetNpadStyleIndex(); | 1065 | const auto type_index_2 = controller_2->GetNpadStyleIndex(); |
| 1066 | const auto is_connected_1 = controller_1->IsConnected(); | ||
| 1067 | const auto is_connected_2 = controller_2->IsConnected(); | ||
| 1075 | 1068 | ||
| 1076 | if (!IsControllerSupported(type_index_1) || !IsControllerSupported(type_index_2)) { | 1069 | if (!IsControllerSupported(type_index_1) && is_connected_1) { |
| 1070 | return false; | ||
| 1071 | } | ||
| 1072 | if (!IsControllerSupported(type_index_2) && is_connected_2) { | ||
| 1077 | return false; | 1073 | return false; |
| 1078 | } | 1074 | } |
| 1079 | 1075 | ||
| 1080 | AddNewControllerAt(type_index_2, npad_id_1); | 1076 | UpdateControllerAt(type_index_2, npad_id_1, is_connected_2); |
| 1081 | AddNewControllerAt(type_index_1, npad_id_2); | 1077 | UpdateControllerAt(type_index_1, npad_id_2, is_connected_1); |
| 1082 | 1078 | ||
| 1083 | return true; | 1079 | return true; |
| 1084 | } | 1080 | } |