From e56424c825752cbc23a34fc685d9d958adc30e62 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Tue, 18 Jan 2022 09:38:43 -0600 Subject: [PATCH] consolidated libusb_init and libusb_deinit into CAutoDeInit Signed-off-by: Frank Li --- libuuu/error.cpp | 15 +++++++++++---- libuuu/usbhotplug.cpp | 34 +++++----------------------------- 2 files changed, 16 insertions(+), 33 deletions(-) diff --git a/libuuu/error.cpp b/libuuu/error.cpp index b966040d..74bcefea 100644 --- a/libuuu/error.cpp +++ b/libuuu/error.cpp @@ -31,6 +31,7 @@ #include "liberror.h" #include "libuuu.h" +#include "libusb.h" using namespace std; @@ -39,14 +40,20 @@ static int g_last_err_id; static uint32_t g_debug_level; -void uuu_set_debug_level(uint32_t mask) +int get_libusb_debug_level() noexcept { - g_debug_level = mask; + return g_debug_level & 0xFFFF; } -int get_libusb_debug_level() noexcept +void uuu_set_debug_level(uint32_t mask) { - return g_debug_level & 0xFFFF; + g_debug_level = mask; + +#if LIBUSB_API_VERSION > 0x01000106 + libusb_set_option(nullptr, LIBUSB_OPTION_LOG_LEVEL, get_libusb_debug_level()); +#else + libusb_set_debug(nullptr, get_libusb_debug_level()); +#endif } const char * uuu_get_last_err_string() diff --git a/libuuu/usbhotplug.cpp b/libuuu/usbhotplug.cpp index c2ef52d1..801bc764 100644 --- a/libuuu/usbhotplug.cpp +++ b/libuuu/usbhotplug.cpp @@ -69,6 +69,11 @@ static atomic g_known_device_state{NoKnownDevice}; class CAutoDeInit { public: + CAutoDeInit() + { + if (libusb_init(nullptr) < 0) + throw runtime_error{ "Call libusb_init failure" }; + } ~CAutoDeInit() { libusb_exit(nullptr); @@ -399,31 +404,8 @@ static int check_usb_timeout(Timer& usb_timer) return 0; } -static int ensure_libusb_initialized() -{ - static once_flag is_libusb_init; - try { - call_once(is_libusb_init, []{ - if (libusb_init(nullptr) < 0) - throw runtime_error{"Call libusb_init failure"}; -#if LIBUSB_API_VERSION > 0x01000106 - libusb_set_option(nullptr, LIBUSB_OPTION_LOG_LEVEL, get_libusb_debug_level()); -#else - libusb_set_debug(nullptr, get_libusb_debug_level()); -#endif - }); - } catch(const exception& ex) { - set_last_err_string(ex.what()); - return -1; - } - return 0; -} - int polling_usb(std::atomic& bexit) { - if (ensure_libusb_initialized()) - return -1; - if (run_cmds("CFG:", nullptr)) return -1; @@ -463,9 +445,6 @@ CmdUsbCtx::~CmdUsbCtx() int CmdUsbCtx::look_for_match_device(const char *pro) { - if (ensure_libusb_initialized()) - return -1; - if (run_cmds("CFG:", nullptr)) return -1; @@ -535,9 +514,6 @@ int uuu_add_usbpath_filter(const char *path) int uuu_for_each_devices(uuu_ls_usb_devices fn, void *p) { - if (ensure_libusb_initialized()) - return -1; - CAutoList l; size_t i = 0; libusb_device *dev;