summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/GCAdapter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/InputCommon/GCAdapter.cpp')
-rw-r--r--Source/Core/InputCommon/GCAdapter.cpp63
1 files changed, 30 insertions, 33 deletions
diff --git a/Source/Core/InputCommon/GCAdapter.cpp b/Source/Core/InputCommon/GCAdapter.cpp
index c8b686a8b3..8438146c34 100644
--- a/Source/Core/InputCommon/GCAdapter.cpp
+++ b/Source/Core/InputCommon/GCAdapter.cpp
@@ -462,7 +462,7 @@ static void ScanThreadFunc()
while (s_adapter_detect_thread_running.IsSet())
{
- if (!s_detected && UseAdapter() &&
+ if (!s_detected && s_is_adapter_wanted &&
env->CallStaticBooleanMethod(s_adapter_class, is_usb_device_available_func))
{
std::lock_guard lk(s_init_mutex);
@@ -483,6 +483,27 @@ void SetAdapterCallback(std::function<void(void)> func)
#endif
}
+static void StartScanThread()
+{
+ if (s_adapter_detect_thread_running.IsSet())
+ return;
+#if GCADAPTER_USE_LIBUSB_IMPLEMENTATION
+ if (!s_libusb_context->IsValid())
+ return;
+#endif
+ s_adapter_detect_thread_running.Set(true);
+ s_adapter_detect_thread = std::thread(ScanThreadFunc);
+}
+
+static void StopScanThread()
+{
+ if (s_adapter_detect_thread_running.TestAndClear())
+ {
+ s_hotplug_event.Set();
+ s_adapter_detect_thread.join();
+ }
+}
+
static void RefreshConfig()
{
s_is_adapter_wanted = false;
@@ -493,6 +514,11 @@ static void RefreshConfig()
SerialInterface::SIDevices::SIDEVICE_WIIU_ADAPTER;
s_config_rumble_enabled[i] = Config::Get(Config::GetInfoForAdapterRumble(i));
}
+
+ if (s_is_adapter_wanted)
+ StartScanThread();
+ else
+ StopScanThread();
}
void Init()
@@ -531,30 +557,6 @@ void Init()
if (!s_config_callback_id)
s_config_callback_id = Config::AddConfigChangedCallback(RefreshConfig);
RefreshConfig();
-
- if (UseAdapter())
- StartScanThread();
-}
-
-void StartScanThread()
-{
- if (s_adapter_detect_thread_running.IsSet())
- return;
-#if GCADAPTER_USE_LIBUSB_IMPLEMENTATION
- if (!s_libusb_context->IsValid())
- return;
-#endif
- s_adapter_detect_thread_running.Set(true);
- s_adapter_detect_thread = std::thread(ScanThreadFunc);
-}
-
-void StopScanThread()
-{
- if (s_adapter_detect_thread_running.TestAndClear())
- {
- s_hotplug_event.Set();
- s_adapter_detect_thread.join();
- }
}
static void Setup()
@@ -828,7 +830,7 @@ static void Reset()
GCPadStatus Input(int chan)
{
- if (!UseAdapter())
+ if (!s_is_adapter_wanted)
return {};
#if GCADAPTER_USE_LIBUSB_IMPLEMENTATION
@@ -966,11 +968,6 @@ void ResetDeviceType(int chan)
s_port_states[chan].controller_type = ControllerType::None;
}
-bool UseAdapter()
-{
- return s_is_adapter_wanted;
-}
-
void ResetRumble()
{
#if GCADAPTER_USE_LIBUSB_IMPLEMENTATION
@@ -994,7 +991,7 @@ void ResetRumble()
// being called while the libusb state is being reset
static void ResetRumbleLockNeeded()
{
- if (!UseAdapter() || (s_handle == nullptr || s_status != AdapterStatus::Detected))
+ if (!s_is_adapter_wanted || s_handle == nullptr || s_status != AdapterStatus::Detected)
{
return;
}
@@ -1021,7 +1018,7 @@ static void ResetRumbleLockNeeded()
void Output(int chan, u8 rumble_command)
{
- if (!UseAdapter() || !s_config_rumble_enabled[chan])
+ if (!s_is_adapter_wanted || !s_config_rumble_enabled[chan])
return;
#if GCADAPTER_USE_LIBUSB_IMPLEMENTATION