diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 21 | ||||
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.h | 7 |
2 files changed, 21 insertions, 7 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index a9060fa2c..fd677d281 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -79,21 +79,31 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) { | |||
| 79 | controller.joy_styles.handheld.Assign(1); | 79 | controller.joy_styles.handheld.Assign(1); |
| 80 | controller.device_type.handheld.Assign(1); | 80 | controller.device_type.handheld.Assign(1); |
| 81 | controller.pad_assignment = NPadAssignments::Dual; | 81 | controller.pad_assignment = NPadAssignments::Dual; |
| 82 | controller.properties.is_vertical.Assign(1); | ||
| 83 | controller.properties.use_plus.Assign(1); | ||
| 84 | controller.properties.use_minus.Assign(1); | ||
| 82 | break; | 85 | break; |
| 83 | case NPadControllerType::JoyDual: | 86 | case NPadControllerType::JoyDual: |
| 84 | controller.joy_styles.joycon_dual.Assign(1); | 87 | controller.joy_styles.joycon_dual.Assign(1); |
| 85 | controller.device_type.joycon_left.Assign(1); | 88 | controller.device_type.joycon_left.Assign(1); |
| 86 | controller.device_type.joycon_right.Assign(1); | 89 | controller.device_type.joycon_right.Assign(1); |
| 90 | controller.properties.is_vertical.Assign(1); | ||
| 91 | controller.properties.use_plus.Assign(1); | ||
| 92 | controller.properties.use_minus.Assign(1); | ||
| 87 | controller.pad_assignment = NPadAssignments::Dual; | 93 | controller.pad_assignment = NPadAssignments::Dual; |
| 88 | break; | 94 | break; |
| 89 | case NPadControllerType::JoyLeft: | 95 | case NPadControllerType::JoyLeft: |
| 90 | controller.joy_styles.joycon_left.Assign(1); | 96 | controller.joy_styles.joycon_left.Assign(1); |
| 91 | controller.device_type.joycon_left.Assign(1); | 97 | controller.device_type.joycon_left.Assign(1); |
| 98 | controller.properties.is_horizontal.Assign(1); | ||
| 99 | controller.properties.use_minus.Assign(1); | ||
| 92 | controller.pad_assignment = NPadAssignments::Single; | 100 | controller.pad_assignment = NPadAssignments::Single; |
| 93 | break; | 101 | break; |
| 94 | case NPadControllerType::JoyRight: | 102 | case NPadControllerType::JoyRight: |
| 95 | controller.joy_styles.joycon_right.Assign(1); | 103 | controller.joy_styles.joycon_right.Assign(1); |
| 96 | controller.device_type.joycon_right.Assign(1); | 104 | controller.device_type.joycon_right.Assign(1); |
| 105 | controller.properties.is_horizontal.Assign(1); | ||
| 106 | controller.properties.use_plus.Assign(1); | ||
| 97 | controller.pad_assignment = NPadAssignments::Single; | 107 | controller.pad_assignment = NPadAssignments::Single; |
| 98 | break; | 108 | break; |
| 99 | case NPadControllerType::Pokeball: | 109 | case NPadControllerType::Pokeball: |
| @@ -104,6 +114,9 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) { | |||
| 104 | case NPadControllerType::ProController: | 114 | case NPadControllerType::ProController: |
| 105 | controller.joy_styles.pro_controller.Assign(1); | 115 | controller.joy_styles.pro_controller.Assign(1); |
| 106 | controller.device_type.pro_controller.Assign(1); | 116 | controller.device_type.pro_controller.Assign(1); |
| 117 | controller.properties.is_vertical.Assign(1); | ||
| 118 | controller.properties.use_plus.Assign(1); | ||
| 119 | controller.properties.use_minus.Assign(1); | ||
| 107 | controller.pad_assignment = NPadAssignments::Single; | 120 | controller.pad_assignment = NPadAssignments::Single; |
| 108 | break; | 121 | break; |
| 109 | } | 122 | } |
| @@ -118,9 +131,6 @@ void Controller_NPad::InitNewlyAddedControler(std::size_t controller_idx) { | |||
| 118 | controller.right_color.body_color = JOYCON_BODY_NEON_RED; | 131 | controller.right_color.body_color = JOYCON_BODY_NEON_RED; |
| 119 | controller.right_color.button_color = JOYCON_BUTTONS_NEON_RED; | 132 | controller.right_color.button_color = JOYCON_BUTTONS_NEON_RED; |
| 120 | 133 | ||
| 121 | controller.properties.is_vertical.Assign(1); // TODO(ogniK): Swap joycons orientations | ||
| 122 | controller.properties.use_plus.Assign(1); | ||
| 123 | controller.properties.use_minus.Assign(1); | ||
| 124 | controller.battery_level[0] = BATTERY_FULL; | 134 | controller.battery_level[0] = BATTERY_FULL; |
| 125 | controller.battery_level[1] = BATTERY_FULL; | 135 | controller.battery_level[1] = BATTERY_FULL; |
| 126 | controller.battery_level[2] = BATTERY_FULL; | 136 | controller.battery_level[2] = BATTERY_FULL; |
| @@ -202,8 +212,8 @@ void Controller_NPad::RequestPadStateUpdate(u32 npad_id) { | |||
| 202 | pad_state.r_stick_right.Assign(buttons[RStick_Right - BUTTON_HID_BEGIN]->GetStatus()); | 212 | pad_state.r_stick_right.Assign(buttons[RStick_Right - BUTTON_HID_BEGIN]->GetStatus()); |
| 203 | pad_state.r_stick_down.Assign(buttons[RStick_Down - BUTTON_HID_BEGIN]->GetStatus()); | 213 | pad_state.r_stick_down.Assign(buttons[RStick_Down - BUTTON_HID_BEGIN]->GetStatus()); |
| 204 | 214 | ||
| 205 | pad_state.sl.Assign(buttons[SL - BUTTON_HID_BEGIN]->GetStatus()); | 215 | pad_state.left_sl.Assign(buttons[SL - BUTTON_HID_BEGIN]->GetStatus()); |
| 206 | pad_state.sr.Assign(buttons[SR - BUTTON_HID_BEGIN]->GetStatus()); | 216 | pad_state.left_sr.Assign(buttons[SR - BUTTON_HID_BEGIN]->GetStatus()); |
| 207 | 217 | ||
| 208 | const auto [stick_l_x_f, stick_l_y_f] = | 218 | const auto [stick_l_x_f, stick_l_y_f] = |
| 209 | sticks[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetStatus(); | 219 | sticks[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetStatus(); |
| @@ -307,6 +317,7 @@ void Controller_NPad::OnUpdate(u8* data, std::size_t data_len) { | |||
| 307 | pad_state.l_stick = temp_lstick_entry; | 317 | pad_state.l_stick = temp_lstick_entry; |
| 308 | pad_state.r_stick = temp_rstick_entry; | 318 | pad_state.r_stick = temp_rstick_entry; |
| 309 | } | 319 | } |
| 320 | |||
| 310 | libnx_entry.connection_status.raw = 0; | 321 | libnx_entry.connection_status.raw = 0; |
| 311 | 322 | ||
| 312 | switch (controller_type) { | 323 | switch (controller_type) { |
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h index ea12646f8..f702990c7 100644 --- a/src/core/hle/service/hid/controllers/npad.h +++ b/src/core/hle/service/hid/controllers/npad.h | |||
| @@ -165,8 +165,11 @@ private: | |||
| 165 | BitField<23, 1, u64_le> r_stick_down; | 165 | BitField<23, 1, u64_le> r_stick_down; |
| 166 | 166 | ||
| 167 | // Not always active? | 167 | // Not always active? |
| 168 | BitField<24, 1, u64_le> sl; | 168 | BitField<24, 1, u64_le> left_sl; |
| 169 | BitField<25, 1, u64_le> sr; | 169 | BitField<25, 1, u64_le> left_sr; |
| 170 | |||
| 171 | BitField<26, 1, u64_le> right_sl; | ||
| 172 | BitField<27, 1, u64_le> right_sr; | ||
| 170 | }; | 173 | }; |
| 171 | }; | 174 | }; |
| 172 | static_assert(sizeof(ControllerPadState) == 8, "ControllerPadState is an invalid size"); | 175 | static_assert(sizeof(ControllerPadState) == 8, "ControllerPadState is an invalid size"); |