From 92708386b8ea2a63b99c20e6a5f6beff3d9311ac Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Wed, 27 Jul 2016 21:04:32 +0200 Subject: [PATCH] Support hotplugging existing devices. --- bmusb.cpp | 3 ++- bmusb/bmusb.h | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/bmusb.cpp b/bmusb.cpp index ec3eac2..09473fd 100644 --- a/bmusb.cpp +++ b/bmusb.cpp @@ -51,6 +51,7 @@ using namespace std::placeholders; namespace bmusb { card_connected_callback_t BMUSBCapture::card_connected_callback = nullptr; +bool BMUSBCapture::hotplug_existing_devices = false; namespace { @@ -1346,7 +1347,7 @@ void BMUSBCapture::start_bm_thread() // coming back with errors, so only care about devices joining. if (card_connected_callback != nullptr) { if (libusb_hotplug_register_callback( - nullptr, LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED, LIBUSB_HOTPLUG_NO_FLAGS, + nullptr, LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED, hotplug_existing_devices ? LIBUSB_HOTPLUG_ENUMERATE : LIBUSB_HOTPLUG_NO_FLAGS, USB_VENDOR_BLACKMAGIC, LIBUSB_HOTPLUG_MATCH_ANY, LIBUSB_HOTPLUG_MATCH_ANY, &BMUSBCapture::cb_hotplug, nullptr, nullptr) < 0) { fprintf(stderr, "libusb_hotplug_register_callback() failed\n"); diff --git a/bmusb/bmusb.h b/bmusb/bmusb.h index 506685d..21cbc40 100644 --- a/bmusb/bmusb.h +++ b/bmusb/bmusb.h @@ -251,9 +251,11 @@ class BMUSBCapture : public CaptureInterface { // The callback function transfers ownership. If you don't want to hold // on to the device given to you in the callback, you need to call // libusb_unref_device(). - static void set_card_connected_callback(card_connected_callback_t callback) + static void set_card_connected_callback(card_connected_callback_t callback, + bool hotplug_existing_devices_arg = false) { card_connected_callback = callback; + hotplug_existing_devices = hotplug_existing_devices_arg; } // Similar to set_card_connected_callback(), with the same caveats. @@ -299,6 +301,7 @@ class BMUSBCapture : public CaptureInterface { std::unique_ptr owned_audio_frame_allocator; frame_callback_t frame_callback = nullptr; static card_connected_callback_t card_connected_callback; + static bool hotplug_existing_devices; card_disconnected_callback_t card_disconnected_callback = nullptr; std::thread dequeue_thread; -- 2.39.2