diff options
author | bunnei <bunneidev@gmail.com> | 2022-04-22 07:21:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-22 07:21:59 +0200 |
commit | 764e5c7fe50bbbc64898fb657cfc5b1f8360454b (patch) | |
tree | ee42eede68cb935595769104e0b94d55b1530141 /src/input_common/drivers | |
parent | Merge pull request #8222 from german77/sixaxis_test (diff) | |
parent | input_common: Map sticks correctly when mapped sideways (diff) | |
download | yuzu-764e5c7fe50bbbc64898fb657cfc5b1f8360454b.tar yuzu-764e5c7fe50bbbc64898fb657cfc5b1f8360454b.tar.gz yuzu-764e5c7fe50bbbc64898fb657cfc5b1f8360454b.tar.bz2 yuzu-764e5c7fe50bbbc64898fb657cfc5b1f8360454b.tar.lz yuzu-764e5c7fe50bbbc64898fb657cfc5b1f8360454b.tar.xz yuzu-764e5c7fe50bbbc64898fb657cfc5b1f8360454b.tar.zst yuzu-764e5c7fe50bbbc64898fb657cfc5b1f8360454b.zip |
Diffstat (limited to 'src/input_common/drivers')
-rw-r--r-- | src/input_common/drivers/gc_adapter.cpp | 16 | ||||
-rw-r--r-- | src/input_common/drivers/gc_adapter.h | 2 | ||||
-rw-r--r-- | src/input_common/drivers/sdl_driver.cpp | 33 | ||||
-rw-r--r-- | src/input_common/drivers/sdl_driver.h | 2 | ||||
-rw-r--r-- | src/input_common/drivers/udp_client.cpp | 16 | ||||
-rw-r--r-- | src/input_common/drivers/udp_client.h | 2 |
6 files changed, 71 insertions, 0 deletions
diff --git a/src/input_common/drivers/gc_adapter.cpp b/src/input_common/drivers/gc_adapter.cpp index 155caae42..8abd41726 100644 --- a/src/input_common/drivers/gc_adapter.cpp +++ b/src/input_common/drivers/gc_adapter.cpp @@ -524,4 +524,20 @@ Common::Input::ButtonNames GCAdapter::GetUIName(const Common::ParamPackage& para return Common::Input::ButtonNames::Invalid; } +bool GCAdapter::IsStickInverted(const Common::ParamPackage& params) { + if (!params.Has("port")) { + return false; + } + + const auto x_axis = static_cast<PadAxes>(params.Get("axis_x", 0)); + const auto y_axis = static_cast<PadAxes>(params.Get("axis_y", 0)); + if (x_axis != PadAxes::StickY && x_axis != PadAxes::SubstickY) { + return false; + } + if (y_axis != PadAxes::StickX && y_axis != PadAxes::SubstickX) { + return false; + } + return true; +} + } // namespace InputCommon diff --git a/src/input_common/drivers/gc_adapter.h b/src/input_common/drivers/gc_adapter.h index 43ad58c85..894ab65a4 100644 --- a/src/input_common/drivers/gc_adapter.h +++ b/src/input_common/drivers/gc_adapter.h @@ -35,6 +35,8 @@ public: AnalogMapping GetAnalogMappingForDevice(const Common::ParamPackage& params) override; Common::Input::ButtonNames GetUIName(const Common::ParamPackage& params) const override; + bool IsStickInverted(const Common::ParamPackage& params) override; + private: enum class PadButton { Undefined = 0x0000, diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp index b3e4c3f64..a5c63e74a 100644 --- a/src/input_common/drivers/sdl_driver.cpp +++ b/src/input_common/drivers/sdl_driver.cpp @@ -934,4 +934,37 @@ u8 SDLDriver::GetHatButtonId(const std::string& direction_name) const { return direction; } +bool SDLDriver::IsStickInverted(const Common::ParamPackage& params) { + if (!params.Has("guid") || !params.Has("port")) { + return false; + } + const auto joystick = GetSDLJoystickByGUID(params.Get("guid", ""), params.Get("port", 0)); + if (joystick == nullptr) { + return false; + } + auto* controller = joystick->GetSDLGameController(); + if (controller == nullptr) { + return false; + } + + const auto& axis_x = params.Get("axis_x", 0); + const auto& axis_y = params.Get("axis_y", 0); + const auto& binding_left_x = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_LEFTX); + const auto& binding_right_x = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_RIGHTX); + const auto& binding_left_y = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_LEFTY); + const auto& binding_right_y = + SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_RIGHTY); + + if (axis_x != binding_left_y.value.axis && axis_x != binding_right_y.value.axis) { + return false; + } + if (axis_y != binding_left_x.value.axis && axis_y != binding_right_x.value.axis) { + return false; + } + return true; +} + } // namespace InputCommon diff --git a/src/input_common/drivers/sdl_driver.h b/src/input_common/drivers/sdl_driver.h index 4cde3606f..dcd0d1e64 100644 --- a/src/input_common/drivers/sdl_driver.h +++ b/src/input_common/drivers/sdl_driver.h @@ -58,6 +58,8 @@ public: std::string GetHatButtonName(u8 direction_value) const override; u8 GetHatButtonId(const std::string& direction_name) const override; + bool IsStickInverted(const Common::ParamPackage& params) override; + Common::Input::VibrationError SetRumble( const PadIdentifier& identifier, const Common::Input::VibrationStatus& vibration) override; diff --git a/src/input_common/drivers/udp_client.cpp b/src/input_common/drivers/udp_client.cpp index 9780ead10..825262a07 100644 --- a/src/input_common/drivers/udp_client.cpp +++ b/src/input_common/drivers/udp_client.cpp @@ -547,6 +547,22 @@ Common::Input::ButtonNames UDPClient::GetUIName(const Common::ParamPackage& para return Common::Input::ButtonNames::Invalid; } +bool UDPClient::IsStickInverted(const Common::ParamPackage& params) { + if (!params.Has("guid") || !params.Has("port") || !params.Has("pad")) { + return false; + } + + const auto x_axis = static_cast<PadAxes>(params.Get("axis_x", 0)); + const auto y_axis = static_cast<PadAxes>(params.Get("axis_y", 0)); + if (x_axis != PadAxes::LeftStickY && x_axis != PadAxes::RightStickY) { + return false; + } + if (y_axis != PadAxes::LeftStickX && y_axis != PadAxes::RightStickX) { + return false; + } + return true; +} + void TestCommunication(const std::string& host, u16 port, const std::function<void()>& success_callback, const std::function<void()>& failure_callback) { diff --git a/src/input_common/drivers/udp_client.h b/src/input_common/drivers/udp_client.h index c7cc7d846..dece2a45b 100644 --- a/src/input_common/drivers/udp_client.h +++ b/src/input_common/drivers/udp_client.h @@ -64,6 +64,8 @@ public: MotionMapping GetMotionMappingForDevice(const Common::ParamPackage& params) override; Common::Input::ButtonNames GetUIName(const Common::ParamPackage& params) const override; + bool IsStickInverted(const Common::ParamPackage& params) override; + private: enum class PadButton { Undefined = 0x0000, |