Open Lighting Architecture
Latest Git
|
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. More... | |
bool | Start () |
Start the new thread. More... | |
void * | Run () |
Entry point for the new thread. More... | |
void | SetReceiveCallback (Callback0< void > *callback) |
Set the callback to be called when the receive buffer is updated. More... | |
const DmxBuffer & | GetDmxInBuffer () const |
Get DMX Buffer. More... | |
Protected Member Functions | |
virtual bool | ReceiveBuffer (libusb_device_handle *handle, DmxBuffer *buffer, bool *buffer_updated)=0 |
Perform the DMX transfer. More... | |
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.