summaryrefslogtreecommitdiff
path: root/src/core/hle
diff options
context:
space:
mode:
authorGravatar bunnei2021-12-04 23:08:43 -0800
committerGravatar GitHub2021-12-04 23:08:43 -0800
commit60e923046e07657f7bbae4b0342efad6c3641252 (patch)
tree0527ae35ff85e56adc4201d3e3204ec53bfeddb6 /src/core/hle
parentMerge pull request #7467 from liushuyu/fix-linux-decoding (diff)
parentcore/hid: Ensure only valid npad are connected (diff)
downloadyuzu-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.cpp30
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
128void Controller_NPad::InitNewlyAddedController(Core::HID::NpadIdType npad_id) { 128void 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}