aboutsummaryrefslogtreecommitdiffstats
path: root/devel
diff options
context:
space:
mode:
authorjbeich <jbeich@FreeBSD.org>2017-06-30 23:11:54 +0800
committerjbeich <jbeich@FreeBSD.org>2017-06-30 23:11:54 +0800
commitece54977329f353d88ea30db8f3729765861b588 (patch)
tree5e8fb49d88cc6653b76f84c3db41b43e3a0db25c /devel
parent9968b4daca26627c4ba2729a6f875b465f9677a5 (diff)
downloadfreebsd-ports-gnome-ece54977329f353d88ea30db8f3729765861b588.tar.gz
freebsd-ports-gnome-ece54977329f353d88ea30db8f3729765861b588.tar.zst
freebsd-ports-gnome-ece54977329f353d88ea30db8f3729765861b588.zip
devel/android-tools-adb-devel: restore USB transport for < 11.0
https://android.googlesource.com/platform/system/core/+/6da1cd49b5ea%5E%21/
Diffstat (limited to 'devel')
-rw-r--r--devel/android-tools-adb-devel/Makefile2
-rw-r--r--devel/android-tools-adb-devel/files/patch-adb_client_usb__libusb.cpp72
2 files changed, 60 insertions, 14 deletions
diff --git a/devel/android-tools-adb-devel/Makefile b/devel/android-tools-adb-devel/Makefile
index 6406bce82ab3..61092c047f5b 100644
--- a/devel/android-tools-adb-devel/Makefile
+++ b/devel/android-tools-adb-devel/Makefile
@@ -3,7 +3,7 @@
# Hint: git describe --abbrev=12 --match android-o-preview-2
DISTVERSION= o-preview-2-332
DISTVERSIONSUFFIX= -gd1e9e7bc06f0
-PORTREVISION= 0
+PORTREVISION= 1
PKGNAMESUFFIX= -devel
CONFLICTS_INSTALL= ${PORTNAME}-[0-9]*
diff --git a/devel/android-tools-adb-devel/files/patch-adb_client_usb__libusb.cpp b/devel/android-tools-adb-devel/files/patch-adb_client_usb__libusb.cpp
index 2d115b65bd68..ad3fd7ea9888 100644
--- a/devel/android-tools-adb-devel/files/patch-adb_client_usb__libusb.cpp
+++ b/devel/android-tools-adb-devel/files/patch-adb_client_usb__libusb.cpp
@@ -21,33 +21,62 @@
usb_handle(const std::string& device_address, const std::string& serial,
unique_device_handle&& device_handle, uint8_t interface, uint8_t bulk_in,
uint8_t bulk_out, size_t zero_mask, size_t max_packet_size)
-@@ -152,7 +156,9 @@ struct usb_handle : public ::usb_handle {
+@@ -152,7 +156,14 @@ struct usb_handle : public ::usb_handle {
static auto& usb_handles = *new std::unordered_map<std::string, std::unique_ptr<usb_handle>>();
static auto& usb_handles_mutex = *new std::mutex();
+#if defined(LIBUSB_API_VERSION) && LIBUSB_API_VERSION >= 0x01000102
static libusb_hotplug_callback_handle hotplug_handle;
++#else
++static std::thread* device_poll_thread = nullptr;
++static bool terminate_device_poll_thread = false;
++static auto& device_poll_mutex = *new std::mutex();
++static auto& device_poll_cv = *new std::condition_variable();
+#endif
static std::string get_device_address(libusb_device* device) {
return StringPrintf("usb:%d:%d", libusb_get_bus_number(device),
-@@ -420,6 +426,7 @@ static void device_disconnected(libusb_device* device)
- }
+@@ -380,6 +391,7 @@ static void process_device(libusb_device* device) {
+ LOG(INFO) << "registered new usb device '" << device_serial << "'";
}
+#if defined(LIBUSB_API_VERSION) && LIBUSB_API_VERSION >= 0x01000102
- static auto& hotplug_queue = *new BlockingQueue<std::pair<libusb_hotplug_event, libusb_device*>>();
- static void hotplug_thread() {
- adb_thread_setname("libusb hotplug");
-@@ -449,6 +456,7 @@ static int hotplug_callback(libusb_context*, libusb_de
+ static std::atomic<int> connecting_devices(0);
+
+ static void device_connected(libusb_device* device) {
+@@ -449,7 +461,31 @@ static int hotplug_callback(libusb_context*, libusb_de
hotplug_queue.Push({event, device});
return 0;
}
-+#endif
++#else
++static void poll_for_devices() {
++ libusb_device** list;
++ adb_thread_setname("device poll");
++ while (true) {
++ const ssize_t device_count = libusb_get_device_list(nullptr, &list);
++ LOG(VERBOSE) << "found " << device_count << " attached devices";
++
++ for (ssize_t i = 0; i < device_count; ++i) {
++ process_device(list[i]);
++ }
++
++ libusb_free_device_list(list, 1);
++
++ adb_notify_device_scan_complete();
++
++ std::unique_lock<std::mutex> lock(device_poll_mutex);
++ if (device_poll_cv.wait_for(lock, 500ms, []() { return terminate_device_poll_thread; })) {
++ return;
++ }
++ }
++}
++#endif
++
void usb_init() {
LOG(DEBUG) << "initializing libusb...";
-@@ -457,6 +465,7 @@ void usb_init() {
+ int rc = libusb_init(nullptr);
+@@ -457,6 +493,7 @@ void usb_init() {
LOG(FATAL) << "failed to initialize libusb: " << libusb_error_name(rc);
}
@@ -55,22 +84,39 @@
// Register the hotplug callback.
rc = libusb_hotplug_register_callback(
nullptr, static_cast<libusb_hotplug_event>(LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED |
-@@ -467,6 +476,9 @@ void usb_init() {
+@@ -467,6 +504,7 @@ void usb_init() {
if (rc != LIBUSB_SUCCESS) {
LOG(FATAL) << "failed to register libusb hotplug callback";
}
-+#else
-+ LOG(FATAL) << "libusb doesn't support hotplug but scanning isn't implemented";
+#endif
// Spawn a thread for libusb_handle_events.
std::thread([]() {
-@@ -478,7 +490,9 @@ void usb_init() {
+@@ -475,10 +513,28 @@ void usb_init() {
+ libusb_handle_events(nullptr);
+ }
+ }).detach();
++
++#if !defined(LIBUSB_API_VERSION) || LIBUSB_API_VERSION < 0x01000102
++ std::unique_lock<std::mutex> lock(device_poll_mutex);
++ device_poll_thread = new std::thread(poll_for_devices);
++#endif
}
void usb_cleanup() {
+#if defined(LIBUSB_API_VERSION) && LIBUSB_API_VERSION >= 0x01000102
libusb_hotplug_deregister_callback(nullptr, hotplug_handle);
++#else
++ {
++ std::unique_lock<std::mutex> lock(device_poll_mutex);
++ terminate_device_poll_thread = true;
++
++ if (!device_poll_thread) {
++ return;
++ }
++ }
++ device_poll_cv.notify_all();
++ device_poll_thread->join();
+#endif
}