RTTrPL


Real-Time Tracking Protocol - Lighting

Information

RTTrPL is used to stream lighting fixture and DMX information to third parties interested in overwriting fixture DMX values sent from a lighting console, for control over said fixtures. RTTrPL output should be triggered by motion data, DMX input, show starting/stopping, and third party requests. As such, it should not send at a fixed rate like the RTTrPM protocol.

Data Structures

An RTTrPL packet is a list of universes, each of which contains a nested list of spots (fixture IDs), which further contain a nested list of channels and their values:

  • Controlled Universe
  • Controlled Fixtures within each Universe
  • Channels to be controlled
  • DMX Values of controlled channels

General Information

  • In general the Peer is responsible for DMX merging
  • The Peer buffer and RTTrPL generating buffer need to be synchronized
  • Synchronization model: Snapshot / Update, which balances performance and implementation difficulty
  • Snapshot and Update share the same packet format, the type should be indicated by the Action field in the Lighting Output module
  • Snapshot contains all channels of all universes that are being controlled while Update changes only a portion of the buffer
  • An Update may contain one or more universes
  • Hold Time controls when to release the buffer, if a timeout ouccurs, the Peer should release its buffer
  • Out of Sync detection: Lighting Sequence in Lighting Output module is a sequentially increasing number, if the Peer receives packets out of sequence, it should wait for a Snapshot packet from the generator to re-sync

Downloads

The RTTrP Repository has stub code available which contains packet definitions of RTTrPL. Please visit the following for Python and C++ code respecitvely:


Modules and Packet Structure

Packet Modules

Enumerated Type Value
Lighting Output 0x07
Universe 0x09
Spot 0x0A

Real-Time Tracking Protocol (RTTrP) Header

Field Name Type Size (bytes) Description
0 Header / Integer Signature UInt16 2 Big Endian: 0x4154, Little Endian: 0x5441
1 Header / Float Signature UInt16 2 Big Endian: 0x4434, Little Endian: 0x3444
2 Header Version UInt16 2 Value = 0x0003, will increase if header changes
3 Packet ID UInt32 4 Packet sequence number
4 Packet Format UInt8 1 Value = 0x00 (Raw), 0x01 (Protobuf), 0x02 (Thrift)
5 Size UInt16 2 Size of packet in bytes including header
6 Context UInt32 4 User definable
7 Number of Packet Modules UInt8 1
8 Packet Module 0 Packet Module Variable
9 Packet Module 1 Packet Module Variable
... ...

For more in-depth details on the RTTrP packet header see RTTrP.

Packet Module - Lighting Output

Field Name Type Size (bytes) Description
0 Type UInt8 1 Value = 0x07
1 Size UInt16 2 Size of packet module including type and size
2 Lighting Sequence UInt32 4 Lighting session sequence. Starting from 0
3 Action UInt8 1 0x00: snapshot; 0x01: update
4 Hold Time UInt32 4 0x00: Do not release automatically; > 0 milliseconds before releasing
5 Number of Universe Modules UInt16 2
6 Packet Module 0 Packet Module Variable
7 Packet Module 1 Packet Module Variable
... ...

Packet Module - Universe Module

Field Name Type Size (bytes) Description
0 Type UInt8 1 Value = 0x09
1 Size UInt16 2 Size of packet module including type and size
2 Universe ID UInt16 2
3 Number of Spot Modules UInt16 2
4 Spot Module 0 Packet Module Variable
5 Spot Module 1 Packet Module Variable
... ...

Packet Module - Spot Module

Field Name Type Size (bytes) Description
0 Type UInt8 1 Value = 0x0A
1 Size UInt16 2 Size of packet module including type and size
2 Spot ID UInt16 2 Fixture ID
3 Spot Offset UInt16 2 Location of the byte offset in a universe
4 Number of Channel Structures UInt16 2
5 Channel Block 0 Variable
6 Channel Block 1 Variable
... ...

NOTE: The Spot ID field refers to the Fixture ID

Channel Block (Fixed-Size)

Field Name Type Size (bytes) Description
0 Channel Offset UInt16 2 Locate the byte offset in Spot (not universe)
1 Xfade UInt16 2 0.00% -- 100.00% (fade / 100) (Could be wrong if cross-channel values are used)
2 Value UInt8 1 DMX channel value