From 1db10b8f4c72a9768122e16c6a69f760a9ff244e Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Tue, 7 Jul 2020 10:01:08 +0000 Subject: input_common/gcadapter: add missing C++11 header required by libc++ In file included from src/input_common/gcadapter/gc_adapter.cpp:8: src/./input_common/gcadapter/gc_adapter.h:77:10: error: no template named 'unordered_map' in namespace 'std' std::unordered_map buttons; ~~~~~^ src/./input_common/gcadapter/gc_adapter.h:78:10: error: no template named 'unordered_map' in namespace 'std' std::unordered_map axes; ~~~~~^ --- src/input_common/gcadapter/gc_adapter.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/input_common') diff --git a/src/input_common/gcadapter/gc_adapter.h b/src/input_common/gcadapter/gc_adapter.h index 0ea6263eb..b1c2a1958 100644 --- a/src/input_common/gcadapter/gc_adapter.h +++ b/src/input_common/gcadapter/gc_adapter.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include "common/common_types.h" #include "common/threadsafe_queue.h" -- cgit v1.2.3 From ec13746e4d1adb8567a3d52531ede6f57cde68f7 Mon Sep 17 00:00:00 2001 From: Ameer Date: Wed, 8 Jul 2020 13:19:33 -0400 Subject: Add more libusb error checks --- src/input_common/gcadapter/gc_adapter.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/input_common') diff --git a/src/input_common/gcadapter/gc_adapter.cpp b/src/input_common/gcadapter/gc_adapter.cpp index b39d2a3fb..f6e51705b 100644 --- a/src/input_common/gcadapter/gc_adapter.cpp +++ b/src/input_common/gcadapter/gc_adapter.cpp @@ -24,9 +24,13 @@ Adapter::Adapter() { LOG_INFO(Input, "GC Adapter Initialization started"); current_status = NO_ADAPTER_DETECTED; - libusb_init(&libusb_ctx); - StartScanThread(); + const int init_res = libusb_init(&libusb_ctx); + if (init_res == LIBUSB_SUCCESS) { + StartScanThread(); + } else { + LOG_ERROR(Input, "libusb could not be initialized. failed with error = {}", init_res); + } } GCPadStatus Adapter::GetPadStatus(int port, const std::array& adapter_payload) { @@ -215,6 +219,10 @@ void Adapter::Setup() { // populate the list of devices, get the count const std::size_t device_count = libusb_get_device_list(libusb_ctx, &devices); + if (device_count < 0) { + LOG_ERROR(Input, "libusb_get_device_list failed with error: {}", device_count); + return; + } for (std::size_t index = 0; index < device_count; ++index) { if (CheckDeviceAccess(devices[index])) { @@ -223,6 +231,7 @@ void Adapter::Setup() { break; } } + libusb_free_device_list(devices, 1); } bool Adapter::CheckDeviceAccess(libusb_device* device) { @@ -279,7 +288,13 @@ bool Adapter::CheckDeviceAccess(libusb_device* device) { void Adapter::GetGCEndpoint(libusb_device* device) { libusb_config_descriptor* config = nullptr; - libusb_get_config_descriptor(device, 0, &config); + const int config_descriptor_error = libusb_get_config_descriptor(device, 0, &config); + if (config_descriptor_error) { + LOG_ERROR(Input, "libusb_get_config_descriptor failed with error = {}", + config_descriptor_error); + return; + } + for (u8 ic = 0; ic < config->bNumInterfaces; ic++) { const libusb_interface* interfaceContainer = &config->interface[ic]; for (int i = 0; i < interfaceContainer->num_altsetting; i++) { -- cgit v1.2.3 From 3c7a115afe0590fd6358767942340eb807f9b81d Mon Sep 17 00:00:00 2001 From: Ameer Date: Wed, 8 Jul 2020 14:18:54 -0400 Subject: Address comments for better clarity/signed dev count --- src/input_common/gcadapter/gc_adapter.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'src/input_common') diff --git a/src/input_common/gcadapter/gc_adapter.cpp b/src/input_common/gcadapter/gc_adapter.cpp index f6e51705b..6d9f4d9eb 100644 --- a/src/input_common/gcadapter/gc_adapter.cpp +++ b/src/input_common/gcadapter/gc_adapter.cpp @@ -215,23 +215,27 @@ void Adapter::Setup() { adapter_controllers_status.fill(ControllerTypes::None); // pointer to list of connected usb devices - libusb_device** devices; + libusb_device** devices{}; // populate the list of devices, get the count - const std::size_t device_count = libusb_get_device_list(libusb_ctx, &devices); + const ssize_t device_count = libusb_get_device_list(libusb_ctx, &devices); if (device_count < 0) { LOG_ERROR(Input, "libusb_get_device_list failed with error: {}", device_count); + detect_thread_running = false; // Stop the loop constantly checking for gc adapter + // TODO: For hotplug+gc adapter checkbox implementation, revert this. return; } - for (std::size_t index = 0; index < device_count; ++index) { - if (CheckDeviceAccess(devices[index])) { - // GC Adapter found and accessible, registering it - GetGCEndpoint(devices[index]); - break; + if (devices != nullptr) { + for (std::size_t index = 0; index < device_count; ++index) { + if (CheckDeviceAccess(devices[index])) { + // GC Adapter found and accessible, registering it + GetGCEndpoint(devices[index]); + break; + } } + libusb_free_device_list(devices, 1); } - libusb_free_device_list(devices, 1); } bool Adapter::CheckDeviceAccess(libusb_device* device) { @@ -288,10 +292,10 @@ bool Adapter::CheckDeviceAccess(libusb_device* device) { void Adapter::GetGCEndpoint(libusb_device* device) { libusb_config_descriptor* config = nullptr; - const int config_descriptor_error = libusb_get_config_descriptor(device, 0, &config); - if (config_descriptor_error) { + const int config_descriptor_return = libusb_get_config_descriptor(device, 0, &config); + if (config_descriptor_return != LIBUSB_SUCCESS) { LOG_ERROR(Input, "libusb_get_config_descriptor failed with error = {}", - config_descriptor_error); + config_descriptor_return); return; } -- cgit v1.2.3