summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKari Oikarinen <kari.oikarinen@qt.io>2016-10-11 15:17:29 +0300
committerKari Oikarinen <kari.oikarinen@qt.io>2016-10-18 12:37:29 +0000
commitd2ea0e1d286747d54752c7b7bdc71df9fa31e5ac (patch)
treedcaf05193a16c848b7cc363297dfdd220475a057
parentbf3d39023b4cbeb20095ff2c84127ce824c2979e (diff)
Don't use libusb_set_auto_detach_kernel_driver()
It is not available in the older libusbx that RHEL ships. Manually implement same logic. Task-number: QTBUG-56066 Change-Id: I3b6f2f8870266fd907780ec45ed0e6cbf5d3aa07 Reviewed-by: Kimmo Ollila <kimmo.ollila@theqtcompany.com>
-rw-r--r--libqdb/usb/usbconnection.cpp9
-rw-r--r--libqdb/usb/usbconnection.h1
2 files changed, 9 insertions, 1 deletions
diff --git a/libqdb/usb/usbconnection.cpp b/libqdb/usb/usbconnection.cpp
index 2a3bf92..9f99dc3 100644
--- a/libqdb/usb/usbconnection.cpp
+++ b/libqdb/usb/usbconnection.cpp
@@ -35,6 +35,7 @@ UsbConnection::UsbConnection(const UsbDevice &device)
: m_device{device.usbDevice},
m_handle{nullptr},
m_interfaceInfo(device.interfaceInfo), // uniform initialization with {} fails with GCC 4.9
+ m_detachedKernel{false},
m_readThread{nullptr},
m_reader{nullptr},
m_reads{}
@@ -49,6 +50,8 @@ UsbConnection::~UsbConnection()
}
if (m_handle) {
libusb_release_interface(m_handle, m_interfaceInfo.number);
+ if (m_detachedKernel)
+ libusb_attach_kernel_driver(m_handle, m_interfaceInfo.number);
libusb_close(m_handle);
}
}
@@ -75,7 +78,11 @@ bool UsbConnection::open(OpenMode mode)
return false;
}
- libusb_set_auto_detach_kernel_driver(m_handle, 1);
+ if (libusb_kernel_driver_active(m_handle, m_interfaceInfo.number) == 1) {
+ qDebug() << "Detached kernel driver";
+ m_detachedKernel = true;
+ libusb_detach_kernel_driver(m_handle, m_interfaceInfo.number);
+ }
ret = libusb_claim_interface(m_handle, m_interfaceInfo.number);
if (ret) {
diff --git a/libqdb/usb/usbconnection.h b/libqdb/usb/usbconnection.h
index e050557..d78253f 100644
--- a/libqdb/usb/usbconnection.h
+++ b/libqdb/usb/usbconnection.h
@@ -60,6 +60,7 @@ private:
LibUsbDevice m_device;
libusb_device_handle *m_handle;
UsbInterfaceInfo m_interfaceInfo;
+ bool m_detachedKernel;
std::unique_ptr<QThread> m_readThread;
std::unique_ptr<UsbConnectionReader> m_reader;
QQueue<QByteArray> m_reads;