From 7c6d2a3068ebfb65bc06e81325ef166da8ce41a3 Mon Sep 17 00:00:00 2001 From: Narr the Reg Date: Thu, 2 Dec 2021 11:09:44 -0600 Subject: [PATCH] settings: Add Enable SDL Joycon setting --- src/common/settings.h | 1 + src/input_common/drivers/joycon.cpp | 8 +++++-- src/input_common/drivers/sdl_driver.cpp | 8 ++++--- src/yuzu/configuration/config.cpp | 2 ++ .../configure_input_advanced.cpp | 2 ++ .../configuration/configure_input_advanced.ui | 22 ++++++++++++++++--- 6 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/common/settings.h b/src/common/settings.h index 5b34169a8b..3e5fbae5ab 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -559,6 +559,7 @@ struct Values { BasicSetting enable_raw_input{false, "enable_raw_input"}; BasicSetting controller_navigation{true, "controller_navigation"}; + BasicSetting enable_sdl_joycons{false, "enable_sdl_joycons"}; Setting vibration_enabled{true, "vibration_enabled"}; Setting enable_accurate_vibrations{false, "enable_accurate_vibrations"}; diff --git a/src/input_common/drivers/joycon.cpp b/src/input_common/drivers/joycon.cpp index 16d7c79f4d..0708ed1218 100644 --- a/src/input_common/drivers/joycon.cpp +++ b/src/input_common/drivers/joycon.cpp @@ -5,14 +5,18 @@ #include #include "common/param_package.h" -#include "common/settings_input.h" +#include "common/settings.h" #include "common/thread.h" #include "input_common/drivers/joycon.h" namespace InputCommon { Joycons::Joycons(const std::string& input_engine_) : InputEngine(input_engine_) { - LOG_INFO(Input, "JC Adapter Initialization started"); + if (Settings::values.enable_sdl_joycons) { + // Avoid conflicting with SDL driver + return; + } + LOG_INFO(Input, "Joycon driver Initialization started"); const int init_res = SDL_hid_init(); if (init_res == 0) { Setup(); diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp index a5c63e74ac..2453086a91 100644 --- a/src/input_common/drivers/sdl_driver.cpp +++ b/src/input_common/drivers/sdl_driver.cpp @@ -410,9 +410,11 @@ SDLDriver::SDLDriver(std::string input_engine_) : InputEngine(std::move(input_en SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE, "1"); SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); - // Use hidapi driver for joycons. This will allow joycons to be detected as a GameController and - // not a generic one - SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS, "1"); + if (Settings::values.enable_sdl_joycons) { + // Use hidapi driver for joycons. This will allow joycons to be detected as a GameController and + // not a generic one + SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS, "1"); + } // Disable hidapi driver for xbox. Already default on Windows, this causes conflict with native // driver on Linux. diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index ac26b885b4..464c1cad92 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -398,6 +398,7 @@ void Config::ReadControlValues() { #else Settings::values.enable_raw_input = false; #endif + ReadBasicSetting(Settings::values.enable_sdl_joycons); ReadBasicSetting(Settings::values.emulate_analog_keyboard); Settings::values.mouse_panning = false; ReadBasicSetting(Settings::values.mouse_panning_sensitivity); @@ -1042,6 +1043,7 @@ void Config::SaveControlValues() { WriteGlobalSetting(Settings::values.enable_accurate_vibrations); WriteGlobalSetting(Settings::values.motion_enabled); WriteBasicSetting(Settings::values.enable_raw_input); + WriteBasicSetting(Settings::values.enable_sdl_joycons); WriteBasicSetting(Settings::values.keyboard_enabled); WriteBasicSetting(Settings::values.emulate_analog_keyboard); WriteBasicSetting(Settings::values.mouse_panning_sensitivity); diff --git a/src/yuzu/configuration/configure_input_advanced.cpp b/src/yuzu/configuration/configure_input_advanced.cpp index f14bdc831f..8784fb4b5e 100644 --- a/src/yuzu/configuration/configure_input_advanced.cpp +++ b/src/yuzu/configuration/configure_input_advanced.cpp @@ -136,6 +136,7 @@ void ConfigureInputAdvanced::ApplyConfiguration() { Settings::values.enable_udp_controller = ui->enable_udp_controller->isChecked(); Settings::values.controller_navigation = ui->controller_navigation->isChecked(); Settings::values.enable_ring_controller = ui->enable_ring_controller->isChecked(); + Settings::values.enable_sdl_joycons = ui->enable_sdl_joycons->isChecked(); } void ConfigureInputAdvanced::LoadConfiguration() { @@ -169,6 +170,7 @@ void ConfigureInputAdvanced::LoadConfiguration() { ui->enable_udp_controller->setChecked(Settings::values.enable_udp_controller.GetValue()); ui->controller_navigation->setChecked(Settings::values.controller_navigation.GetValue()); ui->enable_ring_controller->setChecked(Settings::values.enable_ring_controller.GetValue()); + ui->enable_sdl_joycons->setChecked(Settings::values.enable_sdl_joycons.GetValue()); UpdateUIEnabled(); } diff --git a/src/yuzu/configuration/configure_input_advanced.ui b/src/yuzu/configuration/configure_input_advanced.ui index 14403cb102..40b318d839 100644 --- a/src/yuzu/configuration/configure_input_advanced.ui +++ b/src/yuzu/configuration/configure_input_advanced.ui @@ -2682,6 +2682,22 @@ + + + Requires restarting yuzu + + + + 0 + 23 + + + + Enable SDL Joycons + + + + @@ -2694,7 +2710,7 @@ - + Mouse sensitivity @@ -2716,14 +2732,14 @@ - + Motion / Touch - + Configure