diff options
| author | 2022-12-20 12:45:54 -0600 | |
|---|---|---|
| committer | 2023-01-19 18:05:20 -0600 | |
| commit | 2d802893e706c4ce7fd6f320db0eed2bf90b2d45 (patch) | |
| tree | 32368e503159fc82cd7362ef37eec94b9a5b3bbe | |
| parent | input_common: Initial skeleton for custom joycon driver (diff) | |
| download | yuzu-2d802893e706c4ce7fd6f320db0eed2bf90b2d45.tar.gz yuzu-2d802893e706c4ce7fd6f320db0eed2bf90b2d45.tar.xz yuzu-2d802893e706c4ce7fd6f320db0eed2bf90b2d45.zip | |
input_common: Disable SDL driver with switch controllers
| -rw-r--r-- | src/common/settings.h | 1 | ||||
| -rw-r--r-- | src/input_common/drivers/joycon.cpp | 4 | ||||
| -rw-r--r-- | src/input_common/drivers/sdl_driver.cpp | 19 | ||||
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_advanced.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_advanced.ui | 22 |
6 files changed, 44 insertions, 6 deletions
diff --git a/src/common/settings.h b/src/common/settings.h index 80b2eeabc..4b4da4da2 100644 --- a/src/common/settings.h +++ b/src/common/settings.h | |||
| @@ -483,6 +483,7 @@ struct Values { | |||
| 483 | 483 | ||
| 484 | Setting<bool> enable_raw_input{false, "enable_raw_input"}; | 484 | Setting<bool> enable_raw_input{false, "enable_raw_input"}; |
| 485 | Setting<bool> controller_navigation{true, "controller_navigation"}; | 485 | Setting<bool> controller_navigation{true, "controller_navigation"}; |
| 486 | Setting<bool> enable_joycon_driver{true, "enable_joycon_driver"}; | ||
| 486 | 487 | ||
| 487 | SwitchableSetting<bool> vibration_enabled{true, "vibration_enabled"}; | 488 | SwitchableSetting<bool> vibration_enabled{true, "vibration_enabled"}; |
| 488 | SwitchableSetting<bool> enable_accurate_vibrations{false, "enable_accurate_vibrations"}; | 489 | SwitchableSetting<bool> enable_accurate_vibrations{false, "enable_accurate_vibrations"}; |
diff --git a/src/input_common/drivers/joycon.cpp b/src/input_common/drivers/joycon.cpp index eab10d11c..1fca11d34 100644 --- a/src/input_common/drivers/joycon.cpp +++ b/src/input_common/drivers/joycon.cpp | |||
| @@ -13,6 +13,10 @@ | |||
| 13 | namespace InputCommon { | 13 | namespace InputCommon { |
| 14 | 14 | ||
| 15 | Joycons::Joycons(const std::string& input_engine_) : InputEngine(input_engine_) { | 15 | Joycons::Joycons(const std::string& input_engine_) : InputEngine(input_engine_) { |
| 16 | // Avoid conflicting with SDL driver | ||
| 17 | if (!Settings::values.enable_joycon_driver) { | ||
| 18 | return; | ||
| 19 | } | ||
| 16 | LOG_INFO(Input, "Joycon driver Initialization started"); | 20 | LOG_INFO(Input, "Joycon driver Initialization started"); |
| 17 | const int init_res = SDL_hid_init(); | 21 | const int init_res = SDL_hid_init(); |
| 18 | if (init_res == 0) { | 22 | if (init_res == 0) { |
diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp index 4818bb744..c9496a0d8 100644 --- a/src/input_common/drivers/sdl_driver.cpp +++ b/src/input_common/drivers/sdl_driver.cpp | |||
| @@ -318,6 +318,14 @@ void SDLDriver::InitJoystick(int joystick_index) { | |||
| 318 | 318 | ||
| 319 | const auto guid = GetGUID(sdl_joystick); | 319 | const auto guid = GetGUID(sdl_joystick); |
| 320 | 320 | ||
| 321 | if (Settings::values.enable_joycon_driver) { | ||
| 322 | if (guid.uuid[5] == 0x05 && guid.uuid[4] == 0x7e) { | ||
| 323 | LOG_ERROR(Input, "Device black listed {}", joystick_index); | ||
| 324 | SDL_JoystickClose(sdl_joystick); | ||
| 325 | return; | ||
| 326 | } | ||
| 327 | } | ||
| 328 | |||
| 321 | std::scoped_lock lock{joystick_map_mutex}; | 329 | std::scoped_lock lock{joystick_map_mutex}; |
| 322 | if (joystick_map.find(guid) == joystick_map.end()) { | 330 | if (joystick_map.find(guid) == joystick_map.end()) { |
| 323 | auto joystick = std::make_shared<SDLJoystick>(guid, 0, sdl_joystick, sdl_gamecontroller); | 331 | auto joystick = std::make_shared<SDLJoystick>(guid, 0, sdl_joystick, sdl_gamecontroller); |
| @@ -440,9 +448,14 @@ SDLDriver::SDLDriver(std::string input_engine_) : InputEngine(std::move(input_en | |||
| 440 | SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE, "1"); | 448 | SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE, "1"); |
| 441 | SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); | 449 | SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); |
| 442 | 450 | ||
| 443 | // Use hidapi driver for joycons. This will allow joycons to be detected as a GameController and | 451 | // Disable hidapi drivers for switch controllers when the custom joycon driver is enabled |
| 444 | // not a generic one | 452 | if (Settings::values.enable_joycon_driver) { |
| 445 | SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS, "1"); | 453 | SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS, "0"); |
| 454 | SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_SWITCH, "0"); | ||
| 455 | } else { | ||
| 456 | SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS, "1"); | ||
| 457 | SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_SWITCH, "1"); | ||
| 458 | } | ||
| 446 | 459 | ||
| 447 | // Disable hidapi driver for xbox. Already default on Windows, this causes conflict with native | 460 | // Disable hidapi driver for xbox. Already default on Windows, this causes conflict with native |
| 448 | // driver on Linux. | 461 | // driver on Linux. |
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 0db62baa3..d8b26ebd8 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp | |||
| @@ -440,6 +440,7 @@ void Config::ReadControlValues() { | |||
| 440 | ReadBasicSetting(Settings::values.emulate_analog_keyboard); | 440 | ReadBasicSetting(Settings::values.emulate_analog_keyboard); |
| 441 | Settings::values.mouse_panning = false; | 441 | Settings::values.mouse_panning = false; |
| 442 | ReadBasicSetting(Settings::values.mouse_panning_sensitivity); | 442 | ReadBasicSetting(Settings::values.mouse_panning_sensitivity); |
| 443 | ReadBasicSetting(Settings::values.enable_joycon_driver); | ||
| 443 | 444 | ||
| 444 | ReadBasicSetting(Settings::values.tas_enable); | 445 | ReadBasicSetting(Settings::values.tas_enable); |
| 445 | ReadBasicSetting(Settings::values.tas_loop); | 446 | ReadBasicSetting(Settings::values.tas_loop); |
| @@ -1139,6 +1140,7 @@ void Config::SaveControlValues() { | |||
| 1139 | WriteGlobalSetting(Settings::values.enable_accurate_vibrations); | 1140 | WriteGlobalSetting(Settings::values.enable_accurate_vibrations); |
| 1140 | WriteGlobalSetting(Settings::values.motion_enabled); | 1141 | WriteGlobalSetting(Settings::values.motion_enabled); |
| 1141 | WriteBasicSetting(Settings::values.enable_raw_input); | 1142 | WriteBasicSetting(Settings::values.enable_raw_input); |
| 1143 | WriteBasicSetting(Settings::values.enable_joycon_driver); | ||
| 1142 | WriteBasicSetting(Settings::values.keyboard_enabled); | 1144 | WriteBasicSetting(Settings::values.keyboard_enabled); |
| 1143 | WriteBasicSetting(Settings::values.emulate_analog_keyboard); | 1145 | WriteBasicSetting(Settings::values.emulate_analog_keyboard); |
| 1144 | WriteBasicSetting(Settings::values.mouse_panning_sensitivity); | 1146 | 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 235b813d9..77b976e74 100644 --- a/src/yuzu/configuration/configure_input_advanced.cpp +++ b/src/yuzu/configuration/configure_input_advanced.cpp | |||
| @@ -138,6 +138,7 @@ void ConfigureInputAdvanced::ApplyConfiguration() { | |||
| 138 | Settings::values.controller_navigation = ui->controller_navigation->isChecked(); | 138 | Settings::values.controller_navigation = ui->controller_navigation->isChecked(); |
| 139 | Settings::values.enable_ring_controller = ui->enable_ring_controller->isChecked(); | 139 | Settings::values.enable_ring_controller = ui->enable_ring_controller->isChecked(); |
| 140 | Settings::values.enable_ir_sensor = ui->enable_ir_sensor->isChecked(); | 140 | Settings::values.enable_ir_sensor = ui->enable_ir_sensor->isChecked(); |
| 141 | Settings::values.enable_joycon_driver = ui->enable_joycon_driver->isChecked(); | ||
| 141 | } | 142 | } |
| 142 | 143 | ||
| 143 | void ConfigureInputAdvanced::LoadConfiguration() { | 144 | void ConfigureInputAdvanced::LoadConfiguration() { |
| @@ -172,6 +173,7 @@ void ConfigureInputAdvanced::LoadConfiguration() { | |||
| 172 | ui->controller_navigation->setChecked(Settings::values.controller_navigation.GetValue()); | 173 | ui->controller_navigation->setChecked(Settings::values.controller_navigation.GetValue()); |
| 173 | ui->enable_ring_controller->setChecked(Settings::values.enable_ring_controller.GetValue()); | 174 | ui->enable_ring_controller->setChecked(Settings::values.enable_ring_controller.GetValue()); |
| 174 | ui->enable_ir_sensor->setChecked(Settings::values.enable_ir_sensor.GetValue()); | 175 | ui->enable_ir_sensor->setChecked(Settings::values.enable_ir_sensor.GetValue()); |
| 176 | ui->enable_joycon_driver->setChecked(Settings::values.enable_joycon_driver.GetValue()); | ||
| 175 | 177 | ||
| 176 | UpdateUIEnabled(); | 178 | UpdateUIEnabled(); |
| 177 | } | 179 | } |
diff --git a/src/yuzu/configuration/configure_input_advanced.ui b/src/yuzu/configuration/configure_input_advanced.ui index fac8cf827..75d96d3ab 100644 --- a/src/yuzu/configuration/configure_input_advanced.ui +++ b/src/yuzu/configuration/configure_input_advanced.ui | |||
| @@ -2696,6 +2696,22 @@ | |||
| 2696 | </widget> | 2696 | </widget> |
| 2697 | </item> | 2697 | </item> |
| 2698 | <item row="5" column="0"> | 2698 | <item row="5" column="0"> |
| 2699 | <widget class="QCheckBox" name="enable_joycon_driver"> | ||
| 2700 | <property name="toolTip"> | ||
| 2701 | <string>Requires restarting yuzu</string> | ||
| 2702 | </property> | ||
| 2703 | <property name="minimumSize"> | ||
| 2704 | <size> | ||
| 2705 | <width>0</width> | ||
| 2706 | <height>23</height> | ||
| 2707 | </size> | ||
| 2708 | </property> | ||
| 2709 | <property name="text"> | ||
| 2710 | <string>Enable direct JoyCon driver</string> | ||
| 2711 | </property> | ||
| 2712 | </widget> | ||
| 2713 | </item> | ||
| 2714 | <item row="6" column="0"> | ||
| 2699 | <widget class="QCheckBox" name="mouse_panning"> | 2715 | <widget class="QCheckBox" name="mouse_panning"> |
| 2700 | <property name="minimumSize"> | 2716 | <property name="minimumSize"> |
| 2701 | <size> | 2717 | <size> |
| @@ -2708,7 +2724,7 @@ | |||
| 2708 | </property> | 2724 | </property> |
| 2709 | </widget> | 2725 | </widget> |
| 2710 | </item> | 2726 | </item> |
| 2711 | <item row="5" column="2"> | 2727 | <item row="6" column="2"> |
| 2712 | <widget class="QSpinBox" name="mouse_panning_sensitivity"> | 2728 | <widget class="QSpinBox" name="mouse_panning_sensitivity"> |
| 2713 | <property name="toolTip"> | 2729 | <property name="toolTip"> |
| 2714 | <string>Mouse sensitivity</string> | 2730 | <string>Mouse sensitivity</string> |
| @@ -2730,14 +2746,14 @@ | |||
| 2730 | </property> | 2746 | </property> |
| 2731 | </widget> | 2747 | </widget> |
| 2732 | </item> | 2748 | </item> |
| 2733 | <item row="6" column="0"> | 2749 | <item row="7" column="0"> |
| 2734 | <widget class="QLabel" name="motion_touch"> | 2750 | <widget class="QLabel" name="motion_touch"> |
| 2735 | <property name="text"> | 2751 | <property name="text"> |
| 2736 | <string>Motion / Touch</string> | 2752 | <string>Motion / Touch</string> |
| 2737 | </property> | 2753 | </property> |
| 2738 | </widget> | 2754 | </widget> |
| 2739 | </item> | 2755 | </item> |
| 2740 | <item row="6" column="2"> | 2756 | <item row="7" column="2"> |
| 2741 | <widget class="QPushButton" name="buttonMotionTouch"> | 2757 | <widget class="QPushButton" name="buttonMotionTouch"> |
| 2742 | <property name="text"> | 2758 | <property name="text"> |
| 2743 | <string>Configure</string> | 2759 | <string>Configure</string> |