# components/dante Clean-room Dante protocol support for the ESP32-P4, written independently from the behavioural notes in [`docs/dante-protocol-notes.md`](../../docs/dante-protocol-notes.md). > **Licensing:** this component is Apache-2.0 and must stay clean-room. It is > implemented from *understanding* of Dante's on-the-wire behaviour, never by > copying, translating, or closely paraphrasing `reference/inferno` (GPL/ > AGPL). See the hard rule in [`CLAUDE.md`](../../CLAUDE.md). ## What's here now ### Discovery (`dante_discovery.h`) Read-only mDNS/DNS-SD browsing for Dante devices. It queries the four Dante service types (`_netaudio-arc`, `_netaudio-cmc`, `_netaudio-chan`, `_netaudio-bund`) and reports each instance found — hostname, IP, port, and TXT records — via a callback, or logs them if no callback is given. - `dante_discovery_scan()` — one-shot synchronous sweep. - `dante_discovery_start()` / `dante_discovery_stop()` — background scanner that repeats on an interval. This does **not** advertise this device and does **not** touch audio, so it is safe to run on a live Dante network. It's primarily a bring-up aid: it shows what Dante gear is present and how its channels are formatted (sample rate, bit depth, latency, fpp), which is exactly what you need when getting AES67 interop working. It shares the process-wide ESP-IDF mDNS instance with the AES67 stack (it only ever queries; it never frees mDNS). #### Enabling Controlled by Kconfig (`idf.py menuconfig` → *Dante*): - `DANTE_DISCOVERY_ON_BOOT` (default y) — `main` starts the background scanner once the network is up. - `DANTE_DISCOVERY_INTERVAL_MS` (default 15000) — sweep interval. ## Not yet implemented Everything past discovery, in rough dependency order (see the protocol notes): - **Advertisement** — publishing `_netaudio-arc`/`-cmc`/`-chan`/`-bund` so Dante Controller sees this device. Deliberately not done yet: an advertised device that can't answer ARC/CMC queries is worse than an invisible one. - **CMC** server — device-announce request/response (port 8800). - **ARC** server — capability + channel enumeration and the name-based subscription (routing) model (port 4440). - **Flow control (dbcp)** — open/update/stop audio flows with keepalives (port 4455). - **Media framing** — the 9-byte-header Dante media packets ↔ our I2S engine. - **PTPv1** — the legacy Dante clock (see `CLAUDE.md` "Known hard problems"). ## Status Compiles as an ESP-IDF component but is **not yet build-verified** (no ESP-IDF toolchain in the dev environment where it was written) and untested against real Dante hardware.