Ember+ Rust Implementation
A complete Rust implementation of Lawo's Ember+ control protocol.
Ember+ is a control protocol used in broadcast and professional audio/video equipment, providing a tree-based data structure for parameters, nodes, functions, and matrices.
Features
-
Complete Protocol Support
- S101 framing protocol (transport layer)
- ASN.1 BER encoding/decoding
- Glow DTD (Ember+ schema)
-
Client (Consumer)
- Connect to Ember+ providers
- Browse tree structure
- Read/write parameter values
- Subscribe to changes
- Invoke functions
- Matrix operations
-
Server (Provider)
- Host an Ember+ tree
- Handle client connections
- Callbacks for value changes
- Function invocation handlers
- Matrix operation handlers
-
Async/Await
- Built on Tokio for efficient async I/O
- Non-blocking operations
Installation
Add to your Cargo.toml:
[]
= "0.1"
= { = "1", = ["full"] }
Quick Start
Client Example
use ;
async
Server Example
use Arc;
use ;
use TreeNode;
async
CLI Tool
The crate includes a CLI tool for testing:
# Connect to a provider
# Start a test server
Examples
See the examples/ directory for more detailed examples:
# Run the client example
# Run the server example
Module Structure
ber- ASN.1 BER encoding/decodings101- S101 framing protocolglow- Glow DTD types and tagstree- Runtime tree data structurescodec- High-level Glow encoding/decodingclient- Ember+ client (consumer)server- Ember+ server (provider)
Protocol Compatibility
This implementation aims to be compatible with:
- Lawo's official Ember+ SDK
- sofie-emberplus-connection
- Other compliant Ember+ implementations
Tested with:
- Lawo Ruby
- Lawo R3lay
- Lawo MxGUI
License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT License (LICENSE-MIT)
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.