Open Lighting Architecture  0.9.6
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Protected Member Functions | List of all members
ola::plugin::usbdmx::ThreadedUsbSender Class Reference

Detailed Description

Send 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 TransmitBuffer(), which performs the actual transfer.

ThreadedUsbSender can be used as a building block for synchronous widgets.

Inheritance diagram for ola::plugin::usbdmx::ThreadedUsbSender:
Inheritance graph
[legend]
Collaboration diagram for ola::plugin::usbdmx::ThreadedUsbSender:
Collaboration graph
[legend]

Public Member Functions

 ThreadedUsbSender (libusb_device *usb_device, libusb_device_handle *usb_handle)
 Create a new ThreadedUsbSender.
bool Start ()
 Start the new thread.
void * Run ()
 Entry point for the new thread.
bool SendDMX (const DmxBuffer &buffer)
 Buffer a DMX frame for sending.

Protected Member Functions

virtual bool TransmitBuffer (libusb_device_handle *handle, const DmxBuffer &buffer)=0
 Perform the DMX transfer.

Additional Inherited Members

- Private Member Functions inherited from ola::thread::Thread
 Thread (const Options &options=Options())
 Create a new thread with the specified thread options.
virtual ~Thread ()
 Destructor.
virtual bool Start ()
 Start the thread and wait for the thread to be running.
virtual bool FastStart ()
 Start the thread and return immediately.
virtual bool Join (void *ptr=NULL)
 Join this thread.
bool IsRunning ()
 Check if the thread is running.
ThreadId Id () const
 Return the thread id.
std::string Name () const
 Return the thread name.
virtual void * Run ()=0
 The entry point for the new thread.
- Static Private Member Functions inherited from ola::thread::Thread
static ThreadId Self ()
 Returns the current thread's id.

Constructor & Destructor Documentation

ola::plugin::usbdmx::ThreadedUsbSender::ThreadedUsbSender ( libusb_device *  usb_device,
libusb_device_handle *  usb_handle 
)

Create a new ThreadedUsbSender.

Parameters
usb_deviceThe usb_device to use. The ThreadedUsbSender takes a ref on the device, while the ThreadedUsbSender object exists.
usb_handleThe handle to use for the DMX transfer.

Member Function Documentation

void * ola::plugin::usbdmx::ThreadedUsbSender::Run ( )

Entry point for the new thread.

Returns
NULL.
bool ola::plugin::usbdmx::ThreadedUsbSender::SendDMX ( const DmxBuffer buffer)

Buffer a DMX frame for sending.

Parameters
bufferthe DmxBuffer to send.

This should be called in the main thread.

bool ola::plugin::usbdmx::ThreadedUsbSender::Start ( )

Start the new thread.

Returns
true if the thread is running, false otherwise.
virtual bool ola::plugin::usbdmx::ThreadedUsbSender::TransmitBuffer ( libusb_device_handle *  handle,
const DmxBuffer buffer 
)
protectedpure virtual

Perform the DMX transfer.

Parameters
handlethe libusb_device_handle to use for the transfer.
bufferThe DmxBuffer to transfer.
Returns
true if the transfer was completed, false otherwise.

This is called from the sender thread.


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