diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/service/hid/controllers/npad.cpp | 107 |
1 files changed, 58 insertions, 49 deletions
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp index fb007767d..a03af8df4 100644 --- a/src/core/hle/service/hid/controllers/npad.cpp +++ b/src/core/hle/service/hid/controllers/npad.cpp | |||
| @@ -260,7 +260,7 @@ void Controller_NPad::OnRelease() {} | |||
| 260 | 260 | ||
| 261 | void Controller_NPad::RequestPadStateUpdate(u32 npad_id) { | 261 | void Controller_NPad::RequestPadStateUpdate(u32 npad_id) { |
| 262 | const auto controller_idx = NPadIdToIndex(npad_id); | 262 | const auto controller_idx = NPadIdToIndex(npad_id); |
| 263 | [[maybe_unused]] const auto controller_type = connected_controllers[controller_idx].type; | 263 | const auto controller_type = connected_controllers[controller_idx].type; |
| 264 | if (!connected_controllers[controller_idx].is_connected) { | 264 | if (!connected_controllers[controller_idx].is_connected) { |
| 265 | return; | 265 | return; |
| 266 | } | 266 | } |
| @@ -276,54 +276,63 @@ void Controller_NPad::RequestPadStateUpdate(u32 npad_id) { | |||
| 276 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)]->GetStatus(); | 276 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)]->GetStatus(); |
| 277 | 277 | ||
| 278 | using namespace Settings::NativeButton; | 278 | using namespace Settings::NativeButton; |
| 279 | pad_state.a.Assign(button_state[A - BUTTON_HID_BEGIN]->GetStatus()); | 279 | if (controller_type != NPadControllerType::JoyLeft) { |
| 280 | pad_state.b.Assign(button_state[B - BUTTON_HID_BEGIN]->GetStatus()); | 280 | pad_state.a.Assign(button_state[A - BUTTON_HID_BEGIN]->GetStatus()); |
| 281 | pad_state.x.Assign(button_state[X - BUTTON_HID_BEGIN]->GetStatus()); | 281 | pad_state.b.Assign(button_state[B - BUTTON_HID_BEGIN]->GetStatus()); |
| 282 | pad_state.y.Assign(button_state[Y - BUTTON_HID_BEGIN]->GetStatus()); | 282 | pad_state.x.Assign(button_state[X - BUTTON_HID_BEGIN]->GetStatus()); |
| 283 | pad_state.l_stick.Assign(button_state[LStick - BUTTON_HID_BEGIN]->GetStatus()); | 283 | pad_state.y.Assign(button_state[Y - BUTTON_HID_BEGIN]->GetStatus()); |
| 284 | pad_state.r_stick.Assign(button_state[RStick - BUTTON_HID_BEGIN]->GetStatus()); | 284 | pad_state.r_stick.Assign(button_state[RStick - BUTTON_HID_BEGIN]->GetStatus()); |
| 285 | pad_state.l.Assign(button_state[L - BUTTON_HID_BEGIN]->GetStatus()); | 285 | pad_state.r.Assign(button_state[R - BUTTON_HID_BEGIN]->GetStatus()); |
| 286 | pad_state.r.Assign(button_state[R - BUTTON_HID_BEGIN]->GetStatus()); | 286 | pad_state.zr.Assign(button_state[ZR - BUTTON_HID_BEGIN]->GetStatus()); |
| 287 | pad_state.zl.Assign(button_state[ZL - BUTTON_HID_BEGIN]->GetStatus()); | 287 | pad_state.plus.Assign(button_state[Plus - BUTTON_HID_BEGIN]->GetStatus()); |
| 288 | pad_state.zr.Assign(button_state[ZR - BUTTON_HID_BEGIN]->GetStatus()); | 288 | |
| 289 | pad_state.plus.Assign(button_state[Plus - BUTTON_HID_BEGIN]->GetStatus()); | 289 | pad_state.r_stick_right.Assign( |
| 290 | pad_state.minus.Assign(button_state[Minus - BUTTON_HID_BEGIN]->GetStatus()); | 290 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] |
| 291 | 291 | ->GetAnalogDirectionStatus(Input::AnalogDirection::RIGHT)); | |
| 292 | pad_state.d_left.Assign(button_state[DLeft - BUTTON_HID_BEGIN]->GetStatus()); | 292 | pad_state.r_stick_left.Assign( |
| 293 | pad_state.d_up.Assign(button_state[DUp - BUTTON_HID_BEGIN]->GetStatus()); | 293 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] |
| 294 | pad_state.d_right.Assign(button_state[DRight - BUTTON_HID_BEGIN]->GetStatus()); | 294 | ->GetAnalogDirectionStatus(Input::AnalogDirection::LEFT)); |
| 295 | pad_state.d_down.Assign(button_state[DDown - BUTTON_HID_BEGIN]->GetStatus()); | 295 | pad_state.r_stick_up.Assign( |
| 296 | 296 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | |
| 297 | pad_state.l_stick_right.Assign( | 297 | ->GetAnalogDirectionStatus(Input::AnalogDirection::UP)); |
| 298 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | 298 | pad_state.r_stick_down.Assign( |
| 299 | Input::AnalogDirection::RIGHT)); | 299 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] |
| 300 | pad_state.l_stick_left.Assign( | 300 | ->GetAnalogDirectionStatus(Input::AnalogDirection::DOWN)); |
| 301 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | 301 | rstick_entry.x = static_cast<s32>(stick_r_x_f * HID_JOYSTICK_MAX); |
| 302 | Input::AnalogDirection::LEFT)); | 302 | rstick_entry.y = static_cast<s32>(stick_r_y_f * HID_JOYSTICK_MAX); |
| 303 | pad_state.l_stick_up.Assign( | 303 | } |
| 304 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | 304 | |
| 305 | Input::AnalogDirection::UP)); | 305 | if (controller_type != NPadControllerType::JoyRight) { |
| 306 | pad_state.l_stick_down.Assign( | 306 | pad_state.d_left.Assign(button_state[DLeft - BUTTON_HID_BEGIN]->GetStatus()); |
| 307 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)]->GetAnalogDirectionStatus( | 307 | pad_state.d_up.Assign(button_state[DUp - BUTTON_HID_BEGIN]->GetStatus()); |
| 308 | Input::AnalogDirection::DOWN)); | 308 | pad_state.d_right.Assign(button_state[DRight - BUTTON_HID_BEGIN]->GetStatus()); |
| 309 | 309 | pad_state.d_down.Assign(button_state[DDown - BUTTON_HID_BEGIN]->GetStatus()); | |
| 310 | pad_state.r_stick_right.Assign( | 310 | pad_state.l_stick.Assign(button_state[LStick - BUTTON_HID_BEGIN]->GetStatus()); |
| 311 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | 311 | pad_state.l.Assign(button_state[L - BUTTON_HID_BEGIN]->GetStatus()); |
| 312 | ->GetAnalogDirectionStatus(Input::AnalogDirection::RIGHT)); | 312 | pad_state.zl.Assign(button_state[ZL - BUTTON_HID_BEGIN]->GetStatus()); |
| 313 | pad_state.r_stick_left.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | 313 | pad_state.minus.Assign(button_state[Minus - BUTTON_HID_BEGIN]->GetStatus()); |
| 314 | ->GetAnalogDirectionStatus(Input::AnalogDirection::LEFT)); | 314 | |
| 315 | pad_state.r_stick_up.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | 315 | pad_state.l_stick_right.Assign( |
| 316 | ->GetAnalogDirectionStatus(Input::AnalogDirection::UP)); | 316 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)] |
| 317 | pad_state.r_stick_down.Assign(analog_state[static_cast<std::size_t>(JoystickId::Joystick_Right)] | 317 | ->GetAnalogDirectionStatus(Input::AnalogDirection::RIGHT)); |
| 318 | ->GetAnalogDirectionStatus(Input::AnalogDirection::DOWN)); | 318 | pad_state.l_stick_left.Assign( |
| 319 | 319 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)] | |
| 320 | pad_state.left_sl.Assign(button_state[SL - BUTTON_HID_BEGIN]->GetStatus()); | 320 | ->GetAnalogDirectionStatus(Input::AnalogDirection::LEFT)); |
| 321 | pad_state.left_sr.Assign(button_state[SR - BUTTON_HID_BEGIN]->GetStatus()); | 321 | pad_state.l_stick_up.Assign( |
| 322 | 322 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)] | |
| 323 | lstick_entry.x = static_cast<s32>(stick_l_x_f * HID_JOYSTICK_MAX); | 323 | ->GetAnalogDirectionStatus(Input::AnalogDirection::UP)); |
| 324 | lstick_entry.y = static_cast<s32>(stick_l_y_f * HID_JOYSTICK_MAX); | 324 | pad_state.l_stick_down.Assign( |
| 325 | rstick_entry.x = static_cast<s32>(stick_r_x_f * HID_JOYSTICK_MAX); | 325 | analog_state[static_cast<std::size_t>(JoystickId::Joystick_Left)] |
| 326 | rstick_entry.y = static_cast<s32>(stick_r_y_f * HID_JOYSTICK_MAX); | 326 | ->GetAnalogDirectionStatus(Input::AnalogDirection::DOWN)); |
| 327 | lstick_entry.x = static_cast<s32>(stick_l_x_f * HID_JOYSTICK_MAX); | ||
| 328 | lstick_entry.y = static_cast<s32>(stick_l_y_f * HID_JOYSTICK_MAX); | ||
| 329 | } | ||
| 330 | |||
| 331 | if (controller_type == NPadControllerType::JoyLeft || | ||
| 332 | controller_type == NPadControllerType::JoyRight) { | ||
| 333 | pad_state.left_sl.Assign(button_state[SL - BUTTON_HID_BEGIN]->GetStatus()); | ||
| 334 | pad_state.left_sr.Assign(button_state[SR - BUTTON_HID_BEGIN]->GetStatus()); | ||
| 335 | } | ||
| 327 | } | 336 | } |
| 328 | 337 | ||
| 329 | void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data, | 338 | void Controller_NPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data, |