summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/service/am/applets/controller.cpp2
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp129
-rw-r--r--src/core/hle/service/hid/controllers/npad.h108
-rw-r--r--src/yuzu/configuration/configure_input_player.cpp2
4 files changed, 135 insertions, 106 deletions
diff --git a/src/core/hle/service/am/applets/controller.cpp b/src/core/hle/service/am/applets/controller.cpp
index 7edfca64e..d7d3ee99a 100644
--- a/src/core/hle/service/am/applets/controller.cpp
+++ b/src/core/hle/service/am/applets/controller.cpp
@@ -37,7 +37,7 @@ static Core::Frontend::ControllerParameters ConvertToFrontendParameters(
37 .border_colors = std::move(identification_colors), 37 .border_colors = std::move(identification_colors),
38 .enable_explain_text = enable_text, 38 .enable_explain_text = enable_text,
39 .explain_text = std::move(text), 39 .explain_text = std::move(text),
40 .allow_pro_controller = npad_style_set.pro_controller == 1, 40 .allow_pro_controller = npad_style_set.fullkey == 1,
41 .allow_handheld = npad_style_set.handheld == 1, 41 .allow_handheld = npad_style_set.handheld == 1,
42 .allow_dual_joycons = npad_style_set.joycon_dual == 1, 42 .allow_dual_joycons = npad_style_set.joycon_dual == 1,
43 .allow_left_joycon = npad_style_set.joycon_left == 1, 43 .allow_left_joycon = npad_style_set.joycon_left == 1,
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index 251db1f84..5d91e6fc1 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -156,76 +156,77 @@ void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) {
156 styleset_changed_events[controller_idx].writable->Signal(); 156 styleset_changed_events[controller_idx].writable->Signal();
157 return; 157 return;
158 } 158 }
159 controller.joy_styles.raw = 0; // Zero out 159 controller.style_set.raw = 0; // Zero out
160 controller.device_type.raw = 0; 160 controller.device_type.raw = 0;
161 controller.properties.raw = 0; 161 controller.system_properties.raw = 0;
162 switch (controller_type) { 162 switch (controller_type) {
163 case NPadControllerType::None: 163 case NPadControllerType::None:
164 UNREACHABLE(); 164 UNREACHABLE();
165 break; 165 break;
166 case NPadControllerType::ProController: 166 case NPadControllerType::ProController:
167 controller.joy_styles.pro_controller.Assign(1); 167 controller.style_set.fullkey.Assign(1);
168 controller.device_type.pro_controller.Assign(1); 168 controller.device_type.fullkey.Assign(1);
169 controller.properties.is_vertical.Assign(1); 169 controller.system_properties.is_vertical.Assign(1);
170 controller.properties.use_plus.Assign(1); 170 controller.system_properties.use_plus.Assign(1);
171 controller.properties.use_minus.Assign(1); 171 controller.system_properties.use_minus.Assign(1);
172 controller.pad_assignment = NpadAssignments::Single; 172 controller.assignment_mode = NpadAssignments::Single;
173 break; 173 break;
174 case NPadControllerType::Handheld: 174 case NPadControllerType::Handheld:
175 controller.joy_styles.handheld.Assign(1); 175 controller.style_set.handheld.Assign(1);
176 controller.device_type.handheld.Assign(1); 176 controller.device_type.handheld_left.Assign(1);
177 controller.properties.is_vertical.Assign(1); 177 controller.device_type.handheld_right.Assign(1);
178 controller.properties.use_plus.Assign(1); 178 controller.system_properties.is_vertical.Assign(1);
179 controller.properties.use_minus.Assign(1); 179 controller.system_properties.use_plus.Assign(1);
180 controller.pad_assignment = NpadAssignments::Dual; 180 controller.system_properties.use_minus.Assign(1);
181 controller.assignment_mode = NpadAssignments::Dual;
181 break; 182 break;
182 case NPadControllerType::JoyDual: 183 case NPadControllerType::JoyDual:
183 controller.joy_styles.joycon_dual.Assign(1); 184 controller.style_set.joycon_dual.Assign(1);
184 controller.device_type.joycon_left.Assign(1); 185 controller.device_type.joycon_left.Assign(1);
185 controller.device_type.joycon_right.Assign(1); 186 controller.device_type.joycon_right.Assign(1);
186 controller.properties.is_vertical.Assign(1); 187 controller.system_properties.is_vertical.Assign(1);
187 controller.properties.use_plus.Assign(1); 188 controller.system_properties.use_plus.Assign(1);
188 controller.properties.use_minus.Assign(1); 189 controller.system_properties.use_minus.Assign(1);
189 controller.pad_assignment = NpadAssignments::Dual; 190 controller.assignment_mode = NpadAssignments::Dual;
190 break; 191 break;
191 case NPadControllerType::JoyLeft: 192 case NPadControllerType::JoyLeft:
192 controller.joy_styles.joycon_left.Assign(1); 193 controller.style_set.joycon_left.Assign(1);
193 controller.device_type.joycon_left.Assign(1); 194 controller.device_type.joycon_left.Assign(1);
194 controller.properties.is_horizontal.Assign(1); 195 controller.system_properties.is_horizontal.Assign(1);
195 controller.properties.use_minus.Assign(1); 196 controller.system_properties.use_minus.Assign(1);
196 controller.pad_assignment = NpadAssignments::Single; 197 controller.assignment_mode = NpadAssignments::Single;
197 break; 198 break;
198 case NPadControllerType::JoyRight: 199 case NPadControllerType::JoyRight:
199 controller.joy_styles.joycon_right.Assign(1); 200 controller.style_set.joycon_right.Assign(1);
200 controller.device_type.joycon_right.Assign(1); 201 controller.device_type.joycon_right.Assign(1);
201 controller.properties.is_horizontal.Assign(1); 202 controller.system_properties.is_horizontal.Assign(1);
202 controller.properties.use_plus.Assign(1); 203 controller.system_properties.use_plus.Assign(1);
203 controller.pad_assignment = NpadAssignments::Single; 204 controller.assignment_mode = NpadAssignments::Single;
204 break; 205 break;
205 case NPadControllerType::Pokeball: 206 case NPadControllerType::Pokeball:
206 controller.joy_styles.pokeball.Assign(1); 207 controller.style_set.palma.Assign(1);
207 controller.device_type.pokeball.Assign(1); 208 controller.device_type.palma.Assign(1);
208 controller.pad_assignment = NpadAssignments::Single; 209 controller.assignment_mode = NpadAssignments::Single;
209 break; 210 break;
210 } 211 }
211 212
212 controller.single_color_error = ColorReadError::ReadOk; 213 controller.fullkey_color.attribute = ColorAttributes::Ok;
213 controller.single_color.body_color = 0; 214 controller.fullkey_color.fullkey.body = 0;
214 controller.single_color.button_color = 0; 215 controller.fullkey_color.fullkey.button = 0;
215 216
216 controller.dual_color_error = ColorReadError::ReadOk; 217 controller.joycon_color.attribute = ColorAttributes::Ok;
217 controller.left_color.body_color = 218 controller.joycon_color.left.body =
218 Settings::values.players.GetValue()[controller_idx].body_color_left; 219 Settings::values.players.GetValue()[controller_idx].body_color_left;
219 controller.left_color.button_color = 220 controller.joycon_color.left.button =
220 Settings::values.players.GetValue()[controller_idx].button_color_left; 221 Settings::values.players.GetValue()[controller_idx].button_color_left;
221 controller.right_color.body_color = 222 controller.joycon_color.right.body =
222 Settings::values.players.GetValue()[controller_idx].body_color_right; 223 Settings::values.players.GetValue()[controller_idx].body_color_right;
223 controller.right_color.button_color = 224 controller.joycon_color.right.button =
224 Settings::values.players.GetValue()[controller_idx].button_color_right; 225 Settings::values.players.GetValue()[controller_idx].button_color_right;
225 226
226 controller.battery_level[0] = BATTERY_FULL; 227 controller.battery_level_dual = BATTERY_FULL;
227 controller.battery_level[1] = BATTERY_FULL; 228 controller.battery_level_left = BATTERY_FULL;
228 controller.battery_level[2] = BATTERY_FULL; 229 controller.battery_level_right = BATTERY_FULL;
229 230
230 SignalStyleSetChangedEvent(IndexToNPad(controller_idx)); 231 SignalStyleSetChangedEvent(IndexToNPad(controller_idx));
231} 232}
@@ -249,8 +250,8 @@ void Controller_NPad::OnInit() {
249 style.joycon_left.Assign(1); 250 style.joycon_left.Assign(1);
250 style.joycon_right.Assign(1); 251 style.joycon_right.Assign(1);
251 style.joycon_dual.Assign(1); 252 style.joycon_dual.Assign(1);
252 style.pro_controller.Assign(1); 253 style.fullkey.Assign(1);
253 style.pokeball.Assign(1); 254 style.palma.Assign(1);
254 } 255 }
255 256
256 std::transform(Settings::values.players.GetValue().begin(), 257 std::transform(Settings::values.players.GetValue().begin(),
@@ -404,13 +405,10 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8*
404 } 405 }
405 for (std::size_t i = 0; i < shared_memory_entries.size(); ++i) { 406 for (std::size_t i = 0; i < shared_memory_entries.size(); ++i) {
406 auto& npad = shared_memory_entries[i]; 407 auto& npad = shared_memory_entries[i];
407 const std::array<NPadGeneric*, 7> controller_npads{&npad.main_controller_states, 408 const std::array<NPadGeneric*, 7> controller_npads{
408 &npad.handheld_states, 409 &npad.fullkey_states, &npad.handheld_states, &npad.joy_dual_states,
409 &npad.dual_states, 410 &npad.joy_left_states, &npad.joy_right_states, &npad.palma_states,
410 &npad.left_joy_states, 411 &npad.system_ext_states};
411 &npad.right_joy_states,
412 &npad.pokeball_states,
413 &npad.libnx};
414 412
415 for (auto* main_controller : controller_npads) { 413 for (auto* main_controller : controller_npads) {
416 main_controller->common.entry_count = 16; 414 main_controller->common.entry_count = 16;
@@ -440,16 +438,16 @@ void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8*
440 auto& pad_state = npad_pad_states[npad_index]; 438 auto& pad_state = npad_pad_states[npad_index];
441 439
442 auto& main_controller = 440 auto& main_controller =
443 npad.main_controller_states.npad[npad.main_controller_states.common.last_entry_index]; 441 npad.fullkey_states.npad[npad.fullkey_states.common.last_entry_index];
444 auto& handheld_entry = 442 auto& handheld_entry =
445 npad.handheld_states.npad[npad.handheld_states.common.last_entry_index]; 443 npad.handheld_states.npad[npad.handheld_states.common.last_entry_index];
446 auto& dual_entry = npad.dual_states.npad[npad.dual_states.common.last_entry_index]; 444 auto& dual_entry = npad.joy_dual_states.npad[npad.joy_dual_states.common.last_entry_index];
447 auto& left_entry = npad.left_joy_states.npad[npad.left_joy_states.common.last_entry_index]; 445 auto& left_entry = npad.joy_left_states.npad[npad.joy_left_states.common.last_entry_index];
448 auto& right_entry = 446 auto& right_entry =
449 npad.right_joy_states.npad[npad.right_joy_states.common.last_entry_index]; 447 npad.joy_right_states.npad[npad.joy_right_states.common.last_entry_index];
450 auto& pokeball_entry = 448 auto& pokeball_entry = npad.palma_states.npad[npad.palma_states.common.last_entry_index];
451 npad.pokeball_states.npad[npad.pokeball_states.common.last_entry_index]; 449 auto& libnx_entry =
452 auto& libnx_entry = npad.libnx.npad[npad.libnx.common.last_entry_index]; 450 npad.system_ext_states.npad[npad.system_ext_states.common.last_entry_index];
453 451
454 libnx_entry.connection_status.raw = 0; 452 libnx_entry.connection_status.raw = 0;
455 libnx_entry.connection_status.IsConnected.Assign(1); 453 libnx_entry.connection_status.IsConnected.Assign(1);
@@ -554,7 +552,7 @@ void Controller_NPad::OnMotionUpdate(const Core::Timing::CoreTiming& core_timing
554 } 552 }
555 553
556 const std::array<SixAxisGeneric*, 6> controller_sixaxes{ 554 const std::array<SixAxisGeneric*, 6> controller_sixaxes{
557 &npad.sixaxis_full, &npad.sixaxis_handheld, &npad.sixaxis_dual_left, 555 &npad.sixaxis_fullkey, &npad.sixaxis_handheld, &npad.sixaxis_dual_left,
558 &npad.sixaxis_dual_right, &npad.sixaxis_left, &npad.sixaxis_right, 556 &npad.sixaxis_dual_right, &npad.sixaxis_left, &npad.sixaxis_right,
559 }; 557 };
560 558
@@ -592,7 +590,7 @@ void Controller_NPad::OnMotionUpdate(const Core::Timing::CoreTiming& core_timing
592 } 590 }
593 591
594 auto& full_sixaxis_entry = 592 auto& full_sixaxis_entry =
595 npad.sixaxis_full.sixaxis[npad.sixaxis_full.common.last_entry_index]; 593 npad.sixaxis_fullkey.sixaxis[npad.sixaxis_fullkey.common.last_entry_index];
596 auto& handheld_sixaxis_entry = 594 auto& handheld_sixaxis_entry =
597 npad.sixaxis_handheld.sixaxis[npad.sixaxis_handheld.common.last_entry_index]; 595 npad.sixaxis_handheld.sixaxis[npad.sixaxis_handheld.common.last_entry_index];
598 auto& dual_left_sixaxis_entry = 596 auto& dual_left_sixaxis_entry =
@@ -727,8 +725,8 @@ Controller_NPad::NpadCommunicationMode Controller_NPad::GetNpadCommunicationMode
727void Controller_NPad::SetNpadMode(u32 npad_id, NpadAssignments assignment_mode) { 725void Controller_NPad::SetNpadMode(u32 npad_id, NpadAssignments assignment_mode) {
728 const std::size_t npad_index = NPadIdToIndex(npad_id); 726 const std::size_t npad_index = NPadIdToIndex(npad_id);
729 ASSERT(npad_index < shared_memory_entries.size()); 727 ASSERT(npad_index < shared_memory_entries.size());
730 if (shared_memory_entries[npad_index].pad_assignment != assignment_mode) { 728 if (shared_memory_entries[npad_index].assignment_mode != assignment_mode) {
731 shared_memory_entries[npad_index].pad_assignment = assignment_mode; 729 shared_memory_entries[npad_index].assignment_mode = assignment_mode;
732 } 730 }
733} 731}
734 732
@@ -935,9 +933,10 @@ void Controller_NPad::DisconnectNpadAtIndex(std::size_t npad_index) {
935 connected_controllers[npad_index].is_connected = false; 933 connected_controllers[npad_index].is_connected = false;
936 934
937 auto& controller = shared_memory_entries[npad_index]; 935 auto& controller = shared_memory_entries[npad_index];
938 controller.joy_styles.raw = 0; // Zero out 936 controller.style_set.raw = 0; // Zero out
939 controller.device_type.raw = 0; 937 controller.device_type.raw = 0;
940 controller.properties.raw = 0; 938 controller.system_properties.raw = 0;
939 controller.button_properties.raw = 0;
941 940
942 SignalStyleSetChangedEvent(IndexToNPad(npad_index)); 941 SignalStyleSetChangedEvent(IndexToNPad(npad_index));
943} 942}
@@ -1113,7 +1112,7 @@ bool Controller_NPad::IsControllerSupported(NPadControllerType controller) const
1113 [](u32 npad_id) { return npad_id <= MAX_NPAD_ID; })) { 1112 [](u32 npad_id) { return npad_id <= MAX_NPAD_ID; })) {
1114 switch (controller) { 1113 switch (controller) {
1115 case NPadControllerType::ProController: 1114 case NPadControllerType::ProController:
1116 return style.pro_controller; 1115 return style.fullkey;
1117 case NPadControllerType::JoyDual: 1116 case NPadControllerType::JoyDual:
1118 return style.joycon_dual; 1117 return style.joycon_dual;
1119 case NPadControllerType::JoyLeft: 1118 case NPadControllerType::JoyLeft:
@@ -1121,7 +1120,7 @@ bool Controller_NPad::IsControllerSupported(NPadControllerType controller) const
1121 case NPadControllerType::JoyRight: 1120 case NPadControllerType::JoyRight:
1122 return style.joycon_right; 1121 return style.joycon_right;
1123 case NPadControllerType::Pokeball: 1122 case NPadControllerType::Pokeball:
1124 return style.pokeball; 1123 return style.palma;
1125 default: 1124 default:
1126 return false; 1125 return false;
1127 } 1126 }
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h
index e5778921f..d791e327c 100644
--- a/src/core/hle/service/hid/controllers/npad.h
+++ b/src/core/hle/service/hid/controllers/npad.h
@@ -90,10 +90,10 @@ public:
90 }; 90 };
91 91
92 enum class NpadCommunicationMode : u64 { 92 enum class NpadCommunicationMode : u64 {
93 Unknown0 = 0, 93 Mode_5ms = 0,
94 Unknown1 = 1, 94 Mode_10ms = 1,
95 Unknown2 = 2, 95 Mode_15ms = 2,
96 Unknown3 = 3, 96 Default = 3,
97 }; 97 };
98 98
99 struct DeviceHandle { 99 struct DeviceHandle {
@@ -108,13 +108,13 @@ public:
108 union { 108 union {
109 u32_le raw{}; 109 u32_le raw{};
110 110
111 BitField<0, 1, u32> pro_controller; 111 BitField<0, 1, u32> fullkey;
112 BitField<1, 1, u32> handheld; 112 BitField<1, 1, u32> handheld;
113 BitField<2, 1, u32> joycon_dual; 113 BitField<2, 1, u32> joycon_dual;
114 BitField<3, 1, u32> joycon_left; 114 BitField<3, 1, u32> joycon_left;
115 BitField<4, 1, u32> joycon_right; 115 BitField<4, 1, u32> joycon_right;
116 BitField<5, 1, u32> gamecube; 116 BitField<5, 1, u32> gamecube;
117 BitField<6, 1, u32> pokeball; 117 BitField<6, 1, u32> palma;
118 BitField<7, 1, u32> lark; 118 BitField<7, 1, u32> lark;
119 BitField<8, 1, u32> handheld_lark; 119 BitField<8, 1, u32> handheld_lark;
120 BitField<9, 1, u32> lucia; 120 BitField<9, 1, u32> lucia;
@@ -243,12 +243,32 @@ private:
243 }; 243 };
244 static_assert(sizeof(CommonHeader) == 0x20, "CommonHeader is an invalid size"); 244 static_assert(sizeof(CommonHeader) == 0x20, "CommonHeader is an invalid size");
245 245
246 enum class ColorAttributes : u32_le {
247 Ok = 0,
248 ReadError = 1,
249 NoController = 2,
250 };
251 static_assert(sizeof(ColorAttributes) == 4, "ColorAttributes is an invalid size");
252
246 struct ControllerColor { 253 struct ControllerColor {
247 u32_le body_color; 254 u32_le body;
248 u32_le button_color; 255 u32_le button;
249 }; 256 };
250 static_assert(sizeof(ControllerColor) == 8, "ControllerColor is an invalid size"); 257 static_assert(sizeof(ControllerColor) == 8, "ControllerColor is an invalid size");
251 258
259 struct FullKeyColor {
260 ColorAttributes attribute;
261 ControllerColor fullkey;
262 };
263 static_assert(sizeof(FullKeyColor) == 0xC, "FullKeyColor is an invalid size");
264
265 struct JoyconColor {
266 ColorAttributes attribute;
267 ControllerColor left;
268 ControllerColor right;
269 };
270 static_assert(sizeof(JoyconColor) == 0x14, "JoyconColor is an invalid size");
271
252 struct ControllerPadState { 272 struct ControllerPadState {
253 union { 273 union {
254 u64_le raw{}; 274 u64_le raw{};
@@ -365,13 +385,7 @@ private:
365 }; 385 };
366 static_assert(sizeof(SixAxisGeneric) == 0x708, "SixAxisGeneric is an invalid size"); 386 static_assert(sizeof(SixAxisGeneric) == 0x708, "SixAxisGeneric is an invalid size");
367 387
368 enum class ColorReadError : u32_le { 388 struct NPadSystemProperties {
369 ReadOk = 0,
370 ColorDoesntExist = 1,
371 NoController = 2,
372 };
373
374 struct NPadProperties {
375 union { 389 union {
376 s64_le raw{}; 390 s64_le raw{};
377 BitField<0, 1, s64> is_charging_joy_dual; 391 BitField<0, 1, s64> is_charging_joy_dual;
@@ -389,17 +403,36 @@ private:
389 BitField<15, 1, s64> use_directional_buttons; 403 BitField<15, 1, s64> use_directional_buttons;
390 }; 404 };
391 }; 405 };
406 static_assert(sizeof(NPadSystemProperties) == 0x8, "NPadSystemProperties is an invalid size");
407
408 struct NPadButtonProperties {
409 union {
410 s32_le raw{};
411 BitField<0, 1, s32> is_home_button_protection_enabled;
412 };
413 };
414 static_assert(sizeof(NPadButtonProperties) == 0x4, "NPadButtonProperties is an invalid size");
392 415
393 struct NPadDevice { 416 struct NPadDevice {
394 union { 417 union {
395 u32_le raw{}; 418 u32_le raw{};
396 BitField<0, 1, s32> pro_controller; 419 BitField<0, 1, s32> fullkey;
397 BitField<1, 1, s32> handheld; 420 BitField<1, 1, s32> debug_pad;
398 BitField<2, 1, s32> handheld_left; 421 BitField<2, 1, s32> handheld_left;
399 BitField<3, 1, s32> handheld_right; 422 BitField<3, 1, s32> handheld_right;
400 BitField<4, 1, s32> joycon_left; 423 BitField<4, 1, s32> joycon_left;
401 BitField<5, 1, s32> joycon_right; 424 BitField<5, 1, s32> joycon_right;
402 BitField<6, 1, s32> pokeball; 425 BitField<6, 1, s32> palma;
426 BitField<7, 1, s32> lark_hvc_left;
427 BitField<8, 1, s32> lark_hvc_right;
428 BitField<9, 1, s32> lark_nes_left;
429 BitField<10, 1, s32> lark_nes_right;
430 BitField<11, 1, s32> handheld_lark_hvc_left;
431 BitField<12, 1, s32> handheld_lark_hvc_right;
432 BitField<13, 1, s32> handheld_lark_nes_left;
433 BitField<14, 1, s32> handheld_lark_nes_right;
434 BitField<15, 1, s32> lucia;
435 BitField<31, 1, s32> system;
403 }; 436 };
404 }; 437 };
405 438
@@ -411,34 +444,31 @@ private:
411 }; 444 };
412 445
413 struct NPadEntry { 446 struct NPadEntry {
414 NpadStyleSet joy_styles; 447 NpadStyleSet style_set;
415 NpadAssignments pad_assignment; 448 NpadAssignments assignment_mode;
416 449 FullKeyColor fullkey_color;
417 ColorReadError single_color_error; 450 JoyconColor joycon_color;
418 ControllerColor single_color;
419
420 ColorReadError dual_color_error;
421 ControllerColor left_color;
422 ControllerColor right_color;
423 451
424 NPadGeneric main_controller_states; 452 NPadGeneric fullkey_states;
425 NPadGeneric handheld_states; 453 NPadGeneric handheld_states;
426 NPadGeneric dual_states; 454 NPadGeneric joy_dual_states;
427 NPadGeneric left_joy_states; 455 NPadGeneric joy_left_states;
428 NPadGeneric right_joy_states; 456 NPadGeneric joy_right_states;
429 NPadGeneric pokeball_states; 457 NPadGeneric palma_states;
430 NPadGeneric libnx; // TODO(ogniK): Find out what this actually is, libnx seems to only be 458 NPadGeneric system_ext_states;
431 // relying on this for the time being 459 SixAxisGeneric sixaxis_fullkey;
432 SixAxisGeneric sixaxis_full;
433 SixAxisGeneric sixaxis_handheld; 460 SixAxisGeneric sixaxis_handheld;
434 SixAxisGeneric sixaxis_dual_left; 461 SixAxisGeneric sixaxis_dual_left;
435 SixAxisGeneric sixaxis_dual_right; 462 SixAxisGeneric sixaxis_dual_right;
436 SixAxisGeneric sixaxis_left; 463 SixAxisGeneric sixaxis_left;
437 SixAxisGeneric sixaxis_right; 464 SixAxisGeneric sixaxis_right;
438 NPadDevice device_type; 465 NPadDevice device_type;
439 NPadProperties properties; 466 INSERT_PADDING_BYTES(0x4); // reserved
440 INSERT_PADDING_WORDS(1); 467 NPadSystemProperties system_properties;
441 std::array<u32, 3> battery_level; 468 NPadButtonProperties button_properties;
469 u32 battery_level_dual;
470 u32 battery_level_left;
471 u32 battery_level_right;
442 INSERT_PADDING_BYTES(0x5c); 472 INSERT_PADDING_BYTES(0x5c);
443 INSERT_PADDING_BYTES(0xdf8); 473 INSERT_PADDING_BYTES(0xdf8);
444 }; 474 };
@@ -477,7 +507,7 @@ private:
477 NpadHoldType hold_type{NpadHoldType::Vertical}; 507 NpadHoldType hold_type{NpadHoldType::Vertical};
478 NpadHandheldActivationMode handheld_activation_mode{NpadHandheldActivationMode::Dual}; 508 NpadHandheldActivationMode handheld_activation_mode{NpadHandheldActivationMode::Dual};
479 // NpadCommunicationMode is unknown, default value is 1 509 // NpadCommunicationMode is unknown, default value is 1
480 NpadCommunicationMode communication_mode{NpadCommunicationMode::Unknown1}; 510 NpadCommunicationMode communication_mode{NpadCommunicationMode::Default};
481 // Each controller should have their own styleset changed event 511 // Each controller should have their own styleset changed event
482 std::array<Kernel::EventPair, 10> styleset_changed_events; 512 std::array<Kernel::EventPair, 10> styleset_changed_events;
483 std::array<std::array<std::chrono::steady_clock::time_point, 2>, 10> last_vibration_timepoints; 513 std::array<std::array<std::chrono::steady_clock::time_point, 2>, 10> last_vibration_timepoints;
diff --git a/src/yuzu/configuration/configure_input_player.cpp b/src/yuzu/configuration/configure_input_player.cpp
index fbe36046b..a129dc46b 100644
--- a/src/yuzu/configuration/configure_input_player.cpp
+++ b/src/yuzu/configuration/configure_input_player.cpp
@@ -886,7 +886,7 @@ void ConfigureInputPlayer::SetConnectableControllers() {
886 index_controller_type_pairs.clear(); 886 index_controller_type_pairs.clear();
887 ui->comboControllerType->clear(); 887 ui->comboControllerType->clear();
888 888
889 if (enable_all || npad_style_set.pro_controller == 1) { 889 if (enable_all || npad_style_set.fullkey == 1) {
890 index_controller_type_pairs.emplace_back(ui->comboControllerType->count(), 890 index_controller_type_pairs.emplace_back(ui->comboControllerType->count(),
891 Settings::ControllerType::ProController); 891 Settings::ControllerType::ProController);
892 ui->comboControllerType->addItem(tr("Pro Controller")); 892 ui->comboControllerType->addItem(tr("Pro Controller"));