fix and utillize hid_instance::enumerate_devices

This commit is contained in:
Barış Hamil 2026-02-11 16:03:16 +03:00
parent 91b238e8b1
commit c78f4fc6c1
3 changed files with 14 additions and 30 deletions

View file

@ -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<void(hid_device_info*)> 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
}

View file

@ -2,6 +2,7 @@
#include "util/types.hpp"
#include <mutex>
#include <functional>
#include <hidapi.h>
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<void(hid_device_info*)> callback);
static hid_device* open_path(const char* path);
static void close(hid_device* dev);

View file

@ -351,14 +351,8 @@ void wiimote_handler::thread_proc()
};
std::vector<info_t> 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)
{