Extract corrected encode_emblc and TA embedded-LC wiring from domain into
infrastructure adapters. Inject DmrEmbeddedLcEncoder and TalkerAliasEmblcEncoder
from main.py so application layers stay free of infrastructure imports. Use the
fixed encoder for bridge group LC and pkt_gen as well as Talker Alias overlay.
- both: passthrough when source sends TA (DMRA or embedded voice), inject
template otherwise; OBP sources inject immediately at VHEAD
- Always rewrite destination group embedded LC on bridge forward (legacy
parity; fixes OBP TG mismatch packet loss introduced by TA branch)
- Fix dmr_utils3 encode_emblc index bug for lossless injected TA text
- Log decoded TA from voice; strict MMDVM DMRA wire layout
- chore: ruff per-file E402 ignore for main/parrot entrypoints
Notify report clients immediately after SIGHUP reload, emit END events when
removing systems, and keep OPTIONS/TS1_STATIC/TS2_STATIC when merging YAML.
Reload GLOBAL, REPORTS, ALIASES and SYSTEMS without full restart:
add/remove UDP listeners (OBP, GENERATOR expansion), update bind
addresses, preserve PEERS/STATS and active streams on unchanged ports.
Inject Talker Alias on HBP bridge/repeat via standalone DMRA packets
and embedded LC in forwarded DMRD voice (FLCO 4–7) for MMDVMHost/
DMRGateway. UTF-8 encoding (format 2) and LC/TA superframe alternation
for the full stream; clear embed state on VTERM.
Add reopen_file_handlers() and register SIGUSR2 after logging setup in
main and parrot. Document create/postrotate/kill -USR2 in monitoring
guide (EN/ES). SIGUSR2 only reopens file handlers; does not reload YAML.
- Sync TARGET_SOCK from actual peer when RELAX_CHECKS accepts DMRD/DMRE
- Fallback TARGET_IP/PORT for BCSQ send; warn if no destination
- Resend BCSQ every 2s while loop-control loser (UDP loss)
- Emit END,RX on first loser transition for monitor
- Robust _bcsq TG key matching in to_target
- Use DefaultVoiceProvider when Audio dir exists (was gated by ANNOUNCEMENT_LANGUAGES)
- Create Audio dir at startup when voice config present
- ANNOUNCEMENT_LANGUAGES optional (ident only); each item has own LANGUAGE
- ident: fallback to per-system ANNOUNCEMENT_LANGUAGE when empty
- disconnected_voice: use system language directly
- Clarify ENABLED, ANNOUNCEMENT_LANGUAGES in adn-voice.example.yaml
- Add Audio/.gitkeep, update .gitignore to keep folder structure
- Port playback.py to clean architecture: PlaybackUseCases, parrot_main.py, adn-parrot.py
- Fix critical PEER auth bug: RPTACK/MSTNAK data offsets were off by 1 (5→6) preventing PEER login
- Extract config normalization to shared config_normalizer.py (used by both main and parrot)