diff --git a/rpcs3/Emu/Cell/Modules/cellGem.cpp b/rpcs3/Emu/Cell/Modules/cellGem.cpp index ab4c3e27a1..29943fc30e 100644 --- a/rpcs3/Emu/Cell/Modules/cellGem.cpp +++ b/rpcs3/Emu/Cell/Modules/cellGem.cpp @@ -134,6 +134,8 @@ using gun_thread = named_thread; #endif +cfg_gems g_cfg_gem; + struct gem_config_data { public: @@ -141,7 +143,6 @@ public: static constexpr auto thread_name = "Gem Thread"sv; - cfg_gems gem_cfg; atomic_t state = 0; struct gem_color @@ -290,7 +291,7 @@ public: gem_config_data() { - if (!gem_cfg.load()) + if (!g_cfg_gem.load()) { cellGem.notice("Could not load gem config. Using defaults."); } @@ -327,7 +328,7 @@ public: { save(ar); - if (!ar.is_writing() && !gem_cfg.load()) + if (!ar.is_writing() && !g_cfg_gem.load()) { cellGem.notice("Could not load gem config. Using defaults."); } @@ -648,8 +649,7 @@ static void ds3_input_to_pad(const u32 port_no, be_t& digital_buttons, be_t return; } - const auto& gem = g_fxo->get(); - const auto& cfg = ::at32(gem.gem_cfg.players, port_no); + const auto& cfg = ::at32(g_cfg_gem.players, port_no); for (const Button& button : pad->m_buttons) { diff --git a/rpcs3/Emu/Cell/lv2/sys_usbd.cpp b/rpcs3/Emu/Cell/lv2/sys_usbd.cpp index d73c58e567..55f60079d6 100644 --- a/rpcs3/Emu/Cell/lv2/sys_usbd.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_usbd.cpp @@ -18,17 +18,26 @@ #include "Emu/Io/Skylander.h" #include "Emu/Io/Infinity.h" #include "Emu/Io/GHLtar.h" +#include "Emu/Io/ghltar_config.h" #include "Emu/Io/Buzz.h" +#include "Emu/Io/buzz_config.h" #include "Emu/Io/Turntable.h" +#include "Emu/Io/turntable_config.h" #include "Emu/Io/RB3MidiKeyboard.h" #include "Emu/Io/RB3MidiGuitar.h" #include "Emu/Io/usio.h" +#include "Emu/Io/usio_config.h" #include "Emu/Io/midi_config_types.h" #include LOG_CHANNEL(sys_usbd); +cfg_buzz g_cfg_buzz; +cfg_ghltars g_cfg_ghltar; +cfg_turntables g_cfg_turntable; +cfg_usios g_cfg_usio; + template <> void fmt_class_string::format(std::string& out, u64 arg) { @@ -314,6 +323,11 @@ usb_handler_thread::usb_handler_thread() if (!found_usio && !found_h050) // Only one of these two IO boards should be present at the same time; otherwise, an exception will be thrown by the game. { + if (!g_cfg_usio.load()) + { + sys_usbd.notice("Could not load usio config. Using defaults."); + } + sys_usbd.notice("Adding emulated v406 usio"); usb_devices.push_back(std::make_shared(get_new_location())); } @@ -342,6 +356,11 @@ usb_handler_thread::usb_handler_thread() if (g_cfg.io.ghltar == ghltar_handler::one_controller || g_cfg.io.ghltar == ghltar_handler::two_controllers) { + if (!g_cfg_ghltar.load()) + { + sys_usbd.notice("Could not load ghltar config. Using defaults."); + } + sys_usbd.notice("Adding emulated GHLtar (1 player)"); usb_devices.push_back(std::make_shared(0, get_new_location())); } @@ -353,6 +372,11 @@ usb_handler_thread::usb_handler_thread() if (g_cfg.io.turntable == turntable_handler::one_controller || g_cfg.io.turntable == turntable_handler::two_controllers) { + if (!g_cfg_turntable.load()) + { + sys_usbd.notice("Could not load turntable config. Using defaults."); + } + sys_usbd.notice("Adding emulated turntable (1 player)"); usb_devices.push_back(std::make_shared(0, get_new_location())); } @@ -364,6 +388,11 @@ usb_handler_thread::usb_handler_thread() if (g_cfg.io.buzz == buzz_handler::one_controller || g_cfg.io.buzz == buzz_handler::two_controllers) { + if (!g_cfg_buzz.load()) + { + sys_usbd.notice("Could not load buzz config. Using defaults."); + } + sys_usbd.notice("Adding emulated Buzz! buzzer (1-4 players)"); usb_devices.push_back(std::make_shared(0, 3, get_new_location())); } diff --git a/rpcs3/Emu/Io/Buzz.cpp b/rpcs3/Emu/Io/Buzz.cpp index a8e4363e63..f4532779ae 100644 --- a/rpcs3/Emu/Io/Buzz.cpp +++ b/rpcs3/Emu/Io/Buzz.cpp @@ -3,6 +3,7 @@ #include "stdafx.h" #include "Buzz.h" #include "Emu/Cell/lv2/sys_usbd.h" +#include "Emu/Io/buzz_config.h" #include "Input/pad_thread.h" LOG_CHANNEL(buzz_log, "BUZZ"); @@ -17,11 +18,6 @@ usb_device_buzz::usb_device_buzz(u32 first_controller, u32 last_controller, cons config0.add_node(UsbDescriptorNode(USB_DESCRIPTOR_INTERFACE, UsbDeviceInterface{0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00})); config0.add_node(UsbDescriptorNode(USB_DESCRIPTOR_HID, UsbDeviceHID{0x0111, 0x33, 0x01, 0x22, 0x004e})); config0.add_node(UsbDescriptorNode(USB_DESCRIPTOR_ENDPOINT, UsbDeviceEndpoint{0x81, 0x03, 0x0008, 0x0A})); - - if (!m_cfg.load()) - { - buzz_log.notice("Could not load buzz config. Using defaults."); - } } usb_device_buzz::~usb_device_buzz() @@ -77,12 +73,12 @@ void usb_device_buzz::interrupt_transfer(u32 buf_size, u8* buf, u32 /*endpoint*/ const auto handler = pad::get_current_handler(); const auto& pads = handler->GetPads(); ensure(pads.size() > m_last_controller); - ensure(m_cfg.players.size() > m_last_controller); + ensure(g_cfg_buzz.players.size() > m_last_controller); for (u32 i = m_first_controller, index = 0; i <= m_last_controller; i++, index++) { const auto& pad = pads[i]; - const cfg_buzzer* cfg = m_cfg.players[i]; + const cfg_buzzer* cfg = g_cfg_buzz.players[i]; if (!(pad->m_port_status & CELL_PAD_STATUS_CONNECTED)) { diff --git a/rpcs3/Emu/Io/Buzz.h b/rpcs3/Emu/Io/Buzz.h index 42c1b9588c..0515dbac71 100644 --- a/rpcs3/Emu/Io/Buzz.h +++ b/rpcs3/Emu/Io/Buzz.h @@ -1,7 +1,6 @@ #pragma once #include "Emu/Io/usb_device.h" -#include "Emu/Io/buzz_config.h" class usb_device_buzz : public usb_device_emulated { @@ -15,5 +14,4 @@ public: private: u32 m_first_controller; u32 m_last_controller; - cfg_buzz m_cfg; }; diff --git a/rpcs3/Emu/Io/GHLtar.cpp b/rpcs3/Emu/Io/GHLtar.cpp index 281376711d..3da1753e6e 100644 --- a/rpcs3/Emu/Io/GHLtar.cpp +++ b/rpcs3/Emu/Io/GHLtar.cpp @@ -3,6 +3,7 @@ #include "stdafx.h" #include "GHLtar.h" #include "Emu/Cell/lv2/sys_usbd.h" +#include "Emu/Io/ghltar_config.h" #include "Input/pad_thread.h" LOG_CHANNEL(ghltar_log, "GHLTAR"); @@ -16,11 +17,6 @@ usb_device_ghltar::usb_device_ghltar(u32 controller_index, const std::arrayGetPads(), m_controller_index); - const auto& cfg = ::at32(m_cfg.players, m_controller_index); + const auto& cfg = ::at32(g_cfg_ghltar.players, m_controller_index); if (!(pad->m_port_status & CELL_PAD_STATUS_CONNECTED)) { diff --git a/rpcs3/Emu/Io/GHLtar.h b/rpcs3/Emu/Io/GHLtar.h index e09e3d08bf..b75fcc8df9 100644 --- a/rpcs3/Emu/Io/GHLtar.h +++ b/rpcs3/Emu/Io/GHLtar.h @@ -1,7 +1,6 @@ #pragma once #include "Emu/Io/usb_device.h" -#include "Emu/Io/ghltar_config.h" class usb_device_ghltar : public usb_device_emulated { @@ -14,5 +13,4 @@ public: private: u32 m_controller_index; - cfg_ghltars m_cfg; }; diff --git a/rpcs3/Emu/Io/Turntable.cpp b/rpcs3/Emu/Io/Turntable.cpp index 14c663ec60..a934fd6795 100644 --- a/rpcs3/Emu/Io/Turntable.cpp +++ b/rpcs3/Emu/Io/Turntable.cpp @@ -3,6 +3,7 @@ #include "stdafx.h" #include "Turntable.h" #include "Emu/Cell/lv2/sys_usbd.h" +#include "Emu/Io/turntable_config.h" #include "Input/pad_thread.h" LOG_CHANNEL(turntable_log, "TURN"); @@ -16,11 +17,6 @@ usb_device_turntable::usb_device_turntable(u32 controller_index, const std::arra config0.add_node(UsbDescriptorNode(USB_DESCRIPTOR_HID, UsbDeviceHID{0x0110, 0x00, 0x01, 0x22, 0x0089})); config0.add_node(UsbDescriptorNode(USB_DESCRIPTOR_ENDPOINT, UsbDeviceEndpoint{0x81, 0x03, 0x0040, 0x0a})); config0.add_node(UsbDescriptorNode(USB_DESCRIPTOR_ENDPOINT, UsbDeviceEndpoint{0x02, 0x03, 0x0040, 0x0a})); - - if (!m_cfg.load()) - { - turntable_log.notice("Could not load turntable config. Using defaults."); - } } usb_device_turntable::~usb_device_turntable() @@ -128,7 +124,7 @@ void usb_device_turntable::interrupt_transfer(u32 buf_size, u8* buf, u32 /*endpo const auto handler = pad::get_current_handler(); const auto& pads = handler->GetPads(); const auto& pad = ::at32(pads, m_controller_index); - const auto& cfg = ::at32(m_cfg.players, m_controller_index); + const auto& cfg = ::at32(g_cfg_turntable.players, m_controller_index); if (!(pad->m_port_status & CELL_PAD_STATUS_CONNECTED)) return; diff --git a/rpcs3/Emu/Io/Turntable.h b/rpcs3/Emu/Io/Turntable.h index 49c8de4e1e..7ae0f51ead 100644 --- a/rpcs3/Emu/Io/Turntable.h +++ b/rpcs3/Emu/Io/Turntable.h @@ -1,7 +1,6 @@ #pragma once #include "Emu/Io/usb_device.h" -#include "Emu/Io/turntable_config.h" class usb_device_turntable : public usb_device_emulated { @@ -14,5 +13,4 @@ public: private: u32 m_controller_index; - cfg_turntables m_cfg; }; diff --git a/rpcs3/Emu/Io/buzz_config.h b/rpcs3/Emu/Io/buzz_config.h index b0150110b9..44d64e71b5 100644 --- a/rpcs3/Emu/Io/buzz_config.h +++ b/rpcs3/Emu/Io/buzz_config.h @@ -28,3 +28,5 @@ struct cfg_buzz final : public emulated_pads_config { cfg_buzz() : emulated_pads_config("buzz") {}; }; + +extern cfg_buzz g_cfg_buzz; diff --git a/rpcs3/Emu/Io/gem_config.h b/rpcs3/Emu/Io/gem_config.h index 771f8c65cd..9153b4e439 100644 --- a/rpcs3/Emu/Io/gem_config.h +++ b/rpcs3/Emu/Io/gem_config.h @@ -34,3 +34,5 @@ struct cfg_gems final : public emulated_pads_config { cfg_gems() : emulated_pads_config("gem") {}; }; + +extern cfg_gems g_cfg_gem; diff --git a/rpcs3/Emu/Io/ghltar_config.h b/rpcs3/Emu/Io/ghltar_config.h index 621173c993..7534eeeb4f 100644 --- a/rpcs3/Emu/Io/ghltar_config.h +++ b/rpcs3/Emu/Io/ghltar_config.h @@ -44,3 +44,5 @@ struct cfg_ghltars final : public emulated_pads_config { cfg_ghltars() : emulated_pads_config("ghltar") {}; }; + +extern cfg_ghltars g_cfg_ghltar; diff --git a/rpcs3/Emu/Io/turntable_config.h b/rpcs3/Emu/Io/turntable_config.h index 024a1c63e7..1b3f6e2b58 100644 --- a/rpcs3/Emu/Io/turntable_config.h +++ b/rpcs3/Emu/Io/turntable_config.h @@ -44,3 +44,5 @@ struct cfg_turntables final : public emulated_pads_config { cfg_turntables() : emulated_pads_config("turntable") {}; }; + +extern cfg_turntables g_cfg_turntable; diff --git a/rpcs3/Emu/Io/usio.cpp b/rpcs3/Emu/Io/usio.cpp index 700620a0de..0590133d46 100644 --- a/rpcs3/Emu/Io/usio.cpp +++ b/rpcs3/Emu/Io/usio.cpp @@ -4,6 +4,7 @@ #include "stdafx.h" #include "usio.h" #include "Input/pad_thread.h" +#include "Emu/Io/usio_config.h" #include "Emu/IdManager.h" LOG_CHANNEL(usio_log, "USIO"); @@ -81,11 +82,6 @@ usb_device_usio::usb_device_usio(const std::array& location) g_fxo->get().last_game_status.clear(); g_fxo->get().last_game_status.resize(0x28); load_backup(); - - if (!m_cfg.load()) - { - usio_log.notice("Could not load usio config. Using defaults."); - } } usb_device_usio::~usb_device_usio() @@ -172,7 +168,7 @@ void usb_device_usio::translate_input() return; } - const auto& cfg = ::at32(m_cfg.players, pad_number); + const auto& cfg = ::at32(g_cfg_usio.players, pad_number); const std::size_t offset = (player * 8ULL); for (const Button& button : pad->m_buttons) diff --git a/rpcs3/Emu/Io/usio.h b/rpcs3/Emu/Io/usio.h index 4008c12b2a..310c00d692 100644 --- a/rpcs3/Emu/Io/usio.h +++ b/rpcs3/Emu/Io/usio.h @@ -2,7 +2,6 @@ #include "Emu/system_utils.hpp" #include "Emu/Io/usb_device.h" -#include "Emu/Io/usio_config.h" class usb_device_usio : public usb_device_emulated { @@ -29,5 +28,4 @@ private: le_t coin_counter = 0; const std::string usio_backup_path = rpcs3::utils::get_hdd1_dir() + "/caches/usiobackup.bin"; std::vector response; - cfg_usios m_cfg; }; diff --git a/rpcs3/Emu/Io/usio_config.h b/rpcs3/Emu/Io/usio_config.h index 436cc877bd..4b00a19dd6 100644 --- a/rpcs3/Emu/Io/usio_config.h +++ b/rpcs3/Emu/Io/usio_config.h @@ -46,3 +46,5 @@ struct cfg_usios final : public emulated_pads_config { cfg_usios() : emulated_pads_config("usio") {}; }; + +extern cfg_usios g_cfg_usio;