OpenLCP/sacn/README.md
2021-05-27 10:59:22 -04:00

54 lines
1.7 KiB
Markdown

# Library for E1.31 sACN
## `Lightweight streaming protocol for transport of DMX512 using ACN`
## Top level include
Include `sacn.h` for full protocol support.
> ```#include "sacn.h"```
### Requirements
Expects the parent directory to contain the `acn` and `dmx` libraries.
## Logical components
### Protocol Handling
* `sacn.h`: [`SACN`] protocol constants.
* `data.h`: [`SACN::DATA`] protocol support for `VECTOR_ROOT_E131_DATA` packets.
* `extended.h`: [`SACN::EXTENDED`] protocol support for `VECTOR_ROOT_E131_EXTENDED` packets
### Data Classes
* `universe.h`: [`SACN::Universe`] A set of up to 512 data slots identified by universe number. Note: In E1.31 there may be multiple sources for a universe.
> For protocol agnostic universe refer to the base class, `DMX::Universe`
* `receiver.h`: [`SACN::Receiver`] A receiver is the intended target of information from a source. A receiver may listen on multiple universes.
* `receiver-esp.h`: [`SACN::EspReceiver`] A referance implimention, derived from `SACN::Receiver` for use with ESP devices and Arduino.
## Usage with Arduino
Include `receiver-esp.h` at the top of your sketch.
> ```
> #include "src/lib/sacn/receiver-esp.h"
> ```
Create a receiver object.
> ```
> EspReceiver * e131 = new EspReceiver();
> ```
In `setup`, subscribe to a universe an register a callback for data activity.
> ```
setup() {
e131->subscribe(1);
e131->universe(1)->onData(std::bind(&universeHandler,
std::placeholders::_1));
}
>```
Write a handler function with the follow signature (returns `void`, requires 1 argument, a `Universe` pointer):
> ```
void universeHandler(Universe * universe) {
do something...
}
> ```