diff options
| author | Admiral H. Curtiss <pikachu025@gmail.com> | 2022-01-05 03:25:19 +0100 |
|---|---|---|
| committer | Admiral H. Curtiss <pikachu025@gmail.com> | 2022-01-05 03:25:19 +0100 |
| commit | 0bfffe409589c016e35c1728f3be6cad768deca4 (patch) | |
| tree | d0421c40727d0c94b639bdce23e326ff8769b976 /Source/Core/InputCommon/GCAdapter.cpp | |
| parent | e08171fa243b7e5488713b63a7ae030f3b100490 (diff) | |
Config: Port GC Adapter settings to new config system.
Diffstat (limited to 'Source/Core/InputCommon/GCAdapter.cpp')
| -rw-r--r-- | Source/Core/InputCommon/GCAdapter.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/Source/Core/InputCommon/GCAdapter.cpp b/Source/Core/InputCommon/GCAdapter.cpp index bf8ec87b3b..26984ca4dc 100644 --- a/Source/Core/InputCommon/GCAdapter.cpp +++ b/Source/Core/InputCommon/GCAdapter.cpp @@ -2,14 +2,17 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include <algorithm> +#include <array> #include <libusb.h> #include <mutex> +#include <optional> #include "Common/Event.h" #include "Common/Flag.h" #include "Common/Logging/Log.h" #include "Common/ScopeGuard.h" #include "Common/Thread.h" +#include "Core/Config/MainSettings.h" #include "Core/ConfigManager.h" #include "Core/Core.h" #include "Core/CoreTiming.h" @@ -79,6 +82,9 @@ static u8 s_endpoint_out = 0; static u64 s_last_init = 0; +static std::optional<size_t> s_config_callback_id = std::nullopt; +static std::array<bool, SerialInterface::MAX_SI_CHANNELS> s_config_rumble_enabled{}; + static void Read() { int payload_size = 0; @@ -196,6 +202,12 @@ void SetAdapterCallback(std::function<void()> func) s_detect_callback = func; } +static void RefreshConfig() +{ + for (int i = 0; i < SerialInterface::MAX_SI_CHANNELS; ++i) + s_config_rumble_enabled[i] = Config::Get(Config::GetInfoForAdapterRumble(i)); +} + void Init() { if (s_handle != nullptr) @@ -211,6 +223,10 @@ void Init() s_status = NO_ADAPTER_DETECTED; + if (!s_config_callback_id) + s_config_callback_id = Config::AddConfigChangedCallback(RefreshConfig); + RefreshConfig(); + if (UseAdapter()) StartScanThread(); } @@ -382,6 +398,12 @@ void Shutdown() Reset(); s_status = NO_ADAPTER_DETECTED; + + if (s_config_callback_id) + { + Config::RemoveConfigChangedCallback(*s_config_callback_id); + s_config_callback_id = std::nullopt; + } } static void Reset() @@ -557,7 +579,7 @@ static void ResetRumbleLockNeeded() void Output(int chan, u8 rumble_command) { - if (s_handle == nullptr || !UseAdapter() || !SConfig::GetInstance().m_AdapterRumble[chan]) + if (s_handle == nullptr || !UseAdapter() || !s_config_rumble_enabled[chan]) return; // Skip over rumble commands if it has not changed or the controller is wireless |
