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.  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.

Included within Acacian are

  • ACN Root Layer for UDP
  • SDT (Session Data Transport) protocol.  A full and efficient implementation allowing multiple sessions and channels, and multiple client protocols.
  • DMP (Device Management Protocol) with parsing and unpacking of messages; relating arbitrary incoming property addresses to internal property structures; cumulative processing of multiple messages and aggregation of responses.
  • DDL Parser and property map generator.  Works dynamically for controller use or at compile time to generate property tables for devices; generates a compact in-memory device tree representation, seperate from the DMP property map, which may be retained and used by controller code, or deleted after parse if not required.
  • E1.31 (sACN) receive module.
  • Fast optimized handling of UUID keys for tracking and managing components (CIDs), device types (DCIDs) and DDL modules.
  • An optional simple event loop which can handle timing and network I/O functions for an application.
  • Logging and debug macros.
  • Low level network interface using BSD Sockets API for both IPv4 and IPv6.
Summary
IntroductionArchitecture 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.
FocusAcacian is not a stand-alone program, but a suite of routines for developers implementing networked devices, controllers and infrastructure.
Relationship to OpenACNProject OpenACN is a very basic level open-source implementation of some parts of ACN available since 2007.
Using AcacianThe way you use Acacian will depend very much on your application.

Focus

Target user

Acacian is not a stand-alone program, but a suite of routines for developers implementing networked devices, controllers and infrastructure.

Design principles

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.

Relationship to OpenACN

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.

Using Acacian

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.

If you want to build an E1.17 application uisng DMP on top of SDT using IP version 4 then your best place to start is with the sample applications in the demo directory.
Simple demonstration device application.
Simple demonstration controller application.
Close