diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c index 339cec0d90..6e299ef159 100644 --- a/channels/chan_misdn.c +++ b/channels/chan_misdn.c @@ -1764,6 +1764,7 @@ static int read_config(struct chan_list *ch, int orig) port=bc->port; + chan_misdn_log(1,port,"read_config: Getting Config\n"); misdn_cfg_get( port, MISDN_CFG_LANGUAGE, lang, BUFFERSIZE); @@ -1780,6 +1781,12 @@ static int read_config(struct chan_list *ch, int orig) misdn_cfg_get( port, MISDN_CFG_SENDDTMF, &bc->send_dtmf, sizeof(int)); + misdn_cfg_get( port, MISDN_CFG_ASTDTMF, &ch->ast_dsp, sizeof(int)); + + if (ch->ast_dsp) { + ch->ignore_dtmf=1; + } + misdn_cfg_get( port, MISDN_CFG_NEED_MORE_INFOS, &bc->need_more_infos, sizeof(int)); misdn_cfg_get( port, MISDN_CFG_NTTIMEOUT, &ch->nttimeout, sizeof(int)); @@ -1954,12 +1961,16 @@ static int read_config(struct chan_list *ch, int orig) ch->overlap_dial_task = -1; - if (ch->faxdetect) { + if (ch->faxdetect || ch->ast_dsp) { misdn_cfg_get( port, MISDN_CFG_FAXDETECT_TIMEOUT, &ch->faxdetect_timeout, sizeof(ch->faxdetect_timeout)); if (!ch->dsp) ch->dsp = ast_dsp_new(); - if (ch->dsp) - ast_dsp_set_features(ch->dsp, DSP_FEATURE_DTMF_DETECT | DSP_FEATURE_FAX_DETECT); + if (ch->dsp) { + if (ch->faxdetect) + ast_dsp_set_features(ch->dsp, DSP_FEATURE_DTMF_DETECT | DSP_FEATURE_FAX_DETECT); + else + ast_dsp_set_features(ch->dsp, DSP_FEATURE_DTMF_DETECT ); + } if (!ch->trans) ch->trans=ast_translator_build_path(AST_FORMAT_SLINEAR, AST_FORMAT_ALAW); } @@ -2649,9 +2660,10 @@ static struct ast_frame *process_ast_dsp(struct chan_list *tmp, struct ast_frame if (tmp->ast_dsp && (f->subclass != 'f')) { chan_misdn_log(2, tmp->bc->port, " --> * SEND: DTMF (AST_DSP) :%c\n", f->subclass); + //ast_queue_frame(tmp->ast, f); } - return frame; + return f; } diff --git a/channels/misdn/chan_misdn_config.h b/channels/misdn/chan_misdn_config.h index eb2b505721..5ced271581 100644 --- a/channels/misdn/chan_misdn_config.h +++ b/channels/misdn/chan_misdn_config.h @@ -48,6 +48,7 @@ enum misdn_cfg_elements { MISDN_CFG_NODIALTONE, /* int (bool) */ MISDN_CFG_IMMEDIATE, /* int (bool) */ MISDN_CFG_SENDDTMF, /* int (bool) */ + MISDN_CFG_ASTDTMF, /* int (bool) */ MISDN_CFG_HOLD_ALLOWED, /* int (bool) */ MISDN_CFG_EARLY_BCONNECT, /* int (bool) */ MISDN_CFG_INCOMING_EARLY_AUDIO, /* int (bool) */ diff --git a/channels/misdn_config.c b/channels/misdn_config.c index 7185dd6a71..6755a5e737 100644 --- a/channels/misdn_config.c +++ b/channels/misdn_config.c @@ -220,6 +220,10 @@ static const struct misdn_cfg_spec port_spec[] = { "\tinstead." }, { "senddtmf", MISDN_CFG_SENDDTMF, MISDN_CTYPE_BOOL, "no", NONE, "Enable this if we should produce DTMF Tones ourselves." }, + { "astdtmf", MISDN_CFG_ASTDTMF, MISDN_CTYPE_BOOL, "no", NONE, + "Enable this if you want to use the Asterisk dtmf detector\n" + "instead of the mISDN_dsp/hfcmulti one." + }, { "hold_allowed", MISDN_CFG_HOLD_ALLOWED, MISDN_CTYPE_BOOL, "no", NONE, "Enable this to have support for hold and retrieve." }, { "early_bconnect", MISDN_CFG_EARLY_BCONNECT, MISDN_CTYPE_BOOL, "yes", NONE,