From bff488c02e9dbeddd8672fb9dc9222f6a1fa8862 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20P=C3=A9rez?= Date: Tue, 14 Jul 2026 00:11:06 -0400 Subject: [PATCH] fix: refine announcement inject slot-busy detection Block inject only on external QSO (RX active, TX in hangtime) while still allowing dynamic UA and active-bridge slots used for synthetic PTT. --- src/adn_server/application/voice_use_cases.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/adn_server/application/voice_use_cases.py b/src/adn_server/application/voice_use_cases.py index b91e639..ca82b9d 100644 --- a/src/adn_server/application/voice_use_cases.py +++ b/src/adn_server/application/voice_use_cases.py @@ -127,20 +127,23 @@ class VoiceUseCases: from .routing.helpers import master_dynamic_tg_slots, master_slot_holds_server_broadcast from .server_voice import all_server_voice_ids - if slot.get("RX_TYPE") != HBPF_SLT_VTERM or slot.get("TX_TYPE") != HBPF_SLT_VTERM: - if master_slot_holds_server_broadcast( - slot, - time.time(), - server_voice_rf_srcs=all_server_voice_ids(self._config), - ): - return False + if master_slot_holds_server_broadcast( + slot, + time.time(), + server_voice_rf_srcs=all_server_voice_ids(self._config), + ): + return False + # External QSO on RX while slot is in hangtime — defer announcement inject. + if slot.get("RX_TYPE") != HBPF_SLT_VTERM and slot.get("TX_TYPE") == HBPF_SLT_VTERM: return True if wire_ts in master_dynamic_tg_slots(sys_cfg, int(tg)): return False ptt_system = self._announcement_ptt_system or "" if wire_ts in self._active_bridge_slots_for_tg(tg, ptt_system): return False - return False + if slot.get("RX_TYPE") == HBPF_SLT_VTERM and slot.get("TX_TYPE") == HBPF_SLT_VTERM: + return False + return True def _inject_ptt_slot_order(self, tg: int, sys_cfg: dict[str, Any]) -> list[int]: """Prefer the RF slot where ``tg`` is already a dynamic UA session."""