Skip to main content

Overview

QLC+ uses a flexible plugin architecture to support various input/output protocols and hardware devices. Each plugin implements the QLCIOPlugin interface, providing a standardized way to communicate with different lighting control systems.

Plugin Interface

All plugins inherit from the QLCIOPlugin base class, which defines the core interface for input/output operations:
class QLCIOPlugin : public QObject
{
    virtual void init() = 0;
    virtual QString name() const = 0;
    virtual int capabilities() const = 0;
    virtual QString pluginInfo() const = 0;
};

Plugin Capabilities

Plugins can support different capabilities through a bitmask system:
  • Output - Send DMX/control data to devices
  • Input - Receive data from controllers
  • Feedback - Send visual feedback to input devices
  • Infinite - Support unlimited universes (network protocols)
  • RDM - Remote Device Management support
  • Beats - Beat detection for audio synchronization

Available Plugins

Network Protocols

Art-Net

Industry-standard DMX over Ethernet protocol using UDP port 6454

E1.31 (sACN)

ANSI E1.31 streaming ACN protocol, UDP port 5568

OSC

Open Sound Control for flexible, bidirectional communication

OS2L

Open Show 2 Light protocol for third-party integration

USB Hardware

DMX USB

USB-to-DMX interfaces from various manufacturers

ENTTEC

ENTTEC DMX USB Pro, Pro Mk2, and Open DMX USB

DMXKing

DMXKing ultraDMX Pro and other DMXKing devices

Control Protocols

MIDI

MIDI input/output for hardware controllers and feedback

HID

Human Interface Devices (joysticks, gamepads, etc.)

Integration

OLA

Open Lighting Architecture integration for advanced protocol support

Plugin Universe Mapping

Each plugin maintains a mapping between QLC+ universes and plugin-specific lines:
typedef struct
{
    quint32 inputLine;              // Plugin input line (UINT_MAX if not patched)
    QMap<QString, QVariant> inputParameters;  // Custom input parameters
    quint32 outputLine;             // Plugin output line (UINT_MAX if not patched)
    QMap<QString, QVariant> outputParameters; // Custom output parameters
} PluginUniverseDescriptor;
The default maximum number of universes is 4, but network-based plugins can support unlimited universes through the Infinite capability.

Data Flow

Output Data Flow

  1. QLC+ engine generates DMX data (0-512 channels)
  2. Engine calls writeUniverse() on the plugin
  3. Plugin processes and transmits data to hardware/network
virtual void writeUniverse(quint32 universe, quint32 output, 
                          const QByteArray& data, bool dataChanged);

Input Data Flow

  1. Plugin receives data from hardware/network
  2. Plugin emits valueChanged() signal
  3. QLC+ engine processes incoming values
signal void valueChanged(quint32 universe, quint32 input, 
                        quint32 channel, uchar value, const QString& key);

Configuration

Plugins can provide custom configuration dialogs:
virtual void configure();           // Open configuration dialog
virtual bool canConfigure() const;  // Check if configurable

Custom Parameters

Plugins support custom parameters for fine-tuning behavior:
virtual void setParameter(quint32 universe, quint32 line, 
                         Capability type, QString name, QVariant value);
virtual void unSetParameter(quint32 universe, quint32 line, 
                           Capability type, QString name);

RDM Support

Some plugins support Remote Device Management (RDM) for bi-directional device communication:
virtual bool sendRDMCommand(quint32 universe, quint32 line, 
                           uchar command, QVariantList params);
RDM enables:
  • Device discovery
  • Parameter reading/writing
  • Status monitoring
  • Remote configuration
RDM is currently only supported by ENTTEC DMX USB Pro and DMXKing devices through the DMX USB plugin.

Hotplug Support

Modern plugins support USB hotplug detection, automatically detecting when devices are connected or disconnected:
public slots:
    void slotDeviceAdded(uint vid, uint pid);
    void slotDeviceRemoved(uint vid, uint pid);

Next Steps

Network Setup

Configure Art-Net or E1.31 for network-based control

USB Hardware

Set up USB-to-DMX interfaces

MIDI Control

Connect MIDI controllers for hands-on control

OLA Integration

Use OLA for advanced protocol support

Build docs developers (and LLMs) love