/* * SPDX-FileCopyrightText: 2026 Benjamin Harris * SPDX-License-Identifier: Apache-2.0 * * Dante mDNS advertisement — clean-room, from docs/dante-protocol-notes.md. * * Publishes this device's presence over mDNS/DNS-SD so Dante Controller and * peer devices can see it. Advertises the device-level services: * _netaudio-arc._udp (control endpoint, ARC port) * _netaudio-cmc._udp (announce endpoint, CMC port) * and, per transmit channel, _netaudio-chan._udp. * * WARNING: advertising is only half the story. A device that appears in * discovery but cannot answer ARC/CMC queries is worse than an invisible one * (it shows up broken in Dante Controller). Only enable this once the CMC and * ARC responders are running. It is gated OFF by default in Kconfig. * * PROTOTYPE / UNTESTED: TXT version strings mimic values observed on real * Dante hardware and may need tuning against a specific Dante Controller * version. Verify against a capture. */ #pragma once #include "dante_device.h" #include "esp_err.h" #ifdef __cplusplus extern "C" { #endif /* * Start advertising the device-level Dante services (_netaudio-arc and * _netaudio-cmc) from `id`. Sets the mDNS hostname/instance to id->hostname. * Shares the process-wide ESP-IDF mDNS instance (init is idempotent). * The identity is copied internally. */ esp_err_t dante_advertise_start(const dante_identity_t *id); /* * Advertise a transmit channel as _netaudio-chan._udp. `index` is 0-based * (published as the 1-based Dante channel id); `name` is the channel name * (the DNS-SD instance becomes "@"). Call after * dante_advertise_start(). */ esp_err_t dante_advertise_tx_channel(uint8_t index, const char *name); /* Remove the Dante mDNS services advertised by this module. Does not touch * services owned by other components (e.g. the AES67 _ravenna records). */ void dante_advertise_stop(void); #ifdef __cplusplus } #endif