From 99c17919d0c7c9392ffeb975bb82f66fbedb9d63 Mon Sep 17 00:00:00 2001
From: Ronny Nilsson <ronny.nilsson@iopsys.eu>
Date: Thu, 2 May 2019 15:27:31 +0200
Subject: [PATCH] Send AST_FRAME_DTMF_BEGIN only to an active remote call.
 Ignore when user presses the R-button to switch back and forth between
 multiple parallel calls.

---
 channels/chan_brcm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/channels/chan_brcm.c b/channels/chan_brcm.c
index d54a7720..19eecd84 100644
--- a/channels/chan_brcm.c
+++ b/channels/chan_brcm.c
@@ -1950,7 +1950,7 @@ void handle_dtmf(enum LINE_EVENT event,
 	if (p->dtmf_first < 0) {
 		p->dtmf_first = dtmf_button;
 		ast_debug(9,"Pressed DTMF %s\n", dtmfMap->name);
-		if (owner && sub->channel_state == INCALL) {
+		if (owner && sub->channel_state == INCALL && !p->hf_detected) {
 			// INCALL
 			send_outgoing_dtmf(sub, owner, dtmf_button, AST_FRAME_DTMF_BEGIN);
 		}
@@ -1964,11 +1964,11 @@ void handle_dtmf(enum LINE_EVENT event,
 		if (p->hf_detected) {
 			ast_debug(2, "DTMF after HF\n");
 			p->hf_detected = 0;
-			/* HF while not in a call doesn't make sense */
 			if (sub->channel_state == INCALL &&
 				(brcm_in_callwaiting(p) || brcm_in_onhold(p) || brcm_in_conference(p))) {
 				handle_hookflash(sub, sub_peer, owner, peer_owner);
 			} else {
+				/* HF while not in a call doesn't make sense */
 				ast_debug(2, "DTMF after HF while not in call. \
 						state: %d, \
 						callwaiting: %d, \
-- 
GitLab