diff --git a/rpcs3/Input/hid_instance.cpp b/rpcs3/Input/hid_instance.cpp index 0daa9bcdda..18bf6cdce7 100644 --- a/rpcs3/Input/hid_instance.cpp +++ b/rpcs3/Input/hid_instance.cpp @@ -60,26 +60,19 @@ bool hid_instance::initialize() return true; } -hid_device_info* hid_instance::enumerate(u16 vid, u16 pid) +void hid_instance::enumerate_devices(u16 vid, u16 pid, std::function callback) { std::lock_guard lock(g_hid_mutex); #if defined(__APPLE__) - hid_device_info* devs = nullptr; - Emu.BlockingCallFromMainThread([&]() { devs = hid_enumerate(vid, pid); }, false); - return devs; -#else - return hid_enumerate(vid, pid); -#endif -} - -void hid_instance::free_enumeration(hid_device_info* devs) -{ - if (!devs) return; - - std::lock_guard lock(g_hid_mutex); -#if defined(__APPLE__) - Emu.BlockingCallFromMainThread([&]() { hid_free_enumeration(devs); }, false); + Emu.BlockingCallFromMainThread([&]() + { + hid_device_info* devs = hid_enumerate(vid, pid); + callback(devs); + hid_free_enumeration(devs); + }, false); #else + hid_device_info* devs = hid_enumerate(vid, pid); + callback(devs); hid_free_enumeration(devs); #endif } diff --git a/rpcs3/Input/hid_instance.h b/rpcs3/Input/hid_instance.h index 9c851bdc77..b16978bfa8 100644 --- a/rpcs3/Input/hid_instance.h +++ b/rpcs3/Input/hid_instance.h @@ -2,6 +2,7 @@ #include "util/types.hpp" #include +#include #include struct hid_instance @@ -18,8 +19,8 @@ public: bool initialize(); - static hid_device_info* enumerate(u16 vid, u16 pid); - static void free_enumeration(hid_device_info* devs); + static void enumerate_devices(u16 vid, u16 pid, std::function callback); + static hid_device* open_path(const char* path); static void close(hid_device* dev); diff --git a/rpcs3/Input/wiimote_handler.cpp b/rpcs3/Input/wiimote_handler.cpp index 65ac708a7b..ce8c9b01d5 100644 --- a/rpcs3/Input/wiimote_handler.cpp +++ b/rpcs3/Input/wiimote_handler.cpp @@ -351,14 +351,8 @@ void wiimote_handler::thread_proc() }; std::vector candidates; - hid_device_info* devs = nullptr; + hid_instance::enumerate_devices(vid, 0, [&](hid_device_info* devs) { - std::lock_guard lock(g_hid_mutex); -#if defined(__APPLE__) - Emu.BlockingCallFromMainThread([&]() - { -#endif - devs = hid_enumerate(vid, 0); for (hid_device_info* cur = devs; cur; cur = cur->next) { for (const auto& range : ranges) @@ -370,11 +364,7 @@ void wiimote_handler::thread_proc() } } } - hid_free_enumeration(devs); -#if defined(__APPLE__) - }, false); -#endif - } + }); for (const auto& candidate : candidates) {