home / projects / opendmxserver

OpenDMX server

What is it: Linux command line utility to control an ENTTEC OpenDMX widget via a listening port. Tested on Ubuntu 12.04.

Download: opendmxserver-1.0.0

License: GPL

Usage

Syntax is SCCCXXX where CCC=DMX channel and XXX = value. Single C means commit changes to the DMX universe.

Example: Set channel 16=255 and channel 17=123.

./opendmxserver

In another terminal...

telnet localhost 9999
S016255
S017123
C

Example: Usage via another script using netcat:

echo -e "S015255\nS017123\nC" | netcat -w 1 localhost 9999

Background

DMX is the old-school protocol for controlling stage lights, and I happen to have a small amount of kit in my cellar: 1500W vaporizer strobe, EU lights GX40 laser and a spinmaster I, all with DMX512 interfaces.

I bought a ENTTEC open DMX USB widget a few years ago, but was disappointed by back of Linux support.

The solution: write my own DMX server and learn a bit of C++ whilst I'm at it. Yes I know boost provides threading support etc., but it was more fun to write my own class wrappers onto pthreads. The ENNTEC site has an Windows example which helped massively.

Dependencies

The USB widget uses the ever popular FTDI chip which has a Linux driver available, but has no library support in current Ubuntu repositories.

wget http://www.ftdichip.com/Drivers/D2XX/Linux/libftd2xx1.1.12.tar.gz
tar xzf libftd2xx1.1.12.tar.gz
cd libftd2xx1.1.12
sudo cp release/build/x86_64/libftd2xx.so.1.1.12.so /usr/lib/
sudo ln -s /usr/lib/libftd2xx.so.1.1.12.so libftd2xx.so
cp ./release/ftd2xx.h projectarea
cp ./release/WinTypes.h projectarea

Building

Use ./build.sh or just use g++ with the relevant -l flags.

g++ -I.   *.cpp -o opendmxserver -lpthread -lstdc++ -lftd2xx