Streaming ACN (sACN) is an ANSI standard for entertainment technology by ESTA for transmission of DMX512 data over IP networks. sACN is widely used in the entertainment industry for real-time control of entertainment technology, especially lighting fixtures.
This repository contains a C-language library and a C++ wrapper library for communicating via sACN.
For instructions on building the sACN library, as well as an sACN overview and in-depth documentation, please see the documentation.
sACN uses EtcPal for platform abstraction. See EtcPal's README for more information on supported platforms.
C++ wrappers support C++ version 14.
C functionality supports C99 with the exception of the following features:
- variable-length arrays
- flexible array members
- designated initializers
- the "restrict" keyword
This library meets a high quality standard by employing a variety of quality gates, including code review, automated tests, and a variety of static and runtime analysis tools.
- At least 2 developers must approve all code changes made before they can be merged into the integration branch.
- API and major functionality reviews typically include application developers as well.
- This consists primarily of unit tests covering the individual API modules.
- Some integration tests have also been made.
- Clang Tidy (in phases) is set up. Refer to
.clang-tidy
to see which rulesets have been added. - Klocwork is also set up - like Clang Tidy, rulesets will continue to be added over time.
- Warnings-as-errors is enabled for MSVC, GCC, Clang, and Doxygen.
- Clang format is enabled – currently this follows the style guidelines established for our libraries, and it may be updated from time to time. See
.clang-format
for more details. - Non-conformance to
.clang-format
will result in pipeline failures. The code is not automatically re-formatted.
- A GitLab CI pipeline is being used to run builds and tests that enforce all supported quality gates for all merge requests, and for generating new library builds from
main
. See.gitlab-ci.yml
for details.
- All automated tests* are run under Address Sanitizer (Windows, Mac, & Linux), Memory Sanitizer (Linux), Undefined Behavior Sanitizer (Mac & Linux), and Thread Sanitizer (Mac & Linux). *E2E tests are only run on Windows (ASAN) and Linux (all).
sACN development is using Git for revision control.
sACN is licensed under the Apache License 2.0. sACN also incorporates some third-party software with different license terms, disclosed in ThirdPartySoftware.txt in the directory containing this README file.
This library implements ANSI E1.31-2018. You can download the standard document for free from the ESTA TSP downloads page.
sACN is official, open-source software developed by ETC employees and is designed to interact with ETC products. For challenges using, integrating, compiling, or modifying this software, we encourage posting on the issues page of this project.