![]() |
Open Lighting Architecture 0.10.9
|
Receive DMX data using libusb, from a separate thread.
The synchronous libusb calls can sometimes take a while to complete, I've seen cases of up to 21ms.
To avoid blocking the main thread, we need to perform the libusb transfer calls in a separate thread. This class contains all the thread management code, leaving the subclass to implement ReceiveBuffer(), which performs the actual transfer.
ThreadedUsbReceiver can be used as a building block for synchronous widgets.
Public Member Functions | |
| ThreadedUsbReceiver (libusb_device *usb_device, libusb_device_handle *usb_handle, PluginAdaptor *plugin_adaptor, int interface_number=0) | |
| Create a new ThreadedUsbReceiver. | |
| bool | Start () |
| Start the new thread. | |
| void * | Run () |
| Entry point for the new thread. | |
| void | SetReceiveCallback (Callback0< void > *callback) |
| Set the callback to be called when the receive buffer is updated. | |
| const DmxBuffer & | GetDmxInBuffer () const |
| Get DMX Buffer. | |
Protected Member Functions | |
| virtual bool | ReceiveBuffer (libusb_device_handle *handle, DmxBuffer *buffer, bool *buffer_updated)=0 |
| Perform the DMX transfer. | |
| ola::plugin::usbdmx::ThreadedUsbReceiver::ThreadedUsbReceiver | ( | libusb_device * | usb_device, |
| libusb_device_handle * | usb_handle, | ||
| PluginAdaptor * | plugin_adaptor, | ||
| int | interface_number = 0 ) |
Create a new ThreadedUsbReceiver.
| usb_device | The usb_device to use. The ThreadedUsbReceiver takes a ref on the device, while the ThreadedUsbReceiver object exists. |
| usb_handle | The handle to use for the DMX transfer. |
| plugin_adaptor | the PluginAdaptor used to execute callbacks |
| interface_number | the USB interface number of the widget. Defaults to 0. |
|
inline |
Get DMX Buffer.
|
protectedpure virtual |
Perform the DMX transfer.
| handle | the libusb_device_handle to use for the transfer. |
| buffer | The DmxBuffer to be updated. |
| buffer_updated | set to true when buffer was updated (=data received) |
This is called from the receiver thread.
|
virtual |
|
inline |
Set the callback to be called when the receive buffer is updated.
| callback | The callback to call. |
|
virtual |
Start the new thread.
Reimplemented from ola::thread::Thread.