summaryrefslogtreecommitdiff
path: root/src/input_common/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'src/input_common/drivers')
-rw-r--r--src/input_common/drivers/gc_adapter.cpp16
-rw-r--r--src/input_common/drivers/gc_adapter.h2
-rw-r--r--src/input_common/drivers/sdl_driver.cpp33
-rw-r--r--src/input_common/drivers/sdl_driver.h2
-rw-r--r--src/input_common/drivers/udp_client.cpp16
-rw-r--r--src/input_common/drivers/udp_client.h2
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
524 return Common::Input::ButtonNames::Invalid; 524 return Common::Input::ButtonNames::Invalid;
525} 525}
526 526
527bool GCAdapter::IsStickInverted(const Common::ParamPackage& params) {
528 if (!params.Has("port")) {
529 return false;
530 }
531
532 const auto x_axis = static_cast<PadAxes>(params.Get("axis_x", 0));
533 const auto y_axis = static_cast<PadAxes>(params.Get("axis_y", 0));
534 if (x_axis != PadAxes::StickY && x_axis != PadAxes::SubstickY) {
535 return false;
536 }
537 if (y_axis != PadAxes::StickX && y_axis != PadAxes::SubstickX) {
538 return false;
539 }
540 return true;
541}
542
527} // namespace InputCommon 543} // 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:
35 AnalogMapping GetAnalogMappingForDevice(const Common::ParamPackage& params) override; 35 AnalogMapping GetAnalogMappingForDevice(const Common::ParamPackage& params) override;
36 Common::Input::ButtonNames GetUIName(const Common::ParamPackage& params) const override; 36 Common::Input::ButtonNames GetUIName(const Common::ParamPackage& params) const override;
37 37
38 bool IsStickInverted(const Common::ParamPackage& params) override;
39
38private: 40private:
39 enum class PadButton { 41 enum class PadButton {
40 Undefined = 0x0000, 42 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 {
934 return direction; 934 return direction;
935} 935}
936 936
937bool SDLDriver::IsStickInverted(const Common::ParamPackage& params) {
938 if (!params.Has("guid") || !params.Has("port")) {
939 return false;
940 }
941 const auto joystick = GetSDLJoystickByGUID(params.Get("guid", ""), params.Get("port", 0));
942 if (joystick == nullptr) {
943 return false;
944 }
945 auto* controller = joystick->GetSDLGameController();
946 if (controller == nullptr) {
947 return false;
948 }
949
950 const auto& axis_x = params.Get("axis_x", 0);
951 const auto& axis_y = params.Get("axis_y", 0);
952 const auto& binding_left_x =
953 SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_LEFTX);
954 const auto& binding_right_x =
955 SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_RIGHTX);
956 const auto& binding_left_y =
957 SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_LEFTY);
958 const auto& binding_right_y =
959 SDL_GameControllerGetBindForAxis(controller, SDL_CONTROLLER_AXIS_RIGHTY);
960
961 if (axis_x != binding_left_y.value.axis && axis_x != binding_right_y.value.axis) {
962 return false;
963 }
964 if (axis_y != binding_left_x.value.axis && axis_y != binding_right_x.value.axis) {
965 return false;
966 }
967 return true;
968}
969
937} // namespace InputCommon 970} // 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:
58 std::string GetHatButtonName(u8 direction_value) const override; 58 std::string GetHatButtonName(u8 direction_value) const override;
59 u8 GetHatButtonId(const std::string& direction_name) const override; 59 u8 GetHatButtonId(const std::string& direction_name) const override;
60 60
61 bool IsStickInverted(const Common::ParamPackage& params) override;
62
61 Common::Input::VibrationError SetRumble( 63 Common::Input::VibrationError SetRumble(
62 const PadIdentifier& identifier, const Common::Input::VibrationStatus& vibration) override; 64 const PadIdentifier& identifier, const Common::Input::VibrationStatus& vibration) override;
63 65
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
547 return Common::Input::ButtonNames::Invalid; 547 return Common::Input::ButtonNames::Invalid;
548} 548}
549 549
550bool UDPClient::IsStickInverted(const Common::ParamPackage& params) {
551 if (!params.Has("guid") || !params.Has("port") || !params.Has("pad")) {
552 return false;
553 }
554
555 const auto x_axis = static_cast<PadAxes>(params.Get("axis_x", 0));
556 const auto y_axis = static_cast<PadAxes>(params.Get("axis_y", 0));
557 if (x_axis != PadAxes::LeftStickY && x_axis != PadAxes::RightStickY) {
558 return false;
559 }
560 if (y_axis != PadAxes::LeftStickX && y_axis != PadAxes::RightStickX) {
561 return false;
562 }
563 return true;
564}
565
550void TestCommunication(const std::string& host, u16 port, 566void TestCommunication(const std::string& host, u16 port,
551 const std::function<void()>& success_callback, 567 const std::function<void()>& success_callback,
552 const std::function<void()>& failure_callback) { 568 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:
64 MotionMapping GetMotionMappingForDevice(const Common::ParamPackage& params) override; 64 MotionMapping GetMotionMappingForDevice(const Common::ParamPackage& params) override;
65 Common::Input::ButtonNames GetUIName(const Common::ParamPackage& params) const override; 65 Common::Input::ButtonNames GetUIName(const Common::ParamPackage& params) const override;
66 66
67 bool IsStickInverted(const Common::ParamPackage& params) override;
68
67private: 69private:
68 enum class PadButton { 70 enum class PadButton {
69 Undefined = 0x0000, 71 Undefined = 0x0000,