[Asterisk-Dev] Zaptel DTMF Problem?

Peter Svensson psvasterisk at psv.nu
Sat May 14 11:16:57 MST 2005


On Thu, 21 Apr 2005, Kevin P. Fleming wrote:

> > We see the exact same problem. The dsp seems not to listen to any audio 
> > that comes in on channels that Asterisk originated (in our case via a 
> > Dial() call). Channels that terminate to Asterisk (such as the channel 
> > that called Dial() above) do see dtmf correctly. 
> 
> Well, I won't say "good", because I'm sure you don't like this 
> situation, but if it's reproducible at least we can work on it, which is 
> a step in the right direction. Find me on IRC and let's try to get 
> something going here.

Since Digium seems to have lost interest in this or at least stopped
responding a while back I decided to have a go at it myself. Our 
installation finally works with the latest CVS HEAD version of Asterisk.

The problem is that a pri channel has the dsp disabled until a progress IE
is received with the contents "in band progress is available".  This 
prevents the dsp from being detecting in-band progress tones when oob 
progress information is available anyway which is the right thing to do. 

Unfortunately, if no such progress IE is received, neither as a PROGRESS
nor in the ANSWER message the dsp will never be activated. The attached
patch enable the dsp on ANSWER if not already enabled. Detection of
in band progress messages is disabled if no corresponding IE is included. 
Dtmf detection will thus always be enabled and in band progress detection 
will be enabled only if it should be.

Peter

-------------- next part --------------
--- asterisk/channels/chan_zap.c.ORIG	2005-05-14 15:18:09.000000000 +0200
+++ asterisk/channels/chan_zap.c	2005-05-14 15:20:18.000000000 +0200
@@ -8279,6 +8279,12 @@
 								ast_dsp_set_features(pri->pvts[chanpos]->dsp, pri->pvts[chanpos]->dsp_features);
 								pri->pvts[chanpos]->dsp_features = 0;
 							}
+						} else {
+							/* No progress, how about dtmf? */
+							if(pri->pvts[chanpos]->dsp && pri->pvts[chanpos]->dsp_features) {
+								ast_dsp_set_features(pri->pvts[chanpos]->dsp, pri->pvts[chanpos]->dsp_features & (~DSP_FEATURE_CALL_PROGRESS));
+								pri->pvts[chanpos]->dsp_features = 0;
+							}
 						}
 						if (pri->pvts[chanpos]->realcall && (pri->pvts[chanpos]->realcall->sig == SIG_FXSKS)) {
 							ast_log(LOG_DEBUG, "Starting up GR-303 trunk now that we got CONNECT...\n");


More information about the asterisk-dev mailing list