Open Lighting Architecture: ola::plugin::usbdmx::ThreadedUsbReceiver Class Reference

| Open Lighting Architecture 0.10.9

Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | List of all members
ola::plugin::usbdmx::ThreadedUsbReceiver Class Referenceabstract

## Detailed Description

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.

Inheritance diagram for ola::plugin::usbdmx::ThreadedUsbReceiver:

## 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.

## Constructor & Destructor Documentation

## ◆ ThreadedUsbReceiver()

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.

Parameters

  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.

## Member Function Documentation

## ◆ GetDmxInBuffer()

const DmxBuffer & ola::plugin::usbdmx::ThreadedUsbReceiver::GetDmxInBuffer | ( |  | ) | const
| inline

Get DMX Buffer.

Returns
  DmxBuffer with current input values.

## ◆ ReceiveBuffer()

virtual bool ola::plugin::usbdmx::ThreadedUsbReceiver::ReceiveBuffer | ( | libusb_device_handle * | handle,
|  | DmxBuffer * | buffer,
|  | bool * | buffer_updated )
| protectedpure virtual

Perform the DMX transfer.

Parameters

  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)

Returns
  true if the transfer was completed, false otherwise.

This is called from the receiver thread.

## ◆ Run()

void * ola::plugin::usbdmx::ThreadedUsbReceiver::Run | ( |  | ) |
| virtual

Entry point for the new thread.

Returns
  NULL.

Implements ola::thread::Thread.

## ◆ SetReceiveCallback()

void ola::plugin::usbdmx::ThreadedUsbReceiver::SetReceiveCallback | ( | Callback0< void > * | callback | ) |
| inline

Set the callback to be called when the receive buffer is updated.

Parameters

  callback | The callback to call.

## ◆ Start()

bool ola::plugin::usbdmx::ThreadedUsbReceiver::Start | ( |  | ) |
| virtual

Start the new thread.

Returns
  true if the thread is running, false otherwise.

Reimplemented from ola::thread::Thread.

The documentation for this class was generated from the following files:

- plugins/usbdmx/ThreadedUsbReceiver.h
- plugins/usbdmx/ThreadedUsbReceiver.cpp