From 80dac3d2d6d08ffab328538104bace23f4cd1b6b Mon Sep 17 00:00:00 2001 From: Alexander Ponyatykh Date: Sun, 17 Nov 2019 03:56:13 +0300 Subject: [PATCH] Use explict libusb_context --- ...from-legacy-libusb-0.1-to-libusb-1.0.patch | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/debian/patches/02-Migrate-from-legacy-libusb-0.1-to-libusb-1.0.patch b/debian/patches/02-Migrate-from-legacy-libusb-0.1-to-libusb-1.0.patch index 7e4f91c..e728f9d 100644 --- a/debian/patches/02-Migrate-from-legacy-libusb-0.1-to-libusb-1.0.patch +++ b/debian/patches/02-Migrate-from-legacy-libusb-0.1-to-libusb-1.0.patch @@ -7,11 +7,9 @@ Subject: Migrate from legacy libusb-0.1 to libusb-1.0 libg15.c | 476 +++++++++++++++++++++++++++++------------------------------ 2 files changed, 234 insertions(+), 247 deletions(-) -diff --git a/configure.in b/configure.in -index 074d98e..b533d2c 100644 --- a/configure.in +++ b/configure.in -@@ -31,7 +31,8 @@ case $host_os in +@@ -31,7 +31,8 @@ esac # Checks for libraries. @@ -21,7 +19,7 @@ index 074d98e..b533d2c 100644 dnl Some versions of libusb do not honour timeout and block. Suns' version is one of them. if test "x$libusb_blocks" == "xtrue"; then -@@ -41,7 +42,7 @@ fi +@@ -41,7 +42,7 @@ # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([string.h]) @@ -30,11 +28,9 @@ index 074d98e..b533d2c 100644 # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST -diff --git a/libg15.c b/libg15.c -index ba1c94b..435e396 100644 --- a/libg15.c +++ b/libg15.c -@@ -24,14 +24,15 @@ +@@ -24,20 +24,21 @@ #include "libg15.h" #include #include @@ -49,22 +45,28 @@ index ba1c94b..435e396 100644 +static libusb_device_handle *keyboard_device = 0; static int libg15_debugging_enabled = 0; -static int enospc_slowdown = 0; -+static int libusb_initialized = 0; static int found_devicetype = -1; static int shared_device = 0; -@@ -67,7 +68,9 @@ int g15DeviceCapabilities() { + static int g15_keys_endpoint = 0; + static int g15_lcd_endpoint = 0; + static pthread_mutex_t libusb_mutex; ++static libusb_context *libg15_libusb_context = NULL; + + /* to add a new device, simply create a new DEVICE() in this list */ + /* Fields are: "Name",VendorID,ProductID,Capabilities */ +@@ -67,7 +68,9 @@ void libg15Debug(int option) { libg15_debugging_enabled = option; - usb_set_debug(option); -+ if (option && libusb_initialized) { -+ libusb_set_option(NULL, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_WARNING); ++ if (option && libg15_libusb_context) { ++ libusb_set_option(libg15_libusb_context, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_WARNING); + } } /* debugging wrapper */ -@@ -86,191 +89,209 @@ static int g15_log (FILE *fd, unsigned int level, const char *fmt, ...) { +@@ -86,191 +89,207 @@ /* return number of connected and supported devices */ int g15NumberOfConnectedDevices() { @@ -77,7 +79,7 @@ index ba1c94b..435e396 100644 - for (i=0; g15_devices[i].name !=NULL;i++) - for (bus = usb_busses; bus; bus = bus->next) -+ ssize_t cnt = libusb_get_device_list(NULL, &list); ++ ssize_t cnt = libusb_get_device_list(libg15_libusb_context, &list); + + if (cnt < 0) + { @@ -108,13 +110,13 @@ index ba1c94b..435e396 100644 static int initLibUsb() { - usb_init(); -- ++ int errcode = libusb_init(&libg15_libusb_context); + - /** - * usb_find_busses and usb_find_devices both report the number of devices - * / busses added / removed since the last call. since this is the first - * call we have to return values != 0 or else we didnt find anything */ -+ int errcode = libusb_init(NULL); - +- - if (!usb_find_busses()) + if (errcode != 0) + { @@ -124,8 +126,6 @@ index ba1c94b..435e396 100644 - if (!usb_find_devices()) - return G15_ERROR_OPENING_USB_DEVICE; -+ libusb_initialized = 1; -+ + libg15Debug(libg15_debugging_enabled); return G15_NO_ERROR; @@ -147,7 +147,7 @@ index ba1c94b..435e396 100644 + int retries = 0; + int ret; + -+ ssize_t cnt = libusb_get_device_list(NULL, &list); ++ ssize_t cnt = libusb_get_device_list(libg15_libusb_context, &list); - for (bus = usb_busses; bus; bus = bus->next) + if (cnt < 0) @@ -418,7 +418,7 @@ index ba1c94b..435e396 100644 int i; for (i=0; g15_devices[i].name !=NULL ;i++){ g15_log(stderr,G15_LOG_INFO,"Trying to find %s\n",g15_devices[i].name); -@@ -288,19 +309,13 @@ static int closeKeyboardDevice() +@@ -288,19 +307,13 @@ { int retval = G15_NO_ERROR; @@ -443,7 +443,7 @@ index ba1c94b..435e396 100644 keyboard_device=0; return retval; } -@@ -311,9 +326,6 @@ int re_initLibG15() +@@ -311,9 +324,6 @@ { closeKeyboardDevice(); @@ -453,7 +453,7 @@ index ba1c94b..435e396 100644 keyboard_device = findAndOpenG15(); if (!keyboard_device) return G15_ERROR_OPENING_USB_DEVICE; -@@ -330,10 +342,6 @@ int initLibG15() +@@ -330,10 +340,6 @@ g15_log(stderr,G15_LOG_INFO,"%s\n",PACKAGE_STRING); @@ -464,18 +464,18 @@ index ba1c94b..435e396 100644 g15NumberOfConnectedDevices(); keyboard_device = findAndOpenG15(); -@@ -347,7 +355,9 @@ int initLibG15() +@@ -347,7 +353,9 @@ int exitLibG15() { pthread_mutex_destroy(&libusb_mutex); - return closeKeyboardDevice(); + int ret = closeKeyboardDevice(); -+ libusb_exit(NULL); -+ libusb_initialized = 0; ++ libusb_exit(libg15_libusb_context); ++ libg15_libusb_context = NULL; } static void dumpPixmapIntoLCDFormat(unsigned char *lcd_buffer, unsigned char const *data) -@@ -428,36 +438,6 @@ static void dumpPixmapIntoLCDFormat(unsigned char *lcd_buffer, unsigned char con +@@ -428,36 +436,6 @@ } } @@ -512,7 +512,7 @@ index ba1c94b..435e396 100644 int writePixmapToLCD(unsigned char const *data) { int ret = 0; -@@ -474,43 +454,27 @@ int writePixmapToLCD(unsigned char const *data) +@@ -474,43 +452,27 @@ /* the keyboard needs this magic byte */ lcd_buffer[0] = 0x03; @@ -574,7 +574,7 @@ index ba1c94b..435e396 100644 return 0; } -@@ -535,7 +499,9 @@ int setLCDContrast(unsigned int level) +@@ -535,7 +497,9 @@ usb_data[3] = 18; } pthread_mutex_lock(&libusb_mutex); @@ -585,7 +585,7 @@ index ba1c94b..435e396 100644 pthread_mutex_unlock(&libusb_mutex); return retval; } -@@ -553,7 +519,9 @@ int setLEDs(unsigned int leds) +@@ -553,7 +517,9 @@ return G15_ERROR_UNSUPPORTED; pthread_mutex_lock(&libusb_mutex); @@ -596,7 +596,7 @@ index ba1c94b..435e396 100644 pthread_mutex_unlock(&libusb_mutex); return retval; } -@@ -578,7 +546,9 @@ int setLCDBrightness(unsigned int level) +@@ -578,7 +544,9 @@ usb_data[2] = 0x00; } pthread_mutex_lock(&libusb_mutex); @@ -607,7 +607,7 @@ index ba1c94b..435e396 100644 pthread_mutex_unlock(&libusb_mutex); return retval; } -@@ -604,7 +574,9 @@ int setKBBrightness(unsigned int level) +@@ -604,7 +572,9 @@ usb_data[2] = 0x0; } pthread_mutex_lock(&libusb_mutex); @@ -618,7 +618,7 @@ index ba1c94b..435e396 100644 pthread_mutex_unlock(&libusb_mutex); return retval; } -@@ -619,7 +591,9 @@ int setG510LEDColor(unsigned char r, unsigned char g, unsigned char b) +@@ -619,7 +589,9 @@ usb_data[3] = b; pthread_mutex_lock(&libusb_mutex); @@ -629,7 +629,7 @@ index ba1c94b..435e396 100644 pthread_mutex_unlock(&libusb_mutex); return retval; } -@@ -1033,18 +1007,30 @@ static void processKeyEvent4Byte(unsigned int *pressed_keys, unsigned char *buff +@@ -1033,18 +1005,30 @@ int getPressedKeys(unsigned int *pressed_keys, unsigned int timeout) { unsigned char buffer[G15_KEY_READ_LENGTH]; @@ -667,7 +667,7 @@ index ba1c94b..435e396 100644 return G15_ERROR_TRY_AGAIN; } -@@ -1054,7 +1040,7 @@ int getPressedKeys(unsigned int *pressed_keys, unsigned int timeout) +@@ -1054,7 +1038,7 @@ return G15_NO_ERROR; } @@ -676,7 +676,7 @@ index ba1c94b..435e396 100644 case 4: processKeyEvent4Byte(pressed_keys, buffer); return G15_NO_ERROR; -@@ -1065,6 +1051,6 @@ int getPressedKeys(unsigned int *pressed_keys, unsigned int timeout) +@@ -1065,6 +1049,6 @@ processKeyEvent9Byte(pressed_keys, buffer); return G15_NO_ERROR; default: