Comments (3)
Hi,
I investigated the reported issue and it seems when the device is closed causes QUsbEventsThread to end execution because QUsbEventsThread::run() exits from while(!this->isInterruptionRequested()) {...} loop, due to ibusb_event_handling_ok(m_ctx) returning '0'. As a result USB events are not processed any more. Hence cb_out is never called.
A quick and dirty fix is to comment out break.
void QUsbEventsThread::run()
{
timeval t = { 0, 100000 };
while (!this->isInterruptionRequested()) {
if (libusb_event_handling_ok(m_ctx) == 0) {
libusb_unlock_events(m_ctx);
//break; // comment out break; to allow thread to run
}
if (libusb_handle_events_timeout_completed(m_ctx, &t, Q_NULLPTR) != 0) {
break;
}
}
}
I've also tried the following which it also worked
void QUsbDevice::close()
{
DbgPrintFuncName();
Q_D(QUsbDevice);
if (d->m_devHandle && m_connected) {
// stop any further write attempts whilst we close down
if (m_log_level >= logInfo)
qInfo("Closing USB connection");
libusb_release_interface(d->m_devHandle, 0); // release the claimed interface
libusb_close(d->m_devHandle); // close the device we opened
+ d->m_events->exit(0);
+ d->m_events->wait();
d->m_devHandle = Q_NULLPTR;
m_connected = false;
emit connectionChanged(m_connected);
} else {
if (m_log_level >= logInfo)
qInfo("USB connection already closed");
}
}
qint32 QUsbDevice::open()
{
...
+ if (!d->m_events->isRunning())
+ d->m_events->start();
m_connected = true;
emit connectionChanged(m_connected);
return 0;
}
from qtusb.
Thanks for finding this, would you mind opening a pull request with the fix?
from qtusb.
Fixed in #59
from qtusb.
Related Issues (20)
- How to use libusb in my project HOT 2
- Question: how to use with CMake? HOT 17
- Linux crash: assertion failed in ~QUsbDevice() HOT 17
- Maybe you need to provide an instruction to build QtUSB by using pre-built version of hidapi and libusb. HOT 2
- QUSB will block the main thread and lead to stuck of ui. HOT 3
- QUsbEndpoint::readData may throw std::bad_alloc exception.
- Ubuntu 20.04 newest version fails
- Qtusb for PL2303 HOT 1
- QtUsb Examples not building properly HOT 2
- qusbglobal.h is not found. HOT 1
- Compiling With MinGW
- how to use the QUsbEndpoint::controlEndpoint HOT 2
- Assertion failure inside ~QUsbDevicePrivate() HOT 2
- Poor Performance on Windows HOT 1
- qusbdevice.o:-1: error: Undefined symbols for architecture x86_64
- Question on QTUsb usage with HID device and threading
- Feature: FTDI line/modem status byte dropping HOT 3
- Feature: retrieve strings from device descriptor HOT 2
- HId note
- qt6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from qtusb.