From 0bfffe409589c016e35c1728f3be6cad768deca4 Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Wed, 5 Jan 2022 03:25:19 +0100 Subject: Config: Port GC Adapter settings to new config system. --- Source/Core/InputCommon/GCAdapter.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'Source/Core/InputCommon/GCAdapter.cpp') 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 +#include #include #include +#include #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 s_config_callback_id = std::nullopt; +static std::array s_config_rumble_enabled{}; + static void Read() { int payload_size = 0; @@ -196,6 +202,12 @@ void SetAdapterCallback(std::function 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 -- cgit v1.2.3