Log warnings when LibusbUtils::GetDeviceList fails
This commit is contained in:
parent
91a7c4bdf2
commit
15cbb5c8f9
|
@ -84,7 +84,7 @@ std::optional<IPCReply> BluetoothRealDevice::Open(const OpenRequest& request)
|
||||||
return IPCReply(IPC_EACCES);
|
return IPCReply(IPC_EACCES);
|
||||||
|
|
||||||
m_last_open_error.clear();
|
m_last_open_error.clear();
|
||||||
m_context.GetDeviceList([this](libusb_device* device) {
|
const int ret = m_context.GetDeviceList([this](libusb_device* device) {
|
||||||
libusb_device_descriptor device_descriptor;
|
libusb_device_descriptor device_descriptor;
|
||||||
libusb_get_device_descriptor(device, &device_descriptor);
|
libusb_get_device_descriptor(device, &device_descriptor);
|
||||||
auto config_descriptor = LibusbUtils::MakeConfigDescriptor(device);
|
auto config_descriptor = LibusbUtils::MakeConfigDescriptor(device);
|
||||||
|
@ -116,6 +116,11 @@ std::optional<IPCReply> BluetoothRealDevice::Open(const OpenRequest& request)
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
if (ret != LIBUSB_SUCCESS)
|
||||||
|
{
|
||||||
|
m_last_open_error =
|
||||||
|
Common::FmtFormatT("GetDeviceList failed: {0}", LibusbUtils::ErrorWrap(ret));
|
||||||
|
}
|
||||||
|
|
||||||
if (m_handle == nullptr)
|
if (m_handle == nullptr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -121,7 +121,7 @@ bool USBHost::AddNewDevices(std::set<u64>& new_devices, DeviceChangeHooks& hooks
|
||||||
|
|
||||||
if (m_context.IsValid())
|
if (m_context.IsValid())
|
||||||
{
|
{
|
||||||
m_context.GetDeviceList([&](libusb_device* device) {
|
const int ret = m_context.GetDeviceList([&](libusb_device* device) {
|
||||||
libusb_device_descriptor descriptor;
|
libusb_device_descriptor descriptor;
|
||||||
libusb_get_device_descriptor(device, &descriptor);
|
libusb_get_device_descriptor(device, &descriptor);
|
||||||
if (whitelist.count({descriptor.idVendor, descriptor.idProduct}) == 0)
|
if (whitelist.count({descriptor.idVendor, descriptor.idProduct}) == 0)
|
||||||
|
@ -137,6 +137,8 @@ bool USBHost::AddNewDevices(std::set<u64>& new_devices, DeviceChangeHooks& hooks
|
||||||
hooks.emplace(GetDeviceById(id), ChangeEvent::Inserted);
|
hooks.emplace(GetDeviceById(id), ChangeEvent::Inserted);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
if (ret != LIBUSB_SUCCESS)
|
||||||
|
WARN_LOG_FMT(IOS_USB, "GetDeviceList failed: {}", LibusbUtils::ErrorWrap(ret));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -47,16 +47,16 @@ public:
|
||||||
libusb_exit(m_context);
|
libusb_exit(m_context);
|
||||||
}
|
}
|
||||||
|
|
||||||
libusb_context* GetContext() { return m_context; }
|
libusb_context* GetContext() const { return m_context; }
|
||||||
|
|
||||||
bool GetDeviceList(GetDeviceListCallback callback)
|
int GetDeviceList(GetDeviceListCallback callback) const
|
||||||
{
|
{
|
||||||
std::lock_guard lock{m_device_list_mutex};
|
std::lock_guard lock{m_device_list_mutex};
|
||||||
|
|
||||||
libusb_device** list;
|
libusb_device** list;
|
||||||
ssize_t count = libusb_get_device_list(m_context, &list);
|
ssize_t count = libusb_get_device_list(m_context, &list);
|
||||||
if (count < 0)
|
if (count < 0)
|
||||||
return false;
|
return static_cast<int>(count);
|
||||||
|
|
||||||
for (ssize_t i = 0; i < count; ++i)
|
for (ssize_t i = 0; i < count; ++i)
|
||||||
{
|
{
|
||||||
|
@ -64,7 +64,7 @@ public:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
libusb_free_device_list(list, 1);
|
libusb_free_device_list(list, 1);
|
||||||
return true;
|
return LIBUSB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -81,7 +81,7 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
libusb_context* m_context = nullptr;
|
libusb_context* m_context = nullptr;
|
||||||
std::mutex m_device_list_mutex;
|
mutable std::mutex m_device_list_mutex;
|
||||||
Common::Flag m_event_thread_running;
|
Common::Flag m_event_thread_running;
|
||||||
std::thread m_event_thread;
|
std::thread m_event_thread;
|
||||||
};
|
};
|
||||||
|
@ -89,8 +89,8 @@ private:
|
||||||
class Context::Impl
|
class Context::Impl
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
libusb_context* GetContext() { return nullptr; }
|
libusb_context* GetContext() const { return nullptr; }
|
||||||
bool GetDeviceList(GetDeviceListCallback callback) { return false; }
|
int GetDeviceList(GetDeviceListCallback callback) const { return -1; }
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ bool Context::IsValid() const
|
||||||
return m_impl->GetContext() != nullptr;
|
return m_impl->GetContext() != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Context::GetDeviceList(GetDeviceListCallback callback)
|
int Context::GetDeviceList(GetDeviceListCallback callback) const
|
||||||
{
|
{
|
||||||
return m_impl->GetDeviceList(std::move(callback));
|
return m_impl->GetDeviceList(std::move(callback));
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ public:
|
||||||
bool IsValid() const;
|
bool IsValid() const;
|
||||||
|
|
||||||
// Only valid if the context is valid.
|
// Only valid if the context is valid.
|
||||||
bool GetDeviceList(GetDeviceListCallback callback);
|
int GetDeviceList(GetDeviceListCallback callback) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class Impl;
|
class Impl;
|
||||||
|
|
|
@ -462,7 +462,7 @@ static void Setup()
|
||||||
s_controller_type.fill(ControllerType::None);
|
s_controller_type.fill(ControllerType::None);
|
||||||
s_controller_rumble.fill(0);
|
s_controller_rumble.fill(0);
|
||||||
|
|
||||||
s_libusb_context->GetDeviceList([](libusb_device* device) {
|
const int ret = s_libusb_context->GetDeviceList([](libusb_device* device) {
|
||||||
if (CheckDeviceAccess(device))
|
if (CheckDeviceAccess(device))
|
||||||
{
|
{
|
||||||
// Only connect to a single adapter in case the user has multiple connected
|
// Only connect to a single adapter in case the user has multiple connected
|
||||||
|
@ -471,6 +471,8 @@ static void Setup()
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
if (ret != LIBUSB_SUCCESS)
|
||||||
|
WARN_LOG_FMT(CONTROLLERINTERFACE, "Failed to get device list: {}", LibusbUtils::ErrorWrap(ret));
|
||||||
|
|
||||||
if (s_status != ADAPTER_DETECTED && prev_status != s_status && s_detect_callback != nullptr)
|
if (s_status != ADAPTER_DETECTED && prev_status != s_status && s_detect_callback != nullptr)
|
||||||
s_detect_callback();
|
s_detect_callback();
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
#include "Common/Logging/Log.h"
|
||||||
#include "Core/LibusbUtils.h"
|
#include "Core/LibusbUtils.h"
|
||||||
|
|
||||||
// Because opening and getting the device name from devices is slow, especially on Windows
|
// Because opening and getting the device name from devices is slow, especially on Windows
|
||||||
|
@ -45,13 +46,15 @@ std::map<std::pair<u16, u16>, std::string> GetInsertedDevices()
|
||||||
if (!context.IsValid())
|
if (!context.IsValid())
|
||||||
return devices;
|
return devices;
|
||||||
|
|
||||||
context.GetDeviceList([&](libusb_device* device) {
|
const int ret = context.GetDeviceList([&](libusb_device* device) {
|
||||||
libusb_device_descriptor descr;
|
libusb_device_descriptor descr;
|
||||||
libusb_get_device_descriptor(device, &descr);
|
libusb_get_device_descriptor(device, &descr);
|
||||||
const std::pair<u16, u16> vid_pid{descr.idVendor, descr.idProduct};
|
const std::pair<u16, u16> vid_pid{descr.idVendor, descr.idProduct};
|
||||||
devices[vid_pid] = GetDeviceName(vid_pid);
|
devices[vid_pid] = GetDeviceName(vid_pid);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
if (ret != LIBUSB_SUCCESS)
|
||||||
|
WARN_LOG_FMT(COMMON, "GetDeviceList failed: {}", LibusbUtils::ErrorWrap(ret));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return devices;
|
return devices;
|
||||||
|
|
Loading…
Reference in New Issue