diff options
author | Kari Oikarinen <kari.oikarinen@qt.io> | 2016-10-11 15:17:29 +0300 |
---|---|---|
committer | Kari Oikarinen <kari.oikarinen@qt.io> | 2016-10-18 12:37:29 +0000 |
commit | d2ea0e1d286747d54752c7b7bdc71df9fa31e5ac (patch) | |
tree | dcaf05193a16c848b7cc363297dfdd220475a057 | |
parent | bf3d39023b4cbeb20095ff2c84127ce824c2979e (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.cpp | 9 | ||||
-rw-r--r-- | libqdb/usb/usbconnection.h | 1 |
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; |