Architecture for Control Networks, ‘ACN’ is a suite of network protocols designed for control of entertainment technology equipment of the kind used in theatre, live events or large scale installations. It is standardized as ANSI E1.17.
ACN defines two major protocols and a device description language. It also inlcudes a number of smaller interoperability profiles which define the context in which it operates (use of UDP/IP etc.). A good introduction to ACN is provided in the first part of the standard document [ACN Architecture].
Acacian is an implementation of ACN written in C. Its aim is to be a full and efficient implementation of all the major parts of the ACN standard which are not covered by other freely available open-source software.
Implicit to Acacian is the recognition that there is no ‘typical’ ACN component. Equipment varies from lightweight devices with embedded processors and only the most minimal operating system required to support a TCP/IP stack, to complex controllers with “big” operating systems designed to auto-adapt to anything they encounter in a large and complex network.
|Introduction||Architecture for Control Networks, ‘ACN’ is a suite of network protocols designed for control of entertainment technology equipment of the kind used in theatre, live events or large scale installations.|
|Focus||Acacian is not a stand-alone program, but a suite of routines for developers implementing networked devices, controllers and infrastructure.|
|Relationship to OpenACN||Project OpenACN is a very basic level open-source implementation of some parts of ACN available since 2007.|
|Using Acacian||The way you use Acacian will depend very much on your application.|
Acacian is not a stand-alone program, but a suite of routines for developers implementing networked devices, controllers and infrastructure.
Acacian has focused on getting an efficient implementation of the middleware code. It has been built using GCC and Gnu Make and run on a variety of desktop and embedded Linux systems, however OS dependencies have been kept out of the main code files as much as possible.
Except for a few OS specific pieces, the code is written in ISO C99 and extensions have been avoided.
In order to make an implementation which can work on a big system, yet is not bloated and inefficient on a small one with limited scope, there are a plethora of configuration options and many implementation details are disguised behind macros which expand differently depending on the configuration. Some of these options are aspirational in that they have been included because they offer a potentially useful choice but at present only one of the paths offered by that choice has been implemented. Others while implemented have not been tested much or may not work with other choices.
Project OpenACN is a very basic level open-source implementation of some parts of ACN available since 2007.
Acacian includes completely new implementations of SDT, DMP, E1.31, DDL and many helper routines including component tracking and timing and event routines. However, a few parts of the build and configuration structure and low level routines have been adapted to a greater or lesser extent from openACN originals. This is reflected in the BSD style license carried in a few source files.
The way you use Acacian will depend very much on your application. Some rudimentary command line demonstration programs are provided. An implementation which operates DMP on SDT on a POSIX OS is regarded as ‘standard’. DMP uses device property maps which are generated from DDL, either statically for device code, or dynamically for controller code.
A good place to start is by reading the Getting Started guide, looking at the simple command line demonstrations device.c and controller.c and then creating a local configuration header file acncfg_local.h for your build. Looking through acncfg.h in the main source tree documents nearly all options.