Index: main/dsp.c =================================================================== --- main/dsp.c (revision 235773) +++ main/dsp.c (working copy) @@ -1376,8 +1376,8 @@ } } - if ((dsp->features & DSP_FEATURE_DIGIT_DETECT)) { - if ((dsp->digitmode & DSP_DIGITMODE_MF)) + if (dsp->features & (DSP_FEATURE_DIGIT_DETECT | DSP_FEATURE_BUSY_DETECT)) { + if (dsp->digitmode & DSP_DIGITMODE_MF) digit = mf_detect(dsp, &dsp->digit_state, shortdata, len, (dsp->digitmode & DSP_DIGITMODE_NOQUELCH) == 0, (dsp->digitmode & DSP_DIGITMODE_RELAXDTMF)); else digit = dtmf_detect(dsp, &dsp->digit_state, shortdata, len, (dsp->digitmode & DSP_DIGITMODE_NOQUELCH) == 0, (dsp->digitmode & DSP_DIGITMODE_RELAXDTMF)); @@ -1389,15 +1389,18 @@ if (!dsp->dtmf_began) { /* We have not reported DTMF_BEGIN for anything yet */ - event = AST_FRAME_DTMF_BEGIN; - event_digit = dsp->digit_state.digits[0]; + if (dsp->features & DSP_FEATURE_DIGIT_DETECT) { + event = AST_FRAME_DTMF_BEGIN; + event_digit = dsp->digit_state.digits[0]; + } dsp->dtmf_began = 1; } else if (dsp->digit_state.current_digits > 1 || digit != dsp->digit_state.digits[0]) { /* Digit changed. This means digit we have reported with DTMF_BEGIN ended */ - - event = AST_FRAME_DTMF_END; - event_digit = dsp->digit_state.digits[0]; + if (dsp->features & DSP_FEATURE_DIGIT_DETECT) { + event = AST_FRAME_DTMF_END; + event_digit = dsp->digit_state.digits[0]; + } memmove(dsp->digit_state.digits, dsp->digit_state.digits + 1, dsp->digit_state.current_digits); dsp->digit_state.current_digits--; dsp->dtmf_began = 0; @@ -1406,6 +1409,7 @@ /* Reset Busy Detector as we have some confirmed activity */ memset(dsp->historicsilence, 0, sizeof(dsp->historicsilence)); memset(dsp->historicnoise, 0, sizeof(dsp->historicnoise)); + ast_debug(1, "DTMF Detected - Reset busydetector\n"); } }