GithubHelp home page GithubHelp logo

Comments (3)

digitalaspirin avatar digitalaspirin commented on June 9, 2024

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.

fpoussin avatar fpoussin commented on June 9, 2024

Thanks for finding this, would you mind opening a pull request with the fix?

from qtusb.

fpoussin avatar fpoussin commented on June 9, 2024

Fixed in #59

from qtusb.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.