From 9b1b55f41d7da92efdcec56ef94e05a9ae209f0a Mon Sep 17 00:00:00 2001 From: Florin9doi Date: Sun, 27 Dec 2020 16:51:55 +0200 Subject: [PATCH] Buzz settings --- rpcs3/Emu/Cell/lv2/sys_usbd.cpp | 22 +++++++++++----------- rpcs3/Emu/system_config.h | 1 + rpcs3/Emu/system_config_types.cpp | 15 +++++++++++++++ rpcs3/Emu/system_config_types.h | 7 +++++++ rpcs3/rpcs3qt/emu_settings.cpp | 8 ++++++++ rpcs3/rpcs3qt/emu_settings_type.h | 2 ++ rpcs3/rpcs3qt/settings_dialog.cpp | 3 +++ rpcs3/rpcs3qt/settings_dialog.ui | 11 ++++++++++- rpcs3/rpcs3qt/tooltips.h | 1 + 9 files changed, 58 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/Cell/lv2/sys_usbd.cpp b/rpcs3/Emu/Cell/lv2/sys_usbd.cpp index 2424a362e46e..937df16aa9bd 100644 --- a/rpcs3/Emu/Cell/lv2/sys_usbd.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_usbd.cpp @@ -145,7 +145,6 @@ usb_handler_thread::usb_handler_thread() bool found_skylander = false; bool found_ghltar = false; - bool found_buzz = false; for (ssize_t index = 0; index < ndev; index++) { @@ -199,14 +198,10 @@ usb_handler_thread::usb_handler_thread() check_device(0x044F, 0xB660, 0xB660, "Thrustmaster T500 RS Gear Shift"); // Buzz controllers - if (check_device(0x054C, 0x1000, 0x1040, "buzzer0")) - found_buzz = true; - if (check_device(0x054C, 0x0001, 0x0041, "buzzer1")) - found_buzz = true; - if (check_device(0x054C, 0x0042, 0x0042, "buzzer2")) - found_buzz = true; - if (check_device(0x046D, 0xC220, 0xC220, "buzzer9")) - found_buzz = true; + check_device(0x054C, 0x1000, 0x1040, "buzzer0"); + check_device(0x054C, 0x0001, 0x0041, "buzzer1"); + check_device(0x054C, 0x0042, 0x0042, "buzzer2"); + check_device(0x046D, 0xC220, 0xC220, "buzzer9"); // GCon3 Gun check_device(0x0B9A, 0x0800, 0x0800, "guncon3"); @@ -229,10 +224,15 @@ usb_handler_thread::usb_handler_thread() usb_devices.push_back(std::make_shared()); } - if (!found_buzz) + if (g_cfg.io.buzz == buzz_handler::one_controller || g_cfg.io.buzz == buzz_handler::two_controllers) { - sys_usbd.error("Adding emulated Buzz! buzzer"); + sys_usbd.warning("Adding emulated Buzz! buzzer (1-4 players)"); usb_devices.push_back(std::make_shared(0, 3)); + } + if (g_cfg.io.buzz == buzz_handler::two_controllers) + { + // TODO: Change to 7/8 if a buzz specific configuration window is created or a tab for the 8th player is added + sys_usbd.warning("Adding emulated Buzz! buzzer (5-7 players)"); usb_devices.push_back(std::make_shared(4, 6)); } diff --git a/rpcs3/Emu/system_config.h b/rpcs3/Emu/system_config.h index a95e2a6d33af..7c206e8e19e8 100644 --- a/rpcs3/Emu/system_config.h +++ b/rpcs3/Emu/system_config.h @@ -248,6 +248,7 @@ struct cfg_root : cfg::node cfg::_enum camera{ this, "Camera", camera_handler::null }; cfg::_enum camera_type{ this, "Camera type", fake_camera_type::unknown }; cfg::_enum move{ this, "Move", move_handler::null }; + cfg::_enum buzz{ this, "Buzz emulated controller", buzz_handler::null }; } io{ this }; struct node_sys : cfg::node diff --git a/rpcs3/Emu/system_config_types.cpp b/rpcs3/Emu/system_config_types.cpp index a3fe64a51b8a..4be9b4a58758 100644 --- a/rpcs3/Emu/system_config_types.cpp +++ b/rpcs3/Emu/system_config_types.cpp @@ -355,6 +355,21 @@ void fmt_class_string::format(std::string& out, u64 arg) }); } +template <> +void fmt_class_string::format(std::string& out, u64 arg) +{ + format_enum(out, arg, [](auto value) { + switch (value) + { + case buzz_handler::null: return "Null (use real Buzzers)"; + case buzz_handler::one_controller: return "1 controller (1-4 players)"; + case buzz_handler::two_controllers: return "2 controllers (5-7 players)"; + } + + return unknown; + }); +} + template <> void fmt_class_string::format(std::string& out, u64 arg) { diff --git a/rpcs3/Emu/system_config_types.h b/rpcs3/Emu/system_config_types.h index 65e315bf9d69..b23787619589 100644 --- a/rpcs3/Emu/system_config_types.h +++ b/rpcs3/Emu/system_config_types.h @@ -95,6 +95,13 @@ enum class move_handler mouse, }; +enum class buzz_handler +{ + null, + one_controller, + two_controllers, +}; + enum class microphone_handler { null, diff --git a/rpcs3/rpcs3qt/emu_settings.cpp b/rpcs3/rpcs3qt/emu_settings.cpp index edefcc48c66a..ef68bab36892 100644 --- a/rpcs3/rpcs3qt/emu_settings.cpp +++ b/rpcs3/rpcs3qt/emu_settings.cpp @@ -840,6 +840,14 @@ QString emu_settings::GetLocalizedSetting(const QString& original, emu_settings_ case move_handler::mouse: return tr("Mouse", "Move handler"); } break; + case emu_settings_type::Buzz: + switch (static_cast(index)) + { + case buzz_handler::null: return tr("Null (use real Buzzers)", "Buzz handler"); + case buzz_handler::one_controller: return tr("1 controller (1-4 players)", "Buzz handler"); + case buzz_handler::two_controllers: return tr("2 controllers (5-7 players)", "Buzz handler"); + } + break; case emu_settings_type::InternetStatus: switch (static_cast(index)) { diff --git a/rpcs3/rpcs3qt/emu_settings_type.h b/rpcs3/rpcs3qt/emu_settings_type.h index 9aaefb972a69..7f5b6f47d8a5 100644 --- a/rpcs3/rpcs3qt/emu_settings_type.h +++ b/rpcs3/rpcs3qt/emu_settings_type.h @@ -114,6 +114,7 @@ enum class emu_settings_type Camera, CameraType, Move, + Buzz, // Misc ExitRPCS3OnFinish, @@ -258,6 +259,7 @@ static const QMap settings_location = { emu_settings_type::Camera, { "Input/Output", "Camera"}}, { emu_settings_type::CameraType, { "Input/Output", "Camera type"}}, { emu_settings_type::Move, { "Input/Output", "Move" }}, + { emu_settings_type::Buzz, { "Input/Output", "Buzz emulated controller" }}, // Misc { emu_settings_type::ExitRPCS3OnFinish, { "Miscellaneous", "Exit RPCS3 when process finishes" }}, diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index ee4799e02f0f..4cd5a0708cb8 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -850,6 +850,9 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std m_emu_settings->EnhanceComboBox(ui->moveBox, emu_settings_type::Move); SubscribeTooltip(ui->gb_move_handler, tooltips.settings.move); + m_emu_settings->EnhanceComboBox(ui->buzzBox, emu_settings_type::Buzz); + SubscribeTooltip(ui->gb_buzz_emulated, tooltips.settings.buzz); + // _____ _ _______ _ // / ____| | | |__ __| | | // | (___ _ _ ___| |_ ___ _ __ ___ | | __ _| |__ diff --git a/rpcs3/rpcs3qt/settings_dialog.ui b/rpcs3/rpcs3qt/settings_dialog.ui index 4fdbc604e764..b6d1a6461966 100644 --- a/rpcs3/rpcs3qt/settings_dialog.ui +++ b/rpcs3/rpcs3qt/settings_dialog.ui @@ -1345,7 +1345,16 @@ - + + + Buzz! emulated controller + + + + + + + diff --git a/rpcs3/rpcs3qt/tooltips.h b/rpcs3/rpcs3qt/tooltips.h index aa85572bed94..4586e9edcf3d 100644 --- a/rpcs3/rpcs3qt/tooltips.h +++ b/rpcs3/rpcs3qt/tooltips.h @@ -181,6 +181,7 @@ class Tooltips : public QObject const QString camera = tr("Camera support is not implemented, leave this on null."); const QString camera_type = tr("Camera support is not implemented, leave this on unknown."); const QString move = tr("PlayStation Move support.\nFake: Experimental! This maps Move controls to DS3 controller mappings.\nMouse: Emulate PSMove with Mouse handler."); + const QString buzz = tr("Emulate Buzz! controllers."); // network