From cad3a8d2338182578079d1d35896186140004b05 Mon Sep 17 00:00:00 2001 From: Nick Chan Date: Wed, 15 Feb 2023 15:10:04 +0800 Subject: [PATCH] libusb stuff --- include/palerain.h | 2 +- src/log.c | 2 +- src/main.c | 14 +++++++++++--- src/usb_libusb.c | 25 +++++++++++++------------ 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/include/palerain.h b/include/palerain.h index 26686ff..5ccf022 100644 --- a/include/palerain.h +++ b/include/palerain.h @@ -180,7 +180,7 @@ extern char* ext_checkra1n; void thr_cleanup(void* ptr); void* dfuhelper(void* ptr); -int p1_log(log_level_t loglevel, const char *fname, int lineno, const char *fxname, char* __restrict format, ...); +int p1_log(log_level_t loglevel, const char *fname, int lineno, const char *fxname, const char* __restrict format, ...); /* devhelper helpers */ void devinfo_free(devinfo_t *dev); bool cpid_is_arm64(unsigned int cpid); diff --git a/src/log.c b/src/log.c index ccc2f02..118fabe 100644 --- a/src/log.c +++ b/src/log.c @@ -8,7 +8,7 @@ #include #include -int p1_log(log_level_t loglevel, const char *fname, int lineno, const char *fxname, char *__restrict format, ...) +int p1_log(log_level_t loglevel, const char *fname, int lineno, const char *fxname, const char *__restrict format, ...) { if (verbose >= 5 #ifdef DEV_BUILD diff --git a/src/main.c b/src/main.c index 63b5931..273b659 100644 --- a/src/main.c +++ b/src/main.c @@ -91,6 +91,12 @@ int build_checks() { bool tui_started = false; #endif +#ifdef USE_LIBUSB +void log_cb(libusb_context *ctx, enum libusb_log_level level, const char *str) { + LOG(level + 0, str); +} +#endif + int palera1n(int argc, char *argv[]) { int ret = 0; pthread_mutex_init(&log_mutex, NULL); @@ -111,13 +117,15 @@ int palera1n(int argc, char *argv[]) { #endif #ifdef USE_LIBUSB { - int test_libusb = libusb_init(NULL); + libusb_set_log_cb(NULL, log_cb, LIBUSB_LOG_CB_GLOBAL); + libusb_context* ctx = NULL; + int test_libusb = libusb_init(&ctx); if (test_libusb) { LOG(LOG_ERROR, "cannot initialize libusb: %d (%s)\n", test_libusb, libusb_strerror(test_libusb)); - libusb_exit(NULL); + libusb_exit(ctx); goto cleanup; } - libusb_exit(NULL); + libusb_exit(ctx); } #endif diff --git a/src/usb_libusb.c b/src/usb_libusb.c index c9ff9ea..989f7d5 100644 --- a/src/usb_libusb.c +++ b/src/usb_libusb.c @@ -181,8 +181,9 @@ int wait_for_pongo(void) { stuff_t stuff; libusb_hotplug_callback_handle hp[2]; + libusb_context* ctx = NULL; - int r = libusb_init(NULL); + int r = libusb_init(&ctx); if(r != LIBUSB_SUCCESS) { ERR("libusb_init: %s", libusb_error_name(r)); @@ -192,32 +193,32 @@ int wait_for_pongo(void) if(!libusb_has_capability(LIBUSB_CAP_HAS_HOTPLUG)) { ERR("libusb: no hotplug capability"); - libusb_exit(NULL); + libusb_exit(ctx); return -1; } - r = libusb_hotplug_register_callback(NULL, LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED, 0, PONGO_USB_VENDOR, PONGO_USB_PRODUCT, LIBUSB_HOTPLUG_MATCH_ANY, FoundDevice, &stuff, &hp[0]); + r = libusb_hotplug_register_callback(ctx, LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED, 0, PONGO_USB_VENDOR, PONGO_USB_PRODUCT, LIBUSB_HOTPLUG_MATCH_ANY, FoundDevice, &stuff, &hp[0]); if(r != LIBUSB_SUCCESS) { ERR("libusb_hotplug: %s", libusb_error_name(r)); - libusb_exit(NULL); + libusb_exit(ctx); return -1; } - r = libusb_hotplug_register_callback(NULL, LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT, 0, PONGO_USB_VENDOR, PONGO_USB_PRODUCT, LIBUSB_HOTPLUG_MATCH_ANY, LostDevice, &stuff, &hp[1]); + r = libusb_hotplug_register_callback(ctx, LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT, 0, PONGO_USB_VENDOR, PONGO_USB_PRODUCT, LIBUSB_HOTPLUG_MATCH_ANY, LostDevice, &stuff, &hp[1]); if(r != LIBUSB_SUCCESS) { ERR("libusb_hotplug: %s", libusb_error_name(r)); - libusb_exit(NULL); + libusb_exit(ctx); return -1; } libusb_device **list; - ssize_t sz = libusb_get_device_list(NULL, &list); + ssize_t sz = libusb_get_device_list(ctx, &list); if(sz < 0) { ERR("libusb_get_device_list: %s", libusb_error_name((int)sz)); - libusb_exit(NULL); + libusb_exit(ctx); return -1; } @@ -235,7 +236,7 @@ int wait_for_pongo(void) libusb_unref_device(list[i]); continue; } - r = FoundDevice(NULL, list[i], LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED, &stuff); + r = FoundDevice(ctx, list[i], LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED, &stuff); for(ssize_t j = i + 1; j < sz; ++j) { libusb_unref_device(list[j]); @@ -243,7 +244,7 @@ int wait_for_pongo(void) if(r != LIBUSB_SUCCESS) { libusb_free_device_list(list, 0); - libusb_exit(NULL); + libusb_exit(ctx); return -1; } break; @@ -252,7 +253,7 @@ int wait_for_pongo(void) while(get_spin()) { - r = libusb_handle_events(NULL); + r = libusb_handle_events(ctx); if(r != LIBUSB_SUCCESS) { ERR("libusb_handle_events: %s", libusb_error_name(r)); @@ -260,7 +261,7 @@ int wait_for_pongo(void) } } - libusb_exit(NULL); + libusb_exit(ctx); return 0; } #endif