diff options
| author | 2021-01-10 13:47:56 -0600 | |
|---|---|---|
| committer | 2021-02-03 20:17:08 -0600 | |
| commit | 9a9e81f2e9b93d0028654c7ee50e9ebacee0e5d6 (patch) | |
| tree | 0c0a71dd5f6be097fa86b3d07709017fd9dbc011 | |
| parent | Adds missing controller types and properties (diff) | |
| download | yuzu-9a9e81f2e9b93d0028654c7ee50e9ebacee0e5d6.tar.gz yuzu-9a9e81f2e9b93d0028654c7ee50e9ebacee0e5d6.tar.xz yuzu-9a9e81f2e9b93d0028654c7ee50e9ebacee0e5d6.zip | |
Fix npad struct to match switchbrew
| -rw-r--r-- | src/core/hle/service/am/applets/controller.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 129 | ||||
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.h | 108 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_player.cpp | 2 |
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 | |||
| 727 | void Controller_NPad::SetNpadMode(u32 npad_id, NpadAssignments assignment_mode) { | 725 | void 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")); |